{"version":3,"file":"index-h1A5IisM.cjs","sources":["../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/react-helmet-async/node_modules/react-fast-compare/index.js","../node_modules/invariant/browser.js","../node_modules/shallowequal/index.js","../node_modules/react-helmet-async/lib/index.module.js","../src/utils/loadable.tsx","../src/app/pages/NamespacePage/Loadable.jsx","../src/app/pages/MyWorkspacePage/Loadable.jsx","../src/app/pages/OverviewPage/Loadable.jsx","../src/app/pages/SystemMetricsExplorerPage/Loadable.jsx","../src/app/pages/SettingsPage/Loadable.jsx","../src/app/pages/NotificationsPage/Loadable.jsx","../src/app/pages/NodePage/Loadable.jsx","../src/app/pages/NodePage/RevisionDiffLoadable.jsx","../src/app/pages/SQLBuilderPage/Loadable.jsx","../src/app/pages/CubeBuilderPage/Loadable.jsx","../src/app/pages/QueryPlannerPage/Loadable.jsx","../src/app/pages/TagPage/Loadable.jsx","../src/app/pages/AddEditNodePage/Loadable.jsx","../src/app/pages/AddEditTagPage/Loadable.jsx","../src/app/pages/NotFoundPage/Loadable.tsx","../node_modules/deepmerge/dist/es.js","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/_overArg.js","../node_modules/lodash-es/_getPrototype.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/isPlainObject.js","../node_modules/react-fast-compare/index.js","../node_modules/lodash-es/_listCacheClear.js","../node_modules/lodash-es/eq.js","../node_modules/lodash-es/_assocIndexOf.js","../node_modules/lodash-es/_listCacheDelete.js","../node_modules/lodash-es/_listCacheGet.js","../node_modules/lodash-es/_listCacheHas.js","../node_modules/lodash-es/_listCacheSet.js","../node_modules/lodash-es/_ListCache.js","../node_modules/lodash-es/_stackClear.js","../node_modules/lodash-es/_stackDelete.js","../node_modules/lodash-es/_stackGet.js","../node_modules/lodash-es/_stackHas.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/isFunction.js","../node_modules/lodash-es/_coreJsData.js","../node_modules/lodash-es/_isMasked.js","../node_modules/lodash-es/_toSource.js","../node_modules/lodash-es/_baseIsNative.js","../node_modules/lodash-es/_getValue.js","../node_modules/lodash-es/_getNative.js","../node_modules/lodash-es/_Map.js","../node_modules/lodash-es/_nativeCreate.js","../node_modules/lodash-es/_hashClear.js","../node_modules/lodash-es/_hashDelete.js","../node_modules/lodash-es/_hashGet.js","../node_modules/lodash-es/_hashHas.js","../node_modules/lodash-es/_hashSet.js","../node_modules/lodash-es/_Hash.js","../node_modules/lodash-es/_mapCacheClear.js","../node_modules/lodash-es/_isKeyable.js","../node_modules/lodash-es/_getMapData.js","../node_modules/lodash-es/_mapCacheDelete.js","../node_modules/lodash-es/_mapCacheGet.js","../node_modules/lodash-es/_mapCacheHas.js","../node_modules/lodash-es/_mapCacheSet.js","../node_modules/lodash-es/_MapCache.js","../node_modules/lodash-es/_stackSet.js","../node_modules/lodash-es/_Stack.js","../node_modules/lodash-es/_arrayEach.js","../node_modules/lodash-es/_defineProperty.js","../node_modules/lodash-es/_baseAssignValue.js","../node_modules/lodash-es/_assignValue.js","../node_modules/lodash-es/_copyObject.js","../node_modules/lodash-es/_baseTimes.js","../node_modules/lodash-es/_baseIsArguments.js","../node_modules/lodash-es/isArguments.js","../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/stubFalse.js","../node_modules/lodash-es/isBuffer.js","../node_modules/lodash-es/_isIndex.js","../node_modules/lodash-es/isLength.js","../node_modules/lodash-es/_baseIsTypedArray.js","../node_modules/lodash-es/_baseUnary.js","../node_modules/lodash-es/_nodeUtil.js","../node_modules/lodash-es/isTypedArray.js","../node_modules/lodash-es/_arrayLikeKeys.js","../node_modules/lodash-es/_isPrototype.js","../node_modules/lodash-es/_nativeKeys.js","../node_modules/lodash-es/_baseKeys.js","../node_modules/lodash-es/isArrayLike.js","../node_modules/lodash-es/keys.js","../node_modules/lodash-es/_baseAssign.js","../node_modules/lodash-es/_nativeKeysIn.js","../node_modules/lodash-es/_baseKeysIn.js","../node_modules/lodash-es/keysIn.js","../node_modules/lodash-es/_baseAssignIn.js","../node_modules/lodash-es/_cloneBuffer.js","../node_modules/lodash-es/_copyArray.js","../node_modules/lodash-es/_arrayFilter.js","../node_modules/lodash-es/stubArray.js","../node_modules/lodash-es/_getSymbols.js","../node_modules/lodash-es/_copySymbols.js","../node_modules/lodash-es/_arrayPush.js","../node_modules/lodash-es/_getSymbolsIn.js","../node_modules/lodash-es/_copySymbolsIn.js","../node_modules/lodash-es/_baseGetAllKeys.js","../node_modules/lodash-es/_getAllKeys.js","../node_modules/lodash-es/_getAllKeysIn.js","../node_modules/lodash-es/_DataView.js","../node_modules/lodash-es/_Promise.js","../node_modules/lodash-es/_Set.js","../node_modules/lodash-es/_WeakMap.js","../node_modules/lodash-es/_getTag.js","../node_modules/lodash-es/_initCloneArray.js","../node_modules/lodash-es/_Uint8Array.js","../node_modules/lodash-es/_cloneArrayBuffer.js","../node_modules/lodash-es/_cloneDataView.js","../node_modules/lodash-es/_cloneRegExp.js","../node_modules/lodash-es/_cloneSymbol.js","../node_modules/lodash-es/_cloneTypedArray.js","../node_modules/lodash-es/_initCloneByTag.js","../node_modules/lodash-es/_baseCreate.js","../node_modules/lodash-es/_initCloneObject.js","../node_modules/lodash-es/_baseIsMap.js","../node_modules/lodash-es/isMap.js","../node_modules/lodash-es/_baseIsSet.js","../node_modules/lodash-es/isSet.js","../node_modules/lodash-es/_baseClone.js","../node_modules/lodash-es/clone.js","../node_modules/lodash-es/_arrayMap.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/memoize.js","../node_modules/lodash-es/_memoizeCapped.js","../node_modules/lodash-es/_stringToPath.js","../node_modules/lodash-es/_toKey.js","../node_modules/lodash-es/_baseToString.js","../node_modules/lodash-es/toString.js","../node_modules/lodash-es/toPath.js","../node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/hoist-non-react-statics/node_modules/react-is/index.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/lodash-es/cloneDeep.js","../node_modules/formik/dist/formik.esm.js","../src/app/pages/Root/assets/dj-logo.png","../src/app/icons/LoadingIcon.jsx","../src/app/pages/LoginPage/assets/sign-in-with-github.png","../src/app/pages/LoginPage/assets/sign-in-with-google.png","../node_modules/property-expr/index.js","../node_modules/tiny-case/index.js","../node_modules/toposort/index.js","../node_modules/yup/index.esm.js","../src/app/pages/LoginPage/SignupForm.jsx","../src/app/pages/LoginPage/LoginForm.jsx","../src/app/pages/LoginPage/index.jsx","../src/app/pages/NamespacePage/namespaceOptions.js","../src/app/services/DJService.js","../src/app/providers/djclient.jsx","../src/app/components/buttonStyles.js","../src/app/components/git/gitShape.js","../src/app/components/SplitFilter.jsx","../src/app/components/git/GitSettingsModal.jsx","../src/app/components/git/CreateBranchModal.jsx","../src/app/components/git/SyncToGitModal.jsx","../src/app/components/git/CreatePRModal.jsx","../src/app/components/git/DeleteBranchModal.jsx","../src/app/components/GitMenu.jsx","../src/app/components/NamespaceHeader.jsx","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../node_modules/react-select/dist/useStateManager-7e1e8489.esm.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/@emotion/sheet/dist/emotion-sheet.esm.js","../node_modules/stylis/src/Enum.js","../node_modules/stylis/src/Utility.js","../node_modules/stylis/src/Tokenizer.js","../node_modules/stylis/src/Parser.js","../node_modules/stylis/src/Serializer.js","../node_modules/stylis/src/Middleware.js","../node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","../node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","../node_modules/@emotion/hash/dist/emotion-hash.esm.js","../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../node_modules/@emotion/serialize/dist/emotion-serialize.esm.js","../node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js","../node_modules/@emotion/react/dist/emotion-element-f0de968e.browser.esm.js","../node_modules/@emotion/react/dist/emotion-react.browser.esm.js","../node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js","../node_modules/react-select/dist/index-6ea50319.esm.js","../node_modules/memoize-one/dist/memoize-one.esm.js","../node_modules/react-select/dist/Select-ce3716e1.esm.js","../node_modules/react-select/dist/react-select.esm.js","../src/app/pages/AddEditNodePage/FormikSelect.jsx","../src/app/icons/ValidIcon.jsx","../src/app/icons/AlertIcon.jsx","../src/utils/form.jsx","../src/app/pages/RegisterTablePage/index.jsx","../src/app/icons/DJLogo.jsx","../src/app/components/Search.jsx","../src/app/providers/UserProvider.tsx","../src/app/icons/NotificationIcon.jsx","../src/app/icons/SettingsIcon.jsx","../src/app/utils/date.js","../src/app/components/NotificationBell.tsx","../src/app/components/UserMenu.tsx","../src/app/pages/Root/index.tsx","../node_modules/cookie/index.js","../node_modules/universal-cookie/es6/utils.js","../node_modules/universal-cookie/es6/Cookies.js","../node_modules/react-cookie/es6/CookiesContext.js","../node_modules/react-cookie/es6/CookiesProvider.js","../node_modules/react-cookie/es6/utils.js","../node_modules/react-cookie/es6/useCookies.js","../src/app/constants.js","../src/app/index.tsx","../src/app/components/Tab.jsx","../node_modules/react-syntax-highlighter/dist/esm/create-element.js","../node_modules/react-syntax-highlighter/dist/esm/checkForListedLanguage.js","../node_modules/react-syntax-highlighter/dist/esm/highlight.js","../node_modules/highlight.js/lib/core.js","../node_modules/format/format.js","../node_modules/fault/index.js","../node_modules/lowlight/lib/core.js","../node_modules/highlight.js/lib/languages/sql.js","../node_modules/react-syntax-highlighter/dist/esm/light.js","../node_modules/react-syntax-highlighter/dist/esm/styles/hljs/foundation.js","../src/app/icons/InvalidIcon.jsx","../src/app/components/Tooltip.jsx","../src/app/pages/NodePage/NodeStatus.jsx","../node_modules/comma-separated-tokens/index.js","../node_modules/estree-util-is-identifier-name/lib/index.js","../node_modules/hast-util-whitespace/lib/index.js","../node_modules/property-information/lib/util/schema.js","../node_modules/property-information/lib/util/merge.js","../node_modules/property-information/lib/normalize.js","../node_modules/property-information/lib/util/info.js","../node_modules/property-information/lib/util/types.js","../node_modules/property-information/lib/util/defined-info.js","../node_modules/property-information/lib/util/create.js","../node_modules/property-information/lib/aria.js","../node_modules/property-information/lib/util/case-sensitive-transform.js","../node_modules/property-information/lib/util/case-insensitive-transform.js","../node_modules/property-information/lib/html.js","../node_modules/property-information/lib/svg.js","../node_modules/property-information/lib/xlink.js","../node_modules/property-information/lib/xmlns.js","../node_modules/property-information/lib/xml.js","../node_modules/property-information/lib/hast-to-react.js","../node_modules/property-information/lib/find.js","../node_modules/property-information/index.js","../node_modules/space-separated-tokens/index.js","../node_modules/inline-style-parser/cjs/index.js","../node_modules/style-to-object/cjs/index.js","../node_modules/style-to-js/cjs/utilities.js","../node_modules/style-to-js/cjs/index.js","../node_modules/unist-util-position/lib/index.js","../node_modules/unist-util-stringify-position/lib/index.js","../node_modules/vfile-message/lib/index.js","../node_modules/hast-util-to-jsx-runtime/lib/index.js","../node_modules/html-url-attributes/lib/index.js","../node_modules/mdast-util-to-string/lib/index.js","../node_modules/decode-named-character-reference/index.dom.js","../node_modules/micromark-util-chunked/index.js","../node_modules/micromark-util-combine-extensions/index.js","../node_modules/micromark-util-decode-numeric-character-reference/index.js","../node_modules/micromark-util-normalize-identifier/index.js","../node_modules/micromark-util-character/index.js","../node_modules/micromark-util-sanitize-uri/index.js","../node_modules/micromark-factory-space/index.js","../node_modules/micromark/lib/initialize/content.js","../node_modules/micromark/lib/initialize/document.js","../node_modules/micromark-util-classify-character/index.js","../node_modules/micromark-util-resolve-all/index.js","../node_modules/micromark-core-commonmark/lib/attention.js","../node_modules/micromark-core-commonmark/lib/autolink.js","../node_modules/micromark-core-commonmark/lib/blank-line.js","../node_modules/micromark-core-commonmark/lib/block-quote.js","../node_modules/micromark-core-commonmark/lib/character-escape.js","../node_modules/micromark-core-commonmark/lib/character-reference.js","../node_modules/micromark-core-commonmark/lib/code-fenced.js","../node_modules/micromark-core-commonmark/lib/code-indented.js","../node_modules/micromark-core-commonmark/lib/code-text.js","../node_modules/micromark-util-subtokenize/lib/splice-buffer.js","../node_modules/micromark-util-subtokenize/index.js","../node_modules/micromark-core-commonmark/lib/content.js","../node_modules/micromark-factory-destination/index.js","../node_modules/micromark-factory-label/index.js","../node_modules/micromark-factory-title/index.js","../node_modules/micromark-factory-whitespace/index.js","../node_modules/micromark-core-commonmark/lib/definition.js","../node_modules/micromark-core-commonmark/lib/hard-break-escape.js","../node_modules/micromark-core-commonmark/lib/heading-atx.js","../node_modules/micromark-util-html-tag-name/index.js","../node_modules/micromark-core-commonmark/lib/html-flow.js","../node_modules/micromark-core-commonmark/lib/html-text.js","../node_modules/micromark-core-commonmark/lib/label-end.js","../node_modules/micromark-core-commonmark/lib/label-start-image.js","../node_modules/micromark-core-commonmark/lib/label-start-link.js","../node_modules/micromark-core-commonmark/lib/line-ending.js","../node_modules/micromark-core-commonmark/lib/thematic-break.js","../node_modules/micromark-core-commonmark/lib/list.js","../node_modules/micromark-core-commonmark/lib/setext-underline.js","../node_modules/micromark/lib/initialize/flow.js","../node_modules/micromark/lib/initialize/text.js","../node_modules/micromark/lib/constructs.js","../node_modules/micromark/lib/create-tokenizer.js","../node_modules/micromark/lib/parse.js","../node_modules/micromark/lib/postprocess.js","../node_modules/micromark/lib/preprocess.js","../node_modules/micromark-util-decode-string/index.js","../node_modules/mdast-util-from-markdown/lib/index.js","../node_modules/remark-parse/lib/index.js","../node_modules/mdast-util-to-hast/lib/handlers/blockquote.js","../node_modules/mdast-util-to-hast/lib/handlers/break.js","../node_modules/mdast-util-to-hast/lib/handlers/code.js","../node_modules/mdast-util-to-hast/lib/handlers/delete.js","../node_modules/mdast-util-to-hast/lib/handlers/emphasis.js","../node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js","../node_modules/mdast-util-to-hast/lib/handlers/heading.js","../node_modules/mdast-util-to-hast/lib/handlers/html.js","../node_modules/mdast-util-to-hast/lib/revert.js","../node_modules/mdast-util-to-hast/lib/handlers/image-reference.js","../node_modules/mdast-util-to-hast/lib/handlers/image.js","../node_modules/mdast-util-to-hast/lib/handlers/inline-code.js","../node_modules/mdast-util-to-hast/lib/handlers/link-reference.js","../node_modules/mdast-util-to-hast/lib/handlers/link.js","../node_modules/mdast-util-to-hast/lib/handlers/list-item.js","../node_modules/mdast-util-to-hast/lib/handlers/list.js","../node_modules/mdast-util-to-hast/lib/handlers/paragraph.js","../node_modules/mdast-util-to-hast/lib/handlers/root.js","../node_modules/mdast-util-to-hast/lib/handlers/strong.js","../node_modules/mdast-util-to-hast/lib/handlers/table.js","../node_modules/mdast-util-to-hast/lib/handlers/table-row.js","../node_modules/mdast-util-to-hast/lib/handlers/table-cell.js","../node_modules/trim-lines/index.js","../node_modules/mdast-util-to-hast/lib/handlers/text.js","../node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js","../node_modules/mdast-util-to-hast/lib/handlers/index.js","../node_modules/mdast-util-to-hast/node_modules/@ungap/structured-clone/esm/types.js","../node_modules/mdast-util-to-hast/node_modules/@ungap/structured-clone/esm/deserialize.js","../node_modules/mdast-util-to-hast/node_modules/@ungap/structured-clone/esm/serialize.js","../node_modules/mdast-util-to-hast/node_modules/@ungap/structured-clone/esm/index.js","../node_modules/mdast-util-to-hast/lib/footer.js","../node_modules/unist-util-is/lib/index.js","../node_modules/unist-util-visit-parents/lib/index.js","../node_modules/unist-util-visit/lib/index.js","../node_modules/mdast-util-to-hast/lib/state.js","../node_modules/mdast-util-to-hast/lib/index.js","../node_modules/remark-rehype/lib/index.js","../node_modules/bail/index.js","../node_modules/extend/index.js","../node_modules/is-plain-obj/index.js","../node_modules/trough/lib/index.js","../node_modules/vfile/lib/minpath.browser.js","../node_modules/vfile/lib/minproc.browser.js","../node_modules/vfile/lib/minurl.shared.js","../node_modules/vfile/lib/minurl.browser.js","../node_modules/vfile/lib/index.js","../node_modules/unified/lib/callable-instance.js","../node_modules/unified/lib/index.js","../node_modules/react-markdown/lib/index.js","../src/app/components/ListGroupItem.jsx","../src/app/pages/NodePage/NodeInfoTab.jsx","../src/app/icons/EditIcon.jsx","../src/app/pages/NodePage/EditColumnPopover.jsx","../src/app/pages/NodePage/EditColumnDescriptionPopover.jsx","../src/app/pages/NodePage/ManageDimensionLinksDialog.jsx","../src/app/icons/AddItemIcon.jsx","../node_modules/@marijn/find-cluster-break/src/index.js","../node_modules/@codemirror/state/dist/index.js","../node_modules/style-mod/src/style-mod.js","../node_modules/w3c-keyname/index.js","../node_modules/crelt/index.js","../node_modules/@codemirror/view/dist/index.js","../node_modules/@lezer/common/dist/index.js","../node_modules/@lezer/highlight/dist/index.js","../node_modules/@codemirror/language/dist/index.js","../node_modules/@codemirror/commands/dist/index.js","../node_modules/@codemirror/search/dist/index.js","../node_modules/@codemirror/autocomplete/dist/index.js","../node_modules/@codemirror/lint/dist/index.js","../node_modules/@uiw/codemirror-extensions-basic-setup/esm/index.js","../node_modules/@codemirror/theme-one-dark/dist/index.js","../node_modules/@uiw/react-codemirror/esm/theme/light.js","../node_modules/@uiw/react-codemirror/esm/getDefaultExtensions.js","../node_modules/@uiw/react-codemirror/esm/utils.js","../node_modules/@uiw/react-codemirror/esm/useCodeMirror.js","../node_modules/@uiw/react-codemirror/esm/index.js","../node_modules/@codemirror/language-data/dist/index.js","../node_modules/@lezer/markdown/dist/index.js","../node_modules/@lezer/lr/dist/index.js","../node_modules/@lezer/html/dist/index.js","../node_modules/@lezer/css/dist/index.js","../node_modules/@codemirror/lang-css/dist/index.js","../node_modules/@lezer/javascript/dist/index.js","../node_modules/@codemirror/lang-javascript/dist/index.js","../node_modules/@codemirror/lang-html/dist/index.js","../node_modules/@codemirror/lang-markdown/dist/index.js","../node_modules/@codemirror/lang-less/dist/index.js","../node_modules/@lezer/sass/dist/index.js","../node_modules/@codemirror/lang-sass/dist/index.js","../node_modules/@lezer/json/dist/index.js","../node_modules/@codemirror/lang-json/dist/index.js","../node_modules/codemirror-lang-mermaid/dist/index.js","../node_modules/@lezer/python/dist/index.js","../node_modules/@codemirror/lang-python/dist/index.js","../node_modules/@lezer/xml/dist/index.js","../node_modules/@codemirror/lang-xml/dist/index.js","../node_modules/@codemirror/lang-sql/dist/index.js","../node_modules/@lezer/java/dist/index.js","../node_modules/@codemirror/lang-java/dist/index.js","../node_modules/@lezer/rust/dist/index.js","../node_modules/@codemirror/lang-rust/dist/index.js","../node_modules/@lezer/cpp/dist/index.js","../node_modules/@codemirror/lang-cpp/dist/index.js","../node_modules/@lezer/lezer/dist/index.js","../node_modules/@codemirror/lang-lezer/dist/index.js","../node_modules/@lezer/php/dist/index.js","../node_modules/@codemirror/lang-php/dist/index.js","../node_modules/@codemirror/lang-wast/dist/index.js","../node_modules/@codemirror/lang-vue/dist/index.js","../node_modules/@codemirror/lang-angular/dist/index.js","../node_modules/@replit/codemirror-lang-nix/dist/index.js","../node_modules/@replit/codemirror-lang-svelte/dist/index.js","../node_modules/@replit/codemirror-lang-csharp/dist/index.js","../node_modules/@replit/codemirror-lang-solidity/dist/index.js","../node_modules/@codemirror/legacy-modes/mode/apl.js","../node_modules/@codemirror/legacy-modes/mode/asciiarmor.js","../node_modules/@codemirror/legacy-modes/mode/asterisk.js","../node_modules/@codemirror/legacy-modes/mode/brainfuck.js","../node_modules/@codemirror/legacy-modes/mode/clike.js","../node_modules/@nextjournal/lezer-clojure/dist/index.es.js","../node_modules/@nextjournal/lang-clojure/dist/index.js","../node_modules/@codemirror/legacy-modes/mode/cmake.js","../node_modules/@codemirror/legacy-modes/mode/cobol.js","../node_modules/@codemirror/legacy-modes/mode/coffeescript.js","../node_modules/@codemirror/legacy-modes/mode/commonlisp.js","../node_modules/@codemirror/legacy-modes/mode/crystal.js","../node_modules/@codemirror/legacy-modes/mode/cypher.js","../node_modules/@codemirror/legacy-modes/mode/d.js","../node_modules/@codemirror/legacy-modes/mode/diff.js","../node_modules/@codemirror/legacy-modes/mode/simple-mode.js","../node_modules/@codemirror/legacy-modes/mode/dockerfile.js","../node_modules/@codemirror/legacy-modes/mode/dtd.js","../node_modules/@codemirror/legacy-modes/mode/dylan.js","../node_modules/@codemirror/legacy-modes/mode/ebnf.js","../node_modules/@codemirror/legacy-modes/mode/ecl.js","../node_modules/@codemirror/legacy-modes/mode/eiffel.js","../node_modules/@codemirror/legacy-modes/mode/elm.js","../node_modules/@codemirror/legacy-modes/mode/erlang.js","../node_modules/@codemirror/legacy-modes/mode/factor.js","../node_modules/@codemirror/legacy-modes/mode/fcl.js","../node_modules/@codemirror/legacy-modes/mode/forth.js","../node_modules/@codemirror/legacy-modes/mode/fortran.js","../node_modules/@codemirror/legacy-modes/mode/gas.js","../node_modules/@codemirror/legacy-modes/mode/gherkin.js","../node_modules/@codemirror/legacy-modes/mode/go.js","../node_modules/@codemirror/legacy-modes/mode/groovy.js","../node_modules/@codemirror/legacy-modes/mode/haskell.js","../node_modules/@codemirror/legacy-modes/mode/haxe.js","../node_modules/@codemirror/legacy-modes/mode/http.js","../node_modules/@codemirror/legacy-modes/mode/idl.js","../node_modules/@codemirror/legacy-modes/mode/jinja2.js","../node_modules/@codemirror/legacy-modes/mode/julia.js","../node_modules/@codemirror/legacy-modes/mode/livescript.js","../node_modules/@codemirror/legacy-modes/mode/lua.js","../node_modules/@codemirror/legacy-modes/mode/mathematica.js","../node_modules/@codemirror/legacy-modes/mode/mbox.js","../node_modules/@codemirror/legacy-modes/mode/mirc.js","../node_modules/@codemirror/legacy-modes/mode/modelica.js","../node_modules/@codemirror/legacy-modes/mode/mscgen.js","../node_modules/@codemirror/legacy-modes/mode/mumps.js","../node_modules/@codemirror/legacy-modes/mode/nginx.js","../node_modules/@codemirror/legacy-modes/mode/nsis.js","../node_modules/@codemirror/legacy-modes/mode/ntriples.js","../node_modules/@codemirror/legacy-modes/mode/octave.js","../node_modules/@codemirror/legacy-modes/mode/oz.js","../node_modules/@codemirror/legacy-modes/mode/pascal.js","../node_modules/@codemirror/legacy-modes/mode/perl.js","../node_modules/@codemirror/legacy-modes/mode/pig.js","../node_modules/@codemirror/legacy-modes/mode/powershell.js","../node_modules/@codemirror/legacy-modes/mode/properties.js","../node_modules/@codemirror/legacy-modes/mode/protobuf.js","../node_modules/@codemirror/legacy-modes/mode/puppet.js","../node_modules/@codemirror/legacy-modes/mode/q.js","../node_modules/@codemirror/legacy-modes/mode/r.js","../node_modules/@codemirror/legacy-modes/mode/ruby.js","../node_modules/@codemirror/legacy-modes/mode/sas.js","../node_modules/@codemirror/legacy-modes/mode/scheme.js","../node_modules/@codemirror/legacy-modes/mode/shell.js","../node_modules/@codemirror/legacy-modes/mode/sieve.js","../node_modules/@codemirror/legacy-modes/mode/smalltalk.js","../node_modules/@codemirror/legacy-modes/mode/solr.js","../node_modules/@codemirror/legacy-modes/mode/sparql.js","../node_modules/@codemirror/legacy-modes/mode/spreadsheet.js","../node_modules/@codemirror/legacy-modes/mode/stex.js","../node_modules/@codemirror/legacy-modes/mode/stylus.js","../node_modules/@codemirror/legacy-modes/mode/swift.js","../node_modules/@codemirror/legacy-modes/mode/tcl.js","../node_modules/@codemirror/legacy-modes/mode/textile.js","../node_modules/@codemirror/legacy-modes/mode/tiddlywiki.js","../node_modules/@codemirror/legacy-modes/mode/tiki.js","../node_modules/@codemirror/legacy-modes/mode/toml.js","../node_modules/@codemirror/legacy-modes/mode/troff.js","../node_modules/@codemirror/legacy-modes/mode/ttcn.js","../node_modules/@codemirror/legacy-modes/mode/turtle.js","../node_modules/@codemirror/legacy-modes/mode/vb.js","../node_modules/@codemirror/legacy-modes/mode/vbscript.js","../node_modules/@codemirror/legacy-modes/mode/velocity.js","../node_modules/@codemirror/legacy-modes/mode/verilog.js","../node_modules/@codemirror/legacy-modes/mode/vhdl.js","../node_modules/@codemirror/legacy-modes/mode/webidl.js","../node_modules/@codemirror/legacy-modes/mode/xquery.js","../node_modules/@codemirror/legacy-modes/mode/yacas.js","../node_modules/@codemirror/legacy-modes/mode/yaml.js","../node_modules/@codemirror/legacy-modes/mode/z80.js","../node_modules/@uiw/codemirror-extensions-langs/esm/index.js","../src/app/pages/NodePage/AddComplexDimensionLinkPopover.jsx","../src/app/pages/NodePage/PartitionColumnPopover.jsx","../src/app/pages/NodePage/NodeColumnTab.jsx","../node_modules/recharts/node_modules/clsx/dist/clsx.mjs","../node_modules/es-toolkit/dist/_internal/isUnsafeProperty.js","../node_modules/es-toolkit/dist/compat/_internal/isDeepKey.js","../node_modules/es-toolkit/dist/compat/_internal/toKey.js","../node_modules/es-toolkit/dist/compat/util/toString.js","../node_modules/es-toolkit/dist/compat/util/toPath.js","../node_modules/es-toolkit/dist/compat/object/get.js","../node_modules/es-toolkit/compat/get.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/index.js","../node_modules/recharts/es6/util/DataUtils.js","../node_modules/recharts/es6/util/types.js","../node_modules/recharts/es6/util/ReactUtils.js","../node_modules/recharts/es6/container/Surface.js","../node_modules/recharts/es6/container/Layer.js","../node_modules/recharts/es6/context/legendPortalContext.js","../node_modules/d3-shape/src/constant.js","../node_modules/d3-path/src/path.js","../node_modules/d3-shape/src/path.js","../node_modules/d3-shape/src/array.js","../node_modules/d3-shape/src/curve/linear.js","../node_modules/d3-shape/src/point.js","../node_modules/d3-shape/src/line.js","../node_modules/d3-shape/src/area.js","../node_modules/d3-shape/src/curve/bump.js","../node_modules/d3-shape/src/noop.js","../node_modules/d3-shape/src/curve/basis.js","../node_modules/d3-shape/src/curve/basisClosed.js","../node_modules/d3-shape/src/curve/basisOpen.js","../node_modules/d3-shape/src/curve/linearClosed.js","../node_modules/d3-shape/src/curve/monotone.js","../node_modules/d3-shape/src/curve/natural.js","../node_modules/d3-shape/src/curve/step.js","../node_modules/d3-shape/src/offset/none.js","../node_modules/d3-shape/src/order/none.js","../node_modules/d3-shape/src/stack.js","../node_modules/d3-shape/src/offset/expand.js","../node_modules/d3-shape/src/offset/silhouette.js","../node_modules/d3-shape/src/offset/wiggle.js","../node_modules/es-toolkit/dist/array/uniqBy.js","../node_modules/es-toolkit/dist/function/identity.js","../node_modules/es-toolkit/dist/predicate/isLength.js","../node_modules/es-toolkit/dist/compat/predicate/isArrayLike.js","../node_modules/es-toolkit/dist/compat/predicate/isObjectLike.js","../node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.js","../node_modules/es-toolkit/dist/compat/object/property.js","../node_modules/es-toolkit/dist/compat/predicate/isObject.js","../node_modules/es-toolkit/dist/predicate/isPrimitive.js","../node_modules/es-toolkit/dist/compat/util/eq.js","../node_modules/es-toolkit/dist/compat/predicate/isMatchWith.js","../node_modules/es-toolkit/dist/compat/predicate/isMatch.js","../node_modules/es-toolkit/dist/compat/_internal/getSymbols.js","../node_modules/es-toolkit/dist/compat/_internal/getTag.js","../node_modules/es-toolkit/dist/compat/_internal/tags.js","../node_modules/es-toolkit/dist/predicate/isTypedArray.js","../node_modules/es-toolkit/dist/object/cloneDeepWith.js","../node_modules/es-toolkit/dist/object/cloneDeep.js","../node_modules/es-toolkit/dist/compat/predicate/matches.js","../node_modules/es-toolkit/dist/compat/object/cloneDeepWith.js","../node_modules/es-toolkit/dist/compat/object/cloneDeep.js","../node_modules/es-toolkit/dist/compat/_internal/isIndex.js","../node_modules/es-toolkit/dist/compat/predicate/isArguments.js","../node_modules/es-toolkit/dist/compat/object/has.js","../node_modules/es-toolkit/dist/compat/predicate/matchesProperty.js","../node_modules/es-toolkit/dist/compat/util/iteratee.js","../node_modules/es-toolkit/dist/compat/array/uniqBy.js","../node_modules/es-toolkit/compat/uniqBy.js","../node_modules/recharts/es6/util/payload/getUniqPayload.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../node_modules/use-sync-external-store/shim/index.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js","../node_modules/use-sync-external-store/shim/with-selector.js","../node_modules/recharts/es6/state/RechartsReduxContext.js","../node_modules/recharts/es6/state/hooks.js","../node_modules/reselect/dist/reselect.mjs","../node_modules/es-toolkit/dist/compat/_internal/compareValues.js","../node_modules/es-toolkit/dist/compat/predicate/isSymbol.js","../node_modules/es-toolkit/dist/compat/_internal/isKey.js","../node_modules/es-toolkit/dist/compat/array/orderBy.js","../node_modules/es-toolkit/dist/array/flatten.js","../node_modules/es-toolkit/dist/compat/_internal/isIterateeCall.js","../node_modules/es-toolkit/dist/compat/array/sortBy.js","../node_modules/es-toolkit/compat/sortBy.js","../node_modules/recharts/es6/state/selectors/legendSelectors.js","../node_modules/recharts/es6/util/useElementOffset.js","../node_modules/recharts/es6/state/layoutSlice.js","../node_modules/recharts/es6/util/PolarUtils.js","../node_modules/recharts/es6/util/ChartUtils.js","../node_modules/recharts/es6/state/selectors/containerSelectors.js","../node_modules/recharts/es6/state/selectors/selectAllAxes.js","../node_modules/recharts/es6/util/Constants.js","../node_modules/recharts/es6/state/selectors/selectChartOffset.js","../node_modules/recharts/es6/context/PanoramaContext.js","../node_modules/recharts/es6/state/selectors/brushSelectors.js","../node_modules/recharts/es6/context/chartLayoutContext.js","../node_modules/immer/dist/immer.mjs","../node_modules/recharts/es6/state/legendSlice.js","../node_modules/recharts/es6/component/DefaultTooltipContent.js","../node_modules/recharts/es6/util/tooltip/translate.js","../node_modules/recharts/es6/component/TooltipBoundingBox.js","../node_modules/recharts/es6/util/Global.js","../node_modules/recharts/es6/context/accessibilityContext.js","../node_modules/recharts/es6/util/isWellBehavedNumber.js","../node_modules/recharts/es6/shape/Curve.js","../node_modules/recharts/es6/shape/Cross.js","../node_modules/recharts/es6/util/cursor/getCursorRectangle.js","../node_modules/recharts/es6/util/resolveDefaultProps.js","../node_modules/es-toolkit/dist/predicate/isPlainObject.js","../node_modules/es-toolkit/dist/predicate/isEqualWith.js","../node_modules/es-toolkit/dist/function/noop.js","../node_modules/es-toolkit/dist/predicate/isEqual.js","../node_modules/es-toolkit/compat/isEqual.js","../node_modules/recharts/es6/animation/AnimationManager.js","../node_modules/recharts/es6/animation/easing.js","../node_modules/recharts/es6/animation/util.js","../node_modules/recharts/es6/animation/configUpdate.js","../node_modules/recharts/es6/animation/timeoutController.js","../node_modules/recharts/es6/animation/Animate.js","../node_modules/recharts/es6/shape/Rectangle.js","../node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js","../node_modules/recharts/es6/shape/Sector.js","../node_modules/recharts/es6/util/cursor/getCursorPoints.js","../node_modules/es-toolkit/dist/compat/util/toNumber.js","../node_modules/es-toolkit/dist/compat/util/toFinite.js","../node_modules/es-toolkit/dist/compat/math/range.js","../node_modules/es-toolkit/compat/range.js","../node_modules/d3-array/src/ascending.js","../node_modules/d3-array/src/descending.js","../node_modules/d3-array/src/bisector.js","../node_modules/d3-array/src/number.js","../node_modules/d3-array/src/bisect.js","../node_modules/internmap/src/index.js","../node_modules/d3-array/src/sort.js","../node_modules/d3-array/src/ticks.js","../node_modules/d3-array/src/max.js","../node_modules/d3-array/src/min.js","../node_modules/d3-array/src/quickselect.js","../node_modules/d3-array/src/quantile.js","../node_modules/d3-array/src/range.js","../node_modules/d3-scale/src/init.js","../node_modules/d3-scale/src/ordinal.js","../node_modules/d3-scale/src/band.js","../node_modules/d3-color/src/define.js","../node_modules/d3-color/src/color.js","../node_modules/d3-interpolate/src/constant.js","../node_modules/d3-interpolate/src/color.js","../node_modules/d3-interpolate/src/rgb.js","../node_modules/d3-interpolate/src/numberArray.js","../node_modules/d3-interpolate/src/array.js","../node_modules/d3-interpolate/src/date.js","../node_modules/d3-interpolate/src/number.js","../node_modules/d3-interpolate/src/object.js","../node_modules/d3-interpolate/src/string.js","../node_modules/d3-interpolate/src/value.js","../node_modules/d3-interpolate/src/round.js","../node_modules/d3-interpolate/src/transform/decompose.js","../node_modules/d3-interpolate/src/transform/parse.js","../node_modules/d3-interpolate/src/transform/index.js","../node_modules/d3-interpolate/src/zoom.js","../node_modules/d3-interpolate/src/piecewise.js","../node_modules/d3-scale/src/constant.js","../node_modules/d3-scale/src/number.js","../node_modules/d3-scale/src/continuous.js","../node_modules/d3-format/src/formatDecimal.js","../node_modules/d3-format/src/exponent.js","../node_modules/d3-format/src/formatGroup.js","../node_modules/d3-format/src/formatNumerals.js","../node_modules/d3-format/src/formatSpecifier.js","../node_modules/d3-format/src/formatTrim.js","../node_modules/d3-format/src/formatPrefixAuto.js","../node_modules/d3-format/src/formatRounded.js","../node_modules/d3-format/src/formatTypes.js","../node_modules/d3-format/src/identity.js","../node_modules/d3-format/src/locale.js","../node_modules/d3-format/src/defaultLocale.js","../node_modules/d3-format/src/precisionFixed.js","../node_modules/d3-format/src/precisionPrefix.js","../node_modules/d3-format/src/precisionRound.js","../node_modules/d3-scale/src/tickFormat.js","../node_modules/d3-scale/src/linear.js","../node_modules/d3-scale/src/identity.js","../node_modules/d3-scale/src/nice.js","../node_modules/d3-scale/src/log.js","../node_modules/d3-scale/src/symlog.js","../node_modules/d3-scale/src/pow.js","../node_modules/d3-scale/src/radial.js","../node_modules/d3-scale/src/quantile.js","../node_modules/d3-scale/src/quantize.js","../node_modules/d3-scale/src/threshold.js","../node_modules/d3-time/src/interval.js","../node_modules/d3-time/src/millisecond.js","../node_modules/d3-time/src/duration.js","../node_modules/d3-time/src/second.js","../node_modules/d3-time/src/minute.js","../node_modules/d3-time/src/hour.js","../node_modules/d3-time/src/day.js","../node_modules/d3-time/src/week.js","../node_modules/d3-time/src/month.js","../node_modules/d3-time/src/year.js","../node_modules/d3-time/src/ticks.js","../node_modules/d3-time-format/src/locale.js","../node_modules/d3-time-format/src/defaultLocale.js","../node_modules/d3-scale/src/time.js","../node_modules/d3-scale/src/utcTime.js","../node_modules/d3-scale/src/sequential.js","../node_modules/d3-scale/src/sequentialQuantile.js","../node_modules/d3-scale/src/diverging.js","../node_modules/recharts/es6/state/selectors/dataSelectors.js","../node_modules/recharts/es6/util/isDomainSpecifiedByUser.js","../node_modules/decimal.js-light/decimal.mjs","../node_modules/recharts/es6/util/scale/util/utils.js","../node_modules/recharts/es6/util/scale/util/arithmetic.js","../node_modules/recharts/es6/util/scale/getNiceTickValues.js","../node_modules/recharts/es6/state/selectors/rootPropsSelectors.js","../node_modules/recharts/es6/polar/defaultPolarAngleAxisProps.js","../node_modules/recharts/es6/polar/defaultPolarRadiusAxisProps.js","../node_modules/recharts/es6/state/selectors/combiners/combineAxisRangeWithReverse.js","../node_modules/recharts/es6/state/selectors/polarAxisSelectors.js","../node_modules/recharts/es6/state/selectors/pickAxisType.js","../node_modules/recharts/es6/state/selectors/pickAxisId.js","../node_modules/recharts/es6/state/selectors/axisSelectors.js","../node_modules/recharts/es6/state/selectors/selectTooltipEventType.js","../node_modules/recharts/es6/state/selectors/combiners/combineActiveLabel.js","../node_modules/recharts/es6/state/selectors/selectTooltipSettings.js","../node_modules/recharts/es6/state/tooltipSlice.js","../node_modules/recharts/es6/state/selectors/combiners/combineTooltipInteractionState.js","../node_modules/recharts/es6/state/selectors/combiners/combineActiveTooltipIndex.js","../node_modules/recharts/es6/state/selectors/combiners/combineCoordinateForDefaultIndex.js","../node_modules/recharts/es6/state/selectors/combiners/combineTooltipPayloadConfigurations.js","../node_modules/recharts/es6/state/selectors/selectTooltipPayloadSearcher.js","../node_modules/recharts/es6/state/selectors/selectTooltipState.js","../node_modules/recharts/es6/state/selectors/tooltipSelectors.js","../node_modules/recharts/es6/context/useTooltipAxis.js","../node_modules/recharts/es6/state/selectors/selectors.js","../node_modules/recharts/es6/component/Cursor.js","../node_modules/recharts/es6/context/tooltipPortalContext.js","../node_modules/eventemitter3/index.js","../node_modules/recharts/es6/util/Events.js","../node_modules/recharts/es6/state/optionsSlice.js","../node_modules/recharts/es6/synchronisation/syncSelectors.js","../node_modules/recharts/es6/state/chartDataSlice.js","../node_modules/recharts/es6/synchronisation/useChartSynchronisation.js","../node_modules/recharts/es6/component/Tooltip.js","../node_modules/es-toolkit/dist/array/maxBy.js","../node_modules/es-toolkit/dist/compat/math/maxBy.js","../node_modules/es-toolkit/compat/maxBy.js","../node_modules/recharts/es6/state/polarAxisSlice.js","../node_modules/recharts/es6/state/graphicalItemsSlice.js","../node_modules/recharts/es6/state/SetTooltipEntrySettings.js","../node_modules/recharts/es6/context/chartDataContext.js","../node_modules/recharts/es6/state/brushSlice.js","../node_modules/recharts/es6/state/referenceElementsSlice.js","../node_modules/recharts/es6/util/ShallowEqual.js","../node_modules/recharts/es6/state/cartesianAxisSlice.js","../node_modules/recharts/es6/state/selectors/selectActivePropsFromChartPointer.js","../node_modules/recharts/es6/util/getChartPointer.js","../node_modules/recharts/es6/state/mouseEventsMiddleware.js","../node_modules/recharts/es6/state/reduxDevtoolsJsonStringifyReplacer.js","../node_modules/recharts/es6/state/rootPropsSlice.js","../node_modules/recharts/es6/state/polarOptionsSlice.js","../node_modules/recharts/es6/state/keyboardEventsMiddleware.js","../node_modules/recharts/es6/state/externalEventsMiddleware.js","../node_modules/recharts/es6/state/selectors/touchSelectors.js","../node_modules/recharts/es6/state/touchEventsMiddleware.js","../node_modules/recharts/es6/state/store.js","../node_modules/recharts/es6/state/RechartsStoreProvider.js","../node_modules/recharts/es6/util/useReportScale.js","../node_modules/recharts/es6/chart/RechartsWrapper.js","../node_modules/es-toolkit/dist/compat/math/sumBy.js","../node_modules/es-toolkit/compat/sumBy.js","../node_modules/recharts/es6/chart/Sankey.js","../src/app/pages/NodePage/NodeDataFlowTab.jsx","../node_modules/classcat/index.js","../node_modules/zustand/esm/vanilla.mjs","../node_modules/zustand/esm/traditional.mjs","../node_modules/zustand/esm/shallow.mjs","../node_modules/d3-dispatch/src/dispatch.js","../node_modules/d3-selection/src/namespaces.js","../node_modules/d3-selection/src/namespace.js","../node_modules/d3-selection/src/creator.js","../node_modules/d3-selection/src/selector.js","../node_modules/d3-selection/src/selection/select.js","../node_modules/d3-selection/src/array.js","../node_modules/d3-selection/src/selectorAll.js","../node_modules/d3-selection/src/selection/selectAll.js","../node_modules/d3-selection/src/matcher.js","../node_modules/d3-selection/src/selection/selectChild.js","../node_modules/d3-selection/src/selection/selectChildren.js","../node_modules/d3-selection/src/selection/filter.js","../node_modules/d3-selection/src/selection/sparse.js","../node_modules/d3-selection/src/selection/enter.js","../node_modules/d3-selection/src/constant.js","../node_modules/d3-selection/src/selection/data.js","../node_modules/d3-selection/src/selection/exit.js","../node_modules/d3-selection/src/selection/join.js","../node_modules/d3-selection/src/selection/merge.js","../node_modules/d3-selection/src/selection/order.js","../node_modules/d3-selection/src/selection/sort.js","../node_modules/d3-selection/src/selection/call.js","../node_modules/d3-selection/src/selection/nodes.js","../node_modules/d3-selection/src/selection/node.js","../node_modules/d3-selection/src/selection/size.js","../node_modules/d3-selection/src/selection/empty.js","../node_modules/d3-selection/src/selection/each.js","../node_modules/d3-selection/src/selection/attr.js","../node_modules/d3-selection/src/window.js","../node_modules/d3-selection/src/selection/style.js","../node_modules/d3-selection/src/selection/property.js","../node_modules/d3-selection/src/selection/classed.js","../node_modules/d3-selection/src/selection/text.js","../node_modules/d3-selection/src/selection/html.js","../node_modules/d3-selection/src/selection/raise.js","../node_modules/d3-selection/src/selection/lower.js","../node_modules/d3-selection/src/selection/append.js","../node_modules/d3-selection/src/selection/insert.js","../node_modules/d3-selection/src/selection/remove.js","../node_modules/d3-selection/src/selection/clone.js","../node_modules/d3-selection/src/selection/datum.js","../node_modules/d3-selection/src/selection/on.js","../node_modules/d3-selection/src/selection/dispatch.js","../node_modules/d3-selection/src/selection/iterator.js","../node_modules/d3-selection/src/selection/index.js","../node_modules/d3-selection/src/select.js","../node_modules/d3-selection/src/sourceEvent.js","../node_modules/d3-selection/src/pointer.js","../node_modules/d3-drag/src/noevent.js","../node_modules/d3-drag/src/nodrag.js","../node_modules/d3-drag/src/constant.js","../node_modules/d3-drag/src/event.js","../node_modules/d3-drag/src/drag.js","../node_modules/d3-timer/src/timer.js","../node_modules/d3-timer/src/timeout.js","../node_modules/d3-transition/src/transition/schedule.js","../node_modules/d3-transition/src/interrupt.js","../node_modules/d3-transition/src/selection/interrupt.js","../node_modules/d3-transition/src/transition/tween.js","../node_modules/d3-transition/src/transition/interpolate.js","../node_modules/d3-transition/src/transition/attr.js","../node_modules/d3-transition/src/transition/attrTween.js","../node_modules/d3-transition/src/transition/delay.js","../node_modules/d3-transition/src/transition/duration.js","../node_modules/d3-transition/src/transition/ease.js","../node_modules/d3-transition/src/transition/easeVarying.js","../node_modules/d3-transition/src/transition/filter.js","../node_modules/d3-transition/src/transition/merge.js","../node_modules/d3-transition/src/transition/on.js","../node_modules/d3-transition/src/transition/remove.js","../node_modules/d3-transition/src/transition/select.js","../node_modules/d3-transition/src/transition/selectAll.js","../node_modules/d3-transition/src/transition/selection.js","../node_modules/d3-transition/src/transition/style.js","../node_modules/d3-transition/src/transition/styleTween.js","../node_modules/d3-transition/src/transition/text.js","../node_modules/d3-transition/src/transition/textTween.js","../node_modules/d3-transition/src/transition/transition.js","../node_modules/d3-transition/src/transition/end.js","../node_modules/d3-transition/src/transition/index.js","../node_modules/d3-ease/src/cubic.js","../node_modules/d3-transition/src/selection/transition.js","../node_modules/d3-transition/src/selection/index.js","../node_modules/d3-zoom/src/constant.js","../node_modules/d3-zoom/src/event.js","../node_modules/d3-zoom/src/transform.js","../node_modules/d3-zoom/src/noevent.js","../node_modules/d3-zoom/src/zoom.js","../node_modules/@reactflow/core/dist/esm/index.mjs","../node_modules/@reactflow/minimap/dist/esm/index.mjs","../node_modules/@reactflow/controls/dist/esm/index.mjs","../node_modules/@reactflow/background/dist/esm/index.mjs","../node_modules/lodash/_listCacheClear.js","../node_modules/lodash/eq.js","../node_modules/lodash/_assocIndexOf.js","../node_modules/lodash/_listCacheDelete.js","../node_modules/lodash/_listCacheGet.js","../node_modules/lodash/_listCacheHas.js","../node_modules/lodash/_listCacheSet.js","../node_modules/lodash/_ListCache.js","../node_modules/lodash/_stackClear.js","../node_modules/lodash/_stackDelete.js","../node_modules/lodash/_stackGet.js","../node_modules/lodash/_stackHas.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObject.js","../node_modules/lodash/isFunction.js","../node_modules/lodash/_coreJsData.js","../node_modules/lodash/_isMasked.js","../node_modules/lodash/_toSource.js","../node_modules/lodash/_baseIsNative.js","../node_modules/lodash/_getValue.js","../node_modules/lodash/_getNative.js","../node_modules/lodash/_Map.js","../node_modules/lodash/_nativeCreate.js","../node_modules/lodash/_hashClear.js","../node_modules/lodash/_hashDelete.js","../node_modules/lodash/_hashGet.js","../node_modules/lodash/_hashHas.js","../node_modules/lodash/_hashSet.js","../node_modules/lodash/_Hash.js","../node_modules/lodash/_mapCacheClear.js","../node_modules/lodash/_isKeyable.js","../node_modules/lodash/_getMapData.js","../node_modules/lodash/_mapCacheDelete.js","../node_modules/lodash/_mapCacheGet.js","../node_modules/lodash/_mapCacheHas.js","../node_modules/lodash/_mapCacheSet.js","../node_modules/lodash/_MapCache.js","../node_modules/lodash/_stackSet.js","../node_modules/lodash/_Stack.js","../node_modules/lodash/_arrayEach.js","../node_modules/lodash/_defineProperty.js","../node_modules/lodash/_baseAssignValue.js","../node_modules/lodash/_assignValue.js","../node_modules/lodash/_copyObject.js","../node_modules/lodash/_baseTimes.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/_baseIsArguments.js","../node_modules/lodash/isArguments.js","../node_modules/lodash/isArray.js","../node_modules/lodash/stubFalse.js","../node_modules/lodash/isBuffer.js","../node_modules/lodash/_isIndex.js","../node_modules/lodash/isLength.js","../node_modules/lodash/_baseIsTypedArray.js","../node_modules/lodash/_baseUnary.js","../node_modules/lodash/_nodeUtil.js","../node_modules/lodash/isTypedArray.js","../node_modules/lodash/_arrayLikeKeys.js","../node_modules/lodash/_isPrototype.js","../node_modules/lodash/_overArg.js","../node_modules/lodash/_nativeKeys.js","../node_modules/lodash/_baseKeys.js","../node_modules/lodash/isArrayLike.js","../node_modules/lodash/keys.js","../node_modules/lodash/_baseAssign.js","../node_modules/lodash/_nativeKeysIn.js","../node_modules/lodash/_baseKeysIn.js","../node_modules/lodash/keysIn.js","../node_modules/lodash/_baseAssignIn.js","../node_modules/lodash/_cloneBuffer.js","../node_modules/lodash/_copyArray.js","../node_modules/lodash/_arrayFilter.js","../node_modules/lodash/stubArray.js","../node_modules/lodash/_getSymbols.js","../node_modules/lodash/_copySymbols.js","../node_modules/lodash/_arrayPush.js","../node_modules/lodash/_getPrototype.js","../node_modules/lodash/_getSymbolsIn.js","../node_modules/lodash/_copySymbolsIn.js","../node_modules/lodash/_baseGetAllKeys.js","../node_modules/lodash/_getAllKeys.js","../node_modules/lodash/_getAllKeysIn.js","../node_modules/lodash/_DataView.js","../node_modules/lodash/_Promise.js","../node_modules/lodash/_Set.js","../node_modules/lodash/_WeakMap.js","../node_modules/lodash/_getTag.js","../node_modules/lodash/_initCloneArray.js","../node_modules/lodash/_Uint8Array.js","../node_modules/lodash/_cloneArrayBuffer.js","../node_modules/lodash/_cloneDataView.js","../node_modules/lodash/_cloneRegExp.js","../node_modules/lodash/_cloneSymbol.js","../node_modules/lodash/_cloneTypedArray.js","../node_modules/lodash/_initCloneByTag.js","../node_modules/lodash/_baseCreate.js","../node_modules/lodash/_initCloneObject.js","../node_modules/lodash/_baseIsMap.js","../node_modules/lodash/isMap.js","../node_modules/lodash/_baseIsSet.js","../node_modules/lodash/isSet.js","../node_modules/lodash/_baseClone.js","../node_modules/lodash/clone.js","../node_modules/lodash/constant.js","../node_modules/lodash/_createBaseFor.js","../node_modules/lodash/_baseFor.js","../node_modules/lodash/_baseForOwn.js","../node_modules/lodash/_createBaseEach.js","../node_modules/lodash/_baseEach.js","../node_modules/lodash/identity.js","../node_modules/lodash/_castFunction.js","../node_modules/lodash/forEach.js","../node_modules/lodash/each.js","../node_modules/lodash/_baseFilter.js","../node_modules/lodash/_setCacheAdd.js","../node_modules/lodash/_setCacheHas.js","../node_modules/lodash/_SetCache.js","../node_modules/lodash/_arraySome.js","../node_modules/lodash/_cacheHas.js","../node_modules/lodash/_equalArrays.js","../node_modules/lodash/_mapToArray.js","../node_modules/lodash/_setToArray.js","../node_modules/lodash/_equalByTag.js","../node_modules/lodash/_equalObjects.js","../node_modules/lodash/_baseIsEqualDeep.js","../node_modules/lodash/_baseIsEqual.js","../node_modules/lodash/_baseIsMatch.js","../node_modules/lodash/_isStrictComparable.js","../node_modules/lodash/_getMatchData.js","../node_modules/lodash/_matchesStrictComparable.js","../node_modules/lodash/_baseMatches.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/_isKey.js","../node_modules/lodash/memoize.js","../node_modules/lodash/_memoizeCapped.js","../node_modules/lodash/_stringToPath.js","../node_modules/lodash/_arrayMap.js","../node_modules/lodash/_baseToString.js","../node_modules/lodash/toString.js","../node_modules/lodash/_castPath.js","../node_modules/lodash/_toKey.js","../node_modules/lodash/_baseGet.js","../node_modules/lodash/get.js","../node_modules/lodash/_baseHasIn.js","../node_modules/lodash/_hasPath.js","../node_modules/lodash/hasIn.js","../node_modules/lodash/_baseMatchesProperty.js","../node_modules/lodash/_baseProperty.js","../node_modules/lodash/_basePropertyDeep.js","../node_modules/lodash/property.js","../node_modules/lodash/_baseIteratee.js","../node_modules/lodash/filter.js","../node_modules/lodash/_baseHas.js","../node_modules/lodash/has.js","../node_modules/lodash/isEmpty.js","../node_modules/lodash/isUndefined.js","../node_modules/lodash/_baseMap.js","../node_modules/lodash/map.js","../node_modules/lodash/_arrayReduce.js","../node_modules/lodash/_baseReduce.js","../node_modules/lodash/reduce.js","../node_modules/lodash/isString.js","../node_modules/lodash/_asciiSize.js","../node_modules/lodash/_hasUnicode.js","../node_modules/lodash/_unicodeSize.js","../node_modules/lodash/_stringSize.js","../node_modules/lodash/size.js","../node_modules/lodash/transform.js","../node_modules/lodash/_isFlattenable.js","../node_modules/lodash/_baseFlatten.js","../node_modules/lodash/_apply.js","../node_modules/lodash/_overRest.js","../node_modules/lodash/_baseSetToString.js","../node_modules/lodash/_shortOut.js","../node_modules/lodash/_setToString.js","../node_modules/lodash/_baseRest.js","../node_modules/lodash/_baseFindIndex.js","../node_modules/lodash/_baseIsNaN.js","../node_modules/lodash/_strictIndexOf.js","../node_modules/lodash/_baseIndexOf.js","../node_modules/lodash/_arrayIncludes.js","../node_modules/lodash/_arrayIncludesWith.js","../node_modules/lodash/noop.js","../node_modules/lodash/_createSet.js","../node_modules/lodash/_baseUniq.js","../node_modules/lodash/isArrayLikeObject.js","../node_modules/lodash/union.js","../node_modules/lodash/_baseValues.js","../node_modules/lodash/values.js","../node_modules/graphlib/lib/lodash.js","../node_modules/graphlib/lib/graph.js","../node_modules/graphlib/lib/version.js","../node_modules/graphlib/lib/index.js","../node_modules/graphlib/lib/json.js","../node_modules/graphlib/lib/alg/components.js","../node_modules/graphlib/lib/data/priority-queue.js","../node_modules/graphlib/lib/alg/dijkstra.js","../node_modules/graphlib/lib/alg/dijkstra-all.js","../node_modules/graphlib/lib/alg/tarjan.js","../node_modules/graphlib/lib/alg/find-cycles.js","../node_modules/graphlib/lib/alg/floyd-warshall.js","../node_modules/graphlib/lib/alg/topsort.js","../node_modules/graphlib/lib/alg/is-acyclic.js","../node_modules/graphlib/lib/alg/dfs.js","../node_modules/graphlib/lib/alg/postorder.js","../node_modules/graphlib/lib/alg/preorder.js","../node_modules/graphlib/lib/alg/prim.js","../node_modules/graphlib/lib/alg/index.js","../node_modules/graphlib/index.js","../node_modules/dagre/lib/graphlib.js","../node_modules/lodash/cloneDeep.js","../node_modules/lodash/_isIterateeCall.js","../node_modules/lodash/defaults.js","../node_modules/lodash/_createFind.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/toFinite.js","../node_modules/lodash/toInteger.js","../node_modules/lodash/findIndex.js","../node_modules/lodash/find.js","../node_modules/lodash/flatten.js","../node_modules/lodash/forIn.js","../node_modules/lodash/last.js","../node_modules/lodash/mapValues.js","../node_modules/lodash/_baseExtremum.js","../node_modules/lodash/_baseGt.js","../node_modules/lodash/max.js","../node_modules/lodash/_assignMergeValue.js","../node_modules/lodash/isPlainObject.js","../node_modules/lodash/_safeGet.js","../node_modules/lodash/toPlainObject.js","../node_modules/lodash/_baseMergeDeep.js","../node_modules/lodash/_baseMerge.js","../node_modules/lodash/_createAssigner.js","../node_modules/lodash/merge.js","../node_modules/lodash/_baseLt.js","../node_modules/lodash/min.js","../node_modules/lodash/minBy.js","../node_modules/lodash/now.js","../node_modules/lodash/_baseSet.js","../node_modules/lodash/_basePickBy.js","../node_modules/lodash/_basePick.js","../node_modules/lodash/_flatRest.js","../node_modules/lodash/pick.js","../node_modules/lodash/_baseRange.js","../node_modules/lodash/_createRange.js","../node_modules/lodash/range.js","../node_modules/lodash/_baseSortBy.js","../node_modules/lodash/_compareAscending.js","../node_modules/lodash/_compareMultiple.js","../node_modules/lodash/_baseOrderBy.js","../node_modules/lodash/sortBy.js","../node_modules/lodash/uniqueId.js","../node_modules/lodash/_baseZipObject.js","../node_modules/lodash/zipObject.js","../node_modules/dagre/lib/lodash.js","../node_modules/dagre/lib/data/list.js","../node_modules/dagre/lib/greedy-fas.js","../node_modules/dagre/lib/acyclic.js","../node_modules/dagre/lib/util.js","../node_modules/dagre/lib/normalize.js","../node_modules/dagre/lib/rank/util.js","../node_modules/dagre/lib/rank/feasible-tree.js","../node_modules/dagre/lib/rank/network-simplex.js","../node_modules/dagre/lib/rank/index.js","../node_modules/dagre/lib/parent-dummy-chains.js","../node_modules/dagre/lib/nesting-graph.js","../node_modules/dagre/lib/add-border-segments.js","../node_modules/dagre/lib/coordinate-system.js","../node_modules/dagre/lib/order/init-order.js","../node_modules/dagre/lib/order/cross-count.js","../node_modules/dagre/lib/order/barycenter.js","../node_modules/dagre/lib/order/resolve-conflicts.js","../node_modules/dagre/lib/order/sort.js","../node_modules/dagre/lib/order/sort-subgraph.js","../node_modules/dagre/lib/order/build-layer-graph.js","../node_modules/dagre/lib/order/add-subgraph-constraints.js","../node_modules/dagre/lib/order/index.js","../node_modules/dagre/lib/position/bk.js","../node_modules/dagre/lib/position/index.js","../node_modules/dagre/lib/layout.js","../node_modules/dagre/lib/debug.js","../node_modules/dagre/lib/version.js","../node_modules/dagre/index.js","../src/app/pages/NodePage/NodeDimensionsTab.jsx","../src/app/icons/DiffIcon.jsx","../src/app/pages/NodePage/NodeHistory.jsx","../src/app/icons/JupyterExportIcon.jsx","../src/app/pages/NodePage/NotebookDownload.jsx","../src/app/icons/TableIcon.jsx","../src/app/pages/NodePage/MaterializationConfigField.jsx","../src/app/pages/NodePage/AddMaterializationPopover.jsx","../src/app/pages/NodePage/PartitionValueForm.jsx","../src/app/pages/NodePage/AddBackfillPopover.jsx","../src/app/icons/DeleteIcon.jsx","../src/app/components/NodeMaterializationDelete.jsx","../src/app/pages/NodePage/NodeRevisionMaterializationTab.jsx","../src/app/pages/NodePage/AvailabilityStateBlock.jsx","../node_modules/cronstrue/dist/cronstrue.js","../src/app/pages/NodePage/NodeMaterializationTab.jsx","../src/app/pages/NodePage/NodePreAggregationsTab.jsx","../node_modules/react-syntax-highlighter/dist/esm/styles/hljs/night-owl.js","../src/app/icons/PythonIcon.jsx","../src/app/pages/NodePage/ClientCodePopover.jsx","../src/app/icons/EyeIcon.jsx","../src/app/icons/ExpandedIcon.jsx","../src/app/icons/CollapsedIcon.jsx","../src/app/pages/NodePage/WatchNodeButton.jsx","../src/app/pages/NodePage/NodesWithDimension.jsx","../src/app/components/djgraph/DJNodeDimensions.jsx","../src/app/components/djgraph/DJNodeColumns.jsx","../src/app/components/djgraph/Collapse.jsx","../src/app/components/djgraph/DJNode.jsx","../src/app/components/djgraph/LayoutFlow.jsx","../src/app/pages/NodePage/NodeLineageTab.jsx","../src/app/icons/ChartIcon.jsx","../src/app/pages/NodePage/NodeDependenciesTab.jsx","../src/app/pages/NodePage/index.jsx"],"sourcesContent":["/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bigint: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n  // START: fast-deep-equal es6/index.js 3.1.3\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    // START: Modifications:\n    // 1. Extra `has<Type> &&` helpers in initial condition allow es6 code\n    //    to co-exist with es5.\n    // 2. Replace `for of` with es5 compliant iteration using `for`.\n    //    Basically, take:\n    //\n    //    ```js\n    //    for (i of a.entries())\n    //      if (!b.has(i[0])) return false;\n    //    ```\n    //\n    //    ... and convert to:\n    //\n    //    ```js\n    //    it = a.entries();\n    //    while (!(i = it.next()).done)\n    //      if (!b.has(i.value[0])) return false;\n    //    ```\n    //\n    //    **Note**: `i` access switches to `i.value`.\n    var it;\n    if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n      if (a.size !== b.size) return false;\n      it = a.entries();\n      while (!(i = it.next()).done)\n        if (!b.has(i.value[0])) return false;\n      it = a.entries();\n      while (!(i = it.next()).done)\n        if (!equal(i.value[1], b.get(i.value[0]))) return false;\n      return true;\n    }\n\n    if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n      if (a.size !== b.size) return false;\n      it = a.entries();\n      while (!(i = it.next()).done)\n        if (!b.has(i.value[0])) return false;\n      return true;\n    }\n    // END: Modifications\n\n    if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (a[i] !== b[i]) return false;\n      return true;\n    }\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    // START: Modifications:\n    // Apply guards for `Object.create(null)` handling. See:\n    // - https://github.com/FormidableLabs/react-fast-compare/issues/64\n    // - https://github.com/epoberezkin/fast-deep-equal/issues/49\n    if (a.valueOf !== Object.prototype.valueOf && typeof a.valueOf === 'function' && typeof b.valueOf === 'function') return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString && typeof a.toString === 'function' && typeof b.toString === 'function') return a.toString() === b.toString();\n    // END: Modifications\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    // END: fast-deep-equal\n\n    // START: react-fast-compare\n    // custom handling for DOM elements\n    if (hasElementType && a instanceof Element) return false;\n\n    // custom handling for React/Preact\n    for (i = length; i-- !== 0;) {\n      if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n        // React-specific: avoid traversing React elements' _owner\n        // Preact-specific: avoid traversing Preact elements' __v and __o\n        //    __v = $_original / $_vnode\n        //    __o = $_owner\n        // These properties contain circular references and are not needed when\n        // comparing the actual elements (and not their owners)\n        // .$$typeof and ._store on just reasonable markers of elements\n\n        continue;\n      }\n\n      // all other properties should be traversed as usual\n      if (!equal(a[keys[i]], b[keys[i]])) return false;\n    }\n    // END: react-fast-compare\n\n    // START: fast-deep-equal\n    return true;\n  }\n\n  return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n  try {\n    return equal(a, b);\n  } catch (error) {\n    if (((error.message || '').match(/stack|recursion/i))) {\n      // warn on circular references, don't crash\n      // browsers give this different errors name and messages:\n      // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n      // firefox: \"InternalError\", too much recursion\"\n      // edge: \"Error\", \"Out of stack space\"\n      console.warn('react-fast-compare cannot handle circular refs');\n      return false;\n    }\n    // some other error. we should definitely know about these\n    throw error;\n  }\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error(\n        'Minified exception occurred; use the non-minified dev environment ' +\n        'for the full error message and additional helpful warnings.'\n      );\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(\n        format.replace(/%s/g, function() { return args[argIndex++]; })\n      );\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n};\n\nmodule.exports = invariant;\n","//\n\nmodule.exports = function shallowEqual(objA, objB, compare, compareContext) {\n  var ret = compare ? compare.call(compareContext, objA, objB) : void 0;\n\n  if (ret !== void 0) {\n    return !!ret;\n  }\n\n  if (objA === objB) {\n    return true;\n  }\n\n  if (typeof objA !== \"object\" || !objA || typeof objB !== \"object\" || !objB) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  }\n\n  var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);\n\n  // Test for A's keys different from B.\n  for (var idx = 0; idx < keysA.length; idx++) {\n    var key = keysA[idx];\n\n    if (!bHasOwnProperty(key)) {\n      return false;\n    }\n\n    var valueA = objA[key];\n    var valueB = objB[key];\n\n    ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n\n    if (ret === false || (ret === void 0 && valueA !== valueB)) {\n      return false;\n    }\n  }\n\n  return true;\n};\n","import t,{Component as e}from\"react\";import r from\"prop-types\";import n from\"react-fast-compare\";import i from\"invariant\";import o from\"shallowequal\";function a(){return a=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},a.apply(this,arguments)}function s(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,c(t,e)}function c(t,e){return c=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},c(t,e)}function u(t,e){if(null==t)return{};var r,n,i={},o=Object.keys(t);for(n=0;n<o.length;n++)e.indexOf(r=o[n])>=0||(i[r]=t[r]);return i}var l={BASE:\"base\",BODY:\"body\",HEAD:\"head\",HTML:\"html\",LINK:\"link\",META:\"meta\",NOSCRIPT:\"noscript\",SCRIPT:\"script\",STYLE:\"style\",TITLE:\"title\",FRAGMENT:\"Symbol(react.fragment)\"},p={rel:[\"amphtml\",\"canonical\",\"alternate\"]},f={type:[\"application/ld+json\"]},d={charset:\"\",name:[\"robots\",\"description\"],property:[\"og:type\",\"og:title\",\"og:url\",\"og:image\",\"og:image:alt\",\"og:description\",\"twitter:url\",\"twitter:title\",\"twitter:description\",\"twitter:image\",\"twitter:image:alt\",\"twitter:card\",\"twitter:site\"]},h=Object.keys(l).map(function(t){return l[t]}),m={accesskey:\"accessKey\",charset:\"charSet\",class:\"className\",contenteditable:\"contentEditable\",contextmenu:\"contextMenu\",\"http-equiv\":\"httpEquiv\",itemprop:\"itemProp\",tabindex:\"tabIndex\"},y=Object.keys(m).reduce(function(t,e){return t[m[e]]=e,t},{}),T=function(t,e){for(var r=t.length-1;r>=0;r-=1){var n=t[r];if(Object.prototype.hasOwnProperty.call(n,e))return n[e]}return null},g=function(t){var e=T(t,l.TITLE),r=T(t,\"titleTemplate\");if(Array.isArray(e)&&(e=e.join(\"\")),r&&e)return r.replace(/%s/g,function(){return e});var n=T(t,\"defaultTitle\");return e||n||void 0},b=function(t){return T(t,\"onChangeClientState\")||function(){}},v=function(t,e){return e.filter(function(e){return void 0!==e[t]}).map(function(e){return e[t]}).reduce(function(t,e){return a({},t,e)},{})},A=function(t,e){return e.filter(function(t){return void 0!==t[l.BASE]}).map(function(t){return t[l.BASE]}).reverse().reduce(function(e,r){if(!e.length)for(var n=Object.keys(r),i=0;i<n.length;i+=1){var o=n[i].toLowerCase();if(-1!==t.indexOf(o)&&r[o])return e.concat(r)}return e},[])},C=function(t,e,r){var n={};return r.filter(function(e){return!!Array.isArray(e[t])||(void 0!==e[t]&&console&&\"function\"==typeof console.warn&&console.warn(\"Helmet: \"+t+' should be of type \"Array\". Instead found type \"'+typeof e[t]+'\"'),!1)}).map(function(e){return e[t]}).reverse().reduce(function(t,r){var i={};r.filter(function(t){for(var r,o=Object.keys(t),a=0;a<o.length;a+=1){var s=o[a],c=s.toLowerCase();-1===e.indexOf(c)||\"rel\"===r&&\"canonical\"===t[r].toLowerCase()||\"rel\"===c&&\"stylesheet\"===t[c].toLowerCase()||(r=c),-1===e.indexOf(s)||\"innerHTML\"!==s&&\"cssText\"!==s&&\"itemprop\"!==s||(r=s)}if(!r||!t[r])return!1;var u=t[r].toLowerCase();return n[r]||(n[r]={}),i[r]||(i[r]={}),!n[r][u]&&(i[r][u]=!0,!0)}).reverse().forEach(function(e){return t.push(e)});for(var o=Object.keys(i),s=0;s<o.length;s+=1){var c=o[s],u=a({},n[c],i[c]);n[c]=u}return t},[]).reverse()},O=function(t,e){if(Array.isArray(t)&&t.length)for(var r=0;r<t.length;r+=1)if(t[r][e])return!0;return!1},S=function(t){return Array.isArray(t)?t.join(\"\"):t},E=function(t,e){return Array.isArray(t)?t.reduce(function(t,r){return function(t,e){for(var r=Object.keys(t),n=0;n<r.length;n+=1)if(e[r[n]]&&e[r[n]].includes(t[r[n]]))return!0;return!1}(r,e)?t.priority.push(r):t.default.push(r),t},{priority:[],default:[]}):{default:t}},I=function(t,e){var r;return a({},t,((r={})[e]=void 0,r))},P=[l.NOSCRIPT,l.SCRIPT,l.STYLE],w=function(t,e){return void 0===e&&(e=!0),!1===e?String(t):String(t).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#x27;\")},x=function(t){return Object.keys(t).reduce(function(e,r){var n=void 0!==t[r]?r+'=\"'+t[r]+'\"':\"\"+r;return e?e+\" \"+n:n},\"\")},L=function(t,e){return void 0===e&&(e={}),Object.keys(t).reduce(function(e,r){return e[m[r]||r]=t[r],e},e)},j=function(e,r){return r.map(function(r,n){var i,o=((i={key:n})[\"data-rh\"]=!0,i);return Object.keys(r).forEach(function(t){var e=m[t]||t;\"innerHTML\"===e||\"cssText\"===e?o.dangerouslySetInnerHTML={__html:r.innerHTML||r.cssText}:o[e]=r[t]}),t.createElement(e,o)})},M=function(e,r,n){switch(e){case l.TITLE:return{toComponent:function(){return n=r.titleAttributes,(i={key:e=r.title})[\"data-rh\"]=!0,o=L(n,i),[t.createElement(l.TITLE,o,e)];var e,n,i,o},toString:function(){return function(t,e,r,n){var i=x(r),o=S(e);return i?\"<\"+t+' data-rh=\"true\" '+i+\">\"+w(o,n)+\"</\"+t+\">\":\"<\"+t+' data-rh=\"true\">'+w(o,n)+\"</\"+t+\">\"}(e,r.title,r.titleAttributes,n)}};case\"bodyAttributes\":case\"htmlAttributes\":return{toComponent:function(){return L(r)},toString:function(){return x(r)}};default:return{toComponent:function(){return j(e,r)},toString:function(){return function(t,e,r){return e.reduce(function(e,n){var i=Object.keys(n).filter(function(t){return!(\"innerHTML\"===t||\"cssText\"===t)}).reduce(function(t,e){var i=void 0===n[e]?e:e+'=\"'+w(n[e],r)+'\"';return t?t+\" \"+i:i},\"\"),o=n.innerHTML||n.cssText||\"\",a=-1===P.indexOf(t);return e+\"<\"+t+' data-rh=\"true\" '+i+(a?\"/>\":\">\"+o+\"</\"+t+\">\")},\"\")}(e,r,n)}}}},k=function(t){var e=t.baseTag,r=t.bodyAttributes,n=t.encode,i=t.htmlAttributes,o=t.noscriptTags,a=t.styleTags,s=t.title,c=void 0===s?\"\":s,u=t.titleAttributes,h=t.linkTags,m=t.metaTags,y=t.scriptTags,T={toComponent:function(){},toString:function(){return\"\"}};if(t.prioritizeSeoTags){var g=function(t){var e=t.linkTags,r=t.scriptTags,n=t.encode,i=E(t.metaTags,d),o=E(e,p),a=E(r,f);return{priorityMethods:{toComponent:function(){return[].concat(j(l.META,i.priority),j(l.LINK,o.priority),j(l.SCRIPT,a.priority))},toString:function(){return M(l.META,i.priority,n)+\" \"+M(l.LINK,o.priority,n)+\" \"+M(l.SCRIPT,a.priority,n)}},metaTags:i.default,linkTags:o.default,scriptTags:a.default}}(t);T=g.priorityMethods,h=g.linkTags,m=g.metaTags,y=g.scriptTags}return{priority:T,base:M(l.BASE,e,n),bodyAttributes:M(\"bodyAttributes\",r,n),htmlAttributes:M(\"htmlAttributes\",i,n),link:M(l.LINK,h,n),meta:M(l.META,m,n),noscript:M(l.NOSCRIPT,o,n),script:M(l.SCRIPT,y,n),style:M(l.STYLE,a,n),title:M(l.TITLE,{title:c,titleAttributes:u},n)}},H=[],N=function(t,e){var r=this;void 0===e&&(e=\"undefined\"!=typeof document),this.instances=[],this.value={setHelmet:function(t){r.context.helmet=t},helmetInstances:{get:function(){return r.canUseDOM?H:r.instances},add:function(t){(r.canUseDOM?H:r.instances).push(t)},remove:function(t){var e=(r.canUseDOM?H:r.instances).indexOf(t);(r.canUseDOM?H:r.instances).splice(e,1)}}},this.context=t,this.canUseDOM=e,e||(t.helmet=k({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:\"\",titleAttributes:{}}))},R=t.createContext({}),D=r.shape({setHelmet:r.func,helmetInstances:r.shape({get:r.func,add:r.func,remove:r.func})}),U=\"undefined\"!=typeof document,q=/*#__PURE__*/function(e){function r(t){var n;return(n=e.call(this,t)||this).helmetData=new N(n.props.context,r.canUseDOM),n}return s(r,e),r.prototype.render=function(){/*#__PURE__*/return t.createElement(R.Provider,{value:this.helmetData.value},this.props.children)},r}(e);q.canUseDOM=U,q.propTypes={context:r.shape({helmet:r.shape()}),children:r.node.isRequired},q.defaultProps={context:{}},q.displayName=\"HelmetProvider\";var Y=function(t,e){var r,n=document.head||document.querySelector(l.HEAD),i=n.querySelectorAll(t+\"[data-rh]\"),o=[].slice.call(i),a=[];return e&&e.length&&e.forEach(function(e){var n=document.createElement(t);for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(\"innerHTML\"===i?n.innerHTML=e.innerHTML:\"cssText\"===i?n.styleSheet?n.styleSheet.cssText=e.cssText:n.appendChild(document.createTextNode(e.cssText)):n.setAttribute(i,void 0===e[i]?\"\":e[i]));n.setAttribute(\"data-rh\",\"true\"),o.some(function(t,e){return r=e,n.isEqualNode(t)})?o.splice(r,1):a.push(n)}),o.forEach(function(t){return t.parentNode.removeChild(t)}),a.forEach(function(t){return n.appendChild(t)}),{oldTags:o,newTags:a}},B=function(t,e){var r=document.getElementsByTagName(t)[0];if(r){for(var n=r.getAttribute(\"data-rh\"),i=n?n.split(\",\"):[],o=[].concat(i),a=Object.keys(e),s=0;s<a.length;s+=1){var c=a[s],u=e[c]||\"\";r.getAttribute(c)!==u&&r.setAttribute(c,u),-1===i.indexOf(c)&&i.push(c);var l=o.indexOf(c);-1!==l&&o.splice(l,1)}for(var p=o.length-1;p>=0;p-=1)r.removeAttribute(o[p]);i.length===o.length?r.removeAttribute(\"data-rh\"):r.getAttribute(\"data-rh\")!==a.join(\",\")&&r.setAttribute(\"data-rh\",a.join(\",\"))}},K=function(t,e){var r=t.baseTag,n=t.htmlAttributes,i=t.linkTags,o=t.metaTags,a=t.noscriptTags,s=t.onChangeClientState,c=t.scriptTags,u=t.styleTags,p=t.title,f=t.titleAttributes;B(l.BODY,t.bodyAttributes),B(l.HTML,n),function(t,e){void 0!==t&&document.title!==t&&(document.title=S(t)),B(l.TITLE,e)}(p,f);var d={baseTag:Y(l.BASE,r),linkTags:Y(l.LINK,i),metaTags:Y(l.META,o),noscriptTags:Y(l.NOSCRIPT,a),scriptTags:Y(l.SCRIPT,c),styleTags:Y(l.STYLE,u)},h={},m={};Object.keys(d).forEach(function(t){var e=d[t],r=e.newTags,n=e.oldTags;r.length&&(h[t]=r),n.length&&(m[t]=d[t].oldTags)}),e&&e(),s(t,h,m)},_=null,z=/*#__PURE__*/function(t){function e(){for(var e,r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];return(e=t.call.apply(t,[this].concat(n))||this).rendered=!1,e}s(e,t);var r=e.prototype;return r.shouldComponentUpdate=function(t){return!o(t,this.props)},r.componentDidUpdate=function(){this.emitChange()},r.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},r.emitChange=function(){var t,e,r=this.props.context,n=r.setHelmet,i=null,o=(t=r.helmetInstances.get().map(function(t){var e=a({},t.props);return delete e.context,e}),{baseTag:A([\"href\"],t),bodyAttributes:v(\"bodyAttributes\",t),defer:T(t,\"defer\"),encode:T(t,\"encodeSpecialCharacters\"),htmlAttributes:v(\"htmlAttributes\",t),linkTags:C(l.LINK,[\"rel\",\"href\"],t),metaTags:C(l.META,[\"name\",\"charset\",\"http-equiv\",\"property\",\"itemprop\"],t),noscriptTags:C(l.NOSCRIPT,[\"innerHTML\"],t),onChangeClientState:b(t),scriptTags:C(l.SCRIPT,[\"src\",\"innerHTML\"],t),styleTags:C(l.STYLE,[\"cssText\"],t),title:g(t),titleAttributes:v(\"titleAttributes\",t),prioritizeSeoTags:O(t,\"prioritizeSeoTags\")});q.canUseDOM?(e=o,_&&cancelAnimationFrame(_),e.defer?_=requestAnimationFrame(function(){K(e,function(){_=null})}):(K(e),_=null)):k&&(i=k(o)),n(i)},r.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},r.render=function(){return this.init(),null},e}(e);z.propTypes={context:D.isRequired},z.displayName=\"HelmetDispatcher\";var F=[\"children\"],G=[\"children\"],W=/*#__PURE__*/function(e){function r(){return e.apply(this,arguments)||this}s(r,e);var o=r.prototype;return o.shouldComponentUpdate=function(t){return!n(I(this.props,\"helmetData\"),I(t,\"helmetData\"))},o.mapNestedChildrenToProps=function(t,e){if(!e)return null;switch(t.type){case l.SCRIPT:case l.NOSCRIPT:return{innerHTML:e};case l.STYLE:return{cssText:e};default:throw new Error(\"<\"+t.type+\" /> elements are self-closing and can not contain children. Refer to our API for more information.\")}},o.flattenArrayTypeChildren=function(t){var e,r=t.child,n=t.arrayTypeChildren;return a({},n,((e={})[r.type]=[].concat(n[r.type]||[],[a({},t.newChildProps,this.mapNestedChildrenToProps(r,t.nestedChildren))]),e))},o.mapObjectTypeChildren=function(t){var e,r,n=t.child,i=t.newProps,o=t.newChildProps,s=t.nestedChildren;switch(n.type){case l.TITLE:return a({},i,((e={})[n.type]=s,e.titleAttributes=a({},o),e));case l.BODY:return a({},i,{bodyAttributes:a({},o)});case l.HTML:return a({},i,{htmlAttributes:a({},o)});default:return a({},i,((r={})[n.type]=a({},o),r))}},o.mapArrayTypeChildrenToProps=function(t,e){var r=a({},e);return Object.keys(t).forEach(function(e){var n;r=a({},r,((n={})[e]=t[e],n))}),r},o.warnOnInvalidChildren=function(t,e){return i(h.some(function(e){return t.type===e}),\"function\"==typeof t.type?\"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.\":\"Only elements types \"+h.join(\", \")+\" are allowed. Helmet does not support rendering <\"+t.type+\"> elements. Refer to our API for more information.\"),i(!e||\"string\"==typeof e||Array.isArray(e)&&!e.some(function(t){return\"string\"!=typeof t}),\"Helmet expects a string as a child of <\"+t.type+\">. Did you forget to wrap your children in braces? ( <\"+t.type+\">{``}</\"+t.type+\"> ) Refer to our API for more information.\"),!0},o.mapChildrenToProps=function(e,r){var n=this,i={};return t.Children.forEach(e,function(t){if(t&&t.props){var e=t.props,o=e.children,a=u(e,F),s=Object.keys(a).reduce(function(t,e){return t[y[e]||e]=a[e],t},{}),c=t.type;switch(\"symbol\"==typeof c?c=c.toString():n.warnOnInvalidChildren(t,o),c){case l.FRAGMENT:r=n.mapChildrenToProps(o,r);break;case l.LINK:case l.META:case l.NOSCRIPT:case l.SCRIPT:case l.STYLE:i=n.flattenArrayTypeChildren({child:t,arrayTypeChildren:i,newChildProps:s,nestedChildren:o});break;default:r=n.mapObjectTypeChildren({child:t,newProps:r,newChildProps:s,nestedChildren:o})}}}),this.mapArrayTypeChildrenToProps(i,r)},o.render=function(){var e=this.props,r=e.children,n=u(e,G),i=a({},n),o=n.helmetData;return r&&(i=this.mapChildrenToProps(r,i)),!o||o instanceof N||(o=new N(o.context,o.instances)),o?/*#__PURE__*/t.createElement(z,a({},i,{context:o.value,helmetData:void 0})):/*#__PURE__*/t.createElement(R.Consumer,null,function(e){/*#__PURE__*/return t.createElement(z,a({},i,{context:e}))})},r}(e);W.propTypes={base:r.object,bodyAttributes:r.object,children:r.oneOfType([r.arrayOf(r.node),r.node]),defaultTitle:r.string,defer:r.bool,encodeSpecialCharacters:r.bool,htmlAttributes:r.object,link:r.arrayOf(r.object),meta:r.arrayOf(r.object),noscript:r.arrayOf(r.object),onChangeClientState:r.func,script:r.arrayOf(r.object),style:r.arrayOf(r.object),title:r.string,titleAttributes:r.object,titleTemplate:r.string,prioritizeSeoTags:r.bool,helmetData:r.object},W.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},W.displayName=\"Helmet\";export{W as Helmet,N as HelmetData,q as HelmetProvider};\n//# sourceMappingURL=index.module.js.map\n","import React, { lazy, Suspense } from 'react';\n\ninterface Opts {\n  fallback: React.ReactNode;\n}\ntype Unpromisify<T> = T extends Promise<infer P> ? P : never;\n\nexport const lazyLoad = <\n  T extends Promise<any>,\n  U extends React.ComponentType<any>,\n>(\n  importFunc: () => T,\n  selectorFunc?: (s: Unpromisify<T>) => U,\n  opts: Opts = { fallback: null },\n) => {\n  let lazyFactory: () => Promise<{ default: U }> = importFunc;\n\n  if (selectorFunc) {\n    lazyFactory = () =>\n      importFunc().then(module => ({ default: selectorFunc(module) }));\n  }\n\n  const LazyComponent = lazy(lazyFactory);\n\n  return (props: React.ComponentProps<U>): JSX.Element => (\n    <Suspense fallback={opts.fallback!}>\n      <LazyComponent {...props} />\n    </Suspense>\n  );\n};\n","/**\n * Asynchronously loads the component for namespaces node-viewing page\n */\n\nimport * as React from 'react';\nimport { lazyLoad } from '../../../utils/loadable';\n\nexport const NamespacePage = props => {\n  return lazyLoad(\n    () => import('./index'),\n    module => module.NamespacePage,\n    {\n      fallback: <div></div>,\n    },\n  )(props);\n};\n","import { lazyLoad } from 'utils/loadable';\n\nexport const MyWorkspacePage = lazyLoad(\n  () => import('./index'),\n  module => module.MyWorkspacePage,\n);\n","/**\n * Asynchronously loads the component for the Overview page\n */\n\nimport * as React from 'react';\nimport { lazyLoad } from '../../../utils/loadable';\n\nexport const OverviewPage = props => {\n  return lazyLoad(\n    () => import('./index'),\n    module => module.OverviewPage,\n    {\n      fallback: <div></div>,\n    },\n  )(props);\n};\n","/**\n * Asynchronously loads the component for the System Metrics Explorer page\n */\n\nimport * as React from 'react';\nimport { lazyLoad } from '../../../utils/loadable';\n\nexport const SystemMetricsExplorerPage = props => {\n  return lazyLoad(\n    () => import('./index'),\n    module => module.SystemMetricsExplorerPage,\n    {\n      fallback: <div></div>,\n    },\n  )(props);\n};\n","/**\n * Asynchronously loads the component for the Settings page\n */\n\nimport * as React from 'react';\nimport { lazyLoad } from '../../../utils/loadable';\n\nexport const SettingsPage = props => {\n  return lazyLoad(\n    () => import('./index'),\n    module => module.SettingsPage,\n    {\n      fallback: <div></div>,\n    },\n  )(props);\n};\n","import { lazyLoad } from '../../../utils/loadable';\n\nexport const NotificationsPage = lazyLoad(\n  () => import('./index'),\n  module => module.NotificationsPage,\n);\n","/**\n * Asynchronously loads the component for the Node page\n */\n\nimport * as React from 'react';\nimport { lazyLoad } from '../../../utils/loadable';\n\nexport const NodePage = props => {\n  return lazyLoad(\n    () => import('./index'),\n    module => module.NodePage,\n    {\n      fallback: <div></div>,\n    },\n  )(props);\n};\n","/**\n * Asynchronously loads RevisionDiff.\n *\n * RevisionDiff pulls in react-syntax-highlighter (and its language/theme\n * modules). Loading it lazily keeps that large dependency out of the landing\n * bundle so it's only fetched when a revision diff is actually viewed.\n */\n\nimport * as React from 'react';\nimport { lazyLoad } from '../../../utils/loadable';\n\nexport const RevisionDiff = props => {\n  return lazyLoad(\n    () => import('./RevisionDiff'),\n    module => module.default,\n    {\n      fallback: <div></div>,\n    },\n  )(props);\n};\n","/**\n * Asynchronously loads the component for the Node page\n */\n\nimport * as React from 'react';\nimport { lazyLoad } from '../../../utils/loadable';\n\nexport const SQLBuilderPage = props => {\n  return lazyLoad(\n    () => import('./index'),\n    module => module.SQLBuilderPage,\n    {\n      fallback: <div></div>,\n    },\n  )(props);\n};\n","/**\n * Asynchronously loads the component for the Node page\n */\n\nimport * as React from 'react';\nimport { lazyLoad } from '../../../utils/loadable';\n\nexport const CubeBuilderPage = props => {\n  return lazyLoad(\n    () => import('./index'),\n    module => module.CubeBuilderPage,\n    {\n      fallback: <div></div>,\n    },\n  )(props);\n};\n","import { lazyLoad } from 'utils/loadable';\n\nexport const QueryPlannerPage = lazyLoad(\n  () => import('./index'),\n  module => module.QueryPlannerPage,\n);\n","/**\n * Asynchronously loads the component for the Node page\n */\n\nimport * as React from 'react';\nimport { lazyLoad } from '../../../utils/loadable';\n\nexport const TagPage = () => {\n  return lazyLoad(\n    () => import('./index'),\n    module => module.TagPage,\n    {\n      fallback: <div></div>,\n    },\n  )();\n};\n","/**\n * Asynchronously loads the component for the Node page\n */\n\nimport * as React from 'react';\nimport { lazyLoad } from '../../../utils/loadable';\n\nexport const LazyAddEditNodePage = props => {\n  return lazyLoad(\n    () => import('./index'),\n    module => module.AddEditNodePage,\n    {\n      fallback: <div></div>,\n    },\n  )(props);\n};\n\nexport const AddEditNodePage = props => {\n  return <LazyAddEditNodePage {...props} />;\n};\n","/**\n * Asynchronously loads the component for the Node page\n */\n\nimport * as React from 'react';\nimport { lazyLoad } from '../../../utils/loadable';\n\nexport const AddEditTagPage = () => {\n  return lazyLoad(\n    () => import('./index'),\n    module => module.AddEditTagPage,\n    {\n      fallback: <div></div>,\n    },\n  )();\n};\n","/**\n * Asynchronously loads the component for NotFoundPage\n */\n\nimport * as React from 'react';\nimport { lazyLoad } from '../../../utils/loadable';\n\nexport const NotFoundPage = lazyLoad(\n  () => import('./index'),\n  module => module.NotFoundPage,\n  {\n    fallback: <></>,\n  },\n);\n","var isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tObject.keys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tObject.keys(source).forEach(function(key) {\n\t\tif (!options.isMergeableObject(source[key]) || !target[key]) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = deepmerge(target[key], source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nexport default deepmerge_1;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","'use strict';\n\nvar isArray = Array.isArray;\nvar keyList = Object.keys;\nvar hasProp = Object.prototype.hasOwnProperty;\nvar hasElementType = typeof Element !== 'undefined';\n\nfunction equal(a, b) {\n  // fast-deep-equal index.js 2.0.1\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    var arrA = isArray(a)\n      , arrB = isArray(b)\n      , i\n      , length\n      , key;\n\n    if (arrA && arrB) {\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    if (arrA != arrB) return false;\n\n    var dateA = a instanceof Date\n      , dateB = b instanceof Date;\n    if (dateA != dateB) return false;\n    if (dateA && dateB) return a.getTime() == b.getTime();\n\n    var regexpA = a instanceof RegExp\n      , regexpB = b instanceof RegExp;\n    if (regexpA != regexpB) return false;\n    if (regexpA && regexpB) return a.toString() == b.toString();\n\n    var keys = keyList(a);\n    length = keys.length;\n\n    if (length !== keyList(b).length)\n      return false;\n\n    for (i = length; i-- !== 0;)\n      if (!hasProp.call(b, keys[i])) return false;\n    // end fast-deep-equal\n\n    // start react-fast-compare\n    // custom handling for DOM elements\n    if (hasElementType && a instanceof Element && b instanceof Element)\n      return a === b;\n\n    // custom handling for React\n    for (i = length; i-- !== 0;) {\n      key = keys[i];\n      if (key === '_owner' && a.$$typeof) {\n        // React-specific: avoid traversing React elements' _owner.\n        //  _owner contains circular references\n        // and is not needed when comparing the actual elements (and not their owners)\n        // .$$typeof and ._store on just reasonable markers of a react element\n        continue;\n      } else {\n        // all other properties should be traversed as usual\n        if (!equal(a[key], b[key])) return false;\n      }\n    }\n    // end react-fast-compare\n\n    // fast-deep-equal index.js 2.0.1\n    return true;\n  }\n\n  return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function exportedEqual(a, b) {\n  try {\n    return equal(a, b);\n  } catch (error) {\n    if ((error.message && error.message.match(/stack|recursion/i)) || (error.number === -2146828260)) {\n      // warn on circular references, don't crash\n      // browsers give this different errors name and messages:\n      // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n      // firefox: \"InternalError\", too much recursion\"\n      // edge: \"Error\", \"Out of stack space\"\n      console.warn('Warning: react-fast-compare does not handle circular references.', error.name, error.message);\n      return false;\n    }\n    // some other error. we should definitely know about these\n    throw error;\n  }\n};\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nexport default listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nexport default stackHas;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nexport default arrayEach;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nexport default defineProperty;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nexport default baseAssignValue;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nexport default copyObject;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nexport default isPrototype;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default baseKeys;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nexport default cloneBuffer;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nexport default copyArray;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nexport default getSymbols;\n","import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nexport default arrayPush;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nexport default getSymbolsIn;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nexport default getTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nexport default initCloneArray;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nexport default initCloneByTag;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nexport default baseCreate;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nexport default initCloneObject;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nexport default baseClone;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n  return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nexport default clone;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nexport default arrayMap;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nexport default stringToPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import arrayMap from './_arrayMap.js';\nimport copyArray from './_copyArray.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\nimport stringToPath from './_stringToPath.js';\nimport toKey from './_toKey.js';\nimport toString from './toString.js';\n\n/**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\nfunction toPath(value) {\n  if (isArray(value)) {\n    return arrayMap(value, toKey);\n  }\n  return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n}\n\nexport default toPath;\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true\n};\nvar KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true\n};\nvar FORWARD_REF_STATICS = {\n  '$$typeof': true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true\n};\nvar MEMO_STATICS = {\n  '$$typeof': true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n  // React v16.11 and below\n  if (reactIs.isMemo(component)) {\n    return MEMO_STATICS;\n  } // React v16.12 and above\n\n\n  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n    if (objectPrototype) {\n      var inheritedComponent = getPrototypeOf(sourceComponent);\n\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n      }\n    }\n\n    var keys = getOwnPropertyNames(sourceComponent);\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n    }\n\n    var targetStatics = getStatics(targetComponent);\n    var sourceStatics = getStatics(sourceComponent);\n\n    for (var i = 0; i < keys.length; ++i) {\n      var key = keys[i];\n\n      if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n        var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor);\n        } catch (e) {}\n      }\n    }\n  }\n\n  return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n","import deepmerge from 'deepmerge';\nimport isPlainObject from 'lodash-es/isPlainObject';\nimport { createContext, useContext, Children, useRef, useEffect, useState, useCallback, useMemo, useImperativeHandle, createElement, useLayoutEffect, forwardRef, Component } from 'react';\nimport isEqual from 'react-fast-compare';\nimport invariant from 'tiny-warning';\nimport clone from 'lodash-es/clone';\nimport toPath from 'lodash-es/toPath';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport cloneDeep from 'lodash-es/cloneDeep';\n\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nvar FormikContext = /*#__PURE__*/createContext(undefined);\nFormikContext.displayName = 'FormikContext';\nvar FormikProvider = FormikContext.Provider;\nvar FormikConsumer = FormikContext.Consumer;\nfunction useFormikContext() {\n  var formik = useContext(FormikContext);\n  !!!formik ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Formik context is undefined, please verify you are calling useFormikContext() as child of a <Formik> component.\") : invariant(false) : void 0;\n  return formik;\n}\n\n/** @private is the value an empty array? */\n\nvar isEmptyArray = function isEmptyArray(value) {\n  return Array.isArray(value) && value.length === 0;\n};\n/** @private is the given object a Function? */\n\nvar isFunction = function isFunction(obj) {\n  return typeof obj === 'function';\n};\n/** @private is the given object an Object? */\n\nvar isObject = function isObject(obj) {\n  return obj !== null && typeof obj === 'object';\n};\n/** @private is the given object an integer? */\n\nvar isInteger = function isInteger(obj) {\n  return String(Math.floor(Number(obj))) === obj;\n};\n/** @private is the given object a string? */\n\nvar isString = function isString(obj) {\n  return Object.prototype.toString.call(obj) === '[object String]';\n};\n/** @private is the given object a NaN? */\n// eslint-disable-next-line no-self-compare\n\nvar isNaN$1 = function isNaN(obj) {\n  return obj !== obj;\n};\n/** @private Does a React component have exactly 0 children? */\n\nvar isEmptyChildren = function isEmptyChildren(children) {\n  return Children.count(children) === 0;\n};\n/** @private is the given object/value a promise? */\n\nvar isPromise = function isPromise(value) {\n  return isObject(value) && isFunction(value.then);\n};\n/** @private is the given object/value a type of synthetic event? */\n\nvar isInputEvent = function isInputEvent(value) {\n  return value && isObject(value) && isObject(value.target);\n};\n/**\r\n * Same as document.activeElement but wraps in a try-catch block. In IE it is\r\n * not safe to call document.activeElement if there is nothing focused.\r\n *\r\n * The activeElement will be null only if the document or document body is not\r\n * yet defined.\r\n *\r\n * @param {?Document} doc Defaults to current document.\r\n * @return {Element | null}\r\n * @see https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/core/dom/getActiveElement.js\r\n */\n\nfunction getActiveElement(doc) {\n  doc = doc || (typeof document !== 'undefined' ? document : undefined);\n\n  if (typeof doc === 'undefined') {\n    return null;\n  }\n\n  try {\n    return doc.activeElement || doc.body;\n  } catch (e) {\n    return doc.body;\n  }\n}\n/**\r\n * Deeply get a value from an object via its path.\r\n */\n\nfunction getIn(obj, key, def, p) {\n  if (p === void 0) {\n    p = 0;\n  }\n\n  var path = toPath(key);\n\n  while (obj && p < path.length) {\n    obj = obj[path[p++]];\n  } // check if path is not in the end\n\n\n  if (p !== path.length && !obj) {\n    return def;\n  }\n\n  return obj === undefined ? def : obj;\n}\n/**\r\n * Deeply set a value from in object via it's path. If the value at `path`\r\n * has changed, return a shallow copy of obj with `value` set at `path`.\r\n * If `value` has not changed, return the original `obj`.\r\n *\r\n * Existing objects / arrays along `path` are also shallow copied. Sibling\r\n * objects along path retain the same internal js reference. Since new\r\n * objects / arrays are only created along `path`, we can test if anything\r\n * changed in a nested structure by comparing the object's reference in\r\n * the old and new object, similar to how russian doll cache invalidation\r\n * works.\r\n *\r\n * In earlier versions of this function, which used cloneDeep, there were\r\n * issues whereby settings a nested value would mutate the parent\r\n * instead of creating a new object. `clone` avoids that bug making a\r\n * shallow copy of the objects along the update path\r\n * so no object is mutated in place.\r\n *\r\n * Before changing this function, please read through the following\r\n * discussions.\r\n *\r\n * @see https://github.com/developit/linkstate\r\n * @see https://github.com/jaredpalmer/formik/pull/123\r\n */\n\nfunction setIn(obj, path, value) {\n  var res = clone(obj); // this keeps inheritance when obj is a class\n\n  var resVal = res;\n  var i = 0;\n  var pathArray = toPath(path);\n\n  for (; i < pathArray.length - 1; i++) {\n    var currentPath = pathArray[i];\n    var currentObj = getIn(obj, pathArray.slice(0, i + 1));\n\n    if (currentObj && (isObject(currentObj) || Array.isArray(currentObj))) {\n      resVal = resVal[currentPath] = clone(currentObj);\n    } else {\n      var nextPath = pathArray[i + 1];\n      resVal = resVal[currentPath] = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};\n    }\n  } // Return original object if new value is the same as current\n\n\n  if ((i === 0 ? obj : resVal)[pathArray[i]] === value) {\n    return obj;\n  }\n\n  if (value === undefined) {\n    delete resVal[pathArray[i]];\n  } else {\n    resVal[pathArray[i]] = value;\n  } // If the path array has a single element, the loop did not run.\n  // Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.\n\n\n  if (i === 0 && value === undefined) {\n    delete res[pathArray[i]];\n  }\n\n  return res;\n}\n/**\r\n * Recursively a set the same value for all keys and arrays nested object, cloning\r\n * @param object\r\n * @param value\r\n * @param visited\r\n * @param response\r\n */\n\nfunction setNestedObjectValues(object, value, visited, response) {\n  if (visited === void 0) {\n    visited = new WeakMap();\n  }\n\n  if (response === void 0) {\n    response = {};\n  }\n\n  for (var _i = 0, _Object$keys = Object.keys(object); _i < _Object$keys.length; _i++) {\n    var k = _Object$keys[_i];\n    var val = object[k];\n\n    if (isObject(val)) {\n      if (!visited.get(val)) {\n        visited.set(val, true); // In order to keep array values consistent for both dot path  and\n        // bracket syntax, we need to check if this is an array so that\n        // this will output  { friends: [true] } and not { friends: { \"0\": true } }\n\n        response[k] = Array.isArray(val) ? [] : {};\n        setNestedObjectValues(val, value, visited, response[k]);\n      }\n    } else {\n      response[k] = value;\n    }\n  }\n\n  return response;\n}\n\nfunction formikReducer(state, msg) {\n  switch (msg.type) {\n    case 'SET_VALUES':\n      return _extends({}, state, {\n        values: msg.payload\n      });\n\n    case 'SET_TOUCHED':\n      return _extends({}, state, {\n        touched: msg.payload\n      });\n\n    case 'SET_ERRORS':\n      if (isEqual(state.errors, msg.payload)) {\n        return state;\n      }\n\n      return _extends({}, state, {\n        errors: msg.payload\n      });\n\n    case 'SET_STATUS':\n      return _extends({}, state, {\n        status: msg.payload\n      });\n\n    case 'SET_ISSUBMITTING':\n      return _extends({}, state, {\n        isSubmitting: msg.payload\n      });\n\n    case 'SET_ISVALIDATING':\n      return _extends({}, state, {\n        isValidating: msg.payload\n      });\n\n    case 'SET_FIELD_VALUE':\n      return _extends({}, state, {\n        values: setIn(state.values, msg.payload.field, msg.payload.value)\n      });\n\n    case 'SET_FIELD_TOUCHED':\n      return _extends({}, state, {\n        touched: setIn(state.touched, msg.payload.field, msg.payload.value)\n      });\n\n    case 'SET_FIELD_ERROR':\n      return _extends({}, state, {\n        errors: setIn(state.errors, msg.payload.field, msg.payload.value)\n      });\n\n    case 'RESET_FORM':\n      return _extends({}, state, msg.payload);\n\n    case 'SET_FORMIK_STATE':\n      return msg.payload(state);\n\n    case 'SUBMIT_ATTEMPT':\n      return _extends({}, state, {\n        touched: setNestedObjectValues(state.values, true),\n        isSubmitting: true,\n        submitCount: state.submitCount + 1\n      });\n\n    case 'SUBMIT_FAILURE':\n      return _extends({}, state, {\n        isSubmitting: false\n      });\n\n    case 'SUBMIT_SUCCESS':\n      return _extends({}, state, {\n        isSubmitting: false\n      });\n\n    default:\n      return state;\n  }\n} // Initial empty states // objects\n\n\nvar emptyErrors = {};\nvar emptyTouched = {};\nfunction useFormik(_ref) {\n  var _ref$validateOnChange = _ref.validateOnChange,\n      validateOnChange = _ref$validateOnChange === void 0 ? true : _ref$validateOnChange,\n      _ref$validateOnBlur = _ref.validateOnBlur,\n      validateOnBlur = _ref$validateOnBlur === void 0 ? true : _ref$validateOnBlur,\n      _ref$validateOnMount = _ref.validateOnMount,\n      validateOnMount = _ref$validateOnMount === void 0 ? false : _ref$validateOnMount,\n      isInitialValid = _ref.isInitialValid,\n      _ref$enableReinitiali = _ref.enableReinitialize,\n      enableReinitialize = _ref$enableReinitiali === void 0 ? false : _ref$enableReinitiali,\n      onSubmit = _ref.onSubmit,\n      rest = _objectWithoutPropertiesLoose(_ref, [\"validateOnChange\", \"validateOnBlur\", \"validateOnMount\", \"isInitialValid\", \"enableReinitialize\", \"onSubmit\"]);\n\n  var props = _extends({\n    validateOnChange: validateOnChange,\n    validateOnBlur: validateOnBlur,\n    validateOnMount: validateOnMount,\n    onSubmit: onSubmit\n  }, rest);\n\n  var initialValues = useRef(props.initialValues);\n  var initialErrors = useRef(props.initialErrors || emptyErrors);\n  var initialTouched = useRef(props.initialTouched || emptyTouched);\n  var initialStatus = useRef(props.initialStatus);\n  var isMounted = useRef(false);\n  var fieldRegistry = useRef({});\n\n  if (process.env.NODE_ENV !== \"production\") {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    useEffect(function () {\n      !(typeof isInitialValid === 'undefined') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'isInitialValid has been deprecated and will be removed in future versions of Formik. Please use initialErrors or validateOnMount instead.') : invariant(false) : void 0; // eslint-disable-next-line\n    }, []);\n  }\n\n  useEffect(function () {\n    isMounted.current = true;\n    return function () {\n      isMounted.current = false;\n    };\n  }, []);\n\n  var _React$useState = useState(0),\n      setIteration = _React$useState[1];\n\n  var stateRef = useRef({\n    values: props.initialValues,\n    errors: props.initialErrors || emptyErrors,\n    touched: props.initialTouched || emptyTouched,\n    status: props.initialStatus,\n    isSubmitting: false,\n    isValidating: false,\n    submitCount: 0\n  });\n  var state = stateRef.current;\n  var dispatch = useCallback(function (action) {\n    var prev = stateRef.current;\n    stateRef.current = formikReducer(prev, action); // force rerender\n\n    if (prev !== stateRef.current) setIteration(function (x) {\n      return x + 1;\n    });\n  }, []);\n  var runValidateHandler = useCallback(function (values, field) {\n    return new Promise(function (resolve, reject) {\n      var maybePromisedErrors = props.validate(values, field);\n\n      if (maybePromisedErrors == null) {\n        // use loose null check here on purpose\n        resolve(emptyErrors);\n      } else if (isPromise(maybePromisedErrors)) {\n        maybePromisedErrors.then(function (errors) {\n          resolve(errors || emptyErrors);\n        }, function (actualException) {\n          if (process.env.NODE_ENV !== 'production') {\n            console.warn(\"Warning: An unhandled error was caught during validation in <Formik validate />\", actualException);\n          }\n\n          reject(actualException);\n        });\n      } else {\n        resolve(maybePromisedErrors);\n      }\n    });\n  }, [props.validate]);\n  /**\r\n   * Run validation against a Yup schema and optionally run a function if successful\r\n   */\n\n  var runValidationSchema = useCallback(function (values, field) {\n    var validationSchema = props.validationSchema;\n    var schema = isFunction(validationSchema) ? validationSchema(field) : validationSchema;\n    var promise = field && schema.validateAt ? schema.validateAt(field, values) : validateYupSchema(values, schema);\n    return new Promise(function (resolve, reject) {\n      promise.then(function () {\n        resolve(emptyErrors);\n      }, function (err) {\n        // Yup will throw a validation error if validation fails. We catch those and\n        // resolve them into Formik errors. We can sniff if something is a Yup error\n        // by checking error.name.\n        // @see https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\n        if (err.name === 'ValidationError') {\n          resolve(yupToFormErrors(err));\n        } else {\n          // We throw any other errors\n          if (process.env.NODE_ENV !== 'production') {\n            console.warn(\"Warning: An unhandled error was caught during validation in <Formik validationSchema />\", err);\n          }\n\n          reject(err);\n        }\n      });\n    });\n  }, [props.validationSchema]);\n  var runSingleFieldLevelValidation = useCallback(function (field, value) {\n    return new Promise(function (resolve) {\n      return resolve(fieldRegistry.current[field].validate(value));\n    });\n  }, []);\n  var runFieldLevelValidations = useCallback(function (values) {\n    var fieldKeysWithValidation = Object.keys(fieldRegistry.current).filter(function (f) {\n      return isFunction(fieldRegistry.current[f].validate);\n    }); // Construct an array with all of the field validation functions\n\n    var fieldValidations = fieldKeysWithValidation.length > 0 ? fieldKeysWithValidation.map(function (f) {\n      return runSingleFieldLevelValidation(f, getIn(values, f));\n    }) : [Promise.resolve('DO_NOT_DELETE_YOU_WILL_BE_FIRED')]; // use special case ;)\n\n    return Promise.all(fieldValidations).then(function (fieldErrorsList) {\n      return fieldErrorsList.reduce(function (prev, curr, index) {\n        if (curr === 'DO_NOT_DELETE_YOU_WILL_BE_FIRED') {\n          return prev;\n        }\n\n        if (curr) {\n          prev = setIn(prev, fieldKeysWithValidation[index], curr);\n        }\n\n        return prev;\n      }, {});\n    });\n  }, [runSingleFieldLevelValidation]); // Run all validations and return the result\n\n  var runAllValidations = useCallback(function (values) {\n    return Promise.all([runFieldLevelValidations(values), props.validationSchema ? runValidationSchema(values) : {}, props.validate ? runValidateHandler(values) : {}]).then(function (_ref2) {\n      var fieldErrors = _ref2[0],\n          schemaErrors = _ref2[1],\n          validateErrors = _ref2[2];\n      var combinedErrors = deepmerge.all([fieldErrors, schemaErrors, validateErrors], {\n        arrayMerge: arrayMerge\n      });\n      return combinedErrors;\n    });\n  }, [props.validate, props.validationSchema, runFieldLevelValidations, runValidateHandler, runValidationSchema]); // Run all validations methods and update state accordingly\n\n  var validateFormWithHighPriority = useEventCallback(function (values) {\n    if (values === void 0) {\n      values = state.values;\n    }\n\n    dispatch({\n      type: 'SET_ISVALIDATING',\n      payload: true\n    });\n    return runAllValidations(values).then(function (combinedErrors) {\n      if (!!isMounted.current) {\n        dispatch({\n          type: 'SET_ISVALIDATING',\n          payload: false\n        });\n        dispatch({\n          type: 'SET_ERRORS',\n          payload: combinedErrors\n        });\n      }\n\n      return combinedErrors;\n    });\n  });\n  useEffect(function () {\n    if (validateOnMount && isMounted.current === true && isEqual(initialValues.current, props.initialValues)) {\n      validateFormWithHighPriority(initialValues.current);\n    }\n  }, [validateOnMount, validateFormWithHighPriority]);\n  var resetForm = useCallback(function (nextState) {\n    var values = nextState && nextState.values ? nextState.values : initialValues.current;\n    var errors = nextState && nextState.errors ? nextState.errors : initialErrors.current ? initialErrors.current : props.initialErrors || {};\n    var touched = nextState && nextState.touched ? nextState.touched : initialTouched.current ? initialTouched.current : props.initialTouched || {};\n    var status = nextState && nextState.status ? nextState.status : initialStatus.current ? initialStatus.current : props.initialStatus;\n    initialValues.current = values;\n    initialErrors.current = errors;\n    initialTouched.current = touched;\n    initialStatus.current = status;\n\n    var dispatchFn = function dispatchFn() {\n      dispatch({\n        type: 'RESET_FORM',\n        payload: {\n          isSubmitting: !!nextState && !!nextState.isSubmitting,\n          errors: errors,\n          touched: touched,\n          status: status,\n          values: values,\n          isValidating: !!nextState && !!nextState.isValidating,\n          submitCount: !!nextState && !!nextState.submitCount && typeof nextState.submitCount === 'number' ? nextState.submitCount : 0\n        }\n      });\n    };\n\n    if (props.onReset) {\n      var maybePromisedOnReset = props.onReset(state.values, imperativeMethods);\n\n      if (isPromise(maybePromisedOnReset)) {\n        maybePromisedOnReset.then(dispatchFn);\n      } else {\n        dispatchFn();\n      }\n    } else {\n      dispatchFn();\n    }\n  }, [props.initialErrors, props.initialStatus, props.initialTouched]);\n  useEffect(function () {\n    if (isMounted.current === true && !isEqual(initialValues.current, props.initialValues)) {\n      if (enableReinitialize) {\n        initialValues.current = props.initialValues;\n        resetForm();\n\n        if (validateOnMount) {\n          validateFormWithHighPriority(initialValues.current);\n        }\n      }\n    }\n  }, [enableReinitialize, props.initialValues, resetForm, validateOnMount, validateFormWithHighPriority]);\n  useEffect(function () {\n    if (enableReinitialize && isMounted.current === true && !isEqual(initialErrors.current, props.initialErrors)) {\n      initialErrors.current = props.initialErrors || emptyErrors;\n      dispatch({\n        type: 'SET_ERRORS',\n        payload: props.initialErrors || emptyErrors\n      });\n    }\n  }, [enableReinitialize, props.initialErrors]);\n  useEffect(function () {\n    if (enableReinitialize && isMounted.current === true && !isEqual(initialTouched.current, props.initialTouched)) {\n      initialTouched.current = props.initialTouched || emptyTouched;\n      dispatch({\n        type: 'SET_TOUCHED',\n        payload: props.initialTouched || emptyTouched\n      });\n    }\n  }, [enableReinitialize, props.initialTouched]);\n  useEffect(function () {\n    if (enableReinitialize && isMounted.current === true && !isEqual(initialStatus.current, props.initialStatus)) {\n      initialStatus.current = props.initialStatus;\n      dispatch({\n        type: 'SET_STATUS',\n        payload: props.initialStatus\n      });\n    }\n  }, [enableReinitialize, props.initialStatus, props.initialTouched]);\n  var validateField = useEventCallback(function (name) {\n    // This will efficiently validate a single field by avoiding state\n    // changes if the validation function is synchronous. It's different from\n    // what is called when using validateForm.\n    if (fieldRegistry.current[name] && isFunction(fieldRegistry.current[name].validate)) {\n      var value = getIn(state.values, name);\n      var maybePromise = fieldRegistry.current[name].validate(value);\n\n      if (isPromise(maybePromise)) {\n        // Only flip isValidating if the function is async.\n        dispatch({\n          type: 'SET_ISVALIDATING',\n          payload: true\n        });\n        return maybePromise.then(function (x) {\n          return x;\n        }).then(function (error) {\n          dispatch({\n            type: 'SET_FIELD_ERROR',\n            payload: {\n              field: name,\n              value: error\n            }\n          });\n          dispatch({\n            type: 'SET_ISVALIDATING',\n            payload: false\n          });\n        });\n      } else {\n        dispatch({\n          type: 'SET_FIELD_ERROR',\n          payload: {\n            field: name,\n            value: maybePromise\n          }\n        });\n        return Promise.resolve(maybePromise);\n      }\n    } else if (props.validationSchema) {\n      dispatch({\n        type: 'SET_ISVALIDATING',\n        payload: true\n      });\n      return runValidationSchema(state.values, name).then(function (x) {\n        return x;\n      }).then(function (error) {\n        dispatch({\n          type: 'SET_FIELD_ERROR',\n          payload: {\n            field: name,\n            value: getIn(error, name)\n          }\n        });\n        dispatch({\n          type: 'SET_ISVALIDATING',\n          payload: false\n        });\n      });\n    }\n\n    return Promise.resolve();\n  });\n  var registerField = useCallback(function (name, _ref3) {\n    var validate = _ref3.validate;\n    fieldRegistry.current[name] = {\n      validate: validate\n    };\n  }, []);\n  var unregisterField = useCallback(function (name) {\n    delete fieldRegistry.current[name];\n  }, []);\n  var setTouched = useEventCallback(function (touched, shouldValidate) {\n    dispatch({\n      type: 'SET_TOUCHED',\n      payload: touched\n    });\n    var willValidate = shouldValidate === undefined ? validateOnBlur : shouldValidate;\n    return willValidate ? validateFormWithHighPriority(state.values) : Promise.resolve();\n  });\n  var setErrors = useCallback(function (errors) {\n    dispatch({\n      type: 'SET_ERRORS',\n      payload: errors\n    });\n  }, []);\n  var setValues = useEventCallback(function (values, shouldValidate) {\n    var resolvedValues = isFunction(values) ? values(state.values) : values;\n    dispatch({\n      type: 'SET_VALUES',\n      payload: resolvedValues\n    });\n    var willValidate = shouldValidate === undefined ? validateOnChange : shouldValidate;\n    return willValidate ? validateFormWithHighPriority(resolvedValues) : Promise.resolve();\n  });\n  var setFieldError = useCallback(function (field, value) {\n    dispatch({\n      type: 'SET_FIELD_ERROR',\n      payload: {\n        field: field,\n        value: value\n      }\n    });\n  }, []);\n  var setFieldValue = useEventCallback(function (field, value, shouldValidate) {\n    dispatch({\n      type: 'SET_FIELD_VALUE',\n      payload: {\n        field: field,\n        value: value\n      }\n    });\n    var willValidate = shouldValidate === undefined ? validateOnChange : shouldValidate;\n    return willValidate ? validateFormWithHighPriority(setIn(state.values, field, value)) : Promise.resolve();\n  });\n  var executeChange = useCallback(function (eventOrTextValue, maybePath) {\n    // By default, assume that the first argument is a string. This allows us to use\n    // handleChange with React Native and React Native Web's onChangeText prop which\n    // provides just the value of the input.\n    var field = maybePath;\n    var val = eventOrTextValue;\n    var parsed; // If the first argument is not a string though, it has to be a synthetic React Event (or a fake one),\n    // so we handle like we would a normal HTML change event.\n\n    if (!isString(eventOrTextValue)) {\n      // If we can, persist the event\n      // @see https://reactjs.org/docs/events.html#event-pooling\n      if (eventOrTextValue.persist) {\n        eventOrTextValue.persist();\n      }\n\n      var target = eventOrTextValue.target ? eventOrTextValue.target : eventOrTextValue.currentTarget;\n      var type = target.type,\n          name = target.name,\n          id = target.id,\n          value = target.value,\n          checked = target.checked,\n          outerHTML = target.outerHTML,\n          options = target.options,\n          multiple = target.multiple;\n      field = maybePath ? maybePath : name ? name : id;\n\n      if (!field && process.env.NODE_ENV !== \"production\") {\n        warnAboutMissingIdentifier({\n          htmlContent: outerHTML,\n          documentationAnchorLink: 'handlechange-e-reactchangeeventany--void',\n          handlerName: 'handleChange'\n        });\n      }\n\n      val = /number|range/.test(type) ? (parsed = parseFloat(value), isNaN(parsed) ? '' : parsed) : /checkbox/.test(type) // checkboxes\n      ? getValueForCheckbox(getIn(state.values, field), checked, value) : options && multiple // <select multiple>\n      ? getSelectedValues(options) : value;\n    }\n\n    if (field) {\n      // Set form fields by name\n      setFieldValue(field, val);\n    }\n  }, [setFieldValue, state.values]);\n  var handleChange = useEventCallback(function (eventOrPath) {\n    if (isString(eventOrPath)) {\n      return function (event) {\n        return executeChange(event, eventOrPath);\n      };\n    } else {\n      executeChange(eventOrPath);\n    }\n  });\n  var setFieldTouched = useEventCallback(function (field, touched, shouldValidate) {\n    if (touched === void 0) {\n      touched = true;\n    }\n\n    dispatch({\n      type: 'SET_FIELD_TOUCHED',\n      payload: {\n        field: field,\n        value: touched\n      }\n    });\n    var willValidate = shouldValidate === undefined ? validateOnBlur : shouldValidate;\n    return willValidate ? validateFormWithHighPriority(state.values) : Promise.resolve();\n  });\n  var executeBlur = useCallback(function (e, path) {\n    if (e.persist) {\n      e.persist();\n    }\n\n    var _e$target = e.target,\n        name = _e$target.name,\n        id = _e$target.id,\n        outerHTML = _e$target.outerHTML;\n    var field = path ? path : name ? name : id;\n\n    if (!field && process.env.NODE_ENV !== \"production\") {\n      warnAboutMissingIdentifier({\n        htmlContent: outerHTML,\n        documentationAnchorLink: 'handleblur-e-any--void',\n        handlerName: 'handleBlur'\n      });\n    }\n\n    setFieldTouched(field, true);\n  }, [setFieldTouched]);\n  var handleBlur = useEventCallback(function (eventOrString) {\n    if (isString(eventOrString)) {\n      return function (event) {\n        return executeBlur(event, eventOrString);\n      };\n    } else {\n      executeBlur(eventOrString);\n    }\n  });\n  var setFormikState = useCallback(function (stateOrCb) {\n    if (isFunction(stateOrCb)) {\n      dispatch({\n        type: 'SET_FORMIK_STATE',\n        payload: stateOrCb\n      });\n    } else {\n      dispatch({\n        type: 'SET_FORMIK_STATE',\n        payload: function payload() {\n          return stateOrCb;\n        }\n      });\n    }\n  }, []);\n  var setStatus = useCallback(function (status) {\n    dispatch({\n      type: 'SET_STATUS',\n      payload: status\n    });\n  }, []);\n  var setSubmitting = useCallback(function (isSubmitting) {\n    dispatch({\n      type: 'SET_ISSUBMITTING',\n      payload: isSubmitting\n    });\n  }, []);\n  var submitForm = useEventCallback(function () {\n    dispatch({\n      type: 'SUBMIT_ATTEMPT'\n    });\n    return validateFormWithHighPriority().then(function (combinedErrors) {\n      // In case an error was thrown and passed to the resolved Promise,\n      // `combinedErrors` can be an instance of an Error. We need to check\n      // that and abort the submit.\n      // If we don't do that, calling `Object.keys(new Error())` yields an\n      // empty array, which causes the validation to pass and the form\n      // to be submitted.\n      var isInstanceOfError = combinedErrors instanceof Error;\n      var isActuallyValid = !isInstanceOfError && Object.keys(combinedErrors).length === 0;\n\n      if (isActuallyValid) {\n        // Proceed with submit...\n        //\n        // To respect sync submit fns, we can't simply wrap executeSubmit in a promise and\n        // _always_ dispatch SUBMIT_SUCCESS because isSubmitting would then always be false.\n        // This would be fine in simple cases, but make it impossible to disable submit\n        // buttons where people use callbacks or promises as side effects (which is basically\n        // all of v1 Formik code). Instead, recall that we are inside of a promise chain already,\n        //  so we can try/catch executeSubmit(), if it returns undefined, then just bail.\n        // If there are errors, throw em. Otherwise, wrap executeSubmit in a promise and handle\n        // cleanup of isSubmitting on behalf of the consumer.\n        var promiseOrUndefined;\n\n        try {\n          promiseOrUndefined = executeSubmit(); // Bail if it's sync, consumer is responsible for cleaning up\n          // via setSubmitting(false)\n\n          if (promiseOrUndefined === undefined) {\n            return;\n          }\n        } catch (error) {\n          throw error;\n        }\n\n        return Promise.resolve(promiseOrUndefined).then(function (result) {\n          if (!!isMounted.current) {\n            dispatch({\n              type: 'SUBMIT_SUCCESS'\n            });\n          }\n\n          return result;\n        })[\"catch\"](function (_errors) {\n          if (!!isMounted.current) {\n            dispatch({\n              type: 'SUBMIT_FAILURE'\n            }); // This is a legit error rejected by the onSubmit fn\n            // so we don't want to break the promise chain\n\n            throw _errors;\n          }\n        });\n      } else if (!!isMounted.current) {\n        // ^^^ Make sure Formik is still mounted before updating state\n        dispatch({\n          type: 'SUBMIT_FAILURE'\n        }); // throw combinedErrors;\n\n        if (isInstanceOfError) {\n          throw combinedErrors;\n        }\n      }\n\n      return;\n    });\n  });\n  var handleSubmit = useEventCallback(function (e) {\n    if (e && e.preventDefault && isFunction(e.preventDefault)) {\n      e.preventDefault();\n    }\n\n    if (e && e.stopPropagation && isFunction(e.stopPropagation)) {\n      e.stopPropagation();\n    } // Warn if form submission is triggered by a <button> without a\n    // specified `type` attribute during development. This mitigates\n    // a common gotcha in forms with both reset and submit buttons,\n    // where the dev forgets to add type=\"button\" to the reset button.\n\n\n    if (process.env.NODE_ENV !== \"production\" && typeof document !== 'undefined') {\n      // Safely get the active element (works with IE)\n      var activeElement = getActiveElement();\n\n      if (activeElement !== null && activeElement instanceof HTMLButtonElement) {\n        !(activeElement.attributes && activeElement.attributes.getNamedItem('type')) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'You submitted a Formik form using a button with an unspecified `type` attribute.  Most browsers default button elements to `type=\"submit\"`. If this is not a submit button, please add `type=\"button\"`.') : invariant(false) : void 0;\n      }\n    }\n\n    submitForm()[\"catch\"](function (reason) {\n      console.warn(\"Warning: An unhandled error was caught from submitForm()\", reason);\n    });\n  });\n  var imperativeMethods = {\n    resetForm: resetForm,\n    validateForm: validateFormWithHighPriority,\n    validateField: validateField,\n    setErrors: setErrors,\n    setFieldError: setFieldError,\n    setFieldTouched: setFieldTouched,\n    setFieldValue: setFieldValue,\n    setStatus: setStatus,\n    setSubmitting: setSubmitting,\n    setTouched: setTouched,\n    setValues: setValues,\n    setFormikState: setFormikState,\n    submitForm: submitForm\n  };\n  var executeSubmit = useEventCallback(function () {\n    return onSubmit(state.values, imperativeMethods);\n  });\n  var handleReset = useEventCallback(function (e) {\n    if (e && e.preventDefault && isFunction(e.preventDefault)) {\n      e.preventDefault();\n    }\n\n    if (e && e.stopPropagation && isFunction(e.stopPropagation)) {\n      e.stopPropagation();\n    }\n\n    resetForm();\n  });\n  var getFieldMeta = useCallback(function (name) {\n    return {\n      value: getIn(state.values, name),\n      error: getIn(state.errors, name),\n      touched: !!getIn(state.touched, name),\n      initialValue: getIn(initialValues.current, name),\n      initialTouched: !!getIn(initialTouched.current, name),\n      initialError: getIn(initialErrors.current, name)\n    };\n  }, [state.errors, state.touched, state.values]);\n  var getFieldHelpers = useCallback(function (name) {\n    return {\n      setValue: function setValue(value, shouldValidate) {\n        return setFieldValue(name, value, shouldValidate);\n      },\n      setTouched: function setTouched(value, shouldValidate) {\n        return setFieldTouched(name, value, shouldValidate);\n      },\n      setError: function setError(value) {\n        return setFieldError(name, value);\n      }\n    };\n  }, [setFieldValue, setFieldTouched, setFieldError]);\n  var getFieldProps = useCallback(function (nameOrOptions) {\n    var isAnObject = isObject(nameOrOptions);\n    var name = isAnObject ? nameOrOptions.name : nameOrOptions;\n    var valueState = getIn(state.values, name);\n    var field = {\n      name: name,\n      value: valueState,\n      onChange: handleChange,\n      onBlur: handleBlur\n    };\n\n    if (isAnObject) {\n      var type = nameOrOptions.type,\n          valueProp = nameOrOptions.value,\n          is = nameOrOptions.as,\n          multiple = nameOrOptions.multiple;\n\n      if (type === 'checkbox') {\n        if (valueProp === undefined) {\n          field.checked = !!valueState;\n        } else {\n          field.checked = !!(Array.isArray(valueState) && ~valueState.indexOf(valueProp));\n          field.value = valueProp;\n        }\n      } else if (type === 'radio') {\n        field.checked = valueState === valueProp;\n        field.value = valueProp;\n      } else if (is === 'select' && multiple) {\n        field.value = field.value || [];\n        field.multiple = true;\n      }\n    }\n\n    return field;\n  }, [handleBlur, handleChange, state.values]);\n  var dirty = useMemo(function () {\n    return !isEqual(initialValues.current, state.values);\n  }, [initialValues.current, state.values]);\n  var isValid = useMemo(function () {\n    return typeof isInitialValid !== 'undefined' ? dirty ? state.errors && Object.keys(state.errors).length === 0 : isInitialValid !== false && isFunction(isInitialValid) ? isInitialValid(props) : isInitialValid : state.errors && Object.keys(state.errors).length === 0;\n  }, [isInitialValid, dirty, state.errors, props]);\n\n  var ctx = _extends({}, state, {\n    initialValues: initialValues.current,\n    initialErrors: initialErrors.current,\n    initialTouched: initialTouched.current,\n    initialStatus: initialStatus.current,\n    handleBlur: handleBlur,\n    handleChange: handleChange,\n    handleReset: handleReset,\n    handleSubmit: handleSubmit,\n    resetForm: resetForm,\n    setErrors: setErrors,\n    setFormikState: setFormikState,\n    setFieldTouched: setFieldTouched,\n    setFieldValue: setFieldValue,\n    setFieldError: setFieldError,\n    setStatus: setStatus,\n    setSubmitting: setSubmitting,\n    setTouched: setTouched,\n    setValues: setValues,\n    submitForm: submitForm,\n    validateForm: validateFormWithHighPriority,\n    validateField: validateField,\n    isValid: isValid,\n    dirty: dirty,\n    unregisterField: unregisterField,\n    registerField: registerField,\n    getFieldProps: getFieldProps,\n    getFieldMeta: getFieldMeta,\n    getFieldHelpers: getFieldHelpers,\n    validateOnBlur: validateOnBlur,\n    validateOnChange: validateOnChange,\n    validateOnMount: validateOnMount\n  });\n\n  return ctx;\n}\nfunction Formik(props) {\n  var formikbag = useFormik(props);\n  var component = props.component,\n      children = props.children,\n      render = props.render,\n      innerRef = props.innerRef; // This allows folks to pass a ref to <Formik />\n\n  useImperativeHandle(innerRef, function () {\n    return formikbag;\n  });\n\n  if (process.env.NODE_ENV !== \"production\") {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    useEffect(function () {\n      !!props.render ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"<Formik render> has been deprecated and will be removed in future versions of Formik. Please use a child callback function instead. To get rid of this warning, replace <Formik render={(props) => ...} /> with <Formik>{(props) => ...}</Formik>\") : invariant(false) : void 0; // eslint-disable-next-line\n    }, []);\n  }\n\n  return createElement(FormikProvider, {\n    value: formikbag\n  }, component ? createElement(component, formikbag) : render ? render(formikbag) : children // children come last, always called\n  ? isFunction(children) ? children(formikbag) : !isEmptyChildren(children) ? Children.only(children) : null : null);\n}\n\nfunction warnAboutMissingIdentifier(_ref4) {\n  var htmlContent = _ref4.htmlContent,\n      documentationAnchorLink = _ref4.documentationAnchorLink,\n      handlerName = _ref4.handlerName;\n  console.warn(\"Warning: Formik called `\" + handlerName + \"`, but you forgot to pass an `id` or `name` attribute to your input:\\n    \" + htmlContent + \"\\n    Formik cannot determine which value to update. For more info see https://formik.org/docs/api/formik#\" + documentationAnchorLink + \"\\n  \");\n}\n/**\r\n * Transform Yup ValidationError to a more usable object\r\n */\n\n\nfunction yupToFormErrors(yupError) {\n  var errors = {};\n\n  if (yupError.inner) {\n    if (yupError.inner.length === 0) {\n      return setIn(errors, yupError.path, yupError.message);\n    }\n\n    for (var _iterator = yupError.inner, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref5;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref5 = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref5 = _i.value;\n      }\n\n      var err = _ref5;\n\n      if (!getIn(errors, err.path)) {\n        errors = setIn(errors, err.path, err.message);\n      }\n    }\n  }\n\n  return errors;\n}\n/**\r\n * Validate a yup schema.\r\n */\n\nfunction validateYupSchema(values, schema, sync, context) {\n  if (sync === void 0) {\n    sync = false;\n  }\n\n  var normalizedValues = prepareDataForValidation(values);\n  return schema[sync ? 'validateSync' : 'validate'](normalizedValues, {\n    abortEarly: false,\n    context: context || normalizedValues\n  });\n}\n/**\r\n * Recursively prepare values.\r\n */\n\nfunction prepareDataForValidation(values) {\n  var data = Array.isArray(values) ? [] : {};\n\n  for (var k in values) {\n    if (Object.prototype.hasOwnProperty.call(values, k)) {\n      var key = String(k);\n\n      if (Array.isArray(values[key]) === true) {\n        data[key] = values[key].map(function (value) {\n          if (Array.isArray(value) === true || isPlainObject(value)) {\n            return prepareDataForValidation(value);\n          } else {\n            return value !== '' ? value : undefined;\n          }\n        });\n      } else if (isPlainObject(values[key])) {\n        data[key] = prepareDataForValidation(values[key]);\n      } else {\n        data[key] = values[key] !== '' ? values[key] : undefined;\n      }\n    }\n  }\n\n  return data;\n}\n/**\r\n * deepmerge array merging algorithm\r\n * https://github.com/KyleAMathews/deepmerge#combine-array\r\n */\n\nfunction arrayMerge(target, source, options) {\n  var destination = target.slice();\n  source.forEach(function merge(e, i) {\n    if (typeof destination[i] === 'undefined') {\n      var cloneRequested = options.clone !== false;\n      var shouldClone = cloneRequested && options.isMergeableObject(e);\n      destination[i] = shouldClone ? deepmerge(Array.isArray(e) ? [] : {}, e, options) : e;\n    } else if (options.isMergeableObject(e)) {\n      destination[i] = deepmerge(target[i], e, options);\n    } else if (target.indexOf(e) === -1) {\n      destination.push(e);\n    }\n  });\n  return destination;\n}\n/** Return multi select values based on an array of options */\n\n\nfunction getSelectedValues(options) {\n  return Array.from(options).filter(function (el) {\n    return el.selected;\n  }).map(function (el) {\n    return el.value;\n  });\n}\n/** Return the next value for a checkbox */\n\n\nfunction getValueForCheckbox(currentValue, checked, valueProp) {\n  // If the current value was a boolean, return a boolean\n  if (typeof currentValue === 'boolean') {\n    return Boolean(checked);\n  } // If the currentValue was not a boolean we want to return an array\n\n\n  var currentArrayOfValues = [];\n  var isValueInArray = false;\n  var index = -1;\n\n  if (!Array.isArray(currentValue)) {\n    // eslint-disable-next-line eqeqeq\n    if (!valueProp || valueProp == 'true' || valueProp == 'false') {\n      return Boolean(checked);\n    }\n  } else {\n    // If the current value is already an array, use it\n    currentArrayOfValues = currentValue;\n    index = currentValue.indexOf(valueProp);\n    isValueInArray = index >= 0;\n  } // If the checkbox was checked and the value is not already present in the aray we want to add the new value to the array of values\n\n\n  if (checked && valueProp && !isValueInArray) {\n    return currentArrayOfValues.concat(valueProp);\n  } // If the checkbox was unchecked and the value is not in the array, simply return the already existing array of values\n\n\n  if (!isValueInArray) {\n    return currentArrayOfValues;\n  } // If the checkbox was unchecked and the value is in the array, remove the value and return the array\n\n\n  return currentArrayOfValues.slice(0, index).concat(currentArrayOfValues.slice(index + 1));\n} // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser.\n// @see https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\n\n\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? useLayoutEffect : useEffect;\n\nfunction useEventCallback(fn) {\n  var ref = useRef(fn); // we copy a ref to the callback scoped to the current state/props on each render\n\n  useIsomorphicLayoutEffect(function () {\n    ref.current = fn;\n  });\n  return useCallback(function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return ref.current.apply(void 0, args);\n  }, []);\n}\n\nfunction useField(propsOrFieldName) {\n  var formik = useFormikContext();\n  var getFieldProps = formik.getFieldProps,\n      getFieldMeta = formik.getFieldMeta,\n      getFieldHelpers = formik.getFieldHelpers,\n      registerField = formik.registerField,\n      unregisterField = formik.unregisterField;\n  var isAnObject = isObject(propsOrFieldName); // Normalize propsOrFieldName to FieldHookConfig<Val>\n\n  var props = isAnObject ? propsOrFieldName : {\n    name: propsOrFieldName\n  };\n  var fieldName = props.name,\n      validateFn = props.validate;\n  useEffect(function () {\n    if (fieldName) {\n      registerField(fieldName, {\n        validate: validateFn\n      });\n    }\n\n    return function () {\n      if (fieldName) {\n        unregisterField(fieldName);\n      }\n    };\n  }, [registerField, unregisterField, fieldName, validateFn]);\n\n  if (process.env.NODE_ENV !== \"production\") {\n    !formik ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'useField() / <Field /> must be used underneath a <Formik> component or withFormik() higher order component') : invariant(false) : void 0;\n  }\n\n  !fieldName ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Invalid field name. Either pass `useField` a string or an object containing a `name` key.') : invariant(false) : void 0;\n  var fieldHelpers = useMemo(function () {\n    return getFieldHelpers(fieldName);\n  }, [getFieldHelpers, fieldName]);\n  return [getFieldProps(props), getFieldMeta(fieldName), fieldHelpers];\n}\nfunction Field(_ref) {\n  var validate = _ref.validate,\n      name = _ref.name,\n      render = _ref.render,\n      children = _ref.children,\n      is = _ref.as,\n      component = _ref.component,\n      props = _objectWithoutPropertiesLoose(_ref, [\"validate\", \"name\", \"render\", \"children\", \"as\", \"component\"]);\n\n  var _useFormikContext = useFormikContext(),\n      formik = _objectWithoutPropertiesLoose(_useFormikContext, [\"validate\", \"validationSchema\"]);\n\n  if (process.env.NODE_ENV !== \"production\") {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    useEffect(function () {\n      !!render ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"<Field render> has been deprecated and will be removed in future versions of Formik. Please use a child callback function instead. To get rid of this warning, replace <Field name=\\\"\" + name + \"\\\" render={({field, form}) => ...} /> with <Field name=\\\"\" + name + \"\\\">{({field, form, meta}) => ...}</Field>\") : invariant(false) : void 0;\n      !!(is && children && isFunction(children)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'You should not use <Field as> and <Field children> as a function in the same <Field> component; <Field as> will be ignored.') : invariant(false) : void 0;\n      !!(component && children && isFunction(children)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'You should not use <Field component> and <Field children> as a function in the same <Field> component; <Field component> will be ignored.') : invariant(false) : void 0;\n      !!(render && children && !isEmptyChildren(children)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'You should not use <Field render> and <Field children> in the same <Field> component; <Field children> will be ignored') : invariant(false) : void 0; // eslint-disable-next-line\n    }, []);\n  } // Register field and field-level validation with parent <Formik>\n\n\n  var registerField = formik.registerField,\n      unregisterField = formik.unregisterField;\n  useEffect(function () {\n    registerField(name, {\n      validate: validate\n    });\n    return function () {\n      unregisterField(name);\n    };\n  }, [registerField, unregisterField, name, validate]);\n  var field = formik.getFieldProps(_extends({\n    name: name\n  }, props));\n  var meta = formik.getFieldMeta(name);\n  var legacyBag = {\n    field: field,\n    form: formik\n  };\n\n  if (render) {\n    return render(_extends({}, legacyBag, {\n      meta: meta\n    }));\n  }\n\n  if (isFunction(children)) {\n    return children(_extends({}, legacyBag, {\n      meta: meta\n    }));\n  }\n\n  if (component) {\n    // This behavior is backwards compat with earlier Formik 0.9 to 1.x\n    if (typeof component === 'string') {\n      var innerRef = props.innerRef,\n          rest = _objectWithoutPropertiesLoose(props, [\"innerRef\"]);\n\n      return createElement(component, _extends({\n        ref: innerRef\n      }, field, rest), children);\n    } // We don't pass `meta` for backwards compat\n\n\n    return createElement(component, _extends({\n      field: field,\n      form: formik\n    }, props), children);\n  } // default to input here so we can check for both `as` and `children` above\n\n\n  var asElement = is || 'input';\n\n  if (typeof asElement === 'string') {\n    var _innerRef = props.innerRef,\n        _rest = _objectWithoutPropertiesLoose(props, [\"innerRef\"]);\n\n    return createElement(asElement, _extends({\n      ref: _innerRef\n    }, field, _rest), children);\n  }\n\n  return createElement(asElement, _extends({}, field, props), children);\n}\n\nvar Form = /*#__PURE__*/forwardRef(function (props, ref) {\n  // iOS needs an \"action\" attribute for nice input: https://stackoverflow.com/a/39485162/406725\n  // We default the action to \"#\" in case the preventDefault fails (just updates the URL hash)\n  var action = props.action,\n      rest = _objectWithoutPropertiesLoose(props, [\"action\"]);\n\n  var _action = action != null ? action : '#';\n\n  var _useFormikContext = useFormikContext(),\n      handleReset = _useFormikContext.handleReset,\n      handleSubmit = _useFormikContext.handleSubmit;\n\n  return createElement(\"form\", _extends({\n    onSubmit: handleSubmit,\n    ref: ref,\n    onReset: handleReset,\n    action: _action\n  }, rest));\n});\nForm.displayName = 'Form';\n\n/**\r\n * A public higher-order component to access the imperative API\r\n */\n\nfunction withFormik(_ref) {\n  var _ref$mapPropsToValues = _ref.mapPropsToValues,\n      mapPropsToValues = _ref$mapPropsToValues === void 0 ? function (vanillaProps) {\n    var val = {};\n\n    for (var k in vanillaProps) {\n      if (vanillaProps.hasOwnProperty(k) && typeof vanillaProps[k] !== 'function') {\n        // @todo TypeScript fix\n        val[k] = vanillaProps[k];\n      }\n    }\n\n    return val;\n  } : _ref$mapPropsToValues,\n      config = _objectWithoutPropertiesLoose(_ref, [\"mapPropsToValues\"]);\n\n  return function createFormik(Component$1) {\n    var componentDisplayName = Component$1.displayName || Component$1.name || Component$1.constructor && Component$1.constructor.name || 'Component';\n    /**\r\n     * We need to use closures here for to provide the wrapped component's props to\r\n     * the respective withFormik config methods.\r\n     */\n\n    var C = /*#__PURE__*/function (_React$Component) {\n      _inheritsLoose(C, _React$Component);\n\n      function C() {\n        var _this;\n\n        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n        _this.validate = function (values) {\n          return config.validate(values, _this.props);\n        };\n\n        _this.validationSchema = function () {\n          return isFunction(config.validationSchema) ? config.validationSchema(_this.props) : config.validationSchema;\n        };\n\n        _this.handleSubmit = function (values, actions) {\n          return config.handleSubmit(values, _extends({}, actions, {\n            props: _this.props\n          }));\n        };\n\n        _this.renderFormComponent = function (formikProps) {\n          return createElement(Component$1, _extends({}, _this.props, formikProps));\n        };\n\n        return _this;\n      }\n\n      var _proto = C.prototype;\n\n      _proto.render = function render() {\n        var _this$props = this.props,\n            props = _objectWithoutPropertiesLoose(_this$props, [\"children\"]);\n\n        return createElement(Formik, _extends({}, props, config, {\n          validate: config.validate && this.validate,\n          validationSchema: config.validationSchema && this.validationSchema,\n          initialValues: mapPropsToValues(this.props),\n          initialStatus: config.mapPropsToStatus && config.mapPropsToStatus(this.props),\n          initialErrors: config.mapPropsToErrors && config.mapPropsToErrors(this.props),\n          initialTouched: config.mapPropsToTouched && config.mapPropsToTouched(this.props),\n          onSubmit: this.handleSubmit,\n          children: this.renderFormComponent\n        }));\n      };\n\n      return C;\n    }(Component);\n\n    C.displayName = \"WithFormik(\" + componentDisplayName + \")\";\n    return hoistNonReactStatics(C, Component$1 // cast type to ComponentClass (even if SFC)\n    );\n  };\n}\n\n/**\r\n * Connect any component to Formik context, and inject as a prop called `formik`;\r\n * @param Comp React Component\r\n */\n\nfunction connect(Comp) {\n  var C = function C(props) {\n    return createElement(FormikConsumer, null, function (formik) {\n      !!!formik ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Formik context is undefined, please verify you are rendering <Form>, <Field>, <FastField>, <FieldArray>, or your custom context-using component as a child of a <Formik> component. Component name: \" + Comp.name) : invariant(false) : void 0;\n      return createElement(Comp, _extends({}, props, {\n        formik: formik\n      }));\n    });\n  };\n\n  var componentDisplayName = Comp.displayName || Comp.name || Comp.constructor && Comp.constructor.name || 'Component'; // Assign Comp to C.WrappedComponent so we can access the inner component in tests\n  // For example, <Field.WrappedComponent /> gets us <FieldInner/>\n\n  C.WrappedComponent = Comp;\n  C.displayName = \"FormikConnect(\" + componentDisplayName + \")\";\n  return hoistNonReactStatics(C, Comp // cast type to ComponentClass (even if SFC)\n  );\n}\n\n/**\r\n * Some array helpers!\r\n */\n\nvar move = function move(array, from, to) {\n  var copy = copyArrayLike(array);\n  var value = copy[from];\n  copy.splice(from, 1);\n  copy.splice(to, 0, value);\n  return copy;\n};\nvar swap = function swap(arrayLike, indexA, indexB) {\n  var copy = copyArrayLike(arrayLike);\n  var a = copy[indexA];\n  copy[indexA] = copy[indexB];\n  copy[indexB] = a;\n  return copy;\n};\nvar insert = function insert(arrayLike, index, value) {\n  var copy = copyArrayLike(arrayLike);\n  copy.splice(index, 0, value);\n  return copy;\n};\nvar replace = function replace(arrayLike, index, value) {\n  var copy = copyArrayLike(arrayLike);\n  copy[index] = value;\n  return copy;\n};\n\nvar copyArrayLike = function copyArrayLike(arrayLike) {\n  if (!arrayLike) {\n    return [];\n  } else if (Array.isArray(arrayLike)) {\n    return [].concat(arrayLike);\n  } else {\n    var maxIndex = Object.keys(arrayLike).map(function (key) {\n      return parseInt(key);\n    }).reduce(function (max, el) {\n      return el > max ? el : max;\n    }, 0);\n    return Array.from(_extends({}, arrayLike, {\n      length: maxIndex + 1\n    }));\n  }\n};\n\nvar createAlterationHandler = function createAlterationHandler(alteration, defaultFunction) {\n  var fn = typeof alteration === 'function' ? alteration : defaultFunction;\n  return function (data) {\n    if (Array.isArray(data) || isObject(data)) {\n      var clone = copyArrayLike(data);\n      return fn(clone);\n    } // This can be assumed to be a primitive, which\n    // is a case for top level validation errors\n\n\n    return data;\n  };\n};\n\nvar FieldArrayInner = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(FieldArrayInner, _React$Component);\n\n  function FieldArrayInner(props) {\n    var _this;\n\n    _this = _React$Component.call(this, props) || this; // We need TypeScript generics on these, so we'll bind them in the constructor\n    // @todo Fix TS 3.2.1\n\n    _this.updateArrayField = function (fn, alterTouched, alterErrors) {\n      var _this$props = _this.props,\n          name = _this$props.name,\n          setFormikState = _this$props.formik.setFormikState;\n      setFormikState(function (prevState) {\n        var updateErrors = createAlterationHandler(alterErrors, fn);\n        var updateTouched = createAlterationHandler(alterTouched, fn); // values fn should be executed before updateErrors and updateTouched,\n        // otherwise it causes an error with unshift.\n\n        var values = setIn(prevState.values, name, fn(getIn(prevState.values, name)));\n        var fieldError = alterErrors ? updateErrors(getIn(prevState.errors, name)) : undefined;\n        var fieldTouched = alterTouched ? updateTouched(getIn(prevState.touched, name)) : undefined;\n\n        if (isEmptyArray(fieldError)) {\n          fieldError = undefined;\n        }\n\n        if (isEmptyArray(fieldTouched)) {\n          fieldTouched = undefined;\n        }\n\n        return _extends({}, prevState, {\n          values: values,\n          errors: alterErrors ? setIn(prevState.errors, name, fieldError) : prevState.errors,\n          touched: alterTouched ? setIn(prevState.touched, name, fieldTouched) : prevState.touched\n        });\n      });\n    };\n\n    _this.push = function (value) {\n      return _this.updateArrayField(function (arrayLike) {\n        return [].concat(copyArrayLike(arrayLike), [cloneDeep(value)]);\n      }, false, false);\n    };\n\n    _this.handlePush = function (value) {\n      return function () {\n        return _this.push(value);\n      };\n    };\n\n    _this.swap = function (indexA, indexB) {\n      return _this.updateArrayField(function (array) {\n        return swap(array, indexA, indexB);\n      }, true, true);\n    };\n\n    _this.handleSwap = function (indexA, indexB) {\n      return function () {\n        return _this.swap(indexA, indexB);\n      };\n    };\n\n    _this.move = function (from, to) {\n      return _this.updateArrayField(function (array) {\n        return move(array, from, to);\n      }, true, true);\n    };\n\n    _this.handleMove = function (from, to) {\n      return function () {\n        return _this.move(from, to);\n      };\n    };\n\n    _this.insert = function (index, value) {\n      return _this.updateArrayField(function (array) {\n        return insert(array, index, value);\n      }, function (array) {\n        return insert(array, index, null);\n      }, function (array) {\n        return insert(array, index, null);\n      });\n    };\n\n    _this.handleInsert = function (index, value) {\n      return function () {\n        return _this.insert(index, value);\n      };\n    };\n\n    _this.replace = function (index, value) {\n      return _this.updateArrayField(function (array) {\n        return replace(array, index, value);\n      }, false, false);\n    };\n\n    _this.handleReplace = function (index, value) {\n      return function () {\n        return _this.replace(index, value);\n      };\n    };\n\n    _this.unshift = function (value) {\n      var length = -1;\n\n      _this.updateArrayField(function (array) {\n        var arr = array ? [value].concat(array) : [value];\n        length = arr.length;\n        return arr;\n      }, function (array) {\n        return array ? [null].concat(array) : [null];\n      }, function (array) {\n        return array ? [null].concat(array) : [null];\n      });\n\n      return length;\n    };\n\n    _this.handleUnshift = function (value) {\n      return function () {\n        return _this.unshift(value);\n      };\n    };\n\n    _this.handleRemove = function (index) {\n      return function () {\n        return _this.remove(index);\n      };\n    };\n\n    _this.handlePop = function () {\n      return function () {\n        return _this.pop();\n      };\n    };\n\n    _this.remove = _this.remove.bind(_assertThisInitialized(_this));\n    _this.pop = _this.pop.bind(_assertThisInitialized(_this));\n    return _this;\n  }\n\n  var _proto = FieldArrayInner.prototype;\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    if (this.props.validateOnChange && this.props.formik.validateOnChange && !isEqual(getIn(prevProps.formik.values, prevProps.name), getIn(this.props.formik.values, this.props.name))) {\n      this.props.formik.validateForm(this.props.formik.values);\n    }\n  };\n\n  _proto.remove = function remove(index) {\n    // We need to make sure we also remove relevant pieces of `touched` and `errors`\n    var result;\n    this.updateArrayField( // so this gets call 3 times\n    function (array) {\n      var copy = array ? copyArrayLike(array) : [];\n\n      if (!result) {\n        result = copy[index];\n      }\n\n      if (isFunction(copy.splice)) {\n        copy.splice(index, 1);\n      } // if the array only includes undefined values we have to return an empty array\n\n\n      return isFunction(copy.every) ? copy.every(function (v) {\n        return v === undefined;\n      }) ? [] : copy : copy;\n    }, true, true);\n    return result;\n  };\n\n  _proto.pop = function pop() {\n    // Remove relevant pieces of `touched` and `errors` too!\n    var result;\n    this.updateArrayField( // so this gets call 3 times\n    function (array) {\n      var tmp = array.slice();\n\n      if (!result) {\n        result = tmp && tmp.pop && tmp.pop();\n      }\n\n      return tmp;\n    }, true, true);\n    return result;\n  };\n\n  _proto.render = function render() {\n    var arrayHelpers = {\n      push: this.push,\n      pop: this.pop,\n      swap: this.swap,\n      move: this.move,\n      insert: this.insert,\n      replace: this.replace,\n      unshift: this.unshift,\n      remove: this.remove,\n      handlePush: this.handlePush,\n      handlePop: this.handlePop,\n      handleSwap: this.handleSwap,\n      handleMove: this.handleMove,\n      handleInsert: this.handleInsert,\n      handleReplace: this.handleReplace,\n      handleUnshift: this.handleUnshift,\n      handleRemove: this.handleRemove\n    };\n\n    var _this$props2 = this.props,\n        component = _this$props2.component,\n        render = _this$props2.render,\n        children = _this$props2.children,\n        name = _this$props2.name,\n        _this$props2$formik = _this$props2.formik,\n        restOfFormik = _objectWithoutPropertiesLoose(_this$props2$formik, [\"validate\", \"validationSchema\"]);\n\n    var props = _extends({}, arrayHelpers, {\n      form: restOfFormik,\n      name: name\n    });\n\n    return component ? createElement(component, props) : render ? render(props) : children // children come last, always called\n    ? typeof children === 'function' ? children(props) : !isEmptyChildren(children) ? Children.only(children) : null : null;\n  };\n\n  return FieldArrayInner;\n}(Component);\n\nFieldArrayInner.defaultProps = {\n  validateOnChange: true\n};\nvar FieldArray = /*#__PURE__*/connect(FieldArrayInner);\n\nvar ErrorMessageImpl = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(ErrorMessageImpl, _React$Component);\n\n  function ErrorMessageImpl() {\n    return _React$Component.apply(this, arguments) || this;\n  }\n\n  var _proto = ErrorMessageImpl.prototype;\n\n  _proto.shouldComponentUpdate = function shouldComponentUpdate(props) {\n    if (getIn(this.props.formik.errors, this.props.name) !== getIn(props.formik.errors, this.props.name) || getIn(this.props.formik.touched, this.props.name) !== getIn(props.formik.touched, this.props.name) || Object.keys(this.props).length !== Object.keys(props).length) {\n      return true;\n    } else {\n      return false;\n    }\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        component = _this$props.component,\n        formik = _this$props.formik,\n        render = _this$props.render,\n        children = _this$props.children,\n        name = _this$props.name,\n        rest = _objectWithoutPropertiesLoose(_this$props, [\"component\", \"formik\", \"render\", \"children\", \"name\"]);\n\n    var touch = getIn(formik.touched, name);\n    var error = getIn(formik.errors, name);\n    return !!touch && !!error ? render ? isFunction(render) ? render(error) : null : children ? isFunction(children) ? children(error) : null : component ? createElement(component, rest, error) : error : null;\n  };\n\n  return ErrorMessageImpl;\n}(Component);\n\nvar ErrorMessage = /*#__PURE__*/connect(ErrorMessageImpl);\n\n/**\r\n * Custom Field component for quickly hooking into Formik\r\n * context and wiring up forms.\r\n */\n\nvar FastFieldInner = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(FastFieldInner, _React$Component);\n\n  function FastFieldInner(props) {\n    var _this;\n\n    _this = _React$Component.call(this, props) || this;\n    var render = props.render,\n        children = props.children,\n        component = props.component,\n        is = props.as,\n        name = props.name;\n    !!render ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"<FastField render> has been deprecated. Please use a child callback function instead: <FastField name={\" + name + \"}>{props => ...}</FastField> instead.\") : invariant(false) : void 0;\n    !!(component && render) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'You should not use <FastField component> and <FastField render> in the same <FastField> component; <FastField component> will be ignored') : invariant(false) : void 0;\n    !!(is && children && isFunction(children)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'You should not use <FastField as> and <FastField children> as a function in the same <FastField> component; <FastField as> will be ignored.') : invariant(false) : void 0;\n    !!(component && children && isFunction(children)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'You should not use <FastField component> and <FastField children> as a function in the same <FastField> component; <FastField component> will be ignored.') : invariant(false) : void 0;\n    !!(render && children && !isEmptyChildren(children)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'You should not use <FastField render> and <FastField children> in the same <FastField> component; <FastField children> will be ignored') : invariant(false) : void 0;\n    return _this;\n  }\n\n  var _proto = FastFieldInner.prototype;\n\n  _proto.shouldComponentUpdate = function shouldComponentUpdate(props) {\n    if (this.props.shouldUpdate) {\n      return this.props.shouldUpdate(props, this.props);\n    } else if (props.name !== this.props.name || getIn(props.formik.values, this.props.name) !== getIn(this.props.formik.values, this.props.name) || getIn(props.formik.errors, this.props.name) !== getIn(this.props.formik.errors, this.props.name) || getIn(props.formik.touched, this.props.name) !== getIn(this.props.formik.touched, this.props.name) || Object.keys(this.props).length !== Object.keys(props).length || props.formik.isSubmitting !== this.props.formik.isSubmitting) {\n      return true;\n    } else {\n      return false;\n    }\n  };\n\n  _proto.componentDidMount = function componentDidMount() {\n    // Register the Field with the parent Formik. Parent will cycle through\n    // registered Field's validate fns right prior to submit\n    this.props.formik.registerField(this.props.name, {\n      validate: this.props.validate\n    });\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    if (this.props.name !== prevProps.name) {\n      this.props.formik.unregisterField(prevProps.name);\n      this.props.formik.registerField(this.props.name, {\n        validate: this.props.validate\n      });\n    }\n\n    if (this.props.validate !== prevProps.validate) {\n      this.props.formik.registerField(this.props.name, {\n        validate: this.props.validate\n      });\n    }\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.props.formik.unregisterField(this.props.name);\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        name = _this$props.name,\n        render = _this$props.render,\n        is = _this$props.as,\n        children = _this$props.children,\n        component = _this$props.component,\n        formik = _this$props.formik,\n        props = _objectWithoutPropertiesLoose(_this$props, [\"validate\", \"name\", \"render\", \"as\", \"children\", \"component\", \"shouldUpdate\", \"formik\"]);\n\n    var restOfFormik = _objectWithoutPropertiesLoose(formik, [\"validate\", \"validationSchema\"]);\n\n    var field = formik.getFieldProps(_extends({\n      name: name\n    }, props));\n    var meta = {\n      value: getIn(formik.values, name),\n      error: getIn(formik.errors, name),\n      touched: !!getIn(formik.touched, name),\n      initialValue: getIn(formik.initialValues, name),\n      initialTouched: !!getIn(formik.initialTouched, name),\n      initialError: getIn(formik.initialErrors, name)\n    };\n    var bag = {\n      field: field,\n      meta: meta,\n      form: restOfFormik\n    };\n\n    if (render) {\n      return render(bag);\n    }\n\n    if (isFunction(children)) {\n      return children(bag);\n    }\n\n    if (component) {\n      // This behavior is backwards compat with earlier Formik 0.9 to 1.x\n      if (typeof component === 'string') {\n        var innerRef = props.innerRef,\n            rest = _objectWithoutPropertiesLoose(props, [\"innerRef\"]);\n\n        return createElement(component, _extends({\n          ref: innerRef\n        }, field, rest), children);\n      } // We don't pass `meta` for backwards compat\n\n\n      return createElement(component, _extends({\n        field: field,\n        form: formik\n      }, props), children);\n    } // default to input here so we can check for both `as` and `children` above\n\n\n    var asElement = is || 'input';\n\n    if (typeof asElement === 'string') {\n      var _innerRef = props.innerRef,\n          _rest = _objectWithoutPropertiesLoose(props, [\"innerRef\"]);\n\n      return createElement(asElement, _extends({\n        ref: _innerRef\n      }, field, _rest), children);\n    }\n\n    return createElement(asElement, _extends({}, field, props), children);\n  };\n\n  return FastFieldInner;\n}(Component);\n\nvar FastField = /*#__PURE__*/connect(FastFieldInner);\n\nexport { ErrorMessage, FastField, Field, FieldArray, Form, Formik, FormikConsumer, FormikContext, FormikProvider, connect, getActiveElement, getIn, insert, isEmptyArray, isEmptyChildren, isFunction, isInputEvent, isInteger, isNaN$1 as isNaN, isObject, isPromise, isString, move, prepareDataForValidation, replace, setIn, setNestedObjectValues, swap, useField, useFormik, useFormikContext, validateYupSchema, withFormik, yupToFormErrors };\n//# sourceMappingURL=formik.esm.js.map\n","export default \"data:image/png;base64,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\"","import '../../styles/loading.css';\n\nexport default function LoadingIcon({ centered = true }) {\n  const content = (\n    <div className=\"lds-ring\">\n      <div></div>\n      <div></div>\n      <div></div>\n      <div></div>\n    </div>\n  );\n\n  return centered ? <center>{content}</center> : content;\n}\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4QAAACgCAYAAABUm6KGAAABQmlDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSCwoyGFhYGDIzSspCnJ3UoiIjFJgf8zAwyDCwMWgzyCfmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsisBTOyNAsVY7a8fjRD4a+1309M9SiAKyW1OBlI/wHipOSCohIGBsYEIFu5vKQAxG4BskWKgI4CsmeA2OkQ9hoQOwnCPgBWExLkDGRfAbIFkjMSU4DsJ0C2ThKSeDoSG2ovCHAE+BiZm1sGEnAq6aAktaIERDvnF1QWZaZnlCg4AkMoVcEzL1lPR8HIwNCSgQEU3hDVn2+Aw5FRjAMhVgx0q5UaUDAPIRbXxsCwy5yBQfgtQkylhoGBezEDw95LBYlFiXAHMH5jKU4zNoKwubczMLBO+///czgDA7smA8Pf6////97+///fZQwMzLcYGA58AwBzMl/RKH97+wAAAERlWElmTU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAAqACAAQAAAABAAADhKADAAQAAAABAAAAoAAAAADasURwAAACBGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+OTAwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjE2MDwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgqxykM/AABAAElEQVR4Ae2dB7jU1NaGl4gFlCagKB1FQSnSUZQiTYp0K0qze1GsCAh2QbFQVUTpoii9SxOpAoIdEBCQKk0QrFf59c8XzbnDnOydzCSZMzP51nnOM5ns/iYzk7X32mudVLJ0mb+FQgIkQAIkQAIkQAIkQAIkQAIkEDoC2UI3Yg6YBEiABEiABEiABEiABEiABEjAJECFkDcCCZAACZAACZAACZAACZAACYSUABXCkF54DpsESIAESIAESIAESIAESIAEqBDyHiABEiABEiABEiABEiABEiCBkBKgQhjSC89hkwAJkAAJkAAJkAAJkAAJkAAVQt4DJEACJEACJEACJEACJEACJBBSAlQIQ3rhOWwSIAESIAESIAESIAESIAESoELIe4AESIAESIAESIAESIAESIAEQkqACmFILzyHTQIkQAIkQAIkQAIkQAIkQAJUCHkPkAAJkAAJkAAJkAAJkAAJkEBICVAhDOmF57BJgARIgARIgARIgARIgARIgAoh7wESIAESIAESIAESIAESIAESCCkBKoQhvfAcNgmQAAmQAAmQAAmQAAmQAAlQIeQ9QAIkQAIkQAIkQAIkQAIkQAIhJUCFMKQXnsMmARIgARIgARIgARIgARIgASqEvAdIgARIgARIgARIgARIgARIIKQEqBCG9MJz2CRAAiRAAiRAAiRAAiRAAiRAhZD3AAmQAAmQAAmQAAmQAAmQAAmElAAVwpBeeA6bBEiABEiABEiABEiABEiABKgQ8h4gARIgARIgARIgARIgARIggZASoEIY0gvPYZMACZAACZAACZAACZAACZAAFULeAyRAAiRAAiRAAiRAAiRAAiQQUgJUCEN64TlsEiABEiABEiABEiABEiABEqBCyHuABEiABEiABEiABEiABEiABEJKgAphSC88h00CJEACJEACJEACJEACJEACVAh5D5AACZAACZAACZAACZAACZBASAlQIQzpheewSYAESIAESIAESIAESIAESIAKIe8BEiABEiABEiABEiABEiABEggpASqEIb3wHDYJkAAJkAAJkAAJkAAJkAAJZCeC2AhcXLaMFC5cWKzXIsYxpEiR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VAYDQ8yKSYAESIAESIAESMAVgdAqhBadSMUQTlpglhktCF4flNiZf2JFsnuPXlKxSnVTEQyy/aDGxXpTmwBMQWvVqSe7du/2fSBbt20zVwbpSMZ3tKyQBEiABEiABEiABGImEFqTUR0pBLXv3KmjFClc2NyvF6SppmW6WrNGdYHiN2r0GEEMRQoJJAuBxo0ayiMPPSClSpb01CV4E0V4iX4vvOipHhYmARIgARIgARIgARLwjwAVQv9YsiYSSGsCpS84X57o01uqVa2i9RoaCeH48eOydt2nxv7XsQLvuBQSIAESIAESIAESIIHkIkCFMLmuB3tDAilBIFu2bHJ+qZJStmxZuejC0lK8WDH5+++/Ze/338vu3Xtkx86dsm3bdvP9X3/9lRJjYidJgARIgARIgARIIIwEqBCG8apzzCRAAiRAAiRAAiRAAiRAAiRgEAi9UxneBSRAAiRAAiRAAiRAAiRAAiQQVgJUCMN65TluEiABEiABEiABEiABEiCB0BOgQhj6W4AASIAESIAESIAESIAESIAEwkqACmFYrzzHTQIkQAIkQAIkQAIkQAIkEHoCVAhDfwsQAAmQAAmQAAmQAAmQAAmQQFgJUCEM65XnuEmABEiABEiABEiABEiABEJPgAph6G8BAiABEiABEiABEiABEiABEggrASqEYb3yHDcJkAAJkAAJkAAJkAAJkEDoCVAhDP0tQAAkQAIkQAIkQAIkQAIkQAJhJUCFMKxXnuMmARIgARIgARIgARIgARIIPQEqhKG/BQiABEiABEiABEiABEiABEggrASoEIb1ynPcJEACJEACJEACJEACJEACoSdAhTD0twABkAAJkAAJkAAJkAAJkAAJhJUAFcKwXnmOmwRIgARIgARIgARIgARIIPQEqBCG/hYgABIgARIgARIgARIgARIggbASoEIY1ivPcZMACZAACZAACZAACZAACYSeABXC0N8CBEACJEACJEACJEACJEACJBBWAlQIw3rlOW4SIAESIAESIAESIAESIIHQE6BCGPpbgABIgARIgARIgARIgARIgATCSoAKYVivPMdNAiRAAiRAAiRAAiRAAiQQegJUCEN/CxAACZAACZAACZAACZAACZBAWAlQIQzrlee4SYAESIAESIAESIAESIAEQk+ACmHobwECIAESIAESIAESIAESIAESCCsBKoRhvfIcNwmQAAmQAAmQAAmQAAmQQOgJUCEM/S1AACRAAiRAAiRAAiRAAiRAAmElQIUwrFee4yYBEiABEiABEiABEiABEgg9ASqEob8FCIAESIAESIAESIAESIAESCCsBKgQhvXKc9wkQAIkQAIkQAIkQAIkQAKhJ0CFMPS3AAGQAAmQAAmQAAmQAAmQAAmElQAVwrBeeY6bBEiABEiABEiABEiABEgg9ASoEIb+FiAAEiABEiABEiABEiABEiCBsBKgQhjWK89xkwAJkAAJkAAJkAAJkAAJhJ4AFcLQ3wIEQAIkQAIkQAIkQAIkQAIkEFYCVAjDeuU5bhIgARIgARIgARIgARIggdAToEIYQlXLgAAAAH1JREFU+luAAEiABEiABEiABEiABEiABMJKgAphWK88x00CJEACJEACJEACJEACJBB6AlQIQ38LEAAJkAAJkAAJkAAJkAAJkEBYCVAhDOuV57hJgARIgARIgARIgARIgARCT4AKYehvAQIgARIgARIgARIgARIgARIIK4H/B53Io7RvSlKKAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4QAAACaCAYAAADxeoZNAAABQmlDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSCwoyGFhYGDIzSspCnJ3UoiIjFJgf8zAwyDCwMWgzyCfmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsisBTOyNAsVY7a8fjRD4a+1309M9SiAKyW1OBlI/wHipOSCohIGBsYEIFu5vKQAxG4BskWKgI4CsmeA2OkQ9hoQOwnCPgBWExLkDGRfAbIFkjMSU4DsJ0C2ThKSeDoSG2ovCHAE+BiZm1sGEnAq6aAktaIERDvnF1QWZaZnlCg4AkMoVcEzL1lPR8HIwNCSgQEU3hDVn2+Aw5FRjAMhVgx0q5UaUDAPIRbXxsCwy5yBQfgtQkylhoGBezEDw95LBYlFiXAHMH5jKU4zNoKwubczMLBO+///czgDA7smA8Pf6////97+///fZQwMzLcYGA58AwBzMl/RKH97+wAAAERlWElmTU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAAqACAAQAAAABAAADhKADAAQAAAABAAAAmgAAAAAxIORXAAACBGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+OTAwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjE1NDwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgrdAQ/7AABAAElEQVR4Ae2dB7gURdaGz805kBFJZhAMKKKuKIqKYs55V8w5ravruvur7JpWxey66pqzmBUxBxADKCgogokgSJBwcw5/fYMDc+d2VXfP9Mz0zHzneeaZe7urq6ve7umuU3VCxsir1rQLhQRIgARIgARIgARIgARIgARIIO0IZKZdj9lhEiABEiABEiABEiABEiABEiCBAAEqhLwRSIAESIAESIAESIAESIAESCBNCVAhTNMLz26TAAmQAAmQAAmQAAmQAAmQABVC3gMkQAIkQAIkQAIkQAIkQAIkkKYEsq36PXV8F6vN3EYCURHY/eq1UR3Pg0mABEiABEiABEiABEiABLwlwBVCb3myNhIgARIgARIgARIgARIgARJIGgJUCJPmUrGhJEACJEACJEACJEACJEACJOAtASqE3vJkbSRAAiRAAiRAAiRAAiRAAiSQNASoECbNpWJDSYAESIAESIAESIAESIAESMBbAlQIveXJ2kiABEiABEiABEiABEiABEggaQhQIUyaS8WGkgAJkAAJkAAJkAAJkAAJkIC3BKgQesuTtZEACZAACZAACZAACZAACZBA0hCgQpg0l4oNJQESIAESIAESIAESIAESIAFvCVAh9JYnayMBEiABEiABEiABEiABEiCBpCFAhTBpLhUbSgIkQAIkQAIkQAIkQAIkQALeEqBC6C1P1kYCJEACJEACJEACJEACJEACSUOACmHSXCo2lARIgARIgARIgARIgARIgAS8JUCF0FuerI0ESIAESIAESIAESIAESIAEkoYAFcKkuVRsKAmQAAmQAAmQAAmQAAmQAAl4S4AKobc8WRsJkAAJkAAJkAAJkAAJkAAJJA0BKoRJc6nYUBIgARIgARIgARIgARIgARLwlgAVQm95sjYSIAESIAESIAESIAESIAESSBoCVAiT5lKxoSRAAiRAAiRAAiRAAiRAAiTgLQEqhN7yZG0kQAIkQAIkQAIkQAIkQAIkkDQEqBAmzaViQ0mABEiABEiABEiABEiABEjAWwJUCL3lydpIgARIgARIgARIgARIgARIIGkIUCFMmkvFhpIACZAACZAACZAACZAACZCA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AAmQAAmQQDoToEKYzleffScBEiABEiABEiABEiABEkhrAlQI0/rys/MkQAIkQAIkQAIkQAIkQALpTIAKYTpfffadBEiABEiABEiABEiABEggrQlQIUzry8/OkwAJkAAJkAAJkAAJkAAJpDMBKoTpfPXZdxIgARIgARIgARIgARIggbQmQIUwrS8/O08CJEACJEACJEACJEACJJDOBKgQpvPVZ99JgARIgARIgARIgARIgATSmgAVwrS+/Ow8CZAACZAACZAACZAACZBAOhOgQpjOV599JwESIAESIAESIAESIAESSGsCVAjT+vKz8yRAAiRAAiRAAiRAAiRAAulMgAphOl999p0ESIAESIAESIAESIAESCCtCVAhTOvLz86TAAmQAAmQAAmQAAmQAAmkMwEqhOl89dl3EiABEiABEiABEiABEiCBtCZAhTCtLz87TwIkQAIkQAIkQAIkQAIkkM4EqBCm89Vn30mABEiABEiABEiABEiABNKaABXCtL787DwJkAAJkAAJkAAJkAAJkEA6E6BCmM5Xn30nARIgARIgARIgARIgARJIawJUCNP68rPzJEACJEACJEACJEACJEAC6UyACmE6X332nQRIgARIgARIgARIgARIIK0JUCFM68vPzpMACZAACZAACZAACZAACaQzASqE6Xz12XcSIAESIAESIAESIAESIIG0JkCFMK0vPztPAiRAAiRAAiRAAiRAAiSQzgSoEKbz1WffSYAESIAESIAESIAESIAE0poAFcK0vvzsPAmQAAmQAAmQAAmQAAmQQDoToEKYzleffScBEiABEiABEiABEiABEkhrAlQI0/rys/MkQAIkQAIkQAIkQAIkQALpTIAKYTpfffadBEiABEiABEiABEiABEggrQlkjLxqTXtaE2DnSYAESIAESIAESIAESIAESCBNCXCFME0vPLtNAiRAAiRAAiRAAiRAAiRAAlQIeQ+QAAmQAAmQAAmQAAmQAAmQQJoSoEKYphee3SYBEiABEiABEiABEiABEiCB/wdk2N8q0qC3CgAAAABJRU5ErkJggg==\"","/**\n * Based on Kendo UI Core expression code <https://github.com/telerik/kendo-ui-core#license-information>\n */\n'use strict'\n\nfunction Cache(maxSize) {\n  this._maxSize = maxSize\n  this.clear()\n}\nCache.prototype.clear = function () {\n  this._size = 0\n  this._values = Object.create(null)\n}\nCache.prototype.get = function (key) {\n  return this._values[key]\n}\nCache.prototype.set = function (key, value) {\n  this._size >= this._maxSize && this.clear()\n  if (!(key in this._values)) this._size++\n\n  return (this._values[key] = value)\n}\n\nvar SPLIT_REGEX = /[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,\n  DIGIT_REGEX = /^\\d+$/,\n  LEAD_DIGIT_REGEX = /^\\d/,\n  SPEC_CHAR_REGEX = /[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,\n  CLEAN_QUOTES_REGEX = /^\\s*(['\"]?)(.*?)(\\1)\\s*$/,\n  MAX_CACHE_SIZE = 512\n\nvar pathCache = new Cache(MAX_CACHE_SIZE),\n  setCache = new Cache(MAX_CACHE_SIZE),\n  getCache = new Cache(MAX_CACHE_SIZE)\n\nvar config\n\nmodule.exports = {\n  Cache: Cache,\n\n  split: split,\n\n  normalizePath: normalizePath,\n\n  setter: function (path) {\n    var parts = normalizePath(path)\n\n    return (\n      setCache.get(path) ||\n      setCache.set(path, function setter(obj, value) {\n        var index = 0\n        var len = parts.length\n        var data = obj\n\n        while (index < len - 1) {\n          var part = parts[index]\n          if (\n            part === '__proto__' ||\n            part === 'constructor' ||\n            part === 'prototype'\n          ) {\n            return obj\n          }\n\n          data = data[parts[index++]]\n        }\n        data[parts[index]] = value\n      })\n    )\n  },\n\n  getter: function (path, safe) {\n    var parts = normalizePath(path)\n    return (\n      getCache.get(path) ||\n      getCache.set(path, function getter(data) {\n        var index = 0,\n          len = parts.length\n        while (index < len) {\n          if (data != null || !safe) data = data[parts[index++]]\n          else return\n        }\n        return data\n      })\n    )\n  },\n\n  join: function (segments) {\n    return segments.reduce(function (path, part) {\n      return (\n        path +\n        (isQuoted(part) || DIGIT_REGEX.test(part)\n          ? '[' + part + ']'\n          : (path ? '.' : '') + part)\n      )\n    }, '')\n  },\n\n  forEach: function (path, cb, thisArg) {\n    forEach(Array.isArray(path) ? path : split(path), cb, thisArg)\n  },\n}\n\nfunction normalizePath(path) {\n  return (\n    pathCache.get(path) ||\n    pathCache.set(\n      path,\n      split(path).map(function (part) {\n        return part.replace(CLEAN_QUOTES_REGEX, '$2')\n      })\n    )\n  )\n}\n\nfunction split(path) {\n  return path.match(SPLIT_REGEX) || ['']\n}\n\nfunction forEach(parts, iter, thisArg) {\n  var len = parts.length,\n    part,\n    idx,\n    isArray,\n    isBracket\n\n  for (idx = 0; idx < len; idx++) {\n    part = parts[idx]\n\n    if (part) {\n      if (shouldBeQuoted(part)) {\n        part = '\"' + part + '\"'\n      }\n\n      isBracket = isQuoted(part)\n      isArray = !isBracket && /^\\d+$/.test(part)\n\n      iter.call(thisArg, part, isBracket, isArray, idx, parts)\n    }\n  }\n}\n\nfunction isQuoted(str) {\n  return (\n    typeof str === 'string' && str && [\"'\", '\"'].indexOf(str.charAt(0)) !== -1\n  )\n}\n\nfunction hasLeadingNumber(part) {\n  return part.match(LEAD_DIGIT_REGEX) && !part.match(DIGIT_REGEX)\n}\n\nfunction hasSpecialChars(part) {\n  return SPEC_CHAR_REGEX.test(part)\n}\n\nfunction shouldBeQuoted(part) {\n  return !isQuoted(part) && (hasLeadingNumber(part) || hasSpecialChars(part))\n}\n","const reWords = /[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+(?:['’](?:d|ll|m|re|s|t|ve))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde]|$)|(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde](?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])|$)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?(?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:d|ll|m|re|s|t|ve))?|[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?:['’](?:D|LL|M|RE|S|T|VE))?|\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])|\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])|\\d+|(?:[\\u2700-\\u27bf]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?(?:\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?)*/g\n\nconst words = (str) => str.match(reWords) || []\n\nconst upperFirst = (str) => str[0].toUpperCase() + str.slice(1)\n\nconst join = (str, d) => words(str).join(d).toLowerCase()\n\nconst camelCase = (str) =>\n  words(str).reduce(\n    (acc, next) =>\n      `${acc}${\n        !acc\n          ? next.toLowerCase()\n          : next[0].toUpperCase() + next.slice(1).toLowerCase()\n      }`,\n    '',\n  )\n\nconst pascalCase = (str) => upperFirst(camelCase(str))\n\nconst snakeCase = (str) => join(str, '_')\n\nconst kebabCase = (str) => join(str, '-')\n\nconst sentenceCase = (str) => upperFirst(join(str, ' '))\n\nconst titleCase = (str) => words(str).map(upperFirst).join(' ')\n\nmodule.exports = {\n  words,\n  upperFirst,\n  camelCase,\n  pascalCase,\n  snakeCase,\n  kebabCase,\n  sentenceCase,\n  titleCase,\n}\n","\n/**\n * Topological sorting function\n *\n * @param {Array} edges\n * @returns {Array}\n */\n\nmodule.exports = function(edges) {\n  return toposort(uniqueNodes(edges), edges)\n}\n\nmodule.exports.array = toposort\n\nfunction toposort(nodes, edges) {\n  var cursor = nodes.length\n    , sorted = new Array(cursor)\n    , visited = {}\n    , i = cursor\n    // Better data structures make algorithm much faster.\n    , outgoingEdges = makeOutgoingEdges(edges)\n    , nodesHash = makeNodesHash(nodes)\n\n  // check for unknown nodes\n  edges.forEach(function(edge) {\n    if (!nodesHash.has(edge[0]) || !nodesHash.has(edge[1])) {\n      throw new Error('Unknown node. There is an unknown node in the supplied edges.')\n    }\n  })\n\n  while (i--) {\n    if (!visited[i]) visit(nodes[i], i, new Set())\n  }\n\n  return sorted\n\n  function visit(node, i, predecessors) {\n    if(predecessors.has(node)) {\n      var nodeRep\n      try {\n        nodeRep = \", node was:\" + JSON.stringify(node)\n      } catch(e) {\n        nodeRep = \"\"\n      }\n      throw new Error('Cyclic dependency' + nodeRep)\n    }\n\n    if (!nodesHash.has(node)) {\n      throw new Error('Found unknown node. Make sure to provided all involved nodes. Unknown node: '+JSON.stringify(node))\n    }\n\n    if (visited[i]) return;\n    visited[i] = true\n\n    var outgoing = outgoingEdges.get(node) || new Set()\n    outgoing = Array.from(outgoing)\n\n    if (i = outgoing.length) {\n      predecessors.add(node)\n      do {\n        var child = outgoing[--i]\n        visit(child, nodesHash.get(child), predecessors)\n      } while (i)\n      predecessors.delete(node)\n    }\n\n    sorted[--cursor] = node\n  }\n}\n\nfunction uniqueNodes(arr){\n  var res = new Set()\n  for (var i = 0, len = arr.length; i < len; i++) {\n    var edge = arr[i]\n    res.add(edge[0])\n    res.add(edge[1])\n  }\n  return Array.from(res)\n}\n\nfunction makeOutgoingEdges(arr){\n  var edges = new Map()\n  for (var i = 0, len = arr.length; i < len; i++) {\n    var edge = arr[i]\n    if (!edges.has(edge[0])) edges.set(edge[0], new Set())\n    if (!edges.has(edge[1])) edges.set(edge[1], new Set())\n    edges.get(edge[0]).add(edge[1])\n  }\n  return edges\n}\n\nfunction makeNodesHash(arr){\n  var res = new Map()\n  for (var i = 0, len = arr.length; i < len; i++) {\n    res.set(arr[i], i)\n  }\n  return res\n}\n","import { getter, forEach, split, normalizePath, join } from 'property-expr';\nimport { camelCase, snakeCase } from 'tiny-case';\nimport toposort from 'toposort';\n\nconst toString = Object.prototype.toString;\nconst errorToString = Error.prototype.toString;\nconst regExpToString = RegExp.prototype.toString;\nconst symbolToString = typeof Symbol !== 'undefined' ? Symbol.prototype.toString : () => '';\nconst SYMBOL_REGEXP = /^Symbol\\((.*)\\)(.*)$/;\nfunction printNumber(val) {\n  if (val != +val) return 'NaN';\n  const isNegativeZero = val === 0 && 1 / val < 0;\n  return isNegativeZero ? '-0' : '' + val;\n}\nfunction printSimpleValue(val, quoteStrings = false) {\n  if (val == null || val === true || val === false) return '' + val;\n  const typeOf = typeof val;\n  if (typeOf === 'number') return printNumber(val);\n  if (typeOf === 'string') return quoteStrings ? `\"${val}\"` : val;\n  if (typeOf === 'function') return '[Function ' + (val.name || 'anonymous') + ']';\n  if (typeOf === 'symbol') return symbolToString.call(val).replace(SYMBOL_REGEXP, 'Symbol($1)');\n  const tag = toString.call(val).slice(8, -1);\n  if (tag === 'Date') return isNaN(val.getTime()) ? '' + val : val.toISOString(val);\n  if (tag === 'Error' || val instanceof Error) return '[' + errorToString.call(val) + ']';\n  if (tag === 'RegExp') return regExpToString.call(val);\n  return null;\n}\nfunction printValue(value, quoteStrings) {\n  let result = printSimpleValue(value, quoteStrings);\n  if (result !== null) return result;\n  return JSON.stringify(value, function (key, value) {\n    let result = printSimpleValue(this[key], quoteStrings);\n    if (result !== null) return result;\n    return value;\n  }, 2);\n}\n\nfunction toArray(value) {\n  return value == null ? [] : [].concat(value);\n}\n\nlet _Symbol$toStringTag;\nlet strReg = /\\$\\{\\s*(\\w+)\\s*\\}/g;\n_Symbol$toStringTag = Symbol.toStringTag;\nclass ValidationError extends Error {\n  static formatError(message, params) {\n    const path = params.label || params.path || 'this';\n    if (path !== params.path) params = Object.assign({}, params, {\n      path\n    });\n    if (typeof message === 'string') return message.replace(strReg, (_, key) => printValue(params[key]));\n    if (typeof message === 'function') return message(params);\n    return message;\n  }\n  static isError(err) {\n    return err && err.name === 'ValidationError';\n  }\n  constructor(errorOrErrors, value, field, type, disableStack) {\n    super();\n    this.value = void 0;\n    this.path = void 0;\n    this.type = void 0;\n    this.errors = void 0;\n    this.params = void 0;\n    this.inner = void 0;\n    this[_Symbol$toStringTag] = 'Error';\n    this.name = 'ValidationError';\n    this.value = value;\n    this.path = field;\n    this.type = type;\n    this.errors = [];\n    this.inner = [];\n    toArray(errorOrErrors).forEach(err => {\n      if (ValidationError.isError(err)) {\n        this.errors.push(...err.errors);\n        const innerErrors = err.inner.length ? err.inner : [err];\n        this.inner.push(...innerErrors);\n      } else {\n        this.errors.push(err);\n      }\n    });\n    this.message = this.errors.length > 1 ? `${this.errors.length} errors occurred` : this.errors[0];\n    if (!disableStack && Error.captureStackTrace) Error.captureStackTrace(this, ValidationError);\n  }\n}\n\nlet mixed = {\n  default: '${path} is invalid',\n  required: '${path} is a required field',\n  defined: '${path} must be defined',\n  notNull: '${path} cannot be null',\n  oneOf: '${path} must be one of the following values: ${values}',\n  notOneOf: '${path} must not be one of the following values: ${values}',\n  notType: ({\n    path,\n    type,\n    value,\n    originalValue\n  }) => {\n    const castMsg = originalValue != null && originalValue !== value ? ` (cast from the value \\`${printValue(originalValue, true)}\\`).` : '.';\n    return type !== 'mixed' ? `${path} must be a \\`${type}\\` type, ` + `but the final value was: \\`${printValue(value, true)}\\`` + castMsg : `${path} must match the configured type. ` + `The validated value was: \\`${printValue(value, true)}\\`` + castMsg;\n  }\n};\nlet string = {\n  length: '${path} must be exactly ${length} characters',\n  min: '${path} must be at least ${min} characters',\n  max: '${path} must be at most ${max} characters',\n  matches: '${path} must match the following: \"${regex}\"',\n  email: '${path} must be a valid email',\n  url: '${path} must be a valid URL',\n  uuid: '${path} must be a valid UUID',\n  trim: '${path} must be a trimmed string',\n  lowercase: '${path} must be a lowercase string',\n  uppercase: '${path} must be a upper case string'\n};\nlet number = {\n  min: '${path} must be greater than or equal to ${min}',\n  max: '${path} must be less than or equal to ${max}',\n  lessThan: '${path} must be less than ${less}',\n  moreThan: '${path} must be greater than ${more}',\n  positive: '${path} must be a positive number',\n  negative: '${path} must be a negative number',\n  integer: '${path} must be an integer'\n};\nlet date = {\n  min: '${path} field must be later than ${min}',\n  max: '${path} field must be at earlier than ${max}'\n};\nlet boolean = {\n  isValue: '${path} field must be ${value}'\n};\nlet object = {\n  noUnknown: '${path} field has unspecified keys: ${unknown}'\n};\nlet array = {\n  min: '${path} field must have at least ${min} items',\n  max: '${path} field must have less than or equal to ${max} items',\n  length: '${path} must have ${length} items'\n};\nlet tuple = {\n  notType: params => {\n    const {\n      path,\n      value,\n      spec\n    } = params;\n    const typeLen = spec.types.length;\n    if (Array.isArray(value)) {\n      if (value.length < typeLen) return `${path} tuple value has too few items, expected a length of ${typeLen} but got ${value.length} for value: \\`${printValue(value, true)}\\``;\n      if (value.length > typeLen) return `${path} tuple value has too many items, expected a length of ${typeLen} but got ${value.length} for value: \\`${printValue(value, true)}\\``;\n    }\n    return ValidationError.formatError(mixed.notType, params);\n  }\n};\nvar locale = Object.assign(Object.create(null), {\n  mixed,\n  string,\n  number,\n  date,\n  object,\n  array,\n  boolean,\n  tuple\n});\n\nconst isSchema = obj => obj && obj.__isYupSchema__;\n\nclass Condition {\n  static fromOptions(refs, config) {\n    if (!config.then && !config.otherwise) throw new TypeError('either `then:` or `otherwise:` is required for `when()` conditions');\n    let {\n      is,\n      then,\n      otherwise\n    } = config;\n    let check = typeof is === 'function' ? is : (...values) => values.every(value => value === is);\n    return new Condition(refs, (values, schema) => {\n      var _branch;\n      let branch = check(...values) ? then : otherwise;\n      return (_branch = branch == null ? void 0 : branch(schema)) != null ? _branch : schema;\n    });\n  }\n  constructor(refs, builder) {\n    this.fn = void 0;\n    this.refs = refs;\n    this.refs = refs;\n    this.fn = builder;\n  }\n  resolve(base, options) {\n    let values = this.refs.map(ref =>\n    // TODO: ? operator here?\n    ref.getValue(options == null ? void 0 : options.value, options == null ? void 0 : options.parent, options == null ? void 0 : options.context));\n    let schema = this.fn(values, base, options);\n    if (schema === undefined ||\n    // @ts-ignore this can be base\n    schema === base) {\n      return base;\n    }\n    if (!isSchema(schema)) throw new TypeError('conditions must return a schema object');\n    return schema.resolve(options);\n  }\n}\n\nconst prefixes = {\n  context: '$',\n  value: '.'\n};\nfunction create$9(key, options) {\n  return new Reference(key, options);\n}\nclass Reference {\n  constructor(key, options = {}) {\n    this.key = void 0;\n    this.isContext = void 0;\n    this.isValue = void 0;\n    this.isSibling = void 0;\n    this.path = void 0;\n    this.getter = void 0;\n    this.map = void 0;\n    if (typeof key !== 'string') throw new TypeError('ref must be a string, got: ' + key);\n    this.key = key.trim();\n    if (key === '') throw new TypeError('ref must be a non-empty string');\n    this.isContext = this.key[0] === prefixes.context;\n    this.isValue = this.key[0] === prefixes.value;\n    this.isSibling = !this.isContext && !this.isValue;\n    let prefix = this.isContext ? prefixes.context : this.isValue ? prefixes.value : '';\n    this.path = this.key.slice(prefix.length);\n    this.getter = this.path && getter(this.path, true);\n    this.map = options.map;\n  }\n  getValue(value, parent, context) {\n    let result = this.isContext ? context : this.isValue ? value : parent;\n    if (this.getter) result = this.getter(result || {});\n    if (this.map) result = this.map(result);\n    return result;\n  }\n\n  /**\n   *\n   * @param {*} value\n   * @param {Object} options\n   * @param {Object=} options.context\n   * @param {Object=} options.parent\n   */\n  cast(value, options) {\n    return this.getValue(value, options == null ? void 0 : options.parent, options == null ? void 0 : options.context);\n  }\n  resolve() {\n    return this;\n  }\n  describe() {\n    return {\n      type: 'ref',\n      key: this.key\n    };\n  }\n  toString() {\n    return `Ref(${this.key})`;\n  }\n  static isRef(value) {\n    return value && value.__isYupRef;\n  }\n}\n\n// @ts-ignore\nReference.prototype.__isYupRef = true;\n\nconst isAbsent = value => value == null;\n\nfunction createValidation(config) {\n  function validate({\n    value,\n    path = '',\n    options,\n    originalValue,\n    schema\n  }, panic, next) {\n    const {\n      name,\n      test,\n      params,\n      message,\n      skipAbsent\n    } = config;\n    let {\n      parent,\n      context,\n      abortEarly = schema.spec.abortEarly,\n      disableStackTrace = schema.spec.disableStackTrace\n    } = options;\n    function resolve(item) {\n      return Reference.isRef(item) ? item.getValue(value, parent, context) : item;\n    }\n    function createError(overrides = {}) {\n      var _overrides$disableSta;\n      const nextParams = Object.assign({\n        value,\n        originalValue,\n        label: schema.spec.label,\n        path: overrides.path || path,\n        spec: schema.spec\n      }, params, overrides.params);\n      for (const key of Object.keys(nextParams)) nextParams[key] = resolve(nextParams[key]);\n      const error = new ValidationError(ValidationError.formatError(overrides.message || message, nextParams), value, nextParams.path, overrides.type || name, (_overrides$disableSta = overrides.disableStackTrace) != null ? _overrides$disableSta : disableStackTrace);\n      error.params = nextParams;\n      return error;\n    }\n    const invalid = abortEarly ? panic : next;\n    let ctx = {\n      path,\n      parent,\n      type: name,\n      from: options.from,\n      createError,\n      resolve,\n      options,\n      originalValue,\n      schema\n    };\n    const handleResult = validOrError => {\n      if (ValidationError.isError(validOrError)) invalid(validOrError);else if (!validOrError) invalid(createError());else next(null);\n    };\n    const handleError = err => {\n      if (ValidationError.isError(err)) invalid(err);else panic(err);\n    };\n    const shouldSkip = skipAbsent && isAbsent(value);\n    if (shouldSkip) {\n      return handleResult(true);\n    }\n    let result;\n    try {\n      var _result;\n      result = test.call(ctx, value, ctx);\n      if (typeof ((_result = result) == null ? void 0 : _result.then) === 'function') {\n        if (options.sync) {\n          throw new Error(`Validation test of type: \"${ctx.type}\" returned a Promise during a synchronous validate. ` + `This test will finish after the validate call has returned`);\n        }\n        return Promise.resolve(result).then(handleResult, handleError);\n      }\n    } catch (err) {\n      handleError(err);\n      return;\n    }\n    handleResult(result);\n  }\n  validate.OPTIONS = config;\n  return validate;\n}\n\nfunction getIn(schema, path, value, context = value) {\n  let parent, lastPart, lastPartDebug;\n\n  // root path: ''\n  if (!path) return {\n    parent,\n    parentPath: path,\n    schema\n  };\n  forEach(path, (_part, isBracket, isArray) => {\n    let part = isBracket ? _part.slice(1, _part.length - 1) : _part;\n    schema = schema.resolve({\n      context,\n      parent,\n      value\n    });\n    let isTuple = schema.type === 'tuple';\n    let idx = isArray ? parseInt(part, 10) : 0;\n    if (schema.innerType || isTuple) {\n      if (isTuple && !isArray) throw new Error(`Yup.reach cannot implicitly index into a tuple type. the path part \"${lastPartDebug}\" must contain an index to the tuple element, e.g. \"${lastPartDebug}[0]\"`);\n      if (value && idx >= value.length) {\n        throw new Error(`Yup.reach cannot resolve an array item at index: ${_part}, in the path: ${path}. ` + `because there is no value at that index. `);\n      }\n      parent = value;\n      value = value && value[idx];\n      schema = isTuple ? schema.spec.types[idx] : schema.innerType;\n    }\n\n    // sometimes the array index part of a path doesn't exist: \"nested.arr.child\"\n    // in these cases the current part is the next schema and should be processed\n    // in this iteration. For cases where the index signature is included this\n    // check will fail and we'll handle the `child` part on the next iteration like normal\n    if (!isArray) {\n      if (!schema.fields || !schema.fields[part]) throw new Error(`The schema does not contain the path: ${path}. ` + `(failed at: ${lastPartDebug} which is a type: \"${schema.type}\")`);\n      parent = value;\n      value = value && value[part];\n      schema = schema.fields[part];\n    }\n    lastPart = part;\n    lastPartDebug = isBracket ? '[' + _part + ']' : '.' + _part;\n  });\n  return {\n    schema,\n    parent,\n    parentPath: lastPart\n  };\n}\nfunction reach(obj, path, value, context) {\n  return getIn(obj, path, value, context).schema;\n}\n\nclass ReferenceSet extends Set {\n  describe() {\n    const description = [];\n    for (const item of this.values()) {\n      description.push(Reference.isRef(item) ? item.describe() : item);\n    }\n    return description;\n  }\n  resolveAll(resolve) {\n    let result = [];\n    for (const item of this.values()) {\n      result.push(resolve(item));\n    }\n    return result;\n  }\n  clone() {\n    return new ReferenceSet(this.values());\n  }\n  merge(newItems, removeItems) {\n    const next = this.clone();\n    newItems.forEach(value => next.add(value));\n    removeItems.forEach(value => next.delete(value));\n    return next;\n  }\n}\n\n// tweaked from https://github.com/Kelin2025/nanoclone/blob/0abeb7635bda9b68ef2277093f76dbe3bf3948e1/src/index.js\nfunction clone(src, seen = new Map()) {\n  if (isSchema(src) || !src || typeof src !== 'object') return src;\n  if (seen.has(src)) return seen.get(src);\n  let copy;\n  if (src instanceof Date) {\n    // Date\n    copy = new Date(src.getTime());\n    seen.set(src, copy);\n  } else if (src instanceof RegExp) {\n    // RegExp\n    copy = new RegExp(src);\n    seen.set(src, copy);\n  } else if (Array.isArray(src)) {\n    // Array\n    copy = new Array(src.length);\n    seen.set(src, copy);\n    for (let i = 0; i < src.length; i++) copy[i] = clone(src[i], seen);\n  } else if (src instanceof Map) {\n    // Map\n    copy = new Map();\n    seen.set(src, copy);\n    for (const [k, v] of src.entries()) copy.set(k, clone(v, seen));\n  } else if (src instanceof Set) {\n    // Set\n    copy = new Set();\n    seen.set(src, copy);\n    for (const v of src) copy.add(clone(v, seen));\n  } else if (src instanceof Object) {\n    // Object\n    copy = {};\n    seen.set(src, copy);\n    for (const [k, v] of Object.entries(src)) copy[k] = clone(v, seen);\n  } else {\n    throw Error(`Unable to clone ${src}`);\n  }\n  return copy;\n}\n\n// If `CustomSchemaMeta` isn't extended with any keys, we'll fall back to a\n// loose Record definition allowing free form usage.\nclass Schema {\n  constructor(options) {\n    this.type = void 0;\n    this.deps = [];\n    this.tests = void 0;\n    this.transforms = void 0;\n    this.conditions = [];\n    this._mutate = void 0;\n    this.internalTests = {};\n    this._whitelist = new ReferenceSet();\n    this._blacklist = new ReferenceSet();\n    this.exclusiveTests = Object.create(null);\n    this._typeCheck = void 0;\n    this.spec = void 0;\n    this.tests = [];\n    this.transforms = [];\n    this.withMutation(() => {\n      this.typeError(mixed.notType);\n    });\n    this.type = options.type;\n    this._typeCheck = options.check;\n    this.spec = Object.assign({\n      strip: false,\n      strict: false,\n      abortEarly: true,\n      recursive: true,\n      disableStackTrace: false,\n      nullable: false,\n      optional: true,\n      coerce: true\n    }, options == null ? void 0 : options.spec);\n    this.withMutation(s => {\n      s.nonNullable();\n    });\n  }\n\n  // TODO: remove\n  get _type() {\n    return this.type;\n  }\n  clone(spec) {\n    if (this._mutate) {\n      if (spec) Object.assign(this.spec, spec);\n      return this;\n    }\n\n    // if the nested value is a schema we can skip cloning, since\n    // they are already immutable\n    const next = Object.create(Object.getPrototypeOf(this));\n\n    // @ts-expect-error this is readonly\n    next.type = this.type;\n    next._typeCheck = this._typeCheck;\n    next._whitelist = this._whitelist.clone();\n    next._blacklist = this._blacklist.clone();\n    next.internalTests = Object.assign({}, this.internalTests);\n    next.exclusiveTests = Object.assign({}, this.exclusiveTests);\n\n    // @ts-expect-error this is readonly\n    next.deps = [...this.deps];\n    next.conditions = [...this.conditions];\n    next.tests = [...this.tests];\n    next.transforms = [...this.transforms];\n    next.spec = clone(Object.assign({}, this.spec, spec));\n    return next;\n  }\n  label(label) {\n    let next = this.clone();\n    next.spec.label = label;\n    return next;\n  }\n  meta(...args) {\n    if (args.length === 0) return this.spec.meta;\n    let next = this.clone();\n    next.spec.meta = Object.assign(next.spec.meta || {}, args[0]);\n    return next;\n  }\n  withMutation(fn) {\n    let before = this._mutate;\n    this._mutate = true;\n    let result = fn(this);\n    this._mutate = before;\n    return result;\n  }\n  concat(schema) {\n    if (!schema || schema === this) return this;\n    if (schema.type !== this.type && this.type !== 'mixed') throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${schema.type}`);\n    let base = this;\n    let combined = schema.clone();\n    const mergedSpec = Object.assign({}, base.spec, combined.spec);\n    combined.spec = mergedSpec;\n    combined.internalTests = Object.assign({}, base.internalTests, combined.internalTests);\n\n    // manually merge the blacklist/whitelist (the other `schema` takes\n    // precedence in case of conflicts)\n    combined._whitelist = base._whitelist.merge(schema._whitelist, schema._blacklist);\n    combined._blacklist = base._blacklist.merge(schema._blacklist, schema._whitelist);\n\n    // start with the current tests\n    combined.tests = base.tests;\n    combined.exclusiveTests = base.exclusiveTests;\n\n    // manually add the new tests to ensure\n    // the deduping logic is consistent\n    combined.withMutation(next => {\n      schema.tests.forEach(fn => {\n        next.test(fn.OPTIONS);\n      });\n    });\n    combined.transforms = [...base.transforms, ...combined.transforms];\n    return combined;\n  }\n  isType(v) {\n    if (v == null) {\n      if (this.spec.nullable && v === null) return true;\n      if (this.spec.optional && v === undefined) return true;\n      return false;\n    }\n    return this._typeCheck(v);\n  }\n  resolve(options) {\n    let schema = this;\n    if (schema.conditions.length) {\n      let conditions = schema.conditions;\n      schema = schema.clone();\n      schema.conditions = [];\n      schema = conditions.reduce((prevSchema, condition) => condition.resolve(prevSchema, options), schema);\n      schema = schema.resolve(options);\n    }\n    return schema;\n  }\n  resolveOptions(options) {\n    var _options$strict, _options$abortEarly, _options$recursive, _options$disableStack;\n    return Object.assign({}, options, {\n      from: options.from || [],\n      strict: (_options$strict = options.strict) != null ? _options$strict : this.spec.strict,\n      abortEarly: (_options$abortEarly = options.abortEarly) != null ? _options$abortEarly : this.spec.abortEarly,\n      recursive: (_options$recursive = options.recursive) != null ? _options$recursive : this.spec.recursive,\n      disableStackTrace: (_options$disableStack = options.disableStackTrace) != null ? _options$disableStack : this.spec.disableStackTrace\n    });\n  }\n\n  /**\n   * Run the configured transform pipeline over an input value.\n   */\n\n  cast(value, options = {}) {\n    let resolvedSchema = this.resolve(Object.assign({\n      value\n    }, options));\n    let allowOptionality = options.assert === 'ignore-optionality';\n    let result = resolvedSchema._cast(value, options);\n    if (options.assert !== false && !resolvedSchema.isType(result)) {\n      if (allowOptionality && isAbsent(result)) {\n        return result;\n      }\n      let formattedValue = printValue(value);\n      let formattedResult = printValue(result);\n      throw new TypeError(`The value of ${options.path || 'field'} could not be cast to a value ` + `that satisfies the schema type: \"${resolvedSchema.type}\". \\n\\n` + `attempted value: ${formattedValue} \\n` + (formattedResult !== formattedValue ? `result of cast: ${formattedResult}` : ''));\n    }\n    return result;\n  }\n  _cast(rawValue, options) {\n    let value = rawValue === undefined ? rawValue : this.transforms.reduce((prevValue, fn) => fn.call(this, prevValue, rawValue, this), rawValue);\n    if (value === undefined) {\n      value = this.getDefault(options);\n    }\n    return value;\n  }\n  _validate(_value, options = {}, panic, next) {\n    let {\n      path,\n      originalValue = _value,\n      strict = this.spec.strict\n    } = options;\n    let value = _value;\n    if (!strict) {\n      value = this._cast(value, Object.assign({\n        assert: false\n      }, options));\n    }\n    let initialTests = [];\n    for (let test of Object.values(this.internalTests)) {\n      if (test) initialTests.push(test);\n    }\n    this.runTests({\n      path,\n      value,\n      originalValue,\n      options,\n      tests: initialTests\n    }, panic, initialErrors => {\n      // even if we aren't ending early we can't proceed further if the types aren't correct\n      if (initialErrors.length) {\n        return next(initialErrors, value);\n      }\n      this.runTests({\n        path,\n        value,\n        originalValue,\n        options,\n        tests: this.tests\n      }, panic, next);\n    });\n  }\n\n  /**\n   * Executes a set of validations, either schema, produced Tests or a nested\n   * schema validate result.\n   */\n  runTests(runOptions, panic, next) {\n    let fired = false;\n    let {\n      tests,\n      value,\n      originalValue,\n      path,\n      options\n    } = runOptions;\n    let panicOnce = arg => {\n      if (fired) return;\n      fired = true;\n      panic(arg, value);\n    };\n    let nextOnce = arg => {\n      if (fired) return;\n      fired = true;\n      next(arg, value);\n    };\n    let count = tests.length;\n    let nestedErrors = [];\n    if (!count) return nextOnce([]);\n    let args = {\n      value,\n      originalValue,\n      path,\n      options,\n      schema: this\n    };\n    for (let i = 0; i < tests.length; i++) {\n      const test = tests[i];\n      test(args, panicOnce, function finishTestRun(err) {\n        if (err) {\n          Array.isArray(err) ? nestedErrors.push(...err) : nestedErrors.push(err);\n        }\n        if (--count <= 0) {\n          nextOnce(nestedErrors);\n        }\n      });\n    }\n  }\n  asNestedTest({\n    key,\n    index,\n    parent,\n    parentPath,\n    originalParent,\n    options\n  }) {\n    const k = key != null ? key : index;\n    if (k == null) {\n      throw TypeError('Must include `key` or `index` for nested validations');\n    }\n    const isIndex = typeof k === 'number';\n    let value = parent[k];\n    const testOptions = Object.assign({}, options, {\n      // Nested validations fields are always strict:\n      //    1. parent isn't strict so the casting will also have cast inner values\n      //    2. parent is strict in which case the nested values weren't cast either\n      strict: true,\n      parent,\n      value,\n      originalValue: originalParent[k],\n      // FIXME: tests depend on `index` being passed around deeply,\n      //   we should not let the options.key/index bleed through\n      key: undefined,\n      // index: undefined,\n      [isIndex ? 'index' : 'key']: k,\n      path: isIndex || k.includes('.') ? `${parentPath || ''}[${value ? k : `\"${k}\"`}]` : (parentPath ? `${parentPath}.` : '') + key\n    });\n    return (_, panic, next) => this.resolve(testOptions)._validate(value, testOptions, panic, next);\n  }\n  validate(value, options) {\n    var _options$disableStack2;\n    let schema = this.resolve(Object.assign({}, options, {\n      value\n    }));\n    let disableStackTrace = (_options$disableStack2 = options == null ? void 0 : options.disableStackTrace) != null ? _options$disableStack2 : schema.spec.disableStackTrace;\n    return new Promise((resolve, reject) => schema._validate(value, options, (error, parsed) => {\n      if (ValidationError.isError(error)) error.value = parsed;\n      reject(error);\n    }, (errors, validated) => {\n      if (errors.length) reject(new ValidationError(errors, validated, undefined, undefined, disableStackTrace));else resolve(validated);\n    }));\n  }\n  validateSync(value, options) {\n    var _options$disableStack3;\n    let schema = this.resolve(Object.assign({}, options, {\n      value\n    }));\n    let result;\n    let disableStackTrace = (_options$disableStack3 = options == null ? void 0 : options.disableStackTrace) != null ? _options$disableStack3 : schema.spec.disableStackTrace;\n    schema._validate(value, Object.assign({}, options, {\n      sync: true\n    }), (error, parsed) => {\n      if (ValidationError.isError(error)) error.value = parsed;\n      throw error;\n    }, (errors, validated) => {\n      if (errors.length) throw new ValidationError(errors, value, undefined, undefined, disableStackTrace);\n      result = validated;\n    });\n    return result;\n  }\n  isValid(value, options) {\n    return this.validate(value, options).then(() => true, err => {\n      if (ValidationError.isError(err)) return false;\n      throw err;\n    });\n  }\n  isValidSync(value, options) {\n    try {\n      this.validateSync(value, options);\n      return true;\n    } catch (err) {\n      if (ValidationError.isError(err)) return false;\n      throw err;\n    }\n  }\n  _getDefault(options) {\n    let defaultValue = this.spec.default;\n    if (defaultValue == null) {\n      return defaultValue;\n    }\n    return typeof defaultValue === 'function' ? defaultValue.call(this, options) : clone(defaultValue);\n  }\n  getDefault(options\n  // If schema is defaulted we know it's at least not undefined\n  ) {\n    let schema = this.resolve(options || {});\n    return schema._getDefault(options);\n  }\n  default(def) {\n    if (arguments.length === 0) {\n      return this._getDefault();\n    }\n    let next = this.clone({\n      default: def\n    });\n    return next;\n  }\n  strict(isStrict = true) {\n    return this.clone({\n      strict: isStrict\n    });\n  }\n  nullability(nullable, message) {\n    const next = this.clone({\n      nullable\n    });\n    next.internalTests.nullable = createValidation({\n      message,\n      name: 'nullable',\n      test(value) {\n        return value === null ? this.schema.spec.nullable : true;\n      }\n    });\n    return next;\n  }\n  optionality(optional, message) {\n    const next = this.clone({\n      optional\n    });\n    next.internalTests.optionality = createValidation({\n      message,\n      name: 'optionality',\n      test(value) {\n        return value === undefined ? this.schema.spec.optional : true;\n      }\n    });\n    return next;\n  }\n  optional() {\n    return this.optionality(true);\n  }\n  defined(message = mixed.defined) {\n    return this.optionality(false, message);\n  }\n  nullable() {\n    return this.nullability(true);\n  }\n  nonNullable(message = mixed.notNull) {\n    return this.nullability(false, message);\n  }\n  required(message = mixed.required) {\n    return this.clone().withMutation(next => next.nonNullable(message).defined(message));\n  }\n  notRequired() {\n    return this.clone().withMutation(next => next.nullable().optional());\n  }\n  transform(fn) {\n    let next = this.clone();\n    next.transforms.push(fn);\n    return next;\n  }\n\n  /**\n   * Adds a test function to the schema's queue of tests.\n   * tests can be exclusive or non-exclusive.\n   *\n   * - exclusive tests, will replace any existing tests of the same name.\n   * - non-exclusive: can be stacked\n   *\n   * If a non-exclusive test is added to a schema with an exclusive test of the same name\n   * the exclusive test is removed and further tests of the same name will be stacked.\n   *\n   * If an exclusive test is added to a schema with non-exclusive tests of the same name\n   * the previous tests are removed and further tests of the same name will replace each other.\n   */\n\n  test(...args) {\n    let opts;\n    if (args.length === 1) {\n      if (typeof args[0] === 'function') {\n        opts = {\n          test: args[0]\n        };\n      } else {\n        opts = args[0];\n      }\n    } else if (args.length === 2) {\n      opts = {\n        name: args[0],\n        test: args[1]\n      };\n    } else {\n      opts = {\n        name: args[0],\n        message: args[1],\n        test: args[2]\n      };\n    }\n    if (opts.message === undefined) opts.message = mixed.default;\n    if (typeof opts.test !== 'function') throw new TypeError('`test` is a required parameters');\n    let next = this.clone();\n    let validate = createValidation(opts);\n    let isExclusive = opts.exclusive || opts.name && next.exclusiveTests[opts.name] === true;\n    if (opts.exclusive) {\n      if (!opts.name) throw new TypeError('Exclusive tests must provide a unique `name` identifying the test');\n    }\n    if (opts.name) next.exclusiveTests[opts.name] = !!opts.exclusive;\n    next.tests = next.tests.filter(fn => {\n      if (fn.OPTIONS.name === opts.name) {\n        if (isExclusive) return false;\n        if (fn.OPTIONS.test === validate.OPTIONS.test) return false;\n      }\n      return true;\n    });\n    next.tests.push(validate);\n    return next;\n  }\n  when(keys, options) {\n    if (!Array.isArray(keys) && typeof keys !== 'string') {\n      options = keys;\n      keys = '.';\n    }\n    let next = this.clone();\n    let deps = toArray(keys).map(key => new Reference(key));\n    deps.forEach(dep => {\n      // @ts-ignore readonly array\n      if (dep.isSibling) next.deps.push(dep.key);\n    });\n    next.conditions.push(typeof options === 'function' ? new Condition(deps, options) : Condition.fromOptions(deps, options));\n    return next;\n  }\n  typeError(message) {\n    let next = this.clone();\n    next.internalTests.typeError = createValidation({\n      message,\n      name: 'typeError',\n      skipAbsent: true,\n      test(value) {\n        if (!this.schema._typeCheck(value)) return this.createError({\n          params: {\n            type: this.schema.type\n          }\n        });\n        return true;\n      }\n    });\n    return next;\n  }\n  oneOf(enums, message = mixed.oneOf) {\n    let next = this.clone();\n    enums.forEach(val => {\n      next._whitelist.add(val);\n      next._blacklist.delete(val);\n    });\n    next.internalTests.whiteList = createValidation({\n      message,\n      name: 'oneOf',\n      skipAbsent: true,\n      test(value) {\n        let valids = this.schema._whitelist;\n        let resolved = valids.resolveAll(this.resolve);\n        return resolved.includes(value) ? true : this.createError({\n          params: {\n            values: Array.from(valids).join(', '),\n            resolved\n          }\n        });\n      }\n    });\n    return next;\n  }\n  notOneOf(enums, message = mixed.notOneOf) {\n    let next = this.clone();\n    enums.forEach(val => {\n      next._blacklist.add(val);\n      next._whitelist.delete(val);\n    });\n    next.internalTests.blacklist = createValidation({\n      message,\n      name: 'notOneOf',\n      test(value) {\n        let invalids = this.schema._blacklist;\n        let resolved = invalids.resolveAll(this.resolve);\n        if (resolved.includes(value)) return this.createError({\n          params: {\n            values: Array.from(invalids).join(', '),\n            resolved\n          }\n        });\n        return true;\n      }\n    });\n    return next;\n  }\n  strip(strip = true) {\n    let next = this.clone();\n    next.spec.strip = strip;\n    return next;\n  }\n\n  /**\n   * Return a serialized description of the schema including validations, flags, types etc.\n   *\n   * @param options Provide any needed context for resolving runtime schema alterations (lazy, when conditions, etc).\n   */\n  describe(options) {\n    const next = (options ? this.resolve(options) : this).clone();\n    const {\n      label,\n      meta,\n      optional,\n      nullable\n    } = next.spec;\n    const description = {\n      meta,\n      label,\n      optional,\n      nullable,\n      default: next.getDefault(options),\n      type: next.type,\n      oneOf: next._whitelist.describe(),\n      notOneOf: next._blacklist.describe(),\n      tests: next.tests.map(fn => ({\n        name: fn.OPTIONS.name,\n        params: fn.OPTIONS.params\n      })).filter((n, idx, list) => list.findIndex(c => c.name === n.name) === idx)\n    };\n    return description;\n  }\n}\n// @ts-expect-error\nSchema.prototype.__isYupSchema__ = true;\nfor (const method of ['validate', 'validateSync']) Schema.prototype[`${method}At`] = function (path, value, options = {}) {\n  const {\n    parent,\n    parentPath,\n    schema\n  } = getIn(this, path, value, options.context);\n  return schema[method](parent && parent[parentPath], Object.assign({}, options, {\n    parent,\n    path\n  }));\n};\nfor (const alias of ['equals', 'is']) Schema.prototype[alias] = Schema.prototype.oneOf;\nfor (const alias of ['not', 'nope']) Schema.prototype[alias] = Schema.prototype.notOneOf;\n\nconst returnsTrue = () => true;\nfunction create$8(spec) {\n  return new MixedSchema(spec);\n}\nclass MixedSchema extends Schema {\n  constructor(spec) {\n    super(typeof spec === 'function' ? {\n      type: 'mixed',\n      check: spec\n    } : Object.assign({\n      type: 'mixed',\n      check: returnsTrue\n    }, spec));\n  }\n}\ncreate$8.prototype = MixedSchema.prototype;\n\nfunction create$7() {\n  return new BooleanSchema();\n}\nclass BooleanSchema extends Schema {\n  constructor() {\n    super({\n      type: 'boolean',\n      check(v) {\n        if (v instanceof Boolean) v = v.valueOf();\n        return typeof v === 'boolean';\n      }\n    });\n    this.withMutation(() => {\n      this.transform((value, _raw, ctx) => {\n        if (ctx.spec.coerce && !ctx.isType(value)) {\n          if (/^(true|1)$/i.test(String(value))) return true;\n          if (/^(false|0)$/i.test(String(value))) return false;\n        }\n        return value;\n      });\n    });\n  }\n  isTrue(message = boolean.isValue) {\n    return this.test({\n      message,\n      name: 'is-value',\n      exclusive: true,\n      params: {\n        value: 'true'\n      },\n      test(value) {\n        return isAbsent(value) || value === true;\n      }\n    });\n  }\n  isFalse(message = boolean.isValue) {\n    return this.test({\n      message,\n      name: 'is-value',\n      exclusive: true,\n      params: {\n        value: 'false'\n      },\n      test(value) {\n        return isAbsent(value) || value === false;\n      }\n    });\n  }\n  default(def) {\n    return super.default(def);\n  }\n  defined(msg) {\n    return super.defined(msg);\n  }\n  optional() {\n    return super.optional();\n  }\n  required(msg) {\n    return super.required(msg);\n  }\n  notRequired() {\n    return super.notRequired();\n  }\n  nullable() {\n    return super.nullable();\n  }\n  nonNullable(msg) {\n    return super.nonNullable(msg);\n  }\n  strip(v) {\n    return super.strip(v);\n  }\n}\ncreate$7.prototype = BooleanSchema.prototype;\n\n// Taken from HTML spec: https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\nlet rEmail =\n// eslint-disable-next-line\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])?)*$/;\nlet rUrl =\n// eslint-disable-next-line\n/^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([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])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i;\n\n// eslint-disable-next-line\nlet rUUID = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\nlet isTrimmed = value => isAbsent(value) || value === value.trim();\nlet objStringTag = {}.toString();\nfunction create$6() {\n  return new StringSchema();\n}\nclass StringSchema extends Schema {\n  constructor() {\n    super({\n      type: 'string',\n      check(value) {\n        if (value instanceof String) value = value.valueOf();\n        return typeof value === 'string';\n      }\n    });\n    this.withMutation(() => {\n      this.transform((value, _raw, ctx) => {\n        if (!ctx.spec.coerce || ctx.isType(value)) return value;\n\n        // don't ever convert arrays\n        if (Array.isArray(value)) return value;\n        const strValue = value != null && value.toString ? value.toString() : value;\n\n        // no one wants plain objects converted to [Object object]\n        if (strValue === objStringTag) return value;\n        return strValue;\n      });\n    });\n  }\n  required(message) {\n    return super.required(message).withMutation(schema => schema.test({\n      message: message || mixed.required,\n      name: 'required',\n      skipAbsent: true,\n      test: value => !!value.length\n    }));\n  }\n  notRequired() {\n    return super.notRequired().withMutation(schema => {\n      schema.tests = schema.tests.filter(t => t.OPTIONS.name !== 'required');\n      return schema;\n    });\n  }\n  length(length, message = string.length) {\n    return this.test({\n      message,\n      name: 'length',\n      exclusive: true,\n      params: {\n        length\n      },\n      skipAbsent: true,\n      test(value) {\n        return value.length === this.resolve(length);\n      }\n    });\n  }\n  min(min, message = string.min) {\n    return this.test({\n      message,\n      name: 'min',\n      exclusive: true,\n      params: {\n        min\n      },\n      skipAbsent: true,\n      test(value) {\n        return value.length >= this.resolve(min);\n      }\n    });\n  }\n  max(max, message = string.max) {\n    return this.test({\n      name: 'max',\n      exclusive: true,\n      message,\n      params: {\n        max\n      },\n      skipAbsent: true,\n      test(value) {\n        return value.length <= this.resolve(max);\n      }\n    });\n  }\n  matches(regex, options) {\n    let excludeEmptyString = false;\n    let message;\n    let name;\n    if (options) {\n      if (typeof options === 'object') {\n        ({\n          excludeEmptyString = false,\n          message,\n          name\n        } = options);\n      } else {\n        message = options;\n      }\n    }\n    return this.test({\n      name: name || 'matches',\n      message: message || string.matches,\n      params: {\n        regex\n      },\n      skipAbsent: true,\n      test: value => value === '' && excludeEmptyString || value.search(regex) !== -1\n    });\n  }\n  email(message = string.email) {\n    return this.matches(rEmail, {\n      name: 'email',\n      message,\n      excludeEmptyString: true\n    });\n  }\n  url(message = string.url) {\n    return this.matches(rUrl, {\n      name: 'url',\n      message,\n      excludeEmptyString: true\n    });\n  }\n  uuid(message = string.uuid) {\n    return this.matches(rUUID, {\n      name: 'uuid',\n      message,\n      excludeEmptyString: false\n    });\n  }\n\n  //-- transforms --\n  ensure() {\n    return this.default('').transform(val => val === null ? '' : val);\n  }\n  trim(message = string.trim) {\n    return this.transform(val => val != null ? val.trim() : val).test({\n      message,\n      name: 'trim',\n      test: isTrimmed\n    });\n  }\n  lowercase(message = string.lowercase) {\n    return this.transform(value => !isAbsent(value) ? value.toLowerCase() : value).test({\n      message,\n      name: 'string_case',\n      exclusive: true,\n      skipAbsent: true,\n      test: value => isAbsent(value) || value === value.toLowerCase()\n    });\n  }\n  uppercase(message = string.uppercase) {\n    return this.transform(value => !isAbsent(value) ? value.toUpperCase() : value).test({\n      message,\n      name: 'string_case',\n      exclusive: true,\n      skipAbsent: true,\n      test: value => isAbsent(value) || value === value.toUpperCase()\n    });\n  }\n}\ncreate$6.prototype = StringSchema.prototype;\n\n//\n// String Interfaces\n//\n\nlet isNaN$1 = value => value != +value;\nfunction create$5() {\n  return new NumberSchema();\n}\nclass NumberSchema extends Schema {\n  constructor() {\n    super({\n      type: 'number',\n      check(value) {\n        if (value instanceof Number) value = value.valueOf();\n        return typeof value === 'number' && !isNaN$1(value);\n      }\n    });\n    this.withMutation(() => {\n      this.transform((value, _raw, ctx) => {\n        if (!ctx.spec.coerce) return value;\n        let parsed = value;\n        if (typeof parsed === 'string') {\n          parsed = parsed.replace(/\\s/g, '');\n          if (parsed === '') return NaN;\n          // don't use parseFloat to avoid positives on alpha-numeric strings\n          parsed = +parsed;\n        }\n\n        // null -> NaN isn't useful; treat all nulls as null and let it fail on\n        // nullability check vs TypeErrors\n        if (ctx.isType(parsed) || parsed === null) return parsed;\n        return parseFloat(parsed);\n      });\n    });\n  }\n  min(min, message = number.min) {\n    return this.test({\n      message,\n      name: 'min',\n      exclusive: true,\n      params: {\n        min\n      },\n      skipAbsent: true,\n      test(value) {\n        return value >= this.resolve(min);\n      }\n    });\n  }\n  max(max, message = number.max) {\n    return this.test({\n      message,\n      name: 'max',\n      exclusive: true,\n      params: {\n        max\n      },\n      skipAbsent: true,\n      test(value) {\n        return value <= this.resolve(max);\n      }\n    });\n  }\n  lessThan(less, message = number.lessThan) {\n    return this.test({\n      message,\n      name: 'max',\n      exclusive: true,\n      params: {\n        less\n      },\n      skipAbsent: true,\n      test(value) {\n        return value < this.resolve(less);\n      }\n    });\n  }\n  moreThan(more, message = number.moreThan) {\n    return this.test({\n      message,\n      name: 'min',\n      exclusive: true,\n      params: {\n        more\n      },\n      skipAbsent: true,\n      test(value) {\n        return value > this.resolve(more);\n      }\n    });\n  }\n  positive(msg = number.positive) {\n    return this.moreThan(0, msg);\n  }\n  negative(msg = number.negative) {\n    return this.lessThan(0, msg);\n  }\n  integer(message = number.integer) {\n    return this.test({\n      name: 'integer',\n      message,\n      skipAbsent: true,\n      test: val => Number.isInteger(val)\n    });\n  }\n  truncate() {\n    return this.transform(value => !isAbsent(value) ? value | 0 : value);\n  }\n  round(method) {\n    var _method;\n    let avail = ['ceil', 'floor', 'round', 'trunc'];\n    method = ((_method = method) == null ? void 0 : _method.toLowerCase()) || 'round';\n\n    // this exists for symemtry with the new Math.trunc\n    if (method === 'trunc') return this.truncate();\n    if (avail.indexOf(method.toLowerCase()) === -1) throw new TypeError('Only valid options for round() are: ' + avail.join(', '));\n    return this.transform(value => !isAbsent(value) ? Math[method](value) : value);\n  }\n}\ncreate$5.prototype = NumberSchema.prototype;\n\n//\n// Number Interfaces\n//\n\n/**\n * This file is a modified version of the file from the following repository:\n * Date.parse with progressive enhancement for ISO 8601 <https://github.com/csnover/js-iso8601>\n * NON-CONFORMANT EDITION.\n * © 2011 Colin Snover <http://zetafleet.com>\n * Released under MIT license.\n */\n\n// prettier-ignore\n//                1 YYYY                2 MM        3 DD              4 HH     5 mm        6 ss           7 msec         8 Z 9 ±   10 tzHH    11 tzmm\nconst isoReg = /^(\\d{4}|[+-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,.](\\d{1,}))?)?(?:(Z)|([+-])(\\d{2})(?::?(\\d{2}))?)?)?$/;\nfunction toNumber(str, defaultValue = 0) {\n  return Number(str) || defaultValue;\n}\nfunction parseIsoDate(date) {\n  const regexResult = isoReg.exec(date);\n  if (!regexResult) return Date.parse ? Date.parse(date) : Number.NaN;\n\n  // use of toNumber() avoids NaN timestamps caused by “undefined”\n  // values being passed to Date constructor\n  const struct = {\n    year: toNumber(regexResult[1]),\n    month: toNumber(regexResult[2], 1) - 1,\n    day: toNumber(regexResult[3], 1),\n    hour: toNumber(regexResult[4]),\n    minute: toNumber(regexResult[5]),\n    second: toNumber(regexResult[6]),\n    millisecond: regexResult[7] ?\n    // allow arbitrary sub-second precision beyond milliseconds\n    toNumber(regexResult[7].substring(0, 3)) : 0,\n    z: regexResult[8] || undefined,\n    plusMinus: regexResult[9] || undefined,\n    hourOffset: toNumber(regexResult[10]),\n    minuteOffset: toNumber(regexResult[11])\n  };\n\n  // timestamps without timezone identifiers should be considered local time\n  if (struct.z === undefined && struct.plusMinus === undefined) {\n    return new Date(struct.year, struct.month, struct.day, struct.hour, struct.minute, struct.second, struct.millisecond).valueOf();\n  }\n  let totalMinutesOffset = 0;\n  if (struct.z !== 'Z' && struct.plusMinus !== undefined) {\n    totalMinutesOffset = struct.hourOffset * 60 + struct.minuteOffset;\n    if (struct.plusMinus === '+') totalMinutesOffset = 0 - totalMinutesOffset;\n  }\n  return Date.UTC(struct.year, struct.month, struct.day, struct.hour, struct.minute + totalMinutesOffset, struct.second, struct.millisecond);\n}\n\nlet invalidDate = new Date('');\nlet isDate = obj => Object.prototype.toString.call(obj) === '[object Date]';\nfunction create$4() {\n  return new DateSchema();\n}\nclass DateSchema extends Schema {\n  constructor() {\n    super({\n      type: 'date',\n      check(v) {\n        return isDate(v) && !isNaN(v.getTime());\n      }\n    });\n    this.withMutation(() => {\n      this.transform((value, _raw, ctx) => {\n        // null -> InvalidDate isn't useful; treat all nulls as null and let it fail on\n        // nullability check vs TypeErrors\n        if (!ctx.spec.coerce || ctx.isType(value) || value === null) return value;\n        value = parseIsoDate(value);\n\n        // 0 is a valid timestamp equivalent to 1970-01-01T00:00:00Z(unix epoch) or before.\n        return !isNaN(value) ? new Date(value) : DateSchema.INVALID_DATE;\n      });\n    });\n  }\n  prepareParam(ref, name) {\n    let param;\n    if (!Reference.isRef(ref)) {\n      let cast = this.cast(ref);\n      if (!this._typeCheck(cast)) throw new TypeError(`\\`${name}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);\n      param = cast;\n    } else {\n      param = ref;\n    }\n    return param;\n  }\n  min(min, message = date.min) {\n    let limit = this.prepareParam(min, 'min');\n    return this.test({\n      message,\n      name: 'min',\n      exclusive: true,\n      params: {\n        min\n      },\n      skipAbsent: true,\n      test(value) {\n        return value >= this.resolve(limit);\n      }\n    });\n  }\n  max(max, message = date.max) {\n    let limit = this.prepareParam(max, 'max');\n    return this.test({\n      message,\n      name: 'max',\n      exclusive: true,\n      params: {\n        max\n      },\n      skipAbsent: true,\n      test(value) {\n        return value <= this.resolve(limit);\n      }\n    });\n  }\n}\nDateSchema.INVALID_DATE = invalidDate;\ncreate$4.prototype = DateSchema.prototype;\ncreate$4.INVALID_DATE = invalidDate;\n\n// @ts-expect-error\nfunction sortFields(fields, excludedEdges = []) {\n  let edges = [];\n  let nodes = new Set();\n  let excludes = new Set(excludedEdges.map(([a, b]) => `${a}-${b}`));\n  function addNode(depPath, key) {\n    let node = split(depPath)[0];\n    nodes.add(node);\n    if (!excludes.has(`${key}-${node}`)) edges.push([key, node]);\n  }\n  for (const key of Object.keys(fields)) {\n    let value = fields[key];\n    nodes.add(key);\n    if (Reference.isRef(value) && value.isSibling) addNode(value.path, key);else if (isSchema(value) && 'deps' in value) value.deps.forEach(path => addNode(path, key));\n  }\n  return toposort.array(Array.from(nodes), edges).reverse();\n}\n\nfunction findIndex(arr, err) {\n  let idx = Infinity;\n  arr.some((key, ii) => {\n    var _err$path;\n    if ((_err$path = err.path) != null && _err$path.includes(key)) {\n      idx = ii;\n      return true;\n    }\n  });\n  return idx;\n}\nfunction sortByKeyOrder(keys) {\n  return (a, b) => {\n    return findIndex(keys, a) - findIndex(keys, b);\n  };\n}\n\nconst parseJson = (value, _, ctx) => {\n  if (typeof value !== 'string') {\n    return value;\n  }\n  let parsed = value;\n  try {\n    parsed = JSON.parse(value);\n  } catch (err) {\n    /* */\n  }\n  return ctx.isType(parsed) ? parsed : value;\n};\n\n// @ts-ignore\nfunction deepPartial(schema) {\n  if ('fields' in schema) {\n    const partial = {};\n    for (const [key, fieldSchema] of Object.entries(schema.fields)) {\n      partial[key] = deepPartial(fieldSchema);\n    }\n    return schema.setFields(partial);\n  }\n  if (schema.type === 'array') {\n    const nextArray = schema.optional();\n    if (nextArray.innerType) nextArray.innerType = deepPartial(nextArray.innerType);\n    return nextArray;\n  }\n  if (schema.type === 'tuple') {\n    return schema.optional().clone({\n      types: schema.spec.types.map(deepPartial)\n    });\n  }\n  if ('optional' in schema) {\n    return schema.optional();\n  }\n  return schema;\n}\nconst deepHas = (obj, p) => {\n  const path = [...normalizePath(p)];\n  if (path.length === 1) return path[0] in obj;\n  let last = path.pop();\n  let parent = getter(join(path), true)(obj);\n  return !!(parent && last in parent);\n};\nlet isObject = obj => Object.prototype.toString.call(obj) === '[object Object]';\nfunction unknown(ctx, value) {\n  let known = Object.keys(ctx.fields);\n  return Object.keys(value).filter(key => known.indexOf(key) === -1);\n}\nconst defaultSort = sortByKeyOrder([]);\nfunction create$3(spec) {\n  return new ObjectSchema(spec);\n}\nclass ObjectSchema extends Schema {\n  constructor(spec) {\n    super({\n      type: 'object',\n      check(value) {\n        return isObject(value) || typeof value === 'function';\n      }\n    });\n    this.fields = Object.create(null);\n    this._sortErrors = defaultSort;\n    this._nodes = [];\n    this._excludedEdges = [];\n    this.withMutation(() => {\n      if (spec) {\n        this.shape(spec);\n      }\n    });\n  }\n  _cast(_value, options = {}) {\n    var _options$stripUnknown;\n    let value = super._cast(_value, options);\n\n    //should ignore nulls here\n    if (value === undefined) return this.getDefault(options);\n    if (!this._typeCheck(value)) return value;\n    let fields = this.fields;\n    let strip = (_options$stripUnknown = options.stripUnknown) != null ? _options$stripUnknown : this.spec.noUnknown;\n    let props = [].concat(this._nodes, Object.keys(value).filter(v => !this._nodes.includes(v)));\n    let intermediateValue = {}; // is filled during the transform below\n    let innerOptions = Object.assign({}, options, {\n      parent: intermediateValue,\n      __validating: options.__validating || false\n    });\n    let isChanged = false;\n    for (const prop of props) {\n      let field = fields[prop];\n      let exists = (prop in value);\n      if (field) {\n        let fieldValue;\n        let inputValue = value[prop];\n\n        // safe to mutate since this is fired in sequence\n        innerOptions.path = (options.path ? `${options.path}.` : '') + prop;\n        field = field.resolve({\n          value: inputValue,\n          context: options.context,\n          parent: intermediateValue\n        });\n        let fieldSpec = field instanceof Schema ? field.spec : undefined;\n        let strict = fieldSpec == null ? void 0 : fieldSpec.strict;\n        if (fieldSpec != null && fieldSpec.strip) {\n          isChanged = isChanged || prop in value;\n          continue;\n        }\n        fieldValue = !options.__validating || !strict ?\n        // TODO: use _cast, this is double resolving\n        field.cast(value[prop], innerOptions) : value[prop];\n        if (fieldValue !== undefined) {\n          intermediateValue[prop] = fieldValue;\n        }\n      } else if (exists && !strip) {\n        intermediateValue[prop] = value[prop];\n      }\n      if (exists !== prop in intermediateValue || intermediateValue[prop] !== value[prop]) {\n        isChanged = true;\n      }\n    }\n    return isChanged ? intermediateValue : value;\n  }\n  _validate(_value, options = {}, panic, next) {\n    let {\n      from = [],\n      originalValue = _value,\n      recursive = this.spec.recursive\n    } = options;\n    options.from = [{\n      schema: this,\n      value: originalValue\n    }, ...from];\n    // this flag is needed for handling `strict` correctly in the context of\n    // validation vs just casting. e.g strict() on a field is only used when validating\n    options.__validating = true;\n    options.originalValue = originalValue;\n    super._validate(_value, options, panic, (objectErrors, value) => {\n      if (!recursive || !isObject(value)) {\n        next(objectErrors, value);\n        return;\n      }\n      originalValue = originalValue || value;\n      let tests = [];\n      for (let key of this._nodes) {\n        let field = this.fields[key];\n        if (!field || Reference.isRef(field)) {\n          continue;\n        }\n        tests.push(field.asNestedTest({\n          options,\n          key,\n          parent: value,\n          parentPath: options.path,\n          originalParent: originalValue\n        }));\n      }\n      this.runTests({\n        tests,\n        value,\n        originalValue,\n        options\n      }, panic, fieldErrors => {\n        next(fieldErrors.sort(this._sortErrors).concat(objectErrors), value);\n      });\n    });\n  }\n  clone(spec) {\n    const next = super.clone(spec);\n    next.fields = Object.assign({}, this.fields);\n    next._nodes = this._nodes;\n    next._excludedEdges = this._excludedEdges;\n    next._sortErrors = this._sortErrors;\n    return next;\n  }\n  concat(schema) {\n    let next = super.concat(schema);\n    let nextFields = next.fields;\n    for (let [field, schemaOrRef] of Object.entries(this.fields)) {\n      const target = nextFields[field];\n      nextFields[field] = target === undefined ? schemaOrRef : target;\n    }\n    return next.withMutation(s =>\n    // XXX: excludes here is wrong\n    s.setFields(nextFields, [...this._excludedEdges, ...schema._excludedEdges]));\n  }\n  _getDefault(options) {\n    if ('default' in this.spec) {\n      return super._getDefault(options);\n    }\n\n    // if there is no default set invent one\n    if (!this._nodes.length) {\n      return undefined;\n    }\n    let dft = {};\n    this._nodes.forEach(key => {\n      var _innerOptions;\n      const field = this.fields[key];\n      let innerOptions = options;\n      if ((_innerOptions = innerOptions) != null && _innerOptions.value) {\n        innerOptions = Object.assign({}, innerOptions, {\n          parent: innerOptions.value,\n          value: innerOptions.value[key]\n        });\n      }\n      dft[key] = field && 'getDefault' in field ? field.getDefault(innerOptions) : undefined;\n    });\n    return dft;\n  }\n  setFields(shape, excludedEdges) {\n    let next = this.clone();\n    next.fields = shape;\n    next._nodes = sortFields(shape, excludedEdges);\n    next._sortErrors = sortByKeyOrder(Object.keys(shape));\n    // XXX: this carries over edges which may not be what you want\n    if (excludedEdges) next._excludedEdges = excludedEdges;\n    return next;\n  }\n  shape(additions, excludes = []) {\n    return this.clone().withMutation(next => {\n      let edges = next._excludedEdges;\n      if (excludes.length) {\n        if (!Array.isArray(excludes[0])) excludes = [excludes];\n        edges = [...next._excludedEdges, ...excludes];\n      }\n\n      // XXX: excludes here is wrong\n      return next.setFields(Object.assign(next.fields, additions), edges);\n    });\n  }\n  partial() {\n    const partial = {};\n    for (const [key, schema] of Object.entries(this.fields)) {\n      partial[key] = 'optional' in schema && schema.optional instanceof Function ? schema.optional() : schema;\n    }\n    return this.setFields(partial);\n  }\n  deepPartial() {\n    const next = deepPartial(this);\n    return next;\n  }\n  pick(keys) {\n    const picked = {};\n    for (const key of keys) {\n      if (this.fields[key]) picked[key] = this.fields[key];\n    }\n    return this.setFields(picked, this._excludedEdges.filter(([a, b]) => keys.includes(a) && keys.includes(b)));\n  }\n  omit(keys) {\n    const remaining = [];\n    for (const key of Object.keys(this.fields)) {\n      if (keys.includes(key)) continue;\n      remaining.push(key);\n    }\n    return this.pick(remaining);\n  }\n  from(from, to, alias) {\n    let fromGetter = getter(from, true);\n    return this.transform(obj => {\n      if (!obj) return obj;\n      let newObj = obj;\n      if (deepHas(obj, from)) {\n        newObj = Object.assign({}, obj);\n        if (!alias) delete newObj[from];\n        newObj[to] = fromGetter(obj);\n      }\n      return newObj;\n    });\n  }\n\n  /** Parse an input JSON string to an object */\n  json() {\n    return this.transform(parseJson);\n  }\n  noUnknown(noAllow = true, message = object.noUnknown) {\n    if (typeof noAllow !== 'boolean') {\n      message = noAllow;\n      noAllow = true;\n    }\n    let next = this.test({\n      name: 'noUnknown',\n      exclusive: true,\n      message: message,\n      test(value) {\n        if (value == null) return true;\n        const unknownKeys = unknown(this.schema, value);\n        return !noAllow || unknownKeys.length === 0 || this.createError({\n          params: {\n            unknown: unknownKeys.join(', ')\n          }\n        });\n      }\n    });\n    next.spec.noUnknown = noAllow;\n    return next;\n  }\n  unknown(allow = true, message = object.noUnknown) {\n    return this.noUnknown(!allow, message);\n  }\n  transformKeys(fn) {\n    return this.transform(obj => {\n      if (!obj) return obj;\n      const result = {};\n      for (const key of Object.keys(obj)) result[fn(key)] = obj[key];\n      return result;\n    });\n  }\n  camelCase() {\n    return this.transformKeys(camelCase);\n  }\n  snakeCase() {\n    return this.transformKeys(snakeCase);\n  }\n  constantCase() {\n    return this.transformKeys(key => snakeCase(key).toUpperCase());\n  }\n  describe(options) {\n    const next = (options ? this.resolve(options) : this).clone();\n    const base = super.describe(options);\n    base.fields = {};\n    for (const [key, value] of Object.entries(next.fields)) {\n      var _innerOptions2;\n      let innerOptions = options;\n      if ((_innerOptions2 = innerOptions) != null && _innerOptions2.value) {\n        innerOptions = Object.assign({}, innerOptions, {\n          parent: innerOptions.value,\n          value: innerOptions.value[key]\n        });\n      }\n      base.fields[key] = value.describe(innerOptions);\n    }\n    return base;\n  }\n}\ncreate$3.prototype = ObjectSchema.prototype;\n\nfunction create$2(type) {\n  return new ArraySchema(type);\n}\nclass ArraySchema extends Schema {\n  constructor(type) {\n    super({\n      type: 'array',\n      spec: {\n        types: type\n      },\n      check(v) {\n        return Array.isArray(v);\n      }\n    });\n\n    // `undefined` specifically means uninitialized, as opposed to \"no subtype\"\n    this.innerType = void 0;\n    this.innerType = type;\n  }\n  _cast(_value, _opts) {\n    const value = super._cast(_value, _opts);\n\n    // should ignore nulls here\n    if (!this._typeCheck(value) || !this.innerType) {\n      return value;\n    }\n    let isChanged = false;\n    const castArray = value.map((v, idx) => {\n      const castElement = this.innerType.cast(v, Object.assign({}, _opts, {\n        path: `${_opts.path || ''}[${idx}]`\n      }));\n      if (castElement !== v) {\n        isChanged = true;\n      }\n      return castElement;\n    });\n    return isChanged ? castArray : value;\n  }\n  _validate(_value, options = {}, panic, next) {\n    var _options$recursive;\n    // let sync = options.sync;\n    // let path = options.path;\n    let innerType = this.innerType;\n    // let endEarly = options.abortEarly ?? this.spec.abortEarly;\n    let recursive = (_options$recursive = options.recursive) != null ? _options$recursive : this.spec.recursive;\n    options.originalValue != null ? options.originalValue : _value;\n    super._validate(_value, options, panic, (arrayErrors, value) => {\n      var _options$originalValu2;\n      if (!recursive || !innerType || !this._typeCheck(value)) {\n        next(arrayErrors, value);\n        return;\n      }\n\n      // #950 Ensure that sparse array empty slots are validated\n      let tests = new Array(value.length);\n      for (let index = 0; index < value.length; index++) {\n        var _options$originalValu;\n        tests[index] = innerType.asNestedTest({\n          options,\n          index,\n          parent: value,\n          parentPath: options.path,\n          originalParent: (_options$originalValu = options.originalValue) != null ? _options$originalValu : _value\n        });\n      }\n      this.runTests({\n        value,\n        tests,\n        originalValue: (_options$originalValu2 = options.originalValue) != null ? _options$originalValu2 : _value,\n        options\n      }, panic, innerTypeErrors => next(innerTypeErrors.concat(arrayErrors), value));\n    });\n  }\n  clone(spec) {\n    const next = super.clone(spec);\n    // @ts-expect-error readonly\n    next.innerType = this.innerType;\n    return next;\n  }\n\n  /** Parse an input JSON string to an object */\n  json() {\n    return this.transform(parseJson);\n  }\n  concat(schema) {\n    let next = super.concat(schema);\n\n    // @ts-expect-error readonly\n    next.innerType = this.innerType;\n    if (schema.innerType)\n      // @ts-expect-error readonly\n      next.innerType = next.innerType ?\n      // @ts-expect-error Lazy doesn't have concat and will break\n      next.innerType.concat(schema.innerType) : schema.innerType;\n    return next;\n  }\n  of(schema) {\n    // FIXME: this should return a new instance of array without the default to be\n    let next = this.clone();\n    if (!isSchema(schema)) throw new TypeError('`array.of()` sub-schema must be a valid yup schema not: ' + printValue(schema));\n\n    // @ts-expect-error readonly\n    next.innerType = schema;\n    next.spec = Object.assign({}, next.spec, {\n      types: schema\n    });\n    return next;\n  }\n  length(length, message = array.length) {\n    return this.test({\n      message,\n      name: 'length',\n      exclusive: true,\n      params: {\n        length\n      },\n      skipAbsent: true,\n      test(value) {\n        return value.length === this.resolve(length);\n      }\n    });\n  }\n  min(min, message) {\n    message = message || array.min;\n    return this.test({\n      message,\n      name: 'min',\n      exclusive: true,\n      params: {\n        min\n      },\n      skipAbsent: true,\n      // FIXME(ts): Array<typeof T>\n      test(value) {\n        return value.length >= this.resolve(min);\n      }\n    });\n  }\n  max(max, message) {\n    message = message || array.max;\n    return this.test({\n      message,\n      name: 'max',\n      exclusive: true,\n      params: {\n        max\n      },\n      skipAbsent: true,\n      test(value) {\n        return value.length <= this.resolve(max);\n      }\n    });\n  }\n  ensure() {\n    return this.default(() => []).transform((val, original) => {\n      // We don't want to return `null` for nullable schema\n      if (this._typeCheck(val)) return val;\n      return original == null ? [] : [].concat(original);\n    });\n  }\n  compact(rejector) {\n    let reject = !rejector ? v => !!v : (v, i, a) => !rejector(v, i, a);\n    return this.transform(values => values != null ? values.filter(reject) : values);\n  }\n  describe(options) {\n    const next = (options ? this.resolve(options) : this).clone();\n    const base = super.describe(options);\n    if (next.innerType) {\n      var _innerOptions;\n      let innerOptions = options;\n      if ((_innerOptions = innerOptions) != null && _innerOptions.value) {\n        innerOptions = Object.assign({}, innerOptions, {\n          parent: innerOptions.value,\n          value: innerOptions.value[0]\n        });\n      }\n      base.innerType = next.innerType.describe(innerOptions);\n    }\n    return base;\n  }\n}\ncreate$2.prototype = ArraySchema.prototype;\n\n// @ts-ignore\nfunction create$1(schemas) {\n  return new TupleSchema(schemas);\n}\nclass TupleSchema extends Schema {\n  constructor(schemas) {\n    super({\n      type: 'tuple',\n      spec: {\n        types: schemas\n      },\n      check(v) {\n        const types = this.spec.types;\n        return Array.isArray(v) && v.length === types.length;\n      }\n    });\n    this.withMutation(() => {\n      this.typeError(tuple.notType);\n    });\n  }\n  _cast(inputValue, options) {\n    const {\n      types\n    } = this.spec;\n    const value = super._cast(inputValue, options);\n    if (!this._typeCheck(value)) {\n      return value;\n    }\n    let isChanged = false;\n    const castArray = types.map((type, idx) => {\n      const castElement = type.cast(value[idx], Object.assign({}, options, {\n        path: `${options.path || ''}[${idx}]`\n      }));\n      if (castElement !== value[idx]) isChanged = true;\n      return castElement;\n    });\n    return isChanged ? castArray : value;\n  }\n  _validate(_value, options = {}, panic, next) {\n    let itemTypes = this.spec.types;\n    super._validate(_value, options, panic, (tupleErrors, value) => {\n      var _options$originalValu2;\n      // intentionally not respecting recursive\n      if (!this._typeCheck(value)) {\n        next(tupleErrors, value);\n        return;\n      }\n      let tests = [];\n      for (let [index, itemSchema] of itemTypes.entries()) {\n        var _options$originalValu;\n        tests[index] = itemSchema.asNestedTest({\n          options,\n          index,\n          parent: value,\n          parentPath: options.path,\n          originalParent: (_options$originalValu = options.originalValue) != null ? _options$originalValu : _value\n        });\n      }\n      this.runTests({\n        value,\n        tests,\n        originalValue: (_options$originalValu2 = options.originalValue) != null ? _options$originalValu2 : _value,\n        options\n      }, panic, innerTypeErrors => next(innerTypeErrors.concat(tupleErrors), value));\n    });\n  }\n  describe(options) {\n    const next = (options ? this.resolve(options) : this).clone();\n    const base = super.describe(options);\n    base.innerType = next.spec.types.map((schema, index) => {\n      var _innerOptions;\n      let innerOptions = options;\n      if ((_innerOptions = innerOptions) != null && _innerOptions.value) {\n        innerOptions = Object.assign({}, innerOptions, {\n          parent: innerOptions.value,\n          value: innerOptions.value[index]\n        });\n      }\n      return schema.describe(innerOptions);\n    });\n    return base;\n  }\n}\ncreate$1.prototype = TupleSchema.prototype;\n\nfunction create(builder) {\n  return new Lazy(builder);\n}\nclass Lazy {\n  constructor(builder) {\n    this.type = 'lazy';\n    this.__isYupSchema__ = true;\n    this.spec = void 0;\n    this._resolve = (value, options = {}) => {\n      let schema = this.builder(value, options);\n      if (!isSchema(schema)) throw new TypeError('lazy() functions must return a valid schema');\n      if (this.spec.optional) schema = schema.optional();\n      return schema.resolve(options);\n    };\n    this.builder = builder;\n    this.spec = {\n      meta: undefined,\n      optional: false\n    };\n  }\n  clone(spec) {\n    const next = new Lazy(this.builder);\n    next.spec = Object.assign({}, this.spec, spec);\n    return next;\n  }\n  optionality(optional) {\n    const next = this.clone({\n      optional\n    });\n    return next;\n  }\n  optional() {\n    return this.optionality(true);\n  }\n  resolve(options) {\n    return this._resolve(options.value, options);\n  }\n  cast(value, options) {\n    return this._resolve(value, options).cast(value, options);\n  }\n  asNestedTest(config) {\n    let {\n      key,\n      index,\n      parent,\n      options\n    } = config;\n    let value = parent[index != null ? index : key];\n    return this._resolve(value, Object.assign({}, options, {\n      value,\n      parent\n    })).asNestedTest(config);\n  }\n  validate(value, options) {\n    return this._resolve(value, options).validate(value, options);\n  }\n  validateSync(value, options) {\n    return this._resolve(value, options).validateSync(value, options);\n  }\n  validateAt(path, value, options) {\n    return this._resolve(value, options).validateAt(path, value, options);\n  }\n  validateSyncAt(path, value, options) {\n    return this._resolve(value, options).validateSyncAt(path, value, options);\n  }\n  isValid(value, options) {\n    return this._resolve(value, options).isValid(value, options);\n  }\n  isValidSync(value, options) {\n    return this._resolve(value, options).isValidSync(value, options);\n  }\n  describe(options) {\n    return options ? this.resolve(options).describe(options) : {\n      type: 'lazy',\n      meta: this.spec.meta,\n      label: undefined\n    };\n  }\n  meta(...args) {\n    if (args.length === 0) return this.spec.meta;\n    let next = this.clone();\n    next.spec.meta = Object.assign(next.spec.meta || {}, args[0]);\n    return next;\n  }\n}\n\nfunction setLocale(custom) {\n  Object.keys(custom).forEach(type => {\n    // @ts-ignore\n    Object.keys(custom[type]).forEach(method => {\n      // @ts-ignore\n      locale[type][method] = custom[type][method];\n    });\n  });\n}\n\nfunction addMethod(schemaType, name, fn) {\n  if (!schemaType || !isSchema(schemaType.prototype)) throw new TypeError('You must provide a yup schema constructor function');\n  if (typeof name !== 'string') throw new TypeError('A Method name must be provided');\n  if (typeof fn !== 'function') throw new TypeError('Method function must be provided');\n  schemaType.prototype[name] = fn;\n}\n\nexport { ArraySchema, BooleanSchema, DateSchema, MixedSchema, NumberSchema, ObjectSchema, Schema, StringSchema, TupleSchema, ValidationError, addMethod, create$2 as array, create$7 as bool, create$7 as boolean, create$4 as date, locale as defaultLocale, getIn, isSchema, create as lazy, create$8 as mixed, create$5 as number, create$3 as object, printValue, reach, create$9 as ref, setLocale, create$6 as string, create$1 as tuple };\n","import { useState } from 'react';\nimport { Formik, Form, Field, ErrorMessage } from 'formik';\nimport '../../../styles/login.css';\nimport logo from '../Root/assets/dj-logo.png';\nimport LoadingIcon from '../../icons/LoadingIcon';\nimport GitHubLoginButton from './assets/sign-in-with-github.png';\nimport GoogleLoginButton from './assets/sign-in-with-google.png';\nimport * as Yup from 'yup';\n\nconst githubLoginURL = new URL('/github/login/', process.env.REACT_APP_DJ_URL);\nconst googleLoginURL = new URL('/google/login/', process.env.REACT_APP_DJ_URL);\n\nconst SignupSchema = Yup.object().shape({\n  email: Yup.string().email('Invalid email').required('Email is required'),\n  signupUsername: Yup.string()\n    .min(3, 'Must be at least 2 characters')\n    .max(20, 'Must be less than 20 characters')\n    .required('Username is required'),\n  signupPassword: Yup.string().required('Password is required'),\n});\n\nexport default function SignupForm({ setShowSignup }) {\n  const [, setError] = useState('');\n\n  // Add the path that the user was trying to access in order to properly redirect after auth\n  githubLoginURL.searchParams.append('target', window.location.pathname);\n  googleLoginURL.searchParams.append('target', window.location.pathname);\n\n  const handleBasicSignup = async ({\n    email,\n    signupUsername,\n    signupPassword,\n  }) => {\n    const data = new FormData();\n    data.append('email', email);\n    data.append('username', signupUsername);\n    data.append('password', signupPassword);\n    await fetch(`${process.env.REACT_APP_DJ_URL}/basic/user/`, {\n      method: 'POST',\n      body: data,\n      credentials: 'include',\n    }).catch(error => {\n      setError(error ? JSON.stringify(error) : '');\n    });\n    const loginData = new FormData();\n    loginData.append('username', signupUsername);\n    loginData.append('password', signupPassword);\n    await fetch(`${process.env.REACT_APP_DJ_URL}/basic/login/`, {\n      method: 'POST',\n      body: data,\n      credentials: 'include',\n    }).catch(error => {\n      setError(error ? JSON.stringify(error) : '');\n    });\n    window.location.reload();\n  };\n\n  return (\n    <Formik\n      initialValues={{\n        email: '',\n        signupUsername: '',\n        signupPassword: '',\n        target: window.location.pathname,\n      }}\n      validationSchema={SignupSchema}\n      onSubmit={(values, { setSubmitting }) => {\n        setTimeout(() => {\n          handleBasicSignup(values);\n          setSubmitting(false);\n        }, 400);\n      }}\n    >\n      {({ isSubmitting }) => (\n        <Form>\n          <div className=\"logo-title\">\n            <img src={logo} alt=\"DJ Logo\" width=\"75px\" height=\"75px\" />\n            <h2>DataJunction</h2>\n          </div>\n          <div>\n            <Field type=\"text\" name=\"email\" placeholder=\"Email\" />\n          </div>\n          <div>\n            <ErrorMessage\n              className=\"form-error\"\n              name=\"email\"\n              component=\"span\"\n            />\n          </div>\n          <div>\n            <Field type=\"text\" name=\"signupUsername\" placeholder=\"Username\" />\n          </div>\n          <div>\n            <ErrorMessage\n              className=\"form-error\"\n              name=\"signupUsername\"\n              component=\"span\"\n            />\n          </div>\n          <div>\n            <Field\n              type=\"password\"\n              name=\"signupPassword\"\n              placeholder=\"Password\"\n            />\n          </div>\n          <div>\n            <ErrorMessage\n              className=\"form-error\"\n              name=\"signupPassword\"\n              component=\"span\"\n            />\n          </div>\n          <div>\n            <p>\n              Have an account already?{' '}\n              <a onClick={() => setShowSignup(false)}>Login</a>\n            </p>\n          </div>\n          <button type=\"submit\" disabled={isSubmitting}>\n            {isSubmitting ? <LoadingIcon /> : 'Sign Up'}\n          </button>\n          <div>\n            <p>Or</p>\n          </div>\n          {process.env.REACT_ENABLE_GITHUB_OAUTH === 'true' ? (\n            <div>\n              <a href={githubLoginURL.href}>\n                <img\n                  src={GitHubLoginButton}\n                  alt=\"Sign in with GitHub\"\n                  width=\"200px\"\n                />\n              </a>\n            </div>\n          ) : (\n            ''\n          )}\n          {process.env.REACT_ENABLE_GOOGLE_OAUTH === 'true' ? (\n            <div>\n              <a href={googleLoginURL.href}>\n                <img\n                  src={GoogleLoginButton}\n                  alt=\"Sign in with Google\"\n                  width=\"200px\"\n                />\n              </a>\n            </div>\n          ) : (\n            ''\n          )}\n        </Form>\n      )}\n    </Formik>\n  );\n}\n","import { useState } from 'react';\nimport { Formik, Form, Field, ErrorMessage } from 'formik';\nimport '../../../styles/login.css';\nimport LoadingIcon from '../../icons/LoadingIcon';\nimport logo from '../Root/assets/dj-logo.png';\nimport GitHubLoginButton from './assets/sign-in-with-github.png';\nimport GoogleLoginButton from './assets/sign-in-with-google.png';\nimport * as Yup from 'yup';\n\nconst githubLoginURL = new URL('/github/login/', process.env.REACT_APP_DJ_URL);\nconst googleLoginURL = new URL('/google/login/', process.env.REACT_APP_DJ_URL);\n\nconst LoginSchema = Yup.object().shape({\n  username: Yup.string()\n    .min(2, 'Must be at least 2 characters')\n    .required('Username is required'),\n  password: Yup.string().required('Password is required'),\n});\n\nexport default function LoginForm({ setShowSignup }) {\n  const [, setError] = useState('');\n\n  // Add the path that the user was trying to access in order to properly redirect after auth\n  githubLoginURL.searchParams.append('target', window.location.pathname);\n  googleLoginURL.searchParams.append('target', window.location.pathname);\n\n  const handleBasicLogin = async ({ username, password }) => {\n    const data = new FormData();\n    data.append('username', username);\n    data.append('password', password);\n    await fetch(`${process.env.REACT_APP_DJ_URL}/basic/login/`, {\n      method: 'POST',\n      body: data,\n      credentials: 'include',\n    }).catch(error => {\n      setError(error ? JSON.stringify(error) : '');\n    });\n    window.location.reload();\n  };\n\n  return (\n    <Formik\n      initialValues={{\n        username: '',\n        password: '',\n        target: window.location.pathname,\n      }}\n      validationSchema={LoginSchema}\n      onSubmit={(values, { setSubmitting }) => {\n        setTimeout(() => {\n          handleBasicLogin(values);\n          setSubmitting(false);\n        }, 400);\n      }}\n    >\n      {({ isSubmitting }) => (\n        <Form>\n          <div className=\"logo-title\">\n            <img src={logo} alt=\"DJ Logo\" width=\"75px\" height=\"75px\" />\n            <h2>DataJunction</h2>\n          </div>\n          <div>\n            <Field type=\"text\" name=\"username\" placeholder=\"Username\" />\n          </div>\n          <div>\n            <ErrorMessage\n              className=\"form-error\"\n              name=\"username\"\n              component=\"span\"\n            />\n          </div>\n          <div>\n            <Field type=\"password\" name=\"password\" placeholder=\"Password\" />\n          </div>\n          <div>\n            <ErrorMessage\n              className=\"form-error\"\n              name=\"password\"\n              component=\"span\"\n            />\n          </div>\n          <div>\n            <p>\n              Don't have an account yet?{' '}\n              <a onClick={() => setShowSignup(true)}>Sign Up</a>\n            </p>\n          </div>\n          <button type=\"submit\" disabled={isSubmitting}>\n            {isSubmitting ? <LoadingIcon /> : 'Login'}\n          </button>\n          <div>\n            <p>Or</p>\n          </div>\n          {process.env.REACT_ENABLE_GITHUB_OAUTH === 'true' ? (\n            <div>\n              <a href={githubLoginURL.href}>\n                <img\n                  src={GitHubLoginButton}\n                  alt=\"Sign in with GitHub\"\n                  width=\"200px\"\n                />\n              </a>\n            </div>\n          ) : (\n            ''\n          )}\n          {process.env.REACT_ENABLE_GOOGLE_OAUTH === 'true' ? (\n            <div>\n              <a href={googleLoginURL.href}>\n                <img\n                  src={GoogleLoginButton}\n                  alt=\"Sign in with Google\"\n                  width=\"200px\"\n                />\n              </a>\n            </div>\n          ) : (\n            ''\n          )}\n        </Form>\n      )}\n    </Formik>\n  );\n}\n","import { useState } from 'react';\nimport '../../../styles/login.css';\nimport SignupForm from './SignupForm';\nimport LoginForm from './LoginForm';\n\nexport function LoginPage() {\n  const [showSignup, setShowSignup] = useState(false);\n  return (\n    <div className=\"container login\">\n      {showSignup ? (\n        <SignupForm setShowSignup={setShowSignup} />\n      ) : (\n        <LoginForm setShowSignup={setShowSignup} />\n      )}\n    </div>\n  );\n}\n","// src/app/pages/NamespacePage/namespaceOptions.js\n\nconst HIDDEN_NAMESPACES = ['system.temp'];\n\nexport function isHiddenNamespace(name) {\n  return HIDDEN_NAMESPACES.some(\n    hidden => name === hidden || name.startsWith(hidden + '.'),\n  );\n}\n\nexport function topLevelNamespaces(namespaces) {\n  return namespaces\n    .map(ns => ns.namespace)\n    .filter(name => !name.includes('.'))\n    .sort((a, b) => a.localeCompare(b));\n}\n\n// A namespace is a git ROOT (vs a git branch) when its git config is a GitRootConfig.\nconst isGitRoot = ns => ns.git?.__typename === 'GitRootConfig';\nconst isTopLevel = ns => !ns.namespace.includes('.');\n\n/**\n * Build grouped react-select options for the namespace selector.\n * Group 1 \"Git-backed\": every git root, at any depth.\n * Group 2 \"Top-level namespaces\": top-levels that are not themselves git roots.\n * Deep non-git namespaces are intentionally excluded (reached via drill-in).\n */\nexport function buildNamespaceOptions(namespaces) {\n  const gitBacked = [];\n  const topLevel = [];\n\n  for (const ns of namespaces) {\n    if (isGitRoot(ns)) {\n      gitBacked.push({\n        value: ns.namespace,\n        label: ns.namespace,\n        isGitRoot: true,\n        count: ns.numNodes ?? 0,\n      });\n    } else if (isTopLevel(ns)) {\n      topLevel.push({\n        value: ns.namespace,\n        label: ns.namespace,\n        isGitRoot: false,\n        count: ns.numNodes ?? 0,\n      });\n    }\n  }\n\n  const byValue = (a, b) => a.value.localeCompare(b.value);\n  gitBacked.sort(byValue);\n  topLevel.sort(byValue);\n\n  const groups = [];\n  if (gitBacked.length)\n    groups.push({ label: 'Git-backed', options: gitBacked });\n  if (topLevel.length) groups.push({ label: 'Top-level', options: topLevel });\n  return groups;\n}\n\n/**\n * Sorted full paths of EVERY namespace (any depth) whose dotted path matches `text`.\n * Used while filtering so search reaches nested namespaces — not just the git roots /\n * top-levels in the curated default list.\n */\nexport function searchNamespaces(namespaces, text) {\n  const t = (text || '').trim().toLowerCase();\n  if (!t) return [];\n  return namespaces\n    .map(ns => ns.namespace)\n    .filter(name => name.toLowerCase().includes(t))\n    .sort((a, b) => a.localeCompare(b));\n}\n\n/** Recursively find the hierarchy node whose full dotted `path` matches. */\nexport function findHierarchyNode(hierarchy, path) {\n  if (!path) return null;\n  for (const node of hierarchy) {\n    if (node.path === path) return node;\n    const found = findHierarchyNode(node.children || [], path);\n    if (found) return found;\n  }\n  return null;\n}\n\n/** Direct children of the hierarchy node at `path` (empty if leaf/missing). */\nexport function immediateChildren(hierarchy, path) {\n  const node = findHierarchyNode(hierarchy, path);\n  return node?.children || [];\n}\n","// Note: MarkerType.Arrow is just the string \"arrow\" - we use the literal\n// to avoid importing reactflow in this service (which would bloat the main bundle)\nconst MARKER_TYPE_ARROW = 'arrow';\n\nconst DJ_URL = process.env.REACT_APP_DJ_URL\n  ? process.env.REACT_APP_DJ_URL\n  : 'http://localhost:8000';\n\nconst DJ_GQL = process.env.REACT_APP_DJ_GQL\n  ? process.env.REACT_APP_DJ_GQL\n  : process.env.REACT_APP_DJ_URL + '/graphql';\n\n// Export the base URL for components that need direct access\nexport const getDJUrl = () => DJ_URL;\n\n// The namespace list is large (every namespace, with counts + git config) and\n// changes rarely, but is fetched on every landing/namespace-page mount. Cache it\n// for a short window so re-entering namespace pages doesn't refetch it each time.\n// Mutations that add/remove namespaces should call invalidateNamespacesCache().\nlet _namespacesCache = null;\nlet _namespacesCacheAt = 0;\nconst NAMESPACES_CACHE_TTL_MS = 60000;\n\n// URL builder that works with either an absolute or relative DJ_URL.\nconst _djURL = path => {\n  const base =\n    typeof window !== 'undefined' && window.location\n      ? window.location.origin\n      : 'http://localhost';\n  return new URL(`${DJ_URL}${path}`, base);\n};\n\nconst QUERY_END_STATES = ['FINISHED', 'CANCELED', 'FAILED'];\nconst sleep = ms => new Promise(resolve => setTimeout(resolve, ms));\n\nexport const DataJunctionAPI = {\n  // Count-only node counts per type for a namespace, in a SINGLE request. Each type is\n  // an aliased findNodesPaginated selecting only totalCount (no edges) — so the server\n  // never hydrates node rows, unlike listNodesForLanding. Returns a { type: count } map.\n  // `types` are trusted enum names (e.g. 'metric') from a fixed constant, not user input.\n  nodeTypeCounts: async function (namespace, types) {\n    // Generic grouped-count query (one scan) instead of one count per node type.\n    const query = `\n      query NodeCounts($namespace: String) {\n        nodeCounts(groupBy: TYPE, namespace: $namespace) {\n          value\n          count\n        }\n      }\n    `;\n    const result = await (\n      await fetch(DJ_GQL, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        credentials: 'include',\n        body: JSON.stringify({ query, variables: { namespace } }),\n      })\n    ).json();\n    const byType = {};\n    (result?.data?.nodeCounts || []).forEach(({ value, count }) => {\n      byType[value] = count;\n    });\n    // Preserve the requested order and default missing types to 0.\n    const counts = {};\n    types.forEach(type => {\n      counts[type] = byType[type.toUpperCase()] ?? 0;\n    });\n    return counts;\n  },\n\n  listNodesForLanding: async function (\n    namespace,\n    nodeTypes,\n    tags,\n    editedBy,\n    before,\n    after,\n    limit,\n    sortConfig,\n    mode,\n    {\n      ownedBy = null,\n      statuses = null,\n      missingDescription = false,\n      hasMaterialization = false,\n      orphanedDimension = false,\n      search = null,\n    } = {},\n  ) {\n    const query = `\n      query ListNodes($namespace: String, $nodeTypes: [NodeType!], $tags: [String!], $editedBy: String, $mode: NodeMode, $before: String, $after: String, $limit: Int, $orderBy: NodeSortField, $ascending: Boolean, $ownedBy: String, $statuses: [NodeStatus!], $missingDescription: Boolean, $hasMaterialization: Boolean, $orphanedDimension: Boolean, $search: String) {\n        findNodesPaginated(\n          namespace: $namespace\n          nodeTypes: $nodeTypes\n          tags: $tags\n          editedBy: $editedBy\n          mode: $mode\n          limit: $limit\n          before: $before\n          after: $after\n          orderBy: $orderBy\n          ascending: $ascending\n          ownedBy: $ownedBy\n          statuses: $statuses\n          missingDescription: $missingDescription\n          hasMaterialization: $hasMaterialization\n          orphanedDimension: $orphanedDimension\n          search: $search\n        ) {\n          pageInfo {\n            hasNextPage\n            endCursor\n            hasPrevPage\n            startCursor\n          }\n          totalCount\n          edges {\n            node {\n              name\n              type\n              currentVersion\n              tags {\n                name\n                tagType\n              }\n              editedBy\n              owners {\n                username\n              }\n              current {\n                displayName\n                status\n                mode\n                updatedAt\n              }\n              gitInfo {\n                repo\n                branch\n                defaultBranch\n              }\n            }\n          }\n        }\n      }\n    `;\n    const sortOrderMapping = {\n      name: 'NAME',\n      displayName: 'DISPLAY_NAME',\n      type: 'TYPE',\n      status: 'STATUS',\n      updatedAt: 'UPDATED_AT',\n    };\n\n    return await (\n      await fetch(DJ_GQL, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        credentials: 'include',\n        body: JSON.stringify({\n          query,\n          variables: {\n            namespace: namespace,\n            nodeTypes: nodeTypes,\n            tags: tags,\n            editedBy: editedBy,\n            mode: mode || null,\n            before: before,\n            after: after,\n            limit: limit,\n            orderBy: sortOrderMapping[sortConfig.key],\n            ascending: sortConfig.direction === 'ascending',\n            ownedBy: ownedBy,\n            statuses: statuses,\n            missingDescription: missingDescription,\n            hasMaterialization: hasMaterialization,\n            orphanedDimension: orphanedDimension,\n            search: search,\n          },\n        }),\n      })\n    ).json();\n  },\n\n  // Lightweight GraphQL query for listing cubes with display names (for preset dropdown)\n  listCubesForPreset: async function () {\n    const query = `\n      query ListCubes {\n        findNodes(nodeTypes: [CUBE]) {\n          name\n          current {\n            displayName\n          }\n        }\n      }\n    `;\n\n    try {\n      const result = await (\n        await fetch(DJ_GQL, {\n          method: 'POST',\n          headers: {\n            'Content-Type': 'application/json',\n          },\n          credentials: 'include',\n          body: JSON.stringify({ query }),\n        })\n      ).json();\n\n      // Transform to simple array: [{name, display_name}]\n      const nodes = result?.data?.findNodes || [];\n      return nodes.map(node => ({\n        name: node.name,\n        display_name: node.current?.displayName || null,\n      }));\n    } catch (err) {\n      console.error('Failed to fetch cubes via GraphQL:', err);\n      return [];\n    }\n  },\n\n  // Lightweight GraphQL query for planner page - only fetches fields needed\n  // Much faster than REST /cubes/{name}/ which loads all columns, elements, etc.\n  cubeForPlanner: async function (name) {\n    const query = `\n      query GetCubeForPlanner($name: String!) {\n        findNodes(names: [$name]) {\n          name\n          current {\n            displayName\n            cubeMetrics {\n              name\n            }\n            cubeDimensions {\n              name\n              type\n              attribute\n              role\n              properties\n            }\n            availability {\n              catalog\n              schema_\n              table\n              validThroughTs\n            }\n            materializations {\n              name\n              config\n              schedule\n              strategy\n            }\n          }\n        }\n      }\n    `;\n\n    try {\n      const result = await (\n        await fetch(DJ_GQL, {\n          method: 'POST',\n          headers: {\n            'Content-Type': 'application/json',\n          },\n          credentials: 'include',\n          body: JSON.stringify({ query, variables: { name } }),\n        })\n      ).json();\n\n      if (result.errors) {\n        console.error('GraphQL errors:', result.errors);\n        return null;\n      }\n\n      const node = result?.data?.findNodes?.[0];\n      if (!node) {\n        return null;\n      }\n\n      // Transform to match the shape expected by QueryPlannerPage\n      const current = node.current || {};\n      const cubeMetrics = (current.cubeMetrics || []).map(m => m.name);\n      // Full dimension objects (name/type/role/...) so the planner can render and\n      // pre-select the cube's dimensions directly, without a slow common-dimensions\n      // intersection over every cube metric just to validate known-good dims.\n      const cubeDimensionObjects = (current.cubeDimensions || []).map(d => ({\n        name: d.name,\n        type: d.type,\n        attribute: d.attribute,\n        role: d.role,\n        properties: d.properties || [],\n      }));\n      const cubeDimensions = cubeDimensionObjects.map(d => d.name);\n\n      // Extract druid_cube materialization if present (v3 or legacy)\n      const druidMat = (current.materializations || []).find(\n        m => m.name === 'druid_cube' || m.name === 'druid_cube_v3',\n      );\n      const cubeMaterialization = druidMat\n        ? {\n            strategy: druidMat.strategy,\n            schedule: druidMat.schedule,\n            lookbackWindow: druidMat.config?.lookback_window,\n            druidDatasource: druidMat.config?.druid_datasource,\n            preaggTables: druidMat.config?.preagg_tables || [],\n            workflowUrls: druidMat.config?.workflow_urls || [],\n            timestampColumn: druidMat.config?.timestamp_column,\n            timestampFormat: druidMat.config?.timestamp_format,\n          }\n        : null;\n\n      return {\n        name: node.name,\n        display_name: current.displayName,\n        cube_node_metrics: cubeMetrics,\n        cube_node_dimensions: cubeDimensions,\n        cube_dimension_objects: cubeDimensionObjects,\n        cubeMaterialization, // Included so we don't need a second fetch\n        availability: current.availability || null,\n      };\n    } catch (err) {\n      console.error('Failed to fetch cube via GraphQL:', err);\n      return null;\n    }\n  },\n\n  whoami: async function () {\n    return await (\n      await fetch(`${DJ_URL}/whoami/`, { credentials: 'include' })\n    ).json();\n  },\n\n  querySystemMetric: async function ({\n    metric,\n    dimensions = [],\n    filters = [],\n    orderby = [],\n  }) {\n    const params = new URLSearchParams();\n    dimensions.forEach(d => params.append('dimensions', d));\n    filters.forEach(f => params.append('filters', f));\n    orderby.forEach(o => params.append('orderby', o));\n\n    const url = `${DJ_URL}/system/data/${metric}?${params.toString()}`;\n    const res = await fetch(url, { credentials: 'include' });\n\n    if (!res.ok) {\n      throw new Error(`Failed to fetch metric data ${metric}: ${res.status}`);\n    }\n    return await res.json();\n  },\n\n  querySystemMetricSingleDimension: async function ({\n    metric,\n    dimension,\n    filters = [],\n    orderby = [],\n  }) {\n    const { columns, rows } = await DataJunctionAPI.querySystemMetric({\n      metric: metric,\n      dimensions: [dimension],\n      filters: filters,\n      orderby: orderby,\n    });\n    const dimIdx = columns.indexOf(dimension);\n    const metricIdx = columns.indexOf(metric);\n    return rows.map(row => ({\n      name:\n        dimIdx >= 0 && row[dimIdx] !== undefined && row[dimIdx] !== null\n          ? String(row[dimIdx])\n          : 'unknown',\n      value: metricIdx >= 0 ? row[metricIdx] ?? 0 : 0,\n    }));\n  },\n\n  system: {\n    node_counts_by_active: async function () {\n      return DataJunctionAPI.querySystemMetricSingleDimension({\n        metric: 'system.dj.number_of_nodes',\n        dimension: 'system.dj.is_active.active_id',\n      });\n    },\n    node_counts_by_type: async function () {\n      return DataJunctionAPI.querySystemMetricSingleDimension({\n        metric: 'system.dj.number_of_nodes',\n        dimension: 'system.dj.node_type.type',\n        filters: ['system.dj.is_active.active_id=true'],\n        orderby: ['system.dj.node_type.type'],\n      });\n    },\n    node_counts_by_status: async function () {\n      return DataJunctionAPI.querySystemMetricSingleDimension({\n        metric: 'system.dj.number_of_nodes',\n        dimension: 'system.dj.nodes.status',\n        filters: ['system.dj.is_active.active_id=true'],\n        orderby: ['system.dj.nodes.status'],\n      });\n    },\n    nodes_without_description: async function () {\n      return DataJunctionAPI.querySystemMetricSingleDimension({\n        metric: 'system.dj.node_without_description',\n        dimension: 'system.dj.node_type.type',\n        filters: ['system.dj.is_active.active_id=true'],\n        orderby: ['system.dj.node_type.type'],\n      });\n    },\n    node_trends: async function () {\n      const { columns, rows } = await (\n        await fetch(\n          `${DJ_URL}/system/data/system.dj.number_of_nodes?dimensions=system.dj.nodes.created_at_week&dimensions=system.dj.node_type.type&filters=system.dj.nodes.created_at_week>=20240101&orderby=system.dj.nodes.created_at_week`,\n          { credentials: 'include' },\n        )\n      ).json();\n      const dateIdx = columns.indexOf('system.dj.nodes.created_at_week');\n      const typeIdx = columns.indexOf('system.dj.node_type.type');\n      const countIdx = columns.indexOf('system.dj.number_of_nodes');\n      const byDateint = {};\n      rows.forEach(row => {\n        const dateint = row[dateIdx];\n        const nodeType = row[typeIdx];\n        const count = row[countIdx];\n        if (!byDateint[dateint]) byDateint[dateint] = { date: dateint };\n        byDateint[dateint][nodeType] =\n          (byDateint[dateint][nodeType] || 0) + count;\n      });\n      return Object.entries(byDateint).map(([dateint, data]) => ({\n        date: dateint,\n        ...data,\n      }));\n    },\n    materialization_counts_by_type: async function () {\n      return DataJunctionAPI.querySystemMetricSingleDimension({\n        metric: 'system.dj.number_of_materializations',\n        dimension: 'system.dj.node_type.type',\n        filters: ['system.dj.is_active.active_id=true'],\n        orderby: ['system.dj.node_type.type'],\n      });\n    },\n\n    dimensions: async function () {\n      return await (\n        await fetch(`${DJ_URL}/system/dimensions`, {\n          credentials: 'include',\n        })\n      ).json();\n    },\n\n    list: async function () {\n      return await (\n        await fetch(`${DJ_URL}/system/metrics`, {\n          credentials: 'include',\n        })\n      ).json();\n    },\n  },\n\n  logout: async function () {\n    return await fetch(`${DJ_URL}/logout/`, {\n      credentials: 'include',\n      method: 'POST',\n    });\n  },\n\n  catalogs: async function () {\n    return await (\n      await fetch(`${DJ_URL}/catalogs`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  engines: async function () {\n    return await (\n      await fetch(`${DJ_URL}/engines`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  node: async function (name) {\n    const data = await (\n      await fetch(`${DJ_URL}/nodes/${name}/`, {\n        credentials: 'include',\n      })\n    ).json();\n    if (data.message !== undefined) {\n      return data;\n    }\n    data.primary_key = data.columns\n      .filter(col =>\n        col.attributes.some(attr => attr.attribute_type.name === 'primary_key'),\n      )\n      .map(col => col.name);\n    return data;\n  },\n\n  getNodeForEditing: async function (name) {\n    const query = `\n      query GetNodeForEditing($name: String!) {\n        findNodes (names: [$name]) {\n          name\n          type\n          current {\n            displayName\n            description\n            primaryKey\n            query\n            parents { name type }\n            isDerivedMetric\n            metricMetadata {\n              direction\n              unit { name }\n              expression\n              significantDigits\n              incompatibleDruidFunctions\n            }\n            requiredDimensions {\n              name\n            }\n            mode\n            customMetadata\n          }\n          tags {\n            name\n            displayName\n          }\n          owners {\n            username\n          }\n        }\n      }\n    `;\n\n    const results = await (\n      await fetch(DJ_GQL, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        credentials: 'include',\n        body: JSON.stringify({\n          query,\n          variables: {\n            name: name,\n          },\n        }),\n      })\n    ).json();\n    if (results.data.findNodes.length === 0) {\n      return null;\n    }\n    return results.data.findNodes[0];\n  },\n\n  // Fetch basic node info for multiple nodes by name (for Settings page)\n  getNodesByNames: async function (names) {\n    if (!names || names.length === 0) {\n      return [];\n    }\n    const query = `\n      query GetNodesByNames($names: [String!]) {\n        findNodes(names: $names) {\n          name\n          type\n          current {\n            displayName\n            status\n            mode\n          }\n        }\n      }\n    `;\n\n    const results = await (\n      await fetch(DJ_GQL, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        credentials: 'include',\n        body: JSON.stringify({\n          query,\n          variables: { names },\n        }),\n      })\n    ).json();\n    return results.data?.findNodes || [];\n  },\n\n  getMetric: async function (name) {\n    const query = `\n      query GetMetric($name: String!) {\n        findNodes (names: [$name]) {\n          name\n          current {\n            parents { name type }\n            isDerivedMetric\n            metricMetadata {\n              direction\n              unit { name }\n              expression\n              significantDigits\n              incompatibleDruidFunctions\n            }\n            requiredDimensions {\n              name\n            }\n          }\n        }\n      }\n    `;\n\n    const results = await (\n      await fetch(DJ_GQL, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        credentials: 'include',\n        body: JSON.stringify({\n          query,\n          variables: {\n            name: name,\n          },\n        }),\n      })\n    ).json();\n    return results.data.findNodes[0];\n  },\n\n  getCubeForEditing: async function (name) {\n    const query = `\n      query GetCubeForEditing($name: String!) {\n        findNodes(names: [$name]) {\n          name\n          type\n          owners {\n            username\n          }\n          current {\n            displayName\n            description\n            mode\n            cubeMetrics {\n              name\n              displayName\n            }\n            cubeDimensions {\n              name\n              attribute\n              role\n              properties\n            }\n          }\n          tags {\n            name\n            displayName\n          }\n        }\n      }\n    `;\n\n    const results = await (\n      await fetch(DJ_GQL, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        credentials: 'include',\n        body: JSON.stringify({\n          query,\n          variables: {\n            name: name,\n          },\n        }),\n      })\n    ).json();\n    if (results.data.findNodes.length === 0) {\n      return null;\n    }\n    return results.data.findNodes[0];\n  },\n\n  nodes: async function (prefix) {\n    const queryParams = prefix ? `?prefix=${prefix}` : '';\n    return await (\n      await fetch(`${DJ_URL}/nodes/${queryParams}`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  nodesWithType: async function (nodeType) {\n    return await (\n      await fetch(`${DJ_URL}/nodes/?node_type=${nodeType}`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  nodeDetails: async () => {\n    return await (\n      await fetch(`${DJ_URL}/nodes/details/`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  validateNode: async function (\n    nodeType,\n    name,\n    display_name,\n    description,\n    query,\n  ) {\n    const response = await fetch(`${DJ_URL}/nodes/validate`, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        name: name,\n        display_name: display_name,\n        description: description,\n        query: query,\n        type: nodeType,\n        mode: 'published',\n      }),\n      credentials: 'include',\n    });\n    return { status: response.status, json: await response.json() };\n  },\n\n  createNode: async function (\n    nodeType,\n    name,\n    display_name,\n    description,\n    query,\n    mode,\n    namespace,\n    primary_key,\n    metric_direction,\n    metric_unit,\n    required_dimensions,\n    custom_metadata,\n  ) {\n    const metricMetadata =\n      metric_direction || metric_unit\n        ? {\n            direction: metric_direction,\n            unit: metric_unit,\n          }\n        : null;\n    // Build request body, filtering out undefined values\n    const requestBody = {\n      name: name,\n      display_name: display_name,\n      description: description,\n      query: query,\n      mode: mode,\n      namespace: namespace,\n      primary_key: primary_key,\n      metric_metadata: metricMetadata,\n      required_dimensions: required_dimensions,\n      custom_metadata: custom_metadata,\n    };\n    // Remove undefined fields to avoid sending them to the API\n    Object.keys(requestBody).forEach(\n      key => requestBody[key] === undefined && delete requestBody[key],\n    );\n\n    const response = await fetch(`${DJ_URL}/nodes/${nodeType}`, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(requestBody),\n      credentials: 'include',\n    });\n    return { status: response.status, json: await response.json() };\n  },\n\n  patchNode: async function (\n    name,\n    display_name,\n    description,\n    query,\n    mode,\n    primary_key,\n    metric_direction,\n    metric_unit,\n    significant_digits,\n    required_dimensions,\n    owners,\n    custom_metadata,\n  ) {\n    try {\n      const metricMetadata =\n        metric_direction || metric_unit\n          ? {\n              direction: metric_direction,\n              unit: metric_unit,\n              significant_digits: significant_digits || null,\n            }\n          : null;\n      // Build request body, filtering out undefined values\n      const requestBody = {\n        display_name: display_name,\n        description: description,\n        query: query,\n        mode: mode,\n        primary_key: primary_key,\n        metric_metadata: metricMetadata,\n        required_dimensions: required_dimensions,\n        owners: owners,\n        custom_metadata: custom_metadata,\n      };\n      // Remove undefined fields to avoid sending them to the API\n      Object.keys(requestBody).forEach(\n        key => requestBody[key] === undefined && delete requestBody[key],\n      );\n\n      const response = await fetch(`${DJ_URL}/nodes/${name}`, {\n        method: 'PATCH',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify(requestBody),\n        credentials: 'include',\n      });\n      return { status: response.status, json: await response.json() };\n    } catch (error) {\n      return { status: 500, json: { message: 'Update failed' } };\n    }\n  },\n\n  createCube: async function (\n    name,\n    display_name,\n    description,\n    mode,\n    metrics,\n    dimensions,\n    filters,\n  ) {\n    const response = await fetch(`${DJ_URL}/nodes/cube`, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        name: name,\n        display_name: display_name,\n        description: description,\n        metrics: metrics,\n        dimensions: dimensions,\n        filters: filters,\n        mode: mode,\n      }),\n      credentials: 'include',\n    });\n    return { status: response.status, json: await response.json() };\n  },\n\n  patchCube: async function (\n    name,\n    display_name,\n    description,\n    mode,\n    metrics,\n    dimensions,\n    filters,\n    owners,\n  ) {\n    const url = `${DJ_URL}/nodes/${name}`;\n    const response = await fetch(url, {\n      method: 'PATCH',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        display_name: display_name,\n        description: description,\n        metrics: metrics,\n        dimensions: dimensions,\n        filters: filters || [],\n        mode: mode,\n        owners: owners,\n      }),\n      credentials: 'include',\n    });\n    return { status: response.status, json: await response.json() };\n  },\n\n  refreshLatestMaterialization: async function (name) {\n    const url = `${DJ_URL}/nodes/${name}?refresh_materialization=true`;\n    const response = await fetch(url, {\n      method: 'PATCH',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({}),\n      credentials: 'include',\n    });\n    return { status: response.status, json: await response.json() };\n  },\n\n  registerTable: async function (\n    catalog,\n    schema,\n    table,\n    sourceNodeNamespace = undefined,\n  ) {\n    const url = _djURL(`/register/table/${catalog}/${schema}/${table}`);\n    if (sourceNodeNamespace !== undefined) {\n      url.searchParams.set('source_node_namespace', sourceNodeNamespace);\n    }\n    const response = await fetch(url.toString(), {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      credentials: 'include',\n    });\n    return { status: response.status, json: await response.json() };\n  },\n\n  upstreams: async function (name) {\n    return await (\n      await fetch(`${DJ_URL}/nodes/${name}/upstream/`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  downstreams: async function (name) {\n    return await (\n      await fetch(`${DJ_URL}/nodes/${name}/downstream/`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  // GraphQL-based upstream/downstream queries - more efficient as they only fetch needed fields\n  upstreamsGQL: async function (nodeNames) {\n    const names = Array.isArray(nodeNames) ? nodeNames : [nodeNames];\n    const query = `\n      query GetUpstreamNodes($nodeNames: [String!]!) {\n        upstreamNodes(nodeNames: $nodeNames) {\n          name\n          type\n          current {\n            parents {\n              name\n            }\n          }\n        }\n      }\n    `;\n    const results = await (\n      await fetch(DJ_GQL, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        credentials: 'include',\n        body: JSON.stringify({ query, variables: { nodeNames: names } }),\n      })\n    ).json();\n    return results.data?.upstreamNodes || [];\n  },\n\n  downstreamsGQL: async function (nodeNames) {\n    const names = Array.isArray(nodeNames) ? nodeNames : [nodeNames];\n    const query = `\n      query GetDownstreamNodes($nodeNames: [String!]!) {\n        downstreamNodes(nodeNames: $nodeNames) {\n          name\n          type\n          current {\n            parents {\n              name\n            }\n          }\n        }\n      }\n    `;\n    const results = await (\n      await fetch(DJ_GQL, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        credentials: 'include',\n        body: JSON.stringify({ query, variables: { nodeNames: names } }),\n      })\n    ).json();\n    return results.data?.downstreamNodes || [];\n  },\n\n  // Batch-fetch cubes by name, returning each cube's name and its metric node names.\n  // Used to build the Sankey data flow graph without N individual cube fetches.\n  findCubesWithMetrics: async function (cubeNames) {\n    if (!cubeNames || cubeNames.length === 0) return [];\n    const query = `\n      query FindCubesWithMetrics($names: [String!]) {\n        findNodes(names: $names, nodeTypes: [CUBE]) {\n          name\n          current {\n            displayName\n            cubeMetrics {\n              name\n            }\n          }\n        }\n      }\n    `;\n    const results = await (\n      await fetch(DJ_GQL, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        credentials: 'include',\n        body: JSON.stringify({ query, variables: { names: cubeNames } }),\n      })\n    ).json();\n    return (results.data?.findNodes || []).map(n => ({\n      name: n.name,\n      display_name: n.current?.displayName || n.name,\n      type: 'cube',\n      parents: (n.current?.cubeMetrics || []).map(m => ({ name: m.name })),\n    }));\n  },\n\n  node_dag: async function (name) {\n    return await (\n      await fetch(`${DJ_URL}/nodes/${name}/dag/`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  // Fetch node columns with partition info via GraphQL\n  // Used to check if a node has temporal partitions defined\n  getNodeColumnsWithPartitions: async function (nodeName) {\n    const query = `\n      query GetNodeColumnsWithPartitions($name: String!) {\n        findNodes(names: [$name]) {\n          name\n          current {\n            columns {\n              name\n              type\n              partition {\n                type_\n                format\n                granularity\n              }\n            }\n          }\n        }\n      }\n    `;\n\n    try {\n      const results = await (\n        await fetch(DJ_GQL, {\n          method: 'POST',\n          headers: { 'Content-Type': 'application/json' },\n          credentials: 'include',\n          body: JSON.stringify({ query, variables: { name: nodeName } }),\n        })\n      ).json();\n\n      const node = results.data?.findNodes?.[0];\n      if (!node) return { columns: [], temporalPartitions: [] };\n\n      const columns = node.current?.columns || [];\n      const temporalPartitions = columns.filter(\n        col => col.partition?.type_ === 'TEMPORAL',\n      );\n\n      return {\n        columns,\n        temporalPartitions,\n      };\n    } catch (err) {\n      console.error('Failed to fetch node columns with partitions:', err);\n      return { columns: [], temporalPartitions: [] };\n    }\n  },\n\n  node_lineage: async function (name) {\n    return await (\n      await fetch(`${DJ_URL}/nodes/${name}/lineage/`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  metric: async function (name) {\n    return await (\n      await fetch(`${DJ_URL}/metrics/${name}/`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  clientCode: async function (name) {\n    return await (\n      await fetch(`${DJ_URL}/datajunction-clients/python/new_node/${name}`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  cube: async function (name) {\n    return await (\n      await fetch(`${DJ_URL}/cubes/${name}/`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  metrics: async function (name) {\n    return await (\n      await fetch(`${DJ_URL}/metrics/`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  getMetricsInfo: async function (names) {\n    if (!names || names.length === 0) return [];\n    const gqlQuery = `\n      query GetMetricsInfo($names: [String!]!) {\n        findNodes(names: $names) {\n          name\n          current {\n            displayName\n          }\n          gitInfo {\n            branch\n            isDefaultBranch\n          }\n        }\n      }\n    `;\n    const response = await fetch(DJ_GQL, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      credentials: 'include',\n      body: JSON.stringify({\n        query: gqlQuery,\n        variables: { names },\n      }),\n    });\n    const result = await response.json();\n    return (result?.data?.findNodes || []).map(node => ({\n      value: node.name,\n      label: node.current?.displayName || node.name,\n      name: node.name,\n      gitInfo: node.gitInfo,\n    }));\n  },\n\n  searchMetrics: async function (query, limit = 50) {\n    const gqlQuery = `\n      query SearchMetrics($q: String!, $limit: Int!) {\n        findNodes(search: $q, nodeTypes: [METRIC], limit: $limit) {\n          name\n          current {\n            displayName\n          }\n          gitInfo {\n            branch\n            isDefaultBranch\n          }\n        }\n      }\n    `;\n    const response = await fetch(DJ_GQL, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      credentials: 'include',\n      body: JSON.stringify({\n        query: gqlQuery,\n        variables: { q: query, limit },\n      }),\n    });\n    const result = await response.json();\n    return (result?.data?.findNodes || []).map(node => ({\n      value: node.name,\n      label: node.current?.displayName || node.name,\n      name: node.name,\n      gitInfo: node.gitInfo,\n    }));\n  },\n\n  commonDimensions: async function (metrics) {\n    const metricsQuery = '?' + metrics.map(m => `metric=${m}`).join('&');\n    return await (\n      await fetch(`${DJ_URL}/metrics/common/dimensions/${metricsQuery}`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  commonMetrics: async function (dimensions) {\n    // Dimension names are \"node.attribute[role]\" — strip role path and attribute to get node name\n    const stripped = [\n      ...new Set(\n        dimensions\n          .map(d =>\n            d\n              .replace(/\\[[^\\]]*\\]$/, '')\n              .split('.')\n              .slice(0, -1)\n              .join('.'),\n          )\n          .filter(Boolean),\n      ),\n    ];\n    if (stripped.length === 0) return [];\n    const dimsQuery =\n      '?' +\n      stripped.map(d => `dimension=${encodeURIComponent(d)}`).join('&') +\n      '&node_type=metric';\n    return await (\n      await fetch(`${DJ_URL}/dimensions/common/${dimsQuery}`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  history: async function (type, name, offset, limit) {\n    return await (\n      await fetch(\n        `${DJ_URL}/history?node=${name}&offset=${offset ? offset : 0}&limit=${\n          limit ? limit : 100\n        }`,\n        {\n          credentials: 'include',\n        },\n      )\n    ).json();\n  },\n\n  revisions: async function (name) {\n    return await (\n      await fetch(`${DJ_URL}/nodes/${name}/revisions/`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  namespace: async function (nmspce, editedBy) {\n    return await (\n      await fetch(\n        `${DJ_URL}/namespaces/${nmspce}?edited_by=${editedBy}&with_edited_by=true`,\n        {\n          credentials: 'include',\n        },\n      )\n    ).json();\n  },\n\n  namespaces: async function () {\n    return await (\n      await fetch(`${DJ_URL}/namespaces/`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  invalidateNamespacesCache: function () {\n    _namespacesCache = null;\n    _namespacesCacheAt = 0;\n  },\n\n  listNamespacesWithGit: async function ({ force = false } = {}) {\n    const now = Date.now();\n    if (\n      !force &&\n      _namespacesCache &&\n      now - _namespacesCacheAt < NAMESPACES_CACHE_TTL_MS\n    ) {\n      return _namespacesCache;\n    }\n    const query = `\n      query ListNamespaces {\n        listNamespaces {\n          namespace\n          numNodes\n          git {\n            __typename\n            ... on GitRootConfig {\n              repo\n              path\n              defaultBranch\n            }\n            ... on GitBranchConfig {\n              branch\n              gitOnly\n              parentNamespace\n              root {\n                repo\n                path\n                defaultBranch\n              }\n            }\n          }\n        }\n      }\n    `;\n    const result = await (\n      await fetch(DJ_GQL, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        credentials: 'include',\n        body: JSON.stringify({ query }),\n      })\n    ).json();\n    _namespacesCache = result?.data?.listNamespaces || [];\n    _namespacesCacheAt = now;\n    return _namespacesCache;\n  },\n\n  namespaceSources: async function (namespace) {\n    return await (\n      await fetch(`${DJ_URL}/namespaces/${namespace}/sources`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  namespaceSourcesBulk: async function (namespaces) {\n    return await (\n      await fetch(`${DJ_URL}/namespaces/sources/bulk`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify({ namespaces }),\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  listDeployments: async function (namespace, limit = 5) {\n    const params = new URLSearchParams();\n    if (namespace) {\n      params.append('namespace', namespace);\n    }\n    params.append('limit', limit);\n    return await (\n      await fetch(`${DJ_URL}/deployments?${params.toString()}`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  sql: async function (metric_name, selection) {\n    const params = new URLSearchParams(selection);\n    for (const [key, value] of Object.entries(selection)) {\n      if (Array.isArray(value)) {\n        params.delete(key);\n        value.forEach(v => params.append(key, v));\n      }\n    }\n\n    return await (\n      await fetch(`${DJ_URL}/sql/${metric_name}?${params}`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  nodesWithDimension: async function (name, nodeType = null) {\n    const params = nodeType ? `?node_type=${nodeType}` : '';\n    return await (\n      await fetch(`${DJ_URL}/dimensions/${name}/nodes/${params}`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  materializations: async function (node) {\n    const data = await (\n      await fetch(\n        `${DJ_URL}/nodes/${node}/materializations?show_inactive=true&include_all_revisions=true`,\n        {\n          credentials: 'include',\n        },\n      )\n    ).json();\n\n    return data;\n  },\n\n  availabilityStates: async function (node) {\n    const data = await (\n      await fetch(`${DJ_URL}/nodes/${node}/availability/`, {\n        credentials: 'include',\n      })\n    ).json();\n\n    return data;\n  },\n\n  columns: async function (node) {\n    return await Promise.all(\n      node.columns.map(async col => {\n        return col;\n      }),\n    );\n  },\n\n  sqls: async function (metricSelection, dimensionSelection, filters) {\n    const params = new URLSearchParams();\n    metricSelection.map(metric => params.append('metrics', metric));\n    dimensionSelection.map(dimension => params.append('dimensions', dimension));\n    params.append('filters', filters);\n    return await (\n      await fetch(`${DJ_URL}/sql/?${params}`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  // V3 Measures SQL - returns pre-aggregations with components for materialization planning\n  measuresV3: async function (\n    metricSelection,\n    dimensionSelection,\n    filters = '',\n  ) {\n    const params = new URLSearchParams();\n    metricSelection.forEach(metric => params.append('metrics', metric));\n    dimensionSelection.forEach(dimension =>\n      params.append('dimensions', dimension),\n    );\n    if (filters) {\n      params.append('filters', filters);\n    }\n    return await (\n      await fetch(`${DJ_URL}/sql/measures/v3/?${params}`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  // V3 Metrics SQL - returns final combined SQL query\n  metricsV3: async function (\n    metricSelection,\n    dimensionSelection,\n    filters = [],\n    useMaterialized = true,\n    dialect = null,\n  ) {\n    const params = new URLSearchParams();\n    metricSelection.forEach(metric => params.append('metrics', metric));\n    dimensionSelection.forEach(dimension =>\n      params.append('dimensions', dimension),\n    );\n    if (filters && filters.length > 0) {\n      filters.forEach(f => params.append('filters', f));\n    }\n    params.append('use_materialized', useMaterialized ? 'true' : 'false');\n    if (dialect) {\n      params.append('dialect', dialect);\n    }\n    return await (\n      await fetch(`${DJ_URL}/sql/metrics/v3/?${params}`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  data: async function (\n    metricSelection,\n    dimensionSelection,\n    filters = [],\n    dialect = null,\n    onProgress = null,\n  ) {\n    const params = new URLSearchParams();\n    metricSelection.map(metric => params.append('metrics', metric));\n    dimensionSelection.map(dimension => params.append('dimensions', dimension));\n    if (filters && filters.length > 0) {\n      filters.forEach(f => params.append('filters', f));\n    }\n    params.append('limit', '10000');\n    params.append('async_', 'true');\n    if (dialect) {\n      params.append('dialect', dialect);\n    }\n\n    let pollInterval = 1000;\n\n    // Submit the query once\n    const submitResponse = await fetch(`${DJ_URL}/data/?${params}`, {\n      credentials: 'include',\n    });\n    if (!submitResponse.ok) {\n      const errorData = await submitResponse.json().catch(() => ({}));\n      throw new Error(\n        errorData.message ||\n          errorData.detail ||\n          `Query failed: ${submitResponse.status}`,\n      );\n    }\n    let results = await submitResponse.json();\n\n    // Report links from the first response so they're visible during polling\n    if (onProgress && results.links?.length > 0) {\n      onProgress({ links: results.links });\n    }\n\n    // Poll by query ID using GET /data/query/{id} to avoid re-submitting\n    while (!QUERY_END_STATES.includes(results.state)) {\n      await sleep(pollInterval);\n      pollInterval = Math.min(pollInterval * 2, 10000);\n\n      const pollResponse = await fetch(`${DJ_URL}/data/query/${results.id}`, {\n        credentials: 'include',\n      });\n      if (!pollResponse.ok) {\n        const errorData = await pollResponse.json().catch(() => ({}));\n        throw new Error(\n          errorData.message ||\n            errorData.detail ||\n            `Query poll failed: ${pollResponse.status}`,\n        );\n      }\n      results = await pollResponse.json();\n    }\n\n    if (results.state === 'CANCELED') {\n      throw new Error('Query execution was canceled');\n    }\n    if (results.state === 'FAILED') {\n      throw new Error(results.errors?.[0] || 'Query execution failed');\n    }\n\n    // If FINISHED but results are empty, re-submit to /data/ a few times\n    // before giving up (mirrors the Python client's behavior).\n    if (!results.results?.length || !results.results[0]?.rows?.length) {\n      for (let attempt = 0; attempt < 3; attempt++) {\n        await sleep(2 ** attempt * 1000);\n        const retryResponse = await fetch(`${DJ_URL}/data/?${params}`, {\n          credentials: 'include',\n        });\n        if (retryResponse.ok) {\n          const retryResults = await retryResponse.json();\n          if (\n            retryResults.results?.length &&\n            retryResults.results[0]?.rows?.length\n          ) {\n            results = retryResults;\n            break;\n          }\n        }\n      }\n    }\n\n    return results;\n  },\n\n  nodeData: async function (nodeName, selection = null) {\n    if (selection === null) {\n      selection = {\n        dimensions: [],\n        filters: [],\n      };\n    }\n    const params = new URLSearchParams(selection);\n    for (const [key, value] of Object.entries(selection)) {\n      if (Array.isArray(value)) {\n        params.delete(key);\n        value.forEach(v => params.append(key, v));\n      }\n    }\n    params.append('limit', '1000');\n    params.append('async_', 'true');\n\n    return await (\n      await fetch(`${DJ_URL}/data/${nodeName}?${params}`, {\n        credentials: 'include',\n        headers: { 'Cache-Control': 'max-age=86400' },\n      })\n    ).json();\n  },\n\n  notebookExportCube: async function (cube) {\n    return await fetch(\n      `${DJ_URL}/datajunction-clients/python/notebook/?cube=${cube}`,\n      {\n        credentials: 'include',\n      },\n    );\n  },\n\n  notebookExportNamespace: async function (namespace) {\n    return await (\n      await fetch(\n        `${DJ_URL}/datajunction-clients/python/notebook/?namespace=${namespace}`,\n        {\n          credentials: 'include',\n        },\n      )\n    ).json();\n  },\n\n  stream: async function (metricSelection, dimensionSelection, filters) {\n    const params = new URLSearchParams();\n    metricSelection.map(metric => params.append('metrics', metric));\n    dimensionSelection.map(dimension => params.append('dimensions', dimension));\n    params.append('filters', filters);\n    return new EventSource(\n      `${DJ_URL}/stream/?${params}&limit=10000&async_=true`,\n      {\n        withCredentials: true,\n      },\n    );\n  },\n\n  streamNodeData: async function (nodeName, selection = null) {\n    if (selection === null) {\n      selection = {\n        dimensions: [],\n        filters: [],\n      };\n    }\n    const params = new URLSearchParams(selection);\n    for (const [key, value] of Object.entries(selection)) {\n      if (Array.isArray(value)) {\n        params.delete(key);\n        value.forEach(v => params.append(key, v));\n      }\n    }\n    params.append('limit', '1000');\n    params.append('async_', 'true');\n\n    return new EventSource(`${DJ_URL}/stream/${nodeName}?${params}`, {\n      withCredentials: true,\n    });\n  },\n\n  lineage: async function (node) {},\n\n  compiledSql: async function (node) {\n    return await (\n      await fetch(`${DJ_URL}/sql/${node}/`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  dag: async function (namespace = 'default') {\n    const edges = [];\n    const data = await (\n      await fetch(`${DJ_URL}/nodes/`, {\n        credentials: 'include',\n      })\n    ).json();\n\n    data.forEach(obj => {\n      obj.parents.forEach(parent => {\n        if (parent.name) {\n          edges.push({\n            id: obj.name + '-' + parent.name,\n            target: obj.name,\n            source: parent.name,\n            animated: true,\n            markerEnd: {\n              type: MARKER_TYPE_ARROW,\n            },\n          });\n        }\n      });\n\n      obj.columns.forEach(col => {\n        if (col.dimension) {\n          edges.push({\n            id: obj.name + '-' + col.dimension.name,\n            target: obj.name,\n            source: col.dimension.name,\n            draggable: true,\n          });\n        }\n      });\n    });\n    const namespaces = new Set(\n      data.flatMap(node => node.name.split('.').slice(0, -1)),\n    );\n    const namespaceNodes = Array.from(namespaces).map(namespace => {\n      return {\n        id: String(namespace),\n        type: 'DJNamespace',\n        data: {\n          label: String(namespace),\n        },\n      };\n    });\n\n    const nodes = data.map((node, index) => {\n      const primary_key = node.columns\n        .filter(col =>\n          col.attributes.some(\n            attr => attr.attribute_type.name === 'primary_key',\n          ),\n        )\n        .map(col => col.name);\n      const column_names = node.columns.map(col => {\n        return { name: col.name, type: col.type };\n      });\n      return {\n        id: String(node.name),\n        type: 'DJNode',\n        data: {\n          label:\n            node.table !== null\n              ? String(node.schema_ + '.' + node.table)\n              : String(node.name),\n          table: node.table,\n          name: String(node.name),\n          display_name: String(node.display_name),\n          type: node.type,\n          primary_key: primary_key,\n          column_names: column_names,\n        },\n      };\n    });\n\n    return { edges: edges, nodes: nodes, namespaces: namespaceNodes };\n  },\n  attributes: async function () {\n    return await (\n      await fetch(`${DJ_URL}/attributes`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n  setAttributes: async function (nodeName, columnName, attributes) {\n    const response = await fetch(\n      `${DJ_URL}/nodes/${nodeName}/columns/${columnName}/attributes`,\n      {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify(\n          attributes.map(attribute => {\n            return {\n              namespace: 'system',\n              name: attribute,\n            };\n          }),\n        ),\n        credentials: 'include',\n      },\n    );\n    return { status: response.status, json: await response.json() };\n  },\n\n  setColumnDescription: async function (nodeName, columnName, description) {\n    const response = await fetch(\n      `${DJ_URL}/nodes/${nodeName}/columns/${columnName}/description?description=${encodeURIComponent(\n        description,\n      )}`,\n      {\n        method: 'PATCH',\n        credentials: 'include',\n      },\n    );\n    return { status: response.status, json: await response.json() };\n  },\n  dimensions: async function () {\n    return await (\n      await fetch(`${DJ_URL}/dimensions`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n  nodeDimensions: async function (nodeName) {\n    return await (\n      await fetch(`${DJ_URL}/nodes/${nodeName}/dimensions`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n  dimensionDag: async function (nodeName) {\n    return await (\n      await fetch(`${DJ_URL}/nodes/${nodeName}/dimension-dag/`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n  linkDimension: async function (nodeName, columnName, dimensionName) {\n    const response = await fetch(\n      `${DJ_URL}/nodes/${nodeName}/columns/${columnName}?dimension=${dimensionName}`,\n      {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        credentials: 'include',\n      },\n    );\n    return { status: response.status, json: await response.json() };\n  },\n  unlinkDimension: async function (nodeName, columnName, dimensionName) {\n    const response = await fetch(\n      `${DJ_URL}/nodes/${nodeName}/columns/${columnName}?dimension=${dimensionName}`,\n      {\n        method: 'DELETE',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        credentials: 'include',\n      },\n    );\n    return { status: response.status, json: await response.json() };\n  },\n\n  addComplexDimensionLink: async function (\n    nodeName,\n    dimensionNode,\n    joinOn,\n    joinType = null,\n    joinCardinality = null,\n    role = null,\n    defaultValue = null,\n  ) {\n    const response = await fetch(`${DJ_URL}/nodes/${nodeName}/link`, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        dimension_node: dimensionNode,\n        join_type: joinType,\n        join_on: joinOn,\n        join_cardinality: joinCardinality,\n        role: role,\n        default_value: defaultValue,\n      }),\n      credentials: 'include',\n    });\n    return { status: response.status, json: await response.json() };\n  },\n\n  removeComplexDimensionLink: async function (\n    nodeName,\n    dimensionNode,\n    role = null,\n  ) {\n    const response = await fetch(`${DJ_URL}/nodes/${nodeName}/link`, {\n      method: 'DELETE',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        dimension_node: dimensionNode,\n        role: role,\n      }),\n      credentials: 'include',\n    });\n    return { status: response.status, json: await response.json() };\n  },\n\n  addReferenceDimensionLink: async function (\n    nodeName,\n    nodeColumn,\n    dimensionNode,\n    dimensionColumn,\n    role = null,\n  ) {\n    const url = _djURL(`/nodes/${nodeName}/columns/${nodeColumn}/link`);\n    url.searchParams.append('dimension_node', dimensionNode);\n    url.searchParams.append('dimension_column', dimensionColumn);\n    if (role) {\n      url.searchParams.append('role', role);\n    }\n\n    const response = await fetch(url.toString(), {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      credentials: 'include',\n    });\n    return { status: response.status, json: await response.json() };\n  },\n\n  removeReferenceDimensionLink: async function (nodeName, nodeColumn) {\n    const response = await fetch(\n      `${DJ_URL}/nodes/${nodeName}/columns/${nodeColumn}/link`,\n      {\n        method: 'DELETE',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        credentials: 'include',\n      },\n    );\n    return { status: response.status, json: await response.json() };\n  },\n\n  deactivate: async function (nodeName) {\n    const response = await fetch(`${DJ_URL}/nodes/${nodeName}`, {\n      method: 'DELETE',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      credentials: 'include',\n    });\n    return { status: response.status, json: await response.json() };\n  },\n  addNamespace: async function (namespace) {\n    const response = await fetch(`${DJ_URL}/namespaces/${namespace}`, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      credentials: 'include',\n    });\n    return { status: response.status, json: await response.json() };\n  },\n  listTags: async function () {\n    const response = await fetch(`${DJ_URL}/tags`, {\n      method: 'GET',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      credentials: 'include',\n    });\n    return await response.json();\n  },\n\n  globalSearch: async function (\n    query,\n    { signal, nodeLimit = 10, tagLimit = 5 } = {},\n  ) {\n    const gqlQuery = `\n      query GlobalSearch($q: String!, $nodeLimit: Int!, $tagLimit: Int!) {\n        findNodes(search: $q, limit: $nodeLimit) {\n          name\n          type\n          current {\n            displayName\n            description\n          }\n        }\n        searchTags(search: $q, limit: $tagLimit) {\n          name\n          displayName\n          description\n          tagType\n        }\n      }\n    `;\n    const response = await fetch(DJ_GQL, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      credentials: 'include',\n      signal,\n      body: JSON.stringify({\n        query: gqlQuery,\n        variables: { q: query, nodeLimit, tagLimit },\n      }),\n    });\n    const result = await response.json();\n    const nodes = (result?.data?.findNodes || []).map(node => ({\n      name: node.name,\n      display_name: node.current?.displayName || node.name,\n      description: node.current?.description || '',\n      type: node.type?.toLowerCase() || '',\n      kind: 'node',\n    }));\n    const tags = (result?.data?.searchTags || []).map(tag => ({\n      name: tag.name,\n      display_name: tag.displayName || tag.name,\n      description: tag.description || '',\n      type: 'tag',\n      tag_type: tag.tagType,\n      kind: 'tag',\n    }));\n    return { nodes, tags };\n  },\n  users: async function () {\n    // Only usernames are consumed by callers (filter/owner dropdowns), so we skip\n    // `with_activity` — it makes the endpoint join the entire history table.\n    // Without that flag the endpoint returns a bare list of usernames, so we\n    // normalize back to the `{ username }` shape callers expect.\n    const data =\n      (await (\n        await fetch(`${DJ_URL}/users`, {\n          credentials: 'include',\n        })\n      ).json()) || [];\n    return data.map(user =>\n      typeof user === 'string' ? { username: user } : user,\n    );\n  },\n  getTag: async function (tagName) {\n    const response = await fetch(`${DJ_URL}/tags/${tagName}`, {\n      method: 'GET',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      credentials: 'include',\n    });\n    return await response.json();\n  },\n  listNodesForTag: async function (tagName) {\n    const response = await fetch(`${DJ_URL}/tags/${tagName}/nodes`, {\n      method: 'GET',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      credentials: 'include',\n    });\n    return await response.json();\n  },\n  tagsNode: async function (nodeName, tagNames) {\n    const url = tagNames\n      .map(value => `tag_names=${encodeURIComponent(value)}`)\n      .join('&');\n    const response = await fetch(`${DJ_URL}/nodes/${nodeName}/tags?${url}`, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      credentials: 'include',\n    });\n    return { status: response.status, json: await response.json() };\n  },\n  addTag: async function (name, displayName, tagType, description) {\n    const response = await fetch(`${DJ_URL}/tags`, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        name: name,\n        display_name: displayName,\n        tag_type: tagType,\n        description: description,\n      }),\n      credentials: 'include',\n    });\n    return { status: response.status, json: await response.json() };\n  },\n  editTag: async function (name, description, displayName) {\n    const updates = {};\n    if (description) {\n      updates.description = description;\n    }\n    if (displayName) {\n      updates.display_name = displayName;\n    }\n\n    const response = await fetch(`${DJ_URL}/tags/${name}`, {\n      method: 'PATCH',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(updates),\n      credentials: 'include',\n    });\n    return { status: response.status, json: await response.json() };\n  },\n  setPartition: async function (\n    nodeName,\n    columnName,\n    partitionType,\n    format,\n    granularity,\n  ) {\n    const body = {\n      type_: partitionType,\n    };\n    if (format) {\n      body.format = format;\n    }\n    if (granularity) {\n      body.granularity = granularity;\n    }\n    const response = await fetch(\n      `${DJ_URL}/nodes/${nodeName}/columns/${columnName}/partition`,\n      {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify(body),\n        credentials: 'include',\n      },\n    );\n    return { status: response.status, json: await response.json() };\n  },\n  removePartition: async function (nodeName, columnName) {\n    const response = await fetch(\n      `${DJ_URL}/nodes/${nodeName}/columns/${columnName}/partition`,\n      {\n        method: 'DELETE',\n        credentials: 'include',\n      },\n    );\n    return { status: response.status, json: await response.json() };\n  },\n  materialize: async function (nodeName, jobType, strategy, schedule, config) {\n    const response = await fetch(\n      `${DJ_URL}/nodes/${nodeName}/materialization`,\n      {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify({\n          job: jobType,\n          strategy: strategy,\n          schedule: schedule,\n          config: config,\n        }),\n        credentials: 'include',\n      },\n    );\n    return { status: response.status, json: await response.json() };\n  },\n  materializeCube: async function (\n    nodeName,\n    jobType,\n    strategy,\n    schedule,\n    lookbackWindow,\n  ) {\n    const response = await fetch(\n      `${DJ_URL}/nodes/${nodeName}/materialization`,\n      {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify({\n          job: jobType,\n          strategy: strategy,\n          schedule: schedule,\n          lookback_window: lookbackWindow,\n        }),\n        credentials: 'include',\n      },\n    );\n    return { status: response.status, json: await response.json() };\n  },\n  // New V2 cube materialization endpoint for Druid cubes\n  materializeCubeV2: async function (\n    cubeName,\n    schedule,\n    strategy = 'incremental_time',\n    lookbackWindow = '1 DAY',\n    runBackfill = true,\n  ) {\n    const response = await fetch(`${DJ_URL}/cubes/${cubeName}/materialize`, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        schedule: schedule,\n        strategy: strategy,\n        lookback_window: lookbackWindow,\n        run_backfill: runBackfill,\n      }),\n      credentials: 'include',\n    });\n    return { status: response.status, json: await response.json() };\n  },\n  runBackfill: async function (nodeName, materializationName, partitionValues) {\n    const response = await fetch(\n      `${DJ_URL}/nodes/${nodeName}/materializations/${materializationName}/backfill`,\n      {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify(\n          partitionValues.map(partitionValue => {\n            return {\n              column_name: partitionValue.columnName,\n              range: partitionValue.range,\n              values: partitionValue.values,\n            };\n          }),\n        ),\n        credentials: 'include',\n      },\n    );\n    return { status: response.status, json: await response.json() };\n  },\n  deleteMaterialization: async function (\n    nodeName,\n    materializationName,\n    nodeVersion = null,\n  ) {\n    let url = `${DJ_URL}/nodes/${nodeName}/materializations?materialization_name=${materializationName}`;\n    if (nodeVersion) {\n      url += `&node_version=${nodeVersion}`;\n    }\n    const response = await fetch(url, {\n      method: 'DELETE',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      credentials: 'include',\n    });\n    return { status: response.status, json: await response.json() };\n  },\n  listMetricMetadata: async function () {\n    const response = await fetch(`${DJ_URL}/metrics/metadata`, {\n      method: 'GET',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      credentials: 'include',\n    });\n    return await response.json();\n  },\n  materializationInfo: async function () {\n    return await (\n      await fetch(`${DJ_URL}/materialization/info`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n  revalidate: async function (node) {\n    return await (\n      await fetch(`${DJ_URL}/nodes/${node}/validate`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        credentials: 'include',\n      })\n    ).json();\n  },\n  // GET /notifications/\n  getNotificationPreferences: async function (params = {}) {\n    const query = new URLSearchParams(params).toString();\n    return await (\n      await fetch(`${DJ_URL}/notifications/${query ? `?${query}` : ''}`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  // POST /notifications/subscribe\n  subscribeToNotifications: async function ({\n    entity_type,\n    entity_name,\n    activity_types,\n    alert_types,\n  }) {\n    const response = await fetch(`${DJ_URL}/notifications/subscribe`, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      credentials: 'include',\n      body: JSON.stringify({\n        entity_type,\n        entity_name,\n        activity_types,\n        alert_types,\n      }),\n    });\n\n    return {\n      status: response.status,\n      json: await response.json(),\n    };\n  },\n\n  // DELETE /notifications/unsubscribe\n  unsubscribeFromNotifications: async function ({ entity_type, entity_name }) {\n    const url = _djURL(`/notifications/unsubscribe`);\n    url.searchParams.append('entity_type', entity_type);\n    url.searchParams.append('entity_name', entity_name);\n\n    const response = await fetch(url.toString(), {\n      method: 'DELETE',\n      credentials: 'include',\n    });\n\n    return {\n      status: response.status,\n      json: await response.json(),\n    };\n  },\n\n  // GET /history/ with only_subscribed filter\n  getSubscribedHistory: async function (limit = 10) {\n    return await (\n      await fetch(`${DJ_URL}/history/?only_subscribed=true&limit=${limit}`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  // POST /notifications/mark-read\n  markNotificationsRead: async function () {\n    const response = await fetch(`${DJ_URL}/notifications/mark-read`, {\n      method: 'POST',\n      credentials: 'include',\n    });\n    return await response.json();\n  },\n\n  // Service Account APIs\n  listServiceAccounts: async function () {\n    const response = await fetch(`${DJ_URL}/service-accounts`, {\n      credentials: 'include',\n    });\n    return await response.json();\n  },\n\n  createServiceAccount: async function (name) {\n    const response = await fetch(`${DJ_URL}/service-accounts`, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      credentials: 'include',\n      body: JSON.stringify({ name }),\n    });\n    return await response.json();\n  },\n\n  deleteServiceAccount: async function (clientId) {\n    const response = await fetch(`${DJ_URL}/service-accounts/${clientId}`, {\n      method: 'DELETE',\n      credentials: 'include',\n    });\n    return await response.json();\n  },\n\n  // ===== My Workspace GraphQL Queries =====\n\n  getWorkspaceRecentlyEdited: async function (\n    username,\n    limit = 10,\n    nodeType = null,\n  ) {\n    // Nodes the user has edited, ordered by last updated (excluding source nodes)\n    const query = `\n      query RecentlyEdited($editedBy: String!, $limit: Int!, $nodeTypes: [NodeType!]) {\n        findNodesPaginated(editedBy: $editedBy, limit: $limit, nodeTypes: $nodeTypes, orderBy: UPDATED_AT, ascending: false) {\n          pageInfo {\n            hasNextPage\n          }\n          edges {\n            node {\n              name\n              type\n              currentVersion\n              current {\n                displayName\n                status\n                mode\n                updatedAt\n              }\n              gitInfo {\n                repo\n                branch\n                defaultBranch\n                isDefaultBranch\n                parentNamespace\n                gitOnly\n              }\n            }\n          }\n        }\n      }\n    `;\n    const allTypes = ['TRANSFORM', 'METRIC', 'DIMENSION', 'CUBE'];\n    return await (\n      await fetch(DJ_GQL, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        credentials: 'include',\n        body: JSON.stringify({\n          query,\n          variables: {\n            editedBy: username,\n            limit,\n            nodeTypes: nodeType ? [nodeType] : allTypes,\n          },\n        }),\n      })\n    ).json();\n  },\n\n  getWorkspaceOwnedNodes: async function (\n    username,\n    limit = 10,\n    nodeType = null,\n  ) {\n    // Owned nodes ordered by UPDATED_AT (excluding source nodes)\n    const query = `\n      query OwnedNodes($ownedBy: String!, $limit: Int!, $nodeTypes: [NodeType!]) {\n        findNodesPaginated(ownedBy: $ownedBy, limit: $limit, nodeTypes: $nodeTypes, orderBy: UPDATED_AT, ascending: false) {\n          pageInfo {\n            hasNextPage\n          }\n          edges {\n            node {\n              name\n              type\n              currentVersion\n              current {\n                displayName\n                status\n                mode\n                updatedAt\n              }\n              gitInfo {\n                repo\n                branch\n                defaultBranch\n                isDefaultBranch\n                parentNamespace\n                gitOnly\n              }\n            }\n          }\n        }\n      }\n    `;\n    const allTypes = ['TRANSFORM', 'METRIC', 'DIMENSION', 'CUBE'];\n    return await (\n      await fetch(DJ_GQL, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        credentials: 'include',\n        body: JSON.stringify({\n          query,\n          variables: {\n            ownedBy: username,\n            limit,\n            nodeTypes: nodeType ? [nodeType] : allTypes,\n          },\n        }),\n      })\n    ).json();\n  },\n\n  getWorkspaceCollections: async function (username) {\n    const query = `\n      query UserCollections($createdBy: String!) {\n        listCollections(createdBy: $createdBy) {\n          name\n          description\n          nodeCount\n        }\n      }\n    `;\n    return await (\n      await fetch(DJ_GQL, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        credentials: 'include',\n        body: JSON.stringify({\n          query,\n          variables: { createdBy: username },\n        }),\n      })\n    ).json();\n  },\n\n  listAllCollections: async function () {\n    const query = `\n      query AllCollections {\n        listCollections {\n          name\n          description\n          nodeCount\n          createdBy {\n            username\n          }\n        }\n      }\n    `;\n    return await (\n      await fetch(DJ_GQL, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        credentials: 'include',\n        body: JSON.stringify({ query }),\n      })\n    ).json();\n  },\n\n  getWorkspaceNodesMissingDescription: async function (username, limit = 5) {\n    const query = `\n      query NodesMissingDescription($ownedBy: String!, $limit: Int!) {\n        findNodesPaginated(ownedBy: $ownedBy, missingDescription: true, limit: $limit) {\n          edges {\n            node {\n              name\n              type\n              current {\n                displayName\n                status\n              }\n            }\n          }\n        }\n      }\n    `;\n    return await (\n      await fetch(DJ_GQL, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        credentials: 'include',\n        body: JSON.stringify({\n          query,\n          variables: { ownedBy: username, limit },\n        }),\n      })\n    ).json();\n  },\n\n  getWorkspaceInvalidNodes: async function (username, limit = 10) {\n    // Nodes the user owns that have INVALID status\n    const query = `\n      query InvalidNodes($ownedBy: String!, $limit: Int!, $statuses: [NodeStatus!]) {\n        findNodesPaginated(ownedBy: $ownedBy, statuses: $statuses, limit: $limit) {\n          edges {\n            node {\n              name\n              type\n              current {\n                displayName\n                status\n              }\n            }\n          }\n        }\n      }\n    `;\n    return await (\n      await fetch(DJ_GQL, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        credentials: 'include',\n        body: JSON.stringify({\n          query,\n          variables: {\n            ownedBy: username,\n            limit,\n            statuses: ['INVALID'],\n          },\n        }),\n      })\n    ).json();\n  },\n\n  getWorkspaceOrphanedDimensions: async function (username, limit = 10) {\n    // Dimension nodes the user owns that are not linked to by any other node\n    const query = `\n      query OrphanedDimensions($ownedBy: String!, $limit: Int!, $orphanedDimension: Boolean!) {\n        findNodesPaginated(ownedBy: $ownedBy, orphanedDimension: $orphanedDimension, limit: $limit) {\n          edges {\n            node {\n              name\n              type\n              current {\n                displayName\n                status\n              }\n            }\n          }\n        }\n      }\n    `;\n    return await (\n      await fetch(DJ_GQL, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        credentials: 'include',\n        body: JSON.stringify({\n          query,\n          variables: {\n            ownedBy: username,\n            limit,\n            orphanedDimension: true,\n          },\n        }),\n      })\n    ).json();\n  },\n\n  getWorkspaceDraftNodes: async function (username, limit = 50) {\n    // Draft nodes the user owns (we'll filter for stale ones on frontend)\n    const query = `\n      query DraftNodes($ownedBy: String!, $limit: Int!, $mode: NodeMode!) {\n        findNodesPaginated(ownedBy: $ownedBy, mode: $mode, limit: $limit, orderBy: UPDATED_AT, ascending: true) {\n          edges {\n            node {\n              name\n              type\n              current {\n                displayName\n                status\n                mode\n                updatedAt\n              }\n            }\n          }\n        }\n      }\n    `;\n    return await (\n      await fetch(DJ_GQL, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        credentials: 'include',\n        body: JSON.stringify({\n          query,\n          variables: {\n            ownedBy: username,\n            limit,\n            mode: 'DRAFT',\n          },\n        }),\n      })\n    ).json();\n  },\n\n  getWorkspaceMaterializations: async function (username, limit = 20) {\n    // Nodes the user owns that have materializations configured\n    const query = `\n      query MaterializedNodes($ownedBy: String!, $limit: Int!, $hasMaterialization: Boolean!) {\n        findNodesPaginated(ownedBy: $ownedBy, limit: $limit, hasMaterialization: $hasMaterialization) {\n          edges {\n            node {\n              name\n              type\n              current {\n                displayName\n                status\n                materializations {\n                  name\n                  schedule\n                  job\n                }\n                availability {\n                  catalog\n                  table\n                  validThroughTs\n                  maxTemporalPartition\n                }\n              }\n            }\n          }\n        }\n      }\n    `;\n    return await (\n      await fetch(DJ_GQL, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        credentials: 'include',\n        body: JSON.stringify({\n          query,\n          variables: { ownedBy: username, limit, hasMaterialization: true },\n        }),\n      })\n    ).json();\n  },\n\n  // =================================\n  // Pre-aggregation API\n  // =================================\n\n  // List pre-aggregations with optional filters\n  listPreaggs: async function (filters = {}) {\n    const params = new URLSearchParams();\n    if (filters.node_name) params.append('node_name', filters.node_name);\n    if (filters.grain) params.append('grain', filters.grain);\n    if (filters.grain_mode) params.append('grain_mode', filters.grain_mode);\n    if (filters.measures) params.append('measures', filters.measures);\n    if (filters.status) params.append('status', filters.status);\n    if (filters.include_stale) params.append('include_stale', 'true');\n\n    return await (\n      await fetch(`${DJ_URL}/preaggs/?${params}`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  // Plan pre-aggregations for given metrics and dimensions\n  planPreaggs: async function (\n    metrics,\n    dimensions,\n    strategy = null,\n    schedule = null,\n    lookbackWindow = null,\n  ) {\n    const body = {\n      metrics,\n      dimensions,\n    };\n    if (strategy) body.strategy = strategy;\n    if (schedule) body.schedule = schedule;\n    if (lookbackWindow) body.lookback_window = lookbackWindow;\n\n    const response = await fetch(`${DJ_URL}/preaggs/plan`, {\n      method: 'POST',\n      credentials: 'include',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(body),\n    });\n    const result = await response.json();\n    // If there's an error, include the status for the caller to check\n    if (!response.ok) {\n      return {\n        ...result,\n        _error: true,\n        _status: response.status,\n        message:\n          result.message || result.detail || 'Failed to plan pre-aggregations',\n      };\n    }\n    return result;\n  },\n\n  // Get a specific pre-aggregation by ID\n  getPreagg: async function (preaggId) {\n    return await (\n      await fetch(`${DJ_URL}/preaggs/${preaggId}`, {\n        credentials: 'include',\n      })\n    ).json();\n  },\n\n  // Trigger materialization for a pre-aggregation\n  materializePreagg: async function (preaggId) {\n    const response = await fetch(`${DJ_URL}/preaggs/${preaggId}/materialize`, {\n      method: 'POST',\n      credentials: 'include',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n    });\n    const result = await response.json();\n    // If there's an error, include the status for the caller to check\n    if (!response.ok) {\n      return {\n        ...result,\n        _error: true,\n        _status: response.status,\n        message: result.message || result.detail || 'Materialization failed',\n      };\n    }\n    return result;\n  },\n\n  // Update a single pre-aggregation's config\n  updatePreaggConfig: async function (\n    preaggId,\n    strategy = null,\n    schedule = null,\n    lookbackWindow = null,\n  ) {\n    const body = {};\n    if (strategy) body.strategy = strategy;\n    if (schedule) body.schedule = schedule;\n    if (lookbackWindow) body.lookback_window = lookbackWindow;\n\n    const response = await fetch(`${DJ_URL}/preaggs/${preaggId}/config`, {\n      method: 'PATCH',\n      credentials: 'include',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(body),\n    });\n    const result = await response.json();\n    if (!response.ok) {\n      return {\n        ...result,\n        _error: true,\n        _status: response.status,\n        message: result.message || result.detail || 'Failed to update config',\n      };\n    }\n    return result;\n  },\n\n  // Deactivate (pause) a pre-aggregation's workflow\n  deactivatePreaggWorkflow: async function (preaggId) {\n    const response = await fetch(`${DJ_URL}/preaggs/${preaggId}/workflow`, {\n      method: 'DELETE',\n      credentials: 'include',\n    });\n    const result = await response.json();\n    if (!response.ok) {\n      return {\n        ...result,\n        _error: true,\n        _status: response.status,\n        message:\n          result.message || result.detail || 'Failed to deactivate workflow',\n      };\n    }\n    return result;\n  },\n\n  // Run a backfill for a pre-aggregation\n  runPreaggBackfill: async function (preaggId, startDate, endDate = null) {\n    const body = {\n      start_date: startDate,\n    };\n    if (endDate) body.end_date = endDate;\n\n    const response = await fetch(`${DJ_URL}/preaggs/${preaggId}/backfill`, {\n      method: 'POST',\n      credentials: 'include',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(body),\n    });\n    const result = await response.json();\n    if (!response.ok) {\n      return {\n        ...result,\n        _error: true,\n        _status: response.status,\n        message: result.message || result.detail || 'Failed to run backfill',\n      };\n    }\n    return result;\n  },\n\n  // Bulk deactivate pre-aggregation workflows for a node\n  bulkDeactivatePreaggWorkflows: async function (nodeName, staleOnly = false) {\n    const params = new URLSearchParams();\n    params.append('node_name', nodeName);\n    if (staleOnly) params.append('stale_only', 'true');\n\n    const response = await fetch(`${DJ_URL}/preaggs/workflows?${params}`, {\n      method: 'DELETE',\n      credentials: 'include',\n    });\n    const result = await response.json();\n    if (!response.ok) {\n      return {\n        ...result,\n        _error: true,\n        _status: response.status,\n        message:\n          result.message ||\n          result.detail ||\n          'Failed to bulk deactivate workflows',\n      };\n    }\n    return result;\n  },\n\n  // Get cube details including materializations\n  getCubeDetails: async function (cubeName) {\n    const response = await fetch(`${DJ_URL}/cubes/${cubeName}`, {\n      credentials: 'include',\n    });\n    if (!response.ok) {\n      return { status: response.status, json: null };\n    }\n    return { status: response.status, json: await response.json() };\n  },\n\n  // Extract Druid cube workflow URLs from cube materializations\n  getCubeWorkflowUrls: async function (cubeName) {\n    console.log('getCubeWorkflowUrls: Fetching for cube', cubeName);\n    const result = await this.getCubeDetails(cubeName);\n    console.log('getCubeWorkflowUrls: Cube details result', result);\n    if (!result.json || !result.json.materializations) {\n      console.log('getCubeWorkflowUrls: No materializations found');\n      return [];\n    }\n    console.log(\n      'getCubeWorkflowUrls: Materializations',\n      result.json.materializations,\n    );\n    const druidMat = result.json.materializations.find(\n      m => m.name === 'druid_cube',\n    );\n    console.log('getCubeWorkflowUrls: druid_cube materialization', druidMat);\n    if (druidMat && druidMat.config && druidMat.config.workflow_urls) {\n      console.log(\n        'getCubeWorkflowUrls: Found URLs',\n        druidMat.config.workflow_urls,\n      );\n      return druidMat.config.workflow_urls;\n    }\n    console.log('getCubeWorkflowUrls: No workflow_urls in config');\n    return [];\n  },\n\n  // Get full cube materialization info (for edit/refresh/backfill)\n  getCubeMaterialization: async function (cubeName) {\n    const result = await this.getCubeDetails(cubeName);\n    if (!result.json || !result.json.materializations) {\n      return null;\n    }\n    const druidMat = result.json.materializations.find(\n      m => m.name === 'druid_cube',\n    );\n    if (!druidMat) {\n      return null;\n    }\n    // Return combined info from materialization record and config\n    return {\n      id: druidMat.id,\n      strategy: druidMat.strategy,\n      schedule: druidMat.schedule,\n      lookbackWindow: druidMat.lookback_window,\n      druidDatasource: druidMat.config?.druid_datasource,\n      preaggTables: druidMat.config?.preagg_tables || [],\n      workflowUrls: druidMat.config?.workflow_urls || [],\n      timestampColumn: druidMat.config?.timestamp_column,\n      timestampFormat: druidMat.config?.timestamp_format,\n    };\n  },\n\n  // Refresh cube workflow (re-push to scheduler without backfill)\n  refreshCubeWorkflow: async function (\n    cubeName,\n    schedule,\n    strategy = 'incremental_time',\n    lookbackWindow = '1 DAY',\n  ) {\n    // Re-call materialize with run_backfill=false\n    return this.materializeCubeV2(\n      cubeName,\n      schedule,\n      strategy,\n      lookbackWindow,\n      false, // run_backfill = false for refresh\n    );\n  },\n\n  // Deactivate (pause) a cube's workflow\n  deactivateCubeWorkflow: async function (cubeName) {\n    const response = await fetch(`${DJ_URL}/cubes/${cubeName}/materialize`, {\n      method: 'DELETE',\n      credentials: 'include',\n    });\n    if (!response.ok) {\n      const result = await response.json().catch(() => ({}));\n      return {\n        status: response.status,\n        json: {\n          ...result,\n          message:\n            result.message ||\n            result.detail ||\n            'Failed to deactivate cube workflow',\n        },\n      };\n    }\n    return { status: response.status, json: await response.json() };\n  },\n\n  // Run cube backfill (trigger ad-hoc backfill with date range)\n  runCubeBackfill: async function (cubeName, startDate, endDate = null) {\n    const body = {\n      start_date: startDate,\n    };\n    if (endDate) body.end_date = endDate;\n\n    const response = await fetch(`${DJ_URL}/cubes/${cubeName}/backfill`, {\n      method: 'POST',\n      credentials: 'include',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(body),\n    });\n    const result = await response.json();\n    if (!response.ok) {\n      return {\n        ...result,\n        _error: true,\n        _status: response.status,\n        message:\n          result.message || result.detail || 'Failed to run cube backfill',\n      };\n    }\n    return result;\n  },\n\n  // ============================================================\n  // Git Branch Management APIs\n  // ============================================================\n\n  // Get all branch namespaces for a parent namespace\n  getNamespaceBranches: async function (namespace) {\n    const response = await fetch(`${DJ_URL}/namespaces/${namespace}/branches`, {\n      credentials: 'include',\n    });\n    if (!response.ok) {\n      if (response.status === 404) return [];\n      const result = await response.json().catch(() => ({}));\n      throw new Error(result.message || 'Failed to get branches');\n    }\n    return response.json();\n  },\n\n  // Get git configuration for a namespace\n  getNamespaceGitConfig: async function (namespace) {\n    const response = await fetch(`${DJ_URL}/namespaces/${namespace}/git`, {\n      method: 'GET',\n      credentials: 'include',\n    });\n    if (!response.ok) {\n      if (response.status === 404) return null;\n      const result = await response.json().catch(() => ({}));\n      throw new Error(result.message || 'Failed to get git config');\n    }\n    return await response.json();\n  },\n\n  // Update git configuration for a namespace\n  updateNamespaceGitConfig: async function (namespace, config) {\n    const response = await fetch(`${DJ_URL}/namespaces/${namespace}/git`, {\n      method: 'PATCH',\n      credentials: 'include',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(config),\n    });\n    const result = await response.json();\n    if (!response.ok) {\n      return {\n        ...result,\n        _error: true,\n        _status: response.status,\n        message: result.message || 'Failed to update git config',\n      };\n    }\n    return result;\n  },\n\n  // Delete git configuration for a namespace\n  deleteNamespaceGitConfig: async function (namespace) {\n    const response = await fetch(`${DJ_URL}/namespaces/${namespace}/git`, {\n      method: 'DELETE',\n      credentials: 'include',\n    });\n    // DELETE returns 204 No Content on success, so no JSON body\n    if (!response.ok) {\n      const result = await response.json().catch(() => ({}));\n      return {\n        ...result,\n        _error: true,\n        _status: response.status,\n        message: result.message || 'Failed to delete git config',\n      };\n    }\n    // Success - return empty object since 204 has no body\n    return {};\n  },\n\n  // List branch namespaces for a parent namespace\n  listBranches: async function (namespace) {\n    const response = await fetch(`${DJ_URL}/namespaces/${namespace}/branches`, {\n      method: 'GET',\n      credentials: 'include',\n    });\n    if (!response.ok) {\n      const result = await response.json().catch(() => ({}));\n      throw new Error(result.message || 'Failed to list branches');\n    }\n    return await response.json();\n  },\n\n  // Create a new branch namespace\n  createBranch: async function (namespace, branchName) {\n    const response = await fetch(`${DJ_URL}/namespaces/${namespace}/branches`, {\n      method: 'POST',\n      credentials: 'include',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({ branch_name: branchName }),\n    });\n    const result = await response.json();\n    if (!response.ok) {\n      return {\n        ...result,\n        _error: true,\n        _status: response.status,\n        message: result.message || 'Failed to create branch',\n      };\n    }\n    return result;\n  },\n\n  // Delete a branch namespace\n  deleteBranch: async function (\n    parentNamespace,\n    branchNamespace,\n    deleteGitBranch = false,\n  ) {\n    const url = `${DJ_URL}/namespaces/${parentNamespace}/branches/${branchNamespace}?delete_git_branch=${deleteGitBranch}`;\n    const response = await fetch(url, {\n      method: 'DELETE',\n      credentials: 'include',\n    });\n    const result = await response.json();\n    if (!response.ok) {\n      return {\n        ...result,\n        _error: true,\n        _status: response.status,\n        message: result.message || 'Failed to delete branch',\n      };\n    }\n    return result;\n  },\n\n  // Sync a single node to git\n  syncNodeToGit: async function (nodeName, commitMessage = null) {\n    const body = {};\n    if (commitMessage) body.commit_message = commitMessage;\n\n    const response = await fetch(`${DJ_URL}/nodes/${nodeName}/sync-to-git`, {\n      method: 'POST',\n      credentials: 'include',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(body),\n    });\n    const result = await response.json();\n    if (!response.ok) {\n      return {\n        ...result,\n        _error: true,\n        _status: response.status,\n        message: result.message || 'Failed to sync node to git',\n      };\n    }\n    return result;\n  },\n\n  // Sync all nodes in a namespace to git\n  syncNamespaceToGit: async function (namespace, commitMessage = null) {\n    const body = {};\n    if (commitMessage) body.commit_message = commitMessage;\n\n    const response = await fetch(\n      `${DJ_URL}/namespaces/${namespace}/sync-to-git`,\n      {\n        method: 'POST',\n        credentials: 'include',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify(body),\n      },\n    );\n    const result = await response.json();\n    if (!response.ok) {\n      return {\n        ...result,\n        _error: true,\n        _status: response.status,\n        message: result.message || 'Failed to sync namespace to git',\n      };\n    }\n    return result;\n  },\n\n  // Get existing pull request for a branch namespace (if any)\n  getPullRequest: async function (namespace) {\n    const response = await fetch(\n      `${DJ_URL}/namespaces/${namespace}/pull-request`,\n      {\n        method: 'GET',\n        credentials: 'include',\n      },\n    );\n    if (!response.ok) {\n      return null;\n    }\n    const result = await response.json();\n    return result; // null if no PR exists\n  },\n\n  // Create a pull request from a branch namespace\n  createPullRequest: async function (namespace, title, body = null) {\n    const payload = { title };\n    if (body) payload.body = body;\n\n    const response = await fetch(\n      `${DJ_URL}/namespaces/${namespace}/pull-request`,\n      {\n        method: 'POST',\n        credentials: 'include',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify(payload),\n      },\n    );\n    const result = await response.json();\n    if (!response.ok) {\n      return {\n        ...result,\n        _error: true,\n        _status: response.status,\n        message: result.message || 'Failed to create pull request',\n      };\n    }\n    return result;\n  },\n};\n","import { DataJunctionAPI } from '../services/DJService';\nimport * as React from 'react';\n\nconst DJClientContext = React.createContext({ DataJunctionAPI });\nexport default DJClientContext;\n","export const secondaryButtonStyle = {\n  height: '28px',\n  padding: '0 10px',\n  fontSize: '12px',\n  fontWeight: '500',\n  borderWidth: '1px',\n  borderStyle: 'solid',\n  borderColor: '#e2e8f0',\n  borderRadius: '4px',\n  backgroundColor: '#ffffff',\n  color: '#475569',\n  cursor: 'pointer',\n  display: 'inline-flex',\n  alignItems: 'center',\n  gap: '6px',\n  whiteSpace: 'nowrap',\n  transition: 'all 0.15s ease',\n};\n\nexport const primaryButtonStyle = {\n  ...secondaryButtonStyle,\n  backgroundColor: '#3b82f6',\n  borderColor: '#3b82f6',\n  color: '#ffffff',\n};\n\nexport const dangerButtonStyle = {\n  ...secondaryButtonStyle,\n  color: '#dc2626',\n  borderColor: '#fecaca',\n};\n\nexport const onSecondaryHover = e => {\n  e.currentTarget.style.color = '#1e293b';\n  e.currentTarget.style.borderColor = '#cbd5e1';\n  e.currentTarget.style.backgroundColor = '#f8fafc';\n};\n\nexport const onSecondaryOut = e => {\n  e.currentTarget.style.color = '#475569';\n  e.currentTarget.style.borderColor = '#e2e8f0';\n  e.currentTarget.style.backgroundColor = '#ffffff';\n};\n\nexport const onDangerHover = e => {\n  e.currentTarget.style.backgroundColor = '#fef2f2';\n  e.currentTarget.style.borderColor = '#fca5a5';\n};\n\nexport const onDangerOut = e => {\n  e.currentTarget.style.backgroundColor = '#ffffff';\n  e.currentTarget.style.borderColor = '#fecaca';\n};\n","// Classify a namespace's git config (from GET /namespaces/{ns}/git) into one of\n// four shapes. Order matters: a branch (has a parent) is checked before repo\n// ownership, since a branch inherits repo fields.\nexport function detectShape(config = {}) {\n  if (config.parent_namespace) return 'branch';\n  if (config.github_repo_path) {\n    return config.git_branch ? 'flat' : 'root';\n  }\n  return 'not-git';\n}\n\n// Build the PATCH /namespaces/{ns}/git body from the modal form. Returns null\n// to signal \"clear git config\" (the caller issues DELETE instead of PATCH).\nexport function buildGitConfigPayload({\n  source,\n  model,\n  repository,\n  branch,\n  defaultBranch,\n}) {\n  if (source !== 'git') return null;\n  if (model === 'flat') {\n    return {\n      github_repo_path: repository?.trim() || null,\n      git_branch: branch?.trim() || null,\n    };\n  }\n  return {\n    github_repo_path: repository?.trim() || null,\n    default_branch: defaultBranch?.trim() || null,\n  };\n}\n","import React from 'react';\n\n/**\n * A compact pill segmented control: a rounded pill split into option halves with\n * a hairline divider and a light-blue active tint. Shared so the same styling is\n * used by the namespace filters and the Git Configuration modal.\n *\n * Clicking the active option calls `onChange('')` (deselect). Callers that must\n * always keep a selection should ignore the empty value, e.g.\n * `onChange={v => v && setValue(v)}`.\n */\nexport default function SplitFilter({ label, options, value, onChange }) {\n  return (\n    <div\n      style={{\n        display: 'flex',\n        flexDirection: 'column',\n        gap: '2px',\n        flex: '0 0 auto',\n      }}\n    >\n      <label\n        style={{\n          fontSize: '10px',\n          fontWeight: '600',\n          color: '#666',\n          textTransform: 'uppercase',\n          letterSpacing: '0.5px',\n        }}\n      >\n        {label}\n      </label>\n      <div\n        style={{\n          display: 'inline-flex',\n          alignItems: 'center',\n          height: '32px',\n          border: '1px solid #cbd5e1',\n          borderRadius: '999px',\n          backgroundColor: '#ffffff',\n          overflow: 'hidden',\n          whiteSpace: 'nowrap',\n        }}\n      >\n        {options.map((option, index) => {\n          const active = value === option.value;\n          return (\n            <button\n              key={option.value}\n              type=\"button\"\n              onClick={() => onChange(active ? '' : option.value)}\n              style={{\n                height: '30px',\n                margin: 0,\n                padding: '0 13px',\n                border: 'none',\n                borderLeft: index === 0 ? 'none' : '1px solid #e2e8f0',\n                borderRadius: 0,\n                backgroundColor: active ? '#e3f2fd' : 'transparent',\n                color: active ? '#1976d2' : '#475569',\n                fontFamily: 'inherit',\n                fontSize: '12px',\n                fontWeight: active ? '600' : '500',\n                textTransform: 'none',\n                cursor: 'pointer',\n                whiteSpace: 'nowrap',\n              }}\n            >\n              {option.label}\n            </button>\n          );\n        })}\n      </div>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from 'react';\nimport { detectShape, buildGitConfigPayload } from './gitShape';\nimport SplitFilter from '../SplitFilter';\n\n/**\n * Modal for configuring git settings for a namespace.\n * Intent-based: user picks \"Edited in DataJunction\" or \"Git repo\",\n * then (if git) picks \"Tracks a branch\" (flat) or \"Feature branches + PRs\" (root).\n * No git_only checkbox — git-backed namespaces are always read-only here.\n */\nexport function GitSettingsModal({\n  isOpen,\n  onClose,\n  onSave,\n  onRemove,\n  currentConfig,\n  namespace,\n  nodeCount = 0,\n}) {\n  const [source, setSource] = useState('dj'); // 'dj' | 'git'\n  const [model, setModel] = useState('flat'); // 'flat' | 'root'\n  const [repository, setRepository] = useState('');\n  const [branch, setBranch] = useState('main');\n  const [defaultBranch, setDefaultBranch] = useState('main');\n  const [saving, setSaving] = useState(false);\n  const [error, setError] = useState(null);\n  const [success, setSuccess] = useState(false);\n\n  useEffect(() => {\n    if (!isOpen) return;\n    const shape = detectShape(currentConfig || {});\n    setSource(shape === 'not-git' ? 'dj' : 'git');\n    setModel(shape === 'root' ? 'root' : 'flat');\n    setRepository(currentConfig?.github_repo_path || '');\n    setBranch(currentConfig?.git_branch || 'main');\n    setDefaultBranch(currentConfig?.default_branch || 'main');\n    setError(null);\n  }, [currentConfig, isOpen]);\n\n  const handleSubmit = async e => {\n    e.preventDefault();\n    setError(null);\n    setSuccess(false);\n    if (source === 'git' && !repository.trim()) {\n      setError('Repository is required');\n      return;\n    }\n    setSaving(true);\n    try {\n      const payload = buildGitConfigPayload({\n        source,\n        model,\n        repository,\n        branch,\n        defaultBranch,\n      });\n      const result =\n        payload === null ? await onRemove() : await onSave(payload);\n      if (result?._error) setError(result.message);\n      else setSuccess(true);\n    } catch (err) {\n      setError(err.message || 'Failed to save git settings');\n    } finally {\n      setSaving(false);\n    }\n  };\n\n  const handleClose = () => {\n    setError(null);\n    setSuccess(false);\n    onClose();\n  };\n\n  if (!isOpen) return null;\n\n  return (\n    <div className=\"modal-overlay\" onClick={handleClose}>\n      <div className=\"modal-content\" onClick={e => e.stopPropagation()}>\n        <div className=\"modal-header\">\n          <h3>Git Configuration</h3>\n          <button\n            className=\"btn-close-modal\"\n            onClick={handleClose}\n            title=\"Close\"\n          >\n            ×\n          </button>\n        </div>\n\n        <form onSubmit={handleSubmit}>\n          <div\n            className=\"modal-body\"\n            style={{\n              fontFamily:\n                'system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif',\n              textTransform: 'none',\n            }}\n          >\n            <p\n              style={{\n                color: '#64748b',\n                fontSize: '13px',\n                marginBottom: '16px',\n              }}\n            >\n              Configure git integration for <strong>{namespace}</strong>.\n            </p>\n\n            {error && (\n              <div\n                style={{\n                  padding: '12px',\n                  backgroundColor: '#fef2f2',\n                  border: '1px solid #fecaca',\n                  borderRadius: '6px',\n                  color: '#dc2626',\n                  fontSize: '13px',\n                  marginBottom: '16px',\n                }}\n              >\n                {error}\n              </div>\n            )}\n\n            {/* Q1: Source of definitions */}\n            <div\n              style={{\n                display: 'flex',\n                textTransform: 'none',\n                marginBottom: '16px',\n              }}\n            >\n              <SplitFilter\n                label=\"Source of definitions\"\n                value={source}\n                onChange={v => v && setSource(v)}\n                options={[\n                  { value: 'dj', label: 'Edited in DataJunction' },\n                  { value: 'git', label: 'Git repo' },\n                ]}\n              />\n            </div>\n\n            {source === 'git' && (\n              <>\n                {detectShape(currentConfig || {}) === 'not-git' &&\n                  nodeCount > 0 && (\n                    <div className=\"git-repo-wins-warning\" role=\"alert\">\n                      ⚠️ {nodeCount} nodes here aren't in the repo and will be\n                      replaced by the repo's contents on the next deploy. Git\n                      becomes the source of truth for this namespace.\n                    </div>\n                  )}\n\n                {/* Q2: Git model */}\n                <div\n                  style={{\n                    display: 'flex',\n                    textTransform: 'none',\n                    marginBottom: '16px',\n                  }}\n                >\n                  <SplitFilter\n                    label=\"Git model\"\n                    value={model}\n                    onChange={v => v && setModel(v)}\n                    options={[\n                      { value: 'flat', label: 'Tracks a branch' },\n                      { value: 'root', label: 'Feature branches + PRs' },\n                    ]}\n                  />\n                </div>\n\n                <div className=\"form-group\">\n                  <label htmlFor=\"git-repo-path\">Repository</label>\n                  <input\n                    id=\"git-repo-path\"\n                    type=\"text\"\n                    placeholder=\"owner/repo\"\n                    value={repository}\n                    onChange={e => setRepository(e.target.value)}\n                    disabled={saving}\n                  />\n                </div>\n\n                {model === 'flat' ? (\n                  <div className=\"form-group\">\n                    <label htmlFor=\"git-branch\">Branch</label>\n                    <input\n                      id=\"git-branch\"\n                      type=\"text\"\n                      placeholder=\"main\"\n                      value={branch}\n                      onChange={e => setBranch(e.target.value)}\n                      disabled={saving}\n                    />\n                  </div>\n                ) : (\n                  <div className=\"form-group\">\n                    <label htmlFor=\"git-default-branch\">Default branch</label>\n                    <input\n                      id=\"git-default-branch\"\n                      type=\"text\"\n                      placeholder=\"main\"\n                      value={defaultBranch}\n                      onChange={e => setDefaultBranch(e.target.value)}\n                      disabled={saving}\n                    />\n                  </div>\n                )}\n\n                <p className=\"git-readonly-note\">\n                  🔒 Git-backed namespaces are read-only here; edit via git +\n                  CI.\n                </p>\n              </>\n            )}\n\n            {success && (\n              <div\n                style={{\n                  marginTop: '16px',\n                  padding: '12px',\n                  backgroundColor: '#f0fdf4',\n                  border: '1px solid #86efac',\n                  borderRadius: '6px',\n                  color: '#166534',\n                  fontSize: '13px',\n                  display: 'flex',\n                  alignItems: 'center',\n                  gap: '8px',\n                }}\n              >\n                <svg\n                  xmlns=\"http://www.w3.org/2000/svg\"\n                  width=\"16\"\n                  height=\"16\"\n                  viewBox=\"0 0 24 24\"\n                  fill=\"none\"\n                  stroke=\"currentColor\"\n                  strokeWidth=\"2\"\n                  strokeLinecap=\"round\"\n                  strokeLinejoin=\"round\"\n                >\n                  <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n                  <polyline points=\"22 4 12 14.01 9 11.01\" />\n                </svg>\n                Git configuration saved successfully!\n              </div>\n            )}\n          </div>\n\n          <div\n            className=\"modal-actions\"\n            style={{ display: 'flex', justifyContent: 'flex-end', gap: '8px' }}\n          >\n            <button\n              type=\"button\"\n              className=\"btn-secondary\"\n              onClick={handleClose}\n              disabled={saving}\n            >\n              {success ? 'Close' : 'Cancel'}\n            </button>\n            {!success && (\n              <button\n                type=\"submit\"\n                className=\"btn-primary\"\n                disabled={saving}\n                style={\n                  saving\n                    ? {\n                        opacity: 0.7,\n                        cursor: 'wait',\n                        backgroundColor: '#9ca3af',\n                      }\n                    : {}\n                }\n              >\n                {saving ? 'Saving...' : 'Save'}\n              </button>\n            )}\n          </div>\n        </form>\n      </div>\n    </div>\n  );\n}\n\nexport default GitSettingsModal;\n","import React, { useState } from 'react';\n\n/**\n * Modal for creating a new branch namespace.\n */\nexport function CreateBranchModal({\n  isOpen,\n  onClose,\n  onCreate,\n  namespace,\n  gitBranch,\n  isGitRoot,\n}) {\n  const [branchName, setBranchName] = useState('');\n  const [creating, setCreating] = useState(false);\n  const [error, setError] = useState(null);\n  const [result, setResult] = useState(null);\n\n  // Convert branch name to expected namespace suffix for preview\n  // If creating from git root (e.g., \"demo.metrics\"), use full namespace as prefix: \"demo.metrics.rr\"\n  // If creating from branch namespace (e.g., \"demo.main\"), use parent prefix: \"demo.rr\"\n  const previewNamespace = branchName\n    ? (() => {\n        const branchSuffix = branchName.replace(/-/g, '_').replace(/\\//g, '_');\n        if (isGitRoot) {\n          // Git root: use full namespace as prefix\n          return `${namespace}.${branchSuffix}`;\n        } else {\n          // Branch namespace: remove last segment to get parent prefix\n          const parts = namespace.split('.');\n          const prefix =\n            parts.length > 1 ? parts.slice(0, -1).join('.') : namespace;\n          return `${prefix}.${branchSuffix}`;\n        }\n      })()\n    : '';\n\n  const handleSubmit = async e => {\n    e.preventDefault();\n    if (!branchName.trim()) return;\n\n    setError(null);\n    setCreating(true);\n\n    try {\n      const res = await onCreate(branchName.trim());\n      if (res?._error) {\n        setError(res.message);\n      } else {\n        setResult(res);\n      }\n    } catch (err) {\n      setError(err.message || 'Failed to create branch');\n    } finally {\n      setCreating(false);\n    }\n  };\n\n  const handleClose = () => {\n    setBranchName('');\n    setError(null);\n    setResult(null);\n    onClose();\n  };\n\n  if (!isOpen) return null;\n\n  return (\n    <div className=\"modal-overlay\" onClick={handleClose}>\n      <div className=\"modal-content\" onClick={e => e.stopPropagation()}>\n        <div className=\"modal-header\">\n          <h3>Create Branch</h3>\n          <button\n            className=\"btn-close-modal\"\n            onClick={handleClose}\n            title=\"Close\"\n          >\n            ×\n          </button>\n        </div>\n\n        {result ? (\n          <div className=\"modal-body\">\n            <div\n              style={{\n                textAlign: 'center',\n                padding: '16px 0',\n              }}\n            >\n              <span\n                style={{\n                  display: 'inline-flex',\n                  alignItems: 'center',\n                  justifyContent: 'center',\n                  width: '48px',\n                  height: '48px',\n                  borderRadius: '50%',\n                  backgroundColor: '#dcfce7',\n                  color: '#16a34a',\n                  fontSize: '24px',\n                  marginBottom: '12px',\n                }}\n              >\n                ✓\n              </span>\n              <h4 style={{ margin: '0 0 8px 0' }}>Branch Created!</h4>\n            </div>\n\n            <div\n              style={{\n                backgroundColor: '#f8fafc',\n                borderRadius: '6px',\n                padding: '12px',\n                fontSize: '13px',\n              }}\n            >\n              <div style={{ marginBottom: '8px' }}>\n                <strong>Namespace:</strong>{' '}\n                <a\n                  href={`/namespaces/${result.branch.namespace}`}\n                  style={{ color: '#3b82f6' }}\n                >\n                  {result.branch.namespace}\n                </a>\n              </div>\n              <div style={{ marginBottom: '8px' }}>\n                <strong>Git Branch:</strong> {result.branch.git_branch}\n              </div>\n              <div>\n                <strong>Parent:</strong> {result.branch.parent_namespace}\n              </div>\n              {result.deployment_results?.length > 0 && (\n                <div style={{ marginTop: '12px' }}>\n                  <strong>Nodes copied:</strong>{' '}\n                  {result.deployment_results.length}\n                </div>\n              )}\n            </div>\n\n            <div className=\"modal-actions\">\n              <button className=\"btn-secondary\" onClick={handleClose}>\n                Close\n              </button>\n              <a\n                href={`/namespaces/${result.branch.namespace}`}\n                className=\"btn-primary\"\n                style={{ textDecoration: 'none' }}\n              >\n                Go to Branch\n              </a>\n            </div>\n          </div>\n        ) : (\n          <form onSubmit={handleSubmit}>\n            <div className=\"modal-body\">\n              {error && (\n                <div\n                  style={{\n                    padding: '12px',\n                    backgroundColor: '#fef2f2',\n                    border: '1px solid #fecaca',\n                    borderRadius: '6px',\n                    color: '#dc2626',\n                    fontSize: '13px',\n                    marginBottom: '16px',\n                  }}\n                >\n                  {error}\n                </div>\n              )}\n\n              <div className=\"form-group\">\n                <label htmlFor=\"branch-name\">Branch Name</label>\n                <input\n                  id=\"branch-name\"\n                  type=\"text\"\n                  placeholder=\"feature-xyz\"\n                  value={branchName}\n                  onChange={e => setBranchName(e.target.value)}\n                  disabled={creating}\n                  autoFocus\n                />\n                <span className=\"form-hint\">\n                  Name for the new git branch (e.g., \"feature-xyz\", \"fix-bug\")\n                </span>\n              </div>\n\n              {branchName && (\n                <div\n                  style={{\n                    backgroundColor: '#f0f9ff',\n                    border: '1px solid #bae6fd',\n                    borderRadius: '6px',\n                    padding: '12px',\n                    fontSize: '13px',\n                    marginTop: '16px',\n                  }}\n                >\n                  <div style={{ fontWeight: 500, marginBottom: '8px' }}>\n                    This will:\n                  </div>\n                  <ul\n                    style={{\n                      margin: 0,\n                      paddingLeft: '20px',\n                      color: '#475569',\n                    }}\n                  >\n                    <li>\n                      Create git branch \"{branchName}\" from \"{gitBranch}\"\n                    </li>\n                    <li>Create namespace \"{previewNamespace}\"</li>\n                  </ul>\n                </div>\n              )}\n            </div>\n\n            <div className=\"modal-actions\">\n              <button\n                type=\"button\"\n                className=\"btn-secondary\"\n                onClick={handleClose}\n                disabled={creating}\n              >\n                Cancel\n              </button>\n              <button\n                type=\"submit\"\n                className=\"btn-primary\"\n                disabled={creating || !branchName.trim()}\n              >\n                {creating ? 'Creating...' : 'Create Branch'}\n              </button>\n            </div>\n          </form>\n        )}\n      </div>\n    </div>\n  );\n}\n\nexport default CreateBranchModal;\n","import React, { useState } from 'react';\n\n/**\n * Modal for syncing namespace to git.\n */\nexport function SyncToGitModal({\n  isOpen,\n  onClose,\n  onSync,\n  namespace,\n  gitBranch,\n  repoPath,\n}) {\n  const [commitMessage, setCommitMessage] = useState('');\n  const [syncing, setSyncing] = useState(false);\n  const [error, setError] = useState(null);\n  const [result, setResult] = useState(null);\n\n  const handleSubmit = async e => {\n    e.preventDefault();\n    setError(null);\n    setSyncing(true);\n\n    try {\n      const res = await onSync(commitMessage.trim() || null);\n      if (res?._error) {\n        setError(res.message);\n      } else {\n        setResult(res);\n      }\n    } catch (err) {\n      setError(err.message || 'Failed to sync to git');\n    } finally {\n      setSyncing(false);\n    }\n  };\n\n  const handleClose = () => {\n    setCommitMessage('');\n    setError(null);\n    setResult(null);\n    onClose();\n  };\n\n  if (!isOpen) return null;\n\n  return (\n    <div className=\"modal-overlay\" onClick={handleClose}>\n      <div className=\"modal-content\" onClick={e => e.stopPropagation()}>\n        <div className=\"modal-header\">\n          <h3>Sync to Git</h3>\n          <button\n            className=\"btn-close-modal\"\n            onClick={handleClose}\n            title=\"Close\"\n          >\n            ×\n          </button>\n        </div>\n\n        {result ? (\n          <div className=\"modal-body\">\n            <div\n              style={{\n                textAlign: 'center',\n                padding: '16px 0',\n              }}\n            >\n              <span\n                style={{\n                  display: 'inline-flex',\n                  alignItems: 'center',\n                  justifyContent: 'center',\n                  width: '48px',\n                  height: '48px',\n                  borderRadius: '50%',\n                  backgroundColor: '#dcfce7',\n                  color: '#16a34a',\n                  fontSize: '24px',\n                  marginBottom: '12px',\n                }}\n              >\n                ✓\n              </span>\n              <h4 style={{ margin: '0 0 8px 0' }}>\n                Synced {result.files_synced} file\n                {result.files_synced !== 1 ? 's' : ''}\n                {result.files_deleted > 0\n                  ? `, deleted ${result.files_deleted} file${\n                      result.files_deleted !== 1 ? 's' : ''\n                    }`\n                  : ''}\n                !\n              </h4>\n            </div>\n\n            <div\n              style={{\n                backgroundColor: '#f8fafc',\n                borderRadius: '6px',\n                padding: '12px',\n                fontSize: '13px',\n              }}\n            >\n              <div style={{ marginBottom: '8px' }}>\n                <strong>Commit:</strong>{' '}\n                <a\n                  href={result.commit_url}\n                  target=\"_blank\"\n                  rel=\"noopener noreferrer\"\n                  style={{\n                    fontFamily: 'monospace',\n                    fontSize: '12px',\n                    color: '#3b82f6',\n                  }}\n                >\n                  {result.commit_sha?.slice(0, 7)}\n                </a>\n              </div>\n              <div>\n                <strong>Branch:</strong> {gitBranch}\n              </div>\n            </div>\n\n            <div className=\"modal-actions\">\n              <button className=\"btn-secondary\" onClick={handleClose}>\n                Close\n              </button>\n              <a\n                href={result.commit_url}\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                className=\"btn-primary\"\n                style={{ textDecoration: 'none' }}\n              >\n                View Commit\n              </a>\n            </div>\n          </div>\n        ) : (\n          <form onSubmit={handleSubmit}>\n            <div className=\"modal-body\">\n              <p\n                style={{\n                  color: '#64748b',\n                  fontSize: '13px',\n                  marginBottom: '16px',\n                }}\n              >\n                Sync all nodes in <strong>{namespace}</strong> to git as YAML\n                files.\n              </p>\n\n              {error && (\n                <div\n                  style={{\n                    padding: '12px',\n                    backgroundColor: '#fef2f2',\n                    border: '1px solid #fecaca',\n                    borderRadius: '6px',\n                    color: '#dc2626',\n                    fontSize: '13px',\n                    marginBottom: '16px',\n                  }}\n                >\n                  {error}\n                </div>\n              )}\n\n              <div\n                style={{\n                  backgroundColor: '#f8fafc',\n                  borderRadius: '6px',\n                  padding: '12px',\n                  fontSize: '13px',\n                  marginBottom: '16px',\n                }}\n              >\n                <div style={{ marginBottom: '4px' }}>\n                  <strong>Repository:</strong> {repoPath}\n                </div>\n                <div>\n                  <strong>Branch:</strong> {gitBranch}\n                </div>\n              </div>\n\n              <div className=\"form-group\">\n                <label htmlFor=\"commit-message\">\n                  Commit Message (optional)\n                </label>\n                <input\n                  id=\"commit-message\"\n                  type=\"text\"\n                  placeholder={`Sync ${namespace}`}\n                  value={commitMessage}\n                  onChange={e => setCommitMessage(e.target.value)}\n                  disabled={syncing}\n                />\n                <span className=\"form-hint\">\n                  Leave blank to use default message\n                </span>\n              </div>\n            </div>\n\n            <div className=\"modal-actions\">\n              <button\n                type=\"button\"\n                className=\"btn-secondary\"\n                onClick={handleClose}\n                disabled={syncing}\n              >\n                Cancel\n              </button>\n              <button type=\"submit\" className=\"btn-primary\" disabled={syncing}>\n                {syncing ? 'Syncing...' : 'Sync Now'}\n              </button>\n            </div>\n          </form>\n        )}\n      </div>\n    </div>\n  );\n}\n\nexport default SyncToGitModal;\n","import React, { useState } from 'react';\n\n/**\n * Modal for creating a pull request from a branch namespace.\n */\nexport function CreatePRModal({\n  isOpen,\n  onClose,\n  onCreate,\n  namespace,\n  gitBranch,\n  parentBranch,\n  repoPath,\n}) {\n  const [title, setTitle] = useState('');\n  const [body, setBody] = useState('');\n  const [progress, setProgress] = useState(null); // null | 'syncing' | 'creating'\n  const [error, setError] = useState(null);\n  const [result, setResult] = useState(null);\n\n  const handleSubmit = async e => {\n    e.preventDefault();\n    if (!title.trim()) return;\n\n    setError(null);\n    setProgress('syncing');\n\n    try {\n      const res = await onCreate(\n        title.trim(),\n        body.trim() || null,\n        setProgress,\n      );\n      if (res?._error) {\n        setError(res.message);\n      } else {\n        setResult(res);\n      }\n    } catch (err) {\n      setError(err.message || 'Failed to create pull request');\n    } finally {\n      setProgress(null);\n    }\n  };\n\n  const getProgressText = () => {\n    if (progress === 'syncing') return 'Syncing to git...';\n    if (progress === 'creating') return 'Creating PR...';\n    return 'Create PR';\n  };\n\n  const handleClose = () => {\n    setTitle('');\n    setBody('');\n    setError(null);\n    setResult(null);\n    setProgress(null);\n    onClose();\n  };\n\n  const isWorking = progress !== null;\n\n  if (!isOpen) return null;\n\n  return (\n    <div className=\"modal-overlay\" onClick={handleClose}>\n      <div\n        className=\"modal-content\"\n        onClick={e => e.stopPropagation()}\n        style={{ maxWidth: '560px' }}\n      >\n        <div className=\"modal-header\">\n          <h3>Create Pull Request</h3>\n          <button\n            className=\"btn-close-modal\"\n            onClick={handleClose}\n            title=\"Close\"\n          >\n            ×\n          </button>\n        </div>\n\n        {result ? (\n          <div className=\"modal-body\">\n            <div\n              style={{\n                textAlign: 'center',\n                padding: '16px 0',\n              }}\n            >\n              <span\n                style={{\n                  display: 'inline-flex',\n                  alignItems: 'center',\n                  justifyContent: 'center',\n                  width: '48px',\n                  height: '48px',\n                  borderRadius: '50%',\n                  backgroundColor: '#dcfce7',\n                  color: '#16a34a',\n                  fontSize: '24px',\n                  marginBottom: '12px',\n                }}\n              >\n                ✓\n              </span>\n              <h4 style={{ margin: '0 0 8px 0' }}>\n                Pull Request #{result.pr_number} Created!\n              </h4>\n            </div>\n\n            <div\n              style={{\n                backgroundColor: '#f8fafc',\n                borderRadius: '6px',\n                padding: '12px',\n                fontSize: '13px',\n              }}\n            >\n              <div style={{ marginBottom: '8px' }}>\n                <strong>Title:</strong> {title}\n              </div>\n              <div style={{ marginBottom: '8px' }}>\n                <strong>Branch:</strong> {result.head_branch} →{' '}\n                {result.base_branch}\n              </div>\n              <div>\n                <strong>URL:</strong>{' '}\n                <a\n                  href={result.pr_url}\n                  target=\"_blank\"\n                  rel=\"noopener noreferrer\"\n                  style={{ color: '#3b82f6' }}\n                >\n                  {result.pr_url}\n                </a>\n              </div>\n            </div>\n\n            <div className=\"modal-actions\">\n              <button className=\"btn-secondary\" onClick={handleClose}>\n                Close\n              </button>\n              <a\n                href={result.pr_url}\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                className=\"btn-primary\"\n                style={{ textDecoration: 'none' }}\n              >\n                View on GitHub\n              </a>\n            </div>\n          </div>\n        ) : (\n          <form onSubmit={handleSubmit}>\n            <div className=\"modal-body\">\n              {/* Branch flow indicator */}\n              <div\n                style={{\n                  display: 'flex',\n                  alignItems: 'center',\n                  justifyContent: 'center',\n                  gap: '12px',\n                  padding: '12px',\n                  backgroundColor: '#f8fafc',\n                  borderRadius: '6px',\n                  marginBottom: '16px',\n                  fontSize: '13px',\n                }}\n              >\n                <span\n                  style={{\n                    padding: '4px 8px',\n                    backgroundColor: '#dbeafe',\n                    borderRadius: '4px',\n                    fontFamily: 'monospace',\n                  }}\n                >\n                  {gitBranch}\n                </span>\n                <span style={{ color: '#64748b' }}>→</span>\n                <span\n                  style={{\n                    padding: '4px 8px',\n                    backgroundColor: '#dcfce7',\n                    borderRadius: '4px',\n                    fontFamily: 'monospace',\n                  }}\n                >\n                  {parentBranch}\n                </span>\n              </div>\n\n              {error && (\n                <div\n                  style={{\n                    padding: '12px',\n                    backgroundColor: '#fef2f2',\n                    border: '1px solid #fecaca',\n                    borderRadius: '6px',\n                    color: '#dc2626',\n                    fontSize: '13px',\n                    marginBottom: '16px',\n                  }}\n                >\n                  {error}\n                </div>\n              )}\n\n              <div className=\"form-group\">\n                <label htmlFor=\"pr-title\">Title *</label>\n                <input\n                  id=\"pr-title\"\n                  type=\"text\"\n                  placeholder=\"Add new metrics for revenue tracking\"\n                  value={title}\n                  onChange={e => setTitle(e.target.value)}\n                  disabled={isWorking}\n                  autoFocus\n                />\n              </div>\n\n              <div className=\"form-group\">\n                <label htmlFor=\"pr-body\">Description</label>\n                <textarea\n                  id=\"pr-body\"\n                  placeholder=\"Describe the changes in this pull request...\"\n                  value={body}\n                  onChange={e => setBody(e.target.value)}\n                  disabled={isWorking}\n                  rows={4}\n                  style={{\n                    width: '100%',\n                    padding: '8px 12px',\n                    border: '1px solid #e2e8f0',\n                    borderRadius: '6px',\n                    fontSize: '14px',\n                    fontFamily: 'inherit',\n                    resize: 'vertical',\n                  }}\n                />\n              </div>\n            </div>\n\n            <div className=\"modal-actions\">\n              <button\n                type=\"button\"\n                className=\"btn-secondary\"\n                onClick={handleClose}\n                disabled={isWorking}\n              >\n                Cancel\n              </button>\n              <button\n                type=\"submit\"\n                className=\"btn-primary\"\n                disabled={isWorking || !title.trim()}\n              >\n                {getProgressText()}\n              </button>\n            </div>\n          </form>\n        )}\n      </div>\n    </div>\n  );\n}\n\nexport default CreatePRModal;\n","import React, { useState } from 'react';\n\n/**\n * Modal for confirming branch deletion.\n */\nexport function DeleteBranchModal({\n  isOpen,\n  onClose,\n  onDelete,\n  namespace,\n  gitBranch,\n  parentNamespace,\n}) {\n  const [deleteGitBranch, setDeleteGitBranch] = useState(true);\n  const [deleting, setDeleting] = useState(false);\n  const [error, setError] = useState(null);\n\n  const handleSubmit = async e => {\n    e.preventDefault();\n    setError(null);\n    setDeleting(true);\n\n    try {\n      const result = await onDelete(deleteGitBranch);\n      if (result?._error) {\n        setError(result.message);\n      } else {\n        onClose();\n        // Redirect to parent namespace\n        window.location.href = `/namespaces/${parentNamespace}`;\n      }\n    } catch (err) {\n      setError(err.message || 'Failed to delete branch');\n    } finally {\n      setDeleting(false);\n    }\n  };\n\n  const handleClose = () => {\n    setDeleteGitBranch(false);\n    setError(null);\n    onClose();\n  };\n\n  if (!isOpen) return null;\n\n  return (\n    <div className=\"modal-overlay\" onClick={handleClose}>\n      <div className=\"modal-content\" onClick={e => e.stopPropagation()}>\n        <div className=\"modal-header\">\n          <h3>Delete Branch</h3>\n          <button\n            className=\"btn-close-modal\"\n            onClick={handleClose}\n            title=\"Close\"\n          >\n            ×\n          </button>\n        </div>\n\n        <form onSubmit={handleSubmit}>\n          <div className=\"modal-body\">\n            <div\n              style={{\n                display: 'flex',\n                alignItems: 'flex-start',\n                gap: '12px',\n                padding: '12px 12px 0 12px',\n                backgroundColor: '#fef3c7',\n                border: '1px solid #fcd34d',\n                borderRadius: '6px',\n                marginBottom: '16px',\n              }}\n            >\n              <span\n                style={{\n                  fontSize: '20px',\n                  paddingBottom: '12px',\n                  margin: '-5px -1px 0 0',\n                }}\n              >\n                ⚠️\n              </span>\n              <div style={{ fontSize: '13px' }}>\n                Are you sure you want to delete this branch namespace?\n              </div>\n            </div>\n\n            {error && (\n              <div\n                style={{\n                  padding: '12px',\n                  backgroundColor: '#fef2f2',\n                  border: '1px solid #fecaca',\n                  borderRadius: '6px',\n                  color: '#dc2626',\n                  fontSize: '13px',\n                  marginBottom: '16px',\n                }}\n              >\n                {error}\n              </div>\n            )}\n\n            <div\n              style={{\n                backgroundColor: '#f8fafc',\n                borderRadius: '6px',\n                padding: '12px',\n                fontSize: '13px',\n                marginBottom: '16px',\n              }}\n            >\n              <div style={{ marginBottom: '8px' }}>\n                <strong>Namespace:</strong> {namespace}\n              </div>\n              <div style={{ marginBottom: '8px' }}>\n                <strong>Git Branch:</strong> {gitBranch}\n              </div>\n              <div>\n                <strong>Parent:</strong> {parentNamespace}\n              </div>\n            </div>\n\n            <label\n              style={{\n                display: 'flex',\n                alignItems: 'center',\n                gap: '8px',\n                fontSize: '13px',\n                cursor: 'pointer',\n                fontWeight: 'none',\n                textTransform: 'none',\n              }}\n            >\n              <input\n                type=\"checkbox\"\n                checked={deleteGitBranch}\n                onChange={e => setDeleteGitBranch(e.target.checked)}\n                disabled={deleting}\n              />\n              Also delete git branch on GitHub\n            </label>\n          </div>\n\n          <div className=\"modal-actions\">\n            <button\n              type=\"button\"\n              className=\"btn-secondary\"\n              onClick={handleClose}\n              disabled={deleting}\n            >\n              Cancel\n            </button>\n            <button\n              type=\"submit\"\n              className=\"btn-primary\"\n              disabled={deleting}\n              style={{\n                backgroundColor: '#dc2626',\n                borderColor: '#dc2626',\n              }}\n            >\n              {deleting ? 'Deleting...' : 'Delete Branch'}\n            </button>\n          </div>\n        </form>\n      </div>\n    </div>\n  );\n}\n\nexport default DeleteBranchModal;\n","import React from 'react';\nimport { secondaryButtonStyle } from './buttonStyles';\n\nconst itemStyle = {\n  display: 'block',\n  width: '100%',\n  textAlign: 'left',\n  padding: '10px 16px',\n  border: 'none',\n  background: '#ffffff',\n  color: '#1e293b',\n  fontSize: '13px',\n  fontFamily: 'inherit',\n  textTransform: 'none',\n  cursor: 'pointer',\n  textDecoration: 'none',\n  boxSizing: 'border-box',\n};\n\nconst onItemOver = e => {\n  e.currentTarget.style.background = '#f3eeff';\n};\nconst onItemOut = e => {\n  e.currentTarget.style.background = '#ffffff';\n};\n\n/**\n * Low-frequency git actions for a namespace, in a hover dropdown. Renders only\n * the items whose handlers/urls are provided, so read-only and editable callers\n * pass exactly the valid set. Reuses the shared `.dropdown` hover CSS.\n */\nexport default function GitMenu({\n  repoPath,\n  branch,\n  viewInGitUrl,\n  onOpenSettings,\n  onNewBranch,\n  onDelete,\n}) {\n  return (\n    <div className=\"dropdown\" data-testid=\"git-menu\">\n      <button type=\"button\" style={secondaryButtonStyle} aria-label=\"Git menu\">\n        <svg\n          xmlns=\"http://www.w3.org/2000/svg\"\n          width=\"14\"\n          height=\"14\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        >\n          <line x1=\"6\" y1=\"3\" x2=\"6\" y2=\"15\" />\n          <circle cx=\"18\" cy=\"6\" r=\"3\" />\n          <circle cx=\"6\" cy=\"18\" r=\"3\" />\n          <path d=\"M18 9a9 9 0 0 1-9 9\" />\n        </svg>\n        Git ▾\n      </button>\n      <div\n        className=\"dropdown-content add-node-dropdown-content\"\n        role=\"menu\"\n        // marginTop:0 removes the shared 6px gap between trigger and menu; the\n        // gap is a hover dead zone that closes the menu before the cursor\n        // reaches it. Flush menu keeps the :hover area continuous.\n        style={{ textTransform: 'none', marginTop: 0 }}\n      >\n        {repoPath && (\n          <div\n            style={{\n              padding: '10px 16px',\n              fontSize: '12px',\n              color: '#64748b',\n              borderBottom: '1px solid #e2e8f0',\n              background: '#ffffff',\n            }}\n          >\n            <code style={{ fontSize: '11px' }}>{repoPath}</code>\n            {branch && (\n              <>\n                {' '}\n                @ <code style={{ fontSize: '11px' }}>{branch}</code>\n              </>\n            )}\n          </div>\n        )}\n        {onNewBranch && (\n          <button\n            type=\"button\"\n            style={itemStyle}\n            onClick={onNewBranch}\n            onMouseOver={onItemOver}\n            onMouseOut={onItemOut}\n          >\n            + New Branch\n          </button>\n        )}\n        {viewInGitUrl && (\n          <a\n            style={itemStyle}\n            href={viewInGitUrl}\n            target=\"_blank\"\n            rel=\"noreferrer\"\n            onMouseOver={onItemOver}\n            onMouseOut={onItemOut}\n          >\n            View in git\n          </a>\n        )}\n        {onOpenSettings && (\n          <button\n            type=\"button\"\n            style={itemStyle}\n            onClick={onOpenSettings}\n            onMouseOver={onItemOver}\n            onMouseOut={onItemOut}\n          >\n            Git settings\n          </button>\n        )}\n        {onDelete && (\n          <button\n            type=\"button\"\n            style={{ ...itemStyle, color: '#dc2626' }}\n            onClick={onDelete}\n            onMouseOver={onItemOver}\n            onMouseOut={onItemOut}\n          >\n            Delete branch\n          </button>\n        )}\n      </div>\n    </div>\n  );\n}\n","import { useContext, useEffect, useState, useRef } from 'react';\nimport {\n  searchNamespaces,\n  topLevelNamespaces,\n} from '../pages/NamespacePage/namespaceOptions';\nimport DJClientContext from '../providers/djclient';\nimport {\n  secondaryButtonStyle as buttonStyle,\n  primaryButtonStyle,\n  onSecondaryHover,\n  onSecondaryOut,\n} from './buttonStyles';\nimport {\n  GitSettingsModal,\n  CreateBranchModal,\n  SyncToGitModal,\n  CreatePRModal,\n  DeleteBranchModal,\n} from './git';\nimport { detectShape } from './git/gitShape';\nimport GitMenu from './GitMenu';\n\nexport default function NamespaceHeader({\n  namespace,\n  children,\n  onGitConfigLoaded,\n  onReadOnlyChange,\n  namespaceOptions,\n  currentNamespace,\n}) {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const [sources, setSources] = useState(null);\n  const [recentDeployments, setRecentDeployments] = useState([]);\n  const [deploymentsDropdownOpen, setDeploymentsDropdownOpen] = useState(false);\n  const dropdownRef = useRef(null);\n\n  // Git config state\n  const [gitConfig, setGitConfig] = useState(null);\n  const [gitConfigLoading, setGitConfigLoading] = useState(true);\n  const [parentGitConfig, setParentGitConfig] = useState(null);\n  const [existingPR, setExistingPR] = useState(null);\n  const [prLoading, setPrLoading] = useState(false);\n\n  // Branch switcher state\n  const [branches, setBranches] = useState([]);\n  const [branchDropdownOpen, setBranchDropdownOpen] = useState(false);\n  const branchDropdownRef = useRef(null);\n\n  // Namespace switcher state (opt-in: only active when namespaceOptions is provided)\n  const [nsSwitcherOpen, setNsSwitcherOpen] = useState(false);\n  const [nsQuery, setNsQuery] = useState('');\n  const nsSwitcherRef = useRef(null);\n\n  // Modal states\n  const [showGitSettings, setShowGitSettings] = useState(false);\n  const [showCreateBranch, setShowCreateBranch] = useState(false);\n  const [showSyncToGit, setShowSyncToGit] = useState(false);\n  const [showCreatePR, setShowCreatePR] = useState(false);\n  const [showDeleteBranch, setShowDeleteBranch] = useState(false);\n\n  useEffect(() => {\n    // Reset loading state when namespace changes\n    setGitConfigLoading(true);\n    setPrLoading(false);\n    setExistingPR(null);\n\n    const fetchData = async () => {\n      if (!namespace) {\n        if (onGitConfigLoaded) onGitConfigLoaded(null);\n        setGitConfigLoading(false);\n        return;\n      }\n      if (namespace) {\n        // Fetch deployment sources\n        try {\n          const data = await djClient.namespaceSources(namespace);\n          setSources(data);\n\n          try {\n            const deployments = await djClient.listDeployments(namespace, 5);\n            setRecentDeployments(deployments || []);\n          } catch (err) {\n            console.error('Failed to fetch deployments:', err);\n            setRecentDeployments([]);\n          }\n        } catch (e) {\n          // Silently fail - badge just won't show\n        }\n\n        // Fetch git config\n        try {\n          const config = await djClient.getNamespaceGitConfig(namespace);\n          setGitConfig(config);\n          if (onGitConfigLoaded) {\n            onGitConfigLoaded(config);\n          }\n\n          // If this namespace is inside a branch (or IS the branch), fetch\n          // parent/branches/PR.\n          const branchNs = config?.branch_namespace;\n          if (branchNs) {\n            // The branch namespace itself carries the parent_namespace FK to\n            // the git root. If this is a subnamespace, fetch the branch's\n            // config to get that FK; otherwise the current config already\n            // has it.\n            const branchConfig =\n              branchNs === namespace\n                ? config\n                : await djClient\n                    .getNamespaceGitConfig(branchNs)\n                    .catch(() => null);\n            const gitRootNs = branchConfig?.parent_namespace;\n\n            if (gitRootNs) {\n              try {\n                const parentConfig = await djClient.getNamespaceGitConfig(\n                  gitRootNs,\n                );\n                setParentGitConfig(parentConfig);\n              } catch (e) {\n                console.error('Failed to fetch parent git config:', e);\n              }\n\n              try {\n                const branchList = await djClient.getNamespaceBranches(\n                  gitRootNs,\n                );\n                setBranches(branchList || []);\n              } catch (e) {\n                console.error('Failed to fetch branches:', e);\n              }\n            }\n\n            // Check for existing PR scoped to the branch, not the current\n            // (sub)namespace — a branch has at most one PR regardless of\n            // which subnamespace page the user is on.\n            setPrLoading(true);\n            try {\n              const pr = await djClient.getPullRequest(branchNs);\n              setExistingPR(pr);\n            } catch (e) {\n              // No PR or error - that's fine\n              setExistingPR(null);\n            } finally {\n              setPrLoading(false);\n            }\n          }\n        } catch (e) {\n          // Git config not available\n          setGitConfig(null);\n          if (onGitConfigLoaded) {\n            onGitConfigLoaded(null);\n          }\n        } finally {\n          setGitConfigLoading(false);\n        }\n      }\n    };\n    fetchData();\n  }, [djClient, namespace]);\n\n  // Close dropdowns when clicking outside\n  useEffect(() => {\n    const handleClickOutside = event => {\n      if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\n        setDeploymentsDropdownOpen(false);\n      }\n      if (\n        branchDropdownRef.current &&\n        !branchDropdownRef.current.contains(event.target)\n      ) {\n        setBranchDropdownOpen(false);\n      }\n      if (\n        nsSwitcherRef.current &&\n        !nsSwitcherRef.current.contains(event.target)\n      ) {\n        setNsSwitcherOpen(false);\n      }\n    };\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, []);\n\n  const namespaceParts = namespace ? namespace.split('.') : [];\n\n  // ``branch_namespace`` is the branch this namespace belongs to (equals the\n  // namespace when called against the branch itself, the ancestor branch when\n  // called against a descendant).\n  // isInBranch = \"this lives under a branch\" (used to show branch-scoped git\n  // controls on subnamespaces too).\n  const branchNamespace = gitConfig?.branch_namespace || null;\n  const isInBranch = !!branchNamespace;\n  const branchScopeNamespace = branchNamespace || namespace;\n  // Descendants inherit github_repo_path via cascade, so compare against\n  // git_root_namespace to know if this namespace IS the git root.\n  const isGitRoot =\n    gitConfig?.github_repo_path && gitConfig?.git_root_namespace === namespace;\n\n  // Handlers for git operations\n  const handleSaveGitConfig = async config => {\n    const result = await djClient.updateNamespaceGitConfig(\n      gitConfigOwnerNamespace,\n      config,\n    );\n    if (!result?._error) {\n      if (isBranch) setParentGitConfig(prev => ({ ...prev, ...result }));\n      else setGitConfig(result);\n    }\n    return result;\n  };\n  const handleRemoveGitConfig = async () => {\n    if (\n      !window.confirm(\n        'Remove this git config binding? If this namespace is still being deployed from git by CI, it will remain read-only. This does not delete any nodes or repo files.',\n      )\n    )\n      return;\n    const result = await djClient.deleteNamespaceGitConfig(\n      gitConfigOwnerNamespace,\n    );\n    if (!result?._error) {\n      if (isBranch) setParentGitConfig(null);\n      else setGitConfig(null);\n    }\n  };\n\n  // Branches are always created under the git root, forking from its default\n  // branch — whether we're viewing the root itself or one of its branches (on a\n  // branch page the root is carried by git_root_namespace / parentGitConfig).\n  const gitRootNamespace = gitConfig?.git_root_namespace || namespace;\n\n  const rootDefaultBranch = isGitRoot\n    ? gitConfig?.default_branch\n    : parentGitConfig?.default_branch;\n  const canCreateBranch = !!(gitRootNamespace && rootDefaultBranch);\n\n  const handleCreateBranch = async branchName => {\n    return await djClient.createBranch(gitRootNamespace, branchName);\n  };\n\n  // Sync/PR operations always target the whole branch namespace, even\n  // when invoked from a subnamespace page.\n  const handleSyncToGit = async commitMessage => {\n    return await djClient.syncNamespaceToGit(\n      branchScopeNamespace,\n      commitMessage,\n    );\n  };\n\n  const handleCreatePR = async (title, body, onProgress) => {\n    // First sync changes to git using PR title as commit message\n    if (onProgress) onProgress('syncing');\n    const syncResult = await djClient.syncNamespaceToGit(\n      branchScopeNamespace,\n      title,\n    );\n    if (syncResult?._error) {\n      return syncResult;\n    }\n\n    // Then create the PR\n    if (onProgress) onProgress('creating');\n    const result = await djClient.createPullRequest(\n      branchScopeNamespace,\n      title,\n      body,\n    );\n    if (result && !result._error) {\n      setExistingPR(result);\n    }\n    return result;\n  };\n\n  const handleDeleteBranch = async deleteGitBranch => {\n    return await djClient.deleteBranch(\n      gitConfig.parent_namespace,\n      namespace,\n      deleteGitBranch,\n    );\n  };\n\n  // Git state derivations\n  const gitShape = detectShape(gitConfig || {});\n  // Read-only follows the branch, not the resolved config's flat/root shape.\n  // A sub-namespace inside a feature branch resolves as `flat` (it inherits\n  // github_repo_path + git_branch from the branch but carries no\n  // parent_namespace of its own), so the shape test alone wrongly locks\n  // editable feature branches — the actual regression here. Instead: content\n  // on the repo's default branch, on a git root, or in a 1:1 flat namespace is\n  // read-only; a non-default (feature) branch and its sub-namespaces are\n  // editable. `rootDefaultBranch` is resolved above from the git root's config\n  // (parentGitConfig), which has finished loading by the time the verdict fires\n  // below — setGitConfigLoading(false) runs after that fetch.\n  const onSubBranch = !!branchNamespace && branchNamespace !== gitRootNamespace;\n  const isDefaultBranch = onSubBranch\n    ? gitConfig?.git_branch === rootDefaultBranch\n    : gitShape === 'root' || gitShape === 'flat';\n  const isReadOnly = !!gitConfig?.git_only || isDefaultBranch;\n  const isGitDeployed =\n    !!sources &&\n    sources.total_deployments > 0 &&\n    sources.primary_source?.type === 'git';\n  // A non-default (feature) branch and its sub-namespaces stay editable even\n  // when git-deployed — editing then syncing back is the point. The\n  // git-deployed lock only applies elsewhere (default branch, 1:1 flat, git\n  // root, or an unrecognized-but-git-deployed shape), which `isReadOnly`\n  // already covers for the recognized cases.\n  const isFeatureBranch = onSubBranch && !isDefaultBranch;\n  const isGitManaged = isReadOnly || (isGitDeployed && !isFeatureBranch);\n  // Repo config is owned by the git root. On a branch, edits target the root\n  // (its config is parentGitConfig — branches sit one level below the root); a\n  // flat or plain namespace owns its own config. This keeps flat namespaces\n  // (e.g. magnesium.tech, no parent) editing themselves.\n  const isBranch = gitShape === 'branch';\n  const gitConfigOwnerNamespace = isBranch ? gitRootNamespace : namespace;\n  const gitConfigOwnerConfig = isBranch ? parentGitConfig : gitConfig;\n  // Report the read-only verdict only once it's actually known (git config +\n  // sources loaded). Firing a premature `false` on mount makes consumers flash\n  // editable UI (e.g. the node edit form) before the real verdict arrives.\n  useEffect(() => {\n    if (onReadOnlyChange && !gitConfigLoading) onReadOnlyChange(!!isGitManaged);\n  }, [isGitManaged, gitConfigLoading, onReadOnlyChange]);\n\n  const viewInGitUrl = () => {\n    const repo = gitConfig?.github_repo_path;\n    if (!repo) return null;\n    const branch = gitConfig?.git_branch || gitConfig?.default_branch || 'main';\n    const path = gitConfig?.git_path\n      ? `/${gitConfig.git_path.replace(/^\\/|\\/$/g, '')}`\n      : '';\n    return `https://github.netflix.net/${repo}/tree/${branch}${path}`;\n  };\n\n  return (\n    <>\n      <style>\n        {`\n          @keyframes spin {\n            from { transform: rotate(0deg); }\n            to { transform: rotate(360deg); }\n          }\n        `}\n      </style>\n      <div\n        style={{\n          display: 'flex',\n          justifyContent: 'space-between',\n          alignItems: 'center',\n          // Wrap so the action buttons drop below the breadcrumb on narrow\n          // screens instead of overflowing / being clipped off the right edge.\n          flexWrap: 'wrap',\n          gap: '8px',\n          padding: '12px 12px 12px 20px',\n          marginBottom: '16px',\n          borderTop: '1px solid #e2e8f0',\n          borderBottom: '1px solid #e2e8f0',\n          background: '#ffffff',\n        }}\n      >\n        <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n          <a href=\"/\" style={{ display: 'flex', alignItems: 'center' }}>\n            <svg\n              xmlns=\"http://www.w3.org/2000/svg\"\n              width=\"16\"\n              height=\"16\"\n              fill=\"currentColor\"\n              viewBox=\"0 0 16 16\"\n            >\n              <path d=\"M8.186 1.113a.5.5 0 0 0-.372 0L1.846 3.5 8 5.961 14.154 3.5 8.186 1.113zM15 4.239l-6.5 2.6v7.922l6.5-2.6V4.24zM7.5 14.762V6.838L1 4.239v7.923l6.5 2.6zM7.443.184a1.5 1.5 0 0 1 1.114 0l7.129 2.852A.5.5 0 0 1 16 3.5v8.662a1 1 0 0 1-.629.928l-7.185 2.874a.5.5 0 0 1-.372 0L.63 13.09a1 1 0 0 1-.63-.928V3.5a.5.5 0 0 1 .314-.464L7.443.184z\" />\n            </svg>\n          </a>\n          <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            width=\"12\"\n            height=\"12\"\n            fill=\"#6c757d\"\n            viewBox=\"0 0 16 16\"\n          >\n            <path\n              fillRule=\"evenodd\"\n              d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z\"\n            />\n          </svg>\n          {namespace ? (\n            namespaceParts.map((part, index, arr) => {\n              const isLast = index === arr.length - 1;\n              const cumulative = arr.slice(0, index + 1).join('.');\n              const href = `/namespaces/${cumulative}`;\n              // The branch crumb (the segment whose cumulative path equals the\n              // branch namespace) becomes the branch switcher — at ANY depth, not\n              // only when the URL is exactly the branch root (so it stays available\n              // after drilling into sub-namespaces below the branch).\n              const isBranchCrumb =\n                isInBranch && cumulative === branchNamespace;\n              return (\n                <span\n                  key={index}\n                  style={{ display: 'flex', alignItems: 'center', gap: '8px' }}\n                >\n                  {/* The branch crumb becomes the branch switcher. The first\n                      segment becomes a searchable namespace switcher when\n                      namespaceOptions is provided (opt-in). */}\n                  {isBranchCrumb ? (\n                    <div\n                      ref={branchDropdownRef}\n                      style={{ position: 'relative' }}\n                    >\n                      <button\n                        onClick={() => setBranchDropdownOpen(o => !o)}\n                        style={{\n                          display: 'flex',\n                          alignItems: 'center',\n                          gap: '4px',\n                          padding: '0',\n                          background: 'none',\n                          border: 'none',\n                          fontWeight: '400',\n                          fontSize: 'inherit',\n                          color: '#1e293b',\n                          cursor: 'pointer',\n                        }}\n                      >\n                        <svg\n                          xmlns=\"http://www.w3.org/2000/svg\"\n                          width=\"12\"\n                          height=\"12\"\n                          viewBox=\"0 0 24 24\"\n                          fill=\"none\"\n                          stroke=\"#64748b\"\n                          strokeWidth=\"2\"\n                          strokeLinecap=\"round\"\n                          strokeLinejoin=\"round\"\n                        >\n                          <line x1=\"6\" y1=\"3\" x2=\"6\" y2=\"15\" />\n                          <circle cx=\"18\" cy=\"6\" r=\"3\" />\n                          <circle cx=\"6\" cy=\"18\" r=\"3\" />\n                          <path d=\"M18 9a9 9 0 0 1-9 9\" />\n                        </svg>\n                        {part}\n                        <span style={{ fontSize: '8px', color: '#94a3b8' }}>\n                          {branchDropdownOpen ? '▲' : '▼'}\n                        </span>\n                      </button>\n\n                      {branchDropdownOpen && (\n                        <div\n                          style={{\n                            position: 'absolute',\n                            top: '100%',\n                            left: 0,\n                            marginTop: '4px',\n                            backgroundColor: 'white',\n                            border: '1px solid #e2e8f0',\n                            borderRadius: '8px',\n                            boxShadow: '0 4px 12px rgba(0,0,0,0.12)',\n                            zIndex: 1000,\n                            minWidth: '180px',\n                            overflow: 'hidden',\n                          }}\n                        >\n                          <div\n                            style={{\n                              padding: '8px 12px 6px',\n                              fontSize: '10px',\n                              fontWeight: 600,\n                              textTransform: 'uppercase',\n                              letterSpacing: '0.05em',\n                              color: '#94a3b8',\n                              borderBottom: '1px solid #f1f5f9',\n                            }}\n                          >\n                            <a\n                              href={`/namespaces/${gitConfig.parent_namespace}`}\n                              style={{\n                                color: '#94a3b8',\n                                textDecoration: 'none',\n                              }}\n                              onClick={() => setBranchDropdownOpen(false)}\n                            >\n                              {gitConfig.parent_namespace}\n                            </a>\n                          </div>\n                          {branches.length === 0 ? (\n                            <div\n                              style={{\n                                padding: '10px 12px',\n                                fontSize: '12px',\n                                color: '#94a3b8',\n                              }}\n                            >\n                              No branches found\n                            </div>\n                          ) : (\n                            branches.map(b => {\n                              const isCurrent = b.namespace === namespace;\n                              return (\n                                <a\n                                  key={b.namespace}\n                                  href={`/namespaces/${b.namespace}`}\n                                  onClick={() => setBranchDropdownOpen(false)}\n                                  style={{\n                                    display: 'flex',\n                                    alignItems: 'center',\n                                    justifyContent: 'space-between',\n                                    padding: '8px 12px',\n                                    fontSize: '13px',\n                                    color: isCurrent ? '#1e40af' : '#1e293b',\n                                    backgroundColor: isCurrent\n                                      ? '#eff6ff'\n                                      : 'white',\n                                    textDecoration: 'none',\n                                    borderBottom: '1px solid #f8fafc',\n                                  }}\n                                >\n                                  <span\n                                    style={{\n                                      display: 'flex',\n                                      alignItems: 'center',\n                                      gap: '6px',\n                                      minWidth: 0,\n                                    }}\n                                  >\n                                    {isCurrent && (\n                                      <svg\n                                        xmlns=\"http://www.w3.org/2000/svg\"\n                                        width=\"10\"\n                                        height=\"10\"\n                                        viewBox=\"0 0 24 24\"\n                                        fill=\"none\"\n                                        stroke=\"currentColor\"\n                                        strokeWidth=\"3\"\n                                        strokeLinecap=\"round\"\n                                        strokeLinejoin=\"round\"\n                                        style={{ flexShrink: 0 }}\n                                      >\n                                        <polyline points=\"20 6 9 17 4 12\" />\n                                      </svg>\n                                    )}\n                                    <span\n                                      style={{\n                                        overflow: 'hidden',\n                                        textOverflow: 'ellipsis',\n                                        whiteSpace: 'nowrap',\n                                        maxWidth: '180px',\n                                      }}\n                                      title={b.git_branch || b.namespace}\n                                    >\n                                      {b.git_branch || b.namespace}\n                                    </span>\n                                  </span>\n                                  <span\n                                    style={{\n                                      fontSize: '11px',\n                                      color: '#94a3b8',\n                                      flexShrink: 0,\n                                      marginLeft: '8px',\n                                    }}\n                                  >\n                                    {b.num_nodes} nodes\n                                  </span>\n                                </a>\n                              );\n                            })\n                          )}\n                          {canCreateBranch && (\n                            <button\n                              onClick={() => {\n                                setBranchDropdownOpen(false);\n                                setShowCreateBranch(true);\n                              }}\n                              style={{\n                                display: 'flex',\n                                alignItems: 'center',\n                                gap: '6px',\n                                width: '100%',\n                                padding: '10px 12px',\n                                fontSize: '13px',\n                                fontWeight: 500,\n                                color: '#2563eb',\n                                background: 'none',\n                                border: 'none',\n                                borderTop: '1px solid #f1f5f9',\n                                cursor: 'pointer',\n                                textAlign: 'left',\n                              }}\n                            >\n                              <svg\n                                xmlns=\"http://www.w3.org/2000/svg\"\n                                width=\"12\"\n                                height=\"12\"\n                                viewBox=\"0 0 24 24\"\n                                fill=\"none\"\n                                stroke=\"currentColor\"\n                                strokeWidth=\"2\"\n                                strokeLinecap=\"round\"\n                                strokeLinejoin=\"round\"\n                              >\n                                <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n                                <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n                              </svg>\n                              New branch\n                            </button>\n                          )}\n                        </div>\n                      )}\n                    </div>\n                  ) : index === 0 && namespaceOptions?.length > 0 ? (\n                    <div ref={nsSwitcherRef} style={{ position: 'relative' }}>\n                      <button\n                        onClick={() => {\n                          setNsSwitcherOpen(o => !o);\n                          setNsQuery('');\n                        }}\n                        style={{\n                          display: 'flex',\n                          alignItems: 'center',\n                          gap: '4px',\n                          padding: '0',\n                          background: 'none',\n                          border: 'none',\n                          fontWeight: '400',\n                          fontSize: 'inherit',\n                          color: '#1e293b',\n                          cursor: 'pointer',\n                        }}\n                      >\n                        {part}\n                        <span style={{ fontSize: '8px', color: '#94a3b8' }}>\n                          {nsSwitcherOpen ? '▲' : '▼'}\n                        </span>\n                      </button>\n\n                      {nsSwitcherOpen && (\n                        <div\n                          style={{\n                            position: 'absolute',\n                            top: '100%',\n                            left: 0,\n                            marginTop: '4px',\n                            backgroundColor: 'white',\n                            border: '1px solid #e2e8f0',\n                            borderRadius: '8px',\n                            boxShadow: '0 4px 12px rgba(0,0,0,0.12)',\n                            zIndex: 1000,\n                            minWidth: '220px',\n                            overflow: 'hidden',\n                          }}\n                        >\n                          <div style={{ padding: '8px' }}>\n                            <input\n                              type=\"text\"\n                              value={nsQuery}\n                              onChange={e => setNsQuery(e.target.value)}\n                              placeholder=\"Find a namespace…\"\n                              autoFocus\n                              style={{\n                                width: '100%',\n                                padding: '6px 8px',\n                                fontSize: '12px',\n                                border: '1px solid #e2e8f0',\n                                borderRadius: '4px',\n                                outline: 'none',\n                                boxSizing: 'border-box',\n                              }}\n                            />\n                          </div>\n                          <div\n                            style={{ maxHeight: '280px', overflowY: 'auto' }}\n                          >\n                            {(() => {\n                              // Default list: top-level namespaces only (the\n                              // switcher is for jumping between top-level areas;\n                              // deeper levels are reached by drilling folders).\n                              // Typing searches across ALL depths.\n                              const results = nsQuery.trim()\n                                ? searchNamespaces(namespaceOptions, nsQuery)\n                                : topLevelNamespaces(namespaceOptions);\n                              if (results.length === 0) {\n                                return (\n                                  <div\n                                    style={{\n                                      padding: '8px 12px',\n                                      fontSize: '12px',\n                                      color: '#94a3b8',\n                                    }}\n                                  >\n                                    No namespaces match.\n                                  </div>\n                                );\n                              }\n                              return results.map(path => {\n                                const isCurrent = path === currentNamespace;\n                                return (\n                                  <a\n                                    key={path}\n                                    href={`/namespaces/${path}`}\n                                    onClick={() => setNsSwitcherOpen(false)}\n                                    style={{\n                                      display: 'block',\n                                      padding: '7px 12px',\n                                      fontSize: '13px',\n                                      color: isCurrent ? '#1e40af' : '#1e293b',\n                                      backgroundColor: isCurrent\n                                        ? '#eff6ff'\n                                        : 'white',\n                                      textDecoration: 'none',\n                                      borderBottom: '1px solid #f8fafc',\n                                      fontWeight: isCurrent ? 600 : 400,\n                                    }}\n                                  >\n                                    {path}\n                                  </a>\n                                );\n                              });\n                            })()}\n                          </div>\n                        </div>\n                      )}\n                    </div>\n                  ) : (\n                    <a\n                      href={href}\n                      style={{\n                        fontWeight: '400',\n                        color: '#1e293b',\n                        textDecoration: 'none',\n                      }}\n                    >\n                      {part}\n                    </a>\n                  )}\n                  {!isLast && (\n                    <svg\n                      xmlns=\"http://www.w3.org/2000/svg\"\n                      width=\"12\"\n                      height=\"12\"\n                      fill=\"#94a3b8\"\n                      viewBox=\"0 0 16 16\"\n                    >\n                      <path\n                        fillRule=\"evenodd\"\n                        d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z\"\n                      />\n                    </svg>\n                  )}\n                </span>\n              );\n            })\n          ) : (\n            <span style={{ fontWeight: '600', color: '#1e293b' }}>\n              All Namespaces\n            </span>\n          )}\n\n          {/* Git-only (read-only) indicator */}\n          {isGitManaged && (\n            <span\n              style={{\n                display: 'flex',\n                alignItems: 'center',\n                gap: '4px',\n                padding: '2px 8px',\n                backgroundColor: '#fef3c7',\n                borderRadius: '12px',\n                fontSize: '11px',\n                color: '#92400e',\n                marginLeft: '4px',\n              }}\n              title=\"This namespace is git-only. Changes must be made via git and deployed.\"\n            >\n              <svg\n                xmlns=\"http://www.w3.org/2000/svg\"\n                width=\"12\"\n                height=\"12\"\n                viewBox=\"0 0 24 24\"\n                fill=\"none\"\n                stroke=\"currentColor\"\n                strokeWidth=\"2\"\n                strokeLinecap=\"round\"\n                strokeLinejoin=\"round\"\n              >\n                <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n                <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n              </svg>\n              Read-only\n            </span>\n          )}\n\n          {/* Local deployment badge + dropdown (non-git deploys only;\n              git deployments are surfaced in the status strip below) */}\n          {sources &&\n            sources.total_deployments > 0 &&\n            sources.primary_source?.type !== 'git' && (\n              <div\n                style={{ position: 'relative', marginLeft: '8px' }}\n                ref={dropdownRef}\n              >\n                <button\n                  onClick={() =>\n                    setDeploymentsDropdownOpen(!deploymentsDropdownOpen)\n                  }\n                  style={{\n                    height: '32px',\n                    padding: '0 12px',\n                    fontSize: '12px',\n                    border: 'none',\n                    borderRadius: '4px',\n                    backgroundColor: '#ffffff',\n                    color: '#0b3d91',\n                    cursor: 'pointer',\n                    display: 'flex',\n                    alignItems: 'center',\n                    gap: '4px',\n                    whiteSpace: 'nowrap',\n                  }}\n                >\n                  <>\n                    <svg\n                      xmlns=\"http://www.w3.org/2000/svg\"\n                      width=\"12\"\n                      height=\"12\"\n                      viewBox=\"0 0 24 24\"\n                      fill=\"none\"\n                      stroke=\"currentColor\"\n                      strokeWidth=\"2\"\n                      strokeLinecap=\"round\"\n                      strokeLinejoin=\"round\"\n                    >\n                      <circle cx=\"12\" cy=\"7\" r=\"4\" />\n                      <path d=\"M5.5 21a6.5 6.5 0 0 1 13 0Z\" />\n                    </svg>\n                    Local Deploy\n                  </>\n                  <span style={{ fontSize: '8px' }}>\n                    {deploymentsDropdownOpen ? '▲' : '▼'}\n                  </span>\n                </button>\n\n                {deploymentsDropdownOpen && (\n                  <div\n                    style={{\n                      position: 'absolute',\n                      top: '100%',\n                      left: 0,\n                      marginTop: '4px',\n                      padding: '12px',\n                      backgroundColor: 'white',\n                      border: '1px solid #ddd',\n                      borderRadius: '8px',\n                      boxShadow: '0 4px 12px rgba(0,0,0,0.15)',\n                      zIndex: 1000,\n                      minWidth: 'max-content',\n                    }}\n                  >\n                    <div\n                      style={{\n                        display: 'flex',\n                        alignItems: 'center',\n                        gap: '8px',\n                        fontSize: '13px',\n                        fontWeight: 600,\n                        color: '#0b3d91',\n                        marginBottom: '12px',\n                      }}\n                    >\n                      <svg\n                        width=\"16\"\n                        height=\"16\"\n                        viewBox=\"0 0 24 24\"\n                        fill=\"none\"\n                        stroke=\"currentColor\"\n                        strokeWidth=\"2\"\n                        strokeLinecap=\"round\"\n                        strokeLinejoin=\"round\"\n                      >\n                        <circle cx=\"12\" cy=\"7\" r=\"4\" />\n                        <path d=\"M5.5 21a6.5 6.5 0 0 1 13 0Z\" />\n                      </svg>\n                      {recentDeployments?.[0]?.created_by\n                        ? `Local deploys by ${recentDeployments[0].created_by}`\n                        : 'Local/adhoc deployments'}\n                    </div>\n\n                    {/* Separator */}\n                    <div\n                      style={{\n                        height: '1px',\n                        backgroundColor: '#e2e8f0',\n                        marginBottom: '8px',\n                      }}\n                    />\n\n                    {/* Recent deployments list */}\n                    {recentDeployments?.length > 0 ? (\n                      recentDeployments.map((d, idx) => {\n                        const isGit = d.source?.type === 'git';\n                        const statusColor =\n                          d.status === 'success'\n                            ? '#22c55e'\n                            : d.status === 'failed'\n                            ? '#ef4444'\n                            : '#94a3b8';\n\n                        const commitUrl =\n                          isGit && d.source?.repository && d.source?.commit_sha\n                            ? `${\n                                d.source.repository.startsWith('http')\n                                  ? d.source.repository\n                                  : `https://${d.source.repository}`\n                              }/commit/${d.source.commit_sha}`\n                            : null;\n\n                        const detail = isGit\n                          ? d.source?.branch || 'main'\n                          : d.source?.reason || d.source?.hostname || 'adhoc';\n\n                        const shortSha = d.source?.commit_sha?.slice(0, 7);\n\n                        return (\n                          <div\n                            key={`${d.uuid}-${idx}`}\n                            style={{\n                              display: 'grid',\n                              gridTemplateColumns: '18px 1fr auto',\n                              alignItems: 'center',\n                              gap: '8px',\n                              padding: '6px 0',\n                              borderBottom:\n                                idx === recentDeployments.length - 1\n                                  ? 'none'\n                                  : '1px solid #f1f5f9',\n                              fontSize: '12px',\n                            }}\n                          >\n                            {/* Status dot */}\n                            <div\n                              style={{\n                                width: '8px',\n                                height: '8px',\n                                borderRadius: '50%',\n                                backgroundColor: statusColor,\n                              }}\n                              title={d.status}\n                            />\n\n                            {/* User + detail */}\n                            <div\n                              style={{\n                                display: 'flex',\n                                alignItems: 'center',\n                                gap: '6px',\n                                minWidth: 0,\n                              }}\n                            >\n                              <span\n                                style={{\n                                  fontWeight: 500,\n                                  color: '#0f172a',\n                                  whiteSpace: 'nowrap',\n                                }}\n                              >\n                                {d.created_by || 'unknown'}\n                              </span>\n                              <span style={{ color: '#cbd5e1' }}>—</span>\n                              {isGit ? (\n                                <>\n                                  <span\n                                    style={{\n                                      color: '#64748b',\n                                      whiteSpace: 'nowrap',\n                                    }}\n                                  >\n                                    {detail}\n                                  </span>\n                                  {shortSha && (\n                                    <>\n                                      <span style={{ color: '#cbd5e1' }}>\n                                        @\n                                      </span>\n                                      {commitUrl ? (\n                                        <a\n                                          href={commitUrl}\n                                          target=\"_blank\"\n                                          rel=\"noopener noreferrer\"\n                                          style={{\n                                            fontFamily: 'monospace',\n                                            fontSize: '11px',\n                                            color: '#3b82f6',\n                                            textDecoration: 'none',\n                                          }}\n                                        >\n                                          {shortSha}\n                                        </a>\n                                      ) : (\n                                        <span\n                                          style={{\n                                            fontFamily: 'monospace',\n                                            fontSize: '11px',\n                                            color: '#64748b',\n                                          }}\n                                        >\n                                          {shortSha}\n                                        </span>\n                                      )}\n                                    </>\n                                  )}\n                                </>\n                              ) : (\n                                <span\n                                  style={{\n                                    color: '#64748b',\n                                    overflow: 'hidden',\n                                    textOverflow: 'ellipsis',\n                                    whiteSpace: 'nowrap',\n                                  }}\n                                >\n                                  {detail}\n                                </span>\n                              )}\n                            </div>\n\n                            {/* Timestamp */}\n                            <span\n                              style={{\n                                color: '#94a3b8',\n                                fontSize: '11px',\n                                whiteSpace: 'nowrap',\n                              }}\n                            >\n                              {new Date(d.created_at).toLocaleDateString()}\n                            </span>\n                          </div>\n                        );\n                      })\n                    ) : (\n                      <div style={{ color: '#94a3b8', fontSize: '12px' }}>\n                        No recent deployments\n                      </div>\n                    )}\n                  </div>\n                )}\n              </div>\n            )}\n        </div>\n\n        {/* Right side: git actions + children */}\n        <div\n          style={{\n            display: 'flex',\n            alignItems: 'center',\n            gap: '8px',\n            // Let the buttons wrap among themselves, staying right-aligned, when\n            // they can't fit on one line. marginLeft:auto keeps them right-\n            // aligned even after they wrap onto their own row below the crumb.\n            flexWrap: 'wrap',\n            justifyContent: 'flex-end',\n            marginLeft: 'auto',\n          }}\n        >\n          {/* Git controls — one primary action per state + a Git ▾ menu for the\n              rest. isGitManaged (read-only) is the master switch and overrides\n              structural gitShape. */}\n          {!gitConfigLoading &&\n            namespace &&\n            (() => {\n              const repoBranch =\n                gitConfig?.git_branch || gitConfig?.default_branch;\n              const editableBranch = gitShape === 'branch' && !isGitManaged;\n              const gitUrl = viewInGitUrl();\n\n              // Read-only: fork to propose a change; everything else in the menu.\n              if (isGitManaged) {\n                return (\n                  <>\n                    {canCreateBranch && (\n                      <button\n                        style={primaryButtonStyle}\n                        onClick={() => setShowCreateBranch(true)}\n                      >\n                        <svg\n                          xmlns=\"http://www.w3.org/2000/svg\"\n                          width=\"14\"\n                          height=\"14\"\n                          viewBox=\"0 0 24 24\"\n                          fill=\"none\"\n                          stroke=\"currentColor\"\n                          strokeWidth=\"2\"\n                          strokeLinecap=\"round\"\n                          strokeLinejoin=\"round\"\n                        >\n                          <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n                          <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n                        </svg>\n                        New Branch\n                      </button>\n                    )}\n                    <GitMenu\n                      repoPath={gitConfig?.github_repo_path}\n                      branch={repoBranch}\n                      viewInGitUrl={gitUrl}\n                      onOpenSettings={() => setShowGitSettings(true)}\n                    />\n                  </>\n                );\n              }\n\n              // Editable working branch: the edit -> ship loop inline.\n              if (editableBranch) {\n                return (\n                  <>\n                    <button\n                      style={buttonStyle}\n                      onClick={() => setShowSyncToGit(true)}\n                      onMouseOver={onSecondaryHover}\n                      onMouseOut={onSecondaryOut}\n                    >\n                      <svg\n                        xmlns=\"http://www.w3.org/2000/svg\"\n                        width=\"14\"\n                        height=\"14\"\n                        viewBox=\"0 0 24 24\"\n                        fill=\"none\"\n                        stroke=\"currentColor\"\n                        strokeWidth=\"2\"\n                        strokeLinecap=\"round\"\n                        strokeLinejoin=\"round\"\n                      >\n                        <path d=\"M21 12a9 9 0 0 1-9 9m9-9a9 9 0 0 0-9-9m9 9H3m9 9a9 9 0 0 1-9-9m9 9c1.66 0 3-4.03 3-9s-1.34-9-3-9m0 18c-1.66 0-3-4.03-3-9s1.34-9 3-9m-9 9a9 9 0 0 1 9-9\" />\n                      </svg>\n                      Sync to Git\n                    </button>\n                    {prLoading ? (\n                      <button\n                        style={{\n                          ...buttonStyle,\n                          cursor: 'default',\n                          opacity: 0.6,\n                        }}\n                        disabled\n                      >\n                        <svg\n                          xmlns=\"http://www.w3.org/2000/svg\"\n                          width=\"14\"\n                          height=\"14\"\n                          viewBox=\"0 0 24 24\"\n                          fill=\"none\"\n                          stroke=\"currentColor\"\n                          strokeWidth=\"2\"\n                          strokeLinecap=\"round\"\n                          strokeLinejoin=\"round\"\n                          style={{ animation: 'spin 1s linear infinite' }}\n                        >\n                          <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n                        </svg>\n                        Checking PR...\n                      </button>\n                    ) : existingPR ? (\n                      <a\n                        href={existingPR.pr_url}\n                        target=\"_blank\"\n                        rel=\"noopener noreferrer\"\n                        style={{\n                          ...primaryButtonStyle,\n                          textDecoration: 'none',\n                          backgroundColor: '#16a34a',\n                          borderColor: '#16a34a',\n                        }}\n                      >\n                        <svg\n                          xmlns=\"http://www.w3.org/2000/svg\"\n                          width=\"14\"\n                          height=\"14\"\n                          viewBox=\"0 0 24 24\"\n                          fill=\"none\"\n                          stroke=\"currentColor\"\n                          strokeWidth=\"2\"\n                          strokeLinecap=\"round\"\n                          strokeLinejoin=\"round\"\n                        >\n                          <circle cx=\"18\" cy=\"18\" r=\"3\" />\n                          <circle cx=\"6\" cy=\"6\" r=\"3\" />\n                          <path d=\"M13 6h3a2 2 0 0 1 2 2v7\" />\n                          <line x1=\"6\" y1=\"9\" x2=\"6\" y2=\"21\" />\n                        </svg>\n                        View PR #{existingPR.pr_number}\n                      </a>\n                    ) : (\n                      <button\n                        style={primaryButtonStyle}\n                        onClick={() => setShowCreatePR(true)}\n                      >\n                        <svg\n                          xmlns=\"http://www.w3.org/2000/svg\"\n                          width=\"14\"\n                          height=\"14\"\n                          viewBox=\"0 0 24 24\"\n                          fill=\"none\"\n                          stroke=\"currentColor\"\n                          strokeWidth=\"2\"\n                          strokeLinecap=\"round\"\n                          strokeLinejoin=\"round\"\n                        >\n                          <circle cx=\"18\" cy=\"18\" r=\"3\" />\n                          <circle cx=\"6\" cy=\"6\" r=\"3\" />\n                          <path d=\"M13 6h3a2 2 0 0 1 2 2v7\" />\n                          <line x1=\"6\" y1=\"9\" x2=\"6\" y2=\"21\" />\n                        </svg>\n                        Create PR\n                      </button>\n                    )}\n                    <GitMenu\n                      repoPath={gitConfig?.github_repo_path}\n                      branch={repoBranch}\n                      viewInGitUrl={gitUrl}\n                      onNewBranch={\n                        canCreateBranch && (() => setShowCreateBranch(true))\n                      }\n                      onDelete={() => setShowDeleteBranch(true)}\n                    />\n                  </>\n                );\n              }\n\n              // Plain (not-git): a single entry to adopt git.\n              return (\n                <button\n                  style={buttonStyle}\n                  onClick={() => setShowGitSettings(true)}\n                  onMouseOver={onSecondaryHover}\n                  onMouseOut={onSecondaryOut}\n                >\n                  <svg\n                    xmlns=\"http://www.w3.org/2000/svg\"\n                    width=\"14\"\n                    height=\"14\"\n                    viewBox=\"0 0 24 24\"\n                    fill=\"none\"\n                    stroke=\"currentColor\"\n                    strokeWidth=\"2\"\n                    strokeLinecap=\"round\"\n                    strokeLinejoin=\"round\"\n                  >\n                    <line x1=\"6\" y1=\"3\" x2=\"6\" y2=\"15\" />\n                    <circle cx=\"18\" cy=\"6\" r=\"3\" />\n                    <circle cx=\"6\" cy=\"18\" r=\"3\" />\n                    <path d=\"M18 9a9 9 0 0 1-9 9\" />\n                  </svg>\n                  Connect to Git\n                </button>\n              );\n            })()}\n\n          {/* Additional actions passed as children */}\n          {children}\n        </div>\n\n        {/* Modals */}\n        <GitSettingsModal\n          isOpen={showGitSettings}\n          onClose={() => setShowGitSettings(false)}\n          onSave={handleSaveGitConfig}\n          onRemove={handleRemoveGitConfig}\n          currentConfig={gitConfigOwnerConfig}\n          namespace={gitConfigOwnerNamespace}\n          nodeCount={0} // TODO: wire real node count\n        />\n\n        <CreateBranchModal\n          isOpen={showCreateBranch}\n          onClose={() => setShowCreateBranch(false)}\n          onCreate={handleCreateBranch}\n          namespace={gitRootNamespace}\n          gitBranch={rootDefaultBranch}\n          isGitRoot={true}\n        />\n\n        <SyncToGitModal\n          isOpen={showSyncToGit}\n          onClose={() => setShowSyncToGit(false)}\n          onSync={handleSyncToGit}\n          namespace={branchScopeNamespace}\n          gitBranch={gitConfig?.git_branch}\n          repoPath={gitConfig?.github_repo_path}\n        />\n\n        <CreatePRModal\n          isOpen={showCreatePR}\n          onClose={() => setShowCreatePR(false)}\n          onCreate={handleCreatePR}\n          namespace={branchScopeNamespace}\n          gitBranch={gitConfig?.git_branch}\n          parentBranch={\n            parentGitConfig?.git_branch || parentGitConfig?.default_branch\n          }\n          repoPath={gitConfig?.github_repo_path}\n        />\n\n        <DeleteBranchModal\n          isOpen={showDeleteBranch}\n          onClose={() => setShowDeleteBranch(false)}\n          onDelete={handleDeleteBranch}\n          namespace={namespace}\n          gitBranch={gitConfig?.git_branch}\n          parentNamespace={gitConfig?.parent_namespace}\n        />\n      </div>\n    </>\n  );\n}\n","function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import defineProperty from \"./defineProperty.js\";\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n      defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}\nexport { _objectSpread2 as default };","function _arrayWithHoles(r) {\n  if (Array.isArray(r)) return r;\n}\nexport { _arrayWithHoles as default };","function _iterableToArrayLimit(r, l) {\n  var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (null != t) {\n    var e,\n      n,\n      i,\n      u,\n      a = [],\n      f = !0,\n      o = !1;\n    try {\n      if (i = (t = t.call(r)).next, 0 === l) {\n        if (Object(t) !== t) return;\n        f = !1;\n      } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n    } catch (r) {\n      o = !0, n = r;\n    } finally {\n      try {\n        if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n      } finally {\n        if (o) throw n;\n      }\n    }\n    return a;\n  }\n}\nexport { _iterableToArrayLimit as default };","function _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nexport { _arrayLikeToArray as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;\n  }\n}\nexport { _unsupportedIterableToArray as default };","function _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableRest as default };","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nfunction _slicedToArray(r, e) {\n  return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();\n}\nexport { _slicedToArray as default };","function _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (-1 !== e.indexOf(n)) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nfunction _objectWithoutProperties(e, t) {\n  if (null == e) return {};\n  var o,\n    r,\n    i = objectWithoutPropertiesLoose(e, t);\n  if (Object.getOwnPropertySymbols) {\n    var n = Object.getOwnPropertySymbols(e);\n    for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n  }\n  return i;\n}\nexport { _objectWithoutProperties as default };","import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\nimport _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport { useState, useCallback } from 'react';\n\nvar _excluded = [\"defaultInputValue\", \"defaultMenuIsOpen\", \"defaultValue\", \"inputValue\", \"menuIsOpen\", \"onChange\", \"onInputChange\", \"onMenuClose\", \"onMenuOpen\", \"value\"];\nfunction useStateManager(_ref) {\n  var _ref$defaultInputValu = _ref.defaultInputValue,\n    defaultInputValue = _ref$defaultInputValu === void 0 ? '' : _ref$defaultInputValu,\n    _ref$defaultMenuIsOpe = _ref.defaultMenuIsOpen,\n    defaultMenuIsOpen = _ref$defaultMenuIsOpe === void 0 ? false : _ref$defaultMenuIsOpe,\n    _ref$defaultValue = _ref.defaultValue,\n    defaultValue = _ref$defaultValue === void 0 ? null : _ref$defaultValue,\n    propsInputValue = _ref.inputValue,\n    propsMenuIsOpen = _ref.menuIsOpen,\n    propsOnChange = _ref.onChange,\n    propsOnInputChange = _ref.onInputChange,\n    propsOnMenuClose = _ref.onMenuClose,\n    propsOnMenuOpen = _ref.onMenuOpen,\n    propsValue = _ref.value,\n    restSelectProps = _objectWithoutProperties(_ref, _excluded);\n  var _useState = useState(propsInputValue !== undefined ? propsInputValue : defaultInputValue),\n    _useState2 = _slicedToArray(_useState, 2),\n    stateInputValue = _useState2[0],\n    setStateInputValue = _useState2[1];\n  var _useState3 = useState(propsMenuIsOpen !== undefined ? propsMenuIsOpen : defaultMenuIsOpen),\n    _useState4 = _slicedToArray(_useState3, 2),\n    stateMenuIsOpen = _useState4[0],\n    setStateMenuIsOpen = _useState4[1];\n  var _useState5 = useState(propsValue !== undefined ? propsValue : defaultValue),\n    _useState6 = _slicedToArray(_useState5, 2),\n    stateValue = _useState6[0],\n    setStateValue = _useState6[1];\n  var onChange = useCallback(function (value, actionMeta) {\n    if (typeof propsOnChange === 'function') {\n      propsOnChange(value, actionMeta);\n    }\n    setStateValue(value);\n  }, [propsOnChange]);\n  var onInputChange = useCallback(function (value, actionMeta) {\n    var newValue;\n    if (typeof propsOnInputChange === 'function') {\n      newValue = propsOnInputChange(value, actionMeta);\n    }\n    setStateInputValue(newValue !== undefined ? newValue : value);\n  }, [propsOnInputChange]);\n  var onMenuOpen = useCallback(function () {\n    if (typeof propsOnMenuOpen === 'function') {\n      propsOnMenuOpen();\n    }\n    setStateMenuIsOpen(true);\n  }, [propsOnMenuOpen]);\n  var onMenuClose = useCallback(function () {\n    if (typeof propsOnMenuClose === 'function') {\n      propsOnMenuClose();\n    }\n    setStateMenuIsOpen(false);\n  }, [propsOnMenuClose]);\n  var inputValue = propsInputValue !== undefined ? propsInputValue : stateInputValue;\n  var menuIsOpen = propsMenuIsOpen !== undefined ? propsMenuIsOpen : stateMenuIsOpen;\n  var value = propsValue !== undefined ? propsValue : stateValue;\n  return _objectSpread(_objectSpread({}, restSelectProps), {}, {\n    inputValue: inputValue,\n    menuIsOpen: menuIsOpen,\n    onChange: onChange,\n    onInputChange: onInputChange,\n    onMenuClose: onMenuClose,\n    onMenuOpen: onMenuOpen,\n    value: value\n  });\n}\n\nexport { useStateManager as u };\n","function _extends() {\n  return _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function _classCallCheck(a, n) {\n  if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nexport { _classCallCheck as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(e, r) {\n  for (var t = 0; t < r.length; t++) {\n    var o = r[t];\n    o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n  }\n}\nfunction _createClass(e, r, t) {\n  return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n    writable: !1\n  }), e;\n}\nexport { _createClass as default };","function _setPrototypeOf(t, e) {\n  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inherits(t, e) {\n  if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n  t.prototype = Object.create(e && e.prototype, {\n    constructor: {\n      value: t,\n      writable: !0,\n      configurable: !0\n    }\n  }), Object.defineProperty(t, \"prototype\", {\n    writable: !1\n  }), e && setPrototypeOf(t, e);\n}\nexport { _inherits as default };","function _getPrototypeOf(t) {\n  return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n    return t.__proto__ || Object.getPrototypeOf(t);\n  }, _getPrototypeOf(t);\n}\nexport { _getPrototypeOf as default };","function _isNativeReflectConstruct() {\n  try {\n    var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n  } catch (t) {}\n  return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {\n    return !!t;\n  })();\n}\nexport { _isNativeReflectConstruct as default };","function _assertThisInitialized(e) {\n  if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  return e;\n}\nexport { _assertThisInitialized as default };","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nfunction _possibleConstructorReturn(t, e) {\n  if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n  if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n  return assertThisInitialized(t);\n}\nexport { _possibleConstructorReturn as default };","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nfunction _createSuper(t) {\n  var r = isNativeReflectConstruct();\n  return function () {\n    var e,\n      o = getPrototypeOf(t);\n    if (r) {\n      var s = getPrototypeOf(this).constructor;\n      e = Reflect.construct(o, arguments, s);\n    } else e = o.apply(this, arguments);\n    return possibleConstructorReturn(this, e);\n  };\n}\nexport { _createSuper as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _arrayWithoutHoles(r) {\n  if (Array.isArray(r)) return arrayLikeToArray(r);\n}\nexport { _arrayWithoutHoles as default };","function _iterableToArray(r) {\n  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nexport { _iterableToArray as default };","function _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}\nexport { _nonIterableSpread as default };","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nfunction _toConsumableArray(r) {\n  return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();\n}\nexport { _toConsumableArray as default };","var isDevelopment = false;\n\n/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n\nfunction sheetForTag(tag) {\n  if (tag.sheet) {\n    return tag.sheet;\n  } // this weirdness brought to you by firefox\n\n  /* istanbul ignore next */\n\n\n  for (var i = 0; i < document.styleSheets.length; i++) {\n    if (document.styleSheets[i].ownerNode === tag) {\n      return document.styleSheets[i];\n    }\n  } // this function should always return with a value\n  // TS can't understand it though so we make it stop complaining here\n\n\n  return undefined;\n}\n\nfunction createStyleElement(options) {\n  var tag = document.createElement('style');\n  tag.setAttribute('data-emotion', options.key);\n\n  if (options.nonce !== undefined) {\n    tag.setAttribute('nonce', options.nonce);\n  }\n\n  tag.appendChild(document.createTextNode(''));\n  tag.setAttribute('data-s', '');\n  return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n  // Using Node instead of HTMLElement since container may be a ShadowRoot\n  function StyleSheet(options) {\n    var _this = this;\n\n    this._insertTag = function (tag) {\n      var before;\n\n      if (_this.tags.length === 0) {\n        if (_this.insertionPoint) {\n          before = _this.insertionPoint.nextSibling;\n        } else if (_this.prepend) {\n          before = _this.container.firstChild;\n        } else {\n          before = _this.before;\n        }\n      } else {\n        before = _this.tags[_this.tags.length - 1].nextSibling;\n      }\n\n      _this.container.insertBefore(tag, before);\n\n      _this.tags.push(tag);\n    };\n\n    this.isSpeedy = options.speedy === undefined ? !isDevelopment : options.speedy;\n    this.tags = [];\n    this.ctr = 0;\n    this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n    this.key = options.key;\n    this.container = options.container;\n    this.prepend = options.prepend;\n    this.insertionPoint = options.insertionPoint;\n    this.before = null;\n  }\n\n  var _proto = StyleSheet.prototype;\n\n  _proto.hydrate = function hydrate(nodes) {\n    nodes.forEach(this._insertTag);\n  };\n\n  _proto.insert = function insert(rule) {\n    // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n    // it's 1 in dev because we insert source maps that map a single rule to a location\n    // and you can only have one source map per style tag\n    if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n      this._insertTag(createStyleElement(this));\n    }\n\n    var tag = this.tags[this.tags.length - 1];\n\n    if (this.isSpeedy) {\n      var sheet = sheetForTag(tag);\n\n      try {\n        // this is the ultrafast version, works across browsers\n        // the big drawback is that the css won't be editable in devtools\n        sheet.insertRule(rule, sheet.cssRules.length);\n      } catch (e) {\n      }\n    } else {\n      tag.appendChild(document.createTextNode(rule));\n    }\n\n    this.ctr++;\n  };\n\n  _proto.flush = function flush() {\n    this.tags.forEach(function (tag) {\n      var _tag$parentNode;\n\n      return (_tag$parentNode = tag.parentNode) == null ? void 0 : _tag$parentNode.removeChild(tag);\n    });\n    this.tags = [];\n    this.ctr = 0;\n  };\n\n  return StyleSheet;\n}();\n\nexport { StyleSheet };\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","function memoize(fn) {\n  var cache = Object.create(null);\n  return function (arg) {\n    if (cache[arg] === undefined) cache[arg] = fn(arg);\n    return cache[arg];\n  };\n}\n\nexport { memoize as default };\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, RULESET, combine, match, serialize, copy, replace, WEBKIT, MOZ, MS, KEYFRAMES, DECLARATION, hash, charat, strlen, indexof, stringify, rulesheet, middleware, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n  var previous = 0;\n  var character = 0;\n\n  while (true) {\n    previous = character;\n    character = peek(); // &\\f\n\n    if (previous === 38 && character === 12) {\n      points[index] = 1;\n    }\n\n    if (token(character)) {\n      break;\n    }\n\n    next();\n  }\n\n  return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n  // pretend we've started with a comma\n  var index = -1;\n  var character = 44;\n\n  do {\n    switch (token(character)) {\n      case 0:\n        // &\\f\n        if (character === 38 && peek() === 12) {\n          // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n          // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n          // and when it should just concatenate the outer and inner selectors\n          // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n          points[index] = 1;\n        }\n\n        parsed[index] += identifierWithPointTracking(position - 1, points, index);\n        break;\n\n      case 2:\n        parsed[index] += delimit(character);\n        break;\n\n      case 4:\n        // comma\n        if (character === 44) {\n          // colon\n          parsed[++index] = peek() === 58 ? '&\\f' : '';\n          points[index] = parsed[index].length;\n          break;\n        }\n\n      // fallthrough\n\n      default:\n        parsed[index] += from(character);\n    }\n  } while (character = next());\n\n  return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n  return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n  if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n  // negative .length indicates that this rule has been already prefixed\n  element.length < 1) {\n    return;\n  }\n\n  var value = element.value;\n  var parent = element.parent;\n  var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n  while (parent.type !== 'rule') {\n    parent = parent.parent;\n    if (!parent) return;\n  } // short-circuit for the simplest case\n\n\n  if (element.props.length === 1 && value.charCodeAt(0) !== 58\n  /* colon */\n  && !fixedElements.get(parent)) {\n    return;\n  } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n  // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n  if (isImplicitRule) {\n    return;\n  }\n\n  fixedElements.set(element, true);\n  var points = [];\n  var rules = getRules(value, points);\n  var parentRules = parent.props;\n\n  for (var i = 0, k = 0; i < rules.length; i++) {\n    for (var j = 0; j < parentRules.length; j++, k++) {\n      element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n    }\n  }\n};\nvar removeLabel = function removeLabel(element) {\n  if (element.type === 'decl') {\n    var value = element.value;\n\n    if ( // charcode for l\n    value.charCodeAt(0) === 108 && // charcode for b\n    value.charCodeAt(2) === 98) {\n      // this ignores label\n      element[\"return\"] = '';\n      element.value = '';\n    }\n  }\n};\n\n/* eslint-disable no-fallthrough */\n\nfunction prefix(value, length) {\n  switch (hash(value, length)) {\n    // color-adjust\n    case 5103:\n      return WEBKIT + 'print-' + value + value;\n    // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n    case 5737:\n    case 4201:\n    case 3177:\n    case 3433:\n    case 1641:\n    case 4457:\n    case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\n    case 5572:\n    case 6356:\n    case 5844:\n    case 3191:\n    case 6645:\n    case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\n    case 6391:\n    case 5879:\n    case 5623:\n    case 6135:\n    case 4599:\n    case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n    case 4215:\n    case 6389:\n    case 5109:\n    case 5365:\n    case 5621:\n    case 3829:\n      return WEBKIT + value + value;\n    // appearance, user-select, transform, hyphens, text-size-adjust\n\n    case 5349:\n    case 4246:\n    case 4810:\n    case 6968:\n    case 2756:\n      return WEBKIT + value + MOZ + value + MS + value + value;\n    // flex, flex-direction\n\n    case 6828:\n    case 4268:\n      return WEBKIT + value + MS + value + value;\n    // order\n\n    case 6165:\n      return WEBKIT + value + MS + 'flex-' + value + value;\n    // align-items\n\n    case 5187:\n      return WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value;\n    // align-self\n\n    case 5443:\n      return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value;\n    // align-content\n\n    case 4675:\n      return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value;\n    // flex-shrink\n\n    case 5548:\n      return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value;\n    // flex-basis\n\n    case 5292:\n      return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value;\n    // flex-grow\n\n    case 6060:\n      return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value;\n    // transition\n\n    case 4554:\n      return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value;\n    // cursor\n\n    case 6187:\n      return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value;\n    // background, background-image\n\n    case 5495:\n    case 3959:\n      return replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1');\n    // justify-content\n\n    case 4968:\n      return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value;\n    // (margin|padding)-inline-(start|end)\n\n    case 4095:\n    case 3583:\n    case 4068:\n    case 2532:\n      return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value;\n    // (min|max)?(width|height|inline-size|block-size)\n\n    case 8116:\n    case 7059:\n    case 5753:\n    case 5535:\n    case 5445:\n    case 5701:\n    case 4933:\n    case 4677:\n    case 5533:\n    case 5789:\n    case 5021:\n    case 4765:\n      // stretch, max-content, min-content, fill-available\n      if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) {\n        // (m)ax-content, (m)in-content\n        case 109:\n          // -\n          if (charat(value, length + 4) !== 45) break;\n        // (f)ill-available, (f)it-content\n\n        case 102:\n          return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;\n        // (s)tretch\n\n        case 115:\n          return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value;\n      }\n      break;\n    // position: sticky\n\n    case 4949:\n      // (s)ticky?\n      if (charat(value, length + 1) !== 115) break;\n    // display: (flex|inline-flex)\n\n    case 6444:\n      switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n        // stic(k)y\n        case 107:\n          return replace(value, ':', ':' + WEBKIT) + value;\n        // (inline-)?fl(e)x\n\n        case 101:\n          return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value;\n      }\n\n      break;\n    // writing-mode\n\n    case 5936:\n      switch (charat(value, length + 11)) {\n        // vertical-l(r)\n        case 114:\n          return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value;\n        // vertical-r(l)\n\n        case 108:\n          return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value;\n        // horizontal(-)tb\n\n        case 45:\n          return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value;\n      }\n\n      return WEBKIT + value + MS + value + value;\n  }\n\n  return value;\n}\n\nvar prefixer = function prefixer(element, index, children, callback) {\n  if (element.length > -1) if (!element[\"return\"]) switch (element.type) {\n    case DECLARATION:\n      element[\"return\"] = prefix(element.value, element.length);\n      break;\n\n    case KEYFRAMES:\n      return serialize([copy(element, {\n        value: replace(element.value, '@', '@' + WEBKIT)\n      })], callback);\n\n    case RULESET:\n      if (element.length) return combine(element.props, function (value) {\n        switch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n          // :read-(only|write)\n          case ':read-only':\n          case ':read-write':\n            return serialize([copy(element, {\n              props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]\n            })], callback);\n          // :placeholder\n\n          case '::placeholder':\n            return serialize([copy(element, {\n              props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]\n            }), copy(element, {\n              props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]\n            }), copy(element, {\n              props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]\n            })], callback);\n        }\n\n        return '';\n      });\n  }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n  var key = options.key;\n\n  if (key === 'css') {\n    var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n    // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n    // note this very very intentionally targets all style elements regardless of the key to ensure\n    // that creating a cache works inside of render of a React component\n\n    Array.prototype.forEach.call(ssrStyles, function (node) {\n      // we want to only move elements which have a space in the data-emotion attribute value\n      // because that indicates that it is an Emotion 11 server-side rendered style elements\n      // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n      // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n      // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n      // will not result in the Emotion 10 styles being destroyed\n      var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n      if (dataEmotionAttribute.indexOf(' ') === -1) {\n        return;\n      }\n\n      document.head.appendChild(node);\n      node.setAttribute('data-s', '');\n    });\n  }\n\n  var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n  var inserted = {};\n  var container;\n  var nodesToHydrate = [];\n\n  {\n    container = options.container || document.head;\n    Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n    // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n    document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n      var attrib = node.getAttribute(\"data-emotion\").split(' ');\n\n      for (var i = 1; i < attrib.length; i++) {\n        inserted[attrib[i]] = true;\n      }\n\n      nodesToHydrate.push(node);\n    });\n  }\n\n  var _insert;\n\n  var omnipresentPlugins = [compat, removeLabel];\n\n  {\n    var currentSheet;\n    var finalizingPlugins = [stringify, rulesheet(function (rule) {\n      currentSheet.insert(rule);\n    })];\n    var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n    var stylis = function stylis(styles) {\n      return serialize(compile(styles), serializer);\n    };\n\n    _insert = function insert(selector, serialized, sheet, shouldCache) {\n      currentSheet = sheet;\n\n      stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n      if (shouldCache) {\n        cache.inserted[serialized.name] = true;\n      }\n    };\n  }\n\n  var cache = {\n    key: key,\n    sheet: new StyleSheet({\n      key: key,\n      container: container,\n      nonce: options.nonce,\n      speedy: options.speedy,\n      prepend: options.prepend,\n      insertionPoint: options.insertionPoint\n    }),\n    nonce: options.nonce,\n    inserted: inserted,\n    registered: {},\n    insert: _insert\n  };\n  cache.sheet.hydrate(nodesToHydrate);\n  return cache;\n};\n\nexport { createCache as default };\n","var isBrowser = true;\n\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n  var rawClassName = '';\n  classNames.split(' ').forEach(function (className) {\n    if (registered[className] !== undefined) {\n      registeredStyles.push(registered[className] + \";\");\n    } else if (className) {\n      rawClassName += className + \" \";\n    }\n  });\n  return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n  var className = cache.key + \"-\" + serialized.name;\n\n  if ( // we only need to add the styles to the registered cache if the\n  // class name could be used further down\n  // the tree but if it's a string tag, we know it won't\n  // so we don't have to add it to registered cache.\n  // this improves memory usage since we can avoid storing the whole style string\n  (isStringTag === false || // we need to always store it if we're in compat mode and\n  // in node since emotion-server relies on whether a style is in\n  // the registered cache to know whether a style is global or not\n  // also, note that this check will be dead code eliminated in the browser\n  isBrowser === false ) && cache.registered[className] === undefined) {\n    cache.registered[className] = serialized.styles;\n  }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n  registerStyles(cache, serialized, isStringTag);\n  var className = cache.key + \"-\" + serialized.name;\n\n  if (cache.inserted[serialized.name] === undefined) {\n    var current = serialized;\n\n    do {\n      cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n      current = current.next;\n    } while (current !== undefined);\n  }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n  // 'm' and 'r' are mixing constants generated offline.\n  // They're not really 'magic', they just happen to work well.\n  // const m = 0x5bd1e995;\n  // const r = 24;\n  // Initialize the hash\n  var h = 0; // Mix 4 bytes at a time into the hash\n\n  var k,\n      i = 0,\n      len = str.length;\n\n  for (; len >= 4; ++i, len -= 4) {\n    k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n    k =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n    k ^=\n    /* k >>> r: */\n    k >>> 24;\n    h =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n    /* Math.imul(h, m): */\n    (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Handle the last few bytes of the input array\n\n\n  switch (len) {\n    case 3:\n      h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n    case 2:\n      h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n    case 1:\n      h ^= str.charCodeAt(i) & 0xff;\n      h =\n      /* Math.imul(h, m): */\n      (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Do a few final mixes of the hash to ensure the last few\n  // bytes are well-incorporated.\n\n\n  h ^= h >>> 13;\n  h =\n  /* Math.imul(h, m): */\n  (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport { murmur2 as default };\n","var unitlessKeys = {\n  animationIterationCount: 1,\n  aspectRatio: 1,\n  borderImageOutset: 1,\n  borderImageSlice: 1,\n  borderImageWidth: 1,\n  boxFlex: 1,\n  boxFlexGroup: 1,\n  boxOrdinalGroup: 1,\n  columnCount: 1,\n  columns: 1,\n  flex: 1,\n  flexGrow: 1,\n  flexPositive: 1,\n  flexShrink: 1,\n  flexNegative: 1,\n  flexOrder: 1,\n  gridRow: 1,\n  gridRowEnd: 1,\n  gridRowSpan: 1,\n  gridRowStart: 1,\n  gridColumn: 1,\n  gridColumnEnd: 1,\n  gridColumnSpan: 1,\n  gridColumnStart: 1,\n  msGridRow: 1,\n  msGridRowSpan: 1,\n  msGridColumn: 1,\n  msGridColumnSpan: 1,\n  fontWeight: 1,\n  lineHeight: 1,\n  opacity: 1,\n  order: 1,\n  orphans: 1,\n  scale: 1,\n  tabSize: 1,\n  widows: 1,\n  zIndex: 1,\n  zoom: 1,\n  WebkitLineClamp: 1,\n  // SVG-related properties\n  fillOpacity: 1,\n  floodOpacity: 1,\n  stopOpacity: 1,\n  strokeDasharray: 1,\n  strokeDashoffset: 1,\n  strokeMiterlimit: 1,\n  strokeOpacity: 1,\n  strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar isDevelopment = false;\n\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n  return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n  return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n  return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n  switch (key) {\n    case 'animation':\n    case 'animationName':\n      {\n        if (typeof value === 'string') {\n          return value.replace(animationRegex, function (match, p1, p2) {\n            cursor = {\n              name: p1,\n              styles: p2,\n              next: cursor\n            };\n            return p1;\n          });\n        }\n      }\n  }\n\n  if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n    return value + 'px';\n  }\n\n  return value;\n};\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n  if (interpolation == null) {\n    return '';\n  }\n\n  var componentSelector = interpolation;\n\n  if (componentSelector.__emotion_styles !== undefined) {\n\n    return componentSelector;\n  }\n\n  switch (typeof interpolation) {\n    case 'boolean':\n      {\n        return '';\n      }\n\n    case 'object':\n      {\n        var keyframes = interpolation;\n\n        if (keyframes.anim === 1) {\n          cursor = {\n            name: keyframes.name,\n            styles: keyframes.styles,\n            next: cursor\n          };\n          return keyframes.name;\n        }\n\n        var serializedStyles = interpolation;\n\n        if (serializedStyles.styles !== undefined) {\n          var next = serializedStyles.next;\n\n          if (next !== undefined) {\n            // not the most efficient thing ever but this is a pretty rare case\n            // and there will be very few iterations of this generally\n            while (next !== undefined) {\n              cursor = {\n                name: next.name,\n                styles: next.styles,\n                next: cursor\n              };\n              next = next.next;\n            }\n          }\n\n          var styles = serializedStyles.styles + \";\";\n          return styles;\n        }\n\n        return createStringFromObject(mergedProps, registered, interpolation);\n      }\n\n    case 'function':\n      {\n        if (mergedProps !== undefined) {\n          var previousCursor = cursor;\n          var result = interpolation(mergedProps);\n          cursor = previousCursor;\n          return handleInterpolation(mergedProps, registered, result);\n        }\n\n        break;\n      }\n  } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n  var asString = interpolation;\n\n  if (registered == null) {\n    return asString;\n  }\n\n  var cached = registered[asString];\n  return cached !== undefined ? cached : asString;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n  var string = '';\n\n  if (Array.isArray(obj)) {\n    for (var i = 0; i < obj.length; i++) {\n      string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n    }\n  } else {\n    for (var key in obj) {\n      var value = obj[key];\n\n      if (typeof value !== 'object') {\n        var asString = value;\n\n        if (registered != null && registered[asString] !== undefined) {\n          string += key + \"{\" + registered[asString] + \"}\";\n        } else if (isProcessableValue(asString)) {\n          string += processStyleName(key) + \":\" + processStyleValue(key, asString) + \";\";\n        }\n      } else {\n        if (key === 'NO_COMPONENT_SELECTOR' && isDevelopment) {\n          throw new Error(noComponentSelectorMessage);\n        }\n\n        if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n          for (var _i = 0; _i < value.length; _i++) {\n            if (isProcessableValue(value[_i])) {\n              string += processStyleName(key) + \":\" + processStyleValue(key, value[_i]) + \";\";\n            }\n          }\n        } else {\n          var interpolated = handleInterpolation(mergedProps, registered, value);\n\n          switch (key) {\n            case 'animation':\n            case 'animationName':\n              {\n                string += processStyleName(key) + \":\" + interpolated + \";\";\n                break;\n              }\n\n            default:\n              {\n\n                string += key + \"{\" + interpolated + \"}\";\n              }\n          }\n        }\n      }\n    }\n  }\n\n  return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;{]+)\\s*(;|$)/g; // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\nvar cursor;\nfunction serializeStyles(args, registered, mergedProps) {\n  if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n    return args[0];\n  }\n\n  var stringMode = true;\n  var styles = '';\n  cursor = undefined;\n  var strings = args[0];\n\n  if (strings == null || strings.raw === undefined) {\n    stringMode = false;\n    styles += handleInterpolation(mergedProps, registered, strings);\n  } else {\n    var asTemplateStringsArr = strings;\n\n    styles += asTemplateStringsArr[0];\n  } // we start at 1 since we've already handled the first arg\n\n\n  for (var i = 1; i < args.length; i++) {\n    styles += handleInterpolation(mergedProps, registered, args[i]);\n\n    if (stringMode) {\n      var templateStringsArr = strings;\n\n      styles += templateStringsArr[i];\n    }\n  } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n  labelPattern.lastIndex = 0;\n  var identifierName = '';\n  var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n  while ((match = labelPattern.exec(styles)) !== null) {\n    identifierName += '-' + match[1];\n  }\n\n  var name = hashString(styles) + identifierName;\n\n  return {\n    name: name,\n    styles: styles,\n    next: cursor\n  };\n}\n\nexport { serializeStyles };\n","import * as React from 'react';\n\nvar syncFallback = function syncFallback(create) {\n  return create();\n};\n\nvar useInsertionEffect = React['useInsertion' + 'Effect'] ? React['useInsertion' + 'Effect'] : false;\nvar useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect || syncFallback;\nvar useInsertionEffectWithLayoutFallback = useInsertionEffect || React.useLayoutEffect;\n\nexport { useInsertionEffectAlwaysWithSyncFallback, useInsertionEffectWithLayoutFallback };\n","import * as React from 'react';\nimport { useContext, forwardRef } from 'react';\nimport createCache from '@emotion/cache';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport weakMemoize from '@emotion/weak-memoize';\nimport hoistNonReactStatics from '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\n\nvar isDevelopment = false;\n\nvar EmotionCacheContext = /* #__PURE__ */React.createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({\n  key: 'css'\n}) : null);\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n  return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n  return /*#__PURE__*/forwardRef(function (props, ref) {\n    // the cache will never be null in the browser\n    var cache = useContext(EmotionCacheContext);\n    return func(props, cache, ref);\n  });\n};\n\nvar ThemeContext = /* #__PURE__ */React.createContext({});\n\nvar useTheme = function useTheme() {\n  return React.useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n  if (typeof theme === 'function') {\n    var mergedTheme = theme(outerTheme);\n\n    return mergedTheme;\n  }\n\n  return _extends({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */weakMemoize(function (outerTheme) {\n  return weakMemoize(function (theme) {\n    return getTheme(outerTheme, theme);\n  });\n});\nvar ThemeProvider = function ThemeProvider(props) {\n  var theme = React.useContext(ThemeContext);\n\n  if (props.theme !== theme) {\n    theme = createCacheWithTheme(theme)(props.theme);\n  }\n\n  return /*#__PURE__*/React.createElement(ThemeContext.Provider, {\n    value: theme\n  }, props.children);\n};\nfunction withTheme(Component) {\n  var componentName = Component.displayName || Component.name || 'Component';\n  var WithTheme = /*#__PURE__*/React.forwardRef(function render(props, ref) {\n    var theme = React.useContext(ThemeContext);\n    return /*#__PURE__*/React.createElement(Component, _extends({\n      theme: theme,\n      ref: ref\n    }, props));\n  });\n  WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n  return hoistNonReactStatics(WithTheme, Component);\n}\n\nvar hasOwn = {}.hasOwnProperty;\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n\n  var newProps = {};\n\n  for (var _key in props) {\n    if (hasOwn.call(props, _key)) {\n      newProps[_key] = props[_key];\n    }\n  }\n\n  newProps[typePropName] = type; // Runtime labeling is an opt-in feature because:\n\n  return newProps;\n};\n\nvar Insertion = function Insertion(_ref) {\n  var cache = _ref.cache,\n      serialized = _ref.serialized,\n      isStringTag = _ref.isStringTag;\n  registerStyles(cache, serialized, isStringTag);\n  useInsertionEffectAlwaysWithSyncFallback(function () {\n    return insertStyles(cache, serialized, isStringTag);\n  });\n\n  return null;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n  var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n  // not passing the registered cache to serializeStyles because it would\n  // make certain babel optimisations not possible\n\n  if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n    cssProp = cache.registered[cssProp];\n  }\n\n  var WrappedComponent = props[typePropName];\n  var registeredStyles = [cssProp];\n  var className = '';\n\n  if (typeof props.className === 'string') {\n    className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n  } else if (props.className != null) {\n    className = props.className + \" \";\n  }\n\n  var serialized = serializeStyles(registeredStyles, undefined, React.useContext(ThemeContext));\n\n  className += cache.key + \"-\" + serialized.name;\n  var newProps = {};\n\n  for (var _key2 in props) {\n    if (hasOwn.call(props, _key2) && _key2 !== 'css' && _key2 !== typePropName && (!isDevelopment )) {\n      newProps[_key2] = props[_key2];\n    }\n  }\n\n  newProps.className = className;\n\n  if (ref) {\n    newProps.ref = ref;\n  }\n\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n    cache: cache,\n    serialized: serialized,\n    isStringTag: typeof WrappedComponent === 'string'\n  }), /*#__PURE__*/React.createElement(WrappedComponent, newProps));\n});\n\nvar Emotion$1 = Emotion;\n\nexport { CacheProvider as C, Emotion$1 as E, ThemeContext as T, __unsafe_useEmotionCache as _, ThemeProvider as a, withTheme as b, createEmotionProps as c, hasOwn as h, isDevelopment as i, useTheme as u, withEmotionCache as w };\n","import { h as hasOwn, E as Emotion, c as createEmotionProps, w as withEmotionCache, T as ThemeContext, i as isDevelopment } from './emotion-element-f0de968e.browser.esm.js';\nexport { C as CacheProvider, T as ThemeContext, a as ThemeProvider, _ as __unsafe_useEmotionCache, u as useTheme, w as withEmotionCache, b as withTheme } from './emotion-element-f0de968e.browser.esm.js';\nimport * as React from 'react';\nimport { insertStyles, registerStyles, getRegisteredStyles } from '@emotion/utils';\nimport { useInsertionEffectWithLayoutFallback, useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\nimport { serializeStyles } from '@emotion/serialize';\nimport '@emotion/cache';\nimport '@babel/runtime/helpers/extends';\nimport '@emotion/weak-memoize';\nimport '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport 'hoist-non-react-statics';\n\nvar jsx = function jsx(type, props) {\n  // eslint-disable-next-line prefer-rest-params\n  var args = arguments;\n\n  if (props == null || !hasOwn.call(props, 'css')) {\n    return React.createElement.apply(undefined, args);\n  }\n\n  var argsLength = args.length;\n  var createElementArgArray = new Array(argsLength);\n  createElementArgArray[0] = Emotion;\n  createElementArgArray[1] = createEmotionProps(type, props);\n\n  for (var i = 2; i < argsLength; i++) {\n    createElementArgArray[i] = args[i];\n  }\n\n  return React.createElement.apply(null, createElementArgArray);\n};\n\n(function (_jsx) {\n  var JSX;\n\n  (function (_JSX) {})(JSX || (JSX = _jsx.JSX || (_jsx.JSX = {})));\n})(jsx || (jsx = {}));\n\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\n\nvar Global = /* #__PURE__ */withEmotionCache(function (props, cache) {\n\n  var styles = props.styles;\n  var serialized = serializeStyles([styles], undefined, React.useContext(ThemeContext));\n  // but it is based on a constant that will never change at runtime\n  // it's effectively like having two implementations and switching them out\n  // so it's not actually breaking anything\n\n\n  var sheetRef = React.useRef();\n  useInsertionEffectWithLayoutFallback(function () {\n    var key = cache.key + \"-global\"; // use case of https://github.com/emotion-js/emotion/issues/2675\n\n    var sheet = new cache.sheet.constructor({\n      key: key,\n      nonce: cache.sheet.nonce,\n      container: cache.sheet.container,\n      speedy: cache.sheet.isSpeedy\n    });\n    var rehydrating = false;\n    var node = document.querySelector(\"style[data-emotion=\\\"\" + key + \" \" + serialized.name + \"\\\"]\");\n\n    if (cache.sheet.tags.length) {\n      sheet.before = cache.sheet.tags[0];\n    }\n\n    if (node !== null) {\n      rehydrating = true; // clear the hash so this node won't be recognizable as rehydratable by other <Global/>s\n\n      node.setAttribute('data-emotion', key);\n      sheet.hydrate([node]);\n    }\n\n    sheetRef.current = [sheet, rehydrating];\n    return function () {\n      sheet.flush();\n    };\n  }, [cache]);\n  useInsertionEffectWithLayoutFallback(function () {\n    var sheetRefCurrent = sheetRef.current;\n    var sheet = sheetRefCurrent[0],\n        rehydrating = sheetRefCurrent[1];\n\n    if (rehydrating) {\n      sheetRefCurrent[1] = false;\n      return;\n    }\n\n    if (serialized.next !== undefined) {\n      // insert keyframes\n      insertStyles(cache, serialized.next, true);\n    }\n\n    if (sheet.tags.length) {\n      // if this doesn't exist then it will be null so the style element will be appended\n      var element = sheet.tags[sheet.tags.length - 1].nextElementSibling;\n      sheet.before = element;\n      sheet.flush();\n    }\n\n    cache.insert(\"\", serialized, sheet, false);\n  }, [cache, serialized.name]);\n  return null;\n});\n\nfunction css() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return serializeStyles(args);\n}\n\nfunction keyframes() {\n  var insertable = css.apply(void 0, arguments);\n  var name = \"animation-\" + insertable.name;\n  return {\n    name: name,\n    styles: \"@keyframes \" + name + \"{\" + insertable.styles + \"}\",\n    anim: 1,\n    toString: function toString() {\n      return \"_EMO_\" + this.name + \"_\" + this.styles + \"_EMO_\";\n    }\n  };\n}\n\nvar classnames = function classnames(args) {\n  var len = args.length;\n  var i = 0;\n  var cls = '';\n\n  for (; i < len; i++) {\n    var arg = args[i];\n    if (arg == null) continue;\n    var toAdd = void 0;\n\n    switch (typeof arg) {\n      case 'boolean':\n        break;\n\n      case 'object':\n        {\n          if (Array.isArray(arg)) {\n            toAdd = classnames(arg);\n          } else {\n\n            toAdd = '';\n\n            for (var k in arg) {\n              if (arg[k] && k) {\n                toAdd && (toAdd += ' ');\n                toAdd += k;\n              }\n            }\n          }\n\n          break;\n        }\n\n      default:\n        {\n          toAdd = arg;\n        }\n    }\n\n    if (toAdd) {\n      cls && (cls += ' ');\n      cls += toAdd;\n    }\n  }\n\n  return cls;\n};\n\nfunction merge(registered, css, className) {\n  var registeredStyles = [];\n  var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n  if (registeredStyles.length < 2) {\n    return className;\n  }\n\n  return rawClassName + css(registeredStyles);\n}\n\nvar Insertion = function Insertion(_ref) {\n  var cache = _ref.cache,\n      serializedArr = _ref.serializedArr;\n  useInsertionEffectAlwaysWithSyncFallback(function () {\n\n    for (var i = 0; i < serializedArr.length; i++) {\n      insertStyles(cache, serializedArr[i], false);\n    }\n  });\n\n  return null;\n};\n\nvar ClassNames = /* #__PURE__ */withEmotionCache(function (props, cache) {\n  var hasRendered = false;\n  var serializedArr = [];\n\n  var css = function css() {\n    if (hasRendered && isDevelopment) {\n      throw new Error('css can only be used during render');\n    }\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    var serialized = serializeStyles(args, cache.registered);\n    serializedArr.push(serialized); // registration has to happen here as the result of this might get consumed by `cx`\n\n    registerStyles(cache, serialized, false);\n    return cache.key + \"-\" + serialized.name;\n  };\n\n  var cx = function cx() {\n    if (hasRendered && isDevelopment) {\n      throw new Error('cx can only be used during render');\n    }\n\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    return merge(cache.registered, css, classnames(args));\n  };\n\n  var content = {\n    css: css,\n    cx: cx,\n    theme: React.useContext(ThemeContext)\n  };\n  var ele = props.children(content);\n  hasRendered = true;\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n    cache: cache,\n    serializedArr: serializedArr\n  }), ele);\n});\n\nexport { ClassNames, Global, jsx as createElement, css, jsx, keyframes };\n","function _taggedTemplateLiteral(e, t) {\n  return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, {\n    raw: {\n      value: Object.freeze(t)\n    }\n  }));\n}\nexport { _taggedTemplateLiteral as default };","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nconst yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);\nfunction getSideAxis(placement) {\n  return yAxisSides.has(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rlPlacement : lrPlacement;\n      return isStart ? lrPlacement : rlPlacement;\n    case 'left':\n    case 'right':\n      return isStart ? tbPlacement : btPlacement;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","function hasWindow() {\n  return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nconst invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);\n}\nconst tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);\nfunction isTableElement(element) {\n  return tableElements.has(getNodeName(element));\n}\nconst topLayerSelectors = [':popover-open', ':modal'];\nfunction isTopLayer(element) {\n  return topLayerSelectors.some(selector => {\n    try {\n      return element.matches(selector);\n    } catch (_e) {\n      return false;\n    }\n  });\n}\nconst transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];\nconst willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];\nconst containValues = ['paint', 'layout', 'strict', 'content'];\nfunction isContainingBlock(elementOrCss) {\n  const webkit = isWebKit();\n  const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n  return transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else if (isTopLayer(currentNode)) {\n      return null;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (typeof CSS === 'undefined' || !CSS.supports) return false;\n  return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nconst lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);\nfunction isLastTraversableNode(node) {\n  return lastTraversableNodeNames.has(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.scrollX,\n    scrollTop: element.scrollY\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    const frameElement = getFrameElement(win);\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle$1(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentWin = win;\n    let currentIFrame = getFrameElement(currentWin);\n    while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle$1(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentWin = getWindow(currentIFrame);\n      currentIFrame = getFrameElement(currentWin);\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n  const leftScroll = getNodeScroll(element).scrollLeft;\n  if (!rect) {\n    return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n  }\n  return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n  const htmlRect = documentElement.getBoundingClientRect();\n  const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n  const y = htmlRect.top + scroll.scrollTop;\n  return {\n    x,\n    y\n  };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isFixed = strategy === 'fixed';\n  const documentElement = getDocumentElement(offsetParent);\n  const topLayer = elements ? isTopLayer(elements.floating) : false;\n  if (offsetParent === documentElement || topLayer && isFixed) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle$1(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  const windowScrollbarX = getWindowScrollBarX(html);\n  // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n  // visual width of the <html> but this is not considered in the size\n  // of `html.clientWidth`.\n  if (windowScrollbarX <= 0) {\n    const doc = html.ownerDocument;\n    const body = doc.body;\n    const bodyStyles = getComputedStyle(body);\n    const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n    const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n    if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n      width -= clippingStableScrollbarWidth;\n    }\n  } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n    // If the <body> scrollbar is on the left, the width needs to be extended\n    // by the scrollbar amount so there isn't extra space on the right.\n    width += windowScrollbarX;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nconst absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport') {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y,\n      width: clippingAncestor.width,\n      height: clippingAncestor.height\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle$1(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstClippingAncestor = clippingAncestors[0];\n  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n  return {\n    width: clippingRect.right - clippingRect.left,\n    height: clippingRect.bottom - clippingRect.top,\n    x: clippingRect.left,\n    y: clippingRect.top\n  };\n}\n\nfunction getDimensions(element) {\n  const {\n    width,\n    height\n  } = getCssDimensions(element);\n  return {\n    width,\n    height\n  };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n\n  // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n  // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n  function setLeftRTLScrollbarOffset() {\n    offsets.x = getWindowScrollBarX(documentElement);\n  }\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      setLeftRTLScrollbarOffset();\n    }\n  }\n  if (isFixed && !isOffsetParentAnElement && documentElement) {\n    setLeftRTLScrollbarOffset();\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n  const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction isStaticPositioned(element) {\n  return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  let rawOffsetParent = element.offsetParent;\n\n  // Firefox returns the <html> element as the offsetParent if it's non-static,\n  // while Chrome and Safari return the <body> element. The <body> element must\n  // be used to perform the correct calculations even if the <html> element is\n  // non-static.\n  if (getDocumentElement(element) === rawOffsetParent) {\n    rawOffsetParent = rawOffsetParent.ownerDocument.body;\n  }\n  return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const win = getWindow(element);\n  if (isTopLayer(element)) {\n    return win;\n  }\n  if (!isHTMLElement(element)) {\n    let svgOffsetParent = getParentNode(element);\n    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n        return svgOffsetParent;\n      }\n      svgOffsetParent = getParentNode(svgOffsetParent);\n    }\n    return win;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n    return win;\n  }\n  return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  const floatingDimensions = await getDimensionsFn(data.floating);\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      width: floatingDimensions.width,\n      height: floatingDimensions.height\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    var _io;\n    clearTimeout(timeoutId);\n    (_io = io) == null || _io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const elementRectForRootMargin = element.getBoundingClientRect();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = elementRectForRootMargin;\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          // If the reference is clipped, the ratio is 0. Throttle the refresh\n          // to prevent an infinite loop of updates.\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 1000);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n        // It's possible that even though the ratio is reported as 1, the\n        // element is not actually fully within the IntersectionObserver's root\n        // area anymore. This can happen under performance constraints. This may\n        // be a bug in the browser's IntersectionObserver implementation. To\n        // work around this, we compare the element's bounding rect now with\n        // what it was at the time we created the IntersectionObserver. If they\n        // are not equal then the element moved, so we refresh.\n        refresh();\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (_e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          var _resizeObserver;\n          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    resizeObserver.observe(floating);\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _resizeObserver2;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo == null || cleanupIo();\n    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { useLayoutEffect } from 'react';\n\nvar index = useLayoutEffect ;\n\nexport { index as default };\n","import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport { jsx, keyframes, css as css$2 } from '@emotion/react';\nimport _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport _typeof from '@babel/runtime/helpers/esm/typeof';\nimport _taggedTemplateLiteral from '@babel/runtime/helpers/esm/taggedTemplateLiteral';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport { useContext, useRef, useState, useMemo, useCallback, createContext } from 'react';\nimport { createPortal } from 'react-dom';\nimport { autoUpdate } from '@floating-ui/dom';\nimport useLayoutEffect from 'use-isomorphic-layout-effect';\n\nvar _excluded$3 = [\"className\", \"clearValue\", \"cx\", \"getStyles\", \"getClassNames\", \"getValue\", \"hasValue\", \"isMulti\", \"isRtl\", \"options\", \"selectOption\", \"selectProps\", \"setValue\", \"theme\"];\n// ==============================\n// NO OP\n// ==============================\n\nvar noop = function noop() {};\n\n// ==============================\n// Class Name Prefixer\n// ==============================\n\n/**\n String representation of component state for styling with class names.\n\n Expects an array of strings OR a string/object pair:\n - className(['comp', 'comp-arg', 'comp-arg-2'])\n   @returns 'react-select__comp react-select__comp-arg react-select__comp-arg-2'\n - className('comp', { some: true, state: false })\n   @returns 'react-select__comp react-select__comp--some'\n*/\nfunction applyPrefixToName(prefix, name) {\n  if (!name) {\n    return prefix;\n  } else if (name[0] === '-') {\n    return prefix + name;\n  } else {\n    return prefix + '__' + name;\n  }\n}\nfunction classNames(prefix, state) {\n  for (var _len = arguments.length, classNameList = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n    classNameList[_key - 2] = arguments[_key];\n  }\n  var arr = [].concat(classNameList);\n  if (state && prefix) {\n    for (var key in state) {\n      if (state.hasOwnProperty(key) && state[key]) {\n        arr.push(\"\".concat(applyPrefixToName(prefix, key)));\n      }\n    }\n  }\n  return arr.filter(function (i) {\n    return i;\n  }).map(function (i) {\n    return String(i).trim();\n  }).join(' ');\n}\n// ==============================\n// Clean Value\n// ==============================\n\nvar cleanValue = function cleanValue(value) {\n  if (isArray(value)) return value.filter(Boolean);\n  if (_typeof(value) === 'object' && value !== null) return [value];\n  return [];\n};\n\n// ==============================\n// Clean Common Props\n// ==============================\n\nvar cleanCommonProps = function cleanCommonProps(props) {\n  //className\n  props.className;\n    props.clearValue;\n    props.cx;\n    props.getStyles;\n    props.getClassNames;\n    props.getValue;\n    props.hasValue;\n    props.isMulti;\n    props.isRtl;\n    props.options;\n    props.selectOption;\n    props.selectProps;\n    props.setValue;\n    props.theme;\n    var innerProps = _objectWithoutProperties(props, _excluded$3);\n  return _objectSpread({}, innerProps);\n};\n\n// ==============================\n// Get Style Props\n// ==============================\n\nvar getStyleProps = function getStyleProps(props, name, classNamesState) {\n  var cx = props.cx,\n    getStyles = props.getStyles,\n    getClassNames = props.getClassNames,\n    className = props.className;\n  return {\n    css: getStyles(name, props),\n    className: cx(classNamesState !== null && classNamesState !== void 0 ? classNamesState : {}, getClassNames(name, props), className)\n  };\n};\n\n// ==============================\n// Handle Input Change\n// ==============================\n\nfunction handleInputChange(inputValue, actionMeta, onInputChange) {\n  if (onInputChange) {\n    var _newValue = onInputChange(inputValue, actionMeta);\n    if (typeof _newValue === 'string') return _newValue;\n  }\n  return inputValue;\n}\n\n// ==============================\n// Scroll Helpers\n// ==============================\n\nfunction isDocumentElement(el) {\n  return [document.documentElement, document.body, window].indexOf(el) > -1;\n}\n\n// Normalized Scroll Top\n// ------------------------------\n\nfunction normalizedHeight(el) {\n  if (isDocumentElement(el)) {\n    return window.innerHeight;\n  }\n  return el.clientHeight;\n}\n\n// Normalized scrollTo & scrollTop\n// ------------------------------\n\nfunction getScrollTop(el) {\n  if (isDocumentElement(el)) {\n    return window.pageYOffset;\n  }\n  return el.scrollTop;\n}\nfunction scrollTo(el, top) {\n  // with a scroll distance, we perform scroll on the element\n  if (isDocumentElement(el)) {\n    window.scrollTo(0, top);\n    return;\n  }\n  el.scrollTop = top;\n}\n\n// Get Scroll Parent\n// ------------------------------\n\nfunction getScrollParent(element) {\n  var style = getComputedStyle(element);\n  var excludeStaticParent = style.position === 'absolute';\n  var overflowRx = /(auto|scroll)/;\n  if (style.position === 'fixed') return document.documentElement;\n  for (var parent = element; parent = parent.parentElement;) {\n    style = getComputedStyle(parent);\n    if (excludeStaticParent && style.position === 'static') {\n      continue;\n    }\n    if (overflowRx.test(style.overflow + style.overflowY + style.overflowX)) {\n      return parent;\n    }\n  }\n  return document.documentElement;\n}\n\n// Animated Scroll To\n// ------------------------------\n\n/**\n  @param t: time (elapsed)\n  @param b: initial value\n  @param c: amount of change\n  @param d: duration\n*/\nfunction easeOutCubic(t, b, c, d) {\n  return c * ((t = t / d - 1) * t * t + 1) + b;\n}\nfunction animatedScrollTo(element, to) {\n  var duration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 200;\n  var callback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : noop;\n  var start = getScrollTop(element);\n  var change = to - start;\n  var increment = 10;\n  var currentTime = 0;\n  function animateScroll() {\n    currentTime += increment;\n    var val = easeOutCubic(currentTime, start, change, duration);\n    scrollTo(element, val);\n    if (currentTime < duration) {\n      window.requestAnimationFrame(animateScroll);\n    } else {\n      callback(element);\n    }\n  }\n  animateScroll();\n}\n\n// Scroll Into View\n// ------------------------------\n\nfunction scrollIntoView(menuEl, focusedEl) {\n  var menuRect = menuEl.getBoundingClientRect();\n  var focusedRect = focusedEl.getBoundingClientRect();\n  var overScroll = focusedEl.offsetHeight / 3;\n  if (focusedRect.bottom + overScroll > menuRect.bottom) {\n    scrollTo(menuEl, Math.min(focusedEl.offsetTop + focusedEl.clientHeight - menuEl.offsetHeight + overScroll, menuEl.scrollHeight));\n  } else if (focusedRect.top - overScroll < menuRect.top) {\n    scrollTo(menuEl, Math.max(focusedEl.offsetTop - overScroll, 0));\n  }\n}\n\n// ==============================\n// Get bounding client object\n// ==============================\n\n// cannot get keys using array notation with DOMRect\nfunction getBoundingClientObj(element) {\n  var rect = element.getBoundingClientRect();\n  return {\n    bottom: rect.bottom,\n    height: rect.height,\n    left: rect.left,\n    right: rect.right,\n    top: rect.top,\n    width: rect.width\n  };\n}\n\n// ==============================\n// Touch Capability Detector\n// ==============================\n\nfunction isTouchCapable() {\n  try {\n    document.createEvent('TouchEvent');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n// ==============================\n// Mobile Device Detector\n// ==============================\n\nfunction isMobileDevice() {\n  try {\n    return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n  } catch (e) {\n    return false;\n  }\n}\n\n// ==============================\n// Passive Event Detector\n// ==============================\n\n// https://github.com/rafgraph/detect-it/blob/main/src/index.ts#L19-L36\nvar passiveOptionAccessed = false;\nvar options = {\n  get passive() {\n    return passiveOptionAccessed = true;\n  }\n};\n// check for SSR\nvar w = typeof window !== 'undefined' ? window : {};\nif (w.addEventListener && w.removeEventListener) {\n  w.addEventListener('p', noop, options);\n  w.removeEventListener('p', noop, false);\n}\nvar supportsPassiveEvents = passiveOptionAccessed;\nfunction notNullish(item) {\n  return item != null;\n}\nfunction isArray(arg) {\n  return Array.isArray(arg);\n}\nfunction valueTernary(isMulti, multiValue, singleValue) {\n  return isMulti ? multiValue : singleValue;\n}\nfunction singleValueAsValue(singleValue) {\n  return singleValue;\n}\nfunction multiValueAsValue(multiValue) {\n  return multiValue;\n}\nvar removeProps = function removeProps(propsObj) {\n  for (var _len2 = arguments.length, properties = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n    properties[_key2 - 1] = arguments[_key2];\n  }\n  var propsMap = Object.entries(propsObj).filter(function (_ref) {\n    var _ref2 = _slicedToArray(_ref, 1),\n      key = _ref2[0];\n    return !properties.includes(key);\n  });\n  return propsMap.reduce(function (newProps, _ref3) {\n    var _ref4 = _slicedToArray(_ref3, 2),\n      key = _ref4[0],\n      val = _ref4[1];\n    newProps[key] = val;\n    return newProps;\n  }, {});\n};\n\nfunction getMenuPlacement(_ref) {\n  var preferredMaxHeight = _ref.maxHeight,\n    menuEl = _ref.menuEl,\n    minHeight = _ref.minHeight,\n    preferredPlacement = _ref.placement,\n    shouldScroll = _ref.shouldScroll,\n    isFixedPosition = _ref.isFixedPosition,\n    controlHeight = _ref.controlHeight;\n  var scrollParent = getScrollParent(menuEl);\n  var defaultState = {\n    placement: 'bottom',\n    maxHeight: preferredMaxHeight\n  };\n\n  // something went wrong, return default state\n  if (!menuEl || !menuEl.offsetParent) return defaultState;\n\n  // we can't trust `scrollParent.scrollHeight` --> it may increase when\n  // the menu is rendered\n  var _scrollParent$getBoun = scrollParent.getBoundingClientRect(),\n    scrollHeight = _scrollParent$getBoun.height;\n  var _menuEl$getBoundingCl = menuEl.getBoundingClientRect(),\n    menuBottom = _menuEl$getBoundingCl.bottom,\n    menuHeight = _menuEl$getBoundingCl.height,\n    menuTop = _menuEl$getBoundingCl.top;\n  var _menuEl$offsetParent$ = menuEl.offsetParent.getBoundingClientRect(),\n    containerTop = _menuEl$offsetParent$.top;\n  var viewHeight = isFixedPosition ? window.innerHeight : normalizedHeight(scrollParent);\n  var scrollTop = getScrollTop(scrollParent);\n  var marginBottom = parseInt(getComputedStyle(menuEl).marginBottom, 10);\n  var marginTop = parseInt(getComputedStyle(menuEl).marginTop, 10);\n  var viewSpaceAbove = containerTop - marginTop;\n  var viewSpaceBelow = viewHeight - menuTop;\n  var scrollSpaceAbove = viewSpaceAbove + scrollTop;\n  var scrollSpaceBelow = scrollHeight - scrollTop - menuTop;\n  var scrollDown = menuBottom - viewHeight + scrollTop + marginBottom;\n  var scrollUp = scrollTop + menuTop - marginTop;\n  var scrollDuration = 160;\n  switch (preferredPlacement) {\n    case 'auto':\n    case 'bottom':\n      // 1: the menu will fit, do nothing\n      if (viewSpaceBelow >= menuHeight) {\n        return {\n          placement: 'bottom',\n          maxHeight: preferredMaxHeight\n        };\n      }\n\n      // 2: the menu will fit, if scrolled\n      if (scrollSpaceBelow >= menuHeight && !isFixedPosition) {\n        if (shouldScroll) {\n          animatedScrollTo(scrollParent, scrollDown, scrollDuration);\n        }\n        return {\n          placement: 'bottom',\n          maxHeight: preferredMaxHeight\n        };\n      }\n\n      // 3: the menu will fit, if constrained\n      if (!isFixedPosition && scrollSpaceBelow >= minHeight || isFixedPosition && viewSpaceBelow >= minHeight) {\n        if (shouldScroll) {\n          animatedScrollTo(scrollParent, scrollDown, scrollDuration);\n        }\n\n        // we want to provide as much of the menu as possible to the user,\n        // so give them whatever is available below rather than the minHeight.\n        var constrainedHeight = isFixedPosition ? viewSpaceBelow - marginBottom : scrollSpaceBelow - marginBottom;\n        return {\n          placement: 'bottom',\n          maxHeight: constrainedHeight\n        };\n      }\n\n      // 4. Forked beviour when there isn't enough space below\n\n      // AUTO: flip the menu, render above\n      if (preferredPlacement === 'auto' || isFixedPosition) {\n        // may need to be constrained after flipping\n        var _constrainedHeight = preferredMaxHeight;\n        var spaceAbove = isFixedPosition ? viewSpaceAbove : scrollSpaceAbove;\n        if (spaceAbove >= minHeight) {\n          _constrainedHeight = Math.min(spaceAbove - marginBottom - controlHeight, preferredMaxHeight);\n        }\n        return {\n          placement: 'top',\n          maxHeight: _constrainedHeight\n        };\n      }\n\n      // BOTTOM: allow browser to increase scrollable area and immediately set scroll\n      if (preferredPlacement === 'bottom') {\n        if (shouldScroll) {\n          scrollTo(scrollParent, scrollDown);\n        }\n        return {\n          placement: 'bottom',\n          maxHeight: preferredMaxHeight\n        };\n      }\n      break;\n    case 'top':\n      // 1: the menu will fit, do nothing\n      if (viewSpaceAbove >= menuHeight) {\n        return {\n          placement: 'top',\n          maxHeight: preferredMaxHeight\n        };\n      }\n\n      // 2: the menu will fit, if scrolled\n      if (scrollSpaceAbove >= menuHeight && !isFixedPosition) {\n        if (shouldScroll) {\n          animatedScrollTo(scrollParent, scrollUp, scrollDuration);\n        }\n        return {\n          placement: 'top',\n          maxHeight: preferredMaxHeight\n        };\n      }\n\n      // 3: the menu will fit, if constrained\n      if (!isFixedPosition && scrollSpaceAbove >= minHeight || isFixedPosition && viewSpaceAbove >= minHeight) {\n        var _constrainedHeight2 = preferredMaxHeight;\n\n        // we want to provide as much of the menu as possible to the user,\n        // so give them whatever is available below rather than the minHeight.\n        if (!isFixedPosition && scrollSpaceAbove >= minHeight || isFixedPosition && viewSpaceAbove >= minHeight) {\n          _constrainedHeight2 = isFixedPosition ? viewSpaceAbove - marginTop : scrollSpaceAbove - marginTop;\n        }\n        if (shouldScroll) {\n          animatedScrollTo(scrollParent, scrollUp, scrollDuration);\n        }\n        return {\n          placement: 'top',\n          maxHeight: _constrainedHeight2\n        };\n      }\n\n      // 4. not enough space, the browser WILL NOT increase scrollable area when\n      // absolutely positioned element rendered above the viewport (only below).\n      // Flip the menu, render below\n      return {\n        placement: 'bottom',\n        maxHeight: preferredMaxHeight\n      };\n    default:\n      throw new Error(\"Invalid placement provided \\\"\".concat(preferredPlacement, \"\\\".\"));\n  }\n  return defaultState;\n}\n\n// Menu Component\n// ------------------------------\n\nfunction alignToControl(placement) {\n  var placementToCSSProp = {\n    bottom: 'top',\n    top: 'bottom'\n  };\n  return placement ? placementToCSSProp[placement] : 'bottom';\n}\nvar coercePlacement = function coercePlacement(p) {\n  return p === 'auto' ? 'bottom' : p;\n};\nvar menuCSS = function menuCSS(_ref2, unstyled) {\n  var _objectSpread2;\n  var placement = _ref2.placement,\n    _ref2$theme = _ref2.theme,\n    borderRadius = _ref2$theme.borderRadius,\n    spacing = _ref2$theme.spacing,\n    colors = _ref2$theme.colors;\n  return _objectSpread((_objectSpread2 = {\n    label: 'menu'\n  }, _defineProperty(_objectSpread2, alignToControl(placement), '100%'), _defineProperty(_objectSpread2, \"position\", 'absolute'), _defineProperty(_objectSpread2, \"width\", '100%'), _defineProperty(_objectSpread2, \"zIndex\", 1), _objectSpread2), unstyled ? {} : {\n    backgroundColor: colors.neutral0,\n    borderRadius: borderRadius,\n    boxShadow: '0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1)',\n    marginBottom: spacing.menuGutter,\n    marginTop: spacing.menuGutter\n  });\n};\nvar PortalPlacementContext = /*#__PURE__*/createContext(null);\n\n// NOTE: internal only\nvar MenuPlacer = function MenuPlacer(props) {\n  var children = props.children,\n    minMenuHeight = props.minMenuHeight,\n    maxMenuHeight = props.maxMenuHeight,\n    menuPlacement = props.menuPlacement,\n    menuPosition = props.menuPosition,\n    menuShouldScrollIntoView = props.menuShouldScrollIntoView,\n    theme = props.theme;\n  var _ref3 = useContext(PortalPlacementContext) || {},\n    setPortalPlacement = _ref3.setPortalPlacement;\n  var ref = useRef(null);\n  var _useState = useState(maxMenuHeight),\n    _useState2 = _slicedToArray(_useState, 2),\n    maxHeight = _useState2[0],\n    setMaxHeight = _useState2[1];\n  var _useState3 = useState(null),\n    _useState4 = _slicedToArray(_useState3, 2),\n    placement = _useState4[0],\n    setPlacement = _useState4[1];\n  var controlHeight = theme.spacing.controlHeight;\n  useLayoutEffect(function () {\n    var menuEl = ref.current;\n    if (!menuEl) return;\n\n    // DO NOT scroll if position is fixed\n    var isFixedPosition = menuPosition === 'fixed';\n    var shouldScroll = menuShouldScrollIntoView && !isFixedPosition;\n    var state = getMenuPlacement({\n      maxHeight: maxMenuHeight,\n      menuEl: menuEl,\n      minHeight: minMenuHeight,\n      placement: menuPlacement,\n      shouldScroll: shouldScroll,\n      isFixedPosition: isFixedPosition,\n      controlHeight: controlHeight\n    });\n    setMaxHeight(state.maxHeight);\n    setPlacement(state.placement);\n    setPortalPlacement === null || setPortalPlacement === void 0 ? void 0 : setPortalPlacement(state.placement);\n  }, [maxMenuHeight, menuPlacement, menuPosition, menuShouldScrollIntoView, minMenuHeight, setPortalPlacement, controlHeight]);\n  return children({\n    ref: ref,\n    placerProps: _objectSpread(_objectSpread({}, props), {}, {\n      placement: placement || coercePlacement(menuPlacement),\n      maxHeight: maxHeight\n    })\n  });\n};\nvar Menu = function Menu(props) {\n  var children = props.children,\n    innerRef = props.innerRef,\n    innerProps = props.innerProps;\n  return jsx(\"div\", _extends({}, getStyleProps(props, 'menu', {\n    menu: true\n  }), {\n    ref: innerRef\n  }, innerProps), children);\n};\nvar Menu$1 = Menu;\n\n// ==============================\n// Menu List\n// ==============================\n\nvar menuListCSS = function menuListCSS(_ref4, unstyled) {\n  var maxHeight = _ref4.maxHeight,\n    baseUnit = _ref4.theme.spacing.baseUnit;\n  return _objectSpread({\n    maxHeight: maxHeight,\n    overflowY: 'auto',\n    position: 'relative',\n    // required for offset[Height, Top] > keyboard scroll\n    WebkitOverflowScrolling: 'touch'\n  }, unstyled ? {} : {\n    paddingBottom: baseUnit,\n    paddingTop: baseUnit\n  });\n};\nvar MenuList = function MenuList(props) {\n  var children = props.children,\n    innerProps = props.innerProps,\n    innerRef = props.innerRef,\n    isMulti = props.isMulti;\n  return jsx(\"div\", _extends({}, getStyleProps(props, 'menuList', {\n    'menu-list': true,\n    'menu-list--is-multi': isMulti\n  }), {\n    ref: innerRef\n  }, innerProps), children);\n};\n\n// ==============================\n// Menu Notices\n// ==============================\n\nvar noticeCSS = function noticeCSS(_ref5, unstyled) {\n  var _ref5$theme = _ref5.theme,\n    baseUnit = _ref5$theme.spacing.baseUnit,\n    colors = _ref5$theme.colors;\n  return _objectSpread({\n    textAlign: 'center'\n  }, unstyled ? {} : {\n    color: colors.neutral40,\n    padding: \"\".concat(baseUnit * 2, \"px \").concat(baseUnit * 3, \"px\")\n  });\n};\nvar noOptionsMessageCSS = noticeCSS;\nvar loadingMessageCSS = noticeCSS;\nvar NoOptionsMessage = function NoOptionsMessage(props) {\n  var children = props.children,\n    innerProps = props.innerProps;\n  return jsx(\"div\", _extends({}, getStyleProps(props, 'noOptionsMessage', {\n    'menu-notice': true,\n    'menu-notice--no-options': true\n  }), innerProps), children);\n};\nNoOptionsMessage.defaultProps = {\n  children: 'No options'\n};\nvar LoadingMessage = function LoadingMessage(props) {\n  var children = props.children,\n    innerProps = props.innerProps;\n  return jsx(\"div\", _extends({}, getStyleProps(props, 'loadingMessage', {\n    'menu-notice': true,\n    'menu-notice--loading': true\n  }), innerProps), children);\n};\nLoadingMessage.defaultProps = {\n  children: 'Loading...'\n};\n\n// ==============================\n// Menu Portal\n// ==============================\n\nvar menuPortalCSS = function menuPortalCSS(_ref6) {\n  var rect = _ref6.rect,\n    offset = _ref6.offset,\n    position = _ref6.position;\n  return {\n    left: rect.left,\n    position: position,\n    top: offset,\n    width: rect.width,\n    zIndex: 1\n  };\n};\nvar MenuPortal = function MenuPortal(props) {\n  var appendTo = props.appendTo,\n    children = props.children,\n    controlElement = props.controlElement,\n    innerProps = props.innerProps,\n    menuPlacement = props.menuPlacement,\n    menuPosition = props.menuPosition;\n  var menuPortalRef = useRef(null);\n  var cleanupRef = useRef(null);\n  var _useState5 = useState(coercePlacement(menuPlacement)),\n    _useState6 = _slicedToArray(_useState5, 2),\n    placement = _useState6[0],\n    setPortalPlacement = _useState6[1];\n  var portalPlacementContext = useMemo(function () {\n    return {\n      setPortalPlacement: setPortalPlacement\n    };\n  }, []);\n  var _useState7 = useState(null),\n    _useState8 = _slicedToArray(_useState7, 2),\n    computedPosition = _useState8[0],\n    setComputedPosition = _useState8[1];\n  var updateComputedPosition = useCallback(function () {\n    if (!controlElement) return;\n    var rect = getBoundingClientObj(controlElement);\n    var scrollDistance = menuPosition === 'fixed' ? 0 : window.pageYOffset;\n    var offset = rect[placement] + scrollDistance;\n    if (offset !== (computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.offset) || rect.left !== (computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.rect.left) || rect.width !== (computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.rect.width)) {\n      setComputedPosition({\n        offset: offset,\n        rect: rect\n      });\n    }\n  }, [controlElement, menuPosition, placement, computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.offset, computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.rect.left, computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.rect.width]);\n  useLayoutEffect(function () {\n    updateComputedPosition();\n  }, [updateComputedPosition]);\n  var runAutoUpdate = useCallback(function () {\n    if (typeof cleanupRef.current === 'function') {\n      cleanupRef.current();\n      cleanupRef.current = null;\n    }\n    if (controlElement && menuPortalRef.current) {\n      cleanupRef.current = autoUpdate(controlElement, menuPortalRef.current, updateComputedPosition, {\n        elementResize: 'ResizeObserver' in window\n      });\n    }\n  }, [controlElement, updateComputedPosition]);\n  useLayoutEffect(function () {\n    runAutoUpdate();\n  }, [runAutoUpdate]);\n  var setMenuPortalElement = useCallback(function (menuPortalElement) {\n    menuPortalRef.current = menuPortalElement;\n    runAutoUpdate();\n  }, [runAutoUpdate]);\n\n  // bail early if required elements aren't present\n  if (!appendTo && menuPosition !== 'fixed' || !computedPosition) return null;\n\n  // same wrapper element whether fixed or portalled\n  var menuWrapper = jsx(\"div\", _extends({\n    ref: setMenuPortalElement\n  }, getStyleProps(_objectSpread(_objectSpread({}, props), {}, {\n    offset: computedPosition.offset,\n    position: menuPosition,\n    rect: computedPosition.rect\n  }), 'menuPortal', {\n    'menu-portal': true\n  }), innerProps), children);\n  return jsx(PortalPlacementContext.Provider, {\n    value: portalPlacementContext\n  }, appendTo ? /*#__PURE__*/createPortal(menuWrapper, appendTo) : menuWrapper);\n};\n\n// ==============================\n// Root Container\n// ==============================\n\nvar containerCSS = function containerCSS(_ref) {\n  var isDisabled = _ref.isDisabled,\n    isRtl = _ref.isRtl;\n  return {\n    label: 'container',\n    direction: isRtl ? 'rtl' : undefined,\n    pointerEvents: isDisabled ? 'none' : undefined,\n    // cancel mouse events when disabled\n    position: 'relative'\n  };\n};\nvar SelectContainer = function SelectContainer(props) {\n  var children = props.children,\n    innerProps = props.innerProps,\n    isDisabled = props.isDisabled,\n    isRtl = props.isRtl;\n  return jsx(\"div\", _extends({}, getStyleProps(props, 'container', {\n    '--is-disabled': isDisabled,\n    '--is-rtl': isRtl\n  }), innerProps), children);\n};\n\n// ==============================\n// Value Container\n// ==============================\n\nvar valueContainerCSS = function valueContainerCSS(_ref2, unstyled) {\n  var spacing = _ref2.theme.spacing,\n    isMulti = _ref2.isMulti,\n    hasValue = _ref2.hasValue,\n    controlShouldRenderValue = _ref2.selectProps.controlShouldRenderValue;\n  return _objectSpread({\n    alignItems: 'center',\n    display: isMulti && hasValue && controlShouldRenderValue ? 'flex' : 'grid',\n    flex: 1,\n    flexWrap: 'wrap',\n    WebkitOverflowScrolling: 'touch',\n    position: 'relative',\n    overflow: 'hidden'\n  }, unstyled ? {} : {\n    padding: \"\".concat(spacing.baseUnit / 2, \"px \").concat(spacing.baseUnit * 2, \"px\")\n  });\n};\nvar ValueContainer = function ValueContainer(props) {\n  var children = props.children,\n    innerProps = props.innerProps,\n    isMulti = props.isMulti,\n    hasValue = props.hasValue;\n  return jsx(\"div\", _extends({}, getStyleProps(props, 'valueContainer', {\n    'value-container': true,\n    'value-container--is-multi': isMulti,\n    'value-container--has-value': hasValue\n  }), innerProps), children);\n};\n\n// ==============================\n// Indicator Container\n// ==============================\n\nvar indicatorsContainerCSS = function indicatorsContainerCSS() {\n  return {\n    alignItems: 'center',\n    alignSelf: 'stretch',\n    display: 'flex',\n    flexShrink: 0\n  };\n};\nvar IndicatorsContainer = function IndicatorsContainer(props) {\n  var children = props.children,\n    innerProps = props.innerProps;\n  return jsx(\"div\", _extends({}, getStyleProps(props, 'indicatorsContainer', {\n    indicators: true\n  }), innerProps), children);\n};\n\nvar _templateObject;\nvar _excluded$2 = [\"size\"];\nfunction _EMOTION_STRINGIFIED_CSS_ERROR__() { return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\"; }\n\n// ==============================\n// Dropdown & Clear Icons\n// ==============================\nvar _ref2 = process.env.NODE_ENV === \"production\" ? {\n  name: \"8mmkcg\",\n  styles: \"display:inline-block;fill:currentColor;line-height:1;stroke:currentColor;stroke-width:0\"\n} : {\n  name: \"tj5bde-Svg\",\n  styles: \"display:inline-block;fill:currentColor;line-height:1;stroke:currentColor;stroke-width:0;label:Svg;\",\n  map: \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGljYXRvcnMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlCSSIsImZpbGUiOiJpbmRpY2F0b3JzLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4LCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5cbmltcG9ydCB7XG4gIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lLFxuICBDU1NPYmplY3RXaXRoTGFiZWwsXG4gIEdyb3VwQmFzZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0U3R5bGVQcm9wcyB9IGZyb20gJy4uL3V0aWxzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEljb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgU3ZnID0gKHtcbiAgc2l6ZSxcbiAgLi4ucHJvcHNcbn06IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snc3ZnJ10gJiB7IHNpemU6IG51bWJlciB9KSA9PiAoXG4gIDxzdmdcbiAgICBoZWlnaHQ9e3NpemV9XG4gICAgd2lkdGg9e3NpemV9XG4gICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICBmb2N1c2FibGU9XCJmYWxzZVwiXG4gICAgY3NzPXt7XG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIGZpbGw6ICdjdXJyZW50Q29sb3InLFxuICAgICAgbGluZUhlaWdodDogMSxcbiAgICAgIHN0cm9rZTogJ2N1cnJlbnRDb2xvcicsXG4gICAgICBzdHJva2VXaWR0aDogMCxcbiAgICB9fVxuICAgIHsuLi5wcm9wc31cbiAgLz5cbik7XG5cbmV4cG9ydCB0eXBlIENyb3NzSWNvblByb3BzID0gSlNYLkludHJpbnNpY0VsZW1lbnRzWydzdmcnXSAmIHsgc2l6ZT86IG51bWJlciB9O1xuZXhwb3J0IGNvbnN0IENyb3NzSWNvbiA9IChwcm9wczogQ3Jvc3NJY29uUHJvcHMpID0+IChcbiAgPFN2ZyBzaXplPXsyMH0gey4uLnByb3BzfT5cbiAgICA8cGF0aCBkPVwiTTE0LjM0OCAxNC44NDljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDBsLTIuNjUxLTMuMDMwLTIuNjUxIDMuMDI5Yy0wLjQ2OSAwLjQ2OS0xLjIyOSAwLjQ2OS0xLjY5NyAwLTAuNDY5LTAuNDY5LTAuNDY5LTEuMjI5IDAtMS42OTdsMi43NTgtMy4xNS0yLjc1OS0zLjE1MmMtMC40NjktMC40NjktMC40NjktMS4yMjggMC0xLjY5N3MxLjIyOC0wLjQ2OSAxLjY5NyAwbDIuNjUyIDMuMDMxIDIuNjUxLTMuMDMxYzAuNDY5LTAuNDY5IDEuMjI4LTAuNDY5IDEuNjk3IDBzMC40NjkgMS4yMjkgMCAxLjY5N2wtMi43NTggMy4xNTIgMi43NTggMy4xNWMwLjQ2OSAwLjQ2OSAwLjQ2OSAxLjIyOSAwIDEuNjk4elwiIC8+XG4gIDwvU3ZnPlxuKTtcbmV4cG9ydCB0eXBlIERvd25DaGV2cm9uUHJvcHMgPSBKU1guSW50cmluc2ljRWxlbWVudHNbJ3N2ZyddICYgeyBzaXplPzogbnVtYmVyIH07XG5leHBvcnQgY29uc3QgRG93bkNoZXZyb24gPSAocHJvcHM6IERvd25DaGV2cm9uUHJvcHMpID0+IChcbiAgPFN2ZyBzaXplPXsyMH0gey4uLnByb3BzfT5cbiAgICA8cGF0aCBkPVwiTTQuNTE2IDcuNTQ4YzAuNDM2LTAuNDQ2IDEuMDQzLTAuNDgxIDEuNTc2IDBsMy45MDggMy43NDcgMy45MDgtMy43NDdjMC41MzMtMC40ODEgMS4xNDEtMC40NDYgMS41NzQgMCAwLjQzNiAwLjQ0NSAwLjQwOCAxLjE5NyAwIDEuNjE1LTAuNDA2IDAuNDE4LTQuNjk1IDQuNTAyLTQuNjk1IDQuNTAyLTAuMjE3IDAuMjIzLTAuNTAyIDAuMzM1LTAuNzg3IDAuMzM1cy0wLjU3LTAuMTEyLTAuNzg5LTAuMzM1YzAgMC00LjI4Ny00LjA4NC00LjY5NS00LjUwMnMtMC40MzYtMS4xNyAwLTEuNjE1elwiIC8+XG4gIDwvU3ZnPlxuKTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEJ1dHRvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8XG4gIE9wdGlvbiA9IHVua25vd24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuID0gYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPiA9IEdyb3VwQmFzZTxPcHRpb24+XG4+IGV4dGVuZHMgQ29tbW9uUHJvcHNBbmRDbGFzc05hbWU8T3B0aW9uLCBJc011bHRpLCBHcm91cD4ge1xuICAvKiogVGhlIGNoaWxkcmVuIHRvIGJlIHJlbmRlcmVkIGluc2lkZSB0aGUgaW5kaWNhdG9yLiAqL1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgLyoqIFByb3BzIHRoYXQgd2lsbCBiZSBwYXNzZWQgb24gdG8gdGhlIGNoaWxkcmVuLiAqL1xuICBpbm5lclByb3BzOiBKU1guSW50cmluc2ljRWxlbWVudHNbJ2RpdiddO1xuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpc0Rpc2FibGVkOiBib29sZWFuO1xufVxuXG5jb25zdCBiYXNlQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNGb2N1c2VkLFxuICAgIHRoZW1lOiB7XG4gICAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gICAgICBjb2xvcnMsXG4gICAgfSxcbiAgfTpcbiAgICB8IERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbiAgICB8IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4sXG4gIHVuc3R5bGVkOiBib29sZWFuXG4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdpbmRpY2F0b3JDb250YWluZXInLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIHRyYW5zaXRpb246ICdjb2xvciAxNTBtcycsXG4gIC4uLih1bnN0eWxlZFxuICAgID8ge31cbiAgICA6IHtcbiAgICAgICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgICAgICBwYWRkaW5nOiBiYXNlVW5pdCAqIDIsXG4gICAgICAgICc6aG92ZXInOiB7XG4gICAgICAgICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsODAgOiBjb2xvcnMubmV1dHJhbDQwLFxuICAgICAgICB9LFxuICAgICAgfSksXG59KTtcblxuZXhwb3J0IGNvbnN0IGRyb3Bkb3duSW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbmV4cG9ydCBjb25zdCBEcm9wZG93bkluZGljYXRvciA9IDxcbiAgT3B0aW9uLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPlxuPihcbiAgcHJvcHM6IERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBpbm5lclByb3BzIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2Ryb3Bkb3duSW5kaWNhdG9yJywge1xuICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICdkcm9wZG93bi1pbmRpY2F0b3InOiB0cnVlLFxuICAgICAgfSl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW4gfHwgPERvd25DaGV2cm9uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBDbGVhckluZGljYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgLyoqIFRoZSBjaGlsZHJlbiB0byBiZSByZW5kZXJlZCBpbnNpZGUgdGhlIGluZGljYXRvci4gKi9cbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydkaXYnXTtcbiAgLyoqIFRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBzZWxlY3QuICovXG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGNsZWFySW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbmV4cG9ydCBjb25zdCBDbGVhckluZGljYXRvciA9IDxcbiAgT3B0aW9uLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPlxuPihcbiAgcHJvcHM6IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBpbm5lclByb3BzIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2NsZWFySW5kaWNhdG9yJywge1xuICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICdjbGVhci1pbmRpY2F0b3InOiB0cnVlLFxuICAgICAgfSl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW4gfHwgPENyb3NzSWNvbiAvPn1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2VwYXJhdG9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBJbmRpY2F0b3JTZXBhcmF0b3JQcm9wczxcbiAgT3B0aW9uID0gdW5rbm93bixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4gPSBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+ID0gR3JvdXBCYXNlPE9wdGlvbj5cbj4gZXh0ZW5kcyBDb21tb25Qcm9wc0FuZENsYXNzTmFtZTxPcHRpb24sIElzTXVsdGksIEdyb3VwPiB7XG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbiAgaW5uZXJQcm9wcz86IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snc3BhbiddO1xufVxuXG5leHBvcnQgY29uc3QgaW5kaWNhdG9yU2VwYXJhdG9yQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNEaXNhYmxlZCxcbiAgICB0aGVtZToge1xuICAgICAgc3BhY2luZzogeyBiYXNlVW5pdCB9LFxuICAgICAgY29sb3JzLFxuICAgIH0sXG4gIH06IEluZGljYXRvclNlcGFyYXRvclByb3BzPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+LFxuICB1bnN0eWxlZDogYm9vbGVhblxuKTogQ1NTT2JqZWN0V2l0aExhYmVsID0+ICh7XG4gIGxhYmVsOiAnaW5kaWNhdG9yU2VwYXJhdG9yJyxcbiAgYWxpZ25TZWxmOiAnc3RyZXRjaCcsXG4gIHdpZHRoOiAxLFxuICAuLi4odW5zdHlsZWRcbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogaXNEaXNhYmxlZCA/IGNvbG9ycy5uZXV0cmFsMTAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgICAgICBtYXJnaW5Cb3R0b206IGJhc2VVbml0ICogMixcbiAgICAgICAgbWFyZ2luVG9wOiBiYXNlVW5pdCAqIDIsXG4gICAgICB9KSxcbn0pO1xuXG5leHBvcnQgY29uc3QgSW5kaWNhdG9yU2VwYXJhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICBwcm9wczogSW5kaWNhdG9yU2VwYXJhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICAgIHsuLi5nZXRTdHlsZVByb3BzKHByb3BzLCAnaW5kaWNhdG9yU2VwYXJhdG9yJywge1xuICAgICAgICAnaW5kaWNhdG9yLXNlcGFyYXRvcic6IHRydWUsXG4gICAgICB9KX1cbiAgICAvPlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMb2FkaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgbG9hZGluZ0RvdEFuaW1hdGlvbnMgPSBrZXlmcmFtZXNgXG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XG4gIDQwJSB7IG9wYWNpdHk6IDE7IH1cbmA7XG5cbmV4cG9ydCBjb25zdCBsb2FkaW5nSW5kaWNhdG9yQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNGb2N1c2VkLFxuICAgIHNpemUsXG4gICAgdGhlbWU6IHtcbiAgICAgIGNvbG9ycyxcbiAgICAgIHNwYWNpbmc6IHsgYmFzZVVuaXQgfSxcbiAgICB9LFxuICB9OiBMb2FkaW5nSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4sXG4gIHVuc3R5bGVkOiBib29sZWFuXG4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdsb2FkaW5nSW5kaWNhdG9yJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICB0cmFuc2l0aW9uOiAnY29sb3IgMTUwbXMnLFxuICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICBmb250U2l6ZTogc2l6ZSxcbiAgbGluZUhlaWdodDogMSxcbiAgbWFyZ2luUmlnaHQ6IHNpemUsXG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAuLi4odW5zdHlsZWRcbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICAgIGNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMubmV1dHJhbDYwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgICAgICAgcGFkZGluZzogYmFzZVVuaXQgKiAyLFxuICAgICAgfSksXG59KTtcblxuaW50ZXJmYWNlIExvYWRpbmdEb3RQcm9wcyB7XG4gIGRlbGF5OiBudW1iZXI7XG4gIG9mZnNldDogYm9vbGVhbjtcbn1cbmNvbnN0IExvYWRpbmdEb3QgPSAoeyBkZWxheSwgb2Zmc2V0IH06IExvYWRpbmdEb3RQcm9wcykgPT4gKFxuICA8c3BhblxuICAgIGNzcz17e1xuICAgICAgYW5pbWF0aW9uOiBgJHtsb2FkaW5nRG90QW5pbWF0aW9uc30gMXMgZWFzZS1pbi1vdXQgJHtkZWxheX1tcyBpbmZpbml0ZTtgLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnY3VycmVudENvbG9yJyxcbiAgICAgIGJvcmRlclJhZGl1czogJzFlbScsXG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIG1hcmdpbkxlZnQ6IG9mZnNldCA/ICcxZW0nIDogdW5kZWZpbmVkLFxuICAgICAgaGVpZ2h0OiAnMWVtJyxcbiAgICAgIHZlcnRpY2FsQWxpZ246ICd0b3AnLFxuICAgICAgd2lkdGg6ICcxZW0nLFxuICAgIH19XG4gIC8+XG4pO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRpbmdJbmRpY2F0b3JQcm9wczxcbiAgT3B0aW9uID0gdW5rbm93bixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4gPSBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+ID0gR3JvdXBCYXNlPE9wdGlvbj5cbj4gZXh0ZW5kcyBDb21tb25Qcm9wc0FuZENsYXNzTmFtZTxPcHRpb24sIElzTXVsdGksIEdyb3VwPiB7XG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydkaXYnXTtcbiAgLyoqIFRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBzZWxlY3QuICovXG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbiAgaXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgLyoqIFNldCBzaXplIG9mIHRoZSBjb250YWluZXIuICovXG4gIHNpemU6IG51bWJlcjtcbn1cbmV4cG9ydCBjb25zdCBMb2FkaW5nSW5kaWNhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICBwcm9wczogTG9hZGluZ0luZGljYXRvclByb3BzPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+XG4pID0+IHtcbiAgY29uc3QgeyBpbm5lclByb3BzLCBpc1J0bCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2xvYWRpbmdJbmRpY2F0b3InLCB7XG4gICAgICAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAgICAgJ2xvYWRpbmctaW5kaWNhdG9yJzogdHJ1ZSxcbiAgICAgIH0pfVxuICAgICAgey4uLmlubmVyUHJvcHN9XG4gICAgPlxuICAgICAgPExvYWRpbmdEb3QgZGVsYXk9ezB9IG9mZnNldD17aXNSdGx9IC8+XG4gICAgICA8TG9hZGluZ0RvdCBkZWxheT17MTYwfSBvZmZzZXQgLz5cbiAgICAgIDxMb2FkaW5nRG90IGRlbGF5PXszMjB9IG9mZnNldD17IWlzUnRsfSAvPlxuICAgIDwvZGl2PlxuICApO1xufTtcbkxvYWRpbmdJbmRpY2F0b3IuZGVmYXVsdFByb3BzID0geyBzaXplOiA0IH07XG4iXX0= */\",\n  toString: _EMOTION_STRINGIFIED_CSS_ERROR__\n};\nvar Svg = function Svg(_ref) {\n  var size = _ref.size,\n    props = _objectWithoutProperties(_ref, _excluded$2);\n  return jsx(\"svg\", _extends({\n    height: size,\n    width: size,\n    viewBox: \"0 0 20 20\",\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    css: _ref2\n  }, props));\n};\nvar CrossIcon = function CrossIcon(props) {\n  return jsx(Svg, _extends({\n    size: 20\n  }, props), jsx(\"path\", {\n    d: \"M14.348 14.849c-0.469 0.469-1.229 0.469-1.697 0l-2.651-3.030-2.651 3.029c-0.469 0.469-1.229 0.469-1.697 0-0.469-0.469-0.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-0.469-0.469-0.469-1.228 0-1.697s1.228-0.469 1.697 0l2.652 3.031 2.651-3.031c0.469-0.469 1.228-0.469 1.697 0s0.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c0.469 0.469 0.469 1.229 0 1.698z\"\n  }));\n};\nvar DownChevron = function DownChevron(props) {\n  return jsx(Svg, _extends({\n    size: 20\n  }, props), jsx(\"path\", {\n    d: \"M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z\"\n  }));\n};\n\n// ==============================\n// Dropdown & Clear Buttons\n// ==============================\n\nvar baseCSS = function baseCSS(_ref3, unstyled) {\n  var isFocused = _ref3.isFocused,\n    _ref3$theme = _ref3.theme,\n    baseUnit = _ref3$theme.spacing.baseUnit,\n    colors = _ref3$theme.colors;\n  return _objectSpread({\n    label: 'indicatorContainer',\n    display: 'flex',\n    transition: 'color 150ms'\n  }, unstyled ? {} : {\n    color: isFocused ? colors.neutral60 : colors.neutral20,\n    padding: baseUnit * 2,\n    ':hover': {\n      color: isFocused ? colors.neutral80 : colors.neutral40\n    }\n  });\n};\nvar dropdownIndicatorCSS = baseCSS;\nvar DropdownIndicator = function DropdownIndicator(props) {\n  var children = props.children,\n    innerProps = props.innerProps;\n  return jsx(\"div\", _extends({}, getStyleProps(props, 'dropdownIndicator', {\n    indicator: true,\n    'dropdown-indicator': true\n  }), innerProps), children || jsx(DownChevron, null));\n};\nvar clearIndicatorCSS = baseCSS;\nvar ClearIndicator = function ClearIndicator(props) {\n  var children = props.children,\n    innerProps = props.innerProps;\n  return jsx(\"div\", _extends({}, getStyleProps(props, 'clearIndicator', {\n    indicator: true,\n    'clear-indicator': true\n  }), innerProps), children || jsx(CrossIcon, null));\n};\n\n// ==============================\n// Separator\n// ==============================\n\nvar indicatorSeparatorCSS = function indicatorSeparatorCSS(_ref4, unstyled) {\n  var isDisabled = _ref4.isDisabled,\n    _ref4$theme = _ref4.theme,\n    baseUnit = _ref4$theme.spacing.baseUnit,\n    colors = _ref4$theme.colors;\n  return _objectSpread({\n    label: 'indicatorSeparator',\n    alignSelf: 'stretch',\n    width: 1\n  }, unstyled ? {} : {\n    backgroundColor: isDisabled ? colors.neutral10 : colors.neutral20,\n    marginBottom: baseUnit * 2,\n    marginTop: baseUnit * 2\n  });\n};\nvar IndicatorSeparator = function IndicatorSeparator(props) {\n  var innerProps = props.innerProps;\n  return jsx(\"span\", _extends({}, innerProps, getStyleProps(props, 'indicatorSeparator', {\n    'indicator-separator': true\n  })));\n};\n\n// ==============================\n// Loading\n// ==============================\n\nvar loadingDotAnimations = keyframes(_templateObject || (_templateObject = _taggedTemplateLiteral([\"\\n  0%, 80%, 100% { opacity: 0; }\\n  40% { opacity: 1; }\\n\"])));\nvar loadingIndicatorCSS = function loadingIndicatorCSS(_ref5, unstyled) {\n  var isFocused = _ref5.isFocused,\n    size = _ref5.size,\n    _ref5$theme = _ref5.theme,\n    colors = _ref5$theme.colors,\n    baseUnit = _ref5$theme.spacing.baseUnit;\n  return _objectSpread({\n    label: 'loadingIndicator',\n    display: 'flex',\n    transition: 'color 150ms',\n    alignSelf: 'center',\n    fontSize: size,\n    lineHeight: 1,\n    marginRight: size,\n    textAlign: 'center',\n    verticalAlign: 'middle'\n  }, unstyled ? {} : {\n    color: isFocused ? colors.neutral60 : colors.neutral20,\n    padding: baseUnit * 2\n  });\n};\nvar LoadingDot = function LoadingDot(_ref6) {\n  var delay = _ref6.delay,\n    offset = _ref6.offset;\n  return jsx(\"span\", {\n    css: /*#__PURE__*/css$2({\n      animation: \"\".concat(loadingDotAnimations, \" 1s ease-in-out \").concat(delay, \"ms infinite;\"),\n      backgroundColor: 'currentColor',\n      borderRadius: '1em',\n      display: 'inline-block',\n      marginLeft: offset ? '1em' : undefined,\n      height: '1em',\n      verticalAlign: 'top',\n      width: '1em'\n    }, process.env.NODE_ENV === \"production\" ? \"\" : \";label:LoadingDot;\", process.env.NODE_ENV === \"production\" ? \"\" : \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGljYXRvcnMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1RSSIsImZpbGUiOiJpbmRpY2F0b3JzLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4LCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5cbmltcG9ydCB7XG4gIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lLFxuICBDU1NPYmplY3RXaXRoTGFiZWwsXG4gIEdyb3VwQmFzZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0U3R5bGVQcm9wcyB9IGZyb20gJy4uL3V0aWxzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEljb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgU3ZnID0gKHtcbiAgc2l6ZSxcbiAgLi4ucHJvcHNcbn06IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snc3ZnJ10gJiB7IHNpemU6IG51bWJlciB9KSA9PiAoXG4gIDxzdmdcbiAgICBoZWlnaHQ9e3NpemV9XG4gICAgd2lkdGg9e3NpemV9XG4gICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICBmb2N1c2FibGU9XCJmYWxzZVwiXG4gICAgY3NzPXt7XG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIGZpbGw6ICdjdXJyZW50Q29sb3InLFxuICAgICAgbGluZUhlaWdodDogMSxcbiAgICAgIHN0cm9rZTogJ2N1cnJlbnRDb2xvcicsXG4gICAgICBzdHJva2VXaWR0aDogMCxcbiAgICB9fVxuICAgIHsuLi5wcm9wc31cbiAgLz5cbik7XG5cbmV4cG9ydCB0eXBlIENyb3NzSWNvblByb3BzID0gSlNYLkludHJpbnNpY0VsZW1lbnRzWydzdmcnXSAmIHsgc2l6ZT86IG51bWJlciB9O1xuZXhwb3J0IGNvbnN0IENyb3NzSWNvbiA9IChwcm9wczogQ3Jvc3NJY29uUHJvcHMpID0+IChcbiAgPFN2ZyBzaXplPXsyMH0gey4uLnByb3BzfT5cbiAgICA8cGF0aCBkPVwiTTE0LjM0OCAxNC44NDljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDBsLTIuNjUxLTMuMDMwLTIuNjUxIDMuMDI5Yy0wLjQ2OSAwLjQ2OS0xLjIyOSAwLjQ2OS0xLjY5NyAwLTAuNDY5LTAuNDY5LTAuNDY5LTEuMjI5IDAtMS42OTdsMi43NTgtMy4xNS0yLjc1OS0zLjE1MmMtMC40NjktMC40NjktMC40NjktMS4yMjggMC0xLjY5N3MxLjIyOC0wLjQ2OSAxLjY5NyAwbDIuNjUyIDMuMDMxIDIuNjUxLTMuMDMxYzAuNDY5LTAuNDY5IDEuMjI4LTAuNDY5IDEuNjk3IDBzMC40NjkgMS4yMjkgMCAxLjY5N2wtMi43NTggMy4xNTIgMi43NTggMy4xNWMwLjQ2OSAwLjQ2OSAwLjQ2OSAxLjIyOSAwIDEuNjk4elwiIC8+XG4gIDwvU3ZnPlxuKTtcbmV4cG9ydCB0eXBlIERvd25DaGV2cm9uUHJvcHMgPSBKU1guSW50cmluc2ljRWxlbWVudHNbJ3N2ZyddICYgeyBzaXplPzogbnVtYmVyIH07XG5leHBvcnQgY29uc3QgRG93bkNoZXZyb24gPSAocHJvcHM6IERvd25DaGV2cm9uUHJvcHMpID0+IChcbiAgPFN2ZyBzaXplPXsyMH0gey4uLnByb3BzfT5cbiAgICA8cGF0aCBkPVwiTTQuNTE2IDcuNTQ4YzAuNDM2LTAuNDQ2IDEuMDQzLTAuNDgxIDEuNTc2IDBsMy45MDggMy43NDcgMy45MDgtMy43NDdjMC41MzMtMC40ODEgMS4xNDEtMC40NDYgMS41NzQgMCAwLjQzNiAwLjQ0NSAwLjQwOCAxLjE5NyAwIDEuNjE1LTAuNDA2IDAuNDE4LTQuNjk1IDQuNTAyLTQuNjk1IDQuNTAyLTAuMjE3IDAuMjIzLTAuNTAyIDAuMzM1LTAuNzg3IDAuMzM1cy0wLjU3LTAuMTEyLTAuNzg5LTAuMzM1YzAgMC00LjI4Ny00LjA4NC00LjY5NS00LjUwMnMtMC40MzYtMS4xNyAwLTEuNjE1elwiIC8+XG4gIDwvU3ZnPlxuKTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEJ1dHRvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8XG4gIE9wdGlvbiA9IHVua25vd24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuID0gYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPiA9IEdyb3VwQmFzZTxPcHRpb24+XG4+IGV4dGVuZHMgQ29tbW9uUHJvcHNBbmRDbGFzc05hbWU8T3B0aW9uLCBJc011bHRpLCBHcm91cD4ge1xuICAvKiogVGhlIGNoaWxkcmVuIHRvIGJlIHJlbmRlcmVkIGluc2lkZSB0aGUgaW5kaWNhdG9yLiAqL1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgLyoqIFByb3BzIHRoYXQgd2lsbCBiZSBwYXNzZWQgb24gdG8gdGhlIGNoaWxkcmVuLiAqL1xuICBpbm5lclByb3BzOiBKU1guSW50cmluc2ljRWxlbWVudHNbJ2RpdiddO1xuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpc0Rpc2FibGVkOiBib29sZWFuO1xufVxuXG5jb25zdCBiYXNlQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNGb2N1c2VkLFxuICAgIHRoZW1lOiB7XG4gICAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gICAgICBjb2xvcnMsXG4gICAgfSxcbiAgfTpcbiAgICB8IERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbiAgICB8IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4sXG4gIHVuc3R5bGVkOiBib29sZWFuXG4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdpbmRpY2F0b3JDb250YWluZXInLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIHRyYW5zaXRpb246ICdjb2xvciAxNTBtcycsXG4gIC4uLih1bnN0eWxlZFxuICAgID8ge31cbiAgICA6IHtcbiAgICAgICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgICAgICBwYWRkaW5nOiBiYXNlVW5pdCAqIDIsXG4gICAgICAgICc6aG92ZXInOiB7XG4gICAgICAgICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsODAgOiBjb2xvcnMubmV1dHJhbDQwLFxuICAgICAgICB9LFxuICAgICAgfSksXG59KTtcblxuZXhwb3J0IGNvbnN0IGRyb3Bkb3duSW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbmV4cG9ydCBjb25zdCBEcm9wZG93bkluZGljYXRvciA9IDxcbiAgT3B0aW9uLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPlxuPihcbiAgcHJvcHM6IERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBpbm5lclByb3BzIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2Ryb3Bkb3duSW5kaWNhdG9yJywge1xuICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICdkcm9wZG93bi1pbmRpY2F0b3InOiB0cnVlLFxuICAgICAgfSl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW4gfHwgPERvd25DaGV2cm9uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBDbGVhckluZGljYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgLyoqIFRoZSBjaGlsZHJlbiB0byBiZSByZW5kZXJlZCBpbnNpZGUgdGhlIGluZGljYXRvci4gKi9cbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydkaXYnXTtcbiAgLyoqIFRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBzZWxlY3QuICovXG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGNsZWFySW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbmV4cG9ydCBjb25zdCBDbGVhckluZGljYXRvciA9IDxcbiAgT3B0aW9uLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPlxuPihcbiAgcHJvcHM6IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBpbm5lclByb3BzIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2NsZWFySW5kaWNhdG9yJywge1xuICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICdjbGVhci1pbmRpY2F0b3InOiB0cnVlLFxuICAgICAgfSl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW4gfHwgPENyb3NzSWNvbiAvPn1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2VwYXJhdG9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBJbmRpY2F0b3JTZXBhcmF0b3JQcm9wczxcbiAgT3B0aW9uID0gdW5rbm93bixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4gPSBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+ID0gR3JvdXBCYXNlPE9wdGlvbj5cbj4gZXh0ZW5kcyBDb21tb25Qcm9wc0FuZENsYXNzTmFtZTxPcHRpb24sIElzTXVsdGksIEdyb3VwPiB7XG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbiAgaW5uZXJQcm9wcz86IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snc3BhbiddO1xufVxuXG5leHBvcnQgY29uc3QgaW5kaWNhdG9yU2VwYXJhdG9yQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNEaXNhYmxlZCxcbiAgICB0aGVtZToge1xuICAgICAgc3BhY2luZzogeyBiYXNlVW5pdCB9LFxuICAgICAgY29sb3JzLFxuICAgIH0sXG4gIH06IEluZGljYXRvclNlcGFyYXRvclByb3BzPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+LFxuICB1bnN0eWxlZDogYm9vbGVhblxuKTogQ1NTT2JqZWN0V2l0aExhYmVsID0+ICh7XG4gIGxhYmVsOiAnaW5kaWNhdG9yU2VwYXJhdG9yJyxcbiAgYWxpZ25TZWxmOiAnc3RyZXRjaCcsXG4gIHdpZHRoOiAxLFxuICAuLi4odW5zdHlsZWRcbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogaXNEaXNhYmxlZCA/IGNvbG9ycy5uZXV0cmFsMTAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgICAgICBtYXJnaW5Cb3R0b206IGJhc2VVbml0ICogMixcbiAgICAgICAgbWFyZ2luVG9wOiBiYXNlVW5pdCAqIDIsXG4gICAgICB9KSxcbn0pO1xuXG5leHBvcnQgY29uc3QgSW5kaWNhdG9yU2VwYXJhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICBwcm9wczogSW5kaWNhdG9yU2VwYXJhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICAgIHsuLi5nZXRTdHlsZVByb3BzKHByb3BzLCAnaW5kaWNhdG9yU2VwYXJhdG9yJywge1xuICAgICAgICAnaW5kaWNhdG9yLXNlcGFyYXRvcic6IHRydWUsXG4gICAgICB9KX1cbiAgICAvPlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMb2FkaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgbG9hZGluZ0RvdEFuaW1hdGlvbnMgPSBrZXlmcmFtZXNgXG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XG4gIDQwJSB7IG9wYWNpdHk6IDE7IH1cbmA7XG5cbmV4cG9ydCBjb25zdCBsb2FkaW5nSW5kaWNhdG9yQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNGb2N1c2VkLFxuICAgIHNpemUsXG4gICAgdGhlbWU6IHtcbiAgICAgIGNvbG9ycyxcbiAgICAgIHNwYWNpbmc6IHsgYmFzZVVuaXQgfSxcbiAgICB9LFxuICB9OiBMb2FkaW5nSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4sXG4gIHVuc3R5bGVkOiBib29sZWFuXG4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdsb2FkaW5nSW5kaWNhdG9yJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICB0cmFuc2l0aW9uOiAnY29sb3IgMTUwbXMnLFxuICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICBmb250U2l6ZTogc2l6ZSxcbiAgbGluZUhlaWdodDogMSxcbiAgbWFyZ2luUmlnaHQ6IHNpemUsXG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAuLi4odW5zdHlsZWRcbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICAgIGNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMubmV1dHJhbDYwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgICAgICAgcGFkZGluZzogYmFzZVVuaXQgKiAyLFxuICAgICAgfSksXG59KTtcblxuaW50ZXJmYWNlIExvYWRpbmdEb3RQcm9wcyB7XG4gIGRlbGF5OiBudW1iZXI7XG4gIG9mZnNldDogYm9vbGVhbjtcbn1cbmNvbnN0IExvYWRpbmdEb3QgPSAoeyBkZWxheSwgb2Zmc2V0IH06IExvYWRpbmdEb3RQcm9wcykgPT4gKFxuICA8c3BhblxuICAgIGNzcz17e1xuICAgICAgYW5pbWF0aW9uOiBgJHtsb2FkaW5nRG90QW5pbWF0aW9uc30gMXMgZWFzZS1pbi1vdXQgJHtkZWxheX1tcyBpbmZpbml0ZTtgLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnY3VycmVudENvbG9yJyxcbiAgICAgIGJvcmRlclJhZGl1czogJzFlbScsXG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIG1hcmdpbkxlZnQ6IG9mZnNldCA/ICcxZW0nIDogdW5kZWZpbmVkLFxuICAgICAgaGVpZ2h0OiAnMWVtJyxcbiAgICAgIHZlcnRpY2FsQWxpZ246ICd0b3AnLFxuICAgICAgd2lkdGg6ICcxZW0nLFxuICAgIH19XG4gIC8+XG4pO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRpbmdJbmRpY2F0b3JQcm9wczxcbiAgT3B0aW9uID0gdW5rbm93bixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4gPSBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+ID0gR3JvdXBCYXNlPE9wdGlvbj5cbj4gZXh0ZW5kcyBDb21tb25Qcm9wc0FuZENsYXNzTmFtZTxPcHRpb24sIElzTXVsdGksIEdyb3VwPiB7XG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydkaXYnXTtcbiAgLyoqIFRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBzZWxlY3QuICovXG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbiAgaXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgLyoqIFNldCBzaXplIG9mIHRoZSBjb250YWluZXIuICovXG4gIHNpemU6IG51bWJlcjtcbn1cbmV4cG9ydCBjb25zdCBMb2FkaW5nSW5kaWNhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICBwcm9wczogTG9hZGluZ0luZGljYXRvclByb3BzPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+XG4pID0+IHtcbiAgY29uc3QgeyBpbm5lclByb3BzLCBpc1J0bCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2xvYWRpbmdJbmRpY2F0b3InLCB7XG4gICAgICAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAgICAgJ2xvYWRpbmctaW5kaWNhdG9yJzogdHJ1ZSxcbiAgICAgIH0pfVxuICAgICAgey4uLmlubmVyUHJvcHN9XG4gICAgPlxuICAgICAgPExvYWRpbmdEb3QgZGVsYXk9ezB9IG9mZnNldD17aXNSdGx9IC8+XG4gICAgICA8TG9hZGluZ0RvdCBkZWxheT17MTYwfSBvZmZzZXQgLz5cbiAgICAgIDxMb2FkaW5nRG90IGRlbGF5PXszMjB9IG9mZnNldD17IWlzUnRsfSAvPlxuICAgIDwvZGl2PlxuICApO1xufTtcbkxvYWRpbmdJbmRpY2F0b3IuZGVmYXVsdFByb3BzID0geyBzaXplOiA0IH07XG4iXX0= */\")\n  });\n};\nvar LoadingIndicator = function LoadingIndicator(props) {\n  var innerProps = props.innerProps,\n    isRtl = props.isRtl;\n  return jsx(\"div\", _extends({}, getStyleProps(props, 'loadingIndicator', {\n    indicator: true,\n    'loading-indicator': true\n  }), innerProps), jsx(LoadingDot, {\n    delay: 0,\n    offset: isRtl\n  }), jsx(LoadingDot, {\n    delay: 160,\n    offset: true\n  }), jsx(LoadingDot, {\n    delay: 320,\n    offset: !isRtl\n  }));\n};\nLoadingIndicator.defaultProps = {\n  size: 4\n};\n\nvar css$1 = function css(_ref, unstyled) {\n  var isDisabled = _ref.isDisabled,\n    isFocused = _ref.isFocused,\n    _ref$theme = _ref.theme,\n    colors = _ref$theme.colors,\n    borderRadius = _ref$theme.borderRadius,\n    spacing = _ref$theme.spacing;\n  return _objectSpread({\n    label: 'control',\n    alignItems: 'center',\n    cursor: 'default',\n    display: 'flex',\n    flexWrap: 'wrap',\n    justifyContent: 'space-between',\n    minHeight: spacing.controlHeight,\n    outline: '0 !important',\n    position: 'relative',\n    transition: 'all 100ms'\n  }, unstyled ? {} : {\n    backgroundColor: isDisabled ? colors.neutral5 : colors.neutral0,\n    borderColor: isDisabled ? colors.neutral10 : isFocused ? colors.primary : colors.neutral20,\n    borderRadius: borderRadius,\n    borderStyle: 'solid',\n    borderWidth: 1,\n    boxShadow: isFocused ? \"0 0 0 1px \".concat(colors.primary) : undefined,\n    '&:hover': {\n      borderColor: isFocused ? colors.primary : colors.neutral30\n    }\n  });\n};\nvar Control = function Control(props) {\n  var children = props.children,\n    isDisabled = props.isDisabled,\n    isFocused = props.isFocused,\n    innerRef = props.innerRef,\n    innerProps = props.innerProps,\n    menuIsOpen = props.menuIsOpen;\n  return jsx(\"div\", _extends({\n    ref: innerRef\n  }, getStyleProps(props, 'control', {\n    control: true,\n    'control--is-disabled': isDisabled,\n    'control--is-focused': isFocused,\n    'control--menu-is-open': menuIsOpen\n  }), innerProps), children);\n};\nvar Control$1 = Control;\n\nvar _excluded$1 = [\"data\"];\nvar groupCSS = function groupCSS(_ref, unstyled) {\n  var spacing = _ref.theme.spacing;\n  return unstyled ? {} : {\n    paddingBottom: spacing.baseUnit * 2,\n    paddingTop: spacing.baseUnit * 2\n  };\n};\nvar Group = function Group(props) {\n  var children = props.children,\n    cx = props.cx,\n    getStyles = props.getStyles,\n    getClassNames = props.getClassNames,\n    Heading = props.Heading,\n    headingProps = props.headingProps,\n    innerProps = props.innerProps,\n    label = props.label,\n    theme = props.theme,\n    selectProps = props.selectProps;\n  return jsx(\"div\", _extends({}, getStyleProps(props, 'group', {\n    group: true\n  }), innerProps), jsx(Heading, _extends({}, headingProps, {\n    selectProps: selectProps,\n    theme: theme,\n    getStyles: getStyles,\n    getClassNames: getClassNames,\n    cx: cx\n  }), label), jsx(\"div\", null, children));\n};\nvar groupHeadingCSS = function groupHeadingCSS(_ref2, unstyled) {\n  var _ref2$theme = _ref2.theme,\n    colors = _ref2$theme.colors,\n    spacing = _ref2$theme.spacing;\n  return _objectSpread({\n    label: 'group',\n    cursor: 'default',\n    display: 'block'\n  }, unstyled ? {} : {\n    color: colors.neutral40,\n    fontSize: '75%',\n    fontWeight: 500,\n    marginBottom: '0.25em',\n    paddingLeft: spacing.baseUnit * 3,\n    paddingRight: spacing.baseUnit * 3,\n    textTransform: 'uppercase'\n  });\n};\nvar GroupHeading = function GroupHeading(props) {\n  var _cleanCommonProps = cleanCommonProps(props);\n    _cleanCommonProps.data;\n    var innerProps = _objectWithoutProperties(_cleanCommonProps, _excluded$1);\n  return jsx(\"div\", _extends({}, getStyleProps(props, 'groupHeading', {\n    'group-heading': true\n  }), innerProps));\n};\nvar Group$1 = Group;\n\nvar _excluded = [\"innerRef\", \"isDisabled\", \"isHidden\", \"inputClassName\"];\nvar inputCSS = function inputCSS(_ref, unstyled) {\n  var isDisabled = _ref.isDisabled,\n    value = _ref.value,\n    _ref$theme = _ref.theme,\n    spacing = _ref$theme.spacing,\n    colors = _ref$theme.colors;\n  return _objectSpread(_objectSpread({\n    visibility: isDisabled ? 'hidden' : 'visible',\n    // force css to recompute when value change due to @emotion bug.\n    // We can remove it whenever the bug is fixed.\n    transform: value ? 'translateZ(0)' : ''\n  }, containerStyle), unstyled ? {} : {\n    margin: spacing.baseUnit / 2,\n    paddingBottom: spacing.baseUnit / 2,\n    paddingTop: spacing.baseUnit / 2,\n    color: colors.neutral80\n  });\n};\nvar spacingStyle = {\n  gridArea: '1 / 2',\n  font: 'inherit',\n  minWidth: '2px',\n  border: 0,\n  margin: 0,\n  outline: 0,\n  padding: 0\n};\nvar containerStyle = {\n  flex: '1 1 auto',\n  display: 'inline-grid',\n  gridArea: '1 / 1 / 2 / 3',\n  gridTemplateColumns: '0 min-content',\n  '&:after': _objectSpread({\n    content: 'attr(data-value) \" \"',\n    visibility: 'hidden',\n    whiteSpace: 'pre'\n  }, spacingStyle)\n};\nvar inputStyle = function inputStyle(isHidden) {\n  return _objectSpread({\n    label: 'input',\n    color: 'inherit',\n    background: 0,\n    opacity: isHidden ? 0 : 1,\n    width: '100%'\n  }, spacingStyle);\n};\nvar Input = function Input(props) {\n  var cx = props.cx,\n    value = props.value;\n  var _cleanCommonProps = cleanCommonProps(props),\n    innerRef = _cleanCommonProps.innerRef,\n    isDisabled = _cleanCommonProps.isDisabled,\n    isHidden = _cleanCommonProps.isHidden,\n    inputClassName = _cleanCommonProps.inputClassName,\n    innerProps = _objectWithoutProperties(_cleanCommonProps, _excluded);\n  return jsx(\"div\", _extends({}, getStyleProps(props, 'input', {\n    'input-container': true\n  }), {\n    \"data-value\": value || ''\n  }), jsx(\"input\", _extends({\n    className: cx({\n      input: true\n    }, inputClassName),\n    ref: innerRef,\n    style: inputStyle(isHidden),\n    disabled: isDisabled\n  }, innerProps)));\n};\nvar Input$1 = Input;\n\nvar multiValueCSS = function multiValueCSS(_ref, unstyled) {\n  var _ref$theme = _ref.theme,\n    spacing = _ref$theme.spacing,\n    borderRadius = _ref$theme.borderRadius,\n    colors = _ref$theme.colors;\n  return _objectSpread({\n    label: 'multiValue',\n    display: 'flex',\n    minWidth: 0\n  }, unstyled ? {} : {\n    backgroundColor: colors.neutral10,\n    borderRadius: borderRadius / 2,\n    margin: spacing.baseUnit / 2\n  });\n};\nvar multiValueLabelCSS = function multiValueLabelCSS(_ref2, unstyled) {\n  var _ref2$theme = _ref2.theme,\n    borderRadius = _ref2$theme.borderRadius,\n    colors = _ref2$theme.colors,\n    cropWithEllipsis = _ref2.cropWithEllipsis;\n  return _objectSpread({\n    overflow: 'hidden',\n    textOverflow: cropWithEllipsis || cropWithEllipsis === undefined ? 'ellipsis' : undefined,\n    whiteSpace: 'nowrap'\n  }, unstyled ? {} : {\n    borderRadius: borderRadius / 2,\n    color: colors.neutral80,\n    fontSize: '85%',\n    padding: 3,\n    paddingLeft: 6\n  });\n};\nvar multiValueRemoveCSS = function multiValueRemoveCSS(_ref3, unstyled) {\n  var _ref3$theme = _ref3.theme,\n    spacing = _ref3$theme.spacing,\n    borderRadius = _ref3$theme.borderRadius,\n    colors = _ref3$theme.colors,\n    isFocused = _ref3.isFocused;\n  return _objectSpread({\n    alignItems: 'center',\n    display: 'flex'\n  }, unstyled ? {} : {\n    borderRadius: borderRadius / 2,\n    backgroundColor: isFocused ? colors.dangerLight : undefined,\n    paddingLeft: spacing.baseUnit,\n    paddingRight: spacing.baseUnit,\n    ':hover': {\n      backgroundColor: colors.dangerLight,\n      color: colors.danger\n    }\n  });\n};\nvar MultiValueGeneric = function MultiValueGeneric(_ref4) {\n  var children = _ref4.children,\n    innerProps = _ref4.innerProps;\n  return jsx(\"div\", innerProps, children);\n};\nvar MultiValueContainer = MultiValueGeneric;\nvar MultiValueLabel = MultiValueGeneric;\nfunction MultiValueRemove(_ref5) {\n  var children = _ref5.children,\n    innerProps = _ref5.innerProps;\n  return jsx(\"div\", _extends({\n    role: \"button\"\n  }, innerProps), children || jsx(CrossIcon, {\n    size: 14\n  }));\n}\nvar MultiValue = function MultiValue(props) {\n  var children = props.children,\n    components = props.components,\n    data = props.data,\n    innerProps = props.innerProps,\n    isDisabled = props.isDisabled,\n    removeProps = props.removeProps,\n    selectProps = props.selectProps;\n  var Container = components.Container,\n    Label = components.Label,\n    Remove = components.Remove;\n  return jsx(Container, {\n    data: data,\n    innerProps: _objectSpread(_objectSpread({}, getStyleProps(props, 'multiValue', {\n      'multi-value': true,\n      'multi-value--is-disabled': isDisabled\n    })), innerProps),\n    selectProps: selectProps\n  }, jsx(Label, {\n    data: data,\n    innerProps: _objectSpread({}, getStyleProps(props, 'multiValueLabel', {\n      'multi-value__label': true\n    })),\n    selectProps: selectProps\n  }, children), jsx(Remove, {\n    data: data,\n    innerProps: _objectSpread(_objectSpread({}, getStyleProps(props, 'multiValueRemove', {\n      'multi-value__remove': true\n    })), {}, {\n      'aria-label': \"Remove \".concat(children || 'option')\n    }, removeProps),\n    selectProps: selectProps\n  }));\n};\nvar MultiValue$1 = MultiValue;\n\nvar optionCSS = function optionCSS(_ref, unstyled) {\n  var isDisabled = _ref.isDisabled,\n    isFocused = _ref.isFocused,\n    isSelected = _ref.isSelected,\n    _ref$theme = _ref.theme,\n    spacing = _ref$theme.spacing,\n    colors = _ref$theme.colors;\n  return _objectSpread({\n    label: 'option',\n    cursor: 'default',\n    display: 'block',\n    fontSize: 'inherit',\n    width: '100%',\n    userSelect: 'none',\n    WebkitTapHighlightColor: 'rgba(0, 0, 0, 0)'\n  }, unstyled ? {} : {\n    backgroundColor: isSelected ? colors.primary : isFocused ? colors.primary25 : 'transparent',\n    color: isDisabled ? colors.neutral20 : isSelected ? colors.neutral0 : 'inherit',\n    padding: \"\".concat(spacing.baseUnit * 2, \"px \").concat(spacing.baseUnit * 3, \"px\"),\n    // provide some affordance on touch devices\n    ':active': {\n      backgroundColor: !isDisabled ? isSelected ? colors.primary : colors.primary50 : undefined\n    }\n  });\n};\nvar Option = function Option(props) {\n  var children = props.children,\n    isDisabled = props.isDisabled,\n    isFocused = props.isFocused,\n    isSelected = props.isSelected,\n    innerRef = props.innerRef,\n    innerProps = props.innerProps;\n  return jsx(\"div\", _extends({}, getStyleProps(props, 'option', {\n    option: true,\n    'option--is-disabled': isDisabled,\n    'option--is-focused': isFocused,\n    'option--is-selected': isSelected\n  }), {\n    ref: innerRef,\n    \"aria-disabled\": isDisabled\n  }, innerProps), children);\n};\nvar Option$1 = Option;\n\nvar placeholderCSS = function placeholderCSS(_ref, unstyled) {\n  var _ref$theme = _ref.theme,\n    spacing = _ref$theme.spacing,\n    colors = _ref$theme.colors;\n  return _objectSpread({\n    label: 'placeholder',\n    gridArea: '1 / 1 / 2 / 3'\n  }, unstyled ? {} : {\n    color: colors.neutral50,\n    marginLeft: spacing.baseUnit / 2,\n    marginRight: spacing.baseUnit / 2\n  });\n};\nvar Placeholder = function Placeholder(props) {\n  var children = props.children,\n    innerProps = props.innerProps;\n  return jsx(\"div\", _extends({}, getStyleProps(props, 'placeholder', {\n    placeholder: true\n  }), innerProps), children);\n};\nvar Placeholder$1 = Placeholder;\n\nvar css = function css(_ref, unstyled) {\n  var isDisabled = _ref.isDisabled,\n    _ref$theme = _ref.theme,\n    spacing = _ref$theme.spacing,\n    colors = _ref$theme.colors;\n  return _objectSpread({\n    label: 'singleValue',\n    gridArea: '1 / 1 / 2 / 3',\n    maxWidth: '100%',\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap'\n  }, unstyled ? {} : {\n    color: isDisabled ? colors.neutral40 : colors.neutral80,\n    marginLeft: spacing.baseUnit / 2,\n    marginRight: spacing.baseUnit / 2\n  });\n};\nvar SingleValue = function SingleValue(props) {\n  var children = props.children,\n    isDisabled = props.isDisabled,\n    innerProps = props.innerProps;\n  return jsx(\"div\", _extends({}, getStyleProps(props, 'singleValue', {\n    'single-value': true,\n    'single-value--is-disabled': isDisabled\n  }), innerProps), children);\n};\nvar SingleValue$1 = SingleValue;\n\nvar components = {\n  ClearIndicator: ClearIndicator,\n  Control: Control$1,\n  DropdownIndicator: DropdownIndicator,\n  DownChevron: DownChevron,\n  CrossIcon: CrossIcon,\n  Group: Group$1,\n  GroupHeading: GroupHeading,\n  IndicatorsContainer: IndicatorsContainer,\n  IndicatorSeparator: IndicatorSeparator,\n  Input: Input$1,\n  LoadingIndicator: LoadingIndicator,\n  Menu: Menu$1,\n  MenuList: MenuList,\n  MenuPortal: MenuPortal,\n  LoadingMessage: LoadingMessage,\n  NoOptionsMessage: NoOptionsMessage,\n  MultiValue: MultiValue$1,\n  MultiValueContainer: MultiValueContainer,\n  MultiValueLabel: MultiValueLabel,\n  MultiValueRemove: MultiValueRemove,\n  Option: Option$1,\n  Placeholder: Placeholder$1,\n  SelectContainer: SelectContainer,\n  SingleValue: SingleValue$1,\n  ValueContainer: ValueContainer\n};\nvar defaultComponents = function defaultComponents(props) {\n  return _objectSpread(_objectSpread({}, components), props.components);\n};\n\nexport { isMobileDevice as A, multiValueAsValue as B, singleValueAsValue as C, valueTernary as D, classNames as E, defaultComponents as F, isDocumentElement as G, cleanValue as H, scrollIntoView as I, noop as J, notNullish as K, handleInputChange as L, MenuPlacer as M, clearIndicatorCSS as a, containerCSS as b, components as c, css$1 as d, dropdownIndicatorCSS as e, groupHeadingCSS as f, groupCSS as g, indicatorSeparatorCSS as h, indicatorsContainerCSS as i, inputCSS as j, loadingMessageCSS as k, loadingIndicatorCSS as l, menuCSS as m, menuListCSS as n, menuPortalCSS as o, multiValueCSS as p, multiValueLabelCSS as q, removeProps as r, supportsPassiveEvents as s, multiValueRemoveCSS as t, noOptionsMessageCSS as u, optionCSS as v, placeholderCSS as w, css as x, valueContainerCSS as y, isTouchCapable as z };\n","var safeIsNaN = Number.isNaN ||\n    function ponyfill(value) {\n        return typeof value === 'number' && value !== value;\n    };\nfunction isEqual(first, second) {\n    if (first === second) {\n        return true;\n    }\n    if (safeIsNaN(first) && safeIsNaN(second)) {\n        return true;\n    }\n    return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n    if (newInputs.length !== lastInputs.length) {\n        return false;\n    }\n    for (var i = 0; i < newInputs.length; i++) {\n        if (!isEqual(newInputs[i], lastInputs[i])) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n    if (isEqual === void 0) { isEqual = areInputsEqual; }\n    var cache = null;\n    function memoized() {\n        var newArgs = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            newArgs[_i] = arguments[_i];\n        }\n        if (cache && cache.lastThis === this && isEqual(newArgs, cache.lastArgs)) {\n            return cache.lastResult;\n        }\n        var lastResult = resultFn.apply(this, newArgs);\n        cache = {\n            lastResult: lastResult,\n            lastArgs: newArgs,\n            lastThis: this,\n        };\n        return lastResult;\n    }\n    memoized.clear = function clear() {\n        cache = null;\n    };\n    return memoized;\n}\n\nexport { memoizeOne as default };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport _createSuper from '@babel/runtime/helpers/esm/createSuper';\nimport _toConsumableArray from '@babel/runtime/helpers/esm/toConsumableArray';\nimport * as React from 'react';\nimport { useMemo, Fragment, useRef, useCallback, useEffect, Component } from 'react';\nimport { r as removeProps, s as supportsPassiveEvents, a as clearIndicatorCSS, b as containerCSS, d as css$1, e as dropdownIndicatorCSS, g as groupCSS, f as groupHeadingCSS, i as indicatorsContainerCSS, h as indicatorSeparatorCSS, j as inputCSS, l as loadingIndicatorCSS, k as loadingMessageCSS, m as menuCSS, n as menuListCSS, o as menuPortalCSS, p as multiValueCSS, q as multiValueLabelCSS, t as multiValueRemoveCSS, u as noOptionsMessageCSS, v as optionCSS, w as placeholderCSS, x as css$2, y as valueContainerCSS, z as isTouchCapable, A as isMobileDevice, B as multiValueAsValue, C as singleValueAsValue, D as valueTernary, E as classNames, F as defaultComponents, G as isDocumentElement, H as cleanValue, I as scrollIntoView, J as noop, M as MenuPlacer, K as notNullish } from './index-6ea50319.esm.js';\nimport { jsx, css } from '@emotion/react';\nimport memoizeOne from 'memoize-one';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\n\nfunction _EMOTION_STRINGIFIED_CSS_ERROR__$2() { return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\"; }\n\n// Assistive text to describe visual elements. Hidden for sighted users.\nvar _ref = process.env.NODE_ENV === \"production\" ? {\n  name: \"7pg0cj-a11yText\",\n  styles: \"label:a11yText;z-index:9999;border:0;clip:rect(1px, 1px, 1px, 1px);height:1px;width:1px;position:absolute;overflow:hidden;padding:0;white-space:nowrap\"\n} : {\n  name: \"1f43avz-a11yText-A11yText\",\n  styles: \"label:a11yText;z-index:9999;border:0;clip:rect(1px, 1px, 1px, 1px);height:1px;width:1px;position:absolute;overflow:hidden;padding:0;white-space:nowrap;label:A11yText;\",\n  map: \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkExMXlUZXh0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNSSIsImZpbGUiOiJBMTF5VGV4dC50c3giLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGpzeCBqc3ggKi9cbmltcG9ydCB7IGpzeCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcblxuLy8gQXNzaXN0aXZlIHRleHQgdG8gZGVzY3JpYmUgdmlzdWFsIGVsZW1lbnRzLiBIaWRkZW4gZm9yIHNpZ2h0ZWQgdXNlcnMuXG5jb25zdCBBMTF5VGV4dCA9IChwcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydzcGFuJ10pID0+IChcbiAgPHNwYW5cbiAgICBjc3M9e3tcbiAgICAgIGxhYmVsOiAnYTExeVRleHQnLFxuICAgICAgekluZGV4OiA5OTk5LFxuICAgICAgYm9yZGVyOiAwLFxuICAgICAgY2xpcDogJ3JlY3QoMXB4LCAxcHgsIDFweCwgMXB4KScsXG4gICAgICBoZWlnaHQ6IDEsXG4gICAgICB3aWR0aDogMSxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgcGFkZGluZzogMCxcbiAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIH19XG4gICAgey4uLnByb3BzfVxuICAvPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQTExeVRleHQ7XG4iXX0= */\",\n  toString: _EMOTION_STRINGIFIED_CSS_ERROR__$2\n};\nvar A11yText = function A11yText(props) {\n  return jsx(\"span\", _extends({\n    css: _ref\n  }, props));\n};\nvar A11yText$1 = A11yText;\n\nvar defaultAriaLiveMessages = {\n  guidance: function guidance(props) {\n    var isSearchable = props.isSearchable,\n      isMulti = props.isMulti,\n      isDisabled = props.isDisabled,\n      tabSelectsValue = props.tabSelectsValue,\n      context = props.context;\n    switch (context) {\n      case 'menu':\n        return \"Use Up and Down to choose options\".concat(isDisabled ? '' : ', press Enter to select the currently focused option', \", press Escape to exit the menu\").concat(tabSelectsValue ? ', press Tab to select the option and exit the menu' : '', \".\");\n      case 'input':\n        return \"\".concat(props['aria-label'] || 'Select', \" is focused \").concat(isSearchable ? ',type to refine list' : '', \", press Down to open the menu, \").concat(isMulti ? ' press left to focus selected values' : '');\n      case 'value':\n        return 'Use left and right to toggle between focused values, press Backspace to remove the currently focused value';\n      default:\n        return '';\n    }\n  },\n  onChange: function onChange(props) {\n    var action = props.action,\n      _props$label = props.label,\n      label = _props$label === void 0 ? '' : _props$label,\n      labels = props.labels,\n      isDisabled = props.isDisabled;\n    switch (action) {\n      case 'deselect-option':\n      case 'pop-value':\n      case 'remove-value':\n        return \"option \".concat(label, \", deselected.\");\n      case 'clear':\n        return 'All selected options have been cleared.';\n      case 'initial-input-focus':\n        return \"option\".concat(labels.length > 1 ? 's' : '', \" \").concat(labels.join(','), \", selected.\");\n      case 'select-option':\n        return isDisabled ? \"option \".concat(label, \" is disabled. Select another option.\") : \"option \".concat(label, \", selected.\");\n      default:\n        return '';\n    }\n  },\n  onFocus: function onFocus(props) {\n    var context = props.context,\n      focused = props.focused,\n      options = props.options,\n      _props$label2 = props.label,\n      label = _props$label2 === void 0 ? '' : _props$label2,\n      selectValue = props.selectValue,\n      isDisabled = props.isDisabled,\n      isSelected = props.isSelected;\n    var getArrayIndex = function getArrayIndex(arr, item) {\n      return arr && arr.length ? \"\".concat(arr.indexOf(item) + 1, \" of \").concat(arr.length) : '';\n    };\n    if (context === 'value' && selectValue) {\n      return \"value \".concat(label, \" focused, \").concat(getArrayIndex(selectValue, focused), \".\");\n    }\n    if (context === 'menu') {\n      var disabled = isDisabled ? ' disabled' : '';\n      var status = \"\".concat(isSelected ? 'selected' : 'focused').concat(disabled);\n      return \"option \".concat(label, \" \").concat(status, \", \").concat(getArrayIndex(options, focused), \".\");\n    }\n    return '';\n  },\n  onFilter: function onFilter(props) {\n    var inputValue = props.inputValue,\n      resultsMessage = props.resultsMessage;\n    return \"\".concat(resultsMessage).concat(inputValue ? ' for search term ' + inputValue : '', \".\");\n  }\n};\n\nvar LiveRegion = function LiveRegion(props) {\n  var ariaSelection = props.ariaSelection,\n    focusedOption = props.focusedOption,\n    focusedValue = props.focusedValue,\n    focusableOptions = props.focusableOptions,\n    isFocused = props.isFocused,\n    selectValue = props.selectValue,\n    selectProps = props.selectProps,\n    id = props.id;\n  var ariaLiveMessages = selectProps.ariaLiveMessages,\n    getOptionLabel = selectProps.getOptionLabel,\n    inputValue = selectProps.inputValue,\n    isMulti = selectProps.isMulti,\n    isOptionDisabled = selectProps.isOptionDisabled,\n    isSearchable = selectProps.isSearchable,\n    menuIsOpen = selectProps.menuIsOpen,\n    options = selectProps.options,\n    screenReaderStatus = selectProps.screenReaderStatus,\n    tabSelectsValue = selectProps.tabSelectsValue;\n  var ariaLabel = selectProps['aria-label'];\n  var ariaLive = selectProps['aria-live'];\n\n  // Update aria live message configuration when prop changes\n  var messages = useMemo(function () {\n    return _objectSpread(_objectSpread({}, defaultAriaLiveMessages), ariaLiveMessages || {});\n  }, [ariaLiveMessages]);\n\n  // Update aria live selected option when prop changes\n  var ariaSelected = useMemo(function () {\n    var message = '';\n    if (ariaSelection && messages.onChange) {\n      var option = ariaSelection.option,\n        selectedOptions = ariaSelection.options,\n        removedValue = ariaSelection.removedValue,\n        removedValues = ariaSelection.removedValues,\n        value = ariaSelection.value;\n      // select-option when !isMulti does not return option so we assume selected option is value\n      var asOption = function asOption(val) {\n        return !Array.isArray(val) ? val : null;\n      };\n\n      // If there is just one item from the action then get its label\n      var selected = removedValue || option || asOption(value);\n      var label = selected ? getOptionLabel(selected) : '';\n\n      // If there are multiple items from the action then return an array of labels\n      var multiSelected = selectedOptions || removedValues || undefined;\n      var labels = multiSelected ? multiSelected.map(getOptionLabel) : [];\n      var onChangeProps = _objectSpread({\n        // multiSelected items are usually items that have already been selected\n        // or set by the user as a default value so we assume they are not disabled\n        isDisabled: selected && isOptionDisabled(selected, selectValue),\n        label: label,\n        labels: labels\n      }, ariaSelection);\n      message = messages.onChange(onChangeProps);\n    }\n    return message;\n  }, [ariaSelection, messages, isOptionDisabled, selectValue, getOptionLabel]);\n  var ariaFocused = useMemo(function () {\n    var focusMsg = '';\n    var focused = focusedOption || focusedValue;\n    var isSelected = !!(focusedOption && selectValue && selectValue.includes(focusedOption));\n    if (focused && messages.onFocus) {\n      var onFocusProps = {\n        focused: focused,\n        label: getOptionLabel(focused),\n        isDisabled: isOptionDisabled(focused, selectValue),\n        isSelected: isSelected,\n        options: focusableOptions,\n        context: focused === focusedOption ? 'menu' : 'value',\n        selectValue: selectValue\n      };\n      focusMsg = messages.onFocus(onFocusProps);\n    }\n    return focusMsg;\n  }, [focusedOption, focusedValue, getOptionLabel, isOptionDisabled, messages, focusableOptions, selectValue]);\n  var ariaResults = useMemo(function () {\n    var resultsMsg = '';\n    if (menuIsOpen && options.length && messages.onFilter) {\n      var resultsMessage = screenReaderStatus({\n        count: focusableOptions.length\n      });\n      resultsMsg = messages.onFilter({\n        inputValue: inputValue,\n        resultsMessage: resultsMessage\n      });\n    }\n    return resultsMsg;\n  }, [focusableOptions, inputValue, menuIsOpen, messages, options, screenReaderStatus]);\n  var ariaGuidance = useMemo(function () {\n    var guidanceMsg = '';\n    if (messages.guidance) {\n      var context = focusedValue ? 'value' : menuIsOpen ? 'menu' : 'input';\n      guidanceMsg = messages.guidance({\n        'aria-label': ariaLabel,\n        context: context,\n        isDisabled: focusedOption && isOptionDisabled(focusedOption, selectValue),\n        isMulti: isMulti,\n        isSearchable: isSearchable,\n        tabSelectsValue: tabSelectsValue\n      });\n    }\n    return guidanceMsg;\n  }, [ariaLabel, focusedOption, focusedValue, isMulti, isOptionDisabled, isSearchable, menuIsOpen, messages, selectValue, tabSelectsValue]);\n  var ariaContext = \"\".concat(ariaFocused, \" \").concat(ariaResults, \" \").concat(ariaGuidance);\n  var ScreenReaderText = jsx(Fragment, null, jsx(\"span\", {\n    id: \"aria-selection\"\n  }, ariaSelected), jsx(\"span\", {\n    id: \"aria-context\"\n  }, ariaContext));\n  var isInitialFocus = (ariaSelection === null || ariaSelection === void 0 ? void 0 : ariaSelection.action) === 'initial-input-focus';\n  return jsx(Fragment, null, jsx(A11yText$1, {\n    id: id\n  }, isInitialFocus && ScreenReaderText), jsx(A11yText$1, {\n    \"aria-live\": ariaLive,\n    \"aria-atomic\": \"false\",\n    \"aria-relevant\": \"additions text\"\n  }, isFocused && !isInitialFocus && ScreenReaderText));\n};\nvar LiveRegion$1 = LiveRegion;\n\nvar diacritics = [{\n  base: 'A',\n  letters: \"A\\u24B6\\uFF21\\xC0\\xC1\\xC2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\xC3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\xC4\\u01DE\\u1EA2\\xC5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F\"\n}, {\n  base: 'AA',\n  letters: \"\\uA732\"\n}, {\n  base: 'AE',\n  letters: \"\\xC6\\u01FC\\u01E2\"\n}, {\n  base: 'AO',\n  letters: \"\\uA734\"\n}, {\n  base: 'AU',\n  letters: \"\\uA736\"\n}, {\n  base: 'AV',\n  letters: \"\\uA738\\uA73A\"\n}, {\n  base: 'AY',\n  letters: \"\\uA73C\"\n}, {\n  base: 'B',\n  letters: \"B\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181\"\n}, {\n  base: 'C',\n  letters: \"C\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\xC7\\u1E08\\u0187\\u023B\\uA73E\"\n}, {\n  base: 'D',\n  letters: \"D\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779\"\n}, {\n  base: 'DZ',\n  letters: \"\\u01F1\\u01C4\"\n}, {\n  base: 'Dz',\n  letters: \"\\u01F2\\u01C5\"\n}, {\n  base: 'E',\n  letters: \"E\\u24BA\\uFF25\\xC8\\xC9\\xCA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\xCB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E\"\n}, {\n  base: 'F',\n  letters: \"F\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B\"\n}, {\n  base: 'G',\n  letters: \"G\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E\"\n}, {\n  base: 'H',\n  letters: \"H\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D\"\n}, {\n  base: 'I',\n  letters: \"I\\u24BE\\uFF29\\xCC\\xCD\\xCE\\u0128\\u012A\\u012C\\u0130\\xCF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197\"\n}, {\n  base: 'J',\n  letters: \"J\\u24BF\\uFF2A\\u0134\\u0248\"\n}, {\n  base: 'K',\n  letters: \"K\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2\"\n}, {\n  base: 'L',\n  letters: \"L\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780\"\n}, {\n  base: 'LJ',\n  letters: \"\\u01C7\"\n}, {\n  base: 'Lj',\n  letters: \"\\u01C8\"\n}, {\n  base: 'M',\n  letters: \"M\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C\"\n}, {\n  base: 'N',\n  letters: \"N\\u24C3\\uFF2E\\u01F8\\u0143\\xD1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4\"\n}, {\n  base: 'NJ',\n  letters: \"\\u01CA\"\n}, {\n  base: 'Nj',\n  letters: \"\\u01CB\"\n}, {\n  base: 'O',\n  letters: \"O\\u24C4\\uFF2F\\xD2\\xD3\\xD4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\xD5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\xD6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\xD8\\u01FE\\u0186\\u019F\\uA74A\\uA74C\"\n}, {\n  base: 'OI',\n  letters: \"\\u01A2\"\n}, {\n  base: 'OO',\n  letters: \"\\uA74E\"\n}, {\n  base: 'OU',\n  letters: \"\\u0222\"\n}, {\n  base: 'P',\n  letters: \"P\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754\"\n}, {\n  base: 'Q',\n  letters: \"Q\\u24C6\\uFF31\\uA756\\uA758\\u024A\"\n}, {\n  base: 'R',\n  letters: \"R\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782\"\n}, {\n  base: 'S',\n  letters: \"S\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784\"\n}, {\n  base: 'T',\n  letters: \"T\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786\"\n}, {\n  base: 'TZ',\n  letters: \"\\uA728\"\n}, {\n  base: 'U',\n  letters: \"U\\u24CA\\uFF35\\xD9\\xDA\\xDB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\xDC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244\"\n}, {\n  base: 'V',\n  letters: \"V\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245\"\n}, {\n  base: 'VY',\n  letters: \"\\uA760\"\n}, {\n  base: 'W',\n  letters: \"W\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72\"\n}, {\n  base: 'X',\n  letters: \"X\\u24CD\\uFF38\\u1E8A\\u1E8C\"\n}, {\n  base: 'Y',\n  letters: \"Y\\u24CE\\uFF39\\u1EF2\\xDD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE\"\n}, {\n  base: 'Z',\n  letters: \"Z\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762\"\n}, {\n  base: 'a',\n  letters: \"a\\u24D0\\uFF41\\u1E9A\\xE0\\xE1\\xE2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\xE3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\xE4\\u01DF\\u1EA3\\xE5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250\"\n}, {\n  base: 'aa',\n  letters: \"\\uA733\"\n}, {\n  base: 'ae',\n  letters: \"\\xE6\\u01FD\\u01E3\"\n}, {\n  base: 'ao',\n  letters: \"\\uA735\"\n}, {\n  base: 'au',\n  letters: \"\\uA737\"\n}, {\n  base: 'av',\n  letters: \"\\uA739\\uA73B\"\n}, {\n  base: 'ay',\n  letters: \"\\uA73D\"\n}, {\n  base: 'b',\n  letters: \"b\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253\"\n}, {\n  base: 'c',\n  letters: \"c\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\xE7\\u1E09\\u0188\\u023C\\uA73F\\u2184\"\n}, {\n  base: 'd',\n  letters: \"d\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A\"\n}, {\n  base: 'dz',\n  letters: \"\\u01F3\\u01C6\"\n}, {\n  base: 'e',\n  letters: \"e\\u24D4\\uFF45\\xE8\\xE9\\xEA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\xEB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD\"\n}, {\n  base: 'f',\n  letters: \"f\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C\"\n}, {\n  base: 'g',\n  letters: \"g\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F\"\n}, {\n  base: 'h',\n  letters: \"h\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265\"\n}, {\n  base: 'hv',\n  letters: \"\\u0195\"\n}, {\n  base: 'i',\n  letters: \"i\\u24D8\\uFF49\\xEC\\xED\\xEE\\u0129\\u012B\\u012D\\xEF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131\"\n}, {\n  base: 'j',\n  letters: \"j\\u24D9\\uFF4A\\u0135\\u01F0\\u0249\"\n}, {\n  base: 'k',\n  letters: \"k\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3\"\n}, {\n  base: 'l',\n  letters: \"l\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747\"\n}, {\n  base: 'lj',\n  letters: \"\\u01C9\"\n}, {\n  base: 'm',\n  letters: \"m\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F\"\n}, {\n  base: 'n',\n  letters: \"n\\u24DD\\uFF4E\\u01F9\\u0144\\xF1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5\"\n}, {\n  base: 'nj',\n  letters: \"\\u01CC\"\n}, {\n  base: 'o',\n  letters: \"o\\u24DE\\uFF4F\\xF2\\xF3\\xF4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\xF5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\xF6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\xF8\\u01FF\\u0254\\uA74B\\uA74D\\u0275\"\n}, {\n  base: 'oi',\n  letters: \"\\u01A3\"\n}, {\n  base: 'ou',\n  letters: \"\\u0223\"\n}, {\n  base: 'oo',\n  letters: \"\\uA74F\"\n}, {\n  base: 'p',\n  letters: \"p\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755\"\n}, {\n  base: 'q',\n  letters: \"q\\u24E0\\uFF51\\u024B\\uA757\\uA759\"\n}, {\n  base: 'r',\n  letters: \"r\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783\"\n}, {\n  base: 's',\n  letters: \"s\\u24E2\\uFF53\\xDF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B\"\n}, {\n  base: 't',\n  letters: \"t\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787\"\n}, {\n  base: 'tz',\n  letters: \"\\uA729\"\n}, {\n  base: 'u',\n  letters: \"u\\u24E4\\uFF55\\xF9\\xFA\\xFB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\xFC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289\"\n}, {\n  base: 'v',\n  letters: \"v\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C\"\n}, {\n  base: 'vy',\n  letters: \"\\uA761\"\n}, {\n  base: 'w',\n  letters: \"w\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73\"\n}, {\n  base: 'x',\n  letters: \"x\\u24E7\\uFF58\\u1E8B\\u1E8D\"\n}, {\n  base: 'y',\n  letters: \"y\\u24E8\\uFF59\\u1EF3\\xFD\\u0177\\u1EF9\\u0233\\u1E8F\\xFF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF\"\n}, {\n  base: 'z',\n  letters: \"z\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763\"\n}];\nvar anyDiacritic = new RegExp('[' + diacritics.map(function (d) {\n  return d.letters;\n}).join('') + ']', 'g');\nvar diacriticToBase = {};\nfor (var i = 0; i < diacritics.length; i++) {\n  var diacritic = diacritics[i];\n  for (var j = 0; j < diacritic.letters.length; j++) {\n    diacriticToBase[diacritic.letters[j]] = diacritic.base;\n  }\n}\nvar stripDiacritics = function stripDiacritics(str) {\n  return str.replace(anyDiacritic, function (match) {\n    return diacriticToBase[match];\n  });\n};\n\nvar memoizedStripDiacriticsForInput = memoizeOne(stripDiacritics);\nvar trimString = function trimString(str) {\n  return str.replace(/^\\s+|\\s+$/g, '');\n};\nvar defaultStringify = function defaultStringify(option) {\n  return \"\".concat(option.label, \" \").concat(option.value);\n};\nvar createFilter = function createFilter(config) {\n  return function (option, rawInput) {\n    // eslint-disable-next-line no-underscore-dangle\n    if (option.data.__isNew__) return true;\n    var _ignoreCase$ignoreAcc = _objectSpread({\n        ignoreCase: true,\n        ignoreAccents: true,\n        stringify: defaultStringify,\n        trim: true,\n        matchFrom: 'any'\n      }, config),\n      ignoreCase = _ignoreCase$ignoreAcc.ignoreCase,\n      ignoreAccents = _ignoreCase$ignoreAcc.ignoreAccents,\n      stringify = _ignoreCase$ignoreAcc.stringify,\n      trim = _ignoreCase$ignoreAcc.trim,\n      matchFrom = _ignoreCase$ignoreAcc.matchFrom;\n    var input = trim ? trimString(rawInput) : rawInput;\n    var candidate = trim ? trimString(stringify(option)) : stringify(option);\n    if (ignoreCase) {\n      input = input.toLowerCase();\n      candidate = candidate.toLowerCase();\n    }\n    if (ignoreAccents) {\n      input = memoizedStripDiacriticsForInput(input);\n      candidate = stripDiacritics(candidate);\n    }\n    return matchFrom === 'start' ? candidate.substr(0, input.length) === input : candidate.indexOf(input) > -1;\n  };\n};\n\nvar _excluded = [\"innerRef\"];\nfunction DummyInput(_ref) {\n  var innerRef = _ref.innerRef,\n    props = _objectWithoutProperties(_ref, _excluded);\n  // Remove animation props not meant for HTML elements\n  var filteredProps = removeProps(props, 'onExited', 'in', 'enter', 'exit', 'appear');\n  return jsx(\"input\", _extends({\n    ref: innerRef\n  }, filteredProps, {\n    css: /*#__PURE__*/css({\n      label: 'dummyInput',\n      // get rid of any default styles\n      background: 0,\n      border: 0,\n      // important! this hides the flashing cursor\n      caretColor: 'transparent',\n      fontSize: 'inherit',\n      gridArea: '1 / 1 / 2 / 3',\n      outline: 0,\n      padding: 0,\n      // important! without `width` browsers won't allow focus\n      width: 1,\n      // remove cursor on desktop\n      color: 'transparent',\n      // remove cursor on mobile whilst maintaining \"scroll into view\" behaviour\n      left: -100,\n      opacity: 0,\n      position: 'relative',\n      transform: 'scale(.01)'\n    }, process.env.NODE_ENV === \"production\" ? \"\" : \";label:DummyInput;\", process.env.NODE_ENV === \"production\" ? \"\" : \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkR1bW15SW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlCTSIsImZpbGUiOiJEdW1teUlucHV0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgcmVtb3ZlUHJvcHMgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIER1bW15SW5wdXQoe1xuICBpbm5lclJlZixcbiAgLi4ucHJvcHNcbn06IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snaW5wdXQnXSAmIHtcbiAgcmVhZG9ubHkgaW5uZXJSZWY6IFJlZjxIVE1MSW5wdXRFbGVtZW50Pjtcbn0pIHtcbiAgLy8gUmVtb3ZlIGFuaW1hdGlvbiBwcm9wcyBub3QgbWVhbnQgZm9yIEhUTUwgZWxlbWVudHNcbiAgY29uc3QgZmlsdGVyZWRQcm9wcyA9IHJlbW92ZVByb3BzKFxuICAgIHByb3BzLFxuICAgICdvbkV4aXRlZCcsXG4gICAgJ2luJyxcbiAgICAnZW50ZXInLFxuICAgICdleGl0JyxcbiAgICAnYXBwZWFyJ1xuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICByZWY9e2lubmVyUmVmfVxuICAgICAgey4uLmZpbHRlcmVkUHJvcHN9XG4gICAgICBjc3M9e3tcbiAgICAgICAgbGFiZWw6ICdkdW1teUlucHV0JyxcbiAgICAgICAgLy8gZ2V0IHJpZCBvZiBhbnkgZGVmYXVsdCBzdHlsZXNcbiAgICAgICAgYmFja2dyb3VuZDogMCxcbiAgICAgICAgYm9yZGVyOiAwLFxuICAgICAgICAvLyBpbXBvcnRhbnQhIHRoaXMgaGlkZXMgdGhlIGZsYXNoaW5nIGN1cnNvclxuICAgICAgICBjYXJldENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgICAgICBncmlkQXJlYTogJzEgLyAxIC8gMiAvIDMnLFxuICAgICAgICBvdXRsaW5lOiAwLFxuICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAvLyBpbXBvcnRhbnQhIHdpdGhvdXQgYHdpZHRoYCBicm93c2VycyB3b24ndCBhbGxvdyBmb2N1c1xuICAgICAgICB3aWR0aDogMSxcblxuICAgICAgICAvLyByZW1vdmUgY3Vyc29yIG9uIGRlc2t0b3BcbiAgICAgICAgY29sb3I6ICd0cmFuc3BhcmVudCcsXG5cbiAgICAgICAgLy8gcmVtb3ZlIGN1cnNvciBvbiBtb2JpbGUgd2hpbHN0IG1haW50YWluaW5nIFwic2Nyb2xsIGludG8gdmlld1wiIGJlaGF2aW91clxuICAgICAgICBsZWZ0OiAtMTAwLFxuICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoLjAxKScsXG4gICAgICB9fVxuICAgIC8+XG4gICk7XG59XG4iXX0= */\")\n  }));\n}\n\nvar cancelScroll = function cancelScroll(event) {\n  event.preventDefault();\n  event.stopPropagation();\n};\nfunction useScrollCapture(_ref) {\n  var isEnabled = _ref.isEnabled,\n    onBottomArrive = _ref.onBottomArrive,\n    onBottomLeave = _ref.onBottomLeave,\n    onTopArrive = _ref.onTopArrive,\n    onTopLeave = _ref.onTopLeave;\n  var isBottom = useRef(false);\n  var isTop = useRef(false);\n  var touchStart = useRef(0);\n  var scrollTarget = useRef(null);\n  var handleEventDelta = useCallback(function (event, delta) {\n    if (scrollTarget.current === null) return;\n    var _scrollTarget$current = scrollTarget.current,\n      scrollTop = _scrollTarget$current.scrollTop,\n      scrollHeight = _scrollTarget$current.scrollHeight,\n      clientHeight = _scrollTarget$current.clientHeight;\n    var target = scrollTarget.current;\n    var isDeltaPositive = delta > 0;\n    var availableScroll = scrollHeight - clientHeight - scrollTop;\n    var shouldCancelScroll = false;\n\n    // reset bottom/top flags\n    if (availableScroll > delta && isBottom.current) {\n      if (onBottomLeave) onBottomLeave(event);\n      isBottom.current = false;\n    }\n    if (isDeltaPositive && isTop.current) {\n      if (onTopLeave) onTopLeave(event);\n      isTop.current = false;\n    }\n\n    // bottom limit\n    if (isDeltaPositive && delta > availableScroll) {\n      if (onBottomArrive && !isBottom.current) {\n        onBottomArrive(event);\n      }\n      target.scrollTop = scrollHeight;\n      shouldCancelScroll = true;\n      isBottom.current = true;\n\n      // top limit\n    } else if (!isDeltaPositive && -delta > scrollTop) {\n      if (onTopArrive && !isTop.current) {\n        onTopArrive(event);\n      }\n      target.scrollTop = 0;\n      shouldCancelScroll = true;\n      isTop.current = true;\n    }\n\n    // cancel scroll\n    if (shouldCancelScroll) {\n      cancelScroll(event);\n    }\n  }, [onBottomArrive, onBottomLeave, onTopArrive, onTopLeave]);\n  var onWheel = useCallback(function (event) {\n    handleEventDelta(event, event.deltaY);\n  }, [handleEventDelta]);\n  var onTouchStart = useCallback(function (event) {\n    // set touch start so we can calculate touchmove delta\n    touchStart.current = event.changedTouches[0].clientY;\n  }, []);\n  var onTouchMove = useCallback(function (event) {\n    var deltaY = touchStart.current - event.changedTouches[0].clientY;\n    handleEventDelta(event, deltaY);\n  }, [handleEventDelta]);\n  var startListening = useCallback(function (el) {\n    // bail early if no element is available to attach to\n    if (!el) return;\n    var notPassive = supportsPassiveEvents ? {\n      passive: false\n    } : false;\n    el.addEventListener('wheel', onWheel, notPassive);\n    el.addEventListener('touchstart', onTouchStart, notPassive);\n    el.addEventListener('touchmove', onTouchMove, notPassive);\n  }, [onTouchMove, onTouchStart, onWheel]);\n  var stopListening = useCallback(function (el) {\n    // bail early if no element is available to detach from\n    if (!el) return;\n    el.removeEventListener('wheel', onWheel, false);\n    el.removeEventListener('touchstart', onTouchStart, false);\n    el.removeEventListener('touchmove', onTouchMove, false);\n  }, [onTouchMove, onTouchStart, onWheel]);\n  useEffect(function () {\n    if (!isEnabled) return;\n    var element = scrollTarget.current;\n    startListening(element);\n    return function () {\n      stopListening(element);\n    };\n  }, [isEnabled, startListening, stopListening]);\n  return function (element) {\n    scrollTarget.current = element;\n  };\n}\n\nvar STYLE_KEYS = ['boxSizing', 'height', 'overflow', 'paddingRight', 'position'];\nvar LOCK_STYLES = {\n  boxSizing: 'border-box',\n  // account for possible declaration `width: 100%;` on body\n  overflow: 'hidden',\n  position: 'relative',\n  height: '100%'\n};\nfunction preventTouchMove(e) {\n  e.preventDefault();\n}\nfunction allowTouchMove(e) {\n  e.stopPropagation();\n}\nfunction preventInertiaScroll() {\n  var top = this.scrollTop;\n  var totalScroll = this.scrollHeight;\n  var currentScroll = top + this.offsetHeight;\n  if (top === 0) {\n    this.scrollTop = 1;\n  } else if (currentScroll === totalScroll) {\n    this.scrollTop = top - 1;\n  }\n}\n\n// `ontouchstart` check works on most browsers\n// `maxTouchPoints` works on IE10/11 and Surface\nfunction isTouchDevice() {\n  return 'ontouchstart' in window || navigator.maxTouchPoints;\n}\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nvar activeScrollLocks = 0;\nvar listenerOptions = {\n  capture: false,\n  passive: false\n};\nfunction useScrollLock(_ref) {\n  var isEnabled = _ref.isEnabled,\n    _ref$accountForScroll = _ref.accountForScrollbars,\n    accountForScrollbars = _ref$accountForScroll === void 0 ? true : _ref$accountForScroll;\n  var originalStyles = useRef({});\n  var scrollTarget = useRef(null);\n  var addScrollLock = useCallback(function (touchScrollTarget) {\n    if (!canUseDOM) return;\n    var target = document.body;\n    var targetStyle = target && target.style;\n    if (accountForScrollbars) {\n      // store any styles already applied to the body\n      STYLE_KEYS.forEach(function (key) {\n        var val = targetStyle && targetStyle[key];\n        originalStyles.current[key] = val;\n      });\n    }\n\n    // apply the lock styles and padding if this is the first scroll lock\n    if (accountForScrollbars && activeScrollLocks < 1) {\n      var currentPadding = parseInt(originalStyles.current.paddingRight, 10) || 0;\n      var clientWidth = document.body ? document.body.clientWidth : 0;\n      var adjustedPadding = window.innerWidth - clientWidth + currentPadding || 0;\n      Object.keys(LOCK_STYLES).forEach(function (key) {\n        var val = LOCK_STYLES[key];\n        if (targetStyle) {\n          targetStyle[key] = val;\n        }\n      });\n      if (targetStyle) {\n        targetStyle.paddingRight = \"\".concat(adjustedPadding, \"px\");\n      }\n    }\n\n    // account for touch devices\n    if (target && isTouchDevice()) {\n      // Mobile Safari ignores { overflow: hidden } declaration on the body.\n      target.addEventListener('touchmove', preventTouchMove, listenerOptions);\n\n      // Allow scroll on provided target\n      if (touchScrollTarget) {\n        touchScrollTarget.addEventListener('touchstart', preventInertiaScroll, listenerOptions);\n        touchScrollTarget.addEventListener('touchmove', allowTouchMove, listenerOptions);\n      }\n    }\n\n    // increment active scroll locks\n    activeScrollLocks += 1;\n  }, [accountForScrollbars]);\n  var removeScrollLock = useCallback(function (touchScrollTarget) {\n    if (!canUseDOM) return;\n    var target = document.body;\n    var targetStyle = target && target.style;\n\n    // safely decrement active scroll locks\n    activeScrollLocks = Math.max(activeScrollLocks - 1, 0);\n\n    // reapply original body styles, if any\n    if (accountForScrollbars && activeScrollLocks < 1) {\n      STYLE_KEYS.forEach(function (key) {\n        var val = originalStyles.current[key];\n        if (targetStyle) {\n          targetStyle[key] = val;\n        }\n      });\n    }\n\n    // remove touch listeners\n    if (target && isTouchDevice()) {\n      target.removeEventListener('touchmove', preventTouchMove, listenerOptions);\n      if (touchScrollTarget) {\n        touchScrollTarget.removeEventListener('touchstart', preventInertiaScroll, listenerOptions);\n        touchScrollTarget.removeEventListener('touchmove', allowTouchMove, listenerOptions);\n      }\n    }\n  }, [accountForScrollbars]);\n  useEffect(function () {\n    if (!isEnabled) return;\n    var element = scrollTarget.current;\n    addScrollLock(element);\n    return function () {\n      removeScrollLock(element);\n    };\n  }, [isEnabled, addScrollLock, removeScrollLock]);\n  return function (element) {\n    scrollTarget.current = element;\n  };\n}\n\nfunction _EMOTION_STRINGIFIED_CSS_ERROR__$1() { return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\"; }\nvar blurSelectInput = function blurSelectInput() {\n  return document.activeElement && document.activeElement.blur();\n};\nvar _ref2$1 = process.env.NODE_ENV === \"production\" ? {\n  name: \"1kfdb0e\",\n  styles: \"position:fixed;left:0;bottom:0;right:0;top:0\"\n} : {\n  name: \"bp8cua-ScrollManager\",\n  styles: \"position:fixed;left:0;bottom:0;right:0;top:0;label:ScrollManager;\",\n  map: \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNjcm9sbE1hbmFnZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStDVSIsImZpbGUiOiJTY3JvbGxNYW5hZ2VyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsganN4IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgRnJhZ21lbnQsIFJlYWN0RWxlbWVudCwgUmVmQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlU2Nyb2xsQ2FwdHVyZSBmcm9tICcuL3VzZVNjcm9sbENhcHR1cmUnO1xuaW1wb3J0IHVzZVNjcm9sbExvY2sgZnJvbSAnLi91c2VTY3JvbGxMb2NrJztcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgcmVhZG9ubHkgY2hpbGRyZW46IChyZWY6IFJlZkNhbGxiYWNrPEhUTUxFbGVtZW50PikgPT4gUmVhY3RFbGVtZW50O1xuICByZWFkb25seSBsb2NrRW5hYmxlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2FwdHVyZUVuYWJsZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IG9uQm90dG9tQXJyaXZlPzogKGV2ZW50OiBXaGVlbEV2ZW50IHwgVG91Y2hFdmVudCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgb25Cb3R0b21MZWF2ZT86IChldmVudDogV2hlZWxFdmVudCB8IFRvdWNoRXZlbnQpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IG9uVG9wQXJyaXZlPzogKGV2ZW50OiBXaGVlbEV2ZW50IHwgVG91Y2hFdmVudCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgb25Ub3BMZWF2ZT86IChldmVudDogV2hlZWxFdmVudCB8IFRvdWNoRXZlbnQpID0+IHZvaWQ7XG59XG5cbmNvbnN0IGJsdXJTZWxlY3RJbnB1dCA9ICgpID0+XG4gIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmJsdXIoKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU2Nyb2xsTWFuYWdlcih7XG4gIGNoaWxkcmVuLFxuICBsb2NrRW5hYmxlZCxcbiAgY2FwdHVyZUVuYWJsZWQgPSB0cnVlLFxuICBvbkJvdHRvbUFycml2ZSxcbiAgb25Cb3R0b21MZWF2ZSxcbiAgb25Ub3BBcnJpdmUsXG4gIG9uVG9wTGVhdmUsXG59OiBQcm9wcykge1xuICBjb25zdCBzZXRTY3JvbGxDYXB0dXJlVGFyZ2V0ID0gdXNlU2Nyb2xsQ2FwdHVyZSh7XG4gICAgaXNFbmFibGVkOiBjYXB0dXJlRW5hYmxlZCxcbiAgICBvbkJvdHRvbUFycml2ZSxcbiAgICBvbkJvdHRvbUxlYXZlLFxuICAgIG9uVG9wQXJyaXZlLFxuICAgIG9uVG9wTGVhdmUsXG4gIH0pO1xuICBjb25zdCBzZXRTY3JvbGxMb2NrVGFyZ2V0ID0gdXNlU2Nyb2xsTG9jayh7IGlzRW5hYmxlZDogbG9ja0VuYWJsZWQgfSk7XG5cbiAgY29uc3QgdGFyZ2V0UmVmOiBSZWZDYWxsYmFjazxIVE1MRWxlbWVudD4gPSAoZWxlbWVudCkgPT4ge1xuICAgIHNldFNjcm9sbENhcHR1cmVUYXJnZXQoZWxlbWVudCk7XG4gICAgc2V0U2Nyb2xsTG9ja1RhcmdldChlbGVtZW50KTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxGcmFnbWVudD5cbiAgICAgIHtsb2NrRW5hYmxlZCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBvbkNsaWNrPXtibHVyU2VsZWN0SW5wdXR9XG4gICAgICAgICAgY3NzPXt7IHBvc2l0aW9uOiAnZml4ZWQnLCBsZWZ0OiAwLCBib3R0b206IDAsIHJpZ2h0OiAwLCB0b3A6IDAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7Y2hpbGRyZW4odGFyZ2V0UmVmKX1cbiAgICA8L0ZyYWdtZW50PlxuICApO1xufVxuIl19 */\",\n  toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1\n};\nfunction ScrollManager(_ref) {\n  var children = _ref.children,\n    lockEnabled = _ref.lockEnabled,\n    _ref$captureEnabled = _ref.captureEnabled,\n    captureEnabled = _ref$captureEnabled === void 0 ? true : _ref$captureEnabled,\n    onBottomArrive = _ref.onBottomArrive,\n    onBottomLeave = _ref.onBottomLeave,\n    onTopArrive = _ref.onTopArrive,\n    onTopLeave = _ref.onTopLeave;\n  var setScrollCaptureTarget = useScrollCapture({\n    isEnabled: captureEnabled,\n    onBottomArrive: onBottomArrive,\n    onBottomLeave: onBottomLeave,\n    onTopArrive: onTopArrive,\n    onTopLeave: onTopLeave\n  });\n  var setScrollLockTarget = useScrollLock({\n    isEnabled: lockEnabled\n  });\n  var targetRef = function targetRef(element) {\n    setScrollCaptureTarget(element);\n    setScrollLockTarget(element);\n  };\n  return jsx(Fragment, null, lockEnabled && jsx(\"div\", {\n    onClick: blurSelectInput,\n    css: _ref2$1\n  }), children(targetRef));\n}\n\nfunction _EMOTION_STRINGIFIED_CSS_ERROR__() { return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\"; }\nvar _ref2 = process.env.NODE_ENV === \"production\" ? {\n  name: \"1a0ro4n-requiredInput\",\n  styles: \"label:requiredInput;opacity:0;pointer-events:none;position:absolute;bottom:0;left:0;right:0;width:100%\"\n} : {\n  name: \"5kkxb2-requiredInput-RequiredInput\",\n  styles: \"label:requiredInput;opacity:0;pointer-events:none;position:absolute;bottom:0;left:0;right:0;width:100%;label:RequiredInput;\",\n  map: \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlJlcXVpcmVkSW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWNJIiwiZmlsZSI6IlJlcXVpcmVkSW5wdXQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBqc3gganN4ICovXG5pbXBvcnQgeyBGb2N1c0V2ZW50SGFuZGxlciwgRnVuY3Rpb25Db21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5cbmNvbnN0IFJlcXVpcmVkSW5wdXQ6IEZ1bmN0aW9uQ29tcG9uZW50PHtcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgb25Gb2N1czogRm9jdXNFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD47XG59PiA9ICh7IG5hbWUsIG9uRm9jdXMgfSkgPT4gKFxuICA8aW5wdXRcbiAgICByZXF1aXJlZFxuICAgIG5hbWU9e25hbWV9XG4gICAgdGFiSW5kZXg9ey0xfVxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgb25Gb2N1cz17b25Gb2N1c31cbiAgICBjc3M9e3tcbiAgICAgIGxhYmVsOiAncmVxdWlyZWRJbnB1dCcsXG4gICAgICBvcGFjaXR5OiAwLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBib3R0b206IDAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgIH19XG4gICAgLy8gUHJldmVudCBgU3dpdGNoaW5nIGZyb20gdW5jb250cm9sbGVkIHRvIGNvbnRyb2xsZWRgIGVycm9yXG4gICAgdmFsdWU9XCJcIlxuICAgIG9uQ2hhbmdlPXsoKSA9PiB7fX1cbiAgLz5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVpcmVkSW5wdXQ7XG4iXX0= */\",\n  toString: _EMOTION_STRINGIFIED_CSS_ERROR__\n};\nvar RequiredInput = function RequiredInput(_ref) {\n  var name = _ref.name,\n    onFocus = _ref.onFocus;\n  return jsx(\"input\", {\n    required: true,\n    name: name,\n    tabIndex: -1,\n    \"aria-hidden\": \"true\",\n    onFocus: onFocus,\n    css: _ref2\n    // Prevent `Switching from uncontrolled to controlled` error\n    ,\n    value: \"\",\n    onChange: function onChange() {}\n  });\n};\nvar RequiredInput$1 = RequiredInput;\n\nvar formatGroupLabel = function formatGroupLabel(group) {\n  return group.label;\n};\nvar getOptionLabel$1 = function getOptionLabel(option) {\n  return option.label;\n};\nvar getOptionValue$1 = function getOptionValue(option) {\n  return option.value;\n};\nvar isOptionDisabled = function isOptionDisabled(option) {\n  return !!option.isDisabled;\n};\n\nvar defaultStyles = {\n  clearIndicator: clearIndicatorCSS,\n  container: containerCSS,\n  control: css$1,\n  dropdownIndicator: dropdownIndicatorCSS,\n  group: groupCSS,\n  groupHeading: groupHeadingCSS,\n  indicatorsContainer: indicatorsContainerCSS,\n  indicatorSeparator: indicatorSeparatorCSS,\n  input: inputCSS,\n  loadingIndicator: loadingIndicatorCSS,\n  loadingMessage: loadingMessageCSS,\n  menu: menuCSS,\n  menuList: menuListCSS,\n  menuPortal: menuPortalCSS,\n  multiValue: multiValueCSS,\n  multiValueLabel: multiValueLabelCSS,\n  multiValueRemove: multiValueRemoveCSS,\n  noOptionsMessage: noOptionsMessageCSS,\n  option: optionCSS,\n  placeholder: placeholderCSS,\n  singleValue: css$2,\n  valueContainer: valueContainerCSS\n};\n// Merge Utility\n// Allows consumers to extend a base Select with additional styles\n\nfunction mergeStyles(source) {\n  var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  // initialize with source styles\n  var styles = _objectSpread({}, source);\n\n  // massage in target styles\n  Object.keys(target).forEach(function (keyAsString) {\n    var key = keyAsString;\n    if (source[key]) {\n      styles[key] = function (rsCss, props) {\n        return target[key](source[key](rsCss, props), props);\n      };\n    } else {\n      styles[key] = target[key];\n    }\n  });\n  return styles;\n}\n\nvar colors = {\n  primary: '#2684FF',\n  primary75: '#4C9AFF',\n  primary50: '#B2D4FF',\n  primary25: '#DEEBFF',\n  danger: '#DE350B',\n  dangerLight: '#FFBDAD',\n  neutral0: 'hsl(0, 0%, 100%)',\n  neutral5: 'hsl(0, 0%, 95%)',\n  neutral10: 'hsl(0, 0%, 90%)',\n  neutral20: 'hsl(0, 0%, 80%)',\n  neutral30: 'hsl(0, 0%, 70%)',\n  neutral40: 'hsl(0, 0%, 60%)',\n  neutral50: 'hsl(0, 0%, 50%)',\n  neutral60: 'hsl(0, 0%, 40%)',\n  neutral70: 'hsl(0, 0%, 30%)',\n  neutral80: 'hsl(0, 0%, 20%)',\n  neutral90: 'hsl(0, 0%, 10%)'\n};\nvar borderRadius = 4;\n// Used to calculate consistent margin/padding on elements\nvar baseUnit = 4;\n// The minimum height of the control\nvar controlHeight = 38;\n// The amount of space between the control and menu */\nvar menuGutter = baseUnit * 2;\nvar spacing = {\n  baseUnit: baseUnit,\n  controlHeight: controlHeight,\n  menuGutter: menuGutter\n};\nvar defaultTheme = {\n  borderRadius: borderRadius,\n  colors: colors,\n  spacing: spacing\n};\n\nvar defaultProps = {\n  'aria-live': 'polite',\n  backspaceRemovesValue: true,\n  blurInputOnSelect: isTouchCapable(),\n  captureMenuScroll: !isTouchCapable(),\n  classNames: {},\n  closeMenuOnSelect: true,\n  closeMenuOnScroll: false,\n  components: {},\n  controlShouldRenderValue: true,\n  escapeClearsValue: false,\n  filterOption: createFilter(),\n  formatGroupLabel: formatGroupLabel,\n  getOptionLabel: getOptionLabel$1,\n  getOptionValue: getOptionValue$1,\n  isDisabled: false,\n  isLoading: false,\n  isMulti: false,\n  isRtl: false,\n  isSearchable: true,\n  isOptionDisabled: isOptionDisabled,\n  loadingMessage: function loadingMessage() {\n    return 'Loading...';\n  },\n  maxMenuHeight: 300,\n  minMenuHeight: 140,\n  menuIsOpen: false,\n  menuPlacement: 'bottom',\n  menuPosition: 'absolute',\n  menuShouldBlockScroll: false,\n  menuShouldScrollIntoView: !isMobileDevice(),\n  noOptionsMessage: function noOptionsMessage() {\n    return 'No options';\n  },\n  openMenuOnFocus: false,\n  openMenuOnClick: true,\n  options: [],\n  pageSize: 5,\n  placeholder: 'Select...',\n  screenReaderStatus: function screenReaderStatus(_ref) {\n    var count = _ref.count;\n    return \"\".concat(count, \" result\").concat(count !== 1 ? 's' : '', \" available\");\n  },\n  styles: {},\n  tabIndex: 0,\n  tabSelectsValue: true,\n  unstyled: false\n};\nfunction toCategorizedOption(props, option, selectValue, index) {\n  var isDisabled = _isOptionDisabled(props, option, selectValue);\n  var isSelected = _isOptionSelected(props, option, selectValue);\n  var label = getOptionLabel(props, option);\n  var value = getOptionValue(props, option);\n  return {\n    type: 'option',\n    data: option,\n    isDisabled: isDisabled,\n    isSelected: isSelected,\n    label: label,\n    value: value,\n    index: index\n  };\n}\nfunction buildCategorizedOptions(props, selectValue) {\n  return props.options.map(function (groupOrOption, groupOrOptionIndex) {\n    if ('options' in groupOrOption) {\n      var categorizedOptions = groupOrOption.options.map(function (option, optionIndex) {\n        return toCategorizedOption(props, option, selectValue, optionIndex);\n      }).filter(function (categorizedOption) {\n        return isFocusable(props, categorizedOption);\n      });\n      return categorizedOptions.length > 0 ? {\n        type: 'group',\n        data: groupOrOption,\n        options: categorizedOptions,\n        index: groupOrOptionIndex\n      } : undefined;\n    }\n    var categorizedOption = toCategorizedOption(props, groupOrOption, selectValue, groupOrOptionIndex);\n    return isFocusable(props, categorizedOption) ? categorizedOption : undefined;\n  }).filter(notNullish);\n}\nfunction buildFocusableOptionsFromCategorizedOptions(categorizedOptions) {\n  return categorizedOptions.reduce(function (optionsAccumulator, categorizedOption) {\n    if (categorizedOption.type === 'group') {\n      optionsAccumulator.push.apply(optionsAccumulator, _toConsumableArray(categorizedOption.options.map(function (option) {\n        return option.data;\n      })));\n    } else {\n      optionsAccumulator.push(categorizedOption.data);\n    }\n    return optionsAccumulator;\n  }, []);\n}\nfunction buildFocusableOptions(props, selectValue) {\n  return buildFocusableOptionsFromCategorizedOptions(buildCategorizedOptions(props, selectValue));\n}\nfunction isFocusable(props, categorizedOption) {\n  var _props$inputValue = props.inputValue,\n    inputValue = _props$inputValue === void 0 ? '' : _props$inputValue;\n  var data = categorizedOption.data,\n    isSelected = categorizedOption.isSelected,\n    label = categorizedOption.label,\n    value = categorizedOption.value;\n  return (!shouldHideSelectedOptions(props) || !isSelected) && _filterOption(props, {\n    label: label,\n    value: value,\n    data: data\n  }, inputValue);\n}\nfunction getNextFocusedValue(state, nextSelectValue) {\n  var focusedValue = state.focusedValue,\n    lastSelectValue = state.selectValue;\n  var lastFocusedIndex = lastSelectValue.indexOf(focusedValue);\n  if (lastFocusedIndex > -1) {\n    var nextFocusedIndex = nextSelectValue.indexOf(focusedValue);\n    if (nextFocusedIndex > -1) {\n      // the focused value is still in the selectValue, return it\n      return focusedValue;\n    } else if (lastFocusedIndex < nextSelectValue.length) {\n      // the focusedValue is not present in the next selectValue array by\n      // reference, so return the new value at the same index\n      return nextSelectValue[lastFocusedIndex];\n    }\n  }\n  return null;\n}\nfunction getNextFocusedOption(state, options) {\n  var lastFocusedOption = state.focusedOption;\n  return lastFocusedOption && options.indexOf(lastFocusedOption) > -1 ? lastFocusedOption : options[0];\n}\nvar getOptionLabel = function getOptionLabel(props, data) {\n  return props.getOptionLabel(data);\n};\nvar getOptionValue = function getOptionValue(props, data) {\n  return props.getOptionValue(data);\n};\nfunction _isOptionDisabled(props, option, selectValue) {\n  return typeof props.isOptionDisabled === 'function' ? props.isOptionDisabled(option, selectValue) : false;\n}\nfunction _isOptionSelected(props, option, selectValue) {\n  if (selectValue.indexOf(option) > -1) return true;\n  if (typeof props.isOptionSelected === 'function') {\n    return props.isOptionSelected(option, selectValue);\n  }\n  var candidate = getOptionValue(props, option);\n  return selectValue.some(function (i) {\n    return getOptionValue(props, i) === candidate;\n  });\n}\nfunction _filterOption(props, option, inputValue) {\n  return props.filterOption ? props.filterOption(option, inputValue) : true;\n}\nvar shouldHideSelectedOptions = function shouldHideSelectedOptions(props) {\n  var hideSelectedOptions = props.hideSelectedOptions,\n    isMulti = props.isMulti;\n  if (hideSelectedOptions === undefined) return isMulti;\n  return hideSelectedOptions;\n};\nvar instanceId = 1;\nvar Select = /*#__PURE__*/function (_Component) {\n  _inherits(Select, _Component);\n  var _super = _createSuper(Select);\n  // Misc. Instance Properties\n  // ------------------------------\n\n  // TODO\n\n  // Refs\n  // ------------------------------\n\n  // Lifecycle\n  // ------------------------------\n\n  function Select(_props) {\n    var _this;\n    _classCallCheck(this, Select);\n    _this = _super.call(this, _props);\n    _this.state = {\n      ariaSelection: null,\n      focusedOption: null,\n      focusedValue: null,\n      inputIsHidden: false,\n      isFocused: false,\n      selectValue: [],\n      clearFocusValueOnUpdate: false,\n      prevWasFocused: false,\n      inputIsHiddenAfterUpdate: undefined,\n      prevProps: undefined\n    };\n    _this.blockOptionHover = false;\n    _this.isComposing = false;\n    _this.commonProps = void 0;\n    _this.initialTouchX = 0;\n    _this.initialTouchY = 0;\n    _this.instancePrefix = '';\n    _this.openAfterFocus = false;\n    _this.scrollToFocusedOptionOnUpdate = false;\n    _this.userIsDragging = void 0;\n    _this.controlRef = null;\n    _this.getControlRef = function (ref) {\n      _this.controlRef = ref;\n    };\n    _this.focusedOptionRef = null;\n    _this.getFocusedOptionRef = function (ref) {\n      _this.focusedOptionRef = ref;\n    };\n    _this.menuListRef = null;\n    _this.getMenuListRef = function (ref) {\n      _this.menuListRef = ref;\n    };\n    _this.inputRef = null;\n    _this.getInputRef = function (ref) {\n      _this.inputRef = ref;\n    };\n    _this.focus = _this.focusInput;\n    _this.blur = _this.blurInput;\n    _this.onChange = function (newValue, actionMeta) {\n      var _this$props = _this.props,\n        onChange = _this$props.onChange,\n        name = _this$props.name;\n      actionMeta.name = name;\n      _this.ariaOnChange(newValue, actionMeta);\n      onChange(newValue, actionMeta);\n    };\n    _this.setValue = function (newValue, action, option) {\n      var _this$props2 = _this.props,\n        closeMenuOnSelect = _this$props2.closeMenuOnSelect,\n        isMulti = _this$props2.isMulti,\n        inputValue = _this$props2.inputValue;\n      _this.onInputChange('', {\n        action: 'set-value',\n        prevInputValue: inputValue\n      });\n      if (closeMenuOnSelect) {\n        _this.setState({\n          inputIsHiddenAfterUpdate: !isMulti\n        });\n        _this.onMenuClose();\n      }\n      // when the select value should change, we should reset focusedValue\n      _this.setState({\n        clearFocusValueOnUpdate: true\n      });\n      _this.onChange(newValue, {\n        action: action,\n        option: option\n      });\n    };\n    _this.selectOption = function (newValue) {\n      var _this$props3 = _this.props,\n        blurInputOnSelect = _this$props3.blurInputOnSelect,\n        isMulti = _this$props3.isMulti,\n        name = _this$props3.name;\n      var selectValue = _this.state.selectValue;\n      var deselected = isMulti && _this.isOptionSelected(newValue, selectValue);\n      var isDisabled = _this.isOptionDisabled(newValue, selectValue);\n      if (deselected) {\n        var candidate = _this.getOptionValue(newValue);\n        _this.setValue(multiValueAsValue(selectValue.filter(function (i) {\n          return _this.getOptionValue(i) !== candidate;\n        })), 'deselect-option', newValue);\n      } else if (!isDisabled) {\n        // Select option if option is not disabled\n        if (isMulti) {\n          _this.setValue(multiValueAsValue([].concat(_toConsumableArray(selectValue), [newValue])), 'select-option', newValue);\n        } else {\n          _this.setValue(singleValueAsValue(newValue), 'select-option');\n        }\n      } else {\n        _this.ariaOnChange(singleValueAsValue(newValue), {\n          action: 'select-option',\n          option: newValue,\n          name: name\n        });\n        return;\n      }\n      if (blurInputOnSelect) {\n        _this.blurInput();\n      }\n    };\n    _this.removeValue = function (removedValue) {\n      var isMulti = _this.props.isMulti;\n      var selectValue = _this.state.selectValue;\n      var candidate = _this.getOptionValue(removedValue);\n      var newValueArray = selectValue.filter(function (i) {\n        return _this.getOptionValue(i) !== candidate;\n      });\n      var newValue = valueTernary(isMulti, newValueArray, newValueArray[0] || null);\n      _this.onChange(newValue, {\n        action: 'remove-value',\n        removedValue: removedValue\n      });\n      _this.focusInput();\n    };\n    _this.clearValue = function () {\n      var selectValue = _this.state.selectValue;\n      _this.onChange(valueTernary(_this.props.isMulti, [], null), {\n        action: 'clear',\n        removedValues: selectValue\n      });\n    };\n    _this.popValue = function () {\n      var isMulti = _this.props.isMulti;\n      var selectValue = _this.state.selectValue;\n      var lastSelectedValue = selectValue[selectValue.length - 1];\n      var newValueArray = selectValue.slice(0, selectValue.length - 1);\n      var newValue = valueTernary(isMulti, newValueArray, newValueArray[0] || null);\n      _this.onChange(newValue, {\n        action: 'pop-value',\n        removedValue: lastSelectedValue\n      });\n    };\n    _this.getValue = function () {\n      return _this.state.selectValue;\n    };\n    _this.cx = function () {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      return classNames.apply(void 0, [_this.props.classNamePrefix].concat(args));\n    };\n    _this.getOptionLabel = function (data) {\n      return getOptionLabel(_this.props, data);\n    };\n    _this.getOptionValue = function (data) {\n      return getOptionValue(_this.props, data);\n    };\n    _this.getStyles = function (key, props) {\n      var unstyled = _this.props.unstyled;\n      var base = defaultStyles[key](props, unstyled);\n      base.boxSizing = 'border-box';\n      var custom = _this.props.styles[key];\n      return custom ? custom(base, props) : base;\n    };\n    _this.getClassNames = function (key, props) {\n      var _this$props$className, _this$props$className2;\n      return (_this$props$className = (_this$props$className2 = _this.props.classNames)[key]) === null || _this$props$className === void 0 ? void 0 : _this$props$className.call(_this$props$className2, props);\n    };\n    _this.getElementId = function (element) {\n      return \"\".concat(_this.instancePrefix, \"-\").concat(element);\n    };\n    _this.getComponents = function () {\n      return defaultComponents(_this.props);\n    };\n    _this.buildCategorizedOptions = function () {\n      return buildCategorizedOptions(_this.props, _this.state.selectValue);\n    };\n    _this.getCategorizedOptions = function () {\n      return _this.props.menuIsOpen ? _this.buildCategorizedOptions() : [];\n    };\n    _this.buildFocusableOptions = function () {\n      return buildFocusableOptionsFromCategorizedOptions(_this.buildCategorizedOptions());\n    };\n    _this.getFocusableOptions = function () {\n      return _this.props.menuIsOpen ? _this.buildFocusableOptions() : [];\n    };\n    _this.ariaOnChange = function (value, actionMeta) {\n      _this.setState({\n        ariaSelection: _objectSpread({\n          value: value\n        }, actionMeta)\n      });\n    };\n    _this.onMenuMouseDown = function (event) {\n      if (event.button !== 0) {\n        return;\n      }\n      event.stopPropagation();\n      event.preventDefault();\n      _this.focusInput();\n    };\n    _this.onMenuMouseMove = function (event) {\n      _this.blockOptionHover = false;\n    };\n    _this.onControlMouseDown = function (event) {\n      // Event captured by dropdown indicator\n      if (event.defaultPrevented) {\n        return;\n      }\n      var openMenuOnClick = _this.props.openMenuOnClick;\n      if (!_this.state.isFocused) {\n        if (openMenuOnClick) {\n          _this.openAfterFocus = true;\n        }\n        _this.focusInput();\n      } else if (!_this.props.menuIsOpen) {\n        if (openMenuOnClick) {\n          _this.openMenu('first');\n        }\n      } else {\n        if (event.target.tagName !== 'INPUT' && event.target.tagName !== 'TEXTAREA') {\n          _this.onMenuClose();\n        }\n      }\n      if (event.target.tagName !== 'INPUT' && event.target.tagName !== 'TEXTAREA') {\n        event.preventDefault();\n      }\n    };\n    _this.onDropdownIndicatorMouseDown = function (event) {\n      // ignore mouse events that weren't triggered by the primary button\n      if (event && event.type === 'mousedown' && event.button !== 0) {\n        return;\n      }\n      if (_this.props.isDisabled) return;\n      var _this$props4 = _this.props,\n        isMulti = _this$props4.isMulti,\n        menuIsOpen = _this$props4.menuIsOpen;\n      _this.focusInput();\n      if (menuIsOpen) {\n        _this.setState({\n          inputIsHiddenAfterUpdate: !isMulti\n        });\n        _this.onMenuClose();\n      } else {\n        _this.openMenu('first');\n      }\n      event.preventDefault();\n    };\n    _this.onClearIndicatorMouseDown = function (event) {\n      // ignore mouse events that weren't triggered by the primary button\n      if (event && event.type === 'mousedown' && event.button !== 0) {\n        return;\n      }\n      _this.clearValue();\n      event.preventDefault();\n      _this.openAfterFocus = false;\n      if (event.type === 'touchend') {\n        _this.focusInput();\n      } else {\n        setTimeout(function () {\n          return _this.focusInput();\n        });\n      }\n    };\n    _this.onScroll = function (event) {\n      if (typeof _this.props.closeMenuOnScroll === 'boolean') {\n        if (event.target instanceof HTMLElement && isDocumentElement(event.target)) {\n          _this.props.onMenuClose();\n        }\n      } else if (typeof _this.props.closeMenuOnScroll === 'function') {\n        if (_this.props.closeMenuOnScroll(event)) {\n          _this.props.onMenuClose();\n        }\n      }\n    };\n    _this.onCompositionStart = function () {\n      _this.isComposing = true;\n    };\n    _this.onCompositionEnd = function () {\n      _this.isComposing = false;\n    };\n    _this.onTouchStart = function (_ref2) {\n      var touches = _ref2.touches;\n      var touch = touches && touches.item(0);\n      if (!touch) {\n        return;\n      }\n      _this.initialTouchX = touch.clientX;\n      _this.initialTouchY = touch.clientY;\n      _this.userIsDragging = false;\n    };\n    _this.onTouchMove = function (_ref3) {\n      var touches = _ref3.touches;\n      var touch = touches && touches.item(0);\n      if (!touch) {\n        return;\n      }\n      var deltaX = Math.abs(touch.clientX - _this.initialTouchX);\n      var deltaY = Math.abs(touch.clientY - _this.initialTouchY);\n      var moveThreshold = 5;\n      _this.userIsDragging = deltaX > moveThreshold || deltaY > moveThreshold;\n    };\n    _this.onTouchEnd = function (event) {\n      if (_this.userIsDragging) return;\n\n      // close the menu if the user taps outside\n      // we're checking on event.target here instead of event.currentTarget, because we want to assert information\n      // on events on child elements, not the document (which we've attached this handler to).\n      if (_this.controlRef && !_this.controlRef.contains(event.target) && _this.menuListRef && !_this.menuListRef.contains(event.target)) {\n        _this.blurInput();\n      }\n\n      // reset move vars\n      _this.initialTouchX = 0;\n      _this.initialTouchY = 0;\n    };\n    _this.onControlTouchEnd = function (event) {\n      if (_this.userIsDragging) return;\n      _this.onControlMouseDown(event);\n    };\n    _this.onClearIndicatorTouchEnd = function (event) {\n      if (_this.userIsDragging) return;\n      _this.onClearIndicatorMouseDown(event);\n    };\n    _this.onDropdownIndicatorTouchEnd = function (event) {\n      if (_this.userIsDragging) return;\n      _this.onDropdownIndicatorMouseDown(event);\n    };\n    _this.handleInputChange = function (event) {\n      var prevInputValue = _this.props.inputValue;\n      var inputValue = event.currentTarget.value;\n      _this.setState({\n        inputIsHiddenAfterUpdate: false\n      });\n      _this.onInputChange(inputValue, {\n        action: 'input-change',\n        prevInputValue: prevInputValue\n      });\n      if (!_this.props.menuIsOpen) {\n        _this.onMenuOpen();\n      }\n    };\n    _this.onInputFocus = function (event) {\n      if (_this.props.onFocus) {\n        _this.props.onFocus(event);\n      }\n      _this.setState({\n        inputIsHiddenAfterUpdate: false,\n        isFocused: true\n      });\n      if (_this.openAfterFocus || _this.props.openMenuOnFocus) {\n        _this.openMenu('first');\n      }\n      _this.openAfterFocus = false;\n    };\n    _this.onInputBlur = function (event) {\n      var prevInputValue = _this.props.inputValue;\n      if (_this.menuListRef && _this.menuListRef.contains(document.activeElement)) {\n        _this.inputRef.focus();\n        return;\n      }\n      if (_this.props.onBlur) {\n        _this.props.onBlur(event);\n      }\n      _this.onInputChange('', {\n        action: 'input-blur',\n        prevInputValue: prevInputValue\n      });\n      _this.onMenuClose();\n      _this.setState({\n        focusedValue: null,\n        isFocused: false\n      });\n    };\n    _this.onOptionHover = function (focusedOption) {\n      if (_this.blockOptionHover || _this.state.focusedOption === focusedOption) {\n        return;\n      }\n      _this.setState({\n        focusedOption: focusedOption\n      });\n    };\n    _this.shouldHideSelectedOptions = function () {\n      return shouldHideSelectedOptions(_this.props);\n    };\n    _this.onValueInputFocus = function (e) {\n      e.preventDefault();\n      e.stopPropagation();\n      _this.focus();\n    };\n    _this.onKeyDown = function (event) {\n      var _this$props5 = _this.props,\n        isMulti = _this$props5.isMulti,\n        backspaceRemovesValue = _this$props5.backspaceRemovesValue,\n        escapeClearsValue = _this$props5.escapeClearsValue,\n        inputValue = _this$props5.inputValue,\n        isClearable = _this$props5.isClearable,\n        isDisabled = _this$props5.isDisabled,\n        menuIsOpen = _this$props5.menuIsOpen,\n        onKeyDown = _this$props5.onKeyDown,\n        tabSelectsValue = _this$props5.tabSelectsValue,\n        openMenuOnFocus = _this$props5.openMenuOnFocus;\n      var _this$state = _this.state,\n        focusedOption = _this$state.focusedOption,\n        focusedValue = _this$state.focusedValue,\n        selectValue = _this$state.selectValue;\n      if (isDisabled) return;\n      if (typeof onKeyDown === 'function') {\n        onKeyDown(event);\n        if (event.defaultPrevented) {\n          return;\n        }\n      }\n\n      // Block option hover events when the user has just pressed a key\n      _this.blockOptionHover = true;\n      switch (event.key) {\n        case 'ArrowLeft':\n          if (!isMulti || inputValue) return;\n          _this.focusValue('previous');\n          break;\n        case 'ArrowRight':\n          if (!isMulti || inputValue) return;\n          _this.focusValue('next');\n          break;\n        case 'Delete':\n        case 'Backspace':\n          if (inputValue) return;\n          if (focusedValue) {\n            _this.removeValue(focusedValue);\n          } else {\n            if (!backspaceRemovesValue) return;\n            if (isMulti) {\n              _this.popValue();\n            } else if (isClearable) {\n              _this.clearValue();\n            }\n          }\n          break;\n        case 'Tab':\n          if (_this.isComposing) return;\n          if (event.shiftKey || !menuIsOpen || !tabSelectsValue || !focusedOption ||\n          // don't capture the event if the menu opens on focus and the focused\n          // option is already selected; it breaks the flow of navigation\n          openMenuOnFocus && _this.isOptionSelected(focusedOption, selectValue)) {\n            return;\n          }\n          _this.selectOption(focusedOption);\n          break;\n        case 'Enter':\n          if (event.keyCode === 229) {\n            // ignore the keydown event from an Input Method Editor(IME)\n            // ref. https://www.w3.org/TR/uievents/#determine-keydown-keyup-keyCode\n            break;\n          }\n          if (menuIsOpen) {\n            if (!focusedOption) return;\n            if (_this.isComposing) return;\n            _this.selectOption(focusedOption);\n            break;\n          }\n          return;\n        case 'Escape':\n          if (menuIsOpen) {\n            _this.setState({\n              inputIsHiddenAfterUpdate: false\n            });\n            _this.onInputChange('', {\n              action: 'menu-close',\n              prevInputValue: inputValue\n            });\n            _this.onMenuClose();\n          } else if (isClearable && escapeClearsValue) {\n            _this.clearValue();\n          }\n          break;\n        case ' ':\n          // space\n          if (inputValue) {\n            return;\n          }\n          if (!menuIsOpen) {\n            _this.openMenu('first');\n            break;\n          }\n          if (!focusedOption) return;\n          _this.selectOption(focusedOption);\n          break;\n        case 'ArrowUp':\n          if (menuIsOpen) {\n            _this.focusOption('up');\n          } else {\n            _this.openMenu('last');\n          }\n          break;\n        case 'ArrowDown':\n          if (menuIsOpen) {\n            _this.focusOption('down');\n          } else {\n            _this.openMenu('first');\n          }\n          break;\n        case 'PageUp':\n          if (!menuIsOpen) return;\n          _this.focusOption('pageup');\n          break;\n        case 'PageDown':\n          if (!menuIsOpen) return;\n          _this.focusOption('pagedown');\n          break;\n        case 'Home':\n          if (!menuIsOpen) return;\n          _this.focusOption('first');\n          break;\n        case 'End':\n          if (!menuIsOpen) return;\n          _this.focusOption('last');\n          break;\n        default:\n          return;\n      }\n      event.preventDefault();\n    };\n    _this.instancePrefix = 'react-select-' + (_this.props.instanceId || ++instanceId);\n    _this.state.selectValue = cleanValue(_props.value);\n\n    // Set focusedOption if menuIsOpen is set on init (e.g. defaultMenuIsOpen)\n    if (_props.menuIsOpen && _this.state.selectValue.length) {\n      var focusableOptions = _this.buildFocusableOptions();\n      var optionIndex = focusableOptions.indexOf(_this.state.selectValue[0]);\n      _this.state.focusedOption = focusableOptions[optionIndex];\n    }\n    return _this;\n  }\n  _createClass(Select, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.startListeningComposition();\n      this.startListeningToTouch();\n      if (this.props.closeMenuOnScroll && document && document.addEventListener) {\n        // Listen to all scroll events, and filter them out inside of 'onScroll'\n        document.addEventListener('scroll', this.onScroll, true);\n      }\n      if (this.props.autoFocus) {\n        this.focusInput();\n      }\n\n      // Scroll focusedOption into view if menuIsOpen is set on mount (e.g. defaultMenuIsOpen)\n      if (this.props.menuIsOpen && this.state.focusedOption && this.menuListRef && this.focusedOptionRef) {\n        scrollIntoView(this.menuListRef, this.focusedOptionRef);\n      }\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      var _this$props6 = this.props,\n        isDisabled = _this$props6.isDisabled,\n        menuIsOpen = _this$props6.menuIsOpen;\n      var isFocused = this.state.isFocused;\n      if (\n      // ensure focus is restored correctly when the control becomes enabled\n      isFocused && !isDisabled && prevProps.isDisabled ||\n      // ensure focus is on the Input when the menu opens\n      isFocused && menuIsOpen && !prevProps.menuIsOpen) {\n        this.focusInput();\n      }\n      if (isFocused && isDisabled && !prevProps.isDisabled) {\n        // ensure select state gets blurred in case Select is programmatically disabled while focused\n        // eslint-disable-next-line react/no-did-update-set-state\n        this.setState({\n          isFocused: false\n        }, this.onMenuClose);\n      } else if (!isFocused && !isDisabled && prevProps.isDisabled && this.inputRef === document.activeElement) {\n        // ensure select state gets focused in case Select is programatically re-enabled while focused (Firefox)\n        // eslint-disable-next-line react/no-did-update-set-state\n        this.setState({\n          isFocused: true\n        });\n      }\n\n      // scroll the focused option into view if necessary\n      if (this.menuListRef && this.focusedOptionRef && this.scrollToFocusedOptionOnUpdate) {\n        scrollIntoView(this.menuListRef, this.focusedOptionRef);\n        this.scrollToFocusedOptionOnUpdate = false;\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.stopListeningComposition();\n      this.stopListeningToTouch();\n      document.removeEventListener('scroll', this.onScroll, true);\n    }\n\n    // ==============================\n    // Consumer Handlers\n    // ==============================\n  }, {\n    key: \"onMenuOpen\",\n    value: function onMenuOpen() {\n      this.props.onMenuOpen();\n    }\n  }, {\n    key: \"onMenuClose\",\n    value: function onMenuClose() {\n      this.onInputChange('', {\n        action: 'menu-close',\n        prevInputValue: this.props.inputValue\n      });\n      this.props.onMenuClose();\n    }\n  }, {\n    key: \"onInputChange\",\n    value: function onInputChange(newValue, actionMeta) {\n      this.props.onInputChange(newValue, actionMeta);\n    }\n\n    // ==============================\n    // Methods\n    // ==============================\n  }, {\n    key: \"focusInput\",\n    value: function focusInput() {\n      if (!this.inputRef) return;\n      this.inputRef.focus();\n    }\n  }, {\n    key: \"blurInput\",\n    value: function blurInput() {\n      if (!this.inputRef) return;\n      this.inputRef.blur();\n    }\n\n    // aliased for consumers\n  }, {\n    key: \"openMenu\",\n    value: function openMenu(focusOption) {\n      var _this2 = this;\n      var _this$state2 = this.state,\n        selectValue = _this$state2.selectValue,\n        isFocused = _this$state2.isFocused;\n      var focusableOptions = this.buildFocusableOptions();\n      var openAtIndex = focusOption === 'first' ? 0 : focusableOptions.length - 1;\n      if (!this.props.isMulti) {\n        var selectedIndex = focusableOptions.indexOf(selectValue[0]);\n        if (selectedIndex > -1) {\n          openAtIndex = selectedIndex;\n        }\n      }\n\n      // only scroll if the menu isn't already open\n      this.scrollToFocusedOptionOnUpdate = !(isFocused && this.menuListRef);\n      this.setState({\n        inputIsHiddenAfterUpdate: false,\n        focusedValue: null,\n        focusedOption: focusableOptions[openAtIndex]\n      }, function () {\n        return _this2.onMenuOpen();\n      });\n    }\n  }, {\n    key: \"focusValue\",\n    value: function focusValue(direction) {\n      var _this$state3 = this.state,\n        selectValue = _this$state3.selectValue,\n        focusedValue = _this$state3.focusedValue;\n\n      // Only multiselects support value focusing\n      if (!this.props.isMulti) return;\n      this.setState({\n        focusedOption: null\n      });\n      var focusedIndex = selectValue.indexOf(focusedValue);\n      if (!focusedValue) {\n        focusedIndex = -1;\n      }\n      var lastIndex = selectValue.length - 1;\n      var nextFocus = -1;\n      if (!selectValue.length) return;\n      switch (direction) {\n        case 'previous':\n          if (focusedIndex === 0) {\n            // don't cycle from the start to the end\n            nextFocus = 0;\n          } else if (focusedIndex === -1) {\n            // if nothing is focused, focus the last value first\n            nextFocus = lastIndex;\n          } else {\n            nextFocus = focusedIndex - 1;\n          }\n          break;\n        case 'next':\n          if (focusedIndex > -1 && focusedIndex < lastIndex) {\n            nextFocus = focusedIndex + 1;\n          }\n          break;\n      }\n      this.setState({\n        inputIsHidden: nextFocus !== -1,\n        focusedValue: selectValue[nextFocus]\n      });\n    }\n  }, {\n    key: \"focusOption\",\n    value: function focusOption() {\n      var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'first';\n      var pageSize = this.props.pageSize;\n      var focusedOption = this.state.focusedOption;\n      var options = this.getFocusableOptions();\n      if (!options.length) return;\n      var nextFocus = 0; // handles 'first'\n      var focusedIndex = options.indexOf(focusedOption);\n      if (!focusedOption) {\n        focusedIndex = -1;\n      }\n      if (direction === 'up') {\n        nextFocus = focusedIndex > 0 ? focusedIndex - 1 : options.length - 1;\n      } else if (direction === 'down') {\n        nextFocus = (focusedIndex + 1) % options.length;\n      } else if (direction === 'pageup') {\n        nextFocus = focusedIndex - pageSize;\n        if (nextFocus < 0) nextFocus = 0;\n      } else if (direction === 'pagedown') {\n        nextFocus = focusedIndex + pageSize;\n        if (nextFocus > options.length - 1) nextFocus = options.length - 1;\n      } else if (direction === 'last') {\n        nextFocus = options.length - 1;\n      }\n      this.scrollToFocusedOptionOnUpdate = true;\n      this.setState({\n        focusedOption: options[nextFocus],\n        focusedValue: null\n      });\n    }\n  }, {\n    key: \"getTheme\",\n    value:\n    // ==============================\n    // Getters\n    // ==============================\n\n    function getTheme() {\n      // Use the default theme if there are no customisations.\n      if (!this.props.theme) {\n        return defaultTheme;\n      }\n      // If the theme prop is a function, assume the function\n      // knows how to merge the passed-in default theme with\n      // its own modifications.\n      if (typeof this.props.theme === 'function') {\n        return this.props.theme(defaultTheme);\n      }\n      // Otherwise, if a plain theme object was passed in,\n      // overlay it with the default theme.\n      return _objectSpread(_objectSpread({}, defaultTheme), this.props.theme);\n    }\n  }, {\n    key: \"getCommonProps\",\n    value: function getCommonProps() {\n      var clearValue = this.clearValue,\n        cx = this.cx,\n        getStyles = this.getStyles,\n        getClassNames = this.getClassNames,\n        getValue = this.getValue,\n        selectOption = this.selectOption,\n        setValue = this.setValue,\n        props = this.props;\n      var isMulti = props.isMulti,\n        isRtl = props.isRtl,\n        options = props.options;\n      var hasValue = this.hasValue();\n      return {\n        clearValue: clearValue,\n        cx: cx,\n        getStyles: getStyles,\n        getClassNames: getClassNames,\n        getValue: getValue,\n        hasValue: hasValue,\n        isMulti: isMulti,\n        isRtl: isRtl,\n        options: options,\n        selectOption: selectOption,\n        selectProps: props,\n        setValue: setValue,\n        theme: this.getTheme()\n      };\n    }\n  }, {\n    key: \"hasValue\",\n    value: function hasValue() {\n      var selectValue = this.state.selectValue;\n      return selectValue.length > 0;\n    }\n  }, {\n    key: \"hasOptions\",\n    value: function hasOptions() {\n      return !!this.getFocusableOptions().length;\n    }\n  }, {\n    key: \"isClearable\",\n    value: function isClearable() {\n      var _this$props7 = this.props,\n        isClearable = _this$props7.isClearable,\n        isMulti = _this$props7.isMulti;\n\n      // single select, by default, IS NOT clearable\n      // multi select, by default, IS clearable\n      if (isClearable === undefined) return isMulti;\n      return isClearable;\n    }\n  }, {\n    key: \"isOptionDisabled\",\n    value: function isOptionDisabled(option, selectValue) {\n      return _isOptionDisabled(this.props, option, selectValue);\n    }\n  }, {\n    key: \"isOptionSelected\",\n    value: function isOptionSelected(option, selectValue) {\n      return _isOptionSelected(this.props, option, selectValue);\n    }\n  }, {\n    key: \"filterOption\",\n    value: function filterOption(option, inputValue) {\n      return _filterOption(this.props, option, inputValue);\n    }\n  }, {\n    key: \"formatOptionLabel\",\n    value: function formatOptionLabel(data, context) {\n      if (typeof this.props.formatOptionLabel === 'function') {\n        var _inputValue = this.props.inputValue;\n        var _selectValue = this.state.selectValue;\n        return this.props.formatOptionLabel(data, {\n          context: context,\n          inputValue: _inputValue,\n          selectValue: _selectValue\n        });\n      } else {\n        return this.getOptionLabel(data);\n      }\n    }\n  }, {\n    key: \"formatGroupLabel\",\n    value: function formatGroupLabel(data) {\n      return this.props.formatGroupLabel(data);\n    }\n\n    // ==============================\n    // Mouse Handlers\n    // ==============================\n  }, {\n    key: \"startListeningComposition\",\n    value:\n    // ==============================\n    // Composition Handlers\n    // ==============================\n\n    function startListeningComposition() {\n      if (document && document.addEventListener) {\n        document.addEventListener('compositionstart', this.onCompositionStart, false);\n        document.addEventListener('compositionend', this.onCompositionEnd, false);\n      }\n    }\n  }, {\n    key: \"stopListeningComposition\",\n    value: function stopListeningComposition() {\n      if (document && document.removeEventListener) {\n        document.removeEventListener('compositionstart', this.onCompositionStart);\n        document.removeEventListener('compositionend', this.onCompositionEnd);\n      }\n    }\n  }, {\n    key: \"startListeningToTouch\",\n    value:\n    // ==============================\n    // Touch Handlers\n    // ==============================\n\n    function startListeningToTouch() {\n      if (document && document.addEventListener) {\n        document.addEventListener('touchstart', this.onTouchStart, false);\n        document.addEventListener('touchmove', this.onTouchMove, false);\n        document.addEventListener('touchend', this.onTouchEnd, false);\n      }\n    }\n  }, {\n    key: \"stopListeningToTouch\",\n    value: function stopListeningToTouch() {\n      if (document && document.removeEventListener) {\n        document.removeEventListener('touchstart', this.onTouchStart);\n        document.removeEventListener('touchmove', this.onTouchMove);\n        document.removeEventListener('touchend', this.onTouchEnd);\n      }\n    }\n  }, {\n    key: \"renderInput\",\n    value:\n    // ==============================\n    // Renderers\n    // ==============================\n    function renderInput() {\n      var _this$props8 = this.props,\n        isDisabled = _this$props8.isDisabled,\n        isSearchable = _this$props8.isSearchable,\n        inputId = _this$props8.inputId,\n        inputValue = _this$props8.inputValue,\n        tabIndex = _this$props8.tabIndex,\n        form = _this$props8.form,\n        menuIsOpen = _this$props8.menuIsOpen,\n        required = _this$props8.required;\n      var _this$getComponents = this.getComponents(),\n        Input = _this$getComponents.Input;\n      var _this$state4 = this.state,\n        inputIsHidden = _this$state4.inputIsHidden,\n        ariaSelection = _this$state4.ariaSelection;\n      var commonProps = this.commonProps;\n      var id = inputId || this.getElementId('input');\n\n      // aria attributes makes the JSX \"noisy\", separated for clarity\n      var ariaAttributes = _objectSpread(_objectSpread(_objectSpread({\n        'aria-autocomplete': 'list',\n        'aria-expanded': menuIsOpen,\n        'aria-haspopup': true,\n        'aria-errormessage': this.props['aria-errormessage'],\n        'aria-invalid': this.props['aria-invalid'],\n        'aria-label': this.props['aria-label'],\n        'aria-labelledby': this.props['aria-labelledby'],\n        'aria-required': required,\n        role: 'combobox'\n      }, menuIsOpen && {\n        'aria-controls': this.getElementId('listbox'),\n        'aria-owns': this.getElementId('listbox')\n      }), !isSearchable && {\n        'aria-readonly': true\n      }), this.hasValue() ? (ariaSelection === null || ariaSelection === void 0 ? void 0 : ariaSelection.action) === 'initial-input-focus' && {\n        'aria-describedby': this.getElementId('live-region')\n      } : {\n        'aria-describedby': this.getElementId('placeholder')\n      });\n      if (!isSearchable) {\n        // use a dummy input to maintain focus/blur functionality\n        return /*#__PURE__*/React.createElement(DummyInput, _extends({\n          id: id,\n          innerRef: this.getInputRef,\n          onBlur: this.onInputBlur,\n          onChange: noop,\n          onFocus: this.onInputFocus,\n          disabled: isDisabled,\n          tabIndex: tabIndex,\n          inputMode: \"none\",\n          form: form,\n          value: \"\"\n        }, ariaAttributes));\n      }\n      return /*#__PURE__*/React.createElement(Input, _extends({}, commonProps, {\n        autoCapitalize: \"none\",\n        autoComplete: \"off\",\n        autoCorrect: \"off\",\n        id: id,\n        innerRef: this.getInputRef,\n        isDisabled: isDisabled,\n        isHidden: inputIsHidden,\n        onBlur: this.onInputBlur,\n        onChange: this.handleInputChange,\n        onFocus: this.onInputFocus,\n        spellCheck: \"false\",\n        tabIndex: tabIndex,\n        form: form,\n        type: \"text\",\n        value: inputValue\n      }, ariaAttributes));\n    }\n  }, {\n    key: \"renderPlaceholderOrValue\",\n    value: function renderPlaceholderOrValue() {\n      var _this3 = this;\n      var _this$getComponents2 = this.getComponents(),\n        MultiValue = _this$getComponents2.MultiValue,\n        MultiValueContainer = _this$getComponents2.MultiValueContainer,\n        MultiValueLabel = _this$getComponents2.MultiValueLabel,\n        MultiValueRemove = _this$getComponents2.MultiValueRemove,\n        SingleValue = _this$getComponents2.SingleValue,\n        Placeholder = _this$getComponents2.Placeholder;\n      var commonProps = this.commonProps;\n      var _this$props9 = this.props,\n        controlShouldRenderValue = _this$props9.controlShouldRenderValue,\n        isDisabled = _this$props9.isDisabled,\n        isMulti = _this$props9.isMulti,\n        inputValue = _this$props9.inputValue,\n        placeholder = _this$props9.placeholder;\n      var _this$state5 = this.state,\n        selectValue = _this$state5.selectValue,\n        focusedValue = _this$state5.focusedValue,\n        isFocused = _this$state5.isFocused;\n      if (!this.hasValue() || !controlShouldRenderValue) {\n        return inputValue ? null : /*#__PURE__*/React.createElement(Placeholder, _extends({}, commonProps, {\n          key: \"placeholder\",\n          isDisabled: isDisabled,\n          isFocused: isFocused,\n          innerProps: {\n            id: this.getElementId('placeholder')\n          }\n        }), placeholder);\n      }\n      if (isMulti) {\n        return selectValue.map(function (opt, index) {\n          var isOptionFocused = opt === focusedValue;\n          var key = \"\".concat(_this3.getOptionLabel(opt), \"-\").concat(_this3.getOptionValue(opt));\n          return /*#__PURE__*/React.createElement(MultiValue, _extends({}, commonProps, {\n            components: {\n              Container: MultiValueContainer,\n              Label: MultiValueLabel,\n              Remove: MultiValueRemove\n            },\n            isFocused: isOptionFocused,\n            isDisabled: isDisabled,\n            key: key,\n            index: index,\n            removeProps: {\n              onClick: function onClick() {\n                return _this3.removeValue(opt);\n              },\n              onTouchEnd: function onTouchEnd() {\n                return _this3.removeValue(opt);\n              },\n              onMouseDown: function onMouseDown(e) {\n                e.preventDefault();\n              }\n            },\n            data: opt\n          }), _this3.formatOptionLabel(opt, 'value'));\n        });\n      }\n      if (inputValue) {\n        return null;\n      }\n      var singleValue = selectValue[0];\n      return /*#__PURE__*/React.createElement(SingleValue, _extends({}, commonProps, {\n        data: singleValue,\n        isDisabled: isDisabled\n      }), this.formatOptionLabel(singleValue, 'value'));\n    }\n  }, {\n    key: \"renderClearIndicator\",\n    value: function renderClearIndicator() {\n      var _this$getComponents3 = this.getComponents(),\n        ClearIndicator = _this$getComponents3.ClearIndicator;\n      var commonProps = this.commonProps;\n      var _this$props10 = this.props,\n        isDisabled = _this$props10.isDisabled,\n        isLoading = _this$props10.isLoading;\n      var isFocused = this.state.isFocused;\n      if (!this.isClearable() || !ClearIndicator || isDisabled || !this.hasValue() || isLoading) {\n        return null;\n      }\n      var innerProps = {\n        onMouseDown: this.onClearIndicatorMouseDown,\n        onTouchEnd: this.onClearIndicatorTouchEnd,\n        'aria-hidden': 'true'\n      };\n      return /*#__PURE__*/React.createElement(ClearIndicator, _extends({}, commonProps, {\n        innerProps: innerProps,\n        isFocused: isFocused\n      }));\n    }\n  }, {\n    key: \"renderLoadingIndicator\",\n    value: function renderLoadingIndicator() {\n      var _this$getComponents4 = this.getComponents(),\n        LoadingIndicator = _this$getComponents4.LoadingIndicator;\n      var commonProps = this.commonProps;\n      var _this$props11 = this.props,\n        isDisabled = _this$props11.isDisabled,\n        isLoading = _this$props11.isLoading;\n      var isFocused = this.state.isFocused;\n      if (!LoadingIndicator || !isLoading) return null;\n      var innerProps = {\n        'aria-hidden': 'true'\n      };\n      return /*#__PURE__*/React.createElement(LoadingIndicator, _extends({}, commonProps, {\n        innerProps: innerProps,\n        isDisabled: isDisabled,\n        isFocused: isFocused\n      }));\n    }\n  }, {\n    key: \"renderIndicatorSeparator\",\n    value: function renderIndicatorSeparator() {\n      var _this$getComponents5 = this.getComponents(),\n        DropdownIndicator = _this$getComponents5.DropdownIndicator,\n        IndicatorSeparator = _this$getComponents5.IndicatorSeparator;\n\n      // separator doesn't make sense without the dropdown indicator\n      if (!DropdownIndicator || !IndicatorSeparator) return null;\n      var commonProps = this.commonProps;\n      var isDisabled = this.props.isDisabled;\n      var isFocused = this.state.isFocused;\n      return /*#__PURE__*/React.createElement(IndicatorSeparator, _extends({}, commonProps, {\n        isDisabled: isDisabled,\n        isFocused: isFocused\n      }));\n    }\n  }, {\n    key: \"renderDropdownIndicator\",\n    value: function renderDropdownIndicator() {\n      var _this$getComponents6 = this.getComponents(),\n        DropdownIndicator = _this$getComponents6.DropdownIndicator;\n      if (!DropdownIndicator) return null;\n      var commonProps = this.commonProps;\n      var isDisabled = this.props.isDisabled;\n      var isFocused = this.state.isFocused;\n      var innerProps = {\n        onMouseDown: this.onDropdownIndicatorMouseDown,\n        onTouchEnd: this.onDropdownIndicatorTouchEnd,\n        'aria-hidden': 'true'\n      };\n      return /*#__PURE__*/React.createElement(DropdownIndicator, _extends({}, commonProps, {\n        innerProps: innerProps,\n        isDisabled: isDisabled,\n        isFocused: isFocused\n      }));\n    }\n  }, {\n    key: \"renderMenu\",\n    value: function renderMenu() {\n      var _this4 = this;\n      var _this$getComponents7 = this.getComponents(),\n        Group = _this$getComponents7.Group,\n        GroupHeading = _this$getComponents7.GroupHeading,\n        Menu = _this$getComponents7.Menu,\n        MenuList = _this$getComponents7.MenuList,\n        MenuPortal = _this$getComponents7.MenuPortal,\n        LoadingMessage = _this$getComponents7.LoadingMessage,\n        NoOptionsMessage = _this$getComponents7.NoOptionsMessage,\n        Option = _this$getComponents7.Option;\n      var commonProps = this.commonProps;\n      var focusedOption = this.state.focusedOption;\n      var _this$props12 = this.props,\n        captureMenuScroll = _this$props12.captureMenuScroll,\n        inputValue = _this$props12.inputValue,\n        isLoading = _this$props12.isLoading,\n        loadingMessage = _this$props12.loadingMessage,\n        minMenuHeight = _this$props12.minMenuHeight,\n        maxMenuHeight = _this$props12.maxMenuHeight,\n        menuIsOpen = _this$props12.menuIsOpen,\n        menuPlacement = _this$props12.menuPlacement,\n        menuPosition = _this$props12.menuPosition,\n        menuPortalTarget = _this$props12.menuPortalTarget,\n        menuShouldBlockScroll = _this$props12.menuShouldBlockScroll,\n        menuShouldScrollIntoView = _this$props12.menuShouldScrollIntoView,\n        noOptionsMessage = _this$props12.noOptionsMessage,\n        onMenuScrollToTop = _this$props12.onMenuScrollToTop,\n        onMenuScrollToBottom = _this$props12.onMenuScrollToBottom;\n      if (!menuIsOpen) return null;\n\n      // TODO: Internal Option Type here\n      var render = function render(props, id) {\n        var type = props.type,\n          data = props.data,\n          isDisabled = props.isDisabled,\n          isSelected = props.isSelected,\n          label = props.label,\n          value = props.value;\n        var isFocused = focusedOption === data;\n        var onHover = isDisabled ? undefined : function () {\n          return _this4.onOptionHover(data);\n        };\n        var onSelect = isDisabled ? undefined : function () {\n          return _this4.selectOption(data);\n        };\n        var optionId = \"\".concat(_this4.getElementId('option'), \"-\").concat(id);\n        var innerProps = {\n          id: optionId,\n          onClick: onSelect,\n          onMouseMove: onHover,\n          onMouseOver: onHover,\n          tabIndex: -1\n        };\n        return /*#__PURE__*/React.createElement(Option, _extends({}, commonProps, {\n          innerProps: innerProps,\n          data: data,\n          isDisabled: isDisabled,\n          isSelected: isSelected,\n          key: optionId,\n          label: label,\n          type: type,\n          value: value,\n          isFocused: isFocused,\n          innerRef: isFocused ? _this4.getFocusedOptionRef : undefined\n        }), _this4.formatOptionLabel(props.data, 'menu'));\n      };\n      var menuUI;\n      if (this.hasOptions()) {\n        menuUI = this.getCategorizedOptions().map(function (item) {\n          if (item.type === 'group') {\n            var _data = item.data,\n              options = item.options,\n              groupIndex = item.index;\n            var groupId = \"\".concat(_this4.getElementId('group'), \"-\").concat(groupIndex);\n            var headingId = \"\".concat(groupId, \"-heading\");\n            return /*#__PURE__*/React.createElement(Group, _extends({}, commonProps, {\n              key: groupId,\n              data: _data,\n              options: options,\n              Heading: GroupHeading,\n              headingProps: {\n                id: headingId,\n                data: item.data\n              },\n              label: _this4.formatGroupLabel(item.data)\n            }), item.options.map(function (option) {\n              return render(option, \"\".concat(groupIndex, \"-\").concat(option.index));\n            }));\n          } else if (item.type === 'option') {\n            return render(item, \"\".concat(item.index));\n          }\n        });\n      } else if (isLoading) {\n        var message = loadingMessage({\n          inputValue: inputValue\n        });\n        if (message === null) return null;\n        menuUI = /*#__PURE__*/React.createElement(LoadingMessage, commonProps, message);\n      } else {\n        var _message = noOptionsMessage({\n          inputValue: inputValue\n        });\n        if (_message === null) return null;\n        menuUI = /*#__PURE__*/React.createElement(NoOptionsMessage, commonProps, _message);\n      }\n      var menuPlacementProps = {\n        minMenuHeight: minMenuHeight,\n        maxMenuHeight: maxMenuHeight,\n        menuPlacement: menuPlacement,\n        menuPosition: menuPosition,\n        menuShouldScrollIntoView: menuShouldScrollIntoView\n      };\n      var menuElement = /*#__PURE__*/React.createElement(MenuPlacer, _extends({}, commonProps, menuPlacementProps), function (_ref4) {\n        var ref = _ref4.ref,\n          _ref4$placerProps = _ref4.placerProps,\n          placement = _ref4$placerProps.placement,\n          maxHeight = _ref4$placerProps.maxHeight;\n        return /*#__PURE__*/React.createElement(Menu, _extends({}, commonProps, menuPlacementProps, {\n          innerRef: ref,\n          innerProps: {\n            onMouseDown: _this4.onMenuMouseDown,\n            onMouseMove: _this4.onMenuMouseMove,\n            id: _this4.getElementId('listbox')\n          },\n          isLoading: isLoading,\n          placement: placement\n        }), /*#__PURE__*/React.createElement(ScrollManager, {\n          captureEnabled: captureMenuScroll,\n          onTopArrive: onMenuScrollToTop,\n          onBottomArrive: onMenuScrollToBottom,\n          lockEnabled: menuShouldBlockScroll\n        }, function (scrollTargetRef) {\n          return /*#__PURE__*/React.createElement(MenuList, _extends({}, commonProps, {\n            innerRef: function innerRef(instance) {\n              _this4.getMenuListRef(instance);\n              scrollTargetRef(instance);\n            },\n            isLoading: isLoading,\n            maxHeight: maxHeight,\n            focusedOption: focusedOption\n          }), menuUI);\n        }));\n      });\n\n      // positioning behaviour is almost identical for portalled and fixed,\n      // so we use the same component. the actual portalling logic is forked\n      // within the component based on `menuPosition`\n      return menuPortalTarget || menuPosition === 'fixed' ? /*#__PURE__*/React.createElement(MenuPortal, _extends({}, commonProps, {\n        appendTo: menuPortalTarget,\n        controlElement: this.controlRef,\n        menuPlacement: menuPlacement,\n        menuPosition: menuPosition\n      }), menuElement) : menuElement;\n    }\n  }, {\n    key: \"renderFormField\",\n    value: function renderFormField() {\n      var _this5 = this;\n      var _this$props13 = this.props,\n        delimiter = _this$props13.delimiter,\n        isDisabled = _this$props13.isDisabled,\n        isMulti = _this$props13.isMulti,\n        name = _this$props13.name,\n        required = _this$props13.required;\n      var selectValue = this.state.selectValue;\n      if (required && !this.hasValue() && !isDisabled) {\n        return /*#__PURE__*/React.createElement(RequiredInput$1, {\n          name: name,\n          onFocus: this.onValueInputFocus\n        });\n      }\n      if (!name || isDisabled) return;\n      if (isMulti) {\n        if (delimiter) {\n          var value = selectValue.map(function (opt) {\n            return _this5.getOptionValue(opt);\n          }).join(delimiter);\n          return /*#__PURE__*/React.createElement(\"input\", {\n            name: name,\n            type: \"hidden\",\n            value: value\n          });\n        } else {\n          var input = selectValue.length > 0 ? selectValue.map(function (opt, i) {\n            return /*#__PURE__*/React.createElement(\"input\", {\n              key: \"i-\".concat(i),\n              name: name,\n              type: \"hidden\",\n              value: _this5.getOptionValue(opt)\n            });\n          }) : /*#__PURE__*/React.createElement(\"input\", {\n            name: name,\n            type: \"hidden\",\n            value: \"\"\n          });\n          return /*#__PURE__*/React.createElement(\"div\", null, input);\n        }\n      } else {\n        var _value = selectValue[0] ? this.getOptionValue(selectValue[0]) : '';\n        return /*#__PURE__*/React.createElement(\"input\", {\n          name: name,\n          type: \"hidden\",\n          value: _value\n        });\n      }\n    }\n  }, {\n    key: \"renderLiveRegion\",\n    value: function renderLiveRegion() {\n      var commonProps = this.commonProps;\n      var _this$state6 = this.state,\n        ariaSelection = _this$state6.ariaSelection,\n        focusedOption = _this$state6.focusedOption,\n        focusedValue = _this$state6.focusedValue,\n        isFocused = _this$state6.isFocused,\n        selectValue = _this$state6.selectValue;\n      var focusableOptions = this.getFocusableOptions();\n      return /*#__PURE__*/React.createElement(LiveRegion$1, _extends({}, commonProps, {\n        id: this.getElementId('live-region'),\n        ariaSelection: ariaSelection,\n        focusedOption: focusedOption,\n        focusedValue: focusedValue,\n        isFocused: isFocused,\n        selectValue: selectValue,\n        focusableOptions: focusableOptions\n      }));\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$getComponents8 = this.getComponents(),\n        Control = _this$getComponents8.Control,\n        IndicatorsContainer = _this$getComponents8.IndicatorsContainer,\n        SelectContainer = _this$getComponents8.SelectContainer,\n        ValueContainer = _this$getComponents8.ValueContainer;\n      var _this$props14 = this.props,\n        className = _this$props14.className,\n        id = _this$props14.id,\n        isDisabled = _this$props14.isDisabled,\n        menuIsOpen = _this$props14.menuIsOpen;\n      var isFocused = this.state.isFocused;\n      var commonProps = this.commonProps = this.getCommonProps();\n      return /*#__PURE__*/React.createElement(SelectContainer, _extends({}, commonProps, {\n        className: className,\n        innerProps: {\n          id: id,\n          onKeyDown: this.onKeyDown\n        },\n        isDisabled: isDisabled,\n        isFocused: isFocused\n      }), this.renderLiveRegion(), /*#__PURE__*/React.createElement(Control, _extends({}, commonProps, {\n        innerRef: this.getControlRef,\n        innerProps: {\n          onMouseDown: this.onControlMouseDown,\n          onTouchEnd: this.onControlTouchEnd\n        },\n        isDisabled: isDisabled,\n        isFocused: isFocused,\n        menuIsOpen: menuIsOpen\n      }), /*#__PURE__*/React.createElement(ValueContainer, _extends({}, commonProps, {\n        isDisabled: isDisabled\n      }), this.renderPlaceholderOrValue(), this.renderInput()), /*#__PURE__*/React.createElement(IndicatorsContainer, _extends({}, commonProps, {\n        isDisabled: isDisabled\n      }), this.renderClearIndicator(), this.renderLoadingIndicator(), this.renderIndicatorSeparator(), this.renderDropdownIndicator())), this.renderMenu(), this.renderFormField());\n    }\n  }], [{\n    key: \"getDerivedStateFromProps\",\n    value: function getDerivedStateFromProps(props, state) {\n      var prevProps = state.prevProps,\n        clearFocusValueOnUpdate = state.clearFocusValueOnUpdate,\n        inputIsHiddenAfterUpdate = state.inputIsHiddenAfterUpdate,\n        ariaSelection = state.ariaSelection,\n        isFocused = state.isFocused,\n        prevWasFocused = state.prevWasFocused;\n      var options = props.options,\n        value = props.value,\n        menuIsOpen = props.menuIsOpen,\n        inputValue = props.inputValue,\n        isMulti = props.isMulti;\n      var selectValue = cleanValue(value);\n      var newMenuOptionsState = {};\n      if (prevProps && (value !== prevProps.value || options !== prevProps.options || menuIsOpen !== prevProps.menuIsOpen || inputValue !== prevProps.inputValue)) {\n        var focusableOptions = menuIsOpen ? buildFocusableOptions(props, selectValue) : [];\n        var focusedValue = clearFocusValueOnUpdate ? getNextFocusedValue(state, selectValue) : null;\n        var focusedOption = getNextFocusedOption(state, focusableOptions);\n        newMenuOptionsState = {\n          selectValue: selectValue,\n          focusedOption: focusedOption,\n          focusedValue: focusedValue,\n          clearFocusValueOnUpdate: false\n        };\n      }\n      // some updates should toggle the state of the input visibility\n      var newInputIsHiddenState = inputIsHiddenAfterUpdate != null && props !== prevProps ? {\n        inputIsHidden: inputIsHiddenAfterUpdate,\n        inputIsHiddenAfterUpdate: undefined\n      } : {};\n      var newAriaSelection = ariaSelection;\n      var hasKeptFocus = isFocused && prevWasFocused;\n      if (isFocused && !hasKeptFocus) {\n        // If `value` or `defaultValue` props are not empty then announce them\n        // when the Select is initially focused\n        newAriaSelection = {\n          value: valueTernary(isMulti, selectValue, selectValue[0] || null),\n          options: selectValue,\n          action: 'initial-input-focus'\n        };\n        hasKeptFocus = !prevWasFocused;\n      }\n\n      // If the 'initial-input-focus' action has been set already\n      // then reset the ariaSelection to null\n      if ((ariaSelection === null || ariaSelection === void 0 ? void 0 : ariaSelection.action) === 'initial-input-focus') {\n        newAriaSelection = null;\n      }\n      return _objectSpread(_objectSpread(_objectSpread({}, newMenuOptionsState), newInputIsHiddenState), {}, {\n        prevProps: props,\n        ariaSelection: newAriaSelection,\n        prevWasFocused: hasKeptFocus\n      });\n    }\n  }]);\n  return Select;\n}(Component);\nSelect.defaultProps = defaultProps;\n\nexport { Select as S, defaultProps as a, getOptionLabel$1 as b, createFilter as c, defaultTheme as d, getOptionValue$1 as g, mergeStyles as m };\n","import { u as useStateManager } from './useStateManager-7e1e8489.esm.js';\nexport { u as useStateManager } from './useStateManager-7e1e8489.esm.js';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { forwardRef, useMemo } from 'react';\nimport { S as Select } from './Select-ce3716e1.esm.js';\nexport { c as createFilter, d as defaultTheme, m as mergeStyles } from './Select-ce3716e1.esm.js';\nimport { CacheProvider } from '@emotion/react';\nimport createCache from '@emotion/cache';\nexport { c as components } from './index-6ea50319.esm.js';\nimport '@babel/runtime/helpers/objectSpread2';\nimport '@babel/runtime/helpers/slicedToArray';\nimport '@babel/runtime/helpers/objectWithoutProperties';\nimport '@babel/runtime/helpers/classCallCheck';\nimport '@babel/runtime/helpers/createClass';\nimport '@babel/runtime/helpers/inherits';\nimport '@babel/runtime/helpers/createSuper';\nimport '@babel/runtime/helpers/toConsumableArray';\nimport 'memoize-one';\nimport '@babel/runtime/helpers/typeof';\nimport '@babel/runtime/helpers/taggedTemplateLiteral';\nimport '@babel/runtime/helpers/defineProperty';\nimport 'react-dom';\nimport '@floating-ui/dom';\nimport 'use-isomorphic-layout-effect';\n\nvar StateManagedSelect = /*#__PURE__*/forwardRef(function (props, ref) {\n  var baseSelectProps = useStateManager(props);\n  return /*#__PURE__*/React.createElement(Select, _extends({\n    ref: ref\n  }, baseSelectProps));\n});\nvar StateManagedSelect$1 = StateManagedSelect;\n\nvar NonceProvider = (function (_ref) {\n  var nonce = _ref.nonce,\n    children = _ref.children,\n    cacheKey = _ref.cacheKey;\n  var emotionCache = useMemo(function () {\n    return createCache({\n      key: cacheKey,\n      nonce: nonce\n    });\n  }, [cacheKey, nonce]);\n  return /*#__PURE__*/React.createElement(CacheProvider, {\n    value: emotionCache\n  }, children);\n});\n\nexport { NonceProvider, StateManagedSelect$1 as default };\n","/**\n * A React Select component for use in Formik forms.\n */\nimport { useField } from 'formik';\nimport Select from 'react-select';\n\nexport const FormikSelect = ({\n  selectOptions,\n  formikFieldName,\n  placeholder,\n  defaultValue,\n  style,\n  className = 'SelectInput',\n  isMulti = false,\n  isClearable = false,\n  onFocus = event => {},\n  onChange: customOnChange,\n  menuPortalTarget,\n  styles,\n  ...rest\n}) => {\n  // eslint-disable-next-line no-unused-vars\n  const [field, _, helpers] = useField(formikFieldName);\n  const { setValue } = helpers;\n\n  // handles both multi-select and single-select cases\n  const getValue = options => {\n    if (options) {\n      return isMulti ? options.map(option => option.value) : options.value;\n    } else {\n      return isMulti ? [] : '';\n    }\n  };\n\n  const handleChange = selected => {\n    setValue(getValue(selected));\n    if (customOnChange) {\n      customOnChange(selected);\n    }\n  };\n\n  // Convert Formik field value to React Select format\n  const getSelectValue = () => {\n    if (!field.value || !selectOptions) {\n      return isMulti ? [] : null;\n    }\n\n    if (isMulti) {\n      // For multi-select, map array of values to option objects\n      return Array.isArray(field.value)\n        ? field.value.map(\n            val =>\n              selectOptions.find(opt => opt.value === val) || {\n                value: val,\n                label: val,\n              },\n          )\n        : [];\n    } else {\n      // For single-select, find the matching option\n      return selectOptions.find(opt => opt.value === field.value) || null;\n    }\n  };\n\n  return (\n    <Select\n      className={className}\n      value={getSelectValue()}\n      options={selectOptions}\n      name={field.name}\n      placeholder={placeholder}\n      onBlur={field.onBlur}\n      onChange={handleChange}\n      styles={styles || style}\n      isMulti={isMulti}\n      isClearable={isClearable}\n      onFocus={event => onFocus(event)}\n      id={field.name}\n      menuPortalTarget={menuPortalTarget}\n      {...rest}\n    />\n  );\n};\n\nFormikSelect.defaultProps = {\n  placeholder: '',\n};\n","const ValidIcon = ({ width = '25px', height = '25px', style = {} }) => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width={width}\n    height={height}\n    style={style}\n    fill=\"currentColor\"\n    className=\"bi bi-check-circle-fill\"\n    viewBox=\"0 0 16 16\"\n    data-testid=\"valid-icon\"\n  >\n    <path d=\"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-3.97-3.03a.75.75 0 0 0-1.08.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-.01-1.05z\" />\n  </svg>\n);\n\nexport default ValidIcon;\n","const AlertIcon = props => (\n  <svg\n    width=\"2em\"\n    height=\"2em\"\n    viewBox=\"0 0 24 24\"\n    version=\"1.1\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    {...props}\n  >\n    <title>alert_fill</title>\n    <g id=\"page-1\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n      <g\n        id=\"System\"\n        transform=\"translate(-48.000000, -48.000000)\"\n        fillRule=\"nonzero\"\n      >\n        <g id=\"alert_fill\" transform=\"translate(48.000000, 48.000000)\">\n          <path\n            d=\"M24,0 L24,24 L0,24 L0,0 L24,0 Z M12.5934901,23.257841 L12.5819402,23.2595131 L12.5108777,23.2950439 L12.4918791,23.2987469 L12.4918791,23.2987469 L12.4767152,23.2950439 L12.4056548,23.2595131 C12.3958229,23.2563662 12.3870493,23.2590235 12.3821421,23.2649074 L12.3780323,23.275831 L12.360941,23.7031097 L12.3658947,23.7234994 L12.3769048,23.7357139 L12.4804777,23.8096931 L12.4953491,23.8136134 L12.4953491,23.8136134 L12.5071152,23.8096931 L12.6106902,23.7357139 L12.6232938,23.7196733 L12.6232938,23.7196733 L12.6266527,23.7031097 L12.609561,23.275831 C12.6075724,23.2657013 12.6010112,23.2592993 12.5934901,23.257841 L12.5934901,23.257841 Z M12.8583906,23.1452862 L12.8445485,23.1473072 L12.6598443,23.2396597 L12.6498822,23.2499052 L12.6498822,23.2499052 L12.6471943,23.2611114 L12.6650943,23.6906389 L12.6699349,23.7034178 L12.6699349,23.7034178 L12.678386,23.7104931 L12.8793402,23.8032389 C12.8914285,23.8068999 12.9022333,23.8029875 12.9078286,23.7952264 L12.9118235,23.7811639 L12.8776777,23.1665331 C12.8752882,23.1545897 12.8674102,23.1470016 12.8583906,23.1452862 L12.8583906,23.1452862 Z M12.1430473,23.1473072 C12.1332178,23.1423925 12.1221763,23.1452606 12.1156365,23.1525954 L12.1099173,23.1665331 L12.0757714,23.7811639 C12.0751323,23.7926639 12.0828099,23.8018602 12.0926481,23.8045676 L12.108256,23.8032389 L12.3092106,23.7104931 L12.3186497,23.7024347 L12.3186497,23.7024347 L12.3225043,23.6906389 L12.340401,23.2611114 L12.337245,23.2485176 L12.337245,23.2485176 L12.3277531,23.2396597 L12.1430473,23.1473072 Z\"\n            id=\"MingCute\"\n            fillRule=\"nonzero\"\n          ></path>\n          <path\n            d=\"M13.299,3.1477 L21.933,18.1022 C22.5103,19.1022 21.7887,20.3522 20.634,20.3522 L3.36601,20.3522 C2.21131,20.3522 1.48962,19.1022 2.06697,18.1022 L10.7009,3.14771 C11.2783,2.14771 12.7217,2.1477 13.299,3.1477 Z M12,15 C11.4477,15 11,15.4477 11,16 C11,16.5523 11.4477,17 12,17 C12.5523,17 13,16.5523 13,16 C13,15.4477 12.5523,15 12,15 Z M12,8 C11.48715,8 11.0644908,8.38604429 11.0067275,8.88337975 L11,9 L11,13 C11,13.5523 11.4477,14 12,14 C12.51285,14 12.9355092,13.613973 12.9932725,13.1166239 L13,13 L13,9 C13,8.44772 12.5523,8 12,8 Z\"\n            id=\"shape\"\n            fill=\"#09244B\"\n          ></path>\n        </g>\n      </g>\n    </g>\n  </svg>\n);\nexport default AlertIcon;\n","import ValidIcon from '../app/icons/ValidIcon';\nimport AlertIcon from '../app/icons/AlertIcon';\nimport * as React from 'react';\n\nexport const displayMessageAfterSubmit = status => {\n  return status?.success !== undefined ? (\n    <div className=\"message success\" data-testid=\"success\">\n      <ValidIcon />\n      {status?.success}\n    </div>\n  ) : status?.failure !== undefined ? (\n    <div className=\"message alert\" data-testid=\"failure\">\n      <AlertIcon />\n      {status?.failure}\n    </div>\n  ) : (\n    ''\n  );\n};\n\nexport const labelize = name => {\n  return name.replace(/_/g, ' ').replace(/\\b(\\w)/g, char => char.toUpperCase());\n};\n","/**\n * Node add + edit page for transforms, metrics, and dimensions. The creation and edit flow for these\n * node types is largely the same, with minor differences handled server-side. For the `query`\n * field, this page will render a CodeMirror SQL editor with autocompletion and syntax highlighting.\n */\nimport { ErrorMessage, Field, Form, Formik } from 'formik';\n\nimport NamespaceHeader from '../../components/NamespaceHeader';\nimport React, { useContext, useEffect, useState } from 'react';\nimport DJClientContext from '../../providers/djclient';\nimport 'styles/node-creation.scss';\nimport { FormikSelect } from '../AddEditNodePage/FormikSelect';\nimport { displayMessageAfterSubmit } from '../../../utils/form';\n\nexport function RegisterTablePage() {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const [catalogs, setCatalogs] = useState([]);\n\n  useEffect(() => {\n    const fetchData = async () => {\n      const catalogs = await djClient.catalogs();\n      setCatalogs(\n        catalogs.map(catalog => {\n          return { value: catalog.name, label: catalog.name };\n        }),\n      );\n    };\n    fetchData().catch(console.error);\n  }, [djClient, djClient.namespaces]);\n\n  const initialValues = {\n    catalog: '',\n    schema: '',\n    table: '',\n  };\n\n  const validator = values => {\n    const errors = {};\n    if (!values.table) {\n      errors.table = 'Required';\n    }\n    if (!values.schema) {\n      errors.schema = 'Required';\n    }\n    return errors;\n  };\n\n  const handleSubmit = async (values, { setSubmitting, setStatus }) => {\n    const { status, json } = await djClient.registerTable(\n      values.catalog,\n      values.schema,\n      values.table,\n    );\n    if (status === 200 || status === 201) {\n      setStatus({\n        success: (\n          <>\n            Successfully registered source node{' '}\n            <a href={`/nodes/${json.name}`}>{json.name}</a>, which references\n            table {values.catalog}.{values.schema}.{values.table}.\n          </>\n        ),\n      });\n    } else {\n      setStatus({\n        failure: `${json.message}`,\n      });\n    }\n    setSubmitting(false);\n    window.scrollTo({ top: 0, left: 0, behavior: 'smooth' });\n  };\n\n  return (\n    <div className=\"mid\">\n      <NamespaceHeader namespace=\"\" />\n      <div className=\"card\">\n        <div className=\"card-header\">\n          <h2>\n            Register{' '}\n            <span className={`node_type__source node_type_creation_heading`}>\n              Source\n            </span>\n          </h2>\n          <center>\n            <Formik\n              initialValues={initialValues}\n              validate={validator}\n              onSubmit={handleSubmit}\n            >\n              {function Render({ isSubmitting, status }) {\n                return (\n                  <Form>\n                    {displayMessageAfterSubmit(status)}\n                    {\n                      <>\n                        <div className=\"SourceCreationInput\">\n                          <ErrorMessage name=\"catalog\" component=\"span\" />\n                          <label htmlFor=\"catalog\">Catalog</label>\n                          <span data-testid=\"choose-catalog\">\n                            <FormikSelect\n                              selectOptions={catalogs}\n                              formikFieldName=\"catalog\"\n                              placeholder=\"Choose Catalog\"\n                              defaultValue={catalogs[0]}\n                            />\n                          </span>\n                        </div>\n                        <div className=\"SourceCreationInput\">\n                          <ErrorMessage name=\"schema\" component=\"span\" />\n                          <label htmlFor=\"schema\">Schema</label>\n                          <Field\n                            type=\"text\"\n                            name=\"schema\"\n                            id=\"schema\"\n                            placeholder=\"Schema\"\n                          />\n                        </div>\n                        <div className=\"SourceCreationInput NodeCreationInput\">\n                          <ErrorMessage name=\"table\" component=\"span\" />\n                          <label htmlFor=\"table\">Table</label>\n                          <Field\n                            type=\"text\"\n                            name=\"table\"\n                            id=\"table\"\n                            placeholder=\"Table\"\n                          />\n                        </div>\n                        <button type=\"submit\" disabled={isSubmitting}>\n                          Register\n                        </button>\n                      </>\n                    }\n                  </Form>\n                );\n              }}\n            </Formik>\n          </center>\n        </div>\n      </div>\n    </div>\n  );\n}\n","const DJLogo = props => (\n  <svg\n    width=\"30\"\n    height=\"30\"\n    style={{\n      marginRight: '10px',\n      marginBottom: '2px',\n      stroke: 'transparent',\n      strokeWidth: '0px',\n    }}\n    viewBox=\"0 0 83 83\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n  >\n    <rect width=\"83\" height=\"83\" fill=\"url(#pattern0)\" />\n    <rect width=\"83\" height=\"83\" stroke=\"black\" />\n    <defs>\n      <pattern\n        id=\"pattern0\"\n        patternContentUnits=\"objectBoundingBox\"\n        width=\"1\"\n        height=\"1\"\n      >\n        <use xlinkHref=\"#image0_1_2\" transform=\"scale(0.00364964)\" />\n      </pattern>\n      <image\n        id=\"image0_1_2\"\n        width=\"274\"\n        height=\"274\"\n        xlinkHref=\"data:image/png;base64,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\"\n      />\n    </defs>\n  </svg>\n);\nexport default DJLogo;\n","import { useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport DJClientContext from '../providers/djclient';\n\nimport './search.css';\n\nconst DEBOUNCE_MS = 120;\nconst MIN_QUERY_LENGTH = 1;\nconst CACHE_MAX_ENTRIES = 50;\nconst CACHE_TTL_MS = 60 * 1000;\n\nconst truncate = str => {\n  if (!str) return '';\n  return str.length > 100 ? str.substring(0, 90) + '...' : str;\n};\n\nexport default function Search() {\n  const [searchValue, setSearchValue] = useState('');\n  const [nodes, setNodes] = useState([]);\n  const [tags, setTags] = useState([]);\n  const [isLoading, setIsLoading] = useState(false);\n  const abortRef = useRef(null);\n  const debounceRef = useRef(null);\n  const inputRef = useRef(null);\n  // LRU cache keyed on normalized query; Map preserves insertion order so the\n  // oldest entry is always the first key.\n  const cacheRef = useRef(new Map());\n\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n\n  const readCache = useCallback(key => {\n    const entry = cacheRef.current.get(key);\n    if (!entry) return null;\n    if (Date.now() - entry.at > CACHE_TTL_MS) {\n      cacheRef.current.delete(key);\n      return null;\n    }\n    // Touch for LRU ordering.\n    cacheRef.current.delete(key);\n    cacheRef.current.set(key, entry);\n    return entry.value;\n  }, []);\n\n  const writeCache = useCallback((key, value) => {\n    const cache = cacheRef.current;\n    cache.set(key, { value, at: Date.now() });\n    while (cache.size > CACHE_MAX_ENTRIES) {\n      const oldest = cache.keys().next().value;\n      cache.delete(oldest);\n    }\n  }, []);\n\n  const runSearch = useCallback(\n    async query => {\n      const cached = readCache(query);\n      if (cached) {\n        if (abortRef.current) abortRef.current.abort();\n        setNodes(cached.nodes);\n        setTags(cached.tags);\n        setIsLoading(false);\n        return;\n      }\n      if (abortRef.current) {\n        abortRef.current.abort();\n      }\n      const controller = new AbortController();\n      abortRef.current = controller;\n      setIsLoading(true);\n      try {\n        const results = await djClient.globalSearch(query, {\n          signal: controller.signal,\n        });\n        if (!controller.signal.aborted) {\n          setNodes(results.nodes);\n          setTags(results.tags);\n          writeCache(query, results);\n        }\n      } catch (err) {\n        if (err.name !== 'AbortError') {\n          console.error('Search failed:', err);\n          setNodes([]);\n          setTags([]);\n        }\n      } finally {\n        if (!controller.signal.aborted) {\n          setIsLoading(false);\n        }\n      }\n    },\n    [djClient, readCache, writeCache],\n  );\n\n  const handleChange = e => {\n    const value = e.target.value;\n    setSearchValue(value);\n    if (debounceRef.current) {\n      clearTimeout(debounceRef.current);\n    }\n    const trimmed = value.trim();\n    if (trimmed.length < MIN_QUERY_LENGTH) {\n      if (abortRef.current) abortRef.current.abort();\n      setNodes([]);\n      setTags([]);\n      setIsLoading(false);\n      return;\n    }\n    // Synchronous cache hit: render instantly without waiting for debounce.\n    const cached = readCache(trimmed);\n    if (cached) {\n      if (abortRef.current) abortRef.current.abort();\n      setNodes(cached.nodes);\n      setTags(cached.tags);\n      setIsLoading(false);\n      return;\n    }\n    debounceRef.current = setTimeout(() => runSearch(trimmed), DEBOUNCE_MS);\n  };\n\n  useEffect(() => {\n    return () => {\n      if (debounceRef.current) clearTimeout(debounceRef.current);\n      if (abortRef.current) abortRef.current.abort();\n    };\n  }, []);\n\n  const hasResults = nodes.length > 0 || tags.length > 0;\n\n  return (\n    <div>\n      <div className=\"nav-search-box\" onClick={() => inputRef.current?.focus()}>\n        <input\n          ref={inputRef}\n          type=\"text\"\n          placeholder={isLoading ? 'Searching...' : 'Search nodes and tags...'}\n          name=\"search\"\n          value={searchValue}\n          onChange={handleChange}\n        />\n      </div>\n      {hasResults && (\n        <div\n          className=\"search-results\"\n          style={isLoading ? { opacity: 0.6 } : undefined}\n        >\n          {nodes.map(item => (\n            <a key={`node-${item.name}`} href={`/nodes/${item.name}`}>\n              <div className=\"search-result-item\">\n                <span className={`node_type__${item.type} badge node_type`}>\n                  {item.type}\n                </span>\n                {item.display_name} (<b>{item.name}</b>){' '}\n                {item.description ? '- ' : ' '}\n                {truncate(item.description)}\n              </div>\n            </a>\n          ))}\n          {tags.map(item => (\n            <a key={`tag-${item.name}`} href={`/tags/${item.name}`}>\n              <div className=\"search-result-item\">\n                <span className=\"node_type__tag badge node_type\">tag</span>\n                {item.display_name} (<b>{item.name}</b>){' '}\n                {item.description ? '- ' : ' '}\n                {truncate(item.description)}\n              </div>\n            </a>\n          ))}\n        </div>\n      )}\n    </div>\n  );\n}\n","import React, {\n  createContext,\n  useContext,\n  useState,\n  useEffect,\n  useMemo,\n  useCallback,\n} from 'react';\nimport DJClientContext from './djclient';\n\ninterface User {\n  id?: number;\n  username?: string;\n  email?: string;\n  name?: string;\n  last_viewed_notifications_at?: string | null;\n}\n\ninterface UserContextType {\n  currentUser: User | null;\n  loading: boolean;\n  error: Error | null;\n  refetchUser: () => Promise<void>;\n}\n\nconst UserContext = createContext<UserContextType>({\n  currentUser: null,\n  loading: true,\n  error: null,\n  refetchUser: async () => {},\n});\n\nexport function UserProvider({ children }: { children: React.ReactNode }) {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const [currentUser, setCurrentUser] = useState<User | null>(null);\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState<Error | null>(null);\n\n  const fetchUser = useCallback(async () => {\n    try {\n      setLoading(true);\n      setError(null);\n      const user = await djClient.whoami();\n      setCurrentUser(user);\n    } catch (err) {\n      setError(err instanceof Error ? err : new Error('Failed to fetch user'));\n      console.error('Error fetching user:', err);\n    } finally {\n      setLoading(false);\n    }\n  }, [djClient]);\n\n  useEffect(() => {\n    fetchUser();\n  }, [fetchUser]);\n\n  const value = useMemo(\n    () => ({\n      currentUser,\n      loading,\n      error,\n      refetchUser: fetchUser,\n    }),\n    [currentUser, loading, error, fetchUser],\n  );\n\n  return <UserContext.Provider value={value}>{children}</UserContext.Provider>;\n}\n\nexport function useCurrentUser() {\n  return useContext(UserContext);\n}\n\nexport default UserContext;\n","const NotificationIcon = props => (\n  <svg\n    version=\"1.1\"\n    id=\"Layer_1\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n    x=\"0px\"\n    y=\"0px\"\n    viewBox=\"0 0 16.1 19\"\n    xmlSpace=\"preserve\"\n  >\n    <g id=\"XMLID_27_\">\n      <path\n        id=\"XMLID_5_\"\n        className=\"st0\"\n        d=\"M8.1,19c1,0,1.9-0.9,1.9-1.9H6.2C6.2,18.1,7,19,8.1,19z\"\n      />\n      <path\n        id=\"XMLID_46_\"\n        className=\"st0\"\n        d=\"M14.2,13.3V8.1c0-2.9-2-5.3-4.8-6V1.4C9.5,0.7,8.8,0,8.1,0S6.7,0.7,6.7,1.4v0.7\n            c-2.8,0.7-4.8,3-4.8,6v5.2L0,15.2v0.9h16.1v-0.9L14.2,13.3z\"\n      />\n    </g>\n  </svg>\n);\nexport default NotificationIcon;\n","const SettingsIcon = props => (\n  <svg\n    version=\"1.1\"\n    id=\"Layer_1\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n    x=\"0px\"\n    y=\"0px\"\n    viewBox=\"0 0 19 19\"\n    xmlSpace=\"preserve\"\n  >\n    <g id=\"XMLID_196_\">\n      <path\n        id=\"settings_2_\"\n        className=\"st0\"\n        d=\"M18.3,8.1l-1.9-0.3c-0.1-0.6-0.3-1.1-0.6-1.6L17,4.7c0.3-0.3,0.2-0.8,0-1.1l-0.7-0.8\n\t\tc-0.3-0.3-0.7-0.4-1.1-0.2l-1.6,1c-0.7-0.5-1.5-0.9-2.4-1.1l-0.3-1.9C10.8,0.3,10.5,0,10.1,0H8.9C8.5,0,8.2,0.3,8.1,0.7L7.8,2.6\n\t\tC7.1,2.8,6.4,3,5.8,3.4L4.3,2.3C4,2.1,3.5,2.1,3.2,2.4L2.4,3.2C2.1,3.5,2.1,4,2.3,4.3l1.1,1.5c-0.4,0.6-0.6,1.3-0.8,2L0.7,8.1\n\t\tC0.3,8.2,0,8.5,0,8.9v1.1c0,0.4,0.3,0.8,0.7,0.8l1.9,0.3c0.1,0.6,0.4,1.1,0.6,1.7L2,14.3c-0.3,0.3-0.2,0.8,0,1.1l0.7,0.8\n\t\tc0.3,0.3,0.7,0.4,1.1,0.2l1.6-1c0.7,0.5,1.5,0.8,2.3,1l0.3,1.9C8.2,18.7,8.5,19,8.9,19h1.1c0.4,0,0.8-0.3,0.8-0.7l0.3-1.9\n\t\tc0.7-0.2,1.4-0.5,2-0.8l1.6,1.1c0.3,0.2,0.8,0.2,1.1-0.1l0.8-0.8c0.3-0.3,0.3-0.7,0.1-1.1l-1.1-1.6c0.4-0.6,0.7-1.3,0.8-2l1.9-0.3\n\t\tc0.4-0.1,0.7-0.4,0.7-0.8V8.9C19,8.5,18.7,8.2,18.3,8.1z M9.5,13.1c-2,0-3.6-1.6-3.6-3.6c0-2,1.6-3.6,3.6-3.6c2,0,3.6,1.6,3.6,3.6\n\t\tC13.1,11.5,11.5,13.1,9.5,13.1z\"\n      />\n    </g>\n  </svg>\n);\nexport default SettingsIcon;\n","/**\n * Format a date string as relative time (e.g., \"2h ago\", \"3d ago\")\n */\nexport const formatRelativeTime = dateString => {\n  const date = new Date(dateString);\n  const now = new Date();\n  const diffMs = now.getTime() - date.getTime();\n  const diffMins = Math.floor(diffMs / 60000);\n  const diffHours = Math.floor(diffMs / 3600000);\n  const diffDays = Math.floor(diffMs / 86400000);\n\n  if (diffMins < 1) return 'just now';\n  if (diffMins < 60) return `${diffMins}m ago`;\n  if (diffHours < 24) return `${diffHours}h ago`;\n  if (diffDays < 7) return `${diffDays}d ago`;\n  return date.toLocaleDateString();\n};\n\n/**\n * Get a date group label for grouping items (Today, Yesterday, This Week, etc.)\n */\nexport const getDateGroup = dateString => {\n  const date = new Date(dateString);\n  const now = new Date();\n\n  // Reset times to compare dates only\n  const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n  const yesterday = new Date(today);\n  yesterday.setDate(yesterday.getDate() - 1);\n  const thisWeekStart = new Date(today);\n  thisWeekStart.setDate(thisWeekStart.getDate() - today.getDay());\n  const lastWeekStart = new Date(thisWeekStart);\n  lastWeekStart.setDate(lastWeekStart.getDate() - 7);\n\n  const dateOnly = new Date(\n    date.getFullYear(),\n    date.getMonth(),\n    date.getDate(),\n  );\n\n  if (dateOnly >= today) return 'Today';\n  if (dateOnly >= yesterday) return 'Yesterday';\n  if (dateOnly >= thisWeekStart) return 'This Week';\n  if (dateOnly >= lastWeekStart) return 'Last Week';\n  return 'Older';\n};\n\n/**\n * Group items by date using getDateGroup\n */\nexport const groupByDate = (items, dateField = 'created_at') => {\n  const groups = {};\n  const order = ['Today', 'Yesterday', 'This Week', 'Last Week', 'Older'];\n\n  items.forEach(item => {\n    const group = getDateGroup(item[dateField]);\n    if (!groups[group]) groups[group] = [];\n    groups[group].push(item);\n  });\n\n  // Return in order\n  return order\n    .filter(g => groups[g]?.length > 0)\n    .map(g => ({ label: g, items: groups[g] }));\n};\n","import { useContext, useEffect, useState } from 'react';\nimport DJClientContext from '../providers/djclient';\nimport { useCurrentUser } from '../providers/UserProvider';\nimport NotificationIcon from '../icons/NotificationIcon';\nimport SettingsIcon from '../icons/SettingsIcon';\nimport LoadingIcon from '../icons/LoadingIcon';\nimport { formatRelativeTime } from '../utils/date';\n\ninterface HistoryEntry {\n  id: number;\n  entity_type: string;\n  entity_name: string;\n  node: string;\n  activity_type: string;\n  user: string;\n  created_at: string;\n  details?: {\n    version?: string;\n    [key: string]: any;\n  };\n}\n\ninterface EnrichedHistoryEntry extends HistoryEntry {\n  node_type?: string;\n  display_name?: string;\n}\n\ninterface NodeInfo {\n  name: string;\n  type: string;\n  current?: {\n    displayName?: string;\n  };\n}\n\n// Calculate unread count based on last_viewed_notifications_at\nconst calculateUnreadCount = (\n  notifs: HistoryEntry[],\n  lastViewed: string | null | undefined,\n): number => {\n  if (!lastViewed) return notifs.length;\n  const lastViewedDate = new Date(lastViewed);\n  return notifs.filter(n => new Date(n.created_at) > lastViewedDate).length;\n};\n\n// Enrich history entries with node info from GraphQL\nconst enrichWithNodeInfo = (\n  entries: HistoryEntry[],\n  nodes: NodeInfo[],\n): EnrichedHistoryEntry[] => {\n  const nodeMap = new Map(nodes.map(n => [n.name, n]));\n  return entries.map(entry => {\n    const node = nodeMap.get(entry.entity_name);\n    return {\n      ...entry,\n      node_type: node?.type,\n      display_name: node?.current?.displayName,\n    };\n  });\n};\n\ninterface NotificationBellProps {\n  onDropdownToggle?: (isOpen: boolean) => void;\n  forceClose?: boolean;\n}\n\nexport default function NotificationBell({\n  onDropdownToggle,\n  forceClose,\n}: NotificationBellProps) {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const { currentUser, loading: userLoading } = useCurrentUser();\n  const [showDropdown, setShowDropdown] = useState(false);\n\n  // Close when forceClose becomes true\n  useEffect(() => {\n    if (forceClose && showDropdown) {\n      setShowDropdown(false);\n    }\n  }, [forceClose, showDropdown]);\n  const [notifications, setNotifications] = useState<EnrichedHistoryEntry[]>(\n    [],\n  );\n  const [loading, setLoading] = useState(false);\n  const [unreadCount, setUnreadCount] = useState(0);\n\n  // Fetch notifications when user data is available\n  useEffect(() => {\n    if (userLoading) return;\n\n    async function fetchNotifications() {\n      setLoading(true);\n      try {\n        const history: HistoryEntry[] =\n          (await djClient.getSubscribedHistory(5)) || [];\n\n        // Get unique entity names and fetch their info via GraphQL\n        // (some may not be nodes, but GraphQL will just not return them)\n        const nodeNames = Array.from(new Set(history.map(h => h.entity_name)));\n        const nodes: NodeInfo[] = nodeNames.length\n          ? await djClient.getNodesByNames(nodeNames)\n          : [];\n\n        const enriched = enrichWithNodeInfo(history, nodes);\n        setNotifications(enriched);\n        setUnreadCount(\n          calculateUnreadCount(\n            history,\n            currentUser?.last_viewed_notifications_at,\n          ),\n        );\n      } catch (error) {\n        console.error('Error fetching notifications:', error);\n      } finally {\n        setLoading(false);\n      }\n    }\n    fetchNotifications();\n  }, [djClient, currentUser, userLoading]);\n\n  // Close dropdown when clicking outside\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      const target = event.target as HTMLElement;\n      if (!target.closest('.notification-bell-dropdown')) {\n        setShowDropdown(false);\n        onDropdownToggle?.(false);\n      }\n    };\n    document.addEventListener('click', handleClickOutside);\n    return () => document.removeEventListener('click', handleClickOutside);\n  }, [onDropdownToggle]);\n\n  const handleToggle = (e: React.MouseEvent) => {\n    e.stopPropagation();\n    const willOpen = !showDropdown;\n\n    // Mark as read when opening\n    if (willOpen && unreadCount > 0) {\n      djClient.markNotificationsRead();\n      setUnreadCount(0);\n    }\n\n    setShowDropdown(willOpen);\n    onDropdownToggle?.(willOpen);\n  };\n\n  return (\n    <div className=\"nav-dropdown notification-bell-dropdown\">\n      <button className=\"nav-icon-button\" onClick={handleToggle}>\n        <NotificationIcon />\n        {unreadCount > 0 && (\n          <span className=\"notification-badge\">{unreadCount}</span>\n        )}\n      </button>\n      {showDropdown && (\n        <div className=\"nav-dropdown-menu notifications-menu\">\n          <div className=\"dropdown-header\">\n            <span className=\"header-left\">\n              <NotificationIcon /> Updates\n            </span>\n            <a\n              href=\"/settings#notifications\"\n              className=\"header-settings\"\n              title=\"Manage subscriptions\"\n            >\n              <SettingsIcon />\n            </a>\n          </div>\n          <div className=\"notifications-list\">\n            {loading ? (\n              <div className=\"dropdown-item\">\n                <LoadingIcon centered={false} />\n              </div>\n            ) : notifications.length === 0 ? (\n              <div className=\"dropdown-item text-muted\">\n                No updates on watched nodes\n              </div>\n            ) : (\n              notifications.slice(0, 5).map(entry => {\n                const version = entry.details?.version;\n                const href = version\n                  ? `/nodes/${entry.entity_name}/revisions/${version}`\n                  : `/nodes/${entry.entity_name}/history`;\n                return (\n                  <a key={entry.id} className=\"notification-item\" href={href}>\n                    <span className=\"notification-node\">\n                      <span className=\"notification-title\">\n                        {entry.display_name || entry.entity_name}\n                        {version && (\n                          <span className=\"badge version\">{version}</span>\n                        )}\n                      </span>\n                      {entry.display_name && (\n                        <span className=\"notification-entity\">\n                          {entry.entity_name}\n                        </span>\n                      )}\n                    </span>\n                    <span className=\"notification-meta\">\n                      {entry.node_type && (\n                        <span\n                          className={`node_type__${entry.node_type} badge node_type`}\n                        >\n                          {entry.node_type.toUpperCase()}\n                        </span>\n                      )}\n                      {entry.activity_type}d by{' '}\n                      <span style={{ color: '#333' }}>{entry.user}</span> ·{' '}\n                      {formatRelativeTime(entry.created_at)}\n                    </span>\n                  </a>\n                );\n              })\n            )}\n          </div>\n          {notifications.length > 0 && (\n            <>\n              <hr className=\"dropdown-divider\" />\n              <a className=\"dropdown-item view-all\" href=\"/notifications\">\n                View all\n              </a>\n            </>\n          )}\n        </div>\n      )}\n    </div>\n  );\n}\n","import { useContext, useEffect, useState } from 'react';\nimport DJClientContext from '../providers/djclient';\nimport { useCurrentUser } from '../providers/UserProvider';\n\ninterface User {\n  id: number;\n  username: string;\n  email: string;\n  name?: string;\n}\n\n// Extract initials from user's name or username\nconst getInitials = (user: User | null): string => {\n  if (!user) return '?';\n  if (user.name) {\n    return user.name\n      .split(' ')\n      .map(n => n[0])\n      .join('')\n      .toUpperCase()\n      .slice(0, 2);\n  }\n  return user.username.slice(0, 2).toUpperCase();\n};\n\ninterface UserMenuProps {\n  onDropdownToggle?: (isOpen: boolean) => void;\n  forceClose?: boolean;\n}\n\nexport default function UserMenu({\n  onDropdownToggle,\n  forceClose,\n}: UserMenuProps) {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const { currentUser } = useCurrentUser();\n  const [showDropdown, setShowDropdown] = useState(false);\n\n  // Close when forceClose becomes true\n  useEffect(() => {\n    if (forceClose && showDropdown) {\n      setShowDropdown(false);\n    }\n  }, [forceClose, showDropdown]);\n\n  // Close dropdown when clicking outside\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      const target = event.target as HTMLElement;\n      if (!target.closest('.user-menu-dropdown')) {\n        setShowDropdown(false);\n        onDropdownToggle?.(false);\n      }\n    };\n    document.addEventListener('click', handleClickOutside);\n    return () => document.removeEventListener('click', handleClickOutside);\n  }, [onDropdownToggle]);\n\n  const handleToggle = (e: React.MouseEvent) => {\n    e.stopPropagation();\n    const willOpen = !showDropdown;\n    setShowDropdown(willOpen);\n    onDropdownToggle?.(willOpen);\n  };\n\n  const handleLogout = async () => {\n    await djClient.logout();\n    window.location.reload();\n  };\n\n  return (\n    <div className=\"nav-dropdown user-menu-dropdown\">\n      <button className=\"avatar-button\" onClick={handleToggle}>\n        {getInitials(currentUser as User | null)}\n      </button>\n      {showDropdown && (\n        <div className=\"nav-dropdown-menu\">\n          <div className=\"dropdown-header\">\n            {currentUser?.username || 'User'}\n          </div>\n          <hr className=\"dropdown-divider\" />\n          <a className=\"dropdown-item\" href=\"/settings\">\n            Settings\n          </a>\n          <a className=\"dropdown-item\" href=\"/\" onClick={handleLogout}>\n            Logout\n          </a>\n        </div>\n      )}\n    </div>\n  );\n}\n","import { useState } from 'react';\nimport { Outlet } from 'react-router-dom';\nimport DJLogo from '../../icons/DJLogo';\nimport { Helmet } from 'react-helmet-async';\nimport Search from '../../components/Search';\nimport NotificationBell from '../../components/NotificationBell';\nimport UserMenu from '../../components/UserMenu';\nimport '../../../styles/nav-bar.css';\n\n// Define the type for the docs sites\ntype DocsSites = {\n  [key: string]: string;\n};\n\n// Default docs sites if REACT_APP_DOCS_SITES is not defined\nconst defaultDocsSites: DocsSites = {\n  'Open-Source': 'https://www.datajunction.io/',\n};\n\n// Parse the JSON map from the environment variable or use the default\nconst docsSites: DocsSites = process.env.REACT_APP_DOCS_SITES\n  ? (JSON.parse(process.env.REACT_APP_DOCS_SITES as string) as DocsSites)\n  : defaultDocsSites;\n\nexport function Root() {\n  // Track which dropdown is open to close others\n  const [openDropdown, setOpenDropdown] = useState<\n    'notifications' | 'user' | null\n  >(null);\n\n  return (\n    <>\n      <Helmet>\n        <title>DataJunction</title>\n        <meta name=\"description\" content=\"DataJunction UI\" />\n      </Helmet>\n      <div className=\"container d-flex align-items-center justify-content-between\">\n        <div className=\"header\">\n          <div className=\"logo\">\n            <a\n              href={'/'}\n              style={{\n                textTransform: 'none',\n                textDecoration: 'none',\n                color: '#000',\n              }}\n            >\n              <h2>\n                <DJLogo />\n                Data<b>Junction</b>\n              </h2>\n            </a>\n          </div>\n          <Search />\n          <div className=\"menu\">\n            <div className=\"menu-item here menu-here-bg menu-lg-down-accordion me-0 me-lg-2 fw-semibold\">\n              <span className=\"menu-link\">\n                <span className=\"menu-title\">\n                  <a href=\"/\">Catalog</a>\n                </span>\n              </span>\n              <span className=\"menu-link\">\n                <span className=\"menu-title\">\n                  <a href=\"/planner\">Explorer</a>\n                </span>\n              </span>\n              <span className=\"menu-link\">\n                <span className=\"menu-title\">\n                  <div className=\"dropdown\">\n                    <a\n                      className=\"btn btn-link dropdown-toggle\"\n                      href=\"/\"\n                      id=\"docsDropdown\"\n                      role=\"button\"\n                      aria-expanded=\"false\"\n                    >\n                      Docs\n                    </a>\n                    <ul\n                      className=\"dropdown-menu\"\n                      aria-labelledby=\"docsDropdown\"\n                    >\n                      {Object.entries(docsSites).map(([key, value]) => (\n                        <li key={key}>\n                          <a\n                            className=\"dropdown-item\"\n                            href={value}\n                            target=\"_blank\"\n                            rel=\"noreferrer\"\n                          >\n                            {key}\n                          </a>\n                        </li>\n                      ))}\n                    </ul>\n                  </div>\n                </span>\n              </span>\n            </div>\n          </div>\n        </div>\n        {process.env.REACT_DISABLE_AUTH === 'true' ? (\n          ''\n        ) : (\n          <div className=\"nav-right\">\n            <NotificationBell\n              onDropdownToggle={isOpen => {\n                setOpenDropdown(isOpen ? 'notifications' : null);\n              }}\n              forceClose={openDropdown === 'user'}\n            />\n            <UserMenu\n              onDropdownToggle={isOpen => {\n                setOpenDropdown(isOpen ? 'user' : null);\n              }}\n              forceClose={openDropdown === 'notifications'}\n            />\n          </div>\n        )}\n      </div>\n      <Outlet />\n    </>\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 decode = decodeURIComponent;\nvar encode = encodeURIComponent;\n\n/**\n * RegExp to match field-content in RFC 7230 sec 3.2\n *\n * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n * field-vchar   = VCHAR / obs-text\n * obs-text      = %x80-FF\n */\n\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\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} [options]\n * @return {object}\n * @public\n */\n\nfunction parse(str, options) {\n  if (typeof str !== 'string') {\n    throw new TypeError('argument str must be a string');\n  }\n\n  var obj = {}\n  var opt = options || {};\n  var pairs = str.split(';')\n  var dec = opt.decode || decode;\n\n  for (var i = 0; i < pairs.length; i++) {\n    var pair = pairs[i];\n    var index = pair.indexOf('=')\n\n    // skip things that don't look like key=value\n    if (index < 0) {\n      continue;\n    }\n\n    var key = pair.substring(0, index).trim()\n\n    // only assign once\n    if (undefined == obj[key]) {\n      var val = pair.substring(index + 1, pair.length).trim()\n\n      // quoted values\n      if (val[0] === '\"') {\n        val = val.slice(1, -1)\n      }\n\n      obj[key] = tryDecode(val, dec);\n    }\n  }\n\n  return obj;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize the a name value pair into a cookie string suitable for\n * http headers. An optional options object specified 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} [options]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, options) {\n  var opt = options || {};\n  var enc = opt.encode || encode;\n\n  if (typeof enc !== 'function') {\n    throw new TypeError('option encode is invalid');\n  }\n\n  if (!fieldContentRegExp.test(name)) {\n    throw new TypeError('argument name is invalid');\n  }\n\n  var value = enc(val);\n\n  if (value && !fieldContentRegExp.test(value)) {\n    throw new TypeError('argument val is invalid');\n  }\n\n  var str = name + '=' + value;\n\n  if (null != opt.maxAge) {\n    var maxAge = opt.maxAge - 0;\n\n    if (isNaN(maxAge) || !isFinite(maxAge)) {\n      throw new TypeError('option maxAge is invalid')\n    }\n\n    str += '; Max-Age=' + Math.floor(maxAge);\n  }\n\n  if (opt.domain) {\n    if (!fieldContentRegExp.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 (!fieldContentRegExp.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    if (typeof opt.expires.toUTCString !== 'function') {\n      throw new TypeError('option expires is invalid');\n    }\n\n    str += '; Expires=' + opt.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.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 * 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","import * as cookie from 'cookie';\r\nexport function hasDocumentCookie() {\r\n    // Can we get/set cookies on document.cookie?\r\n    return typeof document === 'object' && typeof document.cookie === 'string';\r\n}\r\nexport function cleanCookies() {\r\n    document.cookie.split(';').forEach(function (c) {\r\n        document.cookie = c\r\n            .replace(/^ +/, '')\r\n            .replace(/=.*/, '=;expires=' + new Date().toUTCString() + ';path=/');\r\n    });\r\n}\r\nexport function parseCookies(cookies, options) {\r\n    if (typeof cookies === 'string') {\r\n        return cookie.parse(cookies, options);\r\n    }\r\n    else if (typeof cookies === 'object' && cookies !== null) {\r\n        return cookies;\r\n    }\r\n    else {\r\n        return {};\r\n    }\r\n}\r\nexport function isParsingCookie(value, doNotParse) {\r\n    if (typeof doNotParse === 'undefined') {\r\n        // We guess if the cookie start with { or [, it has been serialized\r\n        doNotParse =\r\n            !value || (value[0] !== '{' && value[0] !== '[' && value[0] !== '\"');\r\n    }\r\n    return !doNotParse;\r\n}\r\nexport function readCookie(value, options) {\r\n    if (options === void 0) { options = {}; }\r\n    var cleanValue = cleanupCookieValue(value);\r\n    if (isParsingCookie(cleanValue, options.doNotParse)) {\r\n        try {\r\n            return JSON.parse(cleanValue);\r\n        }\r\n        catch (e) {\r\n            // At least we tried\r\n        }\r\n    }\r\n    // Ignore clean value if we failed the deserialization\r\n    // It is not relevant anymore to trim those values\r\n    return value;\r\n}\r\nfunction cleanupCookieValue(value) {\r\n    // express prepend j: before serializing a cookie\r\n    if (value && value[0] === 'j' && value[1] === ':') {\r\n        return value.substr(2);\r\n    }\r\n    return value;\r\n}\r\n","var __assign = (this && this.__assign) || function () {\r\n    __assign = Object.assign || function(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n                t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\r\nimport * as cookie from 'cookie';\r\nimport { hasDocumentCookie, parseCookies, readCookie } from './utils';\r\nvar Cookies = /** @class */ (function () {\r\n    function Cookies(cookies, options) {\r\n        var _this = this;\r\n        this.changeListeners = [];\r\n        this.HAS_DOCUMENT_COOKIE = false;\r\n        this.cookies = parseCookies(cookies, options);\r\n        new Promise(function () {\r\n            _this.HAS_DOCUMENT_COOKIE = hasDocumentCookie();\r\n        }).catch(function () { });\r\n    }\r\n    Cookies.prototype._updateBrowserValues = function (parseOptions) {\r\n        if (!this.HAS_DOCUMENT_COOKIE) {\r\n            return;\r\n        }\r\n        this.cookies = cookie.parse(document.cookie, parseOptions);\r\n    };\r\n    Cookies.prototype._emitChange = function (params) {\r\n        for (var i = 0; i < this.changeListeners.length; ++i) {\r\n            this.changeListeners[i](params);\r\n        }\r\n    };\r\n    Cookies.prototype.get = function (name, options, parseOptions) {\r\n        if (options === void 0) { options = {}; }\r\n        this._updateBrowserValues(parseOptions);\r\n        return readCookie(this.cookies[name], options);\r\n    };\r\n    Cookies.prototype.getAll = function (options, parseOptions) {\r\n        if (options === void 0) { options = {}; }\r\n        this._updateBrowserValues(parseOptions);\r\n        var result = {};\r\n        for (var name_1 in this.cookies) {\r\n            result[name_1] = readCookie(this.cookies[name_1], options);\r\n        }\r\n        return result;\r\n    };\r\n    Cookies.prototype.set = function (name, value, options) {\r\n        var _a;\r\n        if (typeof value === 'object') {\r\n            value = JSON.stringify(value);\r\n        }\r\n        this.cookies = __assign(__assign({}, this.cookies), (_a = {}, _a[name] = value, _a));\r\n        if (this.HAS_DOCUMENT_COOKIE) {\r\n            document.cookie = cookie.serialize(name, value, options);\r\n        }\r\n        this._emitChange({ name: name, value: value, options: options });\r\n    };\r\n    Cookies.prototype.remove = function (name, options) {\r\n        var finalOptions = (options = __assign(__assign({}, options), { expires: new Date(1970, 1, 1, 0, 0, 1), maxAge: 0 }));\r\n        this.cookies = __assign({}, this.cookies);\r\n        delete this.cookies[name];\r\n        if (this.HAS_DOCUMENT_COOKIE) {\r\n            document.cookie = cookie.serialize(name, '', finalOptions);\r\n        }\r\n        this._emitChange({ name: name, value: undefined, options: options });\r\n    };\r\n    Cookies.prototype.addChangeListener = function (callback) {\r\n        this.changeListeners.push(callback);\r\n    };\r\n    Cookies.prototype.removeChangeListener = function (callback) {\r\n        var idx = this.changeListeners.indexOf(callback);\r\n        if (idx >= 0) {\r\n            this.changeListeners.splice(idx, 1);\r\n        }\r\n    };\r\n    return Cookies;\r\n}());\r\nexport default Cookies;\r\n","import * as React from 'react';\r\nimport Cookies from './Cookies';\r\nvar CookiesContext = React.createContext(new Cookies());\r\nexport var Provider = CookiesContext.Provider, Consumer = CookiesContext.Consumer;\r\nexport default CookiesContext;\r\n","var __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = function (d, b) {\r\n        extendStatics = Object.setPrototypeOf ||\r\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n        return extendStatics(d, b);\r\n    };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nimport * as React from 'react';\r\nimport Cookies from 'universal-cookie';\r\nimport { Provider } from './CookiesContext';\r\nvar CookiesProvider = /** @class */ (function (_super) {\r\n    __extends(CookiesProvider, _super);\r\n    function CookiesProvider(props) {\r\n        var _this = _super.call(this, props) || this;\r\n        if (props.cookies) {\r\n            _this.cookies = props.cookies;\r\n        }\r\n        else {\r\n            _this.cookies = new Cookies();\r\n        }\r\n        return _this;\r\n    }\r\n    CookiesProvider.prototype.render = function () {\r\n        return React.createElement(Provider, { value: this.cookies }, this.props.children);\r\n    };\r\n    return CookiesProvider;\r\n}(React.Component));\r\nexport default CookiesProvider;\r\n","export function isInBrowser() {\r\n    return (typeof window !== 'undefined' &&\r\n        typeof window.document !== 'undefined' &&\r\n        typeof window.document.createElement !== 'undefined');\r\n}\r\n","import { useContext, useLayoutEffect, useState, useRef, useMemo } from 'react';\r\nimport CookiesContext from './CookiesContext';\r\nimport { isInBrowser } from './utils';\r\nexport default function useCookies(dependencies) {\r\n    var cookies = useContext(CookiesContext);\r\n    if (!cookies) {\r\n        throw new Error('Missing <CookiesProvider>');\r\n    }\r\n    var initialCookies = cookies.getAll();\r\n    var _a = useState(initialCookies), allCookies = _a[0], setCookies = _a[1];\r\n    var previousCookiesRef = useRef(allCookies);\r\n    if (isInBrowser()) {\r\n        useLayoutEffect(function () {\r\n            function onChange() {\r\n                var newCookies = cookies.getAll();\r\n                if (shouldUpdate(dependencies || null, newCookies, previousCookiesRef.current)) {\r\n                    setCookies(newCookies);\r\n                }\r\n                previousCookiesRef.current = newCookies;\r\n            }\r\n            cookies.addChangeListener(onChange);\r\n            return function () {\r\n                cookies.removeChangeListener(onChange);\r\n            };\r\n        }, [cookies]);\r\n    }\r\n    var setCookie = useMemo(function () { return cookies.set.bind(cookies); }, [cookies]);\r\n    var removeCookie = useMemo(function () { return cookies.remove.bind(cookies); }, [cookies]);\r\n    return [allCookies, setCookie, removeCookie];\r\n}\r\nfunction shouldUpdate(dependencies, newCookies, oldCookies) {\r\n    if (!dependencies) {\r\n        return true;\r\n    }\r\n    for (var _i = 0, dependencies_1 = dependencies; _i < dependencies_1.length; _i++) {\r\n        var dependency = dependencies_1[_i];\r\n        if (newCookies[dependency] !== oldCookies[dependency]) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n","export const AUTH_COOKIE = '__dj';\nexport const LOGGED_IN_FLAG_COOKIE = '__djlif';\n\n// Scan estimate thresholds (in GB)\n// These determine the warning level colors in the UI\nconst GB = 1024 * 1024 * 1024;\n\nexport const SCAN_WARNING_THRESHOLD_GB = parseInt(\n  process.env.REACT_APP_SCAN_WARNING_THRESHOLD_GB || '10',\n  10,\n);\nexport const SCAN_CRITICAL_THRESHOLD_GB = parseInt(\n  process.env.REACT_APP_SCAN_CRITICAL_THRESHOLD_GB || '100',\n  10,\n);\n\n// Export as bytes for internal use\nexport const SCAN_WARNING_THRESHOLD = SCAN_WARNING_THRESHOLD_GB * GB;\nexport const SCAN_CRITICAL_THRESHOLD = SCAN_CRITICAL_THRESHOLD_GB * GB;\n","/**\n * This component is the skeleton around the actual pages, and only contains\n * components that should be seen on all pages, like the logo or navigation bar.\n */\n\nimport * as React from 'react';\nimport { Helmet } from 'react-helmet-async';\nimport { BrowserRouter, Routes, Route } from 'react-router-dom';\n\nimport { NamespacePage } from './pages/NamespacePage/Loadable';\nimport { MyWorkspacePage } from './pages/MyWorkspacePage/Loadable';\nimport { OverviewPage } from './pages/OverviewPage/Loadable';\nimport { SystemMetricsExplorerPage } from './pages/SystemMetricsExplorerPage/Loadable';\nimport { SettingsPage } from './pages/SettingsPage/Loadable';\nimport { NotificationsPage } from './pages/NotificationsPage/Loadable';\nimport { NodePage } from './pages/NodePage/Loadable';\nimport { RevisionDiff } from './pages/NodePage/RevisionDiffLoadable';\nimport { SQLBuilderPage } from './pages/SQLBuilderPage/Loadable';\nimport { CubeBuilderPage } from './pages/CubeBuilderPage/Loadable';\nimport { QueryPlannerPage } from './pages/QueryPlannerPage/Loadable';\nimport { TagPage } from './pages/TagPage/Loadable';\nimport { AddEditNodePage } from './pages/AddEditNodePage/Loadable';\nimport { AddEditTagPage } from './pages/AddEditTagPage/Loadable';\nimport { NotFoundPage } from './pages/NotFoundPage/Loadable';\nimport { LoginPage } from './pages/LoginPage';\nimport { RegisterTablePage } from './pages/RegisterTablePage';\nimport { Root } from './pages/Root';\nimport DJClientContext from './providers/djclient';\nimport { UserProvider } from './providers/UserProvider';\nimport { DataJunctionAPI } from './services/DJService';\nimport { CookiesProvider, useCookies } from 'react-cookie';\nimport * as Constants from './constants';\n\n// ReactFlow triggers \"ResizeObserver loop completed with undelivered notifications\"\n// which webpack-dev-server treats as an uncaught error and shows an overlay that\n// blocks navigation. Suppress it at the window level — it's a harmless browser warning.\nwindow.addEventListener('error', e => {\n  if (\n    e.message ===\n    'ResizeObserver loop completed with undelivered notifications.'\n  ) {\n    e.stopImmediatePropagation();\n  }\n});\n\n// Stable context value — DataJunctionAPI is a module-level singleton that\n// never changes, so this object only needs to be created once.\nconst DJ_CONTEXT_VALUE = { DataJunctionAPI };\n\nexport function App() {\n  const [cookies] = useCookies([Constants.LOGGED_IN_FLAG_COOKIE]);\n  return (\n    <CookiesProvider>\n      <BrowserRouter>\n        {cookies.__djlif || process.env.REACT_DISABLE_AUTH === 'true' ? (\n          <>\n            <Helmet\n              titleTemplate=\"DataJunction: %s\"\n              defaultTitle=\"DataJunction: A Metrics Platform\"\n            >\n              <meta\n                name=\"description\"\n                content=\"DataJunction serves as a semantic layer to help manage metrics\"\n              />\n            </Helmet>\n            <DJClientContext.Provider value={DJ_CONTEXT_VALUE}>\n              <UserProvider>\n                <Routes>\n                  <Route\n                    path=\"/\"\n                    element={<Root />}\n                    children={\n                      <>\n                        <Route path=\"nodes\" key=\"nodes\">\n                          <Route path=\":name\" element={<NodePage />} />\n                          <Route\n                            path=\":name/edit\"\n                            key=\"edit\"\n                            element={<AddEditNodePage />}\n                          />\n                          <Route\n                            path=\":name/edit-cube\"\n                            key=\"edit-cube\"\n                            element={<CubeBuilderPage />}\n                          />\n                          <Route\n                            path=\":name/revisions/:revision\"\n                            element={<RevisionDiff />}\n                          />\n                          <Route path=\":name/:tab\" element={<NodePage />} />\n                        </Route>\n\n                        <Route\n                          path=\"/\"\n                          element={<NamespacePage />}\n                          key=\"index\"\n                        />\n                        <Route path=\"namespaces\">\n                          <Route\n                            path=\":namespace\"\n                            element={<NamespacePage />}\n                            key=\"namespaces\"\n                          />\n                        </Route>\n                        <Route\n                          path=\"create/tag\"\n                          key=\"createtag\"\n                          element={<AddEditTagPage />}\n                        ></Route>\n                        <Route\n                          path=\"create/source\"\n                          key=\"register\"\n                          element={<RegisterTablePage />}\n                        ></Route>\n                        <Route path=\"/create/cube\">\n                          <Route\n                            path=\":initialNamespace\"\n                            key=\"create\"\n                            element={<CubeBuilderPage />}\n                          />\n                          <Route\n                            path=\"\"\n                            key=\"create\"\n                            element={<CubeBuilderPage />}\n                          />\n                        </Route>\n                        <Route path=\"create/:nodeType\">\n                          <Route\n                            path=\":initialNamespace\"\n                            key=\"create\"\n                            element={<AddEditNodePage />}\n                          />\n                          <Route\n                            path=\"\"\n                            key=\"create\"\n                            element={<AddEditNodePage />}\n                          />\n                        </Route>\n                        <Route\n                          path=\"sql\"\n                          key=\"sql\"\n                          element={<SQLBuilderPage />}\n                        />\n                        <Route\n                          path=\"planner\"\n                          key=\"planner\"\n                          element={<QueryPlannerPage />}\n                        />\n                        <Route path=\"tags\" key=\"tags\">\n                          <Route path=\":name\" element={<TagPage />} />\n                        </Route>\n                        <Route\n                          path=\"overview\"\n                          key=\"overview\"\n                          element={<OverviewPage />}\n                        />\n                        <Route\n                          path=\"overview/explore\"\n                          key=\"overview-explore\"\n                          element={<SystemMetricsExplorerPage />}\n                        />\n                        <Route\n                          path=\"workspace\"\n                          key=\"workspace\"\n                          element={<MyWorkspacePage />}\n                        />\n                        <Route\n                          path=\"settings\"\n                          key=\"settings\"\n                          element={<SettingsPage />}\n                        />\n                        <Route\n                          path=\"notifications\"\n                          key=\"notifications\"\n                          element={<NotificationsPage />}\n                        />\n                      </>\n                    }\n                  />\n                  <Route path=\"*\" element={<NotFoundPage />} />\n                </Routes>\n              </UserProvider>\n            </DJClientContext.Provider>\n          </>\n        ) : (\n          <LoginPage />\n        )}\n      </BrowserRouter>\n    </CookiesProvider>\n  );\n}\n","import { Component } from 'react';\n\nexport default class Tab extends Component {\n  render() {\n    const { id, onClick, selectedTab } = this.props;\n    const isActive = selectedTab === id;\n    return (\n      <button\n        id={id}\n        className={isActive ? 'dj-tab dj-tab--active' : 'dj-tab'}\n        tabIndex=\"0\"\n        onClick={onClick}\n        aria-label={this.props.name}\n        aria-hidden=\"false\"\n      >\n        <span\n          style={{ display: 'inline-flex', alignItems: 'center', gap: '4px' }}\n        >\n          {this.props.icon}\n          {this.props.name}\n        </span>\n      </button>\n    );\n  }\n}\n","import _extends from \"@babel/runtime/helpers/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nimport React from 'react';\n\n// Get all possible permutations of all power sets\n//\n// Super simple, non-algorithmic solution since the\n// number of class names will not be greater than 4\nfunction powerSetPermutations(arr) {\n  var arrLength = arr.length;\n  if (arrLength === 0 || arrLength === 1) return arr;\n  if (arrLength === 2) {\n    // prettier-ignore\n    return [arr[0], arr[1], \"\".concat(arr[0], \".\").concat(arr[1]), \"\".concat(arr[1], \".\").concat(arr[0])];\n  }\n  if (arrLength === 3) {\n    return [arr[0], arr[1], arr[2], \"\".concat(arr[0], \".\").concat(arr[1]), \"\".concat(arr[0], \".\").concat(arr[2]), \"\".concat(arr[1], \".\").concat(arr[0]), \"\".concat(arr[1], \".\").concat(arr[2]), \"\".concat(arr[2], \".\").concat(arr[0]), \"\".concat(arr[2], \".\").concat(arr[1]), \"\".concat(arr[0], \".\").concat(arr[1], \".\").concat(arr[2]), \"\".concat(arr[0], \".\").concat(arr[2], \".\").concat(arr[1]), \"\".concat(arr[1], \".\").concat(arr[0], \".\").concat(arr[2]), \"\".concat(arr[1], \".\").concat(arr[2], \".\").concat(arr[0]), \"\".concat(arr[2], \".\").concat(arr[0], \".\").concat(arr[1]), \"\".concat(arr[2], \".\").concat(arr[1], \".\").concat(arr[0])];\n  }\n  if (arrLength >= 4) {\n    // Currently does not support more than 4 extra\n    // class names (after `.token` has been removed)\n    return [arr[0], arr[1], arr[2], arr[3], \"\".concat(arr[0], \".\").concat(arr[1]), \"\".concat(arr[0], \".\").concat(arr[2]), \"\".concat(arr[0], \".\").concat(arr[3]), \"\".concat(arr[1], \".\").concat(arr[0]), \"\".concat(arr[1], \".\").concat(arr[2]), \"\".concat(arr[1], \".\").concat(arr[3]), \"\".concat(arr[2], \".\").concat(arr[0]), \"\".concat(arr[2], \".\").concat(arr[1]), \"\".concat(arr[2], \".\").concat(arr[3]), \"\".concat(arr[3], \".\").concat(arr[0]), \"\".concat(arr[3], \".\").concat(arr[1]), \"\".concat(arr[3], \".\").concat(arr[2]), \"\".concat(arr[0], \".\").concat(arr[1], \".\").concat(arr[2]), \"\".concat(arr[0], \".\").concat(arr[1], \".\").concat(arr[3]), \"\".concat(arr[0], \".\").concat(arr[2], \".\").concat(arr[1]), \"\".concat(arr[0], \".\").concat(arr[2], \".\").concat(arr[3]), \"\".concat(arr[0], \".\").concat(arr[3], \".\").concat(arr[1]), \"\".concat(arr[0], \".\").concat(arr[3], \".\").concat(arr[2]), \"\".concat(arr[1], \".\").concat(arr[0], \".\").concat(arr[2]), \"\".concat(arr[1], \".\").concat(arr[0], \".\").concat(arr[3]), \"\".concat(arr[1], \".\").concat(arr[2], \".\").concat(arr[0]), \"\".concat(arr[1], \".\").concat(arr[2], \".\").concat(arr[3]), \"\".concat(arr[1], \".\").concat(arr[3], \".\").concat(arr[0]), \"\".concat(arr[1], \".\").concat(arr[3], \".\").concat(arr[2]), \"\".concat(arr[2], \".\").concat(arr[0], \".\").concat(arr[1]), \"\".concat(arr[2], \".\").concat(arr[0], \".\").concat(arr[3]), \"\".concat(arr[2], \".\").concat(arr[1], \".\").concat(arr[0]), \"\".concat(arr[2], \".\").concat(arr[1], \".\").concat(arr[3]), \"\".concat(arr[2], \".\").concat(arr[3], \".\").concat(arr[0]), \"\".concat(arr[2], \".\").concat(arr[3], \".\").concat(arr[1]), \"\".concat(arr[3], \".\").concat(arr[0], \".\").concat(arr[1]), \"\".concat(arr[3], \".\").concat(arr[0], \".\").concat(arr[2]), \"\".concat(arr[3], \".\").concat(arr[1], \".\").concat(arr[0]), \"\".concat(arr[3], \".\").concat(arr[1], \".\").concat(arr[2]), \"\".concat(arr[3], \".\").concat(arr[2], \".\").concat(arr[0]), \"\".concat(arr[3], \".\").concat(arr[2], \".\").concat(arr[1]), \"\".concat(arr[0], \".\").concat(arr[1], \".\").concat(arr[2], \".\").concat(arr[3]), \"\".concat(arr[0], \".\").concat(arr[1], \".\").concat(arr[3], \".\").concat(arr[2]), \"\".concat(arr[0], \".\").concat(arr[2], \".\").concat(arr[1], \".\").concat(arr[3]), \"\".concat(arr[0], \".\").concat(arr[2], \".\").concat(arr[3], \".\").concat(arr[1]), \"\".concat(arr[0], \".\").concat(arr[3], \".\").concat(arr[1], \".\").concat(arr[2]), \"\".concat(arr[0], \".\").concat(arr[3], \".\").concat(arr[2], \".\").concat(arr[1]), \"\".concat(arr[1], \".\").concat(arr[0], \".\").concat(arr[2], \".\").concat(arr[3]), \"\".concat(arr[1], \".\").concat(arr[0], \".\").concat(arr[3], \".\").concat(arr[2]), \"\".concat(arr[1], \".\").concat(arr[2], \".\").concat(arr[0], \".\").concat(arr[3]), \"\".concat(arr[1], \".\").concat(arr[2], \".\").concat(arr[3], \".\").concat(arr[0]), \"\".concat(arr[1], \".\").concat(arr[3], \".\").concat(arr[0], \".\").concat(arr[2]), \"\".concat(arr[1], \".\").concat(arr[3], \".\").concat(arr[2], \".\").concat(arr[0]), \"\".concat(arr[2], \".\").concat(arr[0], \".\").concat(arr[1], \".\").concat(arr[3]), \"\".concat(arr[2], \".\").concat(arr[0], \".\").concat(arr[3], \".\").concat(arr[1]), \"\".concat(arr[2], \".\").concat(arr[1], \".\").concat(arr[0], \".\").concat(arr[3]), \"\".concat(arr[2], \".\").concat(arr[1], \".\").concat(arr[3], \".\").concat(arr[0]), \"\".concat(arr[2], \".\").concat(arr[3], \".\").concat(arr[0], \".\").concat(arr[1]), \"\".concat(arr[2], \".\").concat(arr[3], \".\").concat(arr[1], \".\").concat(arr[0]), \"\".concat(arr[3], \".\").concat(arr[0], \".\").concat(arr[1], \".\").concat(arr[2]), \"\".concat(arr[3], \".\").concat(arr[0], \".\").concat(arr[2], \".\").concat(arr[1]), \"\".concat(arr[3], \".\").concat(arr[1], \".\").concat(arr[0], \".\").concat(arr[2]), \"\".concat(arr[3], \".\").concat(arr[1], \".\").concat(arr[2], \".\").concat(arr[0]), \"\".concat(arr[3], \".\").concat(arr[2], \".\").concat(arr[0], \".\").concat(arr[1]), \"\".concat(arr[3], \".\").concat(arr[2], \".\").concat(arr[1], \".\").concat(arr[0])];\n  }\n}\nvar classNameCombinations = {};\nfunction getClassNameCombinations(classNames) {\n  if (classNames.length === 0 || classNames.length === 1) return classNames;\n  var key = classNames.join('.');\n  if (!classNameCombinations[key]) {\n    classNameCombinations[key] = powerSetPermutations(classNames);\n  }\n  return classNameCombinations[key];\n}\nexport function createStyleObject(classNames) {\n  var elementStyle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var stylesheet = arguments.length > 2 ? arguments[2] : undefined;\n  var nonTokenClassNames = classNames.filter(function (className) {\n    return className !== 'token';\n  });\n  var classNamesCombinations = getClassNameCombinations(nonTokenClassNames);\n  return classNamesCombinations.reduce(function (styleObject, className) {\n    return _objectSpread(_objectSpread({}, styleObject), stylesheet[className]);\n  }, elementStyle);\n}\nexport function createClassNameString(classNames) {\n  return classNames.join(' ');\n}\nexport function createChildren(stylesheet, useInlineStyles) {\n  var childrenCount = 0;\n  return function (children) {\n    childrenCount += 1;\n    return children.map(function (child, i) {\n      return createElement({\n        node: child,\n        stylesheet: stylesheet,\n        useInlineStyles: useInlineStyles,\n        key: \"code-segment-\".concat(childrenCount, \"-\").concat(i)\n      });\n    });\n  };\n}\nexport default function createElement(_ref) {\n  var node = _ref.node,\n    stylesheet = _ref.stylesheet,\n    _ref$style = _ref.style,\n    style = _ref$style === void 0 ? {} : _ref$style,\n    useInlineStyles = _ref.useInlineStyles,\n    key = _ref.key;\n  var properties = node.properties,\n    type = node.type,\n    TagName = node.tagName,\n    value = node.value;\n  if (type === 'text') {\n    return value;\n  } else if (TagName) {\n    var childrenCreator = createChildren(stylesheet, useInlineStyles);\n    var props;\n    if (!useInlineStyles) {\n      props = _objectSpread(_objectSpread({}, properties), {}, {\n        className: createClassNameString(properties.className)\n      });\n    } else {\n      var allStylesheetSelectors = Object.keys(stylesheet).reduce(function (classes, selector) {\n        selector.split('.').forEach(function (className) {\n          if (!classes.includes(className)) classes.push(className);\n        });\n        return classes;\n      }, []);\n\n      // For compatibility with older versions of react-syntax-highlighter\n      var startingClassName = properties.className && properties.className.includes('token') ? ['token'] : [];\n      var className = properties.className && startingClassName.concat(properties.className.filter(function (className) {\n        return !allStylesheetSelectors.includes(className);\n      }));\n      props = _objectSpread(_objectSpread({}, properties), {}, {\n        className: createClassNameString(className) || undefined,\n        style: createStyleObject(properties.className, Object.assign({}, properties.style, style), stylesheet)\n      });\n    }\n    var children = childrenCreator(node.children);\n    return /*#__PURE__*/React.createElement(TagName, _extends({\n      key: key\n    }, props), children);\n  }\n}","export default (function (astGenerator, language) {\n  var langs = astGenerator.listLanguages();\n  return langs.indexOf(language) !== -1;\n});","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nvar _excluded = [\"language\", \"children\", \"style\", \"customStyle\", \"codeTagProps\", \"useInlineStyles\", \"showLineNumbers\", \"showInlineLineNumbers\", \"startingLineNumber\", \"lineNumberContainerStyle\", \"lineNumberStyle\", \"wrapLines\", \"wrapLongLines\", \"lineProps\", \"renderer\", \"PreTag\", \"CodeTag\", \"code\", \"astGenerator\"];\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nimport React from 'react';\nimport createElement from './create-element';\nimport checkForListedLanguage from './checkForListedLanguage';\nvar newLineRegex = /\\n/g;\nfunction getNewLines(str) {\n  return str.match(newLineRegex);\n}\nfunction getAllLineNumbers(_ref) {\n  var lines = _ref.lines,\n    startingLineNumber = _ref.startingLineNumber,\n    style = _ref.style;\n  return lines.map(function (_, i) {\n    var number = i + startingLineNumber;\n    return /*#__PURE__*/React.createElement(\"span\", {\n      key: \"line-\".concat(i),\n      className: \"react-syntax-highlighter-line-number\",\n      style: typeof style === 'function' ? style(number) : style\n    }, \"\".concat(number, \"\\n\"));\n  });\n}\nfunction AllLineNumbers(_ref2) {\n  var codeString = _ref2.codeString,\n    codeStyle = _ref2.codeStyle,\n    _ref2$containerStyle = _ref2.containerStyle,\n    containerStyle = _ref2$containerStyle === void 0 ? {\n      \"float\": 'left',\n      paddingRight: '10px'\n    } : _ref2$containerStyle,\n    _ref2$numberStyle = _ref2.numberStyle,\n    numberStyle = _ref2$numberStyle === void 0 ? {} : _ref2$numberStyle,\n    startingLineNumber = _ref2.startingLineNumber;\n  return /*#__PURE__*/React.createElement(\"code\", {\n    style: Object.assign({}, codeStyle, containerStyle)\n  }, getAllLineNumbers({\n    lines: codeString.replace(/\\n$/, '').split('\\n'),\n    style: numberStyle,\n    startingLineNumber: startingLineNumber\n  }));\n}\nfunction getEmWidthOfNumber(num) {\n  return \"\".concat(num.toString().length, \".25em\");\n}\nfunction getInlineLineNumber(lineNumber, inlineLineNumberStyle) {\n  return {\n    type: 'element',\n    tagName: 'span',\n    properties: {\n      key: \"line-number--\".concat(lineNumber),\n      className: ['comment', 'linenumber', 'react-syntax-highlighter-line-number'],\n      style: inlineLineNumberStyle\n    },\n    children: [{\n      type: 'text',\n      value: lineNumber\n    }]\n  };\n}\nfunction assembleLineNumberStyles(lineNumberStyle, lineNumber, largestLineNumber) {\n  // minimally necessary styling for line numbers\n  var defaultLineNumberStyle = {\n    display: 'inline-block',\n    minWidth: getEmWidthOfNumber(largestLineNumber),\n    paddingRight: '1em',\n    textAlign: 'right',\n    userSelect: 'none'\n  };\n  // prep custom styling\n  var customLineNumberStyle = typeof lineNumberStyle === 'function' ? lineNumberStyle(lineNumber) : lineNumberStyle;\n  // combine\n  var assembledStyle = _objectSpread(_objectSpread({}, defaultLineNumberStyle), customLineNumberStyle);\n  return assembledStyle;\n}\nfunction createLineElement(_ref3) {\n  var children = _ref3.children,\n    lineNumber = _ref3.lineNumber,\n    lineNumberStyle = _ref3.lineNumberStyle,\n    largestLineNumber = _ref3.largestLineNumber,\n    showInlineLineNumbers = _ref3.showInlineLineNumbers,\n    _ref3$lineProps = _ref3.lineProps,\n    lineProps = _ref3$lineProps === void 0 ? {} : _ref3$lineProps,\n    _ref3$className = _ref3.className,\n    className = _ref3$className === void 0 ? [] : _ref3$className,\n    showLineNumbers = _ref3.showLineNumbers,\n    wrapLongLines = _ref3.wrapLongLines,\n    _ref3$wrapLines = _ref3.wrapLines,\n    wrapLines = _ref3$wrapLines === void 0 ? false : _ref3$wrapLines;\n  var properties = wrapLines ? _objectSpread({}, typeof lineProps === 'function' ? lineProps(lineNumber) : lineProps) : {};\n  properties['className'] = properties['className'] ? [].concat(_toConsumableArray(properties['className'].trim().split(/\\s+/)), _toConsumableArray(className)) : className;\n  if (lineNumber && showInlineLineNumbers) {\n    var inlineLineNumberStyle = assembleLineNumberStyles(lineNumberStyle, lineNumber, largestLineNumber);\n    children.unshift(getInlineLineNumber(lineNumber, inlineLineNumberStyle));\n  }\n  if (wrapLongLines & showLineNumbers) {\n    properties.style = _objectSpread({\n      display: 'flex'\n    }, properties.style);\n  }\n  return {\n    type: 'element',\n    tagName: 'span',\n    properties: properties,\n    children: children\n  };\n}\nfunction flattenCodeTree(tree) {\n  var className = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n  var newTree = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n  for (var i = 0; i < tree.length; i++) {\n    var node = tree[i];\n    if (node.type === 'text') {\n      newTree.push(createLineElement({\n        children: [node],\n        className: _toConsumableArray(new Set(className))\n      }));\n    } else if (node.children) {\n      var classNames = className.concat(node.properties.className);\n      flattenCodeTree(node.children, classNames).forEach(function (i) {\n        return newTree.push(i);\n      });\n    }\n  }\n  return newTree;\n}\nfunction processLines(codeTree, wrapLines, lineProps, showLineNumbers, showInlineLineNumbers, startingLineNumber, largestLineNumber, lineNumberStyle, wrapLongLines) {\n  var _ref4;\n  var tree = flattenCodeTree(codeTree.value);\n  var newTree = [];\n  var lastLineBreakIndex = -1;\n  var index = 0;\n  function createWrappedLine(children, lineNumber) {\n    var className = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n    return createLineElement({\n      children: children,\n      lineNumber: lineNumber,\n      lineNumberStyle: lineNumberStyle,\n      largestLineNumber: largestLineNumber,\n      showInlineLineNumbers: showInlineLineNumbers,\n      lineProps: lineProps,\n      className: className,\n      showLineNumbers: showLineNumbers,\n      wrapLongLines: wrapLongLines,\n      wrapLines: wrapLines\n    });\n  }\n  function createUnwrappedLine(children, lineNumber) {\n    if (showLineNumbers && lineNumber && showInlineLineNumbers) {\n      var inlineLineNumberStyle = assembleLineNumberStyles(lineNumberStyle, lineNumber, largestLineNumber);\n      children.unshift(getInlineLineNumber(lineNumber, inlineLineNumberStyle));\n    }\n    return children;\n  }\n  function createLine(children, lineNumber) {\n    var className = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n    return wrapLines || className.length > 0 ? createWrappedLine(children, lineNumber, className) : createUnwrappedLine(children, lineNumber);\n  }\n  var _loop = function _loop() {\n    var node = tree[index];\n    var value = node.children[0].value;\n    var newLines = getNewLines(value);\n    if (newLines) {\n      var splitValue = value.split('\\n');\n      splitValue.forEach(function (text, i) {\n        var lineNumber = showLineNumbers && newTree.length + startingLineNumber;\n        var newChild = {\n          type: 'text',\n          value: \"\".concat(text, \"\\n\")\n        };\n\n        // if it's the first line\n        if (i === 0) {\n          var _children = tree.slice(lastLineBreakIndex + 1, index).concat(createLineElement({\n            children: [newChild],\n            className: node.properties.className\n          }));\n          var _line = createLine(_children, lineNumber);\n          newTree.push(_line);\n\n          // if it's the last line\n        } else if (i === splitValue.length - 1) {\n          var stringChild = tree[index + 1] && tree[index + 1].children && tree[index + 1].children[0];\n          var lastLineInPreviousSpan = {\n            type: 'text',\n            value: \"\".concat(text)\n          };\n          if (stringChild) {\n            var newElem = createLineElement({\n              children: [lastLineInPreviousSpan],\n              className: node.properties.className\n            });\n            tree.splice(index + 1, 0, newElem);\n          } else {\n            var _children2 = [lastLineInPreviousSpan];\n            var _line2 = createLine(_children2, lineNumber, node.properties.className);\n            newTree.push(_line2);\n          }\n\n          // if it's neither the first nor the last line\n        } else {\n          var _children3 = [newChild];\n          var _line3 = createLine(_children3, lineNumber, node.properties.className);\n          newTree.push(_line3);\n        }\n      });\n      lastLineBreakIndex = index;\n    }\n    index++;\n  };\n  while (index < tree.length) {\n    _loop();\n  }\n  if (lastLineBreakIndex !== tree.length - 1) {\n    var children = tree.slice(lastLineBreakIndex + 1, tree.length);\n    if (children && children.length) {\n      var lineNumber = showLineNumbers && newTree.length + startingLineNumber;\n      var line = createLine(children, lineNumber);\n      newTree.push(line);\n    }\n  }\n  return wrapLines ? newTree : (_ref4 = []).concat.apply(_ref4, newTree);\n}\nfunction defaultRenderer(_ref5) {\n  var rows = _ref5.rows,\n    stylesheet = _ref5.stylesheet,\n    useInlineStyles = _ref5.useInlineStyles;\n  return rows.map(function (node, i) {\n    return createElement({\n      node: node,\n      stylesheet: stylesheet,\n      useInlineStyles: useInlineStyles,\n      key: \"code-segment-\".concat(i)\n    });\n  });\n}\n\n// only highlight.js has the highlightAuto method\nfunction isHighlightJs(astGenerator) {\n  return astGenerator && typeof astGenerator.highlightAuto !== 'undefined';\n}\nfunction getCodeTree(_ref6) {\n  var astGenerator = _ref6.astGenerator,\n    language = _ref6.language,\n    code = _ref6.code,\n    defaultCodeValue = _ref6.defaultCodeValue;\n  // figure out whether we're using lowlight/highlight or refractor/prism\n  // then attempt highlighting accordingly\n\n  // lowlight/highlight?\n  if (isHighlightJs(astGenerator)) {\n    var hasLanguage = checkForListedLanguage(astGenerator, language);\n    if (language === 'text') {\n      return {\n        value: defaultCodeValue,\n        language: 'text'\n      };\n    } else if (hasLanguage) {\n      return astGenerator.highlight(language, code);\n    } else {\n      return astGenerator.highlightAuto(code);\n    }\n  }\n\n  // must be refractor/prism, then\n  try {\n    return language && language !== 'text' ? {\n      value: astGenerator.highlight(code, language)\n    } : {\n      value: defaultCodeValue\n    };\n  } catch (e) {\n    return {\n      value: defaultCodeValue\n    };\n  }\n}\nexport default function (defaultAstGenerator, defaultStyle) {\n  return function SyntaxHighlighter(_ref7) {\n    var _code$match$length, _code$match;\n    var language = _ref7.language,\n      children = _ref7.children,\n      _ref7$style = _ref7.style,\n      style = _ref7$style === void 0 ? defaultStyle : _ref7$style,\n      _ref7$customStyle = _ref7.customStyle,\n      customStyle = _ref7$customStyle === void 0 ? {} : _ref7$customStyle,\n      _ref7$codeTagProps = _ref7.codeTagProps,\n      codeTagProps = _ref7$codeTagProps === void 0 ? {\n        className: language ? \"language-\".concat(language) : undefined,\n        style: _objectSpread(_objectSpread({}, style['code[class*=\"language-\"]']), style[\"code[class*=\\\"language-\".concat(language, \"\\\"]\")])\n      } : _ref7$codeTagProps,\n      _ref7$useInlineStyles = _ref7.useInlineStyles,\n      useInlineStyles = _ref7$useInlineStyles === void 0 ? true : _ref7$useInlineStyles,\n      _ref7$showLineNumbers = _ref7.showLineNumbers,\n      showLineNumbers = _ref7$showLineNumbers === void 0 ? false : _ref7$showLineNumbers,\n      _ref7$showInlineLineN = _ref7.showInlineLineNumbers,\n      showInlineLineNumbers = _ref7$showInlineLineN === void 0 ? true : _ref7$showInlineLineN,\n      _ref7$startingLineNum = _ref7.startingLineNumber,\n      startingLineNumber = _ref7$startingLineNum === void 0 ? 1 : _ref7$startingLineNum,\n      lineNumberContainerStyle = _ref7.lineNumberContainerStyle,\n      _ref7$lineNumberStyle = _ref7.lineNumberStyle,\n      lineNumberStyle = _ref7$lineNumberStyle === void 0 ? {} : _ref7$lineNumberStyle,\n      wrapLines = _ref7.wrapLines,\n      _ref7$wrapLongLines = _ref7.wrapLongLines,\n      wrapLongLines = _ref7$wrapLongLines === void 0 ? false : _ref7$wrapLongLines,\n      _ref7$lineProps = _ref7.lineProps,\n      lineProps = _ref7$lineProps === void 0 ? {} : _ref7$lineProps,\n      renderer = _ref7.renderer,\n      _ref7$PreTag = _ref7.PreTag,\n      PreTag = _ref7$PreTag === void 0 ? 'pre' : _ref7$PreTag,\n      _ref7$CodeTag = _ref7.CodeTag,\n      CodeTag = _ref7$CodeTag === void 0 ? 'code' : _ref7$CodeTag,\n      _ref7$code = _ref7.code,\n      code = _ref7$code === void 0 ? (Array.isArray(children) ? children[0] : children) || '' : _ref7$code,\n      astGenerator = _ref7.astGenerator,\n      rest = _objectWithoutProperties(_ref7, _excluded);\n    astGenerator = astGenerator || defaultAstGenerator;\n    var allLineNumbers = showLineNumbers ? /*#__PURE__*/React.createElement(AllLineNumbers, {\n      containerStyle: lineNumberContainerStyle,\n      codeStyle: codeTagProps.style || {},\n      numberStyle: lineNumberStyle,\n      startingLineNumber: startingLineNumber,\n      codeString: code\n    }) : null;\n    var defaultPreStyle = style.hljs || style['pre[class*=\"language-\"]'] || {\n      backgroundColor: '#fff'\n    };\n    var generatorClassName = isHighlightJs(astGenerator) ? 'hljs' : 'prismjs';\n    var preProps = useInlineStyles ? Object.assign({}, rest, {\n      style: Object.assign({}, defaultPreStyle, customStyle)\n    }) : Object.assign({}, rest, {\n      className: rest.className ? \"\".concat(generatorClassName, \" \").concat(rest.className) : generatorClassName,\n      style: Object.assign({}, customStyle)\n    });\n    if (wrapLongLines) {\n      codeTagProps.style = _objectSpread({\n        whiteSpace: 'pre-wrap'\n      }, codeTagProps.style);\n    } else {\n      codeTagProps.style = _objectSpread({\n        whiteSpace: 'pre'\n      }, codeTagProps.style);\n    }\n    if (!astGenerator) {\n      return /*#__PURE__*/React.createElement(PreTag, preProps, allLineNumbers, /*#__PURE__*/React.createElement(CodeTag, codeTagProps, code));\n    }\n\n    /*\n     * Some custom renderers rely on individual row elements so we need to turn wrapLines on\n     * if renderer is provided and wrapLines is undefined.\n     */\n    if (wrapLines === undefined && renderer || wrapLongLines) wrapLines = true;\n    renderer = renderer || defaultRenderer;\n    var defaultCodeValue = [{\n      type: 'text',\n      value: code\n    }];\n    var codeTree = getCodeTree({\n      astGenerator: astGenerator,\n      language: language,\n      code: code,\n      defaultCodeValue: defaultCodeValue\n    });\n    if (codeTree.language === null) {\n      codeTree.value = defaultCodeValue;\n    }\n\n    // pre-determine largest line number so that we can force minWidth on all linenumber elements\n    var lineBreakCount = (_code$match$length = (_code$match = code.match(/\\n/g)) === null || _code$match === void 0 ? void 0 : _code$match.length) !== null && _code$match$length !== void 0 ? _code$match$length : 0;\n    var largestLineNumber = startingLineNumber + lineBreakCount;\n    var rows = processLines(codeTree, wrapLines, lineProps, showLineNumbers, showInlineLineNumbers, startingLineNumber, largestLineNumber, lineNumberStyle, wrapLongLines);\n    return /*#__PURE__*/React.createElement(PreTag, preProps, /*#__PURE__*/React.createElement(CodeTag, codeTagProps, !showInlineLineNumbers && allLineNumbers, renderer({\n      rows: rows,\n      stylesheet: style,\n      useInlineStyles: useInlineStyles\n    })));\n  };\n}","function deepFreeze(obj) {\n    if (obj instanceof Map) {\n        obj.clear = obj.delete = obj.set = function () {\n            throw new Error('map is read-only');\n        };\n    } else if (obj instanceof Set) {\n        obj.add = obj.clear = obj.delete = 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(function (name) {\n        var prop = obj[name];\n\n        // Freeze prop if it is an object\n        if (typeof prop == 'object' && !Object.isFrozen(prop)) {\n            deepFreeze(prop);\n        }\n    });\n\n    return obj;\n}\n\nvar deepFreezeEs6 = deepFreeze;\nvar _default = deepFreeze;\ndeepFreezeEs6.default = _default;\n\n/** @implements CallbackResponse */\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(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 {{kind?: 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  return !!node.kind;\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    let className = node.kind;\n    if (!node.sublanguage) {\n      className = `${this.classPrefix}${className}`;\n    }\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 {{kind?: string, sublanguage?: boolean, children: Node[]} | string} Node */\n/** @typedef {{kind?: string, sublanguage?: boolean, children: Node[]} } DataNode */\n/**  */\n\nclass TokenTree {\n  constructor() {\n    /** @type DataNode */\n    this.rootNode = { children: [] };\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} kind */\n  openNode(kind) {\n    /** @type Node */\n    const node = { kind, children: [] };\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  - addKeyword(text, kind)\n  - addText(text)\n  - addSublanguage(emitter, subLanguageName)\n  - finalize()\n  - openNode(kind)\n  - closeNode()\n  - closeAllNodes()\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   * @param {string} kind\n   */\n  addKeyword(text, kind) {\n    if (text === \"\") { return; }\n\n    this.openNode(kind);\n    this.addText(text);\n    this.closeNode();\n  }\n\n  /**\n   * @param {string} text\n   */\n  addText(text) {\n    if (text === \"\") { return; }\n\n    this.add(text);\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    node.kind = name;\n    node.sublanguage = true;\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    return true;\n  }\n}\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\nfunction escape(value) {\n  return new RegExp(value.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), 'm');\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) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] } args\n * @returns {string}\n */\nfunction either(...args) {\n  const joined = '(' + args.map((x) => source(x)).join(\"|\") + \")\";\n  return joined;\n}\n\n/**\n * @param {RegExp} 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// 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 {string} separator\n * @returns {string}\n */\nfunction join(regexps, separator = \"|\") {\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(separator);\n}\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({\n    className: '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  className: 'string',\n  begin: '\\'',\n  end: '\\'',\n  illegal: '\\\\n',\n  contains: [BACKSLASH_ESCAPE]\n};\nconst QUOTE_STRING_MODE = {\n  className: '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(\n    {\n      className: 'comment',\n      begin,\n      end,\n      contains: []\n    },\n    modeOptions\n  );\n  mode.contains.push(PHRASAL_WORDS_MODE);\n  mode.contains.push({\n    className: 'doctag',\n    begin: '(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):',\n    relevance: 0\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  className: 'number',\n  begin: NUMBER_RE,\n  relevance: 0\n};\nconst C_NUMBER_MODE = {\n  className: 'number',\n  begin: C_NUMBER_RE,\n  relevance: 0\n};\nconst BINARY_NUMBER_MODE = {\n  className: 'number',\n  begin: BINARY_NUMBER_RE,\n  relevance: 0\n};\nconst CSS_NUMBER_MODE = {\n  className: 'number',\n  begin: 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};\nconst REGEXP_MODE = {\n  // this outer rule makes sure we actually have a WHOLE regex and not simply\n  // an expression such as:\n  //\n  //     3 / something\n  //\n  // (which will then blow up when regex's `illegal` sees the newline)\n  begin: /(?=\\/[^/\\n]*\\/)/,\n  contains: [{\n    className: 'regexp',\n    begin: /\\//,\n    end: /\\/[gimuy]*/,\n    illegal: /\\n/,\n    contains: [\n      BACKSLASH_ESCAPE,\n      {\n        begin: /\\[/,\n        end: /\\]/,\n        relevance: 0,\n        contains: [BACKSLASH_ESCAPE]\n      }\n    ]\n  }]\n};\nconst TITLE_MODE = {\n  className: 'title',\n  begin: IDENT_RE,\n  relevance: 0\n};\nconst UNDERSCORE_TITLE_MODE = {\n  className: '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    MATCH_NOTHING_RE: MATCH_NOTHING_RE,\n    IDENT_RE: IDENT_RE,\n    UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,\n    NUMBER_RE: NUMBER_RE,\n    C_NUMBER_RE: C_NUMBER_RE,\n    BINARY_NUMBER_RE: BINARY_NUMBER_RE,\n    RE_STARTERS_RE: RE_STARTERS_RE,\n    SHEBANG: SHEBANG,\n    BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,\n    APOS_STRING_MODE: APOS_STRING_MODE,\n    QUOTE_STRING_MODE: QUOTE_STRING_MODE,\n    PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,\n    COMMENT: COMMENT,\n    C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,\n    C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,\n    HASH_COMMENT_MODE: HASH_COMMENT_MODE,\n    NUMBER_MODE: NUMBER_MODE,\n    C_NUMBER_MODE: C_NUMBER_MODE,\n    BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,\n    CSS_NUMBER_MODE: CSS_NUMBER_MODE,\n    REGEXP_MODE: REGEXP_MODE,\n    TITLE_MODE: TITLE_MODE,\n    UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE,\n    METHOD_GUARD: METHOD_GUARD,\n    END_SAME_AS_BEGIN: END_SAME_AS_BEGIN\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 * `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// 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_CLASSNAME = \"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, className = DEFAULT_KEYWORD_CLASSNAME) {\n  /** @type KeywordDict */\n  const compiledKeywords = {};\n\n  // input can be a string of keywords, an array of keywords, or a object with\n  // named keys representing className (which can then point to a string or array)\n  if (typeof rawKeywords === 'string') {\n    compileList(className, rawKeywords.split(\" \"));\n  } else if (Array.isArray(rawKeywords)) {\n    compileList(className, rawKeywords);\n  } else {\n    Object.keys(rawKeywords).forEach(function(className) {\n      // collapse all our objects back into the parent object\n      Object.assign(\n        compiledKeywords,\n        compileKeywords(rawKeywords[className], caseInsensitive, className)\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} className\n   * @param {Array<string>} keywordList\n   */\n  function compileList(className, 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]] = [className, 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// 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 * @param {{plugins: HLJSPlugin[]}} opts\n * @returns {CompiledLanguage}\n */\nfunction compileLanguage(language, { plugins }) {\n  /**\n   * Builds a regex with the case sensativility 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' + (language.case_insensitive ? 'i' : '') + (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(join(terminators), 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      // do this early so compiler extensions generally don't have to worry about\n      // the distinction between match/begin\n      compileMatch\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\") {\n      keywordPattern = mode.keywords.$pattern;\n      delete mode.keywords.$pattern;\n    }\n\n    if (mode.keywords) {\n      mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);\n    }\n\n    // both are not allowed\n    if (mode.lexemes && keywordPattern) {\n      throw new Error(\"ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) \");\n    }\n\n    // `mode.lexemes` was the old standard before we added and now recommend\n    // using `keywords.$pattern` to pass the keyword pattern\n    keywordPattern = keywordPattern || mode.lexemes || /\\w+/;\n    cmode.keywordPatternRe = langRe(keywordPattern, true);\n\n    if (parent) {\n      if (!mode.begin) mode.begin = /\\B|\\b/;\n      cmode.beginRe = langRe(mode.begin);\n      if (mode.endSameAsBegin) mode.end = mode.begin;\n      if (!mode.end && !mode.endsWithParent) mode.end = /\\B|\\b/;\n      if (mode.end) cmode.endRe = langRe(mode.end);\n      cmode.terminatorEnd = source(mode.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(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(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(mode, { starts: mode.starts ? inherit(mode.starts) : null });\n  }\n\n  if (Object.isFrozen(mode)) {\n    return inherit(mode);\n  }\n\n  // no special dependency issues, just return ourselves\n  return mode;\n}\n\nvar version = \"10.7.3\";\n\n// @ts-nocheck\n\nfunction hasValueOrEmptyAttribute(value) {\n  return Boolean(value || value === \"\");\n}\n\nfunction BuildVuePlugin(hljs) {\n  const Component = {\n    props: [\"language\", \"code\", \"autodetect\"],\n    data: function() {\n      return {\n        detectedLanguage: \"\",\n        unknownLanguage: false\n      };\n    },\n    computed: {\n      className() {\n        if (this.unknownLanguage) return \"\";\n\n        return \"hljs \" + this.detectedLanguage;\n      },\n      highlighted() {\n        // no idea what language to use, return raw code\n        if (!this.autoDetect && !hljs.getLanguage(this.language)) {\n          console.warn(`The language \"${this.language}\" you specified could not be found.`);\n          this.unknownLanguage = true;\n          return escapeHTML(this.code);\n        }\n\n        let result = {};\n        if (this.autoDetect) {\n          result = hljs.highlightAuto(this.code);\n          this.detectedLanguage = result.language;\n        } else {\n          result = hljs.highlight(this.language, this.code, this.ignoreIllegals);\n          this.detectedLanguage = this.language;\n        }\n        return result.value;\n      },\n      autoDetect() {\n        return !this.language || hasValueOrEmptyAttribute(this.autodetect);\n      },\n      ignoreIllegals() {\n        return true;\n      }\n    },\n    // this avoids needing to use a whole Vue compilation pipeline just\n    // to build Highlight.js\n    render(createElement) {\n      return createElement(\"pre\", {}, [\n        createElement(\"code\", {\n          class: this.className,\n          domProps: { innerHTML: this.highlighted }\n        })\n      ]);\n    }\n    // template: `<pre><code :class=\"className\" v-html=\"highlighted\"></code></pre>`\n  };\n\n  const VuePlugin = {\n    install(Vue) {\n      Vue.component('highlightjs', Component);\n    }\n  };\n\n  return { Component, VuePlugin };\n}\n\n/* plugin itself */\n\n/** @type {HLJSPlugin} */\nconst mergeHTMLPlugin = {\n  \"after:highlightElement\": ({ el, result, text }) => {\n    const originalStream = nodeStream(el);\n    if (!originalStream.length) return;\n\n    const resultNode = document.createElement('div');\n    resultNode.innerHTML = result.value;\n    result.value = mergeStreams(originalStream, nodeStream(resultNode), text);\n  }\n};\n\n/* Stream merging support functions */\n\n/**\n * @typedef Event\n * @property {'start'|'stop'} event\n * @property {number} offset\n * @property {Node} node\n */\n\n/**\n * @param {Node} node\n */\nfunction tag(node) {\n  return node.nodeName.toLowerCase();\n}\n\n/**\n * @param {Node} node\n */\nfunction nodeStream(node) {\n  /** @type Event[] */\n  const result = [];\n  (function _nodeStream(node, offset) {\n    for (let child = node.firstChild; child; child = child.nextSibling) {\n      if (child.nodeType === 3) {\n        offset += child.nodeValue.length;\n      } else if (child.nodeType === 1) {\n        result.push({\n          event: 'start',\n          offset: offset,\n          node: child\n        });\n        offset = _nodeStream(child, offset);\n        // Prevent void elements from having an end tag that would actually\n        // double them in the output. There are more void elements in HTML\n        // but we list only those realistically expected in code display.\n        if (!tag(child).match(/br|hr|img|input/)) {\n          result.push({\n            event: 'stop',\n            offset: offset,\n            node: child\n          });\n        }\n      }\n    }\n    return offset;\n  })(node, 0);\n  return result;\n}\n\n/**\n * @param {any} original - the original stream\n * @param {any} highlighted - stream of the highlighted source\n * @param {string} value - the original source itself\n */\nfunction mergeStreams(original, highlighted, value) {\n  let processed = 0;\n  let result = '';\n  const nodeStack = [];\n\n  function selectStream() {\n    if (!original.length || !highlighted.length) {\n      return original.length ? original : highlighted;\n    }\n    if (original[0].offset !== highlighted[0].offset) {\n      return (original[0].offset < highlighted[0].offset) ? original : highlighted;\n    }\n\n    /*\n    To avoid starting the stream just before it should stop the order is\n    ensured that original always starts first and closes last:\n\n    if (event1 == 'start' && event2 == 'start')\n      return original;\n    if (event1 == 'start' && event2 == 'stop')\n      return highlighted;\n    if (event1 == 'stop' && event2 == 'start')\n      return original;\n    if (event1 == 'stop' && event2 == 'stop')\n      return highlighted;\n\n    ... which is collapsed to:\n    */\n    return highlighted[0].event === 'start' ? original : highlighted;\n  }\n\n  /**\n   * @param {Node} node\n   */\n  function open(node) {\n    /** @param {Attr} attr */\n    function attributeString(attr) {\n      return ' ' + attr.nodeName + '=\"' + escapeHTML(attr.value) + '\"';\n    }\n    // @ts-ignore\n    result += '<' + tag(node) + [].map.call(node.attributes, attributeString).join('') + '>';\n  }\n\n  /**\n   * @param {Node} node\n   */\n  function close(node) {\n    result += '</' + tag(node) + '>';\n  }\n\n  /**\n   * @param {Event} event\n   */\n  function render(event) {\n    (event.event === 'start' ? open : close)(event.node);\n  }\n\n  while (original.length || highlighted.length) {\n    let stream = selectStream();\n    result += escapeHTML(value.substring(processed, stream[0].offset));\n    processed = stream[0].offset;\n    if (stream === original) {\n      /*\n      On any opening or closing tag of the original markup we first close\n      the entire highlighted node stack, then render the original tag along\n      with all the following original tags at the same offset and then\n      reopen all the tags on the highlighted stack.\n      */\n      nodeStack.reverse().forEach(close);\n      do {\n        render(stream.splice(0, 1)[0]);\n        stream = selectStream();\n      } while (stream === original && stream.length && stream[0].offset === processed);\n      nodeStack.reverse().forEach(open);\n    } else {\n      if (stream[0].event === 'start') {\n        nodeStack.push(stream[0].node);\n      } else {\n        nodeStack.pop();\n      }\n      render(stream.splice(0, 1)[0]);\n    }\n  }\n  return result + escapeHTML(value.substr(processed));\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/*\nSyntax highlighting with language autodetection.\nhttps://highlightjs.org/\n*/\n\nconst escape$1 = escapeHTML;\nconst inherit$1 = inherit;\nconst NO_MATCH = Symbol(\"nomatch\");\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 fixMarkupRe = /(^(<[^>]+>|\\t|)+|\\n)/gm;\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    noHighlightRe: /^(no-?highlight)$/i,\n    languageDetectRe: /\\blang(?:uage)?-([\\w-]+)\\b/i,\n    classPrefix: 'hljs-',\n    tabReplace: null,\n    useBR: false,\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   * @param {CompiledMode} [continuation] - current continuation mode, if any\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, continuation) {\n    let code = \"\";\n    let languageName = \"\";\n    if (typeof optionsOrCode === \"object\") {\n      code = codeOrlanguageName;\n      ignoreIllegals = optionsOrCode.ignoreIllegals;\n      languageName = optionsOrCode.language;\n      // continuation not supported at all via the new API\n      // eslint-disable-next-line no-undefined\n      continuation = undefined;\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    /** @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, continuation);\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    /**\n     * Return keyword data if a match is a keyword\n     * @param {CompiledMode} mode - current mode\n     * @param {RegExpMatchArray} match - regexp match data\n     * @returns {KeywordData | false}\n     */\n    function keywordData(mode, match) {\n      const matchText = language.case_insensitive ? match[0].toLowerCase() : match[0];\n      return Object.prototype.hasOwnProperty.call(mode.keywords, matchText) && 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 data = keywordData(top, match);\n        if (data) {\n          const [kind, keywordRelevance] = data;\n          emitter.addText(buf);\n          buf = \"\";\n\n          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            emitter.addKeyword(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.substr(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 {Mode} mode - new mode to start\n     */\n    function startNewMode(mode) {\n      if (mode.className) {\n        emitter.openNode(language.classNameAliases[mode.className] || mode.className);\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 regexs 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 && newMode.endSameAsBegin) {\n        newMode.endRe = escape(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);\n      // if (mode[\"after:begin\"]) {\n      //   let resp = new Response(mode);\n      //   mode[\"after:begin\"](match, resp);\n      // }\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.substr(match.index);\n\n      const endMode = endOfMode(top, match, matchPlusRemainder);\n      if (!endMode) { return NO_MATCH; }\n\n      const origin = top;\n      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.className) {\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        if (endMode.endSameAsBegin) {\n          endMode.starts.endRe = endMode.endRe;\n        }\n        startNewMode(endMode.starts);\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.className) {\n          list.unshift(current.className);\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 preceeding 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');\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.className || '<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?  Only one occasion now.  An end match that was\n      triggered but could not be completed.  When might this happen?  When an `endSameasBegin`\n      rule sets the end rule to a specific match.  Since the overall mode termination rule that's\n      being used to scan the text isn't recompiled that means that any match that LOOKS like\n      the end (but is not, because it is not an exact match to the beginning) will\n      end up here.  A definite end match, but when `doEndMatch` tries to \"reapply\"\n      the end rule and fails to match, we wind up here, and just silently ignore the end.\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, { plugins });\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      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.substr(index));\n      emitter.closeAllNodes();\n      emitter.finalize();\n      result = emitter.toHTML();\n\n      return {\n        // avoid possible breakage with v10 clients expecting\n        // this to always be an integer\n        relevance: Math.floor(relevance),\n        value: result,\n        language: languageName,\n        illegal: false,\n        emitter: emitter,\n        top: top\n      };\n    } catch (err) {\n      if (err.message && err.message.includes('Illegal')) {\n        return {\n          illegal: true,\n          illegalBy: {\n            msg: err.message,\n            context: codeToHighlight.slice(index - 100, index + 100),\n            mode: err.mode\n          },\n          sofar: result,\n          relevance: 0,\n          value: escape$1(codeToHighlight),\n          emitter: emitter\n        };\n      } else if (SAFE_MODE) {\n        return {\n          illegal: false,\n          relevance: 0,\n          value: escape$1(codeToHighlight),\n          emitter: emitter,\n          language: languageName,\n          top: top,\n          errorRaised: err\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      relevance: 0,\n      emitter: new options.__emitter(options),\n      value: escape$1(code),\n      illegal: false,\n      top: PLAINTEXT_LANGUAGE\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  - second_best (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.second_best = secondBest;\n\n    return result;\n  }\n\n  /**\n  Post-processing of the highlighted markup:\n\n  - replace TABs with something more useful\n  - replace real line-breaks with '<br>' for non-pre containers\n\n    @param {string} html\n    @returns {string}\n  */\n  function fixMarkup(html) {\n    if (!(options.tabReplace || options.useBR)) {\n      return html;\n    }\n\n    return html.replace(fixMarkupRe, match => {\n      if (match === '\\n') {\n        return options.useBR ? '<br>' : match;\n      } else if (options.tabReplace) {\n        return match.replace(/\\t/g, options.tabReplace);\n      }\n      return match;\n    });\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    if (language) element.classList.add(language);\n  }\n\n  /** @type {HLJSPlugin} */\n  const brPlugin = {\n    \"before:highlightElement\": ({ el }) => {\n      if (options.useBR) {\n        el.innerHTML = el.innerHTML.replace(/\\n/g, '').replace(/<br[ /]*>/g, '\\n');\n      }\n    },\n    \"after:highlightElement\": ({ result }) => {\n      if (options.useBR) {\n        result.value = result.value.replace(/\\n/g, \"<br>\");\n      }\n    }\n  };\n\n  const TAB_REPLACE_RE = /^(<[^>]+>|\\t)+/gm;\n  /** @type {HLJSPlugin} */\n  const tabReplacePlugin = {\n    \"after:highlightElement\": ({ result }) => {\n      if (options.tabReplace) {\n        result.value = result.value.replace(TAB_REPLACE_RE, (m) =>\n          m.replace(/\\t/g, options.tabReplace)\n        );\n      }\n    }\n  };\n\n  /**\n   * Applies highlighting to a DOM node containing code. Accepts a DOM node and\n   * two optional parameters for fixMarkup.\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    // support for v10 API\n    fire(\"before:highlightElement\",\n      { el: element, language: language });\n\n    node = element;\n    const text = node.textContent;\n    const result = language ? highlight(text, { language, ignoreIllegals: true }) : highlightAuto(text);\n\n    // support for v10 API\n    fire(\"after:highlightElement\", { el: element, result, text });\n\n    element.innerHTML = result.value;\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      relavance: result.relevance\n    };\n    if (result.second_best) {\n      element.second_best = {\n        language: result.second_best.language,\n        // TODO: remove with version 11.0\n        re: result.second_best.relevance,\n        relavance: result.second_best.relevance\n      };\n    }\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    if (userOptions.useBR) {\n      deprecated(\"10.3.0\", \"'useBR' will be removed entirely in v11.0\");\n      deprecated(\"10.3.0\", \"Please see https://github.com/highlightjs/highlight.js/issues/2559\");\n    }\n    options = inherit$1(options, userOptions);\n  }\n\n  /**\n   * Highlights to all <pre><code> blocks on a page\n   *\n   * @type {Function & {called?: boolean}}\n   */\n  // TODO: remove v12, deprecated\n  const initHighlighting = () => {\n    if (initHighlighting.called) return;\n    initHighlighting.called = true;\n\n    deprecated(\"10.6.0\", \"initHighlighting() is deprecated.  Use highlightAll() instead.\");\n\n    const blocks = document.querySelectorAll('pre code');\n    blocks.forEach(highlightElement);\n  };\n\n  // Higlights all when DOMContentLoaded fires\n  // TODO: remove v12, deprecated\n  function initHighlightingOnLoad() {\n    deprecated(\"10.6.0\", \"initHighlightingOnLoad() is deprecated.  Use highlightAll() instead.\");\n    wantsHighlight = true;\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('pre code');\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    intended usage: When one language truly requires another\n\n    Unlike `getLanguage`, this will throw when the requested language\n    is not available.\n\n    @param {string} name - name of the language to fetch/require\n    @returns {Language | never}\n  */\n  function requireLanguage(name) {\n    deprecated(\"10.4.0\", \"requireLanguage will be removed entirely in v11.\");\n    deprecated(\"10.4.0\", \"Please see https://github.com/highlightjs/highlight.js/pull/2844\");\n\n    const lang = getLanguage(name);\n    if (lang) { return lang; }\n\n    const err = new Error('The \\'{}\\' language is required, but not loaded.'.replace('{}', name));\n    throw err;\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   *\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  Note: fixMarkup is deprecated and will be removed entirely in v11\n\n  @param {string} arg\n  @returns {string}\n  */\n  function deprecateFixMarkup(arg) {\n    deprecated(\"10.2.0\", \"fixMarkup will be removed entirely in v11.0\");\n    deprecated(\"10.2.0\", \"Please see https://github.com/highlightjs/highlight.js/issues/2534\");\n\n    return fixMarkup(arg);\n  }\n\n  /**\n   *\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    fixMarkup: deprecateFixMarkup,\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    requireLanguage,\n    autoDetection,\n    inherit: inherit$1,\n    addPlugin,\n    // plugins for frameworks\n    vuePlugin: BuildVuePlugin(hljs).VuePlugin\n  });\n\n  hljs.debugMode = function() { SAFE_MODE = false; };\n  hljs.safeMode = function() { SAFE_MODE = true; };\n  hljs.versionString = version;\n\n  for (const key in MODES) {\n    // @ts-ignore\n    if (typeof MODES[key] === \"object\") {\n      // @ts-ignore\n      deepFreezeEs6(MODES[key]);\n    }\n  }\n\n  // merge all the modes/regexs into our main object\n  Object.assign(hljs, MODES);\n\n  // built-in plugins, likely to be moved out of core in the future\n  hljs.addPlugin(brPlugin); // slated to be removed in v11\n  hljs.addPlugin(mergeHTMLPlugin);\n  hljs.addPlugin(tabReplacePlugin);\n  return hljs;\n};\n\n// export an \"instance\" of the highlighter\nvar highlight = HLJS({});\n\nmodule.exports = highlight;\n","//\n// format - printf-like string formatting for JavaScript\n// github.com/samsonjs/format\n// @_sjs\n//\n// Copyright 2010 - 2013 Sami Samhuri <sami@samhuri.net>\n//\n// MIT License\n// http://sjs.mit-license.org\n//\n\n;(function() {\n\n  //// Export the API\n  var namespace;\n\n  // CommonJS / Node module\n  if (typeof module !== 'undefined') {\n    namespace = module.exports = format;\n  }\n\n  // Browsers and other environments\n  else {\n    // Get the global object. Works in ES3, ES5, and ES5 strict mode.\n    namespace = (function(){ return this || (1,eval)('this') }());\n  }\n\n  namespace.format = format;\n  namespace.vsprintf = vsprintf;\n\n  if (typeof console !== 'undefined' && typeof console.log === 'function') {\n    namespace.printf = printf;\n  }\n\n  function printf(/* ... */) {\n    console.log(format.apply(null, arguments));\n  }\n\n  function vsprintf(fmt, replacements) {\n    return format.apply(null, [fmt].concat(replacements));\n  }\n\n  function format(fmt) {\n    var argIndex = 1 // skip initial format argument\n      , args = [].slice.call(arguments)\n      , i = 0\n      , n = fmt.length\n      , result = ''\n      , c\n      , escaped = false\n      , arg\n      , tmp\n      , leadingZero = false\n      , precision\n      , nextArg = function() { return args[argIndex++]; }\n      , slurpNumber = function() {\n          var digits = '';\n          while (/\\d/.test(fmt[i])) {\n            digits += fmt[i++];\n            c = fmt[i];\n          }\n          return digits.length > 0 ? parseInt(digits) : null;\n        }\n      ;\n    for (; i < n; ++i) {\n      c = fmt[i];\n      if (escaped) {\n        escaped = false;\n        if (c == '.') {\n          leadingZero = false;\n          c = fmt[++i];\n        }\n        else if (c == '0' && fmt[i + 1] == '.') {\n          leadingZero = true;\n          i += 2;\n          c = fmt[i];\n        }\n        else {\n          leadingZero = true;\n        }\n        precision = slurpNumber();\n        switch (c) {\n        case 'b': // number in binary\n          result += parseInt(nextArg(), 10).toString(2);\n          break;\n        case 'c': // character\n          arg = nextArg();\n          if (typeof arg === 'string' || arg instanceof String)\n            result += arg;\n          else\n            result += String.fromCharCode(parseInt(arg, 10));\n          break;\n        case 'd': // number in decimal\n          result += parseInt(nextArg(), 10);\n          break;\n        case 'f': // floating point number\n          tmp = String(parseFloat(nextArg()).toFixed(precision || 6));\n          result += leadingZero ? tmp : tmp.replace(/^0/, '');\n          break;\n        case 'j': // JSON\n          result += JSON.stringify(nextArg());\n          break;\n        case 'o': // number in octal\n          result += '0' + parseInt(nextArg(), 10).toString(8);\n          break;\n        case 's': // string\n          result += nextArg();\n          break;\n        case 'x': // lowercase hexadecimal\n          result += '0x' + parseInt(nextArg(), 10).toString(16);\n          break;\n        case 'X': // uppercase hexadecimal\n          result += '0x' + parseInt(nextArg(), 10).toString(16).toUpperCase();\n          break;\n        default:\n          result += c;\n          break;\n        }\n      } else if (c === '%') {\n        escaped = true;\n      } else {\n        result += c;\n      }\n    }\n    return result;\n  }\n\n}());\n","'use strict'\n\nvar formatter = require('format')\n\nvar fault = create(Error)\n\nmodule.exports = fault\n\nfault.eval = create(EvalError)\nfault.range = create(RangeError)\nfault.reference = create(ReferenceError)\nfault.syntax = create(SyntaxError)\nfault.type = create(TypeError)\nfault.uri = create(URIError)\n\nfault.create = create\n\n// Create a new `EConstructor`, with the formatted `format` as a first argument.\nfunction create(EConstructor) {\n  FormattedError.displayName = EConstructor.displayName || EConstructor.name\n\n  return FormattedError\n\n  function FormattedError(format) {\n    if (format) {\n      format = formatter.apply(null, arguments)\n    }\n\n    return new EConstructor(format)\n  }\n}\n","'use strict'\n\nvar high = require('highlight.js/lib/core')\nvar fault = require('fault')\n\nexports.highlight = highlight\nexports.highlightAuto = highlightAuto\nexports.registerLanguage = registerLanguage\nexports.listLanguages = listLanguages\nexports.registerAlias = registerAlias\n\nEmitter.prototype.addText = text\nEmitter.prototype.addKeyword = addKeyword\nEmitter.prototype.addSublanguage = addSublanguage\nEmitter.prototype.openNode = open\nEmitter.prototype.closeNode = close\nEmitter.prototype.closeAllNodes = noop\nEmitter.prototype.finalize = noop\nEmitter.prototype.toHTML = toHtmlNoop\n\nvar defaultPrefix = 'hljs-'\n\n// Highlighting `value` in the language `name`.\nfunction highlight(name, value, options) {\n  var before = high.configure({})\n  var settings = options || {}\n  var prefix = settings.prefix\n  var result\n\n  if (typeof name !== 'string') {\n    throw fault('Expected `string` for name, got `%s`', name)\n  }\n\n  if (!high.getLanguage(name)) {\n    throw fault('Unknown language: `%s` is not registered', name)\n  }\n\n  if (typeof value !== 'string') {\n    throw fault('Expected `string` for value, got `%s`', value)\n  }\n\n  if (prefix === null || prefix === undefined) {\n    prefix = defaultPrefix\n  }\n\n  high.configure({__emitter: Emitter, classPrefix: prefix})\n\n  result = high.highlight(value, {language: name, ignoreIllegals: true})\n\n  high.configure(before || {})\n\n  /* istanbul ignore if - Highlight.js seems to use this (currently) for broken\n   * grammars, so let’s keep it in there just to be sure. */\n  if (result.errorRaised) {\n    throw result.errorRaised\n  }\n\n  return {\n    relevance: result.relevance,\n    language: result.language,\n    value: result.emitter.rootNode.children\n  }\n}\n\nfunction highlightAuto(value, options) {\n  var settings = options || {}\n  var subset = settings.subset || high.listLanguages()\n  var prefix = settings.prefix\n  var length = subset.length\n  var index = -1\n  var result\n  var secondBest\n  var current\n  var name\n\n  if (prefix === null || prefix === undefined) {\n    prefix = defaultPrefix\n  }\n\n  if (typeof value !== 'string') {\n    throw fault('Expected `string` for value, got `%s`', value)\n  }\n\n  secondBest = {relevance: 0, language: null, value: []}\n  result = {relevance: 0, language: null, value: []}\n\n  while (++index < length) {\n    name = subset[index]\n\n    if (!high.getLanguage(name)) {\n      continue\n    }\n\n    current = highlight(name, value, options)\n    current.language = name\n\n    if (current.relevance > secondBest.relevance) {\n      secondBest = current\n    }\n\n    if (current.relevance > result.relevance) {\n      secondBest = result\n      result = current\n    }\n  }\n\n  if (secondBest.language) {\n    result.secondBest = secondBest\n  }\n\n  return result\n}\n\n// Register a language.\nfunction registerLanguage(name, syntax) {\n  high.registerLanguage(name, syntax)\n}\n\n// Get a list of all registered languages.\nfunction listLanguages() {\n  return high.listLanguages()\n}\n\n// Register more aliases for an already registered language.\nfunction registerAlias(name, alias) {\n  var map = name\n  var key\n\n  if (alias) {\n    map = {}\n    map[name] = alias\n  }\n\n  for (key in map) {\n    high.registerAliases(map[key], {languageName: key})\n  }\n}\n\nfunction Emitter(options) {\n  this.options = options\n  this.rootNode = {children: []}\n  this.stack = [this.rootNode]\n}\n\nfunction addKeyword(value, name) {\n  this.openNode(name)\n  this.addText(value)\n  this.closeNode()\n}\n\nfunction addSublanguage(other, name) {\n  var stack = this.stack\n  var current = stack[stack.length - 1]\n  var results = other.rootNode.children\n  var node = name\n    ? {\n        type: 'element',\n        tagName: 'span',\n        properties: {className: [name]},\n        children: results\n      }\n    : results\n\n  current.children = current.children.concat(node)\n}\n\nfunction text(value) {\n  var stack = this.stack\n  var current\n  var tail\n\n  if (value === '') return\n\n  current = stack[stack.length - 1]\n  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: value})\n  }\n}\n\nfunction open(name) {\n  var stack = this.stack\n  var className = this.options.classPrefix + name\n  var current = stack[stack.length - 1]\n  var child = {\n    type: 'element',\n    tagName: 'span',\n    properties: {className: [className]},\n    children: []\n  }\n\n  current.children.push(child)\n  stack.push(child)\n}\n\nfunction close() {\n  this.stack.pop()\n}\n\nfunction toHtmlNoop() {\n  return ''\n}\n\nfunction noop() {}\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) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] } args\n * @returns {string}\n */\nfunction either(...args) {\n  const joined = '(' + args.map((x) => source(x)).join(\"|\") + \")\";\n  return joined;\n}\n\n/*\n Language: SQL\n Website: https://en.wikipedia.org/wiki/SQL\n Category: common, database\n */\n\nfunction sql(hljs) {\n  const COMMENT_MODE = hljs.COMMENT('--', '$');\n  const STRING = {\n    className: 'string',\n    variants: [\n      {\n        begin: /'/,\n        end: /'/,\n        contains: [\n          {begin: /''/ }\n        ]\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 = [...RESERVED_WORDS, ...NON_RESERVED_WORDS].filter((keyword) => {\n    return !RESERVED_FUNCTIONS.includes(keyword);\n  });\n\n  const VARIABLE = {\n    className: \"variable\",\n    begin: /@[a-z0-9]+/,\n  };\n\n  const OPERATOR = {\n    className: \"operator\",\n    begin: /[-+*/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,\n    relevance: 0,\n  };\n\n  const FUNCTION_CALL = {\n    begin: concat(/\\b/, either(...FUNCTIONS), /\\s*\\(/),\n    keywords: {\n      built_in: FUNCTIONS\n    }\n  };\n\n  // keywords with less than 3 letters are reduced in relevancy\n  function reduceRelevancy(list, {exceptions, when} = {}) {\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: either(...COMBOS),\n        keywords: {\n          $pattern: /[\\w\\.]+/,\n          keyword: KEYWORDS.concat(COMBOS),\n          literal: LITERALS,\n          type: TYPES\n        },\n      },\n      {\n        className: \"type\",\n        begin: 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\nmodule.exports = sql;\n","import highlight from './highlight';\nimport lowlight from 'lowlight/lib/core';\nvar SyntaxHighlighter = highlight(lowlight, {});\nSyntaxHighlighter.registerLanguage = lowlight.registerLanguage;\nexport default SyntaxHighlighter;","export default {\n  \"hljs\": {\n    \"display\": \"block\",\n    \"overflowX\": \"auto\",\n    \"padding\": \"0.5em\",\n    \"background\": \"#eee\",\n    \"color\": \"black\"\n  },\n  \"hljs-link\": {\n    \"color\": \"#070\"\n  },\n  \"hljs-emphasis\": {\n    \"color\": \"#070\",\n    \"fontStyle\": \"italic\"\n  },\n  \"hljs-attribute\": {\n    \"color\": \"#070\"\n  },\n  \"hljs-addition\": {\n    \"color\": \"#070\"\n  },\n  \"hljs-strong\": {\n    \"color\": \"#d14\",\n    \"fontWeight\": \"bold\"\n  },\n  \"hljs-string\": {\n    \"color\": \"#d14\"\n  },\n  \"hljs-deletion\": {\n    \"color\": \"#d14\"\n  },\n  \"hljs-quote\": {\n    \"color\": \"#998\",\n    \"fontStyle\": \"italic\"\n  },\n  \"hljs-comment\": {\n    \"color\": \"#998\",\n    \"fontStyle\": \"italic\"\n  },\n  \"hljs-section\": {\n    \"color\": \"#900\"\n  },\n  \"hljs-title\": {\n    \"color\": \"#900\"\n  },\n  \"hljs-class .hljs-title\": {\n    \"color\": \"#458\"\n  },\n  \"hljs-type\": {\n    \"color\": \"#458\"\n  },\n  \"hljs-variable\": {\n    \"color\": \"#336699\"\n  },\n  \"hljs-template-variable\": {\n    \"color\": \"#336699\"\n  },\n  \"hljs-bullet\": {\n    \"color\": \"#997700\"\n  },\n  \"hljs-meta\": {\n    \"color\": \"#3344bb\"\n  },\n  \"hljs-code\": {\n    \"color\": \"#099\"\n  },\n  \"hljs-number\": {\n    \"color\": \"#099\"\n  },\n  \"hljs-literal\": {\n    \"color\": \"#099\"\n  },\n  \"hljs-keyword\": {\n    \"color\": \"#099\"\n  },\n  \"hljs-selector-tag\": {\n    \"color\": \"#099\"\n  },\n  \"hljs-regexp\": {\n    \"backgroundColor\": \"#fff0ff\",\n    \"color\": \"#880088\"\n  },\n  \"hljs-symbol\": {\n    \"color\": \"#990073\"\n  },\n  \"hljs-tag\": {\n    \"color\": \"#007700\"\n  },\n  \"hljs-name\": {\n    \"color\": \"#007700\"\n  },\n  \"hljs-selector-id\": {\n    \"color\": \"#007700\"\n  },\n  \"hljs-selector-class\": {\n    \"color\": \"#007700\"\n  }\n};","const InvalidIcon = ({ width = '25px', height = '25px', style = {} }) => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width={width}\n    height={height}\n    style={style}\n    fill=\"currentColor\"\n    className=\"bi bi-x-circle-fill\"\n    viewBox=\"0 0 16 16\"\n    data-testid=\"invalid-icon\"\n  >\n    <path d=\"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM5.354 4.646a.5.5 0 1 0-.708.708L7.293 8l-2.647 2.646a.5.5 0 0 0 .708.708L8 8.707l2.646 2.647a.5.5 0 0 0 .708-.708L8.707 8l2.647-2.646a.5.5 0 0 0-.708-.708L8 7.293 5.354 4.646z\" />\n  </svg>\n);\n\nexport default InvalidIcon;\n","import { useId, useState } from 'react';\n\nexport default function Tooltip({\n  content,\n  placement = 'bottom',\n  children,\n  maxWidth = 240,\n}) {\n  const [visible, setVisible] = useState(false);\n  const tooltipId = useId();\n\n  if (!content) return children;\n\n  const show = () => setVisible(true);\n  const hide = () => setVisible(false);\n\n  const isTop = placement === 'top';\n\n  return (\n    <span\n      style={{ position: 'relative', display: 'inline-flex' }}\n      onMouseEnter={show}\n      onMouseLeave={hide}\n      onFocus={show}\n      onBlur={hide}\n    >\n      <span aria-describedby={visible ? tooltipId : undefined}>{children}</span>\n      {visible && (\n        <span\n          role=\"tooltip\"\n          id={tooltipId}\n          style={{\n            position: 'absolute',\n            [isTop ? 'bottom' : 'top']: 'calc(100% + 6px)',\n            left: '50%',\n            transform: 'translateX(-50%)',\n            backgroundColor: '#1e293b',\n            color: '#ffffff',\n            fontSize: '12px',\n            lineHeight: 1.4,\n            fontWeight: 400,\n            padding: '6px 10px',\n            borderRadius: '6px',\n            boxShadow: '0 4px 12px rgba(0, 0, 0, 0.18)',\n            maxWidth: `${maxWidth}px`,\n            width: 'max-content',\n            textAlign: 'center',\n            whiteSpace: 'normal',\n            textTransform: 'none',\n            letterSpacing: 'normal',\n            zIndex: 2000,\n            pointerEvents: 'none',\n          }}\n        >\n          {content}\n          <span\n            style={{\n              position: 'absolute',\n              [isTop ? 'bottom' : 'top']: '-4px',\n              left: '50%',\n              transform: 'translateX(-50%) rotate(45deg)',\n              width: '8px',\n              height: '8px',\n              backgroundColor: '#1e293b',\n            }}\n          />\n        </span>\n      )}\n    </span>\n  );\n}\n","import { useContext, useEffect, useRef, useState } from 'react';\nimport ValidIcon from '../../icons/ValidIcon';\nimport InvalidIcon from '../../icons/InvalidIcon';\nimport DJClientContext from '../../providers/djclient';\nimport * as React from 'react';\nimport { labelize } from '../../../utils/form';\nimport Tooltip from '../../components/Tooltip';\n\nexport default function NodeStatus({\n  node,\n  revalidate = true,\n  showLabel = false,\n  validLabel = 'Valid',\n  invalidLabel = 'Invalid',\n  validTooltip = 'This node validates successfully.',\n  invalidTooltip = 'This node has validation errors. Open it to see what needs to be fixed.',\n}) {\n  const MAX_ERROR_LENGTH = 200;\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const [validation, setValidation] = useState([]);\n\n  const [codeAnchor, setCodeAnchor] = useState(false);\n  const ref = useRef(null);\n\n  useEffect(() => {\n    if (revalidate) {\n      const fetchData = async () => {\n        setValidation(await djClient.revalidate(node.name));\n      };\n      fetchData().catch(console.error);\n    }\n  }, [djClient, node, revalidate]);\n\n  const displayValidation =\n    revalidate && validation?.errors?.length > 0 ? (\n      <>\n        <button\n          className=\"badge\"\n          style={{\n            backgroundColor: '#b34b00',\n            fontSize: '15px',\n            outline: '0',\n            border: '0',\n            cursor: 'pointer',\n          }}\n          onClick={() => setCodeAnchor(!codeAnchor)}\n        >\n          ⚠ {validation?.errors?.length} error\n          {validation?.errors?.length > 1 ? 's' : ''}\n        </button>\n        <div\n          className=\"popover\"\n          ref={ref}\n          style={{\n            display: codeAnchor === false ? 'none' : 'block',\n            border: 'none',\n            paddingTop: '0px !important',\n            marginTop: '0px',\n            backgroundColor: 'transparent',\n          }}\n        >\n          {validation?.errors?.map((error, idx) => (\n            <div className=\"validation_error\">\n              <b\n                style={{\n                  color: '#b34b00',\n                }}\n              >\n                {labelize(error.type.toLowerCase())}:\n              </b>{' '}\n              {error.message.length > MAX_ERROR_LENGTH\n                ? error.message.slice(0, MAX_ERROR_LENGTH - 1) + '...'\n                : error.message}\n            </div>\n          ))}\n        </div>\n      </>\n    ) : (\n      <></>\n    );\n\n  const isValid =\n    validation?.status === 'valid' ||\n    node?.status === 'valid' ||\n    node?.current?.status === 'VALID';\n\n  const badge = isValid ? (\n    <span\n      className=\"status__valid status\"\n      style={{\n        alignContent: 'center',\n        display: showLabel ? 'inline-flex' : undefined,\n        alignItems: showLabel ? 'center' : undefined,\n        gap: showLabel ? '6px' : undefined,\n        fontWeight: showLabel ? 600 : undefined,\n      }}\n    >\n      <ValidIcon\n        width={showLabel ? '16px' : '25px'}\n        height={showLabel ? '16px' : '25px'}\n      />\n      {showLabel ? validLabel : null}\n    </span>\n  ) : (\n    <span\n      className=\"status__invalid status\"\n      style={{\n        alignContent: 'center',\n        display: showLabel ? 'inline-flex' : undefined,\n        alignItems: showLabel ? 'center' : undefined,\n        gap: showLabel ? '6px' : undefined,\n        fontWeight: showLabel ? 600 : undefined,\n      }}\n    >\n      <InvalidIcon\n        width={showLabel ? '16px' : '25px'}\n        height={showLabel ? '16px' : '25px'}\n      />\n      {showLabel ? invalidLabel : null}\n    </span>\n  );\n\n  return (\n    <>\n      {revalidate && validation?.errors?.length > 0 ? (\n        displayValidation\n      ) : showLabel ? (\n        <Tooltip content={isValid ? validTooltip : invalidTooltip}>\n          {badge}\n        </Tooltip>\n      ) : (\n        badge\n      )}\n    </>\n  );\n}\n","/**\n * @typedef Options\n *   Configuration for `stringify`.\n * @property {boolean} [padLeft=true]\n *   Whether to pad a space before a token.\n * @property {boolean} [padRight=false]\n *   Whether to pad a space after a token.\n */\n\n/**\n * @typedef {Options} StringifyOptions\n *   Please use `StringifyOptions` instead.\n */\n\n/**\n * Parse comma-separated tokens to an array.\n *\n * @param {string} value\n *   Comma-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  /** @type {Array<string>} */\n  const tokens = []\n  const input = String(value || '')\n  let index = input.indexOf(',')\n  let start = 0\n  /** @type {boolean} */\n  let end = false\n\n  while (!end) {\n    if (index === -1) {\n      index = input.length\n      end = true\n    }\n\n    const token = input.slice(start, index).trim()\n\n    if (token || !end) {\n      tokens.push(token)\n    }\n\n    start = index + 1\n    index = input.indexOf(',', start)\n  }\n\n  return tokens\n}\n\n/**\n * Serialize an array of strings or numbers to comma-separated tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @param {Options} [options]\n *   Configuration for `stringify` (optional).\n * @returns {string}\n *   Comma-separated tokens.\n */\nexport function stringify(values, options) {\n  const settings = options || {}\n\n  // Ensure the last empty entry is seen.\n  const input = values[values.length - 1] === '' ? [...values, ''] : values\n\n  return input\n    .join(\n      (settings.padRight ? ' ' : '') +\n        ',' +\n        (settings.padLeft === false ? '' : ' ')\n    )\n    .trim()\n}\n","/**\n * @typedef Options\n *   Configuration.\n * @property {boolean | null | undefined} [jsx=false]\n *   Support JSX identifiers (default: `false`).\n */\n\nconst startRe = /[$_\\p{ID_Start}]/u\nconst contRe = /[$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst contReJsx = /[-$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst nameRe = /^[$_\\p{ID_Start}][$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\nconst nameReJsx = /^[$_\\p{ID_Start}][-$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Checks if the given code point can start an identifier.\n *\n * @param {number | undefined} code\n *   Code point to check.\n * @returns {boolean}\n *   Whether `code` can start an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function start(code) {\n  return code ? startRe.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given code point can continue an identifier.\n *\n * @param {number | undefined} code\n *   Code point to check.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {boolean}\n *   Whether `code` can continue an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function cont(code, options) {\n  const settings = options || emptyOptions\n  const re = settings.jsx ? contReJsx : contRe\n  return code ? re.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given value is a valid identifier name.\n *\n * @param {string} name\n *   Identifier to check.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {boolean}\n *   Whether `name` can be an identifier.\n */\nexport function name(name, options) {\n  const settings = options || emptyOptions\n  const re = settings.jsx ? nameReJsx : nameRe\n  return re.test(name)\n}\n","/**\n * @typedef {import('hast').Nodes} Nodes\n */\n\n// HTML whitespace expression.\n// See <https://infra.spec.whatwg.org/#ascii-whitespace>.\nconst re = /[ \\t\\n\\f\\r]/g\n\n/**\n * Check if the given value is *inter-element whitespace*.\n *\n * @param {Nodes | string} thing\n *   Thing to check (`Node` or `string`).\n * @returns {boolean}\n *   Whether the `value` is inter-element whitespace (`boolean`): consisting of\n *   zero or more of space, tab (`\\t`), line feed (`\\n`), carriage return\n *   (`\\r`), or form feed (`\\f`); if a node is passed it must be a `Text` node,\n *   whose `value` field is checked.\n */\nexport function whitespace(thing) {\n  return typeof thing === 'object'\n    ? thing.type === 'text'\n      ? empty(thing.value)\n      : false\n    : empty(thing)\n}\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction empty(value) {\n  return value.replace(re, '') === ''\n}\n","/**\n * @import {Schema as SchemaType, Space} from 'property-information'\n */\n\n/** @type {SchemaType} */\nexport class Schema {\n  /**\n   * @param {SchemaType['property']} property\n   *   Property.\n   * @param {SchemaType['normal']} normal\n   *   Normal.\n   * @param {Space | undefined} [space]\n   *   Space.\n   * @returns\n   *   Schema.\n   */\n  constructor(property, normal, space) {\n    this.normal = normal\n    this.property = property\n\n    if (space) {\n      this.space = space\n    }\n  }\n}\n\nSchema.prototype.normal = {}\nSchema.prototype.property = {}\nSchema.prototype.space = undefined\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {ReadonlyArray<Schema>} definitions\n *   Definitions.\n * @param {Space | undefined} [space]\n *   Space.\n * @returns {Schema}\n *   Schema.\n */\nexport function merge(definitions, space) {\n  /** @type {Record<string, Info>} */\n  const property = {}\n  /** @type {Record<string, string>} */\n  const normal = {}\n\n  for (const definition of definitions) {\n    Object.assign(property, definition.property)\n    Object.assign(normal, definition.normal)\n  }\n\n  return new Schema(property, normal, space)\n}\n","/**\n * Get the cleaned case insensitive form of an attribute or property.\n *\n * @param {string} value\n *   An attribute-like or property-like name.\n * @returns {string}\n *   Value that can be used to look up the properly cased property on a\n *   `Schema`.\n */\nexport function normalize(value) {\n  return value.toLowerCase()\n}\n","/**\n * @import {Info as InfoType} from 'property-information'\n */\n\n/** @type {InfoType} */\nexport class Info {\n  /**\n   * @param {string} property\n   *   Property.\n   * @param {string} attribute\n   *   Attribute.\n   * @returns\n   *   Info.\n   */\n  constructor(property, attribute) {\n    this.attribute = attribute\n    this.property = property\n  }\n}\n\nInfo.prototype.attribute = ''\nInfo.prototype.booleanish = false\nInfo.prototype.boolean = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.defined = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.number = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.property = ''\nInfo.prototype.spaceSeparated = false\nInfo.prototype.space = undefined\n","let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n  return 2 ** ++powers\n}\n","/**\n * @import {Space} from 'property-information'\n */\n\nimport {Info} from './info.js'\nimport * as types from './types.js'\n\nconst checks = /** @type {ReadonlyArray<keyof typeof types>} */ (\n  Object.keys(types)\n)\n\nexport class DefinedInfo extends Info {\n  /**\n   * @constructor\n   * @param {string} property\n   *   Property.\n   * @param {string} attribute\n   *   Attribute.\n   * @param {number | null | undefined} [mask]\n   *   Mask.\n   * @param {Space | undefined} [space]\n   *   Space.\n   * @returns\n   *   Info.\n   */\n  constructor(property, attribute, mask, space) {\n    let index = -1\n\n    super(property, attribute)\n\n    mark(this, 'space', space)\n\n    if (typeof mask === 'number') {\n      while (++index < checks.length) {\n        const check = checks[index]\n        mark(this, checks[index], (mask & types[check]) === types[check])\n      }\n    }\n  }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @template {keyof DefinedInfo} Key\n *   Key type.\n * @param {DefinedInfo} values\n *   Info.\n * @param {Key} key\n *   Key.\n * @param {DefinedInfo[Key]} value\n *   Value.\n * @returns {undefined}\n *   Nothing.\n */\nfunction mark(values, key, value) {\n  if (value) {\n    values[key] = value\n  }\n}\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\n/**\n * @typedef Definition\n *   Definition of a schema.\n * @property {Record<string, string> | undefined} [attributes]\n *   Normalzed names to special attribute case.\n * @property {ReadonlyArray<string> | undefined} [mustUseProperty]\n *   Normalized names that must be set as properties.\n * @property {Record<string, number | null>} properties\n *   Property names to their types.\n * @property {Space | undefined} [space]\n *   Space.\n * @property {Transform} transform\n *   Transform a property name.\n */\n\n/**\n * @callback Transform\n *   Transform.\n * @param {Record<string, string>} attributes\n *   Attributes.\n * @param {string} property\n *   Property.\n * @returns {string}\n *   Attribute.\n */\n\nimport {normalize} from '../normalize.js'\nimport {DefinedInfo} from './defined-info.js'\nimport {Schema} from './schema.js'\n\n/**\n * @param {Definition} definition\n *   Definition.\n * @returns {Schema}\n *   Schema.\n */\nexport function create(definition) {\n  /** @type {Record<string, Info>} */\n  const properties = {}\n  /** @type {Record<string, string>} */\n  const normals = {}\n\n  for (const [property, value] of Object.entries(definition.properties)) {\n    const info = new DefinedInfo(\n      property,\n      definition.transform(definition.attributes || {}, property),\n      value,\n      definition.space\n    )\n\n    if (\n      definition.mustUseProperty &&\n      definition.mustUseProperty.includes(property)\n    ) {\n      info.mustUseProperty = true\n    }\n\n    properties[property] = info\n\n    normals[normalize(property)] = property\n    normals[normalize(info.attribute)] = property\n  }\n\n  return new Schema(properties, normals, definition.space)\n}\n","import {create} from './util/create.js'\nimport {booleanish, number, spaceSeparated} from './util/types.js'\n\nexport const aria = create({\n  properties: {\n    ariaActiveDescendant: null,\n    ariaAtomic: booleanish,\n    ariaAutoComplete: null,\n    ariaBusy: booleanish,\n    ariaChecked: booleanish,\n    ariaColCount: number,\n    ariaColIndex: number,\n    ariaColSpan: number,\n    ariaControls: spaceSeparated,\n    ariaCurrent: null,\n    ariaDescribedBy: spaceSeparated,\n    ariaDetails: null,\n    ariaDisabled: booleanish,\n    ariaDropEffect: spaceSeparated,\n    ariaErrorMessage: null,\n    ariaExpanded: booleanish,\n    ariaFlowTo: spaceSeparated,\n    ariaGrabbed: booleanish,\n    ariaHasPopup: null,\n    ariaHidden: booleanish,\n    ariaInvalid: null,\n    ariaKeyShortcuts: null,\n    ariaLabel: null,\n    ariaLabelledBy: spaceSeparated,\n    ariaLevel: number,\n    ariaLive: null,\n    ariaModal: booleanish,\n    ariaMultiLine: booleanish,\n    ariaMultiSelectable: booleanish,\n    ariaOrientation: null,\n    ariaOwns: spaceSeparated,\n    ariaPlaceholder: null,\n    ariaPosInSet: number,\n    ariaPressed: booleanish,\n    ariaReadOnly: booleanish,\n    ariaRelevant: null,\n    ariaRequired: booleanish,\n    ariaRoleDescription: spaceSeparated,\n    ariaRowCount: number,\n    ariaRowIndex: number,\n    ariaRowSpan: number,\n    ariaSelected: booleanish,\n    ariaSetSize: number,\n    ariaSort: null,\n    ariaValueMax: number,\n    ariaValueMin: number,\n    ariaValueNow: number,\n    ariaValueText: null,\n    role: null\n  },\n  transform(_, property) {\n    return property === 'role'\n      ? property\n      : 'aria-' + property.slice(4).toLowerCase()\n  }\n})\n","/**\n * @param {Record<string, string>} attributes\n *   Attributes.\n * @param {string} attribute\n *   Attribute.\n * @returns {string}\n *   Transformed attribute.\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n  return attribute in attributes ? attributes[attribute] : attribute\n}\n","import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n *   Attributes.\n * @param {string} property\n *   Property.\n * @returns {string}\n *   Transformed property.\n */\nexport function caseInsensitiveTransform(attributes, property) {\n  return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","import {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n  booleanish,\n  boolean,\n  commaSeparated,\n  number,\n  overloadedBoolean,\n  spaceSeparated\n} from './util/types.js'\n\nexport const html = create({\n  attributes: {\n    acceptcharset: 'accept-charset',\n    classname: 'class',\n    htmlfor: 'for',\n    httpequiv: 'http-equiv'\n  },\n  mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n  properties: {\n    // Standard Properties.\n    abbr: null,\n    accept: commaSeparated,\n    acceptCharset: spaceSeparated,\n    accessKey: spaceSeparated,\n    action: null,\n    allow: null,\n    allowFullScreen: boolean,\n    allowPaymentRequest: boolean,\n    allowUserMedia: boolean,\n    alt: null,\n    as: null,\n    async: boolean,\n    autoCapitalize: null,\n    autoComplete: spaceSeparated,\n    autoFocus: boolean,\n    autoPlay: boolean,\n    blocking: spaceSeparated,\n    capture: null,\n    charSet: null,\n    checked: boolean,\n    cite: null,\n    className: spaceSeparated,\n    cols: number,\n    colSpan: null,\n    content: null,\n    contentEditable: booleanish,\n    controls: boolean,\n    controlsList: spaceSeparated,\n    coords: number | commaSeparated,\n    crossOrigin: null,\n    data: null,\n    dateTime: null,\n    decoding: null,\n    default: boolean,\n    defer: boolean,\n    dir: null,\n    dirName: null,\n    disabled: boolean,\n    download: overloadedBoolean,\n    draggable: booleanish,\n    encType: null,\n    enterKeyHint: null,\n    fetchPriority: null,\n    form: null,\n    formAction: null,\n    formEncType: null,\n    formMethod: null,\n    formNoValidate: boolean,\n    formTarget: null,\n    headers: spaceSeparated,\n    height: number,\n    hidden: overloadedBoolean,\n    high: number,\n    href: null,\n    hrefLang: null,\n    htmlFor: spaceSeparated,\n    httpEquiv: spaceSeparated,\n    id: null,\n    imageSizes: null,\n    imageSrcSet: null,\n    inert: boolean,\n    inputMode: null,\n    integrity: null,\n    is: null,\n    isMap: boolean,\n    itemId: null,\n    itemProp: spaceSeparated,\n    itemRef: spaceSeparated,\n    itemScope: boolean,\n    itemType: spaceSeparated,\n    kind: null,\n    label: null,\n    lang: null,\n    language: null,\n    list: null,\n    loading: null,\n    loop: boolean,\n    low: number,\n    manifest: null,\n    max: null,\n    maxLength: number,\n    media: null,\n    method: null,\n    min: null,\n    minLength: number,\n    multiple: boolean,\n    muted: boolean,\n    name: null,\n    nonce: null,\n    noModule: boolean,\n    noValidate: boolean,\n    onAbort: null,\n    onAfterPrint: null,\n    onAuxClick: null,\n    onBeforeMatch: null,\n    onBeforePrint: null,\n    onBeforeToggle: null,\n    onBeforeUnload: null,\n    onBlur: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onContextLost: null,\n    onContextMenu: null,\n    onContextRestored: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFormData: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLanguageChange: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadEnd: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMessageError: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRejectionHandled: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onScrollEnd: null,\n    onSecurityPolicyViolation: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onSlotChange: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnhandledRejection: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onWheel: null,\n    open: boolean,\n    optimum: number,\n    pattern: null,\n    ping: spaceSeparated,\n    placeholder: null,\n    playsInline: boolean,\n    popover: null,\n    popoverTarget: null,\n    popoverTargetAction: null,\n    poster: null,\n    preload: null,\n    readOnly: boolean,\n    referrerPolicy: null,\n    rel: spaceSeparated,\n    required: boolean,\n    reversed: boolean,\n    rows: number,\n    rowSpan: number,\n    sandbox: spaceSeparated,\n    scope: null,\n    scoped: boolean,\n    seamless: boolean,\n    selected: boolean,\n    shadowRootClonable: boolean,\n    shadowRootDelegatesFocus: boolean,\n    shadowRootMode: null,\n    shape: null,\n    size: number,\n    sizes: null,\n    slot: null,\n    span: number,\n    spellCheck: booleanish,\n    src: null,\n    srcDoc: null,\n    srcLang: null,\n    srcSet: null,\n    start: number,\n    step: null,\n    style: null,\n    tabIndex: number,\n    target: null,\n    title: null,\n    translate: null,\n    type: null,\n    typeMustMatch: boolean,\n    useMap: null,\n    value: booleanish,\n    width: number,\n    wrap: null,\n    writingSuggestions: null,\n\n    // Legacy.\n    // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n    align: null, // Several. Use CSS `text-align` instead,\n    aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n    archive: spaceSeparated, // `<object>`. List of URIs to archives\n    axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n    background: null, // `<body>`. Use CSS `background-image` instead\n    bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n    border: number, // `<table>`. Use CSS `border-width` instead,\n    borderColor: null, // `<table>`. Use CSS `border-color` instead,\n    bottomMargin: number, // `<body>`\n    cellPadding: null, // `<table>`\n    cellSpacing: null, // `<table>`\n    char: null, // Several table elements. When `align=char`, sets the character to align on\n    charOff: null, // Several table elements. When `char`, offsets the alignment\n    classId: null, // `<object>`\n    clear: null, // `<br>`. Use CSS `clear` instead\n    code: null, // `<object>`\n    codeBase: null, // `<object>`\n    codeType: null, // `<object>`\n    color: null, // `<font>` and `<hr>`. Use CSS instead\n    compact: boolean, // Lists. Use CSS to reduce space between items instead\n    declare: boolean, // `<object>`\n    event: null, // `<script>`\n    face: null, // `<font>`. Use CSS instead\n    frame: null, // `<table>`\n    frameBorder: null, // `<iframe>`. Use CSS `border` instead\n    hSpace: number, // `<img>` and `<object>`\n    leftMargin: number, // `<body>`\n    link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n    longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n    lowSrc: null, // `<img>`. Use a `<picture>`\n    marginHeight: number, // `<body>`\n    marginWidth: number, // `<body>`\n    noResize: boolean, // `<frame>`\n    noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n    noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n    noWrap: boolean, // `<td>` and `<th>`\n    object: null, // `<applet>`\n    profile: null, // `<head>`\n    prompt: null, // `<isindex>`\n    rev: null, // `<link>`\n    rightMargin: number, // `<body>`\n    rules: null, // `<table>`\n    scheme: null, // `<meta>`\n    scrolling: booleanish, // `<frame>`. Use overflow in the child context\n    standby: null, // `<object>`\n    summary: null, // `<table>`\n    text: null, // `<body>`. Use CSS `color` instead\n    topMargin: number, // `<body>`\n    valueType: null, // `<param>`\n    version: null, // `<html>`. Use a doctype.\n    vAlign: null, // Several. Use CSS `vertical-align` instead\n    vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n    vSpace: number, // `<img>` and `<object>`\n\n    // Non-standard Properties.\n    allowTransparency: null,\n    autoCorrect: null,\n    autoSave: null,\n    disablePictureInPicture: boolean,\n    disableRemotePlayback: boolean,\n    prefix: null,\n    property: null,\n    results: number,\n    security: null,\n    unselectable: null\n  },\n  space: 'html',\n  transform: caseInsensitiveTransform\n})\n","import {caseSensitiveTransform} from './util/case-sensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n  boolean,\n  commaOrSpaceSeparated,\n  commaSeparated,\n  number,\n  spaceSeparated\n} from './util/types.js'\n\nexport const svg = create({\n  attributes: {\n    accentHeight: 'accent-height',\n    alignmentBaseline: 'alignment-baseline',\n    arabicForm: 'arabic-form',\n    baselineShift: 'baseline-shift',\n    capHeight: 'cap-height',\n    className: 'class',\n    clipPath: 'clip-path',\n    clipRule: 'clip-rule',\n    colorInterpolation: 'color-interpolation',\n    colorInterpolationFilters: 'color-interpolation-filters',\n    colorProfile: 'color-profile',\n    colorRendering: 'color-rendering',\n    crossOrigin: 'crossorigin',\n    dataType: 'datatype',\n    dominantBaseline: 'dominant-baseline',\n    enableBackground: 'enable-background',\n    fillOpacity: 'fill-opacity',\n    fillRule: 'fill-rule',\n    floodColor: 'flood-color',\n    floodOpacity: 'flood-opacity',\n    fontFamily: 'font-family',\n    fontSize: 'font-size',\n    fontSizeAdjust: 'font-size-adjust',\n    fontStretch: 'font-stretch',\n    fontStyle: 'font-style',\n    fontVariant: 'font-variant',\n    fontWeight: 'font-weight',\n    glyphName: 'glyph-name',\n    glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n    glyphOrientationVertical: 'glyph-orientation-vertical',\n    hrefLang: 'hreflang',\n    horizAdvX: 'horiz-adv-x',\n    horizOriginX: 'horiz-origin-x',\n    horizOriginY: 'horiz-origin-y',\n    imageRendering: 'image-rendering',\n    letterSpacing: 'letter-spacing',\n    lightingColor: 'lighting-color',\n    markerEnd: 'marker-end',\n    markerMid: 'marker-mid',\n    markerStart: 'marker-start',\n    navDown: 'nav-down',\n    navDownLeft: 'nav-down-left',\n    navDownRight: 'nav-down-right',\n    navLeft: 'nav-left',\n    navNext: 'nav-next',\n    navPrev: 'nav-prev',\n    navRight: 'nav-right',\n    navUp: 'nav-up',\n    navUpLeft: 'nav-up-left',\n    navUpRight: 'nav-up-right',\n    onAbort: 'onabort',\n    onActivate: 'onactivate',\n    onAfterPrint: 'onafterprint',\n    onBeforePrint: 'onbeforeprint',\n    onBegin: 'onbegin',\n    onCancel: 'oncancel',\n    onCanPlay: 'oncanplay',\n    onCanPlayThrough: 'oncanplaythrough',\n    onChange: 'onchange',\n    onClick: 'onclick',\n    onClose: 'onclose',\n    onCopy: 'oncopy',\n    onCueChange: 'oncuechange',\n    onCut: 'oncut',\n    onDblClick: 'ondblclick',\n    onDrag: 'ondrag',\n    onDragEnd: 'ondragend',\n    onDragEnter: 'ondragenter',\n    onDragExit: 'ondragexit',\n    onDragLeave: 'ondragleave',\n    onDragOver: 'ondragover',\n    onDragStart: 'ondragstart',\n    onDrop: 'ondrop',\n    onDurationChange: 'ondurationchange',\n    onEmptied: 'onemptied',\n    onEnd: 'onend',\n    onEnded: 'onended',\n    onError: 'onerror',\n    onFocus: 'onfocus',\n    onFocusIn: 'onfocusin',\n    onFocusOut: 'onfocusout',\n    onHashChange: 'onhashchange',\n    onInput: 'oninput',\n    onInvalid: 'oninvalid',\n    onKeyDown: 'onkeydown',\n    onKeyPress: 'onkeypress',\n    onKeyUp: 'onkeyup',\n    onLoad: 'onload',\n    onLoadedData: 'onloadeddata',\n    onLoadedMetadata: 'onloadedmetadata',\n    onLoadStart: 'onloadstart',\n    onMessage: 'onmessage',\n    onMouseDown: 'onmousedown',\n    onMouseEnter: 'onmouseenter',\n    onMouseLeave: 'onmouseleave',\n    onMouseMove: 'onmousemove',\n    onMouseOut: 'onmouseout',\n    onMouseOver: 'onmouseover',\n    onMouseUp: 'onmouseup',\n    onMouseWheel: 'onmousewheel',\n    onOffline: 'onoffline',\n    onOnline: 'ononline',\n    onPageHide: 'onpagehide',\n    onPageShow: 'onpageshow',\n    onPaste: 'onpaste',\n    onPause: 'onpause',\n    onPlay: 'onplay',\n    onPlaying: 'onplaying',\n    onPopState: 'onpopstate',\n    onProgress: 'onprogress',\n    onRateChange: 'onratechange',\n    onRepeat: 'onrepeat',\n    onReset: 'onreset',\n    onResize: 'onresize',\n    onScroll: 'onscroll',\n    onSeeked: 'onseeked',\n    onSeeking: 'onseeking',\n    onSelect: 'onselect',\n    onShow: 'onshow',\n    onStalled: 'onstalled',\n    onStorage: 'onstorage',\n    onSubmit: 'onsubmit',\n    onSuspend: 'onsuspend',\n    onTimeUpdate: 'ontimeupdate',\n    onToggle: 'ontoggle',\n    onUnload: 'onunload',\n    onVolumeChange: 'onvolumechange',\n    onWaiting: 'onwaiting',\n    onZoom: 'onzoom',\n    overlinePosition: 'overline-position',\n    overlineThickness: 'overline-thickness',\n    paintOrder: 'paint-order',\n    panose1: 'panose-1',\n    pointerEvents: 'pointer-events',\n    referrerPolicy: 'referrerpolicy',\n    renderingIntent: 'rendering-intent',\n    shapeRendering: 'shape-rendering',\n    stopColor: 'stop-color',\n    stopOpacity: 'stop-opacity',\n    strikethroughPosition: 'strikethrough-position',\n    strikethroughThickness: 'strikethrough-thickness',\n    strokeDashArray: 'stroke-dasharray',\n    strokeDashOffset: 'stroke-dashoffset',\n    strokeLineCap: 'stroke-linecap',\n    strokeLineJoin: 'stroke-linejoin',\n    strokeMiterLimit: 'stroke-miterlimit',\n    strokeOpacity: 'stroke-opacity',\n    strokeWidth: 'stroke-width',\n    tabIndex: 'tabindex',\n    textAnchor: 'text-anchor',\n    textDecoration: 'text-decoration',\n    textRendering: 'text-rendering',\n    transformOrigin: 'transform-origin',\n    typeOf: 'typeof',\n    underlinePosition: 'underline-position',\n    underlineThickness: 'underline-thickness',\n    unicodeBidi: 'unicode-bidi',\n    unicodeRange: 'unicode-range',\n    unitsPerEm: 'units-per-em',\n    vAlphabetic: 'v-alphabetic',\n    vHanging: 'v-hanging',\n    vIdeographic: 'v-ideographic',\n    vMathematical: 'v-mathematical',\n    vectorEffect: 'vector-effect',\n    vertAdvY: 'vert-adv-y',\n    vertOriginX: 'vert-origin-x',\n    vertOriginY: 'vert-origin-y',\n    wordSpacing: 'word-spacing',\n    writingMode: 'writing-mode',\n    xHeight: 'x-height',\n    // These were camelcased in Tiny. Now lowercased in SVG 2\n    playbackOrder: 'playbackorder',\n    timelineBegin: 'timelinebegin'\n  },\n  properties: {\n    about: commaOrSpaceSeparated,\n    accentHeight: number,\n    accumulate: null,\n    additive: null,\n    alignmentBaseline: null,\n    alphabetic: number,\n    amplitude: number,\n    arabicForm: null,\n    ascent: number,\n    attributeName: null,\n    attributeType: null,\n    azimuth: number,\n    bandwidth: null,\n    baselineShift: null,\n    baseFrequency: null,\n    baseProfile: null,\n    bbox: null,\n    begin: null,\n    bias: number,\n    by: null,\n    calcMode: null,\n    capHeight: number,\n    className: spaceSeparated,\n    clip: null,\n    clipPath: null,\n    clipPathUnits: null,\n    clipRule: null,\n    color: null,\n    colorInterpolation: null,\n    colorInterpolationFilters: null,\n    colorProfile: null,\n    colorRendering: null,\n    content: null,\n    contentScriptType: null,\n    contentStyleType: null,\n    crossOrigin: null,\n    cursor: null,\n    cx: null,\n    cy: null,\n    d: null,\n    dataType: null,\n    defaultAction: null,\n    descent: number,\n    diffuseConstant: number,\n    direction: null,\n    display: null,\n    dur: null,\n    divisor: number,\n    dominantBaseline: null,\n    download: boolean,\n    dx: null,\n    dy: null,\n    edgeMode: null,\n    editable: null,\n    elevation: number,\n    enableBackground: null,\n    end: null,\n    event: null,\n    exponent: number,\n    externalResourcesRequired: null,\n    fill: null,\n    fillOpacity: number,\n    fillRule: null,\n    filter: null,\n    filterRes: null,\n    filterUnits: null,\n    floodColor: null,\n    floodOpacity: null,\n    focusable: null,\n    focusHighlight: null,\n    fontFamily: null,\n    fontSize: null,\n    fontSizeAdjust: null,\n    fontStretch: null,\n    fontStyle: null,\n    fontVariant: null,\n    fontWeight: null,\n    format: null,\n    fr: null,\n    from: null,\n    fx: null,\n    fy: null,\n    g1: commaSeparated,\n    g2: commaSeparated,\n    glyphName: commaSeparated,\n    glyphOrientationHorizontal: null,\n    glyphOrientationVertical: null,\n    glyphRef: null,\n    gradientTransform: null,\n    gradientUnits: null,\n    handler: null,\n    hanging: number,\n    hatchContentUnits: null,\n    hatchUnits: null,\n    height: null,\n    href: null,\n    hrefLang: null,\n    horizAdvX: number,\n    horizOriginX: number,\n    horizOriginY: number,\n    id: null,\n    ideographic: number,\n    imageRendering: null,\n    initialVisibility: null,\n    in: null,\n    in2: null,\n    intercept: number,\n    k: number,\n    k1: number,\n    k2: number,\n    k3: number,\n    k4: number,\n    kernelMatrix: commaOrSpaceSeparated,\n    kernelUnitLength: null,\n    keyPoints: null, // SEMI_COLON_SEPARATED\n    keySplines: null, // SEMI_COLON_SEPARATED\n    keyTimes: null, // SEMI_COLON_SEPARATED\n    kerning: null,\n    lang: null,\n    lengthAdjust: null,\n    letterSpacing: null,\n    lightingColor: null,\n    limitingConeAngle: number,\n    local: null,\n    markerEnd: null,\n    markerMid: null,\n    markerStart: null,\n    markerHeight: null,\n    markerUnits: null,\n    markerWidth: null,\n    mask: null,\n    maskContentUnits: null,\n    maskUnits: null,\n    mathematical: null,\n    max: null,\n    media: null,\n    mediaCharacterEncoding: null,\n    mediaContentEncodings: null,\n    mediaSize: number,\n    mediaTime: null,\n    method: null,\n    min: null,\n    mode: null,\n    name: null,\n    navDown: null,\n    navDownLeft: null,\n    navDownRight: null,\n    navLeft: null,\n    navNext: null,\n    navPrev: null,\n    navRight: null,\n    navUp: null,\n    navUpLeft: null,\n    navUpRight: null,\n    numOctaves: null,\n    observer: null,\n    offset: null,\n    onAbort: null,\n    onActivate: null,\n    onAfterPrint: null,\n    onBeforePrint: null,\n    onBegin: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnd: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFocusIn: null,\n    onFocusOut: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onMouseWheel: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRepeat: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onShow: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onZoom: null,\n    opacity: null,\n    operator: null,\n    order: null,\n    orient: null,\n    orientation: null,\n    origin: null,\n    overflow: null,\n    overlay: null,\n    overlinePosition: number,\n    overlineThickness: number,\n    paintOrder: null,\n    panose1: null,\n    path: null,\n    pathLength: number,\n    patternContentUnits: null,\n    patternTransform: null,\n    patternUnits: null,\n    phase: null,\n    ping: spaceSeparated,\n    pitch: null,\n    playbackOrder: null,\n    pointerEvents: null,\n    points: null,\n    pointsAtX: number,\n    pointsAtY: number,\n    pointsAtZ: number,\n    preserveAlpha: null,\n    preserveAspectRatio: null,\n    primitiveUnits: null,\n    propagate: null,\n    property: commaOrSpaceSeparated,\n    r: null,\n    radius: null,\n    referrerPolicy: null,\n    refX: null,\n    refY: null,\n    rel: commaOrSpaceSeparated,\n    rev: commaOrSpaceSeparated,\n    renderingIntent: null,\n    repeatCount: null,\n    repeatDur: null,\n    requiredExtensions: commaOrSpaceSeparated,\n    requiredFeatures: commaOrSpaceSeparated,\n    requiredFonts: commaOrSpaceSeparated,\n    requiredFormats: commaOrSpaceSeparated,\n    resource: null,\n    restart: null,\n    result: null,\n    rotate: null,\n    rx: null,\n    ry: null,\n    scale: null,\n    seed: null,\n    shapeRendering: null,\n    side: null,\n    slope: null,\n    snapshotTime: null,\n    specularConstant: number,\n    specularExponent: number,\n    spreadMethod: null,\n    spacing: null,\n    startOffset: null,\n    stdDeviation: null,\n    stemh: null,\n    stemv: null,\n    stitchTiles: null,\n    stopColor: null,\n    stopOpacity: null,\n    strikethroughPosition: number,\n    strikethroughThickness: number,\n    string: null,\n    stroke: null,\n    strokeDashArray: commaOrSpaceSeparated,\n    strokeDashOffset: null,\n    strokeLineCap: null,\n    strokeLineJoin: null,\n    strokeMiterLimit: number,\n    strokeOpacity: number,\n    strokeWidth: null,\n    style: null,\n    surfaceScale: number,\n    syncBehavior: null,\n    syncBehaviorDefault: null,\n    syncMaster: null,\n    syncTolerance: null,\n    syncToleranceDefault: null,\n    systemLanguage: commaOrSpaceSeparated,\n    tabIndex: number,\n    tableValues: null,\n    target: null,\n    targetX: number,\n    targetY: number,\n    textAnchor: null,\n    textDecoration: null,\n    textRendering: null,\n    textLength: null,\n    timelineBegin: null,\n    title: null,\n    transformBehavior: null,\n    type: null,\n    typeOf: commaOrSpaceSeparated,\n    to: null,\n    transform: null,\n    transformOrigin: null,\n    u1: null,\n    u2: null,\n    underlinePosition: number,\n    underlineThickness: number,\n    unicode: null,\n    unicodeBidi: null,\n    unicodeRange: null,\n    unitsPerEm: number,\n    values: null,\n    vAlphabetic: number,\n    vMathematical: number,\n    vectorEffect: null,\n    vHanging: number,\n    vIdeographic: number,\n    version: null,\n    vertAdvY: number,\n    vertOriginX: number,\n    vertOriginY: number,\n    viewBox: null,\n    viewTarget: null,\n    visibility: null,\n    width: null,\n    widths: null,\n    wordSpacing: null,\n    writingMode: null,\n    x: null,\n    x1: null,\n    x2: null,\n    xChannelSelector: null,\n    xHeight: number,\n    y: null,\n    y1: null,\n    y2: null,\n    yChannelSelector: null,\n    z: null,\n    zoomAndPan: null\n  },\n  space: 'svg',\n  transform: caseSensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xlink = create({\n  properties: {\n    xLinkActuate: null,\n    xLinkArcRole: null,\n    xLinkHref: null,\n    xLinkRole: null,\n    xLinkShow: null,\n    xLinkTitle: null,\n    xLinkType: null\n  },\n  space: 'xlink',\n  transform(_, property) {\n    return 'xlink:' + property.slice(5).toLowerCase()\n  }\n})\n","import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n  attributes: {xmlnsxlink: 'xmlns:xlink'},\n  properties: {xmlnsXLink: null, xmlns: null},\n  space: 'xmlns',\n  transform: caseInsensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xml = create({\n  properties: {xmlBase: null, xmlLang: null, xmlSpace: null},\n  space: 'xml',\n  transform(_, property) {\n    return 'xml:' + property.slice(3).toLowerCase()\n  }\n})\n","/**\n * Special cases for React (`Record<string, string>`).\n *\n * `hast` is close to `React` but differs in a couple of cases.\n * To get a React property from a hast property,\n * check if it is in `hastToReact`.\n * If it is, use the corresponding value;\n * otherwise, use the hast property.\n *\n * @type {Record<string, string>}\n */\nexport const hastToReact = {\n  classId: 'classID',\n  dataType: 'datatype',\n  itemId: 'itemID',\n  strokeDashArray: 'strokeDasharray',\n  strokeDashOffset: 'strokeDashoffset',\n  strokeLineCap: 'strokeLinecap',\n  strokeLineJoin: 'strokeLinejoin',\n  strokeMiterLimit: 'strokeMiterlimit',\n  typeOf: 'typeof',\n  xLinkActuate: 'xlinkActuate',\n  xLinkArcRole: 'xlinkArcrole',\n  xLinkHref: 'xlinkHref',\n  xLinkRole: 'xlinkRole',\n  xLinkShow: 'xlinkShow',\n  xLinkTitle: 'xlinkTitle',\n  xLinkType: 'xlinkType',\n  xmlnsXLink: 'xmlnsXlink'\n}\n","/**\n * @import {Schema} from 'property-information'\n */\n\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\nimport {normalize} from './normalize.js'\n\nconst cap = /[A-Z]/g\nconst dash = /-[a-z]/g\nconst valid = /^data[-\\w.:]+$/i\n\n/**\n * Look up info on a property.\n *\n * In most cases the given `schema` contains info on the property.\n * All standard,\n * most legacy,\n * and some non-standard properties are supported.\n * For these cases,\n * the returned `Info` has hints about the value of the property.\n *\n * `name` can also be a valid data attribute or property,\n * in which case an `Info` object with the correctly cased `attribute` and\n * `property` is returned.\n *\n * `name` can be an unknown attribute,\n * in which case an `Info` object with `attribute` and `property` set to the\n * given name is returned.\n * It is not recommended to provide unsupported legacy or recently specced\n * properties.\n *\n *\n * @param {Schema} schema\n *   Schema;\n *   either the `html` or `svg` export.\n * @param {string} value\n *   An attribute-like or property-like name;\n *   it will be passed through `normalize` to hopefully find the correct info.\n * @returns {Info}\n *   Info.\n */\nexport function find(schema, value) {\n  const normal = normalize(value)\n  let property = value\n  let Type = Info\n\n  if (normal in schema.normal) {\n    return schema.property[schema.normal[normal]]\n  }\n\n  if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n    // Attribute or property.\n    if (value.charAt(4) === '-') {\n      // Turn it into a property.\n      const rest = value.slice(5).replace(dash, camelcase)\n      property = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n    } else {\n      // Turn it into an attribute.\n      const rest = value.slice(4)\n\n      if (!dash.test(rest)) {\n        let dashes = rest.replace(cap, kebab)\n\n        if (dashes.charAt(0) !== '-') {\n          dashes = '-' + dashes\n        }\n\n        value = 'data' + dashes\n      }\n    }\n\n    Type = DefinedInfo\n  }\n\n  return new Type(property, value)\n}\n\n/**\n * @param {string} $0\n *   Value.\n * @returns {string}\n *   Kebab.\n */\nfunction kebab($0) {\n  return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n *   Value.\n * @returns {string}\n *   Camel.\n */\nfunction camelcase($0) {\n  return $0.charAt(1).toUpperCase()\n}\n","// Note: types exposed from `index.d.ts`.\nimport {merge} from './lib/util/merge.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\nimport {xlink} from './lib/xlink.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {xml} from './lib/xml.js'\n\nexport {hastToReact} from './lib/hast-to-react.js'\n\nexport const html = merge([aria, htmlBase, xlink, xmlns, xml], 'html')\n\nexport {find} from './lib/find.js'\nexport {normalize} from './lib/normalize.js'\n\nexport const svg = merge([aria, svgBase, xlink, xmlns, xml], 'svg')\n","/**\n * Parse space-separated tokens to an array of strings.\n *\n * @param {string} value\n *   Space-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  const input = String(value || '').trim()\n  return input ? input.split(/[ \\t\\n\\r\\f]+/g) : []\n}\n\n/**\n * Serialize an array of strings as space separated-tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @returns {string}\n *   Space-separated tokens.\n */\nexport function stringify(values) {\n  return values.join(' ').trim()\n}\n","'use strict';\n\n// http://www.w3.org/TR/CSS21/grammar.html\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar COMMENT_REGEX = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nvar NEWLINE_REGEX = /\\n/g;\nvar WHITESPACE_REGEX = /^\\s*/;\n\n// declaration\nvar PROPERTY_REGEX = /^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/;\nvar COLON_REGEX = /^:\\s*/;\nvar VALUE_REGEX = /^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/;\nvar SEMICOLON_REGEX = /^[;\\s]*/;\n\n// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\nvar TRIM_REGEX = /^\\s+|\\s+$/g;\n\n// strings\nvar NEWLINE = '\\n';\nvar FORWARD_SLASH = '/';\nvar ASTERISK = '*';\nvar EMPTY_STRING = '';\n\n// types\nvar TYPE_COMMENT = 'comment';\nvar TYPE_DECLARATION = 'declaration';\n\n/**\n * @param {String} style\n * @param {Object} [options]\n * @return {Object[]}\n * @throws {TypeError}\n * @throws {Error}\n */\nfunction index (style, options) {\n  if (typeof style !== 'string') {\n    throw new TypeError('First argument must be a string');\n  }\n\n  if (!style) return [];\n\n  options = options || {};\n\n  /**\n   * Positional.\n   */\n  var lineno = 1;\n  var column = 1;\n\n  /**\n   * Update lineno and column based on `str`.\n   *\n   * @param {String} str\n   */\n  function updatePosition(str) {\n    var lines = str.match(NEWLINE_REGEX);\n    if (lines) lineno += lines.length;\n    var i = str.lastIndexOf(NEWLINE);\n    column = ~i ? str.length - i : column + str.length;\n  }\n\n  /**\n   * Mark position and patch `node.position`.\n   *\n   * @return {Function}\n   */\n  function position() {\n    var start = { line: lineno, column: column };\n    return function (node) {\n      node.position = new Position(start);\n      whitespace();\n      return node;\n    };\n  }\n\n  /**\n   * Store position information for a node.\n   *\n   * @constructor\n   * @property {Object} start\n   * @property {Object} end\n   * @property {undefined|String} source\n   */\n  function Position(start) {\n    this.start = start;\n    this.end = { line: lineno, column: column };\n    this.source = options.source;\n  }\n\n  /**\n   * Non-enumerable source string.\n   */\n  Position.prototype.content = style;\n\n  /**\n   * Error `msg`.\n   *\n   * @param {String} msg\n   * @throws {Error}\n   */\n  function error(msg) {\n    var err = new Error(\n      options.source + ':' + lineno + ':' + column + ': ' + msg\n    );\n    err.reason = msg;\n    err.filename = options.source;\n    err.line = lineno;\n    err.column = column;\n    err.source = style;\n\n    if (options.silent) ; else {\n      throw err;\n    }\n  }\n\n  /**\n   * Match `re` and return captures.\n   *\n   * @param {RegExp} re\n   * @return {undefined|Array}\n   */\n  function match(re) {\n    var m = re.exec(style);\n    if (!m) return;\n    var str = m[0];\n    updatePosition(str);\n    style = style.slice(str.length);\n    return m;\n  }\n\n  /**\n   * Parse whitespace.\n   */\n  function whitespace() {\n    match(WHITESPACE_REGEX);\n  }\n\n  /**\n   * Parse comments.\n   *\n   * @param {Object[]} [rules]\n   * @return {Object[]}\n   */\n  function comments(rules) {\n    var c;\n    rules = rules || [];\n    while ((c = comment())) {\n      if (c !== false) {\n        rules.push(c);\n      }\n    }\n    return rules;\n  }\n\n  /**\n   * Parse comment.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function comment() {\n    var pos = position();\n    if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return;\n\n    var i = 2;\n    while (\n      EMPTY_STRING != style.charAt(i) &&\n      (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))\n    ) {\n      ++i;\n    }\n    i += 2;\n\n    if (EMPTY_STRING === style.charAt(i - 1)) {\n      return error('End of comment missing');\n    }\n\n    var str = style.slice(2, i - 2);\n    column += 2;\n    updatePosition(str);\n    style = style.slice(i);\n    column += 2;\n\n    return pos({\n      type: TYPE_COMMENT,\n      comment: str\n    });\n  }\n\n  /**\n   * Parse declaration.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function declaration() {\n    var pos = position();\n\n    // prop\n    var prop = match(PROPERTY_REGEX);\n    if (!prop) return;\n    comment();\n\n    // :\n    if (!match(COLON_REGEX)) return error(\"property missing ':'\");\n\n    // val\n    var val = match(VALUE_REGEX);\n\n    var ret = pos({\n      type: TYPE_DECLARATION,\n      property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)),\n      value: val\n        ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING))\n        : EMPTY_STRING\n    });\n\n    // ;\n    match(SEMICOLON_REGEX);\n\n    return ret;\n  }\n\n  /**\n   * Parse declarations.\n   *\n   * @return {Object[]}\n   */\n  function declarations() {\n    var decls = [];\n\n    comments(decls);\n\n    // declarations\n    var decl;\n    while ((decl = declaration())) {\n      if (decl !== false) {\n        decls.push(decl);\n        comments(decls);\n      }\n    }\n\n    return decls;\n  }\n\n  whitespace();\n  return declarations();\n}\n\n/**\n * Trim `str`.\n *\n * @param {String} str\n * @return {String}\n */\nfunction trim(str) {\n  return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING;\n}\n\nmodule.exports = index;\n//# sourceMappingURL=index.js.map\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = StyleToObject;\nconst inline_style_parser_1 = __importDefault(require(\"inline-style-parser\"));\n/**\n * Parses inline style to object.\n *\n * @param style - Inline style.\n * @param iterator - Iterator.\n * @returns - Style object or null.\n *\n * @example Parsing inline style to object:\n *\n * ```js\n * import parse from 'style-to-object';\n * parse('line-height: 42;'); // { 'line-height': '42' }\n * ```\n */\nfunction StyleToObject(style, iterator) {\n    let styleObject = null;\n    if (!style || typeof style !== 'string') {\n        return styleObject;\n    }\n    const declarations = (0, inline_style_parser_1.default)(style);\n    const hasIterator = typeof iterator === 'function';\n    declarations.forEach((declaration) => {\n        if (declaration.type !== 'declaration') {\n            return;\n        }\n        const { property, value } = declaration;\n        if (hasIterator) {\n            iterator(property, value, declaration);\n        }\n        else if (value) {\n            styleObject = styleObject || {};\n            styleObject[property] = value;\n        }\n    });\n    return styleObject;\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.camelCase = void 0;\nvar CUSTOM_PROPERTY_REGEX = /^--[a-zA-Z0-9_-]+$/;\nvar HYPHEN_REGEX = /-([a-z])/g;\nvar NO_HYPHEN_REGEX = /^[^-]+$/;\nvar VENDOR_PREFIX_REGEX = /^-(webkit|moz|ms|o|khtml)-/;\nvar MS_VENDOR_PREFIX_REGEX = /^-(ms)-/;\n/**\n * Checks whether to skip camelCase.\n */\nvar skipCamelCase = function (property) {\n    return !property ||\n        NO_HYPHEN_REGEX.test(property) ||\n        CUSTOM_PROPERTY_REGEX.test(property);\n};\n/**\n * Replacer that capitalizes first character.\n */\nvar capitalize = function (match, character) {\n    return character.toUpperCase();\n};\n/**\n * Replacer that removes beginning hyphen of vendor prefix property.\n */\nvar trimHyphen = function (match, prefix) { return \"\".concat(prefix, \"-\"); };\n/**\n * CamelCases a CSS property.\n */\nvar camelCase = function (property, options) {\n    if (options === void 0) { options = {}; }\n    if (skipCamelCase(property)) {\n        return property;\n    }\n    property = property.toLowerCase();\n    if (options.reactCompat) {\n        // `-ms` vendor prefix should not be capitalized\n        property = property.replace(MS_VENDOR_PREFIX_REGEX, trimHyphen);\n    }\n    else {\n        // for non-React, remove first hyphen so vendor prefix is not capitalized\n        property = property.replace(VENDOR_PREFIX_REGEX, trimHyphen);\n    }\n    return property.replace(HYPHEN_REGEX, capitalize);\n};\nexports.camelCase = camelCase;\n//# sourceMappingURL=utilities.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nvar style_to_object_1 = __importDefault(require(\"style-to-object\"));\nvar utilities_1 = require(\"./utilities\");\n/**\n * Parses CSS inline style to JavaScript object (camelCased).\n */\nfunction StyleToJS(style, options) {\n    var output = {};\n    if (!style || typeof style !== 'string') {\n        return output;\n    }\n    (0, style_to_object_1.default)(style, function (property, value) {\n        // skip CSS comment\n        if (property && value) {\n            output[(0, utilities_1.camelCase)(property, options)] = value;\n        }\n    });\n    return output;\n}\nStyleToJS.default = StyleToJS;\nmodule.exports = StyleToJS;\n//# sourceMappingURL=index.js.map","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Get the ending point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointEnd = point('end')\n\n/**\n * Get the starting point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointStart = point('start')\n\n/**\n * Get the positional info of `node`.\n *\n * @param {'end' | 'start'} type\n *   Side.\n * @returns\n *   Getter.\n */\nfunction point(type) {\n  return point\n\n  /**\n   * Get the point info of `node` at a bound side.\n   *\n   * @param {Node | NodeLike | null | undefined} [node]\n   * @returns {Point | undefined}\n   */\n  function point(node) {\n    const point = (node && node.position && node.position[type]) || {}\n\n    if (\n      typeof point.line === 'number' &&\n      point.line > 0 &&\n      typeof point.column === 'number' &&\n      point.column > 0\n    ) {\n      return {\n        line: point.line,\n        column: point.column,\n        offset:\n          typeof point.offset === 'number' && point.offset > -1\n            ? point.offset\n            : undefined\n      }\n    }\n  }\n}\n\n/**\n * Get the positional info of `node`.\n *\n * @param {Node | NodeLike | null | undefined} [node]\n *   Node.\n * @returns {Position | undefined}\n *   Position.\n */\nexport function position(node) {\n  const start = pointStart(node)\n  const end = pointEnd(node)\n\n  if (start && end) {\n    return {start, end}\n  }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n *   Node, position, or point.\n * @returns {string}\n *   Pretty printed positional info of a node (`string`).\n *\n *   In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n *   or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n *   column, `s` for `start`, and `e` for end.\n *   An empty string (`''`) is returned if the given value is neither `node`,\n *   `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n  // Nothing.\n  if (!value || typeof value !== 'object') {\n    return ''\n  }\n\n  // Node.\n  if ('position' in value || 'type' in value) {\n    return position(value.position)\n  }\n\n  // Position.\n  if ('start' in value || 'end' in value) {\n    return position(value)\n  }\n\n  // Point.\n  if ('line' in value || 'column' in value) {\n    return point(value)\n  }\n\n  // ?\n  return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n  return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n  return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n  return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef Options\n *   Configuration.\n * @property {Array<Node> | null | undefined} [ancestors]\n *   Stack of (inclusive) ancestor nodes surrounding the message (optional).\n * @property {Error | null | undefined} [cause]\n *   Original error cause of the message (optional).\n * @property {Point | Position | null | undefined} [place]\n *   Place of message (optional).\n * @property {string | null | undefined} [ruleId]\n *   Category of message (optional, example: `'my-rule'`).\n * @property {string | null | undefined} [source]\n *   Namespace of who sent the message (optional, example: `'my-package'`).\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\n/**\n * Message.\n */\nexport class VFileMessage extends Error {\n  /**\n   * Create a message for `reason`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Options | null | undefined} [options]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | Options | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns\n   *   Instance of `VFileMessage`.\n   */\n  // eslint-disable-next-line complexity\n  constructor(causeOrReason, optionsOrParentOrPlace, origin) {\n    super()\n\n    if (typeof optionsOrParentOrPlace === 'string') {\n      origin = optionsOrParentOrPlace\n      optionsOrParentOrPlace = undefined\n    }\n\n    /** @type {string} */\n    let reason = ''\n    /** @type {Options} */\n    let options = {}\n    let legacyCause = false\n\n    if (optionsOrParentOrPlace) {\n      // Point.\n      if (\n        'line' in optionsOrParentOrPlace &&\n        'column' in optionsOrParentOrPlace\n      ) {\n        options = {place: optionsOrParentOrPlace}\n      }\n      // Position.\n      else if (\n        'start' in optionsOrParentOrPlace &&\n        'end' in optionsOrParentOrPlace\n      ) {\n        options = {place: optionsOrParentOrPlace}\n      }\n      // Node.\n      else if ('type' in optionsOrParentOrPlace) {\n        options = {\n          ancestors: [optionsOrParentOrPlace],\n          place: optionsOrParentOrPlace.position\n        }\n      }\n      // Options.\n      else {\n        options = {...optionsOrParentOrPlace}\n      }\n    }\n\n    if (typeof causeOrReason === 'string') {\n      reason = causeOrReason\n    }\n    // Error.\n    else if (!options.cause && causeOrReason) {\n      legacyCause = true\n      reason = causeOrReason.message\n      options.cause = causeOrReason\n    }\n\n    if (!options.ruleId && !options.source && typeof origin === 'string') {\n      const index = origin.indexOf(':')\n\n      if (index === -1) {\n        options.ruleId = origin\n      } else {\n        options.source = origin.slice(0, index)\n        options.ruleId = origin.slice(index + 1)\n      }\n    }\n\n    if (!options.place && options.ancestors && options.ancestors) {\n      const parent = options.ancestors[options.ancestors.length - 1]\n\n      if (parent) {\n        options.place = parent.position\n      }\n    }\n\n    const start =\n      options.place && 'start' in options.place\n        ? options.place.start\n        : options.place\n\n    /**\n     * Stack of ancestor nodes surrounding the message.\n     *\n     * @type {Array<Node> | undefined}\n     */\n    this.ancestors = options.ancestors || undefined\n\n    /**\n     * Original error cause of the message.\n     *\n     * @type {Error | undefined}\n     */\n    this.cause = options.cause || undefined\n\n    /**\n     * Starting column of message.\n     *\n     * @type {number | undefined}\n     */\n    this.column = start ? start.column : undefined\n\n    /**\n     * State of problem.\n     *\n     * * `true` — error, file not usable\n     * * `false` — warning, change may be needed\n     * * `undefined` — change likely not needed\n     *\n     * @type {boolean | null | undefined}\n     */\n    this.fatal = undefined\n\n    /**\n     * Path of a file (used throughout the `VFile` ecosystem).\n     *\n     * @type {string | undefined}\n     */\n    this.file = ''\n\n    // Field from `Error`.\n    /**\n     * Reason for message.\n     *\n     * @type {string}\n     */\n    this.message = reason\n\n    /**\n     * Starting line of error.\n     *\n     * @type {number | undefined}\n     */\n    this.line = start ? start.line : undefined\n\n    // Field from `Error`.\n    /**\n     * Serialized positional info of message.\n     *\n     * On normal errors, this would be something like `ParseError`, buit in\n     * `VFile` messages we use this space to show where an error happened.\n     */\n    this.name = stringifyPosition(options.place) || '1:1'\n\n    /**\n     * Place of message.\n     *\n     * @type {Point | Position | undefined}\n     */\n    this.place = options.place || undefined\n\n    /**\n     * Reason for message, should use markdown.\n     *\n     * @type {string}\n     */\n    this.reason = this.message\n\n    /**\n     * Category of message (example: `'my-rule'`).\n     *\n     * @type {string | undefined}\n     */\n    this.ruleId = options.ruleId || undefined\n\n    /**\n     * Namespace of message (example: `'my-package'`).\n     *\n     * @type {string | undefined}\n     */\n    this.source = options.source || undefined\n\n    // Field from `Error`.\n    /**\n     * Stack of message.\n     *\n     * This is used by normal errors to show where something happened in\n     * programming code, irrelevant for `VFile` messages,\n     *\n     * @type {string}\n     */\n    this.stack =\n      legacyCause && options.cause && typeof options.cause.stack === 'string'\n        ? options.cause.stack\n        : ''\n\n    // The following fields are “well known”.\n    // Not standard.\n    // Feel free to add other non-standard fields to your messages.\n\n    /**\n     * Specify the source value that’s being reported, which is deemed\n     * incorrect.\n     *\n     * @type {string | undefined}\n     */\n    this.actual = undefined\n\n    /**\n     * Suggest acceptable values that can be used instead of `actual`.\n     *\n     * @type {Array<string> | undefined}\n     */\n    this.expected = undefined\n\n    /**\n     * Long form description of the message (you should use markdown).\n     *\n     * @type {string | undefined}\n     */\n    this.note = undefined\n\n    /**\n     * Link to docs for the message.\n     *\n     * > 👉 **Note**: this must be an absolute URL that can be passed as `x`\n     * > to `new URL(x)`.\n     *\n     * @type {string | undefined}\n     */\n    this.url = undefined\n  }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.column = undefined\nVFileMessage.prototype.line = undefined\nVFileMessage.prototype.ancestors = undefined\nVFileMessage.prototype.cause = undefined\nVFileMessage.prototype.fatal = undefined\nVFileMessage.prototype.place = undefined\nVFileMessage.prototype.ruleId = undefined\nVFileMessage.prototype.source = undefined\n","/**\n * @import {Identifier, Literal, MemberExpression} from 'estree'\n * @import {Jsx, JsxDev, Options, Props} from 'hast-util-to-jsx-runtime'\n * @import {Element, Nodes, Parents, Root, Text} from 'hast'\n * @import {MdxFlowExpressionHast, MdxTextExpressionHast} from 'mdast-util-mdx-expression'\n * @import {MdxJsxFlowElementHast, MdxJsxTextElementHast} from 'mdast-util-mdx-jsx'\n * @import {MdxjsEsmHast} from 'mdast-util-mdxjs-esm'\n * @import {Position} from 'unist'\n * @import {Child, Create, Field, JsxElement, State, Style} from './types.js'\n */\n\nimport {stringify as commas} from 'comma-separated-tokens'\nimport {ok as assert} from 'devlop'\nimport {name as isIdentifierName} from 'estree-util-is-identifier-name'\nimport {whitespace} from 'hast-util-whitespace'\nimport {find, hastToReact, html, svg} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport styleToJs from 'style-to-js'\nimport {pointStart} from 'unist-util-position'\nimport {VFileMessage} from 'vfile-message'\n\n// To do: next major: `Object.hasOwn`.\nconst own = {}.hasOwnProperty\n\n/** @type {Map<string, number>} */\nconst emptyMap = new Map()\n\nconst cap = /[A-Z]/g\n\n// `react-dom` triggers a warning for *any* white space in tables.\n// To follow GFM, `mdast-util-to-hast` injects line endings between elements.\n// Other tools might do so too, but they don’t do here, so we remove all of\n// that.\n\n// See: <https://github.com/facebook/react/pull/7081>.\n// See: <https://github.com/facebook/react/pull/7515>.\n// See: <https://github.com/remarkjs/remark-react/issues/64>.\n// See: <https://github.com/rehypejs/rehype-react/pull/29>.\n// See: <https://github.com/rehypejs/rehype-react/pull/32>.\n// See: <https://github.com/rehypejs/rehype-react/pull/45>.\nconst tableElements = new Set(['table', 'tbody', 'thead', 'tfoot', 'tr'])\n\nconst tableCellElement = new Set(['td', 'th'])\n\nconst docs = 'https://github.com/syntax-tree/hast-util-to-jsx-runtime'\n\n/**\n * Transform a hast tree to preact, react, solid, svelte, vue, etc.,\n * with an automatic JSX runtime.\n *\n * @param {Nodes} tree\n *   Tree to transform.\n * @param {Options} options\n *   Configuration (required).\n * @returns {JsxElement}\n *   JSX element.\n */\n\nexport function toJsxRuntime(tree, options) {\n  if (!options || options.Fragment === undefined) {\n    throw new TypeError('Expected `Fragment` in options')\n  }\n\n  const filePath = options.filePath || undefined\n  /** @type {Create} */\n  let create\n\n  if (options.development) {\n    if (typeof options.jsxDEV !== 'function') {\n      throw new TypeError(\n        'Expected `jsxDEV` in options when `development: true`'\n      )\n    }\n\n    create = developmentCreate(filePath, options.jsxDEV)\n  } else {\n    if (typeof options.jsx !== 'function') {\n      throw new TypeError('Expected `jsx` in production options')\n    }\n\n    if (typeof options.jsxs !== 'function') {\n      throw new TypeError('Expected `jsxs` in production options')\n    }\n\n    create = productionCreate(filePath, options.jsx, options.jsxs)\n  }\n\n  /** @type {State} */\n  const state = {\n    Fragment: options.Fragment,\n    ancestors: [],\n    components: options.components || {},\n    create,\n    elementAttributeNameCase: options.elementAttributeNameCase || 'react',\n    evaluater: options.createEvaluater ? options.createEvaluater() : undefined,\n    filePath,\n    ignoreInvalidStyle: options.ignoreInvalidStyle || false,\n    passKeys: options.passKeys !== false,\n    passNode: options.passNode || false,\n    schema: options.space === 'svg' ? svg : html,\n    stylePropertyNameCase: options.stylePropertyNameCase || 'dom',\n    tableCellAlignToStyle: options.tableCellAlignToStyle !== false\n  }\n\n  const result = one(state, tree, undefined)\n\n  // JSX element.\n  if (result && typeof result !== 'string') {\n    return result\n  }\n\n  // Text node or something that turned into nothing.\n  return state.create(\n    tree,\n    state.Fragment,\n    {children: result || undefined},\n    undefined\n  )\n}\n\n/**\n * Transform a node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Nodes} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction one(state, node, key) {\n  if (node.type === 'element') {\n    return element(state, node, key)\n  }\n\n  if (node.type === 'mdxFlowExpression' || node.type === 'mdxTextExpression') {\n    return mdxExpression(state, node)\n  }\n\n  if (node.type === 'mdxJsxFlowElement' || node.type === 'mdxJsxTextElement') {\n    return mdxJsxElement(state, node, key)\n  }\n\n  if (node.type === 'mdxjsEsm') {\n    return mdxEsm(state, node)\n  }\n\n  if (node.type === 'root') {\n    return root(state, node, key)\n  }\n\n  if (node.type === 'text') {\n    return text(state, node)\n  }\n}\n\n/**\n * Handle element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Element} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction element(state, node, key) {\n  const parentSchema = state.schema\n  let schema = parentSchema\n\n  if (node.tagName.toLowerCase() === 'svg' && parentSchema.space === 'html') {\n    schema = svg\n    state.schema = schema\n  }\n\n  state.ancestors.push(node)\n\n  const type = findComponentFromName(state, node.tagName, false)\n  const props = createElementProps(state, node)\n  let children = createChildren(state, node)\n\n  if (tableElements.has(node.tagName)) {\n    children = children.filter(function (child) {\n      return typeof child === 'string' ? !whitespace(child) : true\n    })\n  }\n\n  addNode(state, props, type, node)\n  addChildren(props, children)\n\n  // Restore.\n  state.ancestors.pop()\n  state.schema = parentSchema\n\n  return state.create(node, type, props, key)\n}\n\n/**\n * Handle MDX expression.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxFlowExpressionHast | MdxTextExpressionHast} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxExpression(state, node) {\n  if (node.data && node.data.estree && state.evaluater) {\n    const program = node.data.estree\n    const expression = program.body[0]\n    assert(expression.type === 'ExpressionStatement')\n\n    // Assume result is a child.\n    return /** @type {Child | undefined} */ (\n      state.evaluater.evaluateExpression(expression.expression)\n    )\n  }\n\n  crashEstree(state, node.position)\n}\n\n/**\n * Handle MDX ESM.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxjsEsmHast} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxEsm(state, node) {\n  if (node.data && node.data.estree && state.evaluater) {\n    // Assume result is a child.\n    return /** @type {Child | undefined} */ (\n      state.evaluater.evaluateProgram(node.data.estree)\n    )\n  }\n\n  crashEstree(state, node.position)\n}\n\n/**\n * Handle MDX JSX.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxJsxElement(state, node, key) {\n  const parentSchema = state.schema\n  let schema = parentSchema\n\n  if (node.name === 'svg' && parentSchema.space === 'html') {\n    schema = svg\n    state.schema = schema\n  }\n\n  state.ancestors.push(node)\n\n  const type =\n    node.name === null\n      ? state.Fragment\n      : findComponentFromName(state, node.name, true)\n  const props = createJsxElementProps(state, node)\n  const children = createChildren(state, node)\n\n  addNode(state, props, type, node)\n  addChildren(props, children)\n\n  // Restore.\n  state.ancestors.pop()\n  state.schema = parentSchema\n\n  return state.create(node, type, props, key)\n}\n\n/**\n * Handle root.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Root} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction root(state, node, key) {\n  /** @type {Props} */\n  const props = {}\n\n  addChildren(props, createChildren(state, node))\n\n  return state.create(node, state.Fragment, props, key)\n}\n\n/**\n * Handle text.\n *\n * @param {State} _\n *   Info passed around.\n * @param {Text} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction text(_, node) {\n  return node.value\n}\n\n/**\n * Add `node` to props.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Props} props\n *   Props.\n * @param {unknown} type\n *   Type.\n * @param {Element | MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Node.\n * @returns {undefined}\n *   Nothing.\n */\nfunction addNode(state, props, type, node) {\n  // If this is swapped out for a component:\n  if (typeof type !== 'string' && type !== state.Fragment && state.passNode) {\n    props.node = node\n  }\n}\n\n/**\n * Add children to props.\n *\n * @param {Props} props\n *   Props.\n * @param {Array<Child>} children\n *   Children.\n * @returns {undefined}\n *   Nothing.\n */\nfunction addChildren(props, children) {\n  if (children.length > 0) {\n    const value = children.length > 1 ? children : children[0]\n\n    if (value) {\n      props.children = value\n    }\n  }\n}\n\n/**\n * @param {string | undefined} _\n *   Path to file.\n * @param {Jsx} jsx\n *   Dynamic.\n * @param {Jsx} jsxs\n *   Static.\n * @returns {Create}\n *   Create a production element.\n */\nfunction productionCreate(_, jsx, jsxs) {\n  return create\n  /** @type {Create} */\n  function create(_, type, props, key) {\n    // Only an array when there are 2 or more children.\n    const isStaticChildren = Array.isArray(props.children)\n    const fn = isStaticChildren ? jsxs : jsx\n    return key ? fn(type, props, key) : fn(type, props)\n  }\n}\n\n/**\n * @param {string | undefined} filePath\n *   Path to file.\n * @param {JsxDev} jsxDEV\n *   Development.\n * @returns {Create}\n *   Create a development element.\n */\nfunction developmentCreate(filePath, jsxDEV) {\n  return create\n  /** @type {Create} */\n  function create(node, type, props, key) {\n    // Only an array when there are 2 or more children.\n    const isStaticChildren = Array.isArray(props.children)\n    const point = pointStart(node)\n    return jsxDEV(\n      type,\n      props,\n      key,\n      isStaticChildren,\n      {\n        columnNumber: point ? point.column - 1 : undefined,\n        fileName: filePath,\n        lineNumber: point ? point.line : undefined\n      },\n      undefined\n    )\n  }\n}\n\n/**\n * Create props from an element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Element} node\n *   Current element.\n * @returns {Props}\n *   Props.\n */\nfunction createElementProps(state, node) {\n  /** @type {Props} */\n  const props = {}\n  /** @type {string | undefined} */\n  let alignValue\n  /** @type {string} */\n  let prop\n\n  for (prop in node.properties) {\n    if (prop !== 'children' && own.call(node.properties, prop)) {\n      const result = createProperty(state, prop, node.properties[prop])\n\n      if (result) {\n        const [key, value] = result\n\n        if (\n          state.tableCellAlignToStyle &&\n          key === 'align' &&\n          typeof value === 'string' &&\n          tableCellElement.has(node.tagName)\n        ) {\n          alignValue = value\n        } else {\n          props[key] = value\n        }\n      }\n    }\n  }\n\n  if (alignValue) {\n    // Assume style is an object.\n    const style = /** @type {Style} */ (props.style || (props.style = {}))\n    style[state.stylePropertyNameCase === 'css' ? 'text-align' : 'textAlign'] =\n      alignValue\n  }\n\n  return props\n}\n\n/**\n * Create props from a JSX element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Current JSX element.\n * @returns {Props}\n *   Props.\n */\nfunction createJsxElementProps(state, node) {\n  /** @type {Props} */\n  const props = {}\n\n  for (const attribute of node.attributes) {\n    if (attribute.type === 'mdxJsxExpressionAttribute') {\n      if (attribute.data && attribute.data.estree && state.evaluater) {\n        const program = attribute.data.estree\n        const expression = program.body[0]\n        assert(expression.type === 'ExpressionStatement')\n        const objectExpression = expression.expression\n        assert(objectExpression.type === 'ObjectExpression')\n        const property = objectExpression.properties[0]\n        assert(property.type === 'SpreadElement')\n\n        Object.assign(\n          props,\n          state.evaluater.evaluateExpression(property.argument)\n        )\n      } else {\n        crashEstree(state, node.position)\n      }\n    } else {\n      // For JSX, the author is responsible of passing in the correct values.\n      const name = attribute.name\n      /** @type {unknown} */\n      let value\n\n      if (attribute.value && typeof attribute.value === 'object') {\n        if (\n          attribute.value.data &&\n          attribute.value.data.estree &&\n          state.evaluater\n        ) {\n          const program = attribute.value.data.estree\n          const expression = program.body[0]\n          assert(expression.type === 'ExpressionStatement')\n          value = state.evaluater.evaluateExpression(expression.expression)\n        } else {\n          crashEstree(state, node.position)\n        }\n      } else {\n        value = attribute.value === null ? true : attribute.value\n      }\n\n      // Assume a prop.\n      props[name] = /** @type {Props[keyof Props]} */ (value)\n    }\n  }\n\n  return props\n}\n\n/**\n * Create children.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Parents} node\n *   Current element.\n * @returns {Array<Child>}\n *   Children.\n */\nfunction createChildren(state, node) {\n  /** @type {Array<Child>} */\n  const children = []\n  let index = -1\n  /** @type {Map<string, number>} */\n  // Note: test this when Solid doesn’t want to merge my upcoming PR.\n  /* c8 ignore next */\n  const countsByName = state.passKeys ? new Map() : emptyMap\n\n  while (++index < node.children.length) {\n    const child = node.children[index]\n    /** @type {string | undefined} */\n    let key\n\n    if (state.passKeys) {\n      const name =\n        child.type === 'element'\n          ? child.tagName\n          : child.type === 'mdxJsxFlowElement' ||\n              child.type === 'mdxJsxTextElement'\n            ? child.name\n            : undefined\n\n      if (name) {\n        const count = countsByName.get(name) || 0\n        key = name + '-' + count\n        countsByName.set(name, count + 1)\n      }\n    }\n\n    const result = one(state, child, key)\n    if (result !== undefined) children.push(result)\n  }\n\n  return children\n}\n\n/**\n * Handle a property.\n *\n * @param {State} state\n *   Info passed around.\n * @param {string} prop\n *   Key.\n * @param {Array<number | string> | boolean | number | string | null | undefined} value\n *   hast property value.\n * @returns {Field | undefined}\n *   Field for runtime, optional.\n */\nfunction createProperty(state, prop, value) {\n  const info = find(state.schema, prop)\n\n  // Ignore nullish and `NaN` values.\n  if (\n    value === null ||\n    value === undefined ||\n    (typeof value === 'number' && Number.isNaN(value))\n  ) {\n    return\n  }\n\n  if (Array.isArray(value)) {\n    // Accept `array`.\n    // Most props are space-separated.\n    value = info.commaSeparated ? commas(value) : spaces(value)\n  }\n\n  // React only accepts `style` as object.\n  if (info.property === 'style') {\n    let styleObject =\n      typeof value === 'object' ? value : parseStyle(state, String(value))\n\n    if (state.stylePropertyNameCase === 'css') {\n      styleObject = transformStylesToCssCasing(styleObject)\n    }\n\n    return ['style', styleObject]\n  }\n\n  return [\n    state.elementAttributeNameCase === 'react' && info.space\n      ? hastToReact[info.property] || info.property\n      : info.attribute,\n    value\n  ]\n}\n\n/**\n * Parse a CSS declaration to an object.\n *\n * @param {State} state\n *   Info passed around.\n * @param {string} value\n *   CSS declarations.\n * @returns {Style}\n *   Properties.\n * @throws\n *   Throws `VFileMessage` when CSS cannot be parsed.\n */\nfunction parseStyle(state, value) {\n  try {\n    return styleToJs(value, {reactCompat: true})\n  } catch (error) {\n    if (state.ignoreInvalidStyle) {\n      return {}\n    }\n\n    const cause = /** @type {Error} */ (error)\n    const message = new VFileMessage('Cannot parse `style` attribute', {\n      ancestors: state.ancestors,\n      cause,\n      ruleId: 'style',\n      source: 'hast-util-to-jsx-runtime'\n    })\n    message.file = state.filePath || undefined\n    message.url = docs + '#cannot-parse-style-attribute'\n\n    throw message\n  }\n}\n\n/**\n * Create a JSX name from a string.\n *\n * @param {State} state\n *   To do.\n * @param {string} name\n *   Name.\n * @param {boolean} allowExpression\n *   Allow member expressions and identifiers.\n * @returns {unknown}\n *   To do.\n */\nfunction findComponentFromName(state, name, allowExpression) {\n  /** @type {Identifier | Literal | MemberExpression} */\n  let result\n\n  if (!allowExpression) {\n    result = {type: 'Literal', value: name}\n  } else if (name.includes('.')) {\n    const identifiers = name.split('.')\n    let index = -1\n    /** @type {Identifier | Literal | MemberExpression | undefined} */\n    let node\n\n    while (++index < identifiers.length) {\n      /** @type {Identifier | Literal} */\n      const prop = isIdentifierName(identifiers[index])\n        ? {type: 'Identifier', name: identifiers[index]}\n        : {type: 'Literal', value: identifiers[index]}\n      node = node\n        ? {\n            type: 'MemberExpression',\n            object: node,\n            property: prop,\n            computed: Boolean(index && prop.type === 'Literal'),\n            optional: false\n          }\n        : prop\n    }\n\n    assert(node, 'always a result')\n    result = node\n  } else {\n    result =\n      isIdentifierName(name) && !/^[a-z]/.test(name)\n        ? {type: 'Identifier', name}\n        : {type: 'Literal', value: name}\n  }\n\n  // Only literals can be passed in `components` currently.\n  // No identifiers / member expressions.\n  if (result.type === 'Literal') {\n    const name = /** @type {string | number} */ (result.value)\n    return own.call(state.components, name) ? state.components[name] : name\n  }\n\n  // Assume component.\n  if (state.evaluater) {\n    return state.evaluater.evaluateExpression(result)\n  }\n\n  crashEstree(state)\n}\n\n/**\n * @param {State} state\n * @param {Position | undefined} [place]\n * @returns {never}\n */\nfunction crashEstree(state, place) {\n  const message = new VFileMessage(\n    'Cannot handle MDX estrees without `createEvaluater`',\n    {\n      ancestors: state.ancestors,\n      place,\n      ruleId: 'mdx-estree',\n      source: 'hast-util-to-jsx-runtime'\n    }\n  )\n  message.file = state.filePath || undefined\n  message.url = docs + '#cannot-handle-mdx-estrees-without-createevaluater'\n\n  throw message\n}\n\n/**\n * Transform a DOM casing style object to a CSS casing style object.\n *\n * @param {Style} domCasing\n * @returns {Style}\n */\nfunction transformStylesToCssCasing(domCasing) {\n  /** @type {Style} */\n  const cssCasing = {}\n  /** @type {string} */\n  let from\n\n  for (from in domCasing) {\n    if (own.call(domCasing, from)) {\n      cssCasing[transformStyleToCssCasing(from)] = domCasing[from]\n    }\n  }\n\n  return cssCasing\n}\n\n/**\n * Transform a DOM casing style field to a CSS casing style field.\n *\n * @param {string} from\n * @returns {string}\n */\nfunction transformStyleToCssCasing(from) {\n  let to = from.replace(cap, toDash)\n  // Handle `ms-xxx` -> `-ms-xxx`.\n  if (to.slice(0, 3) === 'ms-') to = '-' + to\n  return to\n}\n\n/**\n * Make `$0` dash cased.\n *\n * @param {string} $0\n *   Capitalized ASCII leter.\n * @returns {string}\n *   Dash and lower letter.\n */\nfunction toDash($0) {\n  return '-' + $0.toLowerCase()\n}\n","/**\n * HTML URL properties.\n *\n * Each key is a property name and each value is a list of tag names it applies\n * to or `null` if it applies to all elements.\n *\n * @type {Record<string, Array<string> | null>}\n */\nexport const urlAttributes = {\n  action: ['form'],\n  cite: ['blockquote', 'del', 'ins', 'q'],\n  data: ['object'],\n  formAction: ['button', 'input'],\n  href: ['a', 'area', 'base', 'link'],\n  icon: ['menuitem'],\n  itemId: null,\n  manifest: ['html'],\n  ping: ['a', 'area'],\n  poster: ['video'],\n  src: [\n    'audio',\n    'embed',\n    'iframe',\n    'img',\n    'input',\n    'script',\n    'source',\n    'track',\n    'video'\n  ]\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n *   Whether to use `alt` for `image`s (default: `true`).\n * @property {boolean | null | undefined} [includeHtml=true]\n *   Whether to use `value` of HTML (default: `true`).\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} [value]\n *   Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {string}\n *   Serialized `value`.\n */\nexport function toString(value, options) {\n  const settings = options || emptyOptions\n  const includeImageAlt =\n    typeof settings.includeImageAlt === 'boolean'\n      ? settings.includeImageAlt\n      : true\n  const includeHtml =\n    typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n  return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n  if (node(value)) {\n    if ('value' in value) {\n      return value.type === 'html' && !includeHtml ? '' : value.value\n    }\n\n    if (includeImageAlt && 'alt' in value && value.alt) {\n      return value.alt\n    }\n\n    if ('children' in value) {\n      return all(value.children, includeImageAlt, includeHtml)\n    }\n  }\n\n  if (Array.isArray(value)) {\n    return all(value, includeImageAlt, includeHtml)\n  }\n\n  return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array<unknown>} values\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n\n  while (++index < values.length) {\n    result[index] = one(values[index], includeImageAlt, includeHtml)\n  }\n\n  return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n *   Thing.\n * @returns {value is Nodes}\n *   Whether `value` is a node.\n */\nfunction node(value) {\n  return Boolean(value && typeof value === 'object')\n}\n","/// <reference lib=\"dom\" />\n\n/* global document */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string | false}\n */\nexport function decodeNamedCharacterReference(value) {\n  const characterReference = '&' + value + ';'\n  element.innerHTML = characterReference\n  const character = element.textContent\n\n  // Some named character references do not require the closing semicolon\n  // (`&not`, for instance), which leads to situations where parsing the assumed\n  // named reference of `&notit;` will result in the string `¬it;`.\n  // When we encounter a trailing semicolon after parsing, and the character\n  // reference to decode was not a semicolon (`&semi;`), we can assume that the\n  // matching was not complete.\n  if (\n    // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n    // yield `null`.\n    character.charCodeAt(character.length - 1) === 59 /* `;` */ &&\n    value !== 'semi'\n  ) {\n    return false\n  }\n\n  // If the decoded string is equal to the input, the character reference was\n  // not valid.\n  // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n  // yield `null`.\n  return character === characterReference ? false : character\n}\n","/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {number} start\n *   Index to remove/insert at (can be negative).\n * @param {number} remove\n *   Number of items to remove.\n * @param {Array<T>} items\n *   Items to inject into `list`.\n * @returns {undefined}\n *   Nothing.\n */\nexport function splice(list, start, remove, items) {\n  const end = list.length;\n  let chunkStart = 0;\n  /** @type {Array<unknown>} */\n  let parameters;\n\n  // Make start between zero and `end` (included).\n  if (start < 0) {\n    start = -start > end ? 0 : end + start;\n  } else {\n    start = start > end ? end : start;\n  }\n  remove = remove > 0 ? remove : 0;\n\n  // No need to chunk the items if there’s only a couple (10k) items.\n  if (items.length < 10000) {\n    parameters = Array.from(items);\n    parameters.unshift(start, remove);\n    // @ts-expect-error Hush, it’s fine.\n    list.splice(...parameters);\n  } else {\n    // Delete `remove` items starting from `start`\n    if (remove) list.splice(start, remove);\n\n    // Insert the items in chunks to not cause stack overflows.\n    while (chunkStart < items.length) {\n      parameters = items.slice(chunkStart, chunkStart + 10000);\n      parameters.unshift(start, 0);\n      // @ts-expect-error Hush, it’s fine.\n      list.splice(...parameters);\n      chunkStart += 10000;\n      start += 10000;\n    }\n  }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {Array<T>} items\n *   Items to add to `list`.\n * @returns {Array<T>}\n *   Either `list` or `items`.\n */\nexport function push(list, items) {\n  if (list.length > 0) {\n    splice(list, list.length, 0, items);\n    return list;\n  }\n  return items;\n}","/**\n * @import {\n *   Extension,\n *   Handles,\n *   HtmlExtension,\n *   NormalizedExtension\n * } from 'micromark-util-types'\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {ReadonlyArray<Extension>} extensions\n *   List of syntax extensions.\n * @returns {NormalizedExtension}\n *   A single combined extension.\n */\nexport function combineExtensions(extensions) {\n  /** @type {NormalizedExtension} */\n  const all = {}\n  let index = -1\n\n  while (++index < extensions.length) {\n    syntaxExtension(all, extensions[index])\n  }\n\n  return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n *   Extension to merge into.\n * @param {Extension} extension\n *   Extension to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction syntaxExtension(all, extension) {\n  /** @type {keyof Extension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    /** @type {Record<string, unknown>} */\n    const left = maybe || (all[hook] = {})\n    /** @type {Record<string, unknown> | undefined} */\n    const right = extension[hook]\n    /** @type {string} */\n    let code\n\n    if (right) {\n      for (code in right) {\n        if (!hasOwnProperty.call(left, code)) left[code] = []\n        const value = right[code]\n        constructs(\n          // @ts-expect-error Looks like a list.\n          left[code],\n          Array.isArray(value) ? value : value ? [value] : []\n        )\n      }\n    }\n  }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array<unknown>} existing\n *   List of constructs to merge into.\n * @param {Array<unknown>} list\n *   List of constructs to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction constructs(existing, list) {\n  let index = -1\n  /** @type {Array<unknown>} */\n  const before = []\n\n  while (++index < list.length) {\n    // @ts-expect-error Looks like an object.\n    ;(list[index].add === 'after' ? existing : before).push(list[index])\n  }\n\n  splice(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {ReadonlyArray<HtmlExtension>} htmlExtensions\n *   List of HTML extensions.\n * @returns {HtmlExtension}\n *   Single combined HTML extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n  /** @type {HtmlExtension} */\n  const handlers = {}\n  let index = -1\n\n  while (++index < htmlExtensions.length) {\n    htmlExtension(handlers, htmlExtensions[index])\n  }\n\n  return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n *   Extension to merge into.\n * @param {HtmlExtension} extension\n *   Extension to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction htmlExtension(all, extension) {\n  /** @type {keyof HtmlExtension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    const left = maybe || (all[hook] = {})\n    const right = extension[hook]\n    /** @type {keyof Handles} */\n    let type\n\n    if (right) {\n      for (type in right) {\n        // @ts-expect-error assume document vs regular handler are managed correctly.\n        left[type] = right[type]\n      }\n    }\n  }\n}\n","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n *   Value to decode.\n * @param {number} base\n *   Numeric base.\n * @returns {string}\n *   Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n  const code = Number.parseInt(value, base);\n  if (\n  // C0 except for HT, LF, FF, CR, space.\n  code < 9 || code === 11 || code > 13 && code < 32 ||\n  // Control character (DEL) of C0, and C1 controls.\n  code > 126 && code < 160 ||\n  // Lone high surrogates and low surrogates.\n  code > 55_295 && code < 57_344 ||\n  // Noncharacters.\n  code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */\n  (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */\n  // Out of range\n  code > 1_114_111) {\n    return \"\\uFFFD\";\n  }\n  return String.fromCodePoint(code);\n}","/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n *   Identifier to normalize.\n * @returns {string}\n *   Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n  return value\n  // Collapse markdown whitespace.\n  .replace(/[\\t\\n\\r ]+/g, \" \")\n  // Trim.\n  .replace(/^ | $/g, '')\n  // Some characters are considered “uppercase”, but if their lowercase\n  // counterpart is uppercased will result in a different uppercase\n  // character.\n  // Hence, to get that form, we perform both lower- and uppercase.\n  // Upper case makes sure keys will not interact with default prototypal\n  // methods: no method is uppercase.\n  .toLowerCase().toUpperCase();\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/);\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function asciiControl(code) {\n  return (\n    // Special whitespace codes (which have negative values), C0 and Control\n    // character DEL\n    code !== null && (code < 32 || code === 127)\n  );\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/);\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/);\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/);\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEnding(code) {\n  return code !== null && code < -2;\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n  return code !== null && (code < 0 || code === 32);\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownSpace(code) {\n  return code === -2 || code === -1 || code === 32;\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodePunctuation = regexCheck(/\\p{P}|\\p{S}/u);\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/);\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n *   Expression.\n * @returns {(code: Code) => boolean}\n *   Check.\n */\nfunction regexCheck(regex) {\n  return check;\n\n  /**\n   * Check whether a code matches the bound regex.\n   *\n   * @param {Code} code\n   *   Character code.\n   * @returns {boolean}\n   *   Whether the character code matches the bound regex.\n   */\n  function check(code) {\n    return code !== null && code > -1 && regex.test(String.fromCharCode(code));\n  }\n}","import { asciiAlphanumeric } from 'micromark-util-character';\nimport { encode } from 'micromark-util-encode';\n/**\n * Make a value safe for injection as a URL.\n *\n * This encodes unsafe characters with percent-encoding and skips already\n * encoded sequences (see `normalizeUri`).\n * Further unsafe characters are encoded as character references (see\n * `micromark-util-encode`).\n *\n * A regex of allowed protocols can be given, in which case the URL is\n * sanitized.\n * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or\n * `/^https?$/i` for `img[src]` (this is what `github.com` allows).\n * If the URL includes an unknown protocol (one not matched by `protocol`, such\n * as a dangerous example, `javascript:`), the value is ignored.\n *\n * @param {string | null | undefined} url\n *   URI to sanitize.\n * @param {RegExp | null | undefined} [protocol]\n *   Allowed protocols.\n * @returns {string}\n *   Sanitized URI.\n */\nexport function sanitizeUri(url, protocol) {\n  const value = encode(normalizeUri(url || ''));\n  if (!protocol) {\n    return value;\n  }\n  const colon = value.indexOf(':');\n  const questionMark = value.indexOf('?');\n  const numberSign = value.indexOf('#');\n  const slash = value.indexOf('/');\n  if (\n  // If there is no protocol, it’s relative.\n  colon < 0 ||\n  // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n  slash > -1 && colon > slash || questionMark > -1 && colon > questionMark || numberSign > -1 && colon > numberSign ||\n  // It is a protocol, it should be allowed.\n  protocol.test(value.slice(0, colon))) {\n    return value;\n  }\n  return '';\n}\n\n/**\n * Normalize a URL.\n *\n * Encode unsafe characters with percent-encoding, skipping already encoded\n * sequences.\n *\n * @param {string} value\n *   URI to normalize.\n * @returns {string}\n *   Normalized URI.\n */\nexport function normalizeUri(value) {\n  /** @type {Array<string>} */\n  const result = [];\n  let index = -1;\n  let start = 0;\n  let skip = 0;\n  while (++index < value.length) {\n    const code = value.charCodeAt(index);\n    /** @type {string} */\n    let replace = '';\n\n    // A correct percent encoded value.\n    if (code === 37 && asciiAlphanumeric(value.charCodeAt(index + 1)) && asciiAlphanumeric(value.charCodeAt(index + 2))) {\n      skip = 2;\n    }\n    // ASCII.\n    else if (code < 128) {\n      if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) {\n        replace = String.fromCharCode(code);\n      }\n    }\n    // Astral.\n    else if (code > 55_295 && code < 57_344) {\n      const next = value.charCodeAt(index + 1);\n\n      // A correct surrogate pair.\n      if (code < 56_320 && next > 56_319 && next < 57_344) {\n        replace = String.fromCharCode(code, next);\n        skip = 1;\n      }\n      // Lone surrogate.\n      else {\n        replace = \"\\uFFFD\";\n      }\n    }\n    // Unicode.\n    else {\n      replace = String.fromCharCode(code);\n    }\n    if (replace) {\n      result.push(value.slice(start, index), encodeURIComponent(replace));\n      start = index + skip + 1;\n      replace = '';\n    }\n    if (skip) {\n      index += skip;\n      skip = 0;\n    }\n  }\n  return result.join('') + value.slice(start);\n}","/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { markdownSpace } from 'micromark-util-character';\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   spaces in markdown are often optional, in which case this factory can be\n *     used and `ok` will be switched to whether spaces were found or not\n * *   one line ending or space can be detected with `markdownSpace(code)` right\n *     before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `␉` represents a tab (plus how much it expands) and `␠` represents a\n * single space.\n *\n * ```markdown\n * ␉\n * ␠␠␠␠\n * ␉␠\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {TokenType} type\n *   Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n *   Max (exclusive).\n * @returns {State}\n *   Start state.\n */\nexport function factorySpace(effects, ok, type, max) {\n  const limit = max ? max - 1 : Number.POSITIVE_INFINITY;\n  let size = 0;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownSpace(code)) {\n      effects.enter(type);\n      return prefix(code);\n    }\n    return ok(code);\n  }\n\n  /** @type {State} */\n  function prefix(code) {\n    if (markdownSpace(code) && size++ < limit) {\n      effects.consume(code);\n      return prefix;\n    }\n    effects.exit(type);\n    return ok(code);\n  }\n}","/**\n * @import {\n *   InitialConstruct,\n *   Initializer,\n *   State,\n *   TokenizeContext,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\nexport const content = {\n  tokenize: initializeContent\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Initializer}\n *   Content.\n */\nfunction initializeContent(effects) {\n  const contentStart = effects.attempt(this.parser.constructs.contentInitial, afterContentStartConstruct, paragraphInitial);\n  /** @type {Token} */\n  let previous;\n  return contentStart;\n\n  /** @type {State} */\n  function afterContentStartConstruct(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, contentStart, \"linePrefix\");\n  }\n\n  /** @type {State} */\n  function paragraphInitial(code) {\n    effects.enter(\"paragraph\");\n    return lineStart(code);\n  }\n\n  /** @type {State} */\n  function lineStart(code) {\n    const token = effects.enter(\"chunkText\", {\n      contentType: \"text\",\n      previous\n    });\n    if (previous) {\n      previous.next = token;\n    }\n    previous = token;\n    return data(code);\n  }\n\n  /** @type {State} */\n  function data(code) {\n    if (code === null) {\n      effects.exit(\"chunkText\");\n      effects.exit(\"paragraph\");\n      effects.consume(code);\n      return;\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code);\n      effects.exit(\"chunkText\");\n      return lineStart;\n    }\n\n    // Data.\n    effects.consume(code);\n    return data;\n  }\n}","/**\n * @import {\n *   Construct,\n *   ContainerState,\n *   InitialConstruct,\n *   Initializer,\n *   Point,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @typedef {[Construct, ContainerState]} StackItem\n *   Construct and its state.\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {InitialConstruct} */\nexport const document = {\n  tokenize: initializeDocument\n};\n\n/** @type {Construct} */\nconst containerConstruct = {\n  tokenize: tokenizeContainer\n};\n\n/**\n * @this {TokenizeContext}\n *   Self.\n * @type {Initializer}\n *   Initializer.\n */\nfunction initializeDocument(effects) {\n  const self = this;\n  /** @type {Array<StackItem>} */\n  const stack = [];\n  let continued = 0;\n  /** @type {TokenizeContext | undefined} */\n  let childFlow;\n  /** @type {Token | undefined} */\n  let childToken;\n  /** @type {number} */\n  let lineStartOffset;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    // First we iterate through the open blocks, starting with the root\n    // document, and descending through last children down to the last open\n    // block.\n    // Each block imposes a condition that the line must satisfy if the block is\n    // to remain open.\n    // For example, a block quote requires a `>` character.\n    // A paragraph requires a non-blank line.\n    // In this phase we may match all or just some of the open blocks.\n    // But we cannot close unmatched blocks yet, because we may have a lazy\n    // continuation line.\n    if (continued < stack.length) {\n      const item = stack[continued];\n      self.containerState = item[1];\n      return effects.attempt(item[0].continuation, documentContinue, checkNewContainers)(code);\n    }\n\n    // Done.\n    return checkNewContainers(code);\n  }\n\n  /** @type {State} */\n  function documentContinue(code) {\n    continued++;\n\n    // Note: this field is called `_closeFlow` but it also closes containers.\n    // Perhaps a good idea to rename it but it’s already used in the wild by\n    // extensions.\n    if (self.containerState._closeFlow) {\n      self.containerState._closeFlow = undefined;\n      if (childFlow) {\n        closeFlow();\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when dealing with lazy lines in `writeToChild`.\n      const indexBeforeExits = self.events.length;\n      let indexBeforeFlow = indexBeforeExits;\n      /** @type {Point | undefined} */\n      let point;\n\n      // Find the flow chunk.\n      while (indexBeforeFlow--) {\n        if (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === \"chunkFlow\") {\n          point = self.events[indexBeforeFlow][1].end;\n          break;\n        }\n      }\n      exitContainers(continued);\n\n      // Fix positions.\n      let index = indexBeforeExits;\n      while (index < self.events.length) {\n        self.events[index][1].end = {\n          ...point\n        };\n        index++;\n      }\n\n      // Inject the exits earlier (they’re still also at the end).\n      splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));\n\n      // Discard the duplicate exits.\n      self.events.length = index;\n      return checkNewContainers(code);\n    }\n    return start(code);\n  }\n\n  /** @type {State} */\n  function checkNewContainers(code) {\n    // Next, after consuming the continuation markers for existing blocks, we\n    // look for new block starts (e.g. `>` for a block quote).\n    // If we encounter a new block start, we close any blocks unmatched in\n    // step 1 before creating the new block as a child of the last matched\n    // block.\n    if (continued === stack.length) {\n      // No need to `check` whether there’s a container, of `exitContainers`\n      // would be moot.\n      // We can instead immediately `attempt` to parse one.\n      if (!childFlow) {\n        return documentContinued(code);\n      }\n\n      // If we have concrete content, such as block HTML or fenced code,\n      // we can’t have containers “pierce” into them, so we can immediately\n      // start.\n      if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n        return flowStart(code);\n      }\n\n      // If we do have flow, it could still be a blank line,\n      // but we’d be interrupting it w/ a new container if there’s a current\n      // construct.\n      // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer\n      // needed in micromark-extension-gfm-table@1.0.6).\n      self.interrupt = Boolean(childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack);\n    }\n\n    // Check if there is a new container.\n    self.containerState = {};\n    return effects.check(containerConstruct, thereIsANewContainer, thereIsNoNewContainer)(code);\n  }\n\n  /** @type {State} */\n  function thereIsANewContainer(code) {\n    if (childFlow) closeFlow();\n    exitContainers(continued);\n    return documentContinued(code);\n  }\n\n  /** @type {State} */\n  function thereIsNoNewContainer(code) {\n    self.parser.lazy[self.now().line] = continued !== stack.length;\n    lineStartOffset = self.now().offset;\n    return flowStart(code);\n  }\n\n  /** @type {State} */\n  function documentContinued(code) {\n    // Try new containers.\n    self.containerState = {};\n    return effects.attempt(containerConstruct, containerContinue, flowStart)(code);\n  }\n\n  /** @type {State} */\n  function containerContinue(code) {\n    continued++;\n    stack.push([self.currentConstruct, self.containerState]);\n    // Try another.\n    return documentContinued(code);\n  }\n\n  /** @type {State} */\n  function flowStart(code) {\n    if (code === null) {\n      if (childFlow) closeFlow();\n      exitContainers(0);\n      effects.consume(code);\n      return;\n    }\n    childFlow = childFlow || self.parser.flow(self.now());\n    effects.enter(\"chunkFlow\", {\n      _tokenizer: childFlow,\n      contentType: \"flow\",\n      previous: childToken\n    });\n    return flowContinue(code);\n  }\n\n  /** @type {State} */\n  function flowContinue(code) {\n    if (code === null) {\n      writeToChild(effects.exit(\"chunkFlow\"), true);\n      exitContainers(0);\n      effects.consume(code);\n      return;\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code);\n      writeToChild(effects.exit(\"chunkFlow\"));\n      // Get ready for the next line.\n      continued = 0;\n      self.interrupt = undefined;\n      return start;\n    }\n    effects.consume(code);\n    return flowContinue;\n  }\n\n  /**\n   * @param {Token} token\n   *   Token.\n   * @param {boolean | undefined} [endOfFile]\n   *   Whether the token is at the end of the file (default: `false`).\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function writeToChild(token, endOfFile) {\n    const stream = self.sliceStream(token);\n    if (endOfFile) stream.push(null);\n    token.previous = childToken;\n    if (childToken) childToken.next = token;\n    childToken = token;\n    childFlow.defineSkip(token.start);\n    childFlow.write(stream);\n\n    // Alright, so we just added a lazy line:\n    //\n    // ```markdown\n    // > a\n    // b.\n    //\n    // Or:\n    //\n    // > ~~~c\n    // d\n    //\n    // Or:\n    //\n    // > | e |\n    // f\n    // ```\n    //\n    // The construct in the second example (fenced code) does not accept lazy\n    // lines, so it marked itself as done at the end of its first line, and\n    // then the content construct parses `d`.\n    // Most constructs in markdown match on the first line: if the first line\n    // forms a construct, a non-lazy line can’t “unmake” it.\n    //\n    // The construct in the third example is potentially a GFM table, and\n    // those are *weird*.\n    // It *could* be a table, from the first line, if the following line\n    // matches a condition.\n    // In this case, that second line is lazy, which “unmakes” the first line\n    // and turns the whole into one content block.\n    //\n    // We’ve now parsed the non-lazy and the lazy line, and can figure out\n    // whether the lazy line started a new flow block.\n    // If it did, we exit the current containers between the two flow blocks.\n    if (self.parser.lazy[token.start.line]) {\n      let index = childFlow.events.length;\n      while (index--) {\n        if (\n        // The token starts before the line ending…\n        childFlow.events[index][1].start.offset < lineStartOffset && (\n        // …and either is not ended yet…\n        !childFlow.events[index][1].end ||\n        // …or ends after it.\n        childFlow.events[index][1].end.offset > lineStartOffset)) {\n          // Exit: there’s still something open, which means it’s a lazy line\n          // part of something.\n          return;\n        }\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when closing flow in `documentContinue`.\n      const indexBeforeExits = self.events.length;\n      let indexBeforeFlow = indexBeforeExits;\n      /** @type {boolean | undefined} */\n      let seen;\n      /** @type {Point | undefined} */\n      let point;\n\n      // Find the previous chunk (the one before the lazy line).\n      while (indexBeforeFlow--) {\n        if (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === \"chunkFlow\") {\n          if (seen) {\n            point = self.events[indexBeforeFlow][1].end;\n            break;\n          }\n          seen = true;\n        }\n      }\n      exitContainers(continued);\n\n      // Fix positions.\n      index = indexBeforeExits;\n      while (index < self.events.length) {\n        self.events[index][1].end = {\n          ...point\n        };\n        index++;\n      }\n\n      // Inject the exits earlier (they’re still also at the end).\n      splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));\n\n      // Discard the duplicate exits.\n      self.events.length = index;\n    }\n  }\n\n  /**\n   * @param {number} size\n   *   Size.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function exitContainers(size) {\n    let index = stack.length;\n\n    // Exit open containers.\n    while (index-- > size) {\n      const entry = stack[index];\n      self.containerState = entry[1];\n      entry[0].exit.call(self, effects);\n    }\n    stack.length = size;\n  }\n  function closeFlow() {\n    childFlow.write([null]);\n    childToken = undefined;\n    childFlow = undefined;\n    self.containerState._closeFlow = undefined;\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n *   Tokenizer.\n */\nfunction tokenizeContainer(effects, ok, nok) {\n  // Always populated by defaults.\n\n  return factorySpace(effects, effects.attempt(this.parser.constructs.document, ok, nok), \"linePrefix\", this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4);\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\n\nimport { markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n *   Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n *   Group.\n */\nexport function classifyCharacter(code) {\n  if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n    return 1;\n  }\n  if (unicodePunctuation(code)) {\n    return 2;\n  }\n}","/**\n * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types'\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs\n *   List of constructs, optionally with `resolveAll`s.\n * @param {Array<Event>} events\n *   List of events.\n * @param {TokenizeContext} context\n *   Context used by `tokenize`.\n * @returns {Array<Event>}\n *   Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n  /** @type {Array<Resolver>} */\n  const called = []\n  let index = -1\n\n  while (++index < constructs.length) {\n    const resolve = constructs[index].resolveAll\n\n    if (resolve && !called.includes(resolve)) {\n      events = resolve(events, context)\n      called.push(resolve)\n    }\n  }\n\n  return events\n}\n","/**\n * @import {\n *   Code,\n *   Construct,\n *   Event,\n *   Point,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { push, splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const attention = {\n  name: 'attention',\n  resolveAll: resolveAllAttention,\n  tokenize: tokenizeAttention\n};\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n// eslint-disable-next-line complexity\nfunction resolveAllAttention(events, context) {\n  let index = -1;\n  /** @type {number} */\n  let open;\n  /** @type {Token} */\n  let group;\n  /** @type {Token} */\n  let text;\n  /** @type {Token} */\n  let openingSequence;\n  /** @type {Token} */\n  let closingSequence;\n  /** @type {number} */\n  let use;\n  /** @type {Array<Event>} */\n  let nextEvents;\n  /** @type {number} */\n  let offset;\n\n  // Walk through all events.\n  //\n  // Note: performance of this is fine on an mb of normal markdown, but it’s\n  // a bottleneck for malicious stuff.\n  while (++index < events.length) {\n    // Find a token that can close.\n    if (events[index][0] === 'enter' && events[index][1].type === 'attentionSequence' && events[index][1]._close) {\n      open = index;\n\n      // Now walk back to find an opener.\n      while (open--) {\n        // Find a token that can open the closer.\n        if (events[open][0] === 'exit' && events[open][1].type === 'attentionSequence' && events[open][1]._open &&\n        // If the markers are the same:\n        context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0)) {\n          // If the opening can close or the closing can open,\n          // and the close size *is not* a multiple of three,\n          // but the sum of the opening and closing size *is* multiple of three,\n          // then don’t match.\n          if ((events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3)) {\n            continue;\n          }\n\n          // Number of markers to use from the sequence.\n          use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1;\n          const start = {\n            ...events[open][1].end\n          };\n          const end = {\n            ...events[index][1].start\n          };\n          movePoint(start, -use);\n          movePoint(end, use);\n          openingSequence = {\n            type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n            start,\n            end: {\n              ...events[open][1].end\n            }\n          };\n          closingSequence = {\n            type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n            start: {\n              ...events[index][1].start\n            },\n            end\n          };\n          text = {\n            type: use > 1 ? \"strongText\" : \"emphasisText\",\n            start: {\n              ...events[open][1].end\n            },\n            end: {\n              ...events[index][1].start\n            }\n          };\n          group = {\n            type: use > 1 ? \"strong\" : \"emphasis\",\n            start: {\n              ...openingSequence.start\n            },\n            end: {\n              ...closingSequence.end\n            }\n          };\n          events[open][1].end = {\n            ...openingSequence.start\n          };\n          events[index][1].start = {\n            ...closingSequence.end\n          };\n          nextEvents = [];\n\n          // If there are more markers in the opening, add them before.\n          if (events[open][1].end.offset - events[open][1].start.offset) {\n            nextEvents = push(nextEvents, [['enter', events[open][1], context], ['exit', events[open][1], context]]);\n          }\n\n          // Opening.\n          nextEvents = push(nextEvents, [['enter', group, context], ['enter', openingSequence, context], ['exit', openingSequence, context], ['enter', text, context]]);\n\n          // Always populated by defaults.\n\n          // Between.\n          nextEvents = push(nextEvents, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + 1, index), context));\n\n          // Closing.\n          nextEvents = push(nextEvents, [['exit', text, context], ['enter', closingSequence, context], ['exit', closingSequence, context], ['exit', group, context]]);\n\n          // If there are more markers in the closing, add them after.\n          if (events[index][1].end.offset - events[index][1].start.offset) {\n            offset = 2;\n            nextEvents = push(nextEvents, [['enter', events[index][1], context], ['exit', events[index][1], context]]);\n          } else {\n            offset = 0;\n          }\n          splice(events, open - 1, index - open + 3, nextEvents);\n          index = open + nextEvents.length - offset - 2;\n          break;\n        }\n      }\n    }\n  }\n\n  // Remove remaining sequences.\n  index = -1;\n  while (++index < events.length) {\n    if (events[index][1].type === 'attentionSequence') {\n      events[index][1].type = 'data';\n    }\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n  const attentionMarkers = this.parser.constructs.attentionMarkers.null;\n  const previous = this.previous;\n  const before = classifyCharacter(previous);\n\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Before a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    marker = code;\n    effects.enter('attentionSequence');\n    return inside(code);\n  }\n\n  /**\n   * In a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code);\n      return inside;\n    }\n    const token = effects.exit('attentionSequence');\n\n    // To do: next major: move this to resolver, just like `markdown-rs`.\n    const after = classifyCharacter(code);\n\n    // Always populated by defaults.\n\n    const open = !after || after === 2 && before || attentionMarkers.includes(code);\n    const close = !before || before === 2 && after || attentionMarkers.includes(previous);\n    token._open = Boolean(marker === 42 ? open : open && (before || !close));\n    token._close = Boolean(marker === 42 ? close : close && (after || !open));\n    return ok(code);\n  }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n *   Point.\n * @param {number} offset\n *   Amount to move.\n * @returns {undefined}\n *   Nothing.\n */\nfunction movePoint(point, offset) {\n  point.column += offset;\n  point.offset += offset;\n  point._bufferIndex += offset;\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, asciiAtext, asciiControl } from 'micromark-util-character';\n/** @type {Construct} */\nexport const autolink = {\n  name: 'autolink',\n  tokenize: tokenizeAutolink\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n  let size = 0;\n  return start;\n\n  /**\n   * Start of an autolink.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *      ^\n   * > | a<user@example.com>b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"autolink\");\n    effects.enter(\"autolinkMarker\");\n    effects.consume(code);\n    effects.exit(\"autolinkMarker\");\n    effects.enter(\"autolinkProtocol\");\n    return open;\n  }\n\n  /**\n   * After `<`, at protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *       ^\n   * > | a<user@example.com>b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return schemeOrEmailAtext;\n    }\n    if (code === 64) {\n      return nok(code);\n    }\n    return emailAtext(code);\n  }\n\n  /**\n   * At second byte of protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeOrEmailAtext(code) {\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n      // Count the previous alphabetical from `open` too.\n      size = 1;\n      return schemeInsideOrEmailAtext(code);\n    }\n    return emailAtext(code);\n  }\n\n  /**\n   * In ambiguous protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeInsideOrEmailAtext(code) {\n    if (code === 58) {\n      effects.consume(code);\n      size = 0;\n      return urlInside;\n    }\n\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if ((code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && size++ < 32) {\n      effects.consume(code);\n      return schemeInsideOrEmailAtext;\n    }\n    size = 0;\n    return emailAtext(code);\n  }\n\n  /**\n   * After protocol, in URL.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function urlInside(code) {\n    if (code === 62) {\n      effects.exit(\"autolinkProtocol\");\n      effects.enter(\"autolinkMarker\");\n      effects.consume(code);\n      effects.exit(\"autolinkMarker\");\n      effects.exit(\"autolink\");\n      return ok;\n    }\n\n    // ASCII control, space, or `<`.\n    if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return urlInside;\n  }\n\n  /**\n   * In email atext.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtext(code) {\n    if (code === 64) {\n      effects.consume(code);\n      return emailAtSignOrDot;\n    }\n    if (asciiAtext(code)) {\n      effects.consume(code);\n      return emailAtext;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In label, after at-sign or dot.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                 ^       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtSignOrDot(code) {\n    return asciiAlphanumeric(code) ? emailLabel(code) : nok(code);\n  }\n\n  /**\n   * In label, where `.` and `>` are allowed.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailLabel(code) {\n    if (code === 46) {\n      effects.consume(code);\n      size = 0;\n      return emailAtSignOrDot;\n    }\n    if (code === 62) {\n      // Exit, then change the token type.\n      effects.exit(\"autolinkProtocol\").type = \"autolinkEmail\";\n      effects.enter(\"autolinkMarker\");\n      effects.consume(code);\n      effects.exit(\"autolinkMarker\");\n      effects.exit(\"autolink\");\n      return ok;\n    }\n    return emailValue(code);\n  }\n\n  /**\n   * In label, where `.` and `>` are *not* allowed.\n   *\n   * Though, this is also used in `emailLabel` to parse other values.\n   *\n   * ```markdown\n   * > | a<user.name@ex-ample.com>b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailValue(code) {\n    // ASCII alphanumeric or `-`.\n    if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n      const next = code === 45 ? emailValue : emailLabel;\n      effects.consume(code);\n      return next;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blankLine = {\n  partial: true,\n  tokenize: tokenizeBlankLine\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of blank line.\n   *\n   * > 👉 **Note**: `␠` represents a space character.\n   *\n   * ```markdown\n   * > | ␠␠␊\n   *     ^\n   * > | ␊\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    return markdownSpace(code) ? factorySpace(effects, after, \"linePrefix\")(code) : after(code);\n  }\n\n  /**\n   * At eof/eol, after optional whitespace.\n   *\n   * > 👉 **Note**: `␠` represents a space character.\n   *\n   * ```markdown\n   * > | ␠␠␊\n   *       ^\n   * > | ␊\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Exiter,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blockQuote = {\n  continuation: {\n    tokenize: tokenizeBlockQuoteContinuation\n  },\n  exit,\n  name: 'blockQuote',\n  tokenize: tokenizeBlockQuoteStart\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of block quote.\n   *\n   * ```markdown\n   * > | > a\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 62) {\n      const state = self.containerState;\n      if (!state.open) {\n        effects.enter(\"blockQuote\", {\n          _container: true\n        });\n        state.open = true;\n      }\n      effects.enter(\"blockQuotePrefix\");\n      effects.enter(\"blockQuoteMarker\");\n      effects.consume(code);\n      effects.exit(\"blockQuoteMarker\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `>`, before optional whitespace.\n   *\n   * ```markdown\n   * > | > a\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (markdownSpace(code)) {\n      effects.enter(\"blockQuotePrefixWhitespace\");\n      effects.consume(code);\n      effects.exit(\"blockQuotePrefixWhitespace\");\n      effects.exit(\"blockQuotePrefix\");\n      return ok;\n    }\n    effects.exit(\"blockQuotePrefix\");\n    return ok(code);\n  }\n}\n\n/**\n * Start of block quote continuation.\n *\n * ```markdown\n *   | > a\n * > | > b\n *     ^\n * ```\n *\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n  const self = this;\n  return contStart;\n\n  /**\n   * Start of block quote continuation.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contStart(code) {\n    if (markdownSpace(code)) {\n      // Always populated by defaults.\n\n      return factorySpace(effects, contBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n    }\n    return contBefore(code);\n  }\n\n  /**\n   * At `>`, after optional whitespace.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contBefore(code) {\n    return effects.attempt(blockQuote, ok, nok)(code);\n  }\n}\n\n/** @type {Exiter} */\nfunction exit(effects) {\n  effects.exit(\"blockQuote\");\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiPunctuation } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterEscape = {\n  name: 'characterEscape',\n  tokenize: tokenizeCharacterEscape\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of character escape.\n   *\n   * ```markdown\n   * > | a\\*b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"characterEscape\");\n    effects.enter(\"escapeMarker\");\n    effects.consume(code);\n    effects.exit(\"escapeMarker\");\n    return inside;\n  }\n\n  /**\n   * After `\\`, at punctuation.\n   *\n   * ```markdown\n   * > | a\\*b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    // ASCII punctuation.\n    if (asciiPunctuation(code)) {\n      effects.enter(\"characterEscapeValue\");\n      effects.consume(code);\n      effects.exit(\"characterEscapeValue\");\n      effects.exit(\"characterEscape\");\n      return ok;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { asciiAlphanumeric, asciiDigit, asciiHexDigit } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterReference = {\n  name: 'characterReference',\n  tokenize: tokenizeCharacterReference\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n  const self = this;\n  let size = 0;\n  /** @type {number} */\n  let max;\n  /** @type {(code: Code) => boolean} */\n  let test;\n  return start;\n\n  /**\n   * Start of character reference.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *      ^\n   * > | a&#123;b\n   *      ^\n   * > | a&#x9;b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"characterReference\");\n    effects.enter(\"characterReferenceMarker\");\n    effects.consume(code);\n    effects.exit(\"characterReferenceMarker\");\n    return open;\n  }\n\n  /**\n   * After `&`, at `#` for numeric references or alphanumeric for named\n   * references.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^\n   * > | a&#123;b\n   *       ^\n   * > | a&#x9;b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 35) {\n      effects.enter(\"characterReferenceMarkerNumeric\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarkerNumeric\");\n      return numeric;\n    }\n    effects.enter(\"characterReferenceValue\");\n    max = 31;\n    test = asciiAlphanumeric;\n    return value(code);\n  }\n\n  /**\n   * After `#`, at `x` for hexadecimals or digit for decimals.\n   *\n   * ```markdown\n   * > | a&#123;b\n   *        ^\n   * > | a&#x9;b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function numeric(code) {\n    if (code === 88 || code === 120) {\n      effects.enter(\"characterReferenceMarkerHexadecimal\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarkerHexadecimal\");\n      effects.enter(\"characterReferenceValue\");\n      max = 6;\n      test = asciiHexDigit;\n      return value;\n    }\n    effects.enter(\"characterReferenceValue\");\n    max = 7;\n    test = asciiDigit;\n    return value(code);\n  }\n\n  /**\n   * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n   *\n   * The character reference kind defines what and how many characters are\n   * allowed.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^^^\n   * > | a&#123;b\n   *        ^^^\n   * > | a&#x9;b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function value(code) {\n    if (code === 59 && size) {\n      const token = effects.exit(\"characterReferenceValue\");\n      if (test === asciiAlphanumeric && !decodeNamedCharacterReference(self.sliceSerialize(token))) {\n        return nok(code);\n      }\n\n      // To do: `markdown-rs` uses a different name:\n      // `CharacterReferenceMarkerSemi`.\n      effects.enter(\"characterReferenceMarker\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarker\");\n      effects.exit(\"characterReference\");\n      return ok;\n    }\n    if (test(code) && size++ < max) {\n      effects.consume(code);\n      return value;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nconst nonLazyContinuation = {\n  partial: true,\n  tokenize: tokenizeNonLazyContinuation\n};\n\n/** @type {Construct} */\nexport const codeFenced = {\n  concrete: true,\n  name: 'codeFenced',\n  tokenize: tokenizeCodeFenced\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n  const self = this;\n  /** @type {Construct} */\n  const closeStart = {\n    partial: true,\n    tokenize: tokenizeCloseStart\n  };\n  let initialPrefix = 0;\n  let sizeOpen = 0;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of code.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse whitespace like `markdown-rs`.\n    return beforeSequenceOpen(code);\n  }\n\n  /**\n   * In opening fence, after prefix, at sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeSequenceOpen(code) {\n    const tail = self.events[self.events.length - 1];\n    initialPrefix = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n    marker = code;\n    effects.enter(\"codeFenced\");\n    effects.enter(\"codeFencedFence\");\n    effects.enter(\"codeFencedFenceSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening fence sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *      ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === marker) {\n      sizeOpen++;\n      effects.consume(code);\n      return sequenceOpen;\n    }\n    if (sizeOpen < 3) {\n      return nok(code);\n    }\n    effects.exit(\"codeFencedFenceSequence\");\n    return markdownSpace(code) ? factorySpace(effects, infoBefore, \"whitespace\")(code) : infoBefore(code);\n  }\n\n  /**\n   * In opening fence, after the sequence (and optional whitespace), before info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function infoBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFencedFence\");\n      return self.interrupt ? ok(code) : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n    }\n    effects.enter(\"codeFencedFenceInfo\");\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return info(code);\n  }\n\n  /**\n   * In info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function info(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceInfo\");\n      return infoBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceInfo\");\n      return factorySpace(effects, metaBefore, \"whitespace\")(code);\n    }\n    if (code === 96 && code === marker) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return info;\n  }\n\n  /**\n   * In opening fence, after info and whitespace, before meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function metaBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return infoBefore(code);\n    }\n    effects.enter(\"codeFencedFenceMeta\");\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return meta(code);\n  }\n\n  /**\n   * In meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function meta(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceMeta\");\n      return infoBefore(code);\n    }\n    if (code === 96 && code === marker) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return meta;\n  }\n\n  /**\n   * At eol/eof in code, before a non-lazy closing fence or content.\n   *\n   * ```markdown\n   * > | ~~~js\n   *          ^\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function atNonLazyBreak(code) {\n    return effects.attempt(closeStart, after, contentBefore)(code);\n  }\n\n  /**\n   * Before code content, not a closing fence, at eol.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentBefore(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return contentStart;\n  }\n\n  /**\n   * Before code content, not a closing fence.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentStart(code) {\n    return initialPrefix > 0 && markdownSpace(code) ? factorySpace(effects, beforeContentChunk, \"linePrefix\", initialPrefix + 1)(code) : beforeContentChunk(code);\n  }\n\n  /**\n   * Before code content, after optional prefix.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeContentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n    }\n    effects.enter(\"codeFlowValue\");\n    return contentChunk(code);\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^^^^^^^^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFlowValue\");\n      return beforeContentChunk(code);\n    }\n    effects.consume(code);\n    return contentChunk;\n  }\n\n  /**\n   * After code.\n   *\n   * ```markdown\n   *   | ~~~js\n   *   | alert(1)\n   * > | ~~~\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    effects.exit(\"codeFenced\");\n    return ok(code);\n  }\n\n  /**\n   * @this {TokenizeContext}\n   *   Context.\n   * @type {Tokenizer}\n   */\n  function tokenizeCloseStart(effects, ok, nok) {\n    let size = 0;\n    return startBefore;\n\n    /**\n     *\n     *\n     * @type {State}\n     */\n    function startBefore(code) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return start;\n    }\n\n    /**\n     * Before closing fence, at optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function start(code) {\n      // Always populated by defaults.\n\n      // To do: `enter` here or in next state?\n      effects.enter(\"codeFencedFence\");\n      return markdownSpace(code) ? factorySpace(effects, beforeSequenceClose, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : beforeSequenceClose(code);\n    }\n\n    /**\n     * In closing fence, after optional whitespace, at sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function beforeSequenceClose(code) {\n      if (code === marker) {\n        effects.enter(\"codeFencedFenceSequence\");\n        return sequenceClose(code);\n      }\n      return nok(code);\n    }\n\n    /**\n     * In closing fence sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceClose(code) {\n      if (code === marker) {\n        size++;\n        effects.consume(code);\n        return sequenceClose;\n      }\n      if (size >= sizeOpen) {\n        effects.exit(\"codeFencedFenceSequence\");\n        return markdownSpace(code) ? factorySpace(effects, sequenceCloseAfter, \"whitespace\")(code) : sequenceCloseAfter(code);\n      }\n      return nok(code);\n    }\n\n    /**\n     * After closing fence sequence, after optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *        ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceCloseAfter(code) {\n      if (code === null || markdownLineEnding(code)) {\n        effects.exit(\"codeFencedFence\");\n        return ok(code);\n      }\n      return nok(code);\n    }\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return lineStart;\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function lineStart(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeIndented = {\n  name: 'codeIndented',\n  tokenize: tokenizeCodeIndented\n};\n\n/** @type {Construct} */\nconst furtherStart = {\n  partial: true,\n  tokenize: tokenizeFurtherStart\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeIndented(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of code (indented).\n   *\n   * > **Parsing note**: it is not needed to check if this first line is a\n   * > filled line (that it has a non-whitespace character), because blank lines\n   * > are parsed already, so we never run into that.\n   *\n   * ```markdown\n   * > |     aaa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: manually check if interrupting like `markdown-rs`.\n\n    effects.enter(\"codeIndented\");\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? atBreak(code) : nok(code);\n  }\n\n  /**\n   * At a break.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === null) {\n      return after(code);\n    }\n    if (markdownLineEnding(code)) {\n      return effects.attempt(furtherStart, atBreak, after)(code);\n    }\n    effects.enter(\"codeFlowValue\");\n    return inside(code);\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFlowValue\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return inside;\n  }\n\n  /** @type {State} */\n  function after(code) {\n    effects.exit(\"codeIndented\");\n    // To do: allow interrupting like `markdown-rs`.\n    // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeFurtherStart(effects, ok, nok) {\n  const self = this;\n  return furtherStart;\n\n  /**\n   * At eol, trying to parse another indent.\n   *\n   * ```markdown\n   * > |     aaa\n   *            ^\n   *   |     bbb\n   * ```\n   *\n   * @type {State}\n   */\n  function furtherStart(code) {\n    // To do: improve `lazy` / `pierce` handling.\n    // If this is a lazy line, it can’t be code.\n    if (self.parser.lazy[self.now().line]) {\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return furtherStart;\n    }\n\n    // To do: the code here in `micromark-js` is a bit different from\n    // `markdown-rs` because there it can attempt spaces.\n    // We can’t yet.\n    //\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? ok(code) : markdownLineEnding(code) ? furtherStart(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Previous,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeText = {\n  name: 'codeText',\n  previous,\n  resolve: resolveCodeText,\n  tokenize: tokenizeCodeText\n};\n\n// To do: next major: don’t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n  let tailExitIndex = events.length - 4;\n  let headEnterIndex = 3;\n  /** @type {number} */\n  let index;\n  /** @type {number | undefined} */\n  let enter;\n\n  // If we start and end with an EOL or a space.\n  if ((events[headEnterIndex][1].type === \"lineEnding\" || events[headEnterIndex][1].type === 'space') && (events[tailExitIndex][1].type === \"lineEnding\" || events[tailExitIndex][1].type === 'space')) {\n    index = headEnterIndex;\n\n    // And we have data.\n    while (++index < tailExitIndex) {\n      if (events[index][1].type === \"codeTextData\") {\n        // Then we have padding.\n        events[headEnterIndex][1].type = \"codeTextPadding\";\n        events[tailExitIndex][1].type = \"codeTextPadding\";\n        headEnterIndex += 2;\n        tailExitIndex -= 2;\n        break;\n      }\n    }\n  }\n\n  // Merge adjacent spaces and data.\n  index = headEnterIndex - 1;\n  tailExitIndex++;\n  while (++index <= tailExitIndex) {\n    if (enter === undefined) {\n      if (index !== tailExitIndex && events[index][1].type !== \"lineEnding\") {\n        enter = index;\n      }\n    } else if (index === tailExitIndex || events[index][1].type === \"lineEnding\") {\n      events[enter][1].type = \"codeTextData\";\n      if (index !== enter + 2) {\n        events[enter][1].end = events[index - 1][1].end;\n        events.splice(enter + 2, index - enter - 2);\n        tailExitIndex -= index - enter - 2;\n        index = enter + 2;\n      }\n      enter = undefined;\n    }\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Previous}\n */\nfunction previous(code) {\n  // If there is a previous code, there will always be a tail.\n  return code !== 96 || this.events[this.events.length - 1][1].type === \"characterEscape\";\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n  const self = this;\n  let sizeOpen = 0;\n  /** @type {number} */\n  let size;\n  /** @type {Token} */\n  let token;\n  return start;\n\n  /**\n   * Start of code (text).\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * > | \\`a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"codeText\");\n    effects.enter(\"codeTextSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 96) {\n      effects.consume(code);\n      sizeOpen++;\n      return sequenceOpen;\n    }\n    effects.exit(\"codeTextSequence\");\n    return between(code);\n  }\n\n  /**\n   * Between something and something else.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function between(code) {\n    // EOF.\n    if (code === null) {\n      return nok(code);\n    }\n\n    // To do: next major: don’t do spaces in resolve, but when compiling,\n    // like `markdown-rs`.\n    // Tabs don’t work, and virtual spaces don’t make sense.\n    if (code === 32) {\n      effects.enter('space');\n      effects.consume(code);\n      effects.exit('space');\n      return between;\n    }\n\n    // Closing fence? Could also be data.\n    if (code === 96) {\n      token = effects.enter(\"codeTextSequence\");\n      size = 0;\n      return sequenceClose(code);\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return between;\n    }\n\n    // Data.\n    effects.enter(\"codeTextData\");\n    return data(code);\n  }\n\n  /**\n   * In data.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 32 || code === 96 || markdownLineEnding(code)) {\n      effects.exit(\"codeTextData\");\n      return between(code);\n    }\n    effects.consume(code);\n    return data;\n  }\n\n  /**\n   * In closing sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceClose(code) {\n    // More.\n    if (code === 96) {\n      effects.consume(code);\n      size++;\n      return sequenceClose;\n    }\n\n    // Done!\n    if (size === sizeOpen) {\n      effects.exit(\"codeTextSequence\");\n      effects.exit(\"codeText\");\n      return ok(code);\n    }\n\n    // More or less accents: mark as data.\n    token.type = \"codeTextData\";\n    return data(code);\n  }\n}","/**\n * Some of the internal operations of micromark do lots of editing\n * operations on very large arrays. This runs into problems with two\n * properties of most circa-2020 JavaScript interpreters:\n *\n *  - Array-length modifications at the high end of an array (push/pop) are\n *    expected to be common and are implemented in (amortized) time\n *    proportional to the number of elements added or removed, whereas\n *    other operations (shift/unshift and splice) are much less efficient.\n *  - Function arguments are passed on the stack, so adding tens of thousands\n *    of elements to an array with `arr.push(...newElements)` will frequently\n *    cause stack overflows. (see <https://stackoverflow.com/questions/22123769/rangeerror-maximum-call-stack-size-exceeded-why>)\n *\n * SpliceBuffers are an implementation of gap buffers, which are a\n * generalization of the \"queue made of two stacks\" idea. The splice buffer\n * maintains a cursor, and moving the cursor has cost proportional to the\n * distance the cursor moves, but inserting, deleting, or splicing in\n * new information at the cursor is as efficient as the push/pop operation.\n * This allows for an efficient sequence of splices (or pushes, pops, shifts,\n * or unshifts) as long such edits happen at the same part of the array or\n * generally sweep through the array from the beginning to the end.\n *\n * The interface for splice buffers also supports large numbers of inputs by\n * passing a single array argument rather passing multiple arguments on the\n * function call stack.\n *\n * @template T\n *   Item type.\n */\nexport class SpliceBuffer {\n  /**\n   * @param {ReadonlyArray<T> | null | undefined} [initial]\n   *   Initial items (optional).\n   * @returns\n   *   Splice buffer.\n   */\n  constructor(initial) {\n    /** @type {Array<T>} */\n    this.left = initial ? [...initial] : [];\n    /** @type {Array<T>} */\n    this.right = [];\n  }\n\n  /**\n   * Array access;\n   * does not move the cursor.\n   *\n   * @param {number} index\n   *   Index.\n   * @return {T}\n   *   Item.\n   */\n  get(index) {\n    if (index < 0 || index >= this.left.length + this.right.length) {\n      throw new RangeError('Cannot access index `' + index + '` in a splice buffer of size `' + (this.left.length + this.right.length) + '`');\n    }\n    if (index < this.left.length) return this.left[index];\n    return this.right[this.right.length - index + this.left.length - 1];\n  }\n\n  /**\n   * The length of the splice buffer, one greater than the largest index in the\n   * array.\n   */\n  get length() {\n    return this.left.length + this.right.length;\n  }\n\n  /**\n   * Remove and return `list[0]`;\n   * moves the cursor to `0`.\n   *\n   * @returns {T | undefined}\n   *   Item, optional.\n   */\n  shift() {\n    this.setCursor(0);\n    return this.right.pop();\n  }\n\n  /**\n   * Slice the buffer to get an array;\n   * does not move the cursor.\n   *\n   * @param {number} start\n   *   Start.\n   * @param {number | null | undefined} [end]\n   *   End (optional).\n   * @returns {Array<T>}\n   *   Array of items.\n   */\n  slice(start, end) {\n    /** @type {number} */\n    const stop = end === null || end === undefined ? Number.POSITIVE_INFINITY : end;\n    if (stop < this.left.length) {\n      return this.left.slice(start, stop);\n    }\n    if (start > this.left.length) {\n      return this.right.slice(this.right.length - stop + this.left.length, this.right.length - start + this.left.length).reverse();\n    }\n    return this.left.slice(start).concat(this.right.slice(this.right.length - stop + this.left.length).reverse());\n  }\n\n  /**\n   * Mimics the behavior of Array.prototype.splice() except for the change of\n   * interface necessary to avoid segfaults when patching in very large arrays.\n   *\n   * This operation moves cursor is moved to `start` and results in the cursor\n   * placed after any inserted items.\n   *\n   * @param {number} start\n   *   Start;\n   *   zero-based index at which to start changing the array;\n   *   negative numbers count backwards from the end of the array and values\n   *   that are out-of bounds are clamped to the appropriate end of the array.\n   * @param {number | null | undefined} [deleteCount=0]\n   *   Delete count (default: `0`);\n   *   maximum number of elements to delete, starting from start.\n   * @param {Array<T> | null | undefined} [items=[]]\n   *   Items to include in place of the deleted items (default: `[]`).\n   * @return {Array<T>}\n   *   Any removed items.\n   */\n  splice(start, deleteCount, items) {\n    /** @type {number} */\n    const count = deleteCount || 0;\n    this.setCursor(Math.trunc(start));\n    const removed = this.right.splice(this.right.length - count, Number.POSITIVE_INFINITY);\n    if (items) chunkedPush(this.left, items);\n    return removed.reverse();\n  }\n\n  /**\n   * Remove and return the highest-numbered item in the array, so\n   * `list[list.length - 1]`;\n   * Moves the cursor to `length`.\n   *\n   * @returns {T | undefined}\n   *   Item, optional.\n   */\n  pop() {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    return this.left.pop();\n  }\n\n  /**\n   * Inserts a single item to the high-numbered side of the array;\n   * moves the cursor to `length`.\n   *\n   * @param {T} item\n   *   Item.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  push(item) {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    this.left.push(item);\n  }\n\n  /**\n   * Inserts many items to the high-numbered side of the array.\n   * Moves the cursor to `length`.\n   *\n   * @param {Array<T>} items\n   *   Items.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  pushMany(items) {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    chunkedPush(this.left, items);\n  }\n\n  /**\n   * Inserts a single item to the low-numbered side of the array;\n   * Moves the cursor to `0`.\n   *\n   * @param {T} item\n   *   Item.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  unshift(item) {\n    this.setCursor(0);\n    this.right.push(item);\n  }\n\n  /**\n   * Inserts many items to the low-numbered side of the array;\n   * moves the cursor to `0`.\n   *\n   * @param {Array<T>} items\n   *   Items.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  unshiftMany(items) {\n    this.setCursor(0);\n    chunkedPush(this.right, items.reverse());\n  }\n\n  /**\n   * Move the cursor to a specific position in the array. Requires\n   * time proportional to the distance moved.\n   *\n   * If `n < 0`, the cursor will end up at the beginning.\n   * If `n > length`, the cursor will end up at the end.\n   *\n   * @param {number} n\n   *   Position.\n   * @return {undefined}\n   *   Nothing.\n   */\n  setCursor(n) {\n    if (n === this.left.length || n > this.left.length && this.right.length === 0 || n < 0 && this.left.length === 0) return;\n    if (n < this.left.length) {\n      // Move cursor to the this.left\n      const removed = this.left.splice(n, Number.POSITIVE_INFINITY);\n      chunkedPush(this.right, removed.reverse());\n    } else {\n      // Move cursor to the this.right\n      const removed = this.right.splice(this.left.length + this.right.length - n, Number.POSITIVE_INFINITY);\n      chunkedPush(this.left, removed.reverse());\n    }\n  }\n}\n\n/**\n * Avoid stack overflow by pushing items onto the stack in segments\n *\n * @template T\n *   Item type.\n * @param {Array<T>} list\n *   List to inject into.\n * @param {ReadonlyArray<T>} right\n *   Items to inject.\n * @return {undefined}\n *   Nothing.\n */\nfunction chunkedPush(list, right) {\n  /** @type {number} */\n  let chunkStart = 0;\n  if (right.length < 10000) {\n    list.push(...right);\n  } else {\n    while (chunkStart < right.length) {\n      list.push(...right.slice(chunkStart, chunkStart + 10000));\n      chunkStart += 10000;\n    }\n  }\n}","/**\n * @import {Chunk, Event, Token} from 'micromark-util-types'\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { SpliceBuffer } from './lib/splice-buffer.js';\n\n// Hidden API exposed for testing.\nexport { SpliceBuffer } from './lib/splice-buffer.js';\n\n/**\n * Tokenize subcontent.\n *\n * @param {Array<Event>} eventsArray\n *   List of events.\n * @returns {boolean}\n *   Whether subtokens were found.\n */\n// eslint-disable-next-line complexity\nexport function subtokenize(eventsArray) {\n  /** @type {Record<string, number>} */\n  const jumps = {};\n  let index = -1;\n  /** @type {Event} */\n  let event;\n  /** @type {number | undefined} */\n  let lineIndex;\n  /** @type {number} */\n  let otherIndex;\n  /** @type {Event} */\n  let otherEvent;\n  /** @type {Array<Event>} */\n  let parameters;\n  /** @type {Array<Event>} */\n  let subevents;\n  /** @type {boolean | undefined} */\n  let more;\n  const events = new SpliceBuffer(eventsArray);\n  while (++index < events.length) {\n    while (index in jumps) {\n      index = jumps[index];\n    }\n    event = events.get(index);\n\n    // Add a hook for the GFM tasklist extension, which needs to know if text\n    // is in the first content of a list item.\n    if (index && event[1].type === \"chunkFlow\" && events.get(index - 1)[1].type === \"listItemPrefix\") {\n      subevents = event[1]._tokenizer.events;\n      otherIndex = 0;\n      if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"lineEndingBlank\") {\n        otherIndex += 2;\n      }\n      if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"content\") {\n        while (++otherIndex < subevents.length) {\n          if (subevents[otherIndex][1].type === \"content\") {\n            break;\n          }\n          if (subevents[otherIndex][1].type === \"chunkText\") {\n            subevents[otherIndex][1]._isInFirstContentOfListItem = true;\n            otherIndex++;\n          }\n        }\n      }\n    }\n\n    // Enter.\n    if (event[0] === 'enter') {\n      if (event[1].contentType) {\n        Object.assign(jumps, subcontent(events, index));\n        index = jumps[index];\n        more = true;\n      }\n    }\n    // Exit.\n    else if (event[1]._container) {\n      otherIndex = index;\n      lineIndex = undefined;\n      while (otherIndex--) {\n        otherEvent = events.get(otherIndex);\n        if (otherEvent[1].type === \"lineEnding\" || otherEvent[1].type === \"lineEndingBlank\") {\n          if (otherEvent[0] === 'enter') {\n            if (lineIndex) {\n              events.get(lineIndex)[1].type = \"lineEndingBlank\";\n            }\n            otherEvent[1].type = \"lineEnding\";\n            lineIndex = otherIndex;\n          }\n        } else if (otherEvent[1].type === \"linePrefix\" || otherEvent[1].type === \"listItemIndent\") {\n          // Move past.\n        } else {\n          break;\n        }\n      }\n      if (lineIndex) {\n        // Fix position.\n        event[1].end = {\n          ...events.get(lineIndex)[1].start\n        };\n\n        // Switch container exit w/ line endings.\n        parameters = events.slice(lineIndex, index);\n        parameters.unshift(event);\n        events.splice(lineIndex, index - lineIndex + 1, parameters);\n      }\n    }\n  }\n\n  // The changes to the `events` buffer must be copied back into the eventsArray\n  splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0));\n  return !more;\n}\n\n/**\n * Tokenize embedded tokens.\n *\n * @param {SpliceBuffer<Event>} events\n *   Events.\n * @param {number} eventIndex\n *   Index.\n * @returns {Record<string, number>}\n *   Gaps.\n */\nfunction subcontent(events, eventIndex) {\n  const token = events.get(eventIndex)[1];\n  const context = events.get(eventIndex)[2];\n  let startPosition = eventIndex - 1;\n  /** @type {Array<number>} */\n  const startPositions = [];\n  let tokenizer = token._tokenizer;\n  if (!tokenizer) {\n    tokenizer = context.parser[token.contentType](token.start);\n    if (token._contentTypeTextTrailing) {\n      tokenizer._contentTypeTextTrailing = true;\n    }\n  }\n  const childEvents = tokenizer.events;\n  /** @type {Array<[number, number]>} */\n  const jumps = [];\n  /** @type {Record<string, number>} */\n  const gaps = {};\n  /** @type {Array<Chunk>} */\n  let stream;\n  /** @type {Token | undefined} */\n  let previous;\n  let index = -1;\n  /** @type {Token | undefined} */\n  let current = token;\n  let adjust = 0;\n  let start = 0;\n  const breaks = [start];\n\n  // Loop forward through the linked tokens to pass them in order to the\n  // subtokenizer.\n  while (current) {\n    // Find the position of the event for this token.\n    while (events.get(++startPosition)[1] !== current) {\n      // Empty.\n    }\n    startPositions.push(startPosition);\n    if (!current._tokenizer) {\n      stream = context.sliceStream(current);\n      if (!current.next) {\n        stream.push(null);\n      }\n      if (previous) {\n        tokenizer.defineSkip(current.start);\n      }\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = true;\n      }\n      tokenizer.write(stream);\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = undefined;\n      }\n    }\n\n    // Unravel the next token.\n    previous = current;\n    current = current.next;\n  }\n\n  // Now, loop back through all events (and linked tokens), to figure out which\n  // parts belong where.\n  current = token;\n  while (++index < childEvents.length) {\n    if (\n    // Find a void token that includes a break.\n    childEvents[index][0] === 'exit' && childEvents[index - 1][0] === 'enter' && childEvents[index][1].type === childEvents[index - 1][1].type && childEvents[index][1].start.line !== childEvents[index][1].end.line) {\n      start = index + 1;\n      breaks.push(start);\n      // Help GC.\n      current._tokenizer = undefined;\n      current.previous = undefined;\n      current = current.next;\n    }\n  }\n\n  // Help GC.\n  tokenizer.events = [];\n\n  // If there’s one more token (which is the cases for lines that end in an\n  // EOF), that’s perfect: the last point we found starts it.\n  // If there isn’t then make sure any remaining content is added to it.\n  if (current) {\n    // Help GC.\n    current._tokenizer = undefined;\n    current.previous = undefined;\n  } else {\n    breaks.pop();\n  }\n\n  // Now splice the events from the subtokenizer into the current events,\n  // moving back to front so that splice indices aren’t affected.\n  index = breaks.length;\n  while (index--) {\n    const slice = childEvents.slice(breaks[index], breaks[index + 1]);\n    const start = startPositions.pop();\n    jumps.push([start, start + slice.length - 1]);\n    events.splice(start, 2, slice);\n  }\n  jumps.reverse();\n  index = -1;\n  while (++index < jumps.length) {\n    gaps[adjust + jumps[index][0]] = adjust + jumps[index][1];\n    adjust += jumps[index][1] - jumps[index][0] - 1;\n  }\n  return gaps;\n}","/**\n * @import {\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { subtokenize } from 'micromark-util-subtokenize';\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n  resolve: resolveContent,\n  tokenize: tokenizeContent\n};\n\n/** @type {Construct} */\nconst continuationConstruct = {\n  partial: true,\n  tokenize: tokenizeContinuation\n};\n\n/**\n * Content is transparent: it’s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\nfunction resolveContent(events) {\n  subtokenize(events);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeContent(effects, ok) {\n  /** @type {Token | undefined} */\n  let previous;\n  return chunkStart;\n\n  /**\n   * Before a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkStart(code) {\n    effects.enter(\"content\");\n    previous = effects.enter(\"chunkContent\", {\n      contentType: \"content\"\n    });\n    return chunkInside(code);\n  }\n\n  /**\n   * In a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkInside(code) {\n    if (code === null) {\n      return contentEnd(code);\n    }\n\n    // To do: in `markdown-rs`, each line is parsed on its own, and everything\n    // is stitched together resolving.\n    if (markdownLineEnding(code)) {\n      return effects.check(continuationConstruct, contentContinue, contentEnd)(code);\n    }\n\n    // Data.\n    effects.consume(code);\n    return chunkInside;\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentEnd(code) {\n    effects.exit(\"chunkContent\");\n    effects.exit(\"content\");\n    return ok(code);\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentContinue(code) {\n    effects.consume(code);\n    effects.exit(\"chunkContent\");\n    previous.next = effects.enter(\"chunkContent\", {\n      contentType: \"content\",\n      previous\n    });\n    previous = previous.next;\n    return chunkInside;\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeContinuation(effects, ok, nok) {\n  const self = this;\n  return startLookahead;\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function startLookahead(code) {\n    effects.exit(\"chunkContent\");\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, prefixed, \"linePrefix\");\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function prefixed(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code);\n    }\n\n    // Always populated by defaults.\n\n    const tail = self.events[self.events.length - 1];\n    if (!self.parser.constructs.disable.null.includes('codeIndented') && tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4) {\n      return ok(code);\n    }\n    return effects.interrupt(self.parser.constructs.flow, nok, ok)(code);\n  }\n}","/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { asciiControl, markdownLineEndingOrSpace, markdownLineEnding } from 'micromark-util-character';\n/**\n * Parse destinations.\n *\n * ###### Examples\n *\n * ```markdown\n * <a>\n * <a\\>b>\n * <a b>\n * <a)>\n * a\n * a\\)b\n * a(b)c\n * a(b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type for whole (`<a>` or `b`).\n * @param {TokenType} literalType\n *   Type when enclosed (`<a>`).\n * @param {TokenType} literalMarkerType\n *   Type for enclosing (`<` and `>`).\n * @param {TokenType} rawType\n *   Type when not enclosed (`b`).\n * @param {TokenType} stringType\n *   Type for the value (`a` or `b`).\n * @param {number | undefined} [max=Infinity]\n *   Depth of nested parens (inclusive).\n * @returns {State}\n *   Start state.\n */\nexport function factoryDestination(effects, ok, nok, type, literalType, literalMarkerType, rawType, stringType, max) {\n  const limit = max || Number.POSITIVE_INFINITY;\n  let balance = 0;\n  return start;\n\n  /**\n   * Start of destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *     ^\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 60) {\n      effects.enter(type);\n      effects.enter(literalType);\n      effects.enter(literalMarkerType);\n      effects.consume(code);\n      effects.exit(literalMarkerType);\n      return enclosedBefore;\n    }\n\n    // ASCII control, space, closing paren.\n    if (code === null || code === 32 || code === 41 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.enter(type);\n    effects.enter(rawType);\n    effects.enter(stringType);\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return raw(code);\n  }\n\n  /**\n   * After `<`, at an enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedBefore(code) {\n    if (code === 62) {\n      effects.enter(literalMarkerType);\n      effects.consume(code);\n      effects.exit(literalMarkerType);\n      effects.exit(literalType);\n      effects.exit(type);\n      return ok;\n    }\n    effects.enter(stringType);\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return enclosed(code);\n  }\n\n  /**\n   * In enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosed(code) {\n    if (code === 62) {\n      effects.exit(\"chunkString\");\n      effects.exit(stringType);\n      return enclosedBefore(code);\n    }\n    if (code === null || code === 60 || markdownLineEnding(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return code === 92 ? enclosedEscape : enclosed;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | <a\\*a>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedEscape(code) {\n    if (code === 60 || code === 62 || code === 92) {\n      effects.consume(code);\n      return enclosed;\n    }\n    return enclosed(code);\n  }\n\n  /**\n   * In raw destination.\n   *\n   * ```markdown\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function raw(code) {\n    if (!balance && (code === null || code === 41 || markdownLineEndingOrSpace(code))) {\n      effects.exit(\"chunkString\");\n      effects.exit(stringType);\n      effects.exit(rawType);\n      effects.exit(type);\n      return ok(code);\n    }\n    if (balance < limit && code === 40) {\n      effects.consume(code);\n      balance++;\n      return raw;\n    }\n    if (code === 41) {\n      effects.consume(code);\n      balance--;\n      return raw;\n    }\n\n    // ASCII control (but *not* `\\0`) and space and `(`.\n    // Note: in `markdown-rs`, `\\0` exists in codes, in `micromark-js` it\n    // doesn’t.\n    if (code === null || code === 32 || code === 40 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return code === 92 ? rawEscape : raw;\n  }\n\n  /**\n   * After `\\`, at special character.\n   *\n   * ```markdown\n   * > | a\\*a\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function rawEscape(code) {\n    if (code === 40 || code === 41 || code === 92) {\n      effects.consume(code);\n      return raw;\n    }\n    return raw(code);\n  }\n}","/**\n * @import {\n *   Effects,\n *   State,\n *   TokenizeContext,\n *   TokenType\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse labels.\n *\n * > 👉 **Note**: labels in markdown are capped at 999 characters in the string.\n *\n * ###### Examples\n *\n * ```markdown\n * [a]\n * [a\n * b]\n * [a\\]b]\n * ```\n *\n * @this {TokenizeContext}\n *   Tokenize context.\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole label (`[a]`).\n * @param {TokenType} markerType\n *   Type for the markers (`[` and `]`).\n * @param {TokenType} stringType\n *   Type for the identifier (`a`).\n * @returns {State}\n *   Start state.\n */\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n  const self = this;\n  let size = 0;\n  /** @type {boolean} */\n  let seen;\n  return start;\n\n  /**\n   * Start of label.\n   *\n   * ```markdown\n   * > | [a]\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(type);\n    effects.enter(markerType);\n    effects.consume(code);\n    effects.exit(markerType);\n    effects.enter(stringType);\n    return atBreak;\n  }\n\n  /**\n   * In label, at something, before something else.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (size > 999 || code === null || code === 91 || code === 93 && !seen ||\n    // To do: remove in the future once we’ve switched from\n    // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n    // which doesn’t need this.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    code === 94 && !size && '_hiddenFootnoteSupport' in self.parser.constructs) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.exit(stringType);\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      effects.exit(type);\n      return ok;\n    }\n\n    // To do: indent? Link chunks and EOLs together?\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return atBreak;\n    }\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return labelInside(code);\n  }\n\n  /**\n   * In label, in text.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelInside(code) {\n    if (code === null || code === 91 || code === 93 || markdownLineEnding(code) || size++ > 999) {\n      effects.exit(\"chunkString\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    if (!seen) seen = !markdownSpace(code);\n    return code === 92 ? labelEscape : labelInside;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | [a\\*a]\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code);\n      size++;\n      return labelInside;\n    }\n    return labelInside(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Effects,\n *   State,\n *   TokenType\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/**\n * Parse titles.\n *\n * ###### Examples\n *\n * ```markdown\n * \"a\"\n * 'b'\n * (c)\n * \"a\n * b\"\n * 'a\n *     b'\n * (a\\)b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole title (`\"a\"`, `'b'`, `(c)`).\n * @param {TokenType} markerType\n *   Type for the markers (`\"`, `'`, `(`, and `)`).\n * @param {TokenType} stringType\n *   Type for the value (`a`).\n * @returns {State}\n *   Start state.\n */\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of title.\n   *\n   * ```markdown\n   * > | \"a\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      effects.enter(type);\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      marker = code === 40 ? 41 : code;\n      return begin;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After opening marker.\n   *\n   * This is also used at the closing marker.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function begin(code) {\n    if (code === marker) {\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      effects.exit(type);\n      return ok;\n    }\n    effects.enter(stringType);\n    return atBreak(code);\n  }\n\n  /**\n   * At something, before something else.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.exit(stringType);\n      return begin(marker);\n    }\n    if (code === null) {\n      return nok(code);\n    }\n\n    // Note: blank lines can’t exist in content.\n    if (markdownLineEnding(code)) {\n      // To do: use `space_or_tab_eol_with_options`, connect.\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return factorySpace(effects, atBreak, \"linePrefix\");\n    }\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return inside(code);\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker || code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return code === 92 ? escape : inside;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | \"a\\*b\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function escape(code) {\n    if (code === marker || code === 92) {\n      effects.consume(code);\n      return inside;\n    }\n    return inside(code);\n  }\n}","/**\n * @import {Effects, State} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   line endings or spaces in markdown are often optional, in which case this\n *     factory can be used and `ok` will be switched to whether spaces were found\n *     or not\n * *   one line ending or space can be detected with\n *     `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace`\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @returns {State}\n *   Start state.\n */\nexport function factoryWhitespace(effects, ok) {\n  /** @type {boolean} */\n  let seen;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      seen = true;\n      return start;\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, start, seen ? \"linePrefix\" : \"lineSuffix\")(code);\n    }\n    return ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factorySpace } from 'micromark-factory-space';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\n/** @type {Construct} */\nexport const definition = {\n  name: 'definition',\n  tokenize: tokenizeDefinition\n};\n\n/** @type {Construct} */\nconst titleBefore = {\n  partial: true,\n  tokenize: tokenizeTitleBefore\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeDefinition(effects, ok, nok) {\n  const self = this;\n  /** @type {string} */\n  let identifier;\n  return start;\n\n  /**\n   * At start of a definition.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // Do not interrupt paragraphs (but do follow definitions).\n    // To do: do `interrupt` the way `markdown-rs` does.\n    // To do: parse whitespace the way `markdown-rs` does.\n    effects.enter(\"definition\");\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at `[`.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    // To do: parse whitespace the way `markdown-rs` does.\n\n    return factoryLabel.call(self, effects, labelAfter,\n    // Note: we don’t need to reset the way `markdown-rs` does.\n    nok, \"definitionLabel\", \"definitionLabelMarker\", \"definitionLabelString\")(code);\n  }\n\n  /**\n   * After label.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAfter(code) {\n    identifier = normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1));\n    if (code === 58) {\n      effects.enter(\"definitionMarker\");\n      effects.consume(code);\n      effects.exit(\"definitionMarker\");\n      return markerAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After marker.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function markerAfter(code) {\n    // Note: whitespace is optional.\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, destinationBefore)(code) : destinationBefore(code);\n  }\n\n  /**\n   * Before destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationBefore(code) {\n    return factoryDestination(effects, destinationAfter,\n    // Note: we don’t need to reset the way `markdown-rs` does.\n    nok, \"definitionDestination\", \"definitionDestinationLiteral\", \"definitionDestinationLiteralMarker\", \"definitionDestinationRaw\", \"definitionDestinationString\")(code);\n  }\n\n  /**\n   * After destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationAfter(code) {\n    return effects.attempt(titleBefore, after, after)(code);\n  }\n\n  /**\n   * After definition.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return markdownSpace(code) ? factorySpace(effects, afterWhitespace, \"whitespace\")(code) : afterWhitespace(code);\n  }\n\n  /**\n   * After definition, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterWhitespace(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"definition\");\n\n      // Note: we don’t care about uniqueness.\n      // It’s likely that that doesn’t happen very frequently.\n      // It is more likely that it wastes precious time.\n      self.parser.defined.push(identifier);\n\n      // To do: `markdown-rs` interrupt.\n      // // You’d be interrupting.\n      // tokenizer.interrupt = true\n      return ok(code);\n    }\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeTitleBefore(effects, ok, nok) {\n  return titleBefore;\n\n  /**\n   * After destination, at whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleBefore(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, beforeMarker)(code) : nok(code);\n  }\n\n  /**\n   * At title.\n   *\n   * ```markdown\n   *   | [a]: b\n   * > | \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeMarker(code) {\n    return factoryTitle(effects, titleAfter, nok, \"definitionTitle\", \"definitionTitleMarker\", \"definitionTitleString\")(code);\n  }\n\n  /**\n   * After title.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfter(code) {\n    return markdownSpace(code) ? factorySpace(effects, titleAfterOptionalWhitespace, \"whitespace\")(code) : titleAfterOptionalWhitespace(code);\n  }\n\n  /**\n   * After title, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfterOptionalWhitespace(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const hardBreakEscape = {\n  name: 'hardBreakEscape',\n  tokenize: tokenizeHardBreakEscape\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of a hard break (escape).\n   *\n   * ```markdown\n   * > | a\\\n   *      ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"hardBreakEscape\");\n    effects.consume(code);\n    return after;\n  }\n\n  /**\n   * After `\\`, at eol.\n   *\n   * ```markdown\n   * > | a\\\n   *       ^\n   *   | b\n   * ```\n   *\n   *  @type {State}\n   */\n  function after(code) {\n    if (markdownLineEnding(code)) {\n      effects.exit(\"hardBreakEscape\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {Construct} */\nexport const headingAtx = {\n  name: 'headingAtx',\n  resolve: resolveHeadingAtx,\n  tokenize: tokenizeHeadingAtx\n};\n\n/** @type {Resolver} */\nfunction resolveHeadingAtx(events, context) {\n  let contentEnd = events.length - 2;\n  let contentStart = 3;\n  /** @type {Token} */\n  let content;\n  /** @type {Token} */\n  let text;\n\n  // Prefix whitespace, part of the opening.\n  if (events[contentStart][1].type === \"whitespace\") {\n    contentStart += 2;\n  }\n\n  // Suffix whitespace, part of the closing.\n  if (contentEnd - 2 > contentStart && events[contentEnd][1].type === \"whitespace\") {\n    contentEnd -= 2;\n  }\n  if (events[contentEnd][1].type === \"atxHeadingSequence\" && (contentStart === contentEnd - 1 || contentEnd - 4 > contentStart && events[contentEnd - 2][1].type === \"whitespace\")) {\n    contentEnd -= contentStart + 1 === contentEnd ? 2 : 4;\n  }\n  if (contentEnd > contentStart) {\n    content = {\n      type: \"atxHeadingText\",\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end\n    };\n    text = {\n      type: \"chunkText\",\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end,\n      contentType: \"text\"\n    };\n    splice(events, contentStart, contentEnd - contentStart + 1, [['enter', content, context], ['enter', text, context], ['exit', text, context], ['exit', content, context]]);\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n  let size = 0;\n  return start;\n\n  /**\n   * Start of a heading (atx).\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    effects.enter(\"atxHeading\");\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at `#`.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"atxHeadingSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 35 && size++ < 6) {\n      effects.consume(code);\n      return sequenceOpen;\n    }\n\n    // Always at least one `#`.\n    if (code === null || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"atxHeadingSequence\");\n      return atBreak(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ## aa\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === 35) {\n      effects.enter(\"atxHeadingSequence\");\n      return sequenceFurther(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"atxHeading\");\n      // To do: interrupt like `markdown-rs`.\n      // // Feel free to interrupt.\n      // tokenizer.interrupt = false\n      return ok(code);\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, atBreak, \"whitespace\")(code);\n    }\n\n    // To do: generate `data` tokens, add the `text` token later.\n    // Needs edit map, see: `markdown.rs`.\n    effects.enter(\"atxHeadingText\");\n    return data(code);\n  }\n\n  /**\n   * In further sequence (after whitespace).\n   *\n   * Could be normal “visible” hashes in the heading or a final sequence.\n   *\n   * ```markdown\n   * > | ## aa ##\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceFurther(code) {\n    if (code === 35) {\n      effects.consume(code);\n      return sequenceFurther;\n    }\n    effects.exit(\"atxHeadingSequence\");\n    return atBreak(code);\n  }\n\n  /**\n   * In text.\n   *\n   * ```markdown\n   * > | ## aa\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"atxHeadingText\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return data;\n  }\n}","/**\n * List of lowercase HTML “block” tag names.\n *\n * The list, when parsing HTML (flow), results in more relaxed rules (condition\n * 6).\n * Because they are known blocks, the HTML-like syntax doesn’t have to be\n * strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `search` was added in `CommonMark@0.31`.\n */\nexport const htmlBlockNames = [\n  'address',\n  'article',\n  'aside',\n  'base',\n  'basefont',\n  'blockquote',\n  'body',\n  'caption',\n  'center',\n  'col',\n  'colgroup',\n  'dd',\n  'details',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'frame',\n  'frameset',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hr',\n  'html',\n  'iframe',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'menu',\n  'menuitem',\n  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'search',\n  'section',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n]\n\n/**\n * List of lowercase HTML “raw” tag names.\n *\n * The list, when parsing HTML (flow), results in HTML that can include lines\n * without exiting, until a closing tag also in this list is found (condition\n * 1).\n *\n * This module is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n","/**\n * @import {\n *   Code,\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { htmlBlockNames, htmlRawNames } from 'micromark-util-html-tag-name';\nimport { blankLine } from './blank-line.js';\n\n/** @type {Construct} */\nexport const htmlFlow = {\n  concrete: true,\n  name: 'htmlFlow',\n  resolveTo: resolveToHtmlFlow,\n  tokenize: tokenizeHtmlFlow\n};\n\n/** @type {Construct} */\nconst blankLineBefore = {\n  partial: true,\n  tokenize: tokenizeBlankLineBefore\n};\nconst nonLazyContinuationStart = {\n  partial: true,\n  tokenize: tokenizeNonLazyContinuationStart\n};\n\n/** @type {Resolver} */\nfunction resolveToHtmlFlow(events) {\n  let index = events.length;\n  while (index--) {\n    if (events[index][0] === 'enter' && events[index][1].type === \"htmlFlow\") {\n      break;\n    }\n  }\n  if (index > 1 && events[index - 2][1].type === \"linePrefix\") {\n    // Add the prefix start to the HTML token.\n    events[index][1].start = events[index - 2][1].start;\n    // Add the prefix start to the HTML line token.\n    events[index + 1][1].start = events[index - 2][1].start;\n    // Remove the line prefix.\n    events.splice(index - 2, 2);\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n  const self = this;\n  /** @type {number} */\n  let marker;\n  /** @type {boolean} */\n  let closingTag;\n  /** @type {string} */\n  let buffer;\n  /** @type {number} */\n  let index;\n  /** @type {Code} */\n  let markerB;\n  return start;\n\n  /**\n   * Start of HTML (flow).\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    return before(code);\n  }\n\n  /**\n   * At `<`, after optional whitespace.\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"htmlFlow\");\n    effects.enter(\"htmlFlowData\");\n    effects.consume(code);\n    return open;\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | <x />\n   *      ^\n   * > | <!doctype>\n   *      ^\n   * > | <!--xxx-->\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code);\n      return declarationOpen;\n    }\n    if (code === 47) {\n      effects.consume(code);\n      closingTag = true;\n      return tagCloseStart;\n    }\n    if (code === 63) {\n      effects.consume(code);\n      marker = 3;\n      // To do:\n      // tokenizer.concrete = true\n      // To do: use `markdown-rs` style interrupt.\n      // While we’re in an instruction instead of a declaration, we’re on a `?`\n      // right now, so we do need to search for `>`, similar to declarations.\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      // Always the case.\n      effects.consume(code);\n      buffer = String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *       ^\n   * > | <!--xxx-->\n   *       ^\n   * > | <![CDATA[>&<]]>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code);\n      marker = 2;\n      return commentOpenInside;\n    }\n    if (code === 91) {\n      effects.consume(code);\n      marker = 5;\n      index = 0;\n      return cdataOpenInside;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      marker = 4;\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!-`, inside a comment, at another `-`.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<![`, inside CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *        ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = \"CDATA[\";\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code);\n      if (index === value.length) {\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok : continuation;\n      }\n      return cdataOpenInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | </x>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    if (asciiAlpha(code)) {\n      // Always the case.\n      effects.consume(code);\n      buffer = String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In tag name.\n   *\n   * ```markdown\n   * > | <ab>\n   *      ^^\n   * > | </ab>\n   *       ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagName(code) {\n    if (code === null || code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      const slash = code === 47;\n      const name = buffer.toLowerCase();\n      if (!slash && !closingTag && htmlRawNames.includes(name)) {\n        marker = 1;\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code);\n      }\n      if (htmlBlockNames.includes(buffer.toLowerCase())) {\n        marker = 6;\n        if (slash) {\n          effects.consume(code);\n          return basicSelfClosing;\n        }\n\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code);\n      }\n      marker = 7;\n      // Do not support complete HTML when interrupting.\n      return self.interrupt && !self.parser.lazy[self.now().line] ? nok(code) : closingTag ? completeClosingTagAfter(code) : completeAttributeNameBefore(code);\n    }\n\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      buffer += String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After closing slash of a basic tag name.\n   *\n   * ```markdown\n   * > | <div/>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function basicSelfClosing(code) {\n    if (code === 62) {\n      effects.consume(code);\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuation;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After closing slash of a complete tag name.\n   *\n   * ```markdown\n   * > | <x/>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeClosingTagAfter(code) {\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeClosingTagAfter;\n    }\n    return completeEnd(code);\n  }\n\n  /**\n   * At an attribute name.\n   *\n   * At first, this state is used after a complete tag name, after whitespace,\n   * where it expects optional attributes or the end of the tag.\n   * It is also reused after attributes, when expecting more optional\n   * attributes.\n   *\n   * ```markdown\n   * > | <a />\n   *        ^\n   * > | <a :b>\n   *        ^\n   * > | <a _b>\n   *        ^\n   * > | <a b>\n   *        ^\n   * > | <a >\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameBefore(code) {\n    if (code === 47) {\n      effects.consume(code);\n      return completeEnd;\n    }\n\n    // ASCII alphanumerical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code);\n      return completeAttributeName;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeNameBefore;\n    }\n    return completeEnd(code);\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | <a :b>\n   *         ^\n   * > | <a _b>\n   *         ^\n   * > | <a b>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeName(code) {\n    // ASCII alphanumerical and `-`, `.`, `:`, and `_`.\n    if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return completeAttributeName;\n    }\n    return completeAttributeNameAfter(code);\n  }\n\n  /**\n   * After attribute name, at an optional initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b>\n   *         ^\n   * > | <a b=c>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code);\n      return completeAttributeValueBefore;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeNameAfter;\n    }\n    return completeAttributeNameBefore(code);\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * > | <a b=\"c\">\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueBefore(code) {\n    if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n      return nok(code);\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code);\n      markerB = code;\n      return completeAttributeValueQuoted;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeValueBefore;\n    }\n    return completeAttributeValueUnquoted(code);\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *           ^\n   * > | <a b='c'>\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuoted(code) {\n    if (code === markerB) {\n      effects.consume(code);\n      markerB = null;\n      return completeAttributeValueQuotedAfter;\n    }\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return completeAttributeValueQuoted;\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueUnquoted(code) {\n    if (code === null || code === 34 || code === 39 || code === 47 || code === 60 || code === 61 || code === 62 || code === 96 || markdownLineEndingOrSpace(code)) {\n      return completeAttributeNameAfter(code);\n    }\n    effects.consume(code);\n    return completeAttributeValueUnquoted;\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the\n   * end of the tag.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownSpace(code)) {\n      return completeAttributeNameBefore(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In certain circumstances of a complete tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeEnd(code) {\n    if (code === 62) {\n      effects.consume(code);\n      return completeAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `>` in a complete tag.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAfter(code) {\n    if (code === null || markdownLineEnding(code)) {\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return continuation(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In continuation of any HTML kind.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuation(code) {\n    if (code === 45 && marker === 2) {\n      effects.consume(code);\n      return continuationCommentInside;\n    }\n    if (code === 60 && marker === 1) {\n      effects.consume(code);\n      return continuationRawTagOpen;\n    }\n    if (code === 62 && marker === 4) {\n      effects.consume(code);\n      return continuationClose;\n    }\n    if (code === 63 && marker === 3) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    if (code === 93 && marker === 5) {\n      effects.consume(code);\n      return continuationCdataInside;\n    }\n    if (markdownLineEnding(code) && (marker === 6 || marker === 7)) {\n      effects.exit(\"htmlFlowData\");\n      return effects.check(blankLineBefore, continuationAfter, continuationStart)(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"htmlFlowData\");\n      return continuationStart(code);\n    }\n    effects.consume(code);\n    return continuation;\n  }\n\n  /**\n   * In continuation, at eol.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStart(code) {\n    return effects.check(nonLazyContinuationStart, continuationStartNonLazy, continuationAfter)(code);\n  }\n\n  /**\n   * In continuation, at eol, before non-lazy content.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStartNonLazy(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return continuationBefore;\n  }\n\n  /**\n   * In continuation, before non-lazy content.\n   *\n   * ```markdown\n   *   | <x>\n   * > | asd\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return continuationStart(code);\n    }\n    effects.enter(\"htmlFlowData\");\n    return continuation(code);\n  }\n\n  /**\n   * In comment continuation, after one `-`, expecting another.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCommentInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In raw continuation, after `<`, at `/`.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawTagOpen(code) {\n    if (code === 47) {\n      effects.consume(code);\n      buffer = '';\n      return continuationRawEndTag;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In raw continuation, after `</`, in a raw tag name.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                             ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawEndTag(code) {\n    if (code === 62) {\n      const name = buffer.toLowerCase();\n      if (htmlRawNames.includes(name)) {\n        effects.consume(code);\n        return continuationClose;\n      }\n      return continuation(code);\n    }\n    if (asciiAlpha(code) && buffer.length < 8) {\n      // Always the case.\n      effects.consume(code);\n      buffer += String.fromCharCode(code);\n      return continuationRawEndTag;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In cdata continuation, after `]`, expecting `]>`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *                  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCdataInside(code) {\n    if (code === 93) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In declaration or instruction continuation, at `>`.\n   *\n   * ```markdown\n   * > | <!-->\n   *         ^\n   * > | <?>\n   *       ^\n   * > | <!q>\n   *        ^\n   * > | <!--ab-->\n   *             ^\n   * > | <![CDATA[>&<]]>\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationDeclarationInside(code) {\n    if (code === 62) {\n      effects.consume(code);\n      return continuationClose;\n    }\n\n    // More dashes.\n    if (code === 45 && marker === 2) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In closed continuation: everything we get until the eol/eof is part of it.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationClose(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"htmlFlowData\");\n      return continuationAfter(code);\n    }\n    effects.consume(code);\n    return continuationClose;\n  }\n\n  /**\n   * Done.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationAfter(code) {\n    effects.exit(\"htmlFlow\");\n    // // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    // // No longer concrete.\n    // tokenizer.concrete = false\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * At eol, before continuation.\n   *\n   * ```markdown\n   * > | * ```js\n   *            ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * A continuation.\n   *\n   * ```markdown\n   *   | * ```js\n   * > | b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n  return start;\n\n  /**\n   * Before eol, expecting blank line.\n   *\n   * ```markdown\n   * > | <div>\n   *          ^\n   *   |\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return effects.attempt(blankLine, ok, nok);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const htmlText = {\n  name: 'htmlText',\n  tokenize: tokenizeHtmlText\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n  const self = this;\n  /** @type {NonNullable<Code> | undefined} */\n  let marker;\n  /** @type {number} */\n  let index;\n  /** @type {State} */\n  let returnState;\n  return start;\n\n  /**\n   * Start of HTML (text).\n   *\n   * ```markdown\n   * > | a <b> c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"htmlText\");\n    effects.enter(\"htmlTextData\");\n    effects.consume(code);\n    return open;\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | a <b> c\n   *        ^\n   * > | a <!doctype> c\n   *        ^\n   * > | a <!--b--> c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code);\n      return declarationOpen;\n    }\n    if (code === 47) {\n      effects.consume(code);\n      return tagCloseStart;\n    }\n    if (code === 63) {\n      effects.consume(code);\n      return instruction;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return tagOpen;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | a <!doctype> c\n   *         ^\n   * > | a <!--b--> c\n   *         ^\n   * > | a <![CDATA[>&<]]> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentOpenInside;\n    }\n    if (code === 91) {\n      effects.consume(code);\n      index = 0;\n      return cdataOpenInside;\n    }\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return declaration;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In a comment, after `<!-`, at another `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentEnd;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In comment.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function comment(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 45) {\n      effects.consume(code);\n      return commentClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = comment;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return comment;\n  }\n\n  /**\n   * In comment, after `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentClose(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentEnd;\n    }\n    return comment(code);\n  }\n\n  /**\n   * In comment, after `--`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentEnd(code) {\n    return code === 62 ? end(code) : code === 45 ? commentClose(code) : comment(code);\n  }\n\n  /**\n   * After `<![`, in CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *          ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = \"CDATA[\";\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code);\n      return index === value.length ? cdata : cdataOpenInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In CDATA.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdata(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.consume(code);\n      return cdataClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = cdata;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return cdata;\n  }\n\n  /**\n   * In CDATA, after `]`, at another `]`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataClose(code) {\n    if (code === 93) {\n      effects.consume(code);\n      return cdataEnd;\n    }\n    return cdata(code);\n  }\n\n  /**\n   * In CDATA, after `]]`, at `>`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataEnd(code) {\n    if (code === 62) {\n      return end(code);\n    }\n    if (code === 93) {\n      effects.consume(code);\n      return cdataEnd;\n    }\n    return cdata(code);\n  }\n\n  /**\n   * In declaration.\n   *\n   * ```markdown\n   * > | a <!b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declaration(code) {\n    if (code === null || code === 62) {\n      return end(code);\n    }\n    if (markdownLineEnding(code)) {\n      returnState = declaration;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return declaration;\n  }\n\n  /**\n   * In instruction.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instruction(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 63) {\n      effects.consume(code);\n      return instructionClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = instruction;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return instruction;\n  }\n\n  /**\n   * In instruction, after `?`, at `>`.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instructionClose(code) {\n    return code === 62 ? end(code) : instruction(code);\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return tagClose;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `</x`, in a tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagClose(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagClose;\n    }\n    return tagCloseBetween(code);\n  }\n\n  /**\n   * In closing tag, after tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseBetween(code) {\n    if (markdownLineEnding(code)) {\n      returnState = tagCloseBetween;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagCloseBetween;\n    }\n    return end(code);\n  }\n\n  /**\n   * After `<x`, in opening tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpen(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagOpen;\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In opening tag, after tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenBetween(code) {\n    if (code === 47) {\n      effects.consume(code);\n      return end;\n    }\n\n    // ASCII alphabetical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code);\n      return tagOpenAttributeName;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenBetween;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenBetween;\n    }\n    return end(code);\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeName(code) {\n    // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n    if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagOpenAttributeName;\n    }\n    return tagOpenAttributeNameAfter(code);\n  }\n\n  /**\n   * After attribute name, before initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code);\n      return tagOpenAttributeValueBefore;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeNameAfter;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenAttributeNameAfter;\n    }\n    return tagOpenBetween(code);\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueBefore(code) {\n    if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n      return nok(code);\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code);\n      marker = code;\n      return tagOpenAttributeValueQuoted;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueBefore;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenAttributeValueBefore;\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueUnquoted;\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuoted(code) {\n    if (code === marker) {\n      effects.consume(code);\n      marker = undefined;\n      return tagOpenAttributeValueQuotedAfter;\n    }\n    if (code === null) {\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueQuoted;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueQuoted;\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueUnquoted(code) {\n    if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 96) {\n      return nok(code);\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueUnquoted;\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the end\n   * of the tag.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In certain circumstances of a tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function end(code) {\n    if (code === 62) {\n      effects.consume(code);\n      effects.exit(\"htmlTextData\");\n      effects.exit(\"htmlText\");\n      return ok;\n    }\n    return nok(code);\n  }\n\n  /**\n   * At eol.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   * > | a <!--a\n   *            ^\n   *   | b-->\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingBefore(code) {\n    effects.exit(\"htmlTextData\");\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return lineEndingAfter;\n  }\n\n  /**\n   * After eol, at optional whitespace.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfter(code) {\n    // Always populated by defaults.\n\n    return markdownSpace(code) ? factorySpace(effects, lineEndingAfterPrefix, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : lineEndingAfterPrefix(code);\n  }\n\n  /**\n   * After eol, after optional whitespace.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfterPrefix(code) {\n    effects.enter(\"htmlTextData\");\n    return returnState(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Event,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const labelEnd = {\n  name: 'labelEnd',\n  resolveAll: resolveAllLabelEnd,\n  resolveTo: resolveToLabelEnd,\n  tokenize: tokenizeLabelEnd\n};\n\n/** @type {Construct} */\nconst resourceConstruct = {\n  tokenize: tokenizeResource\n};\n/** @type {Construct} */\nconst referenceFullConstruct = {\n  tokenize: tokenizeReferenceFull\n};\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n  tokenize: tokenizeReferenceCollapsed\n};\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n  let index = -1;\n  /** @type {Array<Event>} */\n  const newEvents = [];\n  while (++index < events.length) {\n    const token = events[index][1];\n    newEvents.push(events[index]);\n    if (token.type === \"labelImage\" || token.type === \"labelLink\" || token.type === \"labelEnd\") {\n      // Remove the marker.\n      const offset = token.type === \"labelImage\" ? 4 : 2;\n      token.type = \"data\";\n      index += offset;\n    }\n  }\n\n  // If the events are equal, we don't have to copy newEvents to events\n  if (events.length !== newEvents.length) {\n    splice(events, 0, events.length, newEvents);\n  }\n  return events;\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n  let index = events.length;\n  let offset = 0;\n  /** @type {Token} */\n  let token;\n  /** @type {number | undefined} */\n  let open;\n  /** @type {number | undefined} */\n  let close;\n  /** @type {Array<Event>} */\n  let media;\n\n  // Find an opening.\n  while (index--) {\n    token = events[index][1];\n    if (open) {\n      // If we see another link, or inactive link label, we’ve been here before.\n      if (token.type === \"link\" || token.type === \"labelLink\" && token._inactive) {\n        break;\n      }\n\n      // Mark other link openings as inactive, as we can’t have links in\n      // links.\n      if (events[index][0] === 'enter' && token.type === \"labelLink\") {\n        token._inactive = true;\n      }\n    } else if (close) {\n      if (events[index][0] === 'enter' && (token.type === \"labelImage\" || token.type === \"labelLink\") && !token._balanced) {\n        open = index;\n        if (token.type !== \"labelLink\") {\n          offset = 2;\n          break;\n        }\n      }\n    } else if (token.type === \"labelEnd\") {\n      close = index;\n    }\n  }\n  const group = {\n    type: events[open][1].type === \"labelLink\" ? \"link\" : \"image\",\n    start: {\n      ...events[open][1].start\n    },\n    end: {\n      ...events[events.length - 1][1].end\n    }\n  };\n  const label = {\n    type: \"label\",\n    start: {\n      ...events[open][1].start\n    },\n    end: {\n      ...events[close][1].end\n    }\n  };\n  const text = {\n    type: \"labelText\",\n    start: {\n      ...events[open + offset + 2][1].end\n    },\n    end: {\n      ...events[close - 2][1].start\n    }\n  };\n  media = [['enter', group, context], ['enter', label, context]];\n\n  // Opening marker.\n  media = push(media, events.slice(open + 1, open + offset + 3));\n\n  // Text open.\n  media = push(media, [['enter', text, context]]);\n\n  // Always populated by defaults.\n\n  // Between.\n  media = push(media, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context));\n\n  // Text close, marker close, label close.\n  media = push(media, [['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context]]);\n\n  // Reference, resource, or so.\n  media = push(media, events.slice(close + 1));\n\n  // Media close.\n  media = push(media, [['exit', group, context]]);\n  splice(events, open, events.length, media);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n  const self = this;\n  let index = self.events.length;\n  /** @type {Token} */\n  let labelStart;\n  /** @type {boolean} */\n  let defined;\n\n  // Find an opening.\n  while (index--) {\n    if ((self.events[index][1].type === \"labelImage\" || self.events[index][1].type === \"labelLink\") && !self.events[index][1]._balanced) {\n      labelStart = self.events[index][1];\n      break;\n    }\n  }\n  return start;\n\n  /**\n   * Start of label end.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // If there is not an okay opening.\n    if (!labelStart) {\n      return nok(code);\n    }\n\n    // If the corresponding label (link) start is marked as inactive,\n    // it means we’d be wrapping a link, like this:\n    //\n    // ```markdown\n    // > | a [b [c](d) e](f) g.\n    //                  ^\n    // ```\n    //\n    // We can’t have that, so it’s just balanced brackets.\n    if (labelStart._inactive) {\n      return labelEndNok(code);\n    }\n    defined = self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize({\n      start: labelStart.end,\n      end: self.now()\n    })));\n    effects.enter(\"labelEnd\");\n    effects.enter(\"labelMarker\");\n    effects.consume(code);\n    effects.exit(\"labelMarker\");\n    effects.exit(\"labelEnd\");\n    return after;\n  }\n\n  /**\n   * After `]`.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n    // an extension.\n\n    // Resource (`[asd](fgh)`)?\n    if (code === 40) {\n      return effects.attempt(resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok)(code);\n    }\n\n    // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n    if (code === 91) {\n      return effects.attempt(referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok)(code);\n    }\n\n    // Shortcut (`[asd]`) reference?\n    return defined ? labelEndOk(code) : labelEndNok(code);\n  }\n\n  /**\n   * After `]`, at `[`, but not at a full reference.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] b\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceNotFull(code) {\n    return effects.attempt(referenceCollapsedConstruct, labelEndOk, labelEndNok)(code);\n  }\n\n  /**\n   * Done, we found something.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *           ^\n   * > | [a][b] c\n   *           ^\n   * > | [a][] b\n   *          ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndOk(code) {\n    // Note: `markdown-rs` does a bunch of stuff here.\n    return ok(code);\n  }\n\n  /**\n   * Done, it’s nothing.\n   *\n   * There was an okay opening, but we didn’t match anything.\n   *\n   * ```markdown\n   * > | [a](b c\n   *        ^\n   * > | [a][b c\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndNok(code) {\n    labelStart._balanced = true;\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n  return resourceStart;\n\n  /**\n   * At a resource.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceStart(code) {\n    effects.enter(\"resource\");\n    effects.enter(\"resourceMarker\");\n    effects.consume(code);\n    effects.exit(\"resourceMarker\");\n    return resourceBefore;\n  }\n\n  /**\n   * In resource, after `(`, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBefore(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceOpen)(code) : resourceOpen(code);\n  }\n\n  /**\n   * In resource, after optional whitespace, at `)` or a destination.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceOpen(code) {\n    if (code === 41) {\n      return resourceEnd(code);\n    }\n    return factoryDestination(effects, resourceDestinationAfter, resourceDestinationMissing, \"resourceDestination\", \"resourceDestinationLiteral\", \"resourceDestinationLiteralMarker\", \"resourceDestinationRaw\", \"resourceDestinationString\", 32)(code);\n  }\n\n  /**\n   * In resource, after destination, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationAfter(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceBetween)(code) : resourceEnd(code);\n  }\n\n  /**\n   * At invalid destination.\n   *\n   * ```markdown\n   * > | [a](<<) b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationMissing(code) {\n    return nok(code);\n  }\n\n  /**\n   * In resource, after destination and whitespace, at `(` or title.\n   *\n   * ```markdown\n   * > | [a](b ) c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBetween(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      return factoryTitle(effects, resourceTitleAfter, nok, \"resourceTitle\", \"resourceTitleMarker\", \"resourceTitleString\")(code);\n    }\n    return resourceEnd(code);\n  }\n\n  /**\n   * In resource, after title, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b \"c\") d\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceTitleAfter(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceEnd)(code) : resourceEnd(code);\n  }\n\n  /**\n   * In resource, at `)`.\n   *\n   * ```markdown\n   * > | [a](b) d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceEnd(code) {\n    if (code === 41) {\n      effects.enter(\"resourceMarker\");\n      effects.consume(code);\n      effects.exit(\"resourceMarker\");\n      effects.exit(\"resource\");\n      return ok;\n    }\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n  const self = this;\n  return referenceFull;\n\n  /**\n   * In a reference (full), at the `[`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFull(code) {\n    return factoryLabel.call(self, effects, referenceFullAfter, referenceFullMissing, \"reference\", \"referenceMarker\", \"referenceString\")(code);\n  }\n\n  /**\n   * In a reference (full), after `]`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullAfter(code) {\n    return self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1))) ? ok(code) : nok(code);\n  }\n\n  /**\n   * In reference (full) that was missing.\n   *\n   * ```markdown\n   * > | [a][b d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullMissing(code) {\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n  return referenceCollapsedStart;\n\n  /**\n   * In reference (collapsed), at `[`.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceCollapsedStart(code) {\n    // We only attempt a collapsed label if there’s a `[`.\n\n    effects.enter(\"reference\");\n    effects.enter(\"referenceMarker\");\n    effects.consume(code);\n    effects.exit(\"referenceMarker\");\n    return referenceCollapsedOpen;\n  }\n\n  /**\n   * In reference (collapsed), at `]`.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *         ^\n   * ```\n   *\n   *  @type {State}\n   */\n  function referenceCollapsedOpen(code) {\n    if (code === 93) {\n      effects.enter(\"referenceMarker\");\n      effects.consume(code);\n      effects.exit(\"referenceMarker\");\n      effects.exit(\"reference\");\n      return ok;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartImage = {\n  name: 'labelStartImage',\n  resolveAll: labelEnd.resolveAll,\n  tokenize: tokenizeLabelStartImage\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of label (image) start.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"labelImage\");\n    effects.enter(\"labelImageMarker\");\n    effects.consume(code);\n    effects.exit(\"labelImageMarker\");\n    return open;\n  }\n\n  /**\n   * After `!`, at `[`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 91) {\n      effects.enter(\"labelMarker\");\n      effects.consume(code);\n      effects.exit(\"labelMarker\");\n      effects.exit(\"labelImage\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `![`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *         ^\n   * ```\n   *\n   * This is needed in because, when GFM footnotes are enabled, images never\n   * form when started with a `^`.\n   * Instead, links form:\n   *\n   * ```markdown\n   * ![^a](b)\n   *\n   * ![^a][b]\n   *\n   * [b]: c\n   * ```\n   *\n   * ```html\n   * <p>!<a href=\\\"b\\\">^a</a></p>\n   * <p>!<a href=\\\"c\\\">^a</a></p>\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // To do: use a new field to do this, this is still needed for\n    // `micromark-extension-gfm-footnote`, but the `label-start-link`\n    // behavior isn’t.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartLink = {\n  name: 'labelStartLink',\n  resolveAll: labelEnd.resolveAll,\n  tokenize: tokenizeLabelStartLink\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of label (link) start.\n   *\n   * ```markdown\n   * > | a [b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"labelLink\");\n    effects.enter(\"labelMarker\");\n    effects.consume(code);\n    effects.exit(\"labelMarker\");\n    effects.exit(\"labelLink\");\n    return after;\n  }\n\n  /** @type {State} */\n  function after(code) {\n    // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n    // remove.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const lineEnding = {\n  name: 'lineEnding',\n  tokenize: tokenizeLineEnding\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, ok, \"linePrefix\");\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const thematicBreak = {\n  name: 'thematicBreak',\n  tokenize: tokenizeThematicBreak\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeThematicBreak(effects, ok, nok) {\n  let size = 0;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of thematic break.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"thematicBreak\");\n    // To do: parse indent like `markdown-rs`.\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at marker.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    marker = code;\n    return atBreak(code);\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.enter(\"thematicBreakSequence\");\n      return sequence(code);\n    }\n    if (size >= 3 && (code === null || markdownLineEnding(code))) {\n      effects.exit(\"thematicBreak\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequence(code) {\n    if (code === marker) {\n      effects.consume(code);\n      size++;\n      return sequence;\n    }\n    effects.exit(\"thematicBreakSequence\");\n    return markdownSpace(code) ? factorySpace(effects, atBreak, \"whitespace\")(code) : atBreak(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   Exiter,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiDigit, markdownSpace } from 'micromark-util-character';\nimport { blankLine } from './blank-line.js';\nimport { thematicBreak } from './thematic-break.js';\n\n/** @type {Construct} */\nexport const list = {\n  continuation: {\n    tokenize: tokenizeListContinuation\n  },\n  exit: tokenizeListEnd,\n  name: 'list',\n  tokenize: tokenizeListStart\n};\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n  partial: true,\n  tokenize: tokenizeListItemPrefixWhitespace\n};\n\n/** @type {Construct} */\nconst indentConstruct = {\n  partial: true,\n  tokenize: tokenizeIndent\n};\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListStart(effects, ok, nok) {\n  const self = this;\n  const tail = self.events[self.events.length - 1];\n  let initialSize = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n  let size = 0;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    const kind = self.containerState.type || (code === 42 || code === 43 || code === 45 ? \"listUnordered\" : \"listOrdered\");\n    if (kind === \"listUnordered\" ? !self.containerState.marker || code === self.containerState.marker : asciiDigit(code)) {\n      if (!self.containerState.type) {\n        self.containerState.type = kind;\n        effects.enter(kind, {\n          _container: true\n        });\n      }\n      if (kind === \"listUnordered\") {\n        effects.enter(\"listItemPrefix\");\n        return code === 42 || code === 45 ? effects.check(thematicBreak, nok, atMarker)(code) : atMarker(code);\n      }\n      if (!self.interrupt || code === 49) {\n        effects.enter(\"listItemPrefix\");\n        effects.enter(\"listItemValue\");\n        return inside(code);\n      }\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function inside(code) {\n    if (asciiDigit(code) && ++size < 10) {\n      effects.consume(code);\n      return inside;\n    }\n    if ((!self.interrupt || size < 2) && (self.containerState.marker ? code === self.containerState.marker : code === 41 || code === 46)) {\n      effects.exit(\"listItemValue\");\n      return atMarker(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * @type {State}\n   **/\n  function atMarker(code) {\n    effects.enter(\"listItemMarker\");\n    effects.consume(code);\n    effects.exit(\"listItemMarker\");\n    self.containerState.marker = self.containerState.marker || code;\n    return effects.check(blankLine,\n    // Can’t be empty when interrupting.\n    self.interrupt ? nok : onBlank, effects.attempt(listItemPrefixWhitespaceConstruct, endOfPrefix, otherPrefix));\n  }\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.initialBlankLine = true;\n    initialSize++;\n    return endOfPrefix(code);\n  }\n\n  /** @type {State} */\n  function otherPrefix(code) {\n    if (markdownSpace(code)) {\n      effects.enter(\"listItemPrefixWhitespace\");\n      effects.consume(code);\n      effects.exit(\"listItemPrefixWhitespace\");\n      return endOfPrefix;\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function endOfPrefix(code) {\n    self.containerState.size = initialSize + self.sliceSerialize(effects.exit(\"listItemPrefix\"), true).length;\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListContinuation(effects, ok, nok) {\n  const self = this;\n  self.containerState._closeFlow = undefined;\n  return effects.check(blankLine, onBlank, notBlank);\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.furtherBlankLines = self.containerState.furtherBlankLines || self.containerState.initialBlankLine;\n\n    // We have a blank line.\n    // Still, try to consume at most the items size.\n    return factorySpace(effects, ok, \"listItemIndent\", self.containerState.size + 1)(code);\n  }\n\n  /** @type {State} */\n  function notBlank(code) {\n    if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n      self.containerState.furtherBlankLines = undefined;\n      self.containerState.initialBlankLine = undefined;\n      return notInCurrentItem(code);\n    }\n    self.containerState.furtherBlankLines = undefined;\n    self.containerState.initialBlankLine = undefined;\n    return effects.attempt(indentConstruct, ok, notInCurrentItem)(code);\n  }\n\n  /** @type {State} */\n  function notInCurrentItem(code) {\n    // While we do continue, we signal that the flow should be closed.\n    self.containerState._closeFlow = true;\n    // As we’re closing flow, we’re no longer interrupting.\n    self.interrupt = undefined;\n    // Always populated by defaults.\n\n    return factorySpace(effects, effects.attempt(list, ok, nok), \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n  const self = this;\n  return factorySpace(effects, afterPrefix, \"listItemIndent\", self.containerState.size + 1);\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"listItemIndent\" && tail[2].sliceSerialize(tail[1], true).length === self.containerState.size ? ok(code) : nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Exiter}\n */\nfunction tokenizeListEnd(effects) {\n  effects.exit(this.containerState.type);\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n  const self = this;\n\n  // Always populated by defaults.\n\n  return factorySpace(effects, afterPrefix, \"listItemPrefixWhitespace\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + 1);\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return !markdownSpace(code) && tail && tail[1].type === \"listItemPrefixWhitespace\" ? ok(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const setextUnderline = {\n  name: 'setextUnderline',\n  resolveTo: resolveToSetextUnderline,\n  tokenize: tokenizeSetextUnderline\n};\n\n/** @type {Resolver} */\nfunction resolveToSetextUnderline(events, context) {\n  // To do: resolve like `markdown-rs`.\n  let index = events.length;\n  /** @type {number | undefined} */\n  let content;\n  /** @type {number | undefined} */\n  let text;\n  /** @type {number | undefined} */\n  let definition;\n\n  // Find the opening of the content.\n  // It’ll always exist: we don’t tokenize if it isn’t there.\n  while (index--) {\n    if (events[index][0] === 'enter') {\n      if (events[index][1].type === \"content\") {\n        content = index;\n        break;\n      }\n      if (events[index][1].type === \"paragraph\") {\n        text = index;\n      }\n    }\n    // Exit\n    else {\n      if (events[index][1].type === \"content\") {\n        // Remove the content end (if needed we’ll add it later)\n        events.splice(index, 1);\n      }\n      if (!definition && events[index][1].type === \"definition\") {\n        definition = index;\n      }\n    }\n  }\n  const heading = {\n    type: \"setextHeading\",\n    start: {\n      ...events[content][1].start\n    },\n    end: {\n      ...events[events.length - 1][1].end\n    }\n  };\n\n  // Change the paragraph to setext heading text.\n  events[text][1].type = \"setextHeadingText\";\n\n  // If we have definitions in the content, we’ll keep on having content,\n  // but we need move it.\n  if (definition) {\n    events.splice(text, 0, ['enter', heading, context]);\n    events.splice(definition + 1, 0, ['exit', events[content][1], context]);\n    events[content][1].end = {\n      ...events[definition][1].end\n    };\n  } else {\n    events[content][1] = heading;\n  }\n\n  // Add the heading exit at the end.\n  events.push(['exit', heading, context]);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n  const self = this;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * At start of heading (setext) underline.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    let index = self.events.length;\n    /** @type {boolean | undefined} */\n    let paragraph;\n    // Find an opening.\n    while (index--) {\n      // Skip enter/exit of line ending, line prefix, and content.\n      // We can now either have a definition or a paragraph.\n      if (self.events[index][1].type !== \"lineEnding\" && self.events[index][1].type !== \"linePrefix\" && self.events[index][1].type !== \"content\") {\n        paragraph = self.events[index][1].type === \"paragraph\";\n        break;\n      }\n    }\n\n    // To do: handle lazy/pierce like `markdown-rs`.\n    // To do: parse indent like `markdown-rs`.\n    if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n      effects.enter(\"setextHeadingLine\");\n      marker = code;\n      return before(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * After optional whitespace, at `-` or `=`.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"setextHeadingLineSequence\");\n    return inside(code);\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code);\n      return inside;\n    }\n    effects.exit(\"setextHeadingLineSequence\");\n    return markdownSpace(code) ? factorySpace(effects, after, \"lineSuffix\")(code) : after(code);\n  }\n\n  /**\n   * After sequence, after optional whitespace.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"setextHeadingLine\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   InitialConstruct,\n *   Initializer,\n *   State,\n *   TokenizeContext\n * } from 'micromark-util-types'\n */\n\nimport { blankLine, content } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\nexport const flow = {\n  tokenize: initializeFlow\n};\n\n/**\n * @this {TokenizeContext}\n *   Self.\n * @type {Initializer}\n *   Initializer.\n */\nfunction initializeFlow(effects) {\n  const self = this;\n  const initial = effects.attempt(\n  // Try to parse a blank line.\n  blankLine, atBlankEnding,\n  // Try to parse initial flow (essentially, only code).\n  effects.attempt(this.parser.constructs.flowInitial, afterConstruct, factorySpace(effects, effects.attempt(this.parser.constructs.flow, afterConstruct, effects.attempt(content, afterConstruct)), \"linePrefix\")));\n  return initial;\n\n  /** @type {State} */\n  function atBlankEnding(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEndingBlank\");\n    effects.consume(code);\n    effects.exit(\"lineEndingBlank\");\n    self.currentConstruct = undefined;\n    return initial;\n  }\n\n  /** @type {State} */\n  function afterConstruct(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    self.currentConstruct = undefined;\n    return initial;\n  }\n}","/**\n * @import {\n *   Code,\n *   InitialConstruct,\n *   Initializer,\n *   Resolver,\n *   State,\n *   TokenizeContext\n * } from 'micromark-util-types'\n */\n\nexport const resolver = {\n  resolveAll: createResolver()\n};\nexport const string = initializeFactory('string');\nexport const text = initializeFactory('text');\n\n/**\n * @param {'string' | 'text'} field\n *   Field.\n * @returns {InitialConstruct}\n *   Construct.\n */\nfunction initializeFactory(field) {\n  return {\n    resolveAll: createResolver(field === 'text' ? resolveAllLineSuffixes : undefined),\n    tokenize: initializeText\n  };\n\n  /**\n   * @this {TokenizeContext}\n   *   Context.\n   * @type {Initializer}\n   */\n  function initializeText(effects) {\n    const self = this;\n    const constructs = this.parser.constructs[field];\n    const text = effects.attempt(constructs, start, notText);\n    return start;\n\n    /** @type {State} */\n    function start(code) {\n      return atBreak(code) ? text(code) : notText(code);\n    }\n\n    /** @type {State} */\n    function notText(code) {\n      if (code === null) {\n        effects.consume(code);\n        return;\n      }\n      effects.enter(\"data\");\n      effects.consume(code);\n      return data;\n    }\n\n    /** @type {State} */\n    function data(code) {\n      if (atBreak(code)) {\n        effects.exit(\"data\");\n        return text(code);\n      }\n\n      // Data.\n      effects.consume(code);\n      return data;\n    }\n\n    /**\n     * @param {Code} code\n     *   Code.\n     * @returns {boolean}\n     *   Whether the code is a break.\n     */\n    function atBreak(code) {\n      if (code === null) {\n        return true;\n      }\n      const list = constructs[code];\n      let index = -1;\n      if (list) {\n        // Always populated by defaults.\n\n        while (++index < list.length) {\n          const item = list[index];\n          if (!item.previous || item.previous.call(self, self.previous)) {\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n  }\n}\n\n/**\n * @param {Resolver | undefined} [extraResolver]\n *   Resolver.\n * @returns {Resolver}\n *   Resolver.\n */\nfunction createResolver(extraResolver) {\n  return resolveAllText;\n\n  /** @type {Resolver} */\n  function resolveAllText(events, context) {\n    let index = -1;\n    /** @type {number | undefined} */\n    let enter;\n\n    // A rather boring computation (to merge adjacent `data` events) which\n    // improves mm performance by 29%.\n    while (++index <= events.length) {\n      if (enter === undefined) {\n        if (events[index] && events[index][1].type === \"data\") {\n          enter = index;\n          index++;\n        }\n      } else if (!events[index] || events[index][1].type !== \"data\") {\n        // Don’t do anything if there is one data token.\n        if (index !== enter + 2) {\n          events[enter][1].end = events[index - 1][1].end;\n          events.splice(enter + 2, index - enter - 2);\n          index = enter + 2;\n        }\n        enter = undefined;\n      }\n    }\n    return extraResolver ? extraResolver(events, context) : events;\n  }\n}\n\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can’t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\nfunction resolveAllLineSuffixes(events, context) {\n  let eventIndex = 0; // Skip first.\n\n  while (++eventIndex <= events.length) {\n    if ((eventIndex === events.length || events[eventIndex][1].type === \"lineEnding\") && events[eventIndex - 1][1].type === \"data\") {\n      const data = events[eventIndex - 1][1];\n      const chunks = context.sliceStream(data);\n      let index = chunks.length;\n      let bufferIndex = -1;\n      let size = 0;\n      /** @type {boolean | undefined} */\n      let tabs;\n      while (index--) {\n        const chunk = chunks[index];\n        if (typeof chunk === 'string') {\n          bufferIndex = chunk.length;\n          while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n            size++;\n            bufferIndex--;\n          }\n          if (bufferIndex) break;\n          bufferIndex = -1;\n        }\n        // Number\n        else if (chunk === -2) {\n          tabs = true;\n          size++;\n        } else if (chunk === -1) {\n          // Empty\n        } else {\n          // Replacement character, exit.\n          index++;\n          break;\n        }\n      }\n\n      // Allow final trailing whitespace.\n      if (context._contentTypeTextTrailing && eventIndex === events.length) {\n        size = 0;\n      }\n      if (size) {\n        const token = {\n          type: eventIndex === events.length || tabs || size < 2 ? \"lineSuffix\" : \"hardBreakTrailing\",\n          start: {\n            _bufferIndex: index ? bufferIndex : data.start._bufferIndex + bufferIndex,\n            _index: data.start._index + index,\n            line: data.end.line,\n            column: data.end.column - size,\n            offset: data.end.offset - size\n          },\n          end: {\n            ...data.end\n          }\n        };\n        data.end = {\n          ...token.start\n        };\n        if (data.start.offset === data.end.offset) {\n          Object.assign(data, token);\n        } else {\n          events.splice(eventIndex, 0, ['enter', token, context], ['exit', token, context]);\n          eventIndex += 2;\n        }\n      }\n      eventIndex++;\n    }\n  }\n  return events;\n}","/**\n * @import {Extension} from 'micromark-util-types'\n */\n\nimport { attention, autolink, blockQuote, characterEscape, characterReference, codeFenced, codeIndented, codeText, definition, hardBreakEscape, headingAtx, htmlFlow, htmlText, labelEnd, labelStartImage, labelStartLink, lineEnding, list, setextUnderline, thematicBreak } from 'micromark-core-commonmark';\nimport { resolver as resolveText } from './initialize/text.js';\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n  [42]: list,\n  [43]: list,\n  [45]: list,\n  [48]: list,\n  [49]: list,\n  [50]: list,\n  [51]: list,\n  [52]: list,\n  [53]: list,\n  [54]: list,\n  [55]: list,\n  [56]: list,\n  [57]: list,\n  [62]: blockQuote\n};\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n  [91]: definition\n};\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n  [-2]: codeIndented,\n  [-1]: codeIndented,\n  [32]: codeIndented\n};\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n  [35]: headingAtx,\n  [42]: thematicBreak,\n  [45]: [setextUnderline, thematicBreak],\n  [60]: htmlFlow,\n  [61]: setextUnderline,\n  [95]: thematicBreak,\n  [96]: codeFenced,\n  [126]: codeFenced\n};\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n  [38]: characterReference,\n  [92]: characterEscape\n};\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n  [-5]: lineEnding,\n  [-4]: lineEnding,\n  [-3]: lineEnding,\n  [33]: labelStartImage,\n  [38]: characterReference,\n  [42]: attention,\n  [60]: [autolink, htmlText],\n  [91]: labelStartLink,\n  [92]: [hardBreakEscape, characterEscape],\n  [93]: labelEnd,\n  [95]: attention,\n  [96]: codeText\n};\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n  null: [attention, resolveText]\n};\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n  null: [42, 95]\n};\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n  null: []\n};","/**\n * @import {\n *   Chunk,\n *   Code,\n *   ConstructRecord,\n *   Construct,\n *   Effects,\n *   InitialConstruct,\n *   ParseContext,\n *   Point,\n *   State,\n *   TokenizeContext,\n *   Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @callback Restore\n *   Restore the state.\n * @returns {undefined}\n *   Nothing.\n *\n * @typedef Info\n *   Info.\n * @property {Restore} restore\n *   Restore.\n * @property {number} from\n *   From.\n *\n * @callback ReturnHandle\n *   Handle a successful run.\n * @param {Construct} construct\n *   Construct.\n * @param {Info} info\n *   Info.\n * @returns {undefined}\n *   Nothing.\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n *   Parser.\n * @param {InitialConstruct} initialize\n *   Construct.\n * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from]\n *   Point (optional).\n * @returns {TokenizeContext}\n *   Context.\n */\nexport function createTokenizer(parser, initialize, from) {\n  /** @type {Point} */\n  let point = {\n    _bufferIndex: -1,\n    _index: 0,\n    line: from && from.line || 1,\n    column: from && from.column || 1,\n    offset: from && from.offset || 0\n  };\n  /** @type {Record<string, number>} */\n  const columnStart = {};\n  /** @type {Array<Construct>} */\n  const resolveAllConstructs = [];\n  /** @type {Array<Chunk>} */\n  let chunks = [];\n  /** @type {Array<Token>} */\n  let stack = [];\n  /** @type {boolean | undefined} */\n  let consumed = true;\n\n  /**\n   * Tools used for tokenizing.\n   *\n   * @type {Effects}\n   */\n  const effects = {\n    attempt: constructFactory(onsuccessfulconstruct),\n    check: constructFactory(onsuccessfulcheck),\n    consume,\n    enter,\n    exit,\n    interrupt: constructFactory(onsuccessfulcheck, {\n      interrupt: true\n    })\n  };\n\n  /**\n   * State and tools for resolving and serializing.\n   *\n   * @type {TokenizeContext}\n   */\n  const context = {\n    code: null,\n    containerState: {},\n    defineSkip,\n    events: [],\n    now,\n    parser,\n    previous: null,\n    sliceSerialize,\n    sliceStream,\n    write\n  };\n\n  /**\n   * The state function.\n   *\n   * @type {State | undefined}\n   */\n  let state = initialize.tokenize.call(context, effects);\n\n  /**\n   * Track which character we expect to be consumed, to catch bugs.\n   *\n   * @type {Code}\n   */\n  let expectedCode;\n  if (initialize.resolveAll) {\n    resolveAllConstructs.push(initialize);\n  }\n  return context;\n\n  /** @type {TokenizeContext['write']} */\n  function write(slice) {\n    chunks = push(chunks, slice);\n    main();\n\n    // Exit if we’re not done, resolve might change stuff.\n    if (chunks[chunks.length - 1] !== null) {\n      return [];\n    }\n    addResult(initialize, 0);\n\n    // Otherwise, resolve, and exit.\n    context.events = resolveAll(resolveAllConstructs, context.events, context);\n    return context.events;\n  }\n\n  //\n  // Tools.\n  //\n\n  /** @type {TokenizeContext['sliceSerialize']} */\n  function sliceSerialize(token, expandTabs) {\n    return serializeChunks(sliceStream(token), expandTabs);\n  }\n\n  /** @type {TokenizeContext['sliceStream']} */\n  function sliceStream(token) {\n    return sliceChunks(chunks, token);\n  }\n\n  /** @type {TokenizeContext['now']} */\n  function now() {\n    // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n    const {\n      _bufferIndex,\n      _index,\n      line,\n      column,\n      offset\n    } = point;\n    return {\n      _bufferIndex,\n      _index,\n      line,\n      column,\n      offset\n    };\n  }\n\n  /** @type {TokenizeContext['defineSkip']} */\n  function defineSkip(value) {\n    columnStart[value.line] = value.column;\n    accountForPotentialSkip();\n  }\n\n  //\n  // State management.\n  //\n\n  /**\n   * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n   * `consume`).\n   * Here is where we walk through the chunks, which either include strings of\n   * several characters, or numerical character codes.\n   * The reason to do this in a loop instead of a call is so the stack can\n   * drain.\n   *\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function main() {\n    /** @type {number} */\n    let chunkIndex;\n    while (point._index < chunks.length) {\n      const chunk = chunks[point._index];\n\n      // If we’re in a buffer chunk, loop through it.\n      if (typeof chunk === 'string') {\n        chunkIndex = point._index;\n        if (point._bufferIndex < 0) {\n          point._bufferIndex = 0;\n        }\n        while (point._index === chunkIndex && point._bufferIndex < chunk.length) {\n          go(chunk.charCodeAt(point._bufferIndex));\n        }\n      } else {\n        go(chunk);\n      }\n    }\n  }\n\n  /**\n   * Deal with one code.\n   *\n   * @param {Code} code\n   *   Code.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function go(code) {\n    consumed = undefined;\n    expectedCode = code;\n    state = state(code);\n  }\n\n  /** @type {Effects['consume']} */\n  function consume(code) {\n    if (markdownLineEnding(code)) {\n      point.line++;\n      point.column = 1;\n      point.offset += code === -3 ? 2 : 1;\n      accountForPotentialSkip();\n    } else if (code !== -1) {\n      point.column++;\n      point.offset++;\n    }\n\n    // Not in a string chunk.\n    if (point._bufferIndex < 0) {\n      point._index++;\n    } else {\n      point._bufferIndex++;\n\n      // At end of string chunk.\n      if (point._bufferIndex ===\n      // Points w/ non-negative `_bufferIndex` reference\n      // strings.\n      /** @type {string} */\n      chunks[point._index].length) {\n        point._bufferIndex = -1;\n        point._index++;\n      }\n    }\n\n    // Expose the previous character.\n    context.previous = code;\n\n    // Mark as consumed.\n    consumed = true;\n  }\n\n  /** @type {Effects['enter']} */\n  function enter(type, fields) {\n    /** @type {Token} */\n    // @ts-expect-error Patch instead of assign required fields to help GC.\n    const token = fields || {};\n    token.type = type;\n    token.start = now();\n    context.events.push(['enter', token, context]);\n    stack.push(token);\n    return token;\n  }\n\n  /** @type {Effects['exit']} */\n  function exit(type) {\n    const token = stack.pop();\n    token.end = now();\n    context.events.push(['exit', token, context]);\n    return token;\n  }\n\n  /**\n   * Use results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulconstruct(construct, info) {\n    addResult(construct, info.from);\n  }\n\n  /**\n   * Discard results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulcheck(_, info) {\n    info.restore();\n  }\n\n  /**\n   * Factory to attempt/check/interrupt.\n   *\n   * @param {ReturnHandle} onreturn\n   *   Callback.\n   * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n   *   Fields.\n   */\n  function constructFactory(onreturn, fields) {\n    return hook;\n\n    /**\n     * Handle either an object mapping codes to constructs, a list of\n     * constructs, or a single construct.\n     *\n     * @param {Array<Construct> | ConstructRecord | Construct} constructs\n     *   Constructs.\n     * @param {State} returnState\n     *   State.\n     * @param {State | undefined} [bogusState]\n     *   State.\n     * @returns {State}\n     *   State.\n     */\n    function hook(constructs, returnState, bogusState) {\n      /** @type {ReadonlyArray<Construct>} */\n      let listOfConstructs;\n      /** @type {number} */\n      let constructIndex;\n      /** @type {Construct} */\n      let currentConstruct;\n      /** @type {Info} */\n      let info;\n      return Array.isArray(constructs) ? /* c8 ignore next 1 */\n      handleListOfConstructs(constructs) : 'tokenize' in constructs ?\n      // Looks like a construct.\n      handleListOfConstructs([(/** @type {Construct} */constructs)]) : handleMapOfConstructs(constructs);\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ConstructRecord} map\n       *   Constructs.\n       * @returns {State}\n       *   State.\n       */\n      function handleMapOfConstructs(map) {\n        return start;\n\n        /** @type {State} */\n        function start(code) {\n          const left = code !== null && map[code];\n          const all = code !== null && map.null;\n          const list = [\n          // To do: add more extension tests.\n          /* c8 ignore next 2 */\n          ...(Array.isArray(left) ? left : left ? [left] : []), ...(Array.isArray(all) ? all : all ? [all] : [])];\n          return handleListOfConstructs(list)(code);\n        }\n      }\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ReadonlyArray<Construct>} list\n       *   Constructs.\n       * @returns {State}\n       *   State.\n       */\n      function handleListOfConstructs(list) {\n        listOfConstructs = list;\n        constructIndex = 0;\n        if (list.length === 0) {\n          return bogusState;\n        }\n        return handleConstruct(list[constructIndex]);\n      }\n\n      /**\n       * Handle a single construct.\n       *\n       * @param {Construct} construct\n       *   Construct.\n       * @returns {State}\n       *   State.\n       */\n      function handleConstruct(construct) {\n        return start;\n\n        /** @type {State} */\n        function start(code) {\n          // To do: not needed to store if there is no bogus state, probably?\n          // Currently doesn’t work because `inspect` in document does a check\n          // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n          // by not storing.\n          info = store();\n          currentConstruct = construct;\n          if (!construct.partial) {\n            context.currentConstruct = construct;\n          }\n\n          // Always populated by defaults.\n\n          if (construct.name && context.parser.constructs.disable.null.includes(construct.name)) {\n            return nok(code);\n          }\n          return construct.tokenize.call(\n          // If we do have fields, create an object w/ `context` as its\n          // prototype.\n          // This allows a “live binding”, which is needed for `interrupt`.\n          fields ? Object.assign(Object.create(context), fields) : context, effects, ok, nok)(code);\n        }\n      }\n\n      /** @type {State} */\n      function ok(code) {\n        consumed = true;\n        onreturn(currentConstruct, info);\n        return returnState;\n      }\n\n      /** @type {State} */\n      function nok(code) {\n        consumed = true;\n        info.restore();\n        if (++constructIndex < listOfConstructs.length) {\n          return handleConstruct(listOfConstructs[constructIndex]);\n        }\n        return bogusState;\n      }\n    }\n  }\n\n  /**\n   * @param {Construct} construct\n   *   Construct.\n   * @param {number} from\n   *   From.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function addResult(construct, from) {\n    if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n      resolveAllConstructs.push(construct);\n    }\n    if (construct.resolve) {\n      splice(context.events, from, context.events.length - from, construct.resolve(context.events.slice(from), context));\n    }\n    if (construct.resolveTo) {\n      context.events = construct.resolveTo(context.events, context);\n    }\n  }\n\n  /**\n   * Store state.\n   *\n   * @returns {Info}\n   *   Info.\n   */\n  function store() {\n    const startPoint = now();\n    const startPrevious = context.previous;\n    const startCurrentConstruct = context.currentConstruct;\n    const startEventsIndex = context.events.length;\n    const startStack = Array.from(stack);\n    return {\n      from: startEventsIndex,\n      restore\n    };\n\n    /**\n     * Restore state.\n     *\n     * @returns {undefined}\n     *   Nothing.\n     */\n    function restore() {\n      point = startPoint;\n      context.previous = startPrevious;\n      context.currentConstruct = startCurrentConstruct;\n      context.events.length = startEventsIndex;\n      stack = startStack;\n      accountForPotentialSkip();\n    }\n  }\n\n  /**\n   * Move the current point a bit forward in the line when it’s on a column\n   * skip.\n   *\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function accountForPotentialSkip() {\n    if (point.line in columnStart && point.column < 2) {\n      point.column = columnStart[point.line];\n      point.offset += columnStart[point.line] - 1;\n    }\n  }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {ReadonlyArray<Chunk>} chunks\n *   Chunks.\n * @param {Pick<Token, 'end' | 'start'>} token\n *   Token.\n * @returns {Array<Chunk>}\n *   Chunks.\n */\nfunction sliceChunks(chunks, token) {\n  const startIndex = token.start._index;\n  const startBufferIndex = token.start._bufferIndex;\n  const endIndex = token.end._index;\n  const endBufferIndex = token.end._bufferIndex;\n  /** @type {Array<Chunk>} */\n  let view;\n  if (startIndex === endIndex) {\n    // @ts-expect-error `_bufferIndex` is used on string chunks.\n    view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)];\n  } else {\n    view = chunks.slice(startIndex, endIndex);\n    if (startBufferIndex > -1) {\n      const head = view[0];\n      if (typeof head === 'string') {\n        view[0] = head.slice(startBufferIndex);\n        /* c8 ignore next 4 -- used to be used, no longer */\n      } else {\n        view.shift();\n      }\n    }\n    if (endBufferIndex > 0) {\n      // @ts-expect-error `_bufferIndex` is used on string chunks.\n      view.push(chunks[endIndex].slice(0, endBufferIndex));\n    }\n  }\n  return view;\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {ReadonlyArray<Chunk>} chunks\n *   Chunks.\n * @param {boolean | undefined} [expandTabs=false]\n *   Whether to expand tabs (default: `false`).\n * @returns {string}\n *   Result.\n */\nfunction serializeChunks(chunks, expandTabs) {\n  let index = -1;\n  /** @type {Array<string>} */\n  const result = [];\n  /** @type {boolean | undefined} */\n  let atTab;\n  while (++index < chunks.length) {\n    const chunk = chunks[index];\n    /** @type {string} */\n    let value;\n    if (typeof chunk === 'string') {\n      value = chunk;\n    } else switch (chunk) {\n      case -5:\n        {\n          value = \"\\r\";\n          break;\n        }\n      case -4:\n        {\n          value = \"\\n\";\n          break;\n        }\n      case -3:\n        {\n          value = \"\\r\" + \"\\n\";\n          break;\n        }\n      case -2:\n        {\n          value = expandTabs ? \" \" : \"\\t\";\n          break;\n        }\n      case -1:\n        {\n          if (!expandTabs && atTab) continue;\n          value = \" \";\n          break;\n        }\n      default:\n        {\n          // Currently only replacement character.\n          value = String.fromCharCode(chunk);\n        }\n    }\n    atTab = chunk === -2;\n    result.push(value);\n  }\n  return result.join('');\n}","/**\n * @import {\n *   Create,\n *   FullNormalizedExtension,\n *   InitialConstruct,\n *   ParseContext,\n *   ParseOptions\n * } from 'micromark-util-types'\n */\n\nimport { combineExtensions } from 'micromark-util-combine-extensions';\nimport { content } from './initialize/content.js';\nimport { document } from './initialize/document.js';\nimport { flow } from './initialize/flow.js';\nimport { string, text } from './initialize/text.js';\nimport * as defaultConstructs from './constructs.js';\nimport { createTokenizer } from './create-tokenizer.js';\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n *   Configuration (optional).\n * @returns {ParseContext}\n *   Parser.\n */\nexport function parse(options) {\n  const settings = options || {};\n  const constructs = /** @type {FullNormalizedExtension} */\n  combineExtensions([defaultConstructs, ...(settings.extensions || [])]);\n\n  /** @type {ParseContext} */\n  const parser = {\n    constructs,\n    content: create(content),\n    defined: [],\n    document: create(document),\n    flow: create(flow),\n    lazy: {},\n    string: create(string),\n    text: create(text)\n  };\n  return parser;\n\n  /**\n   * @param {InitialConstruct} initial\n   *   Construct to start with.\n   * @returns {Create}\n   *   Create a tokenizer.\n   */\n  function create(initial) {\n    return creator;\n    /** @type {Create} */\n    function creator(from) {\n      return createTokenizer(parser, initial, from);\n    }\n  }\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\nimport { subtokenize } from 'micromark-util-subtokenize';\n\n/**\n * @param {Array<Event>} events\n *   Events.\n * @returns {Array<Event>}\n *   Events.\n */\nexport function postprocess(events) {\n  while (!subtokenize(events)) {\n    // Empty\n  }\n  return events;\n}","/**\n * @import {Chunk, Code, Encoding, Value} from 'micromark-util-types'\n */\n\n/**\n * @callback Preprocessor\n *   Preprocess a value.\n * @param {Value} value\n *   Value.\n * @param {Encoding | null | undefined} [encoding]\n *   Encoding when `value` is a typed array (optional).\n * @param {boolean | null | undefined} [end=false]\n *   Whether this is the last chunk (default: `false`).\n * @returns {Array<Chunk>}\n *   Chunks.\n */\n\nconst search = /[\\0\\t\\n\\r]/g;\n\n/**\n * @returns {Preprocessor}\n *   Preprocess a value.\n */\nexport function preprocess() {\n  let column = 1;\n  let buffer = '';\n  /** @type {boolean | undefined} */\n  let start = true;\n  /** @type {boolean | undefined} */\n  let atCarriageReturn;\n  return preprocessor;\n\n  /** @type {Preprocessor} */\n  // eslint-disable-next-line complexity\n  function preprocessor(value, encoding, end) {\n    /** @type {Array<Chunk>} */\n    const chunks = [];\n    /** @type {RegExpMatchArray | null} */\n    let match;\n    /** @type {number} */\n    let next;\n    /** @type {number} */\n    let startPosition;\n    /** @type {number} */\n    let endPosition;\n    /** @type {Code} */\n    let code;\n    value = buffer + (typeof value === 'string' ? value.toString() : new TextDecoder(encoding || undefined).decode(value));\n    startPosition = 0;\n    buffer = '';\n    if (start) {\n      // To do: `markdown-rs` actually parses BOMs (byte order mark).\n      if (value.charCodeAt(0) === 65279) {\n        startPosition++;\n      }\n      start = undefined;\n    }\n    while (startPosition < value.length) {\n      search.lastIndex = startPosition;\n      match = search.exec(value);\n      endPosition = match && match.index !== undefined ? match.index : value.length;\n      code = value.charCodeAt(endPosition);\n      if (!match) {\n        buffer = value.slice(startPosition);\n        break;\n      }\n      if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n        chunks.push(-3);\n        atCarriageReturn = undefined;\n      } else {\n        if (atCarriageReturn) {\n          chunks.push(-5);\n          atCarriageReturn = undefined;\n        }\n        if (startPosition < endPosition) {\n          chunks.push(value.slice(startPosition, endPosition));\n          column += endPosition - startPosition;\n        }\n        switch (code) {\n          case 0:\n            {\n              chunks.push(65533);\n              column++;\n              break;\n            }\n          case 9:\n            {\n              next = Math.ceil(column / 4) * 4;\n              chunks.push(-2);\n              while (column++ < next) chunks.push(-1);\n              break;\n            }\n          case 10:\n            {\n              chunks.push(-4);\n              column = 1;\n              break;\n            }\n          default:\n            {\n              atCarriageReturn = true;\n              column = 1;\n            }\n        }\n      }\n      startPosition = endPosition + 1;\n    }\n    if (end) {\n      if (atCarriageReturn) chunks.push(-5);\n      if (buffer) chunks.push(buffer);\n      chunks.push(null);\n    }\n    return chunks;\n  }\n}","import { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nconst characterEscapeOrReference = /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi;\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n *   Value to decode.\n * @returns {string}\n *   Decoded value.\n */\nexport function decodeString(value) {\n  return value.replace(characterEscapeOrReference, decode);\n}\n\n/**\n * @param {string} $0\n *   Match.\n * @param {string} $1\n *   Character escape.\n * @param {string} $2\n *   Character reference.\n * @returns {string}\n *   Decoded value\n */\nfunction decode($0, $1, $2) {\n  if ($1) {\n    // Escape.\n    return $1;\n  }\n\n  // Reference.\n  const head = $2.charCodeAt(0);\n  if (head === 35) {\n    const head = $2.charCodeAt(1);\n    const hex = head === 120 || head === 88;\n    return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10);\n  }\n  return decodeNamedCharacterReference($2) || $0;\n}","/**\n * @import {\n *   Break,\n *   Blockquote,\n *   Code,\n *   Definition,\n *   Emphasis,\n *   Heading,\n *   Html,\n *   Image,\n *   InlineCode,\n *   Link,\n *   ListItem,\n *   List,\n *   Nodes,\n *   Paragraph,\n *   PhrasingContent,\n *   ReferenceType,\n *   Root,\n *   Strong,\n *   Text,\n *   ThematicBreak\n * } from 'mdast'\n * @import {\n *   Encoding,\n *   Event,\n *   Token,\n *   Value\n * } from 'micromark-util-types'\n * @import {Point} from 'unist'\n * @import {\n *   CompileContext,\n *   CompileData,\n *   Config,\n *   Extension,\n *   Handle,\n *   OnEnterError,\n *   Options\n * } from './types.js'\n */\n\nimport { toString } from 'mdast-util-to-string';\nimport { parse, postprocess, preprocess } from 'micromark';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nimport { decodeString } from 'micromark-util-decode-string';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { stringifyPosition } from 'unist-util-stringify-position';\nconst own = {}.hasOwnProperty;\n\n/**\n * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n *   Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n *   Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {Root}\n *   mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n  if (typeof encoding !== 'string') {\n    options = encoding;\n    encoding = undefined;\n  }\n  return compiler(options)(postprocess(parse(options).document().write(preprocess()(value, encoding, true))));\n}\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n  /** @type {Config} */\n  const config = {\n    transforms: [],\n    canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n    enter: {\n      autolink: opener(link),\n      autolinkProtocol: onenterdata,\n      autolinkEmail: onenterdata,\n      atxHeading: opener(heading),\n      blockQuote: opener(blockQuote),\n      characterEscape: onenterdata,\n      characterReference: onenterdata,\n      codeFenced: opener(codeFlow),\n      codeFencedFenceInfo: buffer,\n      codeFencedFenceMeta: buffer,\n      codeIndented: opener(codeFlow, buffer),\n      codeText: opener(codeText, buffer),\n      codeTextData: onenterdata,\n      data: onenterdata,\n      codeFlowValue: onenterdata,\n      definition: opener(definition),\n      definitionDestinationString: buffer,\n      definitionLabelString: buffer,\n      definitionTitleString: buffer,\n      emphasis: opener(emphasis),\n      hardBreakEscape: opener(hardBreak),\n      hardBreakTrailing: opener(hardBreak),\n      htmlFlow: opener(html, buffer),\n      htmlFlowData: onenterdata,\n      htmlText: opener(html, buffer),\n      htmlTextData: onenterdata,\n      image: opener(image),\n      label: buffer,\n      link: opener(link),\n      listItem: opener(listItem),\n      listItemValue: onenterlistitemvalue,\n      listOrdered: opener(list, onenterlistordered),\n      listUnordered: opener(list),\n      paragraph: opener(paragraph),\n      reference: onenterreference,\n      referenceString: buffer,\n      resourceDestinationString: buffer,\n      resourceTitleString: buffer,\n      setextHeading: opener(heading),\n      strong: opener(strong),\n      thematicBreak: opener(thematicBreak)\n    },\n    exit: {\n      atxHeading: closer(),\n      atxHeadingSequence: onexitatxheadingsequence,\n      autolink: closer(),\n      autolinkEmail: onexitautolinkemail,\n      autolinkProtocol: onexitautolinkprotocol,\n      blockQuote: closer(),\n      characterEscapeValue: onexitdata,\n      characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n      characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n      characterReferenceValue: onexitcharacterreferencevalue,\n      characterReference: onexitcharacterreference,\n      codeFenced: closer(onexitcodefenced),\n      codeFencedFence: onexitcodefencedfence,\n      codeFencedFenceInfo: onexitcodefencedfenceinfo,\n      codeFencedFenceMeta: onexitcodefencedfencemeta,\n      codeFlowValue: onexitdata,\n      codeIndented: closer(onexitcodeindented),\n      codeText: closer(onexitcodetext),\n      codeTextData: onexitdata,\n      data: onexitdata,\n      definition: closer(),\n      definitionDestinationString: onexitdefinitiondestinationstring,\n      definitionLabelString: onexitdefinitionlabelstring,\n      definitionTitleString: onexitdefinitiontitlestring,\n      emphasis: closer(),\n      hardBreakEscape: closer(onexithardbreak),\n      hardBreakTrailing: closer(onexithardbreak),\n      htmlFlow: closer(onexithtmlflow),\n      htmlFlowData: onexitdata,\n      htmlText: closer(onexithtmltext),\n      htmlTextData: onexitdata,\n      image: closer(onexitimage),\n      label: onexitlabel,\n      labelText: onexitlabeltext,\n      lineEnding: onexitlineending,\n      link: closer(onexitlink),\n      listItem: closer(),\n      listOrdered: closer(),\n      listUnordered: closer(),\n      paragraph: closer(),\n      referenceString: onexitreferencestring,\n      resourceDestinationString: onexitresourcedestinationstring,\n      resourceTitleString: onexitresourcetitlestring,\n      resource: onexitresource,\n      setextHeading: closer(onexitsetextheading),\n      setextHeadingLineSequence: onexitsetextheadinglinesequence,\n      setextHeadingText: onexitsetextheadingtext,\n      strong: closer(),\n      thematicBreak: closer()\n    }\n  };\n  configure(config, (options || {}).mdastExtensions || []);\n\n  /** @type {CompileData} */\n  const data = {};\n  return compile;\n\n  /**\n   * Turn micromark events into an mdast tree.\n   *\n   * @param {Array<Event>} events\n   *   Events.\n   * @returns {Root}\n   *   mdast tree.\n   */\n  function compile(events) {\n    /** @type {Root} */\n    let tree = {\n      type: 'root',\n      children: []\n    };\n    /** @type {Omit<CompileContext, 'sliceSerialize'>} */\n    const context = {\n      stack: [tree],\n      tokenStack: [],\n      config,\n      enter,\n      exit,\n      buffer,\n      resume,\n      data\n    };\n    /** @type {Array<number>} */\n    const listStack = [];\n    let index = -1;\n    while (++index < events.length) {\n      // We preprocess lists to add `listItem` tokens, and to infer whether\n      // items the list itself are spread out.\n      if (events[index][1].type === \"listOrdered\" || events[index][1].type === \"listUnordered\") {\n        if (events[index][0] === 'enter') {\n          listStack.push(index);\n        } else {\n          const tail = listStack.pop();\n          index = prepareList(events, tail, index);\n        }\n      }\n    }\n    index = -1;\n    while (++index < events.length) {\n      const handler = config[events[index][0]];\n      if (own.call(handler, events[index][1].type)) {\n        handler[events[index][1].type].call(Object.assign({\n          sliceSerialize: events[index][2].sliceSerialize\n        }, context), events[index][1]);\n      }\n    }\n\n    // Handle tokens still being open.\n    if (context.tokenStack.length > 0) {\n      const tail = context.tokenStack[context.tokenStack.length - 1];\n      const handler = tail[1] || defaultOnError;\n      handler.call(context, undefined, tail[0]);\n    }\n\n    // Figure out `root` position.\n    tree.position = {\n      start: point(events.length > 0 ? events[0][1].start : {\n        line: 1,\n        column: 1,\n        offset: 0\n      }),\n      end: point(events.length > 0 ? events[events.length - 2][1].end : {\n        line: 1,\n        column: 1,\n        offset: 0\n      })\n    };\n\n    // Call transforms.\n    index = -1;\n    while (++index < config.transforms.length) {\n      tree = config.transforms[index](tree) || tree;\n    }\n    return tree;\n  }\n\n  /**\n   * @param {Array<Event>} events\n   * @param {number} start\n   * @param {number} length\n   * @returns {number}\n   */\n  function prepareList(events, start, length) {\n    let index = start - 1;\n    let containerBalance = -1;\n    let listSpread = false;\n    /** @type {Token | undefined} */\n    let listItem;\n    /** @type {number | undefined} */\n    let lineIndex;\n    /** @type {number | undefined} */\n    let firstBlankLineIndex;\n    /** @type {boolean | undefined} */\n    let atMarker;\n    while (++index <= length) {\n      const event = events[index];\n      switch (event[1].type) {\n        case \"listUnordered\":\n        case \"listOrdered\":\n        case \"blockQuote\":\n          {\n            if (event[0] === 'enter') {\n              containerBalance++;\n            } else {\n              containerBalance--;\n            }\n            atMarker = undefined;\n            break;\n          }\n        case \"lineEndingBlank\":\n          {\n            if (event[0] === 'enter') {\n              if (listItem && !atMarker && !containerBalance && !firstBlankLineIndex) {\n                firstBlankLineIndex = index;\n              }\n              atMarker = undefined;\n            }\n            break;\n          }\n        case \"linePrefix\":\n        case \"listItemValue\":\n        case \"listItemMarker\":\n        case \"listItemPrefix\":\n        case \"listItemPrefixWhitespace\":\n          {\n            // Empty.\n\n            break;\n          }\n        default:\n          {\n            atMarker = undefined;\n          }\n      }\n      if (!containerBalance && event[0] === 'enter' && event[1].type === \"listItemPrefix\" || containerBalance === -1 && event[0] === 'exit' && (event[1].type === \"listUnordered\" || event[1].type === \"listOrdered\")) {\n        if (listItem) {\n          let tailIndex = index;\n          lineIndex = undefined;\n          while (tailIndex--) {\n            const tailEvent = events[tailIndex];\n            if (tailEvent[1].type === \"lineEnding\" || tailEvent[1].type === \"lineEndingBlank\") {\n              if (tailEvent[0] === 'exit') continue;\n              if (lineIndex) {\n                events[lineIndex][1].type = \"lineEndingBlank\";\n                listSpread = true;\n              }\n              tailEvent[1].type = \"lineEnding\";\n              lineIndex = tailIndex;\n            } else if (tailEvent[1].type === \"linePrefix\" || tailEvent[1].type === \"blockQuotePrefix\" || tailEvent[1].type === \"blockQuotePrefixWhitespace\" || tailEvent[1].type === \"blockQuoteMarker\" || tailEvent[1].type === \"listItemIndent\") {\n              // Empty\n            } else {\n              break;\n            }\n          }\n          if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) {\n            listItem._spread = true;\n          }\n\n          // Fix position.\n          listItem.end = Object.assign({}, lineIndex ? events[lineIndex][1].start : event[1].end);\n          events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]);\n          index++;\n          length++;\n        }\n\n        // Create a new list item.\n        if (event[1].type === \"listItemPrefix\") {\n          /** @type {Token} */\n          const item = {\n            type: 'listItem',\n            _spread: false,\n            start: Object.assign({}, event[1].start),\n            // @ts-expect-error: we’ll add `end` in a second.\n            end: undefined\n          };\n          listItem = item;\n          events.splice(index, 0, ['enter', item, event[2]]);\n          index++;\n          length++;\n          firstBlankLineIndex = undefined;\n          atMarker = true;\n        }\n      }\n    }\n    events[start][1]._spread = listSpread;\n    return length;\n  }\n\n  /**\n   * Create an opener handle.\n   *\n   * @param {(token: Token) => Nodes} create\n   *   Create a node.\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function opener(create, and) {\n    return open;\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function open(token) {\n      enter.call(this, create(token), token);\n      if (and) and.call(this, token);\n    }\n  }\n\n  /**\n   * @type {CompileContext['buffer']}\n   */\n  function buffer() {\n    this.stack.push({\n      type: 'fragment',\n      children: []\n    });\n  }\n\n  /**\n   * @type {CompileContext['enter']}\n   */\n  function enter(node, token, errorHandler) {\n    const parent = this.stack[this.stack.length - 1];\n    /** @type {Array<Nodes>} */\n    const siblings = parent.children;\n    siblings.push(node);\n    this.stack.push(node);\n    this.tokenStack.push([token, errorHandler || undefined]);\n    node.position = {\n      start: point(token.start),\n      // @ts-expect-error: `end` will be patched later.\n      end: undefined\n    };\n  }\n\n  /**\n   * Create a closer handle.\n   *\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function closer(and) {\n    return close;\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function close(token) {\n      if (and) and.call(this, token);\n      exit.call(this, token);\n    }\n  }\n\n  /**\n   * @type {CompileContext['exit']}\n   */\n  function exit(token, onExitError) {\n    const node = this.stack.pop();\n    const open = this.tokenStack.pop();\n    if (!open) {\n      throw new Error('Cannot close `' + token.type + '` (' + stringifyPosition({\n        start: token.start,\n        end: token.end\n      }) + '): it’s not open');\n    } else if (open[0].type !== token.type) {\n      if (onExitError) {\n        onExitError.call(this, token, open[0]);\n      } else {\n        const handler = open[1] || defaultOnError;\n        handler.call(this, token, open[0]);\n      }\n    }\n    node.position.end = point(token.end);\n  }\n\n  /**\n   * @type {CompileContext['resume']}\n   */\n  function resume() {\n    return toString(this.stack.pop());\n  }\n\n  //\n  // Handlers.\n  //\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistordered() {\n    this.data.expectingFirstListItemValue = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistitemvalue(token) {\n    if (this.data.expectingFirstListItemValue) {\n      const ancestor = this.stack[this.stack.length - 2];\n      ancestor.start = Number.parseInt(this.sliceSerialize(token), 10);\n      this.data.expectingFirstListItemValue = undefined;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfenceinfo() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.lang = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfencemeta() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.meta = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfence() {\n    // Exit if this is the closing fence.\n    if (this.data.flowCodeInside) return;\n    this.buffer();\n    this.data.flowCodeInside = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefenced() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '');\n    this.data.flowCodeInside = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodeindented() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data.replace(/(\\r?\\n|\\r)$/g, '');\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitionlabelstring(token) {\n    const label = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.label = label;\n    node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiontitlestring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.title = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiondestinationstring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.url = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitatxheadingsequence(token) {\n    const node = this.stack[this.stack.length - 1];\n    if (!node.depth) {\n      const depth = this.sliceSerialize(token).length;\n      node.depth = depth;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadingtext() {\n    this.data.setextHeadingSlurpLineEnding = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadinglinesequence(token) {\n    const node = this.stack[this.stack.length - 1];\n    node.depth = this.sliceSerialize(token).codePointAt(0) === 61 ? 1 : 2;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheading() {\n    this.data.setextHeadingSlurpLineEnding = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterdata(token) {\n    const node = this.stack[this.stack.length - 1];\n    /** @type {Array<Nodes>} */\n    const siblings = node.children;\n    let tail = siblings[siblings.length - 1];\n    if (!tail || tail.type !== 'text') {\n      // Add a new text node.\n      tail = text();\n      tail.position = {\n        start: point(token.start),\n        // @ts-expect-error: we’ll add `end` later.\n        end: undefined\n      };\n      siblings.push(tail);\n    }\n    this.stack.push(tail);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitdata(token) {\n    const tail = this.stack.pop();\n    tail.value += this.sliceSerialize(token);\n    tail.position.end = point(token.end);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlineending(token) {\n    const context = this.stack[this.stack.length - 1];\n    // If we’re at a hard break, include the line ending in there.\n    if (this.data.atHardBreak) {\n      const tail = context.children[context.children.length - 1];\n      tail.position.end = point(token.end);\n      this.data.atHardBreak = undefined;\n      return;\n    }\n    if (!this.data.setextHeadingSlurpLineEnding && config.canContainEols.includes(context.type)) {\n      onenterdata.call(this, token);\n      onexitdata.call(this, token);\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithardbreak() {\n    this.data.atHardBreak = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmlflow() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmltext() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcodetext() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlink() {\n    const node = this.stack[this.stack.length - 1];\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut';\n      node.type += 'Reference';\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType;\n      // @ts-expect-error: mutate.\n      delete node.url;\n      delete node.title;\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier;\n      // @ts-expect-error: mutate.\n      delete node.label;\n    }\n    this.data.referenceType = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitimage() {\n    const node = this.stack[this.stack.length - 1];\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut';\n      node.type += 'Reference';\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType;\n      // @ts-expect-error: mutate.\n      delete node.url;\n      delete node.title;\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier;\n      // @ts-expect-error: mutate.\n      delete node.label;\n    }\n    this.data.referenceType = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabeltext(token) {\n    const string = this.sliceSerialize(token);\n    const ancestor = this.stack[this.stack.length - 2];\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    ancestor.label = decodeString(string);\n    // @ts-expect-error: same as above.\n    ancestor.identifier = normalizeIdentifier(string).toLowerCase();\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabel() {\n    const fragment = this.stack[this.stack.length - 1];\n    const value = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    // Assume a reference.\n    this.data.inReference = true;\n    if (node.type === 'link') {\n      /** @type {Array<PhrasingContent>} */\n      const children = fragment.children;\n      node.children = children;\n    } else {\n      node.alt = value;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcedestinationstring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.url = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcetitlestring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.title = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresource() {\n    this.data.inReference = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterreference() {\n    this.data.referenceType = 'collapsed';\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitreferencestring(token) {\n    const label = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    node.label = label;\n    // @ts-expect-error: same as above.\n    node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n    this.data.referenceType = 'full';\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcharacterreferencemarker(token) {\n    this.data.characterReferenceType = token.type;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreferencevalue(token) {\n    const data = this.sliceSerialize(token);\n    const type = this.data.characterReferenceType;\n    /** @type {string} */\n    let value;\n    if (type) {\n      value = decodeNumericCharacterReference(data, type === \"characterReferenceMarkerNumeric\" ? 10 : 16);\n      this.data.characterReferenceType = undefined;\n    } else {\n      const result = decodeNamedCharacterReference(data);\n      value = result;\n    }\n    const tail = this.stack[this.stack.length - 1];\n    tail.value += value;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreference(token) {\n    const tail = this.stack.pop();\n    tail.position.end = point(token.end);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkprotocol(token) {\n    onexitdata.call(this, token);\n    const node = this.stack[this.stack.length - 1];\n    node.url = this.sliceSerialize(token);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkemail(token) {\n    onexitdata.call(this, token);\n    const node = this.stack[this.stack.length - 1];\n    node.url = 'mailto:' + this.sliceSerialize(token);\n  }\n\n  //\n  // Creaters.\n  //\n\n  /** @returns {Blockquote} */\n  function blockQuote() {\n    return {\n      type: 'blockquote',\n      children: []\n    };\n  }\n\n  /** @returns {Code} */\n  function codeFlow() {\n    return {\n      type: 'code',\n      lang: null,\n      meta: null,\n      value: ''\n    };\n  }\n\n  /** @returns {InlineCode} */\n  function codeText() {\n    return {\n      type: 'inlineCode',\n      value: ''\n    };\n  }\n\n  /** @returns {Definition} */\n  function definition() {\n    return {\n      type: 'definition',\n      identifier: '',\n      label: null,\n      title: null,\n      url: ''\n    };\n  }\n\n  /** @returns {Emphasis} */\n  function emphasis() {\n    return {\n      type: 'emphasis',\n      children: []\n    };\n  }\n\n  /** @returns {Heading} */\n  function heading() {\n    return {\n      type: 'heading',\n      // @ts-expect-error `depth` will be set later.\n      depth: 0,\n      children: []\n    };\n  }\n\n  /** @returns {Break} */\n  function hardBreak() {\n    return {\n      type: 'break'\n    };\n  }\n\n  /** @returns {Html} */\n  function html() {\n    return {\n      type: 'html',\n      value: ''\n    };\n  }\n\n  /** @returns {Image} */\n  function image() {\n    return {\n      type: 'image',\n      title: null,\n      url: '',\n      alt: null\n    };\n  }\n\n  /** @returns {Link} */\n  function link() {\n    return {\n      type: 'link',\n      title: null,\n      url: '',\n      children: []\n    };\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {List}\n   */\n  function list(token) {\n    return {\n      type: 'list',\n      ordered: token.type === 'listOrdered',\n      start: null,\n      spread: token._spread,\n      children: []\n    };\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {ListItem}\n   */\n  function listItem(token) {\n    return {\n      type: 'listItem',\n      spread: token._spread,\n      checked: null,\n      children: []\n    };\n  }\n\n  /** @returns {Paragraph} */\n  function paragraph() {\n    return {\n      type: 'paragraph',\n      children: []\n    };\n  }\n\n  /** @returns {Strong} */\n  function strong() {\n    return {\n      type: 'strong',\n      children: []\n    };\n  }\n\n  /** @returns {Text} */\n  function text() {\n    return {\n      type: 'text',\n      value: ''\n    };\n  }\n\n  /** @returns {ThematicBreak} */\n  function thematicBreak() {\n    return {\n      type: 'thematicBreak'\n    };\n  }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n *   Point-like value.\n * @returns {Point}\n *   unist point.\n */\nfunction point(d) {\n  return {\n    line: d.line,\n    column: d.column,\n    offset: d.offset\n  };\n}\n\n/**\n * @param {Config} combined\n * @param {Array<Array<Extension> | Extension>} extensions\n * @returns {undefined}\n */\nfunction configure(combined, extensions) {\n  let index = -1;\n  while (++index < extensions.length) {\n    const value = extensions[index];\n    if (Array.isArray(value)) {\n      configure(combined, value);\n    } else {\n      extension(combined, value);\n    }\n  }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {undefined}\n */\nfunction extension(combined, extension) {\n  /** @type {keyof Extension} */\n  let key;\n  for (key in extension) {\n    if (own.call(extension, key)) {\n      switch (key) {\n        case 'canContainEols':\n          {\n            const right = extension[key];\n            if (right) {\n              combined[key].push(...right);\n            }\n            break;\n          }\n        case 'transforms':\n          {\n            const right = extension[key];\n            if (right) {\n              combined[key].push(...right);\n            }\n            break;\n          }\n        case 'enter':\n        case 'exit':\n          {\n            const right = extension[key];\n            if (right) {\n              Object.assign(combined[key], right);\n            }\n            break;\n          }\n        // No default\n      }\n    }\n  }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n  if (left) {\n    throw new Error('Cannot close `' + left.type + '` (' + stringifyPosition({\n      start: left.start,\n      end: left.end\n    }) + '): a different token (`' + right.type + '`, ' + stringifyPosition({\n      start: right.start,\n      end: right.end\n    }) + ') is open');\n  } else {\n    throw new Error('Cannot close document, a token (`' + right.type + '`, ' + stringifyPosition({\n      start: right.start,\n      end: right.end\n    }) + ') is still open');\n  }\n}","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions\n * @typedef {import('unified').Parser<Root>} Parser\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\n/**\n * @typedef {Omit<FromMarkdownOptions, 'extensions' | 'mdastExtensions'>} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * Aadd support for parsing from markdown.\n *\n * @param {Readonly<Options> | null | undefined} [options]\n *   Configuration (optional).\n * @returns {undefined}\n *   Nothing.\n */\nexport default function remarkParse(options) {\n  /** @type {Processor} */\n  // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n  const self = this\n\n  self.parser = parser\n\n  /**\n   * @type {Parser}\n   */\n  function parser(doc) {\n    return fromMarkdown(doc, {\n      ...self.data('settings'),\n      ...options,\n      // Note: these options are not in the readme.\n      // The goal is for them to be set by plugins on `data` instead of being\n      // passed by users.\n      extensions: self.data('micromarkExtensions') || [],\n      mdastExtensions: self.data('fromMarkdownExtensions') || []\n    })\n  }\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Blockquote} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `blockquote` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Blockquote} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function blockquote(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'blockquote',\n    properties: {},\n    children: state.wrap(state.all(node), true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Text} from 'hast'\n * @import {Break} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `break` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Break} node\n *   mdast node.\n * @returns {Array<Element | Text>}\n *   hast element content.\n */\nexport function hardBreak(state, node) {\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'br', properties: {}, children: []}\n  state.patch(node, result)\n  return [state.applyData(node, result), {type: 'text', value: '\\n'}]\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Code} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `code` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Code} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function code(state, node) {\n  const value = node.value ? node.value + '\\n' : ''\n  /** @type {Properties} */\n  const properties = {}\n  // Someone can write `js&#x20;python&#x9;ruby`.\n  const language = node.lang ? node.lang.split(/\\s+/) : []\n\n  // GH/CM still drop the non-first languages.\n  if (language.length > 0) {\n    properties.className = ['language-' + language[0]]\n  }\n\n  // Create `<code>`.\n  /** @type {Element} */\n  let result = {\n    type: 'element',\n    tagName: 'code',\n    properties,\n    children: [{type: 'text', value}]\n  }\n\n  if (node.meta) {\n    result.data = {meta: node.meta}\n  }\n\n  state.patch(node, result)\n  result = state.applyData(node, result)\n\n  // Create `<pre>`.\n  result = {type: 'element', tagName: 'pre', properties: {}, children: [result]}\n  state.patch(node, result)\n  return result\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Delete} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `delete` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Delete} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strikethrough(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'del',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Emphasis} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `emphasis` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Emphasis} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function emphasis(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'em',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {FootnoteReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `footnoteReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {FootnoteReference} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function footnoteReference(state, node) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const id = String(node.identifier).toUpperCase()\n  const safeId = normalizeUri(id.toLowerCase())\n  const index = state.footnoteOrder.indexOf(id)\n  /** @type {number} */\n  let counter\n\n  let reuseCounter = state.footnoteCounts.get(id)\n\n  if (reuseCounter === undefined) {\n    reuseCounter = 0\n    state.footnoteOrder.push(id)\n    counter = state.footnoteOrder.length\n  } else {\n    counter = index + 1\n  }\n\n  reuseCounter += 1\n  state.footnoteCounts.set(id, reuseCounter)\n\n  /** @type {Element} */\n  const link = {\n    type: 'element',\n    tagName: 'a',\n    properties: {\n      href: '#' + clobberPrefix + 'fn-' + safeId,\n      id:\n        clobberPrefix +\n        'fnref-' +\n        safeId +\n        (reuseCounter > 1 ? '-' + reuseCounter : ''),\n      dataFootnoteRef: true,\n      ariaDescribedBy: ['footnote-label']\n    },\n    children: [{type: 'text', value: String(counter)}]\n  }\n  state.patch(node, link)\n\n  /** @type {Element} */\n  const sup = {\n    type: 'element',\n    tagName: 'sup',\n    properties: {},\n    children: [link]\n  }\n  state.patch(node, sup)\n  return state.applyData(node, sup)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Heading} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `heading` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Heading} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function heading(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'h' + node.depth,\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Html} from 'mdast'\n * @import {State} from '../state.js'\n * @import {Raw} from '../../index.js'\n */\n\n/**\n * Turn an mdast `html` node into hast (`raw` node in dangerous mode, otherwise\n * nothing).\n *\n * @param {State} state\n *   Info passed around.\n * @param {Html} node\n *   mdast node.\n * @returns {Element | Raw | undefined}\n *   hast node.\n */\nexport function html(state, node) {\n  if (state.options.allowDangerousHtml) {\n    /** @type {Raw} */\n    const result = {type: 'raw', value: node.value}\n    state.patch(node, result)\n    return state.applyData(node, result)\n  }\n\n  return undefined\n}\n","/**\n * @import {ElementContent} from 'hast'\n * @import {Reference, Nodes} from 'mdast'\n * @import {State} from './state.js'\n */\n\n/**\n * Return the content of a reference without definition as plain text.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Extract<Nodes, Reference>} node\n *   Reference node (image, link).\n * @returns {Array<ElementContent>}\n *   hast content.\n */\nexport function revert(state, node) {\n  const subtype = node.referenceType\n  let suffix = ']'\n\n  if (subtype === 'collapsed') {\n    suffix += '[]'\n  } else if (subtype === 'full') {\n    suffix += '[' + (node.label || node.identifier) + ']'\n  }\n\n  if (node.type === 'imageReference') {\n    return [{type: 'text', value: '![' + node.alt + suffix}]\n  }\n\n  const contents = state.all(node)\n  const head = contents[0]\n\n  if (head && head.type === 'text') {\n    head.value = '[' + head.value\n  } else {\n    contents.unshift({type: 'text', value: '['})\n  }\n\n  const tail = contents[contents.length - 1]\n\n  if (tail && tail.type === 'text') {\n    tail.value += suffix\n  } else {\n    contents.push({type: 'text', value: suffix})\n  }\n\n  return contents\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {ImageReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `imageReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ImageReference} node\n *   mdast node.\n * @returns {Array<ElementContent> | ElementContent}\n *   hast node.\n */\nexport function imageReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(definition.url || ''), alt: node.alt}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Image} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `image` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Image} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function image(state, node) {\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(node.url)}\n\n  if (node.alt !== null && node.alt !== undefined) {\n    properties.alt = node.alt\n  }\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Text} from 'hast'\n * @import {InlineCode} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `inlineCode` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {InlineCode} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function inlineCode(state, node) {\n  /** @type {Text} */\n  const text = {type: 'text', value: node.value.replace(/\\r?\\n|\\r/g, ' ')}\n  state.patch(node, text)\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'code',\n    properties: {},\n    children: [text]\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {LinkReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `linkReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {LinkReference} node\n *   mdast node.\n * @returns {Array<ElementContent> | ElementContent}\n *   hast node.\n */\nexport function linkReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(definition.url || '')}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Link} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `link` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Link} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function link(state, node) {\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(node.url)}\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {ListItem, Parents} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `listItem` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ListItem} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function listItem(state, node, parent) {\n  const results = state.all(node)\n  const loose = parent ? listLoose(parent) : listItemLoose(node)\n  /** @type {Properties} */\n  const properties = {}\n  /** @type {Array<ElementContent>} */\n  const children = []\n\n  if (typeof node.checked === 'boolean') {\n    const head = results[0]\n    /** @type {Element} */\n    let paragraph\n\n    if (head && head.type === 'element' && head.tagName === 'p') {\n      paragraph = head\n    } else {\n      paragraph = {type: 'element', tagName: 'p', properties: {}, children: []}\n      results.unshift(paragraph)\n    }\n\n    if (paragraph.children.length > 0) {\n      paragraph.children.unshift({type: 'text', value: ' '})\n    }\n\n    paragraph.children.unshift({\n      type: 'element',\n      tagName: 'input',\n      properties: {type: 'checkbox', checked: node.checked, disabled: true},\n      children: []\n    })\n\n    // According to github-markdown-css, this class hides bullet.\n    // See: <https://github.com/sindresorhus/github-markdown-css>.\n    properties.className = ['task-list-item']\n  }\n\n  let index = -1\n\n  while (++index < results.length) {\n    const child = results[index]\n\n    // Add eols before nodes, except if this is a loose, first paragraph.\n    if (\n      loose ||\n      index !== 0 ||\n      child.type !== 'element' ||\n      child.tagName !== 'p'\n    ) {\n      children.push({type: 'text', value: '\\n'})\n    }\n\n    if (child.type === 'element' && child.tagName === 'p' && !loose) {\n      children.push(...child.children)\n    } else {\n      children.push(child)\n    }\n  }\n\n  const tail = results[results.length - 1]\n\n  // Add a final eol.\n  if (tail && (loose || tail.type !== 'element' || tail.tagName !== 'p')) {\n    children.push({type: 'text', value: '\\n'})\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'li', properties, children}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * @param {Parents} node\n * @return {Boolean}\n */\nfunction listLoose(node) {\n  let loose = false\n  if (node.type === 'list') {\n    loose = node.spread || false\n    const children = node.children\n    let index = -1\n\n    while (!loose && ++index < children.length) {\n      loose = listItemLoose(children[index])\n    }\n  }\n\n  return loose\n}\n\n/**\n * @param {ListItem} node\n * @return {Boolean}\n */\nfunction listItemLoose(node) {\n  const spread = node.spread\n\n  return spread === null || spread === undefined\n    ? node.children.length > 1\n    : spread\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {List} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `list` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {List} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function list(state, node) {\n  /** @type {Properties} */\n  const properties = {}\n  const results = state.all(node)\n  let index = -1\n\n  if (typeof node.start === 'number' && node.start !== 1) {\n    properties.start = node.start\n  }\n\n  // Like GitHub, add a class for custom styling.\n  while (++index < results.length) {\n    const child = results[index]\n\n    if (\n      child.type === 'element' &&\n      child.tagName === 'li' &&\n      child.properties &&\n      Array.isArray(child.properties.className) &&\n      child.properties.className.includes('task-list-item')\n    ) {\n      properties.className = ['contains-task-list']\n      break\n    }\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: node.ordered ? 'ol' : 'ul',\n    properties,\n    children: state.wrap(results, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Paragraph} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `paragraph` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Paragraph} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function paragraph(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'p',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Parents as HastParents, Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `root` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastRoot} node\n *   mdast node.\n * @returns {HastParents}\n *   hast node.\n */\nexport function root(state, node) {\n  /** @type {HastRoot} */\n  const result = {type: 'root', children: state.wrap(state.all(node))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Strong} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `strong` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Strong} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strong(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'strong',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Table} from 'mdast'\n * @import {Element} from 'hast'\n * @import {State} from '../state.js'\n */\n\nimport {pointEnd, pointStart} from 'unist-util-position'\n\n/**\n * Turn an mdast `table` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Table} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function table(state, node) {\n  const rows = state.all(node)\n  const firstRow = rows.shift()\n  /** @type {Array<Element>} */\n  const tableContent = []\n\n  if (firstRow) {\n    /** @type {Element} */\n    const head = {\n      type: 'element',\n      tagName: 'thead',\n      properties: {},\n      children: state.wrap([firstRow], true)\n    }\n    state.patch(node.children[0], head)\n    tableContent.push(head)\n  }\n\n  if (rows.length > 0) {\n    /** @type {Element} */\n    const body = {\n      type: 'element',\n      tagName: 'tbody',\n      properties: {},\n      children: state.wrap(rows, true)\n    }\n\n    const start = pointStart(node.children[1])\n    const end = pointEnd(node.children[node.children.length - 1])\n    if (start && end) body.position = {start, end}\n    tableContent.push(body)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'table',\n    properties: {},\n    children: state.wrap(tableContent, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, ElementContent, Properties} from 'hast'\n * @import {Parents, TableRow} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `tableRow` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableRow} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function tableRow(state, node, parent) {\n  const siblings = parent ? parent.children : undefined\n  // Generate a body row when without parent.\n  const rowIndex = siblings ? siblings.indexOf(node) : 1\n  const tagName = rowIndex === 0 ? 'th' : 'td'\n  // To do: option to use `style`?\n  const align = parent && parent.type === 'table' ? parent.align : undefined\n  const length = align ? align.length : node.children.length\n  let cellIndex = -1\n  /** @type {Array<ElementContent>} */\n  const cells = []\n\n  while (++cellIndex < length) {\n    // Note: can also be undefined.\n    const cell = node.children[cellIndex]\n    /** @type {Properties} */\n    const properties = {}\n    const alignValue = align ? align[cellIndex] : undefined\n\n    if (alignValue) {\n      properties.align = alignValue\n    }\n\n    /** @type {Element} */\n    let result = {type: 'element', tagName, properties, children: []}\n\n    if (cell) {\n      result.children = state.all(cell)\n      state.patch(cell, result)\n      result = state.applyData(cell, result)\n    }\n\n    cells.push(result)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'tr',\n    properties: {},\n    children: state.wrap(cells, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {TableCell} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `tableCell` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableCell} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function tableCell(state, node) {\n  // Note: this function is normally not called: see `table-row` for how rows\n  // and their cells are compiled.\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'td', // Assume body cell.\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","const tab = 9 /* `\\t` */\nconst space = 32 /* ` ` */\n\n/**\n * Remove initial and final spaces and tabs at the line breaks in `value`.\n * Does not trim initial and final spaces and tabs of the value itself.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Trimmed value.\n */\nexport function trimLines(value) {\n  const source = String(value)\n  const search = /\\r?\\n|\\r/g\n  let match = search.exec(source)\n  let last = 0\n  /** @type {Array<string>} */\n  const lines = []\n\n  while (match) {\n    lines.push(\n      trimLine(source.slice(last, match.index), last > 0, true),\n      match[0]\n    )\n\n    last = match.index + match[0].length\n    match = search.exec(source)\n  }\n\n  lines.push(trimLine(source.slice(last), last > 0, false))\n\n  return lines.join('')\n}\n\n/**\n * @param {string} value\n *   Line to trim.\n * @param {boolean} start\n *   Whether to trim the start of the line.\n * @param {boolean} end\n *   Whether to trim the end of the line.\n * @returns {string}\n *   Trimmed line.\n */\nfunction trimLine(value, start, end) {\n  let startIndex = 0\n  let endIndex = value.length\n\n  if (start) {\n    let code = value.codePointAt(startIndex)\n\n    while (code === tab || code === space) {\n      startIndex++\n      code = value.codePointAt(startIndex)\n    }\n  }\n\n  if (end) {\n    let code = value.codePointAt(endIndex - 1)\n\n    while (code === tab || code === space) {\n      endIndex--\n      code = value.codePointAt(endIndex - 1)\n    }\n  }\n\n  return endIndex > startIndex ? value.slice(startIndex, endIndex) : ''\n}\n","/**\n * @import {Element as HastElement, Text as HastText} from 'hast'\n * @import {Text as MdastText} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {trimLines} from 'trim-lines'\n\n/**\n * Turn an mdast `text` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastText} node\n *   mdast node.\n * @returns {HastElement | HastText}\n *   hast node.\n */\nexport function text(state, node) {\n  /** @type {HastText} */\n  const result = {type: 'text', value: trimLines(String(node.value))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {ThematicBreak} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `thematicBreak` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ThematicBreak} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function thematicBreak(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'hr',\n    properties: {},\n    children: []\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Handlers} from '../state.js'\n */\n\nimport {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {strikethrough} from './delete.js'\nimport {emphasis} from './emphasis.js'\nimport {footnoteReference} from './footnote-reference.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {imageReference} from './image-reference.js'\nimport {image} from './image.js'\nimport {inlineCode} from './inline-code.js'\nimport {linkReference} from './link-reference.js'\nimport {link} from './link.js'\nimport {listItem} from './list-item.js'\nimport {list} from './list.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {table} from './table.js'\nimport {tableRow} from './table-row.js'\nimport {tableCell} from './table-cell.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default handlers for nodes.\n *\n * @satisfies {Handlers}\n */\nexport const handlers = {\n  blockquote,\n  break: hardBreak,\n  code,\n  delete: strikethrough,\n  emphasis,\n  footnoteReference,\n  heading,\n  html,\n  imageReference,\n  image,\n  inlineCode,\n  linkReference,\n  link,\n  listItem,\n  list,\n  paragraph,\n  // @ts-expect-error: root is different, but hard to type.\n  root,\n  strong,\n  table,\n  tableCell,\n  tableRow,\n  text,\n  thematicBreak,\n  toml: ignore,\n  yaml: ignore,\n  definition: ignore,\n  footnoteDefinition: ignore\n}\n\n// Return nothing for nodes that are ignored.\nfunction ignore() {\n  return undefined\n}\n","export const VOID       = -1;\nexport const PRIMITIVE  = 0;\nexport const ARRAY      = 1;\nexport const OBJECT     = 2;\nexport const DATE       = 3;\nexport const REGEXP     = 4;\nexport const MAP        = 5;\nexport const SET        = 6;\nexport const ERROR      = 7;\nexport const BIGINT     = 8;\n// export const SYMBOL = 9;\n","import {\n  VOID, PRIMITIVE,\n  ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst deserializer = ($, _) => {\n  const as = (out, index) => {\n    $.set(index, out);\n    return out;\n  };\n\n  const unpair = index => {\n    if ($.has(index))\n      return $.get(index);\n\n    const [type, value] = _[index];\n    switch (type) {\n      case PRIMITIVE:\n      case VOID:\n        return as(value, index);\n      case ARRAY: {\n        const arr = as([], index);\n        for (const index of value)\n          arr.push(unpair(index));\n        return arr;\n      }\n      case OBJECT: {\n        const object = as({}, index);\n        for (const [key, index] of value)\n          object[unpair(key)] = unpair(index);\n        return object;\n      }\n      case DATE:\n        return as(new Date(value), index);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as(new RegExp(source, flags), index);\n      }\n      case MAP: {\n        const map = as(new Map, index);\n        for (const [key, index] of value)\n          map.set(unpair(key), unpair(index));\n        return map;\n      }\n      case SET: {\n        const set = as(new Set, index);\n        for (const index of value)\n          set.add(unpair(index));\n        return set;\n      }\n      case ERROR: {\n        const {name, message} = value;\n        return as(new env[name](message), index);\n      }\n      case BIGINT:\n        return as(BigInt(value), index);\n      case 'BigInt':\n        return as(Object(BigInt(value)), index);\n      case 'ArrayBuffer':\n        return as(new Uint8Array(value).buffer, value);\n      case 'DataView': {\n        const { buffer } = new Uint8Array(value);\n        return as(new DataView(buffer), value);\n      }\n    }\n    return as(new env[type](value), index);\n  };\n\n  return unpair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n","import {\n  VOID, PRIMITIVE,\n  ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n  const type = typeof value;\n  if (type !== 'object' || !value)\n    return [PRIMITIVE, type];\n\n  const asString = toString.call(value).slice(8, -1);\n  switch (asString) {\n    case 'Array':\n      return [ARRAY, EMPTY];\n    case 'Object':\n      return [OBJECT, EMPTY];\n    case 'Date':\n      return [DATE, EMPTY];\n    case 'RegExp':\n      return [REGEXP, EMPTY];\n    case 'Map':\n      return [MAP, EMPTY];\n    case 'Set':\n      return [SET, EMPTY];\n    case 'DataView':\n      return [ARRAY, asString];\n  }\n\n  if (asString.includes('Array'))\n    return [ARRAY, asString];\n\n  if (asString.includes('Error'))\n    return [ERROR, asString];\n\n  return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n  TYPE === PRIMITIVE &&\n  (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n  const as = (out, value) => {\n    const index = _.push(out) - 1;\n    $.set(value, index);\n    return index;\n  };\n\n  const pair = value => {\n    if ($.has(value))\n      return $.get(value);\n\n    let [TYPE, type] = typeOf(value);\n    switch (TYPE) {\n      case PRIMITIVE: {\n        let entry = value;\n        switch (type) {\n          case 'bigint':\n            TYPE = BIGINT;\n            entry = value.toString();\n            break;\n          case 'function':\n          case 'symbol':\n            if (strict)\n              throw new TypeError('unable to serialize ' + type);\n            entry = null;\n            break;\n          case 'undefined':\n            return as([VOID], value);\n        }\n        return as([TYPE, entry], value);\n      }\n      case ARRAY: {\n        if (type) {\n          let spread = value;\n          if (type === 'DataView') {\n            spread = new Uint8Array(value.buffer);\n          }\n          else if (type === 'ArrayBuffer') {\n            spread = new Uint8Array(value);\n          }\n          return as([type, [...spread]], value);\n        }\n\n        const arr = [];\n        const index = as([TYPE, arr], value);\n        for (const entry of value)\n          arr.push(pair(entry));\n        return index;\n      }\n      case OBJECT: {\n        if (type) {\n          switch (type) {\n            case 'BigInt':\n              return as([type, value.toString()], value);\n            case 'Boolean':\n            case 'Number':\n            case 'String':\n              return as([type, value.valueOf()], value);\n          }\n        }\n\n        if (json && ('toJSON' in value))\n          return pair(value.toJSON());\n\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const key of keys(value)) {\n          if (strict || !shouldSkip(typeOf(value[key])))\n            entries.push([pair(key), pair(value[key])]);\n        }\n        return index;\n      }\n      case DATE:\n        return as([TYPE, value.toISOString()], value);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as([TYPE, {source, flags}], value);\n      }\n      case MAP: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const [key, entry] of value) {\n          if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n            entries.push([pair(key), pair(entry)]);\n        }\n        return index;\n      }\n      case SET: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const entry of value) {\n          if (strict || !shouldSkip(typeOf(entry)))\n            entries.push(pair(entry));\n        }\n        return index;\n      }\n    }\n\n    const {message} = value;\n    return as([TYPE, {name: type, message}], value);\n  };\n\n  return pair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{json?: boolean, lossy?: boolean}?} options an object with a `lossy` or `json` property that,\n *  if `true`, will not throw errors on incompatible types, and behave more\n *  like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n  const _ = [];\n  return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n","import {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} any a serializable value.\n * @param {{transfer?: any[], json?: boolean, lossy?: boolean}?} options an object with\n * a transfer option (ignored when polyfilled) and/or non standard fields that\n * fallback to the polyfill if present.\n * @returns {Record[]}\n */\nexport default typeof structuredClone === \"function\" ?\n  /* c8 ignore start */\n  (any, options) => (\n    options && ('json' in options || 'lossy' in options) ?\n      deserialize(serialize(any, options)) : structuredClone(any)\n  ) :\n  (any, options) => deserialize(serialize(any, options));\n  /* c8 ignore stop */\n\nexport {deserialize, serialize};\n","/**\n * @import {ElementContent, Element} from 'hast'\n * @import {State} from './state.js'\n */\n\n/**\n * @callback FootnoteBackContentTemplate\n *   Generate content for the backreference dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   *  `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   *  `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   *  `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent> | ElementContent | string}\n *   Content for the backreference when linking back from definitions to their\n *   reference.\n *\n * @callback FootnoteBackLabelTemplate\n *   Generate a back label dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   *  `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   *  `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   *  `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Back label to use when linking back from definitions to their reference.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Generate the default content that GitHub uses on backreferences.\n *\n * @param {number} _\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent>}\n *   Content.\n */\nexport function defaultFootnoteBackContent(_, rereferenceIndex) {\n  /** @type {Array<ElementContent>} */\n  const result = [{type: 'text', value: '↩'}]\n\n  if (rereferenceIndex > 1) {\n    result.push({\n      type: 'element',\n      tagName: 'sup',\n      properties: {},\n      children: [{type: 'text', value: String(rereferenceIndex)}]\n    })\n  }\n\n  return result\n}\n\n/**\n * Generate the default label that GitHub uses on backreferences.\n *\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Label.\n */\nexport function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n  return (\n    'Back to reference ' +\n    (referenceIndex + 1) +\n    (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n  )\n}\n\n/**\n * Generate a hast footer for called footnote definitions.\n *\n * @param {State} state\n *   Info passed around.\n * @returns {Element | undefined}\n *   `section` element or `undefined`.\n */\n// eslint-disable-next-line complexity\nexport function footer(state) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const footnoteBackContent =\n    state.options.footnoteBackContent || defaultFootnoteBackContent\n  const footnoteBackLabel =\n    state.options.footnoteBackLabel || defaultFootnoteBackLabel\n  const footnoteLabel = state.options.footnoteLabel || 'Footnotes'\n  const footnoteLabelTagName = state.options.footnoteLabelTagName || 'h2'\n  const footnoteLabelProperties = state.options.footnoteLabelProperties || {\n    className: ['sr-only']\n  }\n  /** @type {Array<ElementContent>} */\n  const listItems = []\n  let referenceIndex = -1\n\n  while (++referenceIndex < state.footnoteOrder.length) {\n    const definition = state.footnoteById.get(\n      state.footnoteOrder[referenceIndex]\n    )\n\n    if (!definition) {\n      continue\n    }\n\n    const content = state.all(definition)\n    const id = String(definition.identifier).toUpperCase()\n    const safeId = normalizeUri(id.toLowerCase())\n    let rereferenceIndex = 0\n    /** @type {Array<ElementContent>} */\n    const backReferences = []\n    const counts = state.footnoteCounts.get(id)\n\n    // eslint-disable-next-line no-unmodified-loop-condition\n    while (counts !== undefined && ++rereferenceIndex <= counts) {\n      if (backReferences.length > 0) {\n        backReferences.push({type: 'text', value: ' '})\n      }\n\n      let children =\n        typeof footnoteBackContent === 'string'\n          ? footnoteBackContent\n          : footnoteBackContent(referenceIndex, rereferenceIndex)\n\n      if (typeof children === 'string') {\n        children = {type: 'text', value: children}\n      }\n\n      backReferences.push({\n        type: 'element',\n        tagName: 'a',\n        properties: {\n          href:\n            '#' +\n            clobberPrefix +\n            'fnref-' +\n            safeId +\n            (rereferenceIndex > 1 ? '-' + rereferenceIndex : ''),\n          dataFootnoteBackref: '',\n          ariaLabel:\n            typeof footnoteBackLabel === 'string'\n              ? footnoteBackLabel\n              : footnoteBackLabel(referenceIndex, rereferenceIndex),\n          className: ['data-footnote-backref']\n        },\n        children: Array.isArray(children) ? children : [children]\n      })\n    }\n\n    const tail = content[content.length - 1]\n\n    if (tail && tail.type === 'element' && tail.tagName === 'p') {\n      const tailTail = tail.children[tail.children.length - 1]\n      if (tailTail && tailTail.type === 'text') {\n        tailTail.value += ' '\n      } else {\n        tail.children.push({type: 'text', value: ' '})\n      }\n\n      tail.children.push(...backReferences)\n    } else {\n      content.push(...backReferences)\n    }\n\n    /** @type {Element} */\n    const listItem = {\n      type: 'element',\n      tagName: 'li',\n      properties: {id: clobberPrefix + 'fn-' + safeId},\n      children: state.wrap(content, true)\n    }\n\n    state.patch(definition, listItem)\n\n    listItems.push(listItem)\n  }\n\n  if (listItems.length === 0) {\n    return\n  }\n\n  return {\n    type: 'element',\n    tagName: 'section',\n    properties: {dataFootnotes: true, className: ['footnotes']},\n    children: [\n      {\n        type: 'element',\n        tagName: footnoteLabelTagName,\n        properties: {\n          ...structuredClone(footnoteLabelProperties),\n          id: 'footnote-label'\n        },\n        children: [{type: 'text', value: footnoteLabel}]\n      },\n      {type: 'text', value: '\\n'},\n      {\n        type: 'element',\n        tagName: 'ol',\n        properties: {},\n        children: state.wrap(listItems, true)\n      },\n      {type: 'text', value: '\\n'}\n    ]\n  }\n}\n","/**\n * @import {Node, Parent} from 'unist'\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n *   Check that an arbitrary value is a node.\n * @param {unknown} this\n *   The given context.\n * @param {unknown} [node]\n *   Anything (typically a node).\n * @param {number | null | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n *   The node’s parent.\n * @returns {boolean}\n *   Whether this is a node and passes a test.\n *\n * @typedef {Record<string, unknown> | Node} Props\n *   Object to check for equivalence.\n *\n *   Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array<Props | TestFunction | string> | ReadonlyArray<Props | TestFunction | string> | Props | TestFunction | string | null | undefined} Test\n *   Check for an arbitrary node.\n *\n * @callback TestFunction\n *   Check if a node passes a test.\n * @param {unknown} this\n *   The given context.\n * @param {Node} node\n *   A node.\n * @param {number | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n *   The node’s parent.\n * @returns {boolean | undefined | void}\n *   Whether this node passes the test.\n *\n *   Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n *   Thing to check, typically `Node`.\n * @param {Test} test\n *   A check for a specific node.\n * @param {number | null | undefined} index\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n *   The node’s parent.\n * @param {unknown} context\n *   Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n *   Whether `node` is a node and passes a test.\n */\nexport const is =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends ReadonlyArray<string>>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition[number]}) &\n   *   (<Condition extends Array<string>>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition[number]}) &\n   *   (<Condition extends string>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((node?: null | undefined) => false) &\n   *   ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n   * )}\n   */\n  (\n    /**\n     * @param {unknown} [node]\n     * @param {Test} [test]\n     * @param {number | null | undefined} [index]\n     * @param {Parent | null | undefined} [parent]\n     * @param {unknown} [context]\n     * @returns {boolean}\n     */\n    // eslint-disable-next-line max-params\n    function (node, test, index, parent, context) {\n      const check = convert(test)\n\n      if (\n        index !== undefined &&\n        index !== null &&\n        (typeof index !== 'number' ||\n          index < 0 ||\n          index === Number.POSITIVE_INFINITY)\n      ) {\n        throw new Error('Expected positive finite index')\n      }\n\n      if (\n        parent !== undefined &&\n        parent !== null &&\n        (!is(parent) || !parent.children)\n      ) {\n        throw new Error('Expected parent node')\n      }\n\n      if (\n        (parent === undefined || parent === null) !==\n        (index === undefined || index === null)\n      ) {\n        throw new Error('Expected both parent and index')\n      }\n\n      return looksLikeANode(node)\n        ? check.call(context, node, index, parent)\n        : false\n    }\n  )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n *   *   when nullish, checks if `node` is a `Node`.\n *   *   when `string`, works like passing `(node) => node.type === test`.\n *   *   when `function` checks if function passed the node is true.\n *   *   when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n *   *   when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n *   An assertion.\n */\nexport const convert =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((test?: Test) => Check)\n   * )}\n   */\n  (\n    /**\n     * @param {Test} [test]\n     * @returns {Check}\n     */\n    function (test) {\n      if (test === null || test === undefined) {\n        return ok\n      }\n\n      if (typeof test === 'function') {\n        return castFactory(test)\n      }\n\n      if (typeof test === 'object') {\n        return Array.isArray(test)\n          ? anyFactory(test)\n          : // Cast because `ReadonlyArray` goes into the above but `isArray`\n            // narrows to `Array`.\n            propertiesFactory(/** @type {Props} */ (test))\n      }\n\n      if (typeof test === 'string') {\n        return typeFactory(test)\n      }\n\n      throw new Error('Expected function, string, or object as test')\n    }\n  )\n\n/**\n * @param {Array<Props | TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n  /** @type {Array<Check>} */\n  const checks = []\n  let index = -1\n\n  while (++index < tests.length) {\n    checks[index] = convert(tests[index])\n  }\n\n  return castFactory(any)\n\n  /**\n   * @this {unknown}\n   * @type {TestFunction}\n   */\n  function any(...parameters) {\n    let index = -1\n\n    while (++index < checks.length) {\n      if (checks[index].apply(this, parameters)) return true\n    }\n\n    return false\n  }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propertiesFactory(check) {\n  const checkAsRecord = /** @type {Record<string, unknown>} */ (check)\n\n  return castFactory(all)\n\n  /**\n   * @param {Node} node\n   * @returns {boolean}\n   */\n  function all(node) {\n    const nodeAsRecord = /** @type {Record<string, unknown>} */ (\n      /** @type {unknown} */ (node)\n    )\n\n    /** @type {string} */\n    let key\n\n    for (key in check) {\n      if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n    }\n\n    return true\n  }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n  return castFactory(type)\n\n  /**\n   * @param {Node} node\n   */\n  function type(node) {\n    return node && node.type === check\n  }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n  return check\n\n  /**\n   * @this {unknown}\n   * @type {Check}\n   */\n  function check(value, index, parent) {\n    return Boolean(\n      looksLikeANode(value) &&\n        testFunction.call(\n          this,\n          value,\n          typeof index === 'number' ? index : undefined,\n          parent || undefined\n        )\n    )\n  }\n}\n\nfunction ok() {\n  return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n  return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @import {Node as UnistNode, Parent as UnistParent} from 'unist'\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends ReadonlyArray<infer T>\n *   ? MatchesOne<Value, T>\n *   : Check extends Array<infer T>\n *   ? MatchesOne<Value, T>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {InternalAncestor<InclusiveDescendant<Tree>, Child>} Ancestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn’t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n *   Union of the action types.\n *\n * @typedef {number} Index\n *   Move to the sibling at `index` next (after node itself is completely\n *   traversed).\n *\n *   Useful if mutating the tree, such as removing the node the visitor is\n *   currently on, or any of its previous siblings.\n *   Results less than 0 or greater than or equal to `children.length` stop\n *   traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n *   List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n *   Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform the parent of node (the last of `ancestors`).\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of an ancestor still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Array<VisitedParents>} ancestors\n *   Ancestors of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Matches<InclusiveDescendant<Tree>, Check>, Ancestor<Tree, Matches<InclusiveDescendant<Tree>, Check>>>} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Tree type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly<ActionTuple>} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} test\n *   `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n *   Handle each node.\n * @param {boolean | null | undefined} [reverse]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n  /** @type {Test} */\n  let check\n\n  if (typeof test === 'function' && typeof visitor !== 'function') {\n    reverse = visitor\n    // @ts-expect-error no visitor given, so `visitor` is test.\n    visitor = test\n  } else {\n    // @ts-expect-error visitor given, so `test` isn’t a visitor.\n    check = test\n  }\n\n  const is = convert(check)\n  const step = reverse ? -1 : 1\n\n  factory(tree, undefined, [])()\n\n  /**\n   * @param {UnistNode} node\n   * @param {number | undefined} index\n   * @param {Array<UnistParent>} parents\n   */\n  function factory(node, index, parents) {\n    const value = /** @type {Record<string, unknown>} */ (\n      node && typeof node === 'object' ? node : {}\n    )\n\n    if (typeof value.type === 'string') {\n      const name =\n        // `hast`\n        typeof value.tagName === 'string'\n          ? value.tagName\n          : // `xast`\n            typeof value.name === 'string'\n            ? value.name\n            : undefined\n\n      Object.defineProperty(visit, 'name', {\n        value:\n          'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n      })\n    }\n\n    return visit\n\n    function visit() {\n      /** @type {Readonly<ActionTuple>} */\n      let result = empty\n      /** @type {Readonly<ActionTuple>} */\n      let subresult\n      /** @type {number} */\n      let offset\n      /** @type {Array<UnistParent>} */\n      let grandparents\n\n      if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n        // @ts-expect-error: `visitor` is now a visitor.\n        result = toResult(visitor(node, parents))\n\n        if (result[0] === EXIT) {\n          return result\n        }\n      }\n\n      if ('children' in node && node.children) {\n        const nodeAsParent = /** @type {UnistParent} */ (node)\n\n        if (nodeAsParent.children && result[0] !== SKIP) {\n          offset = (reverse ? nodeAsParent.children.length : -1) + step\n          grandparents = parents.concat(nodeAsParent)\n\n          while (offset > -1 && offset < nodeAsParent.children.length) {\n            const child = nodeAsParent.children[offset]\n\n            subresult = factory(child, offset, grandparents)()\n\n            if (subresult[0] === EXIT) {\n              return subresult\n            }\n\n            offset =\n              typeof subresult[1] === 'number' ? subresult[1] : offset + step\n          }\n        }\n      }\n\n      return result\n    }\n  }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n *   Valid return values from visitors.\n * @returns {Readonly<ActionTuple>}\n *   Clean result.\n */\nfunction toResult(value) {\n  if (Array.isArray(value)) {\n    return value\n  }\n\n  if (typeof value === 'number') {\n    return [CONTINUE, value]\n  }\n\n  return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends Array<any>\n *   ? MatchesOne<Value, Check[keyof Check]>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn’t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform `parent`.\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of `parent` still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n *   Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n *   Parent of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Visited, Parent<Ancestor, Visited>>} BuildVisitorFromMatch\n *   Build a typed `Visitor` function from a node and all possible parents.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n *   Node type.\n * @template {UnistParent} Ancestor\n *   Parent type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromMatch<\n *     Matches<Descendant, Check>,\n *     Extract<Descendant, UnistParent>\n *   >\n * )} BuildVisitorFromDescendants\n *   Build a typed `Visitor` function from a list of descendants and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n *   Node type.\n * @template {Test} Check\n *   Test type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromDescendants<\n *     InclusiveDescendant<Tree>,\n *     Check\n *   >\n * )} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Node type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n *   `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n *   Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n  /** @type {boolean | null | undefined} */\n  let reverse\n  /** @type {Test} */\n  let test\n  /** @type {Visitor} */\n  let visitor\n\n  if (\n    typeof testOrVisitor === 'function' &&\n    typeof visitorOrReverse !== 'function'\n  ) {\n    test = undefined\n    visitor = testOrVisitor\n    reverse = visitorOrReverse\n  } else {\n    // @ts-expect-error: assume the overload with test was given.\n    test = testOrVisitor\n    // @ts-expect-error: assume the overload with test was given.\n    visitor = visitorOrReverse\n    reverse = maybeReverse\n  }\n\n  visitParents(tree, test, overload, reverse)\n\n  /**\n   * @param {UnistNode} node\n   * @param {Array<UnistParent>} parents\n   */\n  function overload(node, parents) {\n    const parent = parents[parents.length - 1]\n    const index = parent ? parent.children.indexOf(node) : undefined\n    return visitor(node, index, parent)\n  }\n}\n","/**\n * @import {\n *   ElementContent as HastElementContent,\n *   Element as HastElement,\n *   Nodes as HastNodes,\n *   Properties as HastProperties,\n *   RootContent as HastRootContent,\n *   Text as HastText\n * } from 'hast'\n * @import {\n *   Definition as MdastDefinition,\n *   FootnoteDefinition as MdastFootnoteDefinition,\n *   Nodes as MdastNodes,\n *   Parents as MdastParents\n * } from 'mdast'\n * @import {VFile} from 'vfile'\n * @import {\n *   FootnoteBackContentTemplate,\n *   FootnoteBackLabelTemplate\n * } from './footer.js'\n */\n\n/**\n * @callback Handler\n *   Handle a node.\n * @param {State} state\n *   Info passed around.\n * @param {any} node\n *   mdast node to handle.\n * @param {MdastParents | undefined} parent\n *   Parent of `node`.\n * @returns {Array<HastElementContent> | HastElementContent | undefined}\n *   hast node.\n *\n * @typedef {Partial<Record<MdastNodes['type'], Handler>>} Handlers\n *   Handle nodes.\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n *   Whether to persist raw HTML in markdown in the hast tree (default:\n *   `false`).\n * @property {string | null | undefined} [clobberPrefix='user-content-']\n *   Prefix to use before the `id` property on footnotes to prevent them from\n *   *clobbering* (default: `'user-content-'`).\n *\n *   Pass `''` for trusted markdown and when you are careful with\n *   polyfilling.\n *   You could pass a different prefix.\n *\n *   DOM clobbering is this:\n *\n *   ```html\n *   <p id=\"x\"></p>\n *   <script>alert(x) // `x` now refers to the `p#x` DOM element</script>\n *   ```\n *\n *   The above example shows that elements are made available by browsers, by\n *   their ID, on the `window` object.\n *   This is a security risk because you might be expecting some other variable\n *   at that place.\n *   It can also break polyfills.\n *   Using a prefix solves these problems.\n * @property {VFile | null | undefined} [file]\n *   Corresponding virtual file representing the input document (optional).\n * @property {FootnoteBackContentTemplate | string | null | undefined} [footnoteBackContent]\n *   Content of the backreference back to references (default: `defaultFootnoteBackContent`).\n *\n *   The default value is:\n *\n *   ```js\n *   function defaultFootnoteBackContent(_, rereferenceIndex) {\n *     const result = [{type: 'text', value: '↩'}]\n *\n *     if (rereferenceIndex > 1) {\n *       result.push({\n *         type: 'element',\n *         tagName: 'sup',\n *         properties: {},\n *         children: [{type: 'text', value: String(rereferenceIndex)}]\n *       })\n *     }\n *\n *     return result\n *   }\n *   ```\n *\n *   This content is used in the `a` element of each backreference (the `↩`\n *   links).\n * @property {FootnoteBackLabelTemplate | string | null | undefined} [footnoteBackLabel]\n *   Label to describe the backreference back to references (default:\n *   `defaultFootnoteBackLabel`).\n *\n *   The default value is:\n *\n *   ```js\n *   function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n *    return (\n *      'Back to reference ' +\n *      (referenceIndex + 1) +\n *      (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n *    )\n *   }\n *   ```\n *\n *   Change it when the markdown is not in English.\n *\n *   This label is used in the `ariaLabel` property on each backreference\n *   (the `↩` links).\n *   It affects users of assistive technology.\n * @property {string | null | undefined} [footnoteLabel='Footnotes']\n *   Textual label to use for the footnotes section (default: `'Footnotes'`).\n *\n *   Change it when the markdown is not in English.\n *\n *   This label is typically hidden visually (assuming a `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass different properties with the `footnoteLabelProperties` option.\n * @property {HastProperties | null | undefined} [footnoteLabelProperties={className: ['sr-only']}]\n *   Properties to use on the footnote label (default: `{className:\n *   ['sr-only']}`).\n *\n *   Change it to show the label and add other properties.\n *\n *   This label is typically hidden visually (assuming an `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass an empty string.\n *   You can also add different properties.\n *\n *   > **Note**: `id: 'footnote-label'` is always added, because footnote\n *   > calls use it with `aria-describedby` to provide an accessible label.\n * @property {string | null | undefined} [footnoteLabelTagName='h2']\n *   HTML tag name to use for the footnote label element (default: `'h2'`).\n *\n *   Change it to match your document structure.\n *\n *   This label is typically hidden visually (assuming a `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass different properties with the `footnoteLabelProperties` option.\n * @property {Handlers | null | undefined} [handlers]\n *   Extra handlers for nodes (optional).\n * @property {Array<MdastNodes['type']> | null | undefined} [passThrough]\n *   List of custom mdast node types to pass through (keep) in hast (note that\n *   the node itself is passed, but eventual children are transformed)\n *   (optional).\n * @property {Handler | null | undefined} [unknownHandler]\n *   Handler for all unknown nodes (optional).\n *\n * @typedef State\n *   Info passed around.\n * @property {(node: MdastNodes) => Array<HastElementContent>} all\n *   Transform the children of an mdast parent to hast.\n * @property {<Type extends HastNodes>(from: MdastNodes, to: Type) => HastElement | Type} applyData\n *   Honor the `data` of `from`, and generate an element instead of `node`.\n * @property {Map<string, MdastDefinition>} definitionById\n *   Definitions by their identifier.\n * @property {Map<string, MdastFootnoteDefinition>} footnoteById\n *   Footnote definitions by their identifier.\n * @property {Map<string, number>} footnoteCounts\n *   Counts for how often the same footnote was called.\n * @property {Array<string>} footnoteOrder\n *   Identifiers of order when footnote calls first appear in tree order.\n * @property {Handlers} handlers\n *   Applied handlers.\n * @property {(node: MdastNodes, parent: MdastParents | undefined) => Array<HastElementContent> | HastElementContent | undefined} one\n *   Transform an mdast node to hast.\n * @property {Options} options\n *   Configuration.\n * @property {(from: MdastNodes, node: HastNodes) => undefined} patch\n *   Copy a node’s positional info.\n * @property {<Type extends HastRootContent>(nodes: Array<Type>, loose?: boolean | undefined) => Array<HastText | Type>} wrap\n *   Wrap `nodes` with line endings between each node, adds initial/final line endings when `loose`.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {visit} from 'unist-util-visit'\nimport {position} from 'unist-util-position'\nimport {handlers as defaultHandlers} from './handlers/index.js'\n\nconst own = {}.hasOwnProperty\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Create `state` from an mdast tree.\n *\n * @param {MdastNodes} tree\n *   mdast node to transform.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {State}\n *   `state` function.\n */\nexport function createState(tree, options) {\n  const settings = options || emptyOptions\n  /** @type {Map<string, MdastDefinition>} */\n  const definitionById = new Map()\n  /** @type {Map<string, MdastFootnoteDefinition>} */\n  const footnoteById = new Map()\n  /** @type {Map<string, number>} */\n  const footnoteCounts = new Map()\n  /** @type {Handlers} */\n  // @ts-expect-error: the root handler returns a root.\n  // Hard to type.\n  const handlers = {...defaultHandlers, ...settings.handlers}\n\n  /** @type {State} */\n  const state = {\n    all,\n    applyData,\n    definitionById,\n    footnoteById,\n    footnoteCounts,\n    footnoteOrder: [],\n    handlers,\n    one,\n    options: settings,\n    patch,\n    wrap\n  }\n\n  visit(tree, function (node) {\n    if (node.type === 'definition' || node.type === 'footnoteDefinition') {\n      const map = node.type === 'definition' ? definitionById : footnoteById\n      const id = String(node.identifier).toUpperCase()\n\n      // Mimick CM behavior of link definitions.\n      // See: <https://github.com/syntax-tree/mdast-util-definitions/blob/9032189/lib/index.js#L20-L21>.\n      if (!map.has(id)) {\n        // @ts-expect-error: node type matches map.\n        map.set(id, node)\n      }\n    }\n  })\n\n  return state\n\n  /**\n   * Transform an mdast node into a hast node.\n   *\n   * @param {MdastNodes} node\n   *   mdast node.\n   * @param {MdastParents | undefined} [parent]\n   *   Parent of `node`.\n   * @returns {Array<HastElementContent> | HastElementContent | undefined}\n   *   Resulting hast node.\n   */\n  function one(node, parent) {\n    const type = node.type\n    const handle = state.handlers[type]\n\n    if (own.call(state.handlers, type) && handle) {\n      return handle(state, node, parent)\n    }\n\n    if (state.options.passThrough && state.options.passThrough.includes(type)) {\n      if ('children' in node) {\n        const {children, ...shallow} = node\n        const result = structuredClone(shallow)\n        // @ts-expect-error: TS doesn’t understand…\n        result.children = state.all(node)\n        // @ts-expect-error: TS doesn’t understand…\n        return result\n      }\n\n      // @ts-expect-error: it’s custom.\n      return structuredClone(node)\n    }\n\n    const unknown = state.options.unknownHandler || defaultUnknownHandler\n\n    return unknown(state, node, parent)\n  }\n\n  /**\n   * Transform the children of an mdast node into hast nodes.\n   *\n   * @param {MdastNodes} parent\n   *   mdast node to compile\n   * @returns {Array<HastElementContent>}\n   *   Resulting hast nodes.\n   */\n  function all(parent) {\n    /** @type {Array<HastElementContent>} */\n    const values = []\n\n    if ('children' in parent) {\n      const nodes = parent.children\n      let index = -1\n      while (++index < nodes.length) {\n        const result = state.one(nodes[index], parent)\n\n        // To do: see if we van clean this? Can we merge texts?\n        if (result) {\n          if (index && nodes[index - 1].type === 'break') {\n            if (!Array.isArray(result) && result.type === 'text') {\n              result.value = trimMarkdownSpaceStart(result.value)\n            }\n\n            if (!Array.isArray(result) && result.type === 'element') {\n              const head = result.children[0]\n\n              if (head && head.type === 'text') {\n                head.value = trimMarkdownSpaceStart(head.value)\n              }\n            }\n          }\n\n          if (Array.isArray(result)) {\n            values.push(...result)\n          } else {\n            values.push(result)\n          }\n        }\n      }\n    }\n\n    return values\n  }\n}\n\n/**\n * Copy a node’s positional info.\n *\n * @param {MdastNodes} from\n *   mdast node to copy from.\n * @param {HastNodes} to\n *   hast node to copy into.\n * @returns {undefined}\n *   Nothing.\n */\nfunction patch(from, to) {\n  if (from.position) to.position = position(from)\n}\n\n/**\n * Honor the `data` of `from` and maybe generate an element instead of `to`.\n *\n * @template {HastNodes} Type\n *   Node type.\n * @param {MdastNodes} from\n *   mdast node to use data from.\n * @param {Type} to\n *   hast node to change.\n * @returns {HastElement | Type}\n *   Nothing.\n */\nfunction applyData(from, to) {\n  /** @type {HastElement | Type} */\n  let result = to\n\n  // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n  if (from && from.data) {\n    const hName = from.data.hName\n    const hChildren = from.data.hChildren\n    const hProperties = from.data.hProperties\n\n    if (typeof hName === 'string') {\n      // Transforming the node resulted in an element with a different name\n      // than wanted:\n      if (result.type === 'element') {\n        result.tagName = hName\n      }\n      // Transforming the node resulted in a non-element, which happens for\n      // raw, text, and root nodes (unless custom handlers are passed).\n      // The intent of `hName` is to create an element, but likely also to keep\n      // the content around (otherwise: pass `hChildren`).\n      else {\n        /** @type {Array<HastElementContent>} */\n        // @ts-expect-error: assume no doctypes in `root`.\n        const children = 'children' in result ? result.children : [result]\n        result = {type: 'element', tagName: hName, properties: {}, children}\n      }\n    }\n\n    if (result.type === 'element' && hProperties) {\n      Object.assign(result.properties, structuredClone(hProperties))\n    }\n\n    if (\n      'children' in result &&\n      result.children &&\n      hChildren !== null &&\n      hChildren !== undefined\n    ) {\n      result.children = hChildren\n    }\n  }\n\n  return result\n}\n\n/**\n * Transform an unknown node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastNodes} node\n *   Unknown mdast node.\n * @returns {HastElement | HastText}\n *   Resulting hast node.\n */\nfunction defaultUnknownHandler(state, node) {\n  const data = node.data || {}\n  /** @type {HastElement | HastText} */\n  const result =\n    'value' in node &&\n    !(own.call(data, 'hProperties') || own.call(data, 'hChildren'))\n      ? {type: 'text', value: node.value}\n      : {\n          type: 'element',\n          tagName: 'div',\n          properties: {},\n          children: state.all(node)\n        }\n\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * Wrap `nodes` with line endings between each node.\n *\n * @template {HastRootContent} Type\n *   Node type.\n * @param {Array<Type>} nodes\n *   List of nodes to wrap.\n * @param {boolean | undefined} [loose=false]\n *   Whether to add line endings at start and end (default: `false`).\n * @returns {Array<HastText | Type>}\n *   Wrapped nodes.\n */\nexport function wrap(nodes, loose) {\n  /** @type {Array<HastText | Type>} */\n  const result = []\n  let index = -1\n\n  if (loose) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  while (++index < nodes.length) {\n    if (index) result.push({type: 'text', value: '\\n'})\n    result.push(nodes[index])\n  }\n\n  if (loose && nodes.length > 0) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  return result\n}\n\n/**\n * Trim spaces and tabs at the start of `value`.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Result.\n */\nfunction trimMarkdownSpaceStart(value) {\n  let index = 0\n  let code = value.charCodeAt(index)\n\n  while (code === 9 || code === 32) {\n    index++\n    code = value.charCodeAt(index)\n  }\n\n  return value.slice(index)\n}\n","/**\n * @import {Nodes as HastNodes} from 'hast'\n * @import {Nodes as MdastNodes} from 'mdast'\n * @import {Options} from './state.js'\n */\n\nimport {ok as assert} from 'devlop'\nimport {footer} from './footer.js'\nimport {createState} from './state.js'\n\n/**\n * Transform mdast to hast.\n *\n * ##### Notes\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most utilities ignore `raw` nodes but two notable ones don’t:\n *\n * *   `hast-util-to-html` also has an option `allowDangerousHtml` which will\n *     output the raw HTML.\n *     This is typically discouraged as noted by the option name but is useful\n *     if you completely trust authors\n * *   `hast-util-raw` can handle the raw embedded HTML strings by parsing them\n *     into standard hast nodes (`element`, `text`, etc).\n *     This is a heavy task as it needs a full HTML parser, but it is the only\n *     way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `mdast-util-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * Example: headings (DOM clobbering) in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * *   when the node has a `value` (and doesn’t have `data.hName`,\n *     `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n *     node\n * *   otherwise, create a `<div>` element (which could be changed with\n *     `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @param {MdastNodes} tree\n *   mdast tree.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {HastNodes}\n *   hast tree.\n */\nexport function toHast(tree, options) {\n  const state = createState(tree, options)\n  const node = state.one(tree, undefined)\n  const foot = footer(state)\n  /** @type {HastNodes} */\n  const result = Array.isArray(node)\n    ? {type: 'root', children: node}\n    : node || {type: 'root', children: []}\n\n  if (foot) {\n    // If there’s a footer, there were definitions, meaning block\n    // content.\n    // So `result` is a parent node.\n    assert('children' in result)\n    result.children.push({type: 'text', value: '\\n'}, foot)\n  }\n\n  return result\n}\n","/**\n * @import {Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {Options as ToHastOptions} from 'mdast-util-to-hast'\n * @import {Processor} from 'unified'\n * @import {VFile} from 'vfile'\n */\n\n/**\n * @typedef {Omit<ToHastOptions, 'file'>} Options\n *\n * @callback TransformBridge\n *   Bridge-mode.\n *\n *   Runs the destination with the new hast tree.\n *   Discards result.\n * @param {MdastRoot} tree\n *   Tree.\n * @param {VFile} file\n *   File.\n * @returns {Promise<undefined>}\n *   Nothing.\n *\n * @callback TransformMutate\n *  Mutate-mode.\n *\n *  Further transformers run on the hast tree.\n * @param {MdastRoot} tree\n *   Tree.\n * @param {VFile} file\n *   File.\n * @returns {HastRoot}\n *   Tree (hast).\n */\n\nimport {toHast} from 'mdast-util-to-hast'\n\n/**\n * Turn markdown into HTML.\n *\n * ##### Notes\n *\n * ###### Signature\n *\n * * if a processor is given,\n *   runs the (rehype) plugins used on it with a hast tree,\n *   then discards the result (*bridge mode*)\n * * otherwise,\n *   returns a hast tree,\n *   the plugins used after `remarkRehype` are rehype plugins (*mutate mode*)\n *\n * > 👉 **Note**:\n * > It’s highly unlikely that you want to pass a `processor`.\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most plugins ignore `raw` nodes but two notable ones don’t:\n *\n * * `rehype-stringify` also has an option `allowDangerousHtml` which will\n *   output the raw HTML.\n *   This is typically discouraged as noted by the option name but is useful if\n *   you completely trust authors\n * * `rehype-raw` can handle the raw embedded HTML strings by parsing them\n *   into standard hast nodes (`element`, `text`, etc);\n *   this is a heavy task as it needs a full HTML parser,\n *   but it is the only way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark,\n * which we follow by default.\n * They are supported by GitHub,\n * so footnotes can be enabled in markdown with `remark-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes,\n * which is hidden for sighted users but shown to assistive technology.\n * When your page is not in English,\n * you must define translated values.\n *\n * Back references use ARIA attributes,\n * but the section label itself uses a heading that is hidden with an\n * `sr-only` class.\n * To show it to sighted users,\n * define different attributes in `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem,\n * as it links footnote calls to footnote definitions on the page through `id`\n * attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * *Example: headings (DOM clobbering)* in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * * when the node has a `value`\n *   (and doesn’t have `data.hName`, `data.hProperties`, or `data.hChildren`,\n *   see later),\n *   create a hast `text` node\n * * otherwise,\n *   create a `<div>` element (which could be changed with `data.hName`),\n *   with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @overload\n * @param {Processor} processor\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformBridge}\n *\n * @overload\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformMutate}\n *\n * @overload\n * @param {Readonly<Options> | Processor | null | undefined} [destination]\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformBridge | TransformMutate}\n *\n * @param {Readonly<Options> | Processor | null | undefined} [destination]\n *   Processor or configuration (optional).\n * @param {Readonly<Options> | null | undefined} [options]\n *   When a processor was given,\n *   configuration (optional).\n * @returns {TransformBridge | TransformMutate}\n *   Transform.\n */\nexport default function remarkRehype(destination, options) {\n  if (destination && 'run' in destination) {\n    /**\n     * @type {TransformBridge}\n     */\n    return async function (tree, file) {\n      // Cast because root in -> root out.\n      const hastTree = /** @type {HastRoot} */ (\n        toHast(tree, {file, ...options})\n      )\n      await destination.run(hastTree, file)\n    }\n  }\n\n  /**\n   * @type {TransformMutate}\n   */\n  return function (tree, file) {\n    // Cast because root in -> root out.\n    // To do: in the future, disallow ` || options` fallback.\n    // With `unified-engine`, `destination` can be `undefined` but\n    // `options` will be the file set.\n    // We should not pass that as `options`.\n    return /** @type {HastRoot} */ (\n      toHast(tree, {file, ...(destination || options)})\n    )\n  }\n}\n","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n *   Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n  if (error) {\n    throw error\n  }\n}\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","// To do: remove `void`s\n// To do: remove `null` from output of our APIs, allow it as user APIs.\n\n/**\n * @typedef {(error?: Error | null | undefined, ...output: Array<any>) => void} Callback\n *   Callback.\n *\n * @typedef {(...input: Array<any>) => any} Middleware\n *   Ware.\n *\n * @typedef Pipeline\n *   Pipeline.\n * @property {Run} run\n *   Run the pipeline.\n * @property {Use} use\n *   Add middleware.\n *\n * @typedef {(...input: Array<any>) => void} Run\n *   Call all middleware.\n *\n *   Calls `done` on completion with either an error or the output of the\n *   last middleware.\n *\n *   > 👉 **Note**: as the length of input defines whether async functions get a\n *   > `next` function,\n *   > it’s recommended to keep `input` at one value normally.\n\n *\n * @typedef {(fn: Middleware) => Pipeline} Use\n *   Add middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n *   Pipeline.\n */\nexport function trough() {\n  /** @type {Array<Middleware>} */\n  const fns = []\n  /** @type {Pipeline} */\n  const pipeline = {run, use}\n\n  return pipeline\n\n  /** @type {Run} */\n  function run(...values) {\n    let middlewareIndex = -1\n    /** @type {Callback} */\n    const callback = values.pop()\n\n    if (typeof callback !== 'function') {\n      throw new TypeError('Expected function as last argument, not ' + callback)\n    }\n\n    next(null, ...values)\n\n    /**\n     * Run the next `fn`, or we’re done.\n     *\n     * @param {Error | null | undefined} error\n     * @param {Array<any>} output\n     */\n    function next(error, ...output) {\n      const fn = fns[++middlewareIndex]\n      let index = -1\n\n      if (error) {\n        callback(error)\n        return\n      }\n\n      // Copy non-nullish input into values.\n      while (++index < values.length) {\n        if (output[index] === null || output[index] === undefined) {\n          output[index] = values[index]\n        }\n      }\n\n      // Save the newly created `output` for the next call.\n      values = output\n\n      // Next or done.\n      if (fn) {\n        wrap(fn, next)(...output)\n      } else {\n        callback(null, ...output)\n      }\n    }\n  }\n\n  /** @type {Use} */\n  function use(middelware) {\n    if (typeof middelware !== 'function') {\n      throw new TypeError(\n        'Expected `middelware` to be a function, not ' + middelware\n      )\n    }\n\n    fns.push(middelware)\n    return pipeline\n  }\n}\n\n/**\n * Wrap `middleware` into a uniform interface.\n *\n * You can pass all input to the resulting function.\n * `callback` is then called with the output of `middleware`.\n *\n * If `middleware` accepts more arguments than the later given in input,\n * an extra `done` function is passed to it after that input,\n * which must be called by `middleware`.\n *\n * The first value in `input` is the main input value.\n * All other input values are the rest input values.\n * The values given to `callback` are the input values,\n * merged with every non-nullish output value.\n *\n * * if `middleware` throws an error,\n *   returns a promise that is rejected,\n *   or calls the given `done` function with an error,\n *   `callback` is called with that error\n * * if `middleware` returns a value or returns a promise that is resolved,\n *   that value is the main output value\n * * if `middleware` calls `done`,\n *   all non-nullish values except for the first one (the error) overwrite the\n *   output values\n *\n * @param {Middleware} middleware\n *   Function to wrap.\n * @param {Callback} callback\n *   Callback called with the output of `middleware`.\n * @returns {Run}\n *   Wrapped middleware.\n */\nexport function wrap(middleware, callback) {\n  /** @type {boolean} */\n  let called\n\n  return wrapped\n\n  /**\n   * Call `middleware`.\n   * @this {any}\n   * @param {Array<any>} parameters\n   * @returns {void}\n   */\n  function wrapped(...parameters) {\n    const fnExpectsCallback = middleware.length > parameters.length\n    /** @type {any} */\n    let result\n\n    if (fnExpectsCallback) {\n      parameters.push(done)\n    }\n\n    try {\n      result = middleware.apply(this, parameters)\n    } catch (error) {\n      const exception = /** @type {Error} */ (error)\n\n      // Well, this is quite the pickle.\n      // `middleware` received a callback and called it synchronously, but that\n      // threw an error.\n      // The only thing left to do is to throw the thing instead.\n      if (fnExpectsCallback && called) {\n        throw exception\n      }\n\n      return done(exception)\n    }\n\n    if (!fnExpectsCallback) {\n      if (result && result.then && typeof result.then === 'function') {\n        result.then(then, done)\n      } else if (result instanceof Error) {\n        done(result)\n      } else {\n        then(result)\n      }\n    }\n  }\n\n  /**\n   * Call `callback`, only once.\n   *\n   * @type {Callback}\n   */\n  function done(error, ...output) {\n    if (!called) {\n      called = true\n      callback(error, ...output)\n    }\n  }\n\n  /**\n   * Call `done` with one value.\n   *\n   * @param {any} [value]\n   */\n  function then(value) {\n    done(null, value)\n  }\n}\n","// A derivative work based on:\n// <https://github.com/browserify/path-browserify>.\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// <https://github.com/nodejs/node/blob/master/lib/path.js>.\n// Which is licensed:\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 const minpath = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n *   File path.\n * @param {string | null | undefined} [extname]\n *   Extension to strip.\n * @returns {string}\n *   Stem or basename.\n */\nfunction basename(path, extname) {\n  if (extname !== undefined && typeof extname !== 'string') {\n    throw new TypeError('\"ext\" argument must be a string')\n  }\n\n  assertPath(path)\n  let start = 0\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let seenNonSlash\n\n  if (\n    extname === undefined ||\n    extname.length === 0 ||\n    extname.length > path.length\n  ) {\n    while (index--) {\n      if (path.codePointAt(index) === 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 (seenNonSlash) {\n          start = index + 1\n          break\n        }\n      } else if (end < 0) {\n        // We saw the first non-path separator, mark this as the end of our\n        // path component.\n        seenNonSlash = true\n        end = index + 1\n      }\n    }\n\n    return end < 0 ? '' : path.slice(start, end)\n  }\n\n  if (extname === path) {\n    return ''\n  }\n\n  let firstNonSlashEnd = -1\n  let extnameIndex = extname.length - 1\n\n  while (index--) {\n    if (path.codePointAt(index) === 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 (seenNonSlash) {\n        start = index + 1\n        break\n      }\n    } else {\n      if (firstNonSlashEnd < 0) {\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        seenNonSlash = true\n        firstNonSlashEnd = index + 1\n      }\n\n      if (extnameIndex > -1) {\n        // Try to match the explicit extension.\n        if (path.codePointAt(index) === extname.codePointAt(extnameIndex--)) {\n          if (extnameIndex < 0) {\n            // We matched the extension, so mark this as the end of our path\n            // component\n            end = index\n          }\n        } else {\n          // Extension does not match, so our result is the entire path\n          // component\n          extnameIndex = -1\n          end = firstNonSlashEnd\n        }\n      }\n    }\n  }\n\n  if (start === end) {\n    end = firstNonSlashEnd\n  } else if (end < 0) {\n    end = path.length\n  }\n\n  return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\nfunction dirname(path) {\n  assertPath(path)\n\n  if (path.length === 0) {\n    return '.'\n  }\n\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  // Prefix `--` is important to not run on `0`.\n  while (--index) {\n    if (path.codePointAt(index) === 47 /* `/` */) {\n      if (unmatchedSlash) {\n        end = index\n        break\n      }\n    } else if (!unmatchedSlash) {\n      // We saw the first non-path separator\n      unmatchedSlash = true\n    }\n  }\n\n  return end < 0\n    ? path.codePointAt(0) === 47 /* `/` */\n      ? '/'\n      : '.'\n    : end === 1 && path.codePointAt(0) === 47 /* `/` */\n      ? '//'\n      : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   Extname.\n */\nfunction extname(path) {\n  assertPath(path)\n\n  let index = path.length\n\n  let end = -1\n  let startPart = 0\n  let startDot = -1\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  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  while (index--) {\n    const code = path.codePointAt(index)\n\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 (unmatchedSlash) {\n        startPart = index + 1\n        break\n      }\n\n      continue\n    }\n\n    if (end < 0) {\n      // We saw the first non-path separator, mark this as the end of our\n      // extension.\n      unmatchedSlash = true\n      end = index + 1\n    }\n\n    if (code === 46 /* `.` */) {\n      // If this is our first dot, mark it as the start of our extension.\n      if (startDot < 0) {\n        startDot = index\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 < 0 ||\n    end < 0 ||\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\n  return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array<string>} segments\n *   Path segments.\n * @returns {string}\n *   File path.\n */\nfunction join(...segments) {\n  let index = -1\n  /** @type {string | undefined} */\n  let joined\n\n  while (++index < segments.length) {\n    assertPath(segments[index])\n\n    if (segments[index]) {\n      joined =\n        joined === undefined ? segments[index] : joined + '/' + segments[index]\n    }\n  }\n\n  return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n  assertPath(path)\n\n  const absolute = path.codePointAt(0) === 47 /* `/` */\n\n  // Normalize the path according to POSIX rules.\n  let value = normalizeString(path, !absolute)\n\n  if (value.length === 0 && !absolute) {\n    value = '.'\n  }\n\n  if (value.length > 0 && path.codePointAt(path.length - 1) === 47 /* / */) {\n    value += '/'\n  }\n\n  return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n *   File path.\n * @param {boolean} allowAboveRoot\n *   Whether `..` can move above root.\n * @returns {string}\n *   File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n  let result = ''\n  let lastSegmentLength = 0\n  let lastSlash = -1\n  let dots = 0\n  let index = -1\n  /** @type {number | undefined} */\n  let code\n  /** @type {number} */\n  let lastSlashIndex\n\n  while (++index <= path.length) {\n    if (index < path.length) {\n      code = path.codePointAt(index)\n    } else if (code === 47 /* `/` */) {\n      break\n    } else {\n      code = 47 /* `/` */\n    }\n\n    if (code === 47 /* `/` */) {\n      if (lastSlash === index - 1 || dots === 1) {\n        // Empty.\n      } else if (lastSlash !== index - 1 && dots === 2) {\n        if (\n          result.length < 2 ||\n          lastSegmentLength !== 2 ||\n          result.codePointAt(result.length - 1) !== 46 /* `.` */ ||\n          result.codePointAt(result.length - 2) !== 46 /* `.` */\n        ) {\n          if (result.length > 2) {\n            lastSlashIndex = result.lastIndexOf('/')\n\n            if (lastSlashIndex !== result.length - 1) {\n              if (lastSlashIndex < 0) {\n                result = ''\n                lastSegmentLength = 0\n              } else {\n                result = result.slice(0, lastSlashIndex)\n                lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n              }\n\n              lastSlash = index\n              dots = 0\n              continue\n            }\n          } else if (result.length > 0) {\n            result = ''\n            lastSegmentLength = 0\n            lastSlash = index\n            dots = 0\n            continue\n          }\n        }\n\n        if (allowAboveRoot) {\n          result = result.length > 0 ? result + '/..' : '..'\n          lastSegmentLength = 2\n        }\n      } else {\n        if (result.length > 0) {\n          result += '/' + path.slice(lastSlash + 1, index)\n        } else {\n          result = path.slice(lastSlash + 1, index)\n        }\n\n        lastSegmentLength = index - lastSlash - 1\n      }\n\n      lastSlash = index\n      dots = 0\n    } else if (code === 46 /* `.` */ && dots > -1) {\n      dots++\n    } else {\n      dots = -1\n    }\n  }\n\n  return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n *   File path.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path) {\n  if (typeof path !== 'string') {\n    throw new TypeError(\n      'Path must be a string. Received ' + JSON.stringify(path)\n    )\n  }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// <https://github.com/defunctzombie/node-process/blob/master/browser.js>.\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const minproc = {cwd}\n\nfunction cwd() {\n  return '/'\n}\n","/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * We check for auth attribute to distinguish legacy url instance with\n * WHATWG URL instance.\n *\n * @param {unknown} fileUrlOrPath\n *   File path or URL.\n * @returns {fileUrlOrPath is URL}\n *   Whether it’s a URL.\n */\n// From: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js#L720>\nexport function isUrl(fileUrlOrPath) {\n  return Boolean(\n    fileUrlOrPath !== null &&\n      typeof fileUrlOrPath === 'object' &&\n      'href' in fileUrlOrPath &&\n      fileUrlOrPath.href &&\n      'protocol' in fileUrlOrPath &&\n      fileUrlOrPath.protocol &&\n      // @ts-expect-error: indexing is fine.\n      fileUrlOrPath.auth === undefined\n  )\n}\n","import {isUrl} from './minurl.shared.js'\n\nexport {isUrl} from './minurl.shared.js'\n\n// See: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js>\n\n/**\n * @param {URL | string} path\n *   File URL.\n * @returns {string}\n *   File URL.\n */\nexport function urlToPath(path) {\n  if (typeof path === 'string') {\n    path = new URL(path)\n  } else if (!isUrl(path)) {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'The \"path\" argument must be of type string or an instance of URL. Received `' +\n        path +\n        '`'\n    )\n    error.code = 'ERR_INVALID_ARG_TYPE'\n    throw error\n  }\n\n  if (path.protocol !== 'file:') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError('The URL must be of scheme file')\n    error.code = 'ERR_INVALID_URL_SCHEME'\n    throw error\n  }\n\n  return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n *   URL.\n * @returns {string}\n *   File path.\n */\nfunction getPathFromURLPosix(url) {\n  if (url.hostname !== '') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'File URL host must be \"localhost\" or empty on darwin'\n    )\n    error.code = 'ERR_INVALID_FILE_URL_HOST'\n    throw error\n  }\n\n  const pathname = url.pathname\n  let index = -1\n\n  while (++index < pathname.length) {\n    if (\n      pathname.codePointAt(index) === 37 /* `%` */ &&\n      pathname.codePointAt(index + 1) === 50 /* `2` */\n    ) {\n      const third = pathname.codePointAt(index + 2)\n      if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n        /** @type {NodeJS.ErrnoException} */\n        const error = new TypeError(\n          'File URL path must not include encoded / characters'\n        )\n        error.code = 'ERR_INVALID_FILE_URL_PATH'\n        throw error\n      }\n    }\n  }\n\n  return decodeURIComponent(pathname)\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n * @import {Options as MessageOptions} from 'vfile-message'\n * @import {Compatible, Data, Map, Options, Value} from 'vfile'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {VFileMessage} from 'vfile-message'\nimport {minpath} from '#minpath'\nimport {minproc} from '#minproc'\nimport {urlToPath, isUrl} from '#minurl'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n */\nconst order = /** @type {const} */ ([\n  'history',\n  'path',\n  'basename',\n  'stem',\n  'extname',\n  'dirname'\n])\n\nexport class VFile {\n  /**\n   * Create a new virtual file.\n   *\n   * `options` is treated as:\n   *\n   * *   `string` or `Uint8Array` — `{value: options}`\n   * *   `URL` — `{path: options}`\n   * *   `VFile` — shallow copies its data over to the new file\n   * *   `object` — all fields are shallow copied over to the new file\n   *\n   * Path related fields are set in the following order (least specific to\n   * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n   * `dirname`.\n   *\n   * You cannot set `dirname` or `extname` without setting either `history`,\n   * `path`, `basename`, or `stem` too.\n   *\n   * @param {Compatible | null | undefined} [value]\n   *   File value.\n   * @returns\n   *   New instance.\n   */\n  constructor(value) {\n    /** @type {Options | VFile} */\n    let options\n\n    if (!value) {\n      options = {}\n    } else if (isUrl(value)) {\n      options = {path: value}\n    } else if (typeof value === 'string' || isUint8Array(value)) {\n      options = {value}\n    } else {\n      options = value\n    }\n\n    /* eslint-disable no-unused-expressions */\n\n    /**\n     * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n     *\n     * @type {string}\n     */\n    // Prevent calling `cwd` (which could be expensive) if it’s not needed;\n    // the empty string will be overridden in the next block.\n    this.cwd = 'cwd' in options ? '' : minproc.cwd()\n\n    /**\n     * Place to store custom info (default: `{}`).\n     *\n     * It’s OK to store custom data directly on the file but moving it to\n     * `data` is recommended.\n     *\n     * @type {Data}\n     */\n    this.data = {}\n\n    /**\n     * List of file paths the file moved between.\n     *\n     * The first is the original path and the last is the current path.\n     *\n     * @type {Array<string>}\n     */\n    this.history = []\n\n    /**\n     * List of messages associated with the file.\n     *\n     * @type {Array<VFileMessage>}\n     */\n    this.messages = []\n\n    /**\n     * Raw value.\n     *\n     * @type {Value}\n     */\n    this.value\n\n    // The below are non-standard, they are “well-known”.\n    // As in, used in several tools.\n    /**\n     * Source map.\n     *\n     * This type is equivalent to the `RawSourceMap` type from the `source-map`\n     * module.\n     *\n     * @type {Map | null | undefined}\n     */\n    this.map\n\n    /**\n     * Custom, non-string, compiled, representation.\n     *\n     * This is used by unified to store non-string results.\n     * One example is when turning markdown into React nodes.\n     *\n     * @type {unknown}\n     */\n    this.result\n\n    /**\n     * Whether a file was saved to disk.\n     *\n     * This is used by vfile reporters.\n     *\n     * @type {boolean}\n     */\n    this.stored\n    /* eslint-enable no-unused-expressions */\n\n    // Set path related properties in the correct order.\n    let index = -1\n\n    while (++index < order.length) {\n      const field = order[index]\n\n      // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n      // `vfile`s too.\n      if (\n        field in options &&\n        options[field] !== undefined &&\n        options[field] !== null\n      ) {\n        // @ts-expect-error: TS doesn’t understand basic reality.\n        this[field] = field === 'history' ? [...options[field]] : options[field]\n      }\n    }\n\n    /** @type {string} */\n    let field\n\n    // Set non-path related properties.\n    for (field in options) {\n      // @ts-expect-error: fine to set other things.\n      if (!order.includes(field)) {\n        // @ts-expect-error: fine to set other things.\n        this[field] = options[field]\n      }\n    }\n  }\n\n  /**\n   * Get the basename (including extname) (example: `'index.min.js'`).\n   *\n   * @returns {string | undefined}\n   *   Basename.\n   */\n  get basename() {\n    return typeof this.path === 'string'\n      ? minpath.basename(this.path)\n      : undefined\n  }\n\n  /**\n   * Set basename (including extname) (`'index.min.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   *\n   * @param {string} basename\n   *   Basename.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set basename(basename) {\n    assertNonEmpty(basename, 'basename')\n    assertPart(basename, 'basename')\n    this.path = minpath.join(this.dirname || '', basename)\n  }\n\n  /**\n   * Get the parent path (example: `'~'`).\n   *\n   * @returns {string | undefined}\n   *   Dirname.\n   */\n  get dirname() {\n    return typeof this.path === 'string'\n      ? minpath.dirname(this.path)\n      : undefined\n  }\n\n  /**\n   * Set the parent path (example: `'~'`).\n   *\n   * Cannot be set if there’s no `path` yet.\n   *\n   * @param {string | undefined} dirname\n   *   Dirname.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set dirname(dirname) {\n    assertPath(this.basename, 'dirname')\n    this.path = minpath.join(dirname || '', this.basename)\n  }\n\n  /**\n   * Get the extname (including dot) (example: `'.js'`).\n   *\n   * @returns {string | undefined}\n   *   Extname.\n   */\n  get extname() {\n    return typeof this.path === 'string'\n      ? minpath.extname(this.path)\n      : undefined\n  }\n\n  /**\n   * Set the extname (including dot) (example: `'.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be set if there’s no `path` yet.\n   *\n   * @param {string | undefined} extname\n   *   Extname.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set extname(extname) {\n    assertPart(extname, 'extname')\n    assertPath(this.dirname, 'extname')\n\n    if (extname) {\n      if (extname.codePointAt(0) !== 46 /* `.` */) {\n        throw new Error('`extname` must start with `.`')\n      }\n\n      if (extname.includes('.', 1)) {\n        throw new Error('`extname` cannot contain multiple dots')\n      }\n    }\n\n    this.path = minpath.join(this.dirname, this.stem + (extname || ''))\n  }\n\n  /**\n   * Get the full path (example: `'~/index.min.js'`).\n   *\n   * @returns {string}\n   *   Path.\n   */\n  get path() {\n    return this.history[this.history.length - 1]\n  }\n\n  /**\n   * Set the full path (example: `'~/index.min.js'`).\n   *\n   * Cannot be nullified.\n   * You can set a file URL (a `URL` object with a `file:` protocol) which will\n   * be turned into a path with `url.fileURLToPath`.\n   *\n   * @param {URL | string} path\n   *   Path.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set path(path) {\n    if (isUrl(path)) {\n      path = urlToPath(path)\n    }\n\n    assertNonEmpty(path, 'path')\n\n    if (this.path !== path) {\n      this.history.push(path)\n    }\n  }\n\n  /**\n   * Get the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * @returns {string | undefined}\n   *   Stem.\n   */\n  get stem() {\n    return typeof this.path === 'string'\n      ? minpath.basename(this.path, this.extname)\n      : undefined\n  }\n\n  /**\n   * Set the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   *\n   * @param {string} stem\n   *   Stem.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set stem(stem) {\n    assertNonEmpty(stem, 'stem')\n    assertPart(stem, 'stem')\n    this.path = minpath.join(this.dirname || '', stem + (this.extname || ''))\n  }\n\n  // Normal prototypal methods.\n  /**\n   * Create a fatal message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `true` (error; file not usable)\n   * and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {never}\n   *   Never.\n   * @throws {VFileMessage}\n   *   Message.\n   */\n  fail(causeOrReason, optionsOrParentOrPlace, origin) {\n    // @ts-expect-error: the overloads are fine.\n    const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n    message.fatal = true\n\n    throw message\n  }\n\n  /**\n   * Create an info message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `undefined` (info; change\n   * likely not needed) and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  info(causeOrReason, optionsOrParentOrPlace, origin) {\n    // @ts-expect-error: the overloads are fine.\n    const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n    message.fatal = undefined\n\n    return message\n  }\n\n  /**\n   * Create a message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `false` (warning; change may be\n   * needed) and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  message(causeOrReason, optionsOrParentOrPlace, origin) {\n    const message = new VFileMessage(\n      // @ts-expect-error: the overloads are fine.\n      causeOrReason,\n      optionsOrParentOrPlace,\n      origin\n    )\n\n    if (this.path) {\n      message.name = this.path + ':' + message.name\n      message.file = this.path\n    }\n\n    message.fatal = false\n\n    this.messages.push(message)\n\n    return message\n  }\n\n  /**\n   * Serialize the file.\n   *\n   * > **Note**: which encodings are supported depends on the engine.\n   * > For info on Node.js, see:\n   * > <https://nodejs.org/api/util.html#whatwg-supported-encodings>.\n   *\n   * @param {string | null | undefined} [encoding='utf8']\n   *   Character encoding to understand `value` as when it’s a `Uint8Array`\n   *   (default: `'utf-8'`).\n   * @returns {string}\n   *   Serialized file.\n   */\n  toString(encoding) {\n    if (this.value === undefined) {\n      return ''\n    }\n\n    if (typeof this.value === 'string') {\n      return this.value\n    }\n\n    const decoder = new TextDecoder(encoding || undefined)\n    return decoder.decode(this.value)\n  }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n *   File path part.\n * @param {string} name\n *   Part name.\n * @returns {undefined}\n *   Nothing.\n */\nfunction assertPart(part, name) {\n  if (part && part.includes(minpath.sep)) {\n    throw new Error(\n      '`' + name + '` cannot be a path: did not expect `' + minpath.sep + '`'\n    )\n  }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n *   Thing.\n * @param {string} name\n *   Part name.\n * @returns {asserts part is string}\n *   Nothing.\n */\nfunction assertNonEmpty(part, name) {\n  if (!part) {\n    throw new Error('`' + name + '` cannot be empty')\n  }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n *   Path.\n * @param {string} name\n *   Dependency name.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path, name) {\n  if (!path) {\n    throw new Error('Setting `' + name + '` requires `path` to be set too')\n  }\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Uint8Array}\n *   Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'byteLength' in value &&\n      'byteOffset' in value\n  )\n}\n","export const CallableInstance =\n  /**\n   * @type {new <Parameters extends Array<unknown>, Result>(property: string | symbol) => (...parameters: Parameters) => Result}\n   */\n  (\n    /** @type {unknown} */\n    (\n      /**\n       * @this {Function}\n       * @param {string | symbol} property\n       * @returns {(...parameters: Array<unknown>) => unknown}\n       */\n      function (property) {\n        const self = this\n        const constr = self.constructor\n        const proto = /** @type {Record<string | symbol, Function>} */ (\n          // Prototypes do exist.\n          // type-coverage:ignore-next-line\n          constr.prototype\n        )\n        const value = proto[property]\n        /** @type {(...parameters: Array<unknown>) => unknown} */\n        const apply = function () {\n          return value.apply(apply, arguments)\n        }\n\n        Object.setPrototypeOf(apply, proto)\n\n        // Not needed for us in `unified`: we only call this on the `copy`\n        // function,\n        // and we don't need to add its fields (`length`, `name`)\n        // over.\n        // See also: GH-246.\n        // const names = Object.getOwnPropertyNames(value)\n        //\n        // for (const p of names) {\n        //   const descriptor = Object.getOwnPropertyDescriptor(value, p)\n        //   if (descriptor) Object.defineProperty(apply, p, descriptor)\n        // }\n\n        return apply\n      }\n    )\n  )\n","/**\n * @typedef {import('trough').Pipeline} Pipeline\n *\n * @typedef {import('unist').Node} Node\n *\n * @typedef {import('vfile').Compatible} Compatible\n * @typedef {import('vfile').Value} Value\n *\n * @typedef {import('../index.js').CompileResultMap} CompileResultMap\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Settings} Settings\n */\n\n/**\n * @typedef {CompileResultMap[keyof CompileResultMap]} CompileResults\n *   Acceptable results from compilers.\n *\n *   To register custom results, add them to\n *   {@linkcode CompileResultMap}.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The node that the compiler receives (default: `Node`).\n * @template {CompileResults} [Result=CompileResults]\n *   The thing that the compiler yields (default: `CompileResults`).\n * @callback Compiler\n *   A **compiler** handles the compiling of a syntax tree to something else\n *   (in most cases, text) (TypeScript type).\n *\n *   It is used in the stringify phase and called with a {@linkcode Node}\n *   and {@linkcode VFile} representation of the document to compile.\n *   It should return the textual representation of the given tree (typically\n *   `string`).\n *\n *   > **Note**: unified typically compiles by serializing: most compilers\n *   > return `string` (or `Uint8Array`).\n *   > Some compilers, such as the one configured with\n *   > [`rehype-react`][rehype-react], return other values (in this case, a\n *   > React tree).\n *   > If you’re using a compiler that doesn’t serialize, expect different\n *   > result values.\n *   >\n *   > To register custom results in TypeScript, add them to\n *   > {@linkcode CompileResultMap}.\n *\n *   [rehype-react]: https://github.com/rehypejs/rehype-react\n * @param {Tree} tree\n *   Tree to compile.\n * @param {VFile} file\n *   File associated with `tree`.\n * @returns {Result}\n *   New content: compiled text (`string` or `Uint8Array`, for `file.value`) or\n *   something else (for `file.result`).\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The node that the parser yields (default: `Node`)\n * @callback Parser\n *   A **parser** handles the parsing of text to a syntax tree.\n *\n *   It is used in the parse phase and is called with a `string` and\n *   {@linkcode VFile} of the document to parse.\n *   It must return the syntax tree representation of the given file\n *   ({@linkcode Node}).\n * @param {string} document\n *   Document to parse.\n * @param {VFile} file\n *   File associated with `document`.\n * @returns {Tree}\n *   Node representing the given file.\n */\n\n/**\n * @typedef {(\n *   Plugin<Array<any>, any, any> |\n *   PluginTuple<Array<any>, any, any> |\n *   Preset\n * )} Pluggable\n *   Union of the different ways to add plugins and settings.\n */\n\n/**\n * @typedef {Array<Pluggable>} PluggableList\n *   List of plugins and presets.\n */\n\n// Note: we can’t use `callback` yet as it messes up `this`:\n//  <https://github.com/microsoft/TypeScript/issues/55197>.\n/**\n * @template {Array<unknown>} [PluginParameters=[]]\n *   Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=Node]\n *   Value that is expected as input (default: `Node`).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node it expects.\n *   *   If the plugin sets a {@linkcode Parser}, this should be\n *       `string`.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be the\n *       node it expects.\n * @template [Output=Input]\n *   Value that is yielded as output (default: `Input`).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node that that yields.\n *   *   If the plugin sets a {@linkcode Parser}, this should be the\n *       node that it yields.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be\n *       result it yields.\n * @typedef {(\n *   (this: Processor, ...parameters: PluginParameters) =>\n *     Input extends string ? // Parser.\n *        Output extends Node | undefined ? undefined | void : never :\n *     Output extends CompileResults ? // Compiler.\n *        Input extends Node | undefined ? undefined | void : never :\n *     Transformer<\n *       Input extends Node ? Input : Node,\n *       Output extends Node ? Output : Node\n *     > | undefined | void\n * )} Plugin\n *   Single plugin.\n *\n *   Plugins configure the processors they are applied on in the following\n *   ways:\n *\n *   *   they change the processor, such as the parser, the compiler, or by\n *       configuring data\n *   *   they specify how to handle trees and files\n *\n *   In practice, they are functions that can receive options and configure the\n *   processor (`this`).\n *\n *   > **Note**: plugins are called when the processor is *frozen*, not when\n *   > they are applied.\n */\n\n/**\n * Tuple of a plugin and its configuration.\n *\n * The first item is a plugin, the rest are its parameters.\n *\n * @template {Array<unknown>} [TupleParameters=[]]\n *   Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=undefined]\n *   Value that is expected as input (optional).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node it expects.\n *   *   If the plugin sets a {@linkcode Parser}, this should be\n *       `string`.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be the\n *       node it expects.\n * @template [Output=undefined] (optional).\n *   Value that is yielded as output.\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node that that yields.\n *   *   If the plugin sets a {@linkcode Parser}, this should be the\n *       node that it yields.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be\n *       result it yields.\n * @typedef {(\n *   [\n *     plugin: Plugin<TupleParameters, Input, Output>,\n *     ...parameters: TupleParameters\n *   ]\n * )} PluginTuple\n */\n\n/**\n * @typedef Preset\n *   Sharable configuration.\n *\n *   They can contain plugins and settings.\n * @property {PluggableList | undefined} [plugins]\n *   List of plugins and presets (optional).\n * @property {Settings | undefined} [settings]\n *   Shared settings for parsers and compilers (optional).\n */\n\n/**\n * @template {VFile} [File=VFile]\n *   The file that the callback receives (default: `VFile`).\n * @callback ProcessCallback\n *   Callback called when the process is done.\n *\n *   Called with either an error or a result.\n * @param {Error | undefined} [error]\n *   Fatal error (optional).\n * @param {File | undefined} [file]\n *   Processed file (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The tree that the callback receives (default: `Node`).\n * @callback RunCallback\n *   Callback called when transformers are done.\n *\n *   Called with either an error or results.\n * @param {Error | undefined} [error]\n *   Fatal error (optional).\n * @param {Tree | undefined} [tree]\n *   Transformed tree (optional).\n * @param {VFile | undefined} [file]\n *   File (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Output=Node]\n *   Node type that the transformer yields (default: `Node`).\n * @callback TransformCallback\n *   Callback passed to transforms.\n *\n *   If the signature of a `transformer` accepts a third argument, the\n *   transformer may perform asynchronous operations, and must call it.\n * @param {Error | undefined} [error]\n *   Fatal error to stop the process (optional).\n * @param {Output | undefined} [tree]\n *   New, changed, tree (optional).\n * @param {VFile | undefined} [file]\n *   New, changed, file (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Input=Node]\n *   Node type that the transformer expects (default: `Node`).\n * @template {Node} [Output=Input]\n *   Node type that the transformer yields (default: `Input`).\n * @callback Transformer\n *   Transformers handle syntax trees and files.\n *\n *   They are functions that are called each time a syntax tree and file are\n *   passed through the run phase.\n *   When an error occurs in them (either because it’s thrown, returned,\n *   rejected, or passed to `next`), the process stops.\n *\n *   The run phase is handled by [`trough`][trough], see its documentation for\n *   the exact semantics of these functions.\n *\n *   > **Note**: you should likely ignore `next`: don’t accept it.\n *   > it supports callback-style async work.\n *   > But promises are likely easier to reason about.\n *\n *   [trough]: https://github.com/wooorm/trough#function-fninput-next\n * @param {Input} tree\n *   Tree to handle.\n * @param {VFile} file\n *   File to handle.\n * @param {TransformCallback<Output>} next\n *   Callback.\n * @returns {(\n *   Promise<Output | undefined | void> |\n *   Promise<never> | // For some reason this is needed separately.\n *   Output |\n *   Error |\n *   undefined |\n *   void\n * )}\n *   If you accept `next`, nothing.\n *   Otherwise:\n *\n *   *   `Error` — fatal error to stop the process\n *   *   `Promise<undefined>` or `undefined` — the next transformer keeps using\n *       same tree\n *   *   `Promise<Node>` or `Node` — new, changed, tree\n */\n\n/**\n * @template {Node | undefined} ParseTree\n *   Output of `parse`.\n * @template {Node | undefined} HeadTree\n *   Input for `run`.\n * @template {Node | undefined} TailTree\n *   Output for `run`.\n * @template {Node | undefined} CompileTree\n *   Input of `stringify`.\n * @template {CompileResults | undefined} CompileResult\n *   Output of `stringify`.\n * @template {Node | string | undefined} Input\n *   Input of plugin.\n * @template Output\n *   Output of plugin (optional).\n * @typedef {(\n *   Input extends string\n *     ? Output extends Node | undefined\n *       ? // Parser.\n *         Processor<\n *           Output extends undefined ? ParseTree : Output,\n *           HeadTree,\n *           TailTree,\n *           CompileTree,\n *           CompileResult\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : Output extends CompileResults\n *     ? Input extends Node | undefined\n *       ? // Compiler.\n *         Processor<\n *           ParseTree,\n *           HeadTree,\n *           TailTree,\n *           Input extends undefined ? CompileTree : Input,\n *           Output extends undefined ? CompileResult : Output\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : Input extends Node | undefined\n *     ? Output extends Node | undefined\n *       ? // Transform.\n *         Processor<\n *           ParseTree,\n *           HeadTree extends undefined ? Input : HeadTree,\n *           Output extends undefined ? TailTree : Output,\n *           CompileTree,\n *           CompileResult\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : // Unknown.\n *       Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * )} UsePlugin\n *   Create a processor based on the input/output of a {@link Plugin plugin}.\n */\n\n/**\n * @template {CompileResults | undefined} Result\n *   Node type that the transformer yields.\n * @typedef {(\n *   Result extends Value | undefined ?\n *     VFile :\n *     VFile & {result: Result}\n *   )} VFileWithOutput\n *   Type to generate a {@linkcode VFile} corresponding to a compiler result.\n *\n *   If a result that is not acceptable on a `VFile` is used, that will\n *   be stored on the `result` field of {@linkcode VFile}.\n */\n\nimport {bail} from 'bail'\nimport extend from 'extend'\nimport {ok as assert} from 'devlop'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\nimport {CallableInstance} from './callable-instance.js'\n\n// To do: next major: drop `Compiler`, `Parser`: prefer lowercase.\n\n// To do: we could start yielding `never` in TS when a parser is missing and\n// `parse` is called.\n// Currently, we allow directly setting `processor.parser`, which is untyped.\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {Node | undefined} [ParseTree=undefined]\n *   Output of `parse` (optional).\n * @template {Node | undefined} [HeadTree=undefined]\n *   Input for `run` (optional).\n * @template {Node | undefined} [TailTree=undefined]\n *   Output for `run` (optional).\n * @template {Node | undefined} [CompileTree=undefined]\n *   Input of `stringify` (optional).\n * @template {CompileResults | undefined} [CompileResult=undefined]\n *   Output of `stringify` (optional).\n * @extends {CallableInstance<[], Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>>}\n */\nexport class Processor extends CallableInstance {\n  /**\n   * Create a processor.\n   */\n  constructor() {\n    // If `Processor()` is called (w/o new), `copy` is called instead.\n    super('copy')\n\n    /**\n     * Compiler to use (deprecated).\n     *\n     * @deprecated\n     *   Use `compiler` instead.\n     * @type {(\n     *   Compiler<\n     *     CompileTree extends undefined ? Node : CompileTree,\n     *     CompileResult extends undefined ? CompileResults : CompileResult\n     *   > |\n     *   undefined\n     * )}\n     */\n    this.Compiler = undefined\n\n    /**\n     * Parser to use (deprecated).\n     *\n     * @deprecated\n     *   Use `parser` instead.\n     * @type {(\n     *   Parser<ParseTree extends undefined ? Node : ParseTree> |\n     *   undefined\n     * )}\n     */\n    this.Parser = undefined\n\n    // Note: the following fields are considered private.\n    // However, they are needed for tests, and TSC generates an untyped\n    // `private freezeIndex` field for, which trips `type-coverage` up.\n    // Instead, we use `@deprecated` to visualize that they shouldn’t be used.\n    /**\n     * Internal list of configured plugins.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Array<PluginTuple<Array<unknown>>>}\n     */\n    this.attachers = []\n\n    /**\n     * Compiler to use.\n     *\n     * @type {(\n     *   Compiler<\n     *     CompileTree extends undefined ? Node : CompileTree,\n     *     CompileResult extends undefined ? CompileResults : CompileResult\n     *   > |\n     *   undefined\n     * )}\n     */\n    this.compiler = undefined\n\n    /**\n     * Internal state to track where we are while freezing.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {number}\n     */\n    this.freezeIndex = -1\n\n    /**\n     * Internal state to track whether we’re frozen.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {boolean | undefined}\n     */\n    this.frozen = undefined\n\n    /**\n     * Internal state.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Data}\n     */\n    this.namespace = {}\n\n    /**\n     * Parser to use.\n     *\n     * @type {(\n     *   Parser<ParseTree extends undefined ? Node : ParseTree> |\n     *   undefined\n     * )}\n     */\n    this.parser = undefined\n\n    /**\n     * Internal list of configured transformers.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Pipeline}\n     */\n    this.transformers = trough()\n  }\n\n  /**\n   * Copy a processor.\n   *\n   * @deprecated\n   *   This is a private internal method and should not be used.\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   New *unfrozen* processor ({@linkcode Processor}) that is\n   *   configured to work the same as its ancestor.\n   *   When the descendant processor is configured in the future it does not\n   *   affect the ancestral processor.\n   */\n  copy() {\n    // Cast as the type parameters will be the same after attaching.\n    const destination =\n      /** @type {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>} */ (\n        new Processor()\n      )\n    let index = -1\n\n    while (++index < this.attachers.length) {\n      const attacher = this.attachers[index]\n      destination.use(...attacher)\n    }\n\n    destination.data(extend(true, {}, this.namespace))\n\n    return destination\n  }\n\n  /**\n   * Configure the processor with info available to all plugins.\n   * Information is stored in an object.\n   *\n   * Typically, options can be given to a specific plugin, but sometimes it\n   * makes sense to have information shared with several plugins.\n   * For example, a list of HTML elements that are self-closing, which is\n   * needed during all phases.\n   *\n   * > **Note**: setting information cannot occur on *frozen* processors.\n   * > Call the processor first to create a new unfrozen processor.\n   *\n   * > **Note**: to register custom data in TypeScript, augment the\n   * > {@linkcode Data} interface.\n   *\n   * @example\n   *   This example show how to get and set info:\n   *\n   *   ```js\n   *   import {unified} from 'unified'\n   *\n   *   const processor = unified().data('alpha', 'bravo')\n   *\n   *   processor.data('alpha') // => 'bravo'\n   *\n   *   processor.data() // => {alpha: 'bravo'}\n   *\n   *   processor.data({charlie: 'delta'})\n   *\n   *   processor.data() // => {charlie: 'delta'}\n   *   ```\n   *\n   * @template {keyof Data} Key\n   *\n   * @overload\n   * @returns {Data}\n   *\n   * @overload\n   * @param {Data} dataset\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {Key} key\n   * @returns {Data[Key]}\n   *\n   * @overload\n   * @param {Key} key\n   * @param {Data[Key]} value\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @param {Data | Key} [key]\n   *   Key to get or set, or entire dataset to set, or nothing to get the\n   *   entire dataset (optional).\n   * @param {Data[Key]} [value]\n   *   Value to set (optional).\n   * @returns {unknown}\n   *   The current processor when setting, the value at `key` when getting, or\n   *   the entire dataset when getting without key.\n   */\n  data(key, value) {\n    if (typeof key === 'string') {\n      // Set `key`.\n      if (arguments.length === 2) {\n        assertUnfrozen('data', this.frozen)\n        this.namespace[key] = value\n        return this\n      }\n\n      // Get `key`.\n      return (own.call(this.namespace, key) && this.namespace[key]) || undefined\n    }\n\n    // Set space.\n    if (key) {\n      assertUnfrozen('data', this.frozen)\n      this.namespace = key\n      return this\n    }\n\n    // Get space.\n    return this.namespace\n  }\n\n  /**\n   * Freeze a processor.\n   *\n   * Frozen processors are meant to be extended and not to be configured\n   * directly.\n   *\n   * When a processor is frozen it cannot be unfrozen.\n   * New processors working the same way can be created by calling the\n   * processor.\n   *\n   * It’s possible to freeze processors explicitly by calling `.freeze()`.\n   * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`,\n   * `.stringify()`, `.process()`, or `.processSync()` are called.\n   *\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   The current processor.\n   */\n  freeze() {\n    if (this.frozen) {\n      return this\n    }\n\n    // Cast so that we can type plugins easier.\n    // Plugins are supposed to be usable on different processors, not just on\n    // this exact processor.\n    const self = /** @type {Processor} */ (/** @type {unknown} */ (this))\n\n    while (++this.freezeIndex < this.attachers.length) {\n      const [attacher, ...options] = this.attachers[this.freezeIndex]\n\n      if (options[0] === false) {\n        continue\n      }\n\n      if (options[0] === true) {\n        options[0] = undefined\n      }\n\n      const transformer = attacher.call(self, ...options)\n\n      if (typeof transformer === 'function') {\n        this.transformers.use(transformer)\n      }\n    }\n\n    this.frozen = true\n    this.freezeIndex = Number.POSITIVE_INFINITY\n\n    return this\n  }\n\n  /**\n   * Parse text to a syntax tree.\n   *\n   * > **Note**: `parse` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `parse` performs the parse phase, not the run phase or other\n   * > phases.\n   *\n   * @param {Compatible | undefined} [file]\n   *   file to parse (optional); typically `string` or `VFile`; any value\n   *   accepted as `x` in `new VFile(x)`.\n   * @returns {ParseTree extends undefined ? Node : ParseTree}\n   *   Syntax tree representing `file`.\n   */\n  parse(file) {\n    this.freeze()\n    const realFile = vfile(file)\n    const parser = this.parser || this.Parser\n    assertParser('parse', parser)\n    return parser(String(realFile), realFile)\n  }\n\n  /**\n   * Process the given file as configured on the processor.\n   *\n   * > **Note**: `process` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `process` performs the parse, run, and stringify phases.\n   *\n   * @overload\n   * @param {Compatible | undefined} file\n   * @param {ProcessCallback<VFileWithOutput<CompileResult>>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {Compatible | undefined} [file]\n   * @returns {Promise<VFileWithOutput<CompileResult>>}\n   *\n   * @param {Compatible | undefined} [file]\n   *   File (optional); typically `string` or `VFile`]; any value accepted as\n   *   `x` in `new VFile(x)`.\n   * @param {ProcessCallback<VFileWithOutput<CompileResult>> | undefined} [done]\n   *   Callback (optional).\n   * @returns {Promise<VFile> | undefined}\n   *   Nothing if `done` is given.\n   *   Otherwise a promise, rejected with a fatal error or resolved with the\n   *   processed file.\n   *\n   *   The parsed, transformed, and compiled value is available at\n   *   `file.value` (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most\n   *   > compilers return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  process(file, done) {\n    const self = this\n\n    this.freeze()\n    assertParser('process', this.parser || this.Parser)\n    assertCompiler('process', this.compiler || this.Compiler)\n\n    return done ? executor(undefined, done) : new Promise(executor)\n\n    // Note: `void`s needed for TS.\n    /**\n     * @param {((file: VFileWithOutput<CompileResult>) => undefined | void) | undefined} resolve\n     * @param {(error: Error | undefined) => undefined | void} reject\n     * @returns {undefined}\n     */\n    function executor(resolve, reject) {\n      const realFile = vfile(file)\n      // Assume `ParseTree` (the result of the parser) matches `HeadTree` (the\n      // input of the first transform).\n      const parseTree =\n        /** @type {HeadTree extends undefined ? Node : HeadTree} */ (\n          /** @type {unknown} */ (self.parse(realFile))\n        )\n\n      self.run(parseTree, realFile, function (error, tree, file) {\n        if (error || !tree || !file) {\n          return realDone(error)\n        }\n\n        // Assume `TailTree` (the output of the last transform) matches\n        // `CompileTree` (the input of the compiler).\n        const compileTree =\n          /** @type {CompileTree extends undefined ? Node : CompileTree} */ (\n            /** @type {unknown} */ (tree)\n          )\n\n        const compileResult = self.stringify(compileTree, file)\n\n        if (looksLikeAValue(compileResult)) {\n          file.value = compileResult\n        } else {\n          file.result = compileResult\n        }\n\n        realDone(error, /** @type {VFileWithOutput<CompileResult>} */ (file))\n      })\n\n      /**\n       * @param {Error | undefined} error\n       * @param {VFileWithOutput<CompileResult> | undefined} [file]\n       * @returns {undefined}\n       */\n      function realDone(error, file) {\n        if (error || !file) {\n          reject(error)\n        } else if (resolve) {\n          resolve(file)\n        } else {\n          assert(done, '`done` is defined if `resolve` is not')\n          done(undefined, file)\n        }\n      }\n    }\n  }\n\n  /**\n   * Process the given file as configured on the processor.\n   *\n   * An error is thrown if asynchronous transforms are configured.\n   *\n   * > **Note**: `processSync` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `processSync` performs the parse, run, and stringify phases.\n   *\n   * @param {Compatible | undefined} [file]\n   *   File (optional); typically `string` or `VFile`; any value accepted as\n   *   `x` in `new VFile(x)`.\n   * @returns {VFileWithOutput<CompileResult>}\n   *   The processed file.\n   *\n   *   The parsed, transformed, and compiled value is available at\n   *   `file.value` (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most\n   *   > compilers return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  processSync(file) {\n    /** @type {boolean} */\n    let complete = false\n    /** @type {VFileWithOutput<CompileResult> | undefined} */\n    let result\n\n    this.freeze()\n    assertParser('processSync', this.parser || this.Parser)\n    assertCompiler('processSync', this.compiler || this.Compiler)\n\n    this.process(file, realDone)\n    assertDone('processSync', 'process', complete)\n    assert(result, 'we either bailed on an error or have a tree')\n\n    return result\n\n    /**\n     * @type {ProcessCallback<VFileWithOutput<CompileResult>>}\n     */\n    function realDone(error, file) {\n      complete = true\n      bail(error)\n      result = file\n    }\n  }\n\n  /**\n   * Run *transformers* on a syntax tree.\n   *\n   * > **Note**: `run` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `run` performs the run phase, not other phases.\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {Compatible | undefined} file\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {Compatible | undefined} [file]\n   * @returns {Promise<TailTree extends undefined ? Node : TailTree>}\n   *\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   *   Tree to transform and inspect.\n   * @param {(\n   *   RunCallback<TailTree extends undefined ? Node : TailTree> |\n   *   Compatible\n   * )} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} [done]\n   *   Callback (optional).\n   * @returns {Promise<TailTree extends undefined ? Node : TailTree> | undefined}\n   *   Nothing if `done` is given.\n   *   Otherwise, a promise rejected with a fatal error or resolved with the\n   *   transformed tree.\n   */\n  run(tree, file, done) {\n    assertNode(tree)\n    this.freeze()\n\n    const transformers = this.transformers\n\n    if (!done && typeof file === 'function') {\n      done = file\n      file = undefined\n    }\n\n    return done ? executor(undefined, done) : new Promise(executor)\n\n    // Note: `void`s needed for TS.\n    /**\n     * @param {(\n     *   ((tree: TailTree extends undefined ? Node : TailTree) => undefined | void) |\n     *   undefined\n     * )} resolve\n     * @param {(error: Error) => undefined | void} reject\n     * @returns {undefined}\n     */\n    function executor(resolve, reject) {\n      assert(\n        typeof file !== 'function',\n        '`file` can’t be a `done` anymore, we checked'\n      )\n      const realFile = vfile(file)\n      transformers.run(tree, realFile, realDone)\n\n      /**\n       * @param {Error | undefined} error\n       * @param {Node} outputTree\n       * @param {VFile} file\n       * @returns {undefined}\n       */\n      function realDone(error, outputTree, file) {\n        const resultingTree =\n          /** @type {TailTree extends undefined ? Node : TailTree} */ (\n            outputTree || tree\n          )\n\n        if (error) {\n          reject(error)\n        } else if (resolve) {\n          resolve(resultingTree)\n        } else {\n          assert(done, '`done` is defined if `resolve` is not')\n          done(undefined, resultingTree, file)\n        }\n      }\n    }\n  }\n\n  /**\n   * Run *transformers* on a syntax tree.\n   *\n   * An error is thrown if asynchronous transforms are configured.\n   *\n   * > **Note**: `runSync` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `runSync` performs the run phase, not other phases.\n   *\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   *   Tree to transform and inspect.\n   * @param {Compatible | undefined} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @returns {TailTree extends undefined ? Node : TailTree}\n   *   Transformed tree.\n   */\n  runSync(tree, file) {\n    /** @type {boolean} */\n    let complete = false\n    /** @type {(TailTree extends undefined ? Node : TailTree) | undefined} */\n    let result\n\n    this.run(tree, file, realDone)\n\n    assertDone('runSync', 'run', complete)\n    assert(result, 'we either bailed on an error or have a tree')\n    return result\n\n    /**\n     * @type {RunCallback<TailTree extends undefined ? Node : TailTree>}\n     */\n    function realDone(error, tree) {\n      bail(error)\n      result = tree\n      complete = true\n    }\n  }\n\n  /**\n   * Compile a syntax tree.\n   *\n   * > **Note**: `stringify` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `stringify` performs the stringify phase, not the run phase\n   * > or other phases.\n   *\n   * @param {CompileTree extends undefined ? Node : CompileTree} tree\n   *   Tree to compile.\n   * @param {Compatible | undefined} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @returns {CompileResult extends undefined ? Value : CompileResult}\n   *   Textual representation of the tree (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most compilers\n   *   > return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  stringify(tree, file) {\n    this.freeze()\n    const realFile = vfile(file)\n    const compiler = this.compiler || this.Compiler\n    assertCompiler('stringify', compiler)\n    assertNode(tree)\n\n    return compiler(tree, realFile)\n  }\n\n  /**\n   * Configure the processor to use a plugin, a list of usable values, or a\n   * preset.\n   *\n   * If the processor is already using a plugin, the previous plugin\n   * configuration is changed based on the options that are passed in.\n   * In other words, the plugin is not added a second time.\n   *\n   * > **Note**: `use` cannot be called on *frozen* processors.\n   * > Call the processor first to create a new unfrozen processor.\n   *\n   * @example\n   *   There are many ways to pass plugins to `.use()`.\n   *   This example gives an overview:\n   *\n   *   ```js\n   *   import {unified} from 'unified'\n   *\n   *   unified()\n   *     // Plugin with options:\n   *     .use(pluginA, {x: true, y: true})\n   *     // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`):\n   *     .use(pluginA, {y: false, z: true})\n   *     // Plugins:\n   *     .use([pluginB, pluginC])\n   *     // Two plugins, the second with options:\n   *     .use([pluginD, [pluginE, {}]])\n   *     // Preset with plugins and settings:\n   *     .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}})\n   *     // Settings only:\n   *     .use({settings: {position: false}})\n   *   ```\n   *\n   * @template {Array<unknown>} [Parameters=[]]\n   * @template {Node | string | undefined} [Input=undefined]\n   * @template [Output=Input]\n   *\n   * @overload\n   * @param {Preset | null | undefined} [preset]\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {PluggableList} list\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {Plugin<Parameters, Input, Output>} plugin\n   * @param {...(Parameters | [boolean])} parameters\n   * @returns {UsePlugin<ParseTree, HeadTree, TailTree, CompileTree, CompileResult, Input, Output>}\n   *\n   * @param {PluggableList | Plugin | Preset | null | undefined} value\n   *   Usable value.\n   * @param {...unknown} parameters\n   *   Parameters, when a plugin is given as a usable value.\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   Current processor.\n   */\n  use(value, ...parameters) {\n    const attachers = this.attachers\n    const namespace = this.namespace\n\n    assertUnfrozen('use', this.frozen)\n\n    if (value === null || value === undefined) {\n      // Empty.\n    } else if (typeof value === 'function') {\n      addPlugin(value, parameters)\n    } else if (typeof value === 'object') {\n      if (Array.isArray(value)) {\n        addList(value)\n      } else {\n        addPreset(value)\n      }\n    } else {\n      throw new TypeError('Expected usable value, not `' + value + '`')\n    }\n\n    return this\n\n    /**\n     * @param {Pluggable} value\n     * @returns {undefined}\n     */\n    function add(value) {\n      if (typeof value === 'function') {\n        addPlugin(value, [])\n      } else if (typeof value === 'object') {\n        if (Array.isArray(value)) {\n          const [plugin, ...parameters] =\n            /** @type {PluginTuple<Array<unknown>>} */ (value)\n          addPlugin(plugin, parameters)\n        } else {\n          addPreset(value)\n        }\n      } else {\n        throw new TypeError('Expected usable value, not `' + value + '`')\n      }\n    }\n\n    /**\n     * @param {Preset} result\n     * @returns {undefined}\n     */\n    function addPreset(result) {\n      if (!('plugins' in result) && !('settings' in result)) {\n        throw new Error(\n          'Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither'\n        )\n      }\n\n      addList(result.plugins)\n\n      if (result.settings) {\n        namespace.settings = extend(true, namespace.settings, result.settings)\n      }\n    }\n\n    /**\n     * @param {PluggableList | null | undefined} plugins\n     * @returns {undefined}\n     */\n    function addList(plugins) {\n      let index = -1\n\n      if (plugins === null || plugins === undefined) {\n        // Empty.\n      } else if (Array.isArray(plugins)) {\n        while (++index < plugins.length) {\n          const thing = plugins[index]\n          add(thing)\n        }\n      } else {\n        throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n      }\n    }\n\n    /**\n     * @param {Plugin} plugin\n     * @param {Array<unknown>} parameters\n     * @returns {undefined}\n     */\n    function addPlugin(plugin, parameters) {\n      let index = -1\n      let entryIndex = -1\n\n      while (++index < attachers.length) {\n        if (attachers[index][0] === plugin) {\n          entryIndex = index\n          break\n        }\n      }\n\n      if (entryIndex === -1) {\n        attachers.push([plugin, ...parameters])\n      }\n      // Only set if there was at least a `primary` value, otherwise we’d change\n      // `arguments.length`.\n      else if (parameters.length > 0) {\n        let [primary, ...rest] = parameters\n        const currentPrimary = attachers[entryIndex][1]\n        if (isPlainObj(currentPrimary) && isPlainObj(primary)) {\n          primary = extend(true, currentPrimary, primary)\n        }\n\n        attachers[entryIndex] = [plugin, primary, ...rest]\n      }\n    }\n  }\n}\n\n// Note: this returns a *callable* instance.\n// That’s why it’s documented as a function.\n/**\n * Create a new processor.\n *\n * @example\n *   This example shows how a new processor can be created (from `remark`) and linked\n *   to **stdin**(4) and **stdout**(4).\n *\n *   ```js\n *   import process from 'node:process'\n *   import concatStream from 'concat-stream'\n *   import {remark} from 'remark'\n *\n *   process.stdin.pipe(\n *     concatStream(function (buf) {\n *       process.stdout.write(String(remark().processSync(buf)))\n *     })\n *   )\n *   ```\n *\n * @returns\n *   New *unfrozen* processor (`processor`).\n *\n *   This processor is configured to work the same as its ancestor.\n *   When the descendant processor is configured in the future it does not\n *   affect the ancestral processor.\n */\nexport const unified = new Processor().freeze()\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `parser`')\n  }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `compiler`')\n  }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n  if (frozen) {\n    throw new Error(\n      'Cannot call `' +\n        name +\n        '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n    )\n  }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n  // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n  // type-coverage:ignore-next-line\n  if (!isPlainObj(node) || typeof node.type !== 'string') {\n    throw new TypeError('Expected node, got `' + node + '`')\n    // Fine.\n  }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n  if (!complete) {\n    throw new Error(\n      '`' + name + '` finished async. Use `' + asyncName + '` instead'\n    )\n  }\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n  return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'message' in value &&\n      'messages' in value\n  )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is Value}\n */\nfunction looksLikeAValue(value) {\n  return typeof value === 'string' || isUint8Array(value)\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Uint8Array}\n *   Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'byteLength' in value &&\n      'byteOffset' in value\n  )\n}\n","// Register `Raw` in tree:\n/// <reference types=\"mdast-util-to-hast\" />\n\n/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Nodes} Nodes\n * @typedef {import('hast').Parents} Parents\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast-util-to-jsx-runtime').Components} JsxRuntimeComponents\n * @typedef {import('remark-rehype').Options} RemarkRehypeOptions\n * @typedef {import('unist-util-visit').BuildVisitor<Root>} Visitor\n * @typedef {import('unified').PluggableList} PluggableList\n */\n\n/**\n * @callback AllowElement\n *   Filter elements.\n * @param {Readonly<Element>} element\n *   Element to check.\n * @param {number} index\n *   Index of `element` in `parent`.\n * @param {Readonly<Parents> | undefined} parent\n *   Parent of `element`.\n * @returns {boolean | null | undefined}\n *   Whether to allow `element` (default: `false`).\n *\n * @typedef {Partial<JsxRuntimeComponents>} Components\n *   Map tag names to components.\n *\n * @typedef Deprecation\n *   Deprecation.\n * @property {string} from\n *   Old field.\n * @property {string} id\n *   ID in readme.\n * @property {keyof Options} [to]\n *   New field.\n *\n * @typedef Options\n *   Configuration.\n * @property {AllowElement | null | undefined} [allowElement]\n *   Filter elements (optional);\n *   `allowedElements` / `disallowedElements` is used first.\n * @property {ReadonlyArray<string> | null | undefined} [allowedElements]\n *   Tag names to allow (default: all tag names);\n *   cannot combine w/ `disallowedElements`.\n * @property {string | null | undefined} [children]\n *   Markdown.\n * @property {string | null | undefined} [className]\n *   Wrap in a `div` with this class name.\n * @property {Components | null | undefined} [components]\n *   Map tag names to components.\n * @property {ReadonlyArray<string> | null | undefined} [disallowedElements]\n *   Tag names to disallow (default: `[]`);\n *   cannot combine w/ `allowedElements`.\n * @property {PluggableList | null | undefined} [rehypePlugins]\n *   List of rehype plugins to use.\n * @property {PluggableList | null | undefined} [remarkPlugins]\n *   List of remark plugins to use.\n * @property {Readonly<RemarkRehypeOptions> | null | undefined} [remarkRehypeOptions]\n *   Options to pass through to `remark-rehype`.\n * @property {boolean | null | undefined} [skipHtml=false]\n *   Ignore HTML in markdown completely (default: `false`).\n * @property {boolean | null | undefined} [unwrapDisallowed=false]\n *   Extract (unwrap) what’s in disallowed elements (default: `false`);\n *   normally when say `strong` is not allowed, it and it’s children are dropped,\n *   with `unwrapDisallowed` the element itself is replaced by its children.\n * @property {UrlTransform | null | undefined} [urlTransform]\n *   Change URLs (default: `defaultUrlTransform`)\n *\n * @callback UrlTransform\n *   Transform all URLs.\n * @param {string} url\n *   URL.\n * @param {string} key\n *   Property name (example: `'href'`).\n * @param {Readonly<Element>} node\n *   Node.\n * @returns {string | null | undefined}\n *   Transformed URL (optional).\n */\n\nimport {unreachable} from 'devlop'\nimport {toJsxRuntime} from 'hast-util-to-jsx-runtime'\nimport {urlAttributes} from 'html-url-attributes'\n// @ts-expect-error: untyped.\nimport {Fragment, jsx, jsxs} from 'react/jsx-runtime'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport {unified} from 'unified'\nimport {visit} from 'unist-util-visit'\nimport {VFile} from 'vfile'\n\nconst changelog =\n  'https://github.com/remarkjs/react-markdown/blob/main/changelog.md'\n\n/** @type {PluggableList} */\nconst emptyPlugins = []\n/** @type {Readonly<RemarkRehypeOptions>} */\nconst emptyRemarkRehypeOptions = {allowDangerousHtml: true}\nconst safeProtocol = /^(https?|ircs?|mailto|xmpp)$/i\n\n// Mutable because we `delete` any time it’s used and a message is sent.\n/** @type {ReadonlyArray<Readonly<Deprecation>>} */\nconst deprecations = [\n  {from: 'astPlugins', id: 'remove-buggy-html-in-markdown-parser'},\n  {from: 'allowDangerousHtml', id: 'remove-buggy-html-in-markdown-parser'},\n  {\n    from: 'allowNode',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'allowElement'\n  },\n  {\n    from: 'allowedTypes',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'allowedElements'\n  },\n  {\n    from: 'disallowedTypes',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'disallowedElements'\n  },\n  {from: 'escapeHtml', id: 'remove-buggy-html-in-markdown-parser'},\n  {from: 'includeElementIndex', id: '#remove-includeelementindex'},\n  {\n    from: 'includeNodeIndex',\n    id: 'change-includenodeindex-to-includeelementindex'\n  },\n  {from: 'linkTarget', id: 'remove-linktarget'},\n  {from: 'plugins', id: 'change-plugins-to-remarkplugins', to: 'remarkPlugins'},\n  {from: 'rawSourcePos', id: '#remove-rawsourcepos'},\n  {from: 'renderers', id: 'change-renderers-to-components', to: 'components'},\n  {from: 'source', id: 'change-source-to-children', to: 'children'},\n  {from: 'sourcePos', id: '#remove-sourcepos'},\n  {from: 'transformImageUri', id: '#add-urltransform', to: 'urlTransform'},\n  {from: 'transformLinkUri', id: '#add-urltransform', to: 'urlTransform'}\n]\n\n/**\n * Component to render markdown.\n *\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {JSX.Element}\n *   React element.\n */\nexport function Markdown(options) {\n  const allowedElements = options.allowedElements\n  const allowElement = options.allowElement\n  const children = options.children || ''\n  const className = options.className\n  const components = options.components\n  const disallowedElements = options.disallowedElements\n  const rehypePlugins = options.rehypePlugins || emptyPlugins\n  const remarkPlugins = options.remarkPlugins || emptyPlugins\n  const remarkRehypeOptions = options.remarkRehypeOptions\n    ? {...options.remarkRehypeOptions, ...emptyRemarkRehypeOptions}\n    : emptyRemarkRehypeOptions\n  const skipHtml = options.skipHtml\n  const unwrapDisallowed = options.unwrapDisallowed\n  const urlTransform = options.urlTransform || defaultUrlTransform\n\n  const processor = unified()\n    .use(remarkParse)\n    .use(remarkPlugins)\n    .use(remarkRehype, remarkRehypeOptions)\n    .use(rehypePlugins)\n\n  const file = new VFile()\n\n  if (typeof children === 'string') {\n    file.value = children\n  } else {\n    unreachable(\n      'Unexpected value `' +\n        children +\n        '` for `children` prop, expected `string`'\n    )\n  }\n\n  if (allowedElements && disallowedElements) {\n    unreachable(\n      'Unexpected combined `allowedElements` and `disallowedElements`, expected one or the other'\n    )\n  }\n\n  for (const deprecation of deprecations) {\n    if (Object.hasOwn(options, deprecation.from)) {\n      unreachable(\n        'Unexpected `' +\n          deprecation.from +\n          '` prop, ' +\n          (deprecation.to\n            ? 'use `' + deprecation.to + '` instead'\n            : 'remove it') +\n          ' (see <' +\n          changelog +\n          '#' +\n          deprecation.id +\n          '> for more info)'\n      )\n    }\n  }\n\n  const mdastTree = processor.parse(file)\n  /** @type {Nodes} */\n  let hastTree = processor.runSync(mdastTree, file)\n\n  // Wrap in `div` if there’s a class name.\n  if (className) {\n    hastTree = {\n      type: 'element',\n      tagName: 'div',\n      properties: {className},\n      // Assume no doctypes.\n      children: /** @type {Array<ElementContent>} */ (\n        hastTree.type === 'root' ? hastTree.children : [hastTree]\n      )\n    }\n  }\n\n  visit(hastTree, transform)\n\n  return toJsxRuntime(hastTree, {\n    Fragment,\n    components,\n    ignoreInvalidStyle: true,\n    jsx,\n    jsxs,\n    passKeys: true,\n    passNode: true\n  })\n\n  /** @type {Visitor} */\n  function transform(node, index, parent) {\n    if (node.type === 'raw' && parent && typeof index === 'number') {\n      if (skipHtml) {\n        parent.children.splice(index, 1)\n      } else {\n        parent.children[index] = {type: 'text', value: node.value}\n      }\n\n      return index\n    }\n\n    if (node.type === 'element') {\n      /** @type {string} */\n      let key\n\n      for (key in urlAttributes) {\n        if (\n          Object.hasOwn(urlAttributes, key) &&\n          Object.hasOwn(node.properties, key)\n        ) {\n          const value = node.properties[key]\n          const test = urlAttributes[key]\n          if (test === null || test.includes(node.tagName)) {\n            node.properties[key] = urlTransform(String(value || ''), key, node)\n          }\n        }\n      }\n    }\n\n    if (node.type === 'element') {\n      let remove = allowedElements\n        ? !allowedElements.includes(node.tagName)\n        : disallowedElements\n        ? disallowedElements.includes(node.tagName)\n        : false\n\n      if (!remove && allowElement && typeof index === 'number') {\n        remove = !allowElement(node, index, parent)\n      }\n\n      if (remove && parent && typeof index === 'number') {\n        if (unwrapDisallowed && node.children) {\n          parent.children.splice(index, 1, ...node.children)\n        } else {\n          parent.children.splice(index, 1)\n        }\n\n        return index\n      }\n    }\n  }\n}\n\n/**\n * Make a URL safe.\n *\n * @satisfies {UrlTransform}\n * @param {string} value\n *   URL.\n * @returns {string}\n *   Safe URL.\n */\nexport function defaultUrlTransform(value) {\n  // Same as:\n  // <https://github.com/micromark/micromark/blob/929275e/packages/micromark-util-sanitize-uri/dev/index.js#L34>\n  // But without the `encode` part.\n  const colon = value.indexOf(':')\n  const questionMark = value.indexOf('?')\n  const numberSign = value.indexOf('#')\n  const slash = value.indexOf('/')\n\n  if (\n    // If there is no protocol, it’s relative.\n    colon < 0 ||\n    // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n    (slash > -1 && colon > slash) ||\n    (questionMark > -1 && colon > questionMark) ||\n    (numberSign > -1 && colon > numberSign) ||\n    // It is a protocol, it should be allowed.\n    safeProtocol.test(value.slice(0, colon))\n  ) {\n    return value\n  }\n\n  return ''\n}\n","import { Component } from 'react';\nimport Markdown from 'react-markdown';\n\nexport default class ListGroupItem extends Component {\n  render() {\n    const { label, value } = this.props;\n    return (\n      <div className=\"list-group-item d-flex\">\n        <div className=\"d-flex gap-2 w-100 justify-content-between py-3\">\n          <div>\n            <h6 className=\"mb-0 w-100\">{label}</h6>\n            <div\n              className=\"mb-0 opacity-75\"\n              role=\"dialog\"\n              aria-hidden=\"false\"\n              aria-label={label}\n            >\n              <Markdown>{value}</Markdown>\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n","import { useState, useContext, useEffect } from 'react';\nimport { Light as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport foundation from 'react-syntax-highlighter/dist/esm/styles/hljs/foundation';\nimport sql from 'react-syntax-highlighter/dist/esm/languages/hljs/sql';\nimport NodeStatus from './NodeStatus';\nimport ListGroupItem from '../../components/ListGroupItem';\nimport DJClientContext from '../../providers/djclient';\nimport { labelize } from '../../../utils/form';\n\nSyntaxHighlighter.registerLanguage('sql', sql);\nfoundation.hljs['padding'] = '2rem';\n\n// interface MetricInfo {\n//   name: string;\n//   current: MetricRevision;\n// }\n\n// interface MetricRevision {\n//   parents: array<string>;\n//   metricMetadata:\n// }\n\n// interface MetricMetadata {\n//   direction: string;\n//   unit: string;\n//   expression: string;\n//   significantDigits: string;\n//   incompatibleDruidFunctions: array<string>;\n// }\n\nexport default function NodeInfoTab({ node }) {\n  // For metrics\n  const [metricInfo, setMetricInfo] = useState(null);\n\n  const nodeTags = node?.tags.map(tag => (\n    <span\n      key={tag.name}\n      className={'badge tag_value'}\n      style={{ marginRight: '4px' }}\n    >\n      <a href={`/tags/${tag.name}`}>{tag.display_name}</a>\n    </span>\n  ));\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n\n  useEffect(() => {\n    const fetchData = async () => {\n      const metric = await djClient.getMetric(node.name);\n      // For derived metrics, don't show upstream_node\n      const parents = metric.current.parents || [];\n      const upstreamNode =\n        !metric.current.isDerivedMetric && parents.length === 1\n          ? parents[0]?.name\n          : null;\n      setMetricInfo({\n        metric_metadata: metric.current.metricMetadata,\n        required_dimensions: metric.current.requiredDimensions,\n        upstream_node: upstreamNode,\n        expression: metric.current.metricMetadata?.expression,\n        incompatible_druid_functions:\n          metric.current.metricMetadata?.incompatibleDruidFunctions || [],\n      });\n    };\n    if (node.type === 'metric') {\n      fetchData().catch(console.error);\n    }\n  }, [node, djClient]);\n\n  // For cubes\n  const [cubeElements, setCubeElements] = useState(null);\n\n  useEffect(() => {\n    const fetchData = async () => {\n      const cube = await djClient.cube(node.name);\n      setCubeElements(cube.cube_elements);\n    };\n    if (node.type === 'cube') {\n      fetchData().catch(console.error);\n    }\n  }, [node, djClient]);\n\n  const metricsWarning =\n    node?.type === 'metric' &&\n    metricInfo?.incompatible_druid_functions?.length > 0 ? (\n      <div className=\"message warning\" style={{ marginTop: '0.7rem' }}>\n        ⚠{' '}\n        <small>\n          The following functions used in the metric definition may not be\n          compatible with Druid SQL:{' '}\n          {metricInfo?.incompatible_druid_functions.map(func => (\n            <li\n              style={{ listStyleType: 'none', margin: '0.7rem 0.7rem' }}\n              key={func}\n            >\n              ⇢{' '}\n              <span style={{ background: '#fff', padding: '0.3rem' }}>\n                {func}\n              </span>\n            </li>\n          ))}\n          If you need your metrics to be compatible with Druid, please use{' '}\n          <a\n            href={\n              'https://druid.apache.org/docs/latest/querying/sql-functions/'\n            }\n          >\n            these supported functions\n          </a>\n          .\n        </small>\n      </div>\n    ) : (\n      ''\n    );\n\n  const metricQueryDiv =\n    node?.type === 'metric' ? (\n      <div className=\"list-group-item d-flex\">\n        <div className=\"gap-2 w-100 justify-content-between py-3\">\n          {metricInfo?.upstream_node && (\n            <div style={{ marginBottom: '30px' }}>\n              <h6 className=\"mb-0 w-100\">Upstream Node</h6>\n              <p>\n                <a href={`/nodes/${metricInfo?.upstream_node}`}>\n                  {metricInfo?.upstream_node}\n                </a>\n              </p>\n            </div>\n          )}\n          <div>\n            <h6 className=\"mb-0 w-100\">Aggregate Expression</h6>\n            <SyntaxHighlighter\n              language=\"sql\"\n              style={foundation}\n              wrapLongLines={true}\n            >\n              {metricInfo?.expression}\n            </SyntaxHighlighter>\n          </div>\n        </div>\n      </div>\n    ) : (\n      ''\n    );\n  const queryDiv = node?.query ? (\n    <div className=\"list-group-item d-flex\">\n      <div className=\"d-flex gap-2 w-100 justify-content-between py-3\">\n        <div\n          style={{\n            width: window.innerWidth * 0.8,\n          }}\n        >\n          <h6 className=\"mb-0 w-100\">Query</h6>\n          <SyntaxHighlighter\n            language=\"sql\"\n            style={foundation}\n            wrapLongLines={true}\n          >\n            {node?.query}\n          </SyntaxHighlighter>\n        </div>\n      </div>\n    </div>\n  ) : (\n    <></>\n  );\n\n  const displayCubeElement = cubeElem => {\n    return (\n      <div\n        className=\"button-3 cube-element\"\n        key={cubeElem.name + (cubeElem.role || '')}\n        role=\"cell\"\n        aria-label=\"CubeElement\"\n        aria-hidden=\"false\"\n      >\n        <a href={`/nodes/${cubeElem.node_name}`}>\n          {cubeElem.type === 'dimension'\n            ? labelize(cubeElem.node_name.split('.').slice(-1)[0]) + ' → '\n            : ''}\n          {cubeElem.display_name}\n          {cubeElem.role && (\n            <span\n              style={{\n                marginLeft: '4px',\n                fontSize: '85%',\n                color: '#6c757d',\n              }}\n            >\n              [{cubeElem.role}]\n            </span>\n          )}\n        </a>\n        <span\n          className={`badge node_type__${\n            cubeElem.type === 'metric' ? cubeElem.type : 'dimension'\n          }`}\n          style={{ fontSize: '100%', textTransform: 'capitalize' }}\n        >\n          {cubeElem.type === 'metric' ? cubeElem.type : 'dimension'}\n        </span>\n      </div>\n    );\n  };\n\n  const metricMetadataDiv =\n    node?.type === 'metric' ? (\n      <div className=\"list-group-item d-flex\">\n        <div className=\"d-flex gap-2 w-100 py-3\">\n          <div style={{ marginRight: '2rem' }}>\n            <h6 className=\"mb-0 w-100\">Output Type</h6>\n            <p\n              className=\"mb-0 opacity-75\"\n              role=\"dialog\"\n              aria-hidden=\"false\"\n              aria-label=\"OutputType\"\n            >\n              <code\n                style={{\n                  background: '#f5f5f5',\n                  padding: '2px 6px',\n                  borderRadius: '3px',\n                }}\n              >\n                {node?.columns?.[0]?.type || 'Unknown'}\n              </code>\n            </p>\n          </div>\n          <div style={{ marginRight: '2rem' }}>\n            <h6 className=\"mb-0 w-100\">Direction</h6>\n            <p\n              className=\"mb-0 opacity-75\"\n              role=\"dialog\"\n              aria-hidden=\"false\"\n              aria-label=\"MetricDirection\"\n            >\n              {metricInfo?.metric_metadata?.direction\n                ? labelize(\n                    metricInfo?.metric_metadata?.direction?.toLowerCase(),\n                  )\n                : 'None'}\n            </p>\n          </div>\n          <div style={{ marginRight: '2rem' }}>\n            <h6 className=\"mb-0 w-100\">Unit</h6>\n            <p\n              className=\"mb-0 opacity-75\"\n              role=\"dialog\"\n              aria-hidden=\"false\"\n              aria-label=\"MetricUnit\"\n            >\n              {metricInfo?.metric_metadata?.unit?.name\n                ? labelize(\n                    metricInfo?.metric_metadata?.unit?.name?.toLowerCase(),\n                  )\n                : 'None'}\n            </p>\n          </div>\n          <div style={{ marginRight: '2rem' }}>\n            <h6 className=\"mb-0 w-100\">Significant Digits</h6>\n            <p\n              className=\"mb-0 opacity-75\"\n              role=\"dialog\"\n              aria-hidden=\"false\"\n              aria-label=\"SignificantDigits\"\n            >\n              {metricInfo?.metric_metadata?.significantDigits || 'None'}\n            </p>\n          </div>\n        </div>\n      </div>\n    ) : (\n      ''\n    );\n\n  const customMetadataDiv =\n    node?.custom_metadata && Object.keys(node.custom_metadata).length > 0 ? (\n      <div className=\"list-group-item d-flex\">\n        <div className=\"d-flex gap-2 w-100 justify-content-between py-3\">\n          <div\n            style={{\n              width: window.innerWidth * 0.8,\n            }}\n          >\n            <h6 className=\"mb-0 w-100\">Custom Metadata</h6>\n            <SyntaxHighlighter\n              language=\"json\"\n              style={foundation}\n              wrapLongLines={true}\n            >\n              {JSON.stringify(node.custom_metadata, null, 2)}\n            </SyntaxHighlighter>\n          </div>\n        </div>\n      </div>\n    ) : (\n      ''\n    );\n\n  const cubeElementsDiv = cubeElements ? (\n    <div className=\"list-group-item d-flex\">\n      <div className=\"d-flex gap-2 w-100 justify-content-between py-3\">\n        <div\n          style={{\n            width: window.innerWidth * 0.8,\n          }}\n        >\n          <h6 className=\"mb-0 w-100\">Cube Elements</h6>\n          <div style={{ marginTop: '0.5rem' }}>\n            {cubeElements.map(cubeElem =>\n              cubeElem.type === 'metric' ? displayCubeElement(cubeElem) : '',\n            )}\n            {cubeElements.map(cubeElem =>\n              cubeElem.type !== 'metric' ? displayCubeElement(cubeElem) : '',\n            )}\n          </div>\n          {node?.cube_filters?.length > 0 && (\n            <>\n              <h6 className=\"mb-0 w-100\" style={{ marginTop: '1rem' }}>\n                Cube Filters\n              </h6>\n              <div style={{ marginTop: '0.5rem' }}>\n                {node.cube_filters.map((filter, idx) => (\n                  <div\n                    key={idx}\n                    className=\"button-3 cube-element\"\n                    role=\"cell\"\n                    aria-label=\"CubeFilter\"\n                    aria-hidden=\"false\"\n                  >\n                    <code style={{ fontSize: '12px' }}>{filter}</code>\n                  </div>\n                ))}\n              </div>\n            </>\n          )}\n        </div>\n      </div>\n    </div>\n  ) : (\n    <></>\n  );\n\n  const primaryKeyOrRequiredDims = (\n    <div style={{ maxWidth: '25%' }}>\n      <h6 className=\"mb-0 w-100\">\n        {node?.type !== 'metric' ? 'Primary Key' : 'Required Dimensions'}\n      </h6>\n      <p\n        className=\"mb-0 opacity-75\"\n        role=\"dialog\"\n        aria-hidden=\"false\"\n        aria-label={\n          node?.type !== 'metric' ? 'PrimaryKey' : 'RequiredDimensions'\n        }\n      >\n        {node?.type !== 'metric'\n          ? node?.primary_key?.map((dim, idx) => (\n              <span\n                key={`pk-${idx}`}\n                className=\"rounded-pill badge bg-secondary-soft PrimaryKey\"\n              >\n                <a href={`/nodes/${node?.name}`}>{dim}</a>\n              </span>\n            ))\n          : metricInfo?.required_dimensions?.map((dim, idx) => (\n              <span\n                key={`rd-${idx}`}\n                className=\"rounded-pill badge bg-secondary-soft PrimaryKey\"\n              >\n                {metricInfo?.upstream_node ? (\n                  <a href={`/nodes/${metricInfo?.upstream_node}`}>{dim.name}</a>\n                ) : (\n                  dim.name\n                )}\n              </span>\n            ))}\n      </p>\n    </div>\n  );\n  return (\n    <div\n      className=\"list-group align-items-center justify-content-between flex-md-row gap-2\"\n      style={{ minWidth: '700px' }}\n    >\n      {node?.type === 'metric' ? metricsWarning : ''}\n      <ListGroupItem label=\"Description\" value={node?.description} />\n      <div className=\"list-group-item d-flex\">\n        <div className=\"d-flex gap-2 w-100 justify-content-between py-3\">\n          <div>\n            <h6 className=\"mb-0 w-100\">Owners</h6>\n            <p className=\"mb-0 opacity-75\">\n              {node?.owners.map(owner => (\n                <span\n                  key={owner.username}\n                  className=\"badge node_type__transform\"\n                  style={{ margin: '2px', fontSize: '16px', cursor: 'pointer' }}\n                >\n                  {owner.username}\n                </span>\n              ))}\n            </p>\n          </div>\n        </div>\n      </div>\n      <div className=\"list-group-item d-flex\">\n        <div className=\"d-flex gap-2 w-100 justify-content-between py-3\">\n          <div>\n            <h6 className=\"mb-0 w-100\">Version</h6>\n\n            <p className=\"mb-0 opacity-75\">\n              <span\n                className=\"rounded-pill badge bg-secondary-soft\"\n                style={{ marginLeft: '0.5rem', fontSize: '100%' }}\n                role=\"dialog\"\n                aria-hidden=\"false\"\n                aria-label=\"Version\"\n              >\n                {node?.version}\n              </span>\n            </p>\n          </div>\n          {node.type === 'source' ? (\n            <div>\n              <h6 className=\"mb-0 w-100\">Table</h6>\n              <p\n                className=\"mb-0 opacity-75\"\n                role=\"dialog\"\n                aria-hidden=\"false\"\n                aria-label=\"Table\"\n              >\n                {node?.catalog.name}.{node?.schema_}.{node?.table}\n              </p>\n            </div>\n          ) : (\n            <></>\n          )}\n          <div>\n            <h6 className=\"mb-0 w-100\">Status</h6>\n            <p\n              className=\"mb-0 opacity-75\"\n              role=\"dialog\"\n              aria-hidden=\"false\"\n              aria-label=\"NodeStatus\"\n            >\n              <NodeStatus node={node} />\n            </p>\n          </div>\n          <div>\n            <h6 className=\"mb-0 w-100\">Mode</h6>\n            <p className=\"mb-0 opacity-75\">\n              <span\n                className=\"status\"\n                role=\"dialog\"\n                aria-hidden=\"false\"\n                aria-label=\"Mode\"\n              >\n                {node?.mode}\n              </span>\n            </p>\n          </div>\n          <div>\n            <h6 className=\"mb-0 w-100\">Tags</h6>\n            <p\n              className=\"mb-0 opacity-75\"\n              role=\"dialog\"\n              aria-hidden=\"false\"\n              aria-label=\"Tags\"\n            >\n              {nodeTags}\n            </p>\n          </div>\n          {primaryKeyOrRequiredDims}\n          <div>\n            <h6 className=\"mb-0 w-100\">Last Updated</h6>\n            <p\n              className=\"mb-0 opacity-75\"\n              role=\"dialog\"\n              aria-hidden=\"false\"\n              aria-label=\"UpdatedAt\"\n            >\n              {new Date(node?.updated_at).toDateString()}\n            </p>\n          </div>\n        </div>\n      </div>\n      {metricMetadataDiv}\n      {node.type !== 'cube' && node.type !== 'metric' ? queryDiv : ''}\n      {node.type === 'metric' ? metricQueryDiv : ''}\n      {customMetadataDiv}\n      {cubeElementsDiv}\n    </div>\n  );\n}\n","const EditIcon = ({ size = 14 }) => (\n  <svg\n    className=\"feather feather-edit\"\n    fill=\"none\"\n    height={size}\n    stroke=\"currentColor\"\n    strokeLinecap=\"round\"\n    strokeLinejoin=\"round\"\n    strokeWidth=\"2\"\n    viewBox=\"0 0 24 24\"\n    width={size}\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n    <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\" />\n  </svg>\n);\nexport default EditIcon;\n","import { useContext, useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\nimport DJClientContext from '../../providers/djclient';\nimport { Form, Formik } from 'formik';\nimport { FormikSelect } from '../AddEditNodePage/FormikSelect';\nimport EditIcon from '../../icons/EditIcon';\nimport { displayMessageAfterSubmit, labelize } from '../../../utils/form';\n\nexport default function EditColumnPopover({ column, node, options, onSubmit }) {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const [popoverAnchor, setPopoverAnchor] = useState(false);\n  const ref = useRef(null);\n\n  useEffect(() => {\n    const handleClickOutside = event => {\n      if (ref.current && !ref.current.contains(event.target)) {\n        setPopoverAnchor(false);\n      }\n    };\n    document.addEventListener('click', handleClickOutside, true);\n    return () => {\n      document.removeEventListener('click', handleClickOutside, true);\n    };\n  }, [setPopoverAnchor]);\n\n  const saveAttributes = async (\n    { node, column, attributes },\n    { setSubmitting, setStatus },\n  ) => {\n    setSubmitting(false);\n    const response = await djClient.setAttributes(node, column, attributes);\n    if (response.status === 200 || response.status === 201) {\n      setStatus({ success: 'Saved!' });\n    } else {\n      setStatus({\n        failure: `${response.json.message}`,\n      });\n    }\n    onSubmit();\n    // window.location.reload();\n  };\n\n  return (\n    <>\n      <button\n        className=\"edit_button\"\n        aria-label=\"EditColumn\"\n        tabIndex=\"0\"\n        onClick={() => {\n          setPopoverAnchor(!popoverAnchor);\n        }}\n      >\n        <EditIcon />\n      </button>\n      <div\n        className=\"popover\"\n        role=\"dialog\"\n        aria-label=\"client-code\"\n        style={{ display: popoverAnchor === false ? 'none' : 'block' }}\n        ref={ref}\n      >\n        <Formik\n          initialValues={{\n            column: column.name,\n            node: node.name,\n            attributes: column.attributes.map(attr => attr.attribute_type.name),\n          }}\n          onSubmit={saveAttributes}\n        >\n          {function Render({ isSubmitting, status, setFieldValue }) {\n            return (\n              <Form>\n                {displayMessageAfterSubmit(status)}\n                <span data-testid=\"edit-attributes\">\n                  <FormikSelect\n                    selectOptions={options}\n                    formikFieldName=\"attributes\"\n                    placeholder=\"Select column attributes\"\n                    className=\"\"\n                    defaultValue={column.attributes.map(attr => {\n                      return {\n                        value: attr.attribute_type.name,\n                        label: labelize(attr.attribute_type.name),\n                      };\n                    })}\n                    isMulti={true}\n                  />\n                </span>\n                <input\n                  hidden={true}\n                  name=\"column\"\n                  value={column.name}\n                  readOnly={true}\n                />\n                <input\n                  hidden={true}\n                  name=\"node\"\n                  value={node.name}\n                  readOnly={true}\n                />\n                <button\n                  className=\"add_node\"\n                  type=\"submit\"\n                  aria-label=\"SaveEditColumn\"\n                  aria-hidden=\"false\"\n                >\n                  Save\n                </button>\n              </Form>\n            );\n          }}\n        </Formik>\n      </div>\n    </>\n  );\n}\n","import { useContext, useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\nimport DJClientContext from '../../providers/djclient';\nimport { Form, Formik } from 'formik';\nimport EditIcon from '../../icons/EditIcon';\nimport { displayMessageAfterSubmit } from '../../../utils/form';\n\nexport default function EditColumnDescriptionPopover({\n  column,\n  node,\n  onSubmit,\n}) {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const [popoverAnchor, setPopoverAnchor] = useState(false);\n  const ref = useRef(null);\n\n  useEffect(() => {\n    const handleClickOutside = event => {\n      if (ref.current && !ref.current.contains(event.target)) {\n        setPopoverAnchor(false);\n      }\n    };\n    document.addEventListener('click', handleClickOutside, true);\n    return () => {\n      document.removeEventListener('click', handleClickOutside, true);\n    };\n  }, [setPopoverAnchor]);\n\n  const saveDescription = async (\n    { node, column, description },\n    { setSubmitting, setStatus },\n  ) => {\n    setSubmitting(false);\n    const response = await djClient.setColumnDescription(\n      node,\n      column,\n      description,\n    );\n    if (response.status === 200 || response.status === 201) {\n      setStatus({ success: 'Saved!' });\n    } else {\n      setStatus({\n        failure: `${response.json.message}`,\n      });\n    }\n    onSubmit();\n  };\n\n  return (\n    <>\n      <button\n        className=\"edit_button\"\n        aria-label=\"EditColumnDescription\"\n        tabIndex=\"0\"\n        onClick={() => {\n          setPopoverAnchor(!popoverAnchor);\n        }}\n      >\n        <EditIcon />\n      </button>\n      <div\n        className=\"popover\"\n        role=\"dialog\"\n        aria-label=\"edit-description\"\n        style={{ display: popoverAnchor === false ? 'none' : 'block' }}\n        ref={ref}\n      >\n        <Formik\n          initialValues={{\n            column: column.name,\n            node: node.name,\n            description: column.description || '',\n          }}\n          onSubmit={saveDescription}\n        >\n          {function Render({ isSubmitting, status, setFieldValue }) {\n            return (\n              <Form>\n                {displayMessageAfterSubmit(status)}\n                <div className=\"form-group mt-3\">\n                  <label htmlFor=\"description\">Description</label>\n                  <textarea\n                    name=\"description\"\n                    className=\"form-control\"\n                    rows=\"3\"\n                    onChange={e => setFieldValue('description', e.target.value)}\n                    defaultValue={column.description || ''}\n                  />\n                </div>\n                <input\n                  hidden={true}\n                  name=\"column\"\n                  value={column.name}\n                  readOnly={true}\n                />\n                <input\n                  hidden={true}\n                  name=\"node\"\n                  value={node.name}\n                  readOnly={true}\n                />\n                <button\n                  className=\"btn btn-primary mt-3\"\n                  type=\"submit\"\n                  disabled={isSubmitting}\n                >\n                  Save\n                </button>\n              </Form>\n            );\n          }}\n        </Formik>\n      </div>\n    </>\n  );\n}\n","import { useContext, useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\nimport DJClientContext from '../../providers/djclient';\nimport { ErrorMessage, Field, Form, Formik } from 'formik';\nimport { FormikSelect } from '../AddEditNodePage/FormikSelect';\nimport EditIcon from '../../icons/EditIcon';\nimport { displayMessageAfterSubmit } from '../../../utils/form';\nimport LoadingIcon from '../../icons/LoadingIcon';\n\nexport default function ManageDimensionLinksDialog({\n  column,\n  node,\n  dimensions,\n  fkLinks,\n  referenceLink,\n  onSubmit,\n}) {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const [isOpen, setIsOpen] = useState(false);\n  const [activeTab, setActiveTab] = useState('fk');\n  const ref = useRef(null);\n  const [dimensionColumns, setDimensionColumns] = useState([]);\n  const [selectedDimension, setSelectedDimension] = useState(\n    referenceLink?.dimension || '',\n  );\n\n  useEffect(() => {\n    const handleClickOutside = event => {\n      if (ref.current && !ref.current.contains(event.target)) {\n        setIsOpen(false);\n      }\n    };\n    document.addEventListener('click', handleClickOutside, true);\n    return () => {\n      document.removeEventListener('click', handleClickOutside, true);\n    };\n  }, []);\n\n  // Fetch columns for the selected dimension\n  useEffect(() => {\n    const fetchDimensionColumns = async () => {\n      if (selectedDimension) {\n        try {\n          const dimensionNode = await djClient.node(selectedDimension);\n          const columns = dimensionNode.columns.map(col => ({\n            value: col.name,\n            label: col.display_name || col.name,\n          }));\n          setDimensionColumns(columns);\n        } catch (error) {\n          console.error('Failed to fetch dimension columns:', error);\n        }\n      }\n    };\n    fetchDimensionColumns();\n  }, [selectedDimension, djClient]);\n\n  const handleFKSubmit = async (values, { setSubmitting, setStatus }) => {\n    try {\n      // Add FK links that are not already present\n      const existingDims = new Set(fkLinks);\n      const newDims = new Set(values.fkDimensions);\n\n      // Links to add\n      const toAdd = Array.from(newDims).filter(dim => !existingDims.has(dim));\n      // Links to remove\n      const toRemove = Array.from(existingDims).filter(\n        dim => !newDims.has(dim),\n      );\n\n      const addPromises = toAdd.map(dim =>\n        djClient.linkDimension(node.name, column.name, dim),\n      );\n      const removePromises = toRemove.map(dim =>\n        djClient.unlinkDimension(node.name, column.name, dim),\n      );\n\n      const results = await Promise.all([...addPromises, ...removePromises]);\n      const failures = results.filter(\n        r => !(r.status === 200 || r.status === 201),\n      );\n      if (failures.length > 0) {\n        const message =\n          failures[0].json?.message ||\n          failures[0].json?.detail ||\n          'Failed to update FK links';\n        setStatus({ failure: message });\n        return;\n      }\n\n      setStatus({ success: 'FK links updated successfully!' });\n      setTimeout(() => {\n        onSubmit();\n      }, 500);\n    } catch (error) {\n      setStatus({ failure: error.message });\n    } finally {\n      setSubmitting(false);\n    }\n  };\n\n  const handleReferenceSubmit = async (\n    values,\n    { setSubmitting, setStatus },\n  ) => {\n    try {\n      const response = await djClient.addReferenceDimensionLink(\n        node.name,\n        column.name,\n        values.dimensionNode,\n        values.dimensionColumn,\n        values.role || null,\n      );\n\n      if (response.status === 200 || response.status === 201) {\n        setStatus({ success: 'Reference link updated successfully!' });\n        setTimeout(() => {\n          onSubmit();\n        }, 500);\n      } else {\n        setStatus({ failure: response.json?.message || 'Failed to add link' });\n      }\n    } catch (error) {\n      setStatus({ failure: error.message });\n    } finally {\n      setSubmitting(false);\n    }\n  };\n\n  const handleRemoveReference = async () => {\n    if (\n      !window.confirm('Are you sure you want to remove this reference link?')\n    ) {\n      return;\n    }\n\n    try {\n      const response = await djClient.removeReferenceDimensionLink(\n        node.name,\n        column.name,\n      );\n\n      if (response.status === 200 || response.status === 201) {\n        alert('Reference dimension link removed successfully!');\n        window.location.reload();\n      } else {\n        alert(response.json?.message || 'Failed to remove link');\n      }\n    } catch (error) {\n      alert(error.message);\n    }\n  };\n\n  return (\n    <>\n      <button\n        className=\"edit_button dimension-link-edit\"\n        aria-label=\"ManageDimensionLinksToggle\"\n        tabIndex=\"0\"\n        onClick={() => setIsOpen(!isOpen)}\n        title=\"Manage dimension links for this column\"\n        style={{\n          marginLeft: '0.35rem',\n          padding: '0',\n          opacity: 0.5,\n          transition: 'opacity 0.2s ease',\n          background: 'transparent',\n          border: 'none',\n          cursor: 'pointer',\n          fontSize: '12px',\n          color: '#999',\n          display: 'inline-flex',\n          alignItems: 'center',\n        }}\n      >\n        <EditIcon />\n      </button>\n      {isOpen && (\n        <>\n          {/* Backdrop overlay */}\n          <div\n            style={{\n              position: 'fixed',\n              top: 0,\n              left: 0,\n              right: 0,\n              bottom: 0,\n              backgroundColor: 'rgba(0, 0, 0, 0.5)',\n              zIndex: 1000,\n              display: 'flex',\n              alignItems: 'center',\n              justifyContent: 'center',\n              padding: '2rem',\n            }}\n            onClick={() => setIsOpen(false)}\n          >\n            {/* Modal */}\n            <div\n              role=\"dialog\"\n              aria-label=\"ManageDimensionLinksDialog\"\n              ref={ref}\n              onClick={e => e.stopPropagation()}\n              style={{\n                backgroundColor: 'white',\n                borderRadius: '8px',\n                boxShadow: '0 4px 20px rgba(0, 0, 0, 0.15)',\n                width: '550px',\n                maxWidth: '100%',\n                maxHeight: '100%',\n                overflow: 'visible',\n                padding: '1.5rem',\n                textTransform: 'none',\n                fontWeight: 'normal',\n                position: 'relative',\n                zIndex: 1000,\n              }}\n            >\n              <div\n                style={{ maxHeight: 'calc(85vh - 4rem)', overflowY: 'auto' }}\n              >\n                <div style={{ display: 'flex', marginBottom: '1rem' }}>\n                  <h3\n                    style={{\n                      margin: '0 1em 0 0',\n                      fontSize: '1.25rem',\n                      fontWeight: '600',\n                    }}\n                  >\n                    Manage Dimension Links\n                  </h3>\n                  <span\n                    style={{\n                      display: 'flex',\n                      alignItems: 'center',\n                      gap: '0.5rem',\n                    }}\n                  >\n                    <span\n                      style={{\n                        fontSize: '1rem',\n                        fontWeight: '500',\n                        color: '#333',\n                      }}\n                    >\n                      {column.name}\n                    </span>\n                    <span\n                      className=\"rounded-pill badge bg-secondary-soft\"\n                      style={{ fontSize: '0.75rem', fontWeight: 'normal' }}\n                    >\n                      {column.type}\n                    </span>\n                  </span>\n                </div>\n\n                {/* Tab Navigation */}\n                <div\n                  style={{\n                    display: 'flex',\n                    borderBottom: '2px solid #e0e0e0',\n                    marginBottom: '1rem',\n                  }}\n                >\n                  <button\n                    type=\"button\"\n                    onClick={() => setActiveTab('fk')}\n                    style={{\n                      flex: 1,\n                      padding: '0.5rem 1rem',\n                      border: 'none',\n                      background: 'transparent',\n                      borderBottom:\n                        activeTab === 'fk' ? '3px solid #007bff' : 'none',\n                      color: activeTab === 'fk' ? '#007bff' : '#6c757d',\n                      fontWeight: activeTab === 'fk' ? 'bold' : 'normal',\n                      cursor: 'pointer',\n                    }}\n                  >\n                    FK Links\n                  </button>\n                  <button\n                    type=\"button\"\n                    onClick={() => setActiveTab('reference')}\n                    style={{\n                      flex: 1,\n                      padding: '0.5rem 1rem',\n                      border: 'none',\n                      background: 'transparent',\n                      borderBottom:\n                        activeTab === 'reference'\n                          ? '3px solid #007bff'\n                          : 'none',\n                      color: activeTab === 'reference' ? '#007bff' : '#6c757d',\n                      fontWeight: activeTab === 'reference' ? 'bold' : 'normal',\n                      cursor: 'pointer',\n                    }}\n                  >\n                    Reference Links\n                  </button>\n                </div>\n\n                {/* FK Links Tab */}\n                {activeTab === 'fk' && (\n                  <div>\n                    <p\n                      style={{\n                        fontSize: '0.875rem',\n                        color: '#6c757d',\n                        marginBottom: '1rem',\n                      }}\n                    >\n                      FK Links automatically join via the dimension's primary\n                      key. Select one or more dimensions to link to this column.\n                    </p>\n                    <Formik\n                      initialValues={{\n                        fkDimensions: fkLinks,\n                      }}\n                      onSubmit={handleFKSubmit}\n                    >\n                      {function Render({ isSubmitting, status }) {\n                        return (\n                          <Form>\n                            {displayMessageAfterSubmit(status)}\n                            <div style={{ marginBottom: '1rem' }}>\n                              <label htmlFor=\"fkDimensions\">\n                                Select Dimensions\n                              </label>\n                              <FormikSelect\n                                selectOptions={dimensions}\n                                formikFieldName=\"fkDimensions\"\n                                placeholder=\"Select dimensions\"\n                                isMulti={true}\n                                defaultValue={fkLinks.map(dim => ({\n                                  value: dim,\n                                  label: dim,\n                                }))}\n                                menuPosition=\"fixed\"\n                              />\n                            </div>\n                            <button\n                              className=\"add_node\"\n                              type=\"submit\"\n                              disabled={isSubmitting}\n                              style={{ marginLeft: '0' }}\n                            >\n                              {isSubmitting ? <LoadingIcon /> : 'Save'}\n                            </button>\n                          </Form>\n                        );\n                      }}\n                    </Formik>\n                  </div>\n                )}\n\n                {/* Reference Links Tab */}\n                {activeTab === 'reference' && (\n                  <div>\n                    <p\n                      style={{\n                        fontSize: '0.875rem',\n                        color: '#6c757d',\n                        marginBottom: '1rem',\n                      }}\n                    >\n                      Reference Links explicitly map this column to a specific\n                      dimension attribute. Use when the relationship is not\n                      through a primary key.\n                    </p>\n                    <Formik\n                      initialValues={{\n                        dimensionNode: referenceLink?.dimension || '',\n                        dimensionColumn: referenceLink?.dimension_column || '',\n                        role: referenceLink?.role || '',\n                      }}\n                      onSubmit={handleReferenceSubmit}\n                      validate={values => {\n                        const errors = {};\n                        if (!values.dimensionNode) {\n                          errors.dimensionNode = 'Required';\n                        }\n                        if (!values.dimensionColumn) {\n                          errors.dimensionColumn = 'Required';\n                        }\n                        return errors;\n                      }}\n                    >\n                      {function Render({\n                        isSubmitting,\n                        status,\n                        setFieldValue,\n                      }) {\n                        return (\n                          <Form>\n                            {displayMessageAfterSubmit(status)}\n                            <div style={{ marginBottom: '1rem' }}>\n                              <ErrorMessage\n                                name=\"dimensionNode\"\n                                component=\"span\"\n                              />\n                              <label htmlFor=\"dimensionNode\">\n                                Dimension Node *\n                              </label>\n                              <FormikSelect\n                                selectOptions={dimensions}\n                                formikFieldName=\"dimensionNode\"\n                                placeholder=\"Select dimension\"\n                                defaultValue={\n                                  referenceLink\n                                    ? {\n                                        value: referenceLink.dimension,\n                                        label: referenceLink.dimension,\n                                      }\n                                    : null\n                                }\n                                onChange={option => {\n                                  setFieldValue(\n                                    'dimensionNode',\n                                    option?.value || '',\n                                  );\n                                  setSelectedDimension(option?.value || '');\n                                  setFieldValue('dimensionColumn', '');\n                                }}\n                              />\n                            </div>\n\n                            <div style={{ marginBottom: '1rem' }}>\n                              <ErrorMessage\n                                name=\"dimensionColumn\"\n                                component=\"span\"\n                              />\n                              <label htmlFor=\"dimensionColumn\">\n                                Dimension Column *\n                              </label>\n                              {dimensionColumns.length > 0 ? (\n                                <FormikSelect\n                                  selectOptions={dimensionColumns}\n                                  formikFieldName=\"dimensionColumn\"\n                                  placeholder=\"Select column\"\n                                  defaultValue={\n                                    referenceLink\n                                      ? {\n                                          value: referenceLink.dimension_column,\n                                          label: referenceLink.dimension_column,\n                                        }\n                                      : null\n                                  }\n                                />\n                              ) : (\n                                <Field\n                                  type=\"text\"\n                                  name=\"dimensionColumn\"\n                                  id=\"dimensionColumn\"\n                                  placeholder=\"Enter dimension column name\"\n                                  style={{\n                                    width: '100%',\n                                    padding: '0.5rem',\n                                  }}\n                                />\n                              )}\n                            </div>\n\n                            <div style={{ marginBottom: '1rem' }}>\n                              <label htmlFor=\"role\">Role (Optional)</label>\n                              <Field\n                                type=\"text\"\n                                name=\"role\"\n                                id=\"role\"\n                                placeholder=\"e.g., birth_date, registration_date\"\n                                style={{\n                                  width: '100%',\n                                  padding: '0.5rem',\n                                }}\n                              />\n                              <small\n                                style={{\n                                  color: '#6c757d',\n                                  fontSize: '0.75rem',\n                                }}\n                              >\n                                Optional role if linking the same dimension\n                                multiple times\n                              </small>\n                            </div>\n\n                            <div\n                              style={{\n                                display: 'flex',\n                                gap: '0.5rem',\n                                marginTop: '1rem',\n                              }}\n                            >\n                              <button\n                                className=\"add_node\"\n                                type=\"submit\"\n                                disabled={isSubmitting}\n                              >\n                                {isSubmitting ? (\n                                  <LoadingIcon />\n                                ) : referenceLink ? (\n                                  'Update Link'\n                                ) : (\n                                  'Add Link'\n                                )}\n                              </button>\n                              {referenceLink && (\n                                <button\n                                  type=\"button\"\n                                  onClick={handleRemoveReference}\n                                  style={{\n                                    padding: '0.5rem 1rem',\n                                    background: '#dc3545',\n                                    color: 'white',\n                                    border: 'none',\n                                    borderRadius: '4px',\n                                    cursor: 'pointer',\n                                    textTransform: 'none',\n                                  }}\n                                >\n                                  Remove Link\n                                </button>\n                              )}\n                            </div>\n                          </Form>\n                        );\n                      }}\n                    </Formik>\n                  </div>\n                )}\n              </div>\n            </div>\n          </div>\n        </>\n      )}\n    </>\n  );\n}\n","const AddItemIcon = props => (\n  <svg\n    enableBackground=\"new 0 0 512 512\"\n    height=\"20px\"\n    id=\"Layer_1\"\n    version=\"1.1\"\n    viewBox=\"0 0 512 512\"\n    width=\"20px\"\n    xmlSpace=\"preserve\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n  >\n    <path d=\"M256,512C114.625,512,0,397.391,0,256C0,114.609,114.625,0,256,0c141.391,0,256,114.609,256,256  C512,397.391,397.391,512,256,512z M256,64C149.969,64,64,149.969,64,256s85.969,192,192,192c106.047,0,192-85.969,192-192  S362.047,64,256,64z M288,384h-64v-96h-96v-64h96v-96h64v96h96v64h-96V384z\" />\n  </svg>\n);\nexport default AddItemIcon;\n","// These are filled with ranges (rangeFrom[i] up to but not including\n// rangeTo[i]) of code points that count as extending characters.\nlet rangeFrom = [], rangeTo = []\n\n;(() => {\n  // Compressed representation of the Grapheme_Cluster_Break=Extend\n  // information from\n  // http://www.unicode.org/Public/16.0.0/ucd/auxiliary/GraphemeBreakProperty.txt.\n  // Each pair of elements represents a range, as an offet from the\n  // previous range and a length. Numbers are in base-36, with the empty\n  // string being a shorthand for 1.\n  let numbers = \"lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o\".split(\",\").map(s => s ? parseInt(s, 36) : 1)\n  for (let i = 0, n = 0; i < numbers.length; i++)\n    (i % 2 ? rangeTo : rangeFrom).push(n = n + numbers[i])\n})()\n\nexport function isExtendingChar(code) {\n  if (code < 768) return false\n  for (let from = 0, to = rangeFrom.length;;) {\n    let mid = (from + to) >> 1\n    if (code < rangeFrom[mid]) to = mid\n    else if (code >= rangeTo[mid]) from = mid + 1\n    else return true\n    if (from == to) return false\n  }\n}\n\nfunction isRegionalIndicator(code) {\n  return code >= 0x1F1E6 && code <= 0x1F1FF\n}\n\nfunction check(code) {\n  for (let i = 0; i < rangeFrom.length; i++) {\n    if (rangeTo[i] > code) return rangeFrom[i] <= code\n  }\n  return false\n}\n\nconst ZWJ = 0x200d\n\nexport function findClusterBreak(str, pos, forward = true, includeExtending = true) {\n  return (forward ? nextClusterBreak : prevClusterBreak)(str, pos, includeExtending)\n}\n\nfunction nextClusterBreak(str, pos, includeExtending) {\n  if (pos == str.length) return pos\n  // If pos is in the middle of a surrogate pair, move to its start\n  if (pos && surrogateLow(str.charCodeAt(pos)) && surrogateHigh(str.charCodeAt(pos - 1))) pos--\n  let prev = codePointAt(str, pos)\n  pos += codePointSize(prev)\n  while (pos < str.length) {\n    let next = codePointAt(str, pos)\n    if (prev == ZWJ || next == ZWJ || includeExtending && isExtendingChar(next)) {\n      pos += codePointSize(next)\n      prev = next\n    } else if (isRegionalIndicator(next)) {\n      let countBefore = 0, i = pos - 2\n      while (i >= 0 && isRegionalIndicator(codePointAt(str, i))) { countBefore++; i -= 2 }\n      if (countBefore % 2 == 0) break\n      else pos += 2\n    } else {\n      break\n    }\n  }\n  return pos\n}\n\nfunction prevClusterBreak(str, pos, includeExtending) {\n  while (pos > 0) {\n    let found = nextClusterBreak(str, pos - 2, includeExtending)\n    if (found < pos) return found\n    pos--\n  }\n  return 0\n}\n\nfunction codePointAt(str, pos) {\n  let code0 = str.charCodeAt(pos)\n  if (!surrogateHigh(code0) || pos + 1 == str.length) return code0\n  let code1 = str.charCodeAt(pos + 1)\n  if (!surrogateLow(code1)) return code0\n  return ((code0 - 0xd800) << 10) + (code1 - 0xdc00) + 0x10000\n}\n\nfunction surrogateLow(ch) { return ch >= 0xDC00 && ch < 0xE000 }\nfunction surrogateHigh(ch) { return ch >= 0xD800 && ch < 0xDC00 }\nfunction codePointSize(code) { return code < 0x10000 ? 1 : 2 }\n","import { findClusterBreak as findClusterBreak$1 } from '@marijn/find-cluster-break';\n\n/**\nThe data structure for documents. @nonabstract\n*/\nclass Text {\n    /**\n    Get the line description around the given position.\n    */\n    lineAt(pos) {\n        if (pos < 0 || pos > this.length)\n            throw new RangeError(`Invalid position ${pos} in document of length ${this.length}`);\n        return this.lineInner(pos, false, 1, 0);\n    }\n    /**\n    Get the description for the given (1-based) line number.\n    */\n    line(n) {\n        if (n < 1 || n > this.lines)\n            throw new RangeError(`Invalid line number ${n} in ${this.lines}-line document`);\n        return this.lineInner(n, true, 1, 0);\n    }\n    /**\n    Replace a range of the text with the given content.\n    */\n    replace(from, to, text) {\n        [from, to] = clip(this, from, to);\n        let parts = [];\n        this.decompose(0, from, parts, 2 /* Open.To */);\n        if (text.length)\n            text.decompose(0, text.length, parts, 1 /* Open.From */ | 2 /* Open.To */);\n        this.decompose(to, this.length, parts, 1 /* Open.From */);\n        return TextNode.from(parts, this.length - (to - from) + text.length);\n    }\n    /**\n    Append another document to this one.\n    */\n    append(other) {\n        return this.replace(this.length, this.length, other);\n    }\n    /**\n    Retrieve the text between the given points.\n    */\n    slice(from, to = this.length) {\n        [from, to] = clip(this, from, to);\n        let parts = [];\n        this.decompose(from, to, parts, 0);\n        return TextNode.from(parts, to - from);\n    }\n    /**\n    Test whether this text is equal to another instance.\n    */\n    eq(other) {\n        if (other == this)\n            return true;\n        if (other.length != this.length || other.lines != this.lines)\n            return false;\n        let start = this.scanIdentical(other, 1), end = this.length - this.scanIdentical(other, -1);\n        let a = new RawTextCursor(this), b = new RawTextCursor(other);\n        for (let skip = start, pos = start;;) {\n            a.next(skip);\n            b.next(skip);\n            skip = 0;\n            if (a.lineBreak != b.lineBreak || a.done != b.done || a.value != b.value)\n                return false;\n            pos += a.value.length;\n            if (a.done || pos >= end)\n                return true;\n        }\n    }\n    /**\n    Iterate over the text. When `dir` is `-1`, iteration happens\n    from end to start. This will return lines and the breaks between\n    them as separate strings.\n    */\n    iter(dir = 1) { return new RawTextCursor(this, dir); }\n    /**\n    Iterate over a range of the text. When `from` > `to`, the\n    iterator will run in reverse.\n    */\n    iterRange(from, to = this.length) { return new PartialTextCursor(this, from, to); }\n    /**\n    Return a cursor that iterates over the given range of lines,\n    _without_ returning the line breaks between, and yielding empty\n    strings for empty lines.\n    \n    When `from` and `to` are given, they should be 1-based line numbers.\n    */\n    iterLines(from, to) {\n        let inner;\n        if (from == null) {\n            inner = this.iter();\n        }\n        else {\n            if (to == null)\n                to = this.lines + 1;\n            let start = this.line(from).from;\n            inner = this.iterRange(start, Math.max(start, to == this.lines + 1 ? this.length : to <= 1 ? 0 : this.line(to - 1).to));\n        }\n        return new LineCursor(inner);\n    }\n    /**\n    Return the document as a string, using newline characters to\n    separate lines.\n    */\n    toString() { return this.sliceString(0); }\n    /**\n    Convert the document to an array of lines (which can be\n    deserialized again via [`Text.of`](https://codemirror.net/6/docs/ref/#state.Text^of)).\n    */\n    toJSON() {\n        let lines = [];\n        this.flatten(lines);\n        return lines;\n    }\n    /**\n    @internal\n    */\n    constructor() { }\n    /**\n    Create a `Text` instance for the given array of lines.\n    */\n    static of(text) {\n        if (text.length == 0)\n            throw new RangeError(\"A document must have at least one line\");\n        if (text.length == 1 && !text[0])\n            return Text.empty;\n        return text.length <= 32 /* Tree.Branch */ ? new TextLeaf(text) : TextNode.from(TextLeaf.split(text, []));\n    }\n}\n// Leaves store an array of line strings. There are always line breaks\n// between these strings. Leaves are limited in size and have to be\n// contained in TextNode instances for bigger documents.\nclass TextLeaf extends Text {\n    constructor(text, length = textLength(text)) {\n        super();\n        this.text = text;\n        this.length = length;\n    }\n    get lines() { return this.text.length; }\n    get children() { return null; }\n    lineInner(target, isLine, line, offset) {\n        for (let i = 0;; i++) {\n            let string = this.text[i], end = offset + string.length;\n            if ((isLine ? line : end) >= target)\n                return new Line(offset, end, line, string);\n            offset = end + 1;\n            line++;\n        }\n    }\n    decompose(from, to, target, open) {\n        let text = from <= 0 && to >= this.length ? this\n            : new TextLeaf(sliceText(this.text, from, to), Math.min(to, this.length) - Math.max(0, from));\n        if (open & 1 /* Open.From */) {\n            let prev = target.pop();\n            let joined = appendText(text.text, prev.text.slice(), 0, text.length);\n            if (joined.length <= 32 /* Tree.Branch */) {\n                target.push(new TextLeaf(joined, prev.length + text.length));\n            }\n            else {\n                let mid = joined.length >> 1;\n                target.push(new TextLeaf(joined.slice(0, mid)), new TextLeaf(joined.slice(mid)));\n            }\n        }\n        else {\n            target.push(text);\n        }\n    }\n    replace(from, to, text) {\n        if (!(text instanceof TextLeaf))\n            return super.replace(from, to, text);\n        [from, to] = clip(this, from, to);\n        let lines = appendText(this.text, appendText(text.text, sliceText(this.text, 0, from)), to);\n        let newLen = this.length + text.length - (to - from);\n        if (lines.length <= 32 /* Tree.Branch */)\n            return new TextLeaf(lines, newLen);\n        return TextNode.from(TextLeaf.split(lines, []), newLen);\n    }\n    sliceString(from, to = this.length, lineSep = \"\\n\") {\n        [from, to] = clip(this, from, to);\n        let result = \"\";\n        for (let pos = 0, i = 0; pos <= to && i < this.text.length; i++) {\n            let line = this.text[i], end = pos + line.length;\n            if (pos > from && i)\n                result += lineSep;\n            if (from < end && to > pos)\n                result += line.slice(Math.max(0, from - pos), to - pos);\n            pos = end + 1;\n        }\n        return result;\n    }\n    flatten(target) {\n        for (let line of this.text)\n            target.push(line);\n    }\n    scanIdentical() { return 0; }\n    static split(text, target) {\n        let part = [], len = -1;\n        for (let line of text) {\n            part.push(line);\n            len += line.length + 1;\n            if (part.length == 32 /* Tree.Branch */) {\n                target.push(new TextLeaf(part, len));\n                part = [];\n                len = -1;\n            }\n        }\n        if (len > -1)\n            target.push(new TextLeaf(part, len));\n        return target;\n    }\n}\n// Nodes provide the tree structure of the `Text` type. They store a\n// number of other nodes or leaves, taking care to balance themselves\n// on changes. There are implied line breaks _between_ the children of\n// a node (but not before the first or after the last child).\nclass TextNode extends Text {\n    constructor(children, length) {\n        super();\n        this.children = children;\n        this.length = length;\n        this.lines = 0;\n        for (let child of children)\n            this.lines += child.lines;\n    }\n    lineInner(target, isLine, line, offset) {\n        for (let i = 0;; i++) {\n            let child = this.children[i], end = offset + child.length, endLine = line + child.lines - 1;\n            if ((isLine ? endLine : end) >= target)\n                return child.lineInner(target, isLine, line, offset);\n            offset = end + 1;\n            line = endLine + 1;\n        }\n    }\n    decompose(from, to, target, open) {\n        for (let i = 0, pos = 0; pos <= to && i < this.children.length; i++) {\n            let child = this.children[i], end = pos + child.length;\n            if (from <= end && to >= pos) {\n                let childOpen = open & ((pos <= from ? 1 /* Open.From */ : 0) | (end >= to ? 2 /* Open.To */ : 0));\n                if (pos >= from && end <= to && !childOpen)\n                    target.push(child);\n                else\n                    child.decompose(from - pos, to - pos, target, childOpen);\n            }\n            pos = end + 1;\n        }\n    }\n    replace(from, to, text) {\n        [from, to] = clip(this, from, to);\n        if (text.lines < this.lines)\n            for (let i = 0, pos = 0; i < this.children.length; i++) {\n                let child = this.children[i], end = pos + child.length;\n                // Fast path: if the change only affects one child and the\n                // child's size remains in the acceptable range, only update\n                // that child\n                if (from >= pos && to <= end) {\n                    let updated = child.replace(from - pos, to - pos, text);\n                    let totalLines = this.lines - child.lines + updated.lines;\n                    if (updated.lines < (totalLines >> (5 /* Tree.BranchShift */ - 1)) &&\n                        updated.lines > (totalLines >> (5 /* Tree.BranchShift */ + 1))) {\n                        let copy = this.children.slice();\n                        copy[i] = updated;\n                        return new TextNode(copy, this.length - (to - from) + text.length);\n                    }\n                    return super.replace(pos, end, updated);\n                }\n                pos = end + 1;\n            }\n        return super.replace(from, to, text);\n    }\n    sliceString(from, to = this.length, lineSep = \"\\n\") {\n        [from, to] = clip(this, from, to);\n        let result = \"\";\n        for (let i = 0, pos = 0; i < this.children.length && pos <= to; i++) {\n            let child = this.children[i], end = pos + child.length;\n            if (pos > from && i)\n                result += lineSep;\n            if (from < end && to > pos)\n                result += child.sliceString(from - pos, to - pos, lineSep);\n            pos = end + 1;\n        }\n        return result;\n    }\n    flatten(target) {\n        for (let child of this.children)\n            child.flatten(target);\n    }\n    scanIdentical(other, dir) {\n        if (!(other instanceof TextNode))\n            return 0;\n        let length = 0;\n        let [iA, iB, eA, eB] = dir > 0 ? [0, 0, this.children.length, other.children.length]\n            : [this.children.length - 1, other.children.length - 1, -1, -1];\n        for (;; iA += dir, iB += dir) {\n            if (iA == eA || iB == eB)\n                return length;\n            let chA = this.children[iA], chB = other.children[iB];\n            if (chA != chB)\n                return length + chA.scanIdentical(chB, dir);\n            length += chA.length + 1;\n        }\n    }\n    static from(children, length = children.reduce((l, ch) => l + ch.length + 1, -1)) {\n        let lines = 0;\n        for (let ch of children)\n            lines += ch.lines;\n        if (lines < 32 /* Tree.Branch */) {\n            let flat = [];\n            for (let ch of children)\n                ch.flatten(flat);\n            return new TextLeaf(flat, length);\n        }\n        let chunk = Math.max(32 /* Tree.Branch */, lines >> 5 /* Tree.BranchShift */), maxChunk = chunk << 1, minChunk = chunk >> 1;\n        let chunked = [], currentLines = 0, currentLen = -1, currentChunk = [];\n        function add(child) {\n            let last;\n            if (child.lines > maxChunk && child instanceof TextNode) {\n                for (let node of child.children)\n                    add(node);\n            }\n            else if (child.lines > minChunk && (currentLines > minChunk || !currentLines)) {\n                flush();\n                chunked.push(child);\n            }\n            else if (child instanceof TextLeaf && currentLines &&\n                (last = currentChunk[currentChunk.length - 1]) instanceof TextLeaf &&\n                child.lines + last.lines <= 32 /* Tree.Branch */) {\n                currentLines += child.lines;\n                currentLen += child.length + 1;\n                currentChunk[currentChunk.length - 1] = new TextLeaf(last.text.concat(child.text), last.length + 1 + child.length);\n            }\n            else {\n                if (currentLines + child.lines > chunk)\n                    flush();\n                currentLines += child.lines;\n                currentLen += child.length + 1;\n                currentChunk.push(child);\n            }\n        }\n        function flush() {\n            if (currentLines == 0)\n                return;\n            chunked.push(currentChunk.length == 1 ? currentChunk[0] : TextNode.from(currentChunk, currentLen));\n            currentLen = -1;\n            currentLines = currentChunk.length = 0;\n        }\n        for (let child of children)\n            add(child);\n        flush();\n        return chunked.length == 1 ? chunked[0] : new TextNode(chunked, length);\n    }\n}\nText.empty = /*@__PURE__*/new TextLeaf([\"\"], 0);\nfunction textLength(text) {\n    let length = -1;\n    for (let line of text)\n        length += line.length + 1;\n    return length;\n}\nfunction appendText(text, target, from = 0, to = 1e9) {\n    for (let pos = 0, i = 0, first = true; i < text.length && pos <= to; i++) {\n        let line = text[i], end = pos + line.length;\n        if (end >= from) {\n            if (end > to)\n                line = line.slice(0, to - pos);\n            if (pos < from)\n                line = line.slice(from - pos);\n            if (first) {\n                target[target.length - 1] += line;\n                first = false;\n            }\n            else\n                target.push(line);\n        }\n        pos = end + 1;\n    }\n    return target;\n}\nfunction sliceText(text, from, to) {\n    return appendText(text, [\"\"], from, to);\n}\nclass RawTextCursor {\n    constructor(text, dir = 1) {\n        this.dir = dir;\n        this.done = false;\n        this.lineBreak = false;\n        this.value = \"\";\n        this.nodes = [text];\n        this.offsets = [dir > 0 ? 1 : (text instanceof TextLeaf ? text.text.length : text.children.length) << 1];\n    }\n    nextInner(skip, dir) {\n        this.done = this.lineBreak = false;\n        for (;;) {\n            let last = this.nodes.length - 1;\n            let top = this.nodes[last], offsetValue = this.offsets[last], offset = offsetValue >> 1;\n            let size = top instanceof TextLeaf ? top.text.length : top.children.length;\n            if (offset == (dir > 0 ? size : 0)) {\n                if (last == 0) {\n                    this.done = true;\n                    this.value = \"\";\n                    return this;\n                }\n                if (dir > 0)\n                    this.offsets[last - 1]++;\n                this.nodes.pop();\n                this.offsets.pop();\n            }\n            else if ((offsetValue & 1) == (dir > 0 ? 0 : 1)) {\n                this.offsets[last] += dir;\n                if (skip == 0) {\n                    this.lineBreak = true;\n                    this.value = \"\\n\";\n                    return this;\n                }\n                skip--;\n            }\n            else if (top instanceof TextLeaf) {\n                // Move to the next string\n                let next = top.text[offset + (dir < 0 ? -1 : 0)];\n                this.offsets[last] += dir;\n                if (next.length > Math.max(0, skip)) {\n                    this.value = skip == 0 ? next : dir > 0 ? next.slice(skip) : next.slice(0, next.length - skip);\n                    return this;\n                }\n                skip -= next.length;\n            }\n            else {\n                let next = top.children[offset + (dir < 0 ? -1 : 0)];\n                if (skip > next.length) {\n                    skip -= next.length;\n                    this.offsets[last] += dir;\n                }\n                else {\n                    if (dir < 0)\n                        this.offsets[last]--;\n                    this.nodes.push(next);\n                    this.offsets.push(dir > 0 ? 1 : (next instanceof TextLeaf ? next.text.length : next.children.length) << 1);\n                }\n            }\n        }\n    }\n    next(skip = 0) {\n        if (skip < 0) {\n            this.nextInner(-skip, (-this.dir));\n            skip = this.value.length;\n        }\n        return this.nextInner(skip, this.dir);\n    }\n}\nclass PartialTextCursor {\n    constructor(text, start, end) {\n        this.value = \"\";\n        this.done = false;\n        this.cursor = new RawTextCursor(text, start > end ? -1 : 1);\n        this.pos = start > end ? text.length : 0;\n        this.from = Math.min(start, end);\n        this.to = Math.max(start, end);\n    }\n    nextInner(skip, dir) {\n        if (dir < 0 ? this.pos <= this.from : this.pos >= this.to) {\n            this.value = \"\";\n            this.done = true;\n            return this;\n        }\n        skip += Math.max(0, dir < 0 ? this.pos - this.to : this.from - this.pos);\n        let limit = dir < 0 ? this.pos - this.from : this.to - this.pos;\n        if (skip > limit)\n            skip = limit;\n        limit -= skip;\n        let { value } = this.cursor.next(skip);\n        this.pos += (value.length + skip) * dir;\n        this.value = value.length <= limit ? value : dir < 0 ? value.slice(value.length - limit) : value.slice(0, limit);\n        this.done = !this.value;\n        return this;\n    }\n    next(skip = 0) {\n        if (skip < 0)\n            skip = Math.max(skip, this.from - this.pos);\n        else if (skip > 0)\n            skip = Math.min(skip, this.to - this.pos);\n        return this.nextInner(skip, this.cursor.dir);\n    }\n    get lineBreak() { return this.cursor.lineBreak && this.value != \"\"; }\n}\nclass LineCursor {\n    constructor(inner) {\n        this.inner = inner;\n        this.afterBreak = true;\n        this.value = \"\";\n        this.done = false;\n    }\n    next(skip = 0) {\n        let { done, lineBreak, value } = this.inner.next(skip);\n        if (done && this.afterBreak) {\n            this.value = \"\";\n            this.afterBreak = false;\n        }\n        else if (done) {\n            this.done = true;\n            this.value = \"\";\n        }\n        else if (lineBreak) {\n            if (this.afterBreak) {\n                this.value = \"\";\n            }\n            else {\n                this.afterBreak = true;\n                this.next();\n            }\n        }\n        else {\n            this.value = value;\n            this.afterBreak = false;\n        }\n        return this;\n    }\n    get lineBreak() { return false; }\n}\nif (typeof Symbol != \"undefined\") {\n    Text.prototype[Symbol.iterator] = function () { return this.iter(); };\n    RawTextCursor.prototype[Symbol.iterator] = PartialTextCursor.prototype[Symbol.iterator] =\n        LineCursor.prototype[Symbol.iterator] = function () { return this; };\n}\n/**\nThis type describes a line in the document. It is created\non-demand when lines are [queried](https://codemirror.net/6/docs/ref/#state.Text.lineAt).\n*/\nclass Line {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The position of the start of the line.\n    */\n    from, \n    /**\n    The position at the end of the line (_before_ the line break,\n    or at the end of document for the last line).\n    */\n    to, \n    /**\n    This line's line number (1-based).\n    */\n    number, \n    /**\n    The line's content.\n    */\n    text) {\n        this.from = from;\n        this.to = to;\n        this.number = number;\n        this.text = text;\n    }\n    /**\n    The length of the line (not including any line break after it).\n    */\n    get length() { return this.to - this.from; }\n}\nfunction clip(text, from, to) {\n    from = Math.max(0, Math.min(text.length, from));\n    return [from, Math.max(from, Math.min(text.length, to))];\n}\n\n/**\nReturns a next grapheme cluster break _after_ (not equal to)\n`pos`, if `forward` is true, or before otherwise. Returns `pos`\nitself if no further cluster break is available in the string.\nMoves across surrogate pairs, extending characters (when\n`includeExtending` is true), characters joined with zero-width\njoiners, and flag emoji.\n*/\nfunction findClusterBreak(str, pos, forward = true, includeExtending = true) {\n    return findClusterBreak$1(str, pos, forward, includeExtending);\n}\nfunction surrogateLow(ch) { return ch >= 0xDC00 && ch < 0xE000; }\nfunction surrogateHigh(ch) { return ch >= 0xD800 && ch < 0xDC00; }\n/**\nFind the code point at the given position in a string (like the\n[`codePointAt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/codePointAt)\nstring method).\n*/\nfunction codePointAt(str, pos) {\n    let code0 = str.charCodeAt(pos);\n    if (!surrogateHigh(code0) || pos + 1 == str.length)\n        return code0;\n    let code1 = str.charCodeAt(pos + 1);\n    if (!surrogateLow(code1))\n        return code0;\n    return ((code0 - 0xd800) << 10) + (code1 - 0xdc00) + 0x10000;\n}\n/**\nGiven a Unicode codepoint, return the JavaScript string that\nrespresents it (like\n[`String.fromCodePoint`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint)).\n*/\nfunction fromCodePoint(code) {\n    if (code <= 0xffff)\n        return String.fromCharCode(code);\n    code -= 0x10000;\n    return String.fromCharCode((code >> 10) + 0xd800, (code & 1023) + 0xdc00);\n}\n/**\nThe amount of positions a character takes up in a JavaScript string.\n*/\nfunction codePointSize(code) { return code < 0x10000 ? 1 : 2; }\n\nconst DefaultSplit = /\\r\\n?|\\n/;\n/**\nDistinguishes different ways in which positions can be mapped.\n*/\nvar MapMode = /*@__PURE__*/(function (MapMode) {\n    /**\n    Map a position to a valid new position, even when its context\n    was deleted.\n    */\n    MapMode[MapMode[\"Simple\"] = 0] = \"Simple\";\n    /**\n    Return null if deletion happens across the position.\n    */\n    MapMode[MapMode[\"TrackDel\"] = 1] = \"TrackDel\";\n    /**\n    Return null if the character _before_ the position is deleted.\n    */\n    MapMode[MapMode[\"TrackBefore\"] = 2] = \"TrackBefore\";\n    /**\n    Return null if the character _after_ the position is deleted.\n    */\n    MapMode[MapMode[\"TrackAfter\"] = 3] = \"TrackAfter\";\nreturn MapMode})(MapMode || (MapMode = {}));\n/**\nA change description is a variant of [change set](https://codemirror.net/6/docs/ref/#state.ChangeSet)\nthat doesn't store the inserted text. As such, it can't be\napplied, but is cheaper to store and manipulate.\n*/\nclass ChangeDesc {\n    // Sections are encoded as pairs of integers. The first is the\n    // length in the current document, and the second is -1 for\n    // unaffected sections, and the length of the replacement content\n    // otherwise. So an insertion would be (0, n>0), a deletion (n>0,\n    // 0), and a replacement two positive numbers.\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    @internal\n    */\n    sections) {\n        this.sections = sections;\n    }\n    /**\n    The length of the document before the change.\n    */\n    get length() {\n        let result = 0;\n        for (let i = 0; i < this.sections.length; i += 2)\n            result += this.sections[i];\n        return result;\n    }\n    /**\n    The length of the document after the change.\n    */\n    get newLength() {\n        let result = 0;\n        for (let i = 0; i < this.sections.length; i += 2) {\n            let ins = this.sections[i + 1];\n            result += ins < 0 ? this.sections[i] : ins;\n        }\n        return result;\n    }\n    /**\n    False when there are actual changes in this set.\n    */\n    get empty() { return this.sections.length == 0 || this.sections.length == 2 && this.sections[1] < 0; }\n    /**\n    Iterate over the unchanged parts left by these changes. `posA`\n    provides the position of the range in the old document, `posB`\n    the new position in the changed document.\n    */\n    iterGaps(f) {\n        for (let i = 0, posA = 0, posB = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++];\n            if (ins < 0) {\n                f(posA, posB, len);\n                posB += len;\n            }\n            else {\n                posB += ins;\n            }\n            posA += len;\n        }\n    }\n    /**\n    Iterate over the ranges changed by these changes. (See\n    [`ChangeSet.iterChanges`](https://codemirror.net/6/docs/ref/#state.ChangeSet.iterChanges) for a\n    variant that also provides you with the inserted text.)\n    `fromA`/`toA` provides the extent of the change in the starting\n    document, `fromB`/`toB` the extent of the replacement in the\n    changed document.\n    \n    When `individual` is true, adjacent changes (which are kept\n    separate for [position mapping](https://codemirror.net/6/docs/ref/#state.ChangeDesc.mapPos)) are\n    reported separately.\n    */\n    iterChangedRanges(f, individual = false) {\n        iterChanges(this, f, individual);\n    }\n    /**\n    Get a description of the inverted form of these changes.\n    */\n    get invertedDesc() {\n        let sections = [];\n        for (let i = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++];\n            if (ins < 0)\n                sections.push(len, ins);\n            else\n                sections.push(ins, len);\n        }\n        return new ChangeDesc(sections);\n    }\n    /**\n    Compute the combined effect of applying another set of changes\n    after this one. The length of the document after this set should\n    match the length before `other`.\n    */\n    composeDesc(other) { return this.empty ? other : other.empty ? this : composeSets(this, other); }\n    /**\n    Map this description, which should start with the same document\n    as `other`, over another set of changes, so that it can be\n    applied after it. When `before` is true, map as if the changes\n    in `this` happened before the ones in `other`.\n    */\n    mapDesc(other, before = false) { return other.empty ? this : mapSet(this, other, before); }\n    mapPos(pos, assoc = -1, mode = MapMode.Simple) {\n        let posA = 0, posB = 0;\n        for (let i = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++], endA = posA + len;\n            if (ins < 0) {\n                if (endA > pos)\n                    return posB + (pos - posA);\n                posB += len;\n            }\n            else {\n                if (mode != MapMode.Simple && endA >= pos &&\n                    (mode == MapMode.TrackDel && posA < pos && endA > pos ||\n                        mode == MapMode.TrackBefore && posA < pos ||\n                        mode == MapMode.TrackAfter && endA > pos))\n                    return null;\n                if (endA > pos || endA == pos && assoc < 0 && !len)\n                    return pos == posA || assoc < 0 ? posB : posB + ins;\n                posB += ins;\n            }\n            posA = endA;\n        }\n        if (pos > posA)\n            throw new RangeError(`Position ${pos} is out of range for changeset of length ${posA}`);\n        return posB;\n    }\n    /**\n    Check whether these changes touch a given range. When one of the\n    changes entirely covers the range, the string `\"cover\"` is\n    returned.\n    */\n    touchesRange(from, to = from) {\n        for (let i = 0, pos = 0; i < this.sections.length && pos <= to;) {\n            let len = this.sections[i++], ins = this.sections[i++], end = pos + len;\n            if (ins >= 0 && pos <= to && end >= from)\n                return pos < from && end > to ? \"cover\" : true;\n            pos = end;\n        }\n        return false;\n    }\n    /**\n    @internal\n    */\n    toString() {\n        let result = \"\";\n        for (let i = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++];\n            result += (result ? \" \" : \"\") + len + (ins >= 0 ? \":\" + ins : \"\");\n        }\n        return result;\n    }\n    /**\n    Serialize this change desc to a JSON-representable value.\n    */\n    toJSON() { return this.sections; }\n    /**\n    Create a change desc from its JSON representation (as produced\n    by [`toJSON`](https://codemirror.net/6/docs/ref/#state.ChangeDesc.toJSON).\n    */\n    static fromJSON(json) {\n        if (!Array.isArray(json) || json.length % 2 || json.some(a => typeof a != \"number\"))\n            throw new RangeError(\"Invalid JSON representation of ChangeDesc\");\n        return new ChangeDesc(json);\n    }\n    /**\n    @internal\n    */\n    static create(sections) { return new ChangeDesc(sections); }\n}\n/**\nA change set represents a group of modifications to a document. It\nstores the document length, and can only be applied to documents\nwith exactly that length.\n*/\nclass ChangeSet extends ChangeDesc {\n    constructor(sections, \n    /**\n    @internal\n    */\n    inserted) {\n        super(sections);\n        this.inserted = inserted;\n    }\n    /**\n    Apply the changes to a document, returning the modified\n    document.\n    */\n    apply(doc) {\n        if (this.length != doc.length)\n            throw new RangeError(\"Applying change set to a document with the wrong length\");\n        iterChanges(this, (fromA, toA, fromB, _toB, text) => doc = doc.replace(fromB, fromB + (toA - fromA), text), false);\n        return doc;\n    }\n    mapDesc(other, before = false) { return mapSet(this, other, before, true); }\n    /**\n    Given the document as it existed _before_ the changes, return a\n    change set that represents the inverse of this set, which could\n    be used to go from the document created by the changes back to\n    the document as it existed before the changes.\n    */\n    invert(doc) {\n        let sections = this.sections.slice(), inserted = [];\n        for (let i = 0, pos = 0; i < sections.length; i += 2) {\n            let len = sections[i], ins = sections[i + 1];\n            if (ins >= 0) {\n                sections[i] = ins;\n                sections[i + 1] = len;\n                let index = i >> 1;\n                while (inserted.length < index)\n                    inserted.push(Text.empty);\n                inserted.push(len ? doc.slice(pos, pos + len) : Text.empty);\n            }\n            pos += len;\n        }\n        return new ChangeSet(sections, inserted);\n    }\n    /**\n    Combine two subsequent change sets into a single set. `other`\n    must start in the document produced by `this`. If `this` goes\n    `docA` → `docB` and `other` represents `docB` → `docC`, the\n    returned value will represent the change `docA` → `docC`.\n    */\n    compose(other) { return this.empty ? other : other.empty ? this : composeSets(this, other, true); }\n    /**\n    Given another change set starting in the same document, maps this\n    change set over the other, producing a new change set that can be\n    applied to the document produced by applying `other`. When\n    `before` is `true`, order changes as if `this` comes before\n    `other`, otherwise (the default) treat `other` as coming first.\n    \n    Given two changes `A` and `B`, `A.compose(B.map(A))` and\n    `B.compose(A.map(B, true))` will produce the same document. This\n    provides a basic form of [operational\n    transformation](https://en.wikipedia.org/wiki/Operational_transformation),\n    and can be used for collaborative editing.\n    */\n    map(other, before = false) { return other.empty ? this : mapSet(this, other, before, true); }\n    /**\n    Iterate over the changed ranges in the document, calling `f` for\n    each, with the range in the original document (`fromA`-`toA`)\n    and the range that replaces it in the new document\n    (`fromB`-`toB`).\n    \n    When `individual` is true, adjacent changes are reported\n    separately.\n    */\n    iterChanges(f, individual = false) {\n        iterChanges(this, f, individual);\n    }\n    /**\n    Get a [change description](https://codemirror.net/6/docs/ref/#state.ChangeDesc) for this change\n    set.\n    */\n    get desc() { return ChangeDesc.create(this.sections); }\n    /**\n    @internal\n    */\n    filter(ranges) {\n        let resultSections = [], resultInserted = [], filteredSections = [];\n        let iter = new SectionIter(this);\n        done: for (let i = 0, pos = 0;;) {\n            let next = i == ranges.length ? 1e9 : ranges[i++];\n            while (pos < next || pos == next && iter.len == 0) {\n                if (iter.done)\n                    break done;\n                let len = Math.min(iter.len, next - pos);\n                addSection(filteredSections, len, -1);\n                let ins = iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0;\n                addSection(resultSections, len, ins);\n                if (ins > 0)\n                    addInsert(resultInserted, resultSections, iter.text);\n                iter.forward(len);\n                pos += len;\n            }\n            let end = ranges[i++];\n            while (pos < end) {\n                if (iter.done)\n                    break done;\n                let len = Math.min(iter.len, end - pos);\n                addSection(resultSections, len, -1);\n                addSection(filteredSections, len, iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0);\n                iter.forward(len);\n                pos += len;\n            }\n        }\n        return { changes: new ChangeSet(resultSections, resultInserted),\n            filtered: ChangeDesc.create(filteredSections) };\n    }\n    /**\n    Serialize this change set to a JSON-representable value.\n    */\n    toJSON() {\n        let parts = [];\n        for (let i = 0; i < this.sections.length; i += 2) {\n            let len = this.sections[i], ins = this.sections[i + 1];\n            if (ins < 0)\n                parts.push(len);\n            else if (ins == 0)\n                parts.push([len]);\n            else\n                parts.push([len].concat(this.inserted[i >> 1].toJSON()));\n        }\n        return parts;\n    }\n    /**\n    Create a change set for the given changes, for a document of the\n    given length, using `lineSep` as line separator.\n    */\n    static of(changes, length, lineSep) {\n        let sections = [], inserted = [], pos = 0;\n        let total = null;\n        function flush(force = false) {\n            if (!force && !sections.length)\n                return;\n            if (pos < length)\n                addSection(sections, length - pos, -1);\n            let set = new ChangeSet(sections, inserted);\n            total = total ? total.compose(set.map(total)) : set;\n            sections = [];\n            inserted = [];\n            pos = 0;\n        }\n        function process(spec) {\n            if (Array.isArray(spec)) {\n                for (let sub of spec)\n                    process(sub);\n            }\n            else if (spec instanceof ChangeSet) {\n                if (spec.length != length)\n                    throw new RangeError(`Mismatched change set length (got ${spec.length}, expected ${length})`);\n                flush();\n                total = total ? total.compose(spec.map(total)) : spec;\n            }\n            else {\n                let { from, to = from, insert } = spec;\n                if (from > to || from < 0 || to > length)\n                    throw new RangeError(`Invalid change range ${from} to ${to} (in doc of length ${length})`);\n                let insText = !insert ? Text.empty : typeof insert == \"string\" ? Text.of(insert.split(lineSep || DefaultSplit)) : insert;\n                let insLen = insText.length;\n                if (from == to && insLen == 0)\n                    return;\n                if (from < pos)\n                    flush();\n                if (from > pos)\n                    addSection(sections, from - pos, -1);\n                addSection(sections, to - from, insLen);\n                addInsert(inserted, sections, insText);\n                pos = to;\n            }\n        }\n        process(changes);\n        flush(!total);\n        return total;\n    }\n    /**\n    Create an empty changeset of the given length.\n    */\n    static empty(length) {\n        return new ChangeSet(length ? [length, -1] : [], []);\n    }\n    /**\n    Create a changeset from its JSON representation (as produced by\n    [`toJSON`](https://codemirror.net/6/docs/ref/#state.ChangeSet.toJSON).\n    */\n    static fromJSON(json) {\n        if (!Array.isArray(json))\n            throw new RangeError(\"Invalid JSON representation of ChangeSet\");\n        let sections = [], inserted = [];\n        for (let i = 0; i < json.length; i++) {\n            let part = json[i];\n            if (typeof part == \"number\") {\n                sections.push(part, -1);\n            }\n            else if (!Array.isArray(part) || typeof part[0] != \"number\" || part.some((e, i) => i && typeof e != \"string\")) {\n                throw new RangeError(\"Invalid JSON representation of ChangeSet\");\n            }\n            else if (part.length == 1) {\n                sections.push(part[0], 0);\n            }\n            else {\n                while (inserted.length < i)\n                    inserted.push(Text.empty);\n                inserted[i] = Text.of(part.slice(1));\n                sections.push(part[0], inserted[i].length);\n            }\n        }\n        return new ChangeSet(sections, inserted);\n    }\n    /**\n    @internal\n    */\n    static createSet(sections, inserted) {\n        return new ChangeSet(sections, inserted);\n    }\n}\nfunction addSection(sections, len, ins, forceJoin = false) {\n    if (len == 0 && ins <= 0)\n        return;\n    let last = sections.length - 2;\n    if (last >= 0 && ins <= 0 && ins == sections[last + 1])\n        sections[last] += len;\n    else if (last >= 0 && len == 0 && sections[last] == 0)\n        sections[last + 1] += ins;\n    else if (forceJoin) {\n        sections[last] += len;\n        sections[last + 1] += ins;\n    }\n    else\n        sections.push(len, ins);\n}\nfunction addInsert(values, sections, value) {\n    if (value.length == 0)\n        return;\n    let index = (sections.length - 2) >> 1;\n    if (index < values.length) {\n        values[values.length - 1] = values[values.length - 1].append(value);\n    }\n    else {\n        while (values.length < index)\n            values.push(Text.empty);\n        values.push(value);\n    }\n}\nfunction iterChanges(desc, f, individual) {\n    let inserted = desc.inserted;\n    for (let posA = 0, posB = 0, i = 0; i < desc.sections.length;) {\n        let len = desc.sections[i++], ins = desc.sections[i++];\n        if (ins < 0) {\n            posA += len;\n            posB += len;\n        }\n        else {\n            let endA = posA, endB = posB, text = Text.empty;\n            for (;;) {\n                endA += len;\n                endB += ins;\n                if (ins && inserted)\n                    text = text.append(inserted[(i - 2) >> 1]);\n                if (individual || i == desc.sections.length || desc.sections[i + 1] < 0)\n                    break;\n                len = desc.sections[i++];\n                ins = desc.sections[i++];\n            }\n            f(posA, endA, posB, endB, text);\n            posA = endA;\n            posB = endB;\n        }\n    }\n}\nfunction mapSet(setA, setB, before, mkSet = false) {\n    // Produce a copy of setA that applies to the document after setB\n    // has been applied (assuming both start at the same document).\n    let sections = [], insert = mkSet ? [] : null;\n    let a = new SectionIter(setA), b = new SectionIter(setB);\n    // Iterate over both sets in parallel. inserted tracks, for changes\n    // in A that have to be processed piece-by-piece, whether their\n    // content has been inserted already, and refers to the section\n    // index.\n    for (let inserted = -1;;) {\n        if (a.done && b.len || b.done && a.len) {\n            throw new Error(\"Mismatched change set lengths\");\n        }\n        else if (a.ins == -1 && b.ins == -1) {\n            // Move across ranges skipped by both sets.\n            let len = Math.min(a.len, b.len);\n            addSection(sections, len, -1);\n            a.forward(len);\n            b.forward(len);\n        }\n        else if (b.ins >= 0 && (a.ins < 0 || inserted == a.i || a.off == 0 && (b.len < a.len || b.len == a.len && !before))) {\n            // If there's a change in B that comes before the next change in\n            // A (ordered by start pos, then len, then before flag), skip\n            // that (and process any changes in A it covers).\n            let len = b.len;\n            addSection(sections, b.ins, -1);\n            while (len) {\n                let piece = Math.min(a.len, len);\n                if (a.ins >= 0 && inserted < a.i && a.len <= piece) {\n                    addSection(sections, 0, a.ins);\n                    if (insert)\n                        addInsert(insert, sections, a.text);\n                    inserted = a.i;\n                }\n                a.forward(piece);\n                len -= piece;\n            }\n            b.next();\n        }\n        else if (a.ins >= 0) {\n            // Process the part of a change in A up to the start of the next\n            // non-deletion change in B (if overlapping).\n            let len = 0, left = a.len;\n            while (left) {\n                if (b.ins == -1) {\n                    let piece = Math.min(left, b.len);\n                    len += piece;\n                    left -= piece;\n                    b.forward(piece);\n                }\n                else if (b.ins == 0 && b.len < left) {\n                    left -= b.len;\n                    b.next();\n                }\n                else {\n                    break;\n                }\n            }\n            addSection(sections, len, inserted < a.i ? a.ins : 0);\n            if (insert && inserted < a.i)\n                addInsert(insert, sections, a.text);\n            inserted = a.i;\n            a.forward(a.len - left);\n        }\n        else if (a.done && b.done) {\n            return insert ? ChangeSet.createSet(sections, insert) : ChangeDesc.create(sections);\n        }\n        else {\n            throw new Error(\"Mismatched change set lengths\");\n        }\n    }\n}\nfunction composeSets(setA, setB, mkSet = false) {\n    let sections = [];\n    let insert = mkSet ? [] : null;\n    let a = new SectionIter(setA), b = new SectionIter(setB);\n    for (let open = false;;) {\n        if (a.done && b.done) {\n            return insert ? ChangeSet.createSet(sections, insert) : ChangeDesc.create(sections);\n        }\n        else if (a.ins == 0) { // Deletion in A\n            addSection(sections, a.len, 0, open);\n            a.next();\n        }\n        else if (b.len == 0 && !b.done) { // Insertion in B\n            addSection(sections, 0, b.ins, open);\n            if (insert)\n                addInsert(insert, sections, b.text);\n            b.next();\n        }\n        else if (a.done || b.done) {\n            throw new Error(\"Mismatched change set lengths\");\n        }\n        else {\n            let len = Math.min(a.len2, b.len), sectionLen = sections.length;\n            if (a.ins == -1) {\n                let insB = b.ins == -1 ? -1 : b.off ? 0 : b.ins;\n                addSection(sections, len, insB, open);\n                if (insert && insB)\n                    addInsert(insert, sections, b.text);\n            }\n            else if (b.ins == -1) {\n                addSection(sections, a.off ? 0 : a.len, len, open);\n                if (insert)\n                    addInsert(insert, sections, a.textBit(len));\n            }\n            else {\n                addSection(sections, a.off ? 0 : a.len, b.off ? 0 : b.ins, open);\n                if (insert && !b.off)\n                    addInsert(insert, sections, b.text);\n            }\n            open = (a.ins > len || b.ins >= 0 && b.len > len) && (open || sections.length > sectionLen);\n            a.forward2(len);\n            b.forward(len);\n        }\n    }\n}\nclass SectionIter {\n    constructor(set) {\n        this.set = set;\n        this.i = 0;\n        this.next();\n    }\n    next() {\n        let { sections } = this.set;\n        if (this.i < sections.length) {\n            this.len = sections[this.i++];\n            this.ins = sections[this.i++];\n        }\n        else {\n            this.len = 0;\n            this.ins = -2;\n        }\n        this.off = 0;\n    }\n    get done() { return this.ins == -2; }\n    get len2() { return this.ins < 0 ? this.len : this.ins; }\n    get text() {\n        let { inserted } = this.set, index = (this.i - 2) >> 1;\n        return index >= inserted.length ? Text.empty : inserted[index];\n    }\n    textBit(len) {\n        let { inserted } = this.set, index = (this.i - 2) >> 1;\n        return index >= inserted.length && !len ? Text.empty\n            : inserted[index].slice(this.off, len == null ? undefined : this.off + len);\n    }\n    forward(len) {\n        if (len == this.len)\n            this.next();\n        else {\n            this.len -= len;\n            this.off += len;\n        }\n    }\n    forward2(len) {\n        if (this.ins == -1)\n            this.forward(len);\n        else if (len == this.ins)\n            this.next();\n        else {\n            this.ins -= len;\n            this.off += len;\n        }\n    }\n}\n\n/**\nA single selection range. When\n[`allowMultipleSelections`](https://codemirror.net/6/docs/ref/#state.EditorState^allowMultipleSelections)\nis enabled, a [selection](https://codemirror.net/6/docs/ref/#state.EditorSelection) may hold\nmultiple ranges. By default, selections hold exactly one range.\n*/\nclass SelectionRange {\n    constructor(\n    /**\n    The lower boundary of the range.\n    */\n    from, \n    /**\n    The upper boundary of the range.\n    */\n    to, flags) {\n        this.from = from;\n        this.to = to;\n        this.flags = flags;\n    }\n    /**\n    The anchor of the range—the side that doesn't move when you\n    extend it.\n    */\n    get anchor() { return this.flags & 32 /* RangeFlag.Inverted */ ? this.to : this.from; }\n    /**\n    The head of the range, which is moved when the range is\n    [extended](https://codemirror.net/6/docs/ref/#state.SelectionRange.extend).\n    */\n    get head() { return this.flags & 32 /* RangeFlag.Inverted */ ? this.from : this.to; }\n    /**\n    True when `anchor` and `head` are at the same position.\n    */\n    get empty() { return this.from == this.to; }\n    /**\n    If this is a cursor that is explicitly associated with the\n    character on one of its sides, this returns the side. -1 means\n    the character before its position, 1 the character after, and 0\n    means no association.\n    */\n    get assoc() { return this.flags & 8 /* RangeFlag.AssocBefore */ ? -1 : this.flags & 16 /* RangeFlag.AssocAfter */ ? 1 : 0; }\n    /**\n    The bidirectional text level associated with this cursor, if\n    any.\n    */\n    get bidiLevel() {\n        let level = this.flags & 7 /* RangeFlag.BidiLevelMask */;\n        return level == 7 ? null : level;\n    }\n    /**\n    The goal column (stored vertical offset) associated with a\n    cursor. This is used to preserve the vertical position when\n    [moving](https://codemirror.net/6/docs/ref/#view.EditorView.moveVertically) across\n    lines of different length.\n    */\n    get goalColumn() {\n        let value = this.flags >> 6 /* RangeFlag.GoalColumnOffset */;\n        return value == 16777215 /* RangeFlag.NoGoalColumn */ ? undefined : value;\n    }\n    /**\n    Map this range through a change, producing a valid range in the\n    updated document.\n    */\n    map(change, assoc = -1) {\n        let from, to;\n        if (this.empty) {\n            from = to = change.mapPos(this.from, assoc);\n        }\n        else {\n            from = change.mapPos(this.from, 1);\n            to = change.mapPos(this.to, -1);\n        }\n        return from == this.from && to == this.to ? this : new SelectionRange(from, to, this.flags);\n    }\n    /**\n    Extend this range to cover at least `from` to `to`.\n    */\n    extend(from, to = from, assoc = 0) {\n        if (from <= this.anchor && to >= this.anchor)\n            return EditorSelection.range(from, to, undefined, undefined, assoc);\n        let head = Math.abs(from - this.anchor) > Math.abs(to - this.anchor) ? from : to;\n        return EditorSelection.range(this.anchor, head, undefined, undefined, assoc);\n    }\n    /**\n    Compare this range to another range.\n    */\n    eq(other, includeAssoc = false) {\n        return this.anchor == other.anchor && this.head == other.head && this.goalColumn == other.goalColumn &&\n            (!includeAssoc || !this.empty || this.assoc == other.assoc);\n    }\n    /**\n    Return a JSON-serializable object representing the range.\n    */\n    toJSON() { return { anchor: this.anchor, head: this.head }; }\n    /**\n    Convert a JSON representation of a range to a `SelectionRange`\n    instance.\n    */\n    static fromJSON(json) {\n        if (!json || typeof json.anchor != \"number\" || typeof json.head != \"number\")\n            throw new RangeError(\"Invalid JSON representation for SelectionRange\");\n        return EditorSelection.range(json.anchor, json.head);\n    }\n    /**\n    @internal\n    */\n    static create(from, to, flags) {\n        return new SelectionRange(from, to, flags);\n    }\n}\n/**\nAn editor selection holds one or more selection ranges.\n*/\nclass EditorSelection {\n    constructor(\n    /**\n    The ranges in the selection, sorted by position. Ranges cannot\n    overlap (but they may touch, if they aren't empty).\n    */\n    ranges, \n    /**\n    The index of the _main_ range in the selection (which is\n    usually the range that was added last).\n    */\n    mainIndex) {\n        this.ranges = ranges;\n        this.mainIndex = mainIndex;\n    }\n    /**\n    Map a selection through a change. Used to adjust the selection\n    position for changes.\n    */\n    map(change, assoc = -1) {\n        if (change.empty)\n            return this;\n        return EditorSelection.create(this.ranges.map(r => r.map(change, assoc)), this.mainIndex);\n    }\n    /**\n    Compare this selection to another selection. By default, ranges\n    are compared only by position. When `includeAssoc` is true,\n    cursor ranges must also have the same\n    [`assoc`](https://codemirror.net/6/docs/ref/#state.SelectionRange.assoc) value.\n    */\n    eq(other, includeAssoc = false) {\n        if (this.ranges.length != other.ranges.length ||\n            this.mainIndex != other.mainIndex)\n            return false;\n        for (let i = 0; i < this.ranges.length; i++)\n            if (!this.ranges[i].eq(other.ranges[i], includeAssoc))\n                return false;\n        return true;\n    }\n    /**\n    Get the primary selection range. Usually, you should make sure\n    your code applies to _all_ ranges, by using methods like\n    [`changeByRange`](https://codemirror.net/6/docs/ref/#state.EditorState.changeByRange).\n    */\n    get main() { return this.ranges[this.mainIndex]; }\n    /**\n    Make sure the selection only has one range. Returns a selection\n    holding only the main range from this selection.\n    */\n    asSingle() {\n        return this.ranges.length == 1 ? this : new EditorSelection([this.main], 0);\n    }\n    /**\n    Extend this selection with an extra range.\n    */\n    addRange(range, main = true) {\n        return EditorSelection.create([range].concat(this.ranges), main ? 0 : this.mainIndex + 1);\n    }\n    /**\n    Replace a given range with another range, and then normalize the\n    selection to merge and sort ranges if necessary.\n    */\n    replaceRange(range, which = this.mainIndex) {\n        let ranges = this.ranges.slice();\n        ranges[which] = range;\n        return EditorSelection.create(ranges, this.mainIndex);\n    }\n    /**\n    Convert this selection to an object that can be serialized to\n    JSON.\n    */\n    toJSON() {\n        return { ranges: this.ranges.map(r => r.toJSON()), main: this.mainIndex };\n    }\n    /**\n    Create a selection from a JSON representation.\n    */\n    static fromJSON(json) {\n        if (!json || !Array.isArray(json.ranges) || typeof json.main != \"number\" || json.main >= json.ranges.length)\n            throw new RangeError(\"Invalid JSON representation for EditorSelection\");\n        return new EditorSelection(json.ranges.map((r) => SelectionRange.fromJSON(r)), json.main);\n    }\n    /**\n    Create a selection holding a single range.\n    */\n    static single(anchor, head = anchor) {\n        return new EditorSelection([EditorSelection.range(anchor, head)], 0);\n    }\n    /**\n    Sort and merge the given set of ranges, creating a valid\n    selection.\n    */\n    static create(ranges, mainIndex = 0) {\n        if (ranges.length == 0)\n            throw new RangeError(\"A selection needs at least one range\");\n        for (let pos = 0, i = 0; i < ranges.length; i++) {\n            let range = ranges[i];\n            if (range.empty ? range.from <= pos : range.from < pos)\n                return EditorSelection.normalized(ranges.slice(), mainIndex);\n            pos = range.to;\n        }\n        return new EditorSelection(ranges, mainIndex);\n    }\n    /**\n    Create a cursor selection range at the given position. You can\n    safely ignore the optional arguments in most situations.\n    */\n    static cursor(pos, assoc = 0, bidiLevel, goalColumn) {\n        return SelectionRange.create(pos, pos, (assoc == 0 ? 0 : assoc < 0 ? 8 /* RangeFlag.AssocBefore */ : 16 /* RangeFlag.AssocAfter */) |\n            (bidiLevel == null ? 7 : Math.min(6, bidiLevel)) |\n            ((goalColumn !== null && goalColumn !== void 0 ? goalColumn : 16777215 /* RangeFlag.NoGoalColumn */) << 6 /* RangeFlag.GoalColumnOffset */));\n    }\n    /**\n    Create a selection range.\n    */\n    static range(anchor, head, goalColumn, bidiLevel, assoc) {\n        let flags = ((goalColumn !== null && goalColumn !== void 0 ? goalColumn : 16777215 /* RangeFlag.NoGoalColumn */) << 6 /* RangeFlag.GoalColumnOffset */) |\n            (bidiLevel == null ? 7 : Math.min(6, bidiLevel));\n        if (!assoc && anchor != head)\n            assoc = head < anchor ? 1 : -1;\n        return head < anchor ? SelectionRange.create(head, anchor, 32 /* RangeFlag.Inverted */ | 16 /* RangeFlag.AssocAfter */ | flags)\n            : SelectionRange.create(anchor, head, (!assoc ? 0 : assoc < 0 ? 8 /* RangeFlag.AssocBefore */ : 16 /* RangeFlag.AssocAfter */) | flags);\n    }\n    /**\n    @internal\n    */\n    static normalized(ranges, mainIndex = 0) {\n        let main = ranges[mainIndex];\n        ranges.sort((a, b) => a.from - b.from);\n        mainIndex = ranges.indexOf(main);\n        for (let i = 1; i < ranges.length; i++) {\n            let range = ranges[i], prev = ranges[i - 1];\n            if (range.empty ? range.from <= prev.to : range.from < prev.to) {\n                let from = prev.from, to = Math.max(range.to, prev.to);\n                if (i <= mainIndex)\n                    mainIndex--;\n                ranges.splice(--i, 2, range.anchor > range.head ? EditorSelection.range(to, from) : EditorSelection.range(from, to));\n            }\n        }\n        return new EditorSelection(ranges, mainIndex);\n    }\n}\nfunction checkSelection(selection, docLength) {\n    for (let range of selection.ranges)\n        if (range.to > docLength)\n            throw new RangeError(\"Selection points outside of document\");\n}\n\nlet nextID = 0;\n/**\nA facet is a labeled value that is associated with an editor\nstate. It takes inputs from any number of extensions, and combines\nthose into a single output value.\n\nExamples of uses of facets are the [tab\nsize](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize), [editor\nattributes](https://codemirror.net/6/docs/ref/#view.EditorView^editorAttributes), and [update\nlisteners](https://codemirror.net/6/docs/ref/#view.EditorView^updateListener).\n\nNote that `Facet` instances can be used anywhere where\n[`FacetReader`](https://codemirror.net/6/docs/ref/#state.FacetReader) is expected.\n*/\nclass Facet {\n    constructor(\n    /**\n    @internal\n    */\n    combine, \n    /**\n    @internal\n    */\n    compareInput, \n    /**\n    @internal\n    */\n    compare, isStatic, enables) {\n        this.combine = combine;\n        this.compareInput = compareInput;\n        this.compare = compare;\n        this.isStatic = isStatic;\n        /**\n        @internal\n        */\n        this.id = nextID++;\n        this.default = combine([]);\n        this.extensions = typeof enables == \"function\" ? enables(this) : enables;\n    }\n    /**\n    Returns a facet reader for this facet, which can be used to\n    [read](https://codemirror.net/6/docs/ref/#state.EditorState.facet) it but not to define values for it.\n    */\n    get reader() { return this; }\n    /**\n    Define a new facet.\n    */\n    static define(config = {}) {\n        return new Facet(config.combine || ((a) => a), config.compareInput || ((a, b) => a === b), config.compare || (!config.combine ? sameArray : (a, b) => a === b), !!config.static, config.enables);\n    }\n    /**\n    Returns an extension that adds the given value to this facet.\n    */\n    of(value) {\n        return new FacetProvider([], this, 0 /* Provider.Static */, value);\n    }\n    /**\n    Create an extension that computes a value for the facet from a\n    state. You must take care to declare the parts of the state that\n    this value depends on, since your function is only called again\n    for a new state when one of those parts changed.\n    \n    In cases where your value depends only on a single field, you'll\n    want to use the [`from`](https://codemirror.net/6/docs/ref/#state.Facet.from) method instead.\n    */\n    compute(deps, get) {\n        if (this.isStatic)\n            throw new Error(\"Can't compute a static facet\");\n        return new FacetProvider(deps, this, 1 /* Provider.Single */, get);\n    }\n    /**\n    Create an extension that computes zero or more values for this\n    facet from a state.\n    */\n    computeN(deps, get) {\n        if (this.isStatic)\n            throw new Error(\"Can't compute a static facet\");\n        return new FacetProvider(deps, this, 2 /* Provider.Multi */, get);\n    }\n    from(field, get) {\n        if (!get)\n            get = x => x;\n        return this.compute([field], state => get(state.field(field)));\n    }\n}\nfunction sameArray(a, b) {\n    return a == b || a.length == b.length && a.every((e, i) => e === b[i]);\n}\nclass FacetProvider {\n    constructor(dependencies, facet, type, value) {\n        this.dependencies = dependencies;\n        this.facet = facet;\n        this.type = type;\n        this.value = value;\n        this.id = nextID++;\n    }\n    dynamicSlot(addresses) {\n        var _a;\n        let getter = this.value;\n        let compare = this.facet.compareInput;\n        let id = this.id, idx = addresses[id] >> 1, multi = this.type == 2 /* Provider.Multi */;\n        let depDoc = false, depSel = false, depAddrs = [];\n        for (let dep of this.dependencies) {\n            if (dep == \"doc\")\n                depDoc = true;\n            else if (dep == \"selection\")\n                depSel = true;\n            else if ((((_a = addresses[dep.id]) !== null && _a !== void 0 ? _a : 1) & 1) == 0)\n                depAddrs.push(addresses[dep.id]);\n        }\n        return {\n            create(state) {\n                state.values[idx] = getter(state);\n                return 1 /* SlotStatus.Changed */;\n            },\n            update(state, tr) {\n                if ((depDoc && tr.docChanged) || (depSel && (tr.docChanged || tr.selection)) || ensureAll(state, depAddrs)) {\n                    let newVal = getter(state);\n                    if (multi ? !compareArray(newVal, state.values[idx], compare) : !compare(newVal, state.values[idx])) {\n                        state.values[idx] = newVal;\n                        return 1 /* SlotStatus.Changed */;\n                    }\n                }\n                return 0;\n            },\n            reconfigure: (state, oldState) => {\n                let newVal, oldAddr = oldState.config.address[id];\n                if (oldAddr != null) {\n                    let oldVal = getAddr(oldState, oldAddr);\n                    if (this.dependencies.every(dep => {\n                        return dep instanceof Facet ? oldState.facet(dep) === state.facet(dep) :\n                            dep instanceof StateField ? oldState.field(dep, false) == state.field(dep, false) : true;\n                    }) || (multi ? compareArray(newVal = getter(state), oldVal, compare) : compare(newVal = getter(state), oldVal))) {\n                        state.values[idx] = oldVal;\n                        return 0;\n                    }\n                }\n                else {\n                    newVal = getter(state);\n                }\n                state.values[idx] = newVal;\n                return 1 /* SlotStatus.Changed */;\n            }\n        };\n    }\n}\nfunction compareArray(a, b, compare) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (!compare(a[i], b[i]))\n            return false;\n    return true;\n}\nfunction ensureAll(state, addrs) {\n    let changed = false;\n    for (let addr of addrs)\n        if (ensureAddr(state, addr) & 1 /* SlotStatus.Changed */)\n            changed = true;\n    return changed;\n}\nfunction dynamicFacetSlot(addresses, facet, providers) {\n    let providerAddrs = providers.map(p => addresses[p.id]);\n    let providerTypes = providers.map(p => p.type);\n    let dynamic = providerAddrs.filter(p => !(p & 1));\n    let idx = addresses[facet.id] >> 1;\n    function get(state) {\n        let values = [];\n        for (let i = 0; i < providerAddrs.length; i++) {\n            let value = getAddr(state, providerAddrs[i]);\n            if (providerTypes[i] == 2 /* Provider.Multi */)\n                for (let val of value)\n                    values.push(val);\n            else\n                values.push(value);\n        }\n        return facet.combine(values);\n    }\n    return {\n        create(state) {\n            for (let addr of providerAddrs)\n                ensureAddr(state, addr);\n            state.values[idx] = get(state);\n            return 1 /* SlotStatus.Changed */;\n        },\n        update(state, tr) {\n            if (!ensureAll(state, dynamic))\n                return 0;\n            let value = get(state);\n            if (facet.compare(value, state.values[idx]))\n                return 0;\n            state.values[idx] = value;\n            return 1 /* SlotStatus.Changed */;\n        },\n        reconfigure(state, oldState) {\n            let depChanged = ensureAll(state, providerAddrs);\n            let oldProviders = oldState.config.facets[facet.id], oldValue = oldState.facet(facet);\n            if (oldProviders && !depChanged && sameArray(providers, oldProviders)) {\n                state.values[idx] = oldValue;\n                return 0;\n            }\n            let value = get(state);\n            if (facet.compare(value, oldValue)) {\n                state.values[idx] = oldValue;\n                return 0;\n            }\n            state.values[idx] = value;\n            return 1 /* SlotStatus.Changed */;\n        }\n    };\n}\nconst initField = /*@__PURE__*/Facet.define({ static: true });\n/**\nFields can store additional information in an editor state, and\nkeep it in sync with the rest of the state.\n*/\nclass StateField {\n    constructor(\n    /**\n    @internal\n    */\n    id, createF, updateF, compareF, \n    /**\n    @internal\n    */\n    spec) {\n        this.id = id;\n        this.createF = createF;\n        this.updateF = updateF;\n        this.compareF = compareF;\n        this.spec = spec;\n        /**\n        @internal\n        */\n        this.provides = undefined;\n    }\n    /**\n    Define a state field.\n    */\n    static define(config) {\n        let field = new StateField(nextID++, config.create, config.update, config.compare || ((a, b) => a === b), config);\n        if (config.provide)\n            field.provides = config.provide(field);\n        return field;\n    }\n    create(state) {\n        let init = state.facet(initField).find(i => i.field == this);\n        return ((init === null || init === void 0 ? void 0 : init.create) || this.createF)(state);\n    }\n    /**\n    @internal\n    */\n    slot(addresses) {\n        let idx = addresses[this.id] >> 1;\n        return {\n            create: (state) => {\n                state.values[idx] = this.create(state);\n                return 1 /* SlotStatus.Changed */;\n            },\n            update: (state, tr) => {\n                let oldVal = state.values[idx];\n                let value = this.updateF(oldVal, tr);\n                if (this.compareF(oldVal, value))\n                    return 0;\n                state.values[idx] = value;\n                return 1 /* SlotStatus.Changed */;\n            },\n            reconfigure: (state, oldState) => {\n                let init = state.facet(initField), oldInit = oldState.facet(initField), reInit;\n                if ((reInit = init.find(i => i.field == this)) && reInit != oldInit.find(i => i.field == this)) {\n                    state.values[idx] = reInit.create(state);\n                    return 1 /* SlotStatus.Changed */;\n                }\n                if (oldState.config.address[this.id] != null) {\n                    state.values[idx] = oldState.field(this);\n                    return 0;\n                }\n                state.values[idx] = this.create(state);\n                return 1 /* SlotStatus.Changed */;\n            }\n        };\n    }\n    /**\n    Returns an extension that enables this field and overrides the\n    way it is initialized. Can be useful when you need to provide a\n    non-default starting value for the field.\n    */\n    init(create) {\n        return [this, initField.of({ field: this, create })];\n    }\n    /**\n    State field instances can be used as\n    [`Extension`](https://codemirror.net/6/docs/ref/#state.Extension) values to enable the field in a\n    given state.\n    */\n    get extension() { return this; }\n}\nconst Prec_ = { lowest: 4, low: 3, default: 2, high: 1, highest: 0 };\nfunction prec(value) {\n    return (ext) => new PrecExtension(ext, value);\n}\n/**\nBy default extensions are registered in the order they are found\nin the flattened form of nested array that was provided.\nIndividual extension values can be assigned a precedence to\noverride this. Extensions that do not have a precedence set get\nthe precedence of the nearest parent with a precedence, or\n[`default`](https://codemirror.net/6/docs/ref/#state.Prec.default) if there is no such parent. The\nfinal ordering of extensions is determined by first sorting by\nprecedence and then by order within each precedence.\n*/\nconst Prec = {\n    /**\n    The highest precedence level, for extensions that should end up\n    near the start of the precedence ordering.\n    */\n    highest: /*@__PURE__*/prec(Prec_.highest),\n    /**\n    A higher-than-default precedence, for extensions that should\n    come before those with default precedence.\n    */\n    high: /*@__PURE__*/prec(Prec_.high),\n    /**\n    The default precedence, which is also used for extensions\n    without an explicit precedence.\n    */\n    default: /*@__PURE__*/prec(Prec_.default),\n    /**\n    A lower-than-default precedence.\n    */\n    low: /*@__PURE__*/prec(Prec_.low),\n    /**\n    The lowest precedence level. Meant for things that should end up\n    near the end of the extension order.\n    */\n    lowest: /*@__PURE__*/prec(Prec_.lowest)\n};\nclass PrecExtension {\n    constructor(inner, prec) {\n        this.inner = inner;\n        this.prec = prec;\n    }\n}\n/**\nExtension compartments can be used to make a configuration\ndynamic. By [wrapping](https://codemirror.net/6/docs/ref/#state.Compartment.of) part of your\nconfiguration in a compartment, you can later\n[replace](https://codemirror.net/6/docs/ref/#state.Compartment.reconfigure) that part through a\ntransaction.\n*/\nclass Compartment {\n    /**\n    Create an instance of this compartment to add to your [state\n    configuration](https://codemirror.net/6/docs/ref/#state.EditorStateConfig.extensions).\n    */\n    of(ext) { return new CompartmentInstance(this, ext); }\n    /**\n    Create an [effect](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) that\n    reconfigures this compartment.\n    */\n    reconfigure(content) {\n        return Compartment.reconfigure.of({ compartment: this, extension: content });\n    }\n    /**\n    Get the current content of the compartment in the state, or\n    `undefined` if it isn't present.\n    */\n    get(state) {\n        return state.config.compartments.get(this);\n    }\n}\nclass CompartmentInstance {\n    constructor(compartment, inner) {\n        this.compartment = compartment;\n        this.inner = inner;\n    }\n}\nclass Configuration {\n    constructor(base, compartments, dynamicSlots, address, staticValues, facets) {\n        this.base = base;\n        this.compartments = compartments;\n        this.dynamicSlots = dynamicSlots;\n        this.address = address;\n        this.staticValues = staticValues;\n        this.facets = facets;\n        this.statusTemplate = [];\n        while (this.statusTemplate.length < dynamicSlots.length)\n            this.statusTemplate.push(0 /* SlotStatus.Unresolved */);\n    }\n    staticFacet(facet) {\n        let addr = this.address[facet.id];\n        return addr == null ? facet.default : this.staticValues[addr >> 1];\n    }\n    static resolve(base, compartments, oldState) {\n        let fields = [];\n        let facets = Object.create(null);\n        let newCompartments = new Map();\n        for (let ext of flatten(base, compartments, newCompartments)) {\n            if (ext instanceof StateField)\n                fields.push(ext);\n            else\n                (facets[ext.facet.id] || (facets[ext.facet.id] = [])).push(ext);\n        }\n        let address = Object.create(null);\n        let staticValues = [];\n        let dynamicSlots = [];\n        for (let field of fields) {\n            address[field.id] = dynamicSlots.length << 1;\n            dynamicSlots.push(a => field.slot(a));\n        }\n        let oldFacets = oldState === null || oldState === void 0 ? void 0 : oldState.config.facets;\n        for (let id in facets) {\n            let providers = facets[id], facet = providers[0].facet;\n            let oldProviders = oldFacets && oldFacets[id] || [];\n            if (providers.every(p => p.type == 0 /* Provider.Static */)) {\n                address[facet.id] = (staticValues.length << 1) | 1;\n                if (sameArray(oldProviders, providers)) {\n                    staticValues.push(oldState.facet(facet));\n                }\n                else {\n                    let value = facet.combine(providers.map(p => p.value));\n                    staticValues.push(oldState && facet.compare(value, oldState.facet(facet)) ? oldState.facet(facet) : value);\n                }\n            }\n            else {\n                for (let p of providers) {\n                    if (p.type == 0 /* Provider.Static */) {\n                        address[p.id] = (staticValues.length << 1) | 1;\n                        staticValues.push(p.value);\n                    }\n                    else {\n                        address[p.id] = dynamicSlots.length << 1;\n                        dynamicSlots.push(a => p.dynamicSlot(a));\n                    }\n                }\n                address[facet.id] = dynamicSlots.length << 1;\n                dynamicSlots.push(a => dynamicFacetSlot(a, facet, providers));\n            }\n        }\n        let dynamic = dynamicSlots.map(f => f(address));\n        return new Configuration(base, newCompartments, dynamic, address, staticValues, facets);\n    }\n}\nfunction flatten(extension, compartments, newCompartments) {\n    let result = [[], [], [], [], []];\n    let seen = new Map();\n    function inner(ext, prec) {\n        let known = seen.get(ext);\n        if (known != null) {\n            if (known <= prec)\n                return;\n            let found = result[known].indexOf(ext);\n            if (found > -1)\n                result[known].splice(found, 1);\n            if (ext instanceof CompartmentInstance)\n                newCompartments.delete(ext.compartment);\n        }\n        seen.set(ext, prec);\n        if (Array.isArray(ext)) {\n            for (let e of ext)\n                inner(e, prec);\n        }\n        else if (ext instanceof CompartmentInstance) {\n            if (newCompartments.has(ext.compartment))\n                throw new RangeError(`Duplicate use of compartment in extensions`);\n            let content = compartments.get(ext.compartment) || ext.inner;\n            newCompartments.set(ext.compartment, content);\n            inner(content, prec);\n        }\n        else if (ext instanceof PrecExtension) {\n            inner(ext.inner, ext.prec);\n        }\n        else if (ext instanceof StateField) {\n            result[prec].push(ext);\n            if (ext.provides)\n                inner(ext.provides, prec);\n        }\n        else if (ext instanceof FacetProvider) {\n            result[prec].push(ext);\n            if (ext.facet.extensions)\n                inner(ext.facet.extensions, Prec_.default);\n        }\n        else {\n            let content = ext.extension;\n            if (!content)\n                throw new Error(`Unrecognized extension value in extension set (${ext}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);\n            inner(content, prec);\n        }\n    }\n    inner(extension, Prec_.default);\n    return result.reduce((a, b) => a.concat(b));\n}\nfunction ensureAddr(state, addr) {\n    if (addr & 1)\n        return 2 /* SlotStatus.Computed */;\n    let idx = addr >> 1;\n    let status = state.status[idx];\n    if (status == 4 /* SlotStatus.Computing */)\n        throw new Error(\"Cyclic dependency between fields and/or facets\");\n    if (status & 2 /* SlotStatus.Computed */)\n        return status;\n    state.status[idx] = 4 /* SlotStatus.Computing */;\n    let changed = state.computeSlot(state, state.config.dynamicSlots[idx]);\n    return state.status[idx] = 2 /* SlotStatus.Computed */ | changed;\n}\nfunction getAddr(state, addr) {\n    return addr & 1 ? state.config.staticValues[addr >> 1] : state.values[addr >> 1];\n}\n\nconst languageData = /*@__PURE__*/Facet.define();\nconst allowMultipleSelections = /*@__PURE__*/Facet.define({\n    combine: values => values.some(v => v),\n    static: true\n});\nconst lineSeparator = /*@__PURE__*/Facet.define({\n    combine: values => values.length ? values[0] : undefined,\n    static: true\n});\nconst changeFilter = /*@__PURE__*/Facet.define();\nconst transactionFilter = /*@__PURE__*/Facet.define();\nconst transactionExtender = /*@__PURE__*/Facet.define();\nconst readOnly = /*@__PURE__*/Facet.define({\n    combine: values => values.length ? values[0] : false\n});\n\n/**\nAnnotations are tagged values that are used to add metadata to\ntransactions in an extensible way. They should be used to model\nthings that effect the entire transaction (such as its [time\nstamp](https://codemirror.net/6/docs/ref/#state.Transaction^time) or information about its\n[origin](https://codemirror.net/6/docs/ref/#state.Transaction^userEvent)). For effects that happen\n_alongside_ the other changes made by the transaction, [state\neffects](https://codemirror.net/6/docs/ref/#state.StateEffect) are more appropriate.\n*/\nclass Annotation {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The annotation type.\n    */\n    type, \n    /**\n    The value of this annotation.\n    */\n    value) {\n        this.type = type;\n        this.value = value;\n    }\n    /**\n    Define a new type of annotation.\n    */\n    static define() { return new AnnotationType(); }\n}\n/**\nMarker that identifies a type of [annotation](https://codemirror.net/6/docs/ref/#state.Annotation).\n*/\nclass AnnotationType {\n    /**\n    Create an instance of this annotation.\n    */\n    of(value) { return new Annotation(this, value); }\n}\n/**\nRepresentation of a type of state effect. Defined with\n[`StateEffect.define`](https://codemirror.net/6/docs/ref/#state.StateEffect^define).\n*/\nclass StateEffectType {\n    /**\n    @internal\n    */\n    constructor(\n    // The `any` types in these function types are there to work\n    // around TypeScript issue #37631, where the type guard on\n    // `StateEffect.is` mysteriously stops working when these properly\n    // have type `Value`.\n    /**\n    @internal\n    */\n    map) {\n        this.map = map;\n    }\n    /**\n    Create a [state effect](https://codemirror.net/6/docs/ref/#state.StateEffect) instance of this\n    type.\n    */\n    of(value) { return new StateEffect(this, value); }\n}\n/**\nState effects can be used to represent additional effects\nassociated with a [transaction](https://codemirror.net/6/docs/ref/#state.Transaction.effects). They\nare often useful to model changes to custom [state\nfields](https://codemirror.net/6/docs/ref/#state.StateField), when those changes aren't implicit in\ndocument or selection changes.\n*/\nclass StateEffect {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    @internal\n    */\n    type, \n    /**\n    The value of this effect.\n    */\n    value) {\n        this.type = type;\n        this.value = value;\n    }\n    /**\n    Map this effect through a position mapping. Will return\n    `undefined` when that ends up deleting the effect.\n    */\n    map(mapping) {\n        let mapped = this.type.map(this.value, mapping);\n        return mapped === undefined ? undefined : mapped == this.value ? this : new StateEffect(this.type, mapped);\n    }\n    /**\n    Tells you whether this effect object is of a given\n    [type](https://codemirror.net/6/docs/ref/#state.StateEffectType).\n    */\n    is(type) { return this.type == type; }\n    /**\n    Define a new effect type. The type parameter indicates the type\n    of values that his effect holds. It should be a type that\n    doesn't include `undefined`, since that is used in\n    [mapping](https://codemirror.net/6/docs/ref/#state.StateEffect.map) to indicate that an effect is\n    removed.\n    */\n    static define(spec = {}) {\n        return new StateEffectType(spec.map || (v => v));\n    }\n    /**\n    Map an array of effects through a change set.\n    */\n    static mapEffects(effects, mapping) {\n        if (!effects.length)\n            return effects;\n        let result = [];\n        for (let effect of effects) {\n            let mapped = effect.map(mapping);\n            if (mapped)\n                result.push(mapped);\n        }\n        return result;\n    }\n}\n/**\nThis effect can be used to reconfigure the root extensions of\nthe editor. Doing this will discard any extensions\n[appended](https://codemirror.net/6/docs/ref/#state.StateEffect^appendConfig), but does not reset\nthe content of [reconfigured](https://codemirror.net/6/docs/ref/#state.Compartment.reconfigure)\ncompartments.\n*/\nStateEffect.reconfigure = /*@__PURE__*/StateEffect.define();\n/**\nAppend extensions to the top-level configuration of the editor.\n*/\nStateEffect.appendConfig = /*@__PURE__*/StateEffect.define();\n/**\nChanges to the editor state are grouped into transactions.\nTypically, a user action creates a single transaction, which may\ncontain any number of document changes, may change the selection,\nor have other effects. Create a transaction by calling\n[`EditorState.update`](https://codemirror.net/6/docs/ref/#state.EditorState.update), or immediately\ndispatch one by calling\n[`EditorView.dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch).\n*/\nclass Transaction {\n    constructor(\n    /**\n    The state from which the transaction starts.\n    */\n    startState, \n    /**\n    The document changes made by this transaction.\n    */\n    changes, \n    /**\n    The selection set by this transaction, or undefined if it\n    doesn't explicitly set a selection.\n    */\n    selection, \n    /**\n    The effects added to the transaction.\n    */\n    effects, \n    /**\n    @internal\n    */\n    annotations, \n    /**\n    Whether the selection should be scrolled into view after this\n    transaction is dispatched.\n    */\n    scrollIntoView) {\n        this.startState = startState;\n        this.changes = changes;\n        this.selection = selection;\n        this.effects = effects;\n        this.annotations = annotations;\n        this.scrollIntoView = scrollIntoView;\n        /**\n        @internal\n        */\n        this._doc = null;\n        /**\n        @internal\n        */\n        this._state = null;\n        if (selection)\n            checkSelection(selection, changes.newLength);\n        if (!annotations.some((a) => a.type == Transaction.time))\n            this.annotations = annotations.concat(Transaction.time.of(Date.now()));\n    }\n    /**\n    @internal\n    */\n    static create(startState, changes, selection, effects, annotations, scrollIntoView) {\n        return new Transaction(startState, changes, selection, effects, annotations, scrollIntoView);\n    }\n    /**\n    The new document produced by the transaction. Contrary to\n    [`.state`](https://codemirror.net/6/docs/ref/#state.Transaction.state)`.doc`, accessing this won't\n    force the entire new state to be computed right away, so it is\n    recommended that [transaction\n    filters](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter) use this getter\n    when they need to look at the new document.\n    */\n    get newDoc() {\n        return this._doc || (this._doc = this.changes.apply(this.startState.doc));\n    }\n    /**\n    The new selection produced by the transaction. If\n    [`this.selection`](https://codemirror.net/6/docs/ref/#state.Transaction.selection) is undefined,\n    this will [map](https://codemirror.net/6/docs/ref/#state.EditorSelection.map) the start state's\n    current selection through the changes made by the transaction.\n    */\n    get newSelection() {\n        return this.selection || this.startState.selection.map(this.changes);\n    }\n    /**\n    The new state created by the transaction. Computed on demand\n    (but retained for subsequent access), so it is recommended not to\n    access it in [transaction\n    filters](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter) when possible.\n    */\n    get state() {\n        if (!this._state)\n            this.startState.applyTransaction(this);\n        return this._state;\n    }\n    /**\n    Get the value of the given annotation type, if any.\n    */\n    annotation(type) {\n        for (let ann of this.annotations)\n            if (ann.type == type)\n                return ann.value;\n        return undefined;\n    }\n    /**\n    Indicates whether the transaction changed the document.\n    */\n    get docChanged() { return !this.changes.empty; }\n    /**\n    Indicates whether this transaction reconfigures the state\n    (through a [configuration compartment](https://codemirror.net/6/docs/ref/#state.Compartment) or\n    with a top-level configuration\n    [effect](https://codemirror.net/6/docs/ref/#state.StateEffect^reconfigure).\n    */\n    get reconfigured() { return this.startState.config != this.state.config; }\n    /**\n    Returns true if the transaction has a [user\n    event](https://codemirror.net/6/docs/ref/#state.Transaction^userEvent) annotation that is equal to\n    or more specific than `event`. For example, if the transaction\n    has `\"select.pointer\"` as user event, `\"select\"` and\n    `\"select.pointer\"` will match it.\n    */\n    isUserEvent(event) {\n        let e = this.annotation(Transaction.userEvent);\n        return !!(e && (e == event || e.length > event.length && e.slice(0, event.length) == event && e[event.length] == \".\"));\n    }\n}\n/**\nAnnotation used to store transaction timestamps. Automatically\nadded to every transaction, holding `Date.now()`.\n*/\nTransaction.time = /*@__PURE__*/Annotation.define();\n/**\nAnnotation used to associate a transaction with a user interface\nevent. Holds a string identifying the event, using a\ndot-separated format to support attaching more specific\ninformation. The events used by the core libraries are:\n\n - `\"input\"` when content is entered\n   - `\"input.type\"` for typed input\n     - `\"input.type.compose\"` for composition\n   - `\"input.paste\"` for pasted input\n   - `\"input.drop\"` when adding content with drag-and-drop\n   - `\"input.complete\"` when autocompleting\n - `\"delete\"` when the user deletes content\n   - `\"delete.selection\"` when deleting the selection\n   - `\"delete.forward\"` when deleting forward from the selection\n   - `\"delete.backward\"` when deleting backward from the selection\n   - `\"delete.cut\"` when cutting to the clipboard\n - `\"move\"` when content is moved\n   - `\"move.drop\"` when content is moved within the editor through drag-and-drop\n - `\"select\"` when explicitly changing the selection\n   - `\"select.pointer\"` when selecting with a mouse or other pointing device\n - `\"undo\"` and `\"redo\"` for history actions\n\nUse [`isUserEvent`](https://codemirror.net/6/docs/ref/#state.Transaction.isUserEvent) to check\nwhether the annotation matches a given event.\n*/\nTransaction.userEvent = /*@__PURE__*/Annotation.define();\n/**\nAnnotation indicating whether a transaction should be added to\nthe undo history or not.\n*/\nTransaction.addToHistory = /*@__PURE__*/Annotation.define();\n/**\nAnnotation indicating (when present and true) that a transaction\nrepresents a change made by some other actor, not the user. This\nis used, for example, to tag other people's changes in\ncollaborative editing.\n*/\nTransaction.remote = /*@__PURE__*/Annotation.define();\nfunction joinRanges(a, b) {\n    let result = [];\n    for (let iA = 0, iB = 0;;) {\n        let from, to;\n        if (iA < a.length && (iB == b.length || b[iB] >= a[iA])) {\n            from = a[iA++];\n            to = a[iA++];\n        }\n        else if (iB < b.length) {\n            from = b[iB++];\n            to = b[iB++];\n        }\n        else\n            return result;\n        if (!result.length || result[result.length - 1] < from)\n            result.push(from, to);\n        else if (result[result.length - 1] < to)\n            result[result.length - 1] = to;\n    }\n}\nfunction mergeTransaction(a, b, sequential) {\n    var _a;\n    let mapForA, mapForB, changes;\n    if (sequential) {\n        mapForA = b.changes;\n        mapForB = ChangeSet.empty(b.changes.length);\n        changes = a.changes.compose(b.changes);\n    }\n    else {\n        mapForA = b.changes.map(a.changes);\n        mapForB = a.changes.mapDesc(b.changes, true);\n        changes = a.changes.compose(mapForA);\n    }\n    return {\n        changes,\n        selection: b.selection ? b.selection.map(mapForB) : (_a = a.selection) === null || _a === void 0 ? void 0 : _a.map(mapForA),\n        effects: StateEffect.mapEffects(a.effects, mapForA).concat(StateEffect.mapEffects(b.effects, mapForB)),\n        annotations: a.annotations.length ? a.annotations.concat(b.annotations) : b.annotations,\n        scrollIntoView: a.scrollIntoView || b.scrollIntoView\n    };\n}\nfunction resolveTransactionInner(state, spec, docSize) {\n    let sel = spec.selection, annotations = asArray(spec.annotations);\n    if (spec.userEvent)\n        annotations = annotations.concat(Transaction.userEvent.of(spec.userEvent));\n    return {\n        changes: spec.changes instanceof ChangeSet ? spec.changes\n            : ChangeSet.of(spec.changes || [], docSize, state.facet(lineSeparator)),\n        selection: sel && (sel instanceof EditorSelection ? sel : EditorSelection.single(sel.anchor, sel.head)),\n        effects: asArray(spec.effects),\n        annotations,\n        scrollIntoView: !!spec.scrollIntoView\n    };\n}\nfunction resolveTransaction(state, specs, filter) {\n    let s = resolveTransactionInner(state, specs.length ? specs[0] : {}, state.doc.length);\n    if (specs.length && specs[0].filter === false)\n        filter = false;\n    for (let i = 1; i < specs.length; i++) {\n        if (specs[i].filter === false)\n            filter = false;\n        let seq = !!specs[i].sequential;\n        s = mergeTransaction(s, resolveTransactionInner(state, specs[i], seq ? s.changes.newLength : state.doc.length), seq);\n    }\n    let tr = Transaction.create(state, s.changes, s.selection, s.effects, s.annotations, s.scrollIntoView);\n    return extendTransaction(filter ? filterTransaction(tr) : tr);\n}\n// Finish a transaction by applying filters if necessary.\nfunction filterTransaction(tr) {\n    let state = tr.startState;\n    // Change filters\n    let result = true;\n    for (let filter of state.facet(changeFilter)) {\n        let value = filter(tr);\n        if (value === false) {\n            result = false;\n            break;\n        }\n        if (Array.isArray(value))\n            result = result === true ? value : joinRanges(result, value);\n    }\n    if (result !== true) {\n        let changes, back;\n        if (result === false) {\n            back = tr.changes.invertedDesc;\n            changes = ChangeSet.empty(state.doc.length);\n        }\n        else {\n            let filtered = tr.changes.filter(result);\n            changes = filtered.changes;\n            back = filtered.filtered.mapDesc(filtered.changes).invertedDesc;\n        }\n        tr = Transaction.create(state, changes, tr.selection && tr.selection.map(back), StateEffect.mapEffects(tr.effects, back), tr.annotations, tr.scrollIntoView);\n    }\n    // Transaction filters\n    let filters = state.facet(transactionFilter);\n    for (let i = filters.length - 1; i >= 0; i--) {\n        let filtered = filters[i](tr);\n        if (filtered instanceof Transaction)\n            tr = filtered;\n        else if (Array.isArray(filtered) && filtered.length == 1 && filtered[0] instanceof Transaction)\n            tr = filtered[0];\n        else\n            tr = resolveTransaction(state, asArray(filtered), false);\n    }\n    return tr;\n}\nfunction extendTransaction(tr) {\n    let state = tr.startState, extenders = state.facet(transactionExtender), spec = tr;\n    for (let i = extenders.length - 1; i >= 0; i--) {\n        let extension = extenders[i](tr);\n        if (extension && Object.keys(extension).length)\n            spec = mergeTransaction(spec, resolveTransactionInner(state, extension, tr.changes.newLength), true);\n    }\n    return spec == tr ? tr : Transaction.create(state, tr.changes, tr.selection, spec.effects, spec.annotations, spec.scrollIntoView);\n}\nconst none = [];\nfunction asArray(value) {\n    return value == null ? none : Array.isArray(value) ? value : [value];\n}\n\n/**\nThe categories produced by a [character\ncategorizer](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer). These are used\ndo things like selecting by word.\n*/\nvar CharCategory = /*@__PURE__*/(function (CharCategory) {\n    /**\n    Word characters.\n    */\n    CharCategory[CharCategory[\"Word\"] = 0] = \"Word\";\n    /**\n    Whitespace.\n    */\n    CharCategory[CharCategory[\"Space\"] = 1] = \"Space\";\n    /**\n    Anything else.\n    */\n    CharCategory[CharCategory[\"Other\"] = 2] = \"Other\";\nreturn CharCategory})(CharCategory || (CharCategory = {}));\nconst nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\nlet wordChar;\ntry {\n    wordChar = /*@__PURE__*/new RegExp(\"[\\\\p{Alphabetic}\\\\p{Number}_]\", \"u\");\n}\ncatch (_) { }\nfunction hasWordChar(str) {\n    if (wordChar)\n        return wordChar.test(str);\n    for (let i = 0; i < str.length; i++) {\n        let ch = str[i];\n        if (/\\w/.test(ch) || ch > \"\\x80\" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)))\n            return true;\n    }\n    return false;\n}\nfunction makeCategorizer(wordChars) {\n    return (char) => {\n        if (!/\\S/.test(char))\n            return CharCategory.Space;\n        if (hasWordChar(char))\n            return CharCategory.Word;\n        for (let i = 0; i < wordChars.length; i++)\n            if (char.indexOf(wordChars[i]) > -1)\n                return CharCategory.Word;\n        return CharCategory.Other;\n    };\n}\n\n/**\nThe editor state class is a persistent (immutable) data structure.\nTo update a state, you [create](https://codemirror.net/6/docs/ref/#state.EditorState.update) a\n[transaction](https://codemirror.net/6/docs/ref/#state.Transaction), which produces a _new_ state\ninstance, without modifying the original object.\n\nAs such, _never_ mutate properties of a state directly. That'll\njust break things.\n*/\nclass EditorState {\n    constructor(\n    /**\n    @internal\n    */\n    config, \n    /**\n    The current document.\n    */\n    doc, \n    /**\n    The current selection.\n    */\n    selection, \n    /**\n    @internal\n    */\n    values, computeSlot, tr) {\n        this.config = config;\n        this.doc = doc;\n        this.selection = selection;\n        this.values = values;\n        this.status = config.statusTemplate.slice();\n        this.computeSlot = computeSlot;\n        // Fill in the computed state immediately, so that further queries\n        // for it made during the update return this state\n        if (tr)\n            tr._state = this;\n        for (let i = 0; i < this.config.dynamicSlots.length; i++)\n            ensureAddr(this, i << 1);\n        this.computeSlot = null;\n    }\n    field(field, require = true) {\n        let addr = this.config.address[field.id];\n        if (addr == null) {\n            if (require)\n                throw new RangeError(\"Field is not present in this state\");\n            return undefined;\n        }\n        ensureAddr(this, addr);\n        return getAddr(this, addr);\n    }\n    /**\n    Create a [transaction](https://codemirror.net/6/docs/ref/#state.Transaction) that updates this\n    state. Any number of [transaction specs](https://codemirror.net/6/docs/ref/#state.TransactionSpec)\n    can be passed. Unless\n    [`sequential`](https://codemirror.net/6/docs/ref/#state.TransactionSpec.sequential) is set, the\n    [changes](https://codemirror.net/6/docs/ref/#state.TransactionSpec.changes) (if any) of each spec\n    are assumed to start in the _current_ document (not the document\n    produced by previous specs), and its\n    [selection](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection) and\n    [effects](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) are assumed to refer\n    to the document created by its _own_ changes. The resulting\n    transaction contains the combined effect of all the different\n    specs. For [selection](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection), later\n    specs take precedence over earlier ones.\n    */\n    update(...specs) {\n        return resolveTransaction(this, specs, true);\n    }\n    /**\n    @internal\n    */\n    applyTransaction(tr) {\n        let conf = this.config, { base, compartments } = conf;\n        for (let effect of tr.effects) {\n            if (effect.is(Compartment.reconfigure)) {\n                if (conf) {\n                    compartments = new Map;\n                    conf.compartments.forEach((val, key) => compartments.set(key, val));\n                    conf = null;\n                }\n                compartments.set(effect.value.compartment, effect.value.extension);\n            }\n            else if (effect.is(StateEffect.reconfigure)) {\n                conf = null;\n                base = effect.value;\n            }\n            else if (effect.is(StateEffect.appendConfig)) {\n                conf = null;\n                base = asArray(base).concat(effect.value);\n            }\n        }\n        let startValues;\n        if (!conf) {\n            conf = Configuration.resolve(base, compartments, this);\n            let intermediateState = new EditorState(conf, this.doc, this.selection, conf.dynamicSlots.map(() => null), (state, slot) => slot.reconfigure(state, this), null);\n            startValues = intermediateState.values;\n        }\n        else {\n            startValues = tr.startState.values.slice();\n        }\n        let selection = tr.startState.facet(allowMultipleSelections) ? tr.newSelection : tr.newSelection.asSingle();\n        new EditorState(conf, tr.newDoc, selection, startValues, (state, slot) => slot.update(state, tr), tr);\n    }\n    /**\n    Create a [transaction spec](https://codemirror.net/6/docs/ref/#state.TransactionSpec) that\n    replaces every selection range with the given content.\n    */\n    replaceSelection(text) {\n        if (typeof text == \"string\")\n            text = this.toText(text);\n        return this.changeByRange(range => ({ changes: { from: range.from, to: range.to, insert: text },\n            range: EditorSelection.cursor(range.from + text.length) }));\n    }\n    /**\n    Create a set of changes and a new selection by running the given\n    function for each range in the active selection. The function\n    can return an optional set of changes (in the coordinate space\n    of the start document), plus an updated range (in the coordinate\n    space of the document produced by the call's own changes). This\n    method will merge all the changes and ranges into a single\n    changeset and selection, and return it as a [transaction\n    spec](https://codemirror.net/6/docs/ref/#state.TransactionSpec), which can be passed to\n    [`update`](https://codemirror.net/6/docs/ref/#state.EditorState.update).\n    */\n    changeByRange(f) {\n        let sel = this.selection;\n        let result1 = f(sel.ranges[0]);\n        let changes = this.changes(result1.changes), ranges = [result1.range];\n        let effects = asArray(result1.effects);\n        for (let i = 1; i < sel.ranges.length; i++) {\n            let result = f(sel.ranges[i]);\n            let newChanges = this.changes(result.changes), newMapped = newChanges.map(changes);\n            for (let j = 0; j < i; j++)\n                ranges[j] = ranges[j].map(newMapped);\n            let mapBy = changes.mapDesc(newChanges, true);\n            ranges.push(result.range.map(mapBy));\n            changes = changes.compose(newMapped);\n            effects = StateEffect.mapEffects(effects, newMapped).concat(StateEffect.mapEffects(asArray(result.effects), mapBy));\n        }\n        return {\n            changes,\n            selection: EditorSelection.create(ranges, sel.mainIndex),\n            effects\n        };\n    }\n    /**\n    Create a [change set](https://codemirror.net/6/docs/ref/#state.ChangeSet) from the given change\n    description, taking the state's document length and line\n    separator into account.\n    */\n    changes(spec = []) {\n        if (spec instanceof ChangeSet)\n            return spec;\n        return ChangeSet.of(spec, this.doc.length, this.facet(EditorState.lineSeparator));\n    }\n    /**\n    Using the state's [line\n    separator](https://codemirror.net/6/docs/ref/#state.EditorState^lineSeparator), create a\n    [`Text`](https://codemirror.net/6/docs/ref/#state.Text) instance from the given string.\n    */\n    toText(string) {\n        return Text.of(string.split(this.facet(EditorState.lineSeparator) || DefaultSplit));\n    }\n    /**\n    Return the given range of the document as a string.\n    */\n    sliceDoc(from = 0, to = this.doc.length) {\n        return this.doc.sliceString(from, to, this.lineBreak);\n    }\n    /**\n    Get the value of a state [facet](https://codemirror.net/6/docs/ref/#state.Facet).\n    */\n    facet(facet) {\n        let addr = this.config.address[facet.id];\n        if (addr == null)\n            return facet.default;\n        ensureAddr(this, addr);\n        return getAddr(this, addr);\n    }\n    /**\n    Convert this state to a JSON-serializable object. When custom\n    fields should be serialized, you can pass them in as an object\n    mapping property names (in the resulting object, which should\n    not use `doc` or `selection`) to fields.\n    */\n    toJSON(fields) {\n        let result = {\n            doc: this.sliceDoc(),\n            selection: this.selection.toJSON()\n        };\n        if (fields)\n            for (let prop in fields) {\n                let value = fields[prop];\n                if (value instanceof StateField && this.config.address[value.id] != null)\n                    result[prop] = value.spec.toJSON(this.field(fields[prop]), this);\n            }\n        return result;\n    }\n    /**\n    Deserialize a state from its JSON representation. When custom\n    fields should be deserialized, pass the same object you passed\n    to [`toJSON`](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) when serializing as\n    third argument.\n    */\n    static fromJSON(json, config = {}, fields) {\n        if (!json || typeof json.doc != \"string\")\n            throw new RangeError(\"Invalid JSON representation for EditorState\");\n        let fieldInit = [];\n        if (fields)\n            for (let prop in fields) {\n                if (Object.prototype.hasOwnProperty.call(json, prop)) {\n                    let field = fields[prop], value = json[prop];\n                    fieldInit.push(field.init(state => field.spec.fromJSON(value, state)));\n                }\n            }\n        return EditorState.create({\n            doc: json.doc,\n            selection: EditorSelection.fromJSON(json.selection),\n            extensions: config.extensions ? fieldInit.concat([config.extensions]) : fieldInit\n        });\n    }\n    /**\n    Create a new state. You'll usually only need this when\n    initializing an editor—updated states are created by applying\n    transactions.\n    */\n    static create(config = {}) {\n        let configuration = Configuration.resolve(config.extensions || [], new Map);\n        let doc = config.doc instanceof Text ? config.doc\n            : Text.of((config.doc || \"\").split(configuration.staticFacet(EditorState.lineSeparator) || DefaultSplit));\n        let selection = !config.selection ? EditorSelection.single(0)\n            : config.selection instanceof EditorSelection ? config.selection\n                : EditorSelection.single(config.selection.anchor, config.selection.head);\n        checkSelection(selection, doc.length);\n        if (!configuration.staticFacet(allowMultipleSelections))\n            selection = selection.asSingle();\n        return new EditorState(configuration, doc, selection, configuration.dynamicSlots.map(() => null), (state, slot) => slot.create(state), null);\n    }\n    /**\n    The size (in columns) of a tab in the document, determined by\n    the [`tabSize`](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize) facet.\n    */\n    get tabSize() { return this.facet(EditorState.tabSize); }\n    /**\n    Get the proper [line-break](https://codemirror.net/6/docs/ref/#state.EditorState^lineSeparator)\n    string for this state.\n    */\n    get lineBreak() { return this.facet(EditorState.lineSeparator) || \"\\n\"; }\n    /**\n    Returns true when the editor is\n    [configured](https://codemirror.net/6/docs/ref/#state.EditorState^readOnly) to be read-only.\n    */\n    get readOnly() { return this.facet(readOnly); }\n    /**\n    Look up a translation for the given phrase (via the\n    [`phrases`](https://codemirror.net/6/docs/ref/#state.EditorState^phrases) facet), or return the\n    original string if no translation is found.\n    \n    If additional arguments are passed, they will be inserted in\n    place of markers like `$1` (for the first value) and `$2`, etc.\n    A single `$` is equivalent to `$1`, and `$$` will produce a\n    literal dollar sign.\n    */\n    phrase(phrase, ...insert) {\n        for (let map of this.facet(EditorState.phrases))\n            if (Object.prototype.hasOwnProperty.call(map, phrase)) {\n                phrase = map[phrase];\n                break;\n            }\n        if (insert.length)\n            phrase = phrase.replace(/\\$(\\$|\\d*)/g, (m, i) => {\n                if (i == \"$\")\n                    return \"$\";\n                let n = +(i || 1);\n                return !n || n > insert.length ? m : insert[n - 1];\n            });\n        return phrase;\n    }\n    /**\n    Find the values for a given language data field, provided by the\n    the [`languageData`](https://codemirror.net/6/docs/ref/#state.EditorState^languageData) facet.\n    \n    Examples of language data fields are...\n    \n    - [`\"commentTokens\"`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) for specifying\n      comment syntax.\n    - [`\"autocomplete\"`](https://codemirror.net/6/docs/ref/#autocomplete.autocompletion^config.override)\n      for providing language-specific completion sources.\n    - [`\"wordChars\"`](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer) for adding\n      characters that should be considered part of words in this\n      language.\n    - [`\"closeBrackets\"`](https://codemirror.net/6/docs/ref/#autocomplete.CloseBracketConfig) controls\n      bracket closing behavior.\n    */\n    languageDataAt(name, pos, side = -1) {\n        let values = [];\n        for (let provider of this.facet(languageData)) {\n            for (let result of provider(this, pos, side)) {\n                if (Object.prototype.hasOwnProperty.call(result, name))\n                    values.push(result[name]);\n            }\n        }\n        return values;\n    }\n    /**\n    Return a function that can categorize strings (expected to\n    represent a single [grapheme cluster](https://codemirror.net/6/docs/ref/#state.findClusterBreak))\n    into one of:\n    \n     - Word (contains an alphanumeric character or a character\n       explicitly listed in the local language's `\"wordChars\"`\n       language data, which should be a string)\n     - Space (contains only whitespace)\n     - Other (anything else)\n    */\n    charCategorizer(at) {\n        let chars = this.languageDataAt(\"wordChars\", at);\n        return makeCategorizer(chars.length ? chars[0] : \"\");\n    }\n    /**\n    Find the word at the given position, meaning the range\n    containing all [word](https://codemirror.net/6/docs/ref/#state.CharCategory.Word) characters\n    around it. If no word characters are adjacent to the position,\n    this returns null.\n    */\n    wordAt(pos) {\n        let { text, from, length } = this.doc.lineAt(pos);\n        let cat = this.charCategorizer(pos);\n        let start = pos - from, end = pos - from;\n        while (start > 0) {\n            let prev = findClusterBreak(text, start, false);\n            if (cat(text.slice(prev, start)) != CharCategory.Word)\n                break;\n            start = prev;\n        }\n        while (end < length) {\n            let next = findClusterBreak(text, end);\n            if (cat(text.slice(end, next)) != CharCategory.Word)\n                break;\n            end = next;\n        }\n        return start == end ? null : EditorSelection.range(start + from, end + from);\n    }\n}\n/**\nA facet that, when enabled, causes the editor to allow multiple\nranges to be selected. Be careful though, because by default the\neditor relies on the native DOM selection, which cannot handle\nmultiple selections. An extension like\n[`drawSelection`](https://codemirror.net/6/docs/ref/#view.drawSelection) can be used to make\nsecondary selections visible to the user.\n*/\nEditorState.allowMultipleSelections = allowMultipleSelections;\n/**\nConfigures the tab size to use in this state. The first\n(highest-precedence) value of the facet is used. If no value is\ngiven, this defaults to 4.\n*/\nEditorState.tabSize = /*@__PURE__*/Facet.define({\n    combine: values => values.length ? values[0] : 4\n});\n/**\nThe line separator to use. By default, any of `\"\\n\"`, `\"\\r\\n\"`\nand `\"\\r\"` is treated as a separator when splitting lines, and\nlines are joined with `\"\\n\"`.\n\nWhen you configure a value here, only that precise separator\nwill be used, allowing you to round-trip documents through the\neditor without normalizing line separators.\n*/\nEditorState.lineSeparator = lineSeparator;\n/**\nThis facet controls the value of the\n[`readOnly`](https://codemirror.net/6/docs/ref/#state.EditorState.readOnly) getter, which is\nconsulted by commands and extensions that implement editing\nfunctionality to determine whether they should apply. It\ndefaults to false, but when its highest-precedence value is\n`true`, such functionality disables itself.\n\nNot to be confused with\n[`EditorView.editable`](https://codemirror.net/6/docs/ref/#view.EditorView^editable), which\ncontrols whether the editor's DOM is set to be editable (and\nthus focusable).\n*/\nEditorState.readOnly = readOnly;\n/**\nRegisters translation phrases. The\n[`phrase`](https://codemirror.net/6/docs/ref/#state.EditorState.phrase) method will look through\nall objects registered with this facet to find translations for\nits argument.\n*/\nEditorState.phrases = /*@__PURE__*/Facet.define({\n    compare(a, b) {\n        let kA = Object.keys(a), kB = Object.keys(b);\n        return kA.length == kB.length && kA.every(k => a[k] == b[k]);\n    }\n});\n/**\nA facet used to register [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt) providers.\n*/\nEditorState.languageData = languageData;\n/**\nFacet used to register change filters, which are called for each\ntransaction (unless explicitly\n[disabled](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter)), and can suppress\npart of the transaction's changes.\n\nSuch a function can return `true` to indicate that it doesn't\nwant to do anything, `false` to completely stop the changes in\nthe transaction, or a set of ranges in which changes should be\nsuppressed. Such ranges are represented as an array of numbers,\nwith each pair of two numbers indicating the start and end of a\nrange. So for example `[10, 20, 100, 110]` suppresses changes\nbetween 10 and 20, and between 100 and 110.\n*/\nEditorState.changeFilter = changeFilter;\n/**\nFacet used to register a hook that gets a chance to update or\nreplace transaction specs before they are applied. This will\nonly be applied for transactions that don't have\n[`filter`](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter) set to `false`. You\ncan either return a single transaction spec (possibly the input\ntransaction), or an array of specs (which will be combined in\nthe same way as the arguments to\n[`EditorState.update`](https://codemirror.net/6/docs/ref/#state.EditorState.update)).\n\nWhen possible, it is recommended to avoid accessing\n[`Transaction.state`](https://codemirror.net/6/docs/ref/#state.Transaction.state) in a filter,\nsince it will force creation of a state that will then be\ndiscarded again, if the transaction is actually filtered.\n\n(This functionality should be used with care. Indiscriminately\nmodifying transaction is likely to break something or degrade\nthe user experience.)\n*/\nEditorState.transactionFilter = transactionFilter;\n/**\nThis is a more limited form of\n[`transactionFilter`](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter),\nwhich can only add\n[annotations](https://codemirror.net/6/docs/ref/#state.TransactionSpec.annotations) and\n[effects](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects). _But_, this type\nof filter runs even if the transaction has disabled regular\n[filtering](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter), making it suitable\nfor effects that don't need to touch the changes or selection,\nbut do want to process every transaction.\n\nExtenders run _after_ filters, when both are present.\n*/\nEditorState.transactionExtender = transactionExtender;\nCompartment.reconfigure = /*@__PURE__*/StateEffect.define();\n\n/**\nUtility function for combining behaviors to fill in a config\nobject from an array of provided configs. `defaults` should hold\ndefault values for all optional fields in `Config`.\n\nThe function will, by default, error\nwhen a field gets two values that aren't `===`-equal, but you can\nprovide combine functions per field to do something else.\n*/\nfunction combineConfig(configs, defaults, // Should hold only the optional properties of Config, but I haven't managed to express that\ncombine = {}) {\n    let result = {};\n    for (let config of configs)\n        for (let key of Object.keys(config)) {\n            let value = config[key], current = result[key];\n            if (current === undefined)\n                result[key] = value;\n            else if (current === value || value === undefined) ; // No conflict\n            else if (Object.hasOwnProperty.call(combine, key))\n                result[key] = combine[key](current, value);\n            else\n                throw new Error(\"Config merge conflict for field \" + key);\n        }\n    for (let key in defaults)\n        if (result[key] === undefined)\n            result[key] = defaults[key];\n    return result;\n}\n\n/**\nEach range is associated with a value, which must inherit from\nthis class.\n*/\nclass RangeValue {\n    /**\n    Compare this value with another value. Used when comparing\n    rangesets. The default implementation compares by identity.\n    Unless you are only creating a fixed number of unique instances\n    of your value type, it is a good idea to implement this\n    properly.\n    */\n    eq(other) { return this == other; }\n    /**\n    Create a [range](https://codemirror.net/6/docs/ref/#state.Range) with this value.\n    */\n    range(from, to = from) { return Range.create(from, to, this); }\n}\nRangeValue.prototype.startSide = RangeValue.prototype.endSide = 0;\nRangeValue.prototype.point = false;\nRangeValue.prototype.mapMode = MapMode.TrackDel;\nfunction cmpVal(a, b) {\n    return a == b || a.constructor == b.constructor && a.eq(b);\n}\n/**\nA range associates a value with a range of positions.\n*/\nclass Range {\n    constructor(\n    /**\n    The range's start position.\n    */\n    from, \n    /**\n    Its end position.\n    */\n    to, \n    /**\n    The value associated with this range.\n    */\n    value) {\n        this.from = from;\n        this.to = to;\n        this.value = value;\n    }\n    /**\n    @internal\n    */\n    static create(from, to, value) {\n        return new Range(from, to, value);\n    }\n}\nfunction cmpRange(a, b) {\n    return a.from - b.from || a.value.startSide - b.value.startSide;\n}\nclass Chunk {\n    constructor(from, to, value, \n    // Chunks are marked with the largest point that occurs\n    // in them (or -1 for no points), so that scans that are\n    // only interested in points (such as the\n    // heightmap-related logic) can skip range-only chunks.\n    maxPoint) {\n        this.from = from;\n        this.to = to;\n        this.value = value;\n        this.maxPoint = maxPoint;\n    }\n    get length() { return this.to[this.to.length - 1]; }\n    // Find the index of the given position and side. Use the ranges'\n    // `from` pos when `end == false`, `to` when `end == true`.\n    findIndex(pos, side, end, startAt = 0) {\n        let arr = end ? this.to : this.from;\n        for (let lo = startAt, hi = arr.length;;) {\n            if (lo == hi)\n                return lo;\n            let mid = (lo + hi) >> 1;\n            let diff = arr[mid] - pos || (end ? this.value[mid].endSide : this.value[mid].startSide) - side;\n            if (mid == lo)\n                return diff >= 0 ? lo : hi;\n            if (diff >= 0)\n                hi = mid;\n            else\n                lo = mid + 1;\n        }\n    }\n    between(offset, from, to, f) {\n        for (let i = this.findIndex(from, -1000000000 /* C.Far */, true), e = this.findIndex(to, 1000000000 /* C.Far */, false, i); i < e; i++)\n            if (f(this.from[i] + offset, this.to[i] + offset, this.value[i]) === false)\n                return false;\n    }\n    map(offset, changes) {\n        let value = [], from = [], to = [], newPos = -1, maxPoint = -1;\n        for (let i = 0; i < this.value.length; i++) {\n            let val = this.value[i], curFrom = this.from[i] + offset, curTo = this.to[i] + offset, newFrom, newTo;\n            if (curFrom == curTo) {\n                let mapped = changes.mapPos(curFrom, val.startSide, val.mapMode);\n                if (mapped == null)\n                    continue;\n                newFrom = newTo = mapped;\n                if (val.startSide != val.endSide) {\n                    newTo = changes.mapPos(curFrom, val.endSide);\n                    if (newTo < newFrom)\n                        continue;\n                }\n            }\n            else {\n                newFrom = changes.mapPos(curFrom, val.startSide);\n                newTo = changes.mapPos(curTo, val.endSide);\n                if (newFrom > newTo || newFrom == newTo && val.startSide > 0 && val.endSide <= 0)\n                    continue;\n            }\n            if ((newTo - newFrom || val.endSide - val.startSide) < 0)\n                continue;\n            if (newPos < 0)\n                newPos = newFrom;\n            if (val.point)\n                maxPoint = Math.max(maxPoint, newTo - newFrom);\n            value.push(val);\n            from.push(newFrom - newPos);\n            to.push(newTo - newPos);\n        }\n        return { mapped: value.length ? new Chunk(from, to, value, maxPoint) : null, pos: newPos };\n    }\n}\n/**\nA range set stores a collection of [ranges](https://codemirror.net/6/docs/ref/#state.Range) in a\nway that makes them efficient to [map](https://codemirror.net/6/docs/ref/#state.RangeSet.map) and\n[update](https://codemirror.net/6/docs/ref/#state.RangeSet.update). This is an immutable data\nstructure.\n*/\nclass RangeSet {\n    constructor(\n    /**\n    @internal\n    */\n    chunkPos, \n    /**\n    @internal\n    */\n    chunk, \n    /**\n    @internal\n    */\n    nextLayer, \n    /**\n    @internal\n    */\n    maxPoint) {\n        this.chunkPos = chunkPos;\n        this.chunk = chunk;\n        this.nextLayer = nextLayer;\n        this.maxPoint = maxPoint;\n    }\n    /**\n    @internal\n    */\n    static create(chunkPos, chunk, nextLayer, maxPoint) {\n        return new RangeSet(chunkPos, chunk, nextLayer, maxPoint);\n    }\n    /**\n    @internal\n    */\n    get length() {\n        let last = this.chunk.length - 1;\n        return last < 0 ? 0 : Math.max(this.chunkEnd(last), this.nextLayer.length);\n    }\n    /**\n    The number of ranges in the set.\n    */\n    get size() {\n        if (this.isEmpty)\n            return 0;\n        let size = this.nextLayer.size;\n        for (let chunk of this.chunk)\n            size += chunk.value.length;\n        return size;\n    }\n    /**\n    @internal\n    */\n    chunkEnd(index) {\n        return this.chunkPos[index] + this.chunk[index].length;\n    }\n    /**\n    Update the range set, optionally adding new ranges or filtering\n    out existing ones.\n    \n    (Note: The type parameter is just there as a kludge to work\n    around TypeScript variance issues that prevented `RangeSet<X>`\n    from being a subtype of `RangeSet<Y>` when `X` is a subtype of\n    `Y`.)\n    */\n    update(updateSpec) {\n        let { add = [], sort = false, filterFrom = 0, filterTo = this.length } = updateSpec;\n        let filter = updateSpec.filter;\n        if (add.length == 0 && !filter)\n            return this;\n        if (sort)\n            add = add.slice().sort(cmpRange);\n        if (this.isEmpty)\n            return add.length ? RangeSet.of(add) : this;\n        let cur = new LayerCursor(this, null, -1).goto(0), i = 0, spill = [];\n        let builder = new RangeSetBuilder();\n        while (cur.value || i < add.length) {\n            if (i < add.length && (cur.from - add[i].from || cur.startSide - add[i].value.startSide) >= 0) {\n                let range = add[i++];\n                if (!builder.addInner(range.from, range.to, range.value))\n                    spill.push(range);\n            }\n            else if (cur.rangeIndex == 1 && cur.chunkIndex < this.chunk.length &&\n                (i == add.length || this.chunkEnd(cur.chunkIndex) < add[i].from) &&\n                (!filter || filterFrom > this.chunkEnd(cur.chunkIndex) || filterTo < this.chunkPos[cur.chunkIndex]) &&\n                builder.addChunk(this.chunkPos[cur.chunkIndex], this.chunk[cur.chunkIndex])) {\n                cur.nextChunk();\n            }\n            else {\n                if (!filter || filterFrom > cur.to || filterTo < cur.from || filter(cur.from, cur.to, cur.value)) {\n                    if (!builder.addInner(cur.from, cur.to, cur.value))\n                        spill.push(Range.create(cur.from, cur.to, cur.value));\n                }\n                cur.next();\n            }\n        }\n        return builder.finishInner(this.nextLayer.isEmpty && !spill.length ? RangeSet.empty\n            : this.nextLayer.update({ add: spill, filter, filterFrom, filterTo }));\n    }\n    /**\n    Map this range set through a set of changes, return the new set.\n    */\n    map(changes) {\n        if (changes.empty || this.isEmpty)\n            return this;\n        let chunks = [], chunkPos = [], maxPoint = -1;\n        for (let i = 0; i < this.chunk.length; i++) {\n            let start = this.chunkPos[i], chunk = this.chunk[i];\n            let touch = changes.touchesRange(start, start + chunk.length);\n            if (touch === false) {\n                maxPoint = Math.max(maxPoint, chunk.maxPoint);\n                chunks.push(chunk);\n                chunkPos.push(changes.mapPos(start));\n            }\n            else if (touch === true) {\n                let { mapped, pos } = chunk.map(start, changes);\n                if (mapped) {\n                    maxPoint = Math.max(maxPoint, mapped.maxPoint);\n                    chunks.push(mapped);\n                    chunkPos.push(pos);\n                }\n            }\n        }\n        let next = this.nextLayer.map(changes);\n        return chunks.length == 0 ? next : new RangeSet(chunkPos, chunks, next || RangeSet.empty, maxPoint);\n    }\n    /**\n    Iterate over the ranges that touch the region `from` to `to`,\n    calling `f` for each. There is no guarantee that the ranges will\n    be reported in any specific order. When the callback returns\n    `false`, iteration stops.\n    */\n    between(from, to, f) {\n        if (this.isEmpty)\n            return;\n        for (let i = 0; i < this.chunk.length; i++) {\n            let start = this.chunkPos[i], chunk = this.chunk[i];\n            if (to >= start && from <= start + chunk.length &&\n                chunk.between(start, from - start, to - start, f) === false)\n                return;\n        }\n        this.nextLayer.between(from, to, f);\n    }\n    /**\n    Iterate over the ranges in this set, in order, including all\n    ranges that end at or after `from`.\n    */\n    iter(from = 0) {\n        return HeapCursor.from([this]).goto(from);\n    }\n    /**\n    @internal\n    */\n    get isEmpty() { return this.nextLayer == this; }\n    /**\n    Iterate over the ranges in a collection of sets, in order,\n    starting from `from`.\n    */\n    static iter(sets, from = 0) {\n        return HeapCursor.from(sets).goto(from);\n    }\n    /**\n    Iterate over two groups of sets, calling methods on `comparator`\n    to notify it of possible differences.\n    */\n    static compare(oldSets, newSets, \n    /**\n    This indicates how the underlying data changed between these\n    ranges, and is needed to synchronize the iteration.\n    */\n    textDiff, comparator, \n    /**\n    Can be used to ignore all non-point ranges, and points below\n    the given size. When -1, all ranges are compared.\n    */\n    minPointSize = -1) {\n        let a = oldSets.filter(set => set.maxPoint > 0 || !set.isEmpty && set.maxPoint >= minPointSize);\n        let b = newSets.filter(set => set.maxPoint > 0 || !set.isEmpty && set.maxPoint >= minPointSize);\n        let sharedChunks = findSharedChunks(a, b, textDiff);\n        let sideA = new SpanCursor(a, sharedChunks, minPointSize);\n        let sideB = new SpanCursor(b, sharedChunks, minPointSize);\n        textDiff.iterGaps((fromA, fromB, length) => compare(sideA, fromA, sideB, fromB, length, comparator));\n        if (textDiff.empty && textDiff.length == 0)\n            compare(sideA, 0, sideB, 0, 0, comparator);\n    }\n    /**\n    Compare the contents of two groups of range sets, returning true\n    if they are equivalent in the given range.\n    */\n    static eq(oldSets, newSets, from = 0, to) {\n        if (to == null)\n            to = 1000000000 /* C.Far */ - 1;\n        let a = oldSets.filter(set => !set.isEmpty && newSets.indexOf(set) < 0);\n        let b = newSets.filter(set => !set.isEmpty && oldSets.indexOf(set) < 0);\n        if (a.length != b.length)\n            return false;\n        if (!a.length)\n            return true;\n        let sharedChunks = findSharedChunks(a, b);\n        let sideA = new SpanCursor(a, sharedChunks, 0).goto(from), sideB = new SpanCursor(b, sharedChunks, 0).goto(from);\n        for (;;) {\n            if (sideA.to != sideB.to ||\n                !sameValues(sideA.active, sideB.active) ||\n                sideA.point && (!sideB.point || !cmpVal(sideA.point, sideB.point)))\n                return false;\n            if (sideA.to > to)\n                return true;\n            sideA.next();\n            sideB.next();\n        }\n    }\n    /**\n    Iterate over a group of range sets at the same time, notifying\n    the iterator about the ranges covering every given piece of\n    content. Returns the open count (see\n    [`SpanIterator.span`](https://codemirror.net/6/docs/ref/#state.SpanIterator.span)) at the end\n    of the iteration.\n    */\n    static spans(sets, from, to, iterator, \n    /**\n    When given and greater than -1, only points of at least this\n    size are taken into account.\n    */\n    minPointSize = -1) {\n        let cursor = new SpanCursor(sets, null, minPointSize).goto(from), pos = from;\n        let openRanges = cursor.openStart;\n        for (;;) {\n            let curTo = Math.min(cursor.to, to);\n            if (cursor.point) {\n                let active = cursor.activeForPoint(cursor.to);\n                let openCount = cursor.pointFrom < from ? active.length + 1\n                    : cursor.point.startSide < 0 ? active.length\n                        : Math.min(active.length, openRanges);\n                iterator.point(pos, curTo, cursor.point, active, openCount, cursor.pointRank);\n                openRanges = Math.min(cursor.openEnd(curTo), active.length);\n            }\n            else if (curTo > pos) {\n                iterator.span(pos, curTo, cursor.active, openRanges);\n                openRanges = cursor.openEnd(curTo);\n            }\n            if (cursor.to > to)\n                return openRanges + (cursor.point && cursor.to > to ? 1 : 0);\n            pos = cursor.to;\n            cursor.next();\n        }\n    }\n    /**\n    Create a range set for the given range or array of ranges. By\n    default, this expects the ranges to be _sorted_ (by start\n    position and, if two start at the same position,\n    `value.startSide`). You can pass `true` as second argument to\n    cause the method to sort them.\n    */\n    static of(ranges, sort = false) {\n        let build = new RangeSetBuilder();\n        for (let range of ranges instanceof Range ? [ranges] : sort ? lazySort(ranges) : ranges)\n            build.add(range.from, range.to, range.value);\n        return build.finish();\n    }\n    /**\n    Join an array of range sets into a single set.\n    */\n    static join(sets) {\n        if (!sets.length)\n            return RangeSet.empty;\n        let result = sets[sets.length - 1];\n        for (let i = sets.length - 2; i >= 0; i--) {\n            for (let layer = sets[i]; layer != RangeSet.empty; layer = layer.nextLayer)\n                result = new RangeSet(layer.chunkPos, layer.chunk, result, Math.max(layer.maxPoint, result.maxPoint));\n        }\n        return result;\n    }\n}\n/**\nThe empty set of ranges.\n*/\nRangeSet.empty = /*@__PURE__*/new RangeSet([], [], null, -1);\nfunction lazySort(ranges) {\n    if (ranges.length > 1)\n        for (let prev = ranges[0], i = 1; i < ranges.length; i++) {\n            let cur = ranges[i];\n            if (cmpRange(prev, cur) > 0)\n                return ranges.slice().sort(cmpRange);\n            prev = cur;\n        }\n    return ranges;\n}\nRangeSet.empty.nextLayer = RangeSet.empty;\n/**\nA range set builder is a data structure that helps build up a\n[range set](https://codemirror.net/6/docs/ref/#state.RangeSet) directly, without first allocating\nan array of [`Range`](https://codemirror.net/6/docs/ref/#state.Range) objects.\n*/\nclass RangeSetBuilder {\n    finishChunk(newArrays) {\n        this.chunks.push(new Chunk(this.from, this.to, this.value, this.maxPoint));\n        this.chunkPos.push(this.chunkStart);\n        this.chunkStart = -1;\n        this.setMaxPoint = Math.max(this.setMaxPoint, this.maxPoint);\n        this.maxPoint = -1;\n        if (newArrays) {\n            this.from = [];\n            this.to = [];\n            this.value = [];\n        }\n    }\n    /**\n    Create an empty builder.\n    */\n    constructor() {\n        this.chunks = [];\n        this.chunkPos = [];\n        this.chunkStart = -1;\n        this.last = null;\n        this.lastFrom = -1000000000 /* C.Far */;\n        this.lastTo = -1000000000 /* C.Far */;\n        this.from = [];\n        this.to = [];\n        this.value = [];\n        this.maxPoint = -1;\n        this.setMaxPoint = -1;\n        this.nextLayer = null;\n    }\n    /**\n    Add a range. Ranges should be added in sorted (by `from` and\n    `value.startSide`) order.\n    */\n    add(from, to, value) {\n        if (!this.addInner(from, to, value))\n            (this.nextLayer || (this.nextLayer = new RangeSetBuilder)).add(from, to, value);\n    }\n    /**\n    @internal\n    */\n    addInner(from, to, value) {\n        let diff = from - this.lastTo || value.startSide - this.last.endSide;\n        if (diff <= 0 && (from - this.lastFrom || value.startSide - this.last.startSide) < 0)\n            throw new Error(\"Ranges must be added sorted by `from` position and `startSide`\");\n        if (diff < 0)\n            return false;\n        if (this.from.length == 250 /* C.ChunkSize */)\n            this.finishChunk(true);\n        if (this.chunkStart < 0)\n            this.chunkStart = from;\n        this.from.push(from - this.chunkStart);\n        this.to.push(to - this.chunkStart);\n        this.last = value;\n        this.lastFrom = from;\n        this.lastTo = to;\n        this.value.push(value);\n        if (value.point)\n            this.maxPoint = Math.max(this.maxPoint, to - from);\n        return true;\n    }\n    /**\n    @internal\n    */\n    addChunk(from, chunk) {\n        if ((from - this.lastTo || chunk.value[0].startSide - this.last.endSide) < 0)\n            return false;\n        if (this.from.length)\n            this.finishChunk(true);\n        this.setMaxPoint = Math.max(this.setMaxPoint, chunk.maxPoint);\n        this.chunks.push(chunk);\n        this.chunkPos.push(from);\n        let last = chunk.value.length - 1;\n        this.last = chunk.value[last];\n        this.lastFrom = chunk.from[last] + from;\n        this.lastTo = chunk.to[last] + from;\n        return true;\n    }\n    /**\n    Finish the range set. Returns the new set. The builder can't be\n    used anymore after this has been called.\n    */\n    finish() { return this.finishInner(RangeSet.empty); }\n    /**\n    @internal\n    */\n    finishInner(next) {\n        if (this.from.length)\n            this.finishChunk(false);\n        if (this.chunks.length == 0)\n            return next;\n        let result = RangeSet.create(this.chunkPos, this.chunks, this.nextLayer ? this.nextLayer.finishInner(next) : next, this.setMaxPoint);\n        this.from = null; // Make sure further `add` calls produce errors\n        return result;\n    }\n}\nfunction findSharedChunks(a, b, textDiff) {\n    let inA = new Map();\n    for (let set of a)\n        for (let i = 0; i < set.chunk.length; i++)\n            if (set.chunk[i].maxPoint <= 0)\n                inA.set(set.chunk[i], set.chunkPos[i]);\n    let shared = new Set();\n    for (let set of b)\n        for (let i = 0; i < set.chunk.length; i++) {\n            let known = inA.get(set.chunk[i]);\n            if (known != null && (textDiff ? textDiff.mapPos(known) : known) == set.chunkPos[i] &&\n                !(textDiff === null || textDiff === void 0 ? void 0 : textDiff.touchesRange(known, known + set.chunk[i].length)))\n                shared.add(set.chunk[i]);\n        }\n    return shared;\n}\nclass LayerCursor {\n    constructor(layer, skip, minPoint, rank = 0) {\n        this.layer = layer;\n        this.skip = skip;\n        this.minPoint = minPoint;\n        this.rank = rank;\n    }\n    get startSide() { return this.value ? this.value.startSide : 0; }\n    get endSide() { return this.value ? this.value.endSide : 0; }\n    goto(pos, side = -1000000000 /* C.Far */) {\n        this.chunkIndex = this.rangeIndex = 0;\n        this.gotoInner(pos, side, false);\n        return this;\n    }\n    gotoInner(pos, side, forward) {\n        while (this.chunkIndex < this.layer.chunk.length) {\n            let next = this.layer.chunk[this.chunkIndex];\n            if (!(this.skip && this.skip.has(next) ||\n                this.layer.chunkEnd(this.chunkIndex) < pos ||\n                next.maxPoint < this.minPoint))\n                break;\n            this.chunkIndex++;\n            forward = false;\n        }\n        if (this.chunkIndex < this.layer.chunk.length) {\n            let rangeIndex = this.layer.chunk[this.chunkIndex].findIndex(pos - this.layer.chunkPos[this.chunkIndex], side, true);\n            if (!forward || this.rangeIndex < rangeIndex)\n                this.setRangeIndex(rangeIndex);\n        }\n        this.next();\n    }\n    forward(pos, side) {\n        if ((this.to - pos || this.endSide - side) < 0)\n            this.gotoInner(pos, side, true);\n    }\n    next() {\n        for (;;) {\n            if (this.chunkIndex == this.layer.chunk.length) {\n                this.from = this.to = 1000000000 /* C.Far */;\n                this.value = null;\n                break;\n            }\n            else {\n                let chunkPos = this.layer.chunkPos[this.chunkIndex], chunk = this.layer.chunk[this.chunkIndex];\n                let from = chunkPos + chunk.from[this.rangeIndex];\n                this.from = from;\n                this.to = chunkPos + chunk.to[this.rangeIndex];\n                this.value = chunk.value[this.rangeIndex];\n                this.setRangeIndex(this.rangeIndex + 1);\n                if (this.minPoint < 0 || this.value.point && this.to - this.from >= this.minPoint)\n                    break;\n            }\n        }\n    }\n    setRangeIndex(index) {\n        if (index == this.layer.chunk[this.chunkIndex].value.length) {\n            this.chunkIndex++;\n            if (this.skip) {\n                while (this.chunkIndex < this.layer.chunk.length && this.skip.has(this.layer.chunk[this.chunkIndex]))\n                    this.chunkIndex++;\n            }\n            this.rangeIndex = 0;\n        }\n        else {\n            this.rangeIndex = index;\n        }\n    }\n    nextChunk() {\n        this.chunkIndex++;\n        this.rangeIndex = 0;\n        this.next();\n    }\n    compare(other) {\n        return this.from - other.from || this.startSide - other.startSide || this.rank - other.rank ||\n            this.to - other.to || this.endSide - other.endSide;\n    }\n}\nclass HeapCursor {\n    constructor(heap) {\n        this.heap = heap;\n    }\n    static from(sets, skip = null, minPoint = -1) {\n        let heap = [];\n        for (let i = 0; i < sets.length; i++) {\n            for (let cur = sets[i]; !cur.isEmpty; cur = cur.nextLayer) {\n                if (cur.maxPoint >= minPoint)\n                    heap.push(new LayerCursor(cur, skip, minPoint, i));\n            }\n        }\n        return heap.length == 1 ? heap[0] : new HeapCursor(heap);\n    }\n    get startSide() { return this.value ? this.value.startSide : 0; }\n    goto(pos, side = -1000000000 /* C.Far */) {\n        for (let cur of this.heap)\n            cur.goto(pos, side);\n        for (let i = this.heap.length >> 1; i >= 0; i--)\n            heapBubble(this.heap, i);\n        this.next();\n        return this;\n    }\n    forward(pos, side) {\n        for (let cur of this.heap)\n            cur.forward(pos, side);\n        for (let i = this.heap.length >> 1; i >= 0; i--)\n            heapBubble(this.heap, i);\n        if ((this.to - pos || this.value.endSide - side) < 0)\n            this.next();\n    }\n    next() {\n        if (this.heap.length == 0) {\n            this.from = this.to = 1000000000 /* C.Far */;\n            this.value = null;\n            this.rank = -1;\n        }\n        else {\n            let top = this.heap[0];\n            this.from = top.from;\n            this.to = top.to;\n            this.value = top.value;\n            this.rank = top.rank;\n            if (top.value)\n                top.next();\n            heapBubble(this.heap, 0);\n        }\n    }\n}\nfunction heapBubble(heap, index) {\n    for (let cur = heap[index];;) {\n        let childIndex = (index << 1) + 1;\n        if (childIndex >= heap.length)\n            break;\n        let child = heap[childIndex];\n        if (childIndex + 1 < heap.length && child.compare(heap[childIndex + 1]) >= 0) {\n            child = heap[childIndex + 1];\n            childIndex++;\n        }\n        if (cur.compare(child) < 0)\n            break;\n        heap[childIndex] = cur;\n        heap[index] = child;\n        index = childIndex;\n    }\n}\nclass SpanCursor {\n    constructor(sets, skip, minPoint) {\n        this.minPoint = minPoint;\n        this.active = [];\n        this.activeTo = [];\n        this.activeRank = [];\n        this.minActive = -1;\n        // A currently active point range, if any\n        this.point = null;\n        this.pointFrom = 0;\n        this.pointRank = 0;\n        this.to = -1000000000 /* C.Far */;\n        this.endSide = 0;\n        // The amount of open active ranges at the start of the iterator.\n        // Not including points.\n        this.openStart = -1;\n        this.cursor = HeapCursor.from(sets, skip, minPoint);\n    }\n    goto(pos, side = -1000000000 /* C.Far */) {\n        this.cursor.goto(pos, side);\n        this.active.length = this.activeTo.length = this.activeRank.length = 0;\n        this.minActive = -1;\n        this.to = pos;\n        this.endSide = side;\n        this.openStart = -1;\n        this.next();\n        return this;\n    }\n    forward(pos, side) {\n        while (this.minActive > -1 && (this.activeTo[this.minActive] - pos || this.active[this.minActive].endSide - side) < 0)\n            this.removeActive(this.minActive);\n        this.cursor.forward(pos, side);\n    }\n    removeActive(index) {\n        remove(this.active, index);\n        remove(this.activeTo, index);\n        remove(this.activeRank, index);\n        this.minActive = findMinIndex(this.active, this.activeTo);\n    }\n    addActive(trackOpen) {\n        let i = 0, { value, to, rank } = this.cursor;\n        // Organize active marks by rank first, then by size\n        while (i < this.activeRank.length && (rank - this.activeRank[i] || to - this.activeTo[i]) > 0)\n            i++;\n        insert(this.active, i, value);\n        insert(this.activeTo, i, to);\n        insert(this.activeRank, i, rank);\n        if (trackOpen)\n            insert(trackOpen, i, this.cursor.from);\n        this.minActive = findMinIndex(this.active, this.activeTo);\n    }\n    // After calling this, if `this.point` != null, the next range is a\n    // point. Otherwise, it's a regular range, covered by `this.active`.\n    next() {\n        let from = this.to, wasPoint = this.point;\n        this.point = null;\n        let trackOpen = this.openStart < 0 ? [] : null;\n        for (;;) {\n            let a = this.minActive;\n            if (a > -1 && (this.activeTo[a] - this.cursor.from || this.active[a].endSide - this.cursor.startSide) < 0) {\n                if (this.activeTo[a] > from) {\n                    this.to = this.activeTo[a];\n                    this.endSide = this.active[a].endSide;\n                    break;\n                }\n                this.removeActive(a);\n                if (trackOpen)\n                    remove(trackOpen, a);\n            }\n            else if (!this.cursor.value) {\n                this.to = this.endSide = 1000000000 /* C.Far */;\n                break;\n            }\n            else if (this.cursor.from > from) {\n                this.to = this.cursor.from;\n                this.endSide = this.cursor.startSide;\n                break;\n            }\n            else {\n                let nextVal = this.cursor.value;\n                if (!nextVal.point) { // Opening a range\n                    this.addActive(trackOpen);\n                    this.cursor.next();\n                }\n                else if (wasPoint && this.cursor.to == this.to && this.cursor.from < this.cursor.to) {\n                    // Ignore any non-empty points that end precisely at the end of the prev point\n                    this.cursor.next();\n                }\n                else { // New point\n                    this.point = nextVal;\n                    this.pointFrom = this.cursor.from;\n                    this.pointRank = this.cursor.rank;\n                    this.to = this.cursor.to;\n                    this.endSide = nextVal.endSide;\n                    this.cursor.next();\n                    this.forward(this.to, this.endSide);\n                    break;\n                }\n            }\n        }\n        if (trackOpen) {\n            this.openStart = 0;\n            for (let i = trackOpen.length - 1; i >= 0 && trackOpen[i] < from; i--)\n                this.openStart++;\n        }\n    }\n    activeForPoint(to) {\n        if (!this.active.length)\n            return this.active;\n        let active = [];\n        for (let i = this.active.length - 1; i >= 0; i--) {\n            if (this.activeRank[i] < this.pointRank)\n                break;\n            if (this.activeTo[i] > to || this.activeTo[i] == to && this.active[i].endSide >= this.point.endSide)\n                active.push(this.active[i]);\n        }\n        return active.reverse();\n    }\n    openEnd(to) {\n        let open = 0;\n        for (let i = this.activeTo.length - 1; i >= 0 && this.activeTo[i] > to; i--)\n            open++;\n        return open;\n    }\n}\nfunction compare(a, startA, b, startB, length, comparator) {\n    a.goto(startA);\n    b.goto(startB);\n    let endB = startB + length;\n    let pos = startB, dPos = startB - startA;\n    let bounds = !!comparator.boundChange;\n    for (let boundChange = false;;) {\n        let dEnd = (a.to + dPos) - b.to, diff = dEnd || a.endSide - b.endSide;\n        let end = diff < 0 ? a.to + dPos : b.to, clipEnd = Math.min(end, endB);\n        let point = a.point || b.point;\n        if (point) {\n            if (!(a.point && b.point && cmpVal(a.point, b.point) &&\n                sameValues(a.activeForPoint(a.to), b.activeForPoint(b.to))))\n                comparator.comparePoint(pos, clipEnd, a.point, b.point);\n            boundChange = false;\n        }\n        else {\n            if (boundChange)\n                comparator.boundChange(pos);\n            if (clipEnd > pos && !sameValues(a.active, b.active))\n                comparator.compareRange(pos, clipEnd, a.active, b.active);\n            if (bounds && clipEnd < endB && (dEnd || a.openEnd(end) != b.openEnd(end)))\n                boundChange = true;\n        }\n        if (end > endB)\n            break;\n        pos = end;\n        if (diff <= 0)\n            a.next();\n        if (diff >= 0)\n            b.next();\n    }\n}\nfunction sameValues(a, b) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (a[i] != b[i] && !cmpVal(a[i], b[i]))\n            return false;\n    return true;\n}\nfunction remove(array, index) {\n    for (let i = index, e = array.length - 1; i < e; i++)\n        array[i] = array[i + 1];\n    array.pop();\n}\nfunction insert(array, index, value) {\n    for (let i = array.length - 1; i >= index; i--)\n        array[i + 1] = array[i];\n    array[index] = value;\n}\nfunction findMinIndex(value, array) {\n    let found = -1, foundPos = 1000000000 /* C.Far */;\n    for (let i = 0; i < array.length; i++)\n        if ((array[i] - foundPos || value[i].endSide - value[found].endSide) < 0) {\n            found = i;\n            foundPos = array[i];\n        }\n    return found;\n}\n\n/**\nCount the column position at the given offset into the string,\ntaking extending characters and tab size into account.\n*/\nfunction countColumn(string, tabSize, to = string.length) {\n    let n = 0;\n    for (let i = 0; i < to && i < string.length;) {\n        if (string.charCodeAt(i) == 9) {\n            n += tabSize - (n % tabSize);\n            i++;\n        }\n        else {\n            n++;\n            i = findClusterBreak(string, i);\n        }\n    }\n    return n;\n}\n/**\nFind the offset that corresponds to the given column position in a\nstring, taking extending characters and tab size into account. By\ndefault, the string length is returned when it is too short to\nreach the column. Pass `strict` true to make it return -1 in that\nsituation.\n*/\nfunction findColumn(string, col, tabSize, strict) {\n    for (let i = 0, n = 0;;) {\n        if (n >= col)\n            return i;\n        if (i == string.length)\n            break;\n        n += string.charCodeAt(i) == 9 ? tabSize - (n % tabSize) : 1;\n        i = findClusterBreak(string, i);\n    }\n    return strict === true ? -1 : string.length;\n}\n\nexport { Annotation, AnnotationType, ChangeDesc, ChangeSet, CharCategory, Compartment, EditorSelection, EditorState, Facet, Line, MapMode, Prec, Range, RangeSet, RangeSetBuilder, RangeValue, SelectionRange, StateEffect, StateEffectType, StateField, Text, Transaction, codePointAt, codePointSize, combineConfig, countColumn, findClusterBreak, findColumn, fromCodePoint };\n","const C = \"\\u037c\"\nconst COUNT = typeof Symbol == \"undefined\" ? \"__\" + C : Symbol.for(C)\nconst SET = typeof Symbol == \"undefined\" ? \"__styleSet\" + Math.floor(Math.random() * 1e8) : Symbol(\"styleSet\")\nconst top = typeof globalThis != \"undefined\" ? globalThis : typeof window != \"undefined\" ? window : {}\n\n// :: - Style modules encapsulate a set of CSS rules defined from\n// JavaScript. Their definitions are only available in a given DOM\n// root after it has been _mounted_ there with `StyleModule.mount`.\n//\n// Style modules should be created once and stored somewhere, as\n// opposed to re-creating them every time you need them. The amount of\n// CSS rules generated for a given DOM root is bounded by the amount\n// of style modules that were used. So to avoid leaking rules, don't\n// create these dynamically, but treat them as one-time allocations.\nexport class StyleModule {\n  // :: (Object<Style>, ?{finish: ?(string) → string})\n  // Create a style module from the given spec.\n  //\n  // When `finish` is given, it is called on regular (non-`@`)\n  // selectors (after `&` expansion) to compute the final selector.\n  constructor(spec, options) {\n    this.rules = []\n    let {finish} = options || {}\n\n    function splitSelector(selector) {\n      return /^@/.test(selector) ? [selector] : selector.split(/,\\s*/)\n    }\n\n    function render(selectors, spec, target, isKeyframes) {\n      let local = [], isAt = /^@(\\w+)\\b/.exec(selectors[0]), keyframes = isAt && isAt[1] == \"keyframes\"\n      if (isAt && spec == null) return target.push(selectors[0] + \";\")\n      for (let prop in spec) {\n        let value = spec[prop]\n        if (/&/.test(prop)) {\n          render(prop.split(/,\\s*/).map(part => selectors.map(sel => part.replace(/&/, sel))).reduce((a, b) => a.concat(b)),\n                 value, target)\n        } else if (value && typeof value == \"object\") {\n          if (!isAt) throw new RangeError(\"The value of a property (\" + prop + \") should be a primitive value.\")\n          render(splitSelector(prop), value, local, keyframes)\n        } else if (value != null) {\n          local.push(prop.replace(/_.*/, \"\").replace(/[A-Z]/g, l => \"-\" + l.toLowerCase()) + \": \" + value + \";\")\n        }\n      }\n      if (local.length || keyframes) {\n        target.push((finish && !isAt && !isKeyframes ? selectors.map(finish) : selectors).join(\", \") +\n                    \" {\" + local.join(\" \") + \"}\")\n      }\n    }\n\n    for (let prop in spec) render(splitSelector(prop), spec[prop], this.rules)\n  }\n\n  // :: () → string\n  // Returns a string containing the module's CSS rules.\n  getRules() { return this.rules.join(\"\\n\") }\n\n  // :: () → string\n  // Generate a new unique CSS class name.\n  static newName() {\n    let id = top[COUNT] || 1\n    top[COUNT] = id + 1\n    return C + id.toString(36)\n  }\n\n  // :: (union<Document, ShadowRoot>, union<[StyleModule], StyleModule>, ?{nonce: ?string})\n  //\n  // Mount the given set of modules in the given DOM root, which ensures\n  // that the CSS rules defined by the module are available in that\n  // context.\n  //\n  // Rules are only added to the document once per root.\n  //\n  // Rule order will follow the order of the modules, so that rules from\n  // modules later in the array take precedence of those from earlier\n  // modules. If you call this function multiple times for the same root\n  // in a way that changes the order of already mounted modules, the old\n  // order will be changed.\n  //\n  // If a Content Security Policy nonce is provided, it is added to\n  // the `<style>` tag generated by the library.\n  static mount(root, modules, options) {\n    let set = root[SET], nonce = options && options.nonce\n    if (!set) set = new StyleSet(root, nonce)\n    else if (nonce) set.setNonce(nonce)\n    set.mount(Array.isArray(modules) ? modules : [modules], root)\n  }\n}\n\nlet adoptedSet = new Map //<Document, StyleSet>\n\nclass StyleSet {\n  constructor(root, nonce) {\n    let doc = root.ownerDocument || root, win = doc.defaultView\n    if (!root.head && root.adoptedStyleSheets && win.CSSStyleSheet) {\n      let adopted = adoptedSet.get(doc)\n      if (adopted) return root[SET] = adopted\n      this.sheet = new win.CSSStyleSheet\n      adoptedSet.set(doc, this)\n    } else {\n      this.styleTag = doc.createElement(\"style\")\n      if (nonce) this.styleTag.setAttribute(\"nonce\", nonce)\n    }\n    this.modules = []\n    root[SET] = this\n  }\n\n  mount(modules, root) {\n    let sheet = this.sheet\n    let pos = 0 /* Current rule offset */, j = 0 /* Index into this.modules */\n    for (let i = 0; i < modules.length; i++) {\n      let mod = modules[i], index = this.modules.indexOf(mod)\n      if (index < j && index > -1) { // Ordering conflict\n        this.modules.splice(index, 1)\n        j--\n        index = -1\n      }\n      if (index == -1) {\n        this.modules.splice(j++, 0, mod)\n        if (sheet) for (let k = 0; k < mod.rules.length; k++)\n          sheet.insertRule(mod.rules[k], pos++)\n      } else {\n        while (j < index) pos += this.modules[j++].rules.length\n        pos += mod.rules.length\n        j++\n      }\n    }\n\n    if (sheet) {\n      if (root.adoptedStyleSheets.indexOf(this.sheet) < 0)\n        root.adoptedStyleSheets = [this.sheet, ...root.adoptedStyleSheets]\n    } else {\n      let text = \"\"\n      for (let i = 0; i < this.modules.length; i++)\n        text += this.modules[i].getRules() + \"\\n\"\n      this.styleTag.textContent = text\n      let target = root.head || root\n      if (this.styleTag.parentNode != target)\n        target.insertBefore(this.styleTag, target.firstChild)\n    }\n  }\n\n  setNonce(nonce) {\n    if (this.styleTag && this.styleTag.getAttribute(\"nonce\") != nonce)\n      this.styleTag.setAttribute(\"nonce\", nonce)\n  }\n}\n\n// Style::Object<union<Style,string>>\n//\n// A style is an object that, in the simple case, maps CSS property\n// names to strings holding their values, as in `{color: \"red\",\n// fontWeight: \"bold\"}`. The property names can be given in\n// camel-case—the library will insert a dash before capital letters\n// when converting them to CSS.\n//\n// If you include an underscore in a property name, it and everything\n// after it will be removed from the output, which can be useful when\n// providing a property multiple times, for browser compatibility\n// reasons.\n//\n// A property in a style object can also be a sub-selector, which\n// extends the current context to add a pseudo-selector or a child\n// selector. Such a property should contain a `&` character, which\n// will be replaced by the current selector. For example `{\"&:before\":\n// {content: '\"hi\"'}}`. Sub-selectors and regular properties can\n// freely be mixed in a given object. Any property containing a `&` is\n// assumed to be a sub-selector.\n//\n// Finally, a property can specify an @-block to be wrapped around the\n// styles defined inside the object that's the property's value. For\n// example to create a media query you can do `{\"@media screen and\n// (min-width: 400px)\": {...}}`.\n","export var base = {\n  8: \"Backspace\",\n  9: \"Tab\",\n  10: \"Enter\",\n  12: \"NumLock\",\n  13: \"Enter\",\n  16: \"Shift\",\n  17: \"Control\",\n  18: \"Alt\",\n  20: \"CapsLock\",\n  27: \"Escape\",\n  32: \" \",\n  33: \"PageUp\",\n  34: \"PageDown\",\n  35: \"End\",\n  36: \"Home\",\n  37: \"ArrowLeft\",\n  38: \"ArrowUp\",\n  39: \"ArrowRight\",\n  40: \"ArrowDown\",\n  44: \"PrintScreen\",\n  45: \"Insert\",\n  46: \"Delete\",\n  59: \";\",\n  61: \"=\",\n  91: \"Meta\",\n  92: \"Meta\",\n  106: \"*\",\n  107: \"+\",\n  108: \",\",\n  109: \"-\",\n  110: \".\",\n  111: \"/\",\n  144: \"NumLock\",\n  145: \"ScrollLock\",\n  160: \"Shift\",\n  161: \"Shift\",\n  162: \"Control\",\n  163: \"Control\",\n  164: \"Alt\",\n  165: \"Alt\",\n  173: \"-\",\n  186: \";\",\n  187: \"=\",\n  188: \",\",\n  189: \"-\",\n  190: \".\",\n  191: \"/\",\n  192: \"`\",\n  219: \"[\",\n  220: \"\\\\\",\n  221: \"]\",\n  222: \"'\"\n}\n\nexport var shift = {\n  48: \")\",\n  49: \"!\",\n  50: \"@\",\n  51: \"#\",\n  52: \"$\",\n  53: \"%\",\n  54: \"^\",\n  55: \"&\",\n  56: \"*\",\n  57: \"(\",\n  59: \":\",\n  61: \"+\",\n  173: \"_\",\n  186: \":\",\n  187: \"+\",\n  188: \"<\",\n  189: \"_\",\n  190: \">\",\n  191: \"?\",\n  192: \"~\",\n  219: \"{\",\n  220: \"|\",\n  221: \"}\",\n  222: \"\\\"\"\n}\n\nvar mac = typeof navigator != \"undefined\" && /Mac/.test(navigator.platform)\nvar ie = typeof navigator != \"undefined\" && /MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent)\n\n// Fill in the digit keys\nfor (var i = 0; i < 10; i++) base[48 + i] = base[96 + i] = String(i)\n\n// The function keys\nfor (var i = 1; i <= 24; i++) base[i + 111] = \"F\" + i\n\n// And the alphabetic keys\nfor (var i = 65; i <= 90; i++) {\n  base[i] = String.fromCharCode(i + 32)\n  shift[i] = String.fromCharCode(i)\n}\n\n// For each code that doesn't have a shift-equivalent, copy the base name\nfor (var code in base) if (!shift.hasOwnProperty(code)) shift[code] = base[code]\n\nexport function keyName(event) {\n  // On macOS, keys held with Shift and Cmd don't reflect the effect of Shift in `.key`.\n  // On IE, shift effect is never included in `.key`.\n  var ignoreKey = mac && event.metaKey && event.shiftKey && !event.ctrlKey && !event.altKey ||\n      ie && event.shiftKey && event.key && event.key.length == 1 ||\n      event.key == \"Unidentified\"\n  var name = (!ignoreKey && event.key) ||\n    (event.shiftKey ? shift : base)[event.keyCode] ||\n    event.key || \"Unidentified\"\n  // Edge sometimes produces wrong names (Issue #3)\n  if (name == \"Esc\") name = \"Escape\"\n  if (name == \"Del\") name = \"Delete\"\n  // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8860571/\n  if (name == \"Left\") name = \"ArrowLeft\"\n  if (name == \"Up\") name = \"ArrowUp\"\n  if (name == \"Right\") name = \"ArrowRight\"\n  if (name == \"Down\") name = \"ArrowDown\"\n  return name\n}\n","export default function crelt() {\n  var elt = arguments[0]\n  if (typeof elt == \"string\") elt = document.createElement(elt)\n  var i = 1, next = arguments[1]\n  if (next && typeof next == \"object\" && next.nodeType == null && !Array.isArray(next)) {\n    for (var name in next) if (Object.prototype.hasOwnProperty.call(next, name)) {\n      var value = next[name]\n      if (typeof value == \"string\") elt.setAttribute(name, value)\n      else if (value != null) elt[name] = value\n    }\n    i++\n  }\n  for (; i < arguments.length; i++) add(elt, arguments[i])\n  return elt\n}\n\nfunction add(elt, child) {\n  if (typeof child == \"string\") {\n    elt.appendChild(document.createTextNode(child))\n  } else if (child == null) {\n  } else if (child.nodeType != null) {\n    elt.appendChild(child)\n  } else if (Array.isArray(child)) {\n    for (var i = 0; i < child.length; i++) add(elt, child[i])\n  } else {\n    throw new RangeError(\"Unsupported child node: \" + child)\n  }\n}\n","import { RangeSet, MapMode, RangeValue, findClusterBreak, EditorSelection, Facet, StateEffect, ChangeSet, Text, findColumn, CharCategory, EditorState, Annotation, Transaction, Prec, codePointAt, codePointSize, combineConfig, StateField, RangeSetBuilder, countColumn } from '@codemirror/state';\nimport { StyleModule } from 'style-mod';\nimport { keyName, base, shift } from 'w3c-keyname';\nimport elt from 'crelt';\n\nlet nav = typeof navigator != \"undefined\" ? navigator : { userAgent: \"\", vendor: \"\", platform: \"\" };\nlet doc = typeof document != \"undefined\" ? document : { documentElement: { style: {} } };\nconst ie_edge = /*@__PURE__*//Edge\\/(\\d+)/.exec(nav.userAgent);\nconst ie_upto10 = /*@__PURE__*//MSIE \\d/.test(nav.userAgent);\nconst ie_11up = /*@__PURE__*//Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(nav.userAgent);\nconst ie = !!(ie_upto10 || ie_11up || ie_edge);\nconst gecko = !ie && /*@__PURE__*//gecko\\/(\\d+)/i.test(nav.userAgent);\nconst chrome = !ie && /*@__PURE__*//Chrome\\/(\\d+)/.exec(nav.userAgent);\nconst webkit = \"webkitFontSmoothing\" in doc.documentElement.style;\nconst safari = !ie && /*@__PURE__*//Apple Computer/.test(nav.vendor);\nconst ios = safari && (/*@__PURE__*//Mobile\\/\\w+/.test(nav.userAgent) || nav.maxTouchPoints > 2);\nvar browser = {\n    mac: ios || /*@__PURE__*//Mac/.test(nav.platform),\n    windows: /*@__PURE__*//Win/.test(nav.platform),\n    linux: /*@__PURE__*//Linux|X11/.test(nav.platform),\n    ie,\n    ie_version: ie_upto10 ? doc.documentMode || 6 : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0,\n    gecko,\n    gecko_version: gecko ? +(/*@__PURE__*//Firefox\\/(\\d+)/.exec(nav.userAgent) || [0, 0])[1] : 0,\n    chrome: !!chrome,\n    chrome_version: chrome ? +chrome[1] : 0,\n    ios,\n    android: /*@__PURE__*//Android\\b/.test(nav.userAgent),\n    webkit,\n    webkit_version: webkit ? +(/*@__PURE__*//\\bAppleWebKit\\/(\\d+)/.exec(nav.userAgent) || [0, 0])[1] : 0,\n    safari,\n    safari_version: safari ? +(/*@__PURE__*//\\bVersion\\/(\\d+(\\.\\d+)?)/.exec(nav.userAgent) || [0, 0])[1] : 0,\n    tabSize: doc.documentElement.style.tabSize != null ? \"tab-size\" : \"-moz-tab-size\"\n};\n\nfunction combineAttrs(source, target) {\n    for (let name in source) {\n        if (name == \"class\" && target.class)\n            target.class += \" \" + source.class;\n        else if (name == \"style\" && target.style)\n            target.style += \";\" + source.style;\n        else\n            target[name] = source[name];\n    }\n    return target;\n}\nconst noAttrs = /*@__PURE__*/Object.create(null);\nfunction attrsEq(a, b, ignore) {\n    if (a == b)\n        return true;\n    if (!a)\n        a = noAttrs;\n    if (!b)\n        b = noAttrs;\n    let keysA = Object.keys(a), keysB = Object.keys(b);\n    if (keysA.length - (ignore && keysA.indexOf(ignore) > -1 ? 1 : 0) !=\n        keysB.length - (ignore && keysB.indexOf(ignore) > -1 ? 1 : 0))\n        return false;\n    for (let key of keysA) {\n        if (key != ignore && (keysB.indexOf(key) == -1 || a[key] !== b[key]))\n            return false;\n    }\n    return true;\n}\nfunction setAttrs(dom, attrs) {\n    for (let i = dom.attributes.length - 1; i >= 0; i--) {\n        let name = dom.attributes[i].name;\n        if (attrs[name] == null)\n            dom.removeAttribute(name);\n    }\n    for (let name in attrs) {\n        let value = attrs[name];\n        if (name == \"style\")\n            dom.style.cssText = value;\n        else if (dom.getAttribute(name) != value)\n            dom.setAttribute(name, value);\n    }\n}\nfunction updateAttrs(dom, prev, attrs) {\n    let changed = false;\n    if (prev)\n        for (let name in prev)\n            if (!(attrs && name in attrs)) {\n                changed = true;\n                if (name == \"style\")\n                    dom.style.cssText = \"\";\n                else\n                    dom.removeAttribute(name);\n            }\n    if (attrs)\n        for (let name in attrs)\n            if (!(prev && prev[name] == attrs[name])) {\n                changed = true;\n                if (name == \"style\")\n                    dom.style.cssText = attrs[name];\n                else\n                    dom.setAttribute(name, attrs[name]);\n            }\n    return changed;\n}\nfunction getAttrs(dom) {\n    let attrs = Object.create(null);\n    for (let i = 0; i < dom.attributes.length; i++) {\n        let attr = dom.attributes[i];\n        attrs[attr.name] = attr.value;\n    }\n    return attrs;\n}\n\n/**\nWidgets added to the content are described by subclasses of this\nclass. Using a description object like that makes it possible to\ndelay creating of the DOM structure for a widget until it is\nneeded, and to avoid redrawing widgets even if the decorations\nthat define them are recreated.\n*/\nclass WidgetType {\n    /**\n    Compare this instance to another instance of the same type.\n    (TypeScript can't express this, but only instances of the same\n    specific class will be passed to this method.) This is used to\n    avoid redrawing widgets when they are replaced by a new\n    decoration of the same type. The default implementation just\n    returns `false`, which will cause new instances of the widget to\n    always be redrawn.\n    */\n    eq(widget) { return false; }\n    /**\n    Update a DOM element created by a widget of the same type (but\n    different, non-`eq` content) to reflect this widget. May return\n    true to indicate that it could update, false to indicate it\n    couldn't (in which case the widget will be redrawn). The default\n    implementation just returns false.\n    */\n    updateDOM(dom, view, from) { return false; }\n    /**\n    @internal\n    */\n    compare(other) {\n        return this == other || this.constructor == other.constructor && this.eq(other);\n    }\n    /**\n    The estimated height this widget will have, to be used when\n    estimating the height of content that hasn't been drawn. May\n    return -1 to indicate you don't know. The default implementation\n    returns -1.\n    */\n    get estimatedHeight() { return -1; }\n    /**\n    For inline widgets that are displayed inline (as opposed to\n    `inline-block`) and introduce line breaks (through `<br>` tags\n    or textual newlines), this must indicate the amount of line\n    breaks they introduce. Defaults to 0.\n    */\n    get lineBreaks() { return 0; }\n    /**\n    Can be used to configure which kinds of events inside the widget\n    should be ignored by the editor. The default is to ignore all\n    events.\n    */\n    ignoreEvent(event) { return true; }\n    /**\n    Override the way screen coordinates for positions at/in the\n    widget are found. `pos` will be the offset into the widget, and\n    `side` the side of the position that is being queried—less than\n    zero for before, greater than zero for after, and zero for\n    directly at that position.\n    */\n    coordsAt(dom, pos, side) { return null; }\n    /**\n    @internal\n    */\n    get isHidden() { return false; }\n    /**\n    @internal\n    */\n    get editable() { return false; }\n    /**\n    This is called when the an instance of the widget is removed\n    from the editor view.\n    */\n    destroy(dom) { }\n}\n/**\nThe different types of blocks that can occur in an editor view.\n*/\nvar BlockType = /*@__PURE__*/(function (BlockType) {\n    /**\n    A line of text.\n    */\n    BlockType[BlockType[\"Text\"] = 0] = \"Text\";\n    /**\n    A block widget associated with the position after it.\n    */\n    BlockType[BlockType[\"WidgetBefore\"] = 1] = \"WidgetBefore\";\n    /**\n    A block widget associated with the position before it.\n    */\n    BlockType[BlockType[\"WidgetAfter\"] = 2] = \"WidgetAfter\";\n    /**\n    A block widget [replacing](https://codemirror.net/6/docs/ref/#view.Decoration^replace) a range of content.\n    */\n    BlockType[BlockType[\"WidgetRange\"] = 3] = \"WidgetRange\";\nreturn BlockType})(BlockType || (BlockType = {}));\n/**\nA decoration provides information on how to draw or style a piece\nof content. You'll usually use it wrapped in a\n[`Range`](https://codemirror.net/6/docs/ref/#state.Range), which adds a start and end position.\n@nonabstract\n*/\nclass Decoration extends RangeValue {\n    constructor(\n    /**\n    @internal\n    */\n    startSide, \n    /**\n    @internal\n    */\n    endSide, \n    /**\n    @internal\n    */\n    widget, \n    /**\n    The config object used to create this decoration. You can\n    include additional properties in there to store metadata about\n    your decoration.\n    */\n    spec) {\n        super();\n        this.startSide = startSide;\n        this.endSide = endSide;\n        this.widget = widget;\n        this.spec = spec;\n    }\n    /**\n    @internal\n    */\n    get heightRelevant() { return false; }\n    /**\n    Create a mark decoration, which influences the styling of the\n    content in its range. Nested mark decorations will cause nested\n    DOM elements to be created. Nesting order is determined by\n    precedence of the [facet](https://codemirror.net/6/docs/ref/#view.EditorView^decorations), with\n    the higher-precedence decorations creating the inner DOM nodes.\n    Such elements are split on line boundaries and on the boundaries\n    of lower-precedence decorations.\n    */\n    static mark(spec) {\n        return new MarkDecoration(spec);\n    }\n    /**\n    Create a widget decoration, which displays a DOM element at the\n    given position.\n    */\n    static widget(spec) {\n        let side = Math.max(-10000, Math.min(10000, spec.side || 0)), block = !!spec.block;\n        side += (block && !spec.inlineOrder)\n            ? (side > 0 ? 300000000 /* Side.BlockAfter */ : -400000000 /* Side.BlockBefore */)\n            : (side > 0 ? 100000000 /* Side.InlineAfter */ : -100000000 /* Side.InlineBefore */);\n        return new PointDecoration(spec, side, side, block, spec.widget || null, false);\n    }\n    /**\n    Create a replace decoration which replaces the given range with\n    a widget, or simply hides it.\n    */\n    static replace(spec) {\n        let block = !!spec.block, startSide, endSide;\n        if (spec.isBlockGap) {\n            startSide = -500000000 /* Side.GapStart */;\n            endSide = 400000000 /* Side.GapEnd */;\n        }\n        else {\n            let { start, end } = getInclusive(spec, block);\n            startSide = (start ? (block ? -300000000 /* Side.BlockIncStart */ : -1 /* Side.InlineIncStart */) : 500000000 /* Side.NonIncStart */) - 1;\n            endSide = (end ? (block ? 200000000 /* Side.BlockIncEnd */ : 1 /* Side.InlineIncEnd */) : -600000000 /* Side.NonIncEnd */) + 1;\n        }\n        return new PointDecoration(spec, startSide, endSide, block, spec.widget || null, true);\n    }\n    /**\n    Create a line decoration, which can add DOM attributes to the\n    line starting at the given position.\n    */\n    static line(spec) {\n        return new LineDecoration(spec);\n    }\n    /**\n    Build a [`DecorationSet`](https://codemirror.net/6/docs/ref/#view.DecorationSet) from the given\n    decorated range or ranges. If the ranges aren't already sorted,\n    pass `true` for `sort` to make the library sort them for you.\n    */\n    static set(of, sort = false) {\n        return RangeSet.of(of, sort);\n    }\n    /**\n    @internal\n    */\n    hasHeight() { return this.widget ? this.widget.estimatedHeight > -1 : false; }\n}\n/**\nThe empty set of decorations.\n*/\nDecoration.none = RangeSet.empty;\nclass MarkDecoration extends Decoration {\n    constructor(spec) {\n        let { start, end } = getInclusive(spec);\n        super(start ? -1 /* Side.InlineIncStart */ : 500000000 /* Side.NonIncStart */, end ? 1 /* Side.InlineIncEnd */ : -600000000 /* Side.NonIncEnd */, null, spec);\n        this.tagName = spec.tagName || \"span\";\n        this.attrs = spec.class && spec.attributes ? combineAttrs(spec.attributes, { class: spec.class })\n            : spec.class ? { class: spec.class } : spec.attributes || noAttrs;\n    }\n    eq(other) {\n        return this == other || other instanceof MarkDecoration && this.tagName == other.tagName && attrsEq(this.attrs, other.attrs);\n    }\n    range(from, to = from) {\n        if (from >= to)\n            throw new RangeError(\"Mark decorations may not be empty\");\n        return super.range(from, to);\n    }\n}\nMarkDecoration.prototype.point = false;\nclass LineDecoration extends Decoration {\n    constructor(spec) {\n        super(-200000000 /* Side.Line */, -200000000 /* Side.Line */, null, spec);\n    }\n    eq(other) {\n        return other instanceof LineDecoration &&\n            this.spec.class == other.spec.class &&\n            attrsEq(this.spec.attributes, other.spec.attributes);\n    }\n    range(from, to = from) {\n        if (to != from)\n            throw new RangeError(\"Line decoration ranges must be zero-length\");\n        return super.range(from, to);\n    }\n}\nLineDecoration.prototype.mapMode = MapMode.TrackBefore;\nLineDecoration.prototype.point = true;\nclass PointDecoration extends Decoration {\n    constructor(spec, startSide, endSide, block, widget, isReplace) {\n        super(startSide, endSide, widget, spec);\n        this.block = block;\n        this.isReplace = isReplace;\n        this.mapMode = !block ? MapMode.TrackDel : startSide <= 0 ? MapMode.TrackBefore : MapMode.TrackAfter;\n    }\n    // Only relevant when this.block == true\n    get type() {\n        return this.startSide != this.endSide ? BlockType.WidgetRange\n            : this.startSide <= 0 ? BlockType.WidgetBefore : BlockType.WidgetAfter;\n    }\n    get heightRelevant() {\n        return this.block || !!this.widget && (this.widget.estimatedHeight >= 5 || this.widget.lineBreaks > 0);\n    }\n    eq(other) {\n        return other instanceof PointDecoration &&\n            widgetsEq(this.widget, other.widget) &&\n            this.block == other.block &&\n            this.startSide == other.startSide && this.endSide == other.endSide;\n    }\n    range(from, to = from) {\n        if (this.isReplace && (from > to || (from == to && this.startSide > 0 && this.endSide <= 0)))\n            throw new RangeError(\"Invalid range for replacement decoration\");\n        if (!this.isReplace && to != from)\n            throw new RangeError(\"Widget decorations can only have zero-length ranges\");\n        return super.range(from, to);\n    }\n}\nPointDecoration.prototype.point = true;\nfunction getInclusive(spec, block = false) {\n    let { inclusiveStart: start, inclusiveEnd: end } = spec;\n    if (start == null)\n        start = spec.inclusive;\n    if (end == null)\n        end = spec.inclusive;\n    return { start: start !== null && start !== void 0 ? start : block, end: end !== null && end !== void 0 ? end : block };\n}\nfunction widgetsEq(a, b) {\n    return a == b || !!(a && b && a.compare(b));\n}\nfunction addRange(from, to, ranges, margin = 0) {\n    let last = ranges.length - 1;\n    if (last >= 0 && ranges[last] + margin >= from)\n        ranges[last] = Math.max(ranges[last], to);\n    else\n        ranges.push(from, to);\n}\n/**\nA block wrapper defines a DOM node that wraps lines or other block\nwrappers at the top of the document. It affects any line or block\nwidget that starts inside its range, including blocks starting\ndirectly at `from` but not including `to`.\n*/\nclass BlockWrapper extends RangeValue {\n    constructor(\n    /**\n    @internal\n    */\n    tagName, \n    /**\n    @internal\n    */\n    attributes, \n    /**\n    @internal\n    */\n    rank) {\n        super();\n        this.tagName = tagName;\n        this.attributes = attributes;\n        this.rank = rank;\n    }\n    eq(other) {\n        return other == this ||\n            other instanceof BlockWrapper && this.tagName == other.tagName && attrsEq(this.attributes, other.attributes);\n    }\n    /**\n    Create a block wrapper object with the given tag name and\n    attributes.\n    */\n    static create(spec) {\n        return new BlockWrapper(spec.tagName, spec.attributes || noAttrs, spec.rank == null ? 50 : Math.max(0, Math.min(spec.rank, 100)));\n    }\n    /**\n    Create a range set from the given block wrapper ranges.\n    */\n    static set(of, sort = false) {\n        return RangeSet.of(of, sort);\n    }\n}\nBlockWrapper.prototype.startSide = BlockWrapper.prototype.endSide = -1;\n\nfunction getSelection(root) {\n    let target;\n    // Browsers differ on whether shadow roots have a getSelection\n    // method. If it exists, use that, otherwise, call it on the\n    // document.\n    if (root.nodeType == 11) { // Shadow root\n        target = root.getSelection ? root : root.ownerDocument;\n    }\n    else {\n        target = root;\n    }\n    return target.getSelection();\n}\nfunction contains(dom, node) {\n    return node ? dom == node || dom.contains(node.nodeType != 1 ? node.parentNode : node) : false;\n}\nfunction hasSelection(dom, selection) {\n    if (!selection.anchorNode)\n        return false;\n    try {\n        // Firefox will raise 'permission denied' errors when accessing\n        // properties of `sel.anchorNode` when it's in a generated CSS\n        // element.\n        return contains(dom, selection.anchorNode);\n    }\n    catch (_) {\n        return false;\n    }\n}\nfunction clientRectsFor(dom) {\n    if (dom.nodeType == 3)\n        return textRange(dom, 0, dom.nodeValue.length).getClientRects();\n    else if (dom.nodeType == 1)\n        return dom.getClientRects();\n    else\n        return [];\n}\n// Scans forward and backward through DOM positions equivalent to the\n// given one to see if the two are in the same place (i.e. after a\n// text node vs at the end of that text node)\nfunction isEquivalentPosition(node, off, targetNode, targetOff) {\n    return targetNode ? (scanFor(node, off, targetNode, targetOff, -1) ||\n        scanFor(node, off, targetNode, targetOff, 1)) : false;\n}\nfunction domIndex(node) {\n    for (var index = 0;; index++) {\n        node = node.previousSibling;\n        if (!node)\n            return index;\n    }\n}\nfunction isBlockElement(node) {\n    return node.nodeType == 1 && /^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\\d|SECTION|PRE)$/.test(node.nodeName);\n}\nfunction scanFor(node, off, targetNode, targetOff, dir) {\n    for (;;) {\n        if (node == targetNode && off == targetOff)\n            return true;\n        if (off == (dir < 0 ? 0 : maxOffset(node))) {\n            if (node.nodeName == \"DIV\")\n                return false;\n            let parent = node.parentNode;\n            if (!parent || parent.nodeType != 1)\n                return false;\n            off = domIndex(node) + (dir < 0 ? 0 : 1);\n            node = parent;\n        }\n        else if (node.nodeType == 1) {\n            node = node.childNodes[off + (dir < 0 ? -1 : 0)];\n            if (node.nodeType == 1 && node.contentEditable == \"false\")\n                return false;\n            off = dir < 0 ? maxOffset(node) : 0;\n        }\n        else {\n            return false;\n        }\n    }\n}\nfunction maxOffset(node) {\n    return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction flattenRect(rect, left) {\n    let x = left ? rect.left : rect.right;\n    return { left: x, right: x, top: rect.top, bottom: rect.bottom };\n}\nfunction windowRect(win) {\n    let vp = win.visualViewport;\n    if (vp)\n        return {\n            left: 0, right: vp.width,\n            top: 0, bottom: vp.height\n        };\n    return { left: 0, right: win.innerWidth,\n        top: 0, bottom: win.innerHeight };\n}\nfunction getScale(elt, rect) {\n    let scaleX = rect.width / elt.offsetWidth;\n    let scaleY = rect.height / elt.offsetHeight;\n    if (scaleX > 0.995 && scaleX < 1.005 || !isFinite(scaleX) || Math.abs(rect.width - elt.offsetWidth) < 1)\n        scaleX = 1;\n    if (scaleY > 0.995 && scaleY < 1.005 || !isFinite(scaleY) || Math.abs(rect.height - elt.offsetHeight) < 1)\n        scaleY = 1;\n    return { scaleX, scaleY };\n}\nfunction scrollRectIntoView(dom, rect, side, x, y, xMargin, yMargin, ltr) {\n    let doc = dom.ownerDocument, win = doc.defaultView || window;\n    for (let cur = dom, stop = false; cur && !stop;) {\n        if (cur.nodeType == 1) { // Element\n            let bounding, top = cur == doc.body;\n            let scaleX = 1, scaleY = 1;\n            if (top) {\n                bounding = windowRect(win);\n            }\n            else {\n                if (/^(fixed|sticky)$/.test(getComputedStyle(cur).position))\n                    stop = true;\n                if (cur.scrollHeight <= cur.clientHeight && cur.scrollWidth <= cur.clientWidth) {\n                    cur = cur.assignedSlot || cur.parentNode;\n                    continue;\n                }\n                let rect = cur.getBoundingClientRect();\n                ({ scaleX, scaleY } = getScale(cur, rect));\n                // Make sure scrollbar width isn't included in the rectangle\n                bounding = { left: rect.left, right: rect.left + cur.clientWidth * scaleX,\n                    top: rect.top, bottom: rect.top + cur.clientHeight * scaleY };\n            }\n            let moveX = 0, moveY = 0;\n            if (y == \"nearest\") {\n                if (rect.top < bounding.top + yMargin) {\n                    moveY = rect.top - (bounding.top + yMargin);\n                    if (side > 0 && rect.bottom > bounding.bottom + moveY)\n                        moveY = rect.bottom - bounding.bottom + yMargin;\n                }\n                else if (rect.bottom > bounding.bottom - yMargin) {\n                    moveY = rect.bottom - bounding.bottom + yMargin;\n                    if (side < 0 && (rect.top - moveY) < bounding.top)\n                        moveY = rect.top - (bounding.top + yMargin);\n                }\n            }\n            else {\n                let rectHeight = rect.bottom - rect.top, boundingHeight = bounding.bottom - bounding.top;\n                let targetTop = y == \"center\" && rectHeight <= boundingHeight ? rect.top + rectHeight / 2 - boundingHeight / 2 :\n                    y == \"start\" || y == \"center\" && side < 0 ? rect.top - yMargin :\n                        rect.bottom - boundingHeight + yMargin;\n                moveY = targetTop - bounding.top;\n            }\n            if (x == \"nearest\") {\n                if (rect.left < bounding.left + xMargin) {\n                    moveX = rect.left - (bounding.left + xMargin);\n                    if (side > 0 && rect.right > bounding.right + moveX)\n                        moveX = rect.right - bounding.right + xMargin;\n                }\n                else if (rect.right > bounding.right - xMargin) {\n                    moveX = rect.right - bounding.right + xMargin;\n                    if (side < 0 && rect.left < bounding.left + moveX)\n                        moveX = rect.left - (bounding.left + xMargin);\n                }\n            }\n            else {\n                let targetLeft = x == \"center\" ? rect.left + (rect.right - rect.left) / 2 - (bounding.right - bounding.left) / 2 :\n                    (x == \"start\") == ltr ? rect.left - xMargin :\n                        rect.right - (bounding.right - bounding.left) + xMargin;\n                moveX = targetLeft - bounding.left;\n            }\n            if (moveX || moveY) {\n                if (top) {\n                    win.scrollBy(moveX, moveY);\n                }\n                else {\n                    let movedX = 0, movedY = 0;\n                    if (moveY) {\n                        let start = cur.scrollTop;\n                        cur.scrollTop += moveY / scaleY;\n                        movedY = (cur.scrollTop - start) * scaleY;\n                    }\n                    if (moveX) {\n                        let start = cur.scrollLeft;\n                        cur.scrollLeft += moveX / scaleX;\n                        movedX = (cur.scrollLeft - start) * scaleX;\n                    }\n                    rect = { left: rect.left - movedX, top: rect.top - movedY,\n                        right: rect.right - movedX, bottom: rect.bottom - movedY };\n                    if (movedX && Math.abs(movedX - moveX) < 1)\n                        x = \"nearest\";\n                    if (movedY && Math.abs(movedY - moveY) < 1)\n                        y = \"nearest\";\n                }\n            }\n            if (top)\n                break;\n            if (rect.top < bounding.top || rect.bottom > bounding.bottom ||\n                rect.left < bounding.left || rect.right > bounding.right)\n                rect = { left: Math.max(rect.left, bounding.left), right: Math.min(rect.right, bounding.right),\n                    top: Math.max(rect.top, bounding.top), bottom: Math.min(rect.bottom, bounding.bottom) };\n            cur = cur.assignedSlot || cur.parentNode;\n        }\n        else if (cur.nodeType == 11) { // A shadow root\n            cur = cur.host;\n        }\n        else {\n            break;\n        }\n    }\n}\nfunction scrollableParents(dom, getX = true) {\n    let doc = dom.ownerDocument, x = null, y = null;\n    for (let cur = dom.parentNode; cur;) {\n        if (cur == doc.body || ((!getX || x) && y)) {\n            break;\n        }\n        else if (cur.nodeType == 1) {\n            if (!y && cur.scrollHeight > cur.clientHeight)\n                y = cur;\n            if (getX && !x && cur.scrollWidth > cur.clientWidth)\n                x = cur;\n            cur = cur.assignedSlot || cur.parentNode;\n        }\n        else if (cur.nodeType == 11) {\n            cur = cur.host;\n        }\n        else {\n            break;\n        }\n    }\n    return { x, y };\n}\nclass DOMSelectionState {\n    constructor() {\n        this.anchorNode = null;\n        this.anchorOffset = 0;\n        this.focusNode = null;\n        this.focusOffset = 0;\n    }\n    eq(domSel) {\n        return this.anchorNode == domSel.anchorNode && this.anchorOffset == domSel.anchorOffset &&\n            this.focusNode == domSel.focusNode && this.focusOffset == domSel.focusOffset;\n    }\n    setRange(range) {\n        let { anchorNode, focusNode } = range;\n        // Clip offsets to node size to avoid crashes when Safari reports bogus offsets (#1152)\n        this.set(anchorNode, Math.min(range.anchorOffset, anchorNode ? maxOffset(anchorNode) : 0), focusNode, Math.min(range.focusOffset, focusNode ? maxOffset(focusNode) : 0));\n    }\n    set(anchorNode, anchorOffset, focusNode, focusOffset) {\n        this.anchorNode = anchorNode;\n        this.anchorOffset = anchorOffset;\n        this.focusNode = focusNode;\n        this.focusOffset = focusOffset;\n    }\n}\nlet preventScrollSupported = null;\n// Safari 26 breaks preventScroll support\nif (browser.safari && browser.safari_version >= 26)\n    preventScrollSupported = false;\n// Feature-detects support for .focus({preventScroll: true}), and uses\n// a fallback kludge when not supported.\nfunction focusPreventScroll(dom) {\n    if (dom.setActive)\n        return dom.setActive(); // in IE\n    if (preventScrollSupported)\n        return dom.focus(preventScrollSupported);\n    let stack = [];\n    for (let cur = dom; cur; cur = cur.parentNode) {\n        stack.push(cur, cur.scrollTop, cur.scrollLeft);\n        if (cur == cur.ownerDocument)\n            break;\n    }\n    dom.focus(preventScrollSupported == null ? {\n        get preventScroll() {\n            preventScrollSupported = { preventScroll: true };\n            return true;\n        }\n    } : undefined);\n    if (!preventScrollSupported) {\n        preventScrollSupported = false;\n        for (let i = 0; i < stack.length;) {\n            let elt = stack[i++], top = stack[i++], left = stack[i++];\n            if (elt.scrollTop != top)\n                elt.scrollTop = top;\n            if (elt.scrollLeft != left)\n                elt.scrollLeft = left;\n        }\n    }\n}\nlet scratchRange;\nfunction textRange(node, from, to = from) {\n    let range = scratchRange || (scratchRange = document.createRange());\n    range.setEnd(node, to);\n    range.setStart(node, from);\n    return range;\n}\nfunction dispatchKey(elt, name, code, mods) {\n    let options = { key: name, code: name, keyCode: code, which: code, cancelable: true };\n    if (mods)\n        ({ altKey: options.altKey, ctrlKey: options.ctrlKey, shiftKey: options.shiftKey, metaKey: options.metaKey } = mods);\n    let down = new KeyboardEvent(\"keydown\", options);\n    down.synthetic = true;\n    elt.dispatchEvent(down);\n    let up = new KeyboardEvent(\"keyup\", options);\n    up.synthetic = true;\n    elt.dispatchEvent(up);\n    return down.defaultPrevented || up.defaultPrevented;\n}\nfunction getRoot(node) {\n    while (node) {\n        if (node && (node.nodeType == 9 || node.nodeType == 11 && node.host))\n            return node;\n        node = node.assignedSlot || node.parentNode;\n    }\n    return null;\n}\nfunction atElementStart(doc, selection) {\n    let node = selection.focusNode, offset = selection.focusOffset;\n    if (!node || selection.anchorNode != node || selection.anchorOffset != offset)\n        return false;\n    // Safari can report bogus offsets (#1152)\n    offset = Math.min(offset, maxOffset(node));\n    for (;;) {\n        if (offset) {\n            if (node.nodeType != 1)\n                return false;\n            let prev = node.childNodes[offset - 1];\n            if (prev.contentEditable == \"false\")\n                offset--;\n            else {\n                node = prev;\n                offset = maxOffset(node);\n            }\n        }\n        else if (node == doc) {\n            return true;\n        }\n        else {\n            offset = domIndex(node);\n            node = node.parentNode;\n        }\n    }\n}\nfunction isScrolledToBottom(elt) {\n    if (elt instanceof Window)\n        return elt.pageYOffset > Math.max(0, elt.document.documentElement.scrollHeight - elt.innerHeight - 4);\n    return elt.scrollTop > Math.max(1, elt.scrollHeight - elt.clientHeight - 4);\n}\nfunction textNodeBefore(startNode, startOffset) {\n    for (let node = startNode, offset = startOffset;;) {\n        if (node.nodeType == 3 && offset > 0) {\n            return { node: node, offset: offset };\n        }\n        else if (node.nodeType == 1 && offset > 0) {\n            if (node.contentEditable == \"false\")\n                return null;\n            node = node.childNodes[offset - 1];\n            offset = maxOffset(node);\n        }\n        else if (node.parentNode && !isBlockElement(node)) {\n            offset = domIndex(node);\n            node = node.parentNode;\n        }\n        else {\n            return null;\n        }\n    }\n}\nfunction textNodeAfter(startNode, startOffset) {\n    for (let node = startNode, offset = startOffset;;) {\n        if (node.nodeType == 3 && offset < node.nodeValue.length) {\n            return { node: node, offset: offset };\n        }\n        else if (node.nodeType == 1 && offset < node.childNodes.length) {\n            if (node.contentEditable == \"false\")\n                return null;\n            node = node.childNodes[offset];\n            offset = 0;\n        }\n        else if (node.parentNode && !isBlockElement(node)) {\n            offset = domIndex(node) + 1;\n            node = node.parentNode;\n        }\n        else {\n            return null;\n        }\n    }\n}\nclass DOMPos {\n    constructor(node, offset, precise = true) {\n        this.node = node;\n        this.offset = offset;\n        this.precise = precise;\n    }\n    static before(dom, precise) { return new DOMPos(dom.parentNode, domIndex(dom), precise); }\n    static after(dom, precise) { return new DOMPos(dom.parentNode, domIndex(dom) + 1, precise); }\n}\n\n/**\nUsed to indicate [text direction](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection).\n*/\nvar Direction = /*@__PURE__*/(function (Direction) {\n    // (These are chosen to match the base levels, in bidi algorithm\n    // terms, of spans in that direction.)\n    /**\n    Left-to-right.\n    */\n    Direction[Direction[\"LTR\"] = 0] = \"LTR\";\n    /**\n    Right-to-left.\n    */\n    Direction[Direction[\"RTL\"] = 1] = \"RTL\";\nreturn Direction})(Direction || (Direction = {}));\nconst LTR = Direction.LTR, RTL = Direction.RTL;\n// Decode a string with each type encoded as log2(type)\nfunction dec(str) {\n    let result = [];\n    for (let i = 0; i < str.length; i++)\n        result.push(1 << +str[i]);\n    return result;\n}\n// Character types for codepoints 0 to 0xf8\nconst LowTypes = /*@__PURE__*/dec(\"88888888888888888888888888888888888666888888787833333333337888888000000000000000000000000008888880000000000000000000000000088888888888888888888888888888888888887866668888088888663380888308888800000000000000000000000800000000000000000000000000000008\");\n// Character types for codepoints 0x600 to 0x6f9\nconst ArabicTypes = /*@__PURE__*/dec(\"4444448826627288999999999992222222222222222222222222222222222222222222222229999999999999999999994444444444644222822222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222999999949999999229989999223333333333\");\nconst Brackets = /*@__PURE__*/Object.create(null), BracketStack = [];\n// There's a lot more in\n// https://www.unicode.org/Public/UCD/latest/ucd/BidiBrackets.txt,\n// which are left out to keep code size down.\nfor (let p of [\"()\", \"[]\", \"{}\"]) {\n    let l = /*@__PURE__*/p.charCodeAt(0), r = /*@__PURE__*/p.charCodeAt(1);\n    Brackets[l] = r;\n    Brackets[r] = -l;\n}\nfunction charType(ch) {\n    return ch <= 0xf7 ? LowTypes[ch] :\n        0x590 <= ch && ch <= 0x5f4 ? 2 /* T.R */ :\n            0x600 <= ch && ch <= 0x6f9 ? ArabicTypes[ch - 0x600] :\n                0x6ee <= ch && ch <= 0x8ac ? 4 /* T.AL */ :\n                    0x2000 <= ch && ch <= 0x200c ? 256 /* T.NI */ :\n                        0xfb50 <= ch && ch <= 0xfdff ? 4 /* T.AL */ : 1 /* T.L */;\n}\nconst BidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\ufb50-\\ufdff]/;\n/**\nRepresents a contiguous range of text that has a single direction\n(as in left-to-right or right-to-left).\n*/\nclass BidiSpan {\n    /**\n    The direction of this span.\n    */\n    get dir() { return this.level % 2 ? RTL : LTR; }\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The start of the span (relative to the start of the line).\n    */\n    from, \n    /**\n    The end of the span.\n    */\n    to, \n    /**\n    The [\"bidi\n    level\"](https://unicode.org/reports/tr9/#Basic_Display_Algorithm)\n    of the span (in this context, 0 means\n    left-to-right, 1 means right-to-left, 2 means left-to-right\n    number inside right-to-left text).\n    */\n    level) {\n        this.from = from;\n        this.to = to;\n        this.level = level;\n    }\n    /**\n    @internal\n    */\n    side(end, dir) { return (this.dir == dir) == end ? this.to : this.from; }\n    /**\n    @internal\n    */\n    forward(forward, dir) { return forward == (this.dir == dir); }\n    /**\n    @internal\n    */\n    static find(order, index, level, assoc) {\n        let maybe = -1;\n        for (let i = 0; i < order.length; i++) {\n            let span = order[i];\n            if (span.from <= index && span.to >= index) {\n                if (span.level == level)\n                    return i;\n                // When multiple spans match, if assoc != 0, take the one that\n                // covers that side, otherwise take the one with the minimum\n                // level.\n                if (maybe < 0 || (assoc != 0 ? (assoc < 0 ? span.from < index : span.to > index) : order[maybe].level > span.level))\n                    maybe = i;\n            }\n        }\n        if (maybe < 0)\n            throw new RangeError(\"Index out of range\");\n        return maybe;\n    }\n}\nfunction isolatesEq(a, b) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++) {\n        let iA = a[i], iB = b[i];\n        if (iA.from != iB.from || iA.to != iB.to || iA.direction != iB.direction || !isolatesEq(iA.inner, iB.inner))\n            return false;\n    }\n    return true;\n}\n// Reused array of character types\nconst types = [];\n// Fill in the character types (in `types`) from `from` to `to` and\n// apply W normalization rules.\nfunction computeCharTypes(line, rFrom, rTo, isolates, outerType) {\n    for (let iI = 0; iI <= isolates.length; iI++) {\n        let from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n        let prevType = iI ? 256 /* T.NI */ : outerType;\n        // W1. Examine each non-spacing mark (NSM) in the level run, and\n        // change the type of the NSM to the type of the previous\n        // character. If the NSM is at the start of the level run, it will\n        // get the type of sor.\n        // W2. Search backwards from each instance of a European number\n        // until the first strong type (R, L, AL, or sor) is found. If an\n        // AL is found, change the type of the European number to Arabic\n        // number.\n        // W3. Change all ALs to R.\n        // (Left after this: L, R, EN, AN, ET, CS, NI)\n        for (let i = from, prev = prevType, prevStrong = prevType; i < to; i++) {\n            let type = charType(line.charCodeAt(i));\n            if (type == 512 /* T.NSM */)\n                type = prev;\n            else if (type == 8 /* T.EN */ && prevStrong == 4 /* T.AL */)\n                type = 16 /* T.AN */;\n            types[i] = type == 4 /* T.AL */ ? 2 /* T.R */ : type;\n            if (type & 7 /* T.Strong */)\n                prevStrong = type;\n            prev = type;\n        }\n        // W5. A sequence of European terminators adjacent to European\n        // numbers changes to all European numbers.\n        // W6. Otherwise, separators and terminators change to Other\n        // Neutral.\n        // W7. Search backwards from each instance of a European number\n        // until the first strong type (R, L, or sor) is found. If an L is\n        // found, then change the type of the European number to L.\n        // (Left after this: L, R, EN+AN, NI)\n        for (let i = from, prev = prevType, prevStrong = prevType; i < to; i++) {\n            let type = types[i];\n            if (type == 128 /* T.CS */) {\n                if (i < to - 1 && prev == types[i + 1] && (prev & 24 /* T.Num */))\n                    type = types[i] = prev;\n                else\n                    types[i] = 256 /* T.NI */;\n            }\n            else if (type == 64 /* T.ET */) {\n                let end = i + 1;\n                while (end < to && types[end] == 64 /* T.ET */)\n                    end++;\n                let replace = (i && prev == 8 /* T.EN */) || (end < rTo && types[end] == 8 /* T.EN */) ? (prevStrong == 1 /* T.L */ ? 1 /* T.L */ : 8 /* T.EN */) : 256 /* T.NI */;\n                for (let j = i; j < end; j++)\n                    types[j] = replace;\n                i = end - 1;\n            }\n            else if (type == 8 /* T.EN */ && prevStrong == 1 /* T.L */) {\n                types[i] = 1 /* T.L */;\n            }\n            prev = type;\n            if (type & 7 /* T.Strong */)\n                prevStrong = type;\n        }\n    }\n}\n// Process brackets throughout a run sequence.\nfunction processBracketPairs(line, rFrom, rTo, isolates, outerType) {\n    let oppositeType = outerType == 1 /* T.L */ ? 2 /* T.R */ : 1 /* T.L */;\n    for (let iI = 0, sI = 0, context = 0; iI <= isolates.length; iI++) {\n        let from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n        // N0. Process bracket pairs in an isolating run sequence\n        // sequentially in the logical order of the text positions of the\n        // opening paired brackets using the logic given below. Within this\n        // scope, bidirectional types EN and AN are treated as R.\n        for (let i = from, ch, br, type; i < to; i++) {\n            // Keeps [startIndex, type, strongSeen] triples for each open\n            // bracket on BracketStack.\n            if (br = Brackets[ch = line.charCodeAt(i)]) {\n                if (br < 0) { // Closing bracket\n                    for (let sJ = sI - 3; sJ >= 0; sJ -= 3) {\n                        if (BracketStack[sJ + 1] == -br) {\n                            let flags = BracketStack[sJ + 2];\n                            let type = (flags & 2 /* Bracketed.EmbedInside */) ? outerType :\n                                !(flags & 4 /* Bracketed.OppositeInside */) ? 0 :\n                                    (flags & 1 /* Bracketed.OppositeBefore */) ? oppositeType : outerType;\n                            if (type)\n                                types[i] = types[BracketStack[sJ]] = type;\n                            sI = sJ;\n                            break;\n                        }\n                    }\n                }\n                else if (BracketStack.length == 189 /* Bracketed.MaxDepth */) {\n                    break;\n                }\n                else {\n                    BracketStack[sI++] = i;\n                    BracketStack[sI++] = ch;\n                    BracketStack[sI++] = context;\n                }\n            }\n            else if ((type = types[i]) == 2 /* T.R */ || type == 1 /* T.L */) {\n                let embed = type == outerType;\n                context = embed ? 0 : 1 /* Bracketed.OppositeBefore */;\n                for (let sJ = sI - 3; sJ >= 0; sJ -= 3) {\n                    let cur = BracketStack[sJ + 2];\n                    if (cur & 2 /* Bracketed.EmbedInside */)\n                        break;\n                    if (embed) {\n                        BracketStack[sJ + 2] |= 2 /* Bracketed.EmbedInside */;\n                    }\n                    else {\n                        if (cur & 4 /* Bracketed.OppositeInside */)\n                            break;\n                        BracketStack[sJ + 2] |= 4 /* Bracketed.OppositeInside */;\n                    }\n                }\n            }\n        }\n    }\n}\nfunction processNeutrals(rFrom, rTo, isolates, outerType) {\n    for (let iI = 0, prev = outerType; iI <= isolates.length; iI++) {\n        let from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n        // N1. A sequence of neutrals takes the direction of the\n        // surrounding strong text if the text on both sides has the same\n        // direction. European and Arabic numbers act as if they were R in\n        // terms of their influence on neutrals. Start-of-level-run (sor)\n        // and end-of-level-run (eor) are used at level run boundaries.\n        // N2. Any remaining neutrals take the embedding direction.\n        // (Left after this: L, R, EN+AN)\n        for (let i = from; i < to;) {\n            let type = types[i];\n            if (type == 256 /* T.NI */) {\n                let end = i + 1;\n                for (;;) {\n                    if (end == to) {\n                        if (iI == isolates.length)\n                            break;\n                        end = isolates[iI++].to;\n                        to = iI < isolates.length ? isolates[iI].from : rTo;\n                    }\n                    else if (types[end] == 256 /* T.NI */) {\n                        end++;\n                    }\n                    else {\n                        break;\n                    }\n                }\n                let beforeL = prev == 1 /* T.L */;\n                let afterL = (end < rTo ? types[end] : outerType) == 1 /* T.L */;\n                let replace = beforeL == afterL ? (beforeL ? 1 /* T.L */ : 2 /* T.R */) : outerType;\n                for (let j = end, jI = iI, fromJ = jI ? isolates[jI - 1].to : rFrom; j > i;) {\n                    if (j == fromJ) {\n                        j = isolates[--jI].from;\n                        fromJ = jI ? isolates[jI - 1].to : rFrom;\n                    }\n                    types[--j] = replace;\n                }\n                i = end;\n            }\n            else {\n                prev = type;\n                i++;\n            }\n        }\n    }\n}\n// Find the contiguous ranges of character types in a given range, and\n// emit spans for them. Flip the order of the spans as appropriate\n// based on the level, and call through to compute the spans for\n// isolates at the proper point.\nfunction emitSpans(line, from, to, level, baseLevel, isolates, order) {\n    let ourType = level % 2 ? 2 /* T.R */ : 1 /* T.L */;\n    if ((level % 2) == (baseLevel % 2)) { // Same dir as base direction, don't flip\n        for (let iCh = from, iI = 0; iCh < to;) {\n            // Scan a section of characters in direction ourType, unless\n            // there's another type of char right after iCh, in which case\n            // we scan a section of other characters (which, if ourType ==\n            // T.L, may contain both T.R and T.AN chars).\n            let sameDir = true, isNum = false;\n            if (iI == isolates.length || iCh < isolates[iI].from) {\n                let next = types[iCh];\n                if (next != ourType) {\n                    sameDir = false;\n                    isNum = next == 16 /* T.AN */;\n                }\n            }\n            // Holds an array of isolates to pass to a recursive call if we\n            // must recurse (to distinguish T.AN inside an RTL section in\n            // LTR text), null if we can emit directly\n            let recurse = !sameDir && ourType == 1 /* T.L */ ? [] : null;\n            let localLevel = sameDir ? level : level + 1;\n            let iScan = iCh;\n            run: for (;;) {\n                if (iI < isolates.length && iScan == isolates[iI].from) {\n                    if (isNum)\n                        break run;\n                    let iso = isolates[iI];\n                    // Scan ahead to verify that there is another char in this dir after the isolate(s)\n                    if (!sameDir)\n                        for (let upto = iso.to, jI = iI + 1;;) {\n                            if (upto == to)\n                                break run;\n                            if (jI < isolates.length && isolates[jI].from == upto)\n                                upto = isolates[jI++].to;\n                            else if (types[upto] == ourType)\n                                break run;\n                            else\n                                break;\n                        }\n                    iI++;\n                    if (recurse) {\n                        recurse.push(iso);\n                    }\n                    else {\n                        if (iso.from > iCh)\n                            order.push(new BidiSpan(iCh, iso.from, localLevel));\n                        let dirSwap = (iso.direction == LTR) != !(localLevel % 2);\n                        computeSectionOrder(line, dirSwap ? level + 1 : level, baseLevel, iso.inner, iso.from, iso.to, order);\n                        iCh = iso.to;\n                    }\n                    iScan = iso.to;\n                }\n                else if (iScan == to || (sameDir ? types[iScan] != ourType : types[iScan] == ourType)) {\n                    break;\n                }\n                else {\n                    iScan++;\n                }\n            }\n            if (recurse)\n                emitSpans(line, iCh, iScan, level + 1, baseLevel, recurse, order);\n            else if (iCh < iScan)\n                order.push(new BidiSpan(iCh, iScan, localLevel));\n            iCh = iScan;\n        }\n    }\n    else {\n        // Iterate in reverse to flip the span order. Same code again, but\n        // going from the back of the section to the front\n        for (let iCh = to, iI = isolates.length; iCh > from;) {\n            let sameDir = true, isNum = false;\n            if (!iI || iCh > isolates[iI - 1].to) {\n                let next = types[iCh - 1];\n                if (next != ourType) {\n                    sameDir = false;\n                    isNum = next == 16 /* T.AN */;\n                }\n            }\n            let recurse = !sameDir && ourType == 1 /* T.L */ ? [] : null;\n            let localLevel = sameDir ? level : level + 1;\n            let iScan = iCh;\n            run: for (;;) {\n                if (iI && iScan == isolates[iI - 1].to) {\n                    if (isNum)\n                        break run;\n                    let iso = isolates[--iI];\n                    // Scan ahead to verify that there is another char in this dir after the isolate(s)\n                    if (!sameDir)\n                        for (let upto = iso.from, jI = iI;;) {\n                            if (upto == from)\n                                break run;\n                            if (jI && isolates[jI - 1].to == upto)\n                                upto = isolates[--jI].from;\n                            else if (types[upto - 1] == ourType)\n                                break run;\n                            else\n                                break;\n                        }\n                    if (recurse) {\n                        recurse.push(iso);\n                    }\n                    else {\n                        if (iso.to < iCh)\n                            order.push(new BidiSpan(iso.to, iCh, localLevel));\n                        let dirSwap = (iso.direction == LTR) != !(localLevel % 2);\n                        computeSectionOrder(line, dirSwap ? level + 1 : level, baseLevel, iso.inner, iso.from, iso.to, order);\n                        iCh = iso.from;\n                    }\n                    iScan = iso.from;\n                }\n                else if (iScan == from || (sameDir ? types[iScan - 1] != ourType : types[iScan - 1] == ourType)) {\n                    break;\n                }\n                else {\n                    iScan--;\n                }\n            }\n            if (recurse)\n                emitSpans(line, iScan, iCh, level + 1, baseLevel, recurse, order);\n            else if (iScan < iCh)\n                order.push(new BidiSpan(iScan, iCh, localLevel));\n            iCh = iScan;\n        }\n    }\n}\nfunction computeSectionOrder(line, level, baseLevel, isolates, from, to, order) {\n    let outerType = (level % 2 ? 2 /* T.R */ : 1 /* T.L */);\n    computeCharTypes(line, from, to, isolates, outerType);\n    processBracketPairs(line, from, to, isolates, outerType);\n    processNeutrals(from, to, isolates, outerType);\n    emitSpans(line, from, to, level, baseLevel, isolates, order);\n}\nfunction computeOrder(line, direction, isolates) {\n    if (!line)\n        return [new BidiSpan(0, 0, direction == RTL ? 1 : 0)];\n    if (direction == LTR && !isolates.length && !BidiRE.test(line))\n        return trivialOrder(line.length);\n    if (isolates.length)\n        while (line.length > types.length)\n            types[types.length] = 256 /* T.NI */; // Make sure types array has no gaps\n    let order = [], level = direction == LTR ? 0 : 1;\n    computeSectionOrder(line, level, level, isolates, 0, line.length, order);\n    return order;\n}\nfunction trivialOrder(length) {\n    return [new BidiSpan(0, length, 0)];\n}\nlet movedOver = \"\";\n// This implementation moves strictly visually, without concern for a\n// traversal visiting every logical position in the string. It will\n// still do so for simple input, but situations like multiple isolates\n// with the same level next to each other, or text going against the\n// main dir at the end of the line, will make some positions\n// unreachable with this motion. Each visible cursor position will\n// correspond to the lower-level bidi span that touches it.\n//\n// The alternative would be to solve an order globally for a given\n// line, making sure that it includes every position, but that would\n// require associating non-canonical (higher bidi span level)\n// positions with a given visual position, which is likely to confuse\n// people. (And would generally be a lot more complicated.)\nfunction moveVisually(line, order, dir, start, forward) {\n    var _a;\n    let startIndex = start.head - line.from;\n    let spanI = BidiSpan.find(order, startIndex, (_a = start.bidiLevel) !== null && _a !== void 0 ? _a : -1, start.assoc);\n    let span = order[spanI], spanEnd = span.side(forward, dir);\n    // End of span\n    if (startIndex == spanEnd) {\n        let nextI = spanI += forward ? 1 : -1;\n        if (nextI < 0 || nextI >= order.length)\n            return null;\n        span = order[spanI = nextI];\n        startIndex = span.side(!forward, dir);\n        spanEnd = span.side(forward, dir);\n    }\n    let nextIndex = findClusterBreak(line.text, startIndex, span.forward(forward, dir));\n    if (nextIndex < span.from || nextIndex > span.to)\n        nextIndex = spanEnd;\n    movedOver = line.text.slice(Math.min(startIndex, nextIndex), Math.max(startIndex, nextIndex));\n    let nextSpan = spanI == (forward ? order.length - 1 : 0) ? null : order[spanI + (forward ? 1 : -1)];\n    if (nextSpan && nextIndex == spanEnd && nextSpan.level + (forward ? 0 : 1) < span.level)\n        return EditorSelection.cursor(nextSpan.side(!forward, dir) + line.from, nextSpan.forward(forward, dir) ? 1 : -1, nextSpan.level);\n    return EditorSelection.cursor(nextIndex + line.from, span.forward(forward, dir) ? -1 : 1, span.level);\n}\nfunction autoDirection(text, from, to) {\n    for (let i = from; i < to; i++) {\n        let type = charType(text.charCodeAt(i));\n        if (type == 1 /* T.L */)\n            return LTR;\n        if (type == 2 /* T.R */ || type == 4 /* T.AL */)\n            return RTL;\n    }\n    return LTR;\n}\n\nconst clickAddsSelectionRange = /*@__PURE__*/Facet.define();\nconst dragMovesSelection$1 = /*@__PURE__*/Facet.define();\nconst mouseSelectionStyle = /*@__PURE__*/Facet.define();\nconst exceptionSink = /*@__PURE__*/Facet.define();\nconst updateListener = /*@__PURE__*/Facet.define();\nconst inputHandler = /*@__PURE__*/Facet.define();\nconst focusChangeEffect = /*@__PURE__*/Facet.define();\nconst clipboardInputFilter = /*@__PURE__*/Facet.define();\nconst clipboardOutputFilter = /*@__PURE__*/Facet.define();\nconst perLineTextDirection = /*@__PURE__*/Facet.define({\n    combine: values => values.some(x => x)\n});\nconst nativeSelectionHidden = /*@__PURE__*/Facet.define({\n    combine: values => values.some(x => x)\n});\nconst scrollHandler = /*@__PURE__*/Facet.define();\nclass ScrollTarget {\n    constructor(range, y, x, yMargin, xMargin, \n    // This data structure is abused to also store precise scroll\n    // snapshots, instead of a `scrollIntoView` request. When this\n    // flag is `true`, `range` points at a position in the reference\n    // line, `yMargin` holds the difference between the top of that\n    // line and the top of the editor, and `xMargin` holds the\n    // editor's `scrollLeft`.\n    isSnapshot = false) {\n        this.range = range;\n        this.y = y;\n        this.x = x;\n        this.yMargin = yMargin;\n        this.xMargin = xMargin;\n        this.isSnapshot = isSnapshot;\n    }\n    map(changes) {\n        return changes.empty ? this :\n            new ScrollTarget(this.range.map(changes), this.y, this.x, this.yMargin, this.xMargin, this.isSnapshot);\n    }\n    clip(state) {\n        return this.range.to <= state.doc.length ? this :\n            new ScrollTarget(EditorSelection.cursor(state.doc.length), this.y, this.x, this.yMargin, this.xMargin, this.isSnapshot);\n    }\n}\nconst scrollIntoView = /*@__PURE__*/StateEffect.define({ map: (t, ch) => t.map(ch) });\nconst setEditContextFormatting = /*@__PURE__*/StateEffect.define();\n/**\nLog or report an unhandled exception in client code. Should\nprobably only be used by extension code that allows client code to\nprovide functions, and calls those functions in a context where an\nexception can't be propagated to calling code in a reasonable way\n(for example when in an event handler).\n\nEither calls a handler registered with\n[`EditorView.exceptionSink`](https://codemirror.net/6/docs/ref/#view.EditorView^exceptionSink),\n`window.onerror`, if defined, or `console.error` (in which case\nit'll pass `context`, when given, as first argument).\n*/\nfunction logException(state, exception, context) {\n    let handler = state.facet(exceptionSink);\n    if (handler.length)\n        handler[0](exception);\n    else if (window.onerror && window.onerror(String(exception), context, undefined, undefined, exception)) ;\n    else if (context)\n        console.error(context + \":\", exception);\n    else\n        console.error(exception);\n}\nconst editable = /*@__PURE__*/Facet.define({ combine: values => values.length ? values[0] : true });\nlet nextPluginID = 0;\nconst viewPlugin = /*@__PURE__*/Facet.define({\n    combine(plugins) {\n        return plugins.filter((p, i) => {\n            for (let j = 0; j < i; j++)\n                if (plugins[j].plugin == p.plugin)\n                    return false;\n            return true;\n        });\n    }\n});\n/**\nView plugins associate stateful values with a view. They can\ninfluence the way the content is drawn, and are notified of things\nthat happen in the view. They optionally take an argument, in\nwhich case you need to call [`of`](https://codemirror.net/6/docs/ref/#view.ViewPlugin.of) to create\nan extension for the plugin. When the argument type is undefined,\nyou can use the plugin instance as an extension directly.\n*/\nclass ViewPlugin {\n    constructor(\n    /**\n    @internal\n    */\n    id, \n    /**\n    @internal\n    */\n    create, \n    /**\n    @internal\n    */\n    domEventHandlers, \n    /**\n    @internal\n    */\n    domEventObservers, buildExtensions) {\n        this.id = id;\n        this.create = create;\n        this.domEventHandlers = domEventHandlers;\n        this.domEventObservers = domEventObservers;\n        this.baseExtensions = buildExtensions(this);\n        this.extension = this.baseExtensions.concat(viewPlugin.of({ plugin: this, arg: undefined }));\n    }\n    /**\n    Create an extension for this plugin with the given argument.\n    */\n    of(arg) {\n        return this.baseExtensions.concat(viewPlugin.of({ plugin: this, arg }));\n    }\n    /**\n    Define a plugin from a constructor function that creates the\n    plugin's value, given an editor view.\n    */\n    static define(create, spec) {\n        const { eventHandlers, eventObservers, provide, decorations: deco } = spec || {};\n        return new ViewPlugin(nextPluginID++, create, eventHandlers, eventObservers, plugin => {\n            let ext = [];\n            if (deco)\n                ext.push(decorations.of(view => {\n                    let pluginInst = view.plugin(plugin);\n                    return pluginInst ? deco(pluginInst) : Decoration.none;\n                }));\n            if (provide)\n                ext.push(provide(plugin));\n            return ext;\n        });\n    }\n    /**\n    Create a plugin for a class whose constructor takes a single\n    editor view as argument.\n    */\n    static fromClass(cls, spec) {\n        return ViewPlugin.define((view, arg) => new cls(view, arg), spec);\n    }\n}\nclass PluginInstance {\n    constructor(spec) {\n        this.spec = spec;\n        // When starting an update, all plugins have this field set to the\n        // update object, indicating they need to be updated. When finished\n        // updating, it is set to `null`. Retrieving a plugin that needs to\n        // be updated with `view.plugin` forces an eager update.\n        this.mustUpdate = null;\n        // This is null when the plugin is initially created, but\n        // initialized on the first update.\n        this.value = null;\n    }\n    get plugin() { return this.spec && this.spec.plugin; }\n    update(view) {\n        if (!this.value) {\n            if (this.spec) {\n                try {\n                    this.value = this.spec.plugin.create(view, this.spec.arg);\n                }\n                catch (e) {\n                    logException(view.state, e, \"CodeMirror plugin crashed\");\n                    this.deactivate();\n                }\n            }\n        }\n        else if (this.mustUpdate) {\n            let update = this.mustUpdate;\n            this.mustUpdate = null;\n            if (this.value.update) {\n                try {\n                    this.value.update(update);\n                }\n                catch (e) {\n                    logException(update.state, e, \"CodeMirror plugin crashed\");\n                    if (this.value.destroy)\n                        try {\n                            this.value.destroy();\n                        }\n                        catch (_) { }\n                    this.deactivate();\n                }\n            }\n        }\n        return this;\n    }\n    destroy(view) {\n        var _a;\n        if ((_a = this.value) === null || _a === void 0 ? void 0 : _a.destroy) {\n            try {\n                this.value.destroy();\n            }\n            catch (e) {\n                logException(view.state, e, \"CodeMirror plugin crashed\");\n            }\n        }\n    }\n    deactivate() {\n        this.spec = this.value = null;\n    }\n}\nconst editorAttributes = /*@__PURE__*/Facet.define();\nconst contentAttributes = /*@__PURE__*/Facet.define();\n// Provide decorations\nconst decorations = /*@__PURE__*/Facet.define();\nconst blockWrappers = /*@__PURE__*/Facet.define();\nconst outerDecorations = /*@__PURE__*/Facet.define();\nconst atomicRanges = /*@__PURE__*/Facet.define();\nconst bidiIsolatedRanges = /*@__PURE__*/Facet.define();\nfunction getIsolatedRanges(view, line) {\n    let isolates = view.state.facet(bidiIsolatedRanges);\n    if (!isolates.length)\n        return isolates;\n    let sets = isolates.map(i => i instanceof Function ? i(view) : i);\n    let result = [];\n    RangeSet.spans(sets, line.from, line.to, {\n        point() { },\n        span(fromDoc, toDoc, active, open) {\n            let from = fromDoc - line.from, to = toDoc - line.from;\n            let level = result;\n            for (let i = active.length - 1; i >= 0; i--, open--) {\n                let direction = active[i].spec.bidiIsolate, update;\n                if (direction == null)\n                    direction = autoDirection(line.text, from, to);\n                if (open > 0 && level.length &&\n                    (update = level[level.length - 1]).to == from && update.direction == direction) {\n                    update.to = to;\n                    level = update.inner;\n                }\n                else {\n                    let add = { from, to, direction, inner: [] };\n                    level.push(add);\n                    level = add.inner;\n                }\n            }\n        }\n    });\n    return result;\n}\nconst scrollMargins = /*@__PURE__*/Facet.define();\nfunction getScrollMargins(view) {\n    let left = 0, right = 0, top = 0, bottom = 0;\n    for (let source of view.state.facet(scrollMargins)) {\n        let m = source(view);\n        if (m) {\n            if (m.left != null)\n                left = Math.max(left, m.left);\n            if (m.right != null)\n                right = Math.max(right, m.right);\n            if (m.top != null)\n                top = Math.max(top, m.top);\n            if (m.bottom != null)\n                bottom = Math.max(bottom, m.bottom);\n        }\n    }\n    return { left, right, top, bottom };\n}\nconst styleModule = /*@__PURE__*/Facet.define();\nclass ChangedRange {\n    constructor(fromA, toA, fromB, toB) {\n        this.fromA = fromA;\n        this.toA = toA;\n        this.fromB = fromB;\n        this.toB = toB;\n    }\n    join(other) {\n        return new ChangedRange(Math.min(this.fromA, other.fromA), Math.max(this.toA, other.toA), Math.min(this.fromB, other.fromB), Math.max(this.toB, other.toB));\n    }\n    addToSet(set) {\n        let i = set.length, me = this;\n        for (; i > 0; i--) {\n            let range = set[i - 1];\n            if (range.fromA > me.toA)\n                continue;\n            if (range.toA < me.fromA)\n                break;\n            me = me.join(range);\n            set.splice(i - 1, 1);\n        }\n        set.splice(i, 0, me);\n        return set;\n    }\n    // Extend a set to cover all the content in `ranges`, which is a\n    // flat array with each pair of numbers representing fromB/toB\n    // positions. These pairs are generated in unchanged ranges, so the\n    // offset between doc A and doc B is the same for their start and\n    // end points.\n    static extendWithRanges(diff, ranges) {\n        if (ranges.length == 0)\n            return diff;\n        let result = [];\n        for (let dI = 0, rI = 0, off = 0;;) {\n            let nextD = dI < diff.length ? diff[dI].fromB : 1e9;\n            let nextR = rI < ranges.length ? ranges[rI] : 1e9;\n            let fromB = Math.min(nextD, nextR);\n            if (fromB == 1e9)\n                break;\n            let fromA = fromB + off, toB = fromB, toA = fromA;\n            for (;;) {\n                if (rI < ranges.length && ranges[rI] <= toB) {\n                    let end = ranges[rI + 1];\n                    rI += 2;\n                    toB = Math.max(toB, end);\n                    for (let i = dI; i < diff.length && diff[i].fromB <= toB; i++)\n                        off = diff[i].toA - diff[i].toB;\n                    toA = Math.max(toA, end + off);\n                }\n                else if (dI < diff.length && diff[dI].fromB <= toB) {\n                    let next = diff[dI++];\n                    toB = Math.max(toB, next.toB);\n                    toA = Math.max(toA, next.toA);\n                    off = next.toA - next.toB;\n                }\n                else {\n                    break;\n                }\n            }\n            result.push(new ChangedRange(fromA, toA, fromB, toB));\n        }\n        return result;\n    }\n}\n/**\nView [plugins](https://codemirror.net/6/docs/ref/#view.ViewPlugin) are given instances of this\nclass, which describe what happened, whenever the view is updated.\n*/\nclass ViewUpdate {\n    constructor(\n    /**\n    The editor view that the update is associated with.\n    */\n    view, \n    /**\n    The new editor state.\n    */\n    state, \n    /**\n    The transactions involved in the update. May be empty.\n    */\n    transactions) {\n        this.view = view;\n        this.state = state;\n        this.transactions = transactions;\n        /**\n        @internal\n        */\n        this.flags = 0;\n        this.startState = view.state;\n        this.changes = ChangeSet.empty(this.startState.doc.length);\n        for (let tr of transactions)\n            this.changes = this.changes.compose(tr.changes);\n        let changedRanges = [];\n        this.changes.iterChangedRanges((fromA, toA, fromB, toB) => changedRanges.push(new ChangedRange(fromA, toA, fromB, toB)));\n        this.changedRanges = changedRanges;\n    }\n    /**\n    @internal\n    */\n    static create(view, state, transactions) {\n        return new ViewUpdate(view, state, transactions);\n    }\n    /**\n    Tells you whether the [viewport](https://codemirror.net/6/docs/ref/#view.EditorView.viewport) or\n    [visible ranges](https://codemirror.net/6/docs/ref/#view.EditorView.visibleRanges) changed in this\n    update.\n    */\n    get viewportChanged() {\n        return (this.flags & 4 /* UpdateFlag.Viewport */) > 0;\n    }\n    /**\n    Returns true when\n    [`viewportChanged`](https://codemirror.net/6/docs/ref/#view.ViewUpdate.viewportChanged) is true\n    and the viewport change is not just the result of mapping it in\n    response to document changes.\n    */\n    get viewportMoved() {\n        return (this.flags & 8 /* UpdateFlag.ViewportMoved */) > 0;\n    }\n    /**\n    Indicates whether the height of a block element in the editor\n    changed in this update.\n    */\n    get heightChanged() {\n        return (this.flags & 2 /* UpdateFlag.Height */) > 0;\n    }\n    /**\n    Returns true when the document was modified or the size of the\n    editor, or elements within the editor, changed.\n    */\n    get geometryChanged() {\n        return this.docChanged || (this.flags & (16 /* UpdateFlag.Geometry */ | 2 /* UpdateFlag.Height */)) > 0;\n    }\n    /**\n    True when this update indicates a focus change.\n    */\n    get focusChanged() {\n        return (this.flags & 1 /* UpdateFlag.Focus */) > 0;\n    }\n    /**\n    Whether the document changed in this update.\n    */\n    get docChanged() {\n        return !this.changes.empty;\n    }\n    /**\n    Whether the selection was explicitly set in this update.\n    */\n    get selectionSet() {\n        return this.transactions.some(tr => tr.selection);\n    }\n    /**\n    @internal\n    */\n    get empty() { return this.flags == 0 && this.transactions.length == 0; }\n}\n\nconst noChildren = [];\nclass Tile {\n    constructor(dom, length, flags = 0) {\n        this.dom = dom;\n        this.length = length;\n        this.flags = flags;\n        this.parent = null;\n        dom.cmTile = this;\n    }\n    get breakAfter() { return (this.flags & 1 /* TileFlag.BreakAfter */); }\n    get children() { return noChildren; }\n    isWidget() { return false; }\n    get isHidden() { return false; }\n    isComposite() { return false; }\n    isLine() { return false; }\n    isText() { return false; }\n    isBlock() { return false; }\n    get domAttrs() { return null; }\n    sync(track) {\n        this.flags |= 2 /* TileFlag.Synced */;\n        if (this.flags & 4 /* TileFlag.AttrsDirty */) {\n            this.flags &= ~4 /* TileFlag.AttrsDirty */;\n            let attrs = this.domAttrs;\n            if (attrs)\n                setAttrs(this.dom, attrs);\n        }\n    }\n    toString() {\n        return this.constructor.name + (this.children.length ? `(${this.children})` : \"\") + (this.breakAfter ? \"#\" : \"\");\n    }\n    destroy() { this.parent = null; }\n    setDOM(dom) {\n        this.dom = dom;\n        dom.cmTile = this;\n    }\n    get posAtStart() {\n        return this.parent ? this.parent.posBefore(this) : 0;\n    }\n    get posAtEnd() {\n        return this.posAtStart + this.length;\n    }\n    posBefore(tile, start = this.posAtStart) {\n        let pos = start;\n        for (let child of this.children) {\n            if (child == tile)\n                return pos;\n            pos += child.length + child.breakAfter;\n        }\n        throw new RangeError(\"Invalid child in posBefore\");\n    }\n    posAfter(tile) {\n        return this.posBefore(tile) + tile.length;\n    }\n    covers(side) { return true; }\n    coordsIn(pos, side) { return null; }\n    domPosFor(off, side) {\n        let index = domIndex(this.dom);\n        let after = this.length ? off > 0 : side > 0;\n        return new DOMPos(this.parent.dom, index + (after ? 1 : 0), off == 0 || off == this.length);\n    }\n    markDirty(attrs) {\n        this.flags &= ~2 /* TileFlag.Synced */;\n        if (attrs)\n            this.flags |= 4 /* TileFlag.AttrsDirty */;\n        if (this.parent && (this.parent.flags & 2 /* TileFlag.Synced */))\n            this.parent.markDirty(false);\n    }\n    get overrideDOMText() { return null; }\n    get root() {\n        for (let t = this; t; t = t.parent)\n            if (t instanceof DocTile)\n                return t;\n        return null;\n    }\n    static get(dom) {\n        return dom.cmTile;\n    }\n}\nclass CompositeTile extends Tile {\n    constructor(dom) {\n        super(dom, 0);\n        this._children = [];\n    }\n    isComposite() { return true; }\n    get children() { return this._children; }\n    get lastChild() { return this.children.length ? this.children[this.children.length - 1] : null; }\n    append(child) {\n        this.children.push(child);\n        child.parent = this;\n    }\n    sync(track) {\n        if (this.flags & 2 /* TileFlag.Synced */)\n            return;\n        super.sync(track);\n        let parent = this.dom, prev = null, next;\n        let tracking = (track === null || track === void 0 ? void 0 : track.node) == parent ? track : null;\n        let length = 0;\n        for (let child of this.children) {\n            child.sync(track);\n            length += child.length + child.breakAfter;\n            next = prev ? prev.nextSibling : parent.firstChild;\n            if (tracking && next != child.dom)\n                tracking.written = true;\n            if (child.dom.parentNode == parent) {\n                while (next && next != child.dom)\n                    next = rm$1(next);\n            }\n            else {\n                parent.insertBefore(child.dom, next);\n            }\n            prev = child.dom;\n        }\n        next = prev ? prev.nextSibling : parent.firstChild;\n        if (tracking && next)\n            tracking.written = true;\n        while (next)\n            next = rm$1(next);\n        this.length = length;\n    }\n}\n// Remove a DOM node and return its next sibling.\nfunction rm$1(dom) {\n    let next = dom.nextSibling;\n    dom.parentNode.removeChild(dom);\n    return next;\n}\n// The top-level tile. Its dom property equals view.contentDOM.\nclass DocTile extends CompositeTile {\n    constructor(view, dom) {\n        super(dom);\n        this.view = view;\n    }\n    owns(tile) {\n        for (; tile; tile = tile.parent)\n            if (tile == this)\n                return true;\n        return false;\n    }\n    isBlock() { return true; }\n    nearest(dom) {\n        for (;;) {\n            if (!dom)\n                return null;\n            let tile = Tile.get(dom);\n            if (tile && this.owns(tile))\n                return tile;\n            dom = dom.parentNode;\n        }\n    }\n    blockTiles(f) {\n        for (let stack = [], cur = this, i = 0, pos = 0;;) {\n            if (i == cur.children.length) {\n                if (!stack.length)\n                    return;\n                cur = cur.parent;\n                if (cur.breakAfter)\n                    pos++;\n                i = stack.pop();\n            }\n            else {\n                let next = cur.children[i++];\n                if (next instanceof BlockWrapperTile) {\n                    stack.push(i);\n                    cur = next;\n                    i = 0;\n                }\n                else {\n                    let end = pos + next.length;\n                    let result = f(next, pos);\n                    if (result !== undefined)\n                        return result;\n                    pos = end + next.breakAfter;\n                }\n            }\n        }\n    }\n    // Find the block at the given position. If side < -1, make sure to\n    // stay before block widgets at that position, if side > 1, after\n    // such widgets (used for selection drawing, which needs to be able\n    // to get coordinates for positions that aren't valid cursor positions).\n    resolveBlock(pos, side) {\n        let before, beforeOff = -1, after, afterOff = -1;\n        this.blockTiles((tile, off) => {\n            let end = off + tile.length;\n            if (pos >= off && pos <= end) {\n                if (tile.isWidget() && side >= -1 && side <= 1) {\n                    if (tile.flags & 32 /* TileFlag.After */)\n                        return true;\n                    if (tile.flags & 16 /* TileFlag.Before */)\n                        before = undefined;\n                }\n                if ((off < pos || pos == end && (side < -1 ? tile.length : tile.covers(1))) &&\n                    (!before || !tile.isWidget() && before.isWidget())) {\n                    before = tile;\n                    beforeOff = pos - off;\n                }\n                if ((end > pos || pos == off && (side > 1 ? tile.length : tile.covers(-1))) &&\n                    (!after || !tile.isWidget() && after.isWidget())) {\n                    after = tile;\n                    afterOff = pos - off;\n                }\n            }\n        });\n        if (!before && !after)\n            throw new Error(\"No tile at position \" + pos);\n        return before && side < 0 || !after ? { tile: before, offset: beforeOff } : { tile: after, offset: afterOff };\n    }\n}\nclass BlockWrapperTile extends CompositeTile {\n    constructor(dom, wrapper) {\n        super(dom);\n        this.wrapper = wrapper;\n    }\n    isBlock() { return true; }\n    covers(side) {\n        if (!this.children.length)\n            return false;\n        return side < 0 ? this.children[0].covers(-1) : this.lastChild.covers(1);\n    }\n    get domAttrs() { return this.wrapper.attributes; }\n    static of(wrapper, dom) {\n        let tile = new BlockWrapperTile(dom || document.createElement(wrapper.tagName), wrapper);\n        if (!dom)\n            tile.flags |= 4 /* TileFlag.AttrsDirty */;\n        return tile;\n    }\n}\nclass LineTile extends CompositeTile {\n    constructor(dom, attrs) {\n        super(dom);\n        this.attrs = attrs;\n    }\n    isLine() { return true; }\n    static start(attrs, dom, keepAttrs) {\n        let line = new LineTile(dom || document.createElement(\"div\"), attrs);\n        if (!dom || !keepAttrs)\n            line.flags |= 4 /* TileFlag.AttrsDirty */;\n        return line;\n    }\n    get domAttrs() { return this.attrs; }\n    // Find the tile associated with a given position in this line.\n    resolveInline(pos, side, forCoords) {\n        let before = null, beforeOff = -1, after = null, afterOff = -1;\n        function scan(tile, pos) {\n            for (let i = 0, off = 0; i < tile.children.length && off <= pos; i++) {\n                let child = tile.children[i], end = off + child.length;\n                if (end >= pos) {\n                    if (child.isComposite()) {\n                        scan(child, pos - off);\n                    }\n                    else if ((!after || after.isHidden && (side > 0 || forCoords && onSameLine(after, child))) &&\n                        (end > pos || (child.flags & 32 /* TileFlag.After */))) {\n                        after = child;\n                        afterOff = pos - off;\n                    }\n                    else if (off < pos || (child.flags & 16 /* TileFlag.Before */) && !child.isHidden) {\n                        before = child;\n                        beforeOff = pos - off;\n                    }\n                }\n                off = end;\n            }\n        }\n        scan(this, pos);\n        let target = ((side < 0 ? before : after) || before || after);\n        return target ? { tile: target, offset: target == before ? beforeOff : afterOff } : null;\n    }\n    coordsIn(pos, side) {\n        let found = this.resolveInline(pos, side, true);\n        if (!found)\n            return fallbackRect(this);\n        return found.tile.coordsIn(Math.max(0, found.offset), side);\n    }\n    domIn(pos, side) {\n        let found = this.resolveInline(pos, side);\n        if (found) {\n            let { tile, offset } = found;\n            if (this.dom.contains(tile.dom)) {\n                if (tile.isText())\n                    return new DOMPos(tile.dom, Math.min(tile.dom.nodeValue.length, offset));\n                return tile.domPosFor(offset, tile.flags & 16 /* TileFlag.Before */ ? 1 : tile.flags & 32 /* TileFlag.After */ ? -1 : side);\n            }\n            let parent = found.tile.parent, saw = false;\n            for (let ch of parent.children) {\n                if (saw)\n                    return new DOMPos(ch.dom, 0);\n                if (ch == found.tile) {\n                    saw = true;\n                }\n            }\n        }\n        return new DOMPos(this.dom, 0);\n    }\n}\nfunction fallbackRect(tile) {\n    let last = tile.dom.lastChild;\n    if (!last)\n        return tile.dom.getBoundingClientRect();\n    let rects = clientRectsFor(last);\n    return rects[rects.length - 1] || null;\n}\nfunction onSameLine(a, b) {\n    let posA = a.coordsIn(0, 1), posB = b.coordsIn(0, 1);\n    return posA && posB && posB.top < posA.bottom;\n}\nclass MarkTile extends CompositeTile {\n    constructor(dom, mark) {\n        super(dom);\n        this.mark = mark;\n    }\n    get domAttrs() { return this.mark.attrs; }\n    static of(mark, dom) {\n        let tile = new MarkTile(dom || document.createElement(mark.tagName), mark);\n        if (!dom)\n            tile.flags |= 4 /* TileFlag.AttrsDirty */;\n        return tile;\n    }\n}\nclass TextTile extends Tile {\n    constructor(dom, text) {\n        super(dom, text.length);\n        this.text = text;\n    }\n    sync(track) {\n        if (this.flags & 2 /* TileFlag.Synced */)\n            return;\n        super.sync(track);\n        if (this.dom.nodeValue != this.text) {\n            if (track && track.node == this.dom)\n                track.written = true;\n            this.dom.nodeValue = this.text;\n        }\n    }\n    isText() { return true; }\n    toString() { return JSON.stringify(this.text); }\n    coordsIn(pos, side) {\n        let length = this.dom.nodeValue.length;\n        if (pos > length)\n            pos = length;\n        let from = pos, to = pos, flatten = 0;\n        if (pos == 0 && side < 0 || pos == length && side >= 0) {\n            if (!(browser.chrome || browser.gecko)) { // These browsers reliably return valid rectangles for empty ranges\n                if (pos) {\n                    from--;\n                    flatten = 1;\n                } // FIXME this is wrong in RTL text\n                else if (to < length) {\n                    to++;\n                    flatten = -1;\n                }\n            }\n        }\n        else {\n            if (side < 0)\n                from--;\n            else if (to < length)\n                to++;\n        }\n        let rects = textRange(this.dom, from, to).getClientRects();\n        if (!rects.length)\n            return null;\n        let rect = rects[(flatten ? flatten < 0 : side >= 0) ? 0 : rects.length - 1];\n        if (browser.safari && !flatten && rect.width == 0)\n            rect = Array.prototype.find.call(rects, r => r.width) || rect;\n        return flatten ? flattenRect(rect, flatten < 0) : rect || null;\n    }\n    static of(text, dom) {\n        let tile = new TextTile(dom || document.createTextNode(text), text);\n        if (!dom)\n            tile.flags |= 2 /* TileFlag.Synced */;\n        return tile;\n    }\n}\nclass WidgetTile extends Tile {\n    constructor(dom, length, widget, flags) {\n        super(dom, length, flags);\n        this.widget = widget;\n    }\n    isWidget() { return true; }\n    get isHidden() { return this.widget.isHidden; }\n    covers(side) {\n        if (this.flags & 48 /* TileFlag.PointWidget */)\n            return false;\n        return (this.flags & (side < 0 ? 64 /* TileFlag.IncStart */ : 128 /* TileFlag.IncEnd */)) > 0;\n    }\n    coordsIn(pos, side) { return this.coordsInWidget(pos, side, false); }\n    coordsInWidget(pos, side, block) {\n        let custom = this.widget.coordsAt(this.dom, pos, side);\n        if (custom)\n            return custom;\n        if (block) {\n            return flattenRect(this.dom.getBoundingClientRect(), this.length ? pos == 0 : side <= 0);\n        }\n        else {\n            let rects = this.dom.getClientRects(), rect = null;\n            if (!rects.length)\n                return null;\n            let fromBack = (this.flags & 16 /* TileFlag.Before */) ? true : (this.flags & 32 /* TileFlag.After */) ? false : pos > 0;\n            for (let i = fromBack ? rects.length - 1 : 0;; i += (fromBack ? -1 : 1)) {\n                rect = rects[i];\n                if (pos > 0 ? i == 0 : i == rects.length - 1 || rect.top < rect.bottom)\n                    break;\n            }\n            return flattenRect(rect, !fromBack);\n        }\n    }\n    get overrideDOMText() {\n        if (!this.length)\n            return Text.empty;\n        let { root } = this;\n        if (!root)\n            return Text.empty;\n        let start = this.posAtStart;\n        return root.view.state.doc.slice(start, start + this.length);\n    }\n    destroy() {\n        super.destroy();\n        this.widget.destroy(this.dom);\n    }\n    static of(widget, view, length, flags, dom) {\n        if (!dom) {\n            dom = widget.toDOM(view);\n            if (!widget.editable)\n                dom.contentEditable = \"false\";\n        }\n        return new WidgetTile(dom, length, widget, flags);\n    }\n}\n// These are drawn around uneditable widgets to avoid a number of\n// browser bugs that show up when the cursor is directly next to\n// uneditable inline content.\nclass WidgetBufferTile extends Tile {\n    constructor(flags) {\n        let img = document.createElement(\"img\");\n        img.className = \"cm-widgetBuffer\";\n        img.setAttribute(\"aria-hidden\", \"true\");\n        super(img, 0, flags);\n    }\n    get isHidden() { return true; }\n    get overrideDOMText() { return Text.empty; }\n    coordsIn(pos) { return this.dom.getBoundingClientRect(); }\n}\n// Represents a position in the tile tree.\nclass TilePointer {\n    constructor(top) {\n        this.index = 0;\n        this.beforeBreak = false;\n        this.parents = [];\n        this.tile = top;\n    }\n    // Advance by the given distance. If side is -1, stop leaving or\n    // entering tiles, or skipping zero-length tiles, once the distance\n    // has been traversed. When side is 1, leave, enter, or skip\n    // everything at the end position.\n    advance(dist, side, walker) {\n        let { tile, index, beforeBreak, parents } = this;\n        while (dist || side > 0) {\n            if (!tile.isComposite()) {\n                if (index == tile.length) {\n                    beforeBreak = !!tile.breakAfter;\n                    ({ tile, index } = parents.pop());\n                    index++;\n                }\n                else if (!dist) {\n                    break;\n                }\n                else {\n                    let take = Math.min(dist, tile.length - index);\n                    if (walker)\n                        walker.skip(tile, index, index + take);\n                    dist -= take;\n                    index += take;\n                }\n            }\n            else if (beforeBreak) {\n                if (!dist)\n                    break;\n                if (walker)\n                    walker.break();\n                dist--;\n                beforeBreak = false;\n            }\n            else if (index == tile.children.length) {\n                if (!dist && !parents.length)\n                    break;\n                if (walker)\n                    walker.leave(tile);\n                beforeBreak = !!tile.breakAfter;\n                ({ tile, index } = parents.pop());\n                index++;\n            }\n            else {\n                let next = tile.children[index], brk = next.breakAfter;\n                if ((side > 0 ? next.length <= dist : next.length < dist) &&\n                    (!walker || walker.skip(next, 0, next.length) !== false || !next.isComposite)) {\n                    beforeBreak = !!brk;\n                    index++;\n                    dist -= next.length;\n                }\n                else {\n                    parents.push({ tile, index });\n                    tile = next;\n                    index = 0;\n                    if (walker && next.isComposite())\n                        walker.enter(next);\n                }\n            }\n        }\n        this.tile = tile;\n        this.index = index;\n        this.beforeBreak = beforeBreak;\n        return this;\n    }\n    get root() { return (this.parents.length ? this.parents[0].tile : this.tile); }\n}\n\n// Used to track open block wrappers\nclass OpenWrapper {\n    constructor(from, to, wrapper, rank) {\n        this.from = from;\n        this.to = to;\n        this.wrapper = wrapper;\n        this.rank = rank;\n    }\n}\n// This class builds up a new document tile using input from either\n// iteration over the old tree or iteration over the document +\n// decorations. The add* methods emit elements into the tile\n// structure. To avoid awkward synchronization issues, marks and block\n// wrappers are treated as belonging to to their content, rather than\n// opened/closed independently.\n//\n// All composite tiles that are touched by changes are rebuilt,\n// reusing as much of the old tree (either whole nodes or just DOM\n// elements) as possible. The new tree is built without the Synced\n// flag, and then synced (during which DOM parent/child relations are\n// fixed up, text nodes filled in, and attributes added) in a second\n// phase.\nclass TileBuilder {\n    constructor(cache, root, blockWrappers) {\n        this.cache = cache;\n        this.root = root;\n        this.blockWrappers = blockWrappers;\n        this.curLine = null;\n        this.lastBlock = null;\n        this.afterWidget = null;\n        this.pos = 0;\n        this.wrappers = [];\n        this.wrapperPos = 0;\n    }\n    addText(text, marks, openStart, tile) {\n        var _a;\n        this.flushBuffer();\n        let parent = this.ensureMarks(marks, openStart);\n        let prev = parent.lastChild;\n        if (prev && prev.isText() && !(prev.flags & 8 /* TileFlag.Composition */) && prev.length + text.length < 512 /* C.Chunk */) {\n            this.cache.reused.set(prev, 2 /* Reused.DOM */);\n            let tile = parent.children[parent.children.length - 1] = new TextTile(prev.dom, prev.text + text);\n            tile.parent = parent;\n        }\n        else {\n            parent.append(tile || TextTile.of(text, (_a = this.cache.find(TextTile)) === null || _a === void 0 ? void 0 : _a.dom));\n        }\n        this.pos += text.length;\n        this.afterWidget = null;\n    }\n    addComposition(composition, context) {\n        let line = this.curLine;\n        if (line.dom != context.line.dom) {\n            line.setDOM(this.cache.reused.has(context.line) ? freeNode(context.line.dom) : context.line.dom);\n            this.cache.reused.set(context.line, 2 /* Reused.DOM */);\n        }\n        let head = line;\n        for (let i = context.marks.length - 1; i >= 0; i--) {\n            let mark = context.marks[i];\n            let last = head.lastChild;\n            if (last instanceof MarkTile && last.mark.eq(mark.mark)) {\n                if (last.dom != mark.dom)\n                    last.setDOM(freeNode(mark.dom));\n                head = last;\n            }\n            else {\n                if (this.cache.reused.get(mark)) {\n                    let tile = Tile.get(mark.dom);\n                    if (tile)\n                        tile.setDOM(freeNode(mark.dom));\n                }\n                let nw = MarkTile.of(mark.mark, mark.dom);\n                head.append(nw);\n                head = nw;\n            }\n            this.cache.reused.set(mark, 2 /* Reused.DOM */);\n        }\n        let oldTile = Tile.get(composition.text);\n        if (oldTile)\n            this.cache.reused.set(oldTile, 2 /* Reused.DOM */);\n        let text = new TextTile(composition.text, composition.text.nodeValue);\n        text.flags |= 8 /* TileFlag.Composition */;\n        this.pos = composition.range.toB;\n        head.append(text);\n    }\n    addInlineWidget(widget, marks, openStart) {\n        // Adjacent same-side-facing non-replacing widgets don't need buffers between them\n        let noSpace = this.afterWidget && (widget.flags & 48 /* TileFlag.PointWidget */) &&\n            (this.afterWidget.flags & 48 /* TileFlag.PointWidget */) == (widget.flags & 48 /* TileFlag.PointWidget */);\n        if (!noSpace)\n            this.flushBuffer();\n        let parent = this.ensureMarks(marks, openStart);\n        if (!noSpace && !(widget.flags & 16 /* TileFlag.Before */))\n            parent.append(this.getBuffer(1));\n        parent.append(widget);\n        this.pos += widget.length;\n        this.afterWidget = widget;\n    }\n    addMark(tile, marks, openStart) {\n        this.flushBuffer();\n        let parent = this.ensureMarks(marks, openStart);\n        parent.append(tile);\n        this.pos += tile.length;\n        this.afterWidget = null;\n    }\n    addBlockWidget(widget) {\n        this.getBlockPos().append(widget);\n        this.pos += widget.length;\n        this.lastBlock = widget;\n        this.endLine();\n    }\n    continueWidget(length) {\n        let widget = this.afterWidget || this.lastBlock;\n        widget.length += length;\n        this.pos += length;\n    }\n    addLineStart(attrs, dom) {\n        var _a;\n        if (!attrs)\n            attrs = lineBaseAttrs;\n        let tile = LineTile.start(attrs, dom || ((_a = this.cache.find(LineTile)) === null || _a === void 0 ? void 0 : _a.dom), !!dom);\n        this.getBlockPos().append(this.lastBlock = this.curLine = tile);\n    }\n    addLine(tile) {\n        this.getBlockPos().append(tile);\n        this.pos += tile.length;\n        this.lastBlock = tile;\n        this.endLine();\n    }\n    addBreak() {\n        this.lastBlock.flags |= 1 /* TileFlag.BreakAfter */;\n        this.endLine();\n        this.pos++;\n    }\n    addLineStartIfNotCovered(attrs) {\n        if (!this.blockPosCovered())\n            this.addLineStart(attrs);\n    }\n    ensureLine(attrs) {\n        if (!this.curLine)\n            this.addLineStart(attrs);\n    }\n    ensureMarks(marks, openStart) {\n        var _a;\n        let parent = this.curLine;\n        for (let i = marks.length - 1; i >= 0; i--) {\n            let mark = marks[i], last;\n            if (openStart > 0 && (last = parent.lastChild) && last instanceof MarkTile && last.mark.eq(mark)) {\n                parent = last;\n                openStart--;\n            }\n            else {\n                let tile = MarkTile.of(mark, (_a = this.cache.find(MarkTile, m => m.mark.eq(mark))) === null || _a === void 0 ? void 0 : _a.dom);\n                parent.append(tile);\n                parent = tile;\n                openStart = 0;\n            }\n        }\n        return parent;\n    }\n    endLine() {\n        if (this.curLine) {\n            this.flushBuffer();\n            let last = this.curLine.lastChild;\n            if (!last || !hasContent(this.curLine, false) ||\n                last.dom.nodeName != \"BR\" && last.isWidget() && !(browser.ios && hasContent(this.curLine, true)))\n                this.curLine.append(this.cache.findWidget(BreakWidget, 0, 32 /* TileFlag.After */) ||\n                    new WidgetTile(BreakWidget.toDOM(), 0, BreakWidget, 32 /* TileFlag.After */));\n            this.curLine = this.afterWidget = null;\n        }\n    }\n    updateBlockWrappers() {\n        if (this.wrapperPos > this.pos + 10000 /* C.WrapperReset */) {\n            this.blockWrappers.goto(this.pos);\n            this.wrappers.length = 0;\n        }\n        for (let i = this.wrappers.length - 1; i >= 0; i--)\n            if (this.wrappers[i].to < this.pos)\n                this.wrappers.splice(i, 1);\n        for (let cur = this.blockWrappers; cur.value && cur.from <= this.pos; cur.next())\n            if (cur.to >= this.pos) {\n                let rank = (cur.rank * 102) + cur.value.rank;\n                let wrap = new OpenWrapper(cur.from, cur.to, cur.value, rank), i = this.wrappers.length;\n                while (i > 0 && (this.wrappers[i - 1].rank - wrap.rank || this.wrappers[i - 1].to - wrap.to) < 0)\n                    i--;\n                this.wrappers.splice(i, 0, wrap);\n            }\n        this.wrapperPos = this.pos;\n    }\n    getBlockPos() {\n        var _a;\n        this.updateBlockWrappers();\n        let parent = this.root;\n        for (let wrap of this.wrappers) {\n            let last = parent.lastChild;\n            if (wrap.from < this.pos && last instanceof BlockWrapperTile && last.wrapper.eq(wrap.wrapper)) {\n                parent = last;\n            }\n            else {\n                let tile = BlockWrapperTile.of(wrap.wrapper, (_a = this.cache.find(BlockWrapperTile, t => t.wrapper.eq(wrap.wrapper))) === null || _a === void 0 ? void 0 : _a.dom);\n                parent.append(tile);\n                parent = tile;\n            }\n        }\n        return parent;\n    }\n    blockPosCovered() {\n        let last = this.lastBlock;\n        return last != null && !last.breakAfter && (!last.isWidget() || (last.flags & (32 /* TileFlag.After */ | 128 /* TileFlag.IncEnd */)) > 0);\n    }\n    getBuffer(side) {\n        let flags = 2 /* TileFlag.Synced */ | (side < 0 ? 16 /* TileFlag.Before */ : 32 /* TileFlag.After */);\n        let found = this.cache.find(WidgetBufferTile, undefined, 1 /* Reused.Full */);\n        if (found)\n            found.flags = flags;\n        return found || new WidgetBufferTile(flags);\n    }\n    flushBuffer() {\n        if (this.afterWidget && !(this.afterWidget.flags & 32 /* TileFlag.After */)) {\n            this.afterWidget.parent.append(this.getBuffer(-1));\n            this.afterWidget = null;\n        }\n    }\n}\n// Helps getting efficient access to the document text.\nclass TextStream {\n    constructor(doc) {\n        this.skipCount = 0;\n        this.text = \"\";\n        this.textOff = 0;\n        this.cursor = doc.iter();\n    }\n    skip(len) {\n        // Advance the iterator past the replaced content\n        if (this.textOff + len <= this.text.length) {\n            this.textOff += len;\n        }\n        else {\n            this.skipCount += len - (this.text.length - this.textOff);\n            this.text = \"\";\n            this.textOff = 0;\n        }\n    }\n    next(maxLen) {\n        if (this.textOff == this.text.length) {\n            let { value, lineBreak, done } = this.cursor.next(this.skipCount);\n            this.skipCount = 0;\n            if (done)\n                throw new Error(\"Ran out of text content when drawing inline views\");\n            this.text = value;\n            let len = this.textOff = Math.min(maxLen, value.length);\n            return lineBreak ? null : value.slice(0, len);\n        }\n        let end = Math.min(this.text.length, this.textOff + maxLen);\n        let chars = this.text.slice(this.textOff, end);\n        this.textOff = end;\n        return chars;\n    }\n}\n// Assign the tile classes bucket numbers for caching.\nconst buckets = [WidgetTile, LineTile, TextTile, MarkTile, WidgetBufferTile, BlockWrapperTile, DocTile];\nfor (let i = 0; i < buckets.length; i++)\n    buckets[i].bucket = i;\n// Leaf tiles and line tiles may be reused in their entirety. All\n// others will get new tiles allocated, using the old DOM when\n// possible.\nclass TileCache {\n    constructor(view) {\n        this.view = view;\n        // Buckets are circular buffers, using `index` as the current\n        // position.\n        this.buckets = buckets.map(() => []);\n        this.index = buckets.map(() => 0);\n        this.reused = new Map;\n    }\n    // Put a tile in the cache.\n    add(tile) {\n        let i = tile.constructor.bucket, bucket = this.buckets[i];\n        if (bucket.length < 6 /* C.Bucket */)\n            bucket.push(tile);\n        else\n            bucket[this.index[i] = (this.index[i] + 1) % 6 /* C.Bucket */] = tile;\n    }\n    find(cls, test, type = 2 /* Reused.DOM */) {\n        let i = cls.bucket;\n        let bucket = this.buckets[i], off = this.index[i];\n        for (let j = bucket.length - 1; j >= 0; j--) {\n            // Look at the most recently added items first (last-in, first-out)\n            let index = (j + off) % bucket.length, tile = bucket[index];\n            if ((!test || test(tile)) && !this.reused.has(tile)) {\n                bucket.splice(index, 1);\n                if (index < off)\n                    this.index[i]--;\n                this.reused.set(tile, type);\n                return tile;\n            }\n        }\n        return null;\n    }\n    findWidget(widget, length, flags) {\n        let widgets = this.buckets[0];\n        if (widgets.length)\n            for (let i = 0, pass = 0;; i++) {\n                if (i == widgets.length) {\n                    if (pass)\n                        return null;\n                    pass = 1;\n                    i = 0;\n                }\n                let tile = widgets[i];\n                if (!this.reused.has(tile) &&\n                    (pass == 0 ? tile.widget.compare(widget)\n                        : tile.widget.constructor == widget.constructor && widget.updateDOM(tile.dom, this.view, tile.widget))) {\n                    widgets.splice(i, 1);\n                    if (i < this.index[0])\n                        this.index[0]--;\n                    if (tile.widget == widget && tile.length == length && (tile.flags & (496 /* TileFlag.Widget */ | 1 /* TileFlag.BreakAfter */)) == flags) {\n                        this.reused.set(tile, 1 /* Reused.Full */);\n                        return tile;\n                    }\n                    else {\n                        this.reused.set(tile, 2 /* Reused.DOM */);\n                        return new WidgetTile(tile.dom, length, widget, (tile.flags & ~(496 /* TileFlag.Widget */ | 1 /* TileFlag.BreakAfter */)) | flags);\n                    }\n                }\n            }\n    }\n    reuse(tile) {\n        this.reused.set(tile, 1 /* Reused.Full */);\n        return tile;\n    }\n    maybeReuse(tile, type = 2 /* Reused.DOM */) {\n        if (this.reused.has(tile))\n            return undefined;\n        this.reused.set(tile, type);\n        return tile.dom;\n    }\n    clear() {\n        for (let i = 0; i < this.buckets.length; i++)\n            this.buckets[i].length = this.index[i] = 0;\n    }\n}\n// This class organizes a pass over the document, guided by the array\n// of replaced ranges. For ranges that haven't changed, it iterates\n// the old tree and copies its content into the new document. For\n// changed ranges, it runs a decoration iterator to guide generation\n// of content.\nclass TileUpdate {\n    constructor(view, old, blockWrappers, decorations, disallowBlockEffectsFor) {\n        this.view = view;\n        this.decorations = decorations;\n        this.disallowBlockEffectsFor = disallowBlockEffectsFor;\n        this.openWidget = false;\n        this.openMarks = 0;\n        this.cache = new TileCache(view);\n        this.text = new TextStream(view.state.doc);\n        this.builder = new TileBuilder(this.cache, new DocTile(view, view.contentDOM), RangeSet.iter(blockWrappers));\n        this.cache.reused.set(old, 2 /* Reused.DOM */);\n        this.old = new TilePointer(old);\n        this.reuseWalker = {\n            skip: (tile, from, to) => {\n                this.cache.add(tile);\n                if (tile.isComposite())\n                    return false;\n            },\n            enter: tile => this.cache.add(tile),\n            leave: () => { },\n            break: () => { }\n        };\n    }\n    run(changes, composition) {\n        let compositionContext = composition && this.getCompositionContext(composition.text);\n        for (let posA = 0, posB = 0, i = 0;;) {\n            let next = i < changes.length ? changes[i++] : null;\n            let skipA = next ? next.fromA : this.old.root.length;\n            if (skipA > posA) {\n                let len = skipA - posA;\n                this.preserve(len, !i, !next);\n                posA = skipA;\n                posB += len;\n            }\n            if (!next)\n                break;\n            // Compositions need to be handled specially, forcing the\n            // focused text node and its parent nodes to remain stable at\n            // that point in the document.\n            if (composition && next.fromA <= composition.range.fromA && next.toA >= composition.range.toA) {\n                this.forward(next.fromA, composition.range.fromA, composition.range.fromA < composition.range.toA ? 1 : -1);\n                this.emit(posB, composition.range.fromB);\n                this.cache.clear(); // Must not reuse DOM across composition\n                this.builder.addComposition(composition, compositionContext);\n                this.text.skip(composition.range.toB - composition.range.fromB);\n                this.forward(composition.range.fromA, next.toA);\n                this.emit(composition.range.toB, next.toB);\n            }\n            else {\n                this.forward(next.fromA, next.toA);\n                this.emit(posB, next.toB);\n            }\n            posB = next.toB;\n            posA = next.toA;\n        }\n        if (this.builder.curLine)\n            this.builder.endLine();\n        return this.builder.root;\n    }\n    preserve(length, incStart, incEnd) {\n        let activeMarks = getMarks(this.old), openMarks = this.openMarks;\n        this.old.advance(length, incEnd ? 1 : -1, {\n            skip: (tile, from, to) => {\n                if (tile.isWidget()) {\n                    if (this.openWidget) {\n                        this.builder.continueWidget(to - from);\n                    }\n                    else {\n                        let widget = to > 0 || from < tile.length\n                            ? WidgetTile.of(tile.widget, this.view, to - from, tile.flags & 496 /* TileFlag.Widget */, this.cache.maybeReuse(tile))\n                            : this.cache.reuse(tile);\n                        if (widget.flags & 256 /* TileFlag.Block */) {\n                            widget.flags &= ~1 /* TileFlag.BreakAfter */;\n                            this.builder.addBlockWidget(widget);\n                        }\n                        else {\n                            this.builder.ensureLine(null);\n                            this.builder.addInlineWidget(widget, activeMarks, openMarks);\n                            openMarks = activeMarks.length;\n                        }\n                    }\n                }\n                else if (tile.isText()) {\n                    this.builder.ensureLine(null);\n                    if (!from && to == tile.length && !this.cache.reused.has(tile)) {\n                        this.builder.addText(tile.text, activeMarks, openMarks, this.cache.reuse(tile));\n                    }\n                    else {\n                        this.cache.add(tile);\n                        this.builder.addText(tile.text.slice(from, to), activeMarks, openMarks);\n                    }\n                    openMarks = activeMarks.length;\n                }\n                else if (tile.isLine()) {\n                    tile.flags &= ~1 /* TileFlag.BreakAfter */;\n                    this.cache.reused.set(tile, 1 /* Reused.Full */);\n                    this.builder.addLine(tile);\n                }\n                else if (tile instanceof WidgetBufferTile) {\n                    this.cache.add(tile);\n                }\n                else if (tile instanceof MarkTile) {\n                    this.builder.ensureLine(null);\n                    this.builder.addMark(tile, activeMarks, openMarks);\n                    this.cache.reused.set(tile, 1 /* Reused.Full */);\n                    openMarks = activeMarks.length;\n                }\n                else {\n                    return false;\n                }\n                this.openWidget = false;\n            },\n            enter: (tile) => {\n                if (tile.isLine()) {\n                    this.builder.addLineStart(tile.attrs, this.cache.maybeReuse(tile));\n                }\n                else {\n                    this.cache.add(tile);\n                    if (tile instanceof MarkTile)\n                        activeMarks.unshift(tile.mark);\n                }\n                this.openWidget = false;\n            },\n            leave: (tile) => {\n                if (tile.isLine()) {\n                    if (activeMarks.length)\n                        activeMarks.length = openMarks = 0;\n                }\n                else if (tile instanceof MarkTile) {\n                    activeMarks.shift();\n                    openMarks = Math.min(openMarks, activeMarks.length);\n                }\n            },\n            break: () => {\n                this.builder.addBreak();\n                this.openWidget = false;\n            },\n        });\n        this.text.skip(length);\n    }\n    emit(from, to) {\n        let pendingLineAttrs = null;\n        let b = this.builder, markCount = 0;\n        let openEnd = RangeSet.spans(this.decorations, from, to, {\n            point: (from, to, deco, active, openStart, index) => {\n                if (deco instanceof PointDecoration) {\n                    if (this.disallowBlockEffectsFor[index]) {\n                        if (deco.block)\n                            throw new RangeError(\"Block decorations may not be specified via plugins\");\n                        if (to > this.view.state.doc.lineAt(from).to)\n                            throw new RangeError(\"Decorations that replace line breaks may not be specified via plugins\");\n                    }\n                    markCount = active.length;\n                    if (openStart > active.length) {\n                        b.continueWidget(to - from);\n                    }\n                    else {\n                        let widget = deco.widget || (deco.block ? NullWidget.block : NullWidget.inline);\n                        let flags = widgetFlags(deco);\n                        let tile = this.cache.findWidget(widget, to - from, flags) || WidgetTile.of(widget, this.view, to - from, flags);\n                        if (deco.block) {\n                            if (deco.startSide > 0)\n                                b.addLineStartIfNotCovered(pendingLineAttrs);\n                            b.addBlockWidget(tile);\n                        }\n                        else {\n                            b.ensureLine(pendingLineAttrs);\n                            b.addInlineWidget(tile, active, openStart);\n                        }\n                    }\n                    pendingLineAttrs = null;\n                }\n                else {\n                    pendingLineAttrs = addLineDeco(pendingLineAttrs, deco);\n                }\n                if (to > from)\n                    this.text.skip(to - from);\n            },\n            span: (from, to, active, openStart) => {\n                for (let pos = from; pos < to;) {\n                    let chars = this.text.next(Math.min(512 /* C.Chunk */, to - pos));\n                    if (chars == null) { // Line break\n                        b.addLineStartIfNotCovered(pendingLineAttrs);\n                        b.addBreak();\n                        pos++;\n                    }\n                    else {\n                        b.ensureLine(pendingLineAttrs);\n                        b.addText(chars, active, pos == from ? openStart : active.length);\n                        pos += chars.length;\n                    }\n                    pendingLineAttrs = null;\n                }\n            }\n        });\n        b.addLineStartIfNotCovered(pendingLineAttrs);\n        this.openWidget = openEnd > markCount;\n        this.openMarks = openEnd;\n    }\n    forward(from, to, side = 1) {\n        if (to - from <= 10) {\n            this.old.advance(to - from, side, this.reuseWalker);\n        }\n        else {\n            this.old.advance(5, -1, this.reuseWalker);\n            this.old.advance(to - from - 10, -1);\n            this.old.advance(5, side, this.reuseWalker);\n        }\n    }\n    getCompositionContext(text) {\n        let marks = [], line = null;\n        for (let parent = text.parentNode;; parent = parent.parentNode) {\n            let tile = Tile.get(parent);\n            if (parent == this.view.contentDOM)\n                break;\n            if (tile instanceof MarkTile)\n                marks.push(tile);\n            else if (tile === null || tile === void 0 ? void 0 : tile.isLine())\n                line = tile;\n            else if (tile instanceof BlockWrapperTile) ; // Ignore\n            else if (parent.nodeName == \"DIV\" && !line && parent != this.view.contentDOM)\n                line = new LineTile(parent, lineBaseAttrs);\n            else if (!line)\n                marks.push(MarkTile.of(new MarkDecoration({ tagName: parent.nodeName.toLowerCase(), attributes: getAttrs(parent) }), parent));\n        }\n        return { line: line, marks };\n    }\n}\nfunction hasContent(tile, requireText) {\n    let scan = (tile) => {\n        for (let ch of tile.children)\n            if ((requireText ? ch.isText() : ch.length) || scan(ch))\n                return true;\n        return false;\n    };\n    return scan(tile);\n}\nfunction widgetFlags(deco) {\n    let flags = deco.isReplace ? (deco.startSide < 0 ? 64 /* TileFlag.IncStart */ : 0) | (deco.endSide > 0 ? 128 /* TileFlag.IncEnd */ : 0)\n        : (deco.startSide > 0 ? 32 /* TileFlag.After */ : 16 /* TileFlag.Before */);\n    if (deco.block)\n        flags |= 256 /* TileFlag.Block */;\n    return flags;\n}\nconst lineBaseAttrs = { class: \"cm-line\" };\nfunction addLineDeco(value, deco) {\n    let attrs = deco.spec.attributes, cls = deco.spec.class;\n    if (!attrs && !cls)\n        return value;\n    if (!value)\n        value = { class: \"cm-line\" };\n    if (attrs)\n        combineAttrs(attrs, value);\n    if (cls)\n        value.class += \" \" + cls;\n    return value;\n}\nfunction getMarks(ptr) {\n    let found = [];\n    for (let i = ptr.parents.length; i > 1; i--) {\n        let tile = i == ptr.parents.length ? ptr.tile : ptr.parents[i].tile;\n        if (tile instanceof MarkTile)\n            found.push(tile.mark);\n    }\n    return found;\n}\nfunction freeNode(node) {\n    let tile = Tile.get(node);\n    if (tile)\n        tile.setDOM(node.cloneNode());\n    return node;\n}\nclass NullWidget extends WidgetType {\n    constructor(tag) {\n        super();\n        this.tag = tag;\n    }\n    eq(other) { return other.tag == this.tag; }\n    toDOM() { return document.createElement(this.tag); }\n    updateDOM(elt) { return elt.nodeName.toLowerCase() == this.tag; }\n    get isHidden() { return true; }\n}\nNullWidget.inline = /*@__PURE__*/new NullWidget(\"span\");\nNullWidget.block = /*@__PURE__*/new NullWidget(\"div\");\nconst BreakWidget = /*@__PURE__*/new class extends WidgetType {\n    toDOM() { return document.createElement(\"br\"); }\n    get isHidden() { return true; }\n    get editable() { return true; }\n};\n\nclass DocView {\n    constructor(view) {\n        this.view = view;\n        this.decorations = [];\n        this.blockWrappers = [];\n        this.dynamicDecorationMap = [false];\n        this.domChanged = null;\n        this.hasComposition = null;\n        this.editContextFormatting = Decoration.none;\n        this.lastCompositionAfterCursor = false;\n        // Track a minimum width for the editor. When measuring sizes in\n        // measureVisibleLineHeights, this is updated to point at the width\n        // of a given element and its extent in the document. When a change\n        // happens in that range, these are reset. That way, once we've seen\n        // a line/element of a given length, we keep the editor wide enough\n        // to fit at least that element, until it is changed, at which point\n        // we forget it again.\n        this.minWidth = 0;\n        this.minWidthFrom = 0;\n        this.minWidthTo = 0;\n        // Track whether the DOM selection was set in a lossy way, so that\n        // we don't mess it up when reading it back it\n        this.impreciseAnchor = null;\n        this.impreciseHead = null;\n        this.forceSelection = false;\n        // Used by the resize observer to ignore resizes that we caused\n        // ourselves\n        this.lastUpdate = Date.now();\n        this.updateDeco();\n        this.tile = new DocTile(view, view.contentDOM);\n        this.updateInner([new ChangedRange(0, 0, 0, view.state.doc.length)], null);\n    }\n    // Update the document view to a given state.\n    update(update) {\n        var _a;\n        let changedRanges = update.changedRanges;\n        if (this.minWidth > 0 && changedRanges.length) {\n            if (!changedRanges.every(({ fromA, toA }) => toA < this.minWidthFrom || fromA > this.minWidthTo)) {\n                this.minWidth = this.minWidthFrom = this.minWidthTo = 0;\n            }\n            else {\n                this.minWidthFrom = update.changes.mapPos(this.minWidthFrom, 1);\n                this.minWidthTo = update.changes.mapPos(this.minWidthTo, 1);\n            }\n        }\n        this.updateEditContextFormatting(update);\n        let readCompositionAt = -1;\n        if (this.view.inputState.composing >= 0 && !this.view.observer.editContext) {\n            if ((_a = this.domChanged) === null || _a === void 0 ? void 0 : _a.newSel)\n                readCompositionAt = this.domChanged.newSel.head;\n            else if (!touchesComposition(update.changes, this.hasComposition) && !update.selectionSet)\n                readCompositionAt = update.state.selection.main.head;\n        }\n        let composition = readCompositionAt > -1 ? findCompositionRange(this.view, update.changes, readCompositionAt) : null;\n        this.domChanged = null;\n        if (this.hasComposition) {\n            let { from, to } = this.hasComposition;\n            changedRanges = new ChangedRange(from, to, update.changes.mapPos(from, -1), update.changes.mapPos(to, 1))\n                .addToSet(changedRanges.slice());\n        }\n        this.hasComposition = composition ? { from: composition.range.fromB, to: composition.range.toB } : null;\n        // When the DOM nodes around the selection are moved to another\n        // parent, Chrome sometimes reports a different selection through\n        // getSelection than the one that it actually shows to the user.\n        // This forces a selection update when lines are joined to work\n        // around that. Issue #54\n        if ((browser.ie || browser.chrome) && !composition && update &&\n            update.state.doc.lines != update.startState.doc.lines)\n            this.forceSelection = true;\n        let prevDeco = this.decorations, prevWrappers = this.blockWrappers;\n        this.updateDeco();\n        let decoDiff = findChangedDeco(prevDeco, this.decorations, update.changes);\n        if (decoDiff.length)\n            changedRanges = ChangedRange.extendWithRanges(changedRanges, decoDiff);\n        let blockDiff = findChangedWrappers(prevWrappers, this.blockWrappers, update.changes);\n        if (blockDiff.length)\n            changedRanges = ChangedRange.extendWithRanges(changedRanges, blockDiff);\n        if (composition && !changedRanges.some(r => r.fromA <= composition.range.fromA && r.toA >= composition.range.toA))\n            changedRanges = composition.range.addToSet(changedRanges.slice());\n        if ((this.tile.flags & 2 /* TileFlag.Synced */) && changedRanges.length == 0) {\n            return false;\n        }\n        else {\n            this.updateInner(changedRanges, composition);\n            if (update.transactions.length)\n                this.lastUpdate = Date.now();\n            return true;\n        }\n    }\n    // Used by update and the constructor do perform the actual DOM\n    // update\n    updateInner(changes, composition) {\n        this.view.viewState.mustMeasureContent = true;\n        let { observer } = this.view;\n        observer.ignore(() => {\n            if (composition || changes.length) {\n                let oldTile = this.tile;\n                let builder = new TileUpdate(this.view, oldTile, this.blockWrappers, this.decorations, this.dynamicDecorationMap);\n                if (composition && Tile.get(composition.text))\n                    builder.cache.reused.set(Tile.get(composition.text), 2 /* Reused.DOM */);\n                this.tile = builder.run(changes, composition);\n                destroyDropped(oldTile, builder.cache.reused);\n            }\n            // Lock the height during redrawing, since Chrome sometimes\n            // messes with the scroll position during DOM mutation (though\n            // no relayout is triggered and I cannot imagine how it can\n            // recompute the scroll position without a layout)\n            this.tile.dom.style.height = this.view.viewState.contentHeight / this.view.scaleY + \"px\";\n            this.tile.dom.style.flexBasis = this.minWidth ? this.minWidth + \"px\" : \"\";\n            // Chrome will sometimes, when DOM mutations occur directly\n            // around the selection, get confused and report a different\n            // selection from the one it displays (issue #218). This tries\n            // to detect that situation.\n            let track = browser.chrome || browser.ios ? { node: observer.selectionRange.focusNode, written: false } : undefined;\n            this.tile.sync(track);\n            if (track && (track.written || observer.selectionRange.focusNode != track.node || !this.tile.dom.contains(track.node)))\n                this.forceSelection = true;\n            this.tile.dom.style.height = \"\";\n        });\n        let gaps = [];\n        if (this.view.viewport.from || this.view.viewport.to < this.view.state.doc.length)\n            for (let child of this.tile.children)\n                if (child.isWidget() && child.widget instanceof BlockGapWidget)\n                    gaps.push(child.dom);\n        observer.updateGaps(gaps);\n    }\n    updateEditContextFormatting(update) {\n        this.editContextFormatting = this.editContextFormatting.map(update.changes);\n        for (let tr of update.transactions)\n            for (let effect of tr.effects)\n                if (effect.is(setEditContextFormatting)) {\n                    this.editContextFormatting = effect.value;\n                }\n    }\n    // Sync the DOM selection to this.state.selection\n    updateSelection(mustRead = false, fromPointer = false) {\n        if (mustRead || !this.view.observer.selectionRange.focusNode)\n            this.view.observer.readSelectionRange();\n        let { dom } = this.tile;\n        let activeElt = this.view.root.activeElement, focused = activeElt == dom;\n        let selectionNotFocus = !focused && !(this.view.state.facet(editable) || dom.tabIndex > -1) &&\n            hasSelection(dom, this.view.observer.selectionRange) && !(activeElt && dom.contains(activeElt));\n        if (!(focused || fromPointer || selectionNotFocus))\n            return;\n        let force = this.forceSelection;\n        this.forceSelection = false;\n        let main = this.view.state.selection.main, anchor, head;\n        if (main.empty) {\n            head = anchor = this.inlineDOMNearPos(main.anchor, main.assoc || 1);\n        }\n        else {\n            head = this.inlineDOMNearPos(main.head, main.head == main.from ? 1 : -1);\n            anchor = this.inlineDOMNearPos(main.anchor, main.anchor == main.from ? 1 : -1);\n        }\n        // Always reset on Firefox when next to an uneditable node to\n        // avoid invisible cursor bugs (#111)\n        if (browser.gecko && main.empty && !this.hasComposition && betweenUneditable(anchor)) {\n            let dummy = document.createTextNode(\"\");\n            this.view.observer.ignore(() => anchor.node.insertBefore(dummy, anchor.node.childNodes[anchor.offset] || null));\n            anchor = head = new DOMPos(dummy, 0);\n            force = true;\n        }\n        let domSel = this.view.observer.selectionRange;\n        // If the selection is already here, or in an equivalent position, don't touch it\n        if (force || !domSel.focusNode || (!isEquivalentPosition(anchor.node, anchor.offset, domSel.anchorNode, domSel.anchorOffset) ||\n            !isEquivalentPosition(head.node, head.offset, domSel.focusNode, domSel.focusOffset)) && !this.suppressWidgetCursorChange(domSel, main)) {\n            this.view.observer.ignore(() => {\n                // Chrome Android will hide the virtual keyboard when tapping\n                // inside an uneditable node, and not bring it back when we\n                // move the cursor to its proper position. This tries to\n                // restore the keyboard by cycling focus.\n                if (browser.android && browser.chrome && dom.contains(domSel.focusNode) &&\n                    inUneditable(domSel.focusNode, dom)) {\n                    dom.blur();\n                    dom.focus({ preventScroll: true });\n                }\n                let rawSel = getSelection(this.view.root);\n                if (!rawSel) ;\n                else if (main.empty) {\n                    // Work around https://bugzilla.mozilla.org/show_bug.cgi?id=1612076\n                    if (browser.gecko) {\n                        let nextTo = nextToUneditable(anchor.node, anchor.offset);\n                        if (nextTo && nextTo != (1 /* NextTo.Before */ | 2 /* NextTo.After */)) {\n                            let text = (nextTo == 1 /* NextTo.Before */ ? textNodeBefore : textNodeAfter)(anchor.node, anchor.offset);\n                            if (text)\n                                anchor = new DOMPos(text.node, text.offset);\n                        }\n                    }\n                    rawSel.collapse(anchor.node, anchor.offset);\n                    if (main.bidiLevel != null && rawSel.caretBidiLevel !== undefined)\n                        rawSel.caretBidiLevel = main.bidiLevel;\n                }\n                else if (rawSel.extend) {\n                    // Selection.extend can be used to create an 'inverted' selection\n                    // (one where the focus is before the anchor), but not all\n                    // browsers support it yet.\n                    rawSel.collapse(anchor.node, anchor.offset);\n                    // Safari will ignore the call above when the editor is\n                    // hidden, and then raise an error on the call to extend\n                    // (#940).\n                    try {\n                        rawSel.extend(head.node, head.offset);\n                    }\n                    catch (_) { }\n                }\n                else {\n                    // Primitive (IE) way\n                    let range = document.createRange();\n                    if (main.anchor > main.head)\n                        [anchor, head] = [head, anchor];\n                    range.setEnd(head.node, head.offset);\n                    range.setStart(anchor.node, anchor.offset);\n                    rawSel.removeAllRanges();\n                    rawSel.addRange(range);\n                }\n                if (selectionNotFocus && this.view.root.activeElement == dom) {\n                    dom.blur();\n                    if (activeElt)\n                        activeElt.focus();\n                }\n            });\n            this.view.observer.setSelectionRange(anchor, head);\n        }\n        this.impreciseAnchor = anchor.precise ? null : new DOMPos(domSel.anchorNode, domSel.anchorOffset);\n        this.impreciseHead = head.precise ? null : new DOMPos(domSel.focusNode, domSel.focusOffset);\n    }\n    // If a zero-length widget is inserted next to the cursor during\n    // composition, avoid moving it across it and disrupting the\n    // composition.\n    suppressWidgetCursorChange(sel, cursor) {\n        return this.hasComposition && cursor.empty &&\n            isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset) &&\n            this.posFromDOM(sel.focusNode, sel.focusOffset) == cursor.head;\n    }\n    enforceCursorAssoc() {\n        if (this.hasComposition)\n            return;\n        let { view } = this, cursor = view.state.selection.main;\n        let sel = getSelection(view.root);\n        let { anchorNode, anchorOffset } = view.observer.selectionRange;\n        if (!sel || !cursor.empty || !cursor.assoc || !sel.modify)\n            return;\n        let line = this.lineAt(cursor.head, cursor.assoc);\n        if (!line)\n            return;\n        let lineStart = line.posAtStart;\n        if (cursor.head == lineStart || cursor.head == lineStart + line.length)\n            return;\n        let before = this.coordsAt(cursor.head, -1), after = this.coordsAt(cursor.head, 1);\n        if (!before || !after || before.bottom > after.top)\n            return;\n        let dom = this.domAtPos(cursor.head + cursor.assoc, cursor.assoc);\n        sel.collapse(dom.node, dom.offset);\n        sel.modify(\"move\", cursor.assoc < 0 ? \"forward\" : \"backward\", \"lineboundary\");\n        // This can go wrong in corner cases like single-character lines,\n        // so check and reset if necessary.\n        view.observer.readSelectionRange();\n        let newRange = view.observer.selectionRange;\n        if (view.docView.posFromDOM(newRange.anchorNode, newRange.anchorOffset) != cursor.from)\n            sel.collapse(anchorNode, anchorOffset);\n    }\n    posFromDOM(node, offset) {\n        let tile = this.tile.nearest(node);\n        if (!tile)\n            return this.tile.dom.compareDocumentPosition(node) & 2 /* PRECEDING */ ? 0 : this.view.state.doc.length;\n        let start = tile.posAtStart;\n        if (tile.isComposite()) {\n            let after;\n            if (node == tile.dom) {\n                after = tile.dom.childNodes[offset];\n            }\n            else {\n                let bias = maxOffset(node) == 0 ? 0 : offset == 0 ? -1 : 1;\n                for (;;) {\n                    let parent = node.parentNode;\n                    if (parent == tile.dom)\n                        break;\n                    if (bias == 0 && parent.firstChild != parent.lastChild) {\n                        if (node == parent.firstChild)\n                            bias = -1;\n                        else\n                            bias = 1;\n                    }\n                    node = parent;\n                }\n                if (bias < 0)\n                    after = node;\n                else\n                    after = node.nextSibling;\n            }\n            if (after == tile.dom.firstChild)\n                return start;\n            while (after && !Tile.get(after))\n                after = after.nextSibling;\n            if (!after)\n                return start + tile.length;\n            for (let i = 0, pos = start;; i++) {\n                let child = tile.children[i];\n                if (child.dom == after)\n                    return pos;\n                pos += child.length + child.breakAfter;\n            }\n        }\n        else if (tile.isText()) {\n            return node == tile.dom ? start + offset : start + (offset ? tile.length : 0);\n        }\n        else {\n            return start;\n        }\n    }\n    domAtPos(pos, side) {\n        let { tile, offset } = this.tile.resolveBlock(pos, side);\n        if (tile.isWidget())\n            return tile.domPosFor(pos, side);\n        return tile.domIn(offset, side);\n    }\n    inlineDOMNearPos(pos, side) {\n        let before, beforeOff = -1, beforeBad = false;\n        let after, afterOff = -1, afterBad = false;\n        this.tile.blockTiles((tile, off) => {\n            if (tile.isWidget()) {\n                if ((tile.flags & 32 /* TileFlag.After */) && off >= pos)\n                    return true;\n                if (tile.flags & 16 /* TileFlag.Before */)\n                    beforeBad = true;\n            }\n            else {\n                let end = off + tile.length;\n                if (off <= pos) {\n                    before = tile;\n                    beforeOff = pos - off;\n                    beforeBad = end < pos;\n                }\n                if (end >= pos && !after) {\n                    after = tile;\n                    afterOff = pos - off;\n                    afterBad = off > pos;\n                }\n                if (off > pos && after)\n                    return true;\n            }\n        });\n        if (!before && !after)\n            return this.domAtPos(pos, side);\n        if (beforeBad && after)\n            before = null;\n        else if (afterBad && before)\n            after = null;\n        return before && side < 0 || !after ? before.domIn(beforeOff, side) : after.domIn(afterOff, side);\n    }\n    coordsAt(pos, side) {\n        let { tile, offset } = this.tile.resolveBlock(pos, side);\n        if (tile.isWidget()) {\n            if (tile.widget instanceof BlockGapWidget)\n                return null;\n            return tile.coordsInWidget(offset, side, true);\n        }\n        return tile.coordsIn(offset, side);\n    }\n    lineAt(pos, side) {\n        let { tile } = this.tile.resolveBlock(pos, side);\n        return tile.isLine() ? tile : null;\n    }\n    coordsForChar(pos) {\n        let { tile, offset } = this.tile.resolveBlock(pos, 1);\n        if (!tile.isLine())\n            return null;\n        function scan(tile, offset) {\n            if (tile.isComposite()) {\n                for (let ch of tile.children) {\n                    if (ch.length >= offset) {\n                        let found = scan(ch, offset);\n                        if (found)\n                            return found;\n                    }\n                    offset -= ch.length;\n                    if (offset < 0)\n                        break;\n                }\n            }\n            else if (tile.isText() && offset < tile.length) {\n                let end = findClusterBreak(tile.text, offset);\n                if (end == offset)\n                    return null;\n                let rects = textRange(tile.dom, offset, end).getClientRects();\n                for (let i = 0; i < rects.length; i++) {\n                    let rect = rects[i];\n                    if (i == rects.length - 1 || rect.top < rect.bottom && rect.left < rect.right)\n                        return rect;\n                }\n            }\n            return null;\n        }\n        return scan(tile, offset);\n    }\n    measureVisibleLineHeights(viewport) {\n        let result = [], { from, to } = viewport;\n        let contentWidth = this.view.contentDOM.clientWidth;\n        let isWider = contentWidth > Math.max(this.view.scrollDOM.clientWidth, this.minWidth) + 1;\n        let widest = -1, ltr = this.view.textDirection == Direction.LTR;\n        let spaceAbove = 0;\n        let scan = (tile, pos, measureBounds) => {\n            for (let i = 0; i < tile.children.length; i++) {\n                if (pos > to)\n                    break;\n                let child = tile.children[i], end = pos + child.length;\n                let childRect = child.dom.getBoundingClientRect(), { height } = childRect;\n                if (measureBounds && !i)\n                    spaceAbove += childRect.top - measureBounds.top;\n                if (child instanceof BlockWrapperTile) {\n                    if (end > from)\n                        scan(child, pos, childRect);\n                }\n                else if (pos >= from) {\n                    if (spaceAbove > 0)\n                        result.push(-spaceAbove);\n                    result.push(height + spaceAbove);\n                    spaceAbove = 0;\n                    if (isWider) {\n                        let last = child.dom.lastChild;\n                        let rects = last ? clientRectsFor(last) : [];\n                        if (rects.length) {\n                            let rect = rects[rects.length - 1];\n                            let width = ltr ? rect.right - childRect.left : childRect.right - rect.left;\n                            if (width > widest) {\n                                widest = width;\n                                this.minWidth = contentWidth;\n                                this.minWidthFrom = pos;\n                                this.minWidthTo = end;\n                            }\n                        }\n                    }\n                }\n                if (measureBounds && i == tile.children.length - 1)\n                    spaceAbove += measureBounds.bottom - childRect.bottom;\n                pos = end + child.breakAfter;\n            }\n        };\n        scan(this.tile, 0, null);\n        return result;\n    }\n    textDirectionAt(pos) {\n        let { tile } = this.tile.resolveBlock(pos, 1);\n        return getComputedStyle(tile.dom).direction == \"rtl\" ? Direction.RTL : Direction.LTR;\n    }\n    measureTextSize() {\n        let lineMeasure = this.tile.blockTiles(tile => {\n            if (tile.isLine() && tile.children.length && tile.length <= 20) {\n                let totalWidth = 0, textHeight;\n                for (let child of tile.children) {\n                    if (!child.isText() || /[^ -~]/.test(child.text))\n                        return undefined;\n                    let rects = clientRectsFor(child.dom);\n                    if (rects.length != 1)\n                        return undefined;\n                    totalWidth += rects[0].width;\n                    textHeight = rects[0].height;\n                }\n                if (totalWidth)\n                    return {\n                        lineHeight: tile.dom.getBoundingClientRect().height,\n                        charWidth: totalWidth / tile.length,\n                        textHeight\n                    };\n            }\n        });\n        if (lineMeasure)\n            return lineMeasure;\n        // If no workable line exists, force a layout of a measurable element\n        let dummy = document.createElement(\"div\"), lineHeight, charWidth, textHeight;\n        dummy.className = \"cm-line\";\n        dummy.style.width = \"99999px\";\n        dummy.style.position = \"absolute\";\n        dummy.textContent = \"abc def ghi jkl mno pqr stu\";\n        this.view.observer.ignore(() => {\n            this.tile.dom.appendChild(dummy);\n            let rect = clientRectsFor(dummy.firstChild)[0];\n            lineHeight = dummy.getBoundingClientRect().height;\n            charWidth = rect && rect.width ? rect.width / 27 : 7;\n            textHeight = rect && rect.height ? rect.height : lineHeight;\n            dummy.remove();\n        });\n        return { lineHeight, charWidth, textHeight };\n    }\n    computeBlockGapDeco() {\n        let deco = [], vs = this.view.viewState;\n        for (let pos = 0, i = 0;; i++) {\n            let next = i == vs.viewports.length ? null : vs.viewports[i];\n            let end = next ? next.from - 1 : this.view.state.doc.length;\n            if (end > pos) {\n                let height = (vs.lineBlockAt(end).bottom - vs.lineBlockAt(pos).top) / this.view.scaleY;\n                deco.push(Decoration.replace({\n                    widget: new BlockGapWidget(height),\n                    block: true,\n                    inclusive: true,\n                    isBlockGap: true,\n                }).range(pos, end));\n            }\n            if (!next)\n                break;\n            pos = next.to + 1;\n        }\n        return Decoration.set(deco);\n    }\n    updateDeco() {\n        let i = 1;\n        let allDeco = this.view.state.facet(decorations).map(d => {\n            let dynamic = this.dynamicDecorationMap[i++] = typeof d == \"function\";\n            return dynamic ? d(this.view) : d;\n        });\n        let dynamicOuter = false, outerDeco = this.view.state.facet(outerDecorations).map((d, i) => {\n            let dynamic = typeof d == \"function\";\n            if (dynamic)\n                dynamicOuter = true;\n            return dynamic ? d(this.view) : d;\n        });\n        if (outerDeco.length) {\n            this.dynamicDecorationMap[i++] = dynamicOuter;\n            allDeco.push(RangeSet.join(outerDeco));\n        }\n        this.decorations = [\n            this.editContextFormatting,\n            ...allDeco,\n            this.computeBlockGapDeco(),\n            this.view.viewState.lineGapDeco\n        ];\n        while (i < this.decorations.length)\n            this.dynamicDecorationMap[i++] = false;\n        this.blockWrappers = this.view.state.facet(blockWrappers).map(v => typeof v == \"function\" ? v(this.view) : v);\n    }\n    scrollIntoView(target) {\n        var _a;\n        if (target.isSnapshot) {\n            let ref = this.view.viewState.lineBlockAt(target.range.head);\n            this.view.scrollDOM.scrollTop = ref.top - target.yMargin;\n            this.view.scrollDOM.scrollLeft = target.xMargin;\n            return;\n        }\n        for (let handler of this.view.state.facet(scrollHandler)) {\n            try {\n                if (handler(this.view, target.range, target))\n                    return true;\n            }\n            catch (e) {\n                logException(this.view.state, e, \"scroll handler\");\n            }\n        }\n        let { range } = target;\n        let rect = this.coordsAt(range.head, (_a = range.assoc) !== null && _a !== void 0 ? _a : (range.empty ? 0 : range.head > range.anchor ? -1 : 1)), other;\n        if (!rect)\n            return;\n        if (!range.empty && (other = this.coordsAt(range.anchor, range.anchor > range.head ? -1 : 1)))\n            rect = { left: Math.min(rect.left, other.left), top: Math.min(rect.top, other.top),\n                right: Math.max(rect.right, other.right), bottom: Math.max(rect.bottom, other.bottom) };\n        let margins = getScrollMargins(this.view);\n        let targetRect = {\n            left: rect.left - margins.left, top: rect.top - margins.top,\n            right: rect.right + margins.right, bottom: rect.bottom + margins.bottom\n        };\n        let { offsetWidth, offsetHeight } = this.view.scrollDOM;\n        scrollRectIntoView(this.view.scrollDOM, targetRect, range.head < range.anchor ? -1 : 1, target.x, target.y, Math.max(Math.min(target.xMargin, offsetWidth), -offsetWidth), Math.max(Math.min(target.yMargin, offsetHeight), -offsetHeight), this.view.textDirection == Direction.LTR);\n        // On mobile browsers, the visual viewport may be smaller than the\n        // actual reported viewport, causing scrollRectIntoView to fail to\n        // scroll properly. Unfortunately, this visual viewport cannot be\n        // updated directly, and scrollIntoView is the only way a script\n        // can affect it. So this tries to kludge around the problem by\n        // calling scrollIntoView on the scroll target's line.\n        if (window.visualViewport && window.innerHeight - window.visualViewport.height > 1 &&\n            (rect.top > window.pageYOffset + window.visualViewport.offsetTop + window.visualViewport.height ||\n                rect.bottom < window.pageYOffset + window.visualViewport.offsetTop)) {\n            let line = this.view.docView.lineAt(range.head, 1);\n            if (line)\n                line.dom.scrollIntoView({ block: \"nearest\" });\n        }\n    }\n    lineHasWidget(pos) {\n        let scan = (child) => child.isWidget() || child.children.some(scan);\n        return scan(this.tile.resolveBlock(pos, 1).tile);\n    }\n    destroy() {\n        destroyDropped(this.tile);\n    }\n}\nfunction destroyDropped(tile, reused) {\n    let r = reused === null || reused === void 0 ? void 0 : reused.get(tile);\n    if (r != 1 /* Reused.Full */) {\n        if (r == null)\n            tile.destroy();\n        for (let ch of tile.children)\n            destroyDropped(ch, reused);\n    }\n}\nfunction betweenUneditable(pos) {\n    return pos.node.nodeType == 1 && pos.node.firstChild &&\n        (pos.offset == 0 || pos.node.childNodes[pos.offset - 1].contentEditable == \"false\") &&\n        (pos.offset == pos.node.childNodes.length || pos.node.childNodes[pos.offset].contentEditable == \"false\");\n}\nfunction findCompositionNode(view, headPos) {\n    let sel = view.observer.selectionRange;\n    if (!sel.focusNode)\n        return null;\n    let textBefore = textNodeBefore(sel.focusNode, sel.focusOffset);\n    let textAfter = textNodeAfter(sel.focusNode, sel.focusOffset);\n    let textNode = textBefore || textAfter;\n    if (textAfter && textBefore && textAfter.node != textBefore.node) {\n        let tileAfter = Tile.get(textAfter.node);\n        if (!tileAfter || tileAfter.isText() && tileAfter.text != textAfter.node.nodeValue) {\n            textNode = textAfter;\n        }\n        else if (view.docView.lastCompositionAfterCursor) {\n            let tileBefore = Tile.get(textBefore.node);\n            if (!(!tileBefore || tileBefore.isText() && tileBefore.text != textBefore.node.nodeValue))\n                textNode = textAfter;\n        }\n    }\n    view.docView.lastCompositionAfterCursor = textNode != textBefore;\n    if (!textNode)\n        return null;\n    let from = headPos - textNode.offset;\n    return { from, to: from + textNode.node.nodeValue.length, node: textNode.node };\n}\nfunction findCompositionRange(view, changes, headPos) {\n    let found = findCompositionNode(view, headPos);\n    if (!found)\n        return null;\n    let { node: textNode, from, to } = found, text = textNode.nodeValue;\n    // Don't try to preserve multi-line compositions\n    if (/[\\n\\r]/.test(text))\n        return null;\n    if (view.state.doc.sliceString(found.from, found.to) != text)\n        return null;\n    let inv = changes.invertedDesc;\n    return { range: new ChangedRange(inv.mapPos(from), inv.mapPos(to), from, to), text: textNode };\n}\nfunction nextToUneditable(node, offset) {\n    if (node.nodeType != 1)\n        return 0;\n    return (offset && node.childNodes[offset - 1].contentEditable == \"false\" ? 1 /* NextTo.Before */ : 0) |\n        (offset < node.childNodes.length && node.childNodes[offset].contentEditable == \"false\" ? 2 /* NextTo.After */ : 0);\n}\nlet DecorationComparator$1 = class DecorationComparator {\n    constructor() {\n        this.changes = [];\n    }\n    compareRange(from, to) { addRange(from, to, this.changes); }\n    comparePoint(from, to) { addRange(from, to, this.changes); }\n    boundChange(pos) { addRange(pos, pos, this.changes); }\n};\nfunction findChangedDeco(a, b, diff) {\n    let comp = new DecorationComparator$1;\n    RangeSet.compare(a, b, diff, comp);\n    return comp.changes;\n}\nclass WrapperComparator {\n    constructor() {\n        this.changes = [];\n    }\n    compareRange(from, to) { addRange(from, to, this.changes); }\n    comparePoint() { }\n    boundChange(pos) { addRange(pos, pos, this.changes); }\n}\nfunction findChangedWrappers(a, b, diff) {\n    let comp = new WrapperComparator;\n    RangeSet.compare(a, b, diff, comp);\n    return comp.changes;\n}\nfunction inUneditable(node, inside) {\n    for (let cur = node; cur && cur != inside; cur = cur.assignedSlot || cur.parentNode) {\n        if (cur.nodeType == 1 && cur.contentEditable == 'false') {\n            return true;\n        }\n    }\n    return false;\n}\nfunction touchesComposition(changes, composition) {\n    let touched = false;\n    if (composition)\n        changes.iterChangedRanges((from, to) => {\n            if (from < composition.to && to > composition.from)\n                touched = true;\n        });\n    return touched;\n}\nclass BlockGapWidget extends WidgetType {\n    constructor(height) {\n        super();\n        this.height = height;\n    }\n    toDOM() {\n        let elt = document.createElement(\"div\");\n        elt.className = \"cm-gap\";\n        this.updateDOM(elt);\n        return elt;\n    }\n    eq(other) { return other.height == this.height; }\n    updateDOM(elt) {\n        elt.style.height = this.height + \"px\";\n        return true;\n    }\n    get editable() { return true; }\n    get estimatedHeight() { return this.height; }\n    ignoreEvent() { return false; }\n}\n\nfunction groupAt(state, pos, bias = 1) {\n    let categorize = state.charCategorizer(pos);\n    let line = state.doc.lineAt(pos), linePos = pos - line.from;\n    if (line.length == 0)\n        return EditorSelection.cursor(pos);\n    if (linePos == 0)\n        bias = 1;\n    else if (linePos == line.length)\n        bias = -1;\n    let from = linePos, to = linePos;\n    if (bias < 0)\n        from = findClusterBreak(line.text, linePos, false);\n    else\n        to = findClusterBreak(line.text, linePos);\n    let cat = categorize(line.text.slice(from, to));\n    while (from > 0) {\n        let prev = findClusterBreak(line.text, from, false);\n        if (categorize(line.text.slice(prev, from)) != cat)\n            break;\n        from = prev;\n    }\n    while (to < line.length) {\n        let next = findClusterBreak(line.text, to);\n        if (categorize(line.text.slice(to, next)) != cat)\n            break;\n        to = next;\n    }\n    return EditorSelection.range(from + line.from, to + line.from);\n}\nfunction posAtCoordsImprecise(view, contentRect, block, x, y) {\n    let into = Math.round((x - contentRect.left) * view.defaultCharacterWidth);\n    if (view.lineWrapping && block.height > view.defaultLineHeight * 1.5) {\n        let textHeight = view.viewState.heightOracle.textHeight;\n        let line = Math.floor((y - block.top - (view.defaultLineHeight - textHeight) * 0.5) / textHeight);\n        into += line * view.viewState.heightOracle.lineLength;\n    }\n    let content = view.state.sliceDoc(block.from, block.to);\n    return block.from + findColumn(content, into, view.state.tabSize);\n}\nfunction blockAt(view, pos, side) {\n    let line = view.lineBlockAt(pos);\n    if (Array.isArray(line.type)) {\n        let best;\n        for (let l of line.type) {\n            if (l.from > pos)\n                break;\n            if (l.to < pos)\n                continue;\n            if (l.from < pos && l.to > pos)\n                return l;\n            if (!best || (l.type == BlockType.Text && (best.type != l.type || (side < 0 ? l.from < pos : l.to > pos))))\n                best = l;\n        }\n        return best || line;\n    }\n    return line;\n}\nfunction moveToLineBoundary(view, start, forward, includeWrap) {\n    let line = blockAt(view, start.head, start.assoc || -1);\n    let coords = !includeWrap || line.type != BlockType.Text || !(view.lineWrapping || line.widgetLineBreaks) ? null\n        : view.coordsAtPos(start.assoc < 0 && start.head > line.from ? start.head - 1 : start.head);\n    if (coords) {\n        let editorRect = view.dom.getBoundingClientRect();\n        let direction = view.textDirectionAt(line.from);\n        let pos = view.posAtCoords({ x: forward == (direction == Direction.LTR) ? editorRect.right - 1 : editorRect.left + 1,\n            y: (coords.top + coords.bottom) / 2 });\n        if (pos != null)\n            return EditorSelection.cursor(pos, forward ? -1 : 1);\n    }\n    return EditorSelection.cursor(forward ? line.to : line.from, forward ? -1 : 1);\n}\nfunction moveByChar(view, start, forward, by) {\n    let line = view.state.doc.lineAt(start.head), spans = view.bidiSpans(line);\n    let direction = view.textDirectionAt(line.from);\n    for (let cur = start, check = null;;) {\n        let next = moveVisually(line, spans, direction, cur, forward), char = movedOver;\n        if (!next) {\n            if (line.number == (forward ? view.state.doc.lines : 1))\n                return cur;\n            char = \"\\n\";\n            line = view.state.doc.line(line.number + (forward ? 1 : -1));\n            spans = view.bidiSpans(line);\n            next = view.visualLineSide(line, !forward);\n        }\n        if (!check) {\n            if (!by)\n                return next;\n            check = by(char);\n        }\n        else if (!check(char)) {\n            return cur;\n        }\n        cur = next;\n    }\n}\nfunction byGroup(view, pos, start) {\n    let categorize = view.state.charCategorizer(pos);\n    let cat = categorize(start);\n    return (next) => {\n        let nextCat = categorize(next);\n        if (cat == CharCategory.Space)\n            cat = nextCat;\n        return cat == nextCat;\n    };\n}\nfunction moveVertically(view, start, forward, distance) {\n    let startPos = start.head, dir = forward ? 1 : -1;\n    if (startPos == (forward ? view.state.doc.length : 0))\n        return EditorSelection.cursor(startPos, start.assoc);\n    let goal = start.goalColumn, startY;\n    let rect = view.contentDOM.getBoundingClientRect();\n    let startCoords = view.coordsAtPos(startPos, start.assoc || ((start.empty ? forward : start.head == start.from) ? 1 : -1));\n    let docTop = view.documentTop;\n    if (startCoords) {\n        if (goal == null)\n            goal = startCoords.left - rect.left;\n        startY = dir < 0 ? startCoords.top : startCoords.bottom;\n    }\n    else {\n        let line = view.viewState.lineBlockAt(startPos);\n        if (goal == null)\n            goal = Math.min(rect.right - rect.left, view.defaultCharacterWidth * (startPos - line.from));\n        startY = (dir < 0 ? line.top : line.bottom) + docTop;\n    }\n    let resolvedGoal = rect.left + goal;\n    let halfText = view.viewState.heightOracle.textHeight >> 1, dist = distance !== null && distance !== void 0 ? distance : halfText;\n    for (let scan = 0;; scan += halfText) {\n        let y = startY + (dist + scan) * dir;\n        let pos = posAtCoords(view, { x: resolvedGoal, y }, false, dir);\n        if (forward ? y > rect.bottom : y < rect.top)\n            return EditorSelection.cursor(pos.pos, pos.assoc);\n        let posCoords = view.coordsAtPos(pos.pos, pos.assoc), mid = posCoords ? (posCoords.top + posCoords.bottom) / 2 : 0;\n        if (!posCoords || (forward ? mid > startY : mid < startY))\n            return EditorSelection.cursor(pos.pos, pos.assoc, undefined, goal);\n    }\n}\nfunction skipAtomicRanges(atoms, pos, bias) {\n    for (;;) {\n        let moved = 0;\n        for (let set of atoms) {\n            set.between(pos - 1, pos + 1, (from, to, value) => {\n                if (pos > from && pos < to) {\n                    let side = moved || bias || (pos - from < to - pos ? -1 : 1);\n                    pos = side < 0 ? from : to;\n                    moved = side;\n                }\n            });\n        }\n        if (!moved)\n            return pos;\n    }\n}\nfunction skipAtomsForSelection(atoms, sel) {\n    let ranges = null;\n    for (let i = 0; i < sel.ranges.length; i++) {\n        let range = sel.ranges[i], updated = null;\n        if (range.empty) {\n            let pos = skipAtomicRanges(atoms, range.from, 0);\n            if (pos != range.from)\n                updated = EditorSelection.cursor(pos, -1);\n        }\n        else {\n            let from = skipAtomicRanges(atoms, range.from, -1);\n            let to = skipAtomicRanges(atoms, range.to, 1);\n            if (from != range.from || to != range.to)\n                updated = EditorSelection.range(range.from == range.anchor ? from : to, range.from == range.head ? from : to);\n        }\n        if (updated) {\n            if (!ranges)\n                ranges = sel.ranges.slice();\n            ranges[i] = updated;\n        }\n    }\n    return ranges ? EditorSelection.create(ranges, sel.mainIndex) : sel;\n}\nfunction skipAtoms(view, oldPos, pos) {\n    let newPos = skipAtomicRanges(view.state.facet(atomicRanges).map(f => f(view)), pos.from, oldPos.head > pos.from ? -1 : 1);\n    return newPos == pos.from ? pos : EditorSelection.cursor(newPos, newPos < pos.from ? 1 : -1);\n}\nclass PosAssoc {\n    constructor(pos, assoc) {\n        this.pos = pos;\n        this.assoc = assoc;\n    }\n}\nfunction posAtCoords(view, coords, precise, scanY) {\n    let content = view.contentDOM.getBoundingClientRect(), docTop = content.top + view.viewState.paddingTop;\n    let { x, y } = coords, yOffset = y - docTop, block;\n    // First find the block at the given Y position, if any. If scanY is\n    // given (used for vertical cursor motion), try to skip widgets and\n    // line padding.\n    for (;;) {\n        if (yOffset < 0)\n            return new PosAssoc(0, 1);\n        if (yOffset > view.viewState.docHeight)\n            return new PosAssoc(view.state.doc.length, -1);\n        block = view.elementAtHeight(yOffset);\n        if (scanY == null)\n            break;\n        if (block.type == BlockType.Text) {\n            if (scanY < 0 ? block.to < view.viewport.from : block.from > view.viewport.to)\n                break;\n            // Check whether we aren't landing on the top/bottom padding of the line\n            let rect = view.docView.coordsAt(scanY < 0 ? block.from : block.to, scanY > 0 ? -1 : 1);\n            if (rect && (scanY < 0 ? rect.top <= yOffset + docTop : rect.bottom >= yOffset + docTop))\n                break;\n        }\n        let halfLine = view.viewState.heightOracle.textHeight / 2;\n        yOffset = scanY > 0 ? block.bottom + halfLine : block.top - halfLine;\n    }\n    // If outside the viewport, return null if precise==true, an\n    // estimate otherwise.\n    if (view.viewport.from >= block.to || view.viewport.to <= block.from) {\n        if (precise)\n            return null;\n        if (block.type == BlockType.Text) {\n            let pos = posAtCoordsImprecise(view, content, block, x, y);\n            return new PosAssoc(pos, pos == block.from ? 1 : -1);\n        }\n    }\n    if (block.type != BlockType.Text)\n        return yOffset < (block.top + block.bottom) / 2 ? new PosAssoc(block.from, 1) : new PosAssoc(block.to, -1);\n    // Here we know we're in a line, so run the logic for inline layout\n    let line = view.docView.lineAt(block.from, 2);\n    if (!line || line.length != block.length)\n        line = view.docView.lineAt(block.from, -2);\n    return new InlineCoordsScan(view, x, y, view.textDirectionAt(block.from)).scanTile(line, block.from);\n}\nclass InlineCoordsScan {\n    constructor(view, x, y, baseDir) {\n        this.view = view;\n        this.x = x;\n        this.y = y;\n        this.baseDir = baseDir;\n        // Cached bidi info\n        this.line = null;\n        this.spans = null;\n    }\n    bidiSpansAt(pos) {\n        if (!this.line || this.line.from > pos || this.line.to < pos) {\n            this.line = this.view.state.doc.lineAt(pos);\n            this.spans = this.view.bidiSpans(this.line);\n        }\n        return this;\n    }\n    baseDirAt(pos, side) {\n        let { line, spans } = this.bidiSpansAt(pos);\n        let level = spans[BidiSpan.find(spans, pos - line.from, -1, side)].level;\n        return level == this.baseDir;\n    }\n    dirAt(pos, side) {\n        let { line, spans } = this.bidiSpansAt(pos);\n        return spans[BidiSpan.find(spans, pos - line.from, -1, side)].dir;\n    }\n    // Used to short-circuit bidi tests for content with a uniform direction\n    bidiIn(from, to) {\n        let { spans, line } = this.bidiSpansAt(from);\n        return spans.length > 1 || spans.length && (spans[0].level != this.baseDir || spans[0].to + line.from < to);\n    }\n    // Scan through the rectangles for the content of a tile with inline\n    // content, looking for one that overlaps the queried position\n    // vertically andis\n    // closest horizontally. The caller is responsible for dividing its\n    // content into N pieces, and pass an array with N+1 positions\n    // (including the position after the last piece). For a text tile,\n    // these will be character clusters, for a composite tile, these\n    // will be child tiles.\n    scan(positions, getRects, recursed = false) {\n        let lo = 0, hi = positions.length - 1, seen = new Set();\n        let bidi = this.bidiIn(positions[0], positions[hi]);\n        let above, below;\n        let closestI = -1, closestDx = 1e9, closestRect;\n        // Because, when the content is bidirectional, a regular binary\n        // search is hard to perform (the content order does not\n        // correspond to visual order), this loop does something between a\n        // regular binary search and a full scan, depending on what it can\n        // get away with. The outer hi/lo bounds are only adjusted for\n        // elements that are part of the base order.\n        //\n        // To make sure all elements inside those bounds are visited,\n        // eventually, we keep a set of seen indices, and if the midpoint\n        // has already been handled, we start in a random index within the\n        // current bounds and scan forward until we find an index that\n        // hasn't been seen yet.\n        search: while (lo < hi) {\n            let dist = hi - lo, mid = (lo + hi) >> 1;\n            adjust: if (seen.has(mid)) {\n                let scan = lo + Math.floor(Math.random() * dist);\n                for (let i = 0; i < dist; i++) {\n                    if (!seen.has(scan)) {\n                        mid = scan;\n                        break adjust;\n                    }\n                    scan++;\n                    if (scan == hi)\n                        scan = lo; // Wrap around\n                }\n                break search; // No index found, we're done\n            }\n            seen.add(mid);\n            let rects = getRects(mid);\n            if (rects)\n                for (let i = 0; i < rects.length; i++) {\n                    let rect = rects[i], side = 0;\n                    // Ignore empty rectangles when there are other rectangles\n                    if (rect.width == 0 && rects.length > 1)\n                        continue;\n                    if (rect.bottom < this.y) {\n                        if (!above || above.bottom < rect.bottom)\n                            above = rect;\n                        side = 1;\n                    }\n                    else if (rect.top > this.y) {\n                        if (!below || below.top > rect.top)\n                            below = rect;\n                        side = -1;\n                    }\n                    else {\n                        let off = rect.left > this.x ? this.x - rect.left : rect.right < this.x ? this.x - rect.right : 0;\n                        let dx = Math.abs(off);\n                        if (dx < closestDx) {\n                            closestI = mid;\n                            closestDx = dx;\n                            closestRect = rect;\n                        }\n                        if (off)\n                            side = (off < 0) == (this.baseDir == Direction.LTR) ? -1 : 1;\n                    }\n                    // Narrow binary search when it is safe to do so\n                    if (side == -1 && (!bidi || this.baseDirAt(positions[mid], 1)))\n                        hi = mid;\n                    else if (side == 1 && (!bidi || this.baseDirAt(positions[mid + 1], -1)))\n                        lo = mid + 1;\n                }\n        }\n        // If no element with y overlap is found, find the nearest element\n        // on the y axis, move this.y into it, and retry the scan.\n        if (!closestRect) {\n            let side = above && (!below || (this.y - above.bottom < below.top - this.y)) ? above : below;\n            this.y = (side.top + side.bottom) / 2;\n            return this.scan(positions, getRects, true);\n        }\n        // Handle the case where closest matched a higher element on the\n        // same line as an element below/above the coords\n        if (closestDx && !recursed) {\n            let { top, bottom } = closestRect;\n            if (above && above.bottom > (top + top + bottom) / 3) {\n                this.y = above.bottom - 1;\n                return this.scan(positions, getRects, true);\n            }\n            if (below && below.top < (top + bottom + bottom) / 3) {\n                this.y = below.top + 1;\n                return this.scan(positions, getRects, true);\n            }\n        }\n        let ltr = (bidi ? this.dirAt(positions[closestI], 1) : this.baseDir) == Direction.LTR;\n        return {\n            i: closestI,\n            // Test whether x is closes to the start or end of this element\n            after: (this.x > (closestRect.left + closestRect.right) / 2) == ltr\n        };\n    }\n    scanText(tile, offset) {\n        let positions = [];\n        for (let i = 0; i < tile.length; i = findClusterBreak(tile.text, i))\n            positions.push(offset + i);\n        positions.push(offset + tile.length);\n        let scan = this.scan(positions, i => {\n            let off = positions[i] - offset, end = positions[i + 1] - offset;\n            return textRange(tile.dom, off, end).getClientRects();\n        });\n        return scan.after ? new PosAssoc(positions[scan.i + 1], -1) : new PosAssoc(positions[scan.i], 1);\n    }\n    scanTile(tile, offset) {\n        if (!tile.length)\n            return new PosAssoc(offset, 1);\n        if (tile.children.length == 1) { // Short-circuit single-child tiles\n            let child = tile.children[0];\n            if (child.isText())\n                return this.scanText(child, offset);\n            else if (child.isComposite())\n                return this.scanTile(child, offset);\n        }\n        let positions = [offset];\n        for (let i = 0, pos = offset; i < tile.children.length; i++)\n            positions.push(pos += tile.children[i].length);\n        let scan = this.scan(positions, i => {\n            let child = tile.children[i];\n            if (child.flags & 48 /* TileFlag.PointWidget */)\n                return null;\n            return (child.dom.nodeType == 1 ? child.dom : textRange(child.dom, 0, child.length)).getClientRects();\n        });\n        let child = tile.children[scan.i], pos = positions[scan.i];\n        if (child.isText())\n            return this.scanText(child, pos);\n        if (child.isComposite())\n            return this.scanTile(child, pos);\n        return scan.after ? new PosAssoc(positions[scan.i + 1], -1) : new PosAssoc(pos, 1);\n    }\n}\n\nconst LineBreakPlaceholder = \"\\uffff\";\nclass DOMReader {\n    constructor(points, view) {\n        this.points = points;\n        this.view = view;\n        this.text = \"\";\n        this.lineSeparator = view.state.facet(EditorState.lineSeparator);\n    }\n    append(text) {\n        this.text += text;\n    }\n    lineBreak() {\n        this.text += LineBreakPlaceholder;\n    }\n    readRange(start, end) {\n        if (!start)\n            return this;\n        let parent = start.parentNode;\n        for (let cur = start;;) {\n            this.findPointBefore(parent, cur);\n            let oldLen = this.text.length;\n            this.readNode(cur);\n            let tile = Tile.get(cur), next = cur.nextSibling;\n            if (next == end) {\n                if ((tile === null || tile === void 0 ? void 0 : tile.breakAfter) && !next && parent != this.view.contentDOM)\n                    this.lineBreak();\n                break;\n            }\n            let nextTile = Tile.get(next);\n            if ((tile && nextTile ? tile.breakAfter :\n                (tile ? tile.breakAfter : isBlockElement(cur)) ||\n                    (isBlockElement(next) && (cur.nodeName != \"BR\" || (tile === null || tile === void 0 ? void 0 : tile.isWidget())) && this.text.length > oldLen)) &&\n                !isEmptyToEnd(next, end))\n                this.lineBreak();\n            cur = next;\n        }\n        this.findPointBefore(parent, end);\n        return this;\n    }\n    readTextNode(node) {\n        let text = node.nodeValue;\n        for (let point of this.points)\n            if (point.node == node)\n                point.pos = this.text.length + Math.min(point.offset, text.length);\n        for (let off = 0, re = this.lineSeparator ? null : /\\r\\n?|\\n/g;;) {\n            let nextBreak = -1, breakSize = 1, m;\n            if (this.lineSeparator) {\n                nextBreak = text.indexOf(this.lineSeparator, off);\n                breakSize = this.lineSeparator.length;\n            }\n            else if (m = re.exec(text)) {\n                nextBreak = m.index;\n                breakSize = m[0].length;\n            }\n            this.append(text.slice(off, nextBreak < 0 ? text.length : nextBreak));\n            if (nextBreak < 0)\n                break;\n            this.lineBreak();\n            if (breakSize > 1)\n                for (let point of this.points)\n                    if (point.node == node && point.pos > this.text.length)\n                        point.pos -= breakSize - 1;\n            off = nextBreak + breakSize;\n        }\n    }\n    readNode(node) {\n        let tile = Tile.get(node);\n        let fromView = tile && tile.overrideDOMText;\n        if (fromView != null) {\n            this.findPointInside(node, fromView.length);\n            for (let i = fromView.iter(); !i.next().done;) {\n                if (i.lineBreak)\n                    this.lineBreak();\n                else\n                    this.append(i.value);\n            }\n        }\n        else if (node.nodeType == 3) {\n            this.readTextNode(node);\n        }\n        else if (node.nodeName == \"BR\") {\n            if (node.nextSibling)\n                this.lineBreak();\n        }\n        else if (node.nodeType == 1) {\n            this.readRange(node.firstChild, null);\n        }\n    }\n    findPointBefore(node, next) {\n        for (let point of this.points)\n            if (point.node == node && node.childNodes[point.offset] == next)\n                point.pos = this.text.length;\n    }\n    findPointInside(node, length) {\n        for (let point of this.points)\n            if (node.nodeType == 3 ? point.node == node : node.contains(point.node))\n                point.pos = this.text.length + (isAtEnd(node, point.node, point.offset) ? length : 0);\n    }\n}\nfunction isAtEnd(parent, node, offset) {\n    for (;;) {\n        if (!node || offset < maxOffset(node))\n            return false;\n        if (node == parent)\n            return true;\n        offset = domIndex(node) + 1;\n        node = node.parentNode;\n    }\n}\nfunction isEmptyToEnd(node, end) {\n    let widgets;\n    for (;; node = node.nextSibling) {\n        if (node == end || !node)\n            break;\n        let view = Tile.get(node);\n        if (!(view === null || view === void 0 ? void 0 : view.isWidget()))\n            return false;\n        if (view)\n            (widgets || (widgets = [])).push(view);\n    }\n    if (widgets)\n        for (let w of widgets) {\n            let override = w.overrideDOMText;\n            if (override === null || override === void 0 ? void 0 : override.length)\n                return false;\n        }\n    return true;\n}\nclass DOMPoint {\n    constructor(node, offset) {\n        this.node = node;\n        this.offset = offset;\n        this.pos = -1;\n    }\n}\n\nclass DOMChange {\n    constructor(view, start, end, typeOver) {\n        this.typeOver = typeOver;\n        this.bounds = null;\n        this.text = \"\";\n        this.domChanged = start > -1;\n        let { impreciseHead: iHead, impreciseAnchor: iAnchor } = view.docView, curSel = view.state.selection;\n        if (view.state.readOnly && start > -1) {\n            // Ignore changes when the editor is read-only\n            this.newSel = null;\n        }\n        else if (start > -1 && (this.bounds = domBoundsAround(view.docView.tile, start, end, 0))) {\n            let selPoints = iHead || iAnchor ? [] : selectionPoints(view);\n            let reader = new DOMReader(selPoints, view);\n            reader.readRange(this.bounds.startDOM, this.bounds.endDOM);\n            this.text = reader.text;\n            this.newSel = selectionFromPoints(selPoints, this.bounds.from);\n        }\n        else {\n            let domSel = view.observer.selectionRange;\n            let head = iHead && iHead.node == domSel.focusNode && iHead.offset == domSel.focusOffset ||\n                !contains(view.contentDOM, domSel.focusNode)\n                ? curSel.main.head\n                : view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset);\n            let anchor = iAnchor && iAnchor.node == domSel.anchorNode && iAnchor.offset == domSel.anchorOffset ||\n                !contains(view.contentDOM, domSel.anchorNode)\n                ? curSel.main.anchor\n                : view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset);\n            // iOS will refuse to select the block gaps when doing\n            // select-all.\n            // Chrome will put the selection *inside* them, confusing\n            // posFromDOM\n            let vp = view.viewport;\n            if ((browser.ios || browser.chrome) && curSel.main.empty && head != anchor &&\n                (vp.from > 0 || vp.to < view.state.doc.length)) {\n                let from = Math.min(head, anchor), to = Math.max(head, anchor);\n                let offFrom = vp.from - from, offTo = vp.to - to;\n                if ((offFrom == 0 || offFrom == 1 || from == 0) && (offTo == 0 || offTo == -1 || to == view.state.doc.length)) {\n                    head = 0;\n                    anchor = view.state.doc.length;\n                }\n            }\n            if (view.inputState.composing > -1 && curSel.ranges.length > 1) {\n                this.newSel = curSel.replaceRange(EditorSelection.range(anchor, head));\n            }\n            else if (view.lineWrapping && anchor == head && !(curSel.main.empty && curSel.main.head == head) &&\n                view.inputState.lastTouchTime > Date.now() - 100) {\n                // If this is a cursor selection change in a line-wrapping\n                // editor that may have been a touch, use the last touch\n                // position to assign a side to the cursor.\n                let before = view.coordsAtPos(head, -1), assoc = 0;\n                if (before)\n                    assoc = view.inputState.lastTouchY <= before.bottom ? -1 : 1;\n                this.newSel = EditorSelection.create([EditorSelection.cursor(head, assoc)]);\n            }\n            else {\n                this.newSel = EditorSelection.single(anchor, head);\n            }\n        }\n    }\n}\nfunction domBoundsAround(tile, from, to, offset) {\n    if (tile.isComposite()) {\n        let fromI = -1, fromStart = -1, toI = -1, toEnd = -1;\n        for (let i = 0, pos = offset, prevEnd = offset; i < tile.children.length; i++) {\n            let child = tile.children[i], end = pos + child.length;\n            if (pos < from && end > to)\n                return domBoundsAround(child, from, to, pos);\n            if (end >= from && fromI == -1) {\n                fromI = i;\n                fromStart = pos;\n            }\n            if (pos > to && child.dom.parentNode == tile.dom) {\n                toI = i;\n                toEnd = prevEnd;\n                break;\n            }\n            prevEnd = end;\n            pos = end + child.breakAfter;\n        }\n        return { from: fromStart, to: toEnd < 0 ? offset + tile.length : toEnd,\n            startDOM: (fromI ? tile.children[fromI - 1].dom.nextSibling : null) || tile.dom.firstChild,\n            endDOM: toI < tile.children.length && toI >= 0 ? tile.children[toI].dom : null };\n    }\n    else if (tile.isText()) {\n        return { from: offset, to: offset + tile.length, startDOM: tile.dom, endDOM: tile.dom.nextSibling };\n    }\n    else {\n        return null;\n    }\n}\nfunction applyDOMChange(view, domChange) {\n    let change;\n    let { newSel } = domChange, { state } = view, sel = state.selection.main;\n    let lastKey = view.inputState.lastKeyTime > Date.now() - 100 ? view.inputState.lastKeyCode : -1;\n    if (domChange.bounds) {\n        let { from, to } = domChange.bounds;\n        let preferredPos = sel.from, preferredSide = null;\n        // Prefer anchoring to end when Backspace is pressed (or, on\n        // Android, when something was deleted)\n        if (lastKey === 8 || browser.android && domChange.text.length < to - from) {\n            preferredPos = sel.to;\n            preferredSide = \"end\";\n        }\n        let cmp = state.doc.sliceString(from, to, LineBreakPlaceholder), selEnd, diff;\n        if (!sel.empty && sel.from >= from && sel.to <= to && (domChange.typeOver || cmp != domChange.text) &&\n            cmp.slice(0, sel.from - from) == domChange.text.slice(0, sel.from - from) &&\n            cmp.slice(sel.to - from) == domChange.text.slice(selEnd = domChange.text.length - (cmp.length - (sel.to - from)))) {\n            // This looks like a selection replacement\n            change = { from: sel.from, to: sel.to,\n                insert: Text.of(domChange.text.slice(sel.from - from, selEnd).split(LineBreakPlaceholder)) };\n        }\n        else if (diff = findDiff(cmp, domChange.text, preferredPos - from, preferredSide)) {\n            // Chrome inserts two newlines when pressing shift-enter at the\n            // end of a line. DomChange drops one of those.\n            if (browser.chrome && lastKey == 13 &&\n                diff.toB == diff.from + 2 && domChange.text.slice(diff.from, diff.toB) == LineBreakPlaceholder + LineBreakPlaceholder)\n                diff.toB--;\n            change = { from: from + diff.from, to: from + diff.toA,\n                insert: Text.of(domChange.text.slice(diff.from, diff.toB).split(LineBreakPlaceholder)) };\n        }\n    }\n    else if (newSel && (!view.hasFocus && state.facet(editable) || sameSelPos(newSel, sel))) {\n        newSel = null;\n    }\n    if (!change && !newSel)\n        return false;\n    if ((browser.mac || browser.android) && change && change.from == change.to && change.from == sel.head - 1 &&\n        /^\\. ?$/.test(change.insert.toString()) && view.contentDOM.getAttribute(\"autocorrect\") == \"off\") {\n        // Detect insert-period-on-double-space Mac and Android behavior,\n        // and transform it into a regular space insert.\n        if (newSel && change.insert.length == 2)\n            newSel = EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);\n        change = { from: change.from, to: change.to, insert: Text.of([change.insert.toString().replace(\".\", \" \")]) };\n    }\n    else if (state.doc.lineAt(sel.from).to < sel.to && view.docView.lineHasWidget(sel.to) &&\n        view.inputState.insertingTextAt > Date.now() - 50) {\n        // For a cross-line insertion, Chrome and Safari will crudely take\n        // the text of the line after the selection, flattening any\n        // widgets, and move it into the joined line. This tries to detect\n        // such a situation, and replaces the change with a selection\n        // replace of the text provided by the beforeinput event.\n        change = {\n            from: sel.from, to: sel.to,\n            insert: state.toText(view.inputState.insertingText)\n        };\n    }\n    else if (browser.chrome && change && change.from == change.to && change.from == sel.head &&\n        change.insert.toString() == \"\\n \" && view.lineWrapping) {\n        // In Chrome, if you insert a space at the start of a wrapped\n        // line, it will actually insert a newline and a space, causing a\n        // bogus new line to be created in CodeMirror (#968)\n        if (newSel)\n            newSel = EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);\n        change = { from: sel.from, to: sel.to, insert: Text.of([\" \"]) };\n    }\n    if (change) {\n        return applyDOMChangeInner(view, change, newSel, lastKey);\n    }\n    else if (newSel && !sameSelPos(newSel, sel)) {\n        let scrollIntoView = false, userEvent = \"select\";\n        if (view.inputState.lastSelectionTime > Date.now() - 50) {\n            if (view.inputState.lastSelectionOrigin == \"select\")\n                scrollIntoView = true;\n            userEvent = view.inputState.lastSelectionOrigin;\n            if (userEvent == \"select.pointer\")\n                newSel = skipAtomsForSelection(state.facet(atomicRanges).map(f => f(view)), newSel);\n        }\n        view.dispatch({ selection: newSel, scrollIntoView, userEvent });\n        return true;\n    }\n    else {\n        return false;\n    }\n}\nfunction applyDOMChangeInner(view, change, newSel, lastKey = -1) {\n    if (browser.ios && view.inputState.flushIOSKey(change))\n        return true;\n    let sel = view.state.selection.main;\n    // Android browsers don't fire reasonable key events for enter,\n    // backspace, or delete. So this detects changes that look like\n    // they're caused by those keys, and reinterprets them as key\n    // events. (Some of these keys are also handled by beforeinput\n    // events and the pendingAndroidKey mechanism, but that's not\n    // reliable in all situations.)\n    if (browser.android &&\n        ((change.to == sel.to &&\n            // GBoard will sometimes remove a space it just inserted\n            // after a completion when you press enter\n            (change.from == sel.from || change.from == sel.from - 1 && view.state.sliceDoc(change.from, sel.from) == \" \") &&\n            change.insert.length == 1 && change.insert.lines == 2 &&\n            dispatchKey(view.contentDOM, \"Enter\", 13)) ||\n            ((change.from == sel.from - 1 && change.to == sel.to && change.insert.length == 0 ||\n                lastKey == 8 && change.insert.length < change.to - change.from && change.to > sel.head) &&\n                dispatchKey(view.contentDOM, \"Backspace\", 8)) ||\n            (change.from == sel.from && change.to == sel.to + 1 && change.insert.length == 0 &&\n                dispatchKey(view.contentDOM, \"Delete\", 46))))\n        return true;\n    let text = change.insert.toString();\n    if (view.inputState.composing >= 0)\n        view.inputState.composing++;\n    let defaultTr;\n    let defaultInsert = () => defaultTr || (defaultTr = applyDefaultInsert(view, change, newSel));\n    if (!view.state.facet(inputHandler).some(h => h(view, change.from, change.to, text, defaultInsert)))\n        view.dispatch(defaultInsert());\n    return true;\n}\nfunction applyDefaultInsert(view, change, newSel) {\n    let tr, startState = view.state, sel = startState.selection.main, inAtomic = -1;\n    if (change.from == change.to && change.from < sel.from || change.from > sel.to) {\n        let side = change.from < sel.from ? -1 : 1, pos = side < 0 ? sel.from : sel.to;\n        let moved = skipAtomicRanges(startState.facet(atomicRanges).map(f => f(view)), pos, side);\n        if (change.from == moved)\n            inAtomic = moved;\n    }\n    if (inAtomic > -1) {\n        tr = {\n            changes: change,\n            selection: EditorSelection.cursor(change.from + change.insert.length, -1)\n        };\n    }\n    else if (change.from >= sel.from && change.to <= sel.to && change.to - change.from >= (sel.to - sel.from) / 3 &&\n        (!newSel || newSel.main.empty && newSel.main.from == change.from + change.insert.length) &&\n        view.inputState.composing < 0) {\n        let before = sel.from < change.from ? startState.sliceDoc(sel.from, change.from) : \"\";\n        let after = sel.to > change.to ? startState.sliceDoc(change.to, sel.to) : \"\";\n        tr = startState.replaceSelection(view.state.toText(before + change.insert.sliceString(0, undefined, view.state.lineBreak) + after));\n    }\n    else {\n        let changes = startState.changes(change);\n        let mainSel = newSel && newSel.main.to <= changes.newLength ? newSel.main : undefined;\n        // Try to apply a composition change to all cursors\n        if (startState.selection.ranges.length > 1 && (view.inputState.composing >= 0 || view.inputState.compositionPendingChange) &&\n            change.to <= sel.to + 10 && change.to >= sel.to - 10) {\n            let replaced = view.state.sliceDoc(change.from, change.to);\n            let compositionRange, composition = newSel && findCompositionNode(view, newSel.main.head);\n            if (composition) {\n                let dLen = change.insert.length - (change.to - change.from);\n                compositionRange = { from: composition.from, to: composition.to - dLen };\n            }\n            else {\n                compositionRange = view.state.doc.lineAt(sel.head);\n            }\n            let offset = sel.to - change.to;\n            tr = startState.changeByRange(range => {\n                if (range.from == sel.from && range.to == sel.to)\n                    return { changes, range: mainSel || range.map(changes) };\n                let to = range.to - offset, from = to - replaced.length;\n                if (view.state.sliceDoc(from, to) != replaced ||\n                    // Unfortunately, there's no way to make multiple\n                    // changes in the same node work without aborting\n                    // composition, so cursors in the composition range are\n                    // ignored.\n                    to >= compositionRange.from && from <= compositionRange.to)\n                    return { range };\n                let rangeChanges = startState.changes({ from, to, insert: change.insert }), selOff = range.to - sel.to;\n                return {\n                    changes: rangeChanges,\n                    range: !mainSel ? range.map(rangeChanges) :\n                        EditorSelection.range(Math.max(0, mainSel.anchor + selOff), Math.max(0, mainSel.head + selOff))\n                };\n            });\n        }\n        else {\n            tr = {\n                changes,\n                selection: mainSel && startState.selection.replaceRange(mainSel)\n            };\n        }\n    }\n    let userEvent = \"input.type\";\n    if (view.composing ||\n        view.inputState.compositionPendingChange && view.inputState.compositionEndedAt > Date.now() - 50) {\n        view.inputState.compositionPendingChange = false;\n        userEvent += \".compose\";\n        if (view.inputState.compositionFirstChange) {\n            userEvent += \".start\";\n            view.inputState.compositionFirstChange = false;\n        }\n    }\n    return startState.update(tr, { userEvent, scrollIntoView: true });\n}\nfunction findDiff(a, b, preferredPos, preferredSide) {\n    let minLen = Math.min(a.length, b.length);\n    let from = 0;\n    while (from < minLen && a.charCodeAt(from) == b.charCodeAt(from))\n        from++;\n    if (from == minLen && a.length == b.length)\n        return null;\n    let toA = a.length, toB = b.length;\n    while (toA > 0 && toB > 0 && a.charCodeAt(toA - 1) == b.charCodeAt(toB - 1)) {\n        toA--;\n        toB--;\n    }\n    if (preferredSide == \"end\") {\n        let adjust = Math.max(0, from - Math.min(toA, toB));\n        preferredPos -= toA + adjust - from;\n    }\n    if (toA < from && a.length < b.length) {\n        let move = preferredPos <= from && preferredPos >= toA ? from - preferredPos : 0;\n        from -= move;\n        toB = from + (toB - toA);\n        toA = from;\n    }\n    else if (toB < from) {\n        let move = preferredPos <= from && preferredPos >= toB ? from - preferredPos : 0;\n        from -= move;\n        toA = from + (toA - toB);\n        toB = from;\n    }\n    return { from, toA, toB };\n}\nfunction selectionPoints(view) {\n    let result = [];\n    if (view.root.activeElement != view.contentDOM)\n        return result;\n    let { anchorNode, anchorOffset, focusNode, focusOffset } = view.observer.selectionRange;\n    if (anchorNode) {\n        result.push(new DOMPoint(anchorNode, anchorOffset));\n        if (focusNode != anchorNode || focusOffset != anchorOffset)\n            result.push(new DOMPoint(focusNode, focusOffset));\n    }\n    return result;\n}\nfunction selectionFromPoints(points, base) {\n    if (points.length == 0)\n        return null;\n    let anchor = points[0].pos, head = points.length == 2 ? points[1].pos : anchor;\n    return anchor > -1 && head > -1 ? EditorSelection.single(anchor + base, head + base) : null;\n}\nfunction sameSelPos(selection, range) {\n    return range.head == selection.main.head && range.anchor == selection.main.anchor;\n}\n\nclass InputState {\n    setSelectionOrigin(origin) {\n        this.lastSelectionOrigin = origin;\n        this.lastSelectionTime = Date.now();\n    }\n    constructor(view) {\n        this.view = view;\n        this.lastKeyCode = 0;\n        this.lastKeyTime = 0;\n        this.lastTouchTime = 0;\n        this.lastTouchX = 0;\n        this.lastTouchY = 0;\n        this.lastFocusTime = 0;\n        this.lastScrollTop = 0;\n        this.lastScrollLeft = 0;\n        this.lastWheelEvent = 0;\n        // On iOS, some keys need to have their default behavior happen\n        // (after which we retroactively handle them and reset the DOM) to\n        // avoid messing up the virtual keyboard state.\n        this.pendingIOSKey = undefined;\n        /**\n        When enabled (>-1), tab presses are not given to key handlers,\n        leaving the browser's default behavior. If >0, the mode expires\n        at that timestamp, and any other keypress clears it.\n        Esc enables temporary tab focus mode for two seconds when not\n        otherwise handled.\n        */\n        this.tabFocusMode = -1;\n        this.lastSelectionOrigin = null;\n        this.lastSelectionTime = 0;\n        this.lastContextMenu = 0;\n        this.scrollHandlers = [];\n        this.handlers = Object.create(null);\n        // -1 means not in a composition. Otherwise, this counts the number\n        // of changes made during the composition. The count is used to\n        // avoid treating the start state of the composition, before any\n        // changes have been made, as part of the composition.\n        this.composing = -1;\n        // Tracks whether the next change should be marked as starting the\n        // composition (null means no composition, true means next is the\n        // first, false means first has already been marked for this\n        // composition)\n        this.compositionFirstChange = null;\n        // End time of the previous composition\n        this.compositionEndedAt = 0;\n        // Used in a kludge to detect when an Enter keypress should be\n        // considered part of the composition on Safari, which fires events\n        // in the wrong order\n        this.compositionPendingKey = false;\n        // Used to categorize changes as part of a composition, even when\n        // the mutation events fire shortly after the compositionend event\n        this.compositionPendingChange = false;\n        // Set by beforeinput, used in DOM change reader\n        this.insertingText = \"\";\n        this.insertingTextAt = 0;\n        this.mouseSelection = null;\n        // When a drag from the editor is active, this points at the range\n        // being dragged.\n        this.draggedContent = null;\n        this.handleEvent = this.handleEvent.bind(this);\n        this.notifiedFocused = view.hasFocus;\n        // On Safari adding an input event handler somehow prevents an\n        // issue where the composition vanishes when you press enter.\n        if (browser.safari)\n            view.contentDOM.addEventListener(\"input\", () => null);\n        if (browser.gecko)\n            firefoxCopyCutHack(view.contentDOM.ownerDocument);\n    }\n    handleEvent(event) {\n        if (!eventBelongsToEditor(this.view, event) || this.ignoreDuringComposition(event))\n            return;\n        if (event.type == \"keydown\" && this.keydown(event))\n            return;\n        if (this.view.updateState != 0 /* UpdateState.Idle */)\n            Promise.resolve().then(() => this.runHandlers(event.type, event));\n        else\n            this.runHandlers(event.type, event);\n    }\n    runHandlers(type, event) {\n        let handlers = this.handlers[type];\n        if (handlers) {\n            for (let observer of handlers.observers)\n                observer(this.view, event);\n            for (let handler of handlers.handlers) {\n                if (event.defaultPrevented)\n                    break;\n                if (handler(this.view, event)) {\n                    event.preventDefault();\n                    break;\n                }\n            }\n        }\n    }\n    ensureHandlers(plugins) {\n        let handlers = computeHandlers(plugins), prev = this.handlers, dom = this.view.contentDOM;\n        for (let type in handlers)\n            if (type != \"scroll\") {\n                let passive = !handlers[type].handlers.length;\n                let exists = prev[type];\n                if (exists && passive != !exists.handlers.length) {\n                    dom.removeEventListener(type, this.handleEvent);\n                    exists = null;\n                }\n                if (!exists)\n                    dom.addEventListener(type, this.handleEvent, { passive });\n            }\n        for (let type in prev)\n            if (type != \"scroll\" && !handlers[type])\n                dom.removeEventListener(type, this.handleEvent);\n        this.handlers = handlers;\n    }\n    keydown(event) {\n        // Must always run, even if a custom handler handled the event\n        this.lastKeyCode = event.keyCode;\n        this.lastKeyTime = Date.now();\n        if (event.keyCode == 9 && this.tabFocusMode > -1 && (!this.tabFocusMode || Date.now() <= this.tabFocusMode))\n            return true;\n        if (this.tabFocusMode > 0 && event.keyCode != 27 && modifierCodes.indexOf(event.keyCode) < 0)\n            this.tabFocusMode = -1;\n        // Chrome for Android usually doesn't fire proper key events, but\n        // occasionally does, usually surrounded by a bunch of complicated\n        // composition changes. When an enter or backspace key event is\n        // seen, hold off on handling DOM events for a bit, and then\n        // dispatch it.\n        if (browser.android && browser.chrome && !event.synthetic &&\n            (event.keyCode == 13 || event.keyCode == 8)) {\n            this.view.observer.delayAndroidKey(event.key, event.keyCode);\n            return true;\n        }\n        // Preventing the default behavior of Enter on iOS makes the\n        // virtual keyboard get stuck in the wrong (lowercase)\n        // state. So we let it go through, and then, in\n        // applyDOMChange, notify key handlers of it and reset to\n        // the state they produce.\n        let pending;\n        if (browser.ios && !event.synthetic && !event.altKey && !event.metaKey && !event.shiftKey &&\n            ((pending = PendingKeys.find(key => key.keyCode == event.keyCode)) && !event.ctrlKey ||\n                EmacsyPendingKeys.indexOf(event.key) > -1 && event.ctrlKey)) {\n            this.pendingIOSKey = pending || event;\n            setTimeout(() => this.flushIOSKey(), 250);\n            return true;\n        }\n        if (event.keyCode != 229)\n            this.view.observer.forceFlush();\n        return false;\n    }\n    flushIOSKey(change) {\n        let key = this.pendingIOSKey;\n        if (!key)\n            return false;\n        // This looks like an autocorrection before Enter\n        if (key.key == \"Enter\" && change && change.from < change.to && /^\\S+$/.test(change.insert.toString()))\n            return false;\n        this.pendingIOSKey = undefined;\n        return dispatchKey(this.view.contentDOM, key.key, key.keyCode, key instanceof KeyboardEvent ? key : undefined);\n    }\n    ignoreDuringComposition(event) {\n        if (!/^key/.test(event.type) || event.synthetic)\n            return false;\n        if (this.composing > 0)\n            return true;\n        // See https://www.stum.de/2016/06/24/handling-ime-events-in-javascript/.\n        // On some input method editors (IMEs), the Enter key is used to\n        // confirm character selection. On Safari, when Enter is pressed,\n        // compositionend and keydown events are sometimes emitted in the\n        // wrong order. The key event should still be ignored, even when\n        // it happens after the compositionend event.\n        if (browser.safari && !browser.ios && this.compositionPendingKey && Date.now() - this.compositionEndedAt < 100) {\n            this.compositionPendingKey = false;\n            return true;\n        }\n        return false;\n    }\n    startMouseSelection(mouseSelection) {\n        if (this.mouseSelection)\n            this.mouseSelection.destroy();\n        this.mouseSelection = mouseSelection;\n    }\n    update(update) {\n        this.view.observer.update(update);\n        if (this.mouseSelection)\n            this.mouseSelection.update(update);\n        if (this.draggedContent && update.docChanged)\n            this.draggedContent = this.draggedContent.map(update.changes);\n        if (update.transactions.length)\n            this.lastKeyCode = this.lastSelectionTime = 0;\n    }\n    destroy() {\n        if (this.mouseSelection)\n            this.mouseSelection.destroy();\n    }\n}\nfunction bindHandler(plugin, handler) {\n    return (view, event) => {\n        try {\n            return handler.call(plugin, event, view);\n        }\n        catch (e) {\n            logException(view.state, e);\n        }\n    };\n}\nfunction computeHandlers(plugins) {\n    let result = Object.create(null);\n    function record(type) {\n        return result[type] || (result[type] = { observers: [], handlers: [] });\n    }\n    for (let plugin of plugins) {\n        let spec = plugin.spec, handlers = spec && spec.plugin.domEventHandlers, observers = spec && spec.plugin.domEventObservers;\n        if (handlers)\n            for (let type in handlers) {\n                let f = handlers[type];\n                if (f)\n                    record(type).handlers.push(bindHandler(plugin.value, f));\n            }\n        if (observers)\n            for (let type in observers) {\n                let f = observers[type];\n                if (f)\n                    record(type).observers.push(bindHandler(plugin.value, f));\n            }\n    }\n    for (let type in handlers)\n        record(type).handlers.push(handlers[type]);\n    for (let type in observers)\n        record(type).observers.push(observers[type]);\n    return result;\n}\nconst PendingKeys = [\n    { key: \"Backspace\", keyCode: 8, inputType: \"deleteContentBackward\" },\n    { key: \"Enter\", keyCode: 13, inputType: \"insertParagraph\" },\n    { key: \"Enter\", keyCode: 13, inputType: \"insertLineBreak\" },\n    { key: \"Delete\", keyCode: 46, inputType: \"deleteContentForward\" }\n];\nconst EmacsyPendingKeys = \"dthko\";\n// Key codes for modifier keys\nconst modifierCodes = [16, 17, 18, 20, 91, 92, 224, 225];\nconst dragScrollMargin = 6;\nfunction dragScrollSpeed(dist) {\n    return Math.max(0, dist) * 0.7 + 8;\n}\nfunction dist(a, b) {\n    return Math.max(Math.abs(a.clientX - b.clientX), Math.abs(a.clientY - b.clientY));\n}\nclass MouseSelection {\n    constructor(view, startEvent, style, mustSelect) {\n        this.view = view;\n        this.startEvent = startEvent;\n        this.style = style;\n        this.mustSelect = mustSelect;\n        this.scrollSpeed = { x: 0, y: 0 };\n        this.scrolling = -1;\n        this.lastEvent = startEvent;\n        this.scrollParents = scrollableParents(view.contentDOM);\n        this.atoms = view.state.facet(atomicRanges).map(f => f(view));\n        let doc = view.contentDOM.ownerDocument;\n        doc.addEventListener(\"mousemove\", this.move = this.move.bind(this));\n        doc.addEventListener(\"mouseup\", this.up = this.up.bind(this));\n        this.extend = startEvent.shiftKey;\n        this.multiple = view.state.facet(EditorState.allowMultipleSelections) && addsSelectionRange(view, startEvent);\n        this.dragging = isInPrimarySelection(view, startEvent) && getClickType(startEvent) == 1 ? null : false;\n    }\n    start(event) {\n        // When clicking outside of the selection, immediately apply the\n        // effect of starting the selection\n        if (this.dragging === false)\n            this.select(event);\n    }\n    move(event) {\n        if (event.buttons == 0)\n            return this.destroy();\n        if (this.dragging || this.dragging == null && dist(this.startEvent, event) < 10)\n            return;\n        this.select(this.lastEvent = event);\n        let sx = 0, sy = 0;\n        let left = 0, top = 0, right = this.view.win.innerWidth, bottom = this.view.win.innerHeight;\n        if (this.scrollParents.x)\n            ({ left, right } = this.scrollParents.x.getBoundingClientRect());\n        if (this.scrollParents.y)\n            ({ top, bottom } = this.scrollParents.y.getBoundingClientRect());\n        let margins = getScrollMargins(this.view);\n        if (event.clientX - margins.left <= left + dragScrollMargin)\n            sx = -dragScrollSpeed(left - event.clientX);\n        else if (event.clientX + margins.right >= right - dragScrollMargin)\n            sx = dragScrollSpeed(event.clientX - right);\n        if (event.clientY - margins.top <= top + dragScrollMargin)\n            sy = -dragScrollSpeed(top - event.clientY);\n        else if (event.clientY + margins.bottom >= bottom - dragScrollMargin)\n            sy = dragScrollSpeed(event.clientY - bottom);\n        this.setScrollSpeed(sx, sy);\n    }\n    up(event) {\n        if (this.dragging == null)\n            this.select(this.lastEvent);\n        if (!this.dragging)\n            event.preventDefault();\n        this.destroy();\n    }\n    destroy() {\n        this.setScrollSpeed(0, 0);\n        let doc = this.view.contentDOM.ownerDocument;\n        doc.removeEventListener(\"mousemove\", this.move);\n        doc.removeEventListener(\"mouseup\", this.up);\n        this.view.inputState.mouseSelection = this.view.inputState.draggedContent = null;\n    }\n    setScrollSpeed(sx, sy) {\n        this.scrollSpeed = { x: sx, y: sy };\n        if (sx || sy) {\n            if (this.scrolling < 0)\n                this.scrolling = setInterval(() => this.scroll(), 50);\n        }\n        else if (this.scrolling > -1) {\n            clearInterval(this.scrolling);\n            this.scrolling = -1;\n        }\n    }\n    scroll() {\n        let { x, y } = this.scrollSpeed;\n        if (x && this.scrollParents.x) {\n            this.scrollParents.x.scrollLeft += x;\n            x = 0;\n        }\n        if (y && this.scrollParents.y) {\n            this.scrollParents.y.scrollTop += y;\n            y = 0;\n        }\n        if (x || y)\n            this.view.win.scrollBy(x, y);\n        if (this.dragging === false)\n            this.select(this.lastEvent);\n    }\n    select(event) {\n        let { view } = this, selection = skipAtomsForSelection(this.atoms, this.style.get(event, this.extend, this.multiple));\n        if (this.mustSelect || !selection.eq(view.state.selection, this.dragging === false))\n            this.view.dispatch({\n                selection,\n                userEvent: \"select.pointer\"\n            });\n        this.mustSelect = false;\n    }\n    update(update) {\n        if (update.transactions.some(tr => tr.isUserEvent(\"input.type\")))\n            this.destroy();\n        else if (this.style.update(update))\n            setTimeout(() => this.select(this.lastEvent), 20);\n    }\n}\nfunction addsSelectionRange(view, event) {\n    let facet = view.state.facet(clickAddsSelectionRange);\n    return facet.length ? facet[0](event) : browser.mac ? event.metaKey : event.ctrlKey;\n}\nfunction dragMovesSelection(view, event) {\n    let facet = view.state.facet(dragMovesSelection$1);\n    return facet.length ? facet[0](event) : browser.mac ? !event.altKey : !event.ctrlKey;\n}\nfunction isInPrimarySelection(view, event) {\n    let { main } = view.state.selection;\n    if (main.empty)\n        return false;\n    // On boundary clicks, check whether the coordinates are inside the\n    // selection's client rectangles\n    let sel = getSelection(view.root);\n    if (!sel || sel.rangeCount == 0)\n        return true;\n    let rects = sel.getRangeAt(0).getClientRects();\n    for (let i = 0; i < rects.length; i++) {\n        let rect = rects[i];\n        if (rect.left <= event.clientX && rect.right >= event.clientX &&\n            rect.top <= event.clientY && rect.bottom >= event.clientY)\n            return true;\n    }\n    return false;\n}\nfunction eventBelongsToEditor(view, event) {\n    if (!event.bubbles)\n        return true;\n    if (event.defaultPrevented)\n        return false;\n    for (let node = event.target, tile; node != view.contentDOM; node = node.parentNode)\n        if (!node || node.nodeType == 11 ||\n            ((tile = Tile.get(node)) && tile.isWidget() && !tile.isHidden && tile.widget.ignoreEvent(event)))\n            return false;\n    return true;\n}\nconst handlers = /*@__PURE__*/Object.create(null);\nconst observers = /*@__PURE__*/Object.create(null);\n// This is very crude, but unfortunately both these browsers _pretend_\n// that they have a clipboard API—all the objects and methods are\n// there, they just don't work, and they are hard to test.\nconst brokenClipboardAPI = (browser.ie && browser.ie_version < 15) ||\n    (browser.ios && browser.webkit_version < 604);\nfunction capturePaste(view) {\n    let parent = view.dom.parentNode;\n    if (!parent)\n        return;\n    let target = parent.appendChild(document.createElement(\"textarea\"));\n    target.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n    target.focus();\n    setTimeout(() => {\n        view.focus();\n        target.remove();\n        doPaste(view, target.value);\n    }, 50);\n}\nfunction textFilter(state, facet, text) {\n    for (let filter of state.facet(facet))\n        text = filter(text, state);\n    return text;\n}\nfunction doPaste(view, input) {\n    input = textFilter(view.state, clipboardInputFilter, input);\n    let { state } = view, changes, i = 1, text = state.toText(input);\n    let byLine = text.lines == state.selection.ranges.length;\n    let linewise = lastLinewiseCopy != null && state.selection.ranges.every(r => r.empty) && lastLinewiseCopy == text.toString();\n    if (linewise) {\n        let lastLine = -1;\n        changes = state.changeByRange(range => {\n            let line = state.doc.lineAt(range.from);\n            if (line.from == lastLine)\n                return { range };\n            lastLine = line.from;\n            let insert = state.toText((byLine ? text.line(i++).text : input) + state.lineBreak);\n            return { changes: { from: line.from, insert },\n                range: EditorSelection.cursor(range.from + insert.length) };\n        });\n    }\n    else if (byLine) {\n        changes = state.changeByRange(range => {\n            let line = text.line(i++);\n            return { changes: { from: range.from, to: range.to, insert: line.text },\n                range: EditorSelection.cursor(range.from + line.length) };\n        });\n    }\n    else {\n        changes = state.replaceSelection(text);\n    }\n    view.dispatch(changes, {\n        userEvent: \"input.paste\",\n        scrollIntoView: true\n    });\n}\nobservers.scroll = view => {\n    view.inputState.lastScrollTop = view.scrollDOM.scrollTop;\n    view.inputState.lastScrollLeft = view.scrollDOM.scrollLeft;\n};\nobservers.wheel = observers.mousewheel = view => {\n    view.inputState.lastWheelEvent = Date.now();\n};\nhandlers.keydown = (view, event) => {\n    view.inputState.setSelectionOrigin(\"select\");\n    if (event.keyCode == 27 && view.inputState.tabFocusMode != 0)\n        view.inputState.tabFocusMode = Date.now() + 2000;\n    return false;\n};\nobservers.touchstart = (view, e) => {\n    let iState = view.inputState, touch = e.targetTouches[0];\n    iState.lastTouchTime = Date.now();\n    if (touch) {\n        iState.lastTouchX = touch.clientX;\n        iState.lastTouchY = touch.clientY;\n    }\n    iState.setSelectionOrigin(\"select.pointer\");\n};\nobservers.touchmove = view => {\n    view.inputState.setSelectionOrigin(\"select.pointer\");\n};\nhandlers.mousedown = (view, event) => {\n    view.observer.flush();\n    if (view.inputState.lastTouchTime > Date.now() - 2000)\n        return false; // Ignore touch interaction\n    let style = null;\n    for (let makeStyle of view.state.facet(mouseSelectionStyle)) {\n        style = makeStyle(view, event);\n        if (style)\n            break;\n    }\n    if (!style && event.button == 0)\n        style = basicMouseSelection(view, event);\n    if (style) {\n        let mustFocus = !view.hasFocus;\n        view.inputState.startMouseSelection(new MouseSelection(view, event, style, mustFocus));\n        if (mustFocus)\n            view.observer.ignore(() => {\n                focusPreventScroll(view.contentDOM);\n                let active = view.root.activeElement;\n                if (active && !active.contains(view.contentDOM))\n                    active.blur();\n            });\n        let mouseSel = view.inputState.mouseSelection;\n        if (mouseSel) {\n            mouseSel.start(event);\n            return mouseSel.dragging === false;\n        }\n    }\n    else {\n        view.inputState.setSelectionOrigin(\"select.pointer\");\n    }\n    return false;\n};\nfunction rangeForClick(view, pos, bias, type) {\n    if (type == 1) { // Single click\n        return EditorSelection.cursor(pos, bias);\n    }\n    else if (type == 2) { // Double click\n        return groupAt(view.state, pos, bias);\n    }\n    else { // Triple click\n        let visual = view.docView.lineAt(pos, bias), line = view.state.doc.lineAt(visual ? visual.posAtEnd : pos);\n        let from = visual ? visual.posAtStart : line.from, to = visual ? visual.posAtEnd : line.to;\n        if (to < view.state.doc.length && to == line.to)\n            to++;\n        return EditorSelection.range(from, to);\n    }\n}\nconst BadMouseDetail = browser.ie && browser.ie_version <= 11;\nlet lastMouseDown = null, lastMouseDownCount = 0, lastMouseDownTime = 0;\nfunction getClickType(event) {\n    if (!BadMouseDetail)\n        return event.detail;\n    let last = lastMouseDown, lastTime = lastMouseDownTime;\n    lastMouseDown = event;\n    lastMouseDownTime = Date.now();\n    return lastMouseDownCount = !last || (lastTime > Date.now() - 400 && Math.abs(last.clientX - event.clientX) < 2 &&\n        Math.abs(last.clientY - event.clientY) < 2) ? (lastMouseDownCount + 1) % 3 : 1;\n}\nfunction basicMouseSelection(view, event) {\n    let start = view.posAndSideAtCoords({ x: event.clientX, y: event.clientY }, false), type = getClickType(event);\n    let startSel = view.state.selection;\n    return {\n        update(update) {\n            if (update.docChanged) {\n                start.pos = update.changes.mapPos(start.pos);\n                startSel = startSel.map(update.changes);\n            }\n        },\n        get(event, extend, multiple) {\n            let cur = view.posAndSideAtCoords({ x: event.clientX, y: event.clientY }, false), removed;\n            let range = rangeForClick(view, cur.pos, cur.assoc, type);\n            if (start.pos != cur.pos && !extend) {\n                let startRange = rangeForClick(view, start.pos, start.assoc, type);\n                let from = Math.min(startRange.from, range.from), to = Math.max(startRange.to, range.to);\n                range = from < range.from ? EditorSelection.range(from, to, range.assoc) : EditorSelection.range(to, from, range.assoc);\n            }\n            if (extend)\n                return startSel.replaceRange(startSel.main.extend(range.from, range.to, range.assoc));\n            else if (multiple && type == 1 && startSel.ranges.length > 1 && (removed = removeRangeAround(startSel, cur.pos)))\n                return removed;\n            else if (multiple)\n                return startSel.addRange(range);\n            else\n                return EditorSelection.create([range]);\n        }\n    };\n}\nfunction removeRangeAround(sel, pos) {\n    for (let i = 0; i < sel.ranges.length; i++) {\n        let { from, to } = sel.ranges[i];\n        if (from <= pos && to >= pos)\n            return EditorSelection.create(sel.ranges.slice(0, i).concat(sel.ranges.slice(i + 1)), sel.mainIndex == i ? 0 : sel.mainIndex - (sel.mainIndex > i ? 1 : 0));\n    }\n    return null;\n}\nhandlers.dragstart = (view, event) => {\n    let { selection: { main: range } } = view.state;\n    if (event.target.draggable) {\n        let tile = view.docView.tile.nearest(event.target);\n        if (tile && tile.isWidget()) {\n            let from = tile.posAtStart, to = from + tile.length;\n            if (from >= range.to || to <= range.from)\n                range = EditorSelection.range(from, to);\n        }\n    }\n    let { inputState } = view;\n    if (inputState.mouseSelection)\n        inputState.mouseSelection.dragging = true;\n    inputState.draggedContent = range;\n    if (event.dataTransfer) {\n        event.dataTransfer.setData(\"Text\", textFilter(view.state, clipboardOutputFilter, view.state.sliceDoc(range.from, range.to)));\n        event.dataTransfer.effectAllowed = \"copyMove\";\n    }\n    return false;\n};\nhandlers.dragend = view => {\n    view.inputState.draggedContent = null;\n    return false;\n};\nfunction dropText(view, event, text, direct) {\n    text = textFilter(view.state, clipboardInputFilter, text);\n    if (!text)\n        return;\n    let dropPos = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);\n    let { draggedContent } = view.inputState;\n    let del = direct && draggedContent && dragMovesSelection(view, event)\n        ? { from: draggedContent.from, to: draggedContent.to } : null;\n    let ins = { from: dropPos, insert: text };\n    let changes = view.state.changes(del ? [del, ins] : ins);\n    view.focus();\n    view.dispatch({\n        changes,\n        selection: { anchor: changes.mapPos(dropPos, -1), head: changes.mapPos(dropPos, 1) },\n        userEvent: del ? \"move.drop\" : \"input.drop\"\n    });\n    view.inputState.draggedContent = null;\n}\nhandlers.drop = (view, event) => {\n    if (!event.dataTransfer)\n        return false;\n    if (view.state.readOnly)\n        return true;\n    let files = event.dataTransfer.files;\n    if (files && files.length) { // For a file drop, read the file's text.\n        let text = Array(files.length), read = 0;\n        let finishFile = () => {\n            if (++read == files.length)\n                dropText(view, event, text.filter(s => s != null).join(view.state.lineBreak), false);\n        };\n        for (let i = 0; i < files.length; i++) {\n            let reader = new FileReader;\n            reader.onerror = finishFile;\n            reader.onload = () => {\n                if (!/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(reader.result))\n                    text[i] = reader.result;\n                finishFile();\n            };\n            reader.readAsText(files[i]);\n        }\n        return true;\n    }\n    else {\n        let text = event.dataTransfer.getData(\"Text\");\n        if (text) {\n            dropText(view, event, text, true);\n            return true;\n        }\n    }\n    return false;\n};\nhandlers.paste = (view, event) => {\n    if (view.state.readOnly)\n        return true;\n    view.observer.flush();\n    let data = brokenClipboardAPI ? null : event.clipboardData;\n    if (data) {\n        doPaste(view, data.getData(\"text/plain\") || data.getData(\"text/uri-list\"));\n        return true;\n    }\n    else {\n        capturePaste(view);\n        return false;\n    }\n};\nfunction captureCopy(view, text) {\n    // The extra wrapper is somehow necessary on IE/Edge to prevent the\n    // content from being mangled when it is put onto the clipboard\n    let parent = view.dom.parentNode;\n    if (!parent)\n        return;\n    let target = parent.appendChild(document.createElement(\"textarea\"));\n    target.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n    target.value = text;\n    target.focus();\n    target.selectionEnd = text.length;\n    target.selectionStart = 0;\n    setTimeout(() => {\n        target.remove();\n        view.focus();\n    }, 50);\n}\nfunction copiedRange(state) {\n    let content = [], ranges = [], linewise = false;\n    for (let range of state.selection.ranges)\n        if (!range.empty) {\n            content.push(state.sliceDoc(range.from, range.to));\n            ranges.push(range);\n        }\n    if (!content.length) {\n        // Nothing selected, do a line-wise copy\n        let upto = -1;\n        for (let { from } of state.selection.ranges) {\n            let line = state.doc.lineAt(from);\n            if (line.number > upto) {\n                content.push(line.text);\n                ranges.push({ from: line.from, to: Math.min(state.doc.length, line.to + 1) });\n            }\n            upto = line.number;\n        }\n        linewise = true;\n    }\n    return { text: textFilter(state, clipboardOutputFilter, content.join(state.lineBreak)), ranges, linewise };\n}\nlet lastLinewiseCopy = null;\nhandlers.copy = handlers.cut = (view, event) => {\n    // If the DOM selection is outside this editor, don't intercept.\n    // This happens when a parent editor (like ProseMirror) selects content that\n    // spans multiple elements including this CodeMirror. The copy event may\n    // bubble through CodeMirror (e.g. when CodeMirror is the first or the last\n    // element in the selection), but we should let the parent handle it.\n    if (!hasSelection(view.contentDOM, view.observer.selectionRange))\n        return false;\n    let { text, ranges, linewise } = copiedRange(view.state);\n    if (!text && !linewise)\n        return false;\n    lastLinewiseCopy = linewise ? text : null;\n    if (event.type == \"cut\" && !view.state.readOnly)\n        view.dispatch({\n            changes: ranges,\n            scrollIntoView: true,\n            userEvent: \"delete.cut\"\n        });\n    let data = brokenClipboardAPI ? null : event.clipboardData;\n    if (data) {\n        data.clearData();\n        data.setData(\"text/plain\", text);\n        return true;\n    }\n    else {\n        captureCopy(view, text);\n        return false;\n    }\n};\nconst isFocusChange = /*@__PURE__*/Annotation.define();\nfunction focusChangeTransaction(state, focus) {\n    let effects = [];\n    for (let getEffect of state.facet(focusChangeEffect)) {\n        let effect = getEffect(state, focus);\n        if (effect)\n            effects.push(effect);\n    }\n    return effects.length ? state.update({ effects, annotations: isFocusChange.of(true) }) : null;\n}\nfunction updateForFocusChange(view) {\n    setTimeout(() => {\n        let focus = view.hasFocus;\n        if (focus != view.inputState.notifiedFocused) {\n            let tr = focusChangeTransaction(view.state, focus);\n            if (tr)\n                view.dispatch(tr);\n            else\n                view.update([]);\n        }\n    }, 10);\n}\nobservers.focus = view => {\n    view.inputState.lastFocusTime = Date.now();\n    // When focusing reset the scroll position, move it back to where it was\n    if (!view.scrollDOM.scrollTop && (view.inputState.lastScrollTop || view.inputState.lastScrollLeft)) {\n        view.scrollDOM.scrollTop = view.inputState.lastScrollTop;\n        view.scrollDOM.scrollLeft = view.inputState.lastScrollLeft;\n    }\n    updateForFocusChange(view);\n};\nobservers.blur = view => {\n    view.observer.clearSelectionRange();\n    updateForFocusChange(view);\n};\nobservers.compositionstart = observers.compositionupdate = view => {\n    if (view.observer.editContext)\n        return; // Composition handled by edit context\n    if (view.inputState.compositionFirstChange == null)\n        view.inputState.compositionFirstChange = true;\n    if (view.inputState.composing < 0) {\n        // FIXME possibly set a timeout to clear it again on Android\n        view.inputState.composing = 0;\n    }\n};\nobservers.compositionend = view => {\n    if (view.observer.editContext)\n        return; // Composition handled by edit context\n    view.inputState.composing = -1;\n    view.inputState.compositionEndedAt = Date.now();\n    view.inputState.compositionPendingKey = true;\n    view.inputState.compositionPendingChange = view.observer.pendingRecords().length > 0;\n    view.inputState.compositionFirstChange = null;\n    if (browser.chrome && browser.android) {\n        // Delay flushing for a bit on Android because it'll often fire a\n        // bunch of contradictory changes in a row at end of composition\n        view.observer.flushSoon();\n    }\n    else if (view.inputState.compositionPendingChange) {\n        // If we found pending records, schedule a flush.\n        Promise.resolve().then(() => view.observer.flush());\n    }\n    else {\n        // Otherwise, make sure that, if no changes come in soon, the\n        // composition view is cleared.\n        setTimeout(() => {\n            if (view.inputState.composing < 0 && view.docView.hasComposition)\n                view.update([]);\n        }, 50);\n    }\n};\nobservers.contextmenu = view => {\n    view.inputState.lastContextMenu = Date.now();\n};\nhandlers.beforeinput = (view, event) => {\n    var _a, _b;\n    if (event.inputType == \"insertText\" || event.inputType == \"insertCompositionText\") {\n        view.inputState.insertingText = event.data;\n        view.inputState.insertingTextAt = Date.now();\n    }\n    // In EditContext mode, we must handle insertReplacementText events\n    // directly, to make spell checking corrections work\n    if (event.inputType == \"insertReplacementText\" && view.observer.editContext) {\n        let text = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.getData(\"text/plain\"), ranges = event.getTargetRanges();\n        if (text && ranges.length) {\n            let r = ranges[0];\n            let from = view.posAtDOM(r.startContainer, r.startOffset), to = view.posAtDOM(r.endContainer, r.endOffset);\n            applyDOMChangeInner(view, { from, to, insert: view.state.toText(text) }, null);\n            return true;\n        }\n    }\n    // Because Chrome Android doesn't fire useful key events, use\n    // beforeinput to detect backspace (and possibly enter and delete,\n    // but those usually don't even seem to fire beforeinput events at\n    // the moment) and fake a key event for it.\n    //\n    // (preventDefault on beforeinput, though supported in the spec,\n    // seems to do nothing at all on Chrome).\n    let pending;\n    if (browser.chrome && browser.android && (pending = PendingKeys.find(key => key.inputType == event.inputType))) {\n        view.observer.delayAndroidKey(pending.key, pending.keyCode);\n        if (pending.key == \"Backspace\" || pending.key == \"Delete\") {\n            let startViewHeight = ((_b = window.visualViewport) === null || _b === void 0 ? void 0 : _b.height) || 0;\n            setTimeout(() => {\n                var _a;\n                // Backspacing near uneditable nodes on Chrome Android sometimes\n                // closes the virtual keyboard. This tries to crudely detect\n                // that and refocus to get it back.\n                if ((((_a = window.visualViewport) === null || _a === void 0 ? void 0 : _a.height) || 0) > startViewHeight + 10 && view.hasFocus) {\n                    view.contentDOM.blur();\n                    view.focus();\n                }\n            }, 100);\n        }\n    }\n    if (browser.ios && event.inputType == \"deleteContentForward\") {\n        // For some reason, DOM changes (and beforeinput) happen _before_\n        // the key event for ctrl-d on iOS when using an external\n        // keyboard.\n        view.observer.flushSoon();\n    }\n    // Safari will occasionally forget to fire compositionend at the end of a dead-key composition\n    if (browser.safari && event.inputType == \"insertText\" && view.inputState.composing >= 0) {\n        setTimeout(() => observers.compositionend(view, event), 20);\n    }\n    return false;\n};\nconst appliedFirefoxHack = /*@__PURE__*/new Set;\n// In Firefox, when cut/copy handlers are added to the document, that\n// somehow avoids a bug where those events aren't fired when the\n// selection is empty. See issue #1082 and\n// https://bugzilla.mozilla.org/show_bug.cgi?id=995961\nfunction firefoxCopyCutHack(doc) {\n    if (!appliedFirefoxHack.has(doc)) {\n        appliedFirefoxHack.add(doc);\n        doc.addEventListener(\"copy\", () => { });\n        doc.addEventListener(\"cut\", () => { });\n    }\n}\n\nconst wrappingWhiteSpace = [\"pre-wrap\", \"normal\", \"pre-line\", \"break-spaces\"];\n// Used to track, during updateHeight, if any actual heights changed\nlet heightChangeFlag = false;\nfunction clearHeightChangeFlag() { heightChangeFlag = false; }\nclass HeightOracle {\n    constructor(lineWrapping) {\n        this.lineWrapping = lineWrapping;\n        this.doc = Text.empty;\n        this.heightSamples = {};\n        this.lineHeight = 14; // The height of an entire line (line-height)\n        this.charWidth = 7;\n        this.textHeight = 14; // The height of the actual font (font-size)\n        this.lineLength = 30;\n    }\n    heightForGap(from, to) {\n        let lines = this.doc.lineAt(to).number - this.doc.lineAt(from).number + 1;\n        if (this.lineWrapping)\n            lines += Math.max(0, Math.ceil(((to - from) - (lines * this.lineLength * 0.5)) / this.lineLength));\n        return this.lineHeight * lines;\n    }\n    heightForLine(length) {\n        if (!this.lineWrapping)\n            return this.lineHeight;\n        let lines = 1 + Math.max(0, Math.ceil((length - this.lineLength) / Math.max(1, this.lineLength - 5)));\n        return lines * this.lineHeight;\n    }\n    setDoc(doc) { this.doc = doc; return this; }\n    mustRefreshForWrapping(whiteSpace) {\n        return (wrappingWhiteSpace.indexOf(whiteSpace) > -1) != this.lineWrapping;\n    }\n    mustRefreshForHeights(lineHeights) {\n        let newHeight = false;\n        for (let i = 0; i < lineHeights.length; i++) {\n            let h = lineHeights[i];\n            if (h < 0) {\n                i++;\n            }\n            else if (!this.heightSamples[Math.floor(h * 10)]) { // Round to .1 pixels\n                newHeight = true;\n                this.heightSamples[Math.floor(h * 10)] = true;\n            }\n        }\n        return newHeight;\n    }\n    refresh(whiteSpace, lineHeight, charWidth, textHeight, lineLength, knownHeights) {\n        let lineWrapping = wrappingWhiteSpace.indexOf(whiteSpace) > -1;\n        let changed = Math.abs(lineHeight - this.lineHeight) > 0.3 || this.lineWrapping != lineWrapping;\n        this.lineWrapping = lineWrapping;\n        this.lineHeight = lineHeight;\n        this.charWidth = charWidth;\n        this.textHeight = textHeight;\n        this.lineLength = lineLength;\n        if (changed) {\n            this.heightSamples = {};\n            for (let i = 0; i < knownHeights.length; i++) {\n                let h = knownHeights[i];\n                if (h < 0)\n                    i++;\n                else\n                    this.heightSamples[Math.floor(h * 10)] = true;\n            }\n        }\n        return changed;\n    }\n}\n// This object is used by `updateHeight` to make DOM measurements\n// arrive at the right nodes. The `heights` array is a sequence of\n// block heights, starting from position `from`.\nclass MeasuredHeights {\n    constructor(from, heights) {\n        this.from = from;\n        this.heights = heights;\n        this.index = 0;\n    }\n    get more() { return this.index < this.heights.length; }\n}\n/**\nRecord used to represent information about a block-level element\nin the editor view.\n*/\nclass BlockInfo {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The start of the element in the document.\n    */\n    from, \n    /**\n    The length of the element.\n    */\n    length, \n    /**\n    The top position of the element (relative to the top of the\n    document).\n    */\n    top, \n    /**\n    Its height.\n    */\n    height, \n    /**\n    @internal Weird packed field that holds an array of children\n    for composite blocks, a decoration for block widgets, and a\n    number indicating the amount of widget-created line breaks for\n    text blocks.\n    */\n    _content) {\n        this.from = from;\n        this.length = length;\n        this.top = top;\n        this.height = height;\n        this._content = _content;\n    }\n    /**\n    The type of element this is. When querying lines, this may be\n    an array of all the blocks that make up the line.\n    */\n    get type() {\n        return typeof this._content == \"number\" ? BlockType.Text :\n            Array.isArray(this._content) ? this._content : this._content.type;\n    }\n    /**\n    The end of the element as a document position.\n    */\n    get to() { return this.from + this.length; }\n    /**\n    The bottom position of the element.\n    */\n    get bottom() { return this.top + this.height; }\n    /**\n    If this is a widget block, this will return the widget\n    associated with it.\n    */\n    get widget() {\n        return this._content instanceof PointDecoration ? this._content.widget : null;\n    }\n    /**\n    If this is a textblock, this holds the number of line breaks\n    that appear in widgets inside the block.\n    */\n    get widgetLineBreaks() {\n        return typeof this._content == \"number\" ? this._content : 0;\n    }\n    /**\n    @internal\n    */\n    join(other) {\n        let content = (Array.isArray(this._content) ? this._content : [this])\n            .concat(Array.isArray(other._content) ? other._content : [other]);\n        return new BlockInfo(this.from, this.length + other.length, this.top, this.height + other.height, content);\n    }\n}\nvar QueryType = /*@__PURE__*/(function (QueryType) {\n    QueryType[QueryType[\"ByPos\"] = 0] = \"ByPos\";\n    QueryType[QueryType[\"ByHeight\"] = 1] = \"ByHeight\";\n    QueryType[QueryType[\"ByPosNoHeight\"] = 2] = \"ByPosNoHeight\";\nreturn QueryType})(QueryType || (QueryType = {}));\nconst Epsilon = 1e-3;\nclass HeightMap {\n    constructor(length, // The number of characters covered\n    height, // Height of this part of the document\n    flags = 2 /* Flag.Outdated */) {\n        this.length = length;\n        this.height = height;\n        this.flags = flags;\n    }\n    get outdated() { return (this.flags & 2 /* Flag.Outdated */) > 0; }\n    set outdated(value) { this.flags = (value ? 2 /* Flag.Outdated */ : 0) | (this.flags & ~2 /* Flag.Outdated */); }\n    setHeight(height) {\n        if (this.height != height) {\n            if (Math.abs(this.height - height) > Epsilon)\n                heightChangeFlag = true;\n            this.height = height;\n        }\n    }\n    // Base case is to replace a leaf node, which simply builds a tree\n    // from the new nodes and returns that (HeightMapBranch and\n    // HeightMapGap override this to actually use from/to)\n    replace(_from, _to, nodes) {\n        return HeightMap.of(nodes);\n    }\n    // Again, these are base cases, and are overridden for branch and gap nodes.\n    decomposeLeft(_to, result) { result.push(this); }\n    decomposeRight(_from, result) { result.push(this); }\n    applyChanges(decorations, oldDoc, oracle, changes) {\n        let me = this, doc = oracle.doc;\n        for (let i = changes.length - 1; i >= 0; i--) {\n            let { fromA, toA, fromB, toB } = changes[i];\n            let start = me.lineAt(fromA, QueryType.ByPosNoHeight, oracle.setDoc(oldDoc), 0, 0);\n            let end = start.to >= toA ? start : me.lineAt(toA, QueryType.ByPosNoHeight, oracle, 0, 0);\n            toB += end.to - toA;\n            toA = end.to;\n            while (i > 0 && start.from <= changes[i - 1].toA) {\n                fromA = changes[i - 1].fromA;\n                fromB = changes[i - 1].fromB;\n                i--;\n                if (fromA < start.from)\n                    start = me.lineAt(fromA, QueryType.ByPosNoHeight, oracle, 0, 0);\n            }\n            fromB += start.from - fromA;\n            fromA = start.from;\n            let nodes = NodeBuilder.build(oracle.setDoc(doc), decorations, fromB, toB);\n            me = replace(me, me.replace(fromA, toA, nodes));\n        }\n        return me.updateHeight(oracle, 0);\n    }\n    static empty() { return new HeightMapText(0, 0, 0); }\n    // nodes uses null values to indicate the position of line breaks.\n    // There are never line breaks at the start or end of the array, or\n    // two line breaks next to each other, and the array isn't allowed\n    // to be empty (same restrictions as return value from the builder).\n    static of(nodes) {\n        if (nodes.length == 1)\n            return nodes[0];\n        let i = 0, j = nodes.length, before = 0, after = 0;\n        for (;;) {\n            if (i == j) {\n                if (before > after * 2) {\n                    let split = nodes[i - 1];\n                    if (split.break)\n                        nodes.splice(--i, 1, split.left, null, split.right);\n                    else\n                        nodes.splice(--i, 1, split.left, split.right);\n                    j += 1 + split.break;\n                    before -= split.size;\n                }\n                else if (after > before * 2) {\n                    let split = nodes[j];\n                    if (split.break)\n                        nodes.splice(j, 1, split.left, null, split.right);\n                    else\n                        nodes.splice(j, 1, split.left, split.right);\n                    j += 2 + split.break;\n                    after -= split.size;\n                }\n                else {\n                    break;\n                }\n            }\n            else if (before < after) {\n                let next = nodes[i++];\n                if (next)\n                    before += next.size;\n            }\n            else {\n                let next = nodes[--j];\n                if (next)\n                    after += next.size;\n            }\n        }\n        let brk = 0;\n        if (nodes[i - 1] == null) {\n            brk = 1;\n            i--;\n        }\n        else if (nodes[i] == null) {\n            brk = 1;\n            j++;\n        }\n        return new HeightMapBranch(HeightMap.of(nodes.slice(0, i)), brk, HeightMap.of(nodes.slice(j)));\n    }\n}\nfunction replace(old, val) {\n    if (old == val)\n        return old;\n    if (old.constructor != val.constructor)\n        heightChangeFlag = true;\n    return val;\n}\nHeightMap.prototype.size = 1;\nconst SpaceDeco = /*@__PURE__*/Decoration.replace({});\nclass HeightMapBlock extends HeightMap {\n    constructor(length, height, deco) {\n        super(length, height);\n        this.deco = deco;\n        this.spaceAbove = 0;\n    }\n    mainBlock(top, offset) {\n        return new BlockInfo(offset, this.length, top + this.spaceAbove, this.height - this.spaceAbove, this.deco || 0);\n    }\n    blockAt(height, _oracle, top, offset) {\n        return this.spaceAbove && height < top + this.spaceAbove ? new BlockInfo(offset, 0, top, this.spaceAbove, SpaceDeco)\n            : this.mainBlock(top, offset);\n    }\n    lineAt(_value, _type, oracle, top, offset) {\n        let main = this.mainBlock(top, offset);\n        return this.spaceAbove ? this.blockAt(0, oracle, top, offset).join(main) : main;\n    }\n    forEachLine(from, to, oracle, top, offset, f) {\n        if (from <= offset + this.length && to >= offset)\n            f(this.lineAt(0, QueryType.ByPos, oracle, top, offset));\n    }\n    setMeasuredHeight(measured) {\n        let next = measured.heights[measured.index++];\n        if (next < 0) {\n            this.spaceAbove = -next;\n            next = measured.heights[measured.index++];\n        }\n        else {\n            this.spaceAbove = 0;\n        }\n        this.setHeight(next);\n    }\n    updateHeight(oracle, offset = 0, _force = false, measured) {\n        if (measured && measured.from <= offset && measured.more)\n            this.setMeasuredHeight(measured);\n        this.outdated = false;\n        return this;\n    }\n    toString() { return `block(${this.length})`; }\n}\nclass HeightMapText extends HeightMapBlock {\n    constructor(length, height, above) {\n        super(length, height, null);\n        this.collapsed = 0; // Amount of collapsed content in the line\n        this.widgetHeight = 0; // Maximum inline widget height\n        this.breaks = 0; // Number of widget-introduced line breaks on the line\n        this.spaceAbove = above;\n    }\n    mainBlock(top, offset) {\n        return new BlockInfo(offset, this.length, top + this.spaceAbove, this.height - this.spaceAbove, this.breaks);\n    }\n    replace(_from, _to, nodes) {\n        let node = nodes[0];\n        if (nodes.length == 1 && (node instanceof HeightMapText || node instanceof HeightMapGap && (node.flags & 4 /* Flag.SingleLine */)) &&\n            Math.abs(this.length - node.length) < 10) {\n            if (node instanceof HeightMapGap)\n                node = new HeightMapText(node.length, this.height, this.spaceAbove);\n            else\n                node.height = this.height;\n            if (!this.outdated)\n                node.outdated = false;\n            return node;\n        }\n        else {\n            return HeightMap.of(nodes);\n        }\n    }\n    updateHeight(oracle, offset = 0, force = false, measured) {\n        if (measured && measured.from <= offset && measured.more) {\n            this.setMeasuredHeight(measured);\n        }\n        else if (force || this.outdated) {\n            this.spaceAbove = 0;\n            this.setHeight(Math.max(this.widgetHeight, oracle.heightForLine(this.length - this.collapsed)) +\n                this.breaks * oracle.lineHeight);\n        }\n        this.outdated = false;\n        return this;\n    }\n    toString() {\n        return `line(${this.length}${this.collapsed ? -this.collapsed : \"\"}${this.widgetHeight ? \":\" + this.widgetHeight : \"\"})`;\n    }\n}\nclass HeightMapGap extends HeightMap {\n    constructor(length) { super(length, 0); }\n    heightMetrics(oracle, offset) {\n        let firstLine = oracle.doc.lineAt(offset).number, lastLine = oracle.doc.lineAt(offset + this.length).number;\n        let lines = lastLine - firstLine + 1;\n        let perLine, perChar = 0;\n        if (oracle.lineWrapping) {\n            let totalPerLine = Math.min(this.height, oracle.lineHeight * lines);\n            perLine = totalPerLine / lines;\n            if (this.length > lines + 1)\n                perChar = (this.height - totalPerLine) / (this.length - lines - 1);\n        }\n        else {\n            perLine = this.height / lines;\n        }\n        return { firstLine, lastLine, perLine, perChar };\n    }\n    blockAt(height, oracle, top, offset) {\n        let { firstLine, lastLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n        if (oracle.lineWrapping) {\n            let guess = offset + (height < oracle.lineHeight ? 0\n                : Math.round(Math.max(0, Math.min(1, (height - top) / this.height)) * this.length));\n            let line = oracle.doc.lineAt(guess), lineHeight = perLine + line.length * perChar;\n            let lineTop = Math.max(top, height - lineHeight / 2);\n            return new BlockInfo(line.from, line.length, lineTop, lineHeight, 0);\n        }\n        else {\n            let line = Math.max(0, Math.min(lastLine - firstLine, Math.floor((height - top) / perLine)));\n            let { from, length } = oracle.doc.line(firstLine + line);\n            return new BlockInfo(from, length, top + perLine * line, perLine, 0);\n        }\n    }\n    lineAt(value, type, oracle, top, offset) {\n        if (type == QueryType.ByHeight)\n            return this.blockAt(value, oracle, top, offset);\n        if (type == QueryType.ByPosNoHeight) {\n            let { from, to } = oracle.doc.lineAt(value);\n            return new BlockInfo(from, to - from, 0, 0, 0);\n        }\n        let { firstLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n        let line = oracle.doc.lineAt(value), lineHeight = perLine + line.length * perChar;\n        let linesAbove = line.number - firstLine;\n        let lineTop = top + perLine * linesAbove + perChar * (line.from - offset - linesAbove);\n        return new BlockInfo(line.from, line.length, Math.max(top, Math.min(lineTop, top + this.height - lineHeight)), lineHeight, 0);\n    }\n    forEachLine(from, to, oracle, top, offset, f) {\n        from = Math.max(from, offset);\n        to = Math.min(to, offset + this.length);\n        let { firstLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n        for (let pos = from, lineTop = top; pos <= to;) {\n            let line = oracle.doc.lineAt(pos);\n            if (pos == from) {\n                let linesAbove = line.number - firstLine;\n                lineTop += perLine * linesAbove + perChar * (from - offset - linesAbove);\n            }\n            let lineHeight = perLine + perChar * line.length;\n            f(new BlockInfo(line.from, line.length, lineTop, lineHeight, 0));\n            lineTop += lineHeight;\n            pos = line.to + 1;\n        }\n    }\n    replace(from, to, nodes) {\n        let after = this.length - to;\n        if (after > 0) {\n            let last = nodes[nodes.length - 1];\n            if (last instanceof HeightMapGap)\n                nodes[nodes.length - 1] = new HeightMapGap(last.length + after);\n            else\n                nodes.push(null, new HeightMapGap(after - 1));\n        }\n        if (from > 0) {\n            let first = nodes[0];\n            if (first instanceof HeightMapGap)\n                nodes[0] = new HeightMapGap(from + first.length);\n            else\n                nodes.unshift(new HeightMapGap(from - 1), null);\n        }\n        return HeightMap.of(nodes);\n    }\n    decomposeLeft(to, result) {\n        result.push(new HeightMapGap(to - 1), null);\n    }\n    decomposeRight(from, result) {\n        result.push(null, new HeightMapGap(this.length - from - 1));\n    }\n    updateHeight(oracle, offset = 0, force = false, measured) {\n        let end = offset + this.length;\n        if (measured && measured.from <= offset + this.length && measured.more) {\n            // Fill in part of this gap with measured lines. We know there\n            // can't be widgets or collapsed ranges in those lines, because\n            // they would already have been added to the heightmap (gaps\n            // only contain plain text).\n            let nodes = [], pos = Math.max(offset, measured.from), singleHeight = -1;\n            if (measured.from > offset)\n                nodes.push(new HeightMapGap(measured.from - offset - 1).updateHeight(oracle, offset));\n            while (pos <= end && measured.more) {\n                let len = oracle.doc.lineAt(pos).length;\n                if (nodes.length)\n                    nodes.push(null);\n                let height = measured.heights[measured.index++], above = 0;\n                if (height < 0) {\n                    above = -height;\n                    height = measured.heights[measured.index++];\n                }\n                if (singleHeight == -1)\n                    singleHeight = height;\n                else if (Math.abs(height - singleHeight) >= Epsilon)\n                    singleHeight = -2;\n                let line = new HeightMapText(len, height, above);\n                line.outdated = false;\n                nodes.push(line);\n                pos += len + 1;\n            }\n            if (pos <= end)\n                nodes.push(null, new HeightMapGap(end - pos).updateHeight(oracle, pos));\n            let result = HeightMap.of(nodes);\n            if (singleHeight < 0 || Math.abs(result.height - this.height) >= Epsilon ||\n                Math.abs(singleHeight - this.heightMetrics(oracle, offset).perLine) >= Epsilon)\n                heightChangeFlag = true;\n            return replace(this, result);\n        }\n        else if (force || this.outdated) {\n            this.setHeight(oracle.heightForGap(offset, offset + this.length));\n            this.outdated = false;\n        }\n        return this;\n    }\n    toString() { return `gap(${this.length})`; }\n}\nclass HeightMapBranch extends HeightMap {\n    constructor(left, brk, right) {\n        super(left.length + brk + right.length, left.height + right.height, brk | (left.outdated || right.outdated ? 2 /* Flag.Outdated */ : 0));\n        this.left = left;\n        this.right = right;\n        this.size = left.size + right.size;\n    }\n    get break() { return this.flags & 1 /* Flag.Break */; }\n    blockAt(height, oracle, top, offset) {\n        let mid = top + this.left.height;\n        return height < mid ? this.left.blockAt(height, oracle, top, offset)\n            : this.right.blockAt(height, oracle, mid, offset + this.left.length + this.break);\n    }\n    lineAt(value, type, oracle, top, offset) {\n        let rightTop = top + this.left.height, rightOffset = offset + this.left.length + this.break;\n        let left = type == QueryType.ByHeight ? value < rightTop : value < rightOffset;\n        let base = left ? this.left.lineAt(value, type, oracle, top, offset)\n            : this.right.lineAt(value, type, oracle, rightTop, rightOffset);\n        if (this.break || (left ? base.to < rightOffset : base.from > rightOffset))\n            return base;\n        let subQuery = type == QueryType.ByPosNoHeight ? QueryType.ByPosNoHeight : QueryType.ByPos;\n        if (left)\n            return base.join(this.right.lineAt(rightOffset, subQuery, oracle, rightTop, rightOffset));\n        else\n            return this.left.lineAt(rightOffset, subQuery, oracle, top, offset).join(base);\n    }\n    forEachLine(from, to, oracle, top, offset, f) {\n        let rightTop = top + this.left.height, rightOffset = offset + this.left.length + this.break;\n        if (this.break) {\n            if (from < rightOffset)\n                this.left.forEachLine(from, to, oracle, top, offset, f);\n            if (to >= rightOffset)\n                this.right.forEachLine(from, to, oracle, rightTop, rightOffset, f);\n        }\n        else {\n            let mid = this.lineAt(rightOffset, QueryType.ByPos, oracle, top, offset);\n            if (from < mid.from)\n                this.left.forEachLine(from, mid.from - 1, oracle, top, offset, f);\n            if (mid.to >= from && mid.from <= to)\n                f(mid);\n            if (to > mid.to)\n                this.right.forEachLine(mid.to + 1, to, oracle, rightTop, rightOffset, f);\n        }\n    }\n    replace(from, to, nodes) {\n        let rightStart = this.left.length + this.break;\n        if (to < rightStart)\n            return this.balanced(this.left.replace(from, to, nodes), this.right);\n        if (from > this.left.length)\n            return this.balanced(this.left, this.right.replace(from - rightStart, to - rightStart, nodes));\n        let result = [];\n        if (from > 0)\n            this.decomposeLeft(from, result);\n        let left = result.length;\n        for (let node of nodes)\n            result.push(node);\n        if (from > 0)\n            mergeGaps(result, left - 1);\n        if (to < this.length) {\n            let right = result.length;\n            this.decomposeRight(to, result);\n            mergeGaps(result, right);\n        }\n        return HeightMap.of(result);\n    }\n    decomposeLeft(to, result) {\n        let left = this.left.length;\n        if (to <= left)\n            return this.left.decomposeLeft(to, result);\n        result.push(this.left);\n        if (this.break) {\n            left++;\n            if (to >= left)\n                result.push(null);\n        }\n        if (to > left)\n            this.right.decomposeLeft(to - left, result);\n    }\n    decomposeRight(from, result) {\n        let left = this.left.length, right = left + this.break;\n        if (from >= right)\n            return this.right.decomposeRight(from - right, result);\n        if (from < left)\n            this.left.decomposeRight(from, result);\n        if (this.break && from < right)\n            result.push(null);\n        result.push(this.right);\n    }\n    balanced(left, right) {\n        if (left.size > 2 * right.size || right.size > 2 * left.size)\n            return HeightMap.of(this.break ? [left, null, right] : [left, right]);\n        this.left = replace(this.left, left);\n        this.right = replace(this.right, right);\n        this.setHeight(left.height + right.height);\n        this.outdated = left.outdated || right.outdated;\n        this.size = left.size + right.size;\n        this.length = left.length + this.break + right.length;\n        return this;\n    }\n    updateHeight(oracle, offset = 0, force = false, measured) {\n        let { left, right } = this, rightStart = offset + left.length + this.break, rebalance = null;\n        if (measured && measured.from <= offset + left.length && measured.more)\n            rebalance = left = left.updateHeight(oracle, offset, force, measured);\n        else\n            left.updateHeight(oracle, offset, force);\n        if (measured && measured.from <= rightStart + right.length && measured.more)\n            rebalance = right = right.updateHeight(oracle, rightStart, force, measured);\n        else\n            right.updateHeight(oracle, rightStart, force);\n        if (rebalance)\n            return this.balanced(left, right);\n        this.height = this.left.height + this.right.height;\n        this.outdated = false;\n        return this;\n    }\n    toString() { return this.left + (this.break ? \" \" : \"-\") + this.right; }\n}\nfunction mergeGaps(nodes, around) {\n    let before, after;\n    if (nodes[around] == null &&\n        (before = nodes[around - 1]) instanceof HeightMapGap &&\n        (after = nodes[around + 1]) instanceof HeightMapGap)\n        nodes.splice(around - 1, 3, new HeightMapGap(before.length + 1 + after.length));\n}\nconst relevantWidgetHeight = 5;\nclass NodeBuilder {\n    constructor(pos, oracle) {\n        this.pos = pos;\n        this.oracle = oracle;\n        this.nodes = [];\n        this.lineStart = -1;\n        this.lineEnd = -1;\n        this.covering = null;\n        this.writtenTo = pos;\n    }\n    get isCovered() {\n        return this.covering && this.nodes[this.nodes.length - 1] == this.covering;\n    }\n    span(_from, to) {\n        if (this.lineStart > -1) {\n            let end = Math.min(to, this.lineEnd), last = this.nodes[this.nodes.length - 1];\n            if (last instanceof HeightMapText)\n                last.length += end - this.pos;\n            else if (end > this.pos || !this.isCovered)\n                this.nodes.push(new HeightMapText(end - this.pos, -1, 0));\n            this.writtenTo = end;\n            if (to > end) {\n                this.nodes.push(null);\n                this.writtenTo++;\n                this.lineStart = -1;\n            }\n        }\n        this.pos = to;\n    }\n    point(from, to, deco) {\n        if (from < to || deco.heightRelevant) {\n            let height = deco.widget ? deco.widget.estimatedHeight : 0;\n            let breaks = deco.widget ? deco.widget.lineBreaks : 0;\n            if (height < 0)\n                height = this.oracle.lineHeight;\n            let len = to - from;\n            if (deco.block) {\n                this.addBlock(new HeightMapBlock(len, height, deco));\n            }\n            else if (len || breaks || height >= relevantWidgetHeight) {\n                this.addLineDeco(height, breaks, len);\n            }\n        }\n        else if (to > from) {\n            this.span(from, to);\n        }\n        if (this.lineEnd > -1 && this.lineEnd < this.pos)\n            this.lineEnd = this.oracle.doc.lineAt(this.pos).to;\n    }\n    enterLine() {\n        if (this.lineStart > -1)\n            return;\n        let { from, to } = this.oracle.doc.lineAt(this.pos);\n        this.lineStart = from;\n        this.lineEnd = to;\n        if (this.writtenTo < from) {\n            if (this.writtenTo < from - 1 || this.nodes[this.nodes.length - 1] == null)\n                this.nodes.push(this.blankContent(this.writtenTo, from - 1));\n            this.nodes.push(null);\n        }\n        if (this.pos > from)\n            this.nodes.push(new HeightMapText(this.pos - from, -1, 0));\n        this.writtenTo = this.pos;\n    }\n    blankContent(from, to) {\n        let gap = new HeightMapGap(to - from);\n        if (this.oracle.doc.lineAt(from).to == to)\n            gap.flags |= 4 /* Flag.SingleLine */;\n        return gap;\n    }\n    ensureLine() {\n        this.enterLine();\n        let last = this.nodes.length ? this.nodes[this.nodes.length - 1] : null;\n        if (last instanceof HeightMapText)\n            return last;\n        let line = new HeightMapText(0, -1, 0);\n        this.nodes.push(line);\n        return line;\n    }\n    addBlock(block) {\n        this.enterLine();\n        let deco = block.deco;\n        if (deco && deco.startSide > 0 && !this.isCovered)\n            this.ensureLine();\n        this.nodes.push(block);\n        this.writtenTo = this.pos = this.pos + block.length;\n        if (deco && deco.endSide > 0)\n            this.covering = block;\n    }\n    addLineDeco(height, breaks, length) {\n        let line = this.ensureLine();\n        line.length += length;\n        line.collapsed += length;\n        line.widgetHeight = Math.max(line.widgetHeight, height);\n        line.breaks += breaks;\n        this.writtenTo = this.pos = this.pos + length;\n    }\n    finish(from) {\n        let last = this.nodes.length == 0 ? null : this.nodes[this.nodes.length - 1];\n        if (this.lineStart > -1 && !(last instanceof HeightMapText) && !this.isCovered)\n            this.nodes.push(new HeightMapText(0, -1, 0));\n        else if (this.writtenTo < this.pos || last == null)\n            this.nodes.push(this.blankContent(this.writtenTo, this.pos));\n        let pos = from;\n        for (let node of this.nodes) {\n            if (node instanceof HeightMapText)\n                node.updateHeight(this.oracle, pos);\n            pos += node ? node.length : 1;\n        }\n        return this.nodes;\n    }\n    // Always called with a region that on both sides either stretches\n    // to a line break or the end of the document.\n    // The returned array uses null to indicate line breaks, but never\n    // starts or ends in a line break, or has multiple line breaks next\n    // to each other.\n    static build(oracle, decorations, from, to) {\n        let builder = new NodeBuilder(from, oracle);\n        RangeSet.spans(decorations, from, to, builder, 0);\n        return builder.finish(from);\n    }\n}\nfunction heightRelevantDecoChanges(a, b, diff) {\n    let comp = new DecorationComparator;\n    RangeSet.compare(a, b, diff, comp, 0);\n    return comp.changes;\n}\nclass DecorationComparator {\n    constructor() {\n        this.changes = [];\n    }\n    compareRange() { }\n    comparePoint(from, to, a, b) {\n        if (from < to || a && a.heightRelevant || b && b.heightRelevant)\n            addRange(from, to, this.changes, 5);\n    }\n}\n\nfunction visiblePixelRange(dom, paddingTop) {\n    let rect = dom.getBoundingClientRect();\n    let doc = dom.ownerDocument, win = doc.defaultView || window;\n    let left = Math.max(0, rect.left), right = Math.min(win.innerWidth, rect.right);\n    let top = Math.max(0, rect.top), bottom = Math.min(win.innerHeight, rect.bottom);\n    for (let parent = dom.parentNode; parent && parent != doc.body;) {\n        if (parent.nodeType == 1) {\n            let elt = parent;\n            let style = window.getComputedStyle(elt);\n            if ((elt.scrollHeight > elt.clientHeight || elt.scrollWidth > elt.clientWidth) &&\n                style.overflow != \"visible\") {\n                let parentRect = elt.getBoundingClientRect();\n                left = Math.max(left, parentRect.left);\n                right = Math.min(right, parentRect.right);\n                top = Math.max(top, parentRect.top);\n                bottom = Math.min(parent == dom.parentNode ? win.innerHeight : bottom, parentRect.bottom);\n            }\n            parent = style.position == \"absolute\" || style.position == \"fixed\" ? elt.offsetParent : elt.parentNode;\n        }\n        else if (parent.nodeType == 11) { // Shadow root\n            parent = parent.host;\n        }\n        else {\n            break;\n        }\n    }\n    return { left: left - rect.left, right: Math.max(left, right) - rect.left,\n        top: top - (rect.top + paddingTop), bottom: Math.max(top, bottom) - (rect.top + paddingTop) };\n}\nfunction inWindow(elt) {\n    let rect = elt.getBoundingClientRect(), win = elt.ownerDocument.defaultView || window;\n    return rect.left < win.innerWidth && rect.right > 0 &&\n        rect.top < win.innerHeight && rect.bottom > 0;\n}\nfunction fullPixelRange(dom, paddingTop) {\n    let rect = dom.getBoundingClientRect();\n    return { left: 0, right: rect.right - rect.left,\n        top: paddingTop, bottom: rect.bottom - (rect.top + paddingTop) };\n}\n// Line gaps are placeholder widgets used to hide pieces of overlong\n// lines within the viewport, as a kludge to keep the editor\n// responsive when a ridiculously long line is loaded into it.\nclass LineGap {\n    constructor(from, to, size, displaySize) {\n        this.from = from;\n        this.to = to;\n        this.size = size;\n        this.displaySize = displaySize;\n    }\n    static same(a, b) {\n        if (a.length != b.length)\n            return false;\n        for (let i = 0; i < a.length; i++) {\n            let gA = a[i], gB = b[i];\n            if (gA.from != gB.from || gA.to != gB.to || gA.size != gB.size)\n                return false;\n        }\n        return true;\n    }\n    draw(viewState, wrapping) {\n        return Decoration.replace({\n            widget: new LineGapWidget(this.displaySize * (wrapping ? viewState.scaleY : viewState.scaleX), wrapping)\n        }).range(this.from, this.to);\n    }\n}\nclass LineGapWidget extends WidgetType {\n    constructor(size, vertical) {\n        super();\n        this.size = size;\n        this.vertical = vertical;\n    }\n    eq(other) { return other.size == this.size && other.vertical == this.vertical; }\n    toDOM() {\n        let elt = document.createElement(\"div\");\n        if (this.vertical) {\n            elt.style.height = this.size + \"px\";\n        }\n        else {\n            elt.style.width = this.size + \"px\";\n            elt.style.height = \"2px\";\n            elt.style.display = \"inline-block\";\n        }\n        return elt;\n    }\n    get estimatedHeight() { return this.vertical ? this.size : -1; }\n}\nclass ViewState {\n    constructor(view, state) {\n        this.view = view;\n        this.state = state;\n        // These are contentDOM-local coordinates\n        this.pixelViewport = { left: 0, right: window.innerWidth, top: 0, bottom: 0 };\n        this.inView = true;\n        this.paddingTop = 0; // Padding above the document, scaled\n        this.paddingBottom = 0; // Padding below the document, scaled\n        this.contentDOMWidth = 0; // contentDOM.getBoundingClientRect().width\n        this.contentDOMHeight = 0; // contentDOM.getBoundingClientRect().height\n        this.editorHeight = 0; // scrollDOM.clientHeight, unscaled\n        this.editorWidth = 0; // scrollDOM.clientWidth, unscaled\n        // The CSS-transformation scale of the editor (transformed size /\n        // concrete size)\n        this.scaleX = 1;\n        this.scaleY = 1;\n        // Last seen vertical offset of the element at the top of the scroll\n        // container, or top of the window if there's no wrapping scroller\n        this.scrollOffset = 0;\n        this.scrolledToBottom = false;\n        // The vertical position (document-relative) to which to anchor the\n        // scroll position. -1 means anchor to the end of the document.\n        this.scrollAnchorPos = 0;\n        // The height at the anchor position. Set by the DOM update phase.\n        // -1 means no height available.\n        this.scrollAnchorHeight = -1;\n        // See VP.MaxDOMHeight\n        this.scaler = IdScaler;\n        this.scrollTarget = null;\n        // Briefly set to true when printing, to disable viewport limiting\n        this.printing = false;\n        // Flag set when editor content was redrawn, so that the next\n        // measure stage knows it must read DOM layout\n        this.mustMeasureContent = true;\n        this.defaultTextDirection = Direction.LTR;\n        this.visibleRanges = [];\n        // Cursor 'assoc' is only significant when the cursor is on a line\n        // wrap point, where it must stick to the character that it is\n        // associated with. Since browsers don't provide a reasonable\n        // interface to set or query this, when a selection is set that\n        // might cause this to be significant, this flag is set. The next\n        // measure phase will check whether the cursor is on a line-wrapping\n        // boundary and, if so, reset it to make sure it is positioned in\n        // the right place.\n        this.mustEnforceCursorAssoc = false;\n        let guessWrapping = state.facet(contentAttributes).some(v => typeof v != \"function\" && v.class == \"cm-lineWrapping\");\n        this.heightOracle = new HeightOracle(guessWrapping);\n        this.stateDeco = staticDeco(state);\n        this.heightMap = HeightMap.empty().applyChanges(this.stateDeco, Text.empty, this.heightOracle.setDoc(state.doc), [new ChangedRange(0, 0, 0, state.doc.length)]);\n        for (let i = 0; i < 2; i++) {\n            this.viewport = this.getViewport(0, null);\n            if (!this.updateForViewport())\n                break;\n        }\n        this.updateViewportLines();\n        this.lineGaps = this.ensureLineGaps([]);\n        this.lineGapDeco = Decoration.set(this.lineGaps.map(gap => gap.draw(this, false)));\n        this.scrollParent = view.scrollDOM;\n        this.computeVisibleRanges();\n    }\n    updateForViewport() {\n        let viewports = [this.viewport], { main } = this.state.selection;\n        for (let i = 0; i <= 1; i++) {\n            let pos = i ? main.head : main.anchor;\n            if (!viewports.some(({ from, to }) => pos >= from && pos <= to)) {\n                let { from, to } = this.lineBlockAt(pos);\n                viewports.push(new Viewport(from, to));\n            }\n        }\n        this.viewports = viewports.sort((a, b) => a.from - b.from);\n        return this.updateScaler();\n    }\n    updateScaler() {\n        let scaler = this.scaler;\n        this.scaler = this.heightMap.height <= 7000000 /* VP.MaxDOMHeight */ ? IdScaler :\n            new BigScaler(this.heightOracle, this.heightMap, this.viewports);\n        return scaler.eq(this.scaler) ? 0 : 2 /* UpdateFlag.Height */;\n    }\n    updateViewportLines() {\n        this.viewportLines = [];\n        this.heightMap.forEachLine(this.viewport.from, this.viewport.to, this.heightOracle.setDoc(this.state.doc), 0, 0, block => {\n            this.viewportLines.push(scaleBlock(block, this.scaler));\n        });\n    }\n    update(update, scrollTarget = null) {\n        this.state = update.state;\n        let prevDeco = this.stateDeco;\n        this.stateDeco = staticDeco(this.state);\n        let contentChanges = update.changedRanges;\n        let heightChanges = ChangedRange.extendWithRanges(contentChanges, heightRelevantDecoChanges(prevDeco, this.stateDeco, update ? update.changes : ChangeSet.empty(this.state.doc.length)));\n        let prevHeight = this.heightMap.height;\n        let scrollAnchor = this.scrolledToBottom ? null : this.scrollAnchorAt(this.scrollOffset);\n        clearHeightChangeFlag();\n        this.heightMap = this.heightMap.applyChanges(this.stateDeco, update.startState.doc, this.heightOracle.setDoc(this.state.doc), heightChanges);\n        if (this.heightMap.height != prevHeight || heightChangeFlag)\n            update.flags |= 2 /* UpdateFlag.Height */;\n        if (scrollAnchor) {\n            this.scrollAnchorPos = update.changes.mapPos(scrollAnchor.from, -1);\n            this.scrollAnchorHeight = scrollAnchor.top;\n        }\n        else {\n            this.scrollAnchorPos = -1;\n            this.scrollAnchorHeight = prevHeight;\n        }\n        let viewport = heightChanges.length ? this.mapViewport(this.viewport, update.changes) : this.viewport;\n        if (scrollTarget && (scrollTarget.range.head < viewport.from || scrollTarget.range.head > viewport.to) ||\n            !this.viewportIsAppropriate(viewport))\n            viewport = this.getViewport(0, scrollTarget);\n        let viewportChange = viewport.from != this.viewport.from || viewport.to != this.viewport.to;\n        this.viewport = viewport;\n        update.flags |= this.updateForViewport();\n        if (viewportChange || !update.changes.empty || (update.flags & 2 /* UpdateFlag.Height */))\n            this.updateViewportLines();\n        if (this.lineGaps.length || this.viewport.to - this.viewport.from > (2000 /* LG.Margin */ << 1))\n            this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps, update.changes)));\n        update.flags |= this.computeVisibleRanges(update.changes);\n        if (scrollTarget)\n            this.scrollTarget = scrollTarget;\n        if (!this.mustEnforceCursorAssoc && (update.selectionSet || update.focusChanged) && update.view.lineWrapping &&\n            update.state.selection.main.empty && update.state.selection.main.assoc &&\n            !update.state.facet(nativeSelectionHidden))\n            this.mustEnforceCursorAssoc = true;\n    }\n    measure() {\n        let { view } = this, dom = view.contentDOM, style = window.getComputedStyle(dom);\n        let oracle = this.heightOracle;\n        let whiteSpace = style.whiteSpace;\n        this.defaultTextDirection = style.direction == \"rtl\" ? Direction.RTL : Direction.LTR;\n        let refresh = this.heightOracle.mustRefreshForWrapping(whiteSpace) || this.mustMeasureContent === \"refresh\";\n        let domRect = dom.getBoundingClientRect();\n        let measureContent = refresh || this.mustMeasureContent || this.contentDOMHeight != domRect.height;\n        this.contentDOMHeight = domRect.height;\n        this.mustMeasureContent = false;\n        let result = 0, bias = 0;\n        if (domRect.width && domRect.height) {\n            let { scaleX, scaleY } = getScale(dom, domRect);\n            if (scaleX > .005 && Math.abs(this.scaleX - scaleX) > .005 ||\n                scaleY > .005 && Math.abs(this.scaleY - scaleY) > .005) {\n                this.scaleX = scaleX;\n                this.scaleY = scaleY;\n                result |= 16 /* UpdateFlag.Geometry */;\n                refresh = measureContent = true;\n            }\n        }\n        // Vertical padding\n        let paddingTop = (parseInt(style.paddingTop) || 0) * this.scaleY;\n        let paddingBottom = (parseInt(style.paddingBottom) || 0) * this.scaleY;\n        if (this.paddingTop != paddingTop || this.paddingBottom != paddingBottom) {\n            this.paddingTop = paddingTop;\n            this.paddingBottom = paddingBottom;\n            result |= 16 /* UpdateFlag.Geometry */ | 2 /* UpdateFlag.Height */;\n        }\n        if (this.editorWidth != view.scrollDOM.clientWidth) {\n            if (oracle.lineWrapping)\n                measureContent = true;\n            this.editorWidth = view.scrollDOM.clientWidth;\n            result |= 16 /* UpdateFlag.Geometry */;\n        }\n        let scrollParent = scrollableParents(this.view.contentDOM, false).y;\n        if (scrollParent != this.scrollParent) {\n            this.scrollParent = scrollParent;\n            this.scrollAnchorHeight = -1;\n            this.scrollOffset = 0;\n        }\n        let scrollOffset = this.getScrollOffset();\n        if (this.scrollOffset != scrollOffset) {\n            this.scrollAnchorHeight = -1;\n            this.scrollOffset = scrollOffset;\n        }\n        this.scrolledToBottom = isScrolledToBottom(this.scrollParent || view.win);\n        // Pixel viewport\n        let pixelViewport = (this.printing ? fullPixelRange : visiblePixelRange)(dom, this.paddingTop);\n        let dTop = pixelViewport.top - this.pixelViewport.top, dBottom = pixelViewport.bottom - this.pixelViewport.bottom;\n        this.pixelViewport = pixelViewport;\n        let inView = this.pixelViewport.bottom > this.pixelViewport.top && this.pixelViewport.right > this.pixelViewport.left;\n        if (inView != this.inView) {\n            this.inView = inView;\n            if (inView)\n                measureContent = true;\n        }\n        if (!this.inView && !this.scrollTarget && !inWindow(view.dom))\n            return 0;\n        let contentWidth = domRect.width;\n        if (this.contentDOMWidth != contentWidth || this.editorHeight != view.scrollDOM.clientHeight) {\n            this.contentDOMWidth = domRect.width;\n            this.editorHeight = view.scrollDOM.clientHeight;\n            result |= 16 /* UpdateFlag.Geometry */;\n        }\n        if (measureContent) {\n            let lineHeights = view.docView.measureVisibleLineHeights(this.viewport);\n            if (oracle.mustRefreshForHeights(lineHeights))\n                refresh = true;\n            if (refresh || oracle.lineWrapping && Math.abs(contentWidth - this.contentDOMWidth) > oracle.charWidth) {\n                let { lineHeight, charWidth, textHeight } = view.docView.measureTextSize();\n                refresh = lineHeight > 0 && oracle.refresh(whiteSpace, lineHeight, charWidth, textHeight, Math.max(5, contentWidth / charWidth), lineHeights);\n                if (refresh) {\n                    view.docView.minWidth = 0;\n                    result |= 16 /* UpdateFlag.Geometry */;\n                }\n            }\n            if (dTop > 0 && dBottom > 0)\n                bias = Math.max(dTop, dBottom);\n            else if (dTop < 0 && dBottom < 0)\n                bias = Math.min(dTop, dBottom);\n            clearHeightChangeFlag();\n            for (let vp of this.viewports) {\n                let heights = vp.from == this.viewport.from ? lineHeights : view.docView.measureVisibleLineHeights(vp);\n                this.heightMap = (refresh ? HeightMap.empty().applyChanges(this.stateDeco, Text.empty, this.heightOracle, [new ChangedRange(0, 0, 0, view.state.doc.length)]) : this.heightMap).updateHeight(oracle, 0, refresh, new MeasuredHeights(vp.from, heights));\n            }\n            if (heightChangeFlag)\n                result |= 2 /* UpdateFlag.Height */;\n        }\n        let viewportChange = !this.viewportIsAppropriate(this.viewport, bias) ||\n            this.scrollTarget && (this.scrollTarget.range.head < this.viewport.from ||\n                this.scrollTarget.range.head > this.viewport.to);\n        if (viewportChange) {\n            if (result & 2 /* UpdateFlag.Height */)\n                result |= this.updateScaler();\n            this.viewport = this.getViewport(bias, this.scrollTarget);\n            result |= this.updateForViewport();\n        }\n        if ((result & 2 /* UpdateFlag.Height */) || viewportChange)\n            this.updateViewportLines();\n        if (this.lineGaps.length || this.viewport.to - this.viewport.from > (2000 /* LG.Margin */ << 1))\n            this.updateLineGaps(this.ensureLineGaps(refresh ? [] : this.lineGaps, view));\n        result |= this.computeVisibleRanges();\n        if (this.mustEnforceCursorAssoc) {\n            this.mustEnforceCursorAssoc = false;\n            // This is done in the read stage, because moving the selection\n            // to a line end is going to trigger a layout anyway, so it\n            // can't be a pure write. It should be rare that it does any\n            // writing.\n            view.docView.enforceCursorAssoc();\n        }\n        return result;\n    }\n    get visibleTop() { return this.scaler.fromDOM(this.pixelViewport.top); }\n    get visibleBottom() { return this.scaler.fromDOM(this.pixelViewport.bottom); }\n    getViewport(bias, scrollTarget) {\n        // This will divide VP.Margin between the top and the\n        // bottom, depending on the bias (the change in viewport position\n        // since the last update). It'll hold a number between 0 and 1\n        let marginTop = 0.5 - Math.max(-0.5, Math.min(0.5, bias / 1000 /* VP.Margin */ / 2));\n        let map = this.heightMap, oracle = this.heightOracle;\n        let { visibleTop, visibleBottom } = this;\n        let viewport = new Viewport(map.lineAt(visibleTop - marginTop * 1000 /* VP.Margin */, QueryType.ByHeight, oracle, 0, 0).from, map.lineAt(visibleBottom + (1 - marginTop) * 1000 /* VP.Margin */, QueryType.ByHeight, oracle, 0, 0).to);\n        // If scrollTarget is given, make sure the viewport includes that position\n        if (scrollTarget) {\n            let { head } = scrollTarget.range;\n            if (head < viewport.from || head > viewport.to) {\n                let viewHeight = Math.min(this.editorHeight, this.pixelViewport.bottom - this.pixelViewport.top);\n                let block = map.lineAt(head, QueryType.ByPos, oracle, 0, 0), topPos;\n                if (scrollTarget.y == \"center\")\n                    topPos = (block.top + block.bottom) / 2 - viewHeight / 2;\n                else if (scrollTarget.y == \"start\" || scrollTarget.y == \"nearest\" && head < viewport.from)\n                    topPos = block.top;\n                else\n                    topPos = block.bottom - viewHeight;\n                viewport = new Viewport(map.lineAt(topPos - 1000 /* VP.Margin */ / 2, QueryType.ByHeight, oracle, 0, 0).from, map.lineAt(topPos + viewHeight + 1000 /* VP.Margin */ / 2, QueryType.ByHeight, oracle, 0, 0).to);\n            }\n        }\n        return viewport;\n    }\n    mapViewport(viewport, changes) {\n        let from = changes.mapPos(viewport.from, -1), to = changes.mapPos(viewport.to, 1);\n        return new Viewport(this.heightMap.lineAt(from, QueryType.ByPos, this.heightOracle, 0, 0).from, this.heightMap.lineAt(to, QueryType.ByPos, this.heightOracle, 0, 0).to);\n    }\n    // Checks if a given viewport covers the visible part of the\n    // document and not too much beyond that.\n    viewportIsAppropriate({ from, to }, bias = 0) {\n        if (!this.inView)\n            return true;\n        let { top } = this.heightMap.lineAt(from, QueryType.ByPos, this.heightOracle, 0, 0);\n        let { bottom } = this.heightMap.lineAt(to, QueryType.ByPos, this.heightOracle, 0, 0);\n        let { visibleTop, visibleBottom } = this;\n        return (from == 0 || top <= visibleTop - Math.max(10 /* VP.MinCoverMargin */, Math.min(-bias, 250 /* VP.MaxCoverMargin */))) &&\n            (to == this.state.doc.length ||\n                bottom >= visibleBottom + Math.max(10 /* VP.MinCoverMargin */, Math.min(bias, 250 /* VP.MaxCoverMargin */))) &&\n            (top > visibleTop - 2 * 1000 /* VP.Margin */ && bottom < visibleBottom + 2 * 1000 /* VP.Margin */);\n    }\n    mapLineGaps(gaps, changes) {\n        if (!gaps.length || changes.empty)\n            return gaps;\n        let mapped = [];\n        for (let gap of gaps)\n            if (!changes.touchesRange(gap.from, gap.to))\n                mapped.push(new LineGap(changes.mapPos(gap.from), changes.mapPos(gap.to), gap.size, gap.displaySize));\n        return mapped;\n    }\n    // Computes positions in the viewport where the start or end of a\n    // line should be hidden, trying to reuse existing line gaps when\n    // appropriate to avoid unneccesary redraws.\n    // Uses crude character-counting for the positioning and sizing,\n    // since actual DOM coordinates aren't always available and\n    // predictable. Relies on generous margins (see LG.Margin) to hide\n    // the artifacts this might produce from the user.\n    ensureLineGaps(current, mayMeasure) {\n        let wrapping = this.heightOracle.lineWrapping;\n        let margin = wrapping ? 10000 /* LG.MarginWrap */ : 2000 /* LG.Margin */, halfMargin = margin >> 1, doubleMargin = margin << 1;\n        // The non-wrapping logic won't work at all in predominantly right-to-left text.\n        if (this.defaultTextDirection != Direction.LTR && !wrapping)\n            return [];\n        let gaps = [];\n        let addGap = (from, to, line, structure) => {\n            if (to - from < halfMargin)\n                return;\n            let sel = this.state.selection.main, avoid = [sel.from];\n            if (!sel.empty)\n                avoid.push(sel.to);\n            for (let pos of avoid) {\n                if (pos > from && pos < to) {\n                    addGap(from, pos - 10 /* LG.SelectionMargin */, line, structure);\n                    addGap(pos + 10 /* LG.SelectionMargin */, to, line, structure);\n                    return;\n                }\n            }\n            let gap = find(current, gap => gap.from >= line.from && gap.to <= line.to &&\n                Math.abs(gap.from - from) < halfMargin && Math.abs(gap.to - to) < halfMargin &&\n                !avoid.some(pos => gap.from < pos && gap.to > pos));\n            if (!gap) {\n                // When scrolling down, snap gap ends to line starts to avoid shifts in wrapping\n                if (to < line.to && mayMeasure && wrapping &&\n                    mayMeasure.visibleRanges.some(r => r.from <= to && r.to >= to)) {\n                    let lineStart = mayMeasure.moveToLineBoundary(EditorSelection.cursor(to), false, true).head;\n                    if (lineStart > from)\n                        to = lineStart;\n                }\n                let size = this.gapSize(line, from, to, structure);\n                let displaySize = wrapping || size < 2000000 /* VP.MaxHorizGap */ ? size : 2000000 /* VP.MaxHorizGap */;\n                gap = new LineGap(from, to, size, displaySize);\n            }\n            gaps.push(gap);\n        };\n        let checkLine = (line) => {\n            if (line.length < doubleMargin || line.type != BlockType.Text)\n                return;\n            let structure = lineStructure(line.from, line.to, this.stateDeco);\n            if (structure.total < doubleMargin)\n                return;\n            let target = this.scrollTarget ? this.scrollTarget.range.head : null;\n            let viewFrom, viewTo;\n            if (wrapping) {\n                let marginHeight = (margin / this.heightOracle.lineLength) * this.heightOracle.lineHeight;\n                let top, bot;\n                if (target != null) {\n                    let targetFrac = findFraction(structure, target);\n                    let spaceFrac = ((this.visibleBottom - this.visibleTop) / 2 + marginHeight) / line.height;\n                    top = targetFrac - spaceFrac;\n                    bot = targetFrac + spaceFrac;\n                }\n                else {\n                    top = (this.visibleTop - line.top - marginHeight) / line.height;\n                    bot = (this.visibleBottom - line.top + marginHeight) / line.height;\n                }\n                viewFrom = findPosition(structure, top);\n                viewTo = findPosition(structure, bot);\n            }\n            else {\n                let totalWidth = structure.total * this.heightOracle.charWidth;\n                let marginWidth = margin * this.heightOracle.charWidth;\n                let horizOffset = 0;\n                if (totalWidth > 2000000 /* VP.MaxHorizGap */)\n                    for (let old of current) {\n                        if (old.from >= line.from && old.from < line.to && old.size != old.displaySize &&\n                            old.from * this.heightOracle.charWidth + horizOffset < this.pixelViewport.left)\n                            horizOffset = old.size - old.displaySize;\n                    }\n                let pxLeft = this.pixelViewport.left + horizOffset, pxRight = this.pixelViewport.right + horizOffset;\n                let left, right;\n                if (target != null) {\n                    let targetFrac = findFraction(structure, target);\n                    let spaceFrac = ((pxRight - pxLeft) / 2 + marginWidth) / totalWidth;\n                    left = targetFrac - spaceFrac;\n                    right = targetFrac + spaceFrac;\n                }\n                else {\n                    left = (pxLeft - marginWidth) / totalWidth;\n                    right = (pxRight + marginWidth) / totalWidth;\n                }\n                viewFrom = findPosition(structure, left);\n                viewTo = findPosition(structure, right);\n            }\n            if (viewFrom > line.from)\n                addGap(line.from, viewFrom, line, structure);\n            if (viewTo < line.to)\n                addGap(viewTo, line.to, line, structure);\n        };\n        for (let line of this.viewportLines) {\n            if (Array.isArray(line.type))\n                line.type.forEach(checkLine);\n            else\n                checkLine(line);\n        }\n        return gaps;\n    }\n    gapSize(line, from, to, structure) {\n        let fraction = findFraction(structure, to) - findFraction(structure, from);\n        if (this.heightOracle.lineWrapping) {\n            return line.height * fraction;\n        }\n        else {\n            return structure.total * this.heightOracle.charWidth * fraction;\n        }\n    }\n    updateLineGaps(gaps) {\n        if (!LineGap.same(gaps, this.lineGaps)) {\n            this.lineGaps = gaps;\n            this.lineGapDeco = Decoration.set(gaps.map(gap => gap.draw(this, this.heightOracle.lineWrapping)));\n        }\n    }\n    computeVisibleRanges(changes) {\n        let deco = this.stateDeco;\n        if (this.lineGaps.length)\n            deco = deco.concat(this.lineGapDeco);\n        let ranges = [];\n        RangeSet.spans(deco, this.viewport.from, this.viewport.to, {\n            span(from, to) { ranges.push({ from, to }); },\n            point() { }\n        }, 20);\n        let changed = 0;\n        if (ranges.length != this.visibleRanges.length) {\n            changed = 8 /* UpdateFlag.ViewportMoved */ | 4 /* UpdateFlag.Viewport */;\n        }\n        else {\n            for (let i = 0; i < ranges.length && !(changed & 8 /* UpdateFlag.ViewportMoved */); i++) {\n                let old = this.visibleRanges[i], nw = ranges[i];\n                if (old.from != nw.from || old.to != nw.to) {\n                    changed |= 4 /* UpdateFlag.Viewport */;\n                    if (!(changes && changes.mapPos(old.from, -1) == nw.from && changes.mapPos(old.to, 1) == nw.to))\n                        changed |= 8 /* UpdateFlag.ViewportMoved */;\n                }\n            }\n        }\n        this.visibleRanges = ranges;\n        return changed;\n    }\n    lineBlockAt(pos) {\n        return (pos >= this.viewport.from && pos <= this.viewport.to &&\n            this.viewportLines.find(b => b.from <= pos && b.to >= pos)) ||\n            scaleBlock(this.heightMap.lineAt(pos, QueryType.ByPos, this.heightOracle, 0, 0), this.scaler);\n    }\n    lineBlockAtHeight(height) {\n        return (height >= this.viewportLines[0].top && height <= this.viewportLines[this.viewportLines.length - 1].bottom &&\n            this.viewportLines.find(l => l.top <= height && l.bottom >= height)) ||\n            scaleBlock(this.heightMap.lineAt(this.scaler.fromDOM(height), QueryType.ByHeight, this.heightOracle, 0, 0), this.scaler);\n    }\n    getScrollOffset() {\n        let base = this.scrollParent == this.view.scrollDOM ? this.scrollParent.scrollTop\n            : (this.scrollParent ? this.scrollParent.getBoundingClientRect().top : 0) - this.view.contentDOM.getBoundingClientRect().top;\n        return base * this.scaleY;\n    }\n    scrollAnchorAt(scrollOffset) {\n        let block = this.lineBlockAtHeight(scrollOffset + 8);\n        return block.from >= this.viewport.from || this.viewportLines[0].top - scrollOffset > 200 ? block : this.viewportLines[0];\n    }\n    elementAtHeight(height) {\n        return scaleBlock(this.heightMap.blockAt(this.scaler.fromDOM(height), this.heightOracle, 0, 0), this.scaler);\n    }\n    get docHeight() {\n        return this.scaler.toDOM(this.heightMap.height);\n    }\n    get contentHeight() {\n        return this.docHeight + this.paddingTop + this.paddingBottom;\n    }\n}\nclass Viewport {\n    constructor(from, to) {\n        this.from = from;\n        this.to = to;\n    }\n}\nfunction lineStructure(from, to, stateDeco) {\n    let ranges = [], pos = from, total = 0;\n    RangeSet.spans(stateDeco, from, to, {\n        span() { },\n        point(from, to) {\n            if (from > pos) {\n                ranges.push({ from: pos, to: from });\n                total += from - pos;\n            }\n            pos = to;\n        }\n    }, 20); // We're only interested in collapsed ranges of a significant size\n    if (pos < to) {\n        ranges.push({ from: pos, to });\n        total += to - pos;\n    }\n    return { total, ranges };\n}\nfunction findPosition({ total, ranges }, ratio) {\n    if (ratio <= 0)\n        return ranges[0].from;\n    if (ratio >= 1)\n        return ranges[ranges.length - 1].to;\n    let dist = Math.floor(total * ratio);\n    for (let i = 0;; i++) {\n        let { from, to } = ranges[i], size = to - from;\n        if (dist <= size)\n            return from + dist;\n        dist -= size;\n    }\n}\nfunction findFraction(structure, pos) {\n    let counted = 0;\n    for (let { from, to } of structure.ranges) {\n        if (pos <= to) {\n            counted += pos - from;\n            break;\n        }\n        counted += to - from;\n    }\n    return counted / structure.total;\n}\nfunction find(array, f) {\n    for (let val of array)\n        if (f(val))\n            return val;\n    return undefined;\n}\n// Don't scale when the document height is within the range of what\n// the DOM can handle.\nconst IdScaler = {\n    toDOM(n) { return n; },\n    fromDOM(n) { return n; },\n    scale: 1,\n    eq(other) { return other == this; }\n};\nfunction staticDeco(state) {\n    let deco = state.facet(decorations).filter(d => typeof d != \"function\");\n    let outer = state.facet(outerDecorations).filter(d => typeof d != \"function\");\n    if (outer.length)\n        deco.push(RangeSet.join(outer));\n    return deco;\n}\n// When the height is too big (> VP.MaxDOMHeight), scale down the\n// regions outside the viewports so that the total height is\n// VP.MaxDOMHeight.\nclass BigScaler {\n    constructor(oracle, heightMap, viewports) {\n        let vpHeight = 0, base = 0, domBase = 0;\n        this.viewports = viewports.map(({ from, to }) => {\n            let top = heightMap.lineAt(from, QueryType.ByPos, oracle, 0, 0).top;\n            let bottom = heightMap.lineAt(to, QueryType.ByPos, oracle, 0, 0).bottom;\n            vpHeight += bottom - top;\n            return { from, to, top, bottom, domTop: 0, domBottom: 0 };\n        });\n        this.scale = (7000000 /* VP.MaxDOMHeight */ - vpHeight) / (heightMap.height - vpHeight);\n        for (let obj of this.viewports) {\n            obj.domTop = domBase + (obj.top - base) * this.scale;\n            domBase = obj.domBottom = obj.domTop + (obj.bottom - obj.top);\n            base = obj.bottom;\n        }\n    }\n    toDOM(n) {\n        for (let i = 0, base = 0, domBase = 0;; i++) {\n            let vp = i < this.viewports.length ? this.viewports[i] : null;\n            if (!vp || n < vp.top)\n                return domBase + (n - base) * this.scale;\n            if (n <= vp.bottom)\n                return vp.domTop + (n - vp.top);\n            base = vp.bottom;\n            domBase = vp.domBottom;\n        }\n    }\n    fromDOM(n) {\n        for (let i = 0, base = 0, domBase = 0;; i++) {\n            let vp = i < this.viewports.length ? this.viewports[i] : null;\n            if (!vp || n < vp.domTop)\n                return base + (n - domBase) / this.scale;\n            if (n <= vp.domBottom)\n                return vp.top + (n - vp.domTop);\n            base = vp.bottom;\n            domBase = vp.domBottom;\n        }\n    }\n    eq(other) {\n        if (!(other instanceof BigScaler))\n            return false;\n        return this.scale == other.scale && this.viewports.length == other.viewports.length &&\n            this.viewports.every((vp, i) => vp.from == other.viewports[i].from && vp.to == other.viewports[i].to);\n    }\n}\nfunction scaleBlock(block, scaler) {\n    if (scaler.scale == 1)\n        return block;\n    let bTop = scaler.toDOM(block.top), bBottom = scaler.toDOM(block.bottom);\n    return new BlockInfo(block.from, block.length, bTop, bBottom - bTop, Array.isArray(block._content) ? block._content.map(b => scaleBlock(b, scaler)) : block._content);\n}\n\nconst theme = /*@__PURE__*/Facet.define({ combine: strs => strs.join(\" \") });\nconst darkTheme = /*@__PURE__*/Facet.define({ combine: values => values.indexOf(true) > -1 });\nconst baseThemeID = /*@__PURE__*/StyleModule.newName(), baseLightID = /*@__PURE__*/StyleModule.newName(), baseDarkID = /*@__PURE__*/StyleModule.newName();\nconst lightDarkIDs = { \"&light\": \".\" + baseLightID, \"&dark\": \".\" + baseDarkID };\nfunction buildTheme(main, spec, scopes) {\n    return new StyleModule(spec, {\n        finish(sel) {\n            return /&/.test(sel) ? sel.replace(/&\\w*/, m => {\n                if (m == \"&\")\n                    return main;\n                if (!scopes || !scopes[m])\n                    throw new RangeError(`Unsupported selector: ${m}`);\n                return scopes[m];\n            }) : main + \" \" + sel;\n        }\n    });\n}\nconst baseTheme$1 = /*@__PURE__*/buildTheme(\".\" + baseThemeID, {\n    \"&\": {\n        position: \"relative !important\",\n        boxSizing: \"border-box\",\n        \"&.cm-focused\": {\n            // Provide a simple default outline to make sure a focused\n            // editor is visually distinct. Can't leave the default behavior\n            // because that will apply to the content element, which is\n            // inside the scrollable container and doesn't include the\n            // gutters. We also can't use an 'auto' outline, since those\n            // are, for some reason, drawn behind the element content, which\n            // will cause things like the active line background to cover\n            // the outline (#297).\n            outline: \"1px dotted #212121\"\n        },\n        display: \"flex !important\",\n        flexDirection: \"column\"\n    },\n    \".cm-scroller\": {\n        display: \"flex !important\",\n        alignItems: \"flex-start !important\",\n        fontFamily: \"monospace\",\n        lineHeight: 1.4,\n        height: \"100%\",\n        overflowX: \"auto\",\n        position: \"relative\",\n        zIndex: 0,\n        overflowAnchor: \"none\",\n    },\n    \".cm-content\": {\n        margin: 0,\n        flexGrow: 2,\n        flexShrink: 0,\n        display: \"block\",\n        whiteSpace: \"pre\",\n        wordWrap: \"normal\", // Issue #456\n        boxSizing: \"border-box\",\n        minHeight: \"100%\",\n        padding: \"4px 0\",\n        outline: \"none\",\n        \"&[contenteditable=true]\": {\n            WebkitUserModify: \"read-write-plaintext-only\",\n        }\n    },\n    \".cm-lineWrapping\": {\n        whiteSpace_fallback: \"pre-wrap\", // For IE\n        whiteSpace: \"break-spaces\",\n        wordBreak: \"break-word\", // For Safari, which doesn't support overflow-wrap: anywhere\n        overflowWrap: \"anywhere\",\n        flexShrink: 1\n    },\n    \"&light .cm-content\": { caretColor: \"black\" },\n    \"&dark .cm-content\": { caretColor: \"white\" },\n    \".cm-line\": {\n        display: \"block\",\n        padding: \"0 2px 0 6px\"\n    },\n    \".cm-layer\": {\n        position: \"absolute\",\n        left: 0,\n        top: 0,\n        contain: \"size style\",\n        \"& > *\": {\n            position: \"absolute\"\n        }\n    },\n    \"&light .cm-selectionBackground\": {\n        background: \"#d9d9d9\"\n    },\n    \"&dark .cm-selectionBackground\": {\n        background: \"#222\"\n    },\n    \"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\": {\n        background: \"#d7d4f0\"\n    },\n    \"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\": {\n        background: \"#233\"\n    },\n    \".cm-cursorLayer\": {\n        pointerEvents: \"none\"\n    },\n    \"&.cm-focused > .cm-scroller > .cm-cursorLayer\": {\n        animation: \"steps(1) cm-blink 1.2s infinite\"\n    },\n    // Two animations defined so that we can switch between them to\n    // restart the animation without forcing another style\n    // recomputation.\n    \"@keyframes cm-blink\": { \"0%\": {}, \"50%\": { opacity: 0 }, \"100%\": {} },\n    \"@keyframes cm-blink2\": { \"0%\": {}, \"50%\": { opacity: 0 }, \"100%\": {} },\n    \".cm-cursor, .cm-dropCursor\": {\n        borderLeft: \"1.2px solid black\",\n        marginLeft: \"-0.6px\",\n        pointerEvents: \"none\",\n    },\n    \".cm-cursor\": {\n        display: \"none\"\n    },\n    \"&dark .cm-cursor\": {\n        borderLeftColor: \"#ddd\"\n    },\n    \".cm-selectionHandle\": {\n        backgroundColor: \"currentColor\",\n        width: \"1.5px\"\n    },\n    \".cm-selectionHandle-start::before, .cm-selectionHandle-end::before\": {\n        content: '\"\"',\n        backgroundColor: \"inherit\",\n        borderRadius: \"50%\",\n        width: \"8px\",\n        height: \"8px\",\n        position: \"absolute\",\n        left: \"-3.25px\"\n    },\n    \".cm-selectionHandle-start::before\": { top: \"-8px\" },\n    \".cm-selectionHandle-end::before\": { bottom: \"-8px\" },\n    \".cm-dropCursor\": {\n        position: \"absolute\"\n    },\n    \"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor\": {\n        display: \"block\"\n    },\n    \".cm-iso\": {\n        unicodeBidi: \"isolate\"\n    },\n    \".cm-announced\": {\n        position: \"fixed\",\n        top: \"-10000px\"\n    },\n    \"@media print\": {\n        \".cm-announced\": { display: \"none\" }\n    },\n    \"&light .cm-activeLine\": { backgroundColor: \"#cceeff44\" },\n    \"&dark .cm-activeLine\": { backgroundColor: \"#99eeff33\" },\n    \"&light .cm-specialChar\": { color: \"red\" },\n    \"&dark .cm-specialChar\": { color: \"#f78\" },\n    \".cm-gutters\": {\n        flexShrink: 0,\n        display: \"flex\",\n        height: \"100%\",\n        boxSizing: \"border-box\",\n        zIndex: 200,\n    },\n    \".cm-gutters-before\": { insetInlineStart: 0 },\n    \".cm-gutters-after\": { insetInlineEnd: 0 },\n    \"&light .cm-gutters\": {\n        backgroundColor: \"#f5f5f5\",\n        color: \"#6c6c6c\",\n        border: \"0px solid #ddd\",\n        \"&.cm-gutters-before\": { borderRightWidth: \"1px\" },\n        \"&.cm-gutters-after\": { borderLeftWidth: \"1px\" },\n    },\n    \"&dark .cm-gutters\": {\n        backgroundColor: \"#333338\",\n        color: \"#ccc\"\n    },\n    \".cm-gutter\": {\n        display: \"flex !important\", // Necessary -- prevents margin collapsing\n        flexDirection: \"column\",\n        flexShrink: 0,\n        boxSizing: \"border-box\",\n        minHeight: \"100%\",\n        overflow: \"hidden\"\n    },\n    \".cm-gutterElement\": {\n        boxSizing: \"border-box\"\n    },\n    \".cm-lineNumbers .cm-gutterElement\": {\n        padding: \"0 3px 0 5px\",\n        minWidth: \"20px\",\n        textAlign: \"right\",\n        whiteSpace: \"nowrap\"\n    },\n    \"&light .cm-activeLineGutter\": {\n        backgroundColor: \"#e2f2ff\"\n    },\n    \"&dark .cm-activeLineGutter\": {\n        backgroundColor: \"#222227\"\n    },\n    \".cm-panels\": {\n        boxSizing: \"border-box\",\n        position: \"sticky\",\n        left: 0,\n        right: 0,\n        zIndex: 300\n    },\n    \"&light .cm-panels\": {\n        backgroundColor: \"#f5f5f5\",\n        color: \"black\"\n    },\n    \"&light .cm-panels-top\": {\n        borderBottom: \"1px solid #ddd\"\n    },\n    \"&light .cm-panels-bottom\": {\n        borderTop: \"1px solid #ddd\"\n    },\n    \"&dark .cm-panels\": {\n        backgroundColor: \"#333338\",\n        color: \"white\"\n    },\n    \".cm-dialog\": {\n        padding: \"2px 19px 4px 6px\",\n        position: \"relative\",\n        \"& label\": { fontSize: \"80%\" },\n    },\n    \".cm-dialog-close\": {\n        position: \"absolute\",\n        top: \"3px\",\n        right: \"4px\",\n        backgroundColor: \"inherit\",\n        border: \"none\",\n        font: \"inherit\",\n        fontSize: \"14px\",\n        padding: \"0\"\n    },\n    \".cm-tab\": {\n        display: \"inline-block\",\n        overflow: \"hidden\",\n        verticalAlign: \"bottom\"\n    },\n    \".cm-widgetBuffer\": {\n        verticalAlign: \"text-top\",\n        height: \"1em\",\n        width: 0,\n        display: \"inline\"\n    },\n    \".cm-placeholder\": {\n        color: \"#888\",\n        display: \"inline-block\",\n        verticalAlign: \"top\",\n        userSelect: \"none\"\n    },\n    \".cm-highlightSpace\": {\n        backgroundImage: \"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)\",\n        backgroundPosition: \"center\",\n    },\n    \".cm-highlightTab\": {\n        backgroundImage: `url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"20\"><path stroke=\"%23888\" stroke-width=\"1\" fill=\"none\" d=\"M1 10H196L190 5M190 15L196 10M197 4L197 16\"/></svg>')`,\n        backgroundSize: \"auto 100%\",\n        backgroundPosition: \"right 90%\",\n        backgroundRepeat: \"no-repeat\"\n    },\n    \".cm-trailingSpace\": {\n        backgroundColor: \"#ff332255\"\n    },\n    \".cm-button\": {\n        verticalAlign: \"middle\",\n        color: \"inherit\",\n        fontSize: \"70%\",\n        padding: \".2em 1em\",\n        borderRadius: \"1px\"\n    },\n    \"&light .cm-button\": {\n        backgroundImage: \"linear-gradient(#eff1f5, #d9d9df)\",\n        border: \"1px solid #888\",\n        \"&:active\": {\n            backgroundImage: \"linear-gradient(#b4b4b4, #d0d3d6)\"\n        }\n    },\n    \"&dark .cm-button\": {\n        backgroundImage: \"linear-gradient(#393939, #111)\",\n        border: \"1px solid #888\",\n        \"&:active\": {\n            backgroundImage: \"linear-gradient(#111, #333)\"\n        }\n    },\n    \".cm-textfield\": {\n        verticalAlign: \"middle\",\n        color: \"inherit\",\n        fontSize: \"70%\",\n        border: \"1px solid silver\",\n        padding: \".2em .5em\"\n    },\n    \"&light .cm-textfield\": {\n        backgroundColor: \"white\"\n    },\n    \"&dark .cm-textfield\": {\n        border: \"1px solid #555\",\n        backgroundColor: \"inherit\"\n    }\n}, lightDarkIDs);\n\nconst observeOptions = {\n    childList: true,\n    characterData: true,\n    subtree: true,\n    attributes: true,\n    characterDataOldValue: true\n};\n// IE11 has very broken mutation observers, so we also listen to\n// DOMCharacterDataModified there\nconst useCharData = browser.ie && browser.ie_version <= 11;\nclass DOMObserver {\n    constructor(view) {\n        this.view = view;\n        this.active = false;\n        this.editContext = null;\n        // The known selection. Kept in our own object, as opposed to just\n        // directly accessing the selection because:\n        //  - Safari doesn't report the right selection in shadow DOM\n        //  - Reading from the selection forces a DOM layout\n        //  - This way, we can ignore selectionchange events if we have\n        //    already seen the 'new' selection\n        this.selectionRange = new DOMSelectionState;\n        // Set when a selection change is detected, cleared on flush\n        this.selectionChanged = false;\n        this.delayedFlush = -1;\n        this.resizeTimeout = -1;\n        this.queue = [];\n        this.delayedAndroidKey = null;\n        this.flushingAndroidKey = -1;\n        this.lastChange = 0;\n        this.scrollTargets = [];\n        this.intersection = null;\n        this.resizeScroll = null;\n        this.intersecting = false;\n        this.gapIntersection = null;\n        this.gaps = [];\n        this.printQuery = null;\n        // Timeout for scheduling check of the parents that need scroll handlers\n        this.parentCheck = -1;\n        this.dom = view.contentDOM;\n        this.observer = new MutationObserver(mutations => {\n            for (let mut of mutations)\n                this.queue.push(mut);\n            // IE11 will sometimes (on typing over a selection or\n            // backspacing out a single character text node) call the\n            // observer callback before actually updating the DOM.\n            //\n            // Unrelatedly, iOS Safari will, when ending a composition,\n            // sometimes first clear it, deliver the mutations, and then\n            // reinsert the finished text. CodeMirror's handling of the\n            // deletion will prevent the reinsertion from happening,\n            // breaking composition.\n            if ((browser.ie && browser.ie_version <= 11 || browser.ios && view.composing) &&\n                mutations.some(m => m.type == \"childList\" && m.removedNodes.length ||\n                    m.type == \"characterData\" && m.oldValue.length > m.target.nodeValue.length))\n                this.flushSoon();\n            else\n                this.flush();\n        });\n        if (window.EditContext && browser.android && view.constructor.EDIT_CONTEXT !== false &&\n            // Chrome <126 doesn't support inverted selections in edit context (#1392)\n            !(browser.chrome && browser.chrome_version < 126)) {\n            this.editContext = new EditContextManager(view);\n            if (view.state.facet(editable))\n                view.contentDOM.editContext = this.editContext.editContext;\n        }\n        if (useCharData)\n            this.onCharData = (event) => {\n                this.queue.push({ target: event.target,\n                    type: \"characterData\",\n                    oldValue: event.prevValue });\n                this.flushSoon();\n            };\n        this.onSelectionChange = this.onSelectionChange.bind(this);\n        this.onResize = this.onResize.bind(this);\n        this.onPrint = this.onPrint.bind(this);\n        this.onScroll = this.onScroll.bind(this);\n        if (window.matchMedia)\n            this.printQuery = window.matchMedia(\"print\");\n        if (typeof ResizeObserver == \"function\") {\n            this.resizeScroll = new ResizeObserver(() => {\n                var _a;\n                if (((_a = this.view.docView) === null || _a === void 0 ? void 0 : _a.lastUpdate) < Date.now() - 75)\n                    this.onResize();\n            });\n            this.resizeScroll.observe(view.scrollDOM);\n        }\n        this.addWindowListeners(this.win = view.win);\n        this.start();\n        if (typeof IntersectionObserver == \"function\") {\n            this.intersection = new IntersectionObserver(entries => {\n                if (this.parentCheck < 0)\n                    this.parentCheck = setTimeout(this.listenForScroll.bind(this), 1000);\n                if (entries.length > 0 && (entries[entries.length - 1].intersectionRatio > 0) != this.intersecting) {\n                    this.intersecting = !this.intersecting;\n                    if (this.intersecting != this.view.inView)\n                        this.onScrollChanged(document.createEvent(\"Event\"));\n                }\n            }, { threshold: [0, .001] });\n            this.intersection.observe(this.dom);\n            this.gapIntersection = new IntersectionObserver(entries => {\n                if (entries.length > 0 && entries[entries.length - 1].intersectionRatio > 0)\n                    this.onScrollChanged(document.createEvent(\"Event\"));\n            }, {});\n        }\n        this.listenForScroll();\n        this.readSelectionRange();\n    }\n    onScrollChanged(e) {\n        this.view.inputState.runHandlers(\"scroll\", e);\n        if (this.intersecting)\n            this.view.measure();\n    }\n    onScroll(e) {\n        if (this.intersecting)\n            this.flush(false);\n        if (this.editContext)\n            this.view.requestMeasure(this.editContext.measureReq);\n        this.onScrollChanged(e);\n    }\n    onResize() {\n        if (this.resizeTimeout < 0)\n            this.resizeTimeout = setTimeout(() => {\n                this.resizeTimeout = -1;\n                this.view.requestMeasure();\n            }, 50);\n    }\n    onPrint(event) {\n        if ((event.type == \"change\" || !event.type) && !event.matches)\n            return;\n        this.view.viewState.printing = true;\n        this.view.measure();\n        setTimeout(() => {\n            this.view.viewState.printing = false;\n            this.view.requestMeasure();\n        }, 500);\n    }\n    updateGaps(gaps) {\n        if (this.gapIntersection && (gaps.length != this.gaps.length || this.gaps.some((g, i) => g != gaps[i]))) {\n            this.gapIntersection.disconnect();\n            for (let gap of gaps)\n                this.gapIntersection.observe(gap);\n            this.gaps = gaps;\n        }\n    }\n    onSelectionChange(event) {\n        let wasChanged = this.selectionChanged;\n        if (!this.readSelectionRange() || this.delayedAndroidKey)\n            return;\n        let { view } = this, sel = this.selectionRange;\n        if (view.state.facet(editable) ? view.root.activeElement != this.dom : !hasSelection(this.dom, sel))\n            return;\n        let context = sel.anchorNode && view.docView.tile.nearest(sel.anchorNode);\n        if (context && context.isWidget() && context.widget.ignoreEvent(event)) {\n            if (!wasChanged)\n                this.selectionChanged = false;\n            return;\n        }\n        // Deletions on IE11 fire their events in the wrong order, giving\n        // us a selection change event before the DOM changes are\n        // reported.\n        // Chrome Android has a similar issue when backspacing out a\n        // selection (#645).\n        if ((browser.ie && browser.ie_version <= 11 || browser.android && browser.chrome) && !view.state.selection.main.empty &&\n            // (Selection.isCollapsed isn't reliable on IE)\n            sel.focusNode && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset))\n            this.flushSoon();\n        else\n            this.flush(false);\n    }\n    readSelectionRange() {\n        let { view } = this;\n        // The Selection object is broken in shadow roots in Safari. See\n        // issue #414\n        let selection = getSelection(view.root);\n        if (!selection)\n            return false;\n        let range = browser.safari && view.root.nodeType == 11 &&\n            view.root.activeElement == this.dom &&\n            safariSelectionRangeHack(this.view, selection) || selection;\n        if (!range || this.selectionRange.eq(range))\n            return false;\n        let local = hasSelection(this.dom, range);\n        // Detect the situation where the browser has, on focus, moved the\n        // selection to the start of the content element. Reset it to the\n        // position from the editor state.\n        if (local && !this.selectionChanged &&\n            view.inputState.lastFocusTime > Date.now() - 200 &&\n            view.inputState.lastTouchTime < Date.now() - 300 &&\n            atElementStart(this.dom, range)) {\n            this.view.inputState.lastFocusTime = 0;\n            view.docView.updateSelection();\n            return false;\n        }\n        this.selectionRange.setRange(range);\n        if (local)\n            this.selectionChanged = true;\n        return true;\n    }\n    setSelectionRange(anchor, head) {\n        this.selectionRange.set(anchor.node, anchor.offset, head.node, head.offset);\n        this.selectionChanged = false;\n    }\n    clearSelectionRange() {\n        this.selectionRange.set(null, 0, null, 0);\n    }\n    listenForScroll() {\n        this.parentCheck = -1;\n        let i = 0, changed = null;\n        for (let dom = this.dom; dom;) {\n            if (dom.nodeType == 1) {\n                if (!changed && i < this.scrollTargets.length && this.scrollTargets[i] == dom)\n                    i++;\n                else if (!changed)\n                    changed = this.scrollTargets.slice(0, i);\n                if (changed)\n                    changed.push(dom);\n                dom = dom.assignedSlot || dom.parentNode;\n            }\n            else if (dom.nodeType == 11) { // Shadow root\n                dom = dom.host;\n            }\n            else {\n                break;\n            }\n        }\n        if (i < this.scrollTargets.length && !changed)\n            changed = this.scrollTargets.slice(0, i);\n        if (changed) {\n            for (let dom of this.scrollTargets)\n                dom.removeEventListener(\"scroll\", this.onScroll);\n            for (let dom of this.scrollTargets = changed)\n                dom.addEventListener(\"scroll\", this.onScroll);\n        }\n    }\n    ignore(f) {\n        if (!this.active)\n            return f();\n        try {\n            this.stop();\n            return f();\n        }\n        finally {\n            this.start();\n            this.clear();\n        }\n    }\n    start() {\n        if (this.active)\n            return;\n        this.observer.observe(this.dom, observeOptions);\n        if (useCharData)\n            this.dom.addEventListener(\"DOMCharacterDataModified\", this.onCharData);\n        this.active = true;\n    }\n    stop() {\n        if (!this.active)\n            return;\n        this.active = false;\n        this.observer.disconnect();\n        if (useCharData)\n            this.dom.removeEventListener(\"DOMCharacterDataModified\", this.onCharData);\n    }\n    // Throw away any pending changes\n    clear() {\n        this.processRecords();\n        this.queue.length = 0;\n        this.selectionChanged = false;\n    }\n    // Chrome Android, especially in combination with GBoard, not only\n    // doesn't reliably fire regular key events, but also often\n    // surrounds the effect of enter or backspace with a bunch of\n    // composition events that, when interrupted, cause text duplication\n    // or other kinds of corruption. This hack makes the editor back off\n    // from handling DOM changes for a moment when such a key is\n    // detected (via beforeinput or keydown), and then tries to flush\n    // them or, if that has no effect, dispatches the given key.\n    delayAndroidKey(key, keyCode) {\n        var _a;\n        if (!this.delayedAndroidKey) {\n            let flush = () => {\n                let key = this.delayedAndroidKey;\n                if (key) {\n                    this.clearDelayedAndroidKey();\n                    this.view.inputState.lastKeyCode = key.keyCode;\n                    this.view.inputState.lastKeyTime = Date.now();\n                    let flushed = this.flush();\n                    if (!flushed && key.force)\n                        dispatchKey(this.dom, key.key, key.keyCode);\n                }\n            };\n            this.flushingAndroidKey = this.view.win.requestAnimationFrame(flush);\n        }\n        // Since backspace beforeinput is sometimes signalled spuriously,\n        // Enter always takes precedence.\n        if (!this.delayedAndroidKey || key == \"Enter\")\n            this.delayedAndroidKey = {\n                key, keyCode,\n                // Only run the key handler when no changes are detected if\n                // this isn't coming right after another change, in which case\n                // it is probably part of a weird chain of updates, and should\n                // be ignored if it returns the DOM to its previous state.\n                force: this.lastChange < Date.now() - 50 || !!((_a = this.delayedAndroidKey) === null || _a === void 0 ? void 0 : _a.force)\n            };\n    }\n    clearDelayedAndroidKey() {\n        this.win.cancelAnimationFrame(this.flushingAndroidKey);\n        this.delayedAndroidKey = null;\n        this.flushingAndroidKey = -1;\n    }\n    flushSoon() {\n        if (this.delayedFlush < 0)\n            this.delayedFlush = this.view.win.requestAnimationFrame(() => { this.delayedFlush = -1; this.flush(); });\n    }\n    forceFlush() {\n        if (this.delayedFlush >= 0) {\n            this.view.win.cancelAnimationFrame(this.delayedFlush);\n            this.delayedFlush = -1;\n        }\n        this.flush();\n    }\n    pendingRecords() {\n        for (let mut of this.observer.takeRecords())\n            this.queue.push(mut);\n        return this.queue;\n    }\n    processRecords() {\n        let records = this.pendingRecords();\n        if (records.length)\n            this.queue = [];\n        let from = -1, to = -1, typeOver = false;\n        for (let record of records) {\n            let range = this.readMutation(record);\n            if (!range)\n                continue;\n            if (range.typeOver)\n                typeOver = true;\n            if (from == -1) {\n                ({ from, to } = range);\n            }\n            else {\n                from = Math.min(range.from, from);\n                to = Math.max(range.to, to);\n            }\n        }\n        return { from, to, typeOver };\n    }\n    readChange() {\n        let { from, to, typeOver } = this.processRecords();\n        let newSel = this.selectionChanged && hasSelection(this.dom, this.selectionRange);\n        if (from < 0 && !newSel)\n            return null;\n        if (from > -1)\n            this.lastChange = Date.now();\n        this.view.inputState.lastFocusTime = 0;\n        this.selectionChanged = false;\n        let change = new DOMChange(this.view, from, to, typeOver);\n        this.view.docView.domChanged = { newSel: change.newSel ? change.newSel.main : null };\n        return change;\n    }\n    // Apply pending changes, if any\n    flush(readSelection = true) {\n        // Completely hold off flushing when pending keys are set—the code\n        // managing those will make sure processRecords is called and the\n        // view is resynchronized after\n        if (this.delayedFlush >= 0 || this.delayedAndroidKey)\n            return false;\n        if (readSelection)\n            this.readSelectionRange();\n        let domChange = this.readChange();\n        if (!domChange) {\n            this.view.requestMeasure();\n            return false;\n        }\n        let startState = this.view.state;\n        let handled = applyDOMChange(this.view, domChange);\n        // The view wasn't updated but DOM/selection changes were seen. Reset the view.\n        if (this.view.state == startState &&\n            (domChange.domChanged || domChange.newSel && !sameSelPos(this.view.state.selection, domChange.newSel.main)))\n            this.view.update([]);\n        return handled;\n    }\n    readMutation(rec) {\n        let tile = this.view.docView.tile.nearest(rec.target);\n        if (!tile || tile.isWidget())\n            return null;\n        tile.markDirty(rec.type == \"attributes\");\n        if (rec.type == \"childList\") {\n            let childBefore = findChild(tile, rec.previousSibling || rec.target.previousSibling, -1);\n            let childAfter = findChild(tile, rec.nextSibling || rec.target.nextSibling, 1);\n            return { from: childBefore ? tile.posAfter(childBefore) : tile.posAtStart,\n                to: childAfter ? tile.posBefore(childAfter) : tile.posAtEnd, typeOver: false };\n        }\n        else if (rec.type == \"characterData\") {\n            return { from: tile.posAtStart, to: tile.posAtEnd, typeOver: rec.target.nodeValue == rec.oldValue };\n        }\n        else {\n            return null;\n        }\n    }\n    setWindow(win) {\n        if (win != this.win) {\n            this.removeWindowListeners(this.win);\n            this.win = win;\n            this.addWindowListeners(this.win);\n        }\n    }\n    addWindowListeners(win) {\n        win.addEventListener(\"resize\", this.onResize);\n        if (this.printQuery) {\n            if (this.printQuery.addEventListener)\n                this.printQuery.addEventListener(\"change\", this.onPrint);\n            else\n                this.printQuery.addListener(this.onPrint);\n        }\n        else\n            win.addEventListener(\"beforeprint\", this.onPrint);\n        win.addEventListener(\"scroll\", this.onScroll);\n        win.document.addEventListener(\"selectionchange\", this.onSelectionChange);\n    }\n    removeWindowListeners(win) {\n        win.removeEventListener(\"scroll\", this.onScroll);\n        win.removeEventListener(\"resize\", this.onResize);\n        if (this.printQuery) {\n            if (this.printQuery.removeEventListener)\n                this.printQuery.removeEventListener(\"change\", this.onPrint);\n            else\n                this.printQuery.removeListener(this.onPrint);\n        }\n        else\n            win.removeEventListener(\"beforeprint\", this.onPrint);\n        win.document.removeEventListener(\"selectionchange\", this.onSelectionChange);\n    }\n    update(update) {\n        if (this.editContext) {\n            this.editContext.update(update);\n            if (update.startState.facet(editable) != update.state.facet(editable))\n                update.view.contentDOM.editContext = update.state.facet(editable) ? this.editContext.editContext : null;\n        }\n    }\n    destroy() {\n        var _a, _b, _c;\n        this.stop();\n        (_a = this.intersection) === null || _a === void 0 ? void 0 : _a.disconnect();\n        (_b = this.gapIntersection) === null || _b === void 0 ? void 0 : _b.disconnect();\n        (_c = this.resizeScroll) === null || _c === void 0 ? void 0 : _c.disconnect();\n        for (let dom of this.scrollTargets)\n            dom.removeEventListener(\"scroll\", this.onScroll);\n        this.removeWindowListeners(this.win);\n        clearTimeout(this.parentCheck);\n        clearTimeout(this.resizeTimeout);\n        this.win.cancelAnimationFrame(this.delayedFlush);\n        this.win.cancelAnimationFrame(this.flushingAndroidKey);\n        if (this.editContext) {\n            this.view.contentDOM.editContext = null;\n            this.editContext.destroy();\n        }\n    }\n}\nfunction findChild(tile, dom, dir) {\n    while (dom) {\n        let curTile = Tile.get(dom);\n        if (curTile && curTile.parent == tile)\n            return curTile;\n        let parent = dom.parentNode;\n        dom = parent != tile.dom ? parent : dir > 0 ? dom.nextSibling : dom.previousSibling;\n    }\n    return null;\n}\nfunction buildSelectionRangeFromRange(view, range) {\n    let anchorNode = range.startContainer, anchorOffset = range.startOffset;\n    let focusNode = range.endContainer, focusOffset = range.endOffset;\n    let curAnchor = view.docView.domAtPos(view.state.selection.main.anchor, 1);\n    // Since such a range doesn't distinguish between anchor and head,\n    // use a heuristic that flips it around if its end matches the\n    // current anchor.\n    if (isEquivalentPosition(curAnchor.node, curAnchor.offset, focusNode, focusOffset))\n        [anchorNode, anchorOffset, focusNode, focusOffset] = [focusNode, focusOffset, anchorNode, anchorOffset];\n    return { anchorNode, anchorOffset, focusNode, focusOffset };\n}\n// Used to work around a Safari Selection/shadow DOM bug (#414)\nfunction safariSelectionRangeHack(view, selection) {\n    if (selection.getComposedRanges) {\n        let range = selection.getComposedRanges(view.root)[0];\n        if (range)\n            return buildSelectionRangeFromRange(view, range);\n    }\n    let found = null;\n    // Because Safari (at least in 2018-2021) doesn't provide regular\n    // access to the selection inside a shadowroot, we have to perform a\n    // ridiculous hack to get at it—using `execCommand` to trigger a\n    // `beforeInput` event so that we can read the target range from the\n    // event.\n    function read(event) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        found = event.getTargetRanges()[0];\n    }\n    view.contentDOM.addEventListener(\"beforeinput\", read, true);\n    view.dom.ownerDocument.execCommand(\"indent\");\n    view.contentDOM.removeEventListener(\"beforeinput\", read, true);\n    return found ? buildSelectionRangeFromRange(view, found) : null;\n}\nclass EditContextManager {\n    constructor(view) {\n        // The document window for which the text in the context is\n        // maintained. For large documents, this may be smaller than the\n        // editor document. This window always includes the selection head.\n        this.from = 0;\n        this.to = 0;\n        // When applying a transaction, this is used to compare the change\n        // made to the context content to the change in the transaction in\n        // order to make the minimal changes to the context (since touching\n        // that sometimes breaks series of multiple edits made for a single\n        // user action on some Android keyboards)\n        this.pendingContextChange = null;\n        this.handlers = Object.create(null);\n        // Kludge to work around the fact that EditContext does not respond\n        // well to having its content updated during a composition (see #1472)\n        this.composing = null;\n        this.resetRange(view.state);\n        let context = this.editContext = new window.EditContext({\n            text: view.state.doc.sliceString(this.from, this.to),\n            selectionStart: this.toContextPos(Math.max(this.from, Math.min(this.to, view.state.selection.main.anchor))),\n            selectionEnd: this.toContextPos(view.state.selection.main.head)\n        });\n        this.handlers.textupdate = e => {\n            let main = view.state.selection.main, { anchor, head } = main;\n            let from = this.toEditorPos(e.updateRangeStart), to = this.toEditorPos(e.updateRangeEnd);\n            if (view.inputState.composing >= 0 && !this.composing)\n                this.composing = { contextBase: e.updateRangeStart, editorBase: from, drifted: false };\n            let deletes = to - from > e.text.length;\n            // If the window doesn't include the anchor, assume changes\n            // adjacent to a side go up to the anchor.\n            if (from == this.from && anchor < this.from)\n                from = anchor;\n            else if (to == this.to && anchor > this.to)\n                to = anchor;\n            let diff = findDiff(view.state.sliceDoc(from, to), e.text, (deletes ? main.from : main.to) - from, deletes ? \"end\" : null);\n            // Edit contexts sometimes fire empty changes\n            if (!diff) {\n                let newSel = EditorSelection.single(this.toEditorPos(e.selectionStart), this.toEditorPos(e.selectionEnd));\n                if (!sameSelPos(newSel, main))\n                    view.dispatch({ selection: newSel, userEvent: \"select\" });\n                return;\n            }\n            let change = { from: diff.from + from, to: diff.toA + from,\n                insert: Text.of(e.text.slice(diff.from, diff.toB).split(\"\\n\")) };\n            if ((browser.mac || browser.android) && change.from == head - 1 &&\n                /^\\. ?$/.test(e.text) && view.contentDOM.getAttribute(\"autocorrect\") == \"off\")\n                change = { from, to, insert: Text.of([e.text.replace(\".\", \" \")]) };\n            this.pendingContextChange = change;\n            if (!view.state.readOnly) {\n                let newLen = this.to - this.from + (change.to - change.from + change.insert.length);\n                applyDOMChangeInner(view, change, EditorSelection.single(this.toEditorPos(e.selectionStart, newLen), this.toEditorPos(e.selectionEnd, newLen)));\n            }\n            // If the transaction didn't flush our change, revert it so\n            // that the context is in sync with the editor state again.\n            if (this.pendingContextChange) {\n                this.revertPending(view.state);\n                this.setSelection(view.state);\n            }\n            // Work around missed compositionend events. See https://discuss.codemirror.net/t/a/9514\n            if (change.from < change.to && !change.insert.length && view.inputState.composing >= 0 &&\n                !/[\\\\p{Alphabetic}\\\\p{Number}_]/.test(context.text.slice(Math.max(0, e.updateRangeStart - 1), Math.min(context.text.length, e.updateRangeStart + 1))))\n                this.handlers.compositionend(e);\n        };\n        this.handlers.characterboundsupdate = e => {\n            let rects = [], prev = null;\n            for (let i = this.toEditorPos(e.rangeStart), end = this.toEditorPos(e.rangeEnd); i < end; i++) {\n                let rect = view.coordsForChar(i);\n                prev = (rect && new DOMRect(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top))\n                    || prev || new DOMRect;\n                rects.push(prev);\n            }\n            context.updateCharacterBounds(e.rangeStart, rects);\n        };\n        this.handlers.textformatupdate = e => {\n            let deco = [];\n            for (let format of e.getTextFormats()) {\n                let lineStyle = format.underlineStyle, thickness = format.underlineThickness;\n                if (!/none/i.test(lineStyle) && !/none/i.test(thickness)) {\n                    let from = this.toEditorPos(format.rangeStart), to = this.toEditorPos(format.rangeEnd);\n                    if (from < to) {\n                        // These values changed from capitalized custom strings to lower-case CSS keywords in 2025\n                        let style = `text-decoration: underline ${/^[a-z]/.test(lineStyle) ? lineStyle + \" \" : lineStyle == \"Dashed\" ? \"dashed \" : lineStyle == \"Squiggle\" ? \"wavy \" : \"\"}${/thin/i.test(thickness) ? 1 : 2}px`;\n                        deco.push(Decoration.mark({ attributes: { style } }).range(from, to));\n                    }\n                }\n            }\n            view.dispatch({ effects: setEditContextFormatting.of(Decoration.set(deco)) });\n        };\n        this.handlers.compositionstart = () => {\n            if (view.inputState.composing < 0) {\n                view.inputState.composing = 0;\n                view.inputState.compositionFirstChange = true;\n            }\n        };\n        this.handlers.compositionend = () => {\n            view.inputState.composing = -1;\n            view.inputState.compositionFirstChange = null;\n            if (this.composing) {\n                let { drifted } = this.composing;\n                this.composing = null;\n                if (drifted)\n                    this.reset(view.state);\n            }\n        };\n        for (let event in this.handlers)\n            context.addEventListener(event, this.handlers[event]);\n        this.measureReq = { read: view => {\n                this.editContext.updateControlBounds(view.contentDOM.getBoundingClientRect());\n                let sel = getSelection(view.root);\n                if (sel && sel.rangeCount)\n                    this.editContext.updateSelectionBounds(sel.getRangeAt(0).getBoundingClientRect());\n            } };\n    }\n    applyEdits(update) {\n        let off = 0, abort = false, pending = this.pendingContextChange;\n        update.changes.iterChanges((fromA, toA, _fromB, _toB, insert) => {\n            if (abort)\n                return;\n            let dLen = insert.length - (toA - fromA);\n            if (pending && toA >= pending.to) {\n                if (pending.from == fromA && pending.to == toA && pending.insert.eq(insert)) {\n                    pending = this.pendingContextChange = null; // Match\n                    off += dLen;\n                    this.to += dLen;\n                    return;\n                }\n                else { // Mismatch, revert\n                    pending = null;\n                    this.revertPending(update.state);\n                }\n            }\n            fromA += off;\n            toA += off;\n            if (toA <= this.from) { // Before the window\n                this.from += dLen;\n                this.to += dLen;\n            }\n            else if (fromA < this.to) { // Overlaps with window\n                if (fromA < this.from || toA > this.to || (this.to - this.from) + insert.length > 30000 /* CxVp.MaxSize */) {\n                    abort = true;\n                    return;\n                }\n                this.editContext.updateText(this.toContextPos(fromA), this.toContextPos(toA), insert.toString());\n                this.to += dLen;\n            }\n            off += dLen;\n        });\n        if (pending && !abort)\n            this.revertPending(update.state);\n        return !abort;\n    }\n    update(update) {\n        let reverted = this.pendingContextChange, startSel = update.startState.selection.main;\n        if (this.composing &&\n            (this.composing.drifted ||\n                (!update.changes.touchesRange(startSel.from, startSel.to) &&\n                    update.transactions.some(tr => !tr.isUserEvent(\"input.type\") && tr.changes.touchesRange(this.from, this.to))))) {\n            this.composing.drifted = true;\n            this.composing.editorBase = update.changes.mapPos(this.composing.editorBase);\n        }\n        else if (!this.applyEdits(update) || !this.rangeIsValid(update.state)) {\n            this.pendingContextChange = null;\n            this.reset(update.state);\n        }\n        else if (update.docChanged || update.selectionSet || reverted) {\n            this.setSelection(update.state);\n        }\n        if (update.geometryChanged || update.docChanged || update.selectionSet)\n            update.view.requestMeasure(this.measureReq);\n    }\n    resetRange(state) {\n        let { head } = state.selection.main;\n        this.from = Math.max(0, head - 10000 /* CxVp.Margin */);\n        this.to = Math.min(state.doc.length, head + 10000 /* CxVp.Margin */);\n    }\n    reset(state) {\n        this.resetRange(state);\n        this.editContext.updateText(0, this.editContext.text.length, state.doc.sliceString(this.from, this.to));\n        this.setSelection(state);\n    }\n    revertPending(state) {\n        let pending = this.pendingContextChange;\n        this.pendingContextChange = null;\n        this.editContext.updateText(this.toContextPos(pending.from), this.toContextPos(pending.from + pending.insert.length), state.doc.sliceString(pending.from, pending.to));\n    }\n    setSelection(state) {\n        let { main } = state.selection;\n        let start = this.toContextPos(Math.max(this.from, Math.min(this.to, main.anchor)));\n        let end = this.toContextPos(main.head);\n        if (this.editContext.selectionStart != start || this.editContext.selectionEnd != end)\n            this.editContext.updateSelection(start, end);\n    }\n    rangeIsValid(state) {\n        let { head } = state.selection.main;\n        return !(this.from > 0 && head - this.from < 500 /* CxVp.MinMargin */ ||\n            this.to < state.doc.length && this.to - head < 500 /* CxVp.MinMargin */ ||\n            this.to - this.from > 10000 /* CxVp.Margin */ * 3);\n    }\n    toEditorPos(contextPos, clipLen = this.to - this.from) {\n        contextPos = Math.min(contextPos, clipLen);\n        let c = this.composing;\n        return c && c.drifted ? c.editorBase + (contextPos - c.contextBase) : contextPos + this.from;\n    }\n    toContextPos(editorPos) {\n        let c = this.composing;\n        return c && c.drifted ? c.contextBase + (editorPos - c.editorBase) : editorPos - this.from;\n    }\n    destroy() {\n        for (let event in this.handlers)\n            this.editContext.removeEventListener(event, this.handlers[event]);\n    }\n}\n\n// The editor's update state machine looks something like this:\n//\n//     Idle → Updating ⇆ Idle (unchecked) → Measuring → Idle\n//                                         ↑      ↓\n//                                         Updating (measure)\n//\n// The difference between 'Idle' and 'Idle (unchecked)' lies in\n// whether a layout check has been scheduled. A regular update through\n// the `update` method updates the DOM in a write-only fashion, and\n// relies on a check (scheduled with `requestAnimationFrame`) to make\n// sure everything is where it should be and the viewport covers the\n// visible code. That check continues to measure and then optionally\n// update until it reaches a coherent state.\n/**\nAn editor view represents the editor's user interface. It holds\nthe editable DOM surface, and possibly other elements such as the\nline number gutter. It handles events and dispatches state\ntransactions for editing actions.\n*/\nclass EditorView {\n    /**\n    The current editor state.\n    */\n    get state() { return this.viewState.state; }\n    /**\n    To be able to display large documents without consuming too much\n    memory or overloading the browser, CodeMirror only draws the\n    code that is visible (plus a margin around it) to the DOM. This\n    property tells you the extent of the current drawn viewport, in\n    document positions.\n    */\n    get viewport() { return this.viewState.viewport; }\n    /**\n    When there are, for example, large collapsed ranges in the\n    viewport, its size can be a lot bigger than the actual visible\n    content. Thus, if you are doing something like styling the\n    content in the viewport, it is preferable to only do so for\n    these ranges, which are the subset of the viewport that is\n    actually drawn.\n    */\n    get visibleRanges() { return this.viewState.visibleRanges; }\n    /**\n    Returns false when the editor is entirely scrolled out of view\n    or otherwise hidden.\n    */\n    get inView() { return this.viewState.inView; }\n    /**\n    Indicates whether the user is currently composing text via\n    [IME](https://en.wikipedia.org/wiki/Input_method), and at least\n    one change has been made in the current composition.\n    */\n    get composing() { return !!this.inputState && this.inputState.composing > 0; }\n    /**\n    Indicates whether the user is currently in composing state. Note\n    that on some platforms, like Android, this will be the case a\n    lot, since just putting the cursor on a word starts a\n    composition there.\n    */\n    get compositionStarted() { return !!this.inputState && this.inputState.composing >= 0; }\n    /**\n    The document or shadow root that the view lives in.\n    */\n    get root() { return this._root; }\n    /**\n    @internal\n    */\n    get win() { return this.dom.ownerDocument.defaultView || window; }\n    /**\n    Construct a new view. You'll want to either provide a `parent`\n    option, or put `view.dom` into your document after creating a\n    view, so that the user can see the editor.\n    */\n    constructor(config = {}) {\n        var _a;\n        this.plugins = [];\n        this.pluginMap = new Map;\n        this.editorAttrs = {};\n        this.contentAttrs = {};\n        this.bidiCache = [];\n        this.destroyed = false;\n        /**\n        @internal\n        */\n        this.updateState = 2 /* UpdateState.Updating */;\n        /**\n        @internal\n        */\n        this.measureScheduled = -1;\n        /**\n        @internal\n        */\n        this.measureRequests = [];\n        this.contentDOM = document.createElement(\"div\");\n        this.scrollDOM = document.createElement(\"div\");\n        this.scrollDOM.tabIndex = -1;\n        this.scrollDOM.className = \"cm-scroller\";\n        this.scrollDOM.appendChild(this.contentDOM);\n        this.announceDOM = document.createElement(\"div\");\n        this.announceDOM.className = \"cm-announced\";\n        this.announceDOM.setAttribute(\"aria-live\", \"polite\");\n        this.dom = document.createElement(\"div\");\n        this.dom.appendChild(this.announceDOM);\n        this.dom.appendChild(this.scrollDOM);\n        if (config.parent)\n            config.parent.appendChild(this.dom);\n        let { dispatch } = config;\n        this.dispatchTransactions = config.dispatchTransactions ||\n            (dispatch && ((trs) => trs.forEach(tr => dispatch(tr, this)))) ||\n            ((trs) => this.update(trs));\n        this.dispatch = this.dispatch.bind(this);\n        this._root = (config.root || getRoot(config.parent) || document);\n        this.viewState = new ViewState(this, config.state || EditorState.create(config));\n        if (config.scrollTo && config.scrollTo.is(scrollIntoView))\n            this.viewState.scrollTarget = config.scrollTo.value.clip(this.viewState.state);\n        this.plugins = this.state.facet(viewPlugin).map(spec => new PluginInstance(spec));\n        for (let plugin of this.plugins)\n            plugin.update(this);\n        this.observer = new DOMObserver(this);\n        this.inputState = new InputState(this);\n        this.inputState.ensureHandlers(this.plugins);\n        this.docView = new DocView(this);\n        this.mountStyles();\n        this.updateAttrs();\n        this.updateState = 0 /* UpdateState.Idle */;\n        this.requestMeasure();\n        if ((_a = document.fonts) === null || _a === void 0 ? void 0 : _a.ready)\n            document.fonts.ready.then(() => {\n                this.viewState.mustMeasureContent = \"refresh\";\n                this.requestMeasure();\n            });\n    }\n    dispatch(...input) {\n        let trs = input.length == 1 && input[0] instanceof Transaction ? input\n            : input.length == 1 && Array.isArray(input[0]) ? input[0]\n                : [this.state.update(...input)];\n        this.dispatchTransactions(trs, this);\n    }\n    /**\n    Update the view for the given array of transactions. This will\n    update the visible document and selection to match the state\n    produced by the transactions, and notify view plugins of the\n    change. You should usually call\n    [`dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch) instead, which uses this\n    as a primitive.\n    */\n    update(transactions) {\n        if (this.updateState != 0 /* UpdateState.Idle */)\n            throw new Error(\"Calls to EditorView.update are not allowed while an update is in progress\");\n        let redrawn = false, attrsChanged = false, update;\n        let state = this.state;\n        for (let tr of transactions) {\n            if (tr.startState != state)\n                throw new RangeError(\"Trying to update state with a transaction that doesn't start from the previous state.\");\n            state = tr.state;\n        }\n        if (this.destroyed) {\n            this.viewState.state = state;\n            return;\n        }\n        let focus = this.hasFocus, focusFlag = 0, dispatchFocus = null;\n        if (transactions.some(tr => tr.annotation(isFocusChange))) {\n            this.inputState.notifiedFocused = focus;\n            // If a focus-change transaction is being dispatched, set this update flag.\n            focusFlag = 1 /* UpdateFlag.Focus */;\n        }\n        else if (focus != this.inputState.notifiedFocused) {\n            this.inputState.notifiedFocused = focus;\n            // Schedule a separate focus transaction if necessary, otherwise\n            // add a flag to this update\n            dispatchFocus = focusChangeTransaction(state, focus);\n            if (!dispatchFocus)\n                focusFlag = 1 /* UpdateFlag.Focus */;\n        }\n        // If there was a pending DOM change, eagerly read it and try to\n        // apply it after the given transactions.\n        let pendingKey = this.observer.delayedAndroidKey, domChange = null;\n        if (pendingKey) {\n            this.observer.clearDelayedAndroidKey();\n            domChange = this.observer.readChange();\n            // Only try to apply DOM changes if the transactions didn't\n            // change the doc or selection.\n            if (domChange && !this.state.doc.eq(state.doc) || !this.state.selection.eq(state.selection))\n                domChange = null;\n        }\n        else {\n            this.observer.clear();\n        }\n        // When the phrases change, redraw the editor\n        if (state.facet(EditorState.phrases) != this.state.facet(EditorState.phrases))\n            return this.setState(state);\n        update = ViewUpdate.create(this, state, transactions);\n        update.flags |= focusFlag;\n        let scrollTarget = this.viewState.scrollTarget;\n        try {\n            this.updateState = 2 /* UpdateState.Updating */;\n            for (let tr of transactions) {\n                if (scrollTarget)\n                    scrollTarget = scrollTarget.map(tr.changes);\n                if (tr.scrollIntoView) {\n                    let { main } = tr.state.selection;\n                    let { x, y } = this.state.facet(EditorView.cursorScrollMargin);\n                    scrollTarget = new ScrollTarget(main.empty ? main : EditorSelection.cursor(main.head, main.head > main.anchor ? -1 : 1), \"nearest\", \"nearest\", y, x);\n                }\n                for (let e of tr.effects)\n                    if (e.is(scrollIntoView))\n                        scrollTarget = e.value.clip(this.state);\n            }\n            this.viewState.update(update, scrollTarget);\n            this.bidiCache = CachedOrder.update(this.bidiCache, update.changes);\n            if (!update.empty) {\n                this.updatePlugins(update);\n                this.inputState.update(update);\n            }\n            redrawn = this.docView.update(update);\n            if (this.state.facet(styleModule) != this.styleModules)\n                this.mountStyles();\n            attrsChanged = this.updateAttrs();\n            this.showAnnouncements(transactions);\n            this.docView.updateSelection(redrawn, transactions.some(tr => tr.isUserEvent(\"select.pointer\")));\n        }\n        finally {\n            this.updateState = 0 /* UpdateState.Idle */;\n        }\n        if (update.startState.facet(theme) != update.state.facet(theme))\n            this.viewState.mustMeasureContent = true;\n        if (redrawn || attrsChanged || scrollTarget || this.viewState.mustEnforceCursorAssoc || this.viewState.mustMeasureContent)\n            this.requestMeasure();\n        if (redrawn)\n            this.docViewUpdate();\n        if (!update.empty)\n            for (let listener of this.state.facet(updateListener)) {\n                try {\n                    listener(update);\n                }\n                catch (e) {\n                    logException(this.state, e, \"update listener\");\n                }\n            }\n        if (dispatchFocus || domChange)\n            Promise.resolve().then(() => {\n                if (dispatchFocus && this.state == dispatchFocus.startState)\n                    this.dispatch(dispatchFocus);\n                if (domChange) {\n                    if (!applyDOMChange(this, domChange) && pendingKey.force)\n                        dispatchKey(this.contentDOM, pendingKey.key, pendingKey.keyCode);\n                }\n            });\n    }\n    /**\n    Reset the view to the given state. (This will cause the entire\n    document to be redrawn and all view plugins to be reinitialized,\n    so you should probably only use it when the new state isn't\n    derived from the old state. Otherwise, use\n    [`dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch) instead.)\n    */\n    setState(newState) {\n        if (this.updateState != 0 /* UpdateState.Idle */)\n            throw new Error(\"Calls to EditorView.setState are not allowed while an update is in progress\");\n        if (this.destroyed) {\n            this.viewState.state = newState;\n            return;\n        }\n        this.updateState = 2 /* UpdateState.Updating */;\n        let hadFocus = this.hasFocus;\n        try {\n            for (let plugin of this.plugins)\n                plugin.destroy(this);\n            this.viewState = new ViewState(this, newState);\n            this.plugins = newState.facet(viewPlugin).map(spec => new PluginInstance(spec));\n            this.pluginMap.clear();\n            for (let plugin of this.plugins)\n                plugin.update(this);\n            this.docView.destroy();\n            this.docView = new DocView(this);\n            this.inputState.ensureHandlers(this.plugins);\n            this.mountStyles();\n            this.updateAttrs();\n            this.bidiCache = [];\n        }\n        finally {\n            this.updateState = 0 /* UpdateState.Idle */;\n        }\n        if (hadFocus)\n            this.focus();\n        this.requestMeasure();\n    }\n    updatePlugins(update) {\n        let prevSpecs = update.startState.facet(viewPlugin), specs = update.state.facet(viewPlugin);\n        if (prevSpecs != specs) {\n            let newPlugins = [];\n            for (let spec of specs) {\n                let found = prevSpecs.indexOf(spec);\n                if (found < 0) {\n                    newPlugins.push(new PluginInstance(spec));\n                }\n                else {\n                    let plugin = this.plugins[found];\n                    plugin.mustUpdate = update;\n                    newPlugins.push(plugin);\n                }\n            }\n            for (let plugin of this.plugins)\n                if (plugin.mustUpdate != update)\n                    plugin.destroy(this);\n            this.plugins = newPlugins;\n            this.pluginMap.clear();\n        }\n        else {\n            for (let p of this.plugins)\n                p.mustUpdate = update;\n        }\n        for (let i = 0; i < this.plugins.length; i++)\n            this.plugins[i].update(this);\n        if (prevSpecs != specs)\n            this.inputState.ensureHandlers(this.plugins);\n    }\n    docViewUpdate() {\n        for (let plugin of this.plugins) {\n            let val = plugin.value;\n            if (val && val.docViewUpdate) {\n                try {\n                    val.docViewUpdate(this);\n                }\n                catch (e) {\n                    logException(this.state, e, \"doc view update listener\");\n                }\n            }\n        }\n    }\n    /**\n    @internal\n    */\n    measure(flush = true) {\n        if (this.destroyed)\n            return;\n        if (this.measureScheduled > -1)\n            this.win.cancelAnimationFrame(this.measureScheduled);\n        if (this.observer.delayedAndroidKey) {\n            this.measureScheduled = -1;\n            this.requestMeasure();\n            return;\n        }\n        this.measureScheduled = 0; // Prevent requestMeasure calls from scheduling another animation frame\n        if (flush)\n            this.observer.forceFlush();\n        let updated = null;\n        let scroll = this.viewState.scrollParent, scrollOffset = this.viewState.getScrollOffset();\n        let { scrollAnchorPos, scrollAnchorHeight } = this.viewState;\n        if (Math.abs(scrollOffset - this.viewState.scrollOffset) > 1)\n            scrollAnchorHeight = -1;\n        this.viewState.scrollAnchorHeight = -1;\n        try {\n            for (let i = 0;; i++) {\n                if (scrollAnchorHeight < 0) {\n                    if (isScrolledToBottom(scroll || this.win)) {\n                        scrollAnchorPos = -1;\n                        scrollAnchorHeight = this.viewState.heightMap.height;\n                    }\n                    else {\n                        let block = this.viewState.scrollAnchorAt(scrollOffset);\n                        scrollAnchorPos = block.from;\n                        scrollAnchorHeight = block.top;\n                    }\n                }\n                this.updateState = 1 /* UpdateState.Measuring */;\n                let changed = this.viewState.measure();\n                if (!changed && !this.measureRequests.length && this.viewState.scrollTarget == null)\n                    break;\n                if (i > 5) {\n                    console.warn(this.measureRequests.length\n                        ? \"Measure loop restarted more than 5 times\"\n                        : \"Viewport failed to stabilize\");\n                    break;\n                }\n                let measuring = [];\n                // Only run measure requests in this cycle when the viewport didn't change\n                if (!(changed & 4 /* UpdateFlag.Viewport */))\n                    [this.measureRequests, measuring] = [measuring, this.measureRequests];\n                let measured = measuring.map(m => {\n                    try {\n                        return m.read(this);\n                    }\n                    catch (e) {\n                        logException(this.state, e);\n                        return BadMeasure;\n                    }\n                });\n                let update = ViewUpdate.create(this, this.state, []), redrawn = false;\n                update.flags |= changed;\n                if (!updated)\n                    updated = update;\n                else\n                    updated.flags |= changed;\n                this.updateState = 2 /* UpdateState.Updating */;\n                if (!update.empty) {\n                    this.updatePlugins(update);\n                    this.inputState.update(update);\n                    this.updateAttrs();\n                    redrawn = this.docView.update(update);\n                    if (redrawn)\n                        this.docViewUpdate();\n                }\n                for (let i = 0; i < measuring.length; i++)\n                    if (measured[i] != BadMeasure) {\n                        try {\n                            let m = measuring[i];\n                            if (m.write)\n                                m.write(measured[i], this);\n                        }\n                        catch (e) {\n                            logException(this.state, e);\n                        }\n                    }\n                if (redrawn)\n                    this.docView.updateSelection(true);\n                if (!update.viewportChanged && this.measureRequests.length == 0) {\n                    if (this.viewState.editorHeight) {\n                        if (this.viewState.scrollTarget) {\n                            this.docView.scrollIntoView(this.viewState.scrollTarget);\n                            this.viewState.scrollTarget = null;\n                            scrollAnchorHeight = -1;\n                            continue;\n                        }\n                        else {\n                            let newAnchorHeight = scrollAnchorPos < 0 ? this.viewState.heightMap.height :\n                                this.viewState.lineBlockAt(scrollAnchorPos).top;\n                            let diff = (newAnchorHeight - scrollAnchorHeight) / this.scaleY;\n                            if ((diff > 1 || diff < -1) &&\n                                (scroll == this.scrollDOM || this.hasFocus ||\n                                    Math.max(this.inputState.lastWheelEvent, this.inputState.lastTouchTime) > Date.now() - 100)) {\n                                scrollOffset = scrollOffset + diff;\n                                if (scroll)\n                                    scroll.scrollTop += diff;\n                                else\n                                    this.win.scrollBy(0, diff);\n                                scrollAnchorHeight = -1;\n                                continue;\n                            }\n                        }\n                    }\n                    break;\n                }\n            }\n        }\n        finally {\n            this.updateState = 0 /* UpdateState.Idle */;\n            this.measureScheduled = -1;\n        }\n        if (updated && !updated.empty)\n            for (let listener of this.state.facet(updateListener))\n                listener(updated);\n    }\n    /**\n    Get the CSS classes for the currently active editor themes.\n    */\n    get themeClasses() {\n        return baseThemeID + \" \" +\n            (this.state.facet(darkTheme) ? baseDarkID : baseLightID) + \" \" +\n            this.state.facet(theme);\n    }\n    updateAttrs() {\n        let editorAttrs = attrsFromFacet(this, editorAttributes, {\n            class: \"cm-editor\" + (this.hasFocus ? \" cm-focused \" : \" \") + this.themeClasses\n        });\n        let contentAttrs = {\n            spellcheck: \"false\",\n            autocorrect: \"off\",\n            autocapitalize: \"off\",\n            writingsuggestions: \"false\",\n            translate: \"no\",\n            contenteditable: !this.state.facet(editable) ? \"false\" : \"true\",\n            class: \"cm-content\",\n            style: `${browser.tabSize}: ${this.state.tabSize}`,\n            role: \"textbox\",\n            \"aria-multiline\": \"true\"\n        };\n        if (this.state.readOnly)\n            contentAttrs[\"aria-readonly\"] = \"true\";\n        attrsFromFacet(this, contentAttributes, contentAttrs);\n        let changed = this.observer.ignore(() => {\n            let changedContent = updateAttrs(this.contentDOM, this.contentAttrs, contentAttrs);\n            let changedEditor = updateAttrs(this.dom, this.editorAttrs, editorAttrs);\n            return changedContent || changedEditor;\n        });\n        this.editorAttrs = editorAttrs;\n        this.contentAttrs = contentAttrs;\n        return changed;\n    }\n    showAnnouncements(trs) {\n        let first = true;\n        for (let tr of trs)\n            for (let effect of tr.effects)\n                if (effect.is(EditorView.announce)) {\n                    if (first)\n                        this.announceDOM.textContent = \"\";\n                    first = false;\n                    let div = this.announceDOM.appendChild(document.createElement(\"div\"));\n                    div.textContent = effect.value;\n                }\n    }\n    mountStyles() {\n        this.styleModules = this.state.facet(styleModule);\n        let nonce = this.state.facet(EditorView.cspNonce);\n        StyleModule.mount(this.root, this.styleModules.concat(baseTheme$1).reverse(), nonce ? { nonce } : undefined);\n    }\n    readMeasured() {\n        if (this.updateState == 2 /* UpdateState.Updating */)\n            throw new Error(\"Reading the editor layout isn't allowed during an update\");\n        if (this.updateState == 0 /* UpdateState.Idle */ && this.measureScheduled > -1)\n            this.measure(false);\n    }\n    /**\n    Schedule a layout measurement, optionally providing callbacks to\n    do custom DOM measuring followed by a DOM write phase. Using\n    this is preferable reading DOM layout directly from, for\n    example, an event handler, because it'll make sure measuring and\n    drawing done by other components is synchronized, avoiding\n    unnecessary DOM layout computations.\n    */\n    requestMeasure(request) {\n        if (this.measureScheduled < 0)\n            this.measureScheduled = this.win.requestAnimationFrame(() => this.measure());\n        if (request) {\n            if (this.measureRequests.indexOf(request) > -1)\n                return;\n            if (request.key != null)\n                for (let i = 0; i < this.measureRequests.length; i++) {\n                    if (this.measureRequests[i].key === request.key) {\n                        this.measureRequests[i] = request;\n                        return;\n                    }\n                }\n            this.measureRequests.push(request);\n        }\n    }\n    /**\n    Get the value of a specific plugin, if present. Note that\n    plugins that crash can be dropped from a view, so even when you\n    know you registered a given plugin, it is recommended to check\n    the return value of this method.\n    */\n    plugin(plugin) {\n        let known = this.pluginMap.get(plugin);\n        if (known === undefined || known && known.plugin != plugin)\n            this.pluginMap.set(plugin, known = this.plugins.find(p => p.plugin == plugin) || null);\n        return known && known.update(this).value;\n    }\n    /**\n    The top position of the document, in screen coordinates. This\n    may be negative when the editor is scrolled down. Points\n    directly to the top of the first line, not above the padding.\n    */\n    get documentTop() {\n        return this.contentDOM.getBoundingClientRect().top + this.viewState.paddingTop;\n    }\n    /**\n    Reports the padding above and below the document.\n    */\n    get documentPadding() {\n        return { top: this.viewState.paddingTop, bottom: this.viewState.paddingBottom };\n    }\n    /**\n    If the editor is transformed with CSS, this provides the scale\n    along the X axis. Otherwise, it will just be 1. Note that\n    transforms other than translation and scaling are not supported.\n    */\n    get scaleX() { return this.viewState.scaleX; }\n    /**\n    Provide the CSS transformed scale along the Y axis.\n    */\n    get scaleY() { return this.viewState.scaleY; }\n    /**\n    Find the text line or block widget at the given vertical\n    position (which is interpreted as relative to the [top of the\n    document](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop)).\n    */\n    elementAtHeight(height) {\n        this.readMeasured();\n        return this.viewState.elementAtHeight(height);\n    }\n    /**\n    Find the line block (see\n    [`lineBlockAt`](https://codemirror.net/6/docs/ref/#view.EditorView.lineBlockAt)) at the given\n    height, again interpreted relative to the [top of the\n    document](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop).\n    */\n    lineBlockAtHeight(height) {\n        this.readMeasured();\n        return this.viewState.lineBlockAtHeight(height);\n    }\n    /**\n    Get the extent and vertical position of all [line\n    blocks](https://codemirror.net/6/docs/ref/#view.EditorView.lineBlockAt) in the viewport. Positions\n    are relative to the [top of the\n    document](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop);\n    */\n    get viewportLineBlocks() {\n        return this.viewState.viewportLines;\n    }\n    /**\n    Find the line block around the given document position. A line\n    block is a range delimited on both sides by either a\n    non-[hidden](https://codemirror.net/6/docs/ref/#view.Decoration^replace) line break, or the\n    start/end of the document. It will usually just hold a line of\n    text, but may be broken into multiple textblocks by block\n    widgets.\n    */\n    lineBlockAt(pos) {\n        return this.viewState.lineBlockAt(pos);\n    }\n    /**\n    The editor's total content height.\n    */\n    get contentHeight() {\n        return this.viewState.contentHeight;\n    }\n    /**\n    Move a cursor position by [grapheme\n    cluster](https://codemirror.net/6/docs/ref/#state.findClusterBreak). `forward` determines whether\n    the motion is away from the line start, or towards it. In\n    bidirectional text, the line is traversed in visual order, using\n    the editor's [text direction](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection).\n    When the start position was the last one on the line, the\n    returned position will be across the line break. If there is no\n    further line, the original position is returned.\n    \n    By default, this method moves over a single cluster. The\n    optional `by` argument can be used to move across more. It will\n    be called with the first cluster as argument, and should return\n    a predicate that determines, for each subsequent cluster,\n    whether it should also be moved over.\n    */\n    moveByChar(start, forward, by) {\n        return skipAtoms(this, start, moveByChar(this, start, forward, by));\n    }\n    /**\n    Move a cursor position across the next group of either\n    [letters](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer) or non-letter\n    non-whitespace characters.\n    */\n    moveByGroup(start, forward) {\n        return skipAtoms(this, start, moveByChar(this, start, forward, initial => byGroup(this, start.head, initial)));\n    }\n    /**\n    Get the cursor position visually at the start or end of a line.\n    Note that this may differ from the _logical_ position at its\n    start or end (which is simply at `line.from`/`line.to`) if text\n    at the start or end goes against the line's base text direction.\n    */\n    visualLineSide(line, end) {\n        let order = this.bidiSpans(line), dir = this.textDirectionAt(line.from);\n        let span = order[end ? order.length - 1 : 0];\n        return EditorSelection.cursor(span.side(end, dir) + line.from, span.forward(!end, dir) ? 1 : -1);\n    }\n    /**\n    Move to the next line boundary in the given direction. If\n    `includeWrap` is true, line wrapping is on, and there is a\n    further wrap point on the current line, the wrap point will be\n    returned. Otherwise this function will return the start or end\n    of the line.\n    */\n    moveToLineBoundary(start, forward, includeWrap = true) {\n        return moveToLineBoundary(this, start, forward, includeWrap);\n    }\n    /**\n    Move a cursor position vertically. When `distance` isn't given,\n    it defaults to moving to the next line (including wrapped\n    lines). Otherwise, `distance` should provide a positive distance\n    in pixels.\n    \n    When `start` has a\n    [`goalColumn`](https://codemirror.net/6/docs/ref/#state.SelectionRange.goalColumn), the vertical\n    motion will use that as a target horizontal position. Otherwise,\n    the cursor's own horizontal position is used. The returned\n    cursor will have its goal column set to whichever column was\n    used.\n    */\n    moveVertically(start, forward, distance) {\n        return skipAtoms(this, start, moveVertically(this, start, forward, distance));\n    }\n    /**\n    Find the DOM parent node and offset (child offset if `node` is\n    an element, character offset when it is a text node) at the\n    given document position.\n    \n    Note that for positions that aren't currently in\n    `visibleRanges`, the resulting DOM position isn't necessarily\n    meaningful (it may just point before or after a placeholder\n    element).\n    */\n    domAtPos(pos, side = 1) {\n        return this.docView.domAtPos(pos, side);\n    }\n    /**\n    Find the document position at the given DOM node. Can be useful\n    for associating positions with DOM events. Will raise an error\n    when `node` isn't part of the editor content.\n    */\n    posAtDOM(node, offset = 0) {\n        return this.docView.posFromDOM(node, offset);\n    }\n    posAtCoords(coords, precise = true) {\n        this.readMeasured();\n        let found = posAtCoords(this, coords, precise);\n        return found && found.pos;\n    }\n    posAndSideAtCoords(coords, precise = true) {\n        this.readMeasured();\n        return posAtCoords(this, coords, precise);\n    }\n    /**\n    Get the screen coordinates at the given document position.\n    `side` determines whether the coordinates are based on the\n    element before (-1) or after (1) the position (if no element is\n    available on the given side, the method will transparently use\n    another strategy to get reasonable coordinates).\n    */\n    coordsAtPos(pos, side = 1) {\n        this.readMeasured();\n        let rect = this.docView.coordsAt(pos, side);\n        if (!rect || rect.left == rect.right)\n            return rect;\n        let line = this.state.doc.lineAt(pos), order = this.bidiSpans(line);\n        let span = order[BidiSpan.find(order, pos - line.from, -1, side)];\n        return flattenRect(rect, (span.dir == Direction.LTR) == (side > 0));\n    }\n    /**\n    Return the rectangle around a given character. If `pos` does not\n    point in front of a character that is in the viewport and\n    rendered (i.e. not replaced, not a line break), this will return\n    null. For space characters that are a line wrap point, this will\n    return the position before the line break.\n    */\n    coordsForChar(pos) {\n        this.readMeasured();\n        return this.docView.coordsForChar(pos);\n    }\n    /**\n    The default width of a character in the editor. May not\n    accurately reflect the width of all characters (given variable\n    width fonts or styling of invididual ranges).\n    */\n    get defaultCharacterWidth() { return this.viewState.heightOracle.charWidth; }\n    /**\n    The default height of a line in the editor. May not be accurate\n    for all lines.\n    */\n    get defaultLineHeight() { return this.viewState.heightOracle.lineHeight; }\n    /**\n    The text direction\n    ([`direction`](https://developer.mozilla.org/en-US/docs/Web/CSS/direction)\n    CSS property) of the editor's content element.\n    */\n    get textDirection() { return this.viewState.defaultTextDirection; }\n    /**\n    Find the text direction of the block at the given position, as\n    assigned by CSS. If\n    [`perLineTextDirection`](https://codemirror.net/6/docs/ref/#view.EditorView^perLineTextDirection)\n    isn't enabled, or the given position is outside of the viewport,\n    this will always return the same as\n    [`textDirection`](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection). Note that\n    this may trigger a DOM layout.\n    */\n    textDirectionAt(pos) {\n        let perLine = this.state.facet(perLineTextDirection);\n        if (!perLine || pos < this.viewport.from || pos > this.viewport.to)\n            return this.textDirection;\n        this.readMeasured();\n        return this.docView.textDirectionAt(pos);\n    }\n    /**\n    Whether this editor [wraps lines](https://codemirror.net/6/docs/ref/#view.EditorView.lineWrapping)\n    (as determined by the\n    [`white-space`](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space)\n    CSS property of its content element).\n    */\n    get lineWrapping() { return this.viewState.heightOracle.lineWrapping; }\n    /**\n    Returns the bidirectional text structure of the given line\n    (which should be in the current document) as an array of span\n    objects. The order of these spans matches the [text\n    direction](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection)—if that is\n    left-to-right, the leftmost spans come first, otherwise the\n    rightmost spans come first.\n    */\n    bidiSpans(line) {\n        if (line.length > MaxBidiLine)\n            return trivialOrder(line.length);\n        let dir = this.textDirectionAt(line.from), isolates;\n        for (let entry of this.bidiCache) {\n            if (entry.from == line.from && entry.dir == dir &&\n                (entry.fresh || isolatesEq(entry.isolates, isolates = getIsolatedRanges(this, line))))\n                return entry.order;\n        }\n        if (!isolates)\n            isolates = getIsolatedRanges(this, line);\n        let order = computeOrder(line.text, dir, isolates);\n        this.bidiCache.push(new CachedOrder(line.from, line.to, dir, isolates, true, order));\n        return order;\n    }\n    /**\n    Check whether the editor has focus.\n    */\n    get hasFocus() {\n        var _a;\n        // Safari return false for hasFocus when the context menu is open\n        // or closing, which leads us to ignore selection changes from the\n        // context menu because it looks like the editor isn't focused.\n        // This kludges around that.\n        return (this.dom.ownerDocument.hasFocus() || browser.safari && ((_a = this.inputState) === null || _a === void 0 ? void 0 : _a.lastContextMenu) > Date.now() - 3e4) &&\n            this.root.activeElement == this.contentDOM;\n    }\n    /**\n    Put focus on the editor.\n    */\n    focus() {\n        this.observer.ignore(() => {\n            focusPreventScroll(this.contentDOM);\n            this.docView.updateSelection();\n        });\n    }\n    /**\n    Update the [root](https://codemirror.net/6/docs/ref/##view.EditorViewConfig.root) in which the editor lives. This is only\n    necessary when moving the editor's existing DOM to a new window or shadow root.\n    */\n    setRoot(root) {\n        if (this._root != root) {\n            this._root = root;\n            this.observer.setWindow((root.nodeType == 9 ? root : root.ownerDocument).defaultView || window);\n            this.mountStyles();\n        }\n    }\n    /**\n    Clean up this editor view, removing its element from the\n    document, unregistering event handlers, and notifying\n    plugins. The view instance can no longer be used after\n    calling this.\n    */\n    destroy() {\n        if (this.root.activeElement == this.contentDOM)\n            this.contentDOM.blur();\n        for (let plugin of this.plugins)\n            plugin.destroy(this);\n        this.plugins = [];\n        this.inputState.destroy();\n        this.docView.destroy();\n        this.dom.remove();\n        this.observer.destroy();\n        if (this.measureScheduled > -1)\n            this.win.cancelAnimationFrame(this.measureScheduled);\n        this.destroyed = true;\n    }\n    /**\n    Returns an effect that can be\n    [added](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) to a transaction to\n    cause it to scroll the given position or range into view.\n    */\n    static scrollIntoView(pos, options = {}) {\n        var _a, _b, _c, _d;\n        return scrollIntoView.of(new ScrollTarget(typeof pos == \"number\" ? EditorSelection.cursor(pos) : pos, (_a = options.y) !== null && _a !== void 0 ? _a : \"nearest\", (_b = options.x) !== null && _b !== void 0 ? _b : \"nearest\", (_c = options.yMargin) !== null && _c !== void 0 ? _c : 5, (_d = options.xMargin) !== null && _d !== void 0 ? _d : 5));\n    }\n    /**\n    Return an effect that resets the editor to its current (at the\n    time this method was called) scroll position. Note that this\n    only affects the editor's own scrollable element, not parents.\n    See also\n    [`EditorViewConfig.scrollTo`](https://codemirror.net/6/docs/ref/#view.EditorViewConfig.scrollTo).\n    \n    The effect should be used with a document identical to the one\n    it was created for. Failing to do so is not an error, but may\n    not scroll to the expected position. You can\n    [map](https://codemirror.net/6/docs/ref/#state.StateEffect.map) the effect to account for changes.\n    */\n    scrollSnapshot() {\n        let { scrollTop, scrollLeft } = this.scrollDOM;\n        let ref = this.viewState.scrollAnchorAt(scrollTop);\n        return scrollIntoView.of(new ScrollTarget(EditorSelection.cursor(ref.from), \"start\", \"start\", ref.top - scrollTop, scrollLeft, true));\n    }\n    /**\n    Enable or disable tab-focus mode, which disables key bindings\n    for Tab and Shift-Tab, letting the browser's default\n    focus-changing behavior go through instead. This is useful to\n    prevent trapping keyboard users in your editor.\n    \n    Without argument, this toggles the mode. With a boolean, it\n    enables (true) or disables it (false). Given a number, it\n    temporarily enables the mode until that number of milliseconds\n    have passed or another non-Tab key is pressed.\n    */\n    setTabFocusMode(to) {\n        if (to == null)\n            this.inputState.tabFocusMode = this.inputState.tabFocusMode < 0 ? 0 : -1;\n        else if (typeof to == \"boolean\")\n            this.inputState.tabFocusMode = to ? 0 : -1;\n        else if (this.inputState.tabFocusMode != 0)\n            this.inputState.tabFocusMode = Date.now() + to;\n    }\n    /**\n    Returns an extension that can be used to add DOM event handlers.\n    The value should be an object mapping event names to handler\n    functions. For any given event, such functions are ordered by\n    extension precedence, and the first handler to return true will\n    be assumed to have handled that event, and no other handlers or\n    built-in behavior will be activated for it. These are registered\n    on the [content element](https://codemirror.net/6/docs/ref/#view.EditorView.contentDOM), except\n    for `scroll` handlers, which will be called any time the\n    editor's [scroll element](https://codemirror.net/6/docs/ref/#view.EditorView.scrollDOM) or one of\n    its parent nodes is scrolled.\n    */\n    static domEventHandlers(handlers) {\n        return ViewPlugin.define(() => ({}), { eventHandlers: handlers });\n    }\n    /**\n    Create an extension that registers DOM event observers. Contrary\n    to event [handlers](https://codemirror.net/6/docs/ref/#view.EditorView^domEventHandlers),\n    observers can't be prevented from running by a higher-precedence\n    handler returning true. They also don't prevent other handlers\n    and observers from running when they return true, and should not\n    call `preventDefault`.\n    */\n    static domEventObservers(observers) {\n        return ViewPlugin.define(() => ({}), { eventObservers: observers });\n    }\n    /**\n    Create a theme extension. The first argument can be a\n    [`style-mod`](https://code.haverbeke.berlin/marijn/style-mod#documentation)\n    style spec providing the styles for the theme. These will be\n    prefixed with a generated class for the style.\n    \n    Because the selectors will be prefixed with a scope class, rule\n    that directly match the editor's [wrapper\n    element](https://codemirror.net/6/docs/ref/#view.EditorView.dom)—to which the scope class will be\n    added—need to be explicitly differentiated by adding an `&` to\n    the selector for that element—for example\n    `&.cm-focused`.\n    \n    When `dark` is set to true, the theme will be marked as dark,\n    which will cause the `&dark` rules from [base\n    themes](https://codemirror.net/6/docs/ref/#view.EditorView^baseTheme) to be used (as opposed to\n    `&light` when a light theme is active).\n    */\n    static theme(spec, options) {\n        let prefix = StyleModule.newName();\n        let result = [theme.of(prefix), styleModule.of(buildTheme(`.${prefix}`, spec))];\n        if (options && options.dark)\n            result.push(darkTheme.of(true));\n        return result;\n    }\n    /**\n    Create an extension that adds styles to the base theme. Like\n    with [`theme`](https://codemirror.net/6/docs/ref/#view.EditorView^theme), use `&` to indicate the\n    place of the editor wrapper element when directly targeting\n    that. You can also use `&dark` or `&light` instead to only\n    target editors with a dark or light theme.\n    */\n    static baseTheme(spec) {\n        return Prec.lowest(styleModule.of(buildTheme(\".\" + baseThemeID, spec, lightDarkIDs)));\n    }\n    /**\n    Retrieve an editor view instance from the view's DOM\n    representation.\n    */\n    static findFromDOM(dom) {\n        var _a;\n        let content = dom.querySelector(\".cm-content\");\n        let tile = content && Tile.get(content) || Tile.get(dom);\n        return ((_a = tile === null || tile === void 0 ? void 0 : tile.root) === null || _a === void 0 ? void 0 : _a.view) || null;\n    }\n}\n/**\nFacet to add a [style\nmodule](https://code.haverbeke.berlin/marijn/style-mod#documentation) to\nan editor view. The view will ensure that the module is\nmounted in its [document\nroot](https://codemirror.net/6/docs/ref/#view.EditorView.constructor^config.root).\n*/\nEditorView.styleModule = styleModule;\n/**\nAn input handler can override the way changes to the editable\nDOM content are handled. Handlers are passed the document\npositions between which the change was found, and the new\ncontent. When one returns true, no further input handlers are\ncalled and the default behavior is prevented.\n\nThe `insert` argument can be used to get the default transaction\nthat would be applied for this input. This can be useful when\ndispatching the custom behavior as a separate transaction.\n*/\nEditorView.inputHandler = inputHandler;\n/**\nFunctions provided in this facet will be used to transform text\npasted or dropped into the editor.\n*/\nEditorView.clipboardInputFilter = clipboardInputFilter;\n/**\nTransform text copied or dragged from the editor.\n*/\nEditorView.clipboardOutputFilter = clipboardOutputFilter;\n/**\nScroll handlers can override how things are scrolled into view.\nIf they return `true`, no further handling happens for the\nscrolling. If they return false, the default scroll behavior is\napplied. Scroll handlers should never initiate editor updates.\n*/\nEditorView.scrollHandler = scrollHandler;\n/**\nThis facet can be used to provide functions that create effects\nto be dispatched when the editor's focus state changes.\n*/\nEditorView.focusChangeEffect = focusChangeEffect;\n/**\nBy default, the editor assumes all its content has the same\n[text direction](https://codemirror.net/6/docs/ref/#view.Direction). Configure this with a `true`\nvalue to make it read the text direction of every (rendered)\nline separately.\n*/\nEditorView.perLineTextDirection = perLineTextDirection;\n/**\nAllows you to provide a function that should be called when the\nlibrary catches an exception from an extension (mostly from view\nplugins, but may be used by other extensions to route exceptions\nfrom user-code-provided callbacks). This is mostly useful for\ndebugging and logging. See [`logException`](https://codemirror.net/6/docs/ref/#view.logException).\n*/\nEditorView.exceptionSink = exceptionSink;\n/**\nA facet that can be used to register a function to be called\nevery time the view updates.\n*/\nEditorView.updateListener = updateListener;\n/**\nFacet that controls whether the editor content DOM is editable.\nWhen its highest-precedence value is `false`, the element will\nnot have its `contenteditable` attribute set. (Note that this\ndoesn't affect API calls that change the editor content, even\nwhen those are bound to keys or buttons. See the\n[`readOnly`](https://codemirror.net/6/docs/ref/#state.EditorState.readOnly) facet for that.)\n*/\nEditorView.editable = editable;\n/**\nAllows you to influence the way mouse selection happens. The\nfunctions in this facet will be called for a `mousedown` event\non the editor, and can return an object that overrides the way a\nselection is computed from that mouse click or drag.\n*/\nEditorView.mouseSelectionStyle = mouseSelectionStyle;\n/**\nFacet used to configure whether a given selection drag event\nshould move or copy the selection. The given predicate will be\ncalled with the `mousedown` event, and can return `true` when\nthe drag should move the content.\n*/\nEditorView.dragMovesSelection = dragMovesSelection$1;\n/**\nFacet used to configure whether a given selecting click adds a\nnew range to the existing selection or replaces it entirely. The\ndefault behavior is to check `event.metaKey` on macOS, and\n`event.ctrlKey` elsewhere.\n*/\nEditorView.clickAddsSelectionRange = clickAddsSelectionRange;\n/**\nA facet that determines which [decorations](https://codemirror.net/6/docs/ref/#view.Decoration)\nare shown in the view. Decorations can be provided in two\nways—directly, or via a function that takes an editor view.\n\nOnly decoration sets provided directly are allowed to influence\nthe editor's vertical layout structure. The ones provided as\nfunctions are called _after_ the new viewport has been computed,\nand thus **must not** introduce block widgets or replacing\ndecorations that cover line breaks.\n\nIf you want decorated ranges to behave like atomic units for\ncursor motion and deletion purposes, also provide the range set\ncontaining the decorations to\n[`EditorView.atomicRanges`](https://codemirror.net/6/docs/ref/#view.EditorView^atomicRanges).\n*/\nEditorView.decorations = decorations;\n/**\n[Block wrappers](https://codemirror.net/6/docs/ref/#view.BlockWrapper) provide a way to add DOM\nstructure around editor lines and block widgets. Sets of\nwrappers are provided in a similar way to decorations, and are\nnested in a similar way when they overlap. A wrapper affects all\nlines and block widgets that start inside its range.\n*/\nEditorView.blockWrappers = blockWrappers;\n/**\nFacet that works much like\n[`decorations`](https://codemirror.net/6/docs/ref/#view.EditorView^decorations), but puts its\ninputs at the very bottom of the precedence stack, meaning mark\ndecorations provided here will only be split by other, partially\noverlapping `outerDecorations` ranges, and wrap around all\nregular decorations. Use this for mark elements that should, as\nmuch as possible, remain in one piece.\n*/\nEditorView.outerDecorations = outerDecorations;\n/**\nUsed to provide ranges that should be treated as atoms as far as\ncursor motion is concerned. This causes methods like\n[`moveByChar`](https://codemirror.net/6/docs/ref/#view.EditorView.moveByChar) and\n[`moveVertically`](https://codemirror.net/6/docs/ref/#view.EditorView.moveVertically) (and the\ncommands built on top of them) to skip across such regions when\na selection endpoint would enter them. This does _not_ prevent\ndirect programmatic [selection\nupdates](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection) from moving into such\nregions.\n*/\nEditorView.atomicRanges = atomicRanges;\n/**\nWhen range decorations add a `unicode-bidi: isolate` style, they\nshould also include a\n[`bidiIsolate`](https://codemirror.net/6/docs/ref/#view.MarkDecorationSpec.bidiIsolate) property\nin their decoration spec, and be exposed through this facet, so\nthat the editor can compute the proper text order. (Other values\nfor `unicode-bidi`, except of course `normal`, are not\nsupported.)\n*/\nEditorView.bidiIsolatedRanges = bidiIsolatedRanges;\n/**\nCan be used to specify the distance that scrolling cursor into\nview keeps it away from the sides of the editor, either as a\nsingle pixel number or two different values for the different\naxes. Defaults to 5 pixels on both axes.\n*/\nEditorView.cursorScrollMargin = /*@__PURE__*/Facet.define({\n    combine: inputs => {\n        let x = 5, y = 5;\n        for (let i of inputs) {\n            if (typeof i == \"number\")\n                x = y = i;\n            else\n                ({ x, y } = i);\n        }\n        return { x, y };\n    }\n});\n/**\nFacet that allows extensions to provide additional scroll\nmargins (space around the sides of the scrolling element that\nshould be considered invisible). This can be useful when the\nplugin introduces elements that cover part of that element (for\nexample a horizontally fixed gutter). Not to be confused with\n[`cursorScrollMargin`](https://codemirror.net/6/docs/ref/#view.EditorView^cursorScrollMargin).\n*/\nEditorView.scrollMargins = scrollMargins;\n/**\nThis facet records whether a dark theme is active. The extension\nreturned by [`theme`](https://codemirror.net/6/docs/ref/#view.EditorView^theme) automatically\nincludes an instance of this when the `dark` option is set to\ntrue.\n*/\nEditorView.darkTheme = darkTheme;\n/**\nProvides a Content Security Policy nonce to use when creating\nthe style sheets for the editor. Holds the empty string when no\nnonce has been provided.\n*/\nEditorView.cspNonce = /*@__PURE__*/Facet.define({ combine: values => values.length ? values[0] : \"\" });\n/**\nFacet that provides additional DOM attributes for the editor's\neditable DOM element.\n*/\nEditorView.contentAttributes = contentAttributes;\n/**\nFacet that provides DOM attributes for the editor's outer\nelement.\n*/\nEditorView.editorAttributes = editorAttributes;\n/**\nAn extension that enables line wrapping in the editor (by\nsetting CSS `white-space` to `pre-wrap` in the content).\n*/\nEditorView.lineWrapping = /*@__PURE__*/EditorView.contentAttributes.of({ \"class\": \"cm-lineWrapping\" });\n/**\nState effect used to include screen reader announcements in a\ntransaction. These will be added to the DOM in a visually hidden\nelement with `aria-live=\"polite\"` set, and should be used to\ndescribe effects that are visually obvious but may not be\nnoticed by screen reader users (such as moving to the next\nsearch match).\n*/\nEditorView.announce = /*@__PURE__*/StateEffect.define();\n// Maximum line length for which we compute accurate bidi info\nconst MaxBidiLine = 4096;\nconst BadMeasure = {};\nclass CachedOrder {\n    constructor(from, to, dir, isolates, fresh, order) {\n        this.from = from;\n        this.to = to;\n        this.dir = dir;\n        this.isolates = isolates;\n        this.fresh = fresh;\n        this.order = order;\n    }\n    static update(cache, changes) {\n        if (changes.empty && !cache.some(c => c.fresh))\n            return cache;\n        let result = [], lastDir = cache.length ? cache[cache.length - 1].dir : Direction.LTR;\n        for (let i = Math.max(0, cache.length - 10); i < cache.length; i++) {\n            let entry = cache[i];\n            if (entry.dir == lastDir && !changes.touchesRange(entry.from, entry.to))\n                result.push(new CachedOrder(changes.mapPos(entry.from, 1), changes.mapPos(entry.to, -1), entry.dir, entry.isolates, false, entry.order));\n        }\n        return result;\n    }\n}\nfunction attrsFromFacet(view, facet, base) {\n    for (let sources = view.state.facet(facet), i = sources.length - 1; i >= 0; i--) {\n        let source = sources[i], value = typeof source == \"function\" ? source(view) : source;\n        if (value)\n            combineAttrs(value, base);\n    }\n    return base;\n}\n\nconst currentPlatform = browser.mac ? \"mac\" : browser.windows ? \"win\" : browser.linux ? \"linux\" : \"key\";\nfunction normalizeKeyName(name, platform) {\n    const parts = name.split(/-(?!$)/);\n    let result = parts[parts.length - 1];\n    if (result == \"Space\")\n        result = \" \";\n    let alt, ctrl, shift, meta;\n    for (let i = 0; i < parts.length - 1; ++i) {\n        const mod = parts[i];\n        if (/^(cmd|meta|m)$/i.test(mod))\n            meta = true;\n        else if (/^a(lt)?$/i.test(mod))\n            alt = true;\n        else if (/^(c|ctrl|control)$/i.test(mod))\n            ctrl = true;\n        else if (/^s(hift)?$/i.test(mod))\n            shift = true;\n        else if (/^mod$/i.test(mod)) {\n            if (platform == \"mac\")\n                meta = true;\n            else\n                ctrl = true;\n        }\n        else\n            throw new Error(\"Unrecognized modifier name: \" + mod);\n    }\n    if (alt)\n        result = \"Alt-\" + result;\n    if (ctrl)\n        result = \"Ctrl-\" + result;\n    if (meta)\n        result = \"Meta-\" + result;\n    if (shift)\n        result = \"Shift-\" + result;\n    return result;\n}\nfunction modifiers(name, event, shift) {\n    if (event.altKey)\n        name = \"Alt-\" + name;\n    if (event.ctrlKey)\n        name = \"Ctrl-\" + name;\n    if (event.metaKey)\n        name = \"Meta-\" + name;\n    if (shift !== false && event.shiftKey)\n        name = \"Shift-\" + name;\n    return name;\n}\nconst handleKeyEvents = /*@__PURE__*/Prec.default(/*@__PURE__*/EditorView.domEventHandlers({\n    keydown(event, view) {\n        return runHandlers(getKeymap(view.state), event, view, \"editor\");\n    }\n}));\n/**\nFacet used for registering keymaps.\n\nYou can add multiple keymaps to an editor. Their priorities\ndetermine their precedence (the ones specified early or with high\npriority get checked first). When a handler has returned `true`\nfor a given key, no further handlers are called.\n*/\nconst keymap = /*@__PURE__*/Facet.define({ enables: handleKeyEvents });\nconst Keymaps = /*@__PURE__*/new WeakMap();\n// This is hidden behind an indirection, rather than directly computed\n// by the facet, to keep internal types out of the facet's type.\nfunction getKeymap(state) {\n    let bindings = state.facet(keymap);\n    let map = Keymaps.get(bindings);\n    if (!map)\n        Keymaps.set(bindings, map = buildKeymap(bindings.reduce((a, b) => a.concat(b), [])));\n    return map;\n}\n/**\nRun the key handlers registered for a given scope. The event\nobject should be a `\"keydown\"` event. Returns true if any of the\nhandlers handled it.\n*/\nfunction runScopeHandlers(view, event, scope) {\n    return runHandlers(getKeymap(view.state), event, view, scope);\n}\nlet storedPrefix = null;\nconst PrefixTimeout = 4000;\nfunction buildKeymap(bindings, platform = currentPlatform) {\n    let bound = Object.create(null);\n    let isPrefix = Object.create(null);\n    let checkPrefix = (name, is) => {\n        let current = isPrefix[name];\n        if (current == null)\n            isPrefix[name] = is;\n        else if (current != is)\n            throw new Error(\"Key binding \" + name + \" is used both as a regular binding and as a multi-stroke prefix\");\n    };\n    let add = (scope, key, command, preventDefault, stopPropagation) => {\n        var _a, _b;\n        let scopeObj = bound[scope] || (bound[scope] = Object.create(null));\n        let parts = key.split(/ (?!$)/).map(k => normalizeKeyName(k, platform));\n        for (let i = 1; i < parts.length; i++) {\n            let prefix = parts.slice(0, i).join(\" \");\n            checkPrefix(prefix, true);\n            if (!scopeObj[prefix])\n                scopeObj[prefix] = {\n                    preventDefault: true,\n                    stopPropagation: false,\n                    run: [(view) => {\n                            let ourObj = storedPrefix = { view, prefix, scope };\n                            setTimeout(() => { if (storedPrefix == ourObj)\n                                storedPrefix = null; }, PrefixTimeout);\n                            return true;\n                        }]\n                };\n        }\n        let full = parts.join(\" \");\n        checkPrefix(full, false);\n        let binding = scopeObj[full] || (scopeObj[full] = {\n            preventDefault: false,\n            stopPropagation: false,\n            run: ((_b = (_a = scopeObj._any) === null || _a === void 0 ? void 0 : _a.run) === null || _b === void 0 ? void 0 : _b.slice()) || []\n        });\n        if (command)\n            binding.run.push(command);\n        if (preventDefault)\n            binding.preventDefault = true;\n        if (stopPropagation)\n            binding.stopPropagation = true;\n    };\n    for (let b of bindings) {\n        let scopes = b.scope ? b.scope.split(\" \") : [\"editor\"];\n        if (b.any)\n            for (let scope of scopes) {\n                let scopeObj = bound[scope] || (bound[scope] = Object.create(null));\n                if (!scopeObj._any)\n                    scopeObj._any = { preventDefault: false, stopPropagation: false, run: [] };\n                let { any } = b;\n                for (let key in scopeObj)\n                    scopeObj[key].run.push(view => any(view, currentKeyEvent));\n            }\n        let name = b[platform] || b.key;\n        if (!name)\n            continue;\n        for (let scope of scopes) {\n            add(scope, name, b.run, b.preventDefault, b.stopPropagation);\n            if (b.shift)\n                add(scope, \"Shift-\" + name, b.shift, b.preventDefault, b.stopPropagation);\n        }\n    }\n    return bound;\n}\nlet currentKeyEvent = null;\nfunction runHandlers(map, event, view, scope) {\n    currentKeyEvent = event;\n    let name = keyName(event);\n    let charCode = codePointAt(name, 0), isChar = codePointSize(charCode) == name.length && name != \" \";\n    let prefix = \"\", handled = false, prevented = false, stopPropagation = false;\n    if (storedPrefix && storedPrefix.view == view && storedPrefix.scope == scope) {\n        prefix = storedPrefix.prefix + \" \";\n        if (modifierCodes.indexOf(event.keyCode) < 0) {\n            prevented = true;\n            storedPrefix = null;\n        }\n    }\n    let ran = new Set;\n    let runFor = (binding) => {\n        if (binding) {\n            for (let cmd of binding.run)\n                if (!ran.has(cmd)) {\n                    ran.add(cmd);\n                    if (cmd(view)) {\n                        if (binding.stopPropagation)\n                            stopPropagation = true;\n                        return true;\n                    }\n                }\n            if (binding.preventDefault) {\n                if (binding.stopPropagation)\n                    stopPropagation = true;\n                prevented = true;\n            }\n        }\n        return false;\n    };\n    let scopeObj = map[scope], baseName, shiftName;\n    if (scopeObj) {\n        if (runFor(scopeObj[prefix + modifiers(name, event, !isChar)])) {\n            handled = true;\n        }\n        else if (isChar && (event.altKey || event.metaKey || event.ctrlKey) &&\n            // Ctrl-Alt may be used for AltGr on Windows\n            !(browser.windows && event.ctrlKey && event.altKey) &&\n            // Alt-combinations on macOS tend to be typed characters\n            !(browser.mac && event.altKey && !(event.ctrlKey || event.metaKey)) &&\n            (baseName = base[event.keyCode]) && baseName != name) {\n            if (runFor(scopeObj[prefix + modifiers(baseName, event, true)])) {\n                handled = true;\n            }\n            else if (event.shiftKey && (shiftName = shift[event.keyCode]) != name && shiftName != baseName &&\n                runFor(scopeObj[prefix + modifiers(shiftName, event, false)])) {\n                handled = true;\n            }\n        }\n        else if (isChar && event.shiftKey &&\n            runFor(scopeObj[prefix + modifiers(name, event, true)])) {\n            handled = true;\n        }\n        if (!handled && runFor(scopeObj._any))\n            handled = true;\n    }\n    if (prevented)\n        handled = true;\n    if (handled && stopPropagation)\n        event.stopPropagation();\n    currentKeyEvent = null;\n    return handled;\n}\n\n/**\nImplementation of [`LayerMarker`](https://codemirror.net/6/docs/ref/#view.LayerMarker) that creates\na rectangle at a given set of coordinates.\n*/\nclass RectangleMarker {\n    /**\n    Create a marker with the given class and dimensions. If `width`\n    is null, the DOM element will get no width style.\n    */\n    constructor(className, \n    /**\n    The left position of the marker (in pixels, document-relative).\n    */\n    left, \n    /**\n    The top position of the marker.\n    */\n    top, \n    /**\n    The width of the marker, or null if it shouldn't get a width assigned.\n    */\n    width, \n    /**\n    The height of the marker.\n    */\n    height) {\n        this.className = className;\n        this.left = left;\n        this.top = top;\n        this.width = width;\n        this.height = height;\n    }\n    draw() {\n        let elt = document.createElement(\"div\");\n        elt.className = this.className;\n        this.adjust(elt);\n        return elt;\n    }\n    update(elt, prev) {\n        if (prev.className != this.className)\n            return false;\n        this.adjust(elt);\n        return true;\n    }\n    adjust(elt) {\n        elt.style.left = this.left + \"px\";\n        elt.style.top = this.top + \"px\";\n        if (this.width != null)\n            elt.style.width = this.width + \"px\";\n        elt.style.height = this.height + \"px\";\n    }\n    eq(p) {\n        return this.left == p.left && this.top == p.top && this.width == p.width && this.height == p.height &&\n            this.className == p.className;\n    }\n    /**\n    Create a set of rectangles for the given selection range,\n    assigning them theclass`className`. Will create a single\n    rectangle for empty ranges, and a set of selection-style\n    rectangles covering the range's content (in a bidi-aware\n    way) for non-empty ones.\n    */\n    static forRange(view, className, range) {\n        if (range.empty) {\n            let pos = view.coordsAtPos(range.head, range.assoc || 1);\n            if (!pos)\n                return [];\n            let base = getBase(view);\n            return [new RectangleMarker(className, pos.left - base.left, pos.top - base.top, null, pos.bottom - pos.top)];\n        }\n        else {\n            return rectanglesForRange(view, className, range);\n        }\n    }\n}\nfunction getBase(view) {\n    let rect = view.scrollDOM.getBoundingClientRect();\n    let left = view.textDirection == Direction.LTR ? rect.left : rect.right - view.scrollDOM.clientWidth * view.scaleX;\n    return { left: left - view.scrollDOM.scrollLeft * view.scaleX, top: rect.top - view.scrollDOM.scrollTop * view.scaleY };\n}\nfunction wrappedLine(view, pos, side, inside) {\n    let coords = view.coordsAtPos(pos, side * 2);\n    if (!coords)\n        return inside;\n    let editorRect = view.dom.getBoundingClientRect();\n    let y = (coords.top + coords.bottom) / 2;\n    let left = view.posAtCoords({ x: editorRect.left + 1, y });\n    let right = view.posAtCoords({ x: editorRect.right - 1, y });\n    if (left == null || right == null)\n        return inside;\n    return { from: Math.max(inside.from, Math.min(left, right)), to: Math.min(inside.to, Math.max(left, right)) };\n}\nfunction rectanglesForRange(view, className, range) {\n    if (range.to <= view.viewport.from || range.from >= view.viewport.to)\n        return [];\n    let from = Math.max(range.from, view.viewport.from), to = Math.min(range.to, view.viewport.to);\n    let ltr = view.textDirection == Direction.LTR;\n    let content = view.contentDOM, contentRect = content.getBoundingClientRect(), base = getBase(view);\n    let lineElt = content.querySelector(\".cm-line\"), lineStyle = lineElt && window.getComputedStyle(lineElt);\n    let leftSide = contentRect.left +\n        (lineStyle ? parseInt(lineStyle.paddingLeft) + Math.min(0, parseInt(lineStyle.textIndent)) : 0);\n    let rightSide = contentRect.right - (lineStyle ? parseInt(lineStyle.paddingRight) : 0);\n    let startBlock = blockAt(view, from, 1), endBlock = blockAt(view, to, -1);\n    let visualStart = startBlock.type == BlockType.Text ? startBlock : null;\n    let visualEnd = endBlock.type == BlockType.Text ? endBlock : null;\n    if (visualStart && (view.lineWrapping || startBlock.widgetLineBreaks))\n        visualStart = wrappedLine(view, from, 1, visualStart);\n    if (visualEnd && (view.lineWrapping || endBlock.widgetLineBreaks))\n        visualEnd = wrappedLine(view, to, -1, visualEnd);\n    if (visualStart && visualEnd && visualStart.from == visualEnd.from && visualStart.to == visualEnd.to) {\n        return pieces(drawForLine(range.from, range.to, visualStart));\n    }\n    else {\n        let top = visualStart ? drawForLine(range.from, null, visualStart) : drawForWidget(startBlock, false);\n        let bottom = visualEnd ? drawForLine(null, range.to, visualEnd) : drawForWidget(endBlock, true);\n        let between = [];\n        if ((visualStart || startBlock).to < (visualEnd || endBlock).from - (visualStart && visualEnd ? 1 : 0) ||\n            startBlock.widgetLineBreaks > 1 && top.bottom + view.defaultLineHeight / 2 < bottom.top)\n            between.push(piece(leftSide, top.bottom, rightSide, bottom.top));\n        else if (top.bottom < bottom.top && view.elementAtHeight((top.bottom + bottom.top) / 2).type == BlockType.Text)\n            top.bottom = bottom.top = (top.bottom + bottom.top) / 2;\n        return pieces(top).concat(between).concat(pieces(bottom));\n    }\n    function piece(left, top, right, bottom) {\n        return new RectangleMarker(className, left - base.left, top - base.top, Math.max(0, right - left), bottom - top);\n    }\n    function pieces({ top, bottom, horizontal }) {\n        let pieces = [];\n        for (let i = 0; i < horizontal.length; i += 2)\n            pieces.push(piece(horizontal[i], top, horizontal[i + 1], bottom));\n        return pieces;\n    }\n    // Gets passed from/to in line-local positions\n    function drawForLine(from, to, line) {\n        let top = 1e9, bottom = -1e9, horizontal = [];\n        function addSpan(from, fromOpen, to, toOpen, dir) {\n            // Passing 2/-2 is a kludge to force the view to return\n            // coordinates on the proper side of block widgets, since\n            // normalizing the side there, though appropriate for most\n            // coordsAtPos queries, would break selection drawing.\n            let fromCoords = view.coordsAtPos(from, (from == line.to ? -2 : 2));\n            let toCoords = view.coordsAtPos(to, (to == line.from ? 2 : -2));\n            if (!fromCoords || !toCoords)\n                return;\n            top = Math.min(fromCoords.top, toCoords.top, top);\n            bottom = Math.max(fromCoords.bottom, toCoords.bottom, bottom);\n            if (dir == Direction.LTR)\n                horizontal.push(ltr && fromOpen ? leftSide : fromCoords.left, ltr && toOpen ? rightSide : toCoords.right);\n            else\n                horizontal.push(!ltr && toOpen ? leftSide : toCoords.left, !ltr && fromOpen ? rightSide : fromCoords.right);\n        }\n        let start = from !== null && from !== void 0 ? from : line.from, end = to !== null && to !== void 0 ? to : line.to;\n        // Split the range by visible range and document line\n        for (let r of view.visibleRanges)\n            if (r.to > start && r.from < end) {\n                for (let pos = Math.max(r.from, start), endPos = Math.min(r.to, end);;) {\n                    let docLine = view.state.doc.lineAt(pos);\n                    for (let span of view.bidiSpans(docLine)) {\n                        let spanFrom = span.from + docLine.from, spanTo = span.to + docLine.from;\n                        if (spanFrom >= endPos)\n                            break;\n                        if (spanTo > pos)\n                            addSpan(Math.max(spanFrom, pos), from == null && spanFrom <= start, Math.min(spanTo, endPos), to == null && spanTo >= end, span.dir);\n                    }\n                    pos = docLine.to + 1;\n                    if (pos >= endPos)\n                        break;\n                }\n            }\n        if (horizontal.length == 0)\n            addSpan(start, from == null, end, to == null, view.textDirection);\n        return { top, bottom, horizontal };\n    }\n    function drawForWidget(block, top) {\n        let y = contentRect.top + (top ? block.top : block.bottom);\n        return { top: y, bottom: y, horizontal: [] };\n    }\n}\nfunction sameMarker(a, b) {\n    return a.constructor == b.constructor && a.eq(b);\n}\nclass LayerView {\n    constructor(view, layer) {\n        this.view = view;\n        this.layer = layer;\n        this.drawn = [];\n        this.scaleX = 1;\n        this.scaleY = 1;\n        this.measureReq = { read: this.measure.bind(this), write: this.draw.bind(this) };\n        this.dom = view.scrollDOM.appendChild(document.createElement(\"div\"));\n        this.dom.classList.add(\"cm-layer\");\n        if (layer.above)\n            this.dom.classList.add(\"cm-layer-above\");\n        if (layer.class)\n            this.dom.classList.add(layer.class);\n        this.scale();\n        this.dom.setAttribute(\"aria-hidden\", \"true\");\n        this.setOrder(view.state);\n        view.requestMeasure(this.measureReq);\n        if (layer.mount)\n            layer.mount(this.dom, view);\n    }\n    update(update) {\n        if (update.startState.facet(layerOrder) != update.state.facet(layerOrder))\n            this.setOrder(update.state);\n        if (this.layer.update(update, this.dom) || update.geometryChanged) {\n            this.scale();\n            update.view.requestMeasure(this.measureReq);\n        }\n    }\n    docViewUpdate(view) {\n        if (this.layer.updateOnDocViewUpdate !== false)\n            view.requestMeasure(this.measureReq);\n    }\n    setOrder(state) {\n        let pos = 0, order = state.facet(layerOrder);\n        while (pos < order.length && order[pos] != this.layer)\n            pos++;\n        this.dom.style.zIndex = String((this.layer.above ? 150 : -1) - pos);\n    }\n    measure() {\n        return this.layer.markers(this.view);\n    }\n    scale() {\n        let { scaleX, scaleY } = this.view;\n        if (scaleX != this.scaleX || scaleY != this.scaleY) {\n            this.scaleX = scaleX;\n            this.scaleY = scaleY;\n            this.dom.style.transform = `scale(${1 / scaleX}, ${1 / scaleY})`;\n        }\n    }\n    draw(markers) {\n        if (markers.length != this.drawn.length || markers.some((p, i) => !sameMarker(p, this.drawn[i]))) {\n            let old = this.dom.firstChild, oldI = 0;\n            for (let marker of markers) {\n                if (marker.update && old && marker.constructor && this.drawn[oldI].constructor &&\n                    marker.update(old, this.drawn[oldI])) {\n                    old = old.nextSibling;\n                    oldI++;\n                }\n                else {\n                    this.dom.insertBefore(marker.draw(), old);\n                }\n            }\n            while (old) {\n                let next = old.nextSibling;\n                old.remove();\n                old = next;\n            }\n            this.drawn = markers;\n            if (browser.webkit) // Issue #1600, 1627, 1686\n                this.dom.style.display = this.dom.firstChild ? \"\" : \"none\";\n        }\n    }\n    destroy() {\n        if (this.layer.destroy)\n            this.layer.destroy(this.dom, this.view);\n        this.dom.remove();\n    }\n}\nconst layerOrder = /*@__PURE__*/Facet.define();\n/**\nDefine a layer.\n*/\nfunction layer(config) {\n    return [\n        ViewPlugin.define(v => new LayerView(v, config)),\n        layerOrder.of(config)\n    ];\n}\n\nconst selectionConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            cursorBlinkRate: 1200,\n            drawRangeCursor: true,\n            iosSelectionHandles: true\n        }, {\n            cursorBlinkRate: (a, b) => Math.min(a, b),\n            drawRangeCursor: (a, b) => a || b\n        });\n    }\n});\n/**\nReturns an extension that hides the browser's native selection and\ncursor, replacing the selection with a background behind the text\n(with the `cm-selectionBackground` class), and the\ncursors with elements overlaid over the code (using\n`cm-cursor-primary` and `cm-cursor-secondary`).\n\nThis allows the editor to display secondary selection ranges, and\ntends to produce a type of selection more in line with that users\nexpect in a text editor (the native selection styling will often\nleave gaps between lines and won't fill the horizontal space after\na line when the selection continues past it).\n\nIt does have a performance cost, in that it requires an extra DOM\nlayout cycle for many updates (the selection is drawn based on DOM\nlayout information that's only available after laying out the\ncontent).\n*/\nfunction drawSelection(config = {}) {\n    return [\n        selectionConfig.of(config),\n        cursorLayer,\n        selectionLayer,\n        hideNativeSelection,\n        nativeSelectionHidden.of(true)\n    ];\n}\n/**\nRetrieve the [`drawSelection`](https://codemirror.net/6/docs/ref/#view.drawSelection) configuration\nfor this state. (Note that this will return a set of defaults even\nif `drawSelection` isn't enabled.)\n*/\nfunction getDrawSelectionConfig(state) {\n    return state.facet(selectionConfig);\n}\nfunction configChanged(update) {\n    return update.startState.facet(selectionConfig) != update.state.facet(selectionConfig);\n}\nconst cursorLayer = /*@__PURE__*/layer({\n    above: true,\n    markers(view) {\n        let { state } = view, conf = state.facet(selectionConfig);\n        let cursors = [];\n        for (let r of state.selection.ranges) {\n            let prim = r == state.selection.main;\n            if (r.empty || conf.drawRangeCursor && !(prim && browser.ios && conf.iosSelectionHandles)) {\n                let className = prim ? \"cm-cursor cm-cursor-primary\" : \"cm-cursor cm-cursor-secondary\";\n                let cursor = r.empty ? r : EditorSelection.cursor(r.head, r.assoc);\n                for (let piece of RectangleMarker.forRange(view, className, cursor))\n                    cursors.push(piece);\n            }\n        }\n        return cursors;\n    },\n    update(update, dom) {\n        if (update.transactions.some(tr => tr.selection))\n            dom.style.animationName = dom.style.animationName == \"cm-blink\" ? \"cm-blink2\" : \"cm-blink\";\n        let confChange = configChanged(update);\n        if (confChange)\n            setBlinkRate(update.state, dom);\n        return update.docChanged || update.selectionSet || confChange;\n    },\n    mount(dom, view) {\n        setBlinkRate(view.state, dom);\n    },\n    class: \"cm-cursorLayer\"\n});\nfunction setBlinkRate(state, dom) {\n    dom.style.animationDuration = state.facet(selectionConfig).cursorBlinkRate + \"ms\";\n}\nconst selectionLayer = /*@__PURE__*/layer({\n    above: false,\n    markers(view) {\n        let markers = [], { main, ranges } = view.state.selection;\n        for (let r of ranges)\n            if (!r.empty) {\n                for (let marker of RectangleMarker.forRange(view, \"cm-selectionBackground\", r))\n                    markers.push(marker);\n            }\n        if (browser.ios && !main.empty && view.state.facet(selectionConfig).iosSelectionHandles) {\n            for (let piece of RectangleMarker.forRange(view, \"cm-selectionHandle cm-selectionHandle-start\", EditorSelection.cursor(main.from, 1)))\n                markers.push(piece);\n            for (let piece of RectangleMarker.forRange(view, \"cm-selectionHandle cm-selectionHandle-end\", EditorSelection.cursor(main.to, 1)))\n                markers.push(piece);\n        }\n        return markers;\n    },\n    update(update, dom) {\n        return update.docChanged || update.selectionSet || update.viewportChanged || configChanged(update);\n    },\n    class: \"cm-selectionLayer\"\n});\nconst hideNativeSelection = /*@__PURE__*/Prec.highest(/*@__PURE__*/EditorView.theme({\n    \".cm-line\": {\n        \"& ::selection, &::selection\": { backgroundColor: \"transparent !important\" },\n        caretColor: \"transparent !important\"\n    },\n    \".cm-content\": {\n        caretColor: \"transparent !important\",\n        \"& :focus\": {\n            caretColor: \"initial !important\",\n            \"&::selection, & ::selection\": {\n                backgroundColor: \"Highlight !important\"\n            }\n        }\n    }\n}));\n\nconst setDropCursorPos = /*@__PURE__*/StateEffect.define({\n    map(pos, mapping) { return pos == null ? null : mapping.mapPos(pos); }\n});\nconst dropCursorPos = /*@__PURE__*/StateField.define({\n    create() { return null; },\n    update(pos, tr) {\n        if (pos != null)\n            pos = tr.changes.mapPos(pos);\n        return tr.effects.reduce((pos, e) => e.is(setDropCursorPos) ? e.value : pos, pos);\n    }\n});\nconst drawDropCursor = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.cursor = null;\n        this.measureReq = { read: this.readPos.bind(this), write: this.drawCursor.bind(this) };\n    }\n    update(update) {\n        var _a;\n        let cursorPos = update.state.field(dropCursorPos);\n        if (cursorPos == null) {\n            if (this.cursor != null) {\n                (_a = this.cursor) === null || _a === void 0 ? void 0 : _a.remove();\n                this.cursor = null;\n            }\n        }\n        else {\n            if (!this.cursor) {\n                this.cursor = this.view.scrollDOM.appendChild(document.createElement(\"div\"));\n                this.cursor.className = \"cm-dropCursor\";\n            }\n            if (update.startState.field(dropCursorPos) != cursorPos || update.docChanged || update.geometryChanged)\n                this.view.requestMeasure(this.measureReq);\n        }\n    }\n    readPos() {\n        let { view } = this;\n        let pos = view.state.field(dropCursorPos);\n        let rect = pos != null && view.coordsAtPos(pos);\n        if (!rect)\n            return null;\n        let outer = view.scrollDOM.getBoundingClientRect();\n        return {\n            left: rect.left - outer.left + view.scrollDOM.scrollLeft * view.scaleX,\n            top: rect.top - outer.top + view.scrollDOM.scrollTop * view.scaleY,\n            height: rect.bottom - rect.top\n        };\n    }\n    drawCursor(pos) {\n        if (this.cursor) {\n            let { scaleX, scaleY } = this.view;\n            if (pos) {\n                this.cursor.style.left = pos.left / scaleX + \"px\";\n                this.cursor.style.top = pos.top / scaleY + \"px\";\n                this.cursor.style.height = pos.height / scaleY + \"px\";\n            }\n            else {\n                this.cursor.style.left = \"-100000px\";\n            }\n        }\n    }\n    destroy() {\n        if (this.cursor)\n            this.cursor.remove();\n    }\n    setDropPos(pos) {\n        if (this.view.state.field(dropCursorPos) != pos)\n            this.view.dispatch({ effects: setDropCursorPos.of(pos) });\n    }\n}, {\n    eventObservers: {\n        dragover(event) {\n            this.setDropPos(this.view.posAtCoords({ x: event.clientX, y: event.clientY }));\n        },\n        dragleave(event) {\n            if (event.target == this.view.contentDOM || !this.view.contentDOM.contains(event.relatedTarget))\n                this.setDropPos(null);\n        },\n        dragend() {\n            this.setDropPos(null);\n        },\n        drop() {\n            this.setDropPos(null);\n        }\n    }\n});\n/**\nDraws a cursor at the current drop position when something is\ndragged over the editor.\n*/\nfunction dropCursor() {\n    return [dropCursorPos, drawDropCursor];\n}\n\nfunction iterMatches(doc, re, from, to, f) {\n    re.lastIndex = 0;\n    for (let cursor = doc.iterRange(from, to), pos = from, m; !cursor.next().done; pos += cursor.value.length) {\n        if (!cursor.lineBreak)\n            while (m = re.exec(cursor.value))\n                f(pos + m.index, m);\n    }\n}\nfunction matchRanges(view, maxLength) {\n    let visible = view.visibleRanges;\n    if (visible.length == 1 && visible[0].from == view.viewport.from &&\n        visible[0].to == view.viewport.to)\n        return visible;\n    let result = [];\n    for (let { from, to } of visible) {\n        from = Math.max(view.state.doc.lineAt(from).from, from - maxLength);\n        to = Math.min(view.state.doc.lineAt(to).to, to + maxLength);\n        if (result.length && result[result.length - 1].to >= from)\n            result[result.length - 1].to = to;\n        else\n            result.push({ from, to });\n    }\n    return result;\n}\n/**\nHelper class used to make it easier to maintain decorations on\nvisible code that matches a given regular expression. To be used\nin a [view plugin](https://codemirror.net/6/docs/ref/#view.ViewPlugin). Instances of this object\nrepresent a matching configuration.\n*/\nclass MatchDecorator {\n    /**\n    Create a decorator.\n    */\n    constructor(config) {\n        const { regexp, decoration, decorate, boundary, maxLength = 1000 } = config;\n        if (!regexp.global)\n            throw new RangeError(\"The regular expression given to MatchDecorator should have its 'g' flag set\");\n        this.regexp = regexp;\n        if (decorate) {\n            this.addMatch = (match, view, from, add) => decorate(add, from, from + match[0].length, match, view);\n        }\n        else if (typeof decoration == \"function\") {\n            this.addMatch = (match, view, from, add) => {\n                let deco = decoration(match, view, from);\n                if (deco)\n                    add(from, from + match[0].length, deco);\n            };\n        }\n        else if (decoration) {\n            this.addMatch = (match, _view, from, add) => add(from, from + match[0].length, decoration);\n        }\n        else {\n            throw new RangeError(\"Either 'decorate' or 'decoration' should be provided to MatchDecorator\");\n        }\n        this.boundary = boundary;\n        this.maxLength = maxLength;\n    }\n    /**\n    Compute the full set of decorations for matches in the given\n    view's viewport. You'll want to call this when initializing your\n    plugin.\n    */\n    createDeco(view) {\n        let build = new RangeSetBuilder(), add = build.add.bind(build);\n        for (let { from, to } of matchRanges(view, this.maxLength))\n            iterMatches(view.state.doc, this.regexp, from, to, (from, m) => this.addMatch(m, view, from, add));\n        return build.finish();\n    }\n    /**\n    Update a set of decorations for a view update. `deco` _must_ be\n    the set of decorations produced by _this_ `MatchDecorator` for\n    the view state before the update.\n    */\n    updateDeco(update, deco) {\n        let changeFrom = 1e9, changeTo = -1;\n        if (update.docChanged)\n            update.changes.iterChanges((_f, _t, from, to) => {\n                if (to >= update.view.viewport.from && from <= update.view.viewport.to) {\n                    changeFrom = Math.min(from, changeFrom);\n                    changeTo = Math.max(to, changeTo);\n                }\n            });\n        if (update.viewportMoved || changeTo - changeFrom > 1000)\n            return this.createDeco(update.view);\n        if (changeTo > -1)\n            return this.updateRange(update.view, deco.map(update.changes), changeFrom, changeTo);\n        return deco;\n    }\n    updateRange(view, deco, updateFrom, updateTo) {\n        for (let r of view.visibleRanges) {\n            let from = Math.max(r.from, updateFrom), to = Math.min(r.to, updateTo);\n            if (to >= from) {\n                let fromLine = view.state.doc.lineAt(from), toLine = fromLine.to < to ? view.state.doc.lineAt(to) : fromLine;\n                let start = Math.max(r.from, fromLine.from), end = Math.min(r.to, toLine.to);\n                if (this.boundary) {\n                    for (; from > fromLine.from; from--)\n                        if (this.boundary.test(fromLine.text[from - 1 - fromLine.from])) {\n                            start = from;\n                            break;\n                        }\n                    for (; to < toLine.to; to++)\n                        if (this.boundary.test(toLine.text[to - toLine.from])) {\n                            end = to;\n                            break;\n                        }\n                }\n                let ranges = [], m;\n                let add = (from, to, deco) => ranges.push(deco.range(from, to));\n                if (fromLine == toLine) {\n                    this.regexp.lastIndex = start - fromLine.from;\n                    while ((m = this.regexp.exec(fromLine.text)) && m.index < end - fromLine.from)\n                        this.addMatch(m, view, m.index + fromLine.from, add);\n                }\n                else {\n                    iterMatches(view.state.doc, this.regexp, start, end, (from, m) => this.addMatch(m, view, from, add));\n                }\n                deco = deco.update({ filterFrom: start, filterTo: end, filter: (from, to) => from < start || to > end, add: ranges });\n            }\n        }\n        return deco;\n    }\n}\n\nconst UnicodeRegexpSupport = /x/.unicode != null ? \"gu\" : \"g\";\nconst Specials = /*@__PURE__*/new RegExp(\"[\\u0000-\\u0008\\u000a-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b\\u200e\\u200f\\u2028\\u2029\\u202d\\u202e\\u2066\\u2067\\u2069\\ufeff\\ufff9-\\ufffc]\", UnicodeRegexpSupport);\nconst Names = {\n    0: \"null\",\n    7: \"bell\",\n    8: \"backspace\",\n    10: \"newline\",\n    11: \"vertical tab\",\n    13: \"carriage return\",\n    27: \"escape\",\n    8203: \"zero width space\",\n    8204: \"zero width non-joiner\",\n    8205: \"zero width joiner\",\n    8206: \"left-to-right mark\",\n    8207: \"right-to-left mark\",\n    8232: \"line separator\",\n    8237: \"left-to-right override\",\n    8238: \"right-to-left override\",\n    8294: \"left-to-right isolate\",\n    8295: \"right-to-left isolate\",\n    8297: \"pop directional isolate\",\n    8233: \"paragraph separator\",\n    65279: \"zero width no-break space\",\n    65532: \"object replacement\"\n};\nlet _supportsTabSize = null;\nfunction supportsTabSize() {\n    var _a;\n    if (_supportsTabSize == null && typeof document != \"undefined\" && document.body) {\n        let styles = document.body.style;\n        _supportsTabSize = ((_a = styles.tabSize) !== null && _a !== void 0 ? _a : styles.MozTabSize) != null;\n    }\n    return _supportsTabSize || false;\n}\nconst specialCharConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        let config = combineConfig(configs, {\n            render: null,\n            specialChars: Specials,\n            addSpecialChars: null\n        });\n        if (config.replaceTabs = !supportsTabSize())\n            config.specialChars = new RegExp(\"\\t|\" + config.specialChars.source, UnicodeRegexpSupport);\n        if (config.addSpecialChars)\n            config.specialChars = new RegExp(config.specialChars.source + \"|\" + config.addSpecialChars.source, UnicodeRegexpSupport);\n        return config;\n    }\n});\n/**\nReturns an extension that installs highlighting of special\ncharacters.\n*/\nfunction highlightSpecialChars(\n/**\nConfiguration options.\n*/\nconfig = {}) {\n    return [specialCharConfig.of(config), specialCharPlugin()];\n}\nlet _plugin = null;\nfunction specialCharPlugin() {\n    return _plugin || (_plugin = ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.view = view;\n            this.decorations = Decoration.none;\n            this.decorationCache = Object.create(null);\n            this.decorator = this.makeDecorator(view.state.facet(specialCharConfig));\n            this.decorations = this.decorator.createDeco(view);\n        }\n        makeDecorator(conf) {\n            return new MatchDecorator({\n                regexp: conf.specialChars,\n                decoration: (m, view, pos) => {\n                    let { doc } = view.state;\n                    let code = codePointAt(m[0], 0);\n                    if (code == 9) {\n                        let line = doc.lineAt(pos);\n                        let size = view.state.tabSize, col = countColumn(line.text, size, pos - line.from);\n                        return Decoration.replace({\n                            widget: new TabWidget((size - (col % size)) * this.view.defaultCharacterWidth / this.view.scaleX)\n                        });\n                    }\n                    return this.decorationCache[code] ||\n                        (this.decorationCache[code] = Decoration.replace({ widget: new SpecialCharWidget(conf, code) }));\n                },\n                boundary: conf.replaceTabs ? undefined : /[^]/\n            });\n        }\n        update(update) {\n            let conf = update.state.facet(specialCharConfig);\n            if (update.startState.facet(specialCharConfig) != conf) {\n                this.decorator = this.makeDecorator(conf);\n                this.decorations = this.decorator.createDeco(update.view);\n            }\n            else {\n                this.decorations = this.decorator.updateDeco(update, this.decorations);\n            }\n        }\n    }, {\n        decorations: v => v.decorations\n    }));\n}\nconst DefaultPlaceholder = \"\\u2022\";\n// Assigns placeholder characters from the Control Pictures block to\n// ASCII control characters\nfunction placeholder$1(code) {\n    if (code >= 32)\n        return DefaultPlaceholder;\n    if (code == 10)\n        return \"\\u2424\";\n    return String.fromCharCode(9216 + code);\n}\nclass SpecialCharWidget extends WidgetType {\n    constructor(options, code) {\n        super();\n        this.options = options;\n        this.code = code;\n    }\n    eq(other) { return other.code == this.code; }\n    toDOM(view) {\n        let ph = placeholder$1(this.code);\n        let desc = view.state.phrase(\"Control character\") + \" \" + (Names[this.code] || \"0x\" + this.code.toString(16));\n        let custom = this.options.render && this.options.render(this.code, desc, ph);\n        if (custom)\n            return custom;\n        let span = document.createElement(\"span\");\n        span.textContent = ph;\n        span.title = desc;\n        span.setAttribute(\"aria-label\", desc);\n        span.className = \"cm-specialChar\";\n        return span;\n    }\n    ignoreEvent() { return false; }\n}\nclass TabWidget extends WidgetType {\n    constructor(width) {\n        super();\n        this.width = width;\n    }\n    eq(other) { return other.width == this.width; }\n    toDOM() {\n        let span = document.createElement(\"span\");\n        span.textContent = \"\\t\";\n        span.className = \"cm-tab\";\n        span.style.width = this.width + \"px\";\n        return span;\n    }\n    ignoreEvent() { return false; }\n}\n\nconst plugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor() {\n        this.height = 1000;\n        this.attrs = { style: \"padding-bottom: 1000px\" };\n    }\n    update(update) {\n        let { view } = update;\n        let height = view.viewState.editorHeight -\n            view.defaultLineHeight - view.documentPadding.top - 0.5;\n        if (height >= 0 && height != this.height) {\n            this.height = height;\n            this.attrs = { style: `padding-bottom: ${height}px` };\n        }\n    }\n});\n/**\nReturns an extension that makes sure the content has a bottom\nmargin equivalent to the height of the editor, minus one line\nheight, so that every line in the document can be scrolled to the\ntop of the editor.\n\nThis is only meaningful when the editor is scrollable, and should\nnot be enabled in editors that take the size of their content.\n*/\nfunction scrollPastEnd() {\n    return [plugin, contentAttributes.of(view => { var _a; return ((_a = view.plugin(plugin)) === null || _a === void 0 ? void 0 : _a.attrs) || null; })];\n}\n\n/**\nMark lines that have a cursor on them with the `\"cm-activeLine\"`\nDOM class.\n*/\nfunction highlightActiveLine() {\n    return activeLineHighlighter;\n}\nconst lineDeco = /*@__PURE__*/Decoration.line({ class: \"cm-activeLine\" });\nconst activeLineHighlighter = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.decorations = this.getDeco(view);\n    }\n    update(update) {\n        if (update.docChanged || update.selectionSet)\n            this.decorations = this.getDeco(update.view);\n    }\n    getDeco(view) {\n        let lastLineStart = -1, deco = [];\n        for (let r of view.state.selection.ranges) {\n            let line = view.lineBlockAt(r.head);\n            if (line.from > lastLineStart) {\n                deco.push(lineDeco.range(line.from));\n                lastLineStart = line.from;\n            }\n        }\n        return Decoration.set(deco);\n    }\n}, {\n    decorations: v => v.decorations\n});\n\nclass Placeholder extends WidgetType {\n    constructor(content) {\n        super();\n        this.content = content;\n    }\n    toDOM(view) {\n        let wrap = document.createElement(\"span\");\n        wrap.className = \"cm-placeholder\";\n        wrap.style.pointerEvents = \"none\";\n        wrap.appendChild(typeof this.content == \"string\" ? document.createTextNode(this.content) :\n            typeof this.content == \"function\" ? this.content(view) :\n                this.content.cloneNode(true));\n        wrap.setAttribute(\"aria-hidden\", \"true\");\n        return wrap;\n    }\n    coordsAt(dom) {\n        let rects = dom.firstChild ? clientRectsFor(dom.firstChild) : [];\n        if (!rects.length)\n            return null;\n        let style = window.getComputedStyle(dom.parentNode);\n        let rect = flattenRect(rects[0], style.direction != \"rtl\");\n        let lineHeight = parseInt(style.lineHeight);\n        if (rect.bottom - rect.top > lineHeight * 1.5)\n            return { left: rect.left, right: rect.right, top: rect.top, bottom: rect.top + lineHeight };\n        return rect;\n    }\n    ignoreEvent() { return false; }\n}\n/**\nExtension that enables a placeholder—a piece of example content\nto show when the editor is empty.\n*/\nfunction placeholder(content) {\n    let plugin = ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.view = view;\n            this.placeholder = content\n                ? Decoration.set([Decoration.widget({ widget: new Placeholder(content), side: 1 }).range(0)])\n                : Decoration.none;\n        }\n        get decorations() { return this.view.state.doc.length ? Decoration.none : this.placeholder; }\n    }, { decorations: v => v.decorations });\n    return typeof content == \"string\" ? [\n        plugin, EditorView.contentAttributes.of({ \"aria-placeholder\": content })\n    ] : plugin;\n}\n\n// Don't compute precise column positions for line offsets above this\n// (since it could get expensive). Assume offset==column for them.\nconst MaxOff = 2000;\nfunction rectangleFor(state, a, b) {\n    let startLine = Math.min(a.line, b.line), endLine = Math.max(a.line, b.line);\n    let ranges = [];\n    if (a.off > MaxOff || b.off > MaxOff || a.col < 0 || b.col < 0) {\n        let startOff = Math.min(a.off, b.off), endOff = Math.max(a.off, b.off);\n        for (let i = startLine; i <= endLine; i++) {\n            let line = state.doc.line(i);\n            if (line.length <= endOff)\n                ranges.push(EditorSelection.range(line.from + startOff, line.to + endOff));\n        }\n    }\n    else {\n        let startCol = Math.min(a.col, b.col), endCol = Math.max(a.col, b.col);\n        for (let i = startLine; i <= endLine; i++) {\n            let line = state.doc.line(i);\n            let start = findColumn(line.text, startCol, state.tabSize, true);\n            if (start < 0) {\n                ranges.push(EditorSelection.cursor(line.to));\n            }\n            else {\n                let end = findColumn(line.text, endCol, state.tabSize);\n                ranges.push(EditorSelection.range(line.from + start, line.from + end));\n            }\n        }\n    }\n    return ranges;\n}\nfunction absoluteColumn(view, x) {\n    let ref = view.coordsAtPos(view.viewport.from);\n    return ref ? Math.round(Math.abs((ref.left - x) / view.defaultCharacterWidth)) : -1;\n}\nfunction getPos(view, event) {\n    let offset = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);\n    let line = view.state.doc.lineAt(offset), off = offset - line.from;\n    let col = off > MaxOff ? -1\n        : off == line.length ? absoluteColumn(view, event.clientX)\n            : countColumn(line.text, view.state.tabSize, offset - line.from);\n    return { line: line.number, col, off };\n}\nfunction rectangleSelectionStyle(view, event) {\n    let start = getPos(view, event), startSel = view.state.selection;\n    if (!start)\n        return null;\n    return {\n        update(update) {\n            if (update.docChanged) {\n                let newStart = update.changes.mapPos(update.startState.doc.line(start.line).from);\n                let newLine = update.state.doc.lineAt(newStart);\n                start = { line: newLine.number, col: start.col, off: Math.min(start.off, newLine.length) };\n                startSel = startSel.map(update.changes);\n            }\n        },\n        get(event, _extend, multiple) {\n            let cur = getPos(view, event);\n            if (!cur)\n                return startSel;\n            let ranges = rectangleFor(view.state, start, cur);\n            if (!ranges.length)\n                return startSel;\n            if (multiple)\n                return EditorSelection.create(ranges.concat(startSel.ranges));\n            else\n                return EditorSelection.create(ranges);\n        }\n    };\n}\n/**\nCreate an extension that enables rectangular selections. By\ndefault, it will react to left mouse drag with the Alt key held\ndown. When such a selection occurs, the text within the rectangle\nthat was dragged over will be selected, as one selection\n[range](https://codemirror.net/6/docs/ref/#state.SelectionRange) per line.\n*/\nfunction rectangularSelection(options) {\n    let filter = (options === null || options === void 0 ? void 0 : options.eventFilter) || (e => e.altKey && e.button == 0);\n    return EditorView.mouseSelectionStyle.of((view, event) => filter(event) ? rectangleSelectionStyle(view, event) : null);\n}\nconst keys = {\n    Alt: [18, e => !!e.altKey],\n    Control: [17, e => !!e.ctrlKey],\n    Shift: [16, e => !!e.shiftKey],\n    Meta: [91, e => !!e.metaKey]\n};\nconst showCrosshair = { style: \"cursor: crosshair\" };\n/**\nReturns an extension that turns the pointer cursor into a\ncrosshair when a given modifier key, defaulting to Alt, is held\ndown. Can serve as a visual hint that rectangular selection is\ngoing to happen when paired with\n[`rectangularSelection`](https://codemirror.net/6/docs/ref/#view.rectangularSelection).\n*/\nfunction crosshairCursor(options = {}) {\n    let [code, getter] = keys[options.key || \"Alt\"];\n    let plugin = ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.view = view;\n            this.isDown = false;\n        }\n        set(isDown) {\n            if (this.isDown != isDown) {\n                this.isDown = isDown;\n                this.view.update([]);\n            }\n        }\n    }, {\n        eventObservers: {\n            keydown(e) {\n                this.set(e.keyCode == code || getter(e));\n            },\n            keyup(e) {\n                if (e.keyCode == code || !getter(e))\n                    this.set(false);\n            },\n            mousemove(e) {\n                this.set(getter(e));\n            }\n        }\n    });\n    return [\n        plugin,\n        EditorView.contentAttributes.of(view => { var _a; return ((_a = view.plugin(plugin)) === null || _a === void 0 ? void 0 : _a.isDown) ? showCrosshair : null; })\n    ];\n}\n\nconst Outside = \"-10000px\";\nclass TooltipViewManager {\n    constructor(view, facet, createTooltipView, removeTooltipView) {\n        this.facet = facet;\n        this.createTooltipView = createTooltipView;\n        this.removeTooltipView = removeTooltipView;\n        this.input = view.state.facet(facet);\n        this.tooltips = this.input.filter(t => t);\n        let prev = null;\n        this.tooltipViews = this.tooltips.map(t => prev = createTooltipView(t, prev));\n    }\n    update(update, above) {\n        var _a;\n        let input = update.state.facet(this.facet);\n        let tooltips = input.filter(x => x);\n        if (input === this.input) {\n            for (let t of this.tooltipViews)\n                if (t.update)\n                    t.update(update);\n            return false;\n        }\n        let tooltipViews = [], newAbove = above ? [] : null;\n        for (let i = 0; i < tooltips.length; i++) {\n            let tip = tooltips[i], known = -1;\n            if (!tip)\n                continue;\n            for (let i = 0; i < this.tooltips.length; i++) {\n                let other = this.tooltips[i];\n                if (other && other.create == tip.create)\n                    known = i;\n            }\n            if (known < 0) {\n                tooltipViews[i] = this.createTooltipView(tip, i ? tooltipViews[i - 1] : null);\n                if (newAbove)\n                    newAbove[i] = !!tip.above;\n            }\n            else {\n                let tooltipView = tooltipViews[i] = this.tooltipViews[known];\n                if (newAbove)\n                    newAbove[i] = above[known];\n                if (tooltipView.update)\n                    tooltipView.update(update);\n            }\n        }\n        for (let t of this.tooltipViews)\n            if (tooltipViews.indexOf(t) < 0) {\n                this.removeTooltipView(t);\n                (_a = t.destroy) === null || _a === void 0 ? void 0 : _a.call(t);\n            }\n        if (above) {\n            newAbove.forEach((val, i) => above[i] = val);\n            above.length = newAbove.length;\n        }\n        this.input = input;\n        this.tooltips = tooltips;\n        this.tooltipViews = tooltipViews;\n        return true;\n    }\n}\n/**\nCreates an extension that configures tooltip behavior.\n*/\nfunction tooltips(config = {}) {\n    return tooltipConfig.of(config);\n}\nfunction windowSpace(view) {\n    let docElt = view.dom.ownerDocument.documentElement;\n    return { top: 0, left: 0, bottom: docElt.clientHeight, right: docElt.clientWidth };\n}\nconst tooltipConfig = /*@__PURE__*/Facet.define({\n    combine: values => {\n        var _a, _b, _c;\n        return ({\n            position: browser.ios ? \"absolute\" : ((_a = values.find(conf => conf.position)) === null || _a === void 0 ? void 0 : _a.position) || \"fixed\",\n            parent: ((_b = values.find(conf => conf.parent)) === null || _b === void 0 ? void 0 : _b.parent) || null,\n            tooltipSpace: ((_c = values.find(conf => conf.tooltipSpace)) === null || _c === void 0 ? void 0 : _c.tooltipSpace) || windowSpace,\n        });\n    }\n});\nconst knownHeight = /*@__PURE__*/new WeakMap();\nconst tooltipPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.above = [];\n        this.inView = true;\n        this.madeAbsolute = false;\n        this.lastTransaction = 0;\n        this.measureTimeout = -1;\n        let config = view.state.facet(tooltipConfig);\n        this.position = config.position;\n        this.parent = config.parent;\n        this.classes = view.themeClasses;\n        this.createContainer();\n        this.measureReq = { read: this.readMeasure.bind(this), write: this.writeMeasure.bind(this), key: this };\n        this.resizeObserver = typeof ResizeObserver == \"function\" ? new ResizeObserver(() => this.measureSoon()) : null;\n        this.manager = new TooltipViewManager(view, showTooltip, (t, p) => this.createTooltip(t, p), t => {\n            if (this.resizeObserver)\n                this.resizeObserver.unobserve(t.dom);\n            t.dom.remove();\n        });\n        this.above = this.manager.tooltips.map(t => !!t.above);\n        this.intersectionObserver = typeof IntersectionObserver == \"function\" ? new IntersectionObserver(entries => {\n            if (Date.now() > this.lastTransaction - 50 &&\n                entries.length > 0 && entries[entries.length - 1].intersectionRatio < 1)\n                this.measureSoon();\n        }, { threshold: [1] }) : null;\n        this.observeIntersection();\n        view.win.addEventListener(\"resize\", this.measureSoon = this.measureSoon.bind(this));\n        this.maybeMeasure();\n    }\n    createContainer() {\n        if (this.parent) {\n            this.container = document.createElement(\"div\");\n            this.container.style.position = \"relative\";\n            this.container.className = this.view.themeClasses;\n            this.parent.appendChild(this.container);\n        }\n        else {\n            this.container = this.view.dom;\n        }\n    }\n    observeIntersection() {\n        if (this.intersectionObserver) {\n            this.intersectionObserver.disconnect();\n            for (let tooltip of this.manager.tooltipViews)\n                this.intersectionObserver.observe(tooltip.dom);\n        }\n    }\n    measureSoon() {\n        if (this.measureTimeout < 0)\n            this.measureTimeout = setTimeout(() => {\n                this.measureTimeout = -1;\n                this.maybeMeasure();\n            }, 50);\n    }\n    update(update) {\n        if (update.transactions.length)\n            this.lastTransaction = Date.now();\n        let updated = this.manager.update(update, this.above);\n        if (updated)\n            this.observeIntersection();\n        let shouldMeasure = updated || update.geometryChanged;\n        let newConfig = update.state.facet(tooltipConfig);\n        if (newConfig.position != this.position && !this.madeAbsolute) {\n            this.position = newConfig.position;\n            for (let t of this.manager.tooltipViews)\n                t.dom.style.position = this.position;\n            shouldMeasure = true;\n        }\n        if (newConfig.parent != this.parent) {\n            if (this.parent)\n                this.container.remove();\n            this.parent = newConfig.parent;\n            this.createContainer();\n            for (let t of this.manager.tooltipViews)\n                this.container.appendChild(t.dom);\n            shouldMeasure = true;\n        }\n        else if (this.parent && this.view.themeClasses != this.classes) {\n            this.classes = this.container.className = this.view.themeClasses;\n        }\n        if (shouldMeasure)\n            this.maybeMeasure();\n    }\n    createTooltip(tooltip, prev) {\n        let tooltipView = tooltip.create(this.view);\n        let before = prev ? prev.dom : null;\n        tooltipView.dom.classList.add(\"cm-tooltip\");\n        if (tooltip.arrow && !tooltipView.dom.querySelector(\".cm-tooltip > .cm-tooltip-arrow\")) {\n            let arrow = document.createElement(\"div\");\n            arrow.className = \"cm-tooltip-arrow\";\n            tooltipView.dom.appendChild(arrow);\n        }\n        tooltipView.dom.style.position = this.position;\n        tooltipView.dom.style.top = Outside;\n        tooltipView.dom.style.left = \"0px\";\n        this.container.insertBefore(tooltipView.dom, before);\n        if (tooltipView.mount)\n            tooltipView.mount(this.view);\n        if (this.resizeObserver)\n            this.resizeObserver.observe(tooltipView.dom);\n        return tooltipView;\n    }\n    destroy() {\n        var _a, _b, _c;\n        this.view.win.removeEventListener(\"resize\", this.measureSoon);\n        for (let tooltipView of this.manager.tooltipViews) {\n            tooltipView.dom.remove();\n            (_a = tooltipView.destroy) === null || _a === void 0 ? void 0 : _a.call(tooltipView);\n        }\n        if (this.parent)\n            this.container.remove();\n        (_b = this.resizeObserver) === null || _b === void 0 ? void 0 : _b.disconnect();\n        (_c = this.intersectionObserver) === null || _c === void 0 ? void 0 : _c.disconnect();\n        clearTimeout(this.measureTimeout);\n    }\n    readMeasure() {\n        let scaleX = 1, scaleY = 1, makeAbsolute = false;\n        if (this.position == \"fixed\" && this.manager.tooltipViews.length) {\n            let { dom } = this.manager.tooltipViews[0];\n            if (browser.safari) {\n                // Safari always sets offsetParent to null, even if a fixed\n                // element is positioned relative to a transformed parent. So\n                // we use this kludge to try and detect this.\n                let rect = dom.getBoundingClientRect();\n                makeAbsolute = Math.abs(rect.top + 10000) > 1 || Math.abs(rect.left) > 1;\n            }\n            else {\n                // More conforming browsers will set offsetParent to the\n                // transformed element.\n                makeAbsolute = !!dom.offsetParent && dom.offsetParent != this.container.ownerDocument.body;\n            }\n        }\n        if (makeAbsolute || this.position == \"absolute\") {\n            if (this.parent) {\n                let rect = this.parent.getBoundingClientRect();\n                if (rect.width && rect.height) {\n                    scaleX = rect.width / this.parent.offsetWidth;\n                    scaleY = rect.height / this.parent.offsetHeight;\n                }\n            }\n            else {\n                ({ scaleX, scaleY } = this.view.viewState);\n            }\n        }\n        let visible = this.view.scrollDOM.getBoundingClientRect(), margins = getScrollMargins(this.view);\n        return {\n            visible: {\n                left: visible.left + margins.left, top: visible.top + margins.top,\n                right: visible.right - margins.right, bottom: visible.bottom - margins.bottom\n            },\n            parent: this.parent ? this.container.getBoundingClientRect() : this.view.dom.getBoundingClientRect(),\n            pos: this.manager.tooltips.map((t, i) => {\n                let tv = this.manager.tooltipViews[i];\n                return tv.getCoords ? tv.getCoords(t.pos) : this.view.coordsAtPos(t.pos);\n            }),\n            size: this.manager.tooltipViews.map(({ dom }) => dom.getBoundingClientRect()),\n            space: this.view.state.facet(tooltipConfig).tooltipSpace(this.view),\n            scaleX, scaleY, makeAbsolute\n        };\n    }\n    writeMeasure(measured) {\n        var _a;\n        if (measured.makeAbsolute) {\n            this.madeAbsolute = true;\n            this.position = \"absolute\";\n            for (let t of this.manager.tooltipViews)\n                t.dom.style.position = \"absolute\";\n        }\n        let { visible, space, scaleX, scaleY } = measured;\n        let others = [];\n        for (let i = 0; i < this.manager.tooltips.length; i++) {\n            let tooltip = this.manager.tooltips[i], tView = this.manager.tooltipViews[i], { dom } = tView;\n            let pos = measured.pos[i], size = measured.size[i];\n            // Hide tooltips that are outside of the editor.\n            if (!pos || tooltip.clip !== false && (pos.bottom <= Math.max(visible.top, space.top) ||\n                pos.top >= Math.min(visible.bottom, space.bottom) ||\n                pos.right < Math.max(visible.left, space.left) - .1 ||\n                pos.left > Math.min(visible.right, space.right) + .1)) {\n                dom.style.top = Outside;\n                continue;\n            }\n            let arrow = tooltip.arrow ? tView.dom.querySelector(\".cm-tooltip-arrow\") : null;\n            let arrowHeight = arrow ? 7 /* Arrow.Size */ : 0;\n            let width = size.right - size.left, height = (_a = knownHeight.get(tView)) !== null && _a !== void 0 ? _a : size.bottom - size.top;\n            let offset = tView.offset || noOffset, ltr = this.view.textDirection == Direction.LTR;\n            let left = size.width > space.right - space.left\n                ? (ltr ? space.left : space.right - size.width)\n                : ltr ? Math.max(space.left, Math.min(pos.left - (arrow ? 14 /* Arrow.Offset */ : 0) + offset.x, space.right - width))\n                    : Math.min(Math.max(space.left, pos.left - width + (arrow ? 14 /* Arrow.Offset */ : 0) - offset.x), space.right - width);\n            let above = this.above[i];\n            if (!tooltip.strictSide && (above\n                ? pos.top - height - arrowHeight - offset.y < space.top\n                : pos.bottom + height + arrowHeight + offset.y > space.bottom) &&\n                above == (space.bottom - pos.bottom > pos.top - space.top))\n                above = this.above[i] = !above;\n            let spaceVert = (above ? pos.top - space.top : space.bottom - pos.bottom) - arrowHeight;\n            if (spaceVert < height && tView.resize !== false) {\n                if (spaceVert < this.view.defaultLineHeight) {\n                    dom.style.top = Outside;\n                    continue;\n                }\n                knownHeight.set(tView, height);\n                dom.style.height = (height = spaceVert) / scaleY + \"px\";\n            }\n            else if (dom.style.height) {\n                dom.style.height = \"\";\n            }\n            let top = above ? pos.top - height - arrowHeight - offset.y : pos.bottom + arrowHeight + offset.y;\n            let right = left + width;\n            if (tView.overlap !== true)\n                for (let r of others)\n                    if (r.left < right && r.right > left && r.top < top + height && r.bottom > top)\n                        top = above ? r.top - height - 2 - arrowHeight : r.bottom + arrowHeight + 2;\n            if (this.position == \"absolute\") {\n                dom.style.top = (top - measured.parent.top) / scaleY + \"px\";\n                setLeftStyle(dom, (left - measured.parent.left) / scaleX);\n            }\n            else {\n                dom.style.top = top / scaleY + \"px\";\n                setLeftStyle(dom, left / scaleX);\n            }\n            if (arrow) {\n                let arrowLeft = pos.left + (ltr ? offset.x : -offset.x) - (left + 14 /* Arrow.Offset */ - 7 /* Arrow.Size */);\n                arrow.style.left = arrowLeft / scaleX + \"px\";\n            }\n            if (tView.overlap !== true)\n                others.push({ left, top, right, bottom: top + height });\n            dom.classList.toggle(\"cm-tooltip-above\", above);\n            dom.classList.toggle(\"cm-tooltip-below\", !above);\n            if (tView.positioned)\n                tView.positioned(measured.space);\n        }\n    }\n    maybeMeasure() {\n        if (this.manager.tooltips.length) {\n            if (this.view.inView)\n                this.view.requestMeasure(this.measureReq);\n            if (this.inView != this.view.inView) {\n                this.inView = this.view.inView;\n                if (!this.inView)\n                    for (let tv of this.manager.tooltipViews)\n                        tv.dom.style.top = Outside;\n            }\n        }\n    }\n}, {\n    eventObservers: {\n        scroll() { this.maybeMeasure(); }\n    }\n});\nfunction setLeftStyle(elt, value) {\n    let current = parseInt(elt.style.left, 10);\n    if (isNaN(current) || Math.abs(value - current) > 1)\n        elt.style.left = value + \"px\";\n}\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-tooltip\": {\n        zIndex: 500,\n        boxSizing: \"border-box\"\n    },\n    \"&light .cm-tooltip\": {\n        border: \"1px solid #bbb\",\n        backgroundColor: \"#f5f5f5\"\n    },\n    \"&light .cm-tooltip-section:not(:first-child)\": {\n        borderTop: \"1px solid #bbb\",\n    },\n    \"&dark .cm-tooltip\": {\n        backgroundColor: \"#333338\",\n        color: \"white\"\n    },\n    \".cm-tooltip-arrow\": {\n        height: `${7 /* Arrow.Size */}px`,\n        width: `${7 /* Arrow.Size */ * 2}px`,\n        position: \"absolute\",\n        zIndex: -1,\n        overflow: \"hidden\",\n        \"&:before, &:after\": {\n            content: \"''\",\n            position: \"absolute\",\n            width: 0,\n            height: 0,\n            borderLeft: `${7 /* Arrow.Size */}px solid transparent`,\n            borderRight: `${7 /* Arrow.Size */}px solid transparent`,\n        },\n        \".cm-tooltip-above &\": {\n            bottom: `-${7 /* Arrow.Size */}px`,\n            \"&:before\": {\n                borderTop: `${7 /* Arrow.Size */}px solid #bbb`,\n            },\n            \"&:after\": {\n                borderTop: `${7 /* Arrow.Size */}px solid #f5f5f5`,\n                bottom: \"1px\"\n            }\n        },\n        \".cm-tooltip-below &\": {\n            top: `-${7 /* Arrow.Size */}px`,\n            \"&:before\": {\n                borderBottom: `${7 /* Arrow.Size */}px solid #bbb`,\n            },\n            \"&:after\": {\n                borderBottom: `${7 /* Arrow.Size */}px solid #f5f5f5`,\n                top: \"1px\"\n            }\n        },\n    },\n    \"&dark .cm-tooltip .cm-tooltip-arrow\": {\n        \"&:before\": {\n            borderTopColor: \"#333338\",\n            borderBottomColor: \"#333338\"\n        },\n        \"&:after\": {\n            borderTopColor: \"transparent\",\n            borderBottomColor: \"transparent\"\n        }\n    }\n});\nconst noOffset = { x: 0, y: 0 };\n/**\nFacet to which an extension can add a value to show a tooltip.\n*/\nconst showTooltip = /*@__PURE__*/Facet.define({\n    enables: [tooltipPlugin, baseTheme]\n});\nconst showHoverTooltip = /*@__PURE__*/Facet.define({\n    combine: inputs => inputs.reduce((a, i) => a.concat(i), [])\n});\nclass HoverTooltipHost {\n    // Needs to be static so that host tooltip instances always match\n    static create(view) {\n        return new HoverTooltipHost(view);\n    }\n    constructor(view) {\n        this.view = view;\n        this.mounted = false;\n        this.dom = document.createElement(\"div\");\n        this.dom.classList.add(\"cm-tooltip-hover\");\n        this.manager = new TooltipViewManager(view, showHoverTooltip, (t, p) => this.createHostedView(t, p), t => t.dom.remove());\n    }\n    createHostedView(tooltip, prev) {\n        let hostedView = tooltip.create(this.view);\n        hostedView.dom.classList.add(\"cm-tooltip-section\");\n        this.dom.insertBefore(hostedView.dom, prev ? prev.dom.nextSibling : this.dom.firstChild);\n        if (this.mounted && hostedView.mount)\n            hostedView.mount(this.view);\n        return hostedView;\n    }\n    mount(view) {\n        for (let hostedView of this.manager.tooltipViews) {\n            if (hostedView.mount)\n                hostedView.mount(view);\n        }\n        this.mounted = true;\n    }\n    positioned(space) {\n        for (let hostedView of this.manager.tooltipViews) {\n            if (hostedView.positioned)\n                hostedView.positioned(space);\n        }\n    }\n    update(update) {\n        this.manager.update(update);\n    }\n    destroy() {\n        var _a;\n        for (let t of this.manager.tooltipViews)\n            (_a = t.destroy) === null || _a === void 0 ? void 0 : _a.call(t);\n    }\n    passProp(name) {\n        let value = undefined;\n        for (let view of this.manager.tooltipViews) {\n            let given = view[name];\n            if (given !== undefined) {\n                if (value === undefined)\n                    value = given;\n                else if (value !== given)\n                    return undefined;\n            }\n        }\n        return value;\n    }\n    get offset() { return this.passProp(\"offset\"); }\n    get getCoords() { return this.passProp(\"getCoords\"); }\n    get overlap() { return this.passProp(\"overlap\"); }\n    get resize() { return this.passProp(\"resize\"); }\n}\nconst showHoverTooltipHost = /*@__PURE__*/showTooltip.compute([showHoverTooltip], state => {\n    let tooltips = state.facet(showHoverTooltip);\n    if (tooltips.length === 0)\n        return null;\n    return {\n        pos: Math.min(...tooltips.map(t => t.pos)),\n        end: Math.max(...tooltips.map(t => { var _a; return (_a = t.end) !== null && _a !== void 0 ? _a : t.pos; })),\n        create: HoverTooltipHost.create,\n        above: tooltips[0].above,\n        arrow: tooltips.some(t => t.arrow),\n    };\n});\nconst hoverPlugin = /*@__PURE__*/Facet.define();\nclass HoverPlugin {\n    constructor(view, source, field, locked, setHover, hoverTime) {\n        this.view = view;\n        this.source = source;\n        this.field = field;\n        this.locked = locked;\n        this.setHover = setHover;\n        this.hoverTime = hoverTime;\n        this.hoverTimeout = -1;\n        this.restartTimeout = -1;\n        this.pending = null;\n        this.lastMove = { x: 0, y: 0, target: view.dom, time: 0 };\n        this.checkHover = this.checkHover.bind(this);\n        view.dom.addEventListener(\"mouseleave\", this.mouseleave = this.mouseleave.bind(this));\n        view.dom.addEventListener(\"mousemove\", this.mousemove = this.mousemove.bind(this));\n    }\n    update(update) {\n        if (this.pending) {\n            this.pending = null;\n            clearTimeout(this.restartTimeout);\n            this.restartTimeout = setTimeout(() => this.startHover(), 20);\n        }\n    }\n    get active() {\n        return this.view.state.field(this.field);\n    }\n    checkHover() {\n        this.hoverTimeout = -1;\n        if (this.active.length)\n            return;\n        let hovered = Date.now() - this.lastMove.time;\n        if (hovered < this.hoverTime)\n            this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime - hovered);\n        else\n            this.startHover();\n    }\n    startHover() {\n        clearTimeout(this.restartTimeout);\n        let { view, lastMove } = this;\n        let tile = view.docView.tile.nearest(lastMove.target);\n        if (!tile)\n            return;\n        let pos, side = 1;\n        if (tile.isWidget()) {\n            pos = tile.posAtStart;\n        }\n        else {\n            pos = view.posAtCoords(lastMove);\n            if (pos == null)\n                return;\n            let posCoords = view.coordsAtPos(pos);\n            if (!posCoords ||\n                lastMove.y < posCoords.top || lastMove.y > posCoords.bottom ||\n                lastMove.x < posCoords.left - view.defaultCharacterWidth ||\n                lastMove.x > posCoords.right + view.defaultCharacterWidth)\n                return;\n            let bidi = view.bidiSpans(view.state.doc.lineAt(pos)).find(s => s.from <= pos && s.to >= pos);\n            let rtl = bidi && bidi.dir == Direction.RTL ? -1 : 1;\n            side = (lastMove.x < posCoords.left ? -rtl : rtl);\n        }\n        this.activateHover(view, pos, side);\n    }\n    activateHover(view, pos, side, locked) {\n        let open = this.source(view, pos, side);\n        let done = (value) => {\n            if (value && !(Array.isArray(value) && !value.length)) {\n                let tooltips = Array.isArray(value) ? value : [value];\n                if (locked)\n                    this.locked.set(tooltips, locked);\n                view.dispatch({ effects: this.setHover.of(tooltips) });\n            }\n        };\n        if (open && \"then\" in open) {\n            let pending = this.pending = { pos };\n            open.then(result => {\n                if (this.pending == pending) {\n                    this.pending = null;\n                    done(result);\n                }\n            }, e => logException(view.state, e, \"hover tooltip\"));\n        }\n        else {\n            done(open);\n        }\n    }\n    get tooltip() {\n        let plugin = this.view.plugin(tooltipPlugin);\n        let index = plugin ? plugin.manager.tooltips.findIndex(t => t.create == HoverTooltipHost.create) : -1;\n        return index > -1 ? plugin.manager.tooltipViews[index] : null;\n    }\n    mousemove(event) {\n        var _a, _b;\n        this.lastMove = { x: event.clientX, y: event.clientY, target: event.target, time: Date.now() };\n        if (this.hoverTimeout < 0)\n            this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime);\n        let { active, tooltip } = this;\n        if (active.length && !this.locked.has(active) && tooltip && !isInTooltip(tooltip.dom, event) || this.pending) {\n            let { pos } = active[0] || this.pending, end = (_b = (_a = active[0]) === null || _a === void 0 ? void 0 : _a.end) !== null && _b !== void 0 ? _b : pos;\n            if ((pos == end ? this.view.posAtCoords(this.lastMove) != pos\n                : !isOverRange(this.view, pos, end, event.clientX, event.clientY))) {\n                this.view.dispatch({ effects: this.setHover.of([]) });\n                this.pending = null;\n            }\n        }\n    }\n    mouseleave(event) {\n        clearTimeout(this.hoverTimeout);\n        this.hoverTimeout = -1;\n        let { active } = this;\n        if (active.length && !this.locked.has(active)) {\n            let { tooltip } = this;\n            let inTooltip = tooltip && tooltip.dom.contains(event.relatedTarget);\n            if (!inTooltip)\n                this.view.dispatch({ effects: this.setHover.of([]) });\n            else\n                this.watchTooltipLeave(tooltip.dom);\n        }\n    }\n    watchTooltipLeave(tooltip) {\n        let watch = (event) => {\n            tooltip.removeEventListener(\"mouseleave\", watch);\n            let { active } = this;\n            if (active.length && !this.locked.has(active) && !this.view.dom.contains(event.relatedTarget))\n                this.view.dispatch({ effects: this.setHover.of([]) });\n        };\n        tooltip.addEventListener(\"mouseleave\", watch);\n    }\n    destroy() {\n        clearTimeout(this.hoverTimeout);\n        clearTimeout(this.restartTimeout);\n        this.view.dom.removeEventListener(\"mouseleave\", this.mouseleave);\n        this.view.dom.removeEventListener(\"mousemove\", this.mousemove);\n    }\n}\nconst tooltipMargin = 4;\nfunction isInTooltip(tooltip, event) {\n    let { left, right, top, bottom } = tooltip.getBoundingClientRect(), arrow;\n    if (arrow = tooltip.querySelector(\".cm-tooltip-arrow\")) {\n        let arrowRect = arrow.getBoundingClientRect();\n        top = Math.min(arrowRect.top, top);\n        bottom = Math.max(arrowRect.bottom, bottom);\n    }\n    return event.clientX >= left - tooltipMargin && event.clientX <= right + tooltipMargin &&\n        event.clientY >= top - tooltipMargin && event.clientY <= bottom + tooltipMargin;\n}\nfunction isOverRange(view, from, to, x, y, margin) {\n    let rect = view.scrollDOM.getBoundingClientRect();\n    let docBottom = view.documentTop + view.documentPadding.top + view.contentHeight;\n    if (rect.left > x || rect.right < x || rect.top > y || Math.min(rect.bottom, docBottom) < y)\n        return false;\n    let pos = view.posAtCoords({ x, y }, false);\n    return pos >= from && pos <= to;\n}\n/**\nSet up a hover tooltip, which shows up when the pointer hovers\nover ranges of text. The callback is called when the mouse hovers\nover the document text. It should, if there is a tooltip\nassociated with position `pos`, return the tooltip description\n(either directly or in a promise). The `side` argument indicates\non which side of the position the pointer is—it will be -1 if the\npointer is before the position, 1 if after the position.\n\nNote that all hover tooltips are hosted within a single tooltip\ncontainer element. This allows multiple tooltips over the same\nrange to be \"merged\" together without overlapping.\n\nThe return value is a valid [editor extension](https://codemirror.net/6/docs/ref/#state.Extension)\nbut also provides an `active` property holding a state field that\ncan be used to read the currently active tooltips produced by this\nextension.\n*/\nfunction hoverTooltip(source, options = {}) {\n    let setHover = StateEffect.define();\n    // This would be better stored in the state field, but we've set\n    // down the type of the field in our interface, so it's indirectly\n    // stored by array identity.\n    let locked = new WeakMap();\n    let hoverState = StateField.define({\n        create() { return []; },\n        update(value, tr) {\n            let lock = locked.get(value);\n            if (value.length) {\n                if (options.hideOnChange && (tr.docChanged || tr.selection))\n                    value = [];\n                else if (lock && lock(tr))\n                    value = [];\n                else if (options.hideOn)\n                    value = value.filter(v => !options.hideOn(tr, v));\n            }\n            if (tr.docChanged && value.length) {\n                let mapped = [];\n                for (let tooltip of value) {\n                    let newPos = tr.changes.mapPos(tooltip.pos, -1, MapMode.TrackDel);\n                    if (newPos != null) {\n                        let copy = Object.assign(Object.create(null), tooltip);\n                        copy.pos = newPos;\n                        if (copy.end != null)\n                            copy.end = tr.changes.mapPos(copy.end);\n                        mapped.push(copy);\n                    }\n                }\n                value = mapped;\n            }\n            for (let effect of tr.effects) {\n                if (effect.is(setHover)) {\n                    value = effect.value;\n                    lock = undefined;\n                }\n                if (effect.is(closeHoverTooltipEffect) && !effect.value || effect.value == hoverState)\n                    value = [];\n            }\n            if (value.length && lock)\n                locked.set(value, lock);\n            return value;\n        },\n        provide: f => showHoverTooltip.from(f)\n    });\n    const plugin = ViewPlugin.define(view => new HoverPlugin(view, source, hoverState, locked, setHover, options.hoverTime || 300 /* Hover.Time */));\n    return {\n        active: hoverState,\n        extension: [\n            hoverState,\n            plugin,\n            hoverPlugin.of(plugin),\n            showHoverTooltipHost\n        ]\n    };\n}\n/**\nActivate hover tooltips for the given position and side. If you\nprovide a specific hover tooltip (the value returned from\n[`hoverTooltip`](https://codemirror.net/6/docs/ref/#view.hoverTooltip)), only that one will be\nactivated. If not given, all hover tooltips at the given position\nare triggered.\n\nNote that tooltips opened this way don't close automatically, and\nyou'll want to pass an `until` callback or use\n[`closeHoverTooltip`](https://codemirror.net/6/docs/ref/#view.closeHoverTooltip)/[`closeHoverTooltips`](https://codemirror.net/6/docs/ref/#view.closeHoverTooltips)\nto deactivate them.\n*/\nfunction activateHover(view, pos, side, options = {}) {\n    var _a;\n    let plugins = view.state.facet(hoverPlugin).map(p => view.plugin(p)).filter((p) => !!p);\n    if (options.tooltip && options.tooltip.active) {\n        let found = plugins.find(p => p.field == options.tooltip.active);\n        if (found)\n            plugins = [found];\n    }\n    for (let plugin of plugins)\n        plugin.activateHover(view, pos, side, (_a = options.until) !== null && _a !== void 0 ? _a : (() => false));\n}\n/**\nGet the active tooltip view for a given tooltip, if available.\n*/\nfunction getTooltip(view, tooltip) {\n    let plugin = view.plugin(tooltipPlugin);\n    if (!plugin)\n        return null;\n    let found = plugin.manager.tooltips.indexOf(tooltip);\n    return found < 0 ? null : plugin.manager.tooltipViews[found];\n}\n/**\nReturns true if any hover tooltips are currently active.\n*/\nfunction hasHoverTooltips(state) {\n    return state.facet(showHoverTooltip).some(x => x);\n}\nconst closeHoverTooltipEffect = /*@__PURE__*/StateEffect.define();\n/**\nTransaction effect that closes all hover tooltips.\n*/\nconst closeHoverTooltips = /*@__PURE__*/closeHoverTooltipEffect.of(null);\n/**\nTransaction effect that closes a specific hover tooltip.\n*/\nfunction closeHoverTooltip(tooltip) {\n    return closeHoverTooltipEffect.of(tooltip.active);\n}\n/**\nTell the tooltip extension to recompute the position of the active\ntooltips. This can be useful when something happens (such as a\nre-positioning or CSS change affecting the editor) that could\ninvalidate the existing tooltip positions.\n*/\nfunction repositionTooltips(view) {\n    let plugin = view.plugin(tooltipPlugin);\n    if (plugin)\n        plugin.maybeMeasure();\n}\n\nconst panelConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        let topContainer, bottomContainer;\n        for (let c of configs) {\n            topContainer = topContainer || c.topContainer;\n            bottomContainer = bottomContainer || c.bottomContainer;\n        }\n        return { topContainer, bottomContainer };\n    }\n});\n/**\nConfigures the panel-managing extension.\n*/\nfunction panels(config) {\n    return config ? [panelConfig.of(config)] : [];\n}\n/**\nGet the active panel created by the given constructor, if any.\nThis can be useful when you need access to your panels' DOM\nstructure.\n*/\nfunction getPanel(view, panel) {\n    let plugin = view.plugin(panelPlugin);\n    let index = plugin ? plugin.specs.indexOf(panel) : -1;\n    return index > -1 ? plugin.panels[index] : null;\n}\nconst panelPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.input = view.state.facet(showPanel);\n        this.specs = this.input.filter(s => s);\n        this.panels = this.specs.map(spec => spec(view));\n        let conf = view.state.facet(panelConfig);\n        this.top = new PanelGroup(view, true, conf.topContainer);\n        this.bottom = new PanelGroup(view, false, conf.bottomContainer);\n        this.top.sync(this.panels.filter(p => p.top));\n        this.bottom.sync(this.panels.filter(p => !p.top));\n        for (let p of this.panels) {\n            p.dom.classList.add(\"cm-panel\");\n            if (p.mount)\n                p.mount();\n        }\n    }\n    update(update) {\n        let conf = update.state.facet(panelConfig);\n        if (this.top.container != conf.topContainer) {\n            this.top.sync([]);\n            this.top = new PanelGroup(update.view, true, conf.topContainer);\n        }\n        if (this.bottom.container != conf.bottomContainer) {\n            this.bottom.sync([]);\n            this.bottom = new PanelGroup(update.view, false, conf.bottomContainer);\n        }\n        this.top.syncClasses();\n        this.bottom.syncClasses();\n        let input = update.state.facet(showPanel);\n        if (input != this.input) {\n            let specs = input.filter(x => x);\n            let panels = [], top = [], bottom = [], mount = [];\n            for (let spec of specs) {\n                let known = this.specs.indexOf(spec), panel;\n                if (known < 0) {\n                    panel = spec(update.view);\n                    mount.push(panel);\n                }\n                else {\n                    panel = this.panels[known];\n                    if (panel.update)\n                        panel.update(update);\n                }\n                panels.push(panel);\n                (panel.top ? top : bottom).push(panel);\n            }\n            this.specs = specs;\n            this.panels = panels;\n            this.top.sync(top);\n            this.bottom.sync(bottom);\n            for (let p of mount) {\n                p.dom.classList.add(\"cm-panel\");\n                if (p.mount)\n                    p.mount();\n            }\n        }\n        else {\n            for (let p of this.panels)\n                if (p.update)\n                    p.update(update);\n        }\n    }\n    destroy() {\n        this.top.sync([]);\n        this.bottom.sync([]);\n    }\n}, {\n    provide: plugin => EditorView.scrollMargins.of(view => {\n        let value = view.plugin(plugin);\n        return value && { top: value.top.scrollMargin(), bottom: value.bottom.scrollMargin() };\n    })\n});\nclass PanelGroup {\n    constructor(view, top, container) {\n        this.view = view;\n        this.top = top;\n        this.container = container;\n        this.dom = undefined;\n        this.classes = \"\";\n        this.panels = [];\n        this.syncClasses();\n    }\n    sync(panels) {\n        for (let p of this.panels)\n            if (p.destroy && panels.indexOf(p) < 0)\n                p.destroy();\n        this.panels = panels;\n        this.syncDOM();\n    }\n    syncDOM() {\n        if (this.panels.length == 0) {\n            if (this.dom) {\n                this.dom.remove();\n                this.dom = undefined;\n            }\n            return;\n        }\n        if (!this.dom) {\n            this.dom = document.createElement(\"div\");\n            this.dom.className = this.top ? \"cm-panels cm-panels-top\" : \"cm-panels cm-panels-bottom\";\n            this.dom.style[this.top ? \"top\" : \"bottom\"] = \"0\";\n            let parent = this.container || this.view.dom;\n            parent.insertBefore(this.dom, this.top ? parent.firstChild : null);\n        }\n        let curDOM = this.dom.firstChild;\n        for (let panel of this.panels) {\n            if (panel.dom.parentNode == this.dom) {\n                while (curDOM != panel.dom)\n                    curDOM = rm(curDOM);\n                curDOM = curDOM.nextSibling;\n            }\n            else {\n                this.dom.insertBefore(panel.dom, curDOM);\n            }\n        }\n        while (curDOM)\n            curDOM = rm(curDOM);\n    }\n    scrollMargin() {\n        return !this.dom || this.container ? 0\n            : Math.max(0, this.top ?\n                this.dom.getBoundingClientRect().bottom - Math.max(0, this.view.scrollDOM.getBoundingClientRect().top) :\n                Math.min(innerHeight, this.view.scrollDOM.getBoundingClientRect().bottom) - this.dom.getBoundingClientRect().top);\n    }\n    syncClasses() {\n        if (!this.container || this.classes == this.view.themeClasses)\n            return;\n        for (let cls of this.classes.split(\" \"))\n            if (cls)\n                this.container.classList.remove(cls);\n        for (let cls of (this.classes = this.view.themeClasses).split(\" \"))\n            if (cls)\n                this.container.classList.add(cls);\n    }\n}\nfunction rm(node) {\n    let next = node.nextSibling;\n    node.remove();\n    return next;\n}\n/**\nOpening a panel is done by providing a constructor function for\nthe panel through this facet. (The panel is closed again when its\nconstructor is no longer provided.) Values of `null` are ignored.\n*/\nconst showPanel = /*@__PURE__*/Facet.define({\n    enables: panelPlugin\n});\n\n/**\nShow a panel above or below the editor to show the user a message\nor prompt them for input. Returns an effect that can be dispatched\nto close the dialog, and a promise that resolves when the dialog\nis closed or a form inside of it is submitted.\n\nYou are encouraged, if your handling of the result of the promise\ndispatches a transaction, to include the `close` effect in it. If\nyou don't, this function will automatically dispatch a separate\ntransaction right after.\n*/\nfunction showDialog(view, config) {\n    let resolve;\n    let promise = new Promise(r => resolve = r);\n    let panelCtor = (view) => createDialog(view, config, resolve);\n    if (view.state.field(dialogField, false)) {\n        view.dispatch({ effects: openDialogEffect.of(panelCtor) });\n    }\n    else {\n        view.dispatch({ effects: StateEffect.appendConfig.of(dialogField.init(() => [panelCtor])) });\n    }\n    let close = closeDialogEffect.of(panelCtor);\n    return { close, result: promise.then(form => {\n            let queue = view.win.queueMicrotask || ((f) => view.win.setTimeout(f, 10));\n            queue(() => {\n                if (view.state.field(dialogField).indexOf(panelCtor) > -1)\n                    view.dispatch({ effects: close });\n            });\n            return form;\n        }) };\n}\n/**\nFind the [`Panel`](https://codemirror.net/6/docs/ref/#view.Panel) for an open dialog, using a class\nname as identifier.\n*/\nfunction getDialog(view, className) {\n    let dialogs = view.state.field(dialogField, false) || [];\n    for (let open of dialogs) {\n        let panel = getPanel(view, open);\n        if (panel && panel.dom.classList.contains(className))\n            return panel;\n    }\n    return null;\n}\nconst dialogField = /*@__PURE__*/StateField.define({\n    create() { return []; },\n    update(dialogs, tr) {\n        for (let e of tr.effects) {\n            if (e.is(openDialogEffect))\n                dialogs = [e.value].concat(dialogs);\n            else if (e.is(closeDialogEffect))\n                dialogs = dialogs.filter(d => d != e.value);\n        }\n        return dialogs;\n    },\n    provide: f => showPanel.computeN([f], state => state.field(f))\n});\nconst openDialogEffect = /*@__PURE__*/StateEffect.define();\nconst closeDialogEffect = /*@__PURE__*/StateEffect.define();\nfunction createDialog(view, config, result) {\n    let content = config.content ? config.content(view, () => done(null)) : null;\n    if (!content) {\n        content = elt(\"form\");\n        if (config.input) {\n            let input = elt(\"input\", config.input);\n            if (/^(text|password|number|email|tel|url)$/.test(input.type))\n                input.classList.add(\"cm-textfield\");\n            if (!input.name)\n                input.name = \"input\";\n            content.appendChild(elt(\"label\", (config.label || \"\") + \": \", input));\n        }\n        else {\n            content.appendChild(document.createTextNode(config.label || \"\"));\n        }\n        content.appendChild(document.createTextNode(\" \"));\n        content.appendChild(elt(\"button\", { class: \"cm-button\", type: \"submit\" }, config.submitLabel || \"OK\"));\n    }\n    let forms = content.nodeName == \"FORM\" ? [content] : content.querySelectorAll(\"form\");\n    for (let i = 0; i < forms.length; i++) {\n        let form = forms[i];\n        form.addEventListener(\"keydown\", (event) => {\n            if (event.keyCode == 27) { // Escape\n                event.preventDefault();\n                done(null);\n            }\n            else if (event.keyCode == 13) { // Enter\n                event.preventDefault();\n                done(form);\n            }\n        });\n        form.addEventListener(\"submit\", (event) => {\n            event.preventDefault();\n            done(form);\n        });\n    }\n    let panel = elt(\"div\", content, elt(\"button\", {\n        onclick: () => done(null),\n        \"aria-label\": view.state.phrase(\"close\"),\n        class: \"cm-dialog-close\",\n        type: \"button\"\n    }, [\"×\"]));\n    if (config.class)\n        panel.className = config.class;\n    panel.classList.add(\"cm-dialog\");\n    function done(form) {\n        if (panel.contains(panel.ownerDocument.activeElement))\n            view.focus();\n        result(form);\n    }\n    return {\n        dom: panel,\n        top: config.top,\n        mount: () => {\n            if (config.focus) {\n                let focus;\n                if (typeof config.focus == \"string\")\n                    focus = content.querySelector(config.focus);\n                else\n                    focus = content.querySelector(\"input\") || content.querySelector(\"button\");\n                if (focus && \"select\" in focus)\n                    focus.select();\n                else if (focus && \"focus\" in focus)\n                    focus.focus();\n            }\n        }\n    };\n}\n\n/**\nA gutter marker represents a bit of information attached to a line\nin a specific gutter. Your own custom markers have to extend this\nclass.\n*/\nclass GutterMarker extends RangeValue {\n    /**\n    @internal\n    */\n    compare(other) {\n        return this == other || this.constructor == other.constructor && this.eq(other);\n    }\n    /**\n    Compare this marker to another marker of the same type.\n    */\n    eq(other) { return false; }\n    /**\n    Called if the marker has a `toDOM` method and its representation\n    was removed from a gutter.\n    */\n    destroy(dom) { }\n}\nGutterMarker.prototype.elementClass = \"\";\nGutterMarker.prototype.toDOM = undefined;\nGutterMarker.prototype.mapMode = MapMode.TrackBefore;\nGutterMarker.prototype.startSide = GutterMarker.prototype.endSide = -1;\nGutterMarker.prototype.point = true;\n/**\nFacet used to add a class to all gutter elements for a given line.\nMarkers given to this facet should _only_ define an\n[`elementclass`](https://codemirror.net/6/docs/ref/#view.GutterMarker.elementClass), not a\n[`toDOM`](https://codemirror.net/6/docs/ref/#view.GutterMarker.toDOM) (or the marker will appear\nin all gutters for the line).\n*/\nconst gutterLineClass = /*@__PURE__*/Facet.define();\n/**\nFacet used to add a class to all gutter elements next to a widget.\nShould not provide widgets with a `toDOM` method.\n*/\nconst gutterWidgetClass = /*@__PURE__*/Facet.define();\nconst defaults = {\n    class: \"\",\n    renderEmptyElements: false,\n    elementStyle: \"\",\n    markers: () => RangeSet.empty,\n    lineMarker: () => null,\n    widgetMarker: () => null,\n    lineMarkerChange: null,\n    initialSpacer: null,\n    updateSpacer: null,\n    domEventHandlers: {},\n    side: \"before\"\n};\nconst activeGutters = /*@__PURE__*/Facet.define();\n/**\nDefine an editor gutter. The order in which the gutters appear is\ndetermined by their extension priority.\n*/\nfunction gutter(config) {\n    return [gutters(), activeGutters.of({ ...defaults, ...config })];\n}\nconst unfixGutters = /*@__PURE__*/Facet.define({\n    combine: values => values.some(x => x)\n});\n/**\nThe gutter-drawing plugin is automatically enabled when you add a\ngutter, but you can use this function to explicitly configure it.\n\nUnless `fixed` is explicitly set to `false`, the gutters are\nfixed, meaning they don't scroll along with the content\nhorizontally (except on Internet Explorer, which doesn't support\nCSS [`position:\nsticky`](https://developer.mozilla.org/en-US/docs/Web/CSS/position#sticky)).\n*/\nfunction gutters(config) {\n    let result = [\n        gutterView,\n    ];\n    if (config && config.fixed === false)\n        result.push(unfixGutters.of(true));\n    return result;\n}\nconst gutterView = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.domAfter = null;\n        this.prevViewport = view.viewport;\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-gutters cm-gutters-before\";\n        this.dom.setAttribute(\"aria-hidden\", \"true\");\n        this.dom.style.minHeight = (this.view.contentHeight / this.view.scaleY) + \"px\";\n        this.gutters = view.state.facet(activeGutters).map(conf => new SingleGutterView(view, conf));\n        this.fixed = !view.state.facet(unfixGutters);\n        for (let gutter of this.gutters) {\n            if (gutter.config.side == \"after\")\n                this.getDOMAfter().appendChild(gutter.dom);\n            else\n                this.dom.appendChild(gutter.dom);\n        }\n        if (this.fixed) {\n            // FIXME IE11 fallback, which doesn't support position: sticky,\n            // by using position: relative + event handlers that realign the\n            // gutter (or just force fixed=false on IE11?)\n            this.dom.style.position = \"sticky\";\n        }\n        this.syncGutters(false);\n        view.scrollDOM.insertBefore(this.dom, view.contentDOM);\n    }\n    getDOMAfter() {\n        if (!this.domAfter) {\n            this.domAfter = document.createElement(\"div\");\n            this.domAfter.className = \"cm-gutters cm-gutters-after\";\n            this.domAfter.setAttribute(\"aria-hidden\", \"true\");\n            this.domAfter.style.minHeight = (this.view.contentHeight / this.view.scaleY) + \"px\";\n            this.domAfter.style.position = this.fixed ? \"sticky\" : \"\";\n            this.view.scrollDOM.appendChild(this.domAfter);\n        }\n        return this.domAfter;\n    }\n    update(update) {\n        if (this.updateGutters(update)) {\n            // Detach during sync when the viewport changed significantly\n            // (such as during scrolling), since for large updates that is\n            // faster.\n            let vpA = this.prevViewport, vpB = update.view.viewport;\n            let vpOverlap = Math.min(vpA.to, vpB.to) - Math.max(vpA.from, vpB.from);\n            this.syncGutters(vpOverlap < (vpB.to - vpB.from) * 0.8);\n        }\n        if (update.geometryChanged) {\n            let min = (this.view.contentHeight / this.view.scaleY) + \"px\";\n            this.dom.style.minHeight = min;\n            if (this.domAfter)\n                this.domAfter.style.minHeight = min;\n        }\n        if (this.view.state.facet(unfixGutters) != !this.fixed) {\n            this.fixed = !this.fixed;\n            this.dom.style.position = this.fixed ? \"sticky\" : \"\";\n            if (this.domAfter)\n                this.domAfter.style.position = this.fixed ? \"sticky\" : \"\";\n        }\n        this.prevViewport = update.view.viewport;\n    }\n    syncGutters(detach) {\n        let after = this.dom.nextSibling;\n        if (detach) {\n            this.dom.remove();\n            if (this.domAfter)\n                this.domAfter.remove();\n        }\n        let lineClasses = RangeSet.iter(this.view.state.facet(gutterLineClass), this.view.viewport.from);\n        let classSet = [];\n        let contexts = this.gutters.map(gutter => new UpdateContext(gutter, this.view.viewport, -this.view.documentPadding.top));\n        for (let line of this.view.viewportLineBlocks) {\n            if (classSet.length)\n                classSet = [];\n            if (Array.isArray(line.type)) {\n                let first = true;\n                for (let b of line.type) {\n                    if (b.type == BlockType.Text && first) {\n                        advanceCursor(lineClasses, classSet, b.from);\n                        for (let cx of contexts)\n                            cx.line(this.view, b, classSet);\n                        first = false;\n                    }\n                    else if (b.widget) {\n                        for (let cx of contexts)\n                            cx.widget(this.view, b);\n                    }\n                }\n            }\n            else if (line.type == BlockType.Text) {\n                advanceCursor(lineClasses, classSet, line.from);\n                for (let cx of contexts)\n                    cx.line(this.view, line, classSet);\n            }\n            else if (line.widget) {\n                for (let cx of contexts)\n                    cx.widget(this.view, line);\n            }\n        }\n        for (let cx of contexts)\n            cx.finish();\n        if (detach) {\n            this.view.scrollDOM.insertBefore(this.dom, after);\n            if (this.domAfter)\n                this.view.scrollDOM.appendChild(this.domAfter);\n        }\n    }\n    updateGutters(update) {\n        let prev = update.startState.facet(activeGutters), cur = update.state.facet(activeGutters);\n        let change = update.docChanged || update.heightChanged || update.viewportChanged ||\n            !RangeSet.eq(update.startState.facet(gutterLineClass), update.state.facet(gutterLineClass), update.view.viewport.from, update.view.viewport.to);\n        if (prev == cur) {\n            for (let gutter of this.gutters)\n                if (gutter.update(update))\n                    change = true;\n        }\n        else {\n            change = true;\n            let gutters = [];\n            for (let conf of cur) {\n                let known = prev.indexOf(conf);\n                if (known < 0) {\n                    gutters.push(new SingleGutterView(this.view, conf));\n                }\n                else {\n                    this.gutters[known].update(update);\n                    gutters.push(this.gutters[known]);\n                }\n            }\n            for (let g of this.gutters) {\n                g.dom.remove();\n                if (gutters.indexOf(g) < 0)\n                    g.destroy();\n            }\n            for (let g of gutters) {\n                if (g.config.side == \"after\")\n                    this.getDOMAfter().appendChild(g.dom);\n                else\n                    this.dom.appendChild(g.dom);\n            }\n            this.gutters = gutters;\n        }\n        return change;\n    }\n    destroy() {\n        for (let view of this.gutters)\n            view.destroy();\n        this.dom.remove();\n        if (this.domAfter)\n            this.domAfter.remove();\n    }\n}, {\n    provide: plugin => EditorView.scrollMargins.of(view => {\n        let value = view.plugin(plugin);\n        if (!value || value.gutters.length == 0 || !value.fixed)\n            return null;\n        let before = value.dom.offsetWidth * view.scaleX, after = value.domAfter ? value.domAfter.offsetWidth * view.scaleX : 0;\n        return view.textDirection == Direction.LTR\n            ? { left: before, right: after }\n            : { right: before, left: after };\n    })\n});\nfunction asArray(val) { return (Array.isArray(val) ? val : [val]); }\nfunction advanceCursor(cursor, collect, pos) {\n    while (cursor.value && cursor.from <= pos) {\n        if (cursor.from == pos)\n            collect.push(cursor.value);\n        cursor.next();\n    }\n}\nclass UpdateContext {\n    constructor(gutter, viewport, height) {\n        this.gutter = gutter;\n        this.height = height;\n        this.i = 0;\n        this.cursor = RangeSet.iter(gutter.markers, viewport.from);\n    }\n    addElement(view, block, markers) {\n        let { gutter } = this, above = (block.top - this.height) / view.scaleY, height = block.height / view.scaleY;\n        if (this.i == gutter.elements.length) {\n            let newElt = new GutterElement(view, height, above, markers);\n            gutter.elements.push(newElt);\n            gutter.dom.appendChild(newElt.dom);\n        }\n        else {\n            gutter.elements[this.i].update(view, height, above, markers);\n        }\n        this.height = block.bottom;\n        this.i++;\n    }\n    line(view, line, extraMarkers) {\n        let localMarkers = [];\n        advanceCursor(this.cursor, localMarkers, line.from);\n        if (extraMarkers.length)\n            localMarkers = localMarkers.concat(extraMarkers);\n        let forLine = this.gutter.config.lineMarker(view, line, localMarkers);\n        if (forLine)\n            localMarkers.unshift(forLine);\n        let gutter = this.gutter;\n        if (localMarkers.length == 0 && !gutter.config.renderEmptyElements)\n            return;\n        this.addElement(view, line, localMarkers);\n    }\n    widget(view, block) {\n        let marker = this.gutter.config.widgetMarker(view, block.widget, block), markers = marker ? [marker] : null;\n        for (let cls of view.state.facet(gutterWidgetClass)) {\n            let marker = cls(view, block.widget, block);\n            if (marker)\n                (markers || (markers = [])).push(marker);\n        }\n        if (markers)\n            this.addElement(view, block, markers);\n    }\n    finish() {\n        let gutter = this.gutter;\n        while (gutter.elements.length > this.i) {\n            let last = gutter.elements.pop();\n            gutter.dom.removeChild(last.dom);\n            last.destroy();\n        }\n    }\n}\nclass SingleGutterView {\n    constructor(view, config) {\n        this.view = view;\n        this.config = config;\n        this.elements = [];\n        this.spacer = null;\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-gutter\" + (this.config.class ? \" \" + this.config.class : \"\");\n        for (let prop in config.domEventHandlers) {\n            this.dom.addEventListener(prop, (event) => {\n                let target = event.target, y;\n                if (target != this.dom && this.dom.contains(target)) {\n                    while (target.parentNode != this.dom)\n                        target = target.parentNode;\n                    let rect = target.getBoundingClientRect();\n                    y = (rect.top + rect.bottom) / 2;\n                }\n                else {\n                    y = event.clientY;\n                }\n                let line = view.lineBlockAtHeight(y - view.documentTop);\n                if (config.domEventHandlers[prop](view, line, event))\n                    event.preventDefault();\n            });\n        }\n        this.markers = asArray(config.markers(view));\n        if (config.initialSpacer) {\n            this.spacer = new GutterElement(view, 0, 0, [config.initialSpacer(view)]);\n            this.dom.appendChild(this.spacer.dom);\n            this.spacer.dom.style.cssText += \"visibility: hidden; pointer-events: none\";\n        }\n    }\n    update(update) {\n        let prevMarkers = this.markers;\n        this.markers = asArray(this.config.markers(update.view));\n        if (this.spacer && this.config.updateSpacer) {\n            let updated = this.config.updateSpacer(this.spacer.markers[0], update);\n            if (updated != this.spacer.markers[0])\n                this.spacer.update(update.view, 0, 0, [updated]);\n        }\n        let vp = update.view.viewport;\n        return !RangeSet.eq(this.markers, prevMarkers, vp.from, vp.to) ||\n            (this.config.lineMarkerChange ? this.config.lineMarkerChange(update) : false);\n    }\n    destroy() {\n        for (let elt of this.elements)\n            elt.destroy();\n    }\n}\nclass GutterElement {\n    constructor(view, height, above, markers) {\n        this.height = -1;\n        this.above = 0;\n        this.markers = [];\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-gutterElement\";\n        this.update(view, height, above, markers);\n    }\n    update(view, height, above, markers) {\n        if (this.height != height) {\n            this.height = height;\n            this.dom.style.height = height + \"px\";\n        }\n        if (this.above != above)\n            this.dom.style.marginTop = (this.above = above) ? above + \"px\" : \"\";\n        if (!sameMarkers(this.markers, markers))\n            this.setMarkers(view, markers);\n    }\n    setMarkers(view, markers) {\n        let cls = \"cm-gutterElement\", domPos = this.dom.firstChild;\n        for (let iNew = 0, iOld = 0;;) {\n            let skipTo = iOld, marker = iNew < markers.length ? markers[iNew++] : null, matched = false;\n            if (marker) {\n                let c = marker.elementClass;\n                if (c)\n                    cls += \" \" + c;\n                for (let i = iOld; i < this.markers.length; i++)\n                    if (this.markers[i].compare(marker)) {\n                        skipTo = i;\n                        matched = true;\n                        break;\n                    }\n            }\n            else {\n                skipTo = this.markers.length;\n            }\n            while (iOld < skipTo) {\n                let next = this.markers[iOld++];\n                if (next.toDOM) {\n                    next.destroy(domPos);\n                    let after = domPos.nextSibling;\n                    domPos.remove();\n                    domPos = after;\n                }\n            }\n            if (!marker)\n                break;\n            if (marker.toDOM) {\n                if (matched)\n                    domPos = domPos.nextSibling;\n                else\n                    this.dom.insertBefore(marker.toDOM(view), domPos);\n            }\n            if (matched)\n                iOld++;\n        }\n        this.dom.className = cls;\n        this.markers = markers;\n    }\n    destroy() {\n        this.setMarkers(null, []); // First argument not used unless creating markers\n    }\n}\nfunction sameMarkers(a, b) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (!a[i].compare(b[i]))\n            return false;\n    return true;\n}\n/**\nFacet used to provide markers to the line number gutter.\n*/\nconst lineNumberMarkers = /*@__PURE__*/Facet.define();\n/**\nFacet used to create markers in the line number gutter next to widgets.\n*/\nconst lineNumberWidgetMarker = /*@__PURE__*/Facet.define();\nconst lineNumberConfig = /*@__PURE__*/Facet.define({\n    combine(values) {\n        return combineConfig(values, { formatNumber: String, domEventHandlers: {} }, {\n            domEventHandlers(a, b) {\n                let result = Object.assign({}, a);\n                for (let event in b) {\n                    let exists = result[event], add = b[event];\n                    result[event] = exists ? (view, line, event) => exists(view, line, event) || add(view, line, event) : add;\n                }\n                return result;\n            }\n        });\n    }\n});\nclass NumberMarker extends GutterMarker {\n    constructor(number) {\n        super();\n        this.number = number;\n    }\n    eq(other) { return this.number == other.number; }\n    toDOM() { return document.createTextNode(this.number); }\n}\nfunction formatNumber(view, number) {\n    return view.state.facet(lineNumberConfig).formatNumber(number, view.state);\n}\nconst lineNumberGutter = /*@__PURE__*/activeGutters.compute([lineNumberConfig], state => ({\n    class: \"cm-lineNumbers\",\n    renderEmptyElements: false,\n    markers(view) { return view.state.facet(lineNumberMarkers); },\n    lineMarker(view, line, others) {\n        if (others.some(m => m.toDOM))\n            return null;\n        return new NumberMarker(formatNumber(view, view.state.doc.lineAt(line.from).number));\n    },\n    widgetMarker: (view, widget, block) => {\n        for (let m of view.state.facet(lineNumberWidgetMarker)) {\n            let result = m(view, widget, block);\n            if (result)\n                return result;\n        }\n        return null;\n    },\n    lineMarkerChange: update => update.startState.facet(lineNumberConfig) != update.state.facet(lineNumberConfig),\n    initialSpacer(view) {\n        return new NumberMarker(formatNumber(view, maxLineNumber(view.state.doc.lines)));\n    },\n    updateSpacer(spacer, update) {\n        let max = formatNumber(update.view, maxLineNumber(update.view.state.doc.lines));\n        return max == spacer.number ? spacer : new NumberMarker(max);\n    },\n    domEventHandlers: state.facet(lineNumberConfig).domEventHandlers,\n    side: \"before\"\n}));\n/**\nCreate a line number gutter extension.\n*/\nfunction lineNumbers(config = {}) {\n    return [\n        lineNumberConfig.of(config),\n        gutters(),\n        lineNumberGutter\n    ];\n}\nfunction maxLineNumber(lines) {\n    let last = 9;\n    while (last < lines)\n        last = last * 10 + 9;\n    return last;\n}\nconst activeLineGutterMarker = /*@__PURE__*/new class extends GutterMarker {\n    constructor() {\n        super(...arguments);\n        this.elementClass = \"cm-activeLineGutter\";\n    }\n};\nconst activeLineGutterHighlighter = /*@__PURE__*/gutterLineClass.compute([\"selection\"], state => {\n    let marks = [], last = -1;\n    for (let range of state.selection.ranges) {\n        let linePos = state.doc.lineAt(range.head).from;\n        if (linePos > last) {\n            last = linePos;\n            marks.push(activeLineGutterMarker.range(linePos));\n        }\n    }\n    return RangeSet.of(marks);\n});\n/**\nReturns an extension that adds a `cm-activeLineGutter` class to\nall gutter elements on the [active\nline](https://codemirror.net/6/docs/ref/#view.highlightActiveLine).\n*/\nfunction highlightActiveLineGutter() {\n    return activeLineGutterHighlighter;\n}\n\nfunction matcher(decorator) {\n    return ViewPlugin.define(view => ({\n        decorations: decorator.createDeco(view),\n        update(u) {\n            this.decorations = decorator.updateDeco(u, this.decorations);\n        },\n    }), {\n        decorations: v => v.decorations\n    });\n}\nconst tabDeco = /*@__PURE__*/Decoration.mark({ class: \"cm-highlightTab\" });\nconst spaceDeco = /*@__PURE__*/Decoration.mark({ class: \"cm-highlightSpace\" });\nconst whitespaceHighlighter = /*@__PURE__*/matcher(/*@__PURE__*/new MatchDecorator({\n    regexp: /\\t| /g,\n    decoration: match => match[0] == \"\\t\" ? tabDeco : spaceDeco,\n    boundary: /\\S/,\n}));\n/**\nReturns an extension that highlights whitespace, adding a\n`cm-highlightSpace` class to stretches of spaces, and a\n`cm-highlightTab` class to individual tab characters. By default,\nthe former are shown as faint dots, and the latter as arrows.\n*/\nfunction highlightWhitespace() {\n    return whitespaceHighlighter;\n}\nconst trailingHighlighter = /*@__PURE__*/matcher(/*@__PURE__*/new MatchDecorator({\n    regexp: /\\s+$/g,\n    decoration: /*@__PURE__*/Decoration.mark({ class: \"cm-trailingSpace\" })\n}));\n/**\nReturns an extension that adds a `cm-trailingSpace` class to all\ntrailing whitespace.\n*/\nfunction highlightTrailingWhitespace() {\n    return trailingHighlighter;\n}\n\n/**\n@internal\n*/\nconst __test = { HeightMap, HeightOracle, MeasuredHeights, QueryType, ChangedRange, computeOrder,\n    moveVisually, clearHeightChangeFlag, getHeightChangeFlag: () => heightChangeFlag };\n\nexport { BidiSpan, BlockInfo, BlockType, BlockWrapper, Decoration, Direction, EditorView, GutterMarker, MatchDecorator, RectangleMarker, ViewPlugin, ViewUpdate, WidgetType, __test, activateHover, closeHoverTooltip, closeHoverTooltips, crosshairCursor, drawSelection, dropCursor, getDialog, getDrawSelectionConfig, getPanel, getTooltip, gutter, gutterLineClass, gutterWidgetClass, gutters, hasHoverTooltips, highlightActiveLine, highlightActiveLineGutter, highlightSpecialChars, highlightTrailingWhitespace, highlightWhitespace, hoverTooltip, keymap, layer, lineNumberMarkers, lineNumberWidgetMarker, lineNumbers, logException, panels, placeholder, rectangularSelection, repositionTooltips, runScopeHandlers, scrollPastEnd, showDialog, showPanel, showTooltip, tooltips };\n","/**\nThe default maximum length of a `TreeBuffer` node.\n*/\nconst DefaultBufferLength = 1024;\nlet nextPropID = 0;\nclass Range {\n    constructor(from, to) {\n        this.from = from;\n        this.to = to;\n    }\n}\n/**\nEach [node type](#common.NodeType) or [individual tree](#common.Tree)\ncan have metadata associated with it in props. Instances of this\nclass represent prop names.\n*/\nclass NodeProp {\n    /**\n    Create a new node prop type.\n    */\n    constructor(config = {}) {\n        this.id = nextPropID++;\n        this.perNode = !!config.perNode;\n        this.deserialize = config.deserialize || (() => {\n            throw new Error(\"This node type doesn't define a deserialize function\");\n        });\n        this.combine = config.combine || null;\n    }\n    /**\n    This is meant to be used with\n    [`NodeSet.extend`](#common.NodeSet.extend) or\n    [`LRParser.configure`](#lr.ParserConfig.props) to compute\n    prop values for each node type in the set. Takes a [match\n    object](#common.NodeType^match) or function that returns undefined\n    if the node type doesn't get this prop, and the prop's value if\n    it does.\n    */\n    add(match) {\n        if (this.perNode)\n            throw new RangeError(\"Can't add per-node props to node types\");\n        if (typeof match != \"function\")\n            match = NodeType.match(match);\n        return (type) => {\n            let result = match(type);\n            return result === undefined ? null : [this, result];\n        };\n    }\n}\n/**\nProp that is used to describe matching delimiters. For opening\ndelimiters, this holds an array of node names (written as a\nspace-separated string when declaring this prop in a grammar)\nfor the node types of closing delimiters that match it.\n*/\nNodeProp.closedBy = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nThe inverse of [`closedBy`](#common.NodeProp^closedBy). This is\nattached to closing delimiters, holding an array of node names\nof types of matching opening delimiters.\n*/\nNodeProp.openedBy = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nUsed to assign node types to groups (for example, all node\ntypes that represent an expression could be tagged with an\n`\"Expression\"` group).\n*/\nNodeProp.group = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nAttached to nodes to indicate these should be\n[displayed](https://codemirror.net/docs/ref/#language.syntaxTree)\nin a bidirectional text isolate, so that direction-neutral\ncharacters on their sides don't incorrectly get associated with\nsurrounding text. You'll generally want to set this for nodes\nthat contain arbitrary text, like strings and comments, and for\nnodes that appear _inside_ arbitrary text, like HTML tags. When\nnot given a value, in a grammar declaration, defaults to\n`\"auto\"`.\n*/\nNodeProp.isolate = new NodeProp({ deserialize: value => {\n        if (value && value != \"rtl\" && value != \"ltr\" && value != \"auto\")\n            throw new RangeError(\"Invalid value for isolate: \" + value);\n        return value || \"auto\";\n    } });\n/**\nThe hash of the [context](#lr.ContextTracker.constructor)\nthat the node was parsed in, if any. Used to limit reuse of\ncontextual nodes.\n*/\nNodeProp.contextHash = new NodeProp({ perNode: true });\n/**\nThe distance beyond the end of the node that the tokenizer\nlooked ahead for any of the tokens inside the node. (The LR\nparser only stores this when it is larger than 25, for\nefficiency reasons.)\n*/\nNodeProp.lookAhead = new NodeProp({ perNode: true });\n/**\nThis per-node prop is used to replace a given node, or part of a\nnode, with another tree. This is useful to include trees from\ndifferent languages in mixed-language parsers.\n*/\nNodeProp.mounted = new NodeProp({ perNode: true });\n/**\nA mounted tree, which can be [stored](#common.NodeProp^mounted) on\na tree node to indicate that parts of its content are\nrepresented by another tree.\n*/\nclass MountedTree {\n    constructor(\n    /**\n    The inner tree.\n    */\n    tree, \n    /**\n    If this is null, this tree replaces the entire node (it will\n    be included in the regular iteration instead of its host\n    node). If not, only the given ranges are considered to be\n    covered by this tree. This is used for trees that are mixed in\n    a way that isn't strictly hierarchical. Such mounted trees are\n    only entered by [`resolveInner`](#common.Tree.resolveInner)\n    and [`enter`](#common.SyntaxNode.enter).\n    */\n    overlay, \n    /**\n    The parser used to create this subtree.\n    */\n    parser) {\n        this.tree = tree;\n        this.overlay = overlay;\n        this.parser = parser;\n    }\n    /**\n    @internal\n    */\n    static get(tree) {\n        return tree && tree.props && tree.props[NodeProp.mounted.id];\n    }\n}\nconst noProps = Object.create(null);\n/**\nEach node in a syntax tree has a node type associated with it.\n*/\nclass NodeType {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The name of the node type. Not necessarily unique, but if the\n    grammar was written properly, different node types with the\n    same name within a node set should play the same semantic\n    role.\n    */\n    name, \n    /**\n    @internal\n    */\n    props, \n    /**\n    The id of this node in its set. Corresponds to the term ids\n    used in the parser.\n    */\n    id, \n    /**\n    @internal\n    */\n    flags = 0) {\n        this.name = name;\n        this.props = props;\n        this.id = id;\n        this.flags = flags;\n    }\n    /**\n    Define a node type.\n    */\n    static define(spec) {\n        let props = spec.props && spec.props.length ? Object.create(null) : noProps;\n        let flags = (spec.top ? 1 /* NodeFlag.Top */ : 0) | (spec.skipped ? 2 /* NodeFlag.Skipped */ : 0) |\n            (spec.error ? 4 /* NodeFlag.Error */ : 0) | (spec.name == null ? 8 /* NodeFlag.Anonymous */ : 0);\n        let type = new NodeType(spec.name || \"\", props, spec.id, flags);\n        if (spec.props)\n            for (let src of spec.props) {\n                if (!Array.isArray(src))\n                    src = src(type);\n                if (src) {\n                    if (src[0].perNode)\n                        throw new RangeError(\"Can't store a per-node prop on a node type\");\n                    props[src[0].id] = src[1];\n                }\n            }\n        return type;\n    }\n    /**\n    Retrieves a node prop for this type. Will return `undefined` if\n    the prop isn't present on this node.\n    */\n    prop(prop) { return this.props[prop.id]; }\n    /**\n    True when this is the top node of a grammar.\n    */\n    get isTop() { return (this.flags & 1 /* NodeFlag.Top */) > 0; }\n    /**\n    True when this node is produced by a skip rule.\n    */\n    get isSkipped() { return (this.flags & 2 /* NodeFlag.Skipped */) > 0; }\n    /**\n    Indicates whether this is an error node.\n    */\n    get isError() { return (this.flags & 4 /* NodeFlag.Error */) > 0; }\n    /**\n    When true, this node type doesn't correspond to a user-declared\n    named node, for example because it is used to cache repetition.\n    */\n    get isAnonymous() { return (this.flags & 8 /* NodeFlag.Anonymous */) > 0; }\n    /**\n    Returns true when this node's name or one of its\n    [groups](#common.NodeProp^group) matches the given string.\n    */\n    is(name) {\n        if (typeof name == 'string') {\n            if (this.name == name)\n                return true;\n            let group = this.prop(NodeProp.group);\n            return group ? group.indexOf(name) > -1 : false;\n        }\n        return this.id == name;\n    }\n    /**\n    Create a function from node types to arbitrary values by\n    specifying an object whose property names are node or\n    [group](#common.NodeProp^group) names. Often useful with\n    [`NodeProp.add`](#common.NodeProp.add). You can put multiple\n    names, separated by spaces, in a single property name to map\n    multiple node names to a single value.\n    */\n    static match(map) {\n        let direct = Object.create(null);\n        for (let prop in map)\n            for (let name of prop.split(\" \"))\n                direct[name] = map[prop];\n        return (node) => {\n            for (let groups = node.prop(NodeProp.group), i = -1; i < (groups ? groups.length : 0); i++) {\n                let found = direct[i < 0 ? node.name : groups[i]];\n                if (found)\n                    return found;\n            }\n        };\n    }\n}\n/**\nAn empty dummy node type to use when no actual type is available.\n*/\nNodeType.none = new NodeType(\"\", Object.create(null), 0, 8 /* NodeFlag.Anonymous */);\n/**\nA node set holds a collection of node types. It is used to\ncompactly represent trees by storing their type ids, rather than a\nfull pointer to the type object, in a numeric array. Each parser\n[has](#lr.LRParser.nodeSet) a node set, and [tree\nbuffers](#common.TreeBuffer) can only store collections of nodes\nfrom the same set. A set can have a maximum of 2**16 (65536) node\ntypes in it, so that the ids fit into 16-bit typed array slots.\n*/\nclass NodeSet {\n    /**\n    Create a set with the given types. The `id` property of each\n    type should correspond to its position within the array.\n    */\n    constructor(\n    /**\n    The node types in this set, by id.\n    */\n    types) {\n        this.types = types;\n        for (let i = 0; i < types.length; i++)\n            if (types[i].id != i)\n                throw new RangeError(\"Node type ids should correspond to array positions when creating a node set\");\n    }\n    /**\n    Create a copy of this set with some node properties added. The\n    arguments to this method can be created with\n    [`NodeProp.add`](#common.NodeProp.add).\n    */\n    extend(...props) {\n        let newTypes = [];\n        for (let type of this.types) {\n            let newProps = null;\n            for (let source of props) {\n                let add = source(type);\n                if (add) {\n                    if (!newProps)\n                        newProps = Object.assign({}, type.props);\n                    let value = add[1], prop = add[0];\n                    if (prop.combine && prop.id in newProps)\n                        value = prop.combine(newProps[prop.id], value);\n                    newProps[prop.id] = value;\n                }\n            }\n            newTypes.push(newProps ? new NodeType(type.name, newProps, type.id, type.flags) : type);\n        }\n        return new NodeSet(newTypes);\n    }\n}\nconst CachedNode = new WeakMap(), CachedInnerNode = new WeakMap();\n/**\nOptions that control iteration. Can be combined with the `|`\noperator to enable multiple ones.\n*/\nvar IterMode;\n(function (IterMode) {\n    /**\n    When enabled, iteration will only visit [`Tree`](#common.Tree)\n    objects, not nodes packed into\n    [`TreeBuffer`](#common.TreeBuffer)s.\n    */\n    IterMode[IterMode[\"ExcludeBuffers\"] = 1] = \"ExcludeBuffers\";\n    /**\n    Enable this to make iteration include anonymous nodes (such as\n    the nodes that wrap repeated grammar constructs into a balanced\n    tree).\n    */\n    IterMode[IterMode[\"IncludeAnonymous\"] = 2] = \"IncludeAnonymous\";\n    /**\n    By default, regular [mounted](#common.NodeProp^mounted) nodes\n    replace their base node in iteration. Enable this to ignore them\n    instead.\n    */\n    IterMode[IterMode[\"IgnoreMounts\"] = 4] = \"IgnoreMounts\";\n    /**\n    This option only applies in\n    [`enter`](#common.SyntaxNode.enter)-style methods. It tells the\n    library to not enter mounted overlays if one covers the given\n    position.\n    */\n    IterMode[IterMode[\"IgnoreOverlays\"] = 8] = \"IgnoreOverlays\";\n})(IterMode || (IterMode = {}));\n/**\nA piece of syntax tree. There are two ways to approach these\ntrees: the way they are actually stored in memory, and the\nconvenient way.\n\nSyntax trees are stored as a tree of `Tree` and `TreeBuffer`\nobjects. By packing detail information into `TreeBuffer` leaf\nnodes, the representation is made a lot more memory-efficient.\n\nHowever, when you want to actually work with tree nodes, this\nrepresentation is very awkward, so most client code will want to\nuse the [`TreeCursor`](#common.TreeCursor) or\n[`SyntaxNode`](#common.SyntaxNode) interface instead, which provides\na view on some part of this data structure, and can be used to\nmove around to adjacent nodes.\n*/\nclass Tree {\n    /**\n    Construct a new tree. See also [`Tree.build`](#common.Tree^build).\n    */\n    constructor(\n    /**\n    The type of the top node.\n    */\n    type, \n    /**\n    This node's child nodes.\n    */\n    children, \n    /**\n    The positions (offsets relative to the start of this tree) of\n    the children.\n    */\n    positions, \n    /**\n    The total length of this tree\n    */\n    length, \n    /**\n    Per-node [node props](#common.NodeProp) to associate with this node.\n    */\n    props) {\n        this.type = type;\n        this.children = children;\n        this.positions = positions;\n        this.length = length;\n        /**\n        @internal\n        */\n        this.props = null;\n        if (props && props.length) {\n            this.props = Object.create(null);\n            for (let [prop, value] of props)\n                this.props[typeof prop == \"number\" ? prop : prop.id] = value;\n        }\n    }\n    /**\n    @internal\n    */\n    toString() {\n        let mounted = MountedTree.get(this);\n        if (mounted && !mounted.overlay)\n            return mounted.tree.toString();\n        let children = \"\";\n        for (let ch of this.children) {\n            let str = ch.toString();\n            if (str) {\n                if (children)\n                    children += \",\";\n                children += str;\n            }\n        }\n        return !this.type.name ? children :\n            (/\\W/.test(this.type.name) && !this.type.isError ? JSON.stringify(this.type.name) : this.type.name) +\n                (children.length ? \"(\" + children + \")\" : \"\");\n    }\n    /**\n    Get a [tree cursor](#common.TreeCursor) positioned at the top of\n    the tree. Mode can be used to [control](#common.IterMode) which\n    nodes the cursor visits.\n    */\n    cursor(mode = 0) {\n        return new TreeCursor(this.topNode, mode);\n    }\n    /**\n    Get a [tree cursor](#common.TreeCursor) pointing into this tree\n    at the given position and side (see\n    [`moveTo`](#common.TreeCursor.moveTo).\n    */\n    cursorAt(pos, side = 0, mode = 0) {\n        let scope = CachedNode.get(this) || this.topNode;\n        let cursor = new TreeCursor(scope);\n        cursor.moveTo(pos, side);\n        CachedNode.set(this, cursor._tree);\n        return cursor;\n    }\n    /**\n    Get a [syntax node](#common.SyntaxNode) object for the top of the\n    tree.\n    */\n    get topNode() {\n        return new TreeNode(this, 0, 0, null);\n    }\n    /**\n    Get the [syntax node](#common.SyntaxNode) at the given position.\n    If `side` is -1, this will move into nodes that end at the\n    position. If 1, it'll move into nodes that start at the\n    position. With 0, it'll only enter nodes that cover the position\n    from both sides.\n    \n    Note that this will not enter\n    [overlays](#common.MountedTree.overlay), and you often want\n    [`resolveInner`](#common.Tree.resolveInner) instead.\n    */\n    resolve(pos, side = 0) {\n        let node = resolveNode(CachedNode.get(this) || this.topNode, pos, side, false);\n        CachedNode.set(this, node);\n        return node;\n    }\n    /**\n    Like [`resolve`](#common.Tree.resolve), but will enter\n    [overlaid](#common.MountedTree.overlay) nodes, producing a syntax node\n    pointing into the innermost overlaid tree at the given position\n    (with parent links going through all parent structure, including\n    the host trees).\n    */\n    resolveInner(pos, side = 0) {\n        let node = resolveNode(CachedInnerNode.get(this) || this.topNode, pos, side, true);\n        CachedInnerNode.set(this, node);\n        return node;\n    }\n    /**\n    In some situations, it can be useful to iterate through all\n    nodes around a position, including those in overlays that don't\n    directly cover the position. This method gives you an iterator\n    that will produce all nodes, from small to big, around the given\n    position.\n    */\n    resolveStack(pos, side = 0) {\n        return stackIterator(this, pos, side);\n    }\n    /**\n    Iterate over the tree and its children, calling `enter` for any\n    node that touches the `from`/`to` region (if given) before\n    running over such a node's children, and `leave` (if given) when\n    leaving the node. When `enter` returns `false`, that node will\n    not have its children iterated over (or `leave` called).\n    */\n    iterate(spec) {\n        let { enter, leave, from = 0, to = this.length } = spec;\n        let mode = spec.mode || 0, anon = (mode & IterMode.IncludeAnonymous) > 0;\n        for (let c = this.cursor(mode | IterMode.IncludeAnonymous);;) {\n            let entered = false;\n            if (c.from <= to && c.to >= from && (!anon && c.type.isAnonymous || enter(c) !== false)) {\n                if (c.firstChild())\n                    continue;\n                entered = true;\n            }\n            for (;;) {\n                if (entered && leave && (anon || !c.type.isAnonymous))\n                    leave(c);\n                if (c.nextSibling())\n                    break;\n                if (!c.parent())\n                    return;\n                entered = true;\n            }\n        }\n    }\n    /**\n    Get the value of the given [node prop](#common.NodeProp) for this\n    node. Works with both per-node and per-type props.\n    */\n    prop(prop) {\n        return !prop.perNode ? this.type.prop(prop) : this.props ? this.props[prop.id] : undefined;\n    }\n    /**\n    Returns the node's [per-node props](#common.NodeProp.perNode) in a\n    format that can be passed to the [`Tree`](#common.Tree)\n    constructor.\n    */\n    get propValues() {\n        let result = [];\n        if (this.props)\n            for (let id in this.props)\n                result.push([+id, this.props[id]]);\n        return result;\n    }\n    /**\n    Balance the direct children of this tree, producing a copy of\n    which may have children grouped into subtrees with type\n    [`NodeType.none`](#common.NodeType^none).\n    */\n    balance(config = {}) {\n        return this.children.length <= 8 /* Balance.BranchFactor */ ? this :\n            balanceRange(NodeType.none, this.children, this.positions, 0, this.children.length, 0, this.length, (children, positions, length) => new Tree(this.type, children, positions, length, this.propValues), config.makeTree || ((children, positions, length) => new Tree(NodeType.none, children, positions, length)));\n    }\n    /**\n    Build a tree from a postfix-ordered buffer of node information,\n    or a cursor over such a buffer.\n    */\n    static build(data) { return buildTree(data); }\n}\n/**\nThe empty tree\n*/\nTree.empty = new Tree(NodeType.none, [], [], 0);\nclass FlatBufferCursor {\n    constructor(buffer, index) {\n        this.buffer = buffer;\n        this.index = index;\n    }\n    get id() { return this.buffer[this.index - 4]; }\n    get start() { return this.buffer[this.index - 3]; }\n    get end() { return this.buffer[this.index - 2]; }\n    get size() { return this.buffer[this.index - 1]; }\n    get pos() { return this.index; }\n    next() { this.index -= 4; }\n    fork() { return new FlatBufferCursor(this.buffer, this.index); }\n}\n/**\nTree buffers contain (type, start, end, endIndex) quads for each\nnode. In such a buffer, nodes are stored in prefix order (parents\nbefore children, with the endIndex of the parent indicating which\nchildren belong to it).\n*/\nclass TreeBuffer {\n    /**\n    Create a tree buffer.\n    */\n    constructor(\n    /**\n    The buffer's content.\n    */\n    buffer, \n    /**\n    The total length of the group of nodes in the buffer.\n    */\n    length, \n    /**\n    The node set used in this buffer.\n    */\n    set) {\n        this.buffer = buffer;\n        this.length = length;\n        this.set = set;\n    }\n    /**\n    @internal\n    */\n    get type() { return NodeType.none; }\n    /**\n    @internal\n    */\n    toString() {\n        let result = [];\n        for (let index = 0; index < this.buffer.length;) {\n            result.push(this.childString(index));\n            index = this.buffer[index + 3];\n        }\n        return result.join(\",\");\n    }\n    /**\n    @internal\n    */\n    childString(index) {\n        let id = this.buffer[index], endIndex = this.buffer[index + 3];\n        let type = this.set.types[id], result = type.name;\n        if (/\\W/.test(result) && !type.isError)\n            result = JSON.stringify(result);\n        index += 4;\n        if (endIndex == index)\n            return result;\n        let children = [];\n        while (index < endIndex) {\n            children.push(this.childString(index));\n            index = this.buffer[index + 3];\n        }\n        return result + \"(\" + children.join(\",\") + \")\";\n    }\n    /**\n    @internal\n    */\n    findChild(startIndex, endIndex, dir, pos, side) {\n        let { buffer } = this, pick = -1;\n        for (let i = startIndex; i != endIndex; i = buffer[i + 3]) {\n            if (checkSide(side, pos, buffer[i + 1], buffer[i + 2])) {\n                pick = i;\n                if (dir > 0)\n                    break;\n            }\n        }\n        return pick;\n    }\n    /**\n    @internal\n    */\n    slice(startI, endI, from) {\n        let b = this.buffer;\n        let copy = new Uint16Array(endI - startI), len = 0;\n        for (let i = startI, j = 0; i < endI;) {\n            copy[j++] = b[i++];\n            copy[j++] = b[i++] - from;\n            let to = copy[j++] = b[i++] - from;\n            copy[j++] = b[i++] - startI;\n            len = Math.max(len, to);\n        }\n        return new TreeBuffer(copy, len, this.set);\n    }\n}\nfunction checkSide(side, pos, from, to) {\n    switch (side) {\n        case -2 /* Side.Before */: return from < pos;\n        case -1 /* Side.AtOrBefore */: return to >= pos && from < pos;\n        case 0 /* Side.Around */: return from < pos && to > pos;\n        case 1 /* Side.AtOrAfter */: return from <= pos && to > pos;\n        case 2 /* Side.After */: return to > pos;\n        case 4 /* Side.DontCare */: return true;\n    }\n}\nfunction resolveNode(node, pos, side, overlays) {\n    var _a;\n    // Move up to a node that actually holds the position, if possible\n    while (node.from == node.to ||\n        (side < 1 ? node.from >= pos : node.from > pos) ||\n        (side > -1 ? node.to <= pos : node.to < pos)) {\n        let parent = !overlays && node instanceof TreeNode && node.index < 0 ? null : node.parent;\n        if (!parent)\n            return node;\n        node = parent;\n    }\n    let mode = overlays ? 0 : IterMode.IgnoreOverlays;\n    // Must go up out of overlays when those do not overlap with pos\n    if (overlays)\n        for (let scan = node, parent = scan.parent; parent; scan = parent, parent = scan.parent) {\n            if (scan instanceof TreeNode && scan.index < 0 && ((_a = parent.enter(pos, side, mode)) === null || _a === void 0 ? void 0 : _a.from) != scan.from)\n                node = parent;\n        }\n    for (;;) {\n        let inner = node.enter(pos, side, mode);\n        if (!inner)\n            return node;\n        node = inner;\n    }\n}\nclass BaseNode {\n    cursor(mode = 0) { return new TreeCursor(this, mode); }\n    getChild(type, before = null, after = null) {\n        let r = getChildren(this, type, before, after);\n        return r.length ? r[0] : null;\n    }\n    getChildren(type, before = null, after = null) {\n        return getChildren(this, type, before, after);\n    }\n    resolve(pos, side = 0) {\n        return resolveNode(this, pos, side, false);\n    }\n    resolveInner(pos, side = 0) {\n        return resolveNode(this, pos, side, true);\n    }\n    matchContext(context) {\n        return matchNodeContext(this.parent, context);\n    }\n    enterUnfinishedNodesBefore(pos) {\n        let scan = this.childBefore(pos), node = this;\n        while (scan) {\n            let last = scan.lastChild;\n            if (!last || last.to != scan.to)\n                break;\n            if (last.type.isError && last.from == last.to) {\n                node = scan;\n                scan = last.prevSibling;\n            }\n            else {\n                scan = last;\n            }\n        }\n        return node;\n    }\n    get node() { return this; }\n    get next() { return this.parent; }\n}\nclass TreeNode extends BaseNode {\n    constructor(_tree, from, \n    // Index in parent node, set to -1 if the node is not a direct child of _parent.node (overlay)\n    index, _parent) {\n        super();\n        this._tree = _tree;\n        this.from = from;\n        this.index = index;\n        this._parent = _parent;\n    }\n    get type() { return this._tree.type; }\n    get name() { return this._tree.type.name; }\n    get to() { return this.from + this._tree.length; }\n    nextChild(i, dir, pos, side, mode = 0) {\n        for (let parent = this;;) {\n            for (let { children, positions } = parent._tree, e = dir > 0 ? children.length : -1; i != e; i += dir) {\n                let next = children[i], start = positions[i] + parent.from;\n                if (!checkSide(side, pos, start, start + next.length))\n                    continue;\n                if (next instanceof TreeBuffer) {\n                    if (mode & IterMode.ExcludeBuffers)\n                        continue;\n                    let index = next.findChild(0, next.buffer.length, dir, pos - start, side);\n                    if (index > -1)\n                        return new BufferNode(new BufferContext(parent, next, i, start), null, index);\n                }\n                else if ((mode & IterMode.IncludeAnonymous) || (!next.type.isAnonymous || hasChild(next))) {\n                    let mounted;\n                    if (!(mode & IterMode.IgnoreMounts) && (mounted = MountedTree.get(next)) && !mounted.overlay)\n                        return new TreeNode(mounted.tree, start, i, parent);\n                    let inner = new TreeNode(next, start, i, parent);\n                    return (mode & IterMode.IncludeAnonymous) || !inner.type.isAnonymous ? inner\n                        : inner.nextChild(dir < 0 ? next.children.length - 1 : 0, dir, pos, side);\n                }\n            }\n            if ((mode & IterMode.IncludeAnonymous) || !parent.type.isAnonymous)\n                return null;\n            if (parent.index >= 0)\n                i = parent.index + dir;\n            else\n                i = dir < 0 ? -1 : parent._parent._tree.children.length;\n            parent = parent._parent;\n            if (!parent)\n                return null;\n        }\n    }\n    get firstChild() { return this.nextChild(0, 1, 0, 4 /* Side.DontCare */); }\n    get lastChild() { return this.nextChild(this._tree.children.length - 1, -1, 0, 4 /* Side.DontCare */); }\n    childAfter(pos) { return this.nextChild(0, 1, pos, 2 /* Side.After */); }\n    childBefore(pos) { return this.nextChild(this._tree.children.length - 1, -1, pos, -2 /* Side.Before */); }\n    prop(prop) { return this._tree.prop(prop); }\n    enter(pos, side, mode = 0) {\n        let mounted;\n        if (!(mode & IterMode.IgnoreOverlays) && (mounted = MountedTree.get(this._tree)) && mounted.overlay) {\n            let rPos = pos - this.from;\n            for (let { from, to } of mounted.overlay) {\n                if ((side > 0 ? from <= rPos : from < rPos) &&\n                    (side < 0 ? to >= rPos : to > rPos))\n                    return new TreeNode(mounted.tree, mounted.overlay[0].from + this.from, -1, this);\n            }\n        }\n        return this.nextChild(0, 1, pos, side, mode);\n    }\n    nextSignificantParent() {\n        let val = this;\n        while (val.type.isAnonymous && val._parent)\n            val = val._parent;\n        return val;\n    }\n    get parent() {\n        return this._parent ? this._parent.nextSignificantParent() : null;\n    }\n    get nextSibling() {\n        return this._parent && this.index >= 0 ? this._parent.nextChild(this.index + 1, 1, 0, 4 /* Side.DontCare */) : null;\n    }\n    get prevSibling() {\n        return this._parent && this.index >= 0 ? this._parent.nextChild(this.index - 1, -1, 0, 4 /* Side.DontCare */) : null;\n    }\n    get tree() { return this._tree; }\n    toTree() { return this._tree; }\n    /**\n    @internal\n    */\n    toString() { return this._tree.toString(); }\n}\nfunction getChildren(node, type, before, after) {\n    let cur = node.cursor(), result = [];\n    if (!cur.firstChild())\n        return result;\n    if (before != null)\n        for (let found = false; !found;) {\n            found = cur.type.is(before);\n            if (!cur.nextSibling())\n                return result;\n        }\n    for (;;) {\n        if (after != null && cur.type.is(after))\n            return result;\n        if (cur.type.is(type))\n            result.push(cur.node);\n        if (!cur.nextSibling())\n            return after == null ? result : [];\n    }\n}\nfunction matchNodeContext(node, context, i = context.length - 1) {\n    for (let p = node; i >= 0; p = p.parent) {\n        if (!p)\n            return false;\n        if (!p.type.isAnonymous) {\n            if (context[i] && context[i] != p.name)\n                return false;\n            i--;\n        }\n    }\n    return true;\n}\nclass BufferContext {\n    constructor(parent, buffer, index, start) {\n        this.parent = parent;\n        this.buffer = buffer;\n        this.index = index;\n        this.start = start;\n    }\n}\nclass BufferNode extends BaseNode {\n    get name() { return this.type.name; }\n    get from() { return this.context.start + this.context.buffer.buffer[this.index + 1]; }\n    get to() { return this.context.start + this.context.buffer.buffer[this.index + 2]; }\n    constructor(context, _parent, index) {\n        super();\n        this.context = context;\n        this._parent = _parent;\n        this.index = index;\n        this.type = context.buffer.set.types[context.buffer.buffer[index]];\n    }\n    child(dir, pos, side) {\n        let { buffer } = this.context;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.context.start, side);\n        return index < 0 ? null : new BufferNode(this.context, this, index);\n    }\n    get firstChild() { return this.child(1, 0, 4 /* Side.DontCare */); }\n    get lastChild() { return this.child(-1, 0, 4 /* Side.DontCare */); }\n    childAfter(pos) { return this.child(1, pos, 2 /* Side.After */); }\n    childBefore(pos) { return this.child(-1, pos, -2 /* Side.Before */); }\n    prop(prop) { return this.type.prop(prop); }\n    enter(pos, side, mode = 0) {\n        if (mode & IterMode.ExcludeBuffers)\n            return null;\n        let { buffer } = this.context;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], side > 0 ? 1 : -1, pos - this.context.start, side);\n        return index < 0 ? null : new BufferNode(this.context, this, index);\n    }\n    get parent() {\n        return this._parent || this.context.parent.nextSignificantParent();\n    }\n    externalSibling(dir) {\n        return this._parent ? null : this.context.parent.nextChild(this.context.index + dir, dir, 0, 4 /* Side.DontCare */);\n    }\n    get nextSibling() {\n        let { buffer } = this.context;\n        let after = buffer.buffer[this.index + 3];\n        if (after < (this._parent ? buffer.buffer[this._parent.index + 3] : buffer.buffer.length))\n            return new BufferNode(this.context, this._parent, after);\n        return this.externalSibling(1);\n    }\n    get prevSibling() {\n        let { buffer } = this.context;\n        let parentStart = this._parent ? this._parent.index + 4 : 0;\n        if (this.index == parentStart)\n            return this.externalSibling(-1);\n        return new BufferNode(this.context, this._parent, buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */));\n    }\n    get tree() { return null; }\n    toTree() {\n        let children = [], positions = [];\n        let { buffer } = this.context;\n        let startI = this.index + 4, endI = buffer.buffer[this.index + 3];\n        if (endI > startI) {\n            let from = buffer.buffer[this.index + 1];\n            children.push(buffer.slice(startI, endI, from));\n            positions.push(0);\n        }\n        return new Tree(this.type, children, positions, this.to - this.from);\n    }\n    /**\n    @internal\n    */\n    toString() { return this.context.buffer.childString(this.index); }\n}\nfunction iterStack(heads) {\n    if (!heads.length)\n        return null;\n    let pick = 0, picked = heads[0];\n    for (let i = 1; i < heads.length; i++) {\n        let node = heads[i];\n        if (node.from > picked.from || node.to < picked.to) {\n            picked = node;\n            pick = i;\n        }\n    }\n    let next = picked instanceof TreeNode && picked.index < 0 ? null : picked.parent;\n    let newHeads = heads.slice();\n    if (next)\n        newHeads[pick] = next;\n    else\n        newHeads.splice(pick, 1);\n    return new StackIterator(newHeads, picked);\n}\nclass StackIterator {\n    constructor(heads, node) {\n        this.heads = heads;\n        this.node = node;\n    }\n    get next() { return iterStack(this.heads); }\n}\nfunction stackIterator(tree, pos, side) {\n    let inner = tree.resolveInner(pos, side), layers = null;\n    for (let scan = inner instanceof TreeNode ? inner : inner.context.parent; scan; scan = scan.parent) {\n        if (scan.index < 0) { // This is an overlay root\n            let parent = scan.parent;\n            (layers || (layers = [inner])).push(parent.resolve(pos, side));\n            scan = parent;\n        }\n        else {\n            let mount = MountedTree.get(scan.tree);\n            // Relevant overlay branching off\n            if (mount && mount.overlay && mount.overlay[0].from <= pos && mount.overlay[mount.overlay.length - 1].to >= pos) {\n                let root = new TreeNode(mount.tree, mount.overlay[0].from + scan.from, -1, scan);\n                (layers || (layers = [inner])).push(resolveNode(root, pos, side, false));\n            }\n        }\n    }\n    return layers ? iterStack(layers) : inner;\n}\n/**\nA tree cursor object focuses on a given node in a syntax tree, and\nallows you to move to adjacent nodes.\n*/\nclass TreeCursor {\n    /**\n    Shorthand for `.type.name`.\n    */\n    get name() { return this.type.name; }\n    /**\n    @internal\n    */\n    constructor(node, \n    /**\n    @internal\n    */\n    mode = 0) {\n        this.mode = mode;\n        /**\n        @internal\n        */\n        this.buffer = null;\n        this.stack = [];\n        /**\n        @internal\n        */\n        this.index = 0;\n        this.bufferNode = null;\n        if (node instanceof TreeNode) {\n            this.yieldNode(node);\n        }\n        else {\n            this._tree = node.context.parent;\n            this.buffer = node.context;\n            for (let n = node._parent; n; n = n._parent)\n                this.stack.unshift(n.index);\n            this.bufferNode = node;\n            this.yieldBuf(node.index);\n        }\n    }\n    yieldNode(node) {\n        if (!node)\n            return false;\n        this._tree = node;\n        this.type = node.type;\n        this.from = node.from;\n        this.to = node.to;\n        return true;\n    }\n    yieldBuf(index, type) {\n        this.index = index;\n        let { start, buffer } = this.buffer;\n        this.type = type || buffer.set.types[buffer.buffer[index]];\n        this.from = start + buffer.buffer[index + 1];\n        this.to = start + buffer.buffer[index + 2];\n        return true;\n    }\n    /**\n    @internal\n    */\n    yield(node) {\n        if (!node)\n            return false;\n        if (node instanceof TreeNode) {\n            this.buffer = null;\n            return this.yieldNode(node);\n        }\n        this.buffer = node.context;\n        return this.yieldBuf(node.index, node.type);\n    }\n    /**\n    @internal\n    */\n    toString() {\n        return this.buffer ? this.buffer.buffer.childString(this.index) : this._tree.toString();\n    }\n    /**\n    @internal\n    */\n    enterChild(dir, pos, side) {\n        if (!this.buffer)\n            return this.yield(this._tree.nextChild(dir < 0 ? this._tree._tree.children.length - 1 : 0, dir, pos, side, this.mode));\n        let { buffer } = this.buffer;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.buffer.start, side);\n        if (index < 0)\n            return false;\n        this.stack.push(this.index);\n        return this.yieldBuf(index);\n    }\n    /**\n    Move the cursor to this node's first child. When this returns\n    false, the node has no child, and the cursor has not been moved.\n    */\n    firstChild() { return this.enterChild(1, 0, 4 /* Side.DontCare */); }\n    /**\n    Move the cursor to this node's last child.\n    */\n    lastChild() { return this.enterChild(-1, 0, 4 /* Side.DontCare */); }\n    /**\n    Move the cursor to the first child that ends after `pos`.\n    */\n    childAfter(pos) { return this.enterChild(1, pos, 2 /* Side.After */); }\n    /**\n    Move to the last child that starts before `pos`.\n    */\n    childBefore(pos) { return this.enterChild(-1, pos, -2 /* Side.Before */); }\n    /**\n    Move the cursor to the child around `pos`. If side is -1 the\n    child may end at that position, when 1 it may start there. This\n    will also enter [overlaid](#common.MountedTree.overlay)\n    [mounted](#common.NodeProp^mounted) trees unless `overlays` is\n    set to false.\n    */\n    enter(pos, side, mode = this.mode) {\n        if (!this.buffer)\n            return this.yield(this._tree.enter(pos, side, mode));\n        return mode & IterMode.ExcludeBuffers ? false : this.enterChild(1, pos, side);\n    }\n    /**\n    Move to the node's parent node, if this isn't the top node.\n    */\n    parent() {\n        if (!this.buffer)\n            return this.yieldNode((this.mode & IterMode.IncludeAnonymous) ? this._tree._parent : this._tree.parent);\n        if (this.stack.length)\n            return this.yieldBuf(this.stack.pop());\n        let parent = (this.mode & IterMode.IncludeAnonymous) ? this.buffer.parent : this.buffer.parent.nextSignificantParent();\n        this.buffer = null;\n        return this.yieldNode(parent);\n    }\n    /**\n    @internal\n    */\n    sibling(dir) {\n        if (!this.buffer)\n            return !this._tree._parent ? false\n                : this.yield(this._tree.index < 0 ? null\n                    : this._tree._parent.nextChild(this._tree.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode));\n        let { buffer } = this.buffer, d = this.stack.length - 1;\n        if (dir < 0) {\n            let parentStart = d < 0 ? 0 : this.stack[d] + 4;\n            if (this.index != parentStart)\n                return this.yieldBuf(buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */));\n        }\n        else {\n            let after = buffer.buffer[this.index + 3];\n            if (after < (d < 0 ? buffer.buffer.length : buffer.buffer[this.stack[d] + 3]))\n                return this.yieldBuf(after);\n        }\n        return d < 0 ? this.yield(this.buffer.parent.nextChild(this.buffer.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode)) : false;\n    }\n    /**\n    Move to this node's next sibling, if any.\n    */\n    nextSibling() { return this.sibling(1); }\n    /**\n    Move to this node's previous sibling, if any.\n    */\n    prevSibling() { return this.sibling(-1); }\n    atLastNode(dir) {\n        let index, parent, { buffer } = this;\n        if (buffer) {\n            if (dir > 0) {\n                if (this.index < buffer.buffer.buffer.length)\n                    return false;\n            }\n            else {\n                for (let i = 0; i < this.index; i++)\n                    if (buffer.buffer.buffer[i + 3] < this.index)\n                        return false;\n            }\n            ({ index, parent } = buffer);\n        }\n        else {\n            ({ index, _parent: parent } = this._tree);\n        }\n        for (; parent; { index, _parent: parent } = parent) {\n            if (index > -1)\n                for (let i = index + dir, e = dir < 0 ? -1 : parent._tree.children.length; i != e; i += dir) {\n                    let child = parent._tree.children[i];\n                    if ((this.mode & IterMode.IncludeAnonymous) ||\n                        child instanceof TreeBuffer ||\n                        !child.type.isAnonymous ||\n                        hasChild(child))\n                        return false;\n                }\n        }\n        return true;\n    }\n    move(dir, enter) {\n        if (enter && this.enterChild(dir, 0, 4 /* Side.DontCare */))\n            return true;\n        for (;;) {\n            if (this.sibling(dir))\n                return true;\n            if (this.atLastNode(dir) || !this.parent())\n                return false;\n        }\n    }\n    /**\n    Move to the next node in a\n    [pre-order](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order,_NLR)\n    traversal, going from a node to its first child or, if the\n    current node is empty or `enter` is false, its next sibling or\n    the next sibling of the first parent node that has one.\n    */\n    next(enter = true) { return this.move(1, enter); }\n    /**\n    Move to the next node in a last-to-first pre-order traversal. A\n    node is followed by its last child or, if it has none, its\n    previous sibling or the previous sibling of the first parent\n    node that has one.\n    */\n    prev(enter = true) { return this.move(-1, enter); }\n    /**\n    Move the cursor to the innermost node that covers `pos`. If\n    `side` is -1, it will enter nodes that end at `pos`. If it is 1,\n    it will enter nodes that start at `pos`.\n    */\n    moveTo(pos, side = 0) {\n        // Move up to a node that actually holds the position, if possible\n        while (this.from == this.to ||\n            (side < 1 ? this.from >= pos : this.from > pos) ||\n            (side > -1 ? this.to <= pos : this.to < pos))\n            if (!this.parent())\n                break;\n        // Then scan down into child nodes as far as possible\n        while (this.enterChild(1, pos, side)) { }\n        return this;\n    }\n    /**\n    Get a [syntax node](#common.SyntaxNode) at the cursor's current\n    position.\n    */\n    get node() {\n        if (!this.buffer)\n            return this._tree;\n        let cache = this.bufferNode, result = null, depth = 0;\n        if (cache && cache.context == this.buffer) {\n            scan: for (let index = this.index, d = this.stack.length; d >= 0;) {\n                for (let c = cache; c; c = c._parent)\n                    if (c.index == index) {\n                        if (index == this.index)\n                            return c;\n                        result = c;\n                        depth = d + 1;\n                        break scan;\n                    }\n                index = this.stack[--d];\n            }\n        }\n        for (let i = depth; i < this.stack.length; i++)\n            result = new BufferNode(this.buffer, result, this.stack[i]);\n        return this.bufferNode = new BufferNode(this.buffer, result, this.index);\n    }\n    /**\n    Get the [tree](#common.Tree) that represents the current node, if\n    any. Will return null when the node is in a [tree\n    buffer](#common.TreeBuffer).\n    */\n    get tree() {\n        return this.buffer ? null : this._tree._tree;\n    }\n    /**\n    Iterate over the current node and all its descendants, calling\n    `enter` when entering a node and `leave`, if given, when leaving\n    one. When `enter` returns `false`, any children of that node are\n    skipped, and `leave` isn't called for it.\n    */\n    iterate(enter, leave) {\n        for (let depth = 0;;) {\n            let mustLeave = false;\n            if (this.type.isAnonymous || enter(this) !== false) {\n                if (this.firstChild()) {\n                    depth++;\n                    continue;\n                }\n                if (!this.type.isAnonymous)\n                    mustLeave = true;\n            }\n            for (;;) {\n                if (mustLeave && leave)\n                    leave(this);\n                mustLeave = this.type.isAnonymous;\n                if (!depth)\n                    return;\n                if (this.nextSibling())\n                    break;\n                this.parent();\n                depth--;\n                mustLeave = true;\n            }\n        }\n    }\n    /**\n    Test whether the current node matches a given context—a sequence\n    of direct parent node names. Empty strings in the context array\n    are treated as wildcards.\n    */\n    matchContext(context) {\n        if (!this.buffer)\n            return matchNodeContext(this.node.parent, context);\n        let { buffer } = this.buffer, { types } = buffer.set;\n        for (let i = context.length - 1, d = this.stack.length - 1; i >= 0; d--) {\n            if (d < 0)\n                return matchNodeContext(this._tree, context, i);\n            let type = types[buffer.buffer[this.stack[d]]];\n            if (!type.isAnonymous) {\n                if (context[i] && context[i] != type.name)\n                    return false;\n                i--;\n            }\n        }\n        return true;\n    }\n}\nfunction hasChild(tree) {\n    return tree.children.some(ch => ch instanceof TreeBuffer || !ch.type.isAnonymous || hasChild(ch));\n}\nfunction buildTree(data) {\n    var _a;\n    let { buffer, nodeSet, maxBufferLength = DefaultBufferLength, reused = [], minRepeatType = nodeSet.types.length } = data;\n    let cursor = Array.isArray(buffer) ? new FlatBufferCursor(buffer, buffer.length) : buffer;\n    let types = nodeSet.types;\n    let contextHash = 0, lookAhead = 0;\n    function takeNode(parentStart, minPos, children, positions, inRepeat, depth) {\n        let { id, start, end, size } = cursor;\n        let lookAheadAtStart = lookAhead, contextAtStart = contextHash;\n        if (size < 0) {\n            cursor.next();\n            if (size == -1 /* SpecialRecord.Reuse */) {\n                let node = reused[id];\n                children.push(node);\n                positions.push(start - parentStart);\n                return;\n            }\n            else if (size == -3 /* SpecialRecord.ContextChange */) { // Context change\n                contextHash = id;\n                return;\n            }\n            else if (size == -4 /* SpecialRecord.LookAhead */) {\n                lookAhead = id;\n                return;\n            }\n            else {\n                throw new RangeError(`Unrecognized record size: ${size}`);\n            }\n        }\n        let type = types[id], node, buffer;\n        let startPos = start - parentStart;\n        if (end - start <= maxBufferLength && (buffer = findBufferSize(cursor.pos - minPos, inRepeat))) {\n            // Small enough for a buffer, and no reused nodes inside\n            let data = new Uint16Array(buffer.size - buffer.skip);\n            let endPos = cursor.pos - buffer.size, index = data.length;\n            while (cursor.pos > endPos)\n                index = copyToBuffer(buffer.start, data, index);\n            node = new TreeBuffer(data, end - buffer.start, nodeSet);\n            startPos = buffer.start - parentStart;\n        }\n        else { // Make it a node\n            let endPos = cursor.pos - size;\n            cursor.next();\n            let localChildren = [], localPositions = [];\n            let localInRepeat = id >= minRepeatType ? id : -1;\n            let lastGroup = 0, lastEnd = end;\n            while (cursor.pos > endPos) {\n                if (localInRepeat >= 0 && cursor.id == localInRepeat && cursor.size >= 0) {\n                    if (cursor.end <= lastEnd - maxBufferLength) {\n                        makeRepeatLeaf(localChildren, localPositions, start, lastGroup, cursor.end, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart);\n                        lastGroup = localChildren.length;\n                        lastEnd = cursor.end;\n                    }\n                    cursor.next();\n                }\n                else if (depth > 2500 /* CutOff.Depth */) {\n                    takeFlatNode(start, endPos, localChildren, localPositions);\n                }\n                else {\n                    takeNode(start, endPos, localChildren, localPositions, localInRepeat, depth + 1);\n                }\n            }\n            if (localInRepeat >= 0 && lastGroup > 0 && lastGroup < localChildren.length)\n                makeRepeatLeaf(localChildren, localPositions, start, lastGroup, start, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart);\n            localChildren.reverse();\n            localPositions.reverse();\n            if (localInRepeat > -1 && lastGroup > 0) {\n                let make = makeBalanced(type, contextAtStart);\n                node = balanceRange(type, localChildren, localPositions, 0, localChildren.length, 0, end - start, make, make);\n            }\n            else {\n                node = makeTree(type, localChildren, localPositions, end - start, lookAheadAtStart - end, contextAtStart);\n            }\n        }\n        children.push(node);\n        positions.push(startPos);\n    }\n    function takeFlatNode(parentStart, minPos, children, positions) {\n        let nodes = []; // Temporary, inverted array of leaf nodes found, with absolute positions\n        let nodeCount = 0, stopAt = -1;\n        while (cursor.pos > minPos) {\n            let { id, start, end, size } = cursor;\n            if (size > 4) { // Not a leaf\n                cursor.next();\n            }\n            else if (stopAt > -1 && start < stopAt) {\n                break;\n            }\n            else {\n                if (stopAt < 0)\n                    stopAt = end - maxBufferLength;\n                nodes.push(id, start, end);\n                nodeCount++;\n                cursor.next();\n            }\n        }\n        if (nodeCount) {\n            let buffer = new Uint16Array(nodeCount * 4);\n            let start = nodes[nodes.length - 2];\n            for (let i = nodes.length - 3, j = 0; i >= 0; i -= 3) {\n                buffer[j++] = nodes[i];\n                buffer[j++] = nodes[i + 1] - start;\n                buffer[j++] = nodes[i + 2] - start;\n                buffer[j++] = j;\n            }\n            children.push(new TreeBuffer(buffer, nodes[2] - start, nodeSet));\n            positions.push(start - parentStart);\n        }\n    }\n    function makeBalanced(type, contextHash) {\n        return (children, positions, length) => {\n            let lookAhead = 0, lastI = children.length - 1, last, lookAheadProp;\n            if (lastI >= 0 && (last = children[lastI]) instanceof Tree) {\n                if (!lastI && last.type == type && last.length == length)\n                    return last;\n                if (lookAheadProp = last.prop(NodeProp.lookAhead))\n                    lookAhead = positions[lastI] + last.length + lookAheadProp;\n            }\n            return makeTree(type, children, positions, length, lookAhead, contextHash);\n        };\n    }\n    function makeRepeatLeaf(children, positions, base, i, from, to, type, lookAhead, contextHash) {\n        let localChildren = [], localPositions = [];\n        while (children.length > i) {\n            localChildren.push(children.pop());\n            localPositions.push(positions.pop() + base - from);\n        }\n        children.push(makeTree(nodeSet.types[type], localChildren, localPositions, to - from, lookAhead - to, contextHash));\n        positions.push(from - base);\n    }\n    function makeTree(type, children, positions, length, lookAhead, contextHash, props) {\n        if (contextHash) {\n            let pair = [NodeProp.contextHash, contextHash];\n            props = props ? [pair].concat(props) : [pair];\n        }\n        if (lookAhead > 25) {\n            let pair = [NodeProp.lookAhead, lookAhead];\n            props = props ? [pair].concat(props) : [pair];\n        }\n        return new Tree(type, children, positions, length, props);\n    }\n    function findBufferSize(maxSize, inRepeat) {\n        // Scan through the buffer to find previous siblings that fit\n        // together in a TreeBuffer, and don't contain any reused nodes\n        // (which can't be stored in a buffer).\n        // If `inRepeat` is > -1, ignore node boundaries of that type for\n        // nesting, but make sure the end falls either at the start\n        // (`maxSize`) or before such a node.\n        let fork = cursor.fork();\n        let size = 0, start = 0, skip = 0, minStart = fork.end - maxBufferLength;\n        let result = { size: 0, start: 0, skip: 0 };\n        scan: for (let minPos = fork.pos - maxSize; fork.pos > minPos;) {\n            let nodeSize = fork.size;\n            // Pretend nested repeat nodes of the same type don't exist\n            if (fork.id == inRepeat && nodeSize >= 0) {\n                // Except that we store the current state as a valid return\n                // value.\n                result.size = size;\n                result.start = start;\n                result.skip = skip;\n                skip += 4;\n                size += 4;\n                fork.next();\n                continue;\n            }\n            let startPos = fork.pos - nodeSize;\n            if (nodeSize < 0 || startPos < minPos || fork.start < minStart)\n                break;\n            let localSkipped = fork.id >= minRepeatType ? 4 : 0;\n            let nodeStart = fork.start;\n            fork.next();\n            while (fork.pos > startPos) {\n                if (fork.size < 0) {\n                    if (fork.size == -3 /* SpecialRecord.ContextChange */ || fork.size == -4 /* SpecialRecord.LookAhead */)\n                        localSkipped += 4;\n                    else\n                        break scan;\n                }\n                else if (fork.id >= minRepeatType) {\n                    localSkipped += 4;\n                }\n                fork.next();\n            }\n            start = nodeStart;\n            size += nodeSize;\n            skip += localSkipped;\n        }\n        if (inRepeat < 0 || size == maxSize) {\n            result.size = size;\n            result.start = start;\n            result.skip = skip;\n        }\n        return result.size > 4 ? result : undefined;\n    }\n    function copyToBuffer(bufferStart, buffer, index) {\n        let { id, start, end, size } = cursor;\n        cursor.next();\n        if (size >= 0 && id < minRepeatType) {\n            let startIndex = index;\n            if (size > 4) {\n                let endPos = cursor.pos - (size - 4);\n                while (cursor.pos > endPos)\n                    index = copyToBuffer(bufferStart, buffer, index);\n            }\n            buffer[--index] = startIndex;\n            buffer[--index] = end - bufferStart;\n            buffer[--index] = start - bufferStart;\n            buffer[--index] = id;\n        }\n        else if (size == -3 /* SpecialRecord.ContextChange */) {\n            contextHash = id;\n        }\n        else if (size == -4 /* SpecialRecord.LookAhead */) {\n            lookAhead = id;\n        }\n        return index;\n    }\n    let children = [], positions = [];\n    while (cursor.pos > 0)\n        takeNode(data.start || 0, data.bufferStart || 0, children, positions, -1, 0);\n    let length = (_a = data.length) !== null && _a !== void 0 ? _a : (children.length ? positions[0] + children[0].length : 0);\n    return new Tree(types[data.topID], children.reverse(), positions.reverse(), length);\n}\nconst nodeSizeCache = new WeakMap;\nfunction nodeSize(balanceType, node) {\n    if (!balanceType.isAnonymous || node instanceof TreeBuffer || node.type != balanceType)\n        return 1;\n    let size = nodeSizeCache.get(node);\n    if (size == null) {\n        size = 1;\n        for (let child of node.children) {\n            if (child.type != balanceType || !(child instanceof Tree)) {\n                size = 1;\n                break;\n            }\n            size += nodeSize(balanceType, child);\n        }\n        nodeSizeCache.set(node, size);\n    }\n    return size;\n}\nfunction balanceRange(\n// The type the balanced tree's inner nodes.\nbalanceType, \n// The direct children and their positions\nchildren, positions, \n// The index range in children/positions to use\nfrom, to, \n// The start position of the nodes, relative to their parent.\nstart, \n// Length of the outer node\nlength, \n// Function to build the top node of the balanced tree\nmkTop, \n// Function to build internal nodes for the balanced tree\nmkTree) {\n    let total = 0;\n    for (let i = from; i < to; i++)\n        total += nodeSize(balanceType, children[i]);\n    let maxChild = Math.ceil((total * 1.5) / 8 /* Balance.BranchFactor */);\n    let localChildren = [], localPositions = [];\n    function divide(children, positions, from, to, offset) {\n        for (let i = from; i < to;) {\n            let groupFrom = i, groupStart = positions[i], groupSize = nodeSize(balanceType, children[i]);\n            i++;\n            for (; i < to; i++) {\n                let nextSize = nodeSize(balanceType, children[i]);\n                if (groupSize + nextSize >= maxChild)\n                    break;\n                groupSize += nextSize;\n            }\n            if (i == groupFrom + 1) {\n                if (groupSize > maxChild) {\n                    let only = children[groupFrom]; // Only trees can have a size > 1\n                    divide(only.children, only.positions, 0, only.children.length, positions[groupFrom] + offset);\n                    continue;\n                }\n                localChildren.push(children[groupFrom]);\n            }\n            else {\n                let length = positions[i - 1] + children[i - 1].length - groupStart;\n                localChildren.push(balanceRange(balanceType, children, positions, groupFrom, i, groupStart, length, null, mkTree));\n            }\n            localPositions.push(groupStart + offset - start);\n        }\n    }\n    divide(children, positions, from, to, 0);\n    return (mkTop || mkTree)(localChildren, localPositions, length);\n}\n/**\nProvides a way to associate values with pieces of trees. As long\nas that part of the tree is reused, the associated values can be\nretrieved from an updated tree.\n*/\nclass NodeWeakMap {\n    constructor() {\n        this.map = new WeakMap();\n    }\n    setBuffer(buffer, index, value) {\n        let inner = this.map.get(buffer);\n        if (!inner)\n            this.map.set(buffer, inner = new Map);\n        inner.set(index, value);\n    }\n    getBuffer(buffer, index) {\n        let inner = this.map.get(buffer);\n        return inner && inner.get(index);\n    }\n    /**\n    Set the value for this syntax node.\n    */\n    set(node, value) {\n        if (node instanceof BufferNode)\n            this.setBuffer(node.context.buffer, node.index, value);\n        else if (node instanceof TreeNode)\n            this.map.set(node.tree, value);\n    }\n    /**\n    Retrieve value for this syntax node, if it exists in the map.\n    */\n    get(node) {\n        return node instanceof BufferNode ? this.getBuffer(node.context.buffer, node.index)\n            : node instanceof TreeNode ? this.map.get(node.tree) : undefined;\n    }\n    /**\n    Set the value for the node that a cursor currently points to.\n    */\n    cursorSet(cursor, value) {\n        if (cursor.buffer)\n            this.setBuffer(cursor.buffer.buffer, cursor.index, value);\n        else\n            this.map.set(cursor.tree, value);\n    }\n    /**\n    Retrieve the value for the node that a cursor currently points\n    to.\n    */\n    cursorGet(cursor) {\n        return cursor.buffer ? this.getBuffer(cursor.buffer.buffer, cursor.index) : this.map.get(cursor.tree);\n    }\n}\n\n/**\nTree fragments are used during [incremental\nparsing](#common.Parser.startParse) to track parts of old trees\nthat can be reused in a new parse. An array of fragments is used\nto track regions of an old tree whose nodes might be reused in new\nparses. Use the static\n[`applyChanges`](#common.TreeFragment^applyChanges) method to\nupdate fragments for document changes.\n*/\nclass TreeFragment {\n    /**\n    Construct a tree fragment. You'll usually want to use\n    [`addTree`](#common.TreeFragment^addTree) and\n    [`applyChanges`](#common.TreeFragment^applyChanges) instead of\n    calling this directly.\n    */\n    constructor(\n    /**\n    The start of the unchanged range pointed to by this fragment.\n    This refers to an offset in the _updated_ document (as opposed\n    to the original tree).\n    */\n    from, \n    /**\n    The end of the unchanged range.\n    */\n    to, \n    /**\n    The tree that this fragment is based on.\n    */\n    tree, \n    /**\n    The offset between the fragment's tree and the document that\n    this fragment can be used against. Add this when going from\n    document to tree positions, subtract it to go from tree to\n    document positions.\n    */\n    offset, openStart = false, openEnd = false) {\n        this.from = from;\n        this.to = to;\n        this.tree = tree;\n        this.offset = offset;\n        this.open = (openStart ? 1 /* Open.Start */ : 0) | (openEnd ? 2 /* Open.End */ : 0);\n    }\n    /**\n    Whether the start of the fragment represents the start of a\n    parse, or the end of a change. (In the second case, it may not\n    be safe to reuse some nodes at the start, depending on the\n    parsing algorithm.)\n    */\n    get openStart() { return (this.open & 1 /* Open.Start */) > 0; }\n    /**\n    Whether the end of the fragment represents the end of a\n    full-document parse, or the start of a change.\n    */\n    get openEnd() { return (this.open & 2 /* Open.End */) > 0; }\n    /**\n    Create a set of fragments from a freshly parsed tree, or update\n    an existing set of fragments by replacing the ones that overlap\n    with a tree with content from the new tree. When `partial` is\n    true, the parse is treated as incomplete, and the resulting\n    fragment has [`openEnd`](#common.TreeFragment.openEnd) set to\n    true.\n    */\n    static addTree(tree, fragments = [], partial = false) {\n        let result = [new TreeFragment(0, tree.length, tree, 0, false, partial)];\n        for (let f of fragments)\n            if (f.to > tree.length)\n                result.push(f);\n        return result;\n    }\n    /**\n    Apply a set of edits to an array of fragments, removing or\n    splitting fragments as necessary to remove edited ranges, and\n    adjusting offsets for fragments that moved.\n    */\n    static applyChanges(fragments, changes, minGap = 128) {\n        if (!changes.length)\n            return fragments;\n        let result = [];\n        let fI = 1, nextF = fragments.length ? fragments[0] : null;\n        for (let cI = 0, pos = 0, off = 0;; cI++) {\n            let nextC = cI < changes.length ? changes[cI] : null;\n            let nextPos = nextC ? nextC.fromA : 1e9;\n            if (nextPos - pos >= minGap)\n                while (nextF && nextF.from < nextPos) {\n                    let cut = nextF;\n                    if (pos >= cut.from || nextPos <= cut.to || off) {\n                        let fFrom = Math.max(cut.from, pos) - off, fTo = Math.min(cut.to, nextPos) - off;\n                        cut = fFrom >= fTo ? null : new TreeFragment(fFrom, fTo, cut.tree, cut.offset + off, cI > 0, !!nextC);\n                    }\n                    if (cut)\n                        result.push(cut);\n                    if (nextF.to > nextPos)\n                        break;\n                    nextF = fI < fragments.length ? fragments[fI++] : null;\n                }\n            if (!nextC)\n                break;\n            pos = nextC.toA;\n            off = nextC.toA - nextC.toB;\n        }\n        return result;\n    }\n}\n/**\nA superclass that parsers should extend.\n*/\nclass Parser {\n    /**\n    Start a parse, returning a [partial parse](#common.PartialParse)\n    object. [`fragments`](#common.TreeFragment) can be passed in to\n    make the parse incremental.\n    \n    By default, the entire input is parsed. You can pass `ranges`,\n    which should be a sorted array of non-empty, non-overlapping\n    ranges, to parse only those ranges. The tree returned in that\n    case will start at `ranges[0].from`.\n    */\n    startParse(input, fragments, ranges) {\n        if (typeof input == \"string\")\n            input = new StringInput(input);\n        ranges = !ranges ? [new Range(0, input.length)] : ranges.length ? ranges.map(r => new Range(r.from, r.to)) : [new Range(0, 0)];\n        return this.createParse(input, fragments || [], ranges);\n    }\n    /**\n    Run a full parse, returning the resulting tree.\n    */\n    parse(input, fragments, ranges) {\n        let parse = this.startParse(input, fragments, ranges);\n        for (;;) {\n            let done = parse.advance();\n            if (done)\n                return done;\n        }\n    }\n}\nclass StringInput {\n    constructor(string) {\n        this.string = string;\n    }\n    get length() { return this.string.length; }\n    chunk(from) { return this.string.slice(from); }\n    get lineChunks() { return false; }\n    read(from, to) { return this.string.slice(from, to); }\n}\n\n/**\nCreate a parse wrapper that, after the inner parse completes,\nscans its tree for mixed language regions with the `nest`\nfunction, runs the resulting [inner parses](#common.NestedParse),\nand then [mounts](#common.NodeProp^mounted) their results onto the\ntree.\n*/\nfunction parseMixed(nest) {\n    return (parse, input, fragments, ranges) => new MixedParse(parse, nest, input, fragments, ranges);\n}\nclass InnerParse {\n    constructor(parser, parse, overlay, target, from) {\n        this.parser = parser;\n        this.parse = parse;\n        this.overlay = overlay;\n        this.target = target;\n        this.from = from;\n    }\n}\nfunction checkRanges(ranges) {\n    if (!ranges.length || ranges.some(r => r.from >= r.to))\n        throw new RangeError(\"Invalid inner parse ranges given: \" + JSON.stringify(ranges));\n}\nclass ActiveOverlay {\n    constructor(parser, predicate, mounts, index, start, target, prev) {\n        this.parser = parser;\n        this.predicate = predicate;\n        this.mounts = mounts;\n        this.index = index;\n        this.start = start;\n        this.target = target;\n        this.prev = prev;\n        this.depth = 0;\n        this.ranges = [];\n    }\n}\nconst stoppedInner = new NodeProp({ perNode: true });\nclass MixedParse {\n    constructor(base, nest, input, fragments, ranges) {\n        this.nest = nest;\n        this.input = input;\n        this.fragments = fragments;\n        this.ranges = ranges;\n        this.inner = [];\n        this.innerDone = 0;\n        this.baseTree = null;\n        this.stoppedAt = null;\n        this.baseParse = base;\n    }\n    advance() {\n        if (this.baseParse) {\n            let done = this.baseParse.advance();\n            if (!done)\n                return null;\n            this.baseParse = null;\n            this.baseTree = done;\n            this.startInner();\n            if (this.stoppedAt != null)\n                for (let inner of this.inner)\n                    inner.parse.stopAt(this.stoppedAt);\n        }\n        if (this.innerDone == this.inner.length) {\n            let result = this.baseTree;\n            if (this.stoppedAt != null)\n                result = new Tree(result.type, result.children, result.positions, result.length, result.propValues.concat([[stoppedInner, this.stoppedAt]]));\n            return result;\n        }\n        let inner = this.inner[this.innerDone], done = inner.parse.advance();\n        if (done) {\n            this.innerDone++;\n            // This is a somewhat dodgy but super helpful hack where we\n            // patch up nodes created by the inner parse (and thus\n            // presumably not aliased anywhere else) to hold the information\n            // about the inner parse.\n            let props = Object.assign(Object.create(null), inner.target.props);\n            props[NodeProp.mounted.id] = new MountedTree(done, inner.overlay, inner.parser);\n            inner.target.props = props;\n        }\n        return null;\n    }\n    get parsedPos() {\n        if (this.baseParse)\n            return 0;\n        let pos = this.input.length;\n        for (let i = this.innerDone; i < this.inner.length; i++) {\n            if (this.inner[i].from < pos)\n                pos = Math.min(pos, this.inner[i].parse.parsedPos);\n        }\n        return pos;\n    }\n    stopAt(pos) {\n        this.stoppedAt = pos;\n        if (this.baseParse)\n            this.baseParse.stopAt(pos);\n        else\n            for (let i = this.innerDone; i < this.inner.length; i++)\n                this.inner[i].parse.stopAt(pos);\n    }\n    startInner() {\n        let fragmentCursor = new FragmentCursor(this.fragments);\n        let overlay = null;\n        let covered = null;\n        let cursor = new TreeCursor(new TreeNode(this.baseTree, this.ranges[0].from, 0, null), IterMode.IncludeAnonymous | IterMode.IgnoreMounts);\n        scan: for (let nest, isCovered;;) {\n            let enter = true, range;\n            if (this.stoppedAt != null && cursor.from >= this.stoppedAt) {\n                enter = false;\n            }\n            else if (fragmentCursor.hasNode(cursor)) {\n                if (overlay) {\n                    let match = overlay.mounts.find(m => m.frag.from <= cursor.from && m.frag.to >= cursor.to && m.mount.overlay);\n                    if (match)\n                        for (let r of match.mount.overlay) {\n                            let from = r.from + match.pos, to = r.to + match.pos;\n                            if (from >= cursor.from && to <= cursor.to && !overlay.ranges.some(r => r.from < to && r.to > from))\n                                overlay.ranges.push({ from, to });\n                        }\n                }\n                enter = false;\n            }\n            else if (covered && (isCovered = checkCover(covered.ranges, cursor.from, cursor.to))) {\n                enter = isCovered != 2 /* Cover.Full */;\n            }\n            else if (!cursor.type.isAnonymous && (nest = this.nest(cursor, this.input)) &&\n                (cursor.from < cursor.to || !nest.overlay)) {\n                if (!cursor.tree) {\n                    materialize(cursor);\n                    // materialize create one more level of nesting\n                    // we need to add depth to active overlay for going backwards\n                    if (overlay)\n                        overlay.depth++;\n                    if (covered)\n                        covered.depth++;\n                }\n                let oldMounts = fragmentCursor.findMounts(cursor.from, nest.parser);\n                if (typeof nest.overlay == \"function\") {\n                    overlay = new ActiveOverlay(nest.parser, nest.overlay, oldMounts, this.inner.length, cursor.from, cursor.tree, overlay);\n                }\n                else {\n                    let ranges = punchRanges(this.ranges, nest.overlay ||\n                        (cursor.from < cursor.to ? [new Range(cursor.from, cursor.to)] : []));\n                    if (ranges.length)\n                        checkRanges(ranges);\n                    if (ranges.length || !nest.overlay)\n                        this.inner.push(new InnerParse(nest.parser, ranges.length ? nest.parser.startParse(this.input, enterFragments(oldMounts, ranges), ranges)\n                            : nest.parser.startParse(\"\"), nest.overlay ? nest.overlay.map(r => new Range(r.from - cursor.from, r.to - cursor.from)) : null, cursor.tree, ranges.length ? ranges[0].from : cursor.from));\n                    if (!nest.overlay)\n                        enter = false;\n                    else if (ranges.length)\n                        covered = { ranges, depth: 0, prev: covered };\n                }\n            }\n            else if (overlay && (range = overlay.predicate(cursor))) {\n                if (range === true)\n                    range = new Range(cursor.from, cursor.to);\n                if (range.from < range.to) {\n                    let last = overlay.ranges.length - 1;\n                    if (last >= 0 && overlay.ranges[last].to == range.from)\n                        overlay.ranges[last] = { from: overlay.ranges[last].from, to: range.to };\n                    else\n                        overlay.ranges.push(range);\n                }\n            }\n            if (enter && cursor.firstChild()) {\n                if (overlay)\n                    overlay.depth++;\n                if (covered)\n                    covered.depth++;\n            }\n            else {\n                for (;;) {\n                    if (cursor.nextSibling())\n                        break;\n                    if (!cursor.parent())\n                        break scan;\n                    if (overlay && !--overlay.depth) {\n                        let ranges = punchRanges(this.ranges, overlay.ranges);\n                        if (ranges.length) {\n                            checkRanges(ranges);\n                            this.inner.splice(overlay.index, 0, new InnerParse(overlay.parser, overlay.parser.startParse(this.input, enterFragments(overlay.mounts, ranges), ranges), overlay.ranges.map(r => new Range(r.from - overlay.start, r.to - overlay.start)), overlay.target, ranges[0].from));\n                        }\n                        overlay = overlay.prev;\n                    }\n                    if (covered && !--covered.depth)\n                        covered = covered.prev;\n                }\n            }\n        }\n    }\n}\nfunction checkCover(covered, from, to) {\n    for (let range of covered) {\n        if (range.from >= to)\n            break;\n        if (range.to > from)\n            return range.from <= from && range.to >= to ? 2 /* Cover.Full */ : 1 /* Cover.Partial */;\n    }\n    return 0 /* Cover.None */;\n}\n// Take a piece of buffer and convert it into a stand-alone\n// TreeBuffer.\nfunction sliceBuf(buf, startI, endI, nodes, positions, off) {\n    if (startI < endI) {\n        let from = buf.buffer[startI + 1];\n        nodes.push(buf.slice(startI, endI, from));\n        positions.push(from - off);\n    }\n}\n// This function takes a node that's in a buffer, and converts it, and\n// its parent buffer nodes, into a Tree. This is again acting on the\n// assumption that the trees and buffers have been constructed by the\n// parse that was ran via the mix parser, and thus aren't shared with\n// any other code, making violations of the immutability safe.\nfunction materialize(cursor) {\n    let { node } = cursor, stack = [];\n    let buffer = node.context.buffer;\n    // Scan up to the nearest tree\n    do {\n        stack.push(cursor.index);\n        cursor.parent();\n    } while (!cursor.tree);\n    // Find the index of the buffer in that tree\n    let base = cursor.tree, i = base.children.indexOf(buffer);\n    let buf = base.children[i], b = buf.buffer, newStack = [i];\n    // Split a level in the buffer, putting the nodes before and after\n    // the child that contains `node` into new buffers.\n    function split(startI, endI, type, innerOffset, length, stackPos) {\n        let targetI = stack[stackPos];\n        let children = [], positions = [];\n        sliceBuf(buf, startI, targetI, children, positions, innerOffset);\n        let from = b[targetI + 1], to = b[targetI + 2];\n        newStack.push(children.length);\n        let child = stackPos\n            ? split(targetI + 4, b[targetI + 3], buf.set.types[b[targetI]], from, to - from, stackPos - 1)\n            : node.toTree();\n        children.push(child);\n        positions.push(from - innerOffset);\n        sliceBuf(buf, b[targetI + 3], endI, children, positions, innerOffset);\n        return new Tree(type, children, positions, length);\n    }\n    base.children[i] = split(0, b.length, NodeType.none, 0, buf.length, stack.length - 1);\n    // Move the cursor back to the target node\n    for (let index of newStack) {\n        let tree = cursor.tree.children[index], pos = cursor.tree.positions[index];\n        cursor.yield(new TreeNode(tree, pos + cursor.from, index, cursor._tree));\n    }\n}\nclass StructureCursor {\n    constructor(root, offset) {\n        this.offset = offset;\n        this.done = false;\n        this.cursor = root.cursor(IterMode.IncludeAnonymous | IterMode.IgnoreMounts);\n    }\n    // Move to the first node (in pre-order) that starts at or after `pos`.\n    moveTo(pos) {\n        let { cursor } = this, p = pos - this.offset;\n        while (!this.done && cursor.from < p) {\n            if (cursor.to >= pos && cursor.enter(p, 1, IterMode.IgnoreOverlays | IterMode.ExcludeBuffers)) ;\n            else if (!cursor.next(false))\n                this.done = true;\n        }\n    }\n    hasNode(cursor) {\n        this.moveTo(cursor.from);\n        if (!this.done && this.cursor.from + this.offset == cursor.from && this.cursor.tree) {\n            for (let tree = this.cursor.tree;;) {\n                if (tree == cursor.tree)\n                    return true;\n                if (tree.children.length && tree.positions[0] == 0 && tree.children[0] instanceof Tree)\n                    tree = tree.children[0];\n                else\n                    break;\n            }\n        }\n        return false;\n    }\n}\nclass FragmentCursor {\n    constructor(fragments) {\n        var _a;\n        this.fragments = fragments;\n        this.curTo = 0;\n        this.fragI = 0;\n        if (fragments.length) {\n            let first = this.curFrag = fragments[0];\n            this.curTo = (_a = first.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : first.to;\n            this.inner = new StructureCursor(first.tree, -first.offset);\n        }\n        else {\n            this.curFrag = this.inner = null;\n        }\n    }\n    hasNode(node) {\n        while (this.curFrag && node.from >= this.curTo)\n            this.nextFrag();\n        return this.curFrag && this.curFrag.from <= node.from && this.curTo >= node.to && this.inner.hasNode(node);\n    }\n    nextFrag() {\n        var _a;\n        this.fragI++;\n        if (this.fragI == this.fragments.length) {\n            this.curFrag = this.inner = null;\n        }\n        else {\n            let frag = this.curFrag = this.fragments[this.fragI];\n            this.curTo = (_a = frag.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : frag.to;\n            this.inner = new StructureCursor(frag.tree, -frag.offset);\n        }\n    }\n    findMounts(pos, parser) {\n        var _a;\n        let result = [];\n        if (this.inner) {\n            this.inner.cursor.moveTo(pos, 1);\n            for (let pos = this.inner.cursor.node; pos; pos = pos.parent) {\n                let mount = (_a = pos.tree) === null || _a === void 0 ? void 0 : _a.prop(NodeProp.mounted);\n                if (mount && mount.parser == parser) {\n                    for (let i = this.fragI; i < this.fragments.length; i++) {\n                        let frag = this.fragments[i];\n                        if (frag.from >= pos.to)\n                            break;\n                        if (frag.tree == this.curFrag.tree)\n                            result.push({\n                                frag,\n                                pos: pos.from - frag.offset,\n                                mount\n                            });\n                    }\n                }\n            }\n        }\n        return result;\n    }\n}\nfunction punchRanges(outer, ranges) {\n    let copy = null, current = ranges;\n    for (let i = 1, j = 0; i < outer.length; i++) {\n        let gapFrom = outer[i - 1].to, gapTo = outer[i].from;\n        for (; j < current.length; j++) {\n            let r = current[j];\n            if (r.from >= gapTo)\n                break;\n            if (r.to <= gapFrom)\n                continue;\n            if (!copy)\n                current = copy = ranges.slice();\n            if (r.from < gapFrom) {\n                copy[j] = new Range(r.from, gapFrom);\n                if (r.to > gapTo)\n                    copy.splice(j + 1, 0, new Range(gapTo, r.to));\n            }\n            else if (r.to > gapTo) {\n                copy[j--] = new Range(gapTo, r.to);\n            }\n            else {\n                copy.splice(j--, 1);\n            }\n        }\n    }\n    return current;\n}\nfunction findCoverChanges(a, b, from, to) {\n    let iA = 0, iB = 0, inA = false, inB = false, pos = -1e9;\n    let result = [];\n    for (;;) {\n        let nextA = iA == a.length ? 1e9 : inA ? a[iA].to : a[iA].from;\n        let nextB = iB == b.length ? 1e9 : inB ? b[iB].to : b[iB].from;\n        if (inA != inB) {\n            let start = Math.max(pos, from), end = Math.min(nextA, nextB, to);\n            if (start < end)\n                result.push(new Range(start, end));\n        }\n        pos = Math.min(nextA, nextB);\n        if (pos == 1e9)\n            break;\n        if (nextA == pos) {\n            if (!inA)\n                inA = true;\n            else {\n                inA = false;\n                iA++;\n            }\n        }\n        if (nextB == pos) {\n            if (!inB)\n                inB = true;\n            else {\n                inB = false;\n                iB++;\n            }\n        }\n    }\n    return result;\n}\n// Given a number of fragments for the outer tree, and a set of ranges\n// to parse, find fragments for inner trees mounted around those\n// ranges, if any.\nfunction enterFragments(mounts, ranges) {\n    let result = [];\n    for (let { pos, mount, frag } of mounts) {\n        let startPos = pos + (mount.overlay ? mount.overlay[0].from : 0), endPos = startPos + mount.tree.length;\n        let from = Math.max(frag.from, startPos), to = Math.min(frag.to, endPos);\n        if (mount.overlay) {\n            let overlay = mount.overlay.map(r => new Range(r.from + pos, r.to + pos));\n            let changes = findCoverChanges(ranges, overlay, from, to);\n            for (let i = 0, pos = from;; i++) {\n                let last = i == changes.length, end = last ? to : changes[i].from;\n                if (end > pos)\n                    result.push(new TreeFragment(pos, end, mount.tree, -startPos, frag.from >= pos || frag.openStart, frag.to <= end || frag.openEnd));\n                if (last)\n                    break;\n                pos = changes[i].to;\n            }\n        }\n        else {\n            result.push(new TreeFragment(from, to, mount.tree, -startPos, frag.from >= startPos || frag.openStart, frag.to <= endPos || frag.openEnd));\n        }\n    }\n    return result;\n}\n\nexport { DefaultBufferLength, IterMode, MountedTree, NodeProp, NodeSet, NodeType, NodeWeakMap, Parser, Tree, TreeBuffer, TreeCursor, TreeFragment, parseMixed };\n","import { NodeProp } from '@lezer/common';\n\nlet nextTagID = 0;\n/**\nHighlighting tags are markers that denote a highlighting category.\nThey are [associated](#highlight.styleTags) with parts of a syntax\ntree by a language mode, and then mapped to an actual CSS style by\na [highlighter](#highlight.Highlighter).\n\nBecause syntax tree node types and highlight styles have to be\nable to talk the same language, CodeMirror uses a mostly _closed_\n[vocabulary](#highlight.tags) of syntax tags (as opposed to\ntraditional open string-based systems, which make it hard for\nhighlighting themes to cover all the tokens produced by the\nvarious languages).\n\nIt _is_ possible to [define](#highlight.Tag^define) your own\nhighlighting tags for system-internal use (where you control both\nthe language package and the highlighter), but such tags will not\nbe picked up by regular highlighters (though you can derive them\nfrom standard tags to allow highlighters to fall back to those).\n*/\nclass Tag {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The optional name of the base tag @internal\n    */\n    name, \n    /**\n    The set of this tag and all its parent tags, starting with\n    this one itself and sorted in order of decreasing specificity.\n    */\n    set, \n    /**\n    The base unmodified tag that this one is based on, if it's\n    modified @internal\n    */\n    base, \n    /**\n    The modifiers applied to this.base @internal\n    */\n    modified) {\n        this.name = name;\n        this.set = set;\n        this.base = base;\n        this.modified = modified;\n        /**\n        @internal\n        */\n        this.id = nextTagID++;\n    }\n    toString() {\n        let { name } = this;\n        for (let mod of this.modified)\n            if (mod.name)\n                name = `${mod.name}(${name})`;\n        return name;\n    }\n    static define(nameOrParent, parent) {\n        let name = typeof nameOrParent == \"string\" ? nameOrParent : \"?\";\n        if (nameOrParent instanceof Tag)\n            parent = nameOrParent;\n        if (parent === null || parent === void 0 ? void 0 : parent.base)\n            throw new Error(\"Can not derive from a modified tag\");\n        let tag = new Tag(name, [], null, []);\n        tag.set.push(tag);\n        if (parent)\n            for (let t of parent.set)\n                tag.set.push(t);\n        return tag;\n    }\n    /**\n    Define a tag _modifier_, which is a function that, given a tag,\n    will return a tag that is a subtag of the original. Applying the\n    same modifier to a twice tag will return the same value (`m1(t1)\n    == m1(t1)`) and applying multiple modifiers will, regardless or\n    order, produce the same tag (`m1(m2(t1)) == m2(m1(t1))`).\n    \n    When multiple modifiers are applied to a given base tag, each\n    smaller set of modifiers is registered as a parent, so that for\n    example `m1(m2(m3(t1)))` is a subtype of `m1(m2(t1))`,\n    `m1(m3(t1)`, and so on.\n    */\n    static defineModifier(name) {\n        let mod = new Modifier(name);\n        return (tag) => {\n            if (tag.modified.indexOf(mod) > -1)\n                return tag;\n            return Modifier.get(tag.base || tag, tag.modified.concat(mod).sort((a, b) => a.id - b.id));\n        };\n    }\n}\nlet nextModifierID = 0;\nclass Modifier {\n    constructor(name) {\n        this.name = name;\n        this.instances = [];\n        this.id = nextModifierID++;\n    }\n    static get(base, mods) {\n        if (!mods.length)\n            return base;\n        let exists = mods[0].instances.find(t => t.base == base && sameArray(mods, t.modified));\n        if (exists)\n            return exists;\n        let set = [], tag = new Tag(base.name, set, base, mods);\n        for (let m of mods)\n            m.instances.push(tag);\n        let configs = powerSet(mods);\n        for (let parent of base.set)\n            if (!parent.modified.length)\n                for (let config of configs)\n                    set.push(Modifier.get(parent, config));\n        return tag;\n    }\n}\nfunction sameArray(a, b) {\n    return a.length == b.length && a.every((x, i) => x == b[i]);\n}\nfunction powerSet(array) {\n    let sets = [[]];\n    for (let i = 0; i < array.length; i++) {\n        for (let j = 0, e = sets.length; j < e; j++) {\n            sets.push(sets[j].concat(array[i]));\n        }\n    }\n    return sets.sort((a, b) => b.length - a.length);\n}\n/**\nThis function is used to add a set of tags to a language syntax\nvia [`NodeSet.extend`](#common.NodeSet.extend) or\n[`LRParser.configure`](#lr.LRParser.configure).\n\nThe argument object maps node selectors to [highlighting\ntags](#highlight.Tag) or arrays of tags.\n\nNode selectors may hold one or more (space-separated) node paths.\nSuch a path can be a [node name](#common.NodeType.name), or\nmultiple node names (or `*` wildcards) separated by slash\ncharacters, as in `\"Block/Declaration/VariableName\"`. Such a path\nmatches the final node but only if its direct parent nodes are the\nother nodes mentioned. A `*` in such a path matches any parent,\nbut only a single level—wildcards that match multiple parents\naren't supported, both for efficiency reasons and because Lezer\ntrees make it rather hard to reason about what they would match.)\n\nA path can be ended with `/...` to indicate that the tag assigned\nto the node should also apply to all child nodes, even if they\nmatch their own style (by default, only the innermost style is\nused).\n\nWhen a path ends in `!`, as in `Attribute!`, no further matching\nhappens for the node's child nodes, and the entire node gets the\ngiven style.\n\nIn this notation, node names that contain `/`, `!`, `*`, or `...`\nmust be quoted as JSON strings.\n\nFor example:\n\n```javascript\nparser.configure({props: [\n  styleTags({\n    // Style Number and BigNumber nodes\n    \"Number BigNumber\": tags.number,\n    // Style Escape nodes whose parent is String\n    \"String/Escape\": tags.escape,\n    // Style anything inside Attributes nodes\n    \"Attributes!\": tags.meta,\n    // Add a style to all content inside Italic nodes\n    \"Italic/...\": tags.emphasis,\n    // Style InvalidString nodes as both `string` and `invalid`\n    \"InvalidString\": [tags.string, tags.invalid],\n    // Style the node named \"/\" as punctuation\n    '\"/\"': tags.punctuation\n  })\n]})\n```\n*/\nfunction styleTags(spec) {\n    let byName = Object.create(null);\n    for (let prop in spec) {\n        let tags = spec[prop];\n        if (!Array.isArray(tags))\n            tags = [tags];\n        for (let part of prop.split(\" \"))\n            if (part) {\n                let pieces = [], mode = 2 /* Mode.Normal */, rest = part;\n                for (let pos = 0;;) {\n                    if (rest == \"...\" && pos > 0 && pos + 3 == part.length) {\n                        mode = 1 /* Mode.Inherit */;\n                        break;\n                    }\n                    let m = /^\"(?:[^\"\\\\]|\\\\.)*?\"|[^\\/!]+/.exec(rest);\n                    if (!m)\n                        throw new RangeError(\"Invalid path: \" + part);\n                    pieces.push(m[0] == \"*\" ? \"\" : m[0][0] == '\"' ? JSON.parse(m[0]) : m[0]);\n                    pos += m[0].length;\n                    if (pos == part.length)\n                        break;\n                    let next = part[pos++];\n                    if (pos == part.length && next == \"!\") {\n                        mode = 0 /* Mode.Opaque */;\n                        break;\n                    }\n                    if (next != \"/\")\n                        throw new RangeError(\"Invalid path: \" + part);\n                    rest = part.slice(pos);\n                }\n                let last = pieces.length - 1, inner = pieces[last];\n                if (!inner)\n                    throw new RangeError(\"Invalid path: \" + part);\n                let rule = new Rule(tags, mode, last > 0 ? pieces.slice(0, last) : null);\n                byName[inner] = rule.sort(byName[inner]);\n            }\n    }\n    return ruleNodeProp.add(byName);\n}\nconst ruleNodeProp = new NodeProp({\n    combine(a, b) {\n        let cur, root, take;\n        while (a || b) {\n            if (!a || b && a.depth >= b.depth) {\n                take = b;\n                b = b.next;\n            }\n            else {\n                take = a;\n                a = a.next;\n            }\n            if (cur && cur.mode == take.mode && !take.context && !cur.context)\n                continue;\n            let copy = new Rule(take.tags, take.mode, take.context);\n            if (cur)\n                cur.next = copy;\n            else\n                root = copy;\n            cur = copy;\n        }\n        return root;\n    }\n});\nclass Rule {\n    constructor(tags, mode, context, next) {\n        this.tags = tags;\n        this.mode = mode;\n        this.context = context;\n        this.next = next;\n    }\n    get opaque() { return this.mode == 0 /* Mode.Opaque */; }\n    get inherit() { return this.mode == 1 /* Mode.Inherit */; }\n    sort(other) {\n        if (!other || other.depth < this.depth) {\n            this.next = other;\n            return this;\n        }\n        other.next = this.sort(other.next);\n        return other;\n    }\n    get depth() { return this.context ? this.context.length : 0; }\n}\nRule.empty = new Rule([], 2 /* Mode.Normal */, null);\n/**\nDefine a [highlighter](#highlight.Highlighter) from an array of\ntag/class pairs. Classes associated with more specific tags will\ntake precedence.\n*/\nfunction tagHighlighter(tags, options) {\n    let map = Object.create(null);\n    for (let style of tags) {\n        if (!Array.isArray(style.tag))\n            map[style.tag.id] = style.class;\n        else\n            for (let tag of style.tag)\n                map[tag.id] = style.class;\n    }\n    let { scope, all = null } = options || {};\n    return {\n        style: (tags) => {\n            let cls = all;\n            for (let tag of tags) {\n                for (let sub of tag.set) {\n                    let tagClass = map[sub.id];\n                    if (tagClass) {\n                        cls = cls ? cls + \" \" + tagClass : tagClass;\n                        break;\n                    }\n                }\n            }\n            return cls;\n        },\n        scope\n    };\n}\nfunction highlightTags(highlighters, tags) {\n    let result = null;\n    for (let highlighter of highlighters) {\n        let value = highlighter.style(tags);\n        if (value)\n            result = result ? result + \" \" + value : value;\n    }\n    return result;\n}\n/**\nHighlight the given [tree](#common.Tree) with the given\n[highlighter](#highlight.Highlighter). Often, the higher-level\n[`highlightCode`](#highlight.highlightCode) function is easier to\nuse.\n*/\nfunction highlightTree(tree, highlighter, \n/**\nAssign styling to a region of the text. Will be called, in order\nof position, for any ranges where more than zero classes apply.\n`classes` is a space separated string of CSS classes.\n*/\nputStyle, \n/**\nThe start of the range to highlight.\n*/\nfrom = 0, \n/**\nThe end of the range.\n*/\nto = tree.length) {\n    let builder = new HighlightBuilder(from, Array.isArray(highlighter) ? highlighter : [highlighter], putStyle);\n    builder.highlightRange(tree.cursor(), from, to, \"\", builder.highlighters);\n    builder.flush(to);\n}\n/**\nHighlight the given tree with the given highlighter, calling\n`putText` for every piece of text, either with a set of classes or\nwith the empty string when unstyled, and `putBreak` for every line\nbreak.\n*/\nfunction highlightCode(code, tree, highlighter, putText, putBreak, from = 0, to = code.length) {\n    let pos = from;\n    function writeTo(p, classes) {\n        if (p <= pos)\n            return;\n        for (let text = code.slice(pos, p), i = 0;;) {\n            let nextBreak = text.indexOf(\"\\n\", i);\n            let upto = nextBreak < 0 ? text.length : nextBreak;\n            if (upto > i)\n                putText(text.slice(i, upto), classes);\n            if (nextBreak < 0)\n                break;\n            putBreak();\n            i = nextBreak + 1;\n        }\n        pos = p;\n    }\n    highlightTree(tree, highlighter, (from, to, classes) => {\n        writeTo(from, \"\");\n        writeTo(to, classes);\n    }, from, to);\n    writeTo(to, \"\");\n}\nclass HighlightBuilder {\n    constructor(at, highlighters, span) {\n        this.at = at;\n        this.highlighters = highlighters;\n        this.span = span;\n        this.class = \"\";\n    }\n    startSpan(at, cls) {\n        if (cls != this.class) {\n            this.flush(at);\n            if (at > this.at)\n                this.at = at;\n            this.class = cls;\n        }\n    }\n    flush(to) {\n        if (to > this.at && this.class)\n            this.span(this.at, to, this.class);\n    }\n    highlightRange(cursor, from, to, inheritedClass, highlighters) {\n        let { type, from: start, to: end } = cursor;\n        if (start >= to || end <= from)\n            return;\n        if (type.isTop)\n            highlighters = this.highlighters.filter(h => !h.scope || h.scope(type));\n        let cls = inheritedClass;\n        let rule = getStyleTags(cursor) || Rule.empty;\n        let tagCls = highlightTags(highlighters, rule.tags);\n        if (tagCls) {\n            if (cls)\n                cls += \" \";\n            cls += tagCls;\n            if (rule.mode == 1 /* Mode.Inherit */)\n                inheritedClass += (inheritedClass ? \" \" : \"\") + tagCls;\n        }\n        this.startSpan(Math.max(from, start), cls);\n        if (rule.opaque)\n            return;\n        let mounted = cursor.tree && cursor.tree.prop(NodeProp.mounted);\n        if (mounted && mounted.overlay) {\n            let inner = cursor.node.enter(mounted.overlay[0].from + start, 1);\n            let innerHighlighters = this.highlighters.filter(h => !h.scope || h.scope(mounted.tree.type));\n            let hasChild = cursor.firstChild();\n            for (let i = 0, pos = start;; i++) {\n                let next = i < mounted.overlay.length ? mounted.overlay[i] : null;\n                let nextPos = next ? next.from + start : end;\n                let rangeFrom = Math.max(from, pos), rangeTo = Math.min(to, nextPos);\n                if (rangeFrom < rangeTo && hasChild) {\n                    while (cursor.from < rangeTo) {\n                        this.highlightRange(cursor, rangeFrom, rangeTo, inheritedClass, highlighters);\n                        this.startSpan(Math.min(rangeTo, cursor.to), cls);\n                        if (cursor.to >= nextPos || !cursor.nextSibling())\n                            break;\n                    }\n                }\n                if (!next || nextPos > to)\n                    break;\n                pos = next.to + start;\n                if (pos > from) {\n                    this.highlightRange(inner.cursor(), Math.max(from, next.from + start), Math.min(to, pos), \"\", innerHighlighters);\n                    this.startSpan(Math.min(to, pos), cls);\n                }\n            }\n            if (hasChild)\n                cursor.parent();\n        }\n        else if (cursor.firstChild()) {\n            if (mounted)\n                inheritedClass = \"\";\n            do {\n                if (cursor.to <= from)\n                    continue;\n                if (cursor.from >= to)\n                    break;\n                this.highlightRange(cursor, from, to, inheritedClass, highlighters);\n                this.startSpan(Math.min(to, cursor.to), cls);\n            } while (cursor.nextSibling());\n            cursor.parent();\n        }\n    }\n}\n/**\nMatch a syntax node's [highlight rules](#highlight.styleTags). If\nthere's a match, return its set of tags, and whether it is\nopaque (uses a `!`) or applies to all child nodes (`/...`).\n*/\nfunction getStyleTags(node) {\n    let rule = node.type.prop(ruleNodeProp);\n    while (rule && rule.context && !node.matchContext(rule.context))\n        rule = rule.next;\n    return rule || null;\n}\nconst t = Tag.define;\nconst comment = t(), name = t(), typeName = t(name), propertyName = t(name), literal = t(), string = t(literal), number = t(literal), content = t(), heading = t(content), keyword = t(), operator = t(), punctuation = t(), bracket = t(punctuation), meta = t();\n/**\nThe default set of highlighting [tags](#highlight.Tag).\n\nThis collection is heavily biased towards programming languages,\nand necessarily incomplete. A full ontology of syntactic\nconstructs would fill a stack of books, and be impractical to\nwrite themes for. So try to make do with this set. If all else\nfails, [open an\nissue](https://github.com/codemirror/codemirror.next) to propose a\nnew tag, or [define](#highlight.Tag^define) a local custom tag for\nyour use case.\n\nNote that it is not obligatory to always attach the most specific\ntag possible to an element—if your grammar can't easily\ndistinguish a certain type of element (such as a local variable),\nit is okay to style it as its more general variant (a variable).\n\nFor tags that extend some parent tag, the documentation links to\nthe parent.\n*/\nconst tags = {\n    /**\n    A comment.\n    */\n    comment,\n    /**\n    A line [comment](#highlight.tags.comment).\n    */\n    lineComment: t(comment),\n    /**\n    A block [comment](#highlight.tags.comment).\n    */\n    blockComment: t(comment),\n    /**\n    A documentation [comment](#highlight.tags.comment).\n    */\n    docComment: t(comment),\n    /**\n    Any kind of identifier.\n    */\n    name,\n    /**\n    The [name](#highlight.tags.name) of a variable.\n    */\n    variableName: t(name),\n    /**\n    A type [name](#highlight.tags.name).\n    */\n    typeName: typeName,\n    /**\n    A tag name (subtag of [`typeName`](#highlight.tags.typeName)).\n    */\n    tagName: t(typeName),\n    /**\n    A property or field [name](#highlight.tags.name).\n    */\n    propertyName: propertyName,\n    /**\n    An attribute name (subtag of [`propertyName`](#highlight.tags.propertyName)).\n    */\n    attributeName: t(propertyName),\n    /**\n    The [name](#highlight.tags.name) of a class.\n    */\n    className: t(name),\n    /**\n    A label [name](#highlight.tags.name).\n    */\n    labelName: t(name),\n    /**\n    A namespace [name](#highlight.tags.name).\n    */\n    namespace: t(name),\n    /**\n    The [name](#highlight.tags.name) of a macro.\n    */\n    macroName: t(name),\n    /**\n    A literal value.\n    */\n    literal,\n    /**\n    A string [literal](#highlight.tags.literal).\n    */\n    string,\n    /**\n    A documentation [string](#highlight.tags.string).\n    */\n    docString: t(string),\n    /**\n    A character literal (subtag of [string](#highlight.tags.string)).\n    */\n    character: t(string),\n    /**\n    An attribute value (subtag of [string](#highlight.tags.string)).\n    */\n    attributeValue: t(string),\n    /**\n    A number [literal](#highlight.tags.literal).\n    */\n    number,\n    /**\n    An integer [number](#highlight.tags.number) literal.\n    */\n    integer: t(number),\n    /**\n    A floating-point [number](#highlight.tags.number) literal.\n    */\n    float: t(number),\n    /**\n    A boolean [literal](#highlight.tags.literal).\n    */\n    bool: t(literal),\n    /**\n    Regular expression [literal](#highlight.tags.literal).\n    */\n    regexp: t(literal),\n    /**\n    An escape [literal](#highlight.tags.literal), for example a\n    backslash escape in a string.\n    */\n    escape: t(literal),\n    /**\n    A color [literal](#highlight.tags.literal).\n    */\n    color: t(literal),\n    /**\n    A URL [literal](#highlight.tags.literal).\n    */\n    url: t(literal),\n    /**\n    A language keyword.\n    */\n    keyword,\n    /**\n    The [keyword](#highlight.tags.keyword) for the self or this\n    object.\n    */\n    self: t(keyword),\n    /**\n    The [keyword](#highlight.tags.keyword) for null.\n    */\n    null: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) denoting some atomic value.\n    */\n    atom: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that represents a unit.\n    */\n    unit: t(keyword),\n    /**\n    A modifier [keyword](#highlight.tags.keyword).\n    */\n    modifier: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that acts as an operator.\n    */\n    operatorKeyword: t(keyword),\n    /**\n    A control-flow related [keyword](#highlight.tags.keyword).\n    */\n    controlKeyword: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that defines something.\n    */\n    definitionKeyword: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) related to defining or\n    interfacing with modules.\n    */\n    moduleKeyword: t(keyword),\n    /**\n    An operator.\n    */\n    operator,\n    /**\n    An [operator](#highlight.tags.operator) that dereferences something.\n    */\n    derefOperator: t(operator),\n    /**\n    Arithmetic-related [operator](#highlight.tags.operator).\n    */\n    arithmeticOperator: t(operator),\n    /**\n    Logical [operator](#highlight.tags.operator).\n    */\n    logicOperator: t(operator),\n    /**\n    Bit [operator](#highlight.tags.operator).\n    */\n    bitwiseOperator: t(operator),\n    /**\n    Comparison [operator](#highlight.tags.operator).\n    */\n    compareOperator: t(operator),\n    /**\n    [Operator](#highlight.tags.operator) that updates its operand.\n    */\n    updateOperator: t(operator),\n    /**\n    [Operator](#highlight.tags.operator) that defines something.\n    */\n    definitionOperator: t(operator),\n    /**\n    Type-related [operator](#highlight.tags.operator).\n    */\n    typeOperator: t(operator),\n    /**\n    Control-flow [operator](#highlight.tags.operator).\n    */\n    controlOperator: t(operator),\n    /**\n    Program or markup punctuation.\n    */\n    punctuation,\n    /**\n    [Punctuation](#highlight.tags.punctuation) that separates\n    things.\n    */\n    separator: t(punctuation),\n    /**\n    Bracket-style [punctuation](#highlight.tags.punctuation).\n    */\n    bracket,\n    /**\n    Angle [brackets](#highlight.tags.bracket) (usually `<` and `>`\n    tokens).\n    */\n    angleBracket: t(bracket),\n    /**\n    Square [brackets](#highlight.tags.bracket) (usually `[` and `]`\n    tokens).\n    */\n    squareBracket: t(bracket),\n    /**\n    Parentheses (usually `(` and `)` tokens). Subtag of\n    [bracket](#highlight.tags.bracket).\n    */\n    paren: t(bracket),\n    /**\n    Braces (usually `{` and `}` tokens). Subtag of\n    [bracket](#highlight.tags.bracket).\n    */\n    brace: t(bracket),\n    /**\n    Content, for example plain text in XML or markup documents.\n    */\n    content,\n    /**\n    [Content](#highlight.tags.content) that represents a heading.\n    */\n    heading,\n    /**\n    A level 1 [heading](#highlight.tags.heading).\n    */\n    heading1: t(heading),\n    /**\n    A level 2 [heading](#highlight.tags.heading).\n    */\n    heading2: t(heading),\n    /**\n    A level 3 [heading](#highlight.tags.heading).\n    */\n    heading3: t(heading),\n    /**\n    A level 4 [heading](#highlight.tags.heading).\n    */\n    heading4: t(heading),\n    /**\n    A level 5 [heading](#highlight.tags.heading).\n    */\n    heading5: t(heading),\n    /**\n    A level 6 [heading](#highlight.tags.heading).\n    */\n    heading6: t(heading),\n    /**\n    A prose [content](#highlight.tags.content) separator (such as a horizontal rule).\n    */\n    contentSeparator: t(content),\n    /**\n    [Content](#highlight.tags.content) that represents a list.\n    */\n    list: t(content),\n    /**\n    [Content](#highlight.tags.content) that represents a quote.\n    */\n    quote: t(content),\n    /**\n    [Content](#highlight.tags.content) that is emphasized.\n    */\n    emphasis: t(content),\n    /**\n    [Content](#highlight.tags.content) that is styled strong.\n    */\n    strong: t(content),\n    /**\n    [Content](#highlight.tags.content) that is part of a link.\n    */\n    link: t(content),\n    /**\n    [Content](#highlight.tags.content) that is styled as code or\n    monospace.\n    */\n    monospace: t(content),\n    /**\n    [Content](#highlight.tags.content) that has a strike-through\n    style.\n    */\n    strikethrough: t(content),\n    /**\n    Inserted text in a change-tracking format.\n    */\n    inserted: t(),\n    /**\n    Deleted text.\n    */\n    deleted: t(),\n    /**\n    Changed text.\n    */\n    changed: t(),\n    /**\n    An invalid or unsyntactic element.\n    */\n    invalid: t(),\n    /**\n    Metadata or meta-instruction.\n    */\n    meta,\n    /**\n    [Metadata](#highlight.tags.meta) that applies to the entire\n    document.\n    */\n    documentMeta: t(meta),\n    /**\n    [Metadata](#highlight.tags.meta) that annotates or adds\n    attributes to a given syntactic element.\n    */\n    annotation: t(meta),\n    /**\n    Processing instruction or preprocessor directive. Subtag of\n    [meta](#highlight.tags.meta).\n    */\n    processingInstruction: t(meta),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates that a\n    given element is being defined. Expected to be used with the\n    various [name](#highlight.tags.name) tags.\n    */\n    definition: Tag.defineModifier(\"definition\"),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates that\n    something is constant. Mostly expected to be used with\n    [variable names](#highlight.tags.variableName).\n    */\n    constant: Tag.defineModifier(\"constant\"),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) used to indicate that\n    a [variable](#highlight.tags.variableName) or [property\n    name](#highlight.tags.propertyName) is being called or defined\n    as a function.\n    */\n    function: Tag.defineModifier(\"function\"),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that can be applied to\n    [names](#highlight.tags.name) to indicate that they belong to\n    the language's standard environment.\n    */\n    standard: Tag.defineModifier(\"standard\"),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates a given\n    [names](#highlight.tags.name) is local to some scope.\n    */\n    local: Tag.defineModifier(\"local\"),\n    /**\n    A generic variant [modifier](#highlight.Tag^defineModifier) that\n    can be used to tag language-specific alternative variants of\n    some common tag. It is recommended for themes to define special\n    forms of at least the [string](#highlight.tags.string) and\n    [variable name](#highlight.tags.variableName) tags, since those\n    come up a lot.\n    */\n    special: Tag.defineModifier(\"special\")\n};\nfor (let name in tags) {\n    let val = tags[name];\n    if (val instanceof Tag)\n        val.name = name;\n}\n/**\nThis is a highlighter that adds stable, predictable classes to\ntokens, for styling with external CSS.\n\nThe following tags are mapped to their name prefixed with `\"tok-\"`\n(for example `\"tok-comment\"`):\n\n* [`link`](#highlight.tags.link)\n* [`heading`](#highlight.tags.heading)\n* [`emphasis`](#highlight.tags.emphasis)\n* [`strong`](#highlight.tags.strong)\n* [`keyword`](#highlight.tags.keyword)\n* [`atom`](#highlight.tags.atom)\n* [`bool`](#highlight.tags.bool)\n* [`url`](#highlight.tags.url)\n* [`labelName`](#highlight.tags.labelName)\n* [`inserted`](#highlight.tags.inserted)\n* [`deleted`](#highlight.tags.deleted)\n* [`literal`](#highlight.tags.literal)\n* [`string`](#highlight.tags.string)\n* [`number`](#highlight.tags.number)\n* [`variableName`](#highlight.tags.variableName)\n* [`typeName`](#highlight.tags.typeName)\n* [`namespace`](#highlight.tags.namespace)\n* [`className`](#highlight.tags.className)\n* [`macroName`](#highlight.tags.macroName)\n* [`propertyName`](#highlight.tags.propertyName)\n* [`operator`](#highlight.tags.operator)\n* [`comment`](#highlight.tags.comment)\n* [`meta`](#highlight.tags.meta)\n* [`punctuation`](#highlight.tags.punctuation)\n* [`invalid`](#highlight.tags.invalid)\n\nIn addition, these mappings are provided:\n\n* [`regexp`](#highlight.tags.regexp),\n  [`escape`](#highlight.tags.escape), and\n  [`special`](#highlight.tags.special)[`(string)`](#highlight.tags.string)\n  are mapped to `\"tok-string2\"`\n* [`special`](#highlight.tags.special)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName2\"`\n* [`local`](#highlight.tags.local)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName tok-local\"`\n* [`definition`](#highlight.tags.definition)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName tok-definition\"`\n* [`definition`](#highlight.tags.definition)[`(propertyName)`](#highlight.tags.propertyName)\n  to `\"tok-propertyName tok-definition\"`\n*/\nconst classHighlighter = tagHighlighter([\n    { tag: tags.link, class: \"tok-link\" },\n    { tag: tags.heading, class: \"tok-heading\" },\n    { tag: tags.emphasis, class: \"tok-emphasis\" },\n    { tag: tags.strong, class: \"tok-strong\" },\n    { tag: tags.keyword, class: \"tok-keyword\" },\n    { tag: tags.atom, class: \"tok-atom\" },\n    { tag: tags.bool, class: \"tok-bool\" },\n    { tag: tags.url, class: \"tok-url\" },\n    { tag: tags.labelName, class: \"tok-labelName\" },\n    { tag: tags.inserted, class: \"tok-inserted\" },\n    { tag: tags.deleted, class: \"tok-deleted\" },\n    { tag: tags.literal, class: \"tok-literal\" },\n    { tag: tags.string, class: \"tok-string\" },\n    { tag: tags.number, class: \"tok-number\" },\n    { tag: [tags.regexp, tags.escape, tags.special(tags.string)], class: \"tok-string2\" },\n    { tag: tags.variableName, class: \"tok-variableName\" },\n    { tag: tags.local(tags.variableName), class: \"tok-variableName tok-local\" },\n    { tag: tags.definition(tags.variableName), class: \"tok-variableName tok-definition\" },\n    { tag: tags.special(tags.variableName), class: \"tok-variableName2\" },\n    { tag: tags.definition(tags.propertyName), class: \"tok-propertyName tok-definition\" },\n    { tag: tags.typeName, class: \"tok-typeName\" },\n    { tag: tags.namespace, class: \"tok-namespace\" },\n    { tag: tags.className, class: \"tok-className\" },\n    { tag: tags.macroName, class: \"tok-macroName\" },\n    { tag: tags.propertyName, class: \"tok-propertyName\" },\n    { tag: tags.operator, class: \"tok-operator\" },\n    { tag: tags.comment, class: \"tok-comment\" },\n    { tag: tags.meta, class: \"tok-meta\" },\n    { tag: tags.invalid, class: \"tok-invalid\" },\n    { tag: tags.punctuation, class: \"tok-punctuation\" }\n]);\n\nexport { Tag, classHighlighter, getStyleTags, highlightCode, highlightTree, styleTags, tagHighlighter, tags };\n","import { NodeProp, IterMode, Tree, TreeFragment, Parser, NodeType, NodeSet } from '@lezer/common';\nimport { StateEffect, StateField, Facet, EditorState, countColumn, combineConfig, RangeSet, RangeSetBuilder, Prec } from '@codemirror/state';\nimport { ViewPlugin, logException, EditorView, Decoration, WidgetType, gutter, GutterMarker, Direction } from '@codemirror/view';\nimport { tags, tagHighlighter, highlightTree, styleTags } from '@lezer/highlight';\nimport { StyleModule } from 'style-mod';\n\nvar _a;\n/**\nNode prop stored in a parser's top syntax node to provide the\nfacet that stores language-specific data for that language.\n*/\nconst languageDataProp = /*@__PURE__*/new NodeProp();\n/**\nHelper function to define a facet (to be added to the top syntax\nnode(s) for a language via\n[`languageDataProp`](https://codemirror.net/6/docs/ref/#language.languageDataProp)), that will be\nused to associate language data with the language. You\nprobably only need this when subclassing\n[`Language`](https://codemirror.net/6/docs/ref/#language.Language).\n*/\nfunction defineLanguageFacet(baseData) {\n    return Facet.define({\n        combine: baseData ? values => values.concat(baseData) : undefined\n    });\n}\n/**\nSyntax node prop used to register sublanguages. Should be added to\nthe top level node type for the language.\n*/\nconst sublanguageProp = /*@__PURE__*/new NodeProp();\n/**\nA language object manages parsing and per-language\n[metadata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt). Parse data is\nmanaged as a [Lezer](https://lezer.codemirror.net) tree. The class\ncan be used directly, via the [`LRLanguage`](https://codemirror.net/6/docs/ref/#language.LRLanguage)\nsubclass for [Lezer](https://lezer.codemirror.net/) LR parsers, or\nvia the [`StreamLanguage`](https://codemirror.net/6/docs/ref/#language.StreamLanguage) subclass\nfor stream parsers.\n*/\nclass Language {\n    /**\n    Construct a language object. If you need to invoke this\n    directly, first define a data facet with\n    [`defineLanguageFacet`](https://codemirror.net/6/docs/ref/#language.defineLanguageFacet), and then\n    configure your parser to [attach](https://codemirror.net/6/docs/ref/#language.languageDataProp) it\n    to the language's outer syntax node.\n    */\n    constructor(\n    /**\n    The [language data](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt) facet\n    used for this language.\n    */\n    data, parser, extraExtensions = [], \n    /**\n    A language name.\n    */\n    name = \"\") {\n        this.data = data;\n        this.name = name;\n        // Kludge to define EditorState.tree as a debugging helper,\n        // without the EditorState package actually knowing about\n        // languages and lezer trees.\n        if (!EditorState.prototype.hasOwnProperty(\"tree\"))\n            Object.defineProperty(EditorState.prototype, \"tree\", { get() { return syntaxTree(this); } });\n        this.parser = parser;\n        this.extension = [\n            language.of(this),\n            EditorState.languageData.of((state, pos, side) => {\n                let top = topNodeAt(state, pos, side), data = top.type.prop(languageDataProp);\n                if (!data)\n                    return [];\n                let base = state.facet(data), sub = top.type.prop(sublanguageProp);\n                if (sub) {\n                    let innerNode = top.resolve(pos - top.from, side);\n                    for (let sublang of sub)\n                        if (sublang.test(innerNode, state)) {\n                            let data = state.facet(sublang.facet);\n                            return sublang.type == \"replace\" ? data : data.concat(base);\n                        }\n                }\n                return base;\n            })\n        ].concat(extraExtensions);\n    }\n    /**\n    Query whether this language is active at the given position.\n    */\n    isActiveAt(state, pos, side = -1) {\n        return topNodeAt(state, pos, side).type.prop(languageDataProp) == this.data;\n    }\n    /**\n    Find the document regions that were parsed using this language.\n    The returned regions will _include_ any nested languages rooted\n    in this language, when those exist.\n    */\n    findRegions(state) {\n        let lang = state.facet(language);\n        if ((lang === null || lang === void 0 ? void 0 : lang.data) == this.data)\n            return [{ from: 0, to: state.doc.length }];\n        if (!lang || !lang.allowsNesting)\n            return [];\n        let result = [];\n        let explore = (tree, from) => {\n            if (tree.prop(languageDataProp) == this.data) {\n                result.push({ from, to: from + tree.length });\n                return;\n            }\n            let mount = tree.prop(NodeProp.mounted);\n            if (mount) {\n                if (mount.tree.prop(languageDataProp) == this.data) {\n                    if (mount.overlay)\n                        for (let r of mount.overlay)\n                            result.push({ from: r.from + from, to: r.to + from });\n                    else\n                        result.push({ from: from, to: from + tree.length });\n                    return;\n                }\n                else if (mount.overlay) {\n                    let size = result.length;\n                    explore(mount.tree, mount.overlay[0].from + from);\n                    if (result.length > size)\n                        return;\n                }\n            }\n            for (let i = 0; i < tree.children.length; i++) {\n                let ch = tree.children[i];\n                if (ch instanceof Tree)\n                    explore(ch, tree.positions[i] + from);\n            }\n        };\n        explore(syntaxTree(state), 0);\n        return result;\n    }\n    /**\n    Indicates whether this language allows nested languages. The\n    default implementation returns true.\n    */\n    get allowsNesting() { return true; }\n}\n/**\n@internal\n*/\nLanguage.setState = /*@__PURE__*/StateEffect.define();\nfunction topNodeAt(state, pos, side) {\n    let topLang = state.facet(language), tree = syntaxTree(state).topNode;\n    if (!topLang || topLang.allowsNesting) {\n        for (let node = tree; node; node = node.enter(pos, side, IterMode.ExcludeBuffers | IterMode.EnterBracketed))\n            if (node.type.isTop)\n                tree = node;\n    }\n    return tree;\n}\n/**\nA subclass of [`Language`](https://codemirror.net/6/docs/ref/#language.Language) for use with Lezer\n[LR parsers](https://lezer.codemirror.net/docs/ref#lr.LRParser)\nparsers.\n*/\nclass LRLanguage extends Language {\n    constructor(data, parser, name) {\n        super(data, parser, [], name);\n        this.parser = parser;\n    }\n    /**\n    Define a language from a parser.\n    */\n    static define(spec) {\n        let data = defineLanguageFacet(spec.languageData);\n        return new LRLanguage(data, spec.parser.configure({\n            props: [languageDataProp.add(type => type.isTop ? data : undefined)]\n        }), spec.name);\n    }\n    /**\n    Create a new instance of this language with a reconfigured\n    version of its parser and optionally a new name.\n    */\n    configure(options, name) {\n        return new LRLanguage(this.data, this.parser.configure(options), name || this.name);\n    }\n    get allowsNesting() { return this.parser.hasWrappers(); }\n}\n/**\nGet the syntax tree for a state, which is the current (possibly\nincomplete) parse tree of the active\n[language](https://codemirror.net/6/docs/ref/#language.Language), or the empty tree if there is no\nlanguage available.\n*/\nfunction syntaxTree(state) {\n    let field = state.field(Language.state, false);\n    return field ? field.tree : Tree.empty;\n}\n/**\nTry to get a parse tree that spans at least up to `upto`. The\nmethod will do at most `timeout` milliseconds of work to parse\nup to that point if the tree isn't already available.\n*/\nfunction ensureSyntaxTree(state, upto, timeout = 50) {\n    var _a;\n    let parse = (_a = state.field(Language.state, false)) === null || _a === void 0 ? void 0 : _a.context;\n    if (!parse)\n        return null;\n    let oldVieport = parse.viewport;\n    parse.updateViewport({ from: 0, to: upto });\n    let result = parse.isDone(upto) || parse.work(timeout, upto) ? parse.tree : null;\n    parse.updateViewport(oldVieport);\n    return result;\n}\n/**\nQueries whether there is a full syntax tree available up to the\ngiven document position. If there isn't, the background parse\nprocess _might_ still be working and update the tree further, but\nthere is no guarantee of that—the parser will [stop\nworking](https://codemirror.net/6/docs/ref/#language.syntaxParserRunning) when it has spent a\ncertain amount of time or has moved beyond the visible viewport.\nAlways returns false if no language has been enabled.\n*/\nfunction syntaxTreeAvailable(state, upto = state.doc.length) {\n    var _a;\n    return ((_a = state.field(Language.state, false)) === null || _a === void 0 ? void 0 : _a.context.isDone(upto)) || false;\n}\n/**\nMove parsing forward, and update the editor state afterwards to\nreflect the new tree. Will work for at most `timeout`\nmilliseconds. Returns true if the parser managed get to the given\nposition in that time.\n*/\nfunction forceParsing(view, upto = view.viewport.to, timeout = 100) {\n    let success = ensureSyntaxTree(view.state, upto, timeout);\n    if (success != syntaxTree(view.state))\n        view.dispatch({});\n    return !!success;\n}\n/**\nTells you whether the language parser is planning to do more\nparsing work (in a `requestIdleCallback` pseudo-thread) or has\nstopped running, either because it parsed the entire document,\nbecause it spent too much time and was cut off, or because there\nis no language parser enabled.\n*/\nfunction syntaxParserRunning(view) {\n    var _a;\n    return ((_a = view.plugin(parseWorker)) === null || _a === void 0 ? void 0 : _a.isWorking()) || false;\n}\n/**\nLezer-style\n[`Input`](https://lezer.codemirror.net/docs/ref#common.Input)\nobject for a [`Text`](https://codemirror.net/6/docs/ref/#state.Text) object.\n*/\nclass DocInput {\n    /**\n    Create an input object for the given document.\n    */\n    constructor(doc) {\n        this.doc = doc;\n        this.cursorPos = 0;\n        this.string = \"\";\n        this.cursor = doc.iter();\n    }\n    get length() { return this.doc.length; }\n    syncTo(pos) {\n        this.string = this.cursor.next(pos - this.cursorPos).value;\n        this.cursorPos = pos + this.string.length;\n        return this.cursorPos - this.string.length;\n    }\n    chunk(pos) {\n        this.syncTo(pos);\n        return this.string;\n    }\n    get lineChunks() { return true; }\n    read(from, to) {\n        let stringStart = this.cursorPos - this.string.length;\n        if (from < stringStart || to >= this.cursorPos)\n            return this.doc.sliceString(from, to);\n        else\n            return this.string.slice(from - stringStart, to - stringStart);\n    }\n}\nlet currentContext = null;\n/**\nA parse context provided to parsers working on the editor content.\n*/\nclass ParseContext {\n    constructor(parser, \n    /**\n    The current editor state.\n    */\n    state, \n    /**\n    Tree fragments that can be reused by incremental re-parses.\n    */\n    fragments = [], \n    /**\n    @internal\n    */\n    tree, \n    /**\n    @internal\n    */\n    treeLen, \n    /**\n    The current editor viewport (or some overapproximation\n    thereof). Intended to be used for opportunistically avoiding\n    work (in which case\n    [`skipUntilInView`](https://codemirror.net/6/docs/ref/#language.ParseContext.skipUntilInView)\n    should be called to make sure the parser is restarted when the\n    skipped region becomes visible).\n    */\n    viewport, \n    /**\n    @internal\n    */\n    skipped, \n    /**\n    This is where skipping parsers can register a promise that,\n    when resolved, will schedule a new parse. It is cleared when\n    the parse worker picks up the promise. @internal\n    */\n    scheduleOn) {\n        this.parser = parser;\n        this.state = state;\n        this.fragments = fragments;\n        this.tree = tree;\n        this.treeLen = treeLen;\n        this.viewport = viewport;\n        this.skipped = skipped;\n        this.scheduleOn = scheduleOn;\n        this.parse = null;\n        /**\n        @internal\n        */\n        this.tempSkipped = [];\n    }\n    /**\n    @internal\n    */\n    static create(parser, state, viewport) {\n        return new ParseContext(parser, state, [], Tree.empty, 0, viewport, [], null);\n    }\n    startParse() {\n        return this.parser.startParse(new DocInput(this.state.doc), this.fragments);\n    }\n    /**\n    @internal\n    */\n    work(until, upto) {\n        if (upto != null && upto >= this.state.doc.length)\n            upto = undefined;\n        if (this.tree != Tree.empty && this.isDone(upto !== null && upto !== void 0 ? upto : this.state.doc.length)) {\n            this.takeTree();\n            return true;\n        }\n        return this.withContext(() => {\n            var _a;\n            if (typeof until == \"number\") {\n                let endTime = Date.now() + until;\n                until = () => Date.now() > endTime;\n            }\n            if (!this.parse)\n                this.parse = this.startParse();\n            if (upto != null && (this.parse.stoppedAt == null || this.parse.stoppedAt > upto) &&\n                upto < this.state.doc.length)\n                this.parse.stopAt(upto);\n            for (;;) {\n                let done = this.parse.advance();\n                if (done) {\n                    this.fragments = this.withoutTempSkipped(TreeFragment.addTree(done, this.fragments, this.parse.stoppedAt != null));\n                    this.treeLen = (_a = this.parse.stoppedAt) !== null && _a !== void 0 ? _a : this.state.doc.length;\n                    this.tree = done;\n                    this.parse = null;\n                    if (this.treeLen < (upto !== null && upto !== void 0 ? upto : this.state.doc.length))\n                        this.parse = this.startParse();\n                    else\n                        return true;\n                }\n                if (until())\n                    return false;\n            }\n        });\n    }\n    /**\n    @internal\n    */\n    takeTree() {\n        let pos, tree;\n        if (this.parse && (pos = this.parse.parsedPos) >= this.treeLen) {\n            if (this.parse.stoppedAt == null || this.parse.stoppedAt > pos)\n                this.parse.stopAt(pos);\n            this.withContext(() => { while (!(tree = this.parse.advance())) { } });\n            this.treeLen = pos;\n            this.tree = tree;\n            this.fragments = this.withoutTempSkipped(TreeFragment.addTree(this.tree, this.fragments, true));\n            this.parse = null;\n        }\n    }\n    withContext(f) {\n        let prev = currentContext;\n        currentContext = this;\n        try {\n            return f();\n        }\n        finally {\n            currentContext = prev;\n        }\n    }\n    withoutTempSkipped(fragments) {\n        for (let r; r = this.tempSkipped.pop();)\n            fragments = cutFragments(fragments, r.from, r.to);\n        return fragments;\n    }\n    /**\n    @internal\n    */\n    changes(changes, newState) {\n        let { fragments, tree, treeLen, viewport, skipped } = this;\n        this.takeTree();\n        if (!changes.empty) {\n            let ranges = [];\n            changes.iterChangedRanges((fromA, toA, fromB, toB) => ranges.push({ fromA, toA, fromB, toB }));\n            fragments = TreeFragment.applyChanges(fragments, ranges);\n            tree = Tree.empty;\n            treeLen = 0;\n            viewport = { from: changes.mapPos(viewport.from, -1), to: changes.mapPos(viewport.to, 1) };\n            if (this.skipped.length) {\n                skipped = [];\n                for (let r of this.skipped) {\n                    let from = changes.mapPos(r.from, 1), to = changes.mapPos(r.to, -1);\n                    if (from < to)\n                        skipped.push({ from, to });\n                }\n            }\n        }\n        return new ParseContext(this.parser, newState, fragments, tree, treeLen, viewport, skipped, this.scheduleOn);\n    }\n    /**\n    @internal\n    */\n    updateViewport(viewport) {\n        if (this.viewport.from == viewport.from && this.viewport.to == viewport.to)\n            return false;\n        this.viewport = viewport;\n        let startLen = this.skipped.length;\n        for (let i = 0; i < this.skipped.length; i++) {\n            let { from, to } = this.skipped[i];\n            if (from < viewport.to && to > viewport.from) {\n                this.fragments = cutFragments(this.fragments, from, to);\n                this.skipped.splice(i--, 1);\n            }\n        }\n        if (this.skipped.length >= startLen)\n            return false;\n        this.reset();\n        return true;\n    }\n    /**\n    @internal\n    */\n    reset() {\n        if (this.parse) {\n            this.takeTree();\n            this.parse = null;\n        }\n    }\n    /**\n    Notify the parse scheduler that the given region was skipped\n    because it wasn't in view, and the parse should be restarted\n    when it comes into view.\n    */\n    skipUntilInView(from, to) {\n        this.skipped.push({ from, to });\n    }\n    /**\n    Returns a parser intended to be used as placeholder when\n    asynchronously loading a nested parser. It'll skip its input and\n    mark it as not-really-parsed, so that the next update will parse\n    it again.\n    \n    When `until` is given, a reparse will be scheduled when that\n    promise resolves.\n    */\n    static getSkippingParser(until) {\n        return new class extends Parser {\n            createParse(input, fragments, ranges) {\n                let from = ranges[0].from, to = ranges[ranges.length - 1].to;\n                let parser = {\n                    parsedPos: from,\n                    advance() {\n                        let cx = currentContext;\n                        if (cx) {\n                            for (let r of ranges)\n                                cx.tempSkipped.push(r);\n                            if (until)\n                                cx.scheduleOn = cx.scheduleOn ? Promise.all([cx.scheduleOn, until]) : until;\n                        }\n                        this.parsedPos = to;\n                        return new Tree(NodeType.none, [], [], to - from);\n                    },\n                    stoppedAt: null,\n                    stopAt() { }\n                };\n                return parser;\n            }\n        };\n    }\n    /**\n    @internal\n    */\n    isDone(upto) {\n        upto = Math.min(upto, this.state.doc.length);\n        let frags = this.fragments;\n        return this.treeLen >= upto && frags.length && frags[0].from == 0 && frags[0].to >= upto;\n    }\n    /**\n    Get the context for the current parse, or `null` if no editor\n    parse is in progress.\n    */\n    static get() { return currentContext; }\n}\nfunction cutFragments(fragments, from, to) {\n    return TreeFragment.applyChanges(fragments, [{ fromA: from, toA: to, fromB: from, toB: to }]);\n}\nclass LanguageState {\n    constructor(\n    // A mutable parse state that is used to preserve work done during\n    // the lifetime of a state when moving to the next state.\n    context) {\n        this.context = context;\n        this.tree = context.tree;\n    }\n    apply(tr) {\n        if (!tr.docChanged && this.tree == this.context.tree)\n            return this;\n        let newCx = this.context.changes(tr.changes, tr.state);\n        // If the previous parse wasn't done, go forward only up to its\n        // end position or the end of the viewport, to avoid slowing down\n        // state updates with parse work beyond the viewport.\n        let upto = this.context.treeLen == tr.startState.doc.length ? undefined\n            : Math.max(tr.changes.mapPos(this.context.treeLen), newCx.viewport.to);\n        if (!newCx.work(20 /* Work.Apply */, upto))\n            newCx.takeTree();\n        return new LanguageState(newCx);\n    }\n    static init(state) {\n        let vpTo = Math.min(3000 /* Work.InitViewport */, state.doc.length);\n        let parseState = ParseContext.create(state.facet(language).parser, state, { from: 0, to: vpTo });\n        if (!parseState.work(20 /* Work.Apply */, vpTo))\n            parseState.takeTree();\n        return new LanguageState(parseState);\n    }\n}\nLanguage.state = /*@__PURE__*/StateField.define({\n    create: LanguageState.init,\n    update(value, tr) {\n        for (let e of tr.effects)\n            if (e.is(Language.setState))\n                return e.value;\n        if (tr.startState.facet(language) != tr.state.facet(language))\n            return LanguageState.init(tr.state);\n        return value.apply(tr);\n    }\n});\nlet requestIdle = (callback) => {\n    let timeout = setTimeout(() => callback(), 500 /* Work.MaxPause */);\n    return () => clearTimeout(timeout);\n};\nif (typeof requestIdleCallback != \"undefined\")\n    requestIdle = (callback) => {\n        let idle = -1, timeout = setTimeout(() => {\n            idle = requestIdleCallback(callback, { timeout: 500 /* Work.MaxPause */ - 100 /* Work.MinPause */ });\n        }, 100 /* Work.MinPause */);\n        return () => idle < 0 ? clearTimeout(timeout) : cancelIdleCallback(idle);\n    };\nconst isInputPending = typeof navigator != \"undefined\" && ((_a = navigator.scheduling) === null || _a === void 0 ? void 0 : _a.isInputPending)\n    ? () => navigator.scheduling.isInputPending() : null;\nconst parseWorker = /*@__PURE__*/ViewPlugin.fromClass(class ParseWorker {\n    constructor(view) {\n        this.view = view;\n        this.working = null;\n        this.workScheduled = 0;\n        // End of the current time chunk\n        this.chunkEnd = -1;\n        // Milliseconds of budget left for this chunk\n        this.chunkBudget = -1;\n        this.work = this.work.bind(this);\n        this.scheduleWork();\n    }\n    update(update) {\n        let cx = this.view.state.field(Language.state).context;\n        if (cx.updateViewport(update.view.viewport) || this.view.viewport.to > cx.treeLen)\n            this.scheduleWork();\n        if (update.docChanged || update.selectionSet) {\n            if (this.view.hasFocus)\n                this.chunkBudget += 50 /* Work.ChangeBonus */;\n            this.scheduleWork();\n        }\n        this.checkAsyncSchedule(cx);\n    }\n    scheduleWork() {\n        if (this.working)\n            return;\n        let { state } = this.view, field = state.field(Language.state);\n        if (field.tree != field.context.tree || !field.context.isDone(state.doc.length))\n            this.working = requestIdle(this.work);\n    }\n    work(deadline) {\n        this.working = null;\n        let now = Date.now();\n        if (this.chunkEnd < now && (this.chunkEnd < 0 || this.view.hasFocus)) { // Start a new chunk\n            this.chunkEnd = now + 30000 /* Work.ChunkTime */;\n            this.chunkBudget = 3000 /* Work.ChunkBudget */;\n        }\n        if (this.chunkBudget <= 0)\n            return; // No more budget\n        let { state, viewport: { to: vpTo } } = this.view, field = state.field(Language.state);\n        if (field.tree == field.context.tree && field.context.isDone(vpTo + 100000 /* Work.MaxParseAhead */))\n            return;\n        let endTime = Date.now() + Math.min(this.chunkBudget, 100 /* Work.Slice */, deadline && !isInputPending ? Math.max(25 /* Work.MinSlice */, deadline.timeRemaining() - 5) : 1e9);\n        let viewportFirst = field.context.treeLen < vpTo && state.doc.length > vpTo + 1000;\n        let done = field.context.work(() => {\n            return isInputPending && isInputPending() || Date.now() > endTime;\n        }, vpTo + (viewportFirst ? 0 : 100000 /* Work.MaxParseAhead */));\n        this.chunkBudget -= Date.now() - now;\n        if (done || this.chunkBudget <= 0) {\n            field.context.takeTree();\n            this.view.dispatch({ effects: Language.setState.of(new LanguageState(field.context)) });\n        }\n        if (this.chunkBudget > 0 && !(done && !viewportFirst))\n            this.scheduleWork();\n        this.checkAsyncSchedule(field.context);\n    }\n    checkAsyncSchedule(cx) {\n        if (cx.scheduleOn) {\n            this.workScheduled++;\n            cx.scheduleOn\n                .then(() => this.scheduleWork())\n                .catch(err => logException(this.view.state, err))\n                .then(() => this.workScheduled--);\n            cx.scheduleOn = null;\n        }\n    }\n    destroy() {\n        if (this.working)\n            this.working();\n    }\n    isWorking() {\n        return !!(this.working || this.workScheduled > 0);\n    }\n}, {\n    eventHandlers: { focus() { this.scheduleWork(); } }\n});\n/**\nThe facet used to associate a language with an editor state. Used\nby `Language` object's `extension` property (so you don't need to\nmanually wrap your languages in this). Can be used to access the\ncurrent language on a state.\n*/\nconst language = /*@__PURE__*/Facet.define({\n    combine(languages) { return languages.length ? languages[0] : null; },\n    enables: language => [\n        Language.state,\n        parseWorker,\n        EditorView.contentAttributes.compute([language], state => {\n            let lang = state.facet(language);\n            return lang && lang.name ? { \"data-language\": lang.name } : {};\n        })\n    ]\n});\n/**\nThis class bundles a [language](https://codemirror.net/6/docs/ref/#language.Language) with an\noptional set of supporting extensions. Language packages are\nencouraged to export a function that optionally takes a\nconfiguration object and returns a `LanguageSupport` instance, as\nthe main way for client code to use the package.\n*/\nclass LanguageSupport {\n    /**\n    Create a language support object.\n    */\n    constructor(\n    /**\n    The language object.\n    */\n    language, \n    /**\n    An optional set of supporting extensions. When nesting a\n    language in another language, the outer language is encouraged\n    to include the supporting extensions for its inner languages\n    in its own set of support extensions.\n    */\n    support = []) {\n        this.language = language;\n        this.support = support;\n        this.extension = [language, support];\n    }\n}\n/**\nLanguage descriptions are used to store metadata about languages\nand to dynamically load them. Their main role is finding the\nappropriate language for a filename or dynamically loading nested\nparsers.\n*/\nclass LanguageDescription {\n    constructor(\n    /**\n    The name of this language.\n    */\n    name, \n    /**\n    Alternative names for the mode (lowercased, includes `this.name`).\n    */\n    alias, \n    /**\n    File extensions associated with this language.\n    */\n    extensions, \n    /**\n    Optional filename pattern that should be associated with this\n    language.\n    */\n    filename, loadFunc, \n    /**\n    If the language has been loaded, this will hold its value.\n    */\n    support = undefined) {\n        this.name = name;\n        this.alias = alias;\n        this.extensions = extensions;\n        this.filename = filename;\n        this.loadFunc = loadFunc;\n        this.support = support;\n        this.loading = null;\n    }\n    /**\n    Start loading the the language. Will return a promise that\n    resolves to a [`LanguageSupport`](https://codemirror.net/6/docs/ref/#language.LanguageSupport)\n    object when the language successfully loads.\n    */\n    load() {\n        return this.loading || (this.loading = this.loadFunc().then(support => this.support = support, err => { this.loading = null; throw err; }));\n    }\n    /**\n    Create a language description.\n    */\n    static of(spec) {\n        let { load, support } = spec;\n        if (!load) {\n            if (!support)\n                throw new RangeError(\"Must pass either 'load' or 'support' to LanguageDescription.of\");\n            load = () => Promise.resolve(support);\n        }\n        return new LanguageDescription(spec.name, (spec.alias || []).concat(spec.name).map(s => s.toLowerCase()), spec.extensions || [], spec.filename, load, support);\n    }\n    /**\n    Look for a language in the given array of descriptions that\n    matches the filename. Will first match\n    [`filename`](https://codemirror.net/6/docs/ref/#language.LanguageDescription.filename) patterns,\n    and then [extensions](https://codemirror.net/6/docs/ref/#language.LanguageDescription.extensions),\n    and return the first language that matches.\n    */\n    static matchFilename(descs, filename) {\n        for (let d of descs)\n            if (d.filename && d.filename.test(filename))\n                return d;\n        let ext = /\\.([^.]+)$/.exec(filename);\n        if (ext)\n            for (let d of descs)\n                if (d.extensions.indexOf(ext[1]) > -1)\n                    return d;\n        return null;\n    }\n    /**\n    Look for a language whose name or alias matches the the given\n    name (case-insensitively). If `fuzzy` is true, and no direct\n    matchs is found, this'll also search for a language whose name\n    or alias occurs in the string (for names shorter than three\n    characters, only when surrounded by non-word characters).\n    */\n    static matchLanguageName(descs, name, fuzzy = true) {\n        name = name.toLowerCase();\n        for (let d of descs)\n            if (d.alias.some(a => a == name))\n                return d;\n        if (fuzzy)\n            for (let d of descs)\n                for (let a of d.alias) {\n                    let found = name.indexOf(a);\n                    if (found > -1 && (a.length > 2 || !/\\w/.test(name[found - 1]) && !/\\w/.test(name[found + a.length])))\n                        return d;\n                }\n        return null;\n    }\n}\n\n/**\nFacet that defines a way to provide a function that computes the\nappropriate indentation depth, as a column number (see\n[`indentString`](https://codemirror.net/6/docs/ref/#language.indentString)), at the start of a given\nline. A return value of `null` indicates no indentation can be\ndetermined, and the line should inherit the indentation of the one\nabove it. A return value of `undefined` defers to the next indent\nservice.\n*/\nconst indentService = /*@__PURE__*/Facet.define();\n/**\nFacet for overriding the unit by which indentation happens. Should\nbe a string consisting entirely of the same whitespace character.\nWhen not set, this defaults to 2 spaces.\n*/\nconst indentUnit = /*@__PURE__*/Facet.define({\n    combine: values => {\n        if (!values.length)\n            return \"  \";\n        let unit = values[0];\n        if (!unit || /\\S/.test(unit) || Array.from(unit).some(e => e != unit[0]))\n            throw new Error(\"Invalid indent unit: \" + JSON.stringify(values[0]));\n        return unit;\n    }\n});\n/**\nReturn the _column width_ of an indent unit in the state.\nDetermined by the [`indentUnit`](https://codemirror.net/6/docs/ref/#language.indentUnit)\nfacet, and [`tabSize`](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize) when that\ncontains tabs.\n*/\nfunction getIndentUnit(state) {\n    let unit = state.facet(indentUnit);\n    return unit.charCodeAt(0) == 9 ? state.tabSize * unit.length : unit.length;\n}\n/**\nCreate an indentation string that covers columns 0 to `cols`.\nWill use tabs for as much of the columns as possible when the\n[`indentUnit`](https://codemirror.net/6/docs/ref/#language.indentUnit) facet contains\ntabs.\n*/\nfunction indentString(state, cols) {\n    let result = \"\", ts = state.tabSize, ch = state.facet(indentUnit)[0];\n    if (ch == \"\\t\") {\n        while (cols >= ts) {\n            result += \"\\t\";\n            cols -= ts;\n        }\n        ch = \" \";\n    }\n    for (let i = 0; i < cols; i++)\n        result += ch;\n    return result;\n}\n/**\nGet the indentation, as a column number, at the given position.\nWill first consult any [indent services](https://codemirror.net/6/docs/ref/#language.indentService)\nthat are registered, and if none of those return an indentation,\nthis will check the syntax tree for the [indent node\nprop](https://codemirror.net/6/docs/ref/#language.indentNodeProp) and use that if found. Returns a\nnumber when an indentation could be determined, and null\notherwise.\n*/\nfunction getIndentation(context, pos) {\n    if (context instanceof EditorState)\n        context = new IndentContext(context);\n    for (let service of context.state.facet(indentService)) {\n        let result = service(context, pos);\n        if (result !== undefined)\n            return result;\n    }\n    let tree = syntaxTree(context.state);\n    return tree.length >= pos ? syntaxIndentation(context, tree, pos) : null;\n}\n/**\nCreate a change set that auto-indents all lines touched by the\ngiven document range.\n*/\nfunction indentRange(state, from, to) {\n    let updated = Object.create(null);\n    let context = new IndentContext(state, { overrideIndentation: start => { var _a; return (_a = updated[start]) !== null && _a !== void 0 ? _a : -1; } });\n    let changes = [];\n    for (let pos = from; pos <= to;) {\n        let line = state.doc.lineAt(pos);\n        pos = line.to + 1;\n        let indent = getIndentation(context, line.from);\n        if (indent == null)\n            continue;\n        if (!/\\S/.test(line.text))\n            indent = 0;\n        let cur = /^\\s*/.exec(line.text)[0];\n        let norm = indentString(state, indent);\n        if (cur != norm) {\n            updated[line.from] = indent;\n            changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n        }\n    }\n    return state.changes(changes);\n}\n/**\nIndentation contexts are used when calling [indentation\nservices](https://codemirror.net/6/docs/ref/#language.indentService). They provide helper utilities\nuseful in indentation logic, and can selectively override the\nindentation reported for some lines.\n*/\nclass IndentContext {\n    /**\n    Create an indent context.\n    */\n    constructor(\n    /**\n    The editor state.\n    */\n    state, \n    /**\n    @internal\n    */\n    options = {}) {\n        this.state = state;\n        this.options = options;\n        this.unit = getIndentUnit(state);\n    }\n    /**\n    Get a description of the line at the given position, taking\n    [simulated line\n    breaks](https://codemirror.net/6/docs/ref/#language.IndentContext.constructor^options.simulateBreak)\n    into account. If there is such a break at `pos`, the `bias`\n    argument determines whether the part of the line line before or\n    after the break is used.\n    */\n    lineAt(pos, bias = 1) {\n        let line = this.state.doc.lineAt(pos);\n        let { simulateBreak, simulateDoubleBreak } = this.options;\n        if (simulateBreak != null && simulateBreak >= line.from && simulateBreak <= line.to) {\n            if (simulateDoubleBreak && simulateBreak == pos)\n                return { text: \"\", from: pos };\n            else if (bias < 0 ? simulateBreak < pos : simulateBreak <= pos)\n                return { text: line.text.slice(simulateBreak - line.from), from: simulateBreak };\n            else\n                return { text: line.text.slice(0, simulateBreak - line.from), from: line.from };\n        }\n        return line;\n    }\n    /**\n    Get the text directly after `pos`, either the entire line\n    or the next 100 characters, whichever is shorter.\n    */\n    textAfterPos(pos, bias = 1) {\n        if (this.options.simulateDoubleBreak && pos == this.options.simulateBreak)\n            return \"\";\n        let { text, from } = this.lineAt(pos, bias);\n        return text.slice(pos - from, Math.min(text.length, pos + 100 - from));\n    }\n    /**\n    Find the column for the given position.\n    */\n    column(pos, bias = 1) {\n        let { text, from } = this.lineAt(pos, bias);\n        let result = this.countColumn(text, pos - from);\n        let override = this.options.overrideIndentation ? this.options.overrideIndentation(from) : -1;\n        if (override > -1)\n            result += override - this.countColumn(text, text.search(/\\S|$/));\n        return result;\n    }\n    /**\n    Find the column position (taking tabs into account) of the given\n    position in the given string.\n    */\n    countColumn(line, pos = line.length) {\n        return countColumn(line, this.state.tabSize, pos);\n    }\n    /**\n    Find the indentation column of the line at the given point.\n    */\n    lineIndent(pos, bias = 1) {\n        let { text, from } = this.lineAt(pos, bias);\n        let override = this.options.overrideIndentation;\n        if (override) {\n            let overriden = override(from);\n            if (overriden > -1)\n                return overriden;\n        }\n        return this.countColumn(text, text.search(/\\S|$/));\n    }\n    /**\n    Returns the [simulated line\n    break](https://codemirror.net/6/docs/ref/#language.IndentContext.constructor^options.simulateBreak)\n    for this context, if any.\n    */\n    get simulatedBreak() {\n        return this.options.simulateBreak || null;\n    }\n}\n/**\nA syntax tree node prop used to associate indentation strategies\nwith node types. Such a strategy is a function from an indentation\ncontext to a column number (see also\n[`indentString`](https://codemirror.net/6/docs/ref/#language.indentString)) or null, where null\nindicates that no definitive indentation can be determined.\n*/\nconst indentNodeProp = /*@__PURE__*/new NodeProp();\n// Compute the indentation for a given position from the syntax tree.\nfunction syntaxIndentation(cx, ast, pos) {\n    let stack = ast.resolveStack(pos);\n    let inner = ast.resolveInner(pos, -1).resolve(pos, 0).enterUnfinishedNodesBefore(pos);\n    if (inner != stack.node) {\n        let add = [];\n        for (let cur = inner; cur && !(cur.from < stack.node.from || cur.to > stack.node.to ||\n            cur.from == stack.node.from && cur.type == stack.node.type); cur = cur.parent)\n            add.push(cur);\n        for (let i = add.length - 1; i >= 0; i--)\n            stack = { node: add[i], next: stack };\n    }\n    return indentFor(stack, cx, pos);\n}\nfunction indentFor(stack, cx, pos) {\n    for (let cur = stack; cur; cur = cur.next) {\n        let strategy = indentStrategy(cur.node);\n        if (strategy)\n            return strategy(TreeIndentContext.create(cx, pos, cur));\n    }\n    return 0;\n}\nfunction ignoreClosed(cx) {\n    return cx.pos == cx.options.simulateBreak && cx.options.simulateDoubleBreak;\n}\nfunction indentStrategy(tree) {\n    let strategy = tree.type.prop(indentNodeProp);\n    if (strategy)\n        return strategy;\n    let first = tree.firstChild, close;\n    if (first && (close = first.type.prop(NodeProp.closedBy))) {\n        let last = tree.lastChild, closed = last && close.indexOf(last.name) > -1;\n        return cx => delimitedStrategy(cx, true, 1, undefined, closed && !ignoreClosed(cx) ? last.from : undefined);\n    }\n    return tree.parent == null ? topIndent : null;\n}\nfunction topIndent() { return 0; }\n/**\nObjects of this type provide context information and helper\nmethods to indentation functions registered on syntax nodes.\n*/\nclass TreeIndentContext extends IndentContext {\n    constructor(base, \n    /**\n    The position at which indentation is being computed.\n    */\n    pos, \n    /**\n    @internal\n    */\n    context) {\n        super(base.state, base.options);\n        this.base = base;\n        this.pos = pos;\n        this.context = context;\n    }\n    /**\n    The syntax tree node to which the indentation strategy\n    applies.\n    */\n    get node() { return this.context.node; }\n    /**\n    @internal\n    */\n    static create(base, pos, context) {\n        return new TreeIndentContext(base, pos, context);\n    }\n    /**\n    Get the text directly after `this.pos`, either the entire line\n    or the next 100 characters, whichever is shorter.\n    */\n    get textAfter() {\n        return this.textAfterPos(this.pos);\n    }\n    /**\n    Get the indentation at the reference line for `this.node`, which\n    is the line on which it starts, unless there is a node that is\n    _not_ a parent of this node covering the start of that line. If\n    so, the line at the start of that node is tried, again skipping\n    on if it is covered by another such node.\n    */\n    get baseIndent() {\n        return this.baseIndentFor(this.node);\n    }\n    /**\n    Get the indentation for the reference line of the given node\n    (see [`baseIndent`](https://codemirror.net/6/docs/ref/#language.TreeIndentContext.baseIndent)).\n    */\n    baseIndentFor(node) {\n        let line = this.state.doc.lineAt(node.from);\n        // Skip line starts that are covered by a sibling (or cousin, etc)\n        for (;;) {\n            let atBreak = node.resolve(line.from);\n            while (atBreak.parent && atBreak.parent.from == atBreak.from)\n                atBreak = atBreak.parent;\n            if (isParent(atBreak, node))\n                break;\n            line = this.state.doc.lineAt(atBreak.from);\n        }\n        return this.lineIndent(line.from);\n    }\n    /**\n    Continue looking for indentations in the node's parent nodes,\n    and return the result of that.\n    */\n    continue() {\n        return indentFor(this.context.next, this.base, this.pos);\n    }\n}\nfunction isParent(parent, of) {\n    for (let cur = of; cur; cur = cur.parent)\n        if (parent == cur)\n            return true;\n    return false;\n}\n// Check whether a delimited node is aligned (meaning there are\n// non-skipped nodes on the same line as the opening delimiter). And\n// if so, return the opening token.\nfunction bracketedAligned(context) {\n    let tree = context.node;\n    let openToken = tree.childAfter(tree.from), last = tree.lastChild;\n    if (!openToken)\n        return null;\n    let sim = context.options.simulateBreak;\n    let openLine = context.state.doc.lineAt(openToken.from);\n    let lineEnd = sim == null || sim <= openLine.from ? openLine.to : Math.min(openLine.to, sim);\n    for (let pos = openToken.to;;) {\n        let next = tree.childAfter(pos);\n        if (!next || next == last)\n            return null;\n        if (!next.type.isSkipped) {\n            if (next.from >= lineEnd)\n                return null;\n            let space = /^ */.exec(openLine.text.slice(openToken.to - openLine.from))[0].length;\n            return { from: openToken.from, to: openToken.to + space };\n        }\n        pos = next.to;\n    }\n}\n/**\nAn indentation strategy for delimited (usually bracketed) nodes.\nWill, by default, indent one unit more than the parent's base\nindent unless the line starts with a closing token. When `align`\nis true and there are non-skipped nodes on the node's opening\nline, the content of the node will be aligned with the end of the\nopening node, like this:\n\n    foo(bar,\n        baz)\n*/\nfunction delimitedIndent({ closing, align = true, units = 1 }) {\n    return (context) => delimitedStrategy(context, align, units, closing);\n}\nfunction delimitedStrategy(context, align, units, closing, closedAt) {\n    let after = context.textAfter, space = after.match(/^\\s*/)[0].length;\n    let closed = closing && after.slice(space, space + closing.length) == closing || closedAt == context.pos + space;\n    let aligned = align ? bracketedAligned(context) : null;\n    if (aligned)\n        return closed ? context.column(aligned.from) : context.column(aligned.to);\n    return context.baseIndent + (closed ? 0 : context.unit * units);\n}\n/**\nAn indentation strategy that aligns a node's content to its base\nindentation.\n*/\nconst flatIndent = (context) => context.baseIndent;\n/**\nCreates an indentation strategy that, by default, indents\ncontinued lines one unit more than the node's base indentation.\nYou can provide `except` to prevent indentation of lines that\nmatch a pattern (for example `/^else\\b/` in `if`/`else`\nconstructs), and you can change the amount of units used with the\n`units` option.\n*/\nfunction continuedIndent({ except, units = 1 } = {}) {\n    return (context) => {\n        let matchExcept = except && except.test(context.textAfter);\n        return context.baseIndent + (matchExcept ? 0 : units * context.unit);\n    };\n}\nconst DontIndentBeyond = 200;\n/**\nEnables reindentation on input. When a language defines an\n`indentOnInput` field in its [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt), which must hold a regular\nexpression, the line at the cursor will be reindented whenever new\ntext is typed and the input from the start of the line up to the\ncursor matches that regexp.\n\nTo avoid unneccesary reindents, it is recommended to start the\nregexp with `^` (usually followed by `\\s*`), and end it with `$`.\nFor example, `/^\\s*\\}$/` will reindent when a closing brace is\nadded at the start of a line.\n*/\nfunction indentOnInput() {\n    return EditorState.transactionFilter.of(tr => {\n        if (!tr.docChanged || !tr.isUserEvent(\"input.type\") && !tr.isUserEvent(\"input.complete\"))\n            return tr;\n        let rules = tr.startState.languageDataAt(\"indentOnInput\", tr.startState.selection.main.head);\n        if (!rules.length)\n            return tr;\n        let doc = tr.newDoc, { head } = tr.newSelection.main, line = doc.lineAt(head);\n        if (head > line.from + DontIndentBeyond)\n            return tr;\n        let lineStart = doc.sliceString(line.from, head);\n        if (!rules.some(r => r.test(lineStart)))\n            return tr;\n        let { state } = tr, last = -1, changes = [];\n        for (let { head } of state.selection.ranges) {\n            let line = state.doc.lineAt(head);\n            if (line.from == last)\n                continue;\n            last = line.from;\n            let indent = getIndentation(state, line.from);\n            if (indent == null)\n                continue;\n            let cur = /^\\s*/.exec(line.text)[0];\n            let norm = indentString(state, indent);\n            if (cur != norm)\n                changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n        }\n        return changes.length ? [tr, { changes, sequential: true }] : tr;\n    });\n}\n\n/**\nA facet that registers a code folding service. When called with\nthe extent of a line, such a function should return a foldable\nrange that starts on that line (but continues beyond it), if one\ncan be found.\n*/\nconst foldService = /*@__PURE__*/Facet.define();\n/**\nThis node prop is used to associate folding information with\nsyntax node types. Given a syntax node, it should check whether\nthat tree is foldable and return the range that can be collapsed\nwhen it is.\n*/\nconst foldNodeProp = /*@__PURE__*/new NodeProp();\n/**\n[Fold](https://codemirror.net/6/docs/ref/#language.foldNodeProp) function that folds everything but\nthe first and the last child of a syntax node. Useful for nodes\nthat start and end with delimiters.\n*/\nfunction foldInside(node) {\n    let first = node.firstChild, last = node.lastChild;\n    return first && first.to < last.from ? { from: first.to, to: last.type.isError ? node.to : last.from } : null;\n}\nfunction syntaxFolding(state, start, end) {\n    let tree = syntaxTree(state);\n    if (tree.length < end)\n        return null;\n    let stack = tree.resolveStack(end, 1);\n    let found = null;\n    for (let iter = stack; iter; iter = iter.next) {\n        let cur = iter.node;\n        if (cur.to <= end || cur.from > end)\n            continue;\n        if (found && cur.from < start)\n            break;\n        let prop = cur.type.prop(foldNodeProp);\n        if (prop && (cur.to < tree.length - 50 || tree.length == state.doc.length || !isUnfinished(cur))) {\n            let value = prop(cur, state);\n            if (value && value.from <= end && value.from >= start && value.to > end)\n                found = value;\n        }\n    }\n    return found;\n}\nfunction isUnfinished(node) {\n    let ch = node.lastChild;\n    return ch && ch.to == node.to && ch.type.isError;\n}\n/**\nCheck whether the given line is foldable. First asks any fold\nservices registered through\n[`foldService`](https://codemirror.net/6/docs/ref/#language.foldService), and if none of them return\na result, tries to query the [fold node\nprop](https://codemirror.net/6/docs/ref/#language.foldNodeProp) of syntax nodes that cover the end\nof the line.\n*/\nfunction foldable(state, lineStart, lineEnd) {\n    for (let service of state.facet(foldService)) {\n        let result = service(state, lineStart, lineEnd);\n        if (result)\n            return result;\n    }\n    return syntaxFolding(state, lineStart, lineEnd);\n}\nfunction mapRange(range, mapping) {\n    let from = mapping.mapPos(range.from, 1), to = mapping.mapPos(range.to, -1);\n    return from >= to ? undefined : { from, to };\n}\n/**\nState effect that can be attached to a transaction to fold the\ngiven range. (You probably only need this in exceptional\ncircumstances—usually you'll just want to let\n[`foldCode`](https://codemirror.net/6/docs/ref/#language.foldCode) and the [fold\ngutter](https://codemirror.net/6/docs/ref/#language.foldGutter) create the transactions.)\n*/\nconst foldEffect = /*@__PURE__*/StateEffect.define({ map: mapRange });\n/**\nState effect that unfolds the given range (if it was folded).\n*/\nconst unfoldEffect = /*@__PURE__*/StateEffect.define({ map: mapRange });\nfunction selectedLines(view) {\n    let lines = [];\n    for (let { head } of view.state.selection.ranges) {\n        if (lines.some(l => l.from <= head && l.to >= head))\n            continue;\n        lines.push(view.lineBlockAt(head));\n    }\n    return lines;\n}\n/**\nThe state field that stores the folded ranges (as a [decoration\nset](https://codemirror.net/6/docs/ref/#view.DecorationSet)). Can be passed to\n[`EditorState.toJSON`](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) and\n[`fromJSON`](https://codemirror.net/6/docs/ref/#state.EditorState^fromJSON) to serialize the fold\nstate.\n*/\nconst foldState = /*@__PURE__*/StateField.define({\n    create() {\n        return Decoration.none;\n    },\n    update(folded, tr) {\n        if (tr.isUserEvent(\"delete\"))\n            tr.changes.iterChangedRanges((fromA, toA) => folded = clearTouchedFolds(folded, fromA, toA));\n        folded = folded.map(tr.changes);\n        for (let e of tr.effects) {\n            if (e.is(foldEffect) && !foldExists(folded, e.value.from, e.value.to)) {\n                let { preparePlaceholder } = tr.state.facet(foldConfig);\n                let widget = !preparePlaceholder ? foldWidget :\n                    Decoration.replace({ widget: new PreparedFoldWidget(preparePlaceholder(tr.state, e.value)) });\n                folded = folded.update({ add: [widget.range(e.value.from, e.value.to)] });\n            }\n            else if (e.is(unfoldEffect)) {\n                folded = folded.update({ filter: (from, to) => e.value.from != from || e.value.to != to,\n                    filterFrom: e.value.from, filterTo: e.value.to });\n            }\n        }\n        // Clear folded ranges that cover the selection head\n        if (tr.selection)\n            folded = clearTouchedFolds(folded, tr.selection.main.head);\n        return folded;\n    },\n    provide: f => EditorView.decorations.from(f),\n    toJSON(folded, state) {\n        let ranges = [];\n        folded.between(0, state.doc.length, (from, to) => { ranges.push(from, to); });\n        return ranges;\n    },\n    fromJSON(value) {\n        if (!Array.isArray(value) || value.length % 2)\n            throw new RangeError(\"Invalid JSON for fold state\");\n        let ranges = [];\n        for (let i = 0; i < value.length;) {\n            let from = value[i++], to = value[i++];\n            if (typeof from != \"number\" || typeof to != \"number\")\n                throw new RangeError(\"Invalid JSON for fold state\");\n            ranges.push(foldWidget.range(from, to));\n        }\n        return Decoration.set(ranges, true);\n    }\n});\nfunction clearTouchedFolds(folded, from, to = from) {\n    let touched = false;\n    folded.between(from, to, (a, b) => { if (a < to && b > from)\n        touched = true; });\n    return !touched ? folded : folded.update({\n        filterFrom: from,\n        filterTo: to,\n        filter: (a, b) => a >= to || b <= from\n    });\n}\n/**\nGet a [range set](https://codemirror.net/6/docs/ref/#state.RangeSet) containing the folded ranges\nin the given state.\n*/\nfunction foldedRanges(state) {\n    return state.field(foldState, false) || RangeSet.empty;\n}\nfunction findFold(state, from, to) {\n    var _a;\n    let found = null;\n    (_a = state.field(foldState, false)) === null || _a === void 0 ? void 0 : _a.between(from, to, (from, to) => {\n        if (!found || found.from > from)\n            found = { from, to };\n    });\n    return found;\n}\nfunction foldExists(folded, from, to) {\n    let found = false;\n    folded.between(from, from, (a, b) => { if (a == from && b == to)\n        found = true; });\n    return found;\n}\nfunction maybeEnable(state, other) {\n    return state.field(foldState, false) ? other : other.concat(StateEffect.appendConfig.of(codeFolding()));\n}\n/**\nFold the lines that are selected, if possible.\n*/\nconst foldCode = view => {\n    for (let line of selectedLines(view)) {\n        let range = foldable(view.state, line.from, line.to);\n        if (range) {\n            view.dispatch({ effects: maybeEnable(view.state, [foldEffect.of(range), announceFold(view, range)]) });\n            return true;\n        }\n    }\n    return false;\n};\n/**\nUnfold folded ranges on selected lines.\n*/\nconst unfoldCode = view => {\n    if (!view.state.field(foldState, false))\n        return false;\n    let effects = [];\n    for (let line of selectedLines(view)) {\n        let folded = findFold(view.state, line.from, line.to);\n        if (folded)\n            effects.push(unfoldEffect.of(folded), announceFold(view, folded, false));\n    }\n    if (effects.length)\n        view.dispatch({ effects });\n    return effects.length > 0;\n};\nfunction announceFold(view, range, fold = true) {\n    let lineFrom = view.state.doc.lineAt(range.from).number, lineTo = view.state.doc.lineAt(range.to).number;\n    return EditorView.announce.of(`${view.state.phrase(fold ? \"Folded lines\" : \"Unfolded lines\")} ${lineFrom} ${view.state.phrase(\"to\")} ${lineTo}.`);\n}\n/**\nFold all top-level foldable ranges. Note that, in most cases,\nfolding information will depend on the [syntax\ntree](https://codemirror.net/6/docs/ref/#language.syntaxTree), and folding everything may not work\nreliably when the document hasn't been fully parsed (either\nbecause the editor state was only just initialized, or because the\ndocument is so big that the parser decided not to parse it\nentirely).\n*/\nconst foldAll = view => {\n    let { state } = view, effects = [];\n    for (let pos = 0; pos < state.doc.length;) {\n        let line = view.lineBlockAt(pos), range = foldable(state, line.from, line.to);\n        if (range)\n            effects.push(foldEffect.of(range));\n        pos = (range ? view.lineBlockAt(range.to) : line).to + 1;\n    }\n    if (effects.length)\n        view.dispatch({ effects: maybeEnable(view.state, effects) });\n    return !!effects.length;\n};\n/**\nUnfold all folded code.\n*/\nconst unfoldAll = view => {\n    let field = view.state.field(foldState, false);\n    if (!field || !field.size)\n        return false;\n    let effects = [];\n    field.between(0, view.state.doc.length, (from, to) => { effects.push(unfoldEffect.of({ from, to })); });\n    view.dispatch({ effects });\n    return true;\n};\n// Find the foldable region containing the given line, if one exists\nfunction foldableContainer(view, lineBlock) {\n    // Look backwards through line blocks until we find a foldable region that\n    // intersects with the line\n    for (let line = lineBlock;;) {\n        let foldableRegion = foldable(view.state, line.from, line.to);\n        if (foldableRegion && foldableRegion.to > lineBlock.from)\n            return foldableRegion;\n        if (!line.from)\n            return null;\n        line = view.lineBlockAt(line.from - 1);\n    }\n}\n/**\nToggle folding at cursors. Unfolds if there is an existing fold\nstarting in that line, tries to find a foldable range around it\notherwise.\n*/\nconst toggleFold = (view) => {\n    let effects = [];\n    for (let line of selectedLines(view)) {\n        let folded = findFold(view.state, line.from, line.to);\n        if (folded) {\n            effects.push(unfoldEffect.of(folded), announceFold(view, folded, false));\n        }\n        else {\n            let foldRange = foldableContainer(view, line);\n            if (foldRange)\n                effects.push(foldEffect.of(foldRange), announceFold(view, foldRange));\n        }\n    }\n    if (effects.length > 0)\n        view.dispatch({ effects: maybeEnable(view.state, effects) });\n    return !!effects.length;\n};\n/**\nDefault fold-related key bindings.\n\n - Ctrl-Shift-[ (Cmd-Alt-[ on macOS): [`foldCode`](https://codemirror.net/6/docs/ref/#language.foldCode).\n - Ctrl-Shift-] (Cmd-Alt-] on macOS): [`unfoldCode`](https://codemirror.net/6/docs/ref/#language.unfoldCode).\n - Ctrl-Alt-[: [`foldAll`](https://codemirror.net/6/docs/ref/#language.foldAll).\n - Ctrl-Alt-]: [`unfoldAll`](https://codemirror.net/6/docs/ref/#language.unfoldAll).\n*/\nconst foldKeymap = [\n    { key: \"Ctrl-Shift-[\", mac: \"Cmd-Alt-[\", run: foldCode },\n    { key: \"Ctrl-Shift-]\", mac: \"Cmd-Alt-]\", run: unfoldCode },\n    { key: \"Ctrl-Alt-[\", run: foldAll },\n    { key: \"Ctrl-Alt-]\", run: unfoldAll }\n];\nconst defaultConfig = {\n    placeholderDOM: null,\n    preparePlaceholder: null,\n    placeholderText: \"…\"\n};\nconst foldConfig = /*@__PURE__*/Facet.define({\n    combine(values) { return combineConfig(values, defaultConfig); }\n});\n/**\nCreate an extension that configures code folding.\n*/\nfunction codeFolding(config) {\n    let result = [foldState, baseTheme$1];\n    if (config)\n        result.push(foldConfig.of(config));\n    return result;\n}\nfunction widgetToDOM(view, prepared) {\n    let { state } = view, conf = state.facet(foldConfig);\n    let onclick = (event) => {\n        let line = view.lineBlockAt(view.posAtDOM(event.target));\n        let folded = findFold(view.state, line.from, line.to);\n        if (folded)\n            view.dispatch({ effects: unfoldEffect.of(folded) });\n        event.preventDefault();\n    };\n    if (conf.placeholderDOM)\n        return conf.placeholderDOM(view, onclick, prepared);\n    let element = document.createElement(\"span\");\n    element.textContent = conf.placeholderText;\n    element.setAttribute(\"aria-label\", state.phrase(\"folded code\"));\n    element.title = state.phrase(\"unfold\");\n    element.className = \"cm-foldPlaceholder\";\n    element.onclick = onclick;\n    return element;\n}\nconst foldWidget = /*@__PURE__*/Decoration.replace({ widget: /*@__PURE__*/new class extends WidgetType {\n        toDOM(view) { return widgetToDOM(view, null); }\n    } });\nclass PreparedFoldWidget extends WidgetType {\n    constructor(value) {\n        super();\n        this.value = value;\n    }\n    eq(other) { return this.value == other.value; }\n    toDOM(view) { return widgetToDOM(view, this.value); }\n}\nconst foldGutterDefaults = {\n    openText: \"⌄\",\n    closedText: \"›\",\n    markerDOM: null,\n    domEventHandlers: {},\n    foldingChanged: () => false\n};\nclass FoldMarker extends GutterMarker {\n    constructor(config, open) {\n        super();\n        this.config = config;\n        this.open = open;\n    }\n    eq(other) { return this.config == other.config && this.open == other.open; }\n    toDOM(view) {\n        if (this.config.markerDOM)\n            return this.config.markerDOM(this.open);\n        let span = document.createElement(\"span\");\n        span.textContent = this.open ? this.config.openText : this.config.closedText;\n        span.title = view.state.phrase(this.open ? \"Fold line\" : \"Unfold line\");\n        return span;\n    }\n}\n/**\nCreate an extension that registers a fold gutter, which shows a\nfold status indicator before foldable lines (which can be clicked\nto fold or unfold the line).\n*/\nfunction foldGutter(config = {}) {\n    let fullConfig = { ...foldGutterDefaults, ...config };\n    let canFold = new FoldMarker(fullConfig, true), canUnfold = new FoldMarker(fullConfig, false);\n    let markers = ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.from = view.viewport.from;\n            this.markers = this.buildMarkers(view);\n        }\n        update(update) {\n            if (update.docChanged || update.viewportChanged ||\n                update.startState.facet(language) != update.state.facet(language) ||\n                update.startState.field(foldState, false) != update.state.field(foldState, false) ||\n                syntaxTree(update.startState) != syntaxTree(update.state) ||\n                fullConfig.foldingChanged(update))\n                this.markers = this.buildMarkers(update.view);\n        }\n        buildMarkers(view) {\n            let builder = new RangeSetBuilder();\n            for (let line of view.viewportLineBlocks) {\n                let mark = findFold(view.state, line.from, line.to) ? canUnfold\n                    : foldable(view.state, line.from, line.to) ? canFold : null;\n                if (mark)\n                    builder.add(line.from, line.from, mark);\n            }\n            return builder.finish();\n        }\n    });\n    let { domEventHandlers } = fullConfig;\n    return [\n        markers,\n        gutter({\n            class: \"cm-foldGutter\",\n            markers(view) { var _a; return ((_a = view.plugin(markers)) === null || _a === void 0 ? void 0 : _a.markers) || RangeSet.empty; },\n            initialSpacer() {\n                return new FoldMarker(fullConfig, false);\n            },\n            domEventHandlers: {\n                ...domEventHandlers,\n                click: (view, line, event) => {\n                    if (domEventHandlers.click && domEventHandlers.click(view, line, event))\n                        return true;\n                    let folded = findFold(view.state, line.from, line.to);\n                    if (folded) {\n                        view.dispatch({ effects: unfoldEffect.of(folded) });\n                        return true;\n                    }\n                    let range = foldable(view.state, line.from, line.to);\n                    if (range) {\n                        view.dispatch({ effects: foldEffect.of(range) });\n                        return true;\n                    }\n                    return false;\n                }\n            }\n        }),\n        codeFolding()\n    ];\n}\nconst baseTheme$1 = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-foldPlaceholder\": {\n        backgroundColor: \"#eee\",\n        border: \"1px solid #ddd\",\n        color: \"#888\",\n        borderRadius: \".2em\",\n        margin: \"0 1px\",\n        padding: \"0 1px\",\n        cursor: \"pointer\"\n    },\n    \".cm-foldGutter span\": {\n        padding: \"0 1px\",\n        cursor: \"pointer\"\n    }\n});\n\n/**\nA highlight style associates CSS styles with highlighting\n[tags](https://lezer.codemirror.net/docs/ref#highlight.Tag).\n*/\nclass HighlightStyle {\n    constructor(\n    /**\n    The tag styles used to create this highlight style.\n    */\n    specs, options) {\n        this.specs = specs;\n        let modSpec;\n        function def(spec) {\n            let cls = StyleModule.newName();\n            (modSpec || (modSpec = Object.create(null)))[\".\" + cls] = spec;\n            return cls;\n        }\n        const all = typeof options.all == \"string\" ? options.all : options.all ? def(options.all) : undefined;\n        const scopeOpt = options.scope;\n        this.scope = scopeOpt instanceof Language ? (type) => type.prop(languageDataProp) == scopeOpt.data\n            : scopeOpt ? (type) => type == scopeOpt : undefined;\n        this.style = tagHighlighter(specs.map(style => ({\n            tag: style.tag,\n            class: style.class || def(Object.assign({}, style, { tag: null }))\n        })), {\n            all,\n        }).style;\n        this.module = modSpec ? new StyleModule(modSpec) : null;\n        this.themeType = options.themeType;\n    }\n    /**\n    Create a highlighter style that associates the given styles to\n    the given tags. The specs must be objects that hold a style tag\n    or array of tags in their `tag` property, and either a single\n    `class` property providing a static CSS class (for highlighter\n    that rely on external styling), or a\n    [`style-mod`](https://github.com/marijnh/style-mod#documentation)-style\n    set of CSS properties (which define the styling for those tags).\n    \n    The CSS rules created for a highlighter will be emitted in the\n    order of the spec's properties. That means that for elements that\n    have multiple tags associated with them, styles defined further\n    down in the list will have a higher CSS precedence than styles\n    defined earlier.\n    */\n    static define(specs, options) {\n        return new HighlightStyle(specs, options || {});\n    }\n}\nconst highlighterFacet = /*@__PURE__*/Facet.define();\nconst fallbackHighlighter = /*@__PURE__*/Facet.define({\n    combine(values) { return values.length ? [values[0]] : null; }\n});\nfunction getHighlighters(state) {\n    let main = state.facet(highlighterFacet);\n    return main.length ? main : state.facet(fallbackHighlighter);\n}\n/**\nWrap a highlighter in an editor extension that uses it to apply\nsyntax highlighting to the editor content.\n\nWhen multiple (non-fallback) styles are provided, the styling\napplied is the union of the classes they emit.\n*/\nfunction syntaxHighlighting(highlighter, options) {\n    let ext = [treeHighlighter], themeType;\n    if (highlighter instanceof HighlightStyle) {\n        if (highlighter.module)\n            ext.push(EditorView.styleModule.of(highlighter.module));\n        themeType = highlighter.themeType;\n    }\n    if (options === null || options === void 0 ? void 0 : options.fallback)\n        ext.push(fallbackHighlighter.of(highlighter));\n    else if (themeType)\n        ext.push(highlighterFacet.computeN([EditorView.darkTheme], state => {\n            return state.facet(EditorView.darkTheme) == (themeType == \"dark\") ? [highlighter] : [];\n        }));\n    else\n        ext.push(highlighterFacet.of(highlighter));\n    return ext;\n}\n/**\nReturns the CSS classes (if any) that the highlighters active in\nthe state would assign to the given style\n[tags](https://lezer.codemirror.net/docs/ref#highlight.Tag) and\n(optional) language\n[scope](https://codemirror.net/6/docs/ref/#language.HighlightStyle^define^options.scope).\n*/\nfunction highlightingFor(state, tags, scope) {\n    let highlighters = getHighlighters(state);\n    let result = null;\n    if (highlighters)\n        for (let highlighter of highlighters) {\n            if (!highlighter.scope || scope && highlighter.scope(scope)) {\n                let cls = highlighter.style(tags);\n                if (cls)\n                    result = result ? result + \" \" + cls : cls;\n            }\n        }\n    return result;\n}\nclass TreeHighlighter {\n    constructor(view) {\n        this.markCache = Object.create(null);\n        this.tree = syntaxTree(view.state);\n        this.decorations = this.buildDeco(view, getHighlighters(view.state));\n        this.decoratedTo = view.viewport.to;\n    }\n    update(update) {\n        let tree = syntaxTree(update.state), highlighters = getHighlighters(update.state);\n        let styleChange = highlighters != getHighlighters(update.startState);\n        let { viewport } = update.view, decoratedToMapped = update.changes.mapPos(this.decoratedTo, 1);\n        if (tree.length < viewport.to && !styleChange && tree.type == this.tree.type && decoratedToMapped >= viewport.to) {\n            this.decorations = this.decorations.map(update.changes);\n            this.decoratedTo = decoratedToMapped;\n        }\n        else if (tree != this.tree || update.viewportChanged || styleChange) {\n            this.tree = tree;\n            this.decorations = this.buildDeco(update.view, highlighters);\n            this.decoratedTo = viewport.to;\n        }\n    }\n    buildDeco(view, highlighters) {\n        if (!highlighters || !this.tree.length)\n            return Decoration.none;\n        let builder = new RangeSetBuilder();\n        for (let { from, to } of view.visibleRanges) {\n            highlightTree(this.tree, highlighters, (from, to, style) => {\n                builder.add(from, to, this.markCache[style] || (this.markCache[style] = Decoration.mark({ class: style })));\n            }, from, to);\n        }\n        return builder.finish();\n    }\n}\nconst treeHighlighter = /*@__PURE__*/Prec.high(/*@__PURE__*/ViewPlugin.fromClass(TreeHighlighter, {\n    decorations: v => v.decorations\n}));\n/**\nA default highlight style (works well with light themes).\n*/\nconst defaultHighlightStyle = /*@__PURE__*/HighlightStyle.define([\n    { tag: tags.meta,\n        color: \"#404740\" },\n    { tag: tags.link,\n        textDecoration: \"underline\" },\n    { tag: tags.heading,\n        textDecoration: \"underline\",\n        fontWeight: \"bold\" },\n    { tag: tags.emphasis,\n        fontStyle: \"italic\" },\n    { tag: tags.strong,\n        fontWeight: \"bold\" },\n    { tag: tags.strikethrough,\n        textDecoration: \"line-through\" },\n    { tag: tags.keyword,\n        color: \"#708\" },\n    { tag: [tags.atom, tags.bool, tags.url, tags.contentSeparator, tags.labelName],\n        color: \"#219\" },\n    { tag: [tags.literal, tags.inserted],\n        color: \"#164\" },\n    { tag: [tags.string, tags.deleted],\n        color: \"#a11\" },\n    { tag: [tags.regexp, tags.escape, /*@__PURE__*/tags.special(tags.string)],\n        color: \"#e40\" },\n    { tag: /*@__PURE__*/tags.definition(tags.variableName),\n        color: \"#00f\" },\n    { tag: /*@__PURE__*/tags.local(tags.variableName),\n        color: \"#30a\" },\n    { tag: [tags.typeName, tags.namespace],\n        color: \"#085\" },\n    { tag: tags.className,\n        color: \"#167\" },\n    { tag: [/*@__PURE__*/tags.special(tags.variableName), tags.macroName],\n        color: \"#256\" },\n    { tag: /*@__PURE__*/tags.definition(tags.propertyName),\n        color: \"#00c\" },\n    { tag: tags.comment,\n        color: \"#940\" },\n    { tag: tags.invalid,\n        color: \"#f00\" }\n]);\n\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n    \"&.cm-focused .cm-matchingBracket\": { backgroundColor: \"#328c8252\" },\n    \"&.cm-focused .cm-nonmatchingBracket\": { backgroundColor: \"#bb555544\" }\n});\nconst DefaultScanDist = 10000, DefaultBrackets = \"()[]{}\";\nconst bracketMatchingConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            afterCursor: true,\n            brackets: DefaultBrackets,\n            maxScanDistance: DefaultScanDist,\n            renderMatch: defaultRenderMatch\n        });\n    }\n});\nconst matchingMark = /*@__PURE__*/Decoration.mark({ class: \"cm-matchingBracket\" }), nonmatchingMark = /*@__PURE__*/Decoration.mark({ class: \"cm-nonmatchingBracket\" });\nfunction defaultRenderMatch(match) {\n    let decorations = [];\n    let mark = match.matched ? matchingMark : nonmatchingMark;\n    decorations.push(mark.range(match.start.from, match.start.to));\n    if (match.end)\n        decorations.push(mark.range(match.end.from, match.end.to));\n    return decorations;\n}\nfunction bracketDeco(state) {\n    let decorations = [];\n    let config = state.facet(bracketMatchingConfig);\n    for (let range of state.selection.ranges) {\n        if (!range.empty)\n            continue;\n        let match = matchBrackets(state, range.head, -1, config)\n            || (range.head > 0 && matchBrackets(state, range.head - 1, 1, config))\n            || (config.afterCursor &&\n                (matchBrackets(state, range.head, 1, config) ||\n                    (range.head < state.doc.length && matchBrackets(state, range.head + 1, -1, config))));\n        if (match)\n            decorations = decorations.concat(config.renderMatch(match, state));\n    }\n    return Decoration.set(decorations, true);\n}\nconst bracketMatcher = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.paused = false;\n        this.decorations = bracketDeco(view.state);\n    }\n    update(update) {\n        if (update.docChanged || update.selectionSet || this.paused) {\n            if (update.view.composing) {\n                this.decorations = this.decorations.map(update.changes);\n                this.paused = true;\n            }\n            else {\n                this.decorations = bracketDeco(update.state);\n                this.paused = false;\n            }\n        }\n    }\n}, {\n    decorations: v => v.decorations\n});\nconst bracketMatchingUnique = [\n    bracketMatcher,\n    baseTheme\n];\n/**\nCreate an extension that enables bracket matching. Whenever the\ncursor is next to a bracket, that bracket and the one it matches\nare highlighted. Or, when no matching bracket is found, another\nhighlighting style is used to indicate this.\n*/\nfunction bracketMatching(config = {}) {\n    return [bracketMatchingConfig.of(config), bracketMatchingUnique];\n}\n/**\nWhen larger syntax nodes, such as HTML tags, are marked as\nopening/closing, it can be a bit messy to treat the whole node as\na matchable bracket. This node prop allows you to define, for such\na node, a ‘handle’—the part of the node that is highlighted, and\nthat the cursor must be on to activate highlighting in the first\nplace.\n*/\nconst bracketMatchingHandle = /*@__PURE__*/new NodeProp();\nfunction matchingNodes(node, dir, brackets) {\n    let byProp = node.prop(dir < 0 ? NodeProp.openedBy : NodeProp.closedBy);\n    if (byProp)\n        return byProp;\n    if (node.name.length == 1) {\n        let index = brackets.indexOf(node.name);\n        if (index > -1 && index % 2 == (dir < 0 ? 1 : 0))\n            return [brackets[index + dir]];\n    }\n    return null;\n}\nfunction findHandle(node) {\n    let hasHandle = node.type.prop(bracketMatchingHandle);\n    return hasHandle ? hasHandle(node.node) : node;\n}\n/**\nFind the matching bracket for the token at `pos`, scanning\ndirection `dir`. Only the `brackets` and `maxScanDistance`\nproperties are used from `config`, if given. Returns null if no\nbracket was found at `pos`, or a match result otherwise.\n*/\nfunction matchBrackets(state, pos, dir, config = {}) {\n    let maxScanDistance = config.maxScanDistance || DefaultScanDist, brackets = config.brackets || DefaultBrackets;\n    let tree = syntaxTree(state), node = tree.resolveInner(pos, dir);\n    for (let cur = node; cur; cur = cur.parent) {\n        let matches = matchingNodes(cur.type, dir, brackets);\n        if (matches && cur.from < cur.to) {\n            let handle = findHandle(cur);\n            if (handle && (dir > 0 ? pos >= handle.from && pos < handle.to : pos > handle.from && pos <= handle.to))\n                return matchMarkedBrackets(state, pos, dir, cur, handle, matches, brackets);\n        }\n    }\n    return matchPlainBrackets(state, pos, dir, tree, node.type, maxScanDistance, brackets);\n}\nfunction matchMarkedBrackets(_state, _pos, dir, token, handle, matching, brackets) {\n    let parent = token.parent, firstToken = { from: handle.from, to: handle.to };\n    let depth = 0, cursor = parent === null || parent === void 0 ? void 0 : parent.cursor();\n    if (cursor && (dir < 0 ? cursor.childBefore(token.from) : cursor.childAfter(token.to)))\n        do {\n            if (dir < 0 ? cursor.to <= token.from : cursor.from >= token.to) {\n                if (depth == 0 && matching.indexOf(cursor.type.name) > -1 && cursor.from < cursor.to) {\n                    let endHandle = findHandle(cursor);\n                    return { start: firstToken, end: endHandle ? { from: endHandle.from, to: endHandle.to } : undefined, matched: true };\n                }\n                else if (matchingNodes(cursor.type, dir, brackets)) {\n                    depth++;\n                }\n                else if (matchingNodes(cursor.type, -dir, brackets)) {\n                    if (depth == 0) {\n                        let endHandle = findHandle(cursor);\n                        return {\n                            start: firstToken,\n                            end: endHandle && endHandle.from < endHandle.to ? { from: endHandle.from, to: endHandle.to } : undefined,\n                            matched: false\n                        };\n                    }\n                    depth--;\n                }\n            }\n        } while (dir < 0 ? cursor.prevSibling() : cursor.nextSibling());\n    return { start: firstToken, matched: false };\n}\nfunction matchPlainBrackets(state, pos, dir, tree, tokenType, maxScanDistance, brackets) {\n    if (dir < 0 ? !pos : pos == state.doc.length)\n        return null;\n    let startCh = dir < 0 ? state.sliceDoc(pos - 1, pos) : state.sliceDoc(pos, pos + 1);\n    let bracket = brackets.indexOf(startCh);\n    if (bracket < 0 || (bracket % 2 == 0) != (dir > 0))\n        return null;\n    let startToken = { from: dir < 0 ? pos - 1 : pos, to: dir > 0 ? pos + 1 : pos };\n    let iter = state.doc.iterRange(pos, dir > 0 ? state.doc.length : 0), depth = 0;\n    for (let distance = 0; !(iter.next()).done && distance <= maxScanDistance;) {\n        let text = iter.value;\n        if (dir < 0)\n            distance += text.length;\n        let basePos = pos + distance * dir;\n        for (let pos = dir > 0 ? 0 : text.length - 1, end = dir > 0 ? text.length : -1; pos != end; pos += dir) {\n            let found = brackets.indexOf(text[pos]);\n            if (found < 0 || tree.resolveInner(basePos + pos, 1).type != tokenType)\n                continue;\n            if ((found % 2 == 0) == (dir > 0)) {\n                depth++;\n            }\n            else if (depth == 1) { // Closing\n                return { start: startToken, end: { from: basePos + pos, to: basePos + pos + 1 }, matched: (found >> 1) == (bracket >> 1) };\n            }\n            else {\n                depth--;\n            }\n        }\n        if (dir > 0)\n            distance += text.length;\n    }\n    return iter.done ? { start: startToken, matched: false } : null;\n}\n\n// Counts the column offset in a string, taking tabs into account.\n// Used mostly to find indentation.\nfunction countCol(string, end, tabSize, startIndex = 0, startValue = 0) {\n    if (end == null) {\n        end = string.search(/[^\\s\\u00a0]/);\n        if (end == -1)\n            end = string.length;\n    }\n    let n = startValue;\n    for (let i = startIndex; i < end; i++) {\n        if (string.charCodeAt(i) == 9)\n            n += tabSize - (n % tabSize);\n        else\n            n++;\n    }\n    return n;\n}\n/**\nEncapsulates a single line of input. Given to stream syntax code,\nwhich uses it to tokenize the content.\n*/\nclass StringStream {\n    /**\n    Create a stream.\n    */\n    constructor(\n    /**\n    The line.\n    */\n    string, tabSize, \n    /**\n    The current indent unit size.\n    */\n    indentUnit, overrideIndent) {\n        this.string = string;\n        this.tabSize = tabSize;\n        this.indentUnit = indentUnit;\n        this.overrideIndent = overrideIndent;\n        /**\n        The current position on the line.\n        */\n        this.pos = 0;\n        /**\n        The start position of the current token.\n        */\n        this.start = 0;\n        this.lastColumnPos = 0;\n        this.lastColumnValue = 0;\n    }\n    /**\n    True if we are at the end of the line.\n    */\n    eol() { return this.pos >= this.string.length; }\n    /**\n    True if we are at the start of the line.\n    */\n    sol() { return this.pos == 0; }\n    /**\n    Get the next code unit after the current position, or undefined\n    if we're at the end of the line.\n    */\n    peek() { return this.string.charAt(this.pos) || undefined; }\n    /**\n    Read the next code unit and advance `this.pos`.\n    */\n    next() {\n        if (this.pos < this.string.length)\n            return this.string.charAt(this.pos++);\n    }\n    /**\n    Match the next character against the given string, regular\n    expression, or predicate. Consume and return it if it matches.\n    */\n    eat(match) {\n        let ch = this.string.charAt(this.pos);\n        let ok;\n        if (typeof match == \"string\")\n            ok = ch == match;\n        else\n            ok = ch && (match instanceof RegExp ? match.test(ch) : match(ch));\n        if (ok) {\n            ++this.pos;\n            return ch;\n        }\n    }\n    /**\n    Continue matching characters that match the given string,\n    regular expression, or predicate function. Return true if any\n    characters were consumed.\n    */\n    eatWhile(match) {\n        let start = this.pos;\n        while (this.eat(match)) { }\n        return this.pos > start;\n    }\n    /**\n    Consume whitespace ahead of `this.pos`. Return true if any was\n    found.\n    */\n    eatSpace() {\n        let start = this.pos;\n        while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos)))\n            ++this.pos;\n        return this.pos > start;\n    }\n    /**\n    Move to the end of the line.\n    */\n    skipToEnd() { this.pos = this.string.length; }\n    /**\n    Move to directly before the given character, if found on the\n    current line.\n    */\n    skipTo(ch) {\n        let found = this.string.indexOf(ch, this.pos);\n        if (found > -1) {\n            this.pos = found;\n            return true;\n        }\n    }\n    /**\n    Move back `n` characters.\n    */\n    backUp(n) { this.pos -= n; }\n    /**\n    Get the column position at `this.pos`.\n    */\n    column() {\n        if (this.lastColumnPos < this.start) {\n            this.lastColumnValue = countCol(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n            this.lastColumnPos = this.start;\n        }\n        return this.lastColumnValue;\n    }\n    /**\n    Get the indentation column of the current line.\n    */\n    indentation() {\n        var _a;\n        return (_a = this.overrideIndent) !== null && _a !== void 0 ? _a : countCol(this.string, null, this.tabSize);\n    }\n    /**\n    Match the input against the given string or regular expression\n    (which should start with a `^`). Return true or the regexp match\n    if it matches.\n    \n    Unless `consume` is set to `false`, this will move `this.pos`\n    past the matched text.\n    \n    When matching a string `caseInsensitive` can be set to true to\n    make the match case-insensitive.\n    */\n    match(pattern, consume, caseInsensitive) {\n        if (typeof pattern == \"string\") {\n            let cased = (str) => caseInsensitive ? str.toLowerCase() : str;\n            let substr = this.string.substr(this.pos, pattern.length);\n            if (cased(substr) == cased(pattern)) {\n                if (consume !== false)\n                    this.pos += pattern.length;\n                return true;\n            }\n            else\n                return null;\n        }\n        else {\n            let match = this.string.slice(this.pos).match(pattern);\n            if (match && match.index > 0)\n                return null;\n            if (match && consume !== false)\n                this.pos += match[0].length;\n            return match;\n        }\n    }\n    /**\n    Get the current token.\n    */\n    current() { return this.string.slice(this.start, this.pos); }\n}\n\nfunction fullParser(spec) {\n    return {\n        name: spec.name || \"\",\n        token: spec.token,\n        blankLine: spec.blankLine || (() => { }),\n        startState: spec.startState || (() => true),\n        copyState: spec.copyState || defaultCopyState,\n        indent: spec.indent || (() => null),\n        languageData: spec.languageData || {},\n        tokenTable: spec.tokenTable || noTokens,\n        mergeTokens: spec.mergeTokens !== false\n    };\n}\nfunction defaultCopyState(state) {\n    if (typeof state != \"object\")\n        return state;\n    let newState = {};\n    for (let prop in state) {\n        let val = state[prop];\n        newState[prop] = (val instanceof Array ? val.slice() : val);\n    }\n    return newState;\n}\nconst IndentedFrom = /*@__PURE__*/new WeakMap();\n/**\nA [language](https://codemirror.net/6/docs/ref/#language.Language) class based on a CodeMirror\n5-style [streaming parser](https://codemirror.net/6/docs/ref/#language.StreamParser).\n*/\nclass StreamLanguage extends Language {\n    constructor(parser) {\n        let data = defineLanguageFacet(parser.languageData);\n        let p = fullParser(parser), self;\n        let impl = new class extends Parser {\n            createParse(input, fragments, ranges) {\n                return new Parse(self, input, fragments, ranges);\n            }\n        };\n        super(data, impl, [], parser.name);\n        this.topNode = docID(data, this);\n        self = this;\n        this.streamParser = p;\n        this.stateAfter = new NodeProp({ perNode: true });\n        this.tokenTable = parser.tokenTable ? new TokenTable(p.tokenTable) : defaultTokenTable;\n    }\n    /**\n    Define a stream language.\n    */\n    static define(spec) { return new StreamLanguage(spec); }\n    /**\n    @internal\n    */\n    getIndent(cx) {\n        let from = undefined;\n        let { overrideIndentation } = cx.options;\n        if (overrideIndentation) {\n            from = IndentedFrom.get(cx.state);\n            if (from != null && from < cx.pos - 1e4)\n                from = undefined;\n        }\n        let start = findState(this, cx.node.tree, cx.node.from, cx.node.from, from !== null && from !== void 0 ? from : cx.pos), statePos, state;\n        if (start) {\n            state = start.state;\n            statePos = start.pos + 1;\n        }\n        else {\n            state = this.streamParser.startState(cx.unit);\n            statePos = cx.node.from;\n        }\n        if (cx.pos - statePos > 10000 /* C.MaxIndentScanDist */)\n            return null;\n        while (statePos < cx.pos) {\n            let line = cx.state.doc.lineAt(statePos), end = Math.min(cx.pos, line.to);\n            if (line.length) {\n                let indentation = overrideIndentation ? overrideIndentation(line.from) : -1;\n                let stream = new StringStream(line.text, cx.state.tabSize, cx.unit, indentation < 0 ? undefined : indentation);\n                while (stream.pos < end - line.from)\n                    readToken(this.streamParser.token, stream, state);\n            }\n            else {\n                this.streamParser.blankLine(state, cx.unit);\n            }\n            if (end == cx.pos)\n                break;\n            statePos = line.to + 1;\n        }\n        let line = cx.lineAt(cx.pos);\n        if (overrideIndentation && from == null)\n            IndentedFrom.set(cx.state, line.from);\n        return this.streamParser.indent(state, /^\\s*(.*)/.exec(line.text)[1], cx);\n    }\n    get allowsNesting() { return false; }\n}\nfunction findState(lang, tree, off, startPos, before) {\n    let state = off >= startPos && off + tree.length <= before && tree.prop(lang.stateAfter);\n    if (state)\n        return { state: lang.streamParser.copyState(state), pos: off + tree.length };\n    for (let i = tree.children.length - 1; i >= 0; i--) {\n        let child = tree.children[i], pos = off + tree.positions[i];\n        let found = child instanceof Tree && pos < before && findState(lang, child, pos, startPos, before);\n        if (found)\n            return found;\n    }\n    return null;\n}\nfunction cutTree(lang, tree, from, to, inside) {\n    if (inside && from <= 0 && to >= tree.length)\n        return tree;\n    if (!inside && from == 0 && tree.type == lang.topNode)\n        inside = true;\n    for (let i = tree.children.length - 1; i >= 0; i--) {\n        let pos = tree.positions[i], child = tree.children[i], inner;\n        if (pos < to && child instanceof Tree) {\n            if (!(inner = cutTree(lang, child, from - pos, to - pos, inside)))\n                break;\n            return !inside ? inner\n                : new Tree(tree.type, tree.children.slice(0, i).concat(inner), tree.positions.slice(0, i + 1), pos + inner.length);\n        }\n    }\n    return null;\n}\nfunction findStartInFragments(lang, fragments, startPos, endPos, editorState) {\n    for (let f of fragments) {\n        let from = f.from + (f.openStart ? 25 : 0), to = f.to - (f.openEnd ? 25 : 0);\n        let found = from <= startPos && to > startPos && findState(lang, f.tree, 0 - f.offset, startPos, to), tree;\n        if (found && found.pos <= endPos && (tree = cutTree(lang, f.tree, startPos + f.offset, found.pos + f.offset, false)))\n            return { state: found.state, tree };\n    }\n    return { state: lang.streamParser.startState(editorState ? getIndentUnit(editorState) : 4), tree: Tree.empty };\n}\nclass Parse {\n    constructor(lang, input, fragments, ranges) {\n        this.lang = lang;\n        this.input = input;\n        this.fragments = fragments;\n        this.ranges = ranges;\n        this.stoppedAt = null;\n        this.chunks = [];\n        this.chunkPos = [];\n        this.chunk = [];\n        this.chunkReused = undefined;\n        this.rangeIndex = 0;\n        this.to = ranges[ranges.length - 1].to;\n        let context = ParseContext.get(), from = ranges[0].from;\n        let { state, tree } = findStartInFragments(lang, fragments, from, this.to, context === null || context === void 0 ? void 0 : context.state);\n        this.state = state;\n        this.parsedPos = this.chunkStart = from + tree.length;\n        for (let i = 0; i < tree.children.length; i++) {\n            this.chunks.push(tree.children[i]);\n            this.chunkPos.push(tree.positions[i]);\n        }\n        if (context && this.parsedPos < context.viewport.from - 100000 /* C.MaxDistanceBeforeViewport */ &&\n            ranges.some(r => r.from <= context.viewport.from && r.to >= context.viewport.from)) {\n            this.state = this.lang.streamParser.startState(getIndentUnit(context.state));\n            context.skipUntilInView(this.parsedPos, context.viewport.from);\n            this.parsedPos = context.viewport.from;\n        }\n        this.moveRangeIndex();\n    }\n    advance() {\n        let context = ParseContext.get();\n        let parseEnd = this.stoppedAt == null ? this.to : Math.min(this.to, this.stoppedAt);\n        let end = Math.min(parseEnd, this.chunkStart + 512 /* C.ChunkSize */);\n        if (context)\n            end = Math.min(end, context.viewport.to);\n        while (this.parsedPos < end)\n            this.parseLine(context);\n        if (this.chunkStart < this.parsedPos)\n            this.finishChunk();\n        if (this.parsedPos >= parseEnd)\n            return this.finish();\n        if (context && this.parsedPos >= context.viewport.to) {\n            context.skipUntilInView(this.parsedPos, parseEnd);\n            return this.finish();\n        }\n        return null;\n    }\n    stopAt(pos) {\n        this.stoppedAt = pos;\n    }\n    lineAfter(pos) {\n        let chunk = this.input.chunk(pos);\n        if (!this.input.lineChunks) {\n            let eol = chunk.indexOf(\"\\n\");\n            if (eol > -1)\n                chunk = chunk.slice(0, eol);\n        }\n        else if (chunk == \"\\n\") {\n            chunk = \"\";\n        }\n        return pos + chunk.length <= this.to ? chunk : chunk.slice(0, this.to - pos);\n    }\n    nextLine() {\n        let from = this.parsedPos, line = this.lineAfter(from), end = from + line.length;\n        for (let index = this.rangeIndex;;) {\n            let rangeEnd = this.ranges[index].to;\n            if (rangeEnd >= end)\n                break;\n            line = line.slice(0, rangeEnd - (end - line.length));\n            index++;\n            if (index == this.ranges.length)\n                break;\n            let rangeStart = this.ranges[index].from;\n            let after = this.lineAfter(rangeStart);\n            line += after;\n            end = rangeStart + after.length;\n        }\n        return { line, end };\n    }\n    skipGapsTo(pos, offset, side) {\n        for (;;) {\n            let end = this.ranges[this.rangeIndex].to, offPos = pos + offset;\n            if (side > 0 ? end > offPos : end >= offPos)\n                break;\n            let start = this.ranges[++this.rangeIndex].from;\n            offset += start - end;\n        }\n        return offset;\n    }\n    moveRangeIndex() {\n        while (this.ranges[this.rangeIndex].to < this.parsedPos)\n            this.rangeIndex++;\n    }\n    emitToken(id, from, to, offset) {\n        let size = 4;\n        if (this.ranges.length > 1) {\n            offset = this.skipGapsTo(from, offset, 1);\n            from += offset;\n            let len0 = this.chunk.length;\n            offset = this.skipGapsTo(to, offset, -1);\n            to += offset;\n            size += this.chunk.length - len0;\n        }\n        let last = this.chunk.length - 4;\n        if (this.lang.streamParser.mergeTokens && size == 4 && last >= 0 &&\n            this.chunk[last] == id && this.chunk[last + 2] == from)\n            this.chunk[last + 2] = to;\n        else\n            this.chunk.push(id, from, to, size);\n        return offset;\n    }\n    parseLine(context) {\n        let { line, end } = this.nextLine(), offset = 0, { streamParser } = this.lang;\n        let stream = new StringStream(line, context ? context.state.tabSize : 4, context ? getIndentUnit(context.state) : 2);\n        if (stream.eol()) {\n            streamParser.blankLine(this.state, stream.indentUnit);\n        }\n        else {\n            while (!stream.eol()) {\n                let token = readToken(streamParser.token, stream, this.state);\n                if (token)\n                    offset = this.emitToken(this.lang.tokenTable.resolve(token), this.parsedPos + stream.start, this.parsedPos + stream.pos, offset);\n                if (stream.start > 10000 /* C.MaxLineLength */)\n                    break;\n            }\n        }\n        this.parsedPos = end;\n        this.moveRangeIndex();\n        if (this.parsedPos < this.to)\n            this.parsedPos++;\n    }\n    finishChunk() {\n        let tree = Tree.build({\n            buffer: this.chunk,\n            start: this.chunkStart,\n            length: this.parsedPos - this.chunkStart,\n            nodeSet,\n            topID: 0,\n            maxBufferLength: 512 /* C.ChunkSize */,\n            reused: this.chunkReused\n        });\n        tree = new Tree(tree.type, tree.children, tree.positions, tree.length, [[this.lang.stateAfter, this.lang.streamParser.copyState(this.state)]]);\n        this.chunks.push(tree);\n        this.chunkPos.push(this.chunkStart - this.ranges[0].from);\n        this.chunk = [];\n        this.chunkReused = undefined;\n        this.chunkStart = this.parsedPos;\n    }\n    finish() {\n        return new Tree(this.lang.topNode, this.chunks, this.chunkPos, this.parsedPos - this.ranges[0].from).balance();\n    }\n}\nfunction readToken(token, stream, state) {\n    stream.start = stream.pos;\n    for (let i = 0; i < 10; i++) {\n        let result = token(stream, state);\n        if (stream.pos > stream.start)\n            return result;\n    }\n    throw new Error(\"Stream parser failed to advance stream.\");\n}\nconst noTokens = /*@__PURE__*/Object.create(null);\nconst typeArray = [NodeType.none];\nconst nodeSet = /*@__PURE__*/new NodeSet(typeArray);\nconst warned = [];\n// Cache of node types by name and tags\nconst byTag = /*@__PURE__*/Object.create(null);\nconst defaultTable = /*@__PURE__*/Object.create(null);\nfor (let [legacyName, name] of [\n    [\"variable\", \"variableName\"],\n    [\"variable-2\", \"variableName.special\"],\n    [\"string-2\", \"string.special\"],\n    [\"def\", \"variableName.definition\"],\n    [\"tag\", \"tagName\"],\n    [\"attribute\", \"attributeName\"],\n    [\"type\", \"typeName\"],\n    [\"builtin\", \"variableName.standard\"],\n    [\"qualifier\", \"modifier\"],\n    [\"error\", \"invalid\"],\n    [\"header\", \"heading\"],\n    [\"property\", \"propertyName\"]\n])\n    defaultTable[legacyName] = /*@__PURE__*/createTokenType(noTokens, name);\nclass TokenTable {\n    constructor(extra) {\n        this.extra = extra;\n        this.table = Object.assign(Object.create(null), defaultTable);\n    }\n    resolve(tag) {\n        return !tag ? 0 : this.table[tag] || (this.table[tag] = createTokenType(this.extra, tag));\n    }\n}\nconst defaultTokenTable = /*@__PURE__*/new TokenTable(noTokens);\nfunction warnForPart(part, msg) {\n    if (warned.indexOf(part) > -1)\n        return;\n    warned.push(part);\n    console.warn(msg);\n}\nfunction createTokenType(extra, tagStr) {\n    let tags$1 = [];\n    for (let name of tagStr.split(\" \")) {\n        let found = [];\n        for (let part of name.split(\".\")) {\n            let value = (extra[part] || tags[part]);\n            if (!value) {\n                warnForPart(part, `Unknown highlighting tag ${part}`);\n            }\n            else if (typeof value == \"function\") {\n                if (!found.length)\n                    warnForPart(part, `Modifier ${part} used at start of tag`);\n                else\n                    found = found.map(value);\n            }\n            else {\n                if (found.length)\n                    warnForPart(part, `Tag ${part} used as modifier`);\n                else\n                    found = Array.isArray(value) ? value : [value];\n            }\n        }\n        for (let tag of found)\n            tags$1.push(tag);\n    }\n    if (!tags$1.length)\n        return 0;\n    let name = tagStr.replace(/ /g, \"_\"), key = name + \" \" + tags$1.map(t => t.id);\n    let known = byTag[key];\n    if (known)\n        return known.id;\n    let type = byTag[key] = NodeType.define({\n        id: typeArray.length,\n        name,\n        props: [styleTags({ [name]: tags$1 })]\n    });\n    typeArray.push(type);\n    return type.id;\n}\nfunction docID(data, lang) {\n    let type = NodeType.define({ id: typeArray.length, name: \"Document\", props: [\n            languageDataProp.add(() => data),\n            indentNodeProp.add(() => cx => lang.getIndent(cx))\n        ], top: true });\n    typeArray.push(type);\n    return type;\n}\n\nfunction buildForLine(line) {\n    return line.length <= 4096 && /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\ufb50-\\ufdff]/.test(line);\n}\nfunction textHasRTL(text) {\n    for (let i = text.iter(); !i.next().done;)\n        if (buildForLine(i.value))\n            return true;\n    return false;\n}\nfunction changeAddsRTL(change) {\n    let added = false;\n    change.iterChanges((fA, tA, fB, tB, ins) => {\n        if (!added && textHasRTL(ins))\n            added = true;\n    });\n    return added;\n}\nconst alwaysIsolate = /*@__PURE__*/Facet.define({ combine: values => values.some(x => x) });\n/**\nMake sure nodes\n[marked](https://lezer.codemirror.net/docs/ref/#common.NodeProp^isolate)\nas isolating for bidirectional text are rendered in a way that\nisolates them from the surrounding text.\n*/\nfunction bidiIsolates(options = {}) {\n    let extensions = [isolateMarks];\n    if (options.alwaysIsolate)\n        extensions.push(alwaysIsolate.of(true));\n    return extensions;\n}\nconst isolateMarks = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.always = view.state.facet(alwaysIsolate) ||\n            view.textDirection != Direction.LTR ||\n            view.state.facet(EditorView.perLineTextDirection);\n        this.hasRTL = !this.always && textHasRTL(view.state.doc);\n        this.tree = syntaxTree(view.state);\n        this.decorations = this.always || this.hasRTL ? buildDeco(view, this.tree, this.always) : Decoration.none;\n    }\n    update(update) {\n        let always = update.state.facet(alwaysIsolate) ||\n            update.view.textDirection != Direction.LTR ||\n            update.state.facet(EditorView.perLineTextDirection);\n        if (!always && !this.hasRTL && changeAddsRTL(update.changes))\n            this.hasRTL = true;\n        if (!always && !this.hasRTL)\n            return;\n        let tree = syntaxTree(update.state);\n        if (always != this.always || tree != this.tree || update.docChanged || update.viewportChanged) {\n            this.tree = tree;\n            this.always = always;\n            this.decorations = buildDeco(update.view, tree, always);\n        }\n    }\n}, {\n    provide: plugin => {\n        function access(view) {\n            var _a, _b;\n            return (_b = (_a = view.plugin(plugin)) === null || _a === void 0 ? void 0 : _a.decorations) !== null && _b !== void 0 ? _b : Decoration.none;\n        }\n        return [EditorView.outerDecorations.of(access),\n            Prec.lowest(EditorView.bidiIsolatedRanges.of(access))];\n    }\n});\nfunction buildDeco(view, tree, always) {\n    let deco = new RangeSetBuilder();\n    let ranges = view.visibleRanges;\n    if (!always)\n        ranges = clipRTLLines(ranges, view.state.doc);\n    for (let { from, to } of ranges) {\n        tree.iterate({\n            enter: node => {\n                let iso = node.type.prop(NodeProp.isolate);\n                if (iso)\n                    deco.add(node.from, node.to, marks[iso]);\n            },\n            from, to\n        });\n    }\n    return deco.finish();\n}\nfunction clipRTLLines(ranges, doc) {\n    let cur = doc.iter(), pos = 0, result = [], last = null;\n    for (let { from, to } of ranges) {\n        if (last && last.to > from) {\n            from = last.to;\n            if (from >= to)\n                continue;\n        }\n        if (pos + cur.value.length < from) {\n            cur.next(from - (pos + cur.value.length));\n            pos = from;\n        }\n        for (;;) {\n            let start = pos, end = pos + cur.value.length;\n            if (!cur.lineBreak && buildForLine(cur.value)) {\n                if (last && last.to > start - 10)\n                    last.to = Math.min(to, end);\n                else\n                    result.push(last = { from: start, to: Math.min(to, end) });\n            }\n            if (end >= to)\n                break;\n            pos = end;\n            cur.next();\n        }\n    }\n    return result;\n}\nconst marks = {\n    rtl: /*@__PURE__*/Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"rtl\" }, bidiIsolate: Direction.RTL }),\n    ltr: /*@__PURE__*/Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"ltr\" }, bidiIsolate: Direction.LTR }),\n    auto: /*@__PURE__*/Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"auto\" }, bidiIsolate: null })\n};\n\nexport { DocInput, HighlightStyle, IndentContext, LRLanguage, Language, LanguageDescription, LanguageSupport, ParseContext, StreamLanguage, StringStream, TreeIndentContext, bidiIsolates, bracketMatching, bracketMatchingHandle, codeFolding, continuedIndent, defaultHighlightStyle, defineLanguageFacet, delimitedIndent, ensureSyntaxTree, flatIndent, foldAll, foldCode, foldEffect, foldGutter, foldInside, foldKeymap, foldNodeProp, foldService, foldState, foldable, foldedRanges, forceParsing, getIndentUnit, getIndentation, highlightingFor, indentNodeProp, indentOnInput, indentRange, indentService, indentString, indentUnit, language, languageDataProp, matchBrackets, sublanguageProp, syntaxHighlighting, syntaxParserRunning, syntaxTree, syntaxTreeAvailable, toggleFold, unfoldAll, unfoldCode, unfoldEffect };\n","import { Annotation, Facet, combineConfig, StateField, Transaction, ChangeSet, ChangeDesc, EditorSelection, StateEffect, Text, findClusterBreak, countColumn, CharCategory } from '@codemirror/state';\nimport { EditorView, Direction } from '@codemirror/view';\nimport { IndentContext, getIndentation, indentString, matchBrackets, syntaxTree, getIndentUnit, indentUnit } from '@codemirror/language';\nimport { NodeProp } from '@lezer/common';\n\n/**\nComment or uncomment the current selection. Will use line comments\nif available, otherwise falling back to block comments.\n*/\nconst toggleComment = target => {\n    let { state } = target, line = state.doc.lineAt(state.selection.main.from), config = getConfig(target.state, line.from);\n    return config.line ? toggleLineComment(target) : config.block ? toggleBlockCommentByLine(target) : false;\n};\nfunction command(f, option) {\n    return ({ state, dispatch }) => {\n        if (state.readOnly)\n            return false;\n        let tr = f(option, state);\n        if (!tr)\n            return false;\n        dispatch(state.update(tr));\n        return true;\n    };\n}\n/**\nComment or uncomment the current selection using line comments.\nThe line comment syntax is taken from the\n[`commentTokens`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt).\n*/\nconst toggleLineComment = /*@__PURE__*/command(changeLineComment, 0 /* CommentOption.Toggle */);\n/**\nComment the current selection using line comments.\n*/\nconst lineComment = /*@__PURE__*/command(changeLineComment, 1 /* CommentOption.Comment */);\n/**\nUncomment the current selection using line comments.\n*/\nconst lineUncomment = /*@__PURE__*/command(changeLineComment, 2 /* CommentOption.Uncomment */);\n/**\nComment or uncomment the current selection using block comments.\nThe block comment syntax is taken from the\n[`commentTokens`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt).\n*/\nconst toggleBlockComment = /*@__PURE__*/command(changeBlockComment, 0 /* CommentOption.Toggle */);\n/**\nComment the current selection using block comments.\n*/\nconst blockComment = /*@__PURE__*/command(changeBlockComment, 1 /* CommentOption.Comment */);\n/**\nUncomment the current selection using block comments.\n*/\nconst blockUncomment = /*@__PURE__*/command(changeBlockComment, 2 /* CommentOption.Uncomment */);\n/**\nComment or uncomment the lines around the current selection using\nblock comments.\n*/\nconst toggleBlockCommentByLine = /*@__PURE__*/command((o, s) => changeBlockComment(o, s, selectedLineRanges(s)), 0 /* CommentOption.Toggle */);\nfunction getConfig(state, pos) {\n    let data = state.languageDataAt(\"commentTokens\", pos, 1);\n    return data.length ? data[0] : {};\n}\nconst SearchMargin = 50;\n/**\nDetermines if the given range is block-commented in the given\nstate.\n*/\nfunction findBlockComment(state, { open, close }, from, to) {\n    let textBefore = state.sliceDoc(from - SearchMargin, from);\n    let textAfter = state.sliceDoc(to, to + SearchMargin);\n    let spaceBefore = /\\s*$/.exec(textBefore)[0].length, spaceAfter = /^\\s*/.exec(textAfter)[0].length;\n    let beforeOff = textBefore.length - spaceBefore;\n    if (textBefore.slice(beforeOff - open.length, beforeOff) == open &&\n        textAfter.slice(spaceAfter, spaceAfter + close.length) == close) {\n        return { open: { pos: from - spaceBefore, margin: spaceBefore && 1 },\n            close: { pos: to + spaceAfter, margin: spaceAfter && 1 } };\n    }\n    let startText, endText;\n    if (to - from <= 2 * SearchMargin) {\n        startText = endText = state.sliceDoc(from, to);\n    }\n    else {\n        startText = state.sliceDoc(from, from + SearchMargin);\n        endText = state.sliceDoc(to - SearchMargin, to);\n    }\n    let startSpace = /^\\s*/.exec(startText)[0].length, endSpace = /\\s*$/.exec(endText)[0].length;\n    let endOff = endText.length - endSpace - close.length;\n    if (startText.slice(startSpace, startSpace + open.length) == open &&\n        endText.slice(endOff, endOff + close.length) == close) {\n        return { open: { pos: from + startSpace + open.length,\n                margin: /\\s/.test(startText.charAt(startSpace + open.length)) ? 1 : 0 },\n            close: { pos: to - endSpace - close.length,\n                margin: /\\s/.test(endText.charAt(endOff - 1)) ? 1 : 0 } };\n    }\n    return null;\n}\nfunction selectedLineRanges(state) {\n    let ranges = [];\n    for (let r of state.selection.ranges) {\n        let fromLine = state.doc.lineAt(r.from);\n        let toLine = r.to <= fromLine.to ? fromLine : state.doc.lineAt(r.to);\n        if (toLine.from > fromLine.from && toLine.from == r.to)\n            toLine = r.to == fromLine.to + 1 ? fromLine : state.doc.lineAt(r.to - 1);\n        let last = ranges.length - 1;\n        if (last >= 0 && ranges[last].to > fromLine.from)\n            ranges[last].to = toLine.to;\n        else\n            ranges.push({ from: fromLine.from + /^\\s*/.exec(fromLine.text)[0].length, to: toLine.to });\n    }\n    return ranges;\n}\n// Performs toggle, comment and uncomment of block comments in\n// languages that support them.\nfunction changeBlockComment(option, state, ranges = state.selection.ranges) {\n    let tokens = ranges.map(r => getConfig(state, r.from).block);\n    if (!tokens.every(c => c))\n        return null;\n    let comments = ranges.map((r, i) => findBlockComment(state, tokens[i], r.from, r.to));\n    if (option != 2 /* CommentOption.Uncomment */ && !comments.every(c => c)) {\n        return { changes: state.changes(ranges.map((range, i) => {\n                if (comments[i])\n                    return [];\n                return [{ from: range.from, insert: tokens[i].open + \" \" }, { from: range.to, insert: \" \" + tokens[i].close }];\n            })) };\n    }\n    else if (option != 1 /* CommentOption.Comment */ && comments.some(c => c)) {\n        let changes = [];\n        for (let i = 0, comment; i < comments.length; i++)\n            if (comment = comments[i]) {\n                let token = tokens[i], { open, close } = comment;\n                changes.push({ from: open.pos - token.open.length, to: open.pos + open.margin }, { from: close.pos - close.margin, to: close.pos + token.close.length });\n            }\n        return { changes };\n    }\n    return null;\n}\n// Performs toggle, comment and uncomment of line comments.\nfunction changeLineComment(option, state, ranges = state.selection.ranges) {\n    let lines = [];\n    let prevLine = -1;\n    for (let { from, to } of ranges) {\n        let startI = lines.length, minIndent = 1e9;\n        let token = getConfig(state, from).line;\n        if (!token)\n            continue;\n        for (let pos = from; pos <= to;) {\n            let line = state.doc.lineAt(pos);\n            if (line.from > prevLine && (from == to || to > line.from)) {\n                prevLine = line.from;\n                let indent = /^\\s*/.exec(line.text)[0].length;\n                let empty = indent == line.length;\n                let comment = line.text.slice(indent, indent + token.length) == token ? indent : -1;\n                if (indent < line.text.length && indent < minIndent)\n                    minIndent = indent;\n                lines.push({ line, comment, token, indent, empty, single: false });\n            }\n            pos = line.to + 1;\n        }\n        if (minIndent < 1e9)\n            for (let i = startI; i < lines.length; i++)\n                if (lines[i].indent < lines[i].line.text.length)\n                    lines[i].indent = minIndent;\n        if (lines.length == startI + 1)\n            lines[startI].single = true;\n    }\n    if (option != 2 /* CommentOption.Uncomment */ && lines.some(l => l.comment < 0 && (!l.empty || l.single))) {\n        let changes = [];\n        for (let { line, token, indent, empty, single } of lines)\n            if (single || !empty)\n                changes.push({ from: line.from + indent, insert: token + \" \" });\n        let changeSet = state.changes(changes);\n        return { changes: changeSet, selection: state.selection.map(changeSet, 1) };\n    }\n    else if (option != 1 /* CommentOption.Comment */ && lines.some(l => l.comment >= 0)) {\n        let changes = [];\n        for (let { line, comment, token } of lines)\n            if (comment >= 0) {\n                let from = line.from + comment, to = from + token.length;\n                if (line.text[to - line.from] == \" \")\n                    to++;\n                changes.push({ from, to });\n            }\n        return { changes };\n    }\n    return null;\n}\n\nconst fromHistory = /*@__PURE__*/Annotation.define();\n/**\nTransaction annotation that will prevent that transaction from\nbeing combined with other transactions in the undo history. Given\n`\"before\"`, it'll prevent merging with previous transactions. With\n`\"after\"`, subsequent transactions won't be combined with this\none. With `\"full\"`, the transaction is isolated on both sides.\n*/\nconst isolateHistory = /*@__PURE__*/Annotation.define();\n/**\nThis facet provides a way to register functions that, given a\ntransaction, provide a set of effects that the history should\nstore when inverting the transaction. This can be used to\nintegrate some kinds of effects in the history, so that they can\nbe undone (and redone again).\n*/\nconst invertedEffects = /*@__PURE__*/Facet.define();\nconst historyConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            minDepth: 100,\n            newGroupDelay: 500,\n            joinToEvent: (_t, isAdjacent) => isAdjacent,\n        }, {\n            minDepth: Math.max,\n            newGroupDelay: Math.min,\n            joinToEvent: (a, b) => (tr, adj) => a(tr, adj) || b(tr, adj)\n        });\n    }\n});\nconst historyField_ = /*@__PURE__*/StateField.define({\n    create() {\n        return HistoryState.empty;\n    },\n    update(state, tr) {\n        let config = tr.state.facet(historyConfig);\n        let fromHist = tr.annotation(fromHistory);\n        if (fromHist) {\n            let item = HistEvent.fromTransaction(tr, fromHist.selection), from = fromHist.side;\n            let other = from == 0 /* BranchName.Done */ ? state.undone : state.done;\n            if (item)\n                other = updateBranch(other, other.length, config.minDepth, item);\n            else\n                other = addSelection(other, tr.startState.selection);\n            return new HistoryState(from == 0 /* BranchName.Done */ ? fromHist.rest : other, from == 0 /* BranchName.Done */ ? other : fromHist.rest);\n        }\n        let isolate = tr.annotation(isolateHistory);\n        if (isolate == \"full\" || isolate == \"before\")\n            state = state.isolate();\n        if (tr.annotation(Transaction.addToHistory) === false)\n            return !tr.changes.empty ? state.addMapping(tr.changes.desc) : state;\n        let event = HistEvent.fromTransaction(tr);\n        let time = tr.annotation(Transaction.time), userEvent = tr.annotation(Transaction.userEvent);\n        if (event)\n            state = state.addChanges(event, time, userEvent, config, tr);\n        else if (tr.selection)\n            state = state.addSelection(tr.startState.selection, time, userEvent, config.newGroupDelay);\n        if (isolate == \"full\" || isolate == \"after\")\n            state = state.isolate();\n        return state;\n    },\n    toJSON(value) {\n        return { done: value.done.map(e => e.toJSON()), undone: value.undone.map(e => e.toJSON()) };\n    },\n    fromJSON(json) {\n        return new HistoryState(json.done.map(HistEvent.fromJSON), json.undone.map(HistEvent.fromJSON));\n    }\n});\n/**\nCreate a history extension with the given configuration.\n*/\nfunction history(config = {}) {\n    return [\n        historyField_,\n        historyConfig.of(config),\n        EditorView.domEventHandlers({\n            beforeinput(e, view) {\n                let command = e.inputType == \"historyUndo\" ? undo : e.inputType == \"historyRedo\" ? redo : null;\n                if (!command)\n                    return false;\n                e.preventDefault();\n                return command(view);\n            }\n        })\n    ];\n}\n/**\nThe state field used to store the history data. Should probably\nonly be used when you want to\n[serialize](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) or\n[deserialize](https://codemirror.net/6/docs/ref/#state.EditorState^fromJSON) state objects in a way\nthat preserves history.\n*/\nconst historyField = historyField_;\nfunction cmd(side, selection) {\n    return function ({ state, dispatch }) {\n        if (!selection && state.readOnly)\n            return false;\n        let historyState = state.field(historyField_, false);\n        if (!historyState)\n            return false;\n        let tr = historyState.pop(side, state, selection);\n        if (!tr)\n            return false;\n        dispatch(tr);\n        return true;\n    };\n}\n/**\nUndo a single group of history events. Returns false if no group\nwas available.\n*/\nconst undo = /*@__PURE__*/cmd(0 /* BranchName.Done */, false);\n/**\nRedo a group of history events. Returns false if no group was\navailable.\n*/\nconst redo = /*@__PURE__*/cmd(1 /* BranchName.Undone */, false);\n/**\nUndo a change or selection change.\n*/\nconst undoSelection = /*@__PURE__*/cmd(0 /* BranchName.Done */, true);\n/**\nRedo a change or selection change.\n*/\nconst redoSelection = /*@__PURE__*/cmd(1 /* BranchName.Undone */, true);\nfunction depth(side) {\n    return function (state) {\n        let histState = state.field(historyField_, false);\n        if (!histState)\n            return 0;\n        let branch = side == 0 /* BranchName.Done */ ? histState.done : histState.undone;\n        return branch.length - (branch.length && !branch[0].changes ? 1 : 0);\n    };\n}\n/**\nThe amount of undoable change events available in a given state.\n*/\nconst undoDepth = /*@__PURE__*/depth(0 /* BranchName.Done */);\n/**\nThe amount of redoable change events available in a given state.\n*/\nconst redoDepth = /*@__PURE__*/depth(1 /* BranchName.Undone */);\n// History events store groups of changes or effects that need to be\n// undone/redone together.\nclass HistEvent {\n    constructor(\n    // The changes in this event. Normal events hold at least one\n    // change or effect. But it may be necessary to store selection\n    // events before the first change, in which case a special type of\n    // instance is created which doesn't hold any changes, with\n    // changes == startSelection == undefined\n    changes, \n    // The effects associated with this event\n    effects, \n    // Accumulated mapping (from addToHistory==false) that should be\n    // applied to events below this one.\n    mapped, \n    // The selection before this event\n    startSelection, \n    // Stores selection changes after this event, to be used for\n    // selection undo/redo.\n    selectionsAfter) {\n        this.changes = changes;\n        this.effects = effects;\n        this.mapped = mapped;\n        this.startSelection = startSelection;\n        this.selectionsAfter = selectionsAfter;\n    }\n    setSelAfter(after) {\n        return new HistEvent(this.changes, this.effects, this.mapped, this.startSelection, after);\n    }\n    toJSON() {\n        var _a, _b, _c;\n        return {\n            changes: (_a = this.changes) === null || _a === void 0 ? void 0 : _a.toJSON(),\n            mapped: (_b = this.mapped) === null || _b === void 0 ? void 0 : _b.toJSON(),\n            startSelection: (_c = this.startSelection) === null || _c === void 0 ? void 0 : _c.toJSON(),\n            selectionsAfter: this.selectionsAfter.map(s => s.toJSON())\n        };\n    }\n    static fromJSON(json) {\n        return new HistEvent(json.changes && ChangeSet.fromJSON(json.changes), [], json.mapped && ChangeDesc.fromJSON(json.mapped), json.startSelection && EditorSelection.fromJSON(json.startSelection), json.selectionsAfter.map(EditorSelection.fromJSON));\n    }\n    // This does not check `addToHistory` and such, it assumes the\n    // transaction needs to be converted to an item. Returns null when\n    // there are no changes or effects in the transaction.\n    static fromTransaction(tr, selection) {\n        let effects = none;\n        for (let invert of tr.startState.facet(invertedEffects)) {\n            let result = invert(tr);\n            if (result.length)\n                effects = effects.concat(result);\n        }\n        if (!effects.length && tr.changes.empty)\n            return null;\n        return new HistEvent(tr.changes.invert(tr.startState.doc), effects, undefined, selection || tr.startState.selection, none);\n    }\n    static selection(selections) {\n        return new HistEvent(undefined, none, undefined, undefined, selections);\n    }\n}\nfunction updateBranch(branch, to, maxLen, newEvent) {\n    let start = to + 1 > maxLen + 20 ? to - maxLen - 1 : 0;\n    let newBranch = branch.slice(start, to);\n    newBranch.push(newEvent);\n    return newBranch;\n}\nfunction isAdjacent(a, b) {\n    let ranges = [], isAdjacent = false;\n    a.iterChangedRanges((f, t) => ranges.push(f, t));\n    b.iterChangedRanges((_f, _t, f, t) => {\n        for (let i = 0; i < ranges.length;) {\n            let from = ranges[i++], to = ranges[i++];\n            if (t >= from && f <= to)\n                isAdjacent = true;\n        }\n    });\n    return isAdjacent;\n}\nfunction eqSelectionShape(a, b) {\n    return a.ranges.length == b.ranges.length &&\n        a.ranges.filter((r, i) => r.empty != b.ranges[i].empty).length === 0;\n}\nfunction conc(a, b) {\n    return !a.length ? b : !b.length ? a : a.concat(b);\n}\nconst none = [];\nconst MaxSelectionsPerEvent = 200;\nfunction addSelection(branch, selection) {\n    if (!branch.length) {\n        return [HistEvent.selection([selection])];\n    }\n    else {\n        let lastEvent = branch[branch.length - 1];\n        let sels = lastEvent.selectionsAfter.slice(Math.max(0, lastEvent.selectionsAfter.length - MaxSelectionsPerEvent));\n        if (sels.length && sels[sels.length - 1].eq(selection))\n            return branch;\n        sels.push(selection);\n        return updateBranch(branch, branch.length - 1, 1e9, lastEvent.setSelAfter(sels));\n    }\n}\n// Assumes the top item has one or more selectionAfter values\nfunction popSelection(branch) {\n    let last = branch[branch.length - 1];\n    let newBranch = branch.slice();\n    newBranch[branch.length - 1] = last.setSelAfter(last.selectionsAfter.slice(0, last.selectionsAfter.length - 1));\n    return newBranch;\n}\n// Add a mapping to the top event in the given branch. If this maps\n// away all the changes and effects in that item, drop it and\n// propagate the mapping to the next item.\nfunction addMappingToBranch(branch, mapping) {\n    if (!branch.length)\n        return branch;\n    let length = branch.length, selections = none;\n    while (length) {\n        let event = mapEvent(branch[length - 1], mapping, selections);\n        if (event.changes && !event.changes.empty || event.effects.length) { // Event survived mapping\n            let result = branch.slice(0, length);\n            result[length - 1] = event;\n            return result;\n        }\n        else { // Drop this event, since there's no changes or effects left\n            mapping = event.mapped;\n            length--;\n            selections = event.selectionsAfter;\n        }\n    }\n    return selections.length ? [HistEvent.selection(selections)] : none;\n}\nfunction mapEvent(event, mapping, extraSelections) {\n    let selections = conc(event.selectionsAfter.length ? event.selectionsAfter.map(s => s.map(mapping)) : none, extraSelections);\n    // Change-less events don't store mappings (they are always the last event in a branch)\n    if (!event.changes)\n        return HistEvent.selection(selections);\n    let mappedChanges = event.changes.map(mapping), before = mapping.mapDesc(event.changes, true);\n    let fullMapping = event.mapped ? event.mapped.composeDesc(before) : before;\n    return new HistEvent(mappedChanges, StateEffect.mapEffects(event.effects, mapping), fullMapping, event.startSelection.map(before), selections);\n}\nconst joinableUserEvent = /^(input\\.type|delete)($|\\.)/;\nclass HistoryState {\n    constructor(done, undone, prevTime = 0, prevUserEvent = undefined) {\n        this.done = done;\n        this.undone = undone;\n        this.prevTime = prevTime;\n        this.prevUserEvent = prevUserEvent;\n    }\n    isolate() {\n        return this.prevTime ? new HistoryState(this.done, this.undone) : this;\n    }\n    addChanges(event, time, userEvent, config, tr) {\n        let done = this.done, lastEvent = done[done.length - 1];\n        if (lastEvent && lastEvent.changes && !lastEvent.changes.empty && event.changes &&\n            (!userEvent || joinableUserEvent.test(userEvent)) &&\n            ((!lastEvent.selectionsAfter.length &&\n                time - this.prevTime < config.newGroupDelay &&\n                config.joinToEvent(tr, isAdjacent(lastEvent.changes, event.changes))) ||\n                // For compose (but not compose.start) events, always join with previous event\n                userEvent == \"input.type.compose\")) {\n            done = updateBranch(done, done.length - 1, config.minDepth, new HistEvent(event.changes.compose(lastEvent.changes), conc(StateEffect.mapEffects(event.effects, lastEvent.changes), lastEvent.effects), lastEvent.mapped, lastEvent.startSelection, none));\n        }\n        else {\n            done = updateBranch(done, done.length, config.minDepth, event);\n        }\n        return new HistoryState(done, none, time, userEvent);\n    }\n    addSelection(selection, time, userEvent, newGroupDelay) {\n        let last = this.done.length ? this.done[this.done.length - 1].selectionsAfter : none;\n        if (last.length > 0 &&\n            time - this.prevTime < newGroupDelay &&\n            userEvent == this.prevUserEvent && userEvent && /^select($|\\.)/.test(userEvent) &&\n            eqSelectionShape(last[last.length - 1], selection))\n            return this;\n        return new HistoryState(addSelection(this.done, selection), this.undone, time, userEvent);\n    }\n    addMapping(mapping) {\n        return new HistoryState(addMappingToBranch(this.done, mapping), addMappingToBranch(this.undone, mapping), this.prevTime, this.prevUserEvent);\n    }\n    pop(side, state, onlySelection) {\n        let branch = side == 0 /* BranchName.Done */ ? this.done : this.undone;\n        if (branch.length == 0)\n            return null;\n        let event = branch[branch.length - 1], selection = event.selectionsAfter[0] || state.selection;\n        if (onlySelection && event.selectionsAfter.length) {\n            return state.update({\n                selection: event.selectionsAfter[event.selectionsAfter.length - 1],\n                annotations: fromHistory.of({ side, rest: popSelection(branch), selection }),\n                userEvent: side == 0 /* BranchName.Done */ ? \"select.undo\" : \"select.redo\",\n                scrollIntoView: true\n            });\n        }\n        else if (!event.changes) {\n            return null;\n        }\n        else {\n            let rest = branch.length == 1 ? none : branch.slice(0, branch.length - 1);\n            if (event.mapped)\n                rest = addMappingToBranch(rest, event.mapped);\n            return state.update({\n                changes: event.changes,\n                selection: event.startSelection,\n                effects: event.effects,\n                annotations: fromHistory.of({ side, rest, selection }),\n                filter: false,\n                userEvent: side == 0 /* BranchName.Done */ ? \"undo\" : \"redo\",\n                scrollIntoView: true\n            });\n        }\n    }\n}\nHistoryState.empty = /*@__PURE__*/new HistoryState(none, none);\n/**\nDefault key bindings for the undo history.\n\n- Mod-z: [`undo`](https://codemirror.net/6/docs/ref/#commands.undo).\n- Mod-y (Mod-Shift-z on macOS) + Ctrl-Shift-z on Linux: [`redo`](https://codemirror.net/6/docs/ref/#commands.redo).\n- Mod-u: [`undoSelection`](https://codemirror.net/6/docs/ref/#commands.undoSelection).\n- Alt-u (Mod-Shift-u on macOS): [`redoSelection`](https://codemirror.net/6/docs/ref/#commands.redoSelection).\n*/\nconst historyKeymap = [\n    { key: \"Mod-z\", run: undo, preventDefault: true },\n    { key: \"Mod-y\", mac: \"Mod-Shift-z\", run: redo, preventDefault: true },\n    { linux: \"Ctrl-Shift-z\", run: redo, preventDefault: true },\n    { key: \"Mod-u\", run: undoSelection, preventDefault: true },\n    { key: \"Alt-u\", mac: \"Mod-Shift-u\", run: redoSelection, preventDefault: true }\n];\n\nfunction updateSel(sel, by) {\n    return EditorSelection.create(sel.ranges.map(by), sel.mainIndex);\n}\nfunction setSel(state, selection) {\n    return state.update({ selection, scrollIntoView: true, userEvent: \"select\" });\n}\nfunction moveSel({ state, dispatch }, how) {\n    let selection = updateSel(state.selection, how);\n    if (selection.eq(state.selection, true))\n        return false;\n    dispatch(setSel(state, selection));\n    return true;\n}\nfunction rangeEnd(range, forward) {\n    return EditorSelection.cursor(forward ? range.to : range.from);\n}\nfunction cursorByChar(view, forward) {\n    return moveSel(view, range => range.empty ? view.moveByChar(range, forward) : rangeEnd(range, forward));\n}\nfunction ltrAtCursor(view) {\n    return view.textDirectionAt(view.state.selection.main.head) == Direction.LTR;\n}\n/**\nMove the selection one character to the left (which is backward in\nleft-to-right text, forward in right-to-left text).\n*/\nconst cursorCharLeft = view => cursorByChar(view, !ltrAtCursor(view));\n/**\nMove the selection one character to the right.\n*/\nconst cursorCharRight = view => cursorByChar(view, ltrAtCursor(view));\n/**\nMove the selection one character forward.\n*/\nconst cursorCharForward = view => cursorByChar(view, true);\n/**\nMove the selection one character backward.\n*/\nconst cursorCharBackward = view => cursorByChar(view, false);\nfunction byCharLogical(state, range, forward) {\n    let pos = range.head, line = state.doc.lineAt(pos);\n    if (pos == (forward ? line.to : line.from))\n        pos = forward ? Math.min(state.doc.length, line.to + 1) : Math.max(0, line.from - 1);\n    else\n        pos = line.from + findClusterBreak(line.text, pos - line.from, forward);\n    return EditorSelection.cursor(pos, forward ? -1 : 1);\n}\nfunction moveByCharLogical(target, forward) {\n    return moveSel(target, range => range.empty ? byCharLogical(target.state, range, forward) : rangeEnd(range, forward));\n}\n/**\nMove the selection one character forward, in logical\n(non-text-direction-aware) string index order.\n*/\nconst cursorCharForwardLogical = target => moveByCharLogical(target, true);\n/**\nMove the selection one character backward, in logical string index\norder.\n*/\nconst cursorCharBackwardLogical = target => moveByCharLogical(target, false);\nfunction cursorByGroup(view, forward) {\n    return moveSel(view, range => range.empty ? view.moveByGroup(range, forward) : rangeEnd(range, forward));\n}\n/**\nMove the selection to the left across one group of word or\nnon-word (but also non-space) characters.\n*/\nconst cursorGroupLeft = view => cursorByGroup(view, !ltrAtCursor(view));\n/**\nMove the selection one group to the right.\n*/\nconst cursorGroupRight = view => cursorByGroup(view, ltrAtCursor(view));\n/**\nMove the selection one group forward.\n*/\nconst cursorGroupForward = view => cursorByGroup(view, true);\n/**\nMove the selection one group backward.\n*/\nconst cursorGroupBackward = view => cursorByGroup(view, false);\nfunction toGroupStart(view, pos, start) {\n    let categorize = view.state.charCategorizer(pos);\n    let cat = categorize(start), initial = cat != CharCategory.Space;\n    return (next) => {\n        let nextCat = categorize(next);\n        if (nextCat != CharCategory.Space)\n            return initial && nextCat == cat;\n        initial = false;\n        return true;\n    };\n}\n/**\nMove the cursor one group forward in the default Windows style,\nwhere it moves to the start of the next group.\n*/\nconst cursorGroupForwardWin = view => {\n    return moveSel(view, range => range.empty\n        ? view.moveByChar(range, true, start => toGroupStart(view, range.head, start))\n        : rangeEnd(range, true));\n};\nconst segmenter = typeof Intl != \"undefined\" && Intl.Segmenter ?\n    /*@__PURE__*/new (Intl.Segmenter)(undefined, { granularity: \"word\" }) : null;\nfunction moveBySubword(view, range, forward) {\n    let categorize = view.state.charCategorizer(range.from);\n    let cat = CharCategory.Space, pos = range.from, steps = 0;\n    let done = false, sawUpper = false, sawLower = false;\n    let step = (next) => {\n        if (done)\n            return false;\n        pos += forward ? next.length : -next.length;\n        let nextCat = categorize(next), ahead;\n        if (nextCat == CharCategory.Word && next.charCodeAt(0) < 128 && /[\\W_]/.test(next))\n            nextCat = -1; // Treat word punctuation specially\n        if (cat == CharCategory.Space)\n            cat = nextCat;\n        if (cat != nextCat)\n            return false;\n        if (cat == CharCategory.Word) {\n            if (next.toLowerCase() == next) {\n                if (!forward && sawUpper)\n                    return false;\n                sawLower = true;\n            }\n            else if (sawLower) {\n                if (forward)\n                    return false;\n                done = true;\n            }\n            else {\n                if (sawUpper && forward && categorize(ahead = view.state.sliceDoc(pos, pos + 1)) == CharCategory.Word &&\n                    ahead.toLowerCase() == ahead)\n                    return false;\n                sawUpper = true;\n            }\n        }\n        steps++;\n        return true;\n    };\n    let end = view.moveByChar(range, forward, start => {\n        step(start);\n        return step;\n    });\n    if (segmenter && cat == CharCategory.Word && end.from == range.from + steps * (forward ? 1 : -1)) {\n        let from = Math.min(range.head, end.head), to = Math.max(range.head, end.head);\n        let skipped = view.state.sliceDoc(from, to);\n        if (skipped.length > 1 && /[\\u4E00-\\uffff]/.test(skipped)) {\n            let segments = Array.from(segmenter.segment(skipped));\n            if (segments.length > 1) {\n                if (forward)\n                    return EditorSelection.cursor(range.head + segments[1].index, -1);\n                return EditorSelection.cursor(end.head + segments[segments.length - 1].index, 1);\n            }\n        }\n    }\n    return end;\n}\nfunction cursorBySubword(view, forward) {\n    return moveSel(view, range => range.empty ? moveBySubword(view, range, forward) : rangeEnd(range, forward));\n}\n/**\nMove the selection one group or camel-case subword forward.\n*/\nconst cursorSubwordForward = view => cursorBySubword(view, true);\n/**\nMove the selection one group or camel-case subword backward.\n*/\nconst cursorSubwordBackward = view => cursorBySubword(view, false);\nfunction interestingNode(state, node, bracketProp) {\n    if (node.type.prop(bracketProp))\n        return true;\n    let len = node.to - node.from;\n    return len && (len > 2 || /[^\\s,.;:]/.test(state.sliceDoc(node.from, node.to))) || node.firstChild;\n}\nfunction moveBySyntax(state, start, forward) {\n    let pos = syntaxTree(state).resolveInner(start.head);\n    let bracketProp = forward ? NodeProp.closedBy : NodeProp.openedBy;\n    // Scan forward through child nodes to see if there's an interesting\n    // node ahead.\n    for (let at = start.head;;) {\n        let next = forward ? pos.childAfter(at) : pos.childBefore(at);\n        if (!next)\n            break;\n        if (interestingNode(state, next, bracketProp))\n            pos = next;\n        else\n            at = forward ? next.to : next.from;\n    }\n    let bracket = pos.type.prop(bracketProp), match, newPos;\n    if (bracket && (match = forward ? matchBrackets(state, pos.from, 1) : matchBrackets(state, pos.to, -1)) && match.matched)\n        newPos = forward ? match.end.to : match.end.from;\n    else\n        newPos = forward ? pos.to : pos.from;\n    return EditorSelection.cursor(newPos, forward ? -1 : 1);\n}\n/**\nMove the cursor over the next syntactic element to the left.\n*/\nconst cursorSyntaxLeft = view => moveSel(view, range => moveBySyntax(view.state, range, !ltrAtCursor(view)));\n/**\nMove the cursor over the next syntactic element to the right.\n*/\nconst cursorSyntaxRight = view => moveSel(view, range => moveBySyntax(view.state, range, ltrAtCursor(view)));\nfunction cursorByLine(view, forward) {\n    return moveSel(view, range => {\n        if (!range.empty)\n            return rangeEnd(range, forward);\n        let moved = view.moveVertically(range, forward);\n        return moved.head != range.head ? moved : view.moveToLineBoundary(range, forward);\n    });\n}\n/**\nMove the selection one line up.\n*/\nconst cursorLineUp = view => cursorByLine(view, false);\n/**\nMove the selection one line down.\n*/\nconst cursorLineDown = view => cursorByLine(view, true);\nfunction pageInfo(view) {\n    let selfScroll = view.scrollDOM.clientHeight < view.scrollDOM.scrollHeight - 2;\n    let marginTop = 0, marginBottom = 0, height;\n    if (selfScroll) {\n        for (let source of view.state.facet(EditorView.scrollMargins)) {\n            let margins = source(view);\n            if (margins === null || margins === void 0 ? void 0 : margins.top)\n                marginTop = Math.max(margins === null || margins === void 0 ? void 0 : margins.top, marginTop);\n            if (margins === null || margins === void 0 ? void 0 : margins.bottom)\n                marginBottom = Math.max(margins === null || margins === void 0 ? void 0 : margins.bottom, marginBottom);\n        }\n        height = view.scrollDOM.clientHeight - marginTop - marginBottom;\n    }\n    else {\n        height = (view.dom.ownerDocument.defaultView || window).innerHeight;\n    }\n    return { marginTop, marginBottom, selfScroll,\n        height: Math.max(view.defaultLineHeight, height - 5) };\n}\nfunction cursorByPage(view, forward) {\n    let page = pageInfo(view);\n    let { state } = view, selection = updateSel(state.selection, range => {\n        return range.empty ? view.moveVertically(range, forward, page.height)\n            : rangeEnd(range, forward);\n    });\n    if (selection.eq(state.selection))\n        return false;\n    let effect;\n    if (page.selfScroll) {\n        let startPos = view.coordsAtPos(state.selection.main.head);\n        let scrollRect = view.scrollDOM.getBoundingClientRect();\n        let scrollTop = scrollRect.top + page.marginTop, scrollBottom = scrollRect.bottom - page.marginBottom;\n        if (startPos && startPos.top > scrollTop && startPos.bottom < scrollBottom)\n            effect = EditorView.scrollIntoView(selection.main.head, { y: \"start\", yMargin: startPos.top - scrollTop });\n    }\n    view.dispatch(setSel(state, selection), { effects: effect });\n    return true;\n}\n/**\nMove the selection one page up.\n*/\nconst cursorPageUp = view => cursorByPage(view, false);\n/**\nMove the selection one page down.\n*/\nconst cursorPageDown = view => cursorByPage(view, true);\nfunction moveByLineBoundary(view, start, forward) {\n    let line = view.lineBlockAt(start.head), moved = view.moveToLineBoundary(start, forward);\n    if (moved.head == start.head && moved.head != (forward ? line.to : line.from))\n        moved = view.moveToLineBoundary(start, forward, false);\n    if (!forward && moved.head == line.from && line.length) {\n        let space = /^\\s*/.exec(view.state.sliceDoc(line.from, Math.min(line.from + 100, line.to)))[0].length;\n        if (space && start.head != line.from + space)\n            moved = EditorSelection.cursor(line.from + space);\n    }\n    return moved;\n}\n/**\nMove the selection to the next line wrap point, or to the end of\nthe line if there isn't one left on this line.\n*/\nconst cursorLineBoundaryForward = view => moveSel(view, range => moveByLineBoundary(view, range, true));\n/**\nMove the selection to previous line wrap point, or failing that to\nthe start of the line. If the line is indented, and the cursor\nisn't already at the end of the indentation, this will move to the\nend of the indentation instead of the start of the line.\n*/\nconst cursorLineBoundaryBackward = view => moveSel(view, range => moveByLineBoundary(view, range, false));\n/**\nMove the selection one line wrap point to the left.\n*/\nconst cursorLineBoundaryLeft = view => moveSel(view, range => moveByLineBoundary(view, range, !ltrAtCursor(view)));\n/**\nMove the selection one line wrap point to the right.\n*/\nconst cursorLineBoundaryRight = view => moveSel(view, range => moveByLineBoundary(view, range, ltrAtCursor(view)));\n/**\nMove the selection to the start of the line.\n*/\nconst cursorLineStart = view => moveSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).from, 1));\n/**\nMove the selection to the end of the line.\n*/\nconst cursorLineEnd = view => moveSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).to, -1));\nfunction toMatchingBracket(state, dispatch, extend) {\n    let found = false, selection = updateSel(state.selection, range => {\n        let matching = matchBrackets(state, range.head, -1)\n            || matchBrackets(state, range.head, 1)\n            || (range.head > 0 && matchBrackets(state, range.head - 1, 1))\n            || (range.head < state.doc.length && matchBrackets(state, range.head + 1, -1));\n        if (!matching || !matching.end)\n            return range;\n        found = true;\n        let head = matching.start.from == range.head ? matching.end.to : matching.end.from;\n        return extend ? EditorSelection.range(range.anchor, head) : EditorSelection.cursor(head);\n    });\n    if (!found)\n        return false;\n    dispatch(setSel(state, selection));\n    return true;\n}\n/**\nMove the selection to the bracket matching the one it is currently\non, if any.\n*/\nconst cursorMatchingBracket = ({ state, dispatch }) => toMatchingBracket(state, dispatch, false);\n/**\nExtend the selection to the bracket matching the one the selection\nhead is currently on, if any.\n*/\nconst selectMatchingBracket = ({ state, dispatch }) => toMatchingBracket(state, dispatch, true);\nfunction extendSel(target, how) {\n    let selection = updateSel(target.state.selection, range => {\n        let head = how(range);\n        return EditorSelection.range(range.anchor, head.head, head.goalColumn, head.bidiLevel || undefined);\n    });\n    if (selection.eq(target.state.selection))\n        return false;\n    target.dispatch(setSel(target.state, selection));\n    return true;\n}\nfunction selectByChar(view, forward) {\n    return extendSel(view, range => view.moveByChar(range, forward));\n}\n/**\nMove the selection head one character to the left, while leaving\nthe anchor in place.\n*/\nconst selectCharLeft = view => selectByChar(view, !ltrAtCursor(view));\n/**\nMove the selection head one character to the right.\n*/\nconst selectCharRight = view => selectByChar(view, ltrAtCursor(view));\n/**\nMove the selection head one character forward.\n*/\nconst selectCharForward = view => selectByChar(view, true);\n/**\nMove the selection head one character backward.\n*/\nconst selectCharBackward = view => selectByChar(view, false);\n/**\nMove the selection head one character forward by logical\n(non-direction aware) string index order.\n*/\nconst selectCharForwardLogical = target => extendSel(target, range => byCharLogical(target.state, range, true));\n/**\nMove the selection head one character backward by logical string\nindex order.\n*/\nconst selectCharBackwardLogical = target => extendSel(target, range => byCharLogical(target.state, range, false));\nfunction selectByGroup(view, forward) {\n    return extendSel(view, range => view.moveByGroup(range, forward));\n}\n/**\nMove the selection head one [group](https://codemirror.net/6/docs/ref/#commands.cursorGroupLeft) to\nthe left.\n*/\nconst selectGroupLeft = view => selectByGroup(view, !ltrAtCursor(view));\n/**\nMove the selection head one group to the right.\n*/\nconst selectGroupRight = view => selectByGroup(view, ltrAtCursor(view));\n/**\nMove the selection head one group forward.\n*/\nconst selectGroupForward = view => selectByGroup(view, true);\n/**\nMove the selection head one group backward.\n*/\nconst selectGroupBackward = view => selectByGroup(view, false);\n/**\nMove the selection head one group forward in the default Windows\nstyle, skipping to the start of the next group.\n*/\nconst selectGroupForwardWin = view => {\n    return extendSel(view, range => view.moveByChar(range, true, start => toGroupStart(view, range.head, start)));\n};\nfunction selectBySubword(view, forward) {\n    return extendSel(view, range => moveBySubword(view, range, forward));\n}\n/**\nMove the selection head one group or camel-case subword forward.\n*/\nconst selectSubwordForward = view => selectBySubword(view, true);\n/**\nMove the selection head one group or subword backward.\n*/\nconst selectSubwordBackward = view => selectBySubword(view, false);\n/**\nMove the selection head over the next syntactic element to the left.\n*/\nconst selectSyntaxLeft = view => extendSel(view, range => moveBySyntax(view.state, range, !ltrAtCursor(view)));\n/**\nMove the selection head over the next syntactic element to the right.\n*/\nconst selectSyntaxRight = view => extendSel(view, range => moveBySyntax(view.state, range, ltrAtCursor(view)));\nfunction selectByLine(view, forward) {\n    return extendSel(view, range => view.moveVertically(range, forward));\n}\n/**\nMove the selection head one line up.\n*/\nconst selectLineUp = view => selectByLine(view, false);\n/**\nMove the selection head one line down.\n*/\nconst selectLineDown = view => selectByLine(view, true);\nfunction selectByPage(view, forward) {\n    return extendSel(view, range => view.moveVertically(range, forward, pageInfo(view).height));\n}\n/**\nMove the selection head one page up.\n*/\nconst selectPageUp = view => selectByPage(view, false);\n/**\nMove the selection head one page down.\n*/\nconst selectPageDown = view => selectByPage(view, true);\n/**\nMove the selection head to the next line boundary.\n*/\nconst selectLineBoundaryForward = view => extendSel(view, range => moveByLineBoundary(view, range, true));\n/**\nMove the selection head to the previous line boundary.\n*/\nconst selectLineBoundaryBackward = view => extendSel(view, range => moveByLineBoundary(view, range, false));\n/**\nMove the selection head one line boundary to the left.\n*/\nconst selectLineBoundaryLeft = view => extendSel(view, range => moveByLineBoundary(view, range, !ltrAtCursor(view)));\n/**\nMove the selection head one line boundary to the right.\n*/\nconst selectLineBoundaryRight = view => extendSel(view, range => moveByLineBoundary(view, range, ltrAtCursor(view)));\n/**\nMove the selection head to the start of the line.\n*/\nconst selectLineStart = view => extendSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).from));\n/**\nMove the selection head to the end of the line.\n*/\nconst selectLineEnd = view => extendSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).to));\n/**\nMove the selection to the start of the document.\n*/\nconst cursorDocStart = ({ state, dispatch }) => {\n    dispatch(setSel(state, { anchor: 0 }));\n    return true;\n};\n/**\nMove the selection to the end of the document.\n*/\nconst cursorDocEnd = ({ state, dispatch }) => {\n    dispatch(setSel(state, { anchor: state.doc.length }));\n    return true;\n};\n/**\nMove the selection head to the start of the document.\n*/\nconst selectDocStart = ({ state, dispatch }) => {\n    dispatch(setSel(state, { anchor: state.selection.main.anchor, head: 0 }));\n    return true;\n};\n/**\nMove the selection head to the end of the document.\n*/\nconst selectDocEnd = ({ state, dispatch }) => {\n    dispatch(setSel(state, { anchor: state.selection.main.anchor, head: state.doc.length }));\n    return true;\n};\n/**\nSelect the entire document.\n*/\nconst selectAll = ({ state, dispatch }) => {\n    dispatch(state.update({ selection: { anchor: 0, head: state.doc.length }, userEvent: \"select\" }));\n    return true;\n};\n/**\nExpand the selection to cover entire lines.\n*/\nconst selectLine = ({ state, dispatch }) => {\n    let ranges = selectedLineBlocks(state).map(({ from, to }) => EditorSelection.range(from, Math.min(to + 1, state.doc.length)));\n    dispatch(state.update({ selection: EditorSelection.create(ranges), userEvent: \"select\" }));\n    return true;\n};\n/**\nSelect the next syntactic construct that is larger than the\nselection. Note that this will only work insofar as the language\n[provider](https://codemirror.net/6/docs/ref/#language.language) you use builds up a full\nsyntax tree.\n*/\nconst selectParentSyntax = ({ state, dispatch }) => {\n    let selection = updateSel(state.selection, range => {\n        let tree = syntaxTree(state), stack = tree.resolveStack(range.from, 1);\n        if (range.empty) {\n            let stackBefore = tree.resolveStack(range.from, -1);\n            if (stackBefore.node.from >= stack.node.from && stackBefore.node.to <= stack.node.to)\n                stack = stackBefore;\n        }\n        for (let cur = stack; cur; cur = cur.next) {\n            let { node } = cur;\n            if (((node.from < range.from && node.to >= range.to) ||\n                (node.to > range.to && node.from <= range.from)) &&\n                cur.next)\n                return EditorSelection.range(node.to, node.from);\n        }\n        return range;\n    });\n    if (selection.eq(state.selection))\n        return false;\n    dispatch(setSel(state, selection));\n    return true;\n};\nfunction addCursorVertically(view, forward) {\n    let { state } = view, sel = state.selection, ranges = state.selection.ranges.slice();\n    for (let range of state.selection.ranges) {\n        let line = state.doc.lineAt(range.head);\n        if (forward ? line.to < view.state.doc.length : line.from > 0)\n            for (let cur = range;;) {\n                let next = view.moveVertically(cur, forward);\n                if (next.head < line.from || next.head > line.to) {\n                    if (!ranges.some(r => r.head == next.head))\n                        ranges.push(next);\n                    break;\n                }\n                else if (next.head == cur.head) {\n                    break;\n                }\n                else {\n                    cur = next;\n                }\n            }\n    }\n    if (ranges.length == sel.ranges.length)\n        return false;\n    view.dispatch(setSel(state, EditorSelection.create(ranges, ranges.length - 1)));\n    return true;\n}\n/**\nExpand the selection by adding a cursor above the heads of\ncurrently selected ranges.\n*/\nconst addCursorAbove = view => addCursorVertically(view, false);\n/**\nExpand the selection by adding a cursor below the heads of\ncurrently selected ranges.\n*/\nconst addCursorBelow = view => addCursorVertically(view, true);\n/**\nSimplify the current selection. When multiple ranges are selected,\nreduce it to its main range. Otherwise, if the selection is\nnon-empty, convert it to a cursor selection.\n*/\nconst simplifySelection = ({ state, dispatch }) => {\n    let cur = state.selection, selection = null;\n    if (cur.ranges.length > 1)\n        selection = EditorSelection.create([cur.main]);\n    else if (!cur.main.empty)\n        selection = EditorSelection.create([EditorSelection.cursor(cur.main.head)]);\n    if (!selection)\n        return false;\n    dispatch(setSel(state, selection));\n    return true;\n};\nfunction deleteBy(target, by) {\n    if (target.state.readOnly)\n        return false;\n    let event = \"delete.selection\", { state } = target;\n    let changes = state.changeByRange(range => {\n        let { from, to } = range;\n        if (from == to) {\n            let towards = by(range);\n            if (towards < from) {\n                event = \"delete.backward\";\n                towards = skipAtomic(target, towards, false);\n            }\n            else if (towards > from) {\n                event = \"delete.forward\";\n                towards = skipAtomic(target, towards, true);\n            }\n            from = Math.min(from, towards);\n            to = Math.max(to, towards);\n        }\n        else {\n            from = skipAtomic(target, from, false);\n            to = skipAtomic(target, to, true);\n        }\n        return from == to ? { range } : { changes: { from, to }, range: EditorSelection.cursor(from, from < range.head ? -1 : 1) };\n    });\n    if (changes.changes.empty)\n        return false;\n    target.dispatch(state.update(changes, {\n        scrollIntoView: true,\n        userEvent: event,\n        effects: event == \"delete.selection\" ? EditorView.announce.of(state.phrase(\"Selection deleted\")) : undefined\n    }));\n    return true;\n}\nfunction skipAtomic(target, pos, forward) {\n    if (target instanceof EditorView)\n        for (let ranges of target.state.facet(EditorView.atomicRanges).map(f => f(target)))\n            ranges.between(pos, pos, (from, to) => {\n                if (from < pos && to > pos)\n                    pos = forward ? to : from;\n            });\n    return pos;\n}\nconst deleteByChar = (target, forward, byIndentUnit) => deleteBy(target, range => {\n    let pos = range.from, { state } = target, line = state.doc.lineAt(pos), before, targetPos;\n    if (byIndentUnit && !forward && pos > line.from && pos < line.from + 200 &&\n        !/[^ \\t]/.test(before = line.text.slice(0, pos - line.from))) {\n        if (before[before.length - 1] == \"\\t\")\n            return pos - 1;\n        let col = countColumn(before, state.tabSize), drop = col % getIndentUnit(state) || getIndentUnit(state);\n        for (let i = 0; i < drop && before[before.length - 1 - i] == \" \"; i++)\n            pos--;\n        targetPos = pos;\n    }\n    else {\n        targetPos = findClusterBreak(line.text, pos - line.from, forward, forward) + line.from;\n        if (targetPos == pos && line.number != (forward ? state.doc.lines : 1))\n            targetPos += forward ? 1 : -1;\n        else if (!forward && /[\\ufe00-\\ufe0f]/.test(line.text.slice(targetPos - line.from, pos - line.from)))\n            targetPos = findClusterBreak(line.text, targetPos - line.from, false, false) + line.from;\n    }\n    return targetPos;\n});\n/**\nDelete the selection, or, for cursor selections, the character or\nindentation unit before the cursor.\n*/\nconst deleteCharBackward = view => deleteByChar(view, false, true);\n/**\nDelete the selection or the character before the cursor. Does not\nimplement any extended behavior like deleting whole indentation\nunits in one go.\n*/\nconst deleteCharBackwardStrict = view => deleteByChar(view, false, false);\n/**\nDelete the selection or the character after the cursor.\n*/\nconst deleteCharForward = view => deleteByChar(view, true, false);\nconst deleteByGroup = (target, forward) => deleteBy(target, range => {\n    let pos = range.head, { state } = target, line = state.doc.lineAt(pos);\n    let categorize = state.charCategorizer(pos);\n    for (let cat = null;;) {\n        if (pos == (forward ? line.to : line.from)) {\n            if (pos == range.head && line.number != (forward ? state.doc.lines : 1))\n                pos += forward ? 1 : -1;\n            break;\n        }\n        let next = findClusterBreak(line.text, pos - line.from, forward) + line.from;\n        let nextChar = line.text.slice(Math.min(pos, next) - line.from, Math.max(pos, next) - line.from);\n        let nextCat = categorize(nextChar);\n        if (cat != null && nextCat != cat)\n            break;\n        if (nextChar != \" \" || pos != range.head)\n            cat = nextCat;\n        pos = next;\n    }\n    return pos;\n});\n/**\nDelete the selection or backward until the end of the next\n[group](https://codemirror.net/6/docs/ref/#view.EditorView.moveByGroup), only skipping groups of\nwhitespace when they consist of a single space.\n*/\nconst deleteGroupBackward = target => deleteByGroup(target, false);\n/**\nDelete the selection or forward until the end of the next group.\n*/\nconst deleteGroupForward = target => deleteByGroup(target, true);\n/**\nVariant of [`deleteGroupForward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupForward)\nthat uses the Windows convention of also deleting the whitespace\nafter a word.\n*/\nconst deleteGroupForwardWin = view => deleteBy(view, range => view.moveByChar(range, true, start => toGroupStart(view, range.head, start)).head);\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe end of the line. If the cursor is directly at the end of the\nline, delete the line break after it.\n*/\nconst deleteToLineEnd = view => deleteBy(view, range => {\n    let lineEnd = view.lineBlockAt(range.head).to;\n    return range.head < lineEnd ? lineEnd : Math.min(view.state.doc.length, range.head + 1);\n});\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe start of the line. If the cursor is directly at the start of the\nline, delete the line break before it.\n*/\nconst deleteToLineStart = view => deleteBy(view, range => {\n    let lineStart = view.lineBlockAt(range.head).from;\n    return range.head > lineStart ? lineStart : Math.max(0, range.head - 1);\n});\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe start of the line or the next line wrap before the cursor.\n*/\nconst deleteLineBoundaryBackward = view => deleteBy(view, range => {\n    let lineStart = view.moveToLineBoundary(range, false).head;\n    return range.head > lineStart ? lineStart : Math.max(0, range.head - 1);\n});\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe end of the line or the next line wrap after the cursor.\n*/\nconst deleteLineBoundaryForward = view => deleteBy(view, range => {\n    let lineStart = view.moveToLineBoundary(range, true).head;\n    return range.head < lineStart ? lineStart : Math.min(view.state.doc.length, range.head + 1);\n});\n/**\nDelete all whitespace directly before a line end from the\ndocument.\n*/\nconst deleteTrailingWhitespace = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    let changes = [];\n    for (let pos = 0, prev = \"\", iter = state.doc.iter();;) {\n        iter.next();\n        if (iter.lineBreak || iter.done) {\n            let trailing = prev.search(/\\s+$/);\n            if (trailing > -1)\n                changes.push({ from: pos - (prev.length - trailing), to: pos });\n            if (iter.done)\n                break;\n            prev = \"\";\n        }\n        else {\n            prev = iter.value;\n        }\n        pos += iter.value.length;\n    }\n    if (!changes.length)\n        return false;\n    dispatch(state.update({ changes, userEvent: \"delete\" }));\n    return true;\n};\n/**\nReplace each selection range with a line break, leaving the cursor\non the line before the break.\n*/\nconst splitLine = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    let changes = state.changeByRange(range => {\n        return { changes: { from: range.from, to: range.to, insert: Text.of([\"\", \"\"]) },\n            range: EditorSelection.cursor(range.from) };\n    });\n    dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"input\" }));\n    return true;\n};\n/**\nFlip the characters before and after the cursor(s).\n*/\nconst transposeChars = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    let changes = state.changeByRange(range => {\n        if (!range.empty || range.from == 0 || range.from == state.doc.length)\n            return { range };\n        let pos = range.from, line = state.doc.lineAt(pos);\n        let from = pos == line.from ? pos - 1 : findClusterBreak(line.text, pos - line.from, false) + line.from;\n        let to = pos == line.to ? pos + 1 : findClusterBreak(line.text, pos - line.from, true) + line.from;\n        return { changes: { from, to, insert: state.doc.slice(pos, to).append(state.doc.slice(from, pos)) },\n            range: EditorSelection.cursor(to) };\n    });\n    if (changes.changes.empty)\n        return false;\n    dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"move.character\" }));\n    return true;\n};\nfunction selectedLineBlocks(state) {\n    let blocks = [], upto = -1;\n    for (let range of state.selection.ranges) {\n        let startLine = state.doc.lineAt(range.from), endLine = state.doc.lineAt(range.to);\n        if (!range.empty && range.to == endLine.from)\n            endLine = state.doc.lineAt(range.to - 1);\n        if (upto >= startLine.number) {\n            let prev = blocks[blocks.length - 1];\n            prev.to = endLine.to;\n            prev.ranges.push(range);\n        }\n        else {\n            blocks.push({ from: startLine.from, to: endLine.to, ranges: [range] });\n        }\n        upto = endLine.number + 1;\n    }\n    return blocks;\n}\nfunction moveLine(state, dispatch, forward) {\n    if (state.readOnly)\n        return false;\n    let changes = [], ranges = [];\n    for (let block of selectedLineBlocks(state)) {\n        if (forward ? block.to == state.doc.length : block.from == 0)\n            continue;\n        let nextLine = state.doc.lineAt(forward ? block.to + 1 : block.from - 1);\n        let size = nextLine.length + 1;\n        if (forward) {\n            changes.push({ from: block.to, to: nextLine.to }, { from: block.from, insert: nextLine.text + state.lineBreak });\n            for (let r of block.ranges)\n                ranges.push(EditorSelection.range(Math.min(state.doc.length, r.anchor + size), Math.min(state.doc.length, r.head + size)));\n        }\n        else {\n            changes.push({ from: nextLine.from, to: block.from }, { from: block.to, insert: state.lineBreak + nextLine.text });\n            for (let r of block.ranges)\n                ranges.push(EditorSelection.range(r.anchor - size, r.head - size));\n        }\n    }\n    if (!changes.length)\n        return false;\n    dispatch(state.update({\n        changes,\n        scrollIntoView: true,\n        selection: EditorSelection.create(ranges, state.selection.mainIndex),\n        userEvent: \"move.line\"\n    }));\n    return true;\n}\n/**\nMove the selected lines up one line.\n*/\nconst moveLineUp = ({ state, dispatch }) => moveLine(state, dispatch, false);\n/**\nMove the selected lines down one line.\n*/\nconst moveLineDown = ({ state, dispatch }) => moveLine(state, dispatch, true);\nfunction copyLine(state, dispatch, forward) {\n    if (state.readOnly)\n        return false;\n    let changes = [];\n    for (let block of selectedLineBlocks(state)) {\n        if (forward)\n            changes.push({ from: block.from, insert: state.doc.slice(block.from, block.to) + state.lineBreak });\n        else\n            changes.push({ from: block.to, insert: state.lineBreak + state.doc.slice(block.from, block.to) });\n    }\n    dispatch(state.update({ changes, scrollIntoView: true, userEvent: \"input.copyline\" }));\n    return true;\n}\n/**\nCreate a copy of the selected lines. Keep the selection in the top copy.\n*/\nconst copyLineUp = ({ state, dispatch }) => copyLine(state, dispatch, false);\n/**\nCreate a copy of the selected lines. Keep the selection in the bottom copy.\n*/\nconst copyLineDown = ({ state, dispatch }) => copyLine(state, dispatch, true);\n/**\nDelete selected lines.\n*/\nconst deleteLine = view => {\n    if (view.state.readOnly)\n        return false;\n    let { state } = view, changes = state.changes(selectedLineBlocks(state).map(({ from, to }) => {\n        if (from > 0)\n            from--;\n        else if (to < state.doc.length)\n            to++;\n        return { from, to };\n    }));\n    let selection = updateSel(state.selection, range => {\n        let dist = undefined;\n        if (view.lineWrapping) {\n            let block = view.lineBlockAt(range.head), pos = view.coordsAtPos(range.head, range.assoc || 1);\n            if (pos)\n                dist = (block.bottom + view.documentTop) - pos.bottom + view.defaultLineHeight / 2;\n        }\n        return view.moveVertically(range, true, dist);\n    }).map(changes);\n    view.dispatch({ changes, selection, scrollIntoView: true, userEvent: \"delete.line\" });\n    return true;\n};\n/**\nReplace the selection with a newline.\n*/\nconst insertNewline = ({ state, dispatch }) => {\n    dispatch(state.update(state.replaceSelection(state.lineBreak), { scrollIntoView: true, userEvent: \"input\" }));\n    return true;\n};\n/**\nReplace the selection with a newline and the same amount of\nindentation as the line above.\n*/\nconst insertNewlineKeepIndent = ({ state, dispatch }) => {\n    dispatch(state.update(state.changeByRange(range => {\n        let indent = /^\\s*/.exec(state.doc.lineAt(range.from).text)[0];\n        return {\n            changes: { from: range.from, to: range.to, insert: state.lineBreak + indent },\n            range: EditorSelection.cursor(range.from + indent.length + 1)\n        };\n    }), { scrollIntoView: true, userEvent: \"input\" }));\n    return true;\n};\nfunction isBetweenBrackets(state, pos) {\n    if (/\\(\\)|\\[\\]|\\{\\}/.test(state.sliceDoc(pos - 1, pos + 1)))\n        return { from: pos, to: pos };\n    let context = syntaxTree(state).resolveInner(pos);\n    let before = context.childBefore(pos), after = context.childAfter(pos), closedBy;\n    if (before && after && before.to <= pos && after.from >= pos &&\n        (closedBy = before.type.prop(NodeProp.closedBy)) && closedBy.indexOf(after.name) > -1 &&\n        state.doc.lineAt(before.to).from == state.doc.lineAt(after.from).from &&\n        !/\\S/.test(state.sliceDoc(before.to, after.from)))\n        return { from: before.to, to: after.from };\n    return null;\n}\n/**\nReplace the selection with a newline and indent the newly created\nline(s). If the current line consists only of whitespace, this\nwill also delete that whitespace. When the cursor is between\nmatching brackets, an additional newline will be inserted after\nthe cursor.\n*/\nconst insertNewlineAndIndent = /*@__PURE__*/newlineAndIndent(false);\n/**\nCreate a blank, indented line below the current line.\n*/\nconst insertBlankLine = /*@__PURE__*/newlineAndIndent(true);\nfunction newlineAndIndent(atEof) {\n    return ({ state, dispatch }) => {\n        if (state.readOnly)\n            return false;\n        let changes = state.changeByRange(range => {\n            let { from, to } = range, line = state.doc.lineAt(from);\n            let explode = !atEof && from == to && isBetweenBrackets(state, from);\n            if (atEof)\n                from = to = (to <= line.to ? line : state.doc.lineAt(to)).to;\n            let cx = new IndentContext(state, { simulateBreak: from, simulateDoubleBreak: !!explode });\n            let indent = getIndentation(cx, from);\n            if (indent == null)\n                indent = countColumn(/^\\s*/.exec(state.doc.lineAt(from).text)[0], state.tabSize);\n            while (to < line.to && /\\s/.test(line.text[to - line.from]))\n                to++;\n            if (explode)\n                ({ from, to } = explode);\n            else if (from > line.from && from < line.from + 100 && !/\\S/.test(line.text.slice(0, from)))\n                from = line.from;\n            let insert = [\"\", indentString(state, indent)];\n            if (explode)\n                insert.push(indentString(state, cx.lineIndent(line.from, -1)));\n            return { changes: { from, to, insert: Text.of(insert) },\n                range: EditorSelection.cursor(from + 1 + insert[1].length) };\n        });\n        dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"input\" }));\n        return true;\n    };\n}\nfunction changeBySelectedLine(state, f) {\n    let atLine = -1;\n    return state.changeByRange(range => {\n        let changes = [];\n        for (let pos = range.from; pos <= range.to;) {\n            let line = state.doc.lineAt(pos);\n            if (line.number > atLine && (range.empty || range.to > line.from)) {\n                f(line, changes, range);\n                atLine = line.number;\n            }\n            pos = line.to + 1;\n        }\n        let changeSet = state.changes(changes);\n        return { changes,\n            range: EditorSelection.range(changeSet.mapPos(range.anchor, 1), changeSet.mapPos(range.head, 1)) };\n    });\n}\n/**\nAuto-indent the selected lines. This uses the [indentation service\nfacet](https://codemirror.net/6/docs/ref/#language.indentService) as source for auto-indent\ninformation.\n*/\nconst indentSelection = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    let updated = Object.create(null);\n    let context = new IndentContext(state, { overrideIndentation: start => {\n            let found = updated[start];\n            return found == null ? -1 : found;\n        } });\n    let changes = changeBySelectedLine(state, (line, changes, range) => {\n        let indent = getIndentation(context, line.from);\n        if (indent == null)\n            return;\n        if (!/\\S/.test(line.text))\n            indent = 0;\n        let cur = /^\\s*/.exec(line.text)[0];\n        let norm = indentString(state, indent);\n        if (cur != norm || range.from < line.from + cur.length) {\n            updated[line.from] = indent;\n            changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n        }\n    });\n    if (!changes.changes.empty)\n        dispatch(state.update(changes, { userEvent: \"indent\" }));\n    return true;\n};\n/**\nAdd a [unit](https://codemirror.net/6/docs/ref/#language.indentUnit) of indentation to all selected\nlines.\n*/\nconst indentMore = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    dispatch(state.update(changeBySelectedLine(state, (line, changes) => {\n        changes.push({ from: line.from, insert: state.facet(indentUnit) });\n    }), { userEvent: \"input.indent\" }));\n    return true;\n};\n/**\nRemove a [unit](https://codemirror.net/6/docs/ref/#language.indentUnit) of indentation from all\nselected lines.\n*/\nconst indentLess = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    dispatch(state.update(changeBySelectedLine(state, (line, changes) => {\n        let space = /^\\s*/.exec(line.text)[0];\n        if (!space)\n            return;\n        let col = countColumn(space, state.tabSize), keep = 0;\n        let insert = indentString(state, Math.max(0, col - getIndentUnit(state)));\n        while (keep < space.length && keep < insert.length && space.charCodeAt(keep) == insert.charCodeAt(keep))\n            keep++;\n        changes.push({ from: line.from + keep, to: line.from + space.length, insert: insert.slice(keep) });\n    }), { userEvent: \"delete.dedent\" }));\n    return true;\n};\n/**\nEnables or disables\n[tab-focus mode](https://codemirror.net/6/docs/ref/#view.EditorView.setTabFocusMode). While on, this\nprevents the editor's key bindings from capturing Tab or\nShift-Tab, making it possible for the user to move focus out of\nthe editor with the keyboard.\n*/\nconst toggleTabFocusMode = view => {\n    view.setTabFocusMode();\n    return true;\n};\n/**\nTemporarily enables [tab-focus\nmode](https://codemirror.net/6/docs/ref/#view.EditorView.setTabFocusMode) for two seconds or until\nanother key is pressed.\n*/\nconst temporarilySetTabFocusMode = view => {\n    view.setTabFocusMode(2000);\n    return true;\n};\n/**\nInsert a tab character at the cursor or, if something is selected,\nuse [`indentMore`](https://codemirror.net/6/docs/ref/#commands.indentMore) to indent the entire\nselection.\n*/\nconst insertTab = ({ state, dispatch }) => {\n    if (state.selection.ranges.some(r => !r.empty))\n        return indentMore({ state, dispatch });\n    dispatch(state.update(state.replaceSelection(\"\\t\"), { scrollIntoView: true, userEvent: \"input\" }));\n    return true;\n};\n/**\nArray of key bindings containing the Emacs-style bindings that are\navailable on macOS by default.\n\n - Ctrl-b: [`cursorCharLeft`](https://codemirror.net/6/docs/ref/#commands.cursorCharLeft) ([`selectCharLeft`](https://codemirror.net/6/docs/ref/#commands.selectCharLeft) with Shift)\n - Ctrl-f: [`cursorCharRight`](https://codemirror.net/6/docs/ref/#commands.cursorCharRight) ([`selectCharRight`](https://codemirror.net/6/docs/ref/#commands.selectCharRight) with Shift)\n - Ctrl-p: [`cursorLineUp`](https://codemirror.net/6/docs/ref/#commands.cursorLineUp) ([`selectLineUp`](https://codemirror.net/6/docs/ref/#commands.selectLineUp) with Shift)\n - Ctrl-n: [`cursorLineDown`](https://codemirror.net/6/docs/ref/#commands.cursorLineDown) ([`selectLineDown`](https://codemirror.net/6/docs/ref/#commands.selectLineDown) with Shift)\n - Ctrl-a: [`cursorLineStart`](https://codemirror.net/6/docs/ref/#commands.cursorLineStart) ([`selectLineStart`](https://codemirror.net/6/docs/ref/#commands.selectLineStart) with Shift)\n - Ctrl-e: [`cursorLineEnd`](https://codemirror.net/6/docs/ref/#commands.cursorLineEnd) ([`selectLineEnd`](https://codemirror.net/6/docs/ref/#commands.selectLineEnd) with Shift)\n - Ctrl-d: [`deleteCharForward`](https://codemirror.net/6/docs/ref/#commands.deleteCharForward)\n - Ctrl-h: [`deleteCharBackward`](https://codemirror.net/6/docs/ref/#commands.deleteCharBackward)\n - Ctrl-k: [`deleteToLineEnd`](https://codemirror.net/6/docs/ref/#commands.deleteToLineEnd)\n - Ctrl-Alt-h: [`deleteGroupBackward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupBackward)\n - Ctrl-o: [`splitLine`](https://codemirror.net/6/docs/ref/#commands.splitLine)\n - Ctrl-t: [`transposeChars`](https://codemirror.net/6/docs/ref/#commands.transposeChars)\n - Ctrl-v: [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown)\n - Alt-v: [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp)\n*/\nconst emacsStyleKeymap = [\n    { key: \"Ctrl-b\", run: cursorCharLeft, shift: selectCharLeft, preventDefault: true },\n    { key: \"Ctrl-f\", run: cursorCharRight, shift: selectCharRight },\n    { key: \"Ctrl-p\", run: cursorLineUp, shift: selectLineUp },\n    { key: \"Ctrl-n\", run: cursorLineDown, shift: selectLineDown },\n    { key: \"Ctrl-a\", run: cursorLineStart, shift: selectLineStart },\n    { key: \"Ctrl-e\", run: cursorLineEnd, shift: selectLineEnd },\n    { key: \"Ctrl-d\", run: deleteCharForward },\n    { key: \"Ctrl-h\", run: deleteCharBackward },\n    { key: \"Ctrl-k\", run: deleteToLineEnd },\n    { key: \"Ctrl-Alt-h\", run: deleteGroupBackward },\n    { key: \"Ctrl-o\", run: splitLine },\n    { key: \"Ctrl-t\", run: transposeChars },\n    { key: \"Ctrl-v\", run: cursorPageDown },\n];\n/**\nAn array of key bindings closely sticking to platform-standard or\nwidely used bindings. (This includes the bindings from\n[`emacsStyleKeymap`](https://codemirror.net/6/docs/ref/#commands.emacsStyleKeymap), with their `key`\nproperty changed to `mac`.)\n\n - ArrowLeft: [`cursorCharLeft`](https://codemirror.net/6/docs/ref/#commands.cursorCharLeft) ([`selectCharLeft`](https://codemirror.net/6/docs/ref/#commands.selectCharLeft) with Shift)\n - ArrowRight: [`cursorCharRight`](https://codemirror.net/6/docs/ref/#commands.cursorCharRight) ([`selectCharRight`](https://codemirror.net/6/docs/ref/#commands.selectCharRight) with Shift)\n - Ctrl-ArrowLeft (Alt-ArrowLeft on macOS): [`cursorGroupLeft`](https://codemirror.net/6/docs/ref/#commands.cursorGroupLeft) ([`selectGroupLeft`](https://codemirror.net/6/docs/ref/#commands.selectGroupLeft) with Shift)\n - Ctrl-ArrowRight (Alt-ArrowRight on macOS): [`cursorGroupRight`](https://codemirror.net/6/docs/ref/#commands.cursorGroupRight) ([`selectGroupRight`](https://codemirror.net/6/docs/ref/#commands.selectGroupRight) with Shift)\n - Cmd-ArrowLeft (on macOS): [`cursorLineStart`](https://codemirror.net/6/docs/ref/#commands.cursorLineStart) ([`selectLineStart`](https://codemirror.net/6/docs/ref/#commands.selectLineStart) with Shift)\n - Cmd-ArrowRight (on macOS): [`cursorLineEnd`](https://codemirror.net/6/docs/ref/#commands.cursorLineEnd) ([`selectLineEnd`](https://codemirror.net/6/docs/ref/#commands.selectLineEnd) with Shift)\n - ArrowUp: [`cursorLineUp`](https://codemirror.net/6/docs/ref/#commands.cursorLineUp) ([`selectLineUp`](https://codemirror.net/6/docs/ref/#commands.selectLineUp) with Shift)\n - ArrowDown: [`cursorLineDown`](https://codemirror.net/6/docs/ref/#commands.cursorLineDown) ([`selectLineDown`](https://codemirror.net/6/docs/ref/#commands.selectLineDown) with Shift)\n - Cmd-ArrowUp (on macOS): [`cursorDocStart`](https://codemirror.net/6/docs/ref/#commands.cursorDocStart) ([`selectDocStart`](https://codemirror.net/6/docs/ref/#commands.selectDocStart) with Shift)\n - Cmd-ArrowDown (on macOS): [`cursorDocEnd`](https://codemirror.net/6/docs/ref/#commands.cursorDocEnd) ([`selectDocEnd`](https://codemirror.net/6/docs/ref/#commands.selectDocEnd) with Shift)\n - Ctrl-ArrowUp (on macOS): [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp) ([`selectPageUp`](https://codemirror.net/6/docs/ref/#commands.selectPageUp) with Shift)\n - Ctrl-ArrowDown (on macOS): [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown) ([`selectPageDown`](https://codemirror.net/6/docs/ref/#commands.selectPageDown) with Shift)\n - PageUp: [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp) ([`selectPageUp`](https://codemirror.net/6/docs/ref/#commands.selectPageUp) with Shift)\n - PageDown: [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown) ([`selectPageDown`](https://codemirror.net/6/docs/ref/#commands.selectPageDown) with Shift)\n - Home: [`cursorLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryBackward) ([`selectLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryBackward) with Shift)\n - End: [`cursorLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryForward) ([`selectLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryForward) with Shift)\n - Ctrl-Home (Cmd-Home on macOS): [`cursorDocStart`](https://codemirror.net/6/docs/ref/#commands.cursorDocStart) ([`selectDocStart`](https://codemirror.net/6/docs/ref/#commands.selectDocStart) with Shift)\n - Ctrl-End (Cmd-Home on macOS): [`cursorDocEnd`](https://codemirror.net/6/docs/ref/#commands.cursorDocEnd) ([`selectDocEnd`](https://codemirror.net/6/docs/ref/#commands.selectDocEnd) with Shift)\n - Enter and Shift-Enter: [`insertNewlineAndIndent`](https://codemirror.net/6/docs/ref/#commands.insertNewlineAndIndent)\n - Ctrl-a (Cmd-a on macOS): [`selectAll`](https://codemirror.net/6/docs/ref/#commands.selectAll)\n - Backspace: [`deleteCharBackward`](https://codemirror.net/6/docs/ref/#commands.deleteCharBackward)\n - Delete: [`deleteCharForward`](https://codemirror.net/6/docs/ref/#commands.deleteCharForward)\n - Ctrl-Backspace (Alt-Backspace on macOS): [`deleteGroupBackward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupBackward)\n - Ctrl-Delete (Alt-Delete on macOS): [`deleteGroupForward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupForward)\n - Cmd-Backspace (macOS): [`deleteLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.deleteLineBoundaryBackward).\n - Cmd-Delete (macOS): [`deleteLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.deleteLineBoundaryForward).\n*/\nconst standardKeymap = /*@__PURE__*/[\n    { key: \"ArrowLeft\", run: cursorCharLeft, shift: selectCharLeft, preventDefault: true },\n    { key: \"Mod-ArrowLeft\", mac: \"Alt-ArrowLeft\", run: cursorGroupLeft, shift: selectGroupLeft, preventDefault: true },\n    { mac: \"Cmd-ArrowLeft\", run: cursorLineBoundaryLeft, shift: selectLineBoundaryLeft, preventDefault: true },\n    { key: \"ArrowRight\", run: cursorCharRight, shift: selectCharRight, preventDefault: true },\n    { key: \"Mod-ArrowRight\", mac: \"Alt-ArrowRight\", run: cursorGroupRight, shift: selectGroupRight, preventDefault: true },\n    { mac: \"Cmd-ArrowRight\", run: cursorLineBoundaryRight, shift: selectLineBoundaryRight, preventDefault: true },\n    { key: \"ArrowUp\", run: cursorLineUp, shift: selectLineUp, preventDefault: true },\n    { mac: \"Cmd-ArrowUp\", run: cursorDocStart, shift: selectDocStart },\n    { mac: \"Ctrl-ArrowUp\", run: cursorPageUp, shift: selectPageUp },\n    { key: \"ArrowDown\", run: cursorLineDown, shift: selectLineDown, preventDefault: true },\n    { mac: \"Cmd-ArrowDown\", run: cursorDocEnd, shift: selectDocEnd },\n    { mac: \"Ctrl-ArrowDown\", run: cursorPageDown, shift: selectPageDown },\n    { key: \"PageUp\", run: cursorPageUp, shift: selectPageUp },\n    { key: \"PageDown\", run: cursorPageDown, shift: selectPageDown },\n    { key: \"Home\", run: cursorLineBoundaryBackward, shift: selectLineBoundaryBackward, preventDefault: true },\n    { key: \"Mod-Home\", run: cursorDocStart, shift: selectDocStart },\n    { key: \"End\", run: cursorLineBoundaryForward, shift: selectLineBoundaryForward, preventDefault: true },\n    { key: \"Mod-End\", run: cursorDocEnd, shift: selectDocEnd },\n    { key: \"Enter\", run: insertNewlineAndIndent, shift: insertNewlineAndIndent },\n    { key: \"Mod-a\", run: selectAll },\n    { key: \"Backspace\", run: deleteCharBackward, shift: deleteCharBackward, preventDefault: true },\n    { key: \"Delete\", run: deleteCharForward, preventDefault: true },\n    { key: \"Mod-Backspace\", mac: \"Alt-Backspace\", run: deleteGroupBackward, preventDefault: true },\n    { key: \"Mod-Delete\", mac: \"Alt-Delete\", run: deleteGroupForward, preventDefault: true },\n    { mac: \"Mod-Backspace\", run: deleteLineBoundaryBackward, preventDefault: true },\n    { mac: \"Mod-Delete\", run: deleteLineBoundaryForward, preventDefault: true }\n].concat(/*@__PURE__*/emacsStyleKeymap.map(b => ({ mac: b.key, run: b.run, shift: b.shift })));\n/**\nThe default keymap. Includes all bindings from\n[`standardKeymap`](https://codemirror.net/6/docs/ref/#commands.standardKeymap) plus the following:\n\n- Alt-ArrowLeft (Ctrl-ArrowLeft on macOS): [`cursorSyntaxLeft`](https://codemirror.net/6/docs/ref/#commands.cursorSyntaxLeft) ([`selectSyntaxLeft`](https://codemirror.net/6/docs/ref/#commands.selectSyntaxLeft) with Shift)\n- Alt-ArrowRight (Ctrl-ArrowRight on macOS): [`cursorSyntaxRight`](https://codemirror.net/6/docs/ref/#commands.cursorSyntaxRight) ([`selectSyntaxRight`](https://codemirror.net/6/docs/ref/#commands.selectSyntaxRight) with Shift)\n- Alt-ArrowUp: [`moveLineUp`](https://codemirror.net/6/docs/ref/#commands.moveLineUp)\n- Alt-ArrowDown: [`moveLineDown`](https://codemirror.net/6/docs/ref/#commands.moveLineDown)\n- Shift-Alt-ArrowUp: [`copyLineUp`](https://codemirror.net/6/docs/ref/#commands.copyLineUp)\n- Shift-Alt-ArrowDown: [`copyLineDown`](https://codemirror.net/6/docs/ref/#commands.copyLineDown)\n- Ctrl-Alt-ArrowUp (Cmd-Alt-ArrowUp on macOS): [`addCursorAbove`](https://codemirror.net/6/docs/ref/#commands.addCursorAbove).\n- Ctrl-Alt-ArrowDown (Cmd-Alt-ArrowDown on macOS): [`addCursorBelow`](https://codemirror.net/6/docs/ref/#commands.addCursorBelow).\n- Escape: [`simplifySelection`](https://codemirror.net/6/docs/ref/#commands.simplifySelection)\n- Ctrl-Enter (Cmd-Enter on macOS): [`insertBlankLine`](https://codemirror.net/6/docs/ref/#commands.insertBlankLine)\n- Alt-l (Ctrl-l on macOS): [`selectLine`](https://codemirror.net/6/docs/ref/#commands.selectLine)\n- Ctrl-i (Cmd-i on macOS): [`selectParentSyntax`](https://codemirror.net/6/docs/ref/#commands.selectParentSyntax)\n- Ctrl-[ (Cmd-[ on macOS): [`indentLess`](https://codemirror.net/6/docs/ref/#commands.indentLess)\n- Ctrl-] (Cmd-] on macOS): [`indentMore`](https://codemirror.net/6/docs/ref/#commands.indentMore)\n- Ctrl-Alt-\\\\ (Cmd-Alt-\\\\ on macOS): [`indentSelection`](https://codemirror.net/6/docs/ref/#commands.indentSelection)\n- Shift-Ctrl-k (Shift-Cmd-k on macOS): [`deleteLine`](https://codemirror.net/6/docs/ref/#commands.deleteLine)\n- Shift-Ctrl-\\\\ (Shift-Cmd-\\\\ on macOS): [`cursorMatchingBracket`](https://codemirror.net/6/docs/ref/#commands.cursorMatchingBracket)\n- Ctrl-/ (Cmd-/ on macOS): [`toggleComment`](https://codemirror.net/6/docs/ref/#commands.toggleComment).\n- Shift-Alt-a: [`toggleBlockComment`](https://codemirror.net/6/docs/ref/#commands.toggleBlockComment).\n- Ctrl-m (Alt-Shift-m on macOS): [`toggleTabFocusMode`](https://codemirror.net/6/docs/ref/#commands.toggleTabFocusMode).\n*/\nconst defaultKeymap = /*@__PURE__*/[\n    { key: \"Alt-ArrowLeft\", mac: \"Ctrl-ArrowLeft\", run: cursorSyntaxLeft, shift: selectSyntaxLeft },\n    { key: \"Alt-ArrowRight\", mac: \"Ctrl-ArrowRight\", run: cursorSyntaxRight, shift: selectSyntaxRight },\n    { key: \"Alt-ArrowUp\", run: moveLineUp },\n    { key: \"Shift-Alt-ArrowUp\", run: copyLineUp },\n    { key: \"Alt-ArrowDown\", run: moveLineDown },\n    { key: \"Shift-Alt-ArrowDown\", run: copyLineDown },\n    { key: \"Mod-Alt-ArrowUp\", run: addCursorAbove },\n    { key: \"Mod-Alt-ArrowDown\", run: addCursorBelow },\n    { key: \"Escape\", run: simplifySelection },\n    { key: \"Mod-Enter\", run: insertBlankLine },\n    { key: \"Alt-l\", mac: \"Ctrl-l\", run: selectLine },\n    { key: \"Mod-i\", run: selectParentSyntax, preventDefault: true },\n    { key: \"Mod-[\", run: indentLess },\n    { key: \"Mod-]\", run: indentMore },\n    { key: \"Mod-Alt-\\\\\", run: indentSelection },\n    { key: \"Shift-Mod-k\", run: deleteLine },\n    { key: \"Shift-Mod-\\\\\", run: cursorMatchingBracket },\n    { key: \"Mod-/\", run: toggleComment },\n    { key: \"Alt-A\", run: toggleBlockComment },\n    { key: \"Ctrl-m\", mac: \"Shift-Alt-m\", run: toggleTabFocusMode },\n].concat(standardKeymap);\n/**\nA binding that binds Tab to [`indentMore`](https://codemirror.net/6/docs/ref/#commands.indentMore) and\nShift-Tab to [`indentLess`](https://codemirror.net/6/docs/ref/#commands.indentLess).\nPlease see the [Tab example](../../examples/tab/) before using\nthis.\n*/\nconst indentWithTab = { key: \"Tab\", run: indentMore, shift: indentLess };\n\nexport { addCursorAbove, addCursorBelow, blockComment, blockUncomment, copyLineDown, copyLineUp, cursorCharBackward, cursorCharBackwardLogical, cursorCharForward, cursorCharForwardLogical, cursorCharLeft, cursorCharRight, cursorDocEnd, cursorDocStart, cursorGroupBackward, cursorGroupForward, cursorGroupForwardWin, cursorGroupLeft, cursorGroupRight, cursorLineBoundaryBackward, cursorLineBoundaryForward, cursorLineBoundaryLeft, cursorLineBoundaryRight, cursorLineDown, cursorLineEnd, cursorLineStart, cursorLineUp, cursorMatchingBracket, cursorPageDown, cursorPageUp, cursorSubwordBackward, cursorSubwordForward, cursorSyntaxLeft, cursorSyntaxRight, defaultKeymap, deleteCharBackward, deleteCharBackwardStrict, deleteCharForward, deleteGroupBackward, deleteGroupForward, deleteGroupForwardWin, deleteLine, deleteLineBoundaryBackward, deleteLineBoundaryForward, deleteToLineEnd, deleteToLineStart, deleteTrailingWhitespace, emacsStyleKeymap, history, historyField, historyKeymap, indentLess, indentMore, indentSelection, indentWithTab, insertBlankLine, insertNewline, insertNewlineAndIndent, insertNewlineKeepIndent, insertTab, invertedEffects, isolateHistory, lineComment, lineUncomment, moveLineDown, moveLineUp, redo, redoDepth, redoSelection, selectAll, selectCharBackward, selectCharBackwardLogical, selectCharForward, selectCharForwardLogical, selectCharLeft, selectCharRight, selectDocEnd, selectDocStart, selectGroupBackward, selectGroupForward, selectGroupForwardWin, selectGroupLeft, selectGroupRight, selectLine, selectLineBoundaryBackward, selectLineBoundaryForward, selectLineBoundaryLeft, selectLineBoundaryRight, selectLineDown, selectLineEnd, selectLineStart, selectLineUp, selectMatchingBracket, selectPageDown, selectPageUp, selectParentSyntax, selectSubwordBackward, selectSubwordForward, selectSyntaxLeft, selectSyntaxRight, simplifySelection, splitLine, standardKeymap, temporarilySetTabFocusMode, toggleBlockComment, toggleBlockCommentByLine, toggleComment, toggleLineComment, toggleTabFocusMode, transposeChars, undo, undoDepth, undoSelection };\n","import { showPanel, EditorView, getPanel, Decoration, ViewPlugin, runScopeHandlers } from '@codemirror/view';\nimport { codePointAt, fromCodePoint, codePointSize, StateEffect, StateField, EditorSelection, Facet, combineConfig, CharCategory, RangeSetBuilder, Prec, EditorState, findClusterBreak } from '@codemirror/state';\nimport elt from 'crelt';\n\nconst basicNormalize = typeof String.prototype.normalize == \"function\"\n    ? x => x.normalize(\"NFKD\") : x => x;\n/**\nA search cursor provides an iterator over text matches in a\ndocument.\n*/\nclass SearchCursor {\n    /**\n    Create a text cursor. The query is the search string, `from` to\n    `to` provides the region to search.\n    \n    When `normalize` is given, it will be called, on both the query\n    string and the content it is matched against, before comparing.\n    You can, for example, create a case-insensitive search by\n    passing `s => s.toLowerCase()`.\n    \n    Text is always normalized with\n    [`.normalize(\"NFKD\")`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize)\n    (when supported).\n    */\n    constructor(text, query, from = 0, to = text.length, normalize, test) {\n        this.test = test;\n        /**\n        The current match (only holds a meaningful value after\n        [`next`](https://codemirror.net/6/docs/ref/#search.SearchCursor.next) has been called and when\n        `done` is false).\n        */\n        this.value = { from: 0, to: 0 };\n        /**\n        Whether the end of the iterated region has been reached.\n        */\n        this.done = false;\n        this.matches = [];\n        this.buffer = \"\";\n        this.bufferPos = 0;\n        this.iter = text.iterRange(from, to);\n        this.bufferStart = from;\n        this.normalize = normalize ? x => normalize(basicNormalize(x)) : basicNormalize;\n        this.query = this.normalize(query);\n    }\n    peek() {\n        if (this.bufferPos == this.buffer.length) {\n            this.bufferStart += this.buffer.length;\n            this.iter.next();\n            if (this.iter.done)\n                return -1;\n            this.bufferPos = 0;\n            this.buffer = this.iter.value;\n        }\n        return codePointAt(this.buffer, this.bufferPos);\n    }\n    /**\n    Look for the next match. Updates the iterator's\n    [`value`](https://codemirror.net/6/docs/ref/#search.SearchCursor.value) and\n    [`done`](https://codemirror.net/6/docs/ref/#search.SearchCursor.done) properties. Should be called\n    at least once before using the cursor.\n    */\n    next() {\n        while (this.matches.length)\n            this.matches.pop();\n        return this.nextOverlapping();\n    }\n    /**\n    The `next` method will ignore matches that partially overlap a\n    previous match. This method behaves like `next`, but includes\n    such matches.\n    */\n    nextOverlapping() {\n        for (;;) {\n            let next = this.peek();\n            if (next < 0) {\n                this.done = true;\n                return this;\n            }\n            let str = fromCodePoint(next), start = this.bufferStart + this.bufferPos;\n            this.bufferPos += codePointSize(next);\n            let norm = this.normalize(str);\n            if (norm.length)\n                for (let i = 0, pos = start;; i++) {\n                    let code = norm.charCodeAt(i);\n                    let match = this.match(code, pos, this.bufferPos + this.bufferStart);\n                    if (i == norm.length - 1) {\n                        if (match) {\n                            this.value = match;\n                            return this;\n                        }\n                        break;\n                    }\n                    if (pos == start && i < str.length && str.charCodeAt(i) == code)\n                        pos++;\n                }\n        }\n    }\n    match(code, pos, end) {\n        let match = null;\n        for (let i = 0; i < this.matches.length; i += 2) {\n            let index = this.matches[i], keep = false;\n            if (this.query.charCodeAt(index) == code) {\n                if (index == this.query.length - 1) {\n                    match = { from: this.matches[i + 1], to: end };\n                }\n                else {\n                    this.matches[i]++;\n                    keep = true;\n                }\n            }\n            if (!keep) {\n                this.matches.splice(i, 2);\n                i -= 2;\n            }\n        }\n        if (this.query.charCodeAt(0) == code) {\n            if (this.query.length == 1)\n                match = { from: pos, to: end };\n            else\n                this.matches.push(1, pos);\n        }\n        if (match && this.test && !this.test(match.from, match.to, this.buffer, this.bufferStart))\n            match = null;\n        return match;\n    }\n}\nif (typeof Symbol != \"undefined\")\n    SearchCursor.prototype[Symbol.iterator] = function () { return this; };\n\nconst empty = { from: -1, to: -1, match: /*@__PURE__*//.*/.exec(\"\") };\nconst baseFlags = \"gm\" + (/x/.unicode == null ? \"\" : \"u\");\n/**\nThis class is similar to [`SearchCursor`](https://codemirror.net/6/docs/ref/#search.SearchCursor)\nbut searches for a regular expression pattern instead of a plain\nstring.\n*/\nclass RegExpCursor {\n    /**\n    Create a cursor that will search the given range in the given\n    document. `query` should be the raw pattern (as you'd pass it to\n    `new RegExp`).\n    */\n    constructor(text, query, options, from = 0, to = text.length) {\n        this.text = text;\n        this.to = to;\n        this.curLine = \"\";\n        /**\n        Set to `true` when the cursor has reached the end of the search\n        range.\n        */\n        this.done = false;\n        /**\n        Will contain an object with the extent of the match and the\n        match object when [`next`](https://codemirror.net/6/docs/ref/#search.RegExpCursor.next)\n        sucessfully finds a match.\n        */\n        this.value = empty;\n        if (/\\\\[sWDnr]|\\n|\\r|\\[\\^/.test(query))\n            return new MultilineRegExpCursor(text, query, options, from, to);\n        this.re = new RegExp(query, baseFlags + ((options === null || options === void 0 ? void 0 : options.ignoreCase) ? \"i\" : \"\"));\n        this.test = options === null || options === void 0 ? void 0 : options.test;\n        this.iter = text.iter();\n        let startLine = text.lineAt(from);\n        this.curLineStart = startLine.from;\n        this.matchPos = toCharEnd(text, from);\n        this.getLine(this.curLineStart);\n    }\n    getLine(skip) {\n        this.iter.next(skip);\n        if (this.iter.lineBreak) {\n            this.curLine = \"\";\n        }\n        else {\n            this.curLine = this.iter.value;\n            if (this.curLineStart + this.curLine.length > this.to)\n                this.curLine = this.curLine.slice(0, this.to - this.curLineStart);\n            this.iter.next();\n        }\n    }\n    nextLine() {\n        this.curLineStart = this.curLineStart + this.curLine.length + 1;\n        if (this.curLineStart > this.to)\n            this.curLine = \"\";\n        else\n            this.getLine(0);\n    }\n    /**\n    Move to the next match, if there is one.\n    */\n    next() {\n        for (let off = this.matchPos - this.curLineStart;;) {\n            this.re.lastIndex = off;\n            let match = this.matchPos <= this.to && this.re.exec(this.curLine);\n            if (match) {\n                let from = this.curLineStart + match.index, to = from + match[0].length;\n                this.matchPos = toCharEnd(this.text, to + (from == to ? 1 : 0));\n                if (from == this.curLineStart + this.curLine.length)\n                    this.nextLine();\n                if ((from < to || from > this.value.to) && (!this.test || this.test(from, to, match))) {\n                    this.value = { from, to, match };\n                    return this;\n                }\n                off = this.matchPos - this.curLineStart;\n            }\n            else if (this.curLineStart + this.curLine.length < this.to) {\n                this.nextLine();\n                off = 0;\n            }\n            else {\n                this.done = true;\n                return this;\n            }\n        }\n    }\n}\nconst flattened = /*@__PURE__*/new WeakMap();\n// Reusable (partially) flattened document strings\nclass FlattenedDoc {\n    constructor(from, text) {\n        this.from = from;\n        this.text = text;\n    }\n    get to() { return this.from + this.text.length; }\n    static get(doc, from, to) {\n        let cached = flattened.get(doc);\n        if (!cached || cached.from >= to || cached.to <= from) {\n            let flat = new FlattenedDoc(from, doc.sliceString(from, to));\n            flattened.set(doc, flat);\n            return flat;\n        }\n        if (cached.from == from && cached.to == to)\n            return cached;\n        let { text, from: cachedFrom } = cached;\n        if (cachedFrom > from) {\n            text = doc.sliceString(from, cachedFrom) + text;\n            cachedFrom = from;\n        }\n        if (cached.to < to)\n            text += doc.sliceString(cached.to, to);\n        flattened.set(doc, new FlattenedDoc(cachedFrom, text));\n        return new FlattenedDoc(from, text.slice(from - cachedFrom, to - cachedFrom));\n    }\n}\nclass MultilineRegExpCursor {\n    constructor(text, query, options, from, to) {\n        this.text = text;\n        this.to = to;\n        this.done = false;\n        this.value = empty;\n        this.matchPos = toCharEnd(text, from);\n        this.re = new RegExp(query, baseFlags + ((options === null || options === void 0 ? void 0 : options.ignoreCase) ? \"i\" : \"\"));\n        this.test = options === null || options === void 0 ? void 0 : options.test;\n        this.flat = FlattenedDoc.get(text, from, this.chunkEnd(from + 5000 /* Chunk.Base */));\n    }\n    chunkEnd(pos) {\n        return pos >= this.to ? this.to : this.text.lineAt(pos).to;\n    }\n    next() {\n        for (;;) {\n            let off = this.re.lastIndex = this.matchPos - this.flat.from;\n            let match = this.re.exec(this.flat.text);\n            // Skip empty matches directly after the last match\n            if (match && !match[0] && match.index == off) {\n                this.re.lastIndex = off + 1;\n                match = this.re.exec(this.flat.text);\n            }\n            if (match) {\n                let from = this.flat.from + match.index, to = from + match[0].length;\n                // If a match goes almost to the end of a noncomplete chunk, try\n                // again, since it'll likely be able to match more\n                if ((this.flat.to >= this.to || match.index + match[0].length <= this.flat.text.length - 10) &&\n                    (!this.test || this.test(from, to, match))) {\n                    this.value = { from, to, match };\n                    this.matchPos = toCharEnd(this.text, to + (from == to ? 1 : 0));\n                    return this;\n                }\n            }\n            if (this.flat.to == this.to) {\n                this.done = true;\n                return this;\n            }\n            // Grow the flattened doc\n            this.flat = FlattenedDoc.get(this.text, this.flat.from, this.chunkEnd(this.flat.from + this.flat.text.length * 2));\n        }\n    }\n}\nif (typeof Symbol != \"undefined\") {\n    RegExpCursor.prototype[Symbol.iterator] = MultilineRegExpCursor.prototype[Symbol.iterator] =\n        function () { return this; };\n}\nfunction validRegExp(source) {\n    try {\n        new RegExp(source, baseFlags);\n        return true;\n    }\n    catch (_a) {\n        return false;\n    }\n}\nfunction toCharEnd(text, pos) {\n    if (pos >= text.length)\n        return pos;\n    let line = text.lineAt(pos), next;\n    while (pos < line.to && (next = line.text.charCodeAt(pos - line.from)) >= 0xDC00 && next < 0xE000)\n        pos++;\n    return pos;\n}\n\nfunction createLineDialog(view) {\n    let line = String(view.state.doc.lineAt(view.state.selection.main.head).number);\n    let input = elt(\"input\", { class: \"cm-textfield\", name: \"line\", value: line });\n    let dom = elt(\"form\", {\n        class: \"cm-gotoLine\",\n        onkeydown: (event) => {\n            if (event.keyCode == 27) { // Escape\n                event.preventDefault();\n                view.dispatch({ effects: dialogEffect.of(false) });\n                view.focus();\n            }\n            else if (event.keyCode == 13) { // Enter\n                event.preventDefault();\n                go();\n            }\n        },\n        onsubmit: (event) => {\n            event.preventDefault();\n            go();\n        }\n    }, elt(\"label\", view.state.phrase(\"Go to line\"), \": \", input), \" \", elt(\"button\", { class: \"cm-button\", type: \"submit\" }, view.state.phrase(\"go\")), elt(\"button\", {\n        name: \"close\",\n        onclick: () => {\n            view.dispatch({ effects: dialogEffect.of(false) });\n            view.focus();\n        },\n        \"aria-label\": view.state.phrase(\"close\"),\n        type: \"button\"\n    }, [\"×\"]));\n    function go() {\n        let match = /^([+-])?(\\d+)?(:\\d+)?(%)?$/.exec(input.value);\n        if (!match)\n            return;\n        let { state } = view, startLine = state.doc.lineAt(state.selection.main.head);\n        let [, sign, ln, cl, percent] = match;\n        let col = cl ? +cl.slice(1) : 0;\n        let line = ln ? +ln : startLine.number;\n        if (ln && percent) {\n            let pc = line / 100;\n            if (sign)\n                pc = pc * (sign == \"-\" ? -1 : 1) + (startLine.number / state.doc.lines);\n            line = Math.round(state.doc.lines * pc);\n        }\n        else if (ln && sign) {\n            line = line * (sign == \"-\" ? -1 : 1) + startLine.number;\n        }\n        let docLine = state.doc.line(Math.max(1, Math.min(state.doc.lines, line)));\n        let selection = EditorSelection.cursor(docLine.from + Math.max(0, Math.min(col, docLine.length)));\n        view.dispatch({\n            effects: [dialogEffect.of(false), EditorView.scrollIntoView(selection.from, { y: 'center' })],\n            selection,\n        });\n        view.focus();\n    }\n    return { dom };\n}\nconst dialogEffect = /*@__PURE__*/StateEffect.define();\nconst dialogField = /*@__PURE__*/StateField.define({\n    create() { return true; },\n    update(value, tr) {\n        for (let e of tr.effects)\n            if (e.is(dialogEffect))\n                value = e.value;\n        return value;\n    },\n    provide: f => showPanel.from(f, val => val ? createLineDialog : null)\n});\n/**\nCommand that shows a dialog asking the user for a line number, and\nwhen a valid position is provided, moves the cursor to that line.\n\nSupports line numbers, relative line offsets prefixed with `+` or\n`-`, document percentages suffixed with `%`, and an optional\ncolumn position by adding `:` and a second number after the line\nnumber.\n*/\nconst gotoLine = view => {\n    let panel = getPanel(view, createLineDialog);\n    if (!panel) {\n        let effects = [dialogEffect.of(true)];\n        if (view.state.field(dialogField, false) == null)\n            effects.push(StateEffect.appendConfig.of([dialogField, baseTheme$1]));\n        view.dispatch({ effects });\n        panel = getPanel(view, createLineDialog);\n    }\n    if (panel)\n        panel.dom.querySelector(\"input\").select();\n    return true;\n};\nconst baseTheme$1 = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-panel.cm-gotoLine\": {\n        padding: \"2px 6px 4px\",\n        position: \"relative\",\n        \"& label\": { fontSize: \"80%\" },\n        \"& [name=close]\": {\n            position: \"absolute\",\n            top: \"0\", bottom: \"0\",\n            right: \"4px\",\n            backgroundColor: \"inherit\",\n            border: \"none\",\n            font: \"inherit\",\n            padding: \"0\"\n        }\n    }\n});\n\nconst defaultHighlightOptions = {\n    highlightWordAroundCursor: false,\n    minSelectionLength: 1,\n    maxMatches: 100,\n    wholeWords: false\n};\nconst highlightConfig = /*@__PURE__*/Facet.define({\n    combine(options) {\n        return combineConfig(options, defaultHighlightOptions, {\n            highlightWordAroundCursor: (a, b) => a || b,\n            minSelectionLength: Math.min,\n            maxMatches: Math.min\n        });\n    }\n});\n/**\nThis extension highlights text that matches the selection. It uses\nthe `\"cm-selectionMatch\"` class for the highlighting. When\n`highlightWordAroundCursor` is enabled, the word at the cursor\nitself will be highlighted with `\"cm-selectionMatch-main\"`.\n*/\nfunction highlightSelectionMatches(options) {\n    let ext = [defaultTheme, matchHighlighter];\n    if (options)\n        ext.push(highlightConfig.of(options));\n    return ext;\n}\nconst matchDeco = /*@__PURE__*/Decoration.mark({ class: \"cm-selectionMatch\" });\nconst mainMatchDeco = /*@__PURE__*/Decoration.mark({ class: \"cm-selectionMatch cm-selectionMatch-main\" });\n// Whether the characters directly outside the given positions are non-word characters\nfunction insideWordBoundaries(check, state, from, to) {\n    return (from == 0 || check(state.sliceDoc(from - 1, from)) != CharCategory.Word) &&\n        (to == state.doc.length || check(state.sliceDoc(to, to + 1)) != CharCategory.Word);\n}\n// Whether the characters directly at the given positions are word characters\nfunction insideWord(check, state, from, to) {\n    return check(state.sliceDoc(from, from + 1)) == CharCategory.Word\n        && check(state.sliceDoc(to - 1, to)) == CharCategory.Word;\n}\nconst matchHighlighter = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.decorations = this.getDeco(view);\n    }\n    update(update) {\n        if (update.selectionSet || update.docChanged || update.viewportChanged)\n            this.decorations = this.getDeco(update.view);\n    }\n    getDeco(view) {\n        let conf = view.state.facet(highlightConfig);\n        let { state } = view, sel = state.selection;\n        if (sel.ranges.length > 1)\n            return Decoration.none;\n        let range = sel.main, query, check = null;\n        if (range.empty) {\n            if (!conf.highlightWordAroundCursor)\n                return Decoration.none;\n            let word = state.wordAt(range.head);\n            if (!word)\n                return Decoration.none;\n            check = state.charCategorizer(range.head);\n            query = state.sliceDoc(word.from, word.to);\n        }\n        else {\n            let len = range.to - range.from;\n            if (len < conf.minSelectionLength || len > 200)\n                return Decoration.none;\n            if (conf.wholeWords) {\n                query = state.sliceDoc(range.from, range.to); // TODO: allow and include leading/trailing space?\n                check = state.charCategorizer(range.head);\n                if (!(insideWordBoundaries(check, state, range.from, range.to) &&\n                    insideWord(check, state, range.from, range.to)))\n                    return Decoration.none;\n            }\n            else {\n                query = state.sliceDoc(range.from, range.to);\n                if (!query)\n                    return Decoration.none;\n            }\n        }\n        let deco = [];\n        for (let part of view.visibleRanges) {\n            let cursor = new SearchCursor(state.doc, query, part.from, part.to);\n            while (!cursor.next().done) {\n                let { from, to } = cursor.value;\n                if (!check || insideWordBoundaries(check, state, from, to)) {\n                    if (range.empty && from <= range.from && to >= range.to)\n                        deco.push(mainMatchDeco.range(from, to));\n                    else if (from >= range.to || to <= range.from)\n                        deco.push(matchDeco.range(from, to));\n                    if (deco.length > conf.maxMatches)\n                        return Decoration.none;\n                }\n            }\n        }\n        return Decoration.set(deco);\n    }\n}, {\n    decorations: v => v.decorations\n});\nconst defaultTheme = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-selectionMatch\": { backgroundColor: \"#99ff7780\" },\n    \".cm-searchMatch .cm-selectionMatch\": { backgroundColor: \"transparent\" }\n});\n// Select the words around the cursors.\nconst selectWord = ({ state, dispatch }) => {\n    let { selection } = state;\n    let newSel = EditorSelection.create(selection.ranges.map(range => state.wordAt(range.head) || EditorSelection.cursor(range.head)), selection.mainIndex);\n    if (newSel.eq(selection))\n        return false;\n    dispatch(state.update({ selection: newSel }));\n    return true;\n};\n// Find next occurrence of query relative to last cursor. Wrap around\n// the document if there are no more matches.\nfunction findNextOccurrence(state, query) {\n    let { main, ranges } = state.selection;\n    let word = state.wordAt(main.head), fullWord = word && word.from == main.from && word.to == main.to;\n    for (let cycled = false, cursor = new SearchCursor(state.doc, query, ranges[ranges.length - 1].to);;) {\n        cursor.next();\n        if (cursor.done) {\n            if (cycled)\n                return null;\n            cursor = new SearchCursor(state.doc, query, 0, Math.max(0, ranges[ranges.length - 1].from - 1));\n            cycled = true;\n        }\n        else {\n            if (cycled && ranges.some(r => r.from == cursor.value.from))\n                continue;\n            if (fullWord) {\n                let word = state.wordAt(cursor.value.from);\n                if (!word || word.from != cursor.value.from || word.to != cursor.value.to)\n                    continue;\n            }\n            return cursor.value;\n        }\n    }\n}\n/**\nSelect next occurrence of the current selection. Expand selection\nto the surrounding word when the selection is empty.\n*/\nconst selectNextOccurrence = ({ state, dispatch }) => {\n    let { ranges } = state.selection;\n    if (ranges.some(sel => sel.from === sel.to))\n        return selectWord({ state, dispatch });\n    let searchedText = state.sliceDoc(ranges[0].from, ranges[0].to);\n    if (state.selection.ranges.some(r => state.sliceDoc(r.from, r.to) != searchedText))\n        return false;\n    let range = findNextOccurrence(state, searchedText);\n    if (!range)\n        return false;\n    dispatch(state.update({\n        selection: state.selection.addRange(EditorSelection.range(range.from, range.to), false),\n        effects: EditorView.scrollIntoView(range.to)\n    }));\n    return true;\n};\n\nconst searchConfigFacet = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            top: false,\n            caseSensitive: false,\n            literal: false,\n            regexp: false,\n            wholeWord: false,\n            createPanel: view => new SearchPanel(view),\n            scrollToMatch: range => EditorView.scrollIntoView(range)\n        });\n    }\n});\n/**\nAdd search state to the editor configuration, and optionally\nconfigure the search extension.\n([`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel) will automatically\nenable this if it isn't already on).\n*/\nfunction search(config) {\n    return config ? [searchConfigFacet.of(config), searchExtensions] : searchExtensions;\n}\n/**\nA search query. Part of the editor's search state.\n*/\nclass SearchQuery {\n    /**\n    Create a query object.\n    */\n    constructor(config) {\n        this.search = config.search;\n        this.caseSensitive = !!config.caseSensitive;\n        this.literal = !!config.literal;\n        this.regexp = !!config.regexp;\n        this.replace = config.replace || \"\";\n        this.valid = !!this.search && (!this.regexp || validRegExp(this.search));\n        this.unquoted = this.unquote(this.search);\n        this.wholeWord = !!config.wholeWord;\n    }\n    /**\n    @internal\n    */\n    unquote(text) {\n        return this.literal ? text :\n            text.replace(/\\\\([nrt\\\\])/g, (_, ch) => ch == \"n\" ? \"\\n\" : ch == \"r\" ? \"\\r\" : ch == \"t\" ? \"\\t\" : \"\\\\\");\n    }\n    /**\n    Compare this query to another query.\n    */\n    eq(other) {\n        return this.search == other.search && this.replace == other.replace &&\n            this.caseSensitive == other.caseSensitive && this.regexp == other.regexp &&\n            this.wholeWord == other.wholeWord;\n    }\n    /**\n    @internal\n    */\n    create() {\n        return this.regexp ? new RegExpQuery(this) : new StringQuery(this);\n    }\n    /**\n    Get a search cursor for this query, searching through the given\n    range in the given state.\n    */\n    getCursor(state, from = 0, to) {\n        let st = state.doc ? state : EditorState.create({ doc: state });\n        if (to == null)\n            to = st.doc.length;\n        return this.regexp ? regexpCursor(this, st, from, to) : stringCursor(this, st, from, to);\n    }\n}\nclass QueryType {\n    constructor(spec) {\n        this.spec = spec;\n    }\n}\nfunction stringCursor(spec, state, from, to) {\n    return new SearchCursor(state.doc, spec.unquoted, from, to, spec.caseSensitive ? undefined : x => x.toLowerCase(), spec.wholeWord ? stringWordTest(state.doc, state.charCategorizer(state.selection.main.head)) : undefined);\n}\nfunction stringWordTest(doc, categorizer) {\n    return (from, to, buf, bufPos) => {\n        if (bufPos > from || bufPos + buf.length < to) {\n            bufPos = Math.max(0, from - 2);\n            buf = doc.sliceString(bufPos, Math.min(doc.length, to + 2));\n        }\n        return (categorizer(charBefore(buf, from - bufPos)) != CharCategory.Word ||\n            categorizer(charAfter(buf, from - bufPos)) != CharCategory.Word) &&\n            (categorizer(charAfter(buf, to - bufPos)) != CharCategory.Word ||\n                categorizer(charBefore(buf, to - bufPos)) != CharCategory.Word);\n    };\n}\nclass StringQuery extends QueryType {\n    constructor(spec) {\n        super(spec);\n    }\n    nextMatch(state, curFrom, curTo) {\n        let cursor = stringCursor(this.spec, state, curTo, state.doc.length).nextOverlapping();\n        if (cursor.done) {\n            let end = Math.min(state.doc.length, curFrom + this.spec.unquoted.length);\n            cursor = stringCursor(this.spec, state, 0, end).nextOverlapping();\n        }\n        return cursor.done || cursor.value.from == curFrom && cursor.value.to == curTo ? null : cursor.value;\n    }\n    // Searching in reverse is, rather than implementing an inverted search\n    // cursor, done by scanning chunk after chunk forward.\n    prevMatchInRange(state, from, to) {\n        for (let pos = to;;) {\n            let start = Math.max(from, pos - 10000 /* FindPrev.ChunkSize */ - this.spec.unquoted.length);\n            let cursor = stringCursor(this.spec, state, start, pos), range = null;\n            while (!cursor.nextOverlapping().done)\n                range = cursor.value;\n            if (range)\n                return range;\n            if (start == from)\n                return null;\n            pos -= 10000 /* FindPrev.ChunkSize */;\n        }\n    }\n    prevMatch(state, curFrom, curTo) {\n        let found = this.prevMatchInRange(state, 0, curFrom);\n        if (!found)\n            found = this.prevMatchInRange(state, Math.max(0, curTo - this.spec.unquoted.length), state.doc.length);\n        return found && (found.from != curFrom || found.to != curTo) ? found : null;\n    }\n    getReplacement(_result) { return this.spec.unquote(this.spec.replace); }\n    matchAll(state, limit) {\n        let cursor = stringCursor(this.spec, state, 0, state.doc.length), ranges = [];\n        while (!cursor.next().done) {\n            if (ranges.length >= limit)\n                return null;\n            ranges.push(cursor.value);\n        }\n        return ranges;\n    }\n    highlight(state, from, to, add) {\n        let cursor = stringCursor(this.spec, state, Math.max(0, from - this.spec.unquoted.length), Math.min(to + this.spec.unquoted.length, state.doc.length));\n        while (!cursor.next().done)\n            add(cursor.value.from, cursor.value.to);\n    }\n}\nfunction regexpCursor(spec, state, from, to) {\n    return new RegExpCursor(state.doc, spec.search, {\n        ignoreCase: !spec.caseSensitive,\n        test: spec.wholeWord ? regexpWordTest(state.charCategorizer(state.selection.main.head)) : undefined\n    }, from, to);\n}\nfunction charBefore(str, index) {\n    return str.slice(findClusterBreak(str, index, false), index);\n}\nfunction charAfter(str, index) {\n    return str.slice(index, findClusterBreak(str, index));\n}\nfunction regexpWordTest(categorizer) {\n    return (_from, _to, match) => !match[0].length ||\n        (categorizer(charBefore(match.input, match.index)) != CharCategory.Word ||\n            categorizer(charAfter(match.input, match.index)) != CharCategory.Word) &&\n            (categorizer(charAfter(match.input, match.index + match[0].length)) != CharCategory.Word ||\n                categorizer(charBefore(match.input, match.index + match[0].length)) != CharCategory.Word);\n}\nclass RegExpQuery extends QueryType {\n    nextMatch(state, curFrom, curTo) {\n        let cursor = regexpCursor(this.spec, state, curTo, state.doc.length).next();\n        if (cursor.done)\n            cursor = regexpCursor(this.spec, state, 0, curFrom).next();\n        return cursor.done ? null : cursor.value;\n    }\n    prevMatchInRange(state, from, to) {\n        for (let size = 1;; size++) {\n            let start = Math.max(from, to - size * 10000 /* FindPrev.ChunkSize */);\n            let cursor = regexpCursor(this.spec, state, start, to), range = null;\n            while (!cursor.next().done)\n                range = cursor.value;\n            if (range && (start == from || range.from > start + 10))\n                return range;\n            if (start == from)\n                return null;\n        }\n    }\n    prevMatch(state, curFrom, curTo) {\n        return this.prevMatchInRange(state, 0, curFrom) ||\n            this.prevMatchInRange(state, curTo, state.doc.length);\n    }\n    getReplacement(result) {\n        return this.spec.unquote(this.spec.replace).replace(/\\$([$&]|\\d+)/g, (m, i) => {\n            if (i == \"&\")\n                return result.match[0];\n            if (i == \"$\")\n                return \"$\";\n            for (let l = i.length; l > 0; l--) {\n                let n = +i.slice(0, l);\n                if (n > 0 && n < result.match.length)\n                    return result.match[n] + i.slice(l);\n            }\n            return m;\n        });\n    }\n    matchAll(state, limit) {\n        let cursor = regexpCursor(this.spec, state, 0, state.doc.length), ranges = [];\n        while (!cursor.next().done) {\n            if (ranges.length >= limit)\n                return null;\n            ranges.push(cursor.value);\n        }\n        return ranges;\n    }\n    highlight(state, from, to, add) {\n        let cursor = regexpCursor(this.spec, state, Math.max(0, from - 250 /* RegExp.HighlightMargin */), Math.min(to + 250 /* RegExp.HighlightMargin */, state.doc.length));\n        while (!cursor.next().done)\n            add(cursor.value.from, cursor.value.to);\n    }\n}\n/**\nA state effect that updates the current search query. Note that\nthis only has an effect if the search state has been initialized\n(by including [`search`](https://codemirror.net/6/docs/ref/#search.search) in your configuration or\nby running [`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel) at least\nonce).\n*/\nconst setSearchQuery = /*@__PURE__*/StateEffect.define();\nconst togglePanel = /*@__PURE__*/StateEffect.define();\nconst searchState = /*@__PURE__*/StateField.define({\n    create(state) {\n        return new SearchState(defaultQuery(state).create(), null);\n    },\n    update(value, tr) {\n        for (let effect of tr.effects) {\n            if (effect.is(setSearchQuery))\n                value = new SearchState(effect.value.create(), value.panel);\n            else if (effect.is(togglePanel))\n                value = new SearchState(value.query, effect.value ? createSearchPanel : null);\n        }\n        return value;\n    },\n    provide: f => showPanel.from(f, val => val.panel)\n});\n/**\nGet the current search query from an editor state.\n*/\nfunction getSearchQuery(state) {\n    let curState = state.field(searchState, false);\n    return curState ? curState.query.spec : defaultQuery(state);\n}\n/**\nQuery whether the search panel is open in the given editor state.\n*/\nfunction searchPanelOpen(state) {\n    var _a;\n    return ((_a = state.field(searchState, false)) === null || _a === void 0 ? void 0 : _a.panel) != null;\n}\nclass SearchState {\n    constructor(query, panel) {\n        this.query = query;\n        this.panel = panel;\n    }\n}\nconst matchMark = /*@__PURE__*/Decoration.mark({ class: \"cm-searchMatch\" }), selectedMatchMark = /*@__PURE__*/Decoration.mark({ class: \"cm-searchMatch cm-searchMatch-selected\" });\nconst searchHighlighter = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.decorations = this.highlight(view.state.field(searchState));\n    }\n    update(update) {\n        let state = update.state.field(searchState);\n        if (state != update.startState.field(searchState) || update.docChanged || update.selectionSet || update.viewportChanged)\n            this.decorations = this.highlight(state);\n    }\n    highlight({ query, panel }) {\n        if (!panel || !query.spec.valid)\n            return Decoration.none;\n        let { view } = this;\n        let builder = new RangeSetBuilder();\n        for (let i = 0, ranges = view.visibleRanges, l = ranges.length; i < l; i++) {\n            let { from, to } = ranges[i];\n            while (i < l - 1 && to > ranges[i + 1].from - 2 * 250 /* RegExp.HighlightMargin */)\n                to = ranges[++i].to;\n            query.highlight(view.state, from, to, (from, to) => {\n                let selected = view.state.selection.ranges.some(r => r.from == from && r.to == to);\n                builder.add(from, to, selected ? selectedMatchMark : matchMark);\n            });\n        }\n        return builder.finish();\n    }\n}, {\n    decorations: v => v.decorations\n});\nfunction searchCommand(f) {\n    return view => {\n        let state = view.state.field(searchState, false);\n        return state && state.query.spec.valid ? f(view, state) : openSearchPanel(view);\n    };\n}\n/**\nOpen the search panel if it isn't already open, and move the\nselection to the first match after the current main selection.\nWill wrap around to the start of the document when it reaches the\nend.\n*/\nconst findNext = /*@__PURE__*/searchCommand((view, { query }) => {\n    let { to } = view.state.selection.main;\n    let next = query.nextMatch(view.state, to, to);\n    if (!next)\n        return false;\n    let selection = EditorSelection.single(next.from, next.to);\n    let config = view.state.facet(searchConfigFacet);\n    view.dispatch({\n        selection,\n        effects: [announceMatch(view, next), config.scrollToMatch(selection.main, view)],\n        userEvent: \"select.search\"\n    });\n    selectSearchInput(view);\n    return true;\n});\n/**\nMove the selection to the previous instance of the search query,\nbefore the current main selection. Will wrap past the start\nof the document to start searching at the end again.\n*/\nconst findPrevious = /*@__PURE__*/searchCommand((view, { query }) => {\n    let { state } = view, { from } = state.selection.main;\n    let prev = query.prevMatch(state, from, from);\n    if (!prev)\n        return false;\n    let selection = EditorSelection.single(prev.from, prev.to);\n    let config = view.state.facet(searchConfigFacet);\n    view.dispatch({\n        selection,\n        effects: [announceMatch(view, prev), config.scrollToMatch(selection.main, view)],\n        userEvent: \"select.search\"\n    });\n    selectSearchInput(view);\n    return true;\n});\n/**\nSelect all instances of the search query.\n*/\nconst selectMatches = /*@__PURE__*/searchCommand((view, { query }) => {\n    let ranges = query.matchAll(view.state, 1000);\n    if (!ranges || !ranges.length)\n        return false;\n    view.dispatch({\n        selection: EditorSelection.create(ranges.map(r => EditorSelection.range(r.from, r.to))),\n        userEvent: \"select.search.matches\"\n    });\n    return true;\n});\n/**\nSelect all instances of the currently selected text.\n*/\nconst selectSelectionMatches = ({ state, dispatch }) => {\n    let sel = state.selection;\n    if (sel.ranges.length > 1 || sel.main.empty)\n        return false;\n    let { from, to } = sel.main;\n    let ranges = [], main = 0;\n    for (let cur = new SearchCursor(state.doc, state.sliceDoc(from, to)); !cur.next().done;) {\n        if (ranges.length > 1000)\n            return false;\n        if (cur.value.from == from)\n            main = ranges.length;\n        ranges.push(EditorSelection.range(cur.value.from, cur.value.to));\n    }\n    dispatch(state.update({\n        selection: EditorSelection.create(ranges, main),\n        userEvent: \"select.search.matches\"\n    }));\n    return true;\n};\n/**\nReplace the current match of the search query.\n*/\nconst replaceNext = /*@__PURE__*/searchCommand((view, { query }) => {\n    let { state } = view, { from, to } = state.selection.main;\n    if (state.readOnly)\n        return false;\n    let match = query.nextMatch(state, from, from);\n    if (!match)\n        return false;\n    let next = match;\n    let changes = [], selection, replacement;\n    let effects = [];\n    if (next.from == from && next.to == to) {\n        replacement = state.toText(query.getReplacement(next));\n        changes.push({ from: next.from, to: next.to, insert: replacement });\n        next = query.nextMatch(state, next.from, next.to);\n        effects.push(EditorView.announce.of(state.phrase(\"replaced match on line $\", state.doc.lineAt(from).number) + \".\"));\n    }\n    let changeSet = view.state.changes(changes);\n    if (next) {\n        selection = EditorSelection.single(next.from, next.to).map(changeSet);\n        effects.push(announceMatch(view, next));\n        effects.push(state.facet(searchConfigFacet).scrollToMatch(selection.main, view));\n    }\n    view.dispatch({\n        changes: changeSet,\n        selection,\n        effects,\n        userEvent: \"input.replace\"\n    });\n    return true;\n});\n/**\nReplace all instances of the search query with the given\nreplacement.\n*/\nconst replaceAll = /*@__PURE__*/searchCommand((view, { query }) => {\n    if (view.state.readOnly)\n        return false;\n    let changes = query.matchAll(view.state, 1e9).map(match => {\n        let { from, to } = match;\n        return { from, to, insert: query.getReplacement(match) };\n    });\n    if (!changes.length)\n        return false;\n    let announceText = view.state.phrase(\"replaced $ matches\", changes.length) + \".\";\n    view.dispatch({\n        changes,\n        effects: EditorView.announce.of(announceText),\n        userEvent: \"input.replace.all\"\n    });\n    return true;\n});\nfunction createSearchPanel(view) {\n    return view.state.facet(searchConfigFacet).createPanel(view);\n}\nfunction defaultQuery(state, fallback) {\n    var _a, _b, _c, _d, _e;\n    let sel = state.selection.main;\n    let selText = sel.empty || sel.to > sel.from + 100 ? \"\" : state.sliceDoc(sel.from, sel.to);\n    if (fallback && !selText)\n        return fallback;\n    let config = state.facet(searchConfigFacet);\n    return new SearchQuery({\n        search: ((_a = fallback === null || fallback === void 0 ? void 0 : fallback.literal) !== null && _a !== void 0 ? _a : config.literal) ? selText : selText.replace(/\\n/g, \"\\\\n\"),\n        caseSensitive: (_b = fallback === null || fallback === void 0 ? void 0 : fallback.caseSensitive) !== null && _b !== void 0 ? _b : config.caseSensitive,\n        literal: (_c = fallback === null || fallback === void 0 ? void 0 : fallback.literal) !== null && _c !== void 0 ? _c : config.literal,\n        regexp: (_d = fallback === null || fallback === void 0 ? void 0 : fallback.regexp) !== null && _d !== void 0 ? _d : config.regexp,\n        wholeWord: (_e = fallback === null || fallback === void 0 ? void 0 : fallback.wholeWord) !== null && _e !== void 0 ? _e : config.wholeWord\n    });\n}\nfunction getSearchInput(view) {\n    let panel = getPanel(view, createSearchPanel);\n    return panel && panel.dom.querySelector(\"[main-field]\");\n}\nfunction selectSearchInput(view) {\n    let input = getSearchInput(view);\n    if (input && input == view.root.activeElement)\n        input.select();\n}\n/**\nMake sure the search panel is open and focused.\n*/\nconst openSearchPanel = view => {\n    let state = view.state.field(searchState, false);\n    if (state && state.panel) {\n        let searchInput = getSearchInput(view);\n        if (searchInput && searchInput != view.root.activeElement) {\n            let query = defaultQuery(view.state, state.query.spec);\n            if (query.valid)\n                view.dispatch({ effects: setSearchQuery.of(query) });\n            searchInput.focus();\n            searchInput.select();\n        }\n    }\n    else {\n        view.dispatch({ effects: [\n                togglePanel.of(true),\n                state ? setSearchQuery.of(defaultQuery(view.state, state.query.spec)) : StateEffect.appendConfig.of(searchExtensions)\n            ] });\n    }\n    return true;\n};\n/**\nClose the search panel.\n*/\nconst closeSearchPanel = view => {\n    let state = view.state.field(searchState, false);\n    if (!state || !state.panel)\n        return false;\n    let panel = getPanel(view, createSearchPanel);\n    if (panel && panel.dom.contains(view.root.activeElement))\n        view.focus();\n    view.dispatch({ effects: togglePanel.of(false) });\n    return true;\n};\n/**\nDefault search-related key bindings.\n\n - Mod-f: [`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel)\n - F3, Mod-g: [`findNext`](https://codemirror.net/6/docs/ref/#search.findNext)\n - Shift-F3, Shift-Mod-g: [`findPrevious`](https://codemirror.net/6/docs/ref/#search.findPrevious)\n - Mod-Alt-g: [`gotoLine`](https://codemirror.net/6/docs/ref/#search.gotoLine)\n - Mod-d: [`selectNextOccurrence`](https://codemirror.net/6/docs/ref/#search.selectNextOccurrence)\n*/\nconst searchKeymap = [\n    { key: \"Mod-f\", run: openSearchPanel, scope: \"editor search-panel\" },\n    { key: \"F3\", run: findNext, shift: findPrevious, scope: \"editor search-panel\", preventDefault: true },\n    { key: \"Mod-g\", run: findNext, shift: findPrevious, scope: \"editor search-panel\", preventDefault: true },\n    { key: \"Escape\", run: closeSearchPanel, scope: \"editor search-panel\" },\n    { key: \"Mod-Shift-l\", run: selectSelectionMatches },\n    { key: \"Mod-Alt-g\", run: gotoLine },\n    { key: \"Mod-d\", run: selectNextOccurrence, preventDefault: true },\n];\nclass SearchPanel {\n    constructor(view) {\n        this.view = view;\n        let query = this.query = view.state.field(searchState).query.spec;\n        this.commit = this.commit.bind(this);\n        this.searchField = elt(\"input\", {\n            value: query.search,\n            placeholder: phrase(view, \"Find\"),\n            \"aria-label\": phrase(view, \"Find\"),\n            class: \"cm-textfield\",\n            name: \"search\",\n            form: \"\",\n            \"main-field\": \"true\",\n            onchange: this.commit,\n            onkeyup: this.commit\n        });\n        this.replaceField = elt(\"input\", {\n            value: query.replace,\n            placeholder: phrase(view, \"Replace\"),\n            \"aria-label\": phrase(view, \"Replace\"),\n            class: \"cm-textfield\",\n            name: \"replace\",\n            form: \"\",\n            onchange: this.commit,\n            onkeyup: this.commit\n        });\n        this.caseField = elt(\"input\", {\n            type: \"checkbox\",\n            name: \"case\",\n            form: \"\",\n            checked: query.caseSensitive,\n            onchange: this.commit\n        });\n        this.reField = elt(\"input\", {\n            type: \"checkbox\",\n            name: \"re\",\n            form: \"\",\n            checked: query.regexp,\n            onchange: this.commit\n        });\n        this.wordField = elt(\"input\", {\n            type: \"checkbox\",\n            name: \"word\",\n            form: \"\",\n            checked: query.wholeWord,\n            onchange: this.commit\n        });\n        function button(name, onclick, content) {\n            return elt(\"button\", { class: \"cm-button\", name, onclick, type: \"button\" }, content);\n        }\n        this.dom = elt(\"div\", { onkeydown: (e) => this.keydown(e), class: \"cm-search\" }, [\n            this.searchField,\n            button(\"next\", () => findNext(view), [phrase(view, \"next\")]),\n            button(\"prev\", () => findPrevious(view), [phrase(view, \"previous\")]),\n            button(\"select\", () => selectMatches(view), [phrase(view, \"all\")]),\n            elt(\"label\", null, [this.caseField, phrase(view, \"match case\")]),\n            elt(\"label\", null, [this.reField, phrase(view, \"regexp\")]),\n            elt(\"label\", null, [this.wordField, phrase(view, \"by word\")]),\n            ...view.state.readOnly ? [] : [\n                elt(\"br\"),\n                this.replaceField,\n                button(\"replace\", () => replaceNext(view), [phrase(view, \"replace\")]),\n                button(\"replaceAll\", () => replaceAll(view), [phrase(view, \"replace all\")])\n            ],\n            elt(\"button\", {\n                name: \"close\",\n                onclick: () => closeSearchPanel(view),\n                \"aria-label\": phrase(view, \"close\"),\n                type: \"button\"\n            }, [\"×\"])\n        ]);\n    }\n    commit() {\n        let query = new SearchQuery({\n            search: this.searchField.value,\n            caseSensitive: this.caseField.checked,\n            regexp: this.reField.checked,\n            wholeWord: this.wordField.checked,\n            replace: this.replaceField.value,\n        });\n        if (!query.eq(this.query)) {\n            this.query = query;\n            this.view.dispatch({ effects: setSearchQuery.of(query) });\n        }\n    }\n    keydown(e) {\n        if (runScopeHandlers(this.view, e, \"search-panel\")) {\n            e.preventDefault();\n        }\n        else if (e.keyCode == 13 && e.target == this.searchField) {\n            e.preventDefault();\n            (e.shiftKey ? findPrevious : findNext)(this.view);\n        }\n        else if (e.keyCode == 13 && e.target == this.replaceField) {\n            e.preventDefault();\n            replaceNext(this.view);\n        }\n    }\n    update(update) {\n        for (let tr of update.transactions)\n            for (let effect of tr.effects) {\n                if (effect.is(setSearchQuery) && !effect.value.eq(this.query))\n                    this.setQuery(effect.value);\n            }\n    }\n    setQuery(query) {\n        this.query = query;\n        this.searchField.value = query.search;\n        this.replaceField.value = query.replace;\n        this.caseField.checked = query.caseSensitive;\n        this.reField.checked = query.regexp;\n        this.wordField.checked = query.wholeWord;\n    }\n    mount() {\n        this.searchField.select();\n    }\n    get pos() { return 80; }\n    get top() { return this.view.state.facet(searchConfigFacet).top; }\n}\nfunction phrase(view, phrase) { return view.state.phrase(phrase); }\nconst AnnounceMargin = 30;\nconst Break = /[\\s\\.,:;?!]/;\nfunction announceMatch(view, { from, to }) {\n    let line = view.state.doc.lineAt(from), lineEnd = view.state.doc.lineAt(to).to;\n    let start = Math.max(line.from, from - AnnounceMargin), end = Math.min(lineEnd, to + AnnounceMargin);\n    let text = view.state.sliceDoc(start, end);\n    if (start != line.from) {\n        for (let i = 0; i < AnnounceMargin; i++)\n            if (!Break.test(text[i + 1]) && Break.test(text[i])) {\n                text = text.slice(i);\n                break;\n            }\n    }\n    if (end != lineEnd) {\n        for (let i = text.length - 1; i > text.length - AnnounceMargin; i--)\n            if (!Break.test(text[i - 1]) && Break.test(text[i])) {\n                text = text.slice(0, i);\n                break;\n            }\n    }\n    return EditorView.announce.of(`${view.state.phrase(\"current match\")}. ${text} ${view.state.phrase(\"on line\")} ${line.number}.`);\n}\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-panel.cm-search\": {\n        padding: \"2px 6px 4px\",\n        position: \"relative\",\n        \"& [name=close]\": {\n            position: \"absolute\",\n            top: \"0\",\n            right: \"4px\",\n            backgroundColor: \"inherit\",\n            border: \"none\",\n            font: \"inherit\",\n            padding: 0,\n            margin: 0\n        },\n        \"& input, & button, & label\": {\n            margin: \".2em .6em .2em 0\"\n        },\n        \"& input[type=checkbox]\": {\n            marginRight: \".2em\"\n        },\n        \"& label\": {\n            fontSize: \"80%\",\n            whiteSpace: \"pre\"\n        }\n    },\n    \"&light .cm-searchMatch\": { backgroundColor: \"#ffff0054\" },\n    \"&dark .cm-searchMatch\": { backgroundColor: \"#00ffff8a\" },\n    \"&light .cm-searchMatch-selected\": { backgroundColor: \"#ff6a0054\" },\n    \"&dark .cm-searchMatch-selected\": { backgroundColor: \"#ff00ff8a\" }\n});\nconst searchExtensions = [\n    searchState,\n    /*@__PURE__*/Prec.low(searchHighlighter),\n    baseTheme\n];\n\nexport { RegExpCursor, SearchCursor, SearchQuery, closeSearchPanel, findNext, findPrevious, getSearchQuery, gotoLine, highlightSelectionMatches, openSearchPanel, replaceAll, replaceNext, search, searchKeymap, searchPanelOpen, selectMatches, selectNextOccurrence, selectSelectionMatches, setSearchQuery };\n","import { Annotation, StateEffect, EditorSelection, codePointAt, codePointSize, fromCodePoint, Facet, combineConfig, StateField, Prec, Text, Transaction, MapMode, RangeValue, RangeSet, CharCategory } from '@codemirror/state';\nimport { Direction, logException, showTooltip, EditorView, ViewPlugin, getTooltip, Decoration, WidgetType, keymap } from '@codemirror/view';\nimport { syntaxTree, indentUnit } from '@codemirror/language';\n\n/**\nAn instance of this is passed to completion source functions.\n*/\nclass CompletionContext {\n    /**\n    Create a new completion context. (Mostly useful for testing\n    completion sources—in the editor, the extension will create\n    these for you.)\n    */\n    constructor(\n    /**\n    The editor state that the completion happens in.\n    */\n    state, \n    /**\n    The position at which the completion is happening.\n    */\n    pos, \n    /**\n    Indicates whether completion was activated explicitly, or\n    implicitly by typing. The usual way to respond to this is to\n    only return completions when either there is part of a\n    completable entity before the cursor, or `explicit` is true.\n    */\n    explicit, \n    /**\n    The editor view. May be undefined if the context was created\n    in a situation where there is no such view available, such as\n    in synchronous updates via\n    [`CompletionResult.update`](https://codemirror.net/6/docs/ref/#autocomplete.CompletionResult.update)\n    or when called by test code.\n    */\n    view) {\n        this.state = state;\n        this.pos = pos;\n        this.explicit = explicit;\n        this.view = view;\n        /**\n        @internal\n        */\n        this.abortListeners = [];\n        /**\n        @internal\n        */\n        this.abortOnDocChange = false;\n    }\n    /**\n    Get the extent, content, and (if there is a token) type of the\n    token before `this.pos`.\n    */\n    tokenBefore(types) {\n        let token = syntaxTree(this.state).resolveInner(this.pos, -1);\n        while (token && types.indexOf(token.name) < 0)\n            token = token.parent;\n        return token ? { from: token.from, to: this.pos,\n            text: this.state.sliceDoc(token.from, this.pos),\n            type: token.type } : null;\n    }\n    /**\n    Get the match of the given expression directly before the\n    cursor.\n    */\n    matchBefore(expr) {\n        let line = this.state.doc.lineAt(this.pos);\n        let start = Math.max(line.from, this.pos - 250);\n        let str = line.text.slice(start - line.from, this.pos - line.from);\n        let found = str.search(ensureAnchor(expr, false));\n        return found < 0 ? null : { from: start + found, to: this.pos, text: str.slice(found) };\n    }\n    /**\n    Yields true when the query has been aborted. Can be useful in\n    asynchronous queries to avoid doing work that will be ignored.\n    */\n    get aborted() { return this.abortListeners == null; }\n    /**\n    Allows you to register abort handlers, which will be called when\n    the query is\n    [aborted](https://codemirror.net/6/docs/ref/#autocomplete.CompletionContext.aborted).\n    \n    By default, running queries will not be aborted for regular\n    typing or backspacing, on the assumption that they are likely to\n    return a result with a\n    [`validFor`](https://codemirror.net/6/docs/ref/#autocomplete.CompletionResult.validFor) field that\n    allows the result to be used after all. Passing `onDocChange:\n    true` will cause this query to be aborted for any document\n    change.\n    */\n    addEventListener(type, listener, options) {\n        if (type == \"abort\" && this.abortListeners) {\n            this.abortListeners.push(listener);\n            if (options && options.onDocChange)\n                this.abortOnDocChange = true;\n        }\n    }\n}\nfunction toSet(chars) {\n    let flat = Object.keys(chars).join(\"\");\n    let words = /\\w/.test(flat);\n    if (words)\n        flat = flat.replace(/\\w/g, \"\");\n    return `[${words ? \"\\\\w\" : \"\"}${flat.replace(/[^\\w\\s]/g, \"\\\\$&\")}]`;\n}\nfunction prefixMatch(options) {\n    let first = Object.create(null), rest = Object.create(null);\n    for (let { label } of options) {\n        first[label[0]] = true;\n        for (let i = 1; i < label.length; i++)\n            rest[label[i]] = true;\n    }\n    let source = toSet(first) + toSet(rest) + \"*$\";\n    return [new RegExp(\"^\" + source), new RegExp(source)];\n}\n/**\nGiven a a fixed array of options, return an autocompleter that\ncompletes them.\n*/\nfunction completeFromList(list) {\n    let options = list.map(o => typeof o == \"string\" ? { label: o } : o);\n    let [validFor, match] = options.every(o => /^\\w+$/.test(o.label)) ? [/\\w*$/, /\\w+$/] : prefixMatch(options);\n    return (context) => {\n        let token = context.matchBefore(match);\n        return token || context.explicit ? { from: token ? token.from : context.pos, options, validFor } : null;\n    };\n}\n/**\nWrap the given completion source so that it will only fire when the\ncursor is in a syntax node with one of the given names.\n*/\nfunction ifIn(nodes, source) {\n    return (context) => {\n        for (let pos = syntaxTree(context.state).resolveInner(context.pos, -1); pos; pos = pos.parent) {\n            if (nodes.indexOf(pos.name) > -1)\n                return source(context);\n            if (pos.type.isTop)\n                break;\n        }\n        return null;\n    };\n}\n/**\nWrap the given completion source so that it will not fire when the\ncursor is in a syntax node with one of the given names.\n*/\nfunction ifNotIn(nodes, source) {\n    return (context) => {\n        for (let pos = syntaxTree(context.state).resolveInner(context.pos, -1); pos; pos = pos.parent) {\n            if (nodes.indexOf(pos.name) > -1)\n                return null;\n            if (pos.type.isTop)\n                break;\n        }\n        return source(context);\n    };\n}\nclass Option {\n    constructor(completion, source, match, score) {\n        this.completion = completion;\n        this.source = source;\n        this.match = match;\n        this.score = score;\n    }\n}\nfunction cur(state) { return state.selection.main.from; }\n// Make sure the given regexp has a $ at its end and, if `start` is\n// true, a ^ at its start.\nfunction ensureAnchor(expr, start) {\n    var _a;\n    let { source } = expr;\n    let addStart = start && source[0] != \"^\", addEnd = source[source.length - 1] != \"$\";\n    if (!addStart && !addEnd)\n        return expr;\n    return new RegExp(`${addStart ? \"^\" : \"\"}(?:${source})${addEnd ? \"$\" : \"\"}`, (_a = expr.flags) !== null && _a !== void 0 ? _a : (expr.ignoreCase ? \"i\" : \"\"));\n}\n/**\nThis annotation is added to transactions that are produced by\npicking a completion.\n*/\nconst pickedCompletion = /*@__PURE__*/Annotation.define();\n/**\nHelper function that returns a transaction spec which inserts a\ncompletion's text in the main selection range, and any other\nselection range that has the same text in front of it.\n*/\nfunction insertCompletionText(state, text, from, to) {\n    let { main } = state.selection, fromOff = from - main.from, toOff = to - main.from;\n    return {\n        ...state.changeByRange(range => {\n            if (range != main && from != to &&\n                state.sliceDoc(range.from + fromOff, range.from + toOff) != state.sliceDoc(from, to))\n                return { range };\n            let lines = state.toText(text);\n            return {\n                changes: { from: range.from + fromOff, to: to == main.from ? range.to : range.from + toOff, insert: lines },\n                range: EditorSelection.cursor(range.from + fromOff + lines.length)\n            };\n        }),\n        scrollIntoView: true,\n        userEvent: \"input.complete\"\n    };\n}\nconst SourceCache = /*@__PURE__*/new WeakMap();\nfunction asSource(source) {\n    if (!Array.isArray(source))\n        return source;\n    let known = SourceCache.get(source);\n    if (!known)\n        SourceCache.set(source, known = completeFromList(source));\n    return known;\n}\nconst startCompletionEffect = /*@__PURE__*/StateEffect.define();\nconst closeCompletionEffect = /*@__PURE__*/StateEffect.define();\n\n// A pattern matcher for fuzzy completion matching. Create an instance\n// once for a pattern, and then use that to match any number of\n// completions.\nclass FuzzyMatcher {\n    constructor(pattern) {\n        this.pattern = pattern;\n        this.chars = [];\n        this.folded = [];\n        // Buffers reused by calls to `match` to track matched character\n        // positions.\n        this.any = [];\n        this.precise = [];\n        this.byWord = [];\n        this.score = 0;\n        this.matched = [];\n        for (let p = 0; p < pattern.length;) {\n            let char = codePointAt(pattern, p), size = codePointSize(char);\n            this.chars.push(char);\n            let part = pattern.slice(p, p + size), upper = part.toUpperCase();\n            this.folded.push(codePointAt(upper == part ? part.toLowerCase() : upper, 0));\n            p += size;\n        }\n        this.astral = pattern.length != this.chars.length;\n    }\n    ret(score, matched) {\n        this.score = score;\n        this.matched = matched;\n        return this;\n    }\n    // Matches a given word (completion) against the pattern (input).\n    // Will return a boolean indicating whether there was a match and,\n    // on success, set `this.score` to the score, `this.matched` to an\n    // array of `from, to` pairs indicating the matched parts of `word`.\n    //\n    // The score is a number that is more negative the worse the match\n    // is. See `Penalty` above.\n    match(word) {\n        if (this.pattern.length == 0)\n            return this.ret(-100 /* Penalty.NotFull */, []);\n        if (word.length < this.pattern.length)\n            return null;\n        let { chars, folded, any, precise, byWord } = this;\n        // For single-character queries, only match when they occur right\n        // at the start\n        if (chars.length == 1) {\n            let first = codePointAt(word, 0), firstSize = codePointSize(first);\n            let score = firstSize == word.length ? 0 : -100 /* Penalty.NotFull */;\n            if (first == chars[0]) ;\n            else if (first == folded[0])\n                score += -200 /* Penalty.CaseFold */;\n            else\n                return null;\n            return this.ret(score, [0, firstSize]);\n        }\n        let direct = word.indexOf(this.pattern);\n        if (direct == 0)\n            return this.ret(word.length == this.pattern.length ? 0 : -100 /* Penalty.NotFull */, [0, this.pattern.length]);\n        let len = chars.length, anyTo = 0;\n        if (direct < 0) {\n            for (let i = 0, e = Math.min(word.length, 200); i < e && anyTo < len;) {\n                let next = codePointAt(word, i);\n                if (next == chars[anyTo] || next == folded[anyTo])\n                    any[anyTo++] = i;\n                i += codePointSize(next);\n            }\n            // No match, exit immediately\n            if (anyTo < len)\n                return null;\n        }\n        // This tracks the extent of the precise (non-folded, not\n        // necessarily adjacent) match\n        let preciseTo = 0;\n        // Tracks whether there is a match that hits only characters that\n        // appear to be starting words. `byWordFolded` is set to true when\n        // a case folded character is encountered in such a match\n        let byWordTo = 0, byWordFolded = false;\n        // If we've found a partial adjacent match, these track its state\n        let adjacentTo = 0, adjacentStart = -1, adjacentEnd = -1;\n        let hasLower = /[a-z]/.test(word), wordAdjacent = true;\n        // Go over the option's text, scanning for the various kinds of matches\n        for (let i = 0, e = Math.min(word.length, 200), prevType = 0 /* Tp.NonWord */; i < e && byWordTo < len;) {\n            let next = codePointAt(word, i);\n            if (direct < 0) {\n                if (preciseTo < len && next == chars[preciseTo])\n                    precise[preciseTo++] = i;\n                if (adjacentTo < len) {\n                    if (next == chars[adjacentTo] || next == folded[adjacentTo]) {\n                        if (adjacentTo == 0)\n                            adjacentStart = i;\n                        adjacentEnd = i + 1;\n                        adjacentTo++;\n                    }\n                    else {\n                        adjacentTo = 0;\n                    }\n                }\n            }\n            let ch, type = next < 0xff\n                ? (next >= 48 && next <= 57 || next >= 97 && next <= 122 ? 2 /* Tp.Lower */ : next >= 65 && next <= 90 ? 1 /* Tp.Upper */ : 0 /* Tp.NonWord */)\n                : ((ch = fromCodePoint(next)) != ch.toLowerCase() ? 1 /* Tp.Upper */ : ch != ch.toUpperCase() ? 2 /* Tp.Lower */ : 0 /* Tp.NonWord */);\n            if (!i || type == 1 /* Tp.Upper */ && hasLower || prevType == 0 /* Tp.NonWord */ && type != 0 /* Tp.NonWord */) {\n                if (chars[byWordTo] == next || (folded[byWordTo] == next && (byWordFolded = true)))\n                    byWord[byWordTo++] = i;\n                else if (byWord.length)\n                    wordAdjacent = false;\n            }\n            prevType = type;\n            i += codePointSize(next);\n        }\n        if (byWordTo == len && byWord[0] == 0 && wordAdjacent)\n            return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0), byWord, word);\n        if (adjacentTo == len && adjacentStart == 0)\n            return this.ret(-200 /* Penalty.CaseFold */ - word.length + (adjacentEnd == word.length ? 0 : -100 /* Penalty.NotFull */), [0, adjacentEnd]);\n        if (direct > -1)\n            return this.ret(-700 /* Penalty.NotStart */ - word.length, [direct, direct + this.pattern.length]);\n        if (adjacentTo == len)\n            return this.ret(-200 /* Penalty.CaseFold */ + -700 /* Penalty.NotStart */ - word.length, [adjacentStart, adjacentEnd]);\n        if (byWordTo == len)\n            return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0) + -700 /* Penalty.NotStart */ +\n                (wordAdjacent ? 0 : -1100 /* Penalty.Gap */), byWord, word);\n        return chars.length == 2 ? null\n            : this.result((any[0] ? -700 /* Penalty.NotStart */ : 0) + -200 /* Penalty.CaseFold */ + -1100 /* Penalty.Gap */, any, word);\n    }\n    result(score, positions, word) {\n        let result = [], i = 0;\n        for (let pos of positions) {\n            let to = pos + (this.astral ? codePointSize(codePointAt(word, pos)) : 1);\n            if (i && result[i - 1] == pos)\n                result[i - 1] = to;\n            else {\n                result[i++] = pos;\n                result[i++] = to;\n            }\n        }\n        return this.ret(score - word.length, result);\n    }\n}\nclass StrictMatcher {\n    constructor(pattern) {\n        this.pattern = pattern;\n        this.matched = [];\n        this.score = 0;\n        this.folded = pattern.toLowerCase();\n    }\n    match(word) {\n        if (word.length < this.pattern.length)\n            return null;\n        let start = word.slice(0, this.pattern.length);\n        let match = start == this.pattern ? 0 : start.toLowerCase() == this.folded ? -200 /* Penalty.CaseFold */ : null;\n        if (match == null)\n            return null;\n        this.matched = [0, start.length];\n        this.score = match + (word.length == this.pattern.length ? 0 : -100 /* Penalty.NotFull */);\n        return this;\n    }\n}\n\nconst completionConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            activateOnTyping: true,\n            activateOnCompletion: () => false,\n            activateOnTypingDelay: 100,\n            selectOnOpen: true,\n            override: null,\n            closeOnBlur: true,\n            maxRenderedOptions: 100,\n            defaultKeymap: true,\n            tooltipClass: () => \"\",\n            optionClass: () => \"\",\n            aboveCursor: false,\n            icons: true,\n            addToOptions: [],\n            positionInfo: defaultPositionInfo,\n            filterStrict: false,\n            compareCompletions: (a, b) => (a.sortText || a.label).localeCompare(b.sortText || b.label),\n            interactionDelay: 75,\n            updateSyncTime: 100\n        }, {\n            defaultKeymap: (a, b) => a && b,\n            closeOnBlur: (a, b) => a && b,\n            icons: (a, b) => a && b,\n            tooltipClass: (a, b) => c => joinClass(a(c), b(c)),\n            optionClass: (a, b) => c => joinClass(a(c), b(c)),\n            addToOptions: (a, b) => a.concat(b),\n            filterStrict: (a, b) => a || b,\n        });\n    }\n});\nfunction joinClass(a, b) {\n    return a ? b ? a + \" \" + b : a : b;\n}\nfunction defaultPositionInfo(view, list, option, info, space, tooltip) {\n    let rtl = view.textDirection == Direction.RTL, left = rtl, narrow = false;\n    let side = \"top\", offset, maxWidth;\n    let spaceLeft = list.left - space.left, spaceRight = space.right - list.right;\n    let infoWidth = info.right - info.left, infoHeight = info.bottom - info.top;\n    if (left && spaceLeft < Math.min(infoWidth, spaceRight))\n        left = false;\n    else if (!left && spaceRight < Math.min(infoWidth, spaceLeft))\n        left = true;\n    if (infoWidth <= (left ? spaceLeft : spaceRight)) {\n        offset = Math.max(space.top, Math.min(option.top, space.bottom - infoHeight)) - list.top;\n        maxWidth = Math.min(400 /* Info.Width */, left ? spaceLeft : spaceRight);\n    }\n    else {\n        narrow = true;\n        maxWidth = Math.min(400 /* Info.Width */, (rtl ? list.right : space.right - list.left) - 30 /* Info.Margin */);\n        let spaceBelow = space.bottom - list.bottom;\n        if (spaceBelow >= infoHeight || spaceBelow > list.top) { // Below the completion\n            offset = option.bottom - list.top;\n        }\n        else { // Above it\n            side = \"bottom\";\n            offset = list.bottom - option.top;\n        }\n    }\n    let scaleY = (list.bottom - list.top) / tooltip.offsetHeight;\n    let scaleX = (list.right - list.left) / tooltip.offsetWidth;\n    return {\n        style: `${side}: ${offset / scaleY}px; max-width: ${maxWidth / scaleX}px`,\n        class: \"cm-completionInfo-\" + (narrow ? (rtl ? \"left-narrow\" : \"right-narrow\") : left ? \"left\" : \"right\")\n    };\n}\n\nfunction optionContent(config) {\n    let content = config.addToOptions.slice();\n    if (config.icons)\n        content.push({\n            render(completion) {\n                let icon = document.createElement(\"div\");\n                icon.classList.add(\"cm-completionIcon\");\n                if (completion.type)\n                    icon.classList.add(...completion.type.split(/\\s+/g).map(cls => \"cm-completionIcon-\" + cls));\n                icon.setAttribute(\"aria-hidden\", \"true\");\n                return icon;\n            },\n            position: 20\n        });\n    content.push({\n        render(completion, _s, _v, match) {\n            let labelElt = document.createElement(\"span\");\n            labelElt.className = \"cm-completionLabel\";\n            let label = completion.displayLabel || completion.label, off = 0;\n            for (let j = 0; j < match.length;) {\n                let from = match[j++], to = match[j++];\n                if (from > off)\n                    labelElt.appendChild(document.createTextNode(label.slice(off, from)));\n                let span = labelElt.appendChild(document.createElement(\"span\"));\n                span.appendChild(document.createTextNode(label.slice(from, to)));\n                span.className = \"cm-completionMatchedText\";\n                off = to;\n            }\n            if (off < label.length)\n                labelElt.appendChild(document.createTextNode(label.slice(off)));\n            return labelElt;\n        },\n        position: 50\n    }, {\n        render(completion) {\n            if (!completion.detail)\n                return null;\n            let detailElt = document.createElement(\"span\");\n            detailElt.className = \"cm-completionDetail\";\n            detailElt.textContent = completion.detail;\n            return detailElt;\n        },\n        position: 80\n    });\n    return content.sort((a, b) => a.position - b.position).map(a => a.render);\n}\nfunction rangeAroundSelected(total, selected, max) {\n    if (total <= max)\n        return { from: 0, to: total };\n    if (selected < 0)\n        selected = 0;\n    if (selected <= (total >> 1)) {\n        let off = Math.floor(selected / max);\n        return { from: off * max, to: (off + 1) * max };\n    }\n    let off = Math.floor((total - selected) / max);\n    return { from: total - (off + 1) * max, to: total - off * max };\n}\nclass CompletionTooltip {\n    constructor(view, stateField, applyCompletion) {\n        this.view = view;\n        this.stateField = stateField;\n        this.applyCompletion = applyCompletion;\n        this.info = null;\n        this.infoDestroy = null;\n        this.placeInfoReq = {\n            read: () => this.measureInfo(),\n            write: (pos) => this.placeInfo(pos),\n            key: this\n        };\n        this.space = null;\n        this.currentClass = \"\";\n        let cState = view.state.field(stateField);\n        let { options, selected } = cState.open;\n        let config = view.state.facet(completionConfig);\n        this.optionContent = optionContent(config);\n        this.optionClass = config.optionClass;\n        this.tooltipClass = config.tooltipClass;\n        this.range = rangeAroundSelected(options.length, selected, config.maxRenderedOptions);\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-tooltip-autocomplete\";\n        this.updateTooltipClass(view.state);\n        this.dom.addEventListener(\"mousedown\", (e) => {\n            let { options } = view.state.field(stateField).open;\n            for (let dom = e.target, match; dom && dom != this.dom; dom = dom.parentNode) {\n                if (dom.nodeName == \"LI\" && (match = /-(\\d+)$/.exec(dom.id)) && +match[1] < options.length) {\n                    this.applyCompletion(view, options[+match[1]]);\n                    e.preventDefault();\n                    return;\n                }\n            }\n        });\n        this.dom.addEventListener(\"focusout\", (e) => {\n            let state = view.state.field(this.stateField, false);\n            if (state && state.tooltip && view.state.facet(completionConfig).closeOnBlur &&\n                e.relatedTarget != view.contentDOM)\n                view.dispatch({ effects: closeCompletionEffect.of(null) });\n        });\n        this.showOptions(options, cState.id);\n    }\n    mount() { this.updateSel(); }\n    showOptions(options, id) {\n        if (this.list)\n            this.list.remove();\n        this.list = this.dom.appendChild(this.createListBox(options, id, this.range));\n        this.list.addEventListener(\"scroll\", () => {\n            if (this.info)\n                this.view.requestMeasure(this.placeInfoReq);\n        });\n    }\n    update(update) {\n        var _a;\n        let cState = update.state.field(this.stateField);\n        let prevState = update.startState.field(this.stateField);\n        this.updateTooltipClass(update.state);\n        if (cState != prevState) {\n            let { options, selected, disabled } = cState.open;\n            if (!prevState.open || prevState.open.options != options) {\n                this.range = rangeAroundSelected(options.length, selected, update.state.facet(completionConfig).maxRenderedOptions);\n                this.showOptions(options, cState.id);\n            }\n            this.updateSel();\n            if (disabled != ((_a = prevState.open) === null || _a === void 0 ? void 0 : _a.disabled))\n                this.dom.classList.toggle(\"cm-tooltip-autocomplete-disabled\", !!disabled);\n        }\n    }\n    updateTooltipClass(state) {\n        let cls = this.tooltipClass(state);\n        if (cls != this.currentClass) {\n            for (let c of this.currentClass.split(\" \"))\n                if (c)\n                    this.dom.classList.remove(c);\n            for (let c of cls.split(\" \"))\n                if (c)\n                    this.dom.classList.add(c);\n            this.currentClass = cls;\n        }\n    }\n    positioned(space) {\n        this.space = space;\n        if (this.info)\n            this.view.requestMeasure(this.placeInfoReq);\n    }\n    updateSel() {\n        let cState = this.view.state.field(this.stateField), open = cState.open;\n        if (open.selected > -1 && open.selected < this.range.from || open.selected >= this.range.to) {\n            this.range = rangeAroundSelected(open.options.length, open.selected, this.view.state.facet(completionConfig).maxRenderedOptions);\n            this.showOptions(open.options, cState.id);\n        }\n        let newSel = this.updateSelectedOption(open.selected);\n        if (newSel) {\n            this.destroyInfo();\n            let { completion } = open.options[open.selected];\n            let { info } = completion;\n            if (!info)\n                return;\n            let infoResult = typeof info === \"string\" ? document.createTextNode(info) : info(completion);\n            if (!infoResult)\n                return;\n            if (\"then\" in infoResult) {\n                infoResult.then(obj => {\n                    if (obj && this.view.state.field(this.stateField, false) == cState)\n                        this.addInfoPane(obj, completion);\n                }).catch(e => logException(this.view.state, e, \"completion info\"));\n            }\n            else {\n                this.addInfoPane(infoResult, completion);\n                newSel.setAttribute(\"aria-describedby\", this.info.id);\n            }\n        }\n    }\n    addInfoPane(content, completion) {\n        this.destroyInfo();\n        let wrap = this.info = document.createElement(\"div\");\n        wrap.className = \"cm-tooltip cm-completionInfo\";\n        wrap.id = \"cm-completionInfo-\" + Math.floor(Math.random() * 0xffff).toString(16);\n        if (content.nodeType != null) {\n            wrap.appendChild(content);\n            this.infoDestroy = null;\n        }\n        else {\n            let { dom, destroy } = content;\n            wrap.appendChild(dom);\n            this.infoDestroy = destroy || null;\n        }\n        this.dom.appendChild(wrap);\n        this.view.requestMeasure(this.placeInfoReq);\n    }\n    updateSelectedOption(selected) {\n        let set = null;\n        for (let opt = this.list.firstChild, i = this.range.from; opt; opt = opt.nextSibling, i++) {\n            if (opt.nodeName != \"LI\" || !opt.id) {\n                i--; // A section header\n            }\n            else if (i == selected) {\n                if (!opt.hasAttribute(\"aria-selected\")) {\n                    opt.setAttribute(\"aria-selected\", \"true\");\n                    set = opt;\n                }\n            }\n            else {\n                if (opt.hasAttribute(\"aria-selected\")) {\n                    opt.removeAttribute(\"aria-selected\");\n                    opt.removeAttribute(\"aria-describedby\");\n                }\n            }\n        }\n        if (set)\n            scrollIntoView(this.list, set);\n        return set;\n    }\n    measureInfo() {\n        let sel = this.dom.querySelector(\"[aria-selected]\");\n        if (!sel || !this.info)\n            return null;\n        let listRect = this.dom.getBoundingClientRect();\n        let infoRect = this.info.getBoundingClientRect();\n        let selRect = sel.getBoundingClientRect();\n        let space = this.space;\n        if (!space) {\n            let docElt = this.dom.ownerDocument.documentElement;\n            space = { left: 0, top: 0, right: docElt.clientWidth, bottom: docElt.clientHeight };\n        }\n        if (selRect.top > Math.min(space.bottom, listRect.bottom) - 10 ||\n            selRect.bottom < Math.max(space.top, listRect.top) + 10)\n            return null;\n        return this.view.state.facet(completionConfig).positionInfo(this.view, listRect, selRect, infoRect, space, this.dom);\n    }\n    placeInfo(pos) {\n        if (this.info) {\n            if (pos) {\n                if (pos.style)\n                    this.info.style.cssText = pos.style;\n                this.info.className = \"cm-tooltip cm-completionInfo \" + (pos.class || \"\");\n            }\n            else {\n                this.info.style.cssText = \"top: -1e6px\";\n            }\n        }\n    }\n    createListBox(options, id, range) {\n        const ul = document.createElement(\"ul\");\n        ul.id = id;\n        ul.setAttribute(\"role\", \"listbox\");\n        ul.setAttribute(\"aria-expanded\", \"true\");\n        ul.setAttribute(\"aria-label\", this.view.state.phrase(\"Completions\"));\n        ul.addEventListener(\"mousedown\", e => {\n            // Prevent focus change when clicking the scrollbar\n            if (e.target == ul)\n                e.preventDefault();\n        });\n        let curSection = null;\n        for (let i = range.from; i < range.to; i++) {\n            let { completion, match } = options[i], { section } = completion;\n            if (section) {\n                let name = typeof section == \"string\" ? section : section.name;\n                if (name != curSection && (i > range.from || range.from == 0)) {\n                    curSection = name;\n                    if (typeof section != \"string\" && section.header) {\n                        ul.appendChild(section.header(section));\n                    }\n                    else {\n                        let header = ul.appendChild(document.createElement(\"completion-section\"));\n                        header.textContent = name;\n                    }\n                }\n            }\n            const li = ul.appendChild(document.createElement(\"li\"));\n            li.id = id + \"-\" + i;\n            li.setAttribute(\"role\", \"option\");\n            let cls = this.optionClass(completion);\n            if (cls)\n                li.className = cls;\n            for (let source of this.optionContent) {\n                let node = source(completion, this.view.state, this.view, match);\n                if (node)\n                    li.appendChild(node);\n            }\n        }\n        if (range.from)\n            ul.classList.add(\"cm-completionListIncompleteTop\");\n        if (range.to < options.length)\n            ul.classList.add(\"cm-completionListIncompleteBottom\");\n        return ul;\n    }\n    destroyInfo() {\n        if (this.info) {\n            if (this.infoDestroy)\n                this.infoDestroy();\n            this.info.remove();\n            this.info = null;\n        }\n    }\n    destroy() {\n        this.destroyInfo();\n    }\n}\nfunction completionTooltip(stateField, applyCompletion) {\n    return (view) => new CompletionTooltip(view, stateField, applyCompletion);\n}\nfunction scrollIntoView(container, element) {\n    let parent = container.getBoundingClientRect();\n    let self = element.getBoundingClientRect();\n    let scaleY = parent.height / container.offsetHeight;\n    if (self.top < parent.top)\n        container.scrollTop -= (parent.top - self.top) / scaleY;\n    else if (self.bottom > parent.bottom)\n        container.scrollTop += (self.bottom - parent.bottom) / scaleY;\n}\n\n// Used to pick a preferred option when two options with the same\n// label occur in the result.\nfunction score(option) {\n    return (option.boost || 0) * 100 + (option.apply ? 10 : 0) + (option.info ? 5 : 0) +\n        (option.type ? 1 : 0);\n}\nfunction sortOptions(active, state) {\n    let options = [];\n    let sections = null, dynamicSectionScore = null;\n    let addOption = (option) => {\n        options.push(option);\n        let { section } = option.completion;\n        if (section) {\n            if (!sections)\n                sections = [];\n            let name = typeof section == \"string\" ? section : section.name;\n            if (!sections.some(s => s.name == name))\n                sections.push(typeof section == \"string\" ? { name } : section);\n        }\n    };\n    let conf = state.facet(completionConfig);\n    for (let a of active)\n        if (a.hasResult()) {\n            let getMatch = a.result.getMatch;\n            if (a.result.filter === false) {\n                for (let option of a.result.options) {\n                    addOption(new Option(option, a.source, getMatch ? getMatch(option) : [], 1e9 - options.length));\n                }\n            }\n            else {\n                let pattern = state.sliceDoc(a.from, a.to), match;\n                let matcher = conf.filterStrict ? new StrictMatcher(pattern) : new FuzzyMatcher(pattern);\n                for (let option of a.result.options)\n                    if (match = matcher.match(option.label)) {\n                        let matched = !option.displayLabel ? match.matched : getMatch ? getMatch(option, match.matched) : [];\n                        let score = match.score + (option.boost || 0);\n                        addOption(new Option(option, a.source, matched, score));\n                        if (typeof option.section == \"object\" && option.section.rank === \"dynamic\") {\n                            let { name } = option.section;\n                            if (!dynamicSectionScore)\n                                dynamicSectionScore = Object.create(null);\n                            dynamicSectionScore[name] = Math.max(score, dynamicSectionScore[name] || -1e9);\n                        }\n                    }\n            }\n        }\n    if (sections) {\n        let sectionOrder = Object.create(null), pos = 0;\n        let cmp = (a, b) => {\n            return (a.rank === \"dynamic\" && b.rank === \"dynamic\" ? dynamicSectionScore[b.name] - dynamicSectionScore[a.name] : 0) ||\n                (typeof a.rank == \"number\" ? a.rank : 1e9) - (typeof b.rank == \"number\" ? b.rank : 1e9) ||\n                (a.name < b.name ? -1 : 1);\n        };\n        for (let s of sections.sort(cmp)) {\n            pos -= 1e5;\n            sectionOrder[s.name] = pos;\n        }\n        for (let option of options) {\n            let { section } = option.completion;\n            if (section)\n                option.score += sectionOrder[typeof section == \"string\" ? section : section.name];\n        }\n    }\n    let result = [], prev = null;\n    let compare = conf.compareCompletions;\n    for (let opt of options.sort((a, b) => (b.score - a.score) || compare(a.completion, b.completion))) {\n        let cur = opt.completion;\n        if (!prev || prev.label != cur.label || prev.detail != cur.detail ||\n            (prev.type != null && cur.type != null && prev.type != cur.type) ||\n            prev.apply != cur.apply || prev.boost != cur.boost)\n            result.push(opt);\n        else if (score(opt.completion) > score(prev))\n            result[result.length - 1] = opt;\n        prev = opt.completion;\n    }\n    return result;\n}\nclass CompletionDialog {\n    constructor(options, attrs, tooltip, timestamp, selected, disabled) {\n        this.options = options;\n        this.attrs = attrs;\n        this.tooltip = tooltip;\n        this.timestamp = timestamp;\n        this.selected = selected;\n        this.disabled = disabled;\n    }\n    setSelected(selected, id) {\n        return selected == this.selected || selected >= this.options.length ? this\n            : new CompletionDialog(this.options, makeAttrs(id, selected), this.tooltip, this.timestamp, selected, this.disabled);\n    }\n    static build(active, state, id, prev, conf, didSetActive) {\n        if (prev && !didSetActive && active.some(s => s.isPending))\n            return prev.setDisabled();\n        let options = sortOptions(active, state);\n        if (!options.length)\n            return prev && active.some(a => a.isPending) ? prev.setDisabled() : null;\n        let selected = state.facet(completionConfig).selectOnOpen ? 0 : -1;\n        if (prev && prev.selected != selected && prev.selected != -1) {\n            let selectedValue = prev.options[prev.selected].completion;\n            for (let i = 0; i < options.length; i++)\n                if (options[i].completion == selectedValue) {\n                    selected = i;\n                    break;\n                }\n        }\n        return new CompletionDialog(options, makeAttrs(id, selected), {\n            pos: active.reduce((a, b) => b.hasResult() ? Math.min(a, b.from) : a, 1e8),\n            create: createTooltip,\n            above: conf.aboveCursor,\n        }, prev ? prev.timestamp : Date.now(), selected, false);\n    }\n    map(changes) {\n        return new CompletionDialog(this.options, this.attrs, { ...this.tooltip, pos: changes.mapPos(this.tooltip.pos) }, this.timestamp, this.selected, this.disabled);\n    }\n    setDisabled() {\n        return new CompletionDialog(this.options, this.attrs, this.tooltip, this.timestamp, this.selected, true);\n    }\n}\nclass CompletionState {\n    constructor(active, id, open) {\n        this.active = active;\n        this.id = id;\n        this.open = open;\n    }\n    static start() {\n        return new CompletionState(none, \"cm-ac-\" + Math.floor(Math.random() * 2e6).toString(36), null);\n    }\n    update(tr) {\n        let { state } = tr, conf = state.facet(completionConfig);\n        let sources = conf.override ||\n            state.languageDataAt(\"autocomplete\", cur(state)).map(asSource);\n        let active = sources.map(source => {\n            let value = this.active.find(s => s.source == source) ||\n                new ActiveSource(source, this.active.some(a => a.state != 0 /* State.Inactive */) ? 1 /* State.Pending */ : 0 /* State.Inactive */);\n            return value.update(tr, conf);\n        });\n        if (active.length == this.active.length && active.every((a, i) => a == this.active[i]))\n            active = this.active;\n        let open = this.open, didSet = tr.effects.some(e => e.is(setActiveEffect));\n        if (open && tr.docChanged)\n            open = open.map(tr.changes);\n        if (tr.selection || active.some(a => a.hasResult() && tr.changes.touchesRange(a.from, a.to)) ||\n            !sameResults(active, this.active) || didSet)\n            open = CompletionDialog.build(active, state, this.id, open, conf, didSet);\n        else if (open && open.disabled && !active.some(a => a.isPending))\n            open = null;\n        if (!open && active.every(a => !a.isPending) && active.some(a => a.hasResult()))\n            active = active.map(a => a.hasResult() ? new ActiveSource(a.source, 0 /* State.Inactive */) : a);\n        for (let effect of tr.effects)\n            if (effect.is(setSelectedEffect))\n                open = open && open.setSelected(effect.value, this.id);\n        return active == this.active && open == this.open ? this : new CompletionState(active, this.id, open);\n    }\n    get tooltip() { return this.open ? this.open.tooltip : null; }\n    get attrs() { return this.open ? this.open.attrs : this.active.length ? baseAttrs : noAttrs; }\n}\nfunction sameResults(a, b) {\n    if (a == b)\n        return true;\n    for (let iA = 0, iB = 0;;) {\n        while (iA < a.length && !a[iA].hasResult())\n            iA++;\n        while (iB < b.length && !b[iB].hasResult())\n            iB++;\n        let endA = iA == a.length, endB = iB == b.length;\n        if (endA || endB)\n            return endA == endB;\n        if (a[iA++].result != b[iB++].result)\n            return false;\n    }\n}\nconst baseAttrs = {\n    \"aria-autocomplete\": \"list\"\n};\nconst noAttrs = {};\nfunction makeAttrs(id, selected) {\n    let result = {\n        \"aria-autocomplete\": \"list\",\n        \"aria-haspopup\": \"listbox\",\n        \"aria-controls\": id\n    };\n    if (selected > -1)\n        result[\"aria-activedescendant\"] = id + \"-\" + selected;\n    return result;\n}\nconst none = [];\nfunction getUpdateType(tr, conf) {\n    if (tr.isUserEvent(\"input.complete\")) {\n        let completion = tr.annotation(pickedCompletion);\n        if (completion && conf.activateOnCompletion(completion))\n            return 4 /* UpdateType.Activate */ | 8 /* UpdateType.Reset */;\n    }\n    let typing = tr.isUserEvent(\"input.type\");\n    return typing && conf.activateOnTyping ? 4 /* UpdateType.Activate */ | 1 /* UpdateType.Typing */\n        : typing ? 1 /* UpdateType.Typing */\n            : tr.isUserEvent(\"delete.backward\") ? 2 /* UpdateType.Backspacing */\n                : tr.selection ? 8 /* UpdateType.Reset */\n                    : tr.docChanged ? 16 /* UpdateType.ResetIfTouching */ : 0 /* UpdateType.None */;\n}\nclass ActiveSource {\n    constructor(source, state, explicit = false) {\n        this.source = source;\n        this.state = state;\n        this.explicit = explicit;\n    }\n    hasResult() { return false; }\n    get isPending() { return this.state == 1 /* State.Pending */; }\n    update(tr, conf) {\n        let type = getUpdateType(tr, conf), value = this;\n        if ((type & 8 /* UpdateType.Reset */) || (type & 16 /* UpdateType.ResetIfTouching */) && this.touches(tr))\n            value = new ActiveSource(value.source, 0 /* State.Inactive */);\n        if ((type & 4 /* UpdateType.Activate */) && value.state == 0 /* State.Inactive */)\n            value = new ActiveSource(this.source, 1 /* State.Pending */);\n        value = value.updateFor(tr, type);\n        for (let effect of tr.effects) {\n            if (effect.is(startCompletionEffect))\n                value = new ActiveSource(value.source, 1 /* State.Pending */, effect.value);\n            else if (effect.is(closeCompletionEffect))\n                value = new ActiveSource(value.source, 0 /* State.Inactive */);\n            else if (effect.is(setActiveEffect))\n                for (let active of effect.value)\n                    if (active.source == value.source)\n                        value = active;\n        }\n        return value;\n    }\n    updateFor(tr, type) { return this.map(tr.changes); }\n    map(changes) { return this; }\n    touches(tr) {\n        return tr.changes.touchesRange(cur(tr.state));\n    }\n}\nclass ActiveResult extends ActiveSource {\n    constructor(source, explicit, limit, result, from, to) {\n        super(source, 3 /* State.Result */, explicit);\n        this.limit = limit;\n        this.result = result;\n        this.from = from;\n        this.to = to;\n    }\n    hasResult() { return true; }\n    updateFor(tr, type) {\n        var _a;\n        if (!(type & 3 /* UpdateType.SimpleInteraction */))\n            return this.map(tr.changes);\n        let result = this.result;\n        if (result.map && !tr.changes.empty)\n            result = result.map(result, tr.changes);\n        let from = tr.changes.mapPos(this.from), to = tr.changes.mapPos(this.to, 1);\n        let pos = cur(tr.state);\n        if (pos > to || !result ||\n            (type & 2 /* UpdateType.Backspacing */) && (cur(tr.startState) == this.from || pos < this.limit))\n            return new ActiveSource(this.source, type & 4 /* UpdateType.Activate */ ? 1 /* State.Pending */ : 0 /* State.Inactive */);\n        let limit = tr.changes.mapPos(this.limit);\n        if (checkValid(result.validFor, tr.state, from, to))\n            return new ActiveResult(this.source, this.explicit, limit, result, from, to);\n        if (result.update &&\n            (result = result.update(result, from, to, new CompletionContext(tr.state, pos, false))))\n            return new ActiveResult(this.source, this.explicit, limit, result, result.from, (_a = result.to) !== null && _a !== void 0 ? _a : cur(tr.state));\n        return new ActiveSource(this.source, 1 /* State.Pending */, this.explicit);\n    }\n    map(mapping) {\n        if (mapping.empty)\n            return this;\n        let result = this.result.map ? this.result.map(this.result, mapping) : this.result;\n        if (!result)\n            return new ActiveSource(this.source, 0 /* State.Inactive */);\n        return new ActiveResult(this.source, this.explicit, mapping.mapPos(this.limit), this.result, mapping.mapPos(this.from), mapping.mapPos(this.to, 1));\n    }\n    touches(tr) {\n        return tr.changes.touchesRange(this.from, this.to);\n    }\n}\nfunction checkValid(validFor, state, from, to) {\n    if (!validFor)\n        return false;\n    let text = state.sliceDoc(from, to);\n    return typeof validFor == \"function\" ? validFor(text, from, to, state) : ensureAnchor(validFor, true).test(text);\n}\nconst setActiveEffect = /*@__PURE__*/StateEffect.define({\n    map(sources, mapping) { return sources.map(s => s.map(mapping)); }\n});\nconst setSelectedEffect = /*@__PURE__*/StateEffect.define();\nconst completionState = /*@__PURE__*/StateField.define({\n    create() { return CompletionState.start(); },\n    update(value, tr) { return value.update(tr); },\n    provide: f => [\n        showTooltip.from(f, val => val.tooltip),\n        EditorView.contentAttributes.from(f, state => state.attrs)\n    ]\n});\nfunction applyCompletion(view, option) {\n    const apply = option.completion.apply || option.completion.label;\n    let result = view.state.field(completionState).active.find(a => a.source == option.source);\n    if (!(result instanceof ActiveResult))\n        return false;\n    if (typeof apply == \"string\")\n        view.dispatch({\n            ...insertCompletionText(view.state, apply, result.from, result.to),\n            annotations: pickedCompletion.of(option.completion)\n        });\n    else\n        apply(view, option.completion, result.from, result.to);\n    return true;\n}\nconst createTooltip = /*@__PURE__*/completionTooltip(completionState, applyCompletion);\n\n/**\nReturns a command that moves the completion selection forward or\nbackward by the given amount.\n*/\nfunction moveCompletionSelection(forward, by = \"option\") {\n    return (view) => {\n        let cState = view.state.field(completionState, false);\n        if (!cState || !cState.open || cState.open.disabled ||\n            Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay)\n            return false;\n        let step = 1, tooltip;\n        if (by == \"page\" && (tooltip = getTooltip(view, cState.open.tooltip)))\n            step = Math.max(2, Math.floor(tooltip.dom.offsetHeight /\n                tooltip.dom.querySelector(\"li\").offsetHeight) - 1);\n        let { length } = cState.open.options;\n        let selected = cState.open.selected > -1 ? cState.open.selected + step * (forward ? 1 : -1) : forward ? 0 : length - 1;\n        if (selected < 0)\n            selected = by == \"page\" ? 0 : length - 1;\n        else if (selected >= length)\n            selected = by == \"page\" ? length - 1 : 0;\n        view.dispatch({ effects: setSelectedEffect.of(selected) });\n        return true;\n    };\n}\n/**\nAccept the current completion.\n*/\nconst acceptCompletion = (view) => {\n    let cState = view.state.field(completionState, false);\n    if (view.state.readOnly || !cState || !cState.open || cState.open.selected < 0 || cState.open.disabled ||\n        Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay)\n        return false;\n    return applyCompletion(view, cState.open.options[cState.open.selected]);\n};\n/**\nExplicitly start autocompletion.\n*/\nconst startCompletion = (view) => {\n    let cState = view.state.field(completionState, false);\n    if (!cState)\n        return false;\n    view.dispatch({ effects: startCompletionEffect.of(true) });\n    return true;\n};\n/**\nClose the currently active completion.\n*/\nconst closeCompletion = (view) => {\n    let cState = view.state.field(completionState, false);\n    if (!cState || !cState.active.some(a => a.state != 0 /* State.Inactive */))\n        return false;\n    view.dispatch({ effects: closeCompletionEffect.of(null) });\n    return true;\n};\nclass RunningQuery {\n    constructor(active, context) {\n        this.active = active;\n        this.context = context;\n        this.time = Date.now();\n        this.updates = [];\n        // Note that 'undefined' means 'not done yet', whereas 'null' means\n        // 'query returned null'.\n        this.done = undefined;\n    }\n}\nconst MaxUpdateCount = 50, MinAbortTime = 1000;\nconst completionPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.debounceUpdate = -1;\n        this.running = [];\n        this.debounceAccept = -1;\n        this.pendingStart = false;\n        this.composing = 0 /* CompositionState.None */;\n        for (let active of view.state.field(completionState).active)\n            if (active.isPending)\n                this.startQuery(active);\n    }\n    update(update) {\n        let cState = update.state.field(completionState);\n        let conf = update.state.facet(completionConfig);\n        if (!update.selectionSet && !update.docChanged && update.startState.field(completionState) == cState)\n            return;\n        let doesReset = update.transactions.some(tr => {\n            let type = getUpdateType(tr, conf);\n            return (type & 8 /* UpdateType.Reset */) || (tr.selection || tr.docChanged) && !(type & 3 /* UpdateType.SimpleInteraction */);\n        });\n        for (let i = 0; i < this.running.length; i++) {\n            let query = this.running[i];\n            if (doesReset ||\n                query.context.abortOnDocChange && update.docChanged ||\n                query.updates.length + update.transactions.length > MaxUpdateCount && Date.now() - query.time > MinAbortTime) {\n                for (let handler of query.context.abortListeners) {\n                    try {\n                        handler();\n                    }\n                    catch (e) {\n                        logException(this.view.state, e);\n                    }\n                }\n                query.context.abortListeners = null;\n                this.running.splice(i--, 1);\n            }\n            else {\n                query.updates.push(...update.transactions);\n            }\n        }\n        if (this.debounceUpdate > -1)\n            clearTimeout(this.debounceUpdate);\n        if (update.transactions.some(tr => tr.effects.some(e => e.is(startCompletionEffect))))\n            this.pendingStart = true;\n        let delay = this.pendingStart ? 50 : conf.activateOnTypingDelay;\n        this.debounceUpdate = cState.active.some(a => a.isPending && !this.running.some(q => q.active.source == a.source))\n            ? setTimeout(() => this.startUpdate(), delay) : -1;\n        if (this.composing != 0 /* CompositionState.None */)\n            for (let tr of update.transactions) {\n                if (tr.isUserEvent(\"input.type\"))\n                    this.composing = 2 /* CompositionState.Changed */;\n                else if (this.composing == 2 /* CompositionState.Changed */ && tr.selection)\n                    this.composing = 3 /* CompositionState.ChangedAndMoved */;\n            }\n    }\n    startUpdate() {\n        this.debounceUpdate = -1;\n        this.pendingStart = false;\n        let { state } = this.view, cState = state.field(completionState);\n        for (let active of cState.active) {\n            if (active.isPending && !this.running.some(r => r.active.source == active.source))\n                this.startQuery(active);\n        }\n        if (this.running.length && cState.open && cState.open.disabled)\n            this.debounceAccept = setTimeout(() => this.accept(), this.view.state.facet(completionConfig).updateSyncTime);\n    }\n    startQuery(active) {\n        let { state } = this.view, pos = cur(state);\n        let context = new CompletionContext(state, pos, active.explicit, this.view);\n        let pending = new RunningQuery(active, context);\n        this.running.push(pending);\n        Promise.resolve(active.source(context)).then(result => {\n            if (!pending.context.aborted) {\n                pending.done = result || null;\n                this.scheduleAccept();\n            }\n        }, err => {\n            this.view.dispatch({ effects: closeCompletionEffect.of(null) });\n            logException(this.view.state, err);\n        });\n    }\n    scheduleAccept() {\n        if (this.running.every(q => q.done !== undefined))\n            this.accept();\n        else if (this.debounceAccept < 0)\n            this.debounceAccept = setTimeout(() => this.accept(), this.view.state.facet(completionConfig).updateSyncTime);\n    }\n    // For each finished query in this.running, try to create a result\n    // or, if appropriate, restart the query.\n    accept() {\n        var _a;\n        if (this.debounceAccept > -1)\n            clearTimeout(this.debounceAccept);\n        this.debounceAccept = -1;\n        let updated = [];\n        let conf = this.view.state.facet(completionConfig), cState = this.view.state.field(completionState);\n        for (let i = 0; i < this.running.length; i++) {\n            let query = this.running[i];\n            if (query.done === undefined)\n                continue;\n            this.running.splice(i--, 1);\n            if (query.done) {\n                let pos = cur(query.updates.length ? query.updates[0].startState : this.view.state);\n                let limit = Math.min(pos, query.done.from + (query.active.explicit ? 0 : 1));\n                let active = new ActiveResult(query.active.source, query.active.explicit, limit, query.done, query.done.from, (_a = query.done.to) !== null && _a !== void 0 ? _a : pos);\n                // Replay the transactions that happened since the start of\n                // the request and see if that preserves the result\n                for (let tr of query.updates)\n                    active = active.update(tr, conf);\n                if (active.hasResult()) {\n                    updated.push(active);\n                    continue;\n                }\n            }\n            let current = cState.active.find(a => a.source == query.active.source);\n            if (current && current.isPending) {\n                if (query.done == null) {\n                    // Explicitly failed. Should clear the pending status if it\n                    // hasn't been re-set in the meantime.\n                    let active = new ActiveSource(query.active.source, 0 /* State.Inactive */);\n                    for (let tr of query.updates)\n                        active = active.update(tr, conf);\n                    if (!active.isPending)\n                        updated.push(active);\n                }\n                else {\n                    // Cleared by subsequent transactions. Restart.\n                    this.startQuery(current);\n                }\n            }\n        }\n        if (updated.length || cState.open && cState.open.disabled)\n            this.view.dispatch({ effects: setActiveEffect.of(updated) });\n    }\n}, {\n    eventHandlers: {\n        blur(event) {\n            let state = this.view.state.field(completionState, false);\n            if (state && state.tooltip && this.view.state.facet(completionConfig).closeOnBlur) {\n                let dialog = state.open && getTooltip(this.view, state.open.tooltip);\n                if (!dialog || !dialog.dom.contains(event.relatedTarget))\n                    setTimeout(() => this.view.dispatch({ effects: closeCompletionEffect.of(null) }), 10);\n            }\n        },\n        compositionstart() {\n            this.composing = 1 /* CompositionState.Started */;\n        },\n        compositionend() {\n            if (this.composing == 3 /* CompositionState.ChangedAndMoved */) {\n                // Safari fires compositionend events synchronously, possibly\n                // from inside an update, so dispatch asynchronously to avoid reentrancy\n                setTimeout(() => this.view.dispatch({ effects: startCompletionEffect.of(false) }), 20);\n            }\n            this.composing = 0 /* CompositionState.None */;\n        }\n    }\n});\nconst windows = typeof navigator == \"object\" && /*@__PURE__*//Win/.test(navigator.platform);\nconst commitCharacters = /*@__PURE__*/Prec.highest(/*@__PURE__*/EditorView.domEventHandlers({\n    keydown(event, view) {\n        let field = view.state.field(completionState, false);\n        if (!field || !field.open || field.open.disabled || field.open.selected < 0 ||\n            event.key.length > 1 || event.ctrlKey && !(windows && event.altKey) || event.metaKey)\n            return false;\n        let option = field.open.options[field.open.selected];\n        let result = field.active.find(a => a.source == option.source);\n        let commitChars = option.completion.commitCharacters || result.result.commitCharacters;\n        if (commitChars && commitChars.indexOf(event.key) > -1)\n            applyCompletion(view, option);\n        return false;\n    }\n}));\n\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-tooltip.cm-tooltip-autocomplete\": {\n        \"& > ul\": {\n            fontFamily: \"monospace\",\n            whiteSpace: \"nowrap\",\n            overflow: \"hidden auto\",\n            maxWidth_fallback: \"700px\",\n            maxWidth: \"min(700px, 95vw)\",\n            minWidth: \"250px\",\n            maxHeight: \"10em\",\n            height: \"100%\",\n            listStyle: \"none\",\n            margin: 0,\n            padding: 0,\n            \"& > li, & > completion-section\": {\n                padding: \"1px 3px\",\n                lineHeight: 1.2\n            },\n            \"& > li\": {\n                overflowX: \"hidden\",\n                textOverflow: \"ellipsis\",\n                cursor: \"pointer\"\n            },\n            \"& > completion-section\": {\n                display: \"list-item\",\n                borderBottom: \"1px solid silver\",\n                paddingLeft: \"0.5em\",\n                opacity: 0.7\n            }\n        }\n    },\n    \"&light .cm-tooltip-autocomplete ul li[aria-selected]\": {\n        background: \"#17c\",\n        color: \"white\",\n    },\n    \"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n        background: \"#777\",\n    },\n    \"&dark .cm-tooltip-autocomplete ul li[aria-selected]\": {\n        background: \"#347\",\n        color: \"white\",\n    },\n    \"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n        background: \"#444\",\n    },\n    \".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after\": {\n        content: '\"···\"',\n        opacity: 0.5,\n        display: \"block\",\n        textAlign: \"center\"\n    },\n    \".cm-tooltip.cm-completionInfo\": {\n        position: \"absolute\",\n        padding: \"3px 9px\",\n        width: \"max-content\",\n        maxWidth: `${400 /* Info.Width */}px`,\n        boxSizing: \"border-box\",\n        whiteSpace: \"pre-line\"\n    },\n    \".cm-completionInfo.cm-completionInfo-left\": { right: \"100%\" },\n    \".cm-completionInfo.cm-completionInfo-right\": { left: \"100%\" },\n    \".cm-completionInfo.cm-completionInfo-left-narrow\": { right: `${30 /* Info.Margin */}px` },\n    \".cm-completionInfo.cm-completionInfo-right-narrow\": { left: `${30 /* Info.Margin */}px` },\n    \"&light .cm-snippetField\": { backgroundColor: \"#00000022\" },\n    \"&dark .cm-snippetField\": { backgroundColor: \"#ffffff22\" },\n    \".cm-snippetFieldPosition\": {\n        verticalAlign: \"text-top\",\n        width: 0,\n        height: \"1.15em\",\n        display: \"inline-block\",\n        margin: \"0 -0.7px -.7em\",\n        borderLeft: \"1.4px dotted #888\"\n    },\n    \".cm-completionMatchedText\": {\n        textDecoration: \"underline\"\n    },\n    \".cm-completionDetail\": {\n        marginLeft: \"0.5em\",\n        fontStyle: \"italic\"\n    },\n    \".cm-completionIcon\": {\n        fontSize: \"90%\",\n        width: \".8em\",\n        display: \"inline-block\",\n        textAlign: \"center\",\n        paddingRight: \".6em\",\n        opacity: \"0.6\",\n        boxSizing: \"content-box\"\n    },\n    \".cm-completionIcon-function, .cm-completionIcon-method\": {\n        \"&:after\": { content: \"'ƒ'\" }\n    },\n    \".cm-completionIcon-class\": {\n        \"&:after\": { content: \"'○'\" }\n    },\n    \".cm-completionIcon-interface\": {\n        \"&:after\": { content: \"'◌'\" }\n    },\n    \".cm-completionIcon-variable\": {\n        \"&:after\": { content: \"'𝑥'\" }\n    },\n    \".cm-completionIcon-constant\": {\n        \"&:after\": { content: \"'𝐶'\" }\n    },\n    \".cm-completionIcon-type\": {\n        \"&:after\": { content: \"'𝑡'\" }\n    },\n    \".cm-completionIcon-enum\": {\n        \"&:after\": { content: \"'∪'\" }\n    },\n    \".cm-completionIcon-property\": {\n        \"&:after\": { content: \"'□'\" }\n    },\n    \".cm-completionIcon-keyword\": {\n        \"&:after\": { content: \"'🔑\\uFE0E'\" } // Disable emoji rendering\n    },\n    \".cm-completionIcon-namespace\": {\n        \"&:after\": { content: \"'▢'\" }\n    },\n    \".cm-completionIcon-text\": {\n        \"&:after\": { content: \"'abc'\", fontSize: \"50%\", verticalAlign: \"middle\" }\n    }\n});\n\nclass FieldPos {\n    constructor(field, line, from, to) {\n        this.field = field;\n        this.line = line;\n        this.from = from;\n        this.to = to;\n    }\n}\nclass FieldRange {\n    constructor(field, from, to) {\n        this.field = field;\n        this.from = from;\n        this.to = to;\n    }\n    map(changes) {\n        let from = changes.mapPos(this.from, -1, MapMode.TrackDel);\n        let to = changes.mapPos(this.to, 1, MapMode.TrackDel);\n        return from == null || to == null ? null : new FieldRange(this.field, from, to);\n    }\n}\nclass Snippet {\n    constructor(lines, fieldPositions) {\n        this.lines = lines;\n        this.fieldPositions = fieldPositions;\n    }\n    instantiate(state, pos) {\n        let text = [], lineStart = [pos];\n        let lineObj = state.doc.lineAt(pos), baseIndent = /^\\s*/.exec(lineObj.text)[0];\n        for (let line of this.lines) {\n            if (text.length) {\n                let indent = baseIndent, tabs = /^\\t*/.exec(line)[0].length;\n                for (let i = 0; i < tabs; i++)\n                    indent += state.facet(indentUnit);\n                lineStart.push(pos + indent.length - tabs);\n                line = indent + line.slice(tabs);\n            }\n            text.push(line);\n            pos += line.length + 1;\n        }\n        let ranges = this.fieldPositions.map(pos => new FieldRange(pos.field, lineStart[pos.line] + pos.from, lineStart[pos.line] + pos.to));\n        return { text, ranges };\n    }\n    static parse(template) {\n        let fields = [];\n        let lines = [], positions = [], m;\n        for (let line of template.split(/\\r\\n?|\\n/)) {\n            while (m = /[#$]\\{(?:(\\d+)(?::([^{}]*))?|((?:\\\\[{}]|[^{}])*))\\}/.exec(line)) {\n                let seq = m[1] ? +m[1] : null, rawName = m[2] || m[3] || \"\", found = -1;\n                let name = rawName.replace(/\\\\[{}]/g, m => m[1]);\n                for (let i = 0; i < fields.length; i++) {\n                    if (seq != null ? fields[i].seq == seq : name ? fields[i].name == name : false)\n                        found = i;\n                }\n                if (found < 0) {\n                    let i = 0;\n                    while (i < fields.length && (seq == null || (fields[i].seq != null && fields[i].seq < seq)))\n                        i++;\n                    fields.splice(i, 0, { seq, name });\n                    found = i;\n                    for (let pos of positions)\n                        if (pos.field >= found)\n                            pos.field++;\n                }\n                for (let pos of positions)\n                    if (pos.line == lines.length && pos.from > m.index) {\n                        let snip = m[2] ? 3 + (m[1] || \"\").length : 2;\n                        pos.from -= snip;\n                        pos.to -= snip;\n                    }\n                positions.push(new FieldPos(found, lines.length, m.index, m.index + name.length));\n                line = line.slice(0, m.index) + rawName + line.slice(m.index + m[0].length);\n            }\n            line = line.replace(/\\\\([{}])/g, (_, brace, index) => {\n                for (let pos of positions)\n                    if (pos.line == lines.length && pos.from > index) {\n                        pos.from--;\n                        pos.to--;\n                    }\n                return brace;\n            });\n            lines.push(line);\n        }\n        return new Snippet(lines, positions);\n    }\n}\nlet fieldMarker = /*@__PURE__*/Decoration.widget({ widget: /*@__PURE__*/new class extends WidgetType {\n        toDOM() {\n            let span = document.createElement(\"span\");\n            span.className = \"cm-snippetFieldPosition\";\n            return span;\n        }\n        ignoreEvent() { return false; }\n    } });\nlet fieldRange = /*@__PURE__*/Decoration.mark({ class: \"cm-snippetField\" });\nclass ActiveSnippet {\n    constructor(ranges, active) {\n        this.ranges = ranges;\n        this.active = active;\n        this.deco = Decoration.set(ranges.map(r => (r.from == r.to ? fieldMarker : fieldRange).range(r.from, r.to)), true);\n    }\n    map(changes) {\n        let ranges = [];\n        for (let r of this.ranges) {\n            let mapped = r.map(changes);\n            if (!mapped)\n                return null;\n            ranges.push(mapped);\n        }\n        return new ActiveSnippet(ranges, this.active);\n    }\n    selectionInsideField(sel) {\n        return sel.ranges.every(range => this.ranges.some(r => r.field == this.active && r.from <= range.from && r.to >= range.to));\n    }\n}\nconst setActive = /*@__PURE__*/StateEffect.define({\n    map(value, changes) { return value && value.map(changes); }\n});\nconst moveToField = /*@__PURE__*/StateEffect.define();\nconst snippetState = /*@__PURE__*/StateField.define({\n    create() { return null; },\n    update(value, tr) {\n        for (let effect of tr.effects) {\n            if (effect.is(setActive))\n                return effect.value;\n            if (effect.is(moveToField) && value)\n                return new ActiveSnippet(value.ranges, effect.value);\n        }\n        if (value && tr.docChanged)\n            value = value.map(tr.changes);\n        if (value && tr.selection && !value.selectionInsideField(tr.selection))\n            value = null;\n        return value;\n    },\n    provide: f => EditorView.decorations.from(f, val => val ? val.deco : Decoration.none)\n});\nfunction fieldSelection(ranges, field) {\n    return EditorSelection.create(ranges.filter(r => r.field == field).map(r => EditorSelection.range(r.from, r.to)));\n}\n/**\nConvert a snippet template to a function that can\n[apply](https://codemirror.net/6/docs/ref/#autocomplete.Completion.apply) it. Snippets are written\nusing syntax like this:\n\n    \"for (let ${index} = 0; ${index} < ${end}; ${index}++) {\\n\\t${}\\n}\"\n\nEach `${}` placeholder (you may also use `#{}`) indicates a field\nthat the user can fill in. Its name, if any, will be the default\ncontent for the field.\n\nWhen the snippet is activated by calling the returned function,\nthe code is inserted at the given position. Newlines in the\ntemplate are indented by the indentation of the start line, plus\none [indent unit](https://codemirror.net/6/docs/ref/#language.indentUnit) per tab character after\nthe newline.\n\nOn activation, (all instances of) the first field are selected.\nThe user can move between fields with Tab and Shift-Tab as long as\nthe fields are active. Moving to the last field or moving the\ncursor out of the current field deactivates the fields.\n\nThe order of fields defaults to textual order, but you can add\nnumbers to placeholders (`${1}` or `${1:defaultText}`) to provide\na custom order.\n\nTo include a literal `{` or `}` in your template, put a backslash\nin front of it. This will be removed and the brace will not be\ninterpreted as indicating a placeholder.\n*/\nfunction snippet(template) {\n    let snippet = Snippet.parse(template);\n    return (editor, completion, from, to) => {\n        let { text, ranges } = snippet.instantiate(editor.state, from);\n        let { main } = editor.state.selection;\n        let spec = {\n            changes: { from, to: to == main.from ? main.to : to, insert: Text.of(text) },\n            scrollIntoView: true,\n            annotations: completion ? [pickedCompletion.of(completion), Transaction.userEvent.of(\"input.complete\")] : undefined\n        };\n        if (ranges.length)\n            spec.selection = fieldSelection(ranges, 0);\n        if (ranges.some(r => r.field > 0)) {\n            let active = new ActiveSnippet(ranges, 0);\n            let effects = spec.effects = [setActive.of(active)];\n            if (editor.state.field(snippetState, false) === undefined)\n                effects.push(StateEffect.appendConfig.of([snippetState, addSnippetKeymap, snippetPointerHandler, baseTheme]));\n        }\n        editor.dispatch(editor.state.update(spec));\n    };\n}\nfunction moveField(dir) {\n    return ({ state, dispatch }) => {\n        let active = state.field(snippetState, false);\n        if (!active || dir < 0 && active.active == 0)\n            return false;\n        let next = active.active + dir, last = dir > 0 && !active.ranges.some(r => r.field == next + dir);\n        dispatch(state.update({\n            selection: fieldSelection(active.ranges, next),\n            effects: setActive.of(last ? null : new ActiveSnippet(active.ranges, next)),\n            scrollIntoView: true\n        }));\n        return true;\n    };\n}\n/**\nA command that clears the active snippet, if any.\n*/\nconst clearSnippet = ({ state, dispatch }) => {\n    let active = state.field(snippetState, false);\n    if (!active)\n        return false;\n    dispatch(state.update({ effects: setActive.of(null) }));\n    return true;\n};\n/**\nMove to the next snippet field, if available.\n*/\nconst nextSnippetField = /*@__PURE__*/moveField(1);\n/**\nMove to the previous snippet field, if available.\n*/\nconst prevSnippetField = /*@__PURE__*/moveField(-1);\n/**\nCheck if there is an active snippet with a next field for\n`nextSnippetField` to move to.\n*/\nfunction hasNextSnippetField(state) {\n    let active = state.field(snippetState, false);\n    return !!(active && active.ranges.some(r => r.field == active.active + 1));\n}\n/**\nReturns true if there is an active snippet and a previous field\nfor `prevSnippetField` to move to.\n*/\nfunction hasPrevSnippetField(state) {\n    let active = state.field(snippetState, false);\n    return !!(active && active.active > 0);\n}\nconst defaultSnippetKeymap = [\n    { key: \"Tab\", run: nextSnippetField, shift: prevSnippetField },\n    { key: \"Escape\", run: clearSnippet }\n];\n/**\nA facet that can be used to configure the key bindings used by\nsnippets. The default binds Tab to\n[`nextSnippetField`](https://codemirror.net/6/docs/ref/#autocomplete.nextSnippetField), Shift-Tab to\n[`prevSnippetField`](https://codemirror.net/6/docs/ref/#autocomplete.prevSnippetField), and Escape\nto [`clearSnippet`](https://codemirror.net/6/docs/ref/#autocomplete.clearSnippet).\n*/\nconst snippetKeymap = /*@__PURE__*/Facet.define({\n    combine(maps) { return maps.length ? maps[0] : defaultSnippetKeymap; }\n});\nconst addSnippetKeymap = /*@__PURE__*/Prec.highest(/*@__PURE__*/keymap.compute([snippetKeymap], state => state.facet(snippetKeymap)));\n/**\nCreate a completion from a snippet. Returns an object with the\nproperties from `completion`, plus an `apply` function that\napplies the snippet.\n*/\nfunction snippetCompletion(template, completion) {\n    return { ...completion, apply: snippet(template) };\n}\nconst snippetPointerHandler = /*@__PURE__*/EditorView.domEventHandlers({\n    mousedown(event, view) {\n        let active = view.state.field(snippetState, false), pos;\n        if (!active || (pos = view.posAtCoords({ x: event.clientX, y: event.clientY })) == null)\n            return false;\n        let match = active.ranges.find(r => r.from <= pos && r.to >= pos);\n        if (!match || match.field == active.active)\n            return false;\n        view.dispatch({\n            selection: fieldSelection(active.ranges, match.field),\n            effects: setActive.of(active.ranges.some(r => r.field > match.field)\n                ? new ActiveSnippet(active.ranges, match.field) : null),\n            scrollIntoView: true\n        });\n        return true;\n    }\n});\n\nfunction wordRE(wordChars) {\n    let escaped = wordChars.replace(/[\\]\\-\\\\]/g, \"\\\\$&\");\n    try {\n        return new RegExp(`[\\\\p{Alphabetic}\\\\p{Number}_${escaped}]+`, \"ug\");\n    }\n    catch (_a) {\n        return new RegExp(`[\\w${escaped}]`, \"g\");\n    }\n}\nfunction mapRE(re, f) {\n    return new RegExp(f(re.source), re.unicode ? \"u\" : \"\");\n}\nconst wordCaches = /*@__PURE__*/Object.create(null);\nfunction wordCache(wordChars) {\n    return wordCaches[wordChars] || (wordCaches[wordChars] = new WeakMap);\n}\nfunction storeWords(doc, wordRE, result, seen, ignoreAt) {\n    for (let lines = doc.iterLines(), pos = 0; !lines.next().done;) {\n        let { value } = lines, m;\n        wordRE.lastIndex = 0;\n        while (m = wordRE.exec(value)) {\n            if (!seen[m[0]] && pos + m.index != ignoreAt) {\n                result.push({ type: \"text\", label: m[0] });\n                seen[m[0]] = true;\n                if (result.length >= 2000 /* C.MaxList */)\n                    return;\n            }\n        }\n        pos += value.length + 1;\n    }\n}\nfunction collectWords(doc, cache, wordRE, to, ignoreAt) {\n    let big = doc.length >= 1000 /* C.MinCacheLen */;\n    let cached = big && cache.get(doc);\n    if (cached)\n        return cached;\n    let result = [], seen = Object.create(null);\n    if (doc.children) {\n        let pos = 0;\n        for (let ch of doc.children) {\n            if (ch.length >= 1000 /* C.MinCacheLen */) {\n                for (let c of collectWords(ch, cache, wordRE, to - pos, ignoreAt - pos)) {\n                    if (!seen[c.label]) {\n                        seen[c.label] = true;\n                        result.push(c);\n                    }\n                }\n            }\n            else {\n                storeWords(ch, wordRE, result, seen, ignoreAt - pos);\n            }\n            pos += ch.length + 1;\n        }\n    }\n    else {\n        storeWords(doc, wordRE, result, seen, ignoreAt);\n    }\n    if (big && result.length < 2000 /* C.MaxList */)\n        cache.set(doc, result);\n    return result;\n}\n/**\nA completion source that will scan the document for words (using a\n[character categorizer](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer)), and\nreturn those as completions.\n*/\nconst completeAnyWord = context => {\n    let wordChars = context.state.languageDataAt(\"wordChars\", context.pos).join(\"\");\n    let re = wordRE(wordChars);\n    let token = context.matchBefore(mapRE(re, s => s + \"$\"));\n    if (!token && !context.explicit)\n        return null;\n    let from = token ? token.from : context.pos;\n    let options = collectWords(context.state.doc, wordCache(wordChars), re, 50000 /* C.Range */, from);\n    return { from, options, validFor: mapRE(re, s => \"^\" + s) };\n};\n\nconst defaults = {\n    brackets: [\"(\", \"[\", \"{\", \"'\", '\"'],\n    before: \")]}:;>\",\n    stringPrefixes: []\n};\nconst closeBracketEffect = /*@__PURE__*/StateEffect.define({\n    map(value, mapping) {\n        let mapped = mapping.mapPos(value, -1, MapMode.TrackAfter);\n        return mapped == null ? undefined : mapped;\n    }\n});\nconst closedBracket = /*@__PURE__*/new class extends RangeValue {\n};\nclosedBracket.startSide = 1;\nclosedBracket.endSide = -1;\nconst bracketState = /*@__PURE__*/StateField.define({\n    create() { return RangeSet.empty; },\n    update(value, tr) {\n        value = value.map(tr.changes);\n        if (tr.selection) {\n            let line = tr.state.doc.lineAt(tr.selection.main.head);\n            value = value.update({ filter: from => from >= line.from && from <= line.to });\n        }\n        for (let effect of tr.effects)\n            if (effect.is(closeBracketEffect))\n                value = value.update({ add: [closedBracket.range(effect.value, effect.value + 1)] });\n        return value;\n    }\n});\n/**\nExtension to enable bracket-closing behavior. When a closeable\nbracket is typed, its closing bracket is immediately inserted\nafter the cursor. When closing a bracket directly in front of a\nclosing bracket inserted by the extension, the cursor moves over\nthat bracket.\n*/\nfunction closeBrackets() {\n    return [inputHandler, bracketState];\n}\nconst definedClosing = \"()[]{}<>«»»«［］｛｝\";\nfunction closing(ch) {\n    for (let i = 0; i < definedClosing.length; i += 2)\n        if (definedClosing.charCodeAt(i) == ch)\n            return definedClosing.charAt(i + 1);\n    return fromCodePoint(ch < 128 ? ch : ch + 1);\n}\nfunction config(state, pos) {\n    return state.languageDataAt(\"closeBrackets\", pos)[0] || defaults;\n}\nconst android = typeof navigator == \"object\" && /*@__PURE__*//Android\\b/.test(navigator.userAgent);\nconst inputHandler = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, insert) => {\n    if ((android ? view.composing : view.compositionStarted) || view.state.readOnly)\n        return false;\n    let sel = view.state.selection.main;\n    if (insert.length > 2 || insert.length == 2 && codePointSize(codePointAt(insert, 0)) == 1 ||\n        from != sel.from || to != sel.to)\n        return false;\n    let tr = insertBracket(view.state, insert);\n    if (!tr)\n        return false;\n    view.dispatch(tr);\n    return true;\n});\n/**\nCommand that implements deleting a pair of matching brackets when\nthe cursor is between them.\n*/\nconst deleteBracketPair = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    let conf = config(state, state.selection.main.head);\n    let tokens = conf.brackets || defaults.brackets;\n    let dont = null, changes = state.changeByRange(range => {\n        if (range.empty) {\n            let before = prevChar(state.doc, range.head);\n            for (let token of tokens) {\n                if (token == before && nextChar(state.doc, range.head) == closing(codePointAt(token, 0)))\n                    return { changes: { from: range.head - token.length, to: range.head + token.length },\n                        range: EditorSelection.cursor(range.head - token.length) };\n            }\n        }\n        return { range: dont = range };\n    });\n    if (!dont)\n        dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"delete.backward\" }));\n    return !dont;\n};\n/**\nClose-brackets related key bindings. Binds Backspace to\n[`deleteBracketPair`](https://codemirror.net/6/docs/ref/#autocomplete.deleteBracketPair).\n*/\nconst closeBracketsKeymap = [\n    { key: \"Backspace\", run: deleteBracketPair }\n];\n/**\nImplements the extension's behavior on text insertion. If the\ngiven string counts as a bracket in the language around the\nselection, and replacing the selection with it requires custom\nbehavior (inserting a closing version or skipping past a\npreviously-closed bracket), this function returns a transaction\nrepresenting that custom behavior. (You only need this if you want\nto programmatically insert brackets—the\n[`closeBrackets`](https://codemirror.net/6/docs/ref/#autocomplete.closeBrackets) extension will\ntake care of running this for user input.)\n*/\nfunction insertBracket(state, bracket) {\n    let conf = config(state, state.selection.main.head);\n    let tokens = conf.brackets || defaults.brackets;\n    for (let tok of tokens) {\n        let closed = closing(codePointAt(tok, 0));\n        if (bracket == tok)\n            return closed == tok ? handleSame(state, tok, tokens.indexOf(tok + tok + tok) > -1, conf)\n                : handleOpen(state, tok, closed, conf.before || defaults.before);\n        if (bracket == closed && closedBracketAt(state, state.selection.main.from))\n            return handleClose(state, tok, closed);\n    }\n    return null;\n}\nfunction closedBracketAt(state, pos) {\n    let found = false;\n    state.field(bracketState).between(0, state.doc.length, from => {\n        if (from == pos)\n            found = true;\n    });\n    return found;\n}\nfunction nextChar(doc, pos) {\n    let next = doc.sliceString(pos, pos + 2);\n    return next.slice(0, codePointSize(codePointAt(next, 0)));\n}\nfunction prevChar(doc, pos) {\n    let prev = doc.sliceString(pos - 2, pos);\n    return codePointSize(codePointAt(prev, 0)) == prev.length ? prev : prev.slice(1);\n}\nfunction handleOpen(state, open, close, closeBefore) {\n    let dont = null, changes = state.changeByRange(range => {\n        if (!range.empty)\n            return { changes: [{ insert: open, from: range.from }, { insert: close, from: range.to }],\n                effects: closeBracketEffect.of(range.to + open.length),\n                range: EditorSelection.range(range.anchor + open.length, range.head + open.length) };\n        let next = nextChar(state.doc, range.head);\n        if (!next || /\\s/.test(next) || closeBefore.indexOf(next) > -1)\n            return { changes: { insert: open + close, from: range.head },\n                effects: closeBracketEffect.of(range.head + open.length),\n                range: EditorSelection.cursor(range.head + open.length) };\n        return { range: dont = range };\n    });\n    return dont ? null : state.update(changes, {\n        scrollIntoView: true,\n        userEvent: \"input.type\"\n    });\n}\nfunction handleClose(state, _open, close) {\n    let dont = null, changes = state.changeByRange(range => {\n        if (range.empty && nextChar(state.doc, range.head) == close)\n            return { changes: { from: range.head, to: range.head + close.length, insert: close },\n                range: EditorSelection.cursor(range.head + close.length) };\n        return dont = { range };\n    });\n    return dont ? null : state.update(changes, {\n        scrollIntoView: true,\n        userEvent: \"input.type\"\n    });\n}\n// Handles cases where the open and close token are the same, and\n// possibly triple quotes (as in `\"\"\"abc\"\"\"`-style quoting).\nfunction handleSame(state, token, allowTriple, config) {\n    let stringPrefixes = config.stringPrefixes || defaults.stringPrefixes;\n    let dont = null, changes = state.changeByRange(range => {\n        if (!range.empty)\n            return { changes: [{ insert: token, from: range.from }, { insert: token, from: range.to }],\n                effects: closeBracketEffect.of(range.to + token.length),\n                range: EditorSelection.range(range.anchor + token.length, range.head + token.length) };\n        let pos = range.head, next = nextChar(state.doc, pos), start;\n        if (next == token) {\n            if (nodeStart(state, pos)) {\n                return { changes: { insert: token + token, from: pos },\n                    effects: closeBracketEffect.of(pos + token.length),\n                    range: EditorSelection.cursor(pos + token.length) };\n            }\n            else if (closedBracketAt(state, pos)) {\n                let isTriple = allowTriple && state.sliceDoc(pos, pos + token.length * 3) == token + token + token;\n                let content = isTriple ? token + token + token : token;\n                return { changes: { from: pos, to: pos + content.length, insert: content },\n                    range: EditorSelection.cursor(pos + content.length) };\n            }\n        }\n        else if (allowTriple && state.sliceDoc(pos - 2 * token.length, pos) == token + token &&\n            (start = canStartStringAt(state, pos - 2 * token.length, stringPrefixes)) > -1 &&\n            nodeStart(state, start)) {\n            return { changes: { insert: token + token + token + token, from: pos },\n                effects: closeBracketEffect.of(pos + token.length),\n                range: EditorSelection.cursor(pos + token.length) };\n        }\n        else if (state.charCategorizer(pos)(next) != CharCategory.Word) {\n            if (canStartStringAt(state, pos, stringPrefixes) > -1 && !probablyInString(state, pos, token, stringPrefixes))\n                return { changes: { insert: token + token, from: pos },\n                    effects: closeBracketEffect.of(pos + token.length),\n                    range: EditorSelection.cursor(pos + token.length) };\n        }\n        return { range: dont = range };\n    });\n    return dont ? null : state.update(changes, {\n        scrollIntoView: true,\n        userEvent: \"input.type\"\n    });\n}\nfunction nodeStart(state, pos) {\n    let tree = syntaxTree(state).resolveInner(pos + 1);\n    return tree.parent && tree.from == pos;\n}\nfunction probablyInString(state, pos, quoteToken, prefixes) {\n    let node = syntaxTree(state).resolveInner(pos, -1);\n    let maxPrefix = prefixes.reduce((m, p) => Math.max(m, p.length), 0);\n    for (let i = 0; i < 5; i++) {\n        let start = state.sliceDoc(node.from, Math.min(node.to, node.from + quoteToken.length + maxPrefix));\n        let quotePos = start.indexOf(quoteToken);\n        if (!quotePos || quotePos > -1 && prefixes.indexOf(start.slice(0, quotePos)) > -1) {\n            let first = node.firstChild;\n            while (first && first.from == node.from && first.to - first.from > quoteToken.length + quotePos) {\n                if (state.sliceDoc(first.to - quoteToken.length, first.to) == quoteToken)\n                    return false;\n                first = first.firstChild;\n            }\n            return true;\n        }\n        let parent = node.to == pos && node.parent;\n        if (!parent)\n            break;\n        node = parent;\n    }\n    return false;\n}\nfunction canStartStringAt(state, pos, prefixes) {\n    let charCat = state.charCategorizer(pos);\n    if (charCat(state.sliceDoc(pos - 1, pos)) != CharCategory.Word)\n        return pos;\n    for (let prefix of prefixes) {\n        let start = pos - prefix.length;\n        if (state.sliceDoc(start, pos) == prefix && charCat(state.sliceDoc(start - 1, start)) != CharCategory.Word)\n            return start;\n    }\n    return -1;\n}\n\n/**\nReturns an extension that enables autocompletion.\n*/\nfunction autocompletion(config = {}) {\n    return [\n        commitCharacters,\n        completionState,\n        completionConfig.of(config),\n        completionPlugin,\n        completionKeymapExt,\n        baseTheme\n    ];\n}\n/**\nBasic keybindings for autocompletion.\n\n - Ctrl-Space (and Alt-\\` or Alt-i on macOS): [`startCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.startCompletion)\n - Escape: [`closeCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.closeCompletion)\n - ArrowDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true)`\n - ArrowUp: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(false)`\n - PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, \"page\")`\n - PageUp: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(false, \"page\")`\n - Enter: [`acceptCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.acceptCompletion)\n*/\nconst completionKeymap = [\n    { key: \"Ctrl-Space\", run: startCompletion },\n    { mac: \"Alt-`\", run: startCompletion },\n    { mac: \"Alt-i\", run: startCompletion },\n    { key: \"Escape\", run: closeCompletion },\n    { key: \"ArrowDown\", run: /*@__PURE__*/moveCompletionSelection(true) },\n    { key: \"ArrowUp\", run: /*@__PURE__*/moveCompletionSelection(false) },\n    { key: \"PageDown\", run: /*@__PURE__*/moveCompletionSelection(true, \"page\") },\n    { key: \"PageUp\", run: /*@__PURE__*/moveCompletionSelection(false, \"page\") },\n    { key: \"Enter\", run: acceptCompletion }\n];\nconst completionKeymapExt = /*@__PURE__*/Prec.highest(/*@__PURE__*/keymap.computeN([completionConfig], state => state.facet(completionConfig).defaultKeymap ? [completionKeymap] : []));\n/**\nGet the current completion status. When completions are available,\nthis will return `\"active\"`. When completions are pending (in the\nprocess of being queried), this returns `\"pending\"`. Otherwise, it\nreturns `null`.\n*/\nfunction completionStatus(state) {\n    let cState = state.field(completionState, false);\n    return cState && cState.active.some(a => a.isPending) ? \"pending\"\n        : cState && cState.active.some(a => a.state != 0 /* State.Inactive */) ? \"active\" : null;\n}\nconst completionArrayCache = /*@__PURE__*/new WeakMap;\n/**\nReturns the available completions as an array.\n*/\nfunction currentCompletions(state) {\n    var _a;\n    let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n    if (!open || open.disabled)\n        return [];\n    let completions = completionArrayCache.get(open.options);\n    if (!completions)\n        completionArrayCache.set(open.options, completions = open.options.map(o => o.completion));\n    return completions;\n}\n/**\nReturn the currently selected completion, if any.\n*/\nfunction selectedCompletion(state) {\n    var _a;\n    let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n    return open && !open.disabled && open.selected >= 0 ? open.options[open.selected].completion : null;\n}\n/**\nReturns the currently selected position in the active completion\nlist, or null if no completions are active.\n*/\nfunction selectedCompletionIndex(state) {\n    var _a;\n    let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n    return open && !open.disabled && open.selected >= 0 ? open.selected : null;\n}\n/**\nCreate an effect that can be attached to a transaction to change\nthe currently selected completion.\n*/\nfunction setSelectedCompletion(index) {\n    return setSelectedEffect.of(index);\n}\n\nexport { CompletionContext, acceptCompletion, autocompletion, clearSnippet, closeBrackets, closeBracketsKeymap, closeCompletion, completeAnyWord, completeFromList, completionKeymap, completionStatus, currentCompletions, deleteBracketPair, hasNextSnippetField, hasPrevSnippetField, ifIn, ifNotIn, insertBracket, insertCompletionText, moveCompletionSelection, nextSnippetField, pickedCompletion, prevSnippetField, selectedCompletion, selectedCompletionIndex, setSelectedCompletion, snippet, snippetCompletion, snippetKeymap, startCompletion };\n","import { Decoration, showPanel, EditorView, ViewPlugin, gutter, showTooltip, hoverTooltip, getPanel, logException, WidgetType, GutterMarker } from '@codemirror/view';\nimport { StateEffect, StateField, Facet, combineConfig, RangeSet, RangeSetBuilder } from '@codemirror/state';\nimport elt from 'crelt';\n\nclass SelectedDiagnostic {\n    constructor(from, to, diagnostic) {\n        this.from = from;\n        this.to = to;\n        this.diagnostic = diagnostic;\n    }\n}\nclass LintState {\n    constructor(diagnostics, panel, selected) {\n        this.diagnostics = diagnostics;\n        this.panel = panel;\n        this.selected = selected;\n    }\n    static init(diagnostics, panel, state) {\n        // Filter the list of diagnostics for which to create markers\n        let diagnosticFilter = state.facet(lintConfig).markerFilter;\n        if (diagnosticFilter)\n            diagnostics = diagnosticFilter(diagnostics, state);\n        let sorted = diagnostics.slice().sort((a, b) => a.from - b.from || a.to - b.to);\n        let deco = new RangeSetBuilder(), active = [], pos = 0;\n        let scan = state.doc.iter(), scanPos = 0, docLen = state.doc.length;\n        for (let i = 0;;) {\n            let next = i == sorted.length ? null : sorted[i];\n            if (!next && !active.length)\n                break;\n            let from, to;\n            if (active.length) {\n                from = pos;\n                to = active.reduce((p, d) => Math.min(p, d.to), next && next.from > from ? next.from : 1e8);\n            }\n            else {\n                from = next.from;\n                if (from > docLen)\n                    break;\n                to = next.to;\n                active.push(next);\n                i++;\n            }\n            while (i < sorted.length) {\n                let next = sorted[i];\n                if (next.from == from && (next.to > next.from || next.to == from)) {\n                    active.push(next);\n                    i++;\n                    to = Math.min(next.to, to);\n                }\n                else {\n                    to = Math.min(next.from, to);\n                    break;\n                }\n            }\n            to = Math.min(to, docLen);\n            let widget = false;\n            if (active.some(d => d.from == from && (d.to == to || to == docLen))) {\n                widget = from == to;\n                if (!widget && to - from < 10) {\n                    let behind = from - (scanPos + scan.value.length);\n                    if (behind > 0) {\n                        scan.next(behind);\n                        scanPos = from;\n                    }\n                    for (let check = from;;) {\n                        if (check >= to) {\n                            widget = true;\n                            break;\n                        }\n                        if (!scan.lineBreak && scanPos + scan.value.length > check)\n                            break;\n                        check = scanPos + scan.value.length;\n                        scanPos += scan.value.length;\n                        scan.next();\n                    }\n                }\n            }\n            let sev = maxSeverity(active);\n            if (widget) {\n                deco.add(from, from, Decoration.widget({\n                    widget: new DiagnosticWidget(sev),\n                    diagnostics: active.slice()\n                }));\n            }\n            else {\n                let markClass = active.reduce((c, d) => d.markClass ? c + \" \" + d.markClass : c, \"\");\n                deco.add(from, to, Decoration.mark({\n                    class: \"cm-lintRange cm-lintRange-\" + sev + markClass,\n                    diagnostics: active.slice(),\n                    inclusiveEnd: active.some(a => a.to > to)\n                }));\n            }\n            pos = to;\n            if (pos == docLen)\n                break;\n            for (let i = 0; i < active.length; i++)\n                if (active[i].to <= pos)\n                    active.splice(i--, 1);\n        }\n        let set = deco.finish();\n        return new LintState(set, panel, findDiagnostic(set));\n    }\n}\nfunction findDiagnostic(diagnostics, diagnostic = null, after = 0) {\n    let found = null;\n    diagnostics.between(after, 1e9, (from, to, { spec }) => {\n        if (diagnostic && spec.diagnostics.indexOf(diagnostic) < 0)\n            return;\n        if (!found)\n            found = new SelectedDiagnostic(from, to, diagnostic || spec.diagnostics[0]);\n        else if (spec.diagnostics.indexOf(found.diagnostic) < 0)\n            return false;\n        else\n            found = new SelectedDiagnostic(found.from, to, found.diagnostic);\n    });\n    return found;\n}\nfunction hideTooltip(tr, tooltip) {\n    let from = tooltip.pos, to = tooltip.end || from;\n    let result = tr.state.facet(lintConfig).hideOn(tr, from, to);\n    if (result != null)\n        return result;\n    let line = tr.startState.doc.lineAt(tooltip.pos);\n    return !!(tr.effects.some(e => e.is(setDiagnosticsEffect)) || tr.changes.touchesRange(line.from, Math.max(line.to, to)));\n}\nfunction maybeEnableLint(state, effects) {\n    return state.field(lintState, false) ? effects : effects.concat(StateEffect.appendConfig.of(lintExtensions));\n}\n/**\nReturns a transaction spec which updates the current set of\ndiagnostics, and enables the lint extension if if wasn't already\nactive.\n*/\nfunction setDiagnostics(state, diagnostics) {\n    return {\n        effects: maybeEnableLint(state, [setDiagnosticsEffect.of(diagnostics)])\n    };\n}\n/**\nThe state effect that updates the set of active diagnostics. Can\nbe useful when writing an extension that needs to track these.\n*/\nconst setDiagnosticsEffect = /*@__PURE__*/StateEffect.define();\nconst togglePanel = /*@__PURE__*/StateEffect.define();\nconst movePanelSelection = /*@__PURE__*/StateEffect.define();\nconst lintState = /*@__PURE__*/StateField.define({\n    create() {\n        return new LintState(Decoration.none, null, null);\n    },\n    update(value, tr) {\n        if (tr.docChanged && value.diagnostics.size) {\n            let mapped = value.diagnostics.map(tr.changes), selected = null, panel = value.panel;\n            if (value.selected) {\n                let selPos = tr.changes.mapPos(value.selected.from, 1);\n                selected = findDiagnostic(mapped, value.selected.diagnostic, selPos) || findDiagnostic(mapped, null, selPos);\n            }\n            if (!mapped.size && panel && tr.state.facet(lintConfig).autoPanel)\n                panel = null;\n            value = new LintState(mapped, panel, selected);\n        }\n        for (let effect of tr.effects) {\n            if (effect.is(setDiagnosticsEffect)) {\n                let panel = !tr.state.facet(lintConfig).autoPanel ? value.panel : effect.value.length ? LintPanel.open : null;\n                value = LintState.init(effect.value, panel, tr.state);\n            }\n            else if (effect.is(togglePanel)) {\n                value = new LintState(value.diagnostics, effect.value ? LintPanel.open : null, value.selected);\n            }\n            else if (effect.is(movePanelSelection)) {\n                value = new LintState(value.diagnostics, value.panel, effect.value);\n            }\n        }\n        return value;\n    },\n    provide: f => [showPanel.from(f, val => val.panel),\n        EditorView.decorations.from(f, s => s.diagnostics)]\n});\n/**\nReturns the number of active lint diagnostics in the given state.\n*/\nfunction diagnosticCount(state) {\n    let lint = state.field(lintState, false);\n    return lint ? lint.diagnostics.size : 0;\n}\nconst activeMark = /*@__PURE__*/Decoration.mark({ class: \"cm-lintRange cm-lintRange-active\" });\nfunction lintTooltip(view, pos, side) {\n    let { diagnostics } = view.state.field(lintState);\n    let found, start = -1, end = -1;\n    diagnostics.between(pos - (side < 0 ? 1 : 0), pos + (side > 0 ? 1 : 0), (from, to, { spec }) => {\n        if (pos >= from && pos <= to &&\n            (from == to || ((pos > from || side > 0) && (pos < to || side < 0)))) {\n            found = spec.diagnostics;\n            start = from;\n            end = to;\n            return false;\n        }\n    });\n    let diagnosticFilter = view.state.facet(lintConfig).tooltipFilter;\n    if (found && diagnosticFilter)\n        found = diagnosticFilter(found, view.state);\n    if (!found)\n        return null;\n    return {\n        pos: start,\n        end: end,\n        above: view.state.doc.lineAt(start).to < end,\n        create() {\n            return { dom: diagnosticsTooltip(view, found) };\n        }\n    };\n}\nfunction diagnosticsTooltip(view, diagnostics) {\n    return elt(\"ul\", { class: \"cm-tooltip-lint\" }, diagnostics.map(d => renderDiagnostic(view, d, false)));\n}\n/**\nCommand to open and focus the lint panel.\n*/\nconst openLintPanel = (view) => {\n    let field = view.state.field(lintState, false);\n    if (!field || !field.panel)\n        view.dispatch({ effects: maybeEnableLint(view.state, [togglePanel.of(true)]) });\n    let panel = getPanel(view, LintPanel.open);\n    if (panel)\n        panel.dom.querySelector(\".cm-panel-lint ul\").focus();\n    return true;\n};\n/**\nCommand to close the lint panel, when open.\n*/\nconst closeLintPanel = (view) => {\n    let field = view.state.field(lintState, false);\n    if (!field || !field.panel)\n        return false;\n    view.dispatch({ effects: togglePanel.of(false) });\n    return true;\n};\n/**\nMove the selection to the next diagnostic.\n*/\nconst nextDiagnostic = (view) => {\n    let field = view.state.field(lintState, false);\n    if (!field)\n        return false;\n    let sel = view.state.selection.main, next = field.diagnostics.iter(sel.to + 1);\n    if (!next.value) {\n        next = field.diagnostics.iter(0);\n        if (!next.value || next.from == sel.from && next.to == sel.to)\n            return false;\n    }\n    view.dispatch({ selection: { anchor: next.from, head: next.to }, scrollIntoView: true });\n    return true;\n};\n/**\nMove the selection to the previous diagnostic.\n*/\nconst previousDiagnostic = (view) => {\n    let { state } = view, field = state.field(lintState, false);\n    if (!field)\n        return false;\n    let sel = state.selection.main;\n    let prevFrom, prevTo, lastFrom, lastTo;\n    field.diagnostics.between(0, state.doc.length, (from, to) => {\n        if (to < sel.to && (prevFrom == null || prevFrom < from)) {\n            prevFrom = from;\n            prevTo = to;\n        }\n        if (lastFrom == null || from > lastFrom) {\n            lastFrom = from;\n            lastTo = to;\n        }\n    });\n    if (lastFrom == null || prevFrom == null && lastFrom == sel.from)\n        return false;\n    view.dispatch({ selection: { anchor: prevFrom !== null && prevFrom !== void 0 ? prevFrom : lastFrom, head: prevTo !== null && prevTo !== void 0 ? prevTo : lastTo }, scrollIntoView: true });\n    return true;\n};\n/**\nA set of default key bindings for the lint functionality.\n\n- Ctrl-Shift-m (Cmd-Shift-m on macOS): [`openLintPanel`](https://codemirror.net/6/docs/ref/#lint.openLintPanel)\n- F8: [`nextDiagnostic`](https://codemirror.net/6/docs/ref/#lint.nextDiagnostic)\n*/\nconst lintKeymap = [\n    { key: \"Mod-Shift-m\", run: openLintPanel, preventDefault: true },\n    { key: \"F8\", run: nextDiagnostic }\n];\nconst lintPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.timeout = -1;\n        this.set = true;\n        let { delay } = view.state.facet(lintConfig);\n        this.lintTime = Date.now() + delay;\n        this.run = this.run.bind(this);\n        this.timeout = setTimeout(this.run, delay);\n    }\n    run() {\n        clearTimeout(this.timeout);\n        let now = Date.now();\n        if (now < this.lintTime - 10) {\n            this.timeout = setTimeout(this.run, this.lintTime - now);\n        }\n        else {\n            this.set = false;\n            let { state } = this.view, { sources } = state.facet(lintConfig);\n            if (sources.length)\n                batchResults(sources.map(s => Promise.resolve(s(this.view))), annotations => {\n                    if (this.view.state.doc == state.doc)\n                        this.view.dispatch(setDiagnostics(this.view.state, annotations.reduce((a, b) => a.concat(b))));\n                }, error => { logException(this.view.state, error); });\n        }\n    }\n    update(update) {\n        let config = update.state.facet(lintConfig);\n        if (update.docChanged || config != update.startState.facet(lintConfig) ||\n            config.needsRefresh && config.needsRefresh(update)) {\n            this.lintTime = Date.now() + config.delay;\n            if (!this.set) {\n                this.set = true;\n                this.timeout = setTimeout(this.run, config.delay);\n            }\n        }\n    }\n    force() {\n        if (this.set) {\n            this.lintTime = Date.now();\n            this.run();\n        }\n    }\n    destroy() {\n        clearTimeout(this.timeout);\n    }\n});\nfunction batchResults(promises, sink, error) {\n    let collected = [], timeout = -1;\n    for (let p of promises)\n        p.then(value => {\n            collected.push(value);\n            clearTimeout(timeout);\n            if (collected.length == promises.length)\n                sink(collected);\n            else\n                timeout = setTimeout(() => sink(collected), 200);\n        }, error);\n}\nconst lintConfig = /*@__PURE__*/Facet.define({\n    combine(input) {\n        return {\n            sources: input.map(i => i.source).filter(x => x != null),\n            ...combineConfig(input.map(i => i.config), {\n                delay: 750,\n                markerFilter: null,\n                tooltipFilter: null,\n                needsRefresh: null,\n                hideOn: () => null,\n            }, {\n                delay: Math.max,\n                markerFilter: combineFilter,\n                tooltipFilter: combineFilter,\n                needsRefresh: (a, b) => !a ? b : !b ? a : u => a(u) || b(u),\n                hideOn: (a, b) => !a ? b : !b ? a : (t, x, y) => a(t, x, y) || b(t, x, y),\n                autoPanel: (a, b) => a || b\n            })\n        };\n    }\n});\nfunction combineFilter(a, b) {\n    return !a ? b : !b ? a : (d, s) => b(a(d, s), s);\n}\n/**\nGiven a diagnostic source, this function returns an extension that\nenables linting with that source. It will be called whenever the\neditor is idle (after its content changed).\n\nNote that settings given here will apply to all linters active in\nthe editor. If `null` is given as source, this only configures the\nlint extension.\n*/\nfunction linter(source, config = {}) {\n    return [\n        lintConfig.of({ source, config }),\n        lintPlugin,\n        lintExtensions\n    ];\n}\n/**\nForces any linters [configured](https://codemirror.net/6/docs/ref/#lint.linter) to run when the\neditor is idle to run right away.\n*/\nfunction forceLinting(view) {\n    let plugin = view.plugin(lintPlugin);\n    if (plugin)\n        plugin.force();\n}\nfunction assignKeys(actions) {\n    let assigned = [];\n    if (actions)\n        actions: for (let { name } of actions) {\n            for (let i = 0; i < name.length; i++) {\n                let ch = name[i];\n                if (/[a-zA-Z]/.test(ch) && !assigned.some(c => c.toLowerCase() == ch.toLowerCase())) {\n                    assigned.push(ch);\n                    continue actions;\n                }\n            }\n            assigned.push(\"\");\n        }\n    return assigned;\n}\nfunction renderDiagnostic(view, diagnostic, inPanel) {\n    var _a;\n    let keys = inPanel ? assignKeys(diagnostic.actions) : [];\n    return elt(\"li\", { class: \"cm-diagnostic cm-diagnostic-\" + diagnostic.severity }, elt(\"span\", { class: \"cm-diagnosticText\" }, diagnostic.renderMessage ? diagnostic.renderMessage(view) : diagnostic.message), (_a = diagnostic.actions) === null || _a === void 0 ? void 0 : _a.map((action, i) => {\n        let fired = false, click = (e) => {\n            e.preventDefault();\n            if (fired)\n                return;\n            fired = true;\n            let found = findDiagnostic(view.state.field(lintState).diagnostics, diagnostic);\n            if (found)\n                action.apply(view, found.from, found.to);\n        };\n        let { name } = action, keyIndex = keys[i] ? name.indexOf(keys[i]) : -1;\n        let nameElt = keyIndex < 0 ? name : [name.slice(0, keyIndex),\n            elt(\"u\", name.slice(keyIndex, keyIndex + 1)),\n            name.slice(keyIndex + 1)];\n        let markClass = action.markClass ? \" \" + action.markClass : \"\";\n        return elt(\"button\", {\n            type: \"button\",\n            class: \"cm-diagnosticAction\" + markClass,\n            onclick: click,\n            onmousedown: click,\n            \"aria-label\": ` Action: ${name}${keyIndex < 0 ? \"\" : ` (access key \"${keys[i]})\"`}.`\n        }, nameElt);\n    }), diagnostic.source && elt(\"div\", { class: \"cm-diagnosticSource\" }, diagnostic.source));\n}\nclass DiagnosticWidget extends WidgetType {\n    constructor(sev) {\n        super();\n        this.sev = sev;\n    }\n    eq(other) { return other.sev == this.sev; }\n    toDOM() {\n        return elt(\"span\", { class: \"cm-lintPoint cm-lintPoint-\" + this.sev });\n    }\n}\nclass PanelItem {\n    constructor(view, diagnostic) {\n        this.diagnostic = diagnostic;\n        this.id = \"item_\" + Math.floor(Math.random() * 0xffffffff).toString(16);\n        this.dom = renderDiagnostic(view, diagnostic, true);\n        this.dom.id = this.id;\n        this.dom.setAttribute(\"role\", \"option\");\n    }\n}\nclass LintPanel {\n    constructor(view) {\n        this.view = view;\n        this.items = [];\n        let onkeydown = (event) => {\n            if (event.keyCode == 27) { // Escape\n                closeLintPanel(this.view);\n                this.view.focus();\n            }\n            else if (event.keyCode == 38 || event.keyCode == 33) { // ArrowUp, PageUp\n                this.moveSelection((this.selectedIndex - 1 + this.items.length) % this.items.length);\n            }\n            else if (event.keyCode == 40 || event.keyCode == 34) { // ArrowDown, PageDown\n                this.moveSelection((this.selectedIndex + 1) % this.items.length);\n            }\n            else if (event.keyCode == 36) { // Home\n                this.moveSelection(0);\n            }\n            else if (event.keyCode == 35) { // End\n                this.moveSelection(this.items.length - 1);\n            }\n            else if (event.keyCode == 13) { // Enter\n                this.view.focus();\n            }\n            else if (event.keyCode >= 65 && event.keyCode <= 90 && this.selectedIndex >= 0) { // A-Z\n                let { diagnostic } = this.items[this.selectedIndex], keys = assignKeys(diagnostic.actions);\n                for (let i = 0; i < keys.length; i++)\n                    if (keys[i].toUpperCase().charCodeAt(0) == event.keyCode) {\n                        let found = findDiagnostic(this.view.state.field(lintState).diagnostics, diagnostic);\n                        if (found)\n                            diagnostic.actions[i].apply(view, found.from, found.to);\n                    }\n            }\n            else {\n                return;\n            }\n            event.preventDefault();\n        };\n        let onclick = (event) => {\n            for (let i = 0; i < this.items.length; i++) {\n                if (this.items[i].dom.contains(event.target))\n                    this.moveSelection(i);\n            }\n        };\n        this.list = elt(\"ul\", {\n            tabIndex: 0,\n            role: \"listbox\",\n            \"aria-label\": this.view.state.phrase(\"Diagnostics\"),\n            onkeydown,\n            onclick\n        });\n        this.dom = elt(\"div\", { class: \"cm-panel-lint\" }, this.list, elt(\"button\", {\n            type: \"button\",\n            name: \"close\",\n            \"aria-label\": this.view.state.phrase(\"close\"),\n            onclick: () => closeLintPanel(this.view)\n        }, \"×\"));\n        this.update();\n    }\n    get selectedIndex() {\n        let selected = this.view.state.field(lintState).selected;\n        if (!selected)\n            return -1;\n        for (let i = 0; i < this.items.length; i++)\n            if (this.items[i].diagnostic == selected.diagnostic)\n                return i;\n        return -1;\n    }\n    update() {\n        let { diagnostics, selected } = this.view.state.field(lintState);\n        let i = 0, needsSync = false, newSelectedItem = null;\n        let seen = new Set();\n        diagnostics.between(0, this.view.state.doc.length, (_start, _end, { spec }) => {\n            for (let diagnostic of spec.diagnostics) {\n                if (seen.has(diagnostic))\n                    continue;\n                seen.add(diagnostic);\n                let found = -1, item;\n                for (let j = i; j < this.items.length; j++)\n                    if (this.items[j].diagnostic == diagnostic) {\n                        found = j;\n                        break;\n                    }\n                if (found < 0) {\n                    item = new PanelItem(this.view, diagnostic);\n                    this.items.splice(i, 0, item);\n                    needsSync = true;\n                }\n                else {\n                    item = this.items[found];\n                    if (found > i) {\n                        this.items.splice(i, found - i);\n                        needsSync = true;\n                    }\n                }\n                if (selected && item.diagnostic == selected.diagnostic) {\n                    if (!item.dom.hasAttribute(\"aria-selected\")) {\n                        item.dom.setAttribute(\"aria-selected\", \"true\");\n                        newSelectedItem = item;\n                    }\n                }\n                else if (item.dom.hasAttribute(\"aria-selected\")) {\n                    item.dom.removeAttribute(\"aria-selected\");\n                }\n                i++;\n            }\n        });\n        while (i < this.items.length && !(this.items.length == 1 && this.items[0].diagnostic.from < 0)) {\n            needsSync = true;\n            this.items.pop();\n        }\n        if (this.items.length == 0) {\n            this.items.push(new PanelItem(this.view, {\n                from: -1, to: -1,\n                severity: \"info\",\n                message: this.view.state.phrase(\"No diagnostics\")\n            }));\n            needsSync = true;\n        }\n        if (newSelectedItem) {\n            this.list.setAttribute(\"aria-activedescendant\", newSelectedItem.id);\n            this.view.requestMeasure({\n                key: this,\n                read: () => ({ sel: newSelectedItem.dom.getBoundingClientRect(), panel: this.list.getBoundingClientRect() }),\n                write: ({ sel, panel }) => {\n                    let scaleY = panel.height / this.list.offsetHeight;\n                    if (sel.top < panel.top)\n                        this.list.scrollTop -= (panel.top - sel.top) / scaleY;\n                    else if (sel.bottom > panel.bottom)\n                        this.list.scrollTop += (sel.bottom - panel.bottom) / scaleY;\n                }\n            });\n        }\n        else if (this.selectedIndex < 0) {\n            this.list.removeAttribute(\"aria-activedescendant\");\n        }\n        if (needsSync)\n            this.sync();\n    }\n    sync() {\n        let domPos = this.list.firstChild;\n        function rm() {\n            let prev = domPos;\n            domPos = prev.nextSibling;\n            prev.remove();\n        }\n        for (let item of this.items) {\n            if (item.dom.parentNode == this.list) {\n                while (domPos != item.dom)\n                    rm();\n                domPos = item.dom.nextSibling;\n            }\n            else {\n                this.list.insertBefore(item.dom, domPos);\n            }\n        }\n        while (domPos)\n            rm();\n    }\n    moveSelection(selectedIndex) {\n        if (this.selectedIndex < 0)\n            return;\n        let field = this.view.state.field(lintState);\n        let selection = findDiagnostic(field.diagnostics, this.items[selectedIndex].diagnostic);\n        if (!selection)\n            return;\n        this.view.dispatch({\n            selection: { anchor: selection.from, head: selection.to },\n            scrollIntoView: true,\n            effects: movePanelSelection.of(selection)\n        });\n    }\n    static open(view) { return new LintPanel(view); }\n}\nfunction svg(content, attrs = `viewBox=\"0 0 40 40\"`) {\n    return `url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" ${attrs}>${encodeURIComponent(content)}</svg>')`;\n}\nfunction underline(color) {\n    return svg(`<path d=\"m0 2.5 l2 -1.5 l1 0 l2 1.5 l1 0\" stroke=\"${color}\" fill=\"none\" stroke-width=\".7\"/>`, `width=\"6\" height=\"3\"`);\n}\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-diagnostic\": {\n        padding: \"3px 6px 3px 8px\",\n        marginLeft: \"-1px\",\n        display: \"block\",\n        whiteSpace: \"pre-wrap\"\n    },\n    \".cm-diagnostic-error\": { borderLeft: \"5px solid #d11\" },\n    \".cm-diagnostic-warning\": { borderLeft: \"5px solid orange\" },\n    \".cm-diagnostic-info\": { borderLeft: \"5px solid #999\" },\n    \".cm-diagnostic-hint\": { borderLeft: \"5px solid #66d\" },\n    \".cm-diagnosticAction\": {\n        font: \"inherit\",\n        border: \"none\",\n        padding: \"2px 4px\",\n        backgroundColor: \"#444\",\n        color: \"white\",\n        borderRadius: \"3px\",\n        marginLeft: \"8px\",\n        cursor: \"pointer\"\n    },\n    \".cm-diagnosticSource\": {\n        fontSize: \"70%\",\n        opacity: .7\n    },\n    \".cm-lintRange\": {\n        backgroundPosition: \"left bottom\",\n        backgroundRepeat: \"repeat-x\",\n        paddingBottom: \"0.7px\",\n    },\n    \".cm-lintRange-error\": { backgroundImage: /*@__PURE__*/underline(\"#d11\") },\n    \".cm-lintRange-warning\": { backgroundImage: /*@__PURE__*/underline(\"orange\") },\n    \".cm-lintRange-info\": { backgroundImage: /*@__PURE__*/underline(\"#999\") },\n    \".cm-lintRange-hint\": { backgroundImage: /*@__PURE__*/underline(\"#66d\") },\n    \".cm-lintRange-active\": { backgroundColor: \"#ffdd9980\" },\n    \".cm-tooltip-lint\": {\n        padding: 0,\n        margin: 0\n    },\n    \".cm-lintPoint\": {\n        position: \"relative\",\n        \"&:after\": {\n            content: '\"\"',\n            position: \"absolute\",\n            bottom: 0,\n            left: \"-2px\",\n            borderLeft: \"3px solid transparent\",\n            borderRight: \"3px solid transparent\",\n            borderBottom: \"4px solid #d11\"\n        }\n    },\n    \".cm-lintPoint-warning\": {\n        \"&:after\": { borderBottomColor: \"orange\" }\n    },\n    \".cm-lintPoint-info\": {\n        \"&:after\": { borderBottomColor: \"#999\" }\n    },\n    \".cm-lintPoint-hint\": {\n        \"&:after\": { borderBottomColor: \"#66d\" }\n    },\n    \".cm-panel.cm-panel-lint\": {\n        position: \"relative\",\n        \"& ul\": {\n            maxHeight: \"100px\",\n            overflowY: \"auto\",\n            \"& [aria-selected]\": {\n                backgroundColor: \"#ddd\",\n                \"& u\": { textDecoration: \"underline\" }\n            },\n            \"&:focus [aria-selected]\": {\n                background_fallback: \"#bdf\",\n                backgroundColor: \"Highlight\",\n                color_fallback: \"white\",\n                color: \"HighlightText\"\n            },\n            \"& u\": { textDecoration: \"none\" },\n            padding: 0,\n            margin: 0\n        },\n        \"& [name=close]\": {\n            position: \"absolute\",\n            top: \"0\",\n            right: \"2px\",\n            background: \"inherit\",\n            border: \"none\",\n            font: \"inherit\",\n            padding: 0,\n            margin: 0\n        }\n    }\n});\nfunction severityWeight(sev) {\n    return sev == \"error\" ? 4 : sev == \"warning\" ? 3 : sev == \"info\" ? 2 : 1;\n}\nfunction maxSeverity(diagnostics) {\n    let sev = \"hint\", weight = 1;\n    for (let d of diagnostics) {\n        let w = severityWeight(d.severity);\n        if (w > weight) {\n            weight = w;\n            sev = d.severity;\n        }\n    }\n    return sev;\n}\nclass LintGutterMarker extends GutterMarker {\n    constructor(diagnostics) {\n        super();\n        this.diagnostics = diagnostics;\n        this.severity = maxSeverity(diagnostics);\n    }\n    toDOM(view) {\n        let elt = document.createElement(\"div\");\n        elt.className = \"cm-lint-marker cm-lint-marker-\" + this.severity;\n        let diagnostics = this.diagnostics;\n        let diagnosticsFilter = view.state.facet(lintGutterConfig).tooltipFilter;\n        if (diagnosticsFilter)\n            diagnostics = diagnosticsFilter(diagnostics, view.state);\n        if (diagnostics.length)\n            elt.onmouseover = () => gutterMarkerMouseOver(view, elt, diagnostics);\n        return elt;\n    }\n}\nfunction trackHoverOn(view, marker) {\n    let mousemove = (event) => {\n        let rect = marker.getBoundingClientRect();\n        if (event.clientX > rect.left - 10 /* Hover.Margin */ && event.clientX < rect.right + 10 /* Hover.Margin */ &&\n            event.clientY > rect.top - 10 /* Hover.Margin */ && event.clientY < rect.bottom + 10 /* Hover.Margin */)\n            return;\n        for (let target = event.target; target; target = target.parentNode) {\n            if (target.nodeType == 1 && target.classList.contains(\"cm-tooltip-lint\"))\n                return;\n        }\n        window.removeEventListener(\"mousemove\", mousemove);\n        if (view.state.field(lintGutterTooltip))\n            view.dispatch({ effects: setLintGutterTooltip.of(null) });\n    };\n    window.addEventListener(\"mousemove\", mousemove);\n}\nfunction gutterMarkerMouseOver(view, marker, diagnostics) {\n    function hovered() {\n        let line = view.elementAtHeight(marker.getBoundingClientRect().top + 5 - view.documentTop);\n        const linePos = view.coordsAtPos(line.from);\n        if (linePos) {\n            view.dispatch({ effects: setLintGutterTooltip.of({\n                    pos: line.from,\n                    above: false,\n                    clip: false,\n                    create() {\n                        return {\n                            dom: diagnosticsTooltip(view, diagnostics),\n                            getCoords: () => marker.getBoundingClientRect()\n                        };\n                    }\n                }) });\n        }\n        marker.onmouseout = marker.onmousemove = null;\n        trackHoverOn(view, marker);\n    }\n    let { hoverTime } = view.state.facet(lintGutterConfig);\n    let hoverTimeout = setTimeout(hovered, hoverTime);\n    marker.onmouseout = () => {\n        clearTimeout(hoverTimeout);\n        marker.onmouseout = marker.onmousemove = null;\n    };\n    marker.onmousemove = () => {\n        clearTimeout(hoverTimeout);\n        hoverTimeout = setTimeout(hovered, hoverTime);\n    };\n}\nfunction markersForDiagnostics(doc, diagnostics) {\n    let byLine = Object.create(null);\n    for (let diagnostic of diagnostics) {\n        let line = doc.lineAt(diagnostic.from);\n        (byLine[line.from] || (byLine[line.from] = [])).push(diagnostic);\n    }\n    let markers = [];\n    for (let line in byLine) {\n        markers.push(new LintGutterMarker(byLine[line]).range(+line));\n    }\n    return RangeSet.of(markers, true);\n}\nconst lintGutterExtension = /*@__PURE__*/gutter({\n    class: \"cm-gutter-lint\",\n    markers: view => view.state.field(lintGutterMarkers),\n    widgetMarker: (view, widget, block) => {\n        let diagnostics = [];\n        view.state.field(lintGutterMarkers).between(block.from, block.to, (from, to, value) => {\n            if (from > block.from && from < block.to)\n                diagnostics.push(...value.diagnostics);\n        });\n        return diagnostics.length ? new LintGutterMarker(diagnostics) : null;\n    }\n});\nconst lintGutterMarkers = /*@__PURE__*/StateField.define({\n    create() {\n        return RangeSet.empty;\n    },\n    update(markers, tr) {\n        markers = markers.map(tr.changes);\n        let diagnosticFilter = tr.state.facet(lintGutterConfig).markerFilter;\n        for (let effect of tr.effects) {\n            if (effect.is(setDiagnosticsEffect)) {\n                let diagnostics = effect.value;\n                if (diagnosticFilter)\n                    diagnostics = diagnosticFilter(diagnostics || [], tr.state);\n                markers = markersForDiagnostics(tr.state.doc, diagnostics.slice(0));\n            }\n        }\n        return markers;\n    }\n});\nconst setLintGutterTooltip = /*@__PURE__*/StateEffect.define();\nconst lintGutterTooltip = /*@__PURE__*/StateField.define({\n    create() { return null; },\n    update(tooltip, tr) {\n        if (tooltip && tr.docChanged)\n            tooltip = hideTooltip(tr, tooltip) ? null : { ...tooltip, pos: tr.changes.mapPos(tooltip.pos) };\n        return tr.effects.reduce((t, e) => e.is(setLintGutterTooltip) ? e.value : t, tooltip);\n    },\n    provide: field => showTooltip.from(field)\n});\nconst lintGutterTheme = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-gutter-lint\": {\n        width: \"1.4em\",\n        \"& .cm-gutterElement\": {\n            padding: \".2em\"\n        }\n    },\n    \".cm-lint-marker\": {\n        width: \"1em\",\n        height: \"1em\"\n    },\n    \".cm-lint-marker-info\": {\n        content: /*@__PURE__*/svg(`<path fill=\"#aaf\" stroke=\"#77e\" stroke-width=\"6\" stroke-linejoin=\"round\" d=\"M5 5L35 5L35 35L5 35Z\"/>`)\n    },\n    \".cm-lint-marker-warning\": {\n        content: /*@__PURE__*/svg(`<path fill=\"#fe8\" stroke=\"#fd7\" stroke-width=\"6\" stroke-linejoin=\"round\" d=\"M20 6L37 35L3 35Z\"/>`),\n    },\n    \".cm-lint-marker-error\": {\n        content: /*@__PURE__*/svg(`<circle cx=\"20\" cy=\"20\" r=\"15\" fill=\"#f87\" stroke=\"#f43\" stroke-width=\"6\"/>`)\n    },\n});\nconst lintExtensions = [\n    lintState,\n    /*@__PURE__*/EditorView.decorations.compute([lintState], state => {\n        let { selected, panel } = state.field(lintState);\n        return !selected || !panel || selected.from == selected.to ? Decoration.none : Decoration.set([\n            activeMark.range(selected.from, selected.to)\n        ]);\n    }),\n    /*@__PURE__*/hoverTooltip(lintTooltip, { hideOn: hideTooltip }),\n    baseTheme\n];\nconst lintGutterConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            hoverTime: 300 /* Hover.Time */,\n            markerFilter: null,\n            tooltipFilter: null\n        });\n    }\n});\n/**\nReturns an extension that installs a gutter showing markers for\neach line that has diagnostics, which can be hovered over to see\nthe diagnostics.\n*/\nfunction lintGutter(config = {}) {\n    return [lintGutterConfig.of(config), lintGutterMarkers, lintGutterExtension, lintGutterTheme, lintGutterTooltip];\n}\n/**\nIterate over the marked diagnostics for the given editor state,\ncalling `f` for each of them. Note that, if the document changed\nsince the diagnostics were created, the `Diagnostic` object will\nhold the original outdated position, whereas the `to` and `from`\narguments hold the diagnostic's current position.\n*/\nfunction forEachDiagnostic(state, f) {\n    let lState = state.field(lintState, false);\n    if (lState && lState.diagnostics.size) {\n        let pending = [], pendingStart = [], lastEnd = -1;\n        for (let iter = RangeSet.iter([lState.diagnostics]);; iter.next()) {\n            for (let i = 0; i < pending.length; i++)\n                if (!iter.value || iter.value.spec.diagnostics.indexOf(pending[i]) < 0) {\n                    f(pending[i], pendingStart[i], lastEnd);\n                    pending.splice(i, 1);\n                    pendingStart.splice(i--, 1);\n                }\n            if (!iter.value)\n                break;\n            for (let d of iter.value.spec.diagnostics)\n                if (pending.indexOf(d) < 0) {\n                    pending.push(d);\n                    pendingStart.push(iter.from);\n                }\n            lastEnd = iter.to;\n        }\n    }\n}\n\nexport { closeLintPanel, diagnosticCount, forEachDiagnostic, forceLinting, lintGutter, lintKeymap, linter, nextDiagnostic, openLintPanel, previousDiagnostic, setDiagnostics, setDiagnosticsEffect };\n","import { lineNumbers, highlightActiveLineGutter, highlightSpecialChars, drawSelection, dropCursor, rectangularSelection, crosshairCursor, highlightActiveLine, keymap } from '@codemirror/view';\nimport { EditorState } from '@codemirror/state';\nimport { history, defaultKeymap, historyKeymap } from '@codemirror/commands';\nimport { highlightSelectionMatches, searchKeymap } from '@codemirror/search';\nimport { closeBrackets, autocompletion, closeBracketsKeymap, completionKeymap } from '@codemirror/autocomplete';\nimport { foldGutter, indentOnInput, syntaxHighlighting, defaultHighlightStyle, bracketMatching, indentUnit, foldKeymap } from '@codemirror/language';\nimport { lintKeymap } from '@codemirror/lint';\n/**\nThis is an extension value that just pulls together a number of\nextensions that you might want in a basic editor. It is meant as a\nconvenient helper to quickly set up CodeMirror without installing\nand importing a lot of separate packages.\n\nSpecifically, it includes...\n\n - [the default command bindings](https://codemirror.net/6/docs/ref/#commands.defaultKeymap)\n - [line numbers](https://codemirror.net/6/docs/ref/#view.lineNumbers)\n - [special character highlighting](https://codemirror.net/6/docs/ref/#view.highlightSpecialChars)\n - [the undo history](https://codemirror.net/6/docs/ref/#commands.history)\n - [a fold gutter](https://codemirror.net/6/docs/ref/#language.foldGutter)\n - [custom selection drawing](https://codemirror.net/6/docs/ref/#view.drawSelection)\n - [drop cursor](https://codemirror.net/6/docs/ref/#view.dropCursor)\n - [multiple selections](https://codemirror.net/6/docs/ref/#state.EditorState^allowMultipleSelections)\n - [reindentation on input](https://codemirror.net/6/docs/ref/#language.indentOnInput)\n - [the default highlight style](https://codemirror.net/6/docs/ref/#language.defaultHighlightStyle) (as fallback)\n - [bracket matching](https://codemirror.net/6/docs/ref/#language.bracketMatching)\n - [bracket closing](https://codemirror.net/6/docs/ref/#autocomplete.closeBrackets)\n - [autocompletion](https://codemirror.net/6/docs/ref/#autocomplete.autocompletion)\n - [rectangular selection](https://codemirror.net/6/docs/ref/#view.rectangularSelection) and [crosshair cursor](https://codemirror.net/6/docs/ref/#view.crosshairCursor)\n - [active line highlighting](https://codemirror.net/6/docs/ref/#view.highlightActiveLine)\n - [active line gutter highlighting](https://codemirror.net/6/docs/ref/#view.highlightActiveLineGutter)\n - [selection match highlighting](https://codemirror.net/6/docs/ref/#search.highlightSelectionMatches)\n - [search](https://codemirror.net/6/docs/ref/#search.searchKeymap)\n - [linting](https://codemirror.net/6/docs/ref/#lint.lintKeymap)\n\n(You'll probably want to add some language package to your setup\ntoo.)\n\nThis extension does not allow customization. The idea is that,\nonce you decide you want to configure your editor more precisely,\nyou take this package's source (which is just a bunch of imports\nand an array literal), copy it into your own code, and adjust it\nas desired.\n*/\nexport var basicSetup = function basicSetup(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  var keymaps = [];\n  if (options.closeBracketsKeymap !== false) {\n    keymaps = keymaps.concat(closeBracketsKeymap);\n  }\n  if (options.defaultKeymap !== false) {\n    keymaps = keymaps.concat(defaultKeymap);\n  }\n  if (options.searchKeymap !== false) {\n    keymaps = keymaps.concat(searchKeymap);\n  }\n  if (options.historyKeymap !== false) {\n    keymaps = keymaps.concat(historyKeymap);\n  }\n  if (options.foldKeymap !== false) {\n    keymaps = keymaps.concat(foldKeymap);\n  }\n  if (options.completionKeymap !== false) {\n    keymaps = keymaps.concat(completionKeymap);\n  }\n  if (options.lintKeymap !== false) {\n    keymaps = keymaps.concat(lintKeymap);\n  }\n  var extensions = [];\n  if (options.lineNumbers !== false) extensions.push(lineNumbers());\n  if (options.highlightActiveLineGutter !== false) extensions.push(highlightActiveLineGutter());\n  if (options.highlightSpecialChars !== false) extensions.push(highlightSpecialChars());\n  if (options.history !== false) extensions.push(history());\n  if (options.foldGutter !== false) extensions.push(foldGutter());\n  if (options.drawSelection !== false) extensions.push(drawSelection());\n  if (options.dropCursor !== false) extensions.push(dropCursor());\n  if (options.allowMultipleSelections !== false) extensions.push(EditorState.allowMultipleSelections.of(true));\n  if (options.indentOnInput !== false) extensions.push(indentOnInput());\n  if (options.syntaxHighlighting !== false) extensions.push(syntaxHighlighting(defaultHighlightStyle, {\n    fallback: true\n  }));\n  if (options.bracketMatching !== false) extensions.push(bracketMatching());\n  if (options.closeBrackets !== false) extensions.push(closeBrackets());\n  if (options.autocompletion !== false) extensions.push(autocompletion());\n  if (options.rectangularSelection !== false) extensions.push(rectangularSelection());\n  if (options.crosshairCursor !== false) extensions.push(crosshairCursor());\n  if (options.highlightActiveLine !== false) extensions.push(highlightActiveLine());\n  if (options.highlightSelectionMatches !== false) extensions.push(highlightSelectionMatches());\n  if (options.tabSize && typeof options.tabSize === 'number') extensions.push(indentUnit.of(' '.repeat(options.tabSize)));\n  return extensions.concat([keymap.of(keymaps.flat())]).filter(Boolean);\n};\n/**\nA minimal set of extensions to create a functional editor. Only\nincludes [the default keymap](https://codemirror.net/6/docs/ref/#commands.defaultKeymap), [undo\nhistory](https://codemirror.net/6/docs/ref/#commands.history), [special character\nhighlighting](https://codemirror.net/6/docs/ref/#view.highlightSpecialChars), [custom selection\ndrawing](https://codemirror.net/6/docs/ref/#view.drawSelection), and [default highlight\nstyle](https://codemirror.net/6/docs/ref/#language.defaultHighlightStyle).\n*/\nexport var minimalSetup = function minimalSetup(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  var keymaps = [];\n  if (options.defaultKeymap !== false) {\n    keymaps = keymaps.concat(defaultKeymap);\n  }\n  if (options.historyKeymap !== false) {\n    keymaps = keymaps.concat(historyKeymap);\n  }\n  var extensions = [];\n  if (options.highlightSpecialChars !== false) extensions.push(highlightSpecialChars());\n  if (options.history !== false) extensions.push(history());\n  if (options.drawSelection !== false) extensions.push(drawSelection());\n  if (options.syntaxHighlighting !== false) extensions.push(syntaxHighlighting(defaultHighlightStyle, {\n    fallback: true\n  }));\n  return extensions.concat([keymap.of(keymaps.flat())]).filter(Boolean);\n};","import { EditorView } from '@codemirror/view';\nimport { HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { tags } from '@lezer/highlight';\n\n// Using https://github.com/one-dark/vscode-one-dark-theme/ as reference for the colors\nconst chalky = \"#e5c07b\", coral = \"#e06c75\", cyan = \"#56b6c2\", invalid = \"#ffffff\", ivory = \"#abb2bf\", stone = \"#7d8799\", // Brightened compared to original to increase contrast\nmalibu = \"#61afef\", sage = \"#98c379\", whiskey = \"#d19a66\", violet = \"#c678dd\", darkBackground = \"#21252b\", highlightBackground = \"#2c313a\", background = \"#282c34\", tooltipBackground = \"#353a42\", selection = \"#3E4451\", cursor = \"#528bff\";\n/**\nThe colors used in the theme, as CSS color strings.\n*/\nconst color = {\n    chalky,\n    coral,\n    cyan,\n    invalid,\n    ivory,\n    stone,\n    malibu,\n    sage,\n    whiskey,\n    violet,\n    darkBackground,\n    highlightBackground,\n    background,\n    tooltipBackground,\n    selection,\n    cursor\n};\n/**\nThe editor theme styles for One Dark.\n*/\nconst oneDarkTheme = /*@__PURE__*/EditorView.theme({\n    \"&\": {\n        color: ivory,\n        backgroundColor: background\n    },\n    \".cm-content\": {\n        caretColor: cursor\n    },\n    \".cm-cursor, .cm-dropCursor\": { borderLeftColor: cursor },\n    \"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection\": { backgroundColor: selection },\n    \".cm-panels\": { backgroundColor: darkBackground, color: ivory },\n    \".cm-panels.cm-panels-top\": { borderBottom: \"2px solid black\" },\n    \".cm-panels.cm-panels-bottom\": { borderTop: \"2px solid black\" },\n    \".cm-searchMatch\": {\n        backgroundColor: \"#72a1ff59\",\n        outline: \"1px solid #457dff\"\n    },\n    \".cm-searchMatch.cm-searchMatch-selected\": {\n        backgroundColor: \"#6199ff2f\"\n    },\n    \".cm-activeLine\": { backgroundColor: \"#6699ff0b\" },\n    \".cm-selectionMatch\": { backgroundColor: \"#aafe661a\" },\n    \"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket\": {\n        backgroundColor: \"#bad0f847\"\n    },\n    \".cm-gutters\": {\n        backgroundColor: background,\n        color: stone,\n        border: \"none\"\n    },\n    \".cm-activeLineGutter\": {\n        backgroundColor: highlightBackground\n    },\n    \".cm-foldPlaceholder\": {\n        backgroundColor: \"transparent\",\n        border: \"none\",\n        color: \"#ddd\"\n    },\n    \".cm-tooltip\": {\n        border: \"none\",\n        backgroundColor: tooltipBackground\n    },\n    \".cm-tooltip .cm-tooltip-arrow:before\": {\n        borderTopColor: \"transparent\",\n        borderBottomColor: \"transparent\"\n    },\n    \".cm-tooltip .cm-tooltip-arrow:after\": {\n        borderTopColor: tooltipBackground,\n        borderBottomColor: tooltipBackground\n    },\n    \".cm-tooltip-autocomplete\": {\n        \"& > ul > li[aria-selected]\": {\n            backgroundColor: highlightBackground,\n            color: ivory\n        }\n    }\n}, { dark: true });\n/**\nThe highlighting style for code in the One Dark theme.\n*/\nconst oneDarkHighlightStyle = /*@__PURE__*/HighlightStyle.define([\n    { tag: tags.keyword,\n        color: violet },\n    { tag: [tags.name, tags.deleted, tags.character, tags.propertyName, tags.macroName],\n        color: coral },\n    { tag: [/*@__PURE__*/tags.function(tags.variableName), tags.labelName],\n        color: malibu },\n    { tag: [tags.color, /*@__PURE__*/tags.constant(tags.name), /*@__PURE__*/tags.standard(tags.name)],\n        color: whiskey },\n    { tag: [/*@__PURE__*/tags.definition(tags.name), tags.separator],\n        color: ivory },\n    { tag: [tags.typeName, tags.className, tags.number, tags.changed, tags.annotation, tags.modifier, tags.self, tags.namespace],\n        color: chalky },\n    { tag: [tags.operator, tags.operatorKeyword, tags.url, tags.escape, tags.regexp, tags.link, /*@__PURE__*/tags.special(tags.string)],\n        color: cyan },\n    { tag: [tags.meta, tags.comment],\n        color: stone },\n    { tag: tags.strong,\n        fontWeight: \"bold\" },\n    { tag: tags.emphasis,\n        fontStyle: \"italic\" },\n    { tag: tags.strikethrough,\n        textDecoration: \"line-through\" },\n    { tag: tags.link,\n        color: stone,\n        textDecoration: \"underline\" },\n    { tag: tags.heading,\n        fontWeight: \"bold\",\n        color: coral },\n    { tag: [tags.atom, tags.bool, /*@__PURE__*/tags.special(tags.variableName)],\n        color: whiskey },\n    { tag: [tags.processingInstruction, tags.string, tags.inserted],\n        color: sage },\n    { tag: tags.invalid,\n        color: invalid },\n]);\n/**\nExtension to enable the One Dark theme (both the editor theme and\nthe highlight style).\n*/\nconst oneDark = [oneDarkTheme, /*@__PURE__*/syntaxHighlighting(oneDarkHighlightStyle)];\n\nexport { color, oneDark, oneDarkHighlightStyle, oneDarkTheme };\n","import { EditorView } from '@codemirror/view';\nexport var defaultLightThemeOption = EditorView.theme({\n  '&': {\n    backgroundColor: '#fff'\n  }\n}, {\n  dark: false\n});","import { indentWithTab } from '@codemirror/commands';\nimport { basicSetup } from '@uiw/codemirror-extensions-basic-setup';\nimport { EditorView, keymap, placeholder } from '@codemirror/view';\nimport { oneDark } from '@codemirror/theme-one-dark';\nimport { EditorState } from '@codemirror/state';\nimport { defaultLightThemeOption } from './theme/light';\nexport * from '@codemirror/theme-one-dark';\nexport * from './theme/light';\nexport var getDefaultExtensions = function getDefaultExtensions(optios) {\n  if (optios === void 0) {\n    optios = {};\n  }\n  var {\n    indentWithTab: defaultIndentWithTab = true,\n    editable = true,\n    readOnly = false,\n    theme = 'light',\n    placeholder: placeholderStr = '',\n    basicSetup: defaultBasicSetup = true\n  } = optios;\n  var getExtensions = [];\n  if (defaultIndentWithTab) {\n    getExtensions.unshift(keymap.of([indentWithTab]));\n  }\n  if (defaultBasicSetup) {\n    if (typeof defaultBasicSetup === 'boolean') {\n      getExtensions.unshift(basicSetup());\n    } else {\n      getExtensions.unshift(basicSetup(defaultBasicSetup));\n    }\n  }\n  if (placeholderStr) {\n    getExtensions.unshift(placeholder(placeholderStr));\n  }\n  switch (theme) {\n    case 'light':\n      getExtensions.push(defaultLightThemeOption);\n      break;\n    case 'dark':\n      getExtensions.push(oneDark);\n      break;\n    case 'none':\n      break;\n    default:\n      getExtensions.push(theme);\n      break;\n  }\n  if (editable === false) {\n    getExtensions.push(EditorView.editable.of(false));\n  }\n  if (readOnly) {\n    getExtensions.push(EditorState.readOnly.of(true));\n  }\n  return [...getExtensions];\n};","export var getStatistics = view => {\n  return {\n    line: view.state.doc.lineAt(view.state.selection.main.from),\n    lineCount: view.state.doc.lines,\n    lineBreak: view.state.lineBreak,\n    length: view.state.doc.length,\n    readOnly: view.state.readOnly,\n    tabSize: view.state.tabSize,\n    selection: view.state.selection,\n    selectionAsSingle: view.state.selection.asSingle().main,\n    ranges: view.state.selection.ranges,\n    selectionCode: view.state.sliceDoc(view.state.selection.main.from, view.state.selection.main.to),\n    selections: view.state.selection.ranges.map(r => view.state.sliceDoc(r.from, r.to)),\n    selectedText: view.state.selection.ranges.some(r => !r.empty)\n  };\n};","import { useEffect, useState } from 'react';\nimport { Annotation, EditorState, StateEffect } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { getDefaultExtensions } from './getDefaultExtensions';\nimport { getStatistics } from './utils';\nvar External = Annotation.define();\nvar emptyExtensions = [];\nexport function useCodeMirror(props) {\n  var {\n    value,\n    selection,\n    onChange,\n    onStatistics,\n    onCreateEditor,\n    onUpdate,\n    extensions = emptyExtensions,\n    autoFocus,\n    theme = 'light',\n    height = '',\n    minHeight = '',\n    maxHeight = '',\n    placeholder: placeholderStr = '',\n    width = '',\n    minWidth = '',\n    maxWidth = '',\n    editable = true,\n    readOnly = false,\n    indentWithTab: defaultIndentWithTab = true,\n    basicSetup: defaultBasicSetup = true,\n    root,\n    initialState\n  } = props;\n  var [container, setContainer] = useState();\n  var [view, setView] = useState();\n  var [state, setState] = useState();\n  var defaultThemeOption = EditorView.theme({\n    '&': {\n      height,\n      minHeight,\n      maxHeight,\n      width,\n      minWidth,\n      maxWidth\n    },\n    '& .cm-scroller': {\n      height: '100% !important'\n    }\n  });\n  var updateListener = EditorView.updateListener.of(vu => {\n    if (vu.docChanged && typeof onChange === 'function' &&\n    // Fix echoing of the remote changes:\n    // If transaction is market as remote we don't have to call `onChange` handler again\n    !vu.transactions.some(tr => tr.annotation(External))) {\n      var doc = vu.state.doc;\n      var _value = doc.toString();\n      onChange(_value, vu);\n    }\n    onStatistics && onStatistics(getStatistics(vu));\n  });\n  var defaultExtensions = getDefaultExtensions({\n    theme,\n    editable,\n    readOnly,\n    placeholder: placeholderStr,\n    indentWithTab: defaultIndentWithTab,\n    basicSetup: defaultBasicSetup\n  });\n  var getExtensions = [updateListener, defaultThemeOption, ...defaultExtensions];\n  if (onUpdate && typeof onUpdate === 'function') {\n    getExtensions.push(EditorView.updateListener.of(onUpdate));\n  }\n  getExtensions = getExtensions.concat(extensions);\n  useEffect(() => {\n    if (container && !state) {\n      var config = {\n        doc: value,\n        selection,\n        extensions: getExtensions\n      };\n      var stateCurrent = initialState ? EditorState.fromJSON(initialState.json, config, initialState.fields) : EditorState.create(config);\n      setState(stateCurrent);\n      if (!view) {\n        var viewCurrent = new EditorView({\n          state: stateCurrent,\n          parent: container,\n          root\n        });\n        setView(viewCurrent);\n        onCreateEditor && onCreateEditor(viewCurrent, stateCurrent);\n      }\n    }\n    return () => {\n      if (view) {\n        setState(undefined);\n        setView(undefined);\n      }\n    };\n  }, [container, state]);\n  useEffect(() => setContainer(props.container), [props.container]);\n  useEffect(() => () => {\n    if (view) {\n      view.destroy();\n      setView(undefined);\n    }\n  }, [view]);\n  useEffect(() => {\n    if (autoFocus && view) {\n      view.focus();\n    }\n  }, [autoFocus, view]);\n  useEffect(() => {\n    if (view) {\n      view.dispatch({\n        effects: StateEffect.reconfigure.of(getExtensions)\n      });\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [theme, extensions, height, minHeight, maxHeight, width, minWidth, maxWidth, placeholderStr, editable, readOnly, defaultIndentWithTab, defaultBasicSetup, onChange, onUpdate]);\n  useEffect(() => {\n    if (value === undefined) {\n      return;\n    }\n    var currentValue = view ? view.state.doc.toString() : '';\n    if (view && value !== currentValue) {\n      view.dispatch({\n        changes: {\n          from: 0,\n          to: currentValue.length,\n          insert: value || ''\n        },\n        annotations: [External.of(true)]\n      });\n    }\n  }, [value, view]);\n  return {\n    state,\n    setState,\n    view,\n    setView,\n    container,\n    setContainer\n  };\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"className\", \"value\", \"selection\", \"extensions\", \"onChange\", \"onStatistics\", \"onCreateEditor\", \"onUpdate\", \"autoFocus\", \"theme\", \"height\", \"minHeight\", \"maxHeight\", \"width\", \"minWidth\", \"maxWidth\", \"basicSetup\", \"placeholder\", \"indentWithTab\", \"editable\", \"readOnly\", \"root\", \"initialState\"];\nimport React, { useRef, forwardRef, useImperativeHandle } from 'react';\nimport { useCodeMirror } from './useCodeMirror';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport * from '@uiw/codemirror-extensions-basic-setup';\nexport * from './useCodeMirror';\nexport * from './getDefaultExtensions';\nexport * from './utils';\nvar ReactCodeMirror = /*#__PURE__*/forwardRef((props, ref) => {\n  var {\n      className,\n      value = '',\n      selection,\n      extensions = [],\n      onChange,\n      onStatistics,\n      onCreateEditor,\n      onUpdate,\n      autoFocus,\n      theme = 'light',\n      height,\n      minHeight,\n      maxHeight,\n      width,\n      minWidth,\n      maxWidth,\n      basicSetup,\n      placeholder,\n      indentWithTab,\n      editable,\n      readOnly,\n      root,\n      initialState\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  var editor = useRef(null);\n  var {\n    state,\n    view,\n    container\n  } = useCodeMirror({\n    container: editor.current,\n    root,\n    value,\n    autoFocus,\n    theme,\n    height,\n    minHeight,\n    maxHeight,\n    width,\n    minWidth,\n    maxWidth,\n    basicSetup,\n    placeholder,\n    indentWithTab,\n    editable,\n    readOnly,\n    selection,\n    onChange,\n    onStatistics,\n    onCreateEditor,\n    onUpdate,\n    extensions,\n    initialState\n  });\n  useImperativeHandle(ref, () => ({\n    editor: editor.current,\n    state: state,\n    view: view\n  }), [editor, container, state, view]);\n\n  // check type of value\n  if (typeof value !== 'string') {\n    throw new Error(\"value must be typeof string but got \" + typeof value);\n  }\n  var defaultClassNames = typeof theme === 'string' ? \"cm-theme-\" + theme : 'cm-theme';\n  return /*#__PURE__*/_jsx(\"div\", _extends({\n    ref: editor,\n    className: \"\" + defaultClassNames + (className ? \" \" + className : '')\n  }, other));\n});\nReactCodeMirror.displayName = 'CodeMirror';\nexport default ReactCodeMirror;","import { LanguageDescription, LanguageSupport, StreamLanguage } from '@codemirror/language';\n\nfunction legacy(parser) {\n    return new LanguageSupport(StreamLanguage.define(parser));\n}\nfunction sql(dialectName) {\n    return import('@codemirror/lang-sql').then(m => m.sql({ dialect: m[dialectName] }));\n}\n/**\nAn array of language descriptions for known language packages.\n*/\nconst languages = [\n    // New-style language modes\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"C\",\n        extensions: [\"c\", \"h\", \"ino\"],\n        load() {\n            return import('@codemirror/lang-cpp').then(m => m.cpp());\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"C++\",\n        alias: [\"cpp\"],\n        extensions: [\"cpp\", \"c++\", \"cc\", \"cxx\", \"hpp\", \"h++\", \"hh\", \"hxx\"],\n        load() {\n            return import('@codemirror/lang-cpp').then(m => m.cpp());\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"CQL\",\n        alias: [\"cassandra\"],\n        extensions: [\"cql\"],\n        load() { return sql(\"Cassandra\"); }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"CSS\",\n        extensions: [\"css\"],\n        load() {\n            return import('@codemirror/lang-css').then(m => m.css());\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Go\",\n        extensions: [\"go\"],\n        load() {\n            return import('@codemirror/lang-go').then(m => m.go());\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"HTML\",\n        alias: [\"xhtml\"],\n        extensions: [\"html\", \"htm\", \"handlebars\", \"hbs\"],\n        load() {\n            return import('@codemirror/lang-html').then(m => m.html());\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Java\",\n        extensions: [\"java\"],\n        load() {\n            return import('@codemirror/lang-java').then(m => m.java());\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"JavaScript\",\n        alias: [\"ecmascript\", \"js\", \"node\"],\n        extensions: [\"js\", \"mjs\", \"cjs\"],\n        load() {\n            return import('@codemirror/lang-javascript').then(m => m.javascript());\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Jinja\",\n        extensions: [\"j2\", \"jinja\", \"jinja2\"],\n        load() {\n            return import('@codemirror/lang-jinja').then(m => m.jinja());\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"JSON\",\n        alias: [\"json5\"],\n        extensions: [\"json\", \"map\"],\n        load() {\n            return import('@codemirror/lang-json').then(m => m.json());\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"JSX\",\n        extensions: [\"jsx\"],\n        load() {\n            return import('@codemirror/lang-javascript').then(m => m.javascript({ jsx: true }));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"LESS\",\n        extensions: [\"less\"],\n        load() {\n            return import('@codemirror/lang-less').then(m => m.less());\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Liquid\",\n        extensions: [\"liquid\"],\n        load() {\n            return import('@codemirror/lang-liquid').then(m => m.liquid());\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"MariaDB SQL\",\n        load() { return sql(\"MariaSQL\"); }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Markdown\",\n        extensions: [\"md\", \"markdown\", \"mkd\"],\n        load() {\n            return import('@codemirror/lang-markdown').then(m => m.markdown());\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"MS SQL\",\n        load() { return sql(\"MSSQL\"); }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"MySQL\",\n        load() { return sql(\"MySQL\"); }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"PHP\",\n        extensions: [\"php\", \"php3\", \"php4\", \"php5\", \"php7\", \"phtml\"],\n        load() {\n            return import('@codemirror/lang-php').then(m => m.php());\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"PLSQL\",\n        extensions: [\"pls\"],\n        load() { return sql(\"PLSQL\"); }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"PostgreSQL\",\n        load() { return sql(\"PostgreSQL\"); }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Python\",\n        extensions: [\"BUILD\", \"bzl\", \"py\", \"pyw\"],\n        filename: /^(BUCK|BUILD)$/,\n        load() {\n            return import('@codemirror/lang-python').then(m => m.python());\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Rust\",\n        extensions: [\"rs\"],\n        load() {\n            return import('@codemirror/lang-rust').then(m => m.rust());\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Sass\",\n        extensions: [\"sass\"],\n        load() {\n            return import('@codemirror/lang-sass').then(m => m.sass({ indented: true }));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"SCSS\",\n        extensions: [\"scss\"],\n        load() {\n            return import('@codemirror/lang-sass').then(m => m.sass());\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"SQL\",\n        extensions: [\"sql\"],\n        load() { return sql(\"StandardSQL\"); }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"SQLite\",\n        load() { return sql(\"SQLite\"); }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"TSX\",\n        extensions: [\"tsx\"],\n        load() {\n            return import('@codemirror/lang-javascript').then(m => m.javascript({ jsx: true, typescript: true }));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"TypeScript\",\n        alias: [\"ts\"],\n        extensions: [\"ts\", \"mts\", \"cts\"],\n        load() {\n            return import('@codemirror/lang-javascript').then(m => m.javascript({ typescript: true }));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"WebAssembly\",\n        extensions: [\"wat\", \"wast\"],\n        load() {\n            return import('@codemirror/lang-wast').then(m => m.wast());\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"XML\",\n        alias: [\"rss\", \"wsdl\", \"xsd\"],\n        extensions: [\"xml\", \"xsl\", \"xsd\", \"svg\"],\n        load() {\n            return import('@codemirror/lang-xml').then(m => m.xml());\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"YAML\",\n        alias: [\"yml\"],\n        extensions: [\"yaml\", \"yml\"],\n        load() {\n            return import('@codemirror/lang-yaml').then(m => m.yaml());\n        }\n    }),\n    // Legacy modes ported from CodeMirror 5\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"APL\",\n        extensions: [\"dyalog\", \"apl\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/apl').then(m => legacy(m.apl));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"PGP\",\n        alias: [\"asciiarmor\"],\n        extensions: [\"asc\", \"pgp\", \"sig\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/asciiarmor').then(m => legacy(m.asciiArmor));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"ASN.1\",\n        extensions: [\"asn\", \"asn1\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/asn1').then(m => legacy(m.asn1({})));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Asterisk\",\n        filename: /^extensions\\.conf$/i,\n        load() {\n            return import('@codemirror/legacy-modes/mode/asterisk').then(m => legacy(m.asterisk));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Brainfuck\",\n        extensions: [\"b\", \"bf\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/brainfuck').then(m => legacy(m.brainfuck));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Cobol\",\n        extensions: [\"cob\", \"cpy\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/cobol').then(m => legacy(m.cobol));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"C#\",\n        alias: [\"csharp\", \"cs\"],\n        extensions: [\"cs\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.csharp));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Clojure\",\n        extensions: [\"clj\", \"cljc\", \"cljx\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/clojure').then(m => legacy(m.clojure));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"ClojureScript\",\n        extensions: [\"cljs\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/clojure').then(m => legacy(m.clojure));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Closure Stylesheets (GSS)\",\n        extensions: [\"gss\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/css').then(m => legacy(m.gss));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"CMake\",\n        extensions: [\"cmake\", \"cmake.in\"],\n        filename: /^CMakeLists\\.txt$/,\n        load() {\n            return import('@codemirror/legacy-modes/mode/cmake').then(m => legacy(m.cmake));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"CoffeeScript\",\n        alias: [\"coffee\", \"coffee-script\"],\n        extensions: [\"coffee\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/coffeescript').then(m => legacy(m.coffeeScript));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Common Lisp\",\n        alias: [\"lisp\"],\n        extensions: [\"cl\", \"lisp\", \"el\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/commonlisp').then(m => legacy(m.commonLisp));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Cypher\",\n        extensions: [\"cyp\", \"cypher\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/cypher').then(m => legacy(m.cypher));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Cython\",\n        extensions: [\"pyx\", \"pxd\", \"pxi\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/python').then(m => legacy(m.cython));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Crystal\",\n        extensions: [\"cr\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/crystal').then(m => legacy(m.crystal));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"D\",\n        extensions: [\"d\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/d').then(m => legacy(m.d));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Dart\",\n        extensions: [\"dart\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.dart));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"diff\",\n        extensions: [\"diff\", \"patch\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/diff').then(m => legacy(m.diff));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Dockerfile\",\n        filename: /^Dockerfile$/,\n        load() {\n            return import('@codemirror/legacy-modes/mode/dockerfile').then(m => legacy(m.dockerFile));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"DTD\",\n        extensions: [\"dtd\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/dtd').then(m => legacy(m.dtd));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Dylan\",\n        extensions: [\"dylan\", \"dyl\", \"intr\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/dylan').then(m => legacy(m.dylan));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"EBNF\",\n        load() {\n            return import('@codemirror/legacy-modes/mode/ebnf').then(m => legacy(m.ebnf));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"ECL\",\n        extensions: [\"ecl\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/ecl').then(m => legacy(m.ecl));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"edn\",\n        extensions: [\"edn\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/clojure').then(m => legacy(m.clojure));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Eiffel\",\n        extensions: [\"e\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/eiffel').then(m => legacy(m.eiffel));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Elm\",\n        extensions: [\"elm\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/elm').then(m => legacy(m.elm));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Erlang\",\n        extensions: [\"erl\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/erlang').then(m => legacy(m.erlang));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Esper\",\n        load() {\n            return import('@codemirror/legacy-modes/mode/sql').then(m => legacy(m.esper));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Factor\",\n        extensions: [\"factor\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/factor').then(m => legacy(m.factor));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"FCL\",\n        load() {\n            return import('@codemirror/legacy-modes/mode/fcl').then(m => legacy(m.fcl));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Forth\",\n        extensions: [\"forth\", \"fth\", \"4th\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/forth').then(m => legacy(m.forth));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Fortran\",\n        extensions: [\"f\", \"for\", \"f77\", \"f90\", \"f95\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/fortran').then(m => legacy(m.fortran));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"F#\",\n        alias: [\"fsharp\"],\n        extensions: [\"fs\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/mllike').then(m => legacy(m.fSharp));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Gas\",\n        extensions: [\"s\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/gas').then(m => legacy(m.gas));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Gherkin\",\n        extensions: [\"feature\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/gherkin').then(m => legacy(m.gherkin));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Groovy\",\n        extensions: [\"groovy\", \"gradle\"],\n        filename: /^Jenkinsfile$/,\n        load() {\n            return import('@codemirror/legacy-modes/mode/groovy').then(m => legacy(m.groovy));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Haskell\",\n        extensions: [\"hs\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/haskell').then(m => legacy(m.haskell));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Haxe\",\n        extensions: [\"hx\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/haxe').then(m => legacy(m.haxe));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"HXML\",\n        extensions: [\"hxml\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/haxe').then(m => legacy(m.hxml));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"HTTP\",\n        load() {\n            return import('@codemirror/legacy-modes/mode/http').then(m => legacy(m.http));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"IDL\",\n        extensions: [\"pro\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/idl').then(m => legacy(m.idl));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"JSON-LD\",\n        alias: [\"jsonld\"],\n        extensions: [\"jsonld\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/javascript').then(m => legacy(m.jsonld));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Julia\",\n        extensions: [\"jl\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/julia').then(m => legacy(m.julia));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Kotlin\",\n        extensions: [\"kt\", \"kts\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.kotlin));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"LiveScript\",\n        alias: [\"ls\"],\n        extensions: [\"ls\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/livescript').then(m => legacy(m.liveScript));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Lua\",\n        extensions: [\"lua\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/lua').then(m => legacy(m.lua));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"mIRC\",\n        extensions: [\"mrc\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/mirc').then(m => legacy(m.mirc));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Mathematica\",\n        extensions: [\"m\", \"nb\", \"wl\", \"wls\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/mathematica').then(m => legacy(m.mathematica));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Modelica\",\n        extensions: [\"mo\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/modelica').then(m => legacy(m.modelica));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"MUMPS\",\n        extensions: [\"mps\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/mumps').then(m => legacy(m.mumps));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Mbox\",\n        extensions: [\"mbox\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/mbox').then(m => legacy(m.mbox));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Nginx\",\n        filename: /nginx.*\\.conf$/i,\n        load() {\n            return import('@codemirror/legacy-modes/mode/nginx').then(m => legacy(m.nginx));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"NSIS\",\n        extensions: [\"nsh\", \"nsi\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/nsis').then(m => legacy(m.nsis));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"NTriples\",\n        extensions: [\"nt\", \"nq\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/ntriples').then(m => legacy(m.ntriples));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Objective-C\",\n        alias: [\"objective-c\", \"objc\"],\n        extensions: [\"m\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.objectiveC));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Objective-C++\",\n        alias: [\"objective-c++\", \"objc++\"],\n        extensions: [\"mm\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.objectiveCpp));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"OCaml\",\n        extensions: [\"ml\", \"mli\", \"mll\", \"mly\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/mllike').then(m => legacy(m.oCaml));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Octave\",\n        extensions: [\"m\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/octave').then(m => legacy(m.octave));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Oz\",\n        extensions: [\"oz\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/oz').then(m => legacy(m.oz));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Pascal\",\n        extensions: [\"p\", \"pas\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/pascal').then(m => legacy(m.pascal));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Perl\",\n        extensions: [\"pl\", \"pm\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/perl').then(m => legacy(m.perl));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Pig\",\n        extensions: [\"pig\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/pig').then(m => legacy(m.pig));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"PowerShell\",\n        extensions: [\"ps1\", \"psd1\", \"psm1\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/powershell').then(m => legacy(m.powerShell));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Properties files\",\n        alias: [\"ini\", \"properties\"],\n        extensions: [\"properties\", \"ini\", \"in\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/properties').then(m => legacy(m.properties));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"ProtoBuf\",\n        extensions: [\"proto\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/protobuf').then(m => legacy(m.protobuf));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Pug\",\n        alias: [\"jade\"],\n        extensions: [\"pug\", \"jade\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/pug').then(m => legacy(m.pug));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Puppet\",\n        extensions: [\"pp\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/puppet').then(m => legacy(m.puppet));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Q\",\n        extensions: [\"q\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/q').then(m => legacy(m.q));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"R\",\n        alias: [\"rscript\"],\n        extensions: [\"r\", \"R\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/r').then(m => legacy(m.r));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"RPM Changes\",\n        load() {\n            return import('@codemirror/legacy-modes/mode/rpm').then(m => legacy(m.rpmChanges));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"RPM Spec\",\n        extensions: [\"spec\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/rpm').then(m => legacy(m.rpmSpec));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Ruby\",\n        alias: [\"jruby\", \"macruby\", \"rake\", \"rb\", \"rbx\"],\n        extensions: [\"rb\"],\n        filename: /^(Gemfile|Rakefile)$/,\n        load() {\n            return import('@codemirror/legacy-modes/mode/ruby').then(m => legacy(m.ruby));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"SAS\",\n        extensions: [\"sas\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/sas').then(m => legacy(m.sas));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Scala\",\n        extensions: [\"scala\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.scala));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Scheme\",\n        extensions: [\"scm\", \"ss\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/scheme').then(m => legacy(m.scheme));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Shell\",\n        alias: [\"bash\", \"sh\", \"zsh\"],\n        extensions: [\"sh\", \"ksh\", \"bash\"],\n        filename: /^PKGBUILD$/,\n        load() {\n            return import('@codemirror/legacy-modes/mode/shell').then(m => legacy(m.shell));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Sieve\",\n        extensions: [\"siv\", \"sieve\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/sieve').then(m => legacy(m.sieve));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Smalltalk\",\n        extensions: [\"st\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/smalltalk').then(m => legacy(m.smalltalk));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Solr\",\n        load() {\n            return import('@codemirror/legacy-modes/mode/solr').then(m => legacy(m.solr));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"SML\",\n        extensions: [\"sml\", \"sig\", \"fun\", \"smackspec\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/mllike').then(m => legacy(m.sml));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"SPARQL\",\n        alias: [\"sparul\"],\n        extensions: [\"rq\", \"sparql\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/sparql').then(m => legacy(m.sparql));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Spreadsheet\",\n        alias: [\"excel\", \"formula\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/spreadsheet').then(m => legacy(m.spreadsheet));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Squirrel\",\n        extensions: [\"nut\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.squirrel));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Stylus\",\n        extensions: [\"styl\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/stylus').then(m => legacy(m.stylus));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Swift\",\n        extensions: [\"swift\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/swift').then(m => legacy(m.swift));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"sTeX\",\n        load() {\n            return import('@codemirror/legacy-modes/mode/stex').then(m => legacy(m.stex));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"LaTeX\",\n        alias: [\"tex\"],\n        extensions: [\"text\", \"ltx\", \"tex\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/stex').then(m => legacy(m.stex));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"SystemVerilog\",\n        extensions: [\"v\", \"sv\", \"svh\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/verilog').then(m => legacy(m.verilog));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Tcl\",\n        extensions: [\"tcl\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/tcl').then(m => legacy(m.tcl));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Textile\",\n        extensions: [\"textile\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/textile').then(m => legacy(m.textile));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"TiddlyWiki\",\n        load() {\n            return import('@codemirror/legacy-modes/mode/tiddlywiki').then(m => legacy(m.tiddlyWiki));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Tiki wiki\",\n        load() {\n            return import('@codemirror/legacy-modes/mode/tiki').then(m => legacy(m.tiki));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"TOML\",\n        extensions: [\"toml\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/toml').then(m => legacy(m.toml));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Troff\",\n        extensions: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/troff').then(m => legacy(m.troff));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"TTCN\",\n        extensions: [\"ttcn\", \"ttcn3\", \"ttcnpp\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/ttcn').then(m => legacy(m.ttcn));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"TTCN_CFG\",\n        extensions: [\"cfg\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/ttcn-cfg').then(m => legacy(m.ttcnCfg));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Turtle\",\n        extensions: [\"ttl\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/turtle').then(m => legacy(m.turtle));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Web IDL\",\n        extensions: [\"webidl\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/webidl').then(m => legacy(m.webIDL));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"VB.NET\",\n        extensions: [\"vb\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/vb').then(m => legacy(m.vb));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"VBScript\",\n        extensions: [\"vbs\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/vbscript').then(m => legacy(m.vbScript));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Velocity\",\n        extensions: [\"vtl\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/velocity').then(m => legacy(m.velocity));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Verilog\",\n        extensions: [\"v\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/verilog').then(m => legacy(m.verilog));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"VHDL\",\n        extensions: [\"vhd\", \"vhdl\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/vhdl').then(m => legacy(m.vhdl));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"XQuery\",\n        extensions: [\"xy\", \"xquery\", \"xq\", \"xqm\", \"xqy\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/xquery').then(m => legacy(m.xQuery));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Yacas\",\n        extensions: [\"ys\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/yacas').then(m => legacy(m.yacas));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Z80\",\n        extensions: [\"z80\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/z80').then(m => legacy(m.z80));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"MscGen\",\n        extensions: [\"mscgen\", \"mscin\", \"msc\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/mscgen').then(m => legacy(m.mscgen));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Xù\",\n        extensions: [\"xu\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/mscgen').then(m => legacy(m.xu));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"MsGenny\",\n        extensions: [\"msgenny\"],\n        load() {\n            return import('@codemirror/legacy-modes/mode/mscgen').then(m => legacy(m.msgenny));\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Vue\",\n        extensions: [\"vue\"],\n        load() {\n            return import('@codemirror/lang-vue').then(m => m.vue());\n        }\n    }),\n    /*@__PURE__*/LanguageDescription.of({\n        name: \"Angular Template\",\n        load() {\n            return import('@codemirror/lang-angular').then(m => m.angular());\n        }\n    })\n];\n\nexport { languages };\n","import { NodeType, NodeProp, NodeSet, Tree, Parser, parseMixed } from '@lezer/common';\nimport { styleTags, tags, Tag } from '@lezer/highlight';\n\nclass CompositeBlock {\n    static create(type, value, from, parentHash, end) {\n        let hash = (parentHash + (parentHash << 8) + type + (value << 4)) | 0;\n        return new CompositeBlock(type, value, from, hash, end, [], []);\n    }\n    constructor(type, \n    // Used for indentation in list items, markup character in lists\n    value, from, hash, end, children, positions) {\n        this.type = type;\n        this.value = value;\n        this.from = from;\n        this.hash = hash;\n        this.end = end;\n        this.children = children;\n        this.positions = positions;\n        this.hashProp = [[NodeProp.contextHash, hash]];\n    }\n    addChild(child, pos) {\n        if (child.prop(NodeProp.contextHash) != this.hash)\n            child = new Tree(child.type, child.children, child.positions, child.length, this.hashProp);\n        this.children.push(child);\n        this.positions.push(pos);\n    }\n    toTree(nodeSet, end = this.end) {\n        let last = this.children.length - 1;\n        if (last >= 0)\n            end = Math.max(end, this.positions[last] + this.children[last].length + this.from);\n        return new Tree(nodeSet.types[this.type], this.children, this.positions, end - this.from).balance({\n            makeTree: (children, positions, length) => new Tree(NodeType.none, children, positions, length, this.hashProp)\n        });\n    }\n}\nvar Type;\n(function (Type) {\n    Type[Type[\"Document\"] = 1] = \"Document\";\n    Type[Type[\"CodeBlock\"] = 2] = \"CodeBlock\";\n    Type[Type[\"FencedCode\"] = 3] = \"FencedCode\";\n    Type[Type[\"Blockquote\"] = 4] = \"Blockquote\";\n    Type[Type[\"HorizontalRule\"] = 5] = \"HorizontalRule\";\n    Type[Type[\"BulletList\"] = 6] = \"BulletList\";\n    Type[Type[\"OrderedList\"] = 7] = \"OrderedList\";\n    Type[Type[\"ListItem\"] = 8] = \"ListItem\";\n    Type[Type[\"ATXHeading1\"] = 9] = \"ATXHeading1\";\n    Type[Type[\"ATXHeading2\"] = 10] = \"ATXHeading2\";\n    Type[Type[\"ATXHeading3\"] = 11] = \"ATXHeading3\";\n    Type[Type[\"ATXHeading4\"] = 12] = \"ATXHeading4\";\n    Type[Type[\"ATXHeading5\"] = 13] = \"ATXHeading5\";\n    Type[Type[\"ATXHeading6\"] = 14] = \"ATXHeading6\";\n    Type[Type[\"SetextHeading1\"] = 15] = \"SetextHeading1\";\n    Type[Type[\"SetextHeading2\"] = 16] = \"SetextHeading2\";\n    Type[Type[\"HTMLBlock\"] = 17] = \"HTMLBlock\";\n    Type[Type[\"LinkReference\"] = 18] = \"LinkReference\";\n    Type[Type[\"Paragraph\"] = 19] = \"Paragraph\";\n    Type[Type[\"CommentBlock\"] = 20] = \"CommentBlock\";\n    Type[Type[\"ProcessingInstructionBlock\"] = 21] = \"ProcessingInstructionBlock\";\n    // Inline\n    Type[Type[\"Escape\"] = 22] = \"Escape\";\n    Type[Type[\"Entity\"] = 23] = \"Entity\";\n    Type[Type[\"HardBreak\"] = 24] = \"HardBreak\";\n    Type[Type[\"Emphasis\"] = 25] = \"Emphasis\";\n    Type[Type[\"StrongEmphasis\"] = 26] = \"StrongEmphasis\";\n    Type[Type[\"Link\"] = 27] = \"Link\";\n    Type[Type[\"Image\"] = 28] = \"Image\";\n    Type[Type[\"InlineCode\"] = 29] = \"InlineCode\";\n    Type[Type[\"HTMLTag\"] = 30] = \"HTMLTag\";\n    Type[Type[\"Comment\"] = 31] = \"Comment\";\n    Type[Type[\"ProcessingInstruction\"] = 32] = \"ProcessingInstruction\";\n    Type[Type[\"Autolink\"] = 33] = \"Autolink\";\n    // Smaller tokens\n    Type[Type[\"HeaderMark\"] = 34] = \"HeaderMark\";\n    Type[Type[\"QuoteMark\"] = 35] = \"QuoteMark\";\n    Type[Type[\"ListMark\"] = 36] = \"ListMark\";\n    Type[Type[\"LinkMark\"] = 37] = \"LinkMark\";\n    Type[Type[\"EmphasisMark\"] = 38] = \"EmphasisMark\";\n    Type[Type[\"CodeMark\"] = 39] = \"CodeMark\";\n    Type[Type[\"CodeText\"] = 40] = \"CodeText\";\n    Type[Type[\"CodeInfo\"] = 41] = \"CodeInfo\";\n    Type[Type[\"LinkTitle\"] = 42] = \"LinkTitle\";\n    Type[Type[\"LinkLabel\"] = 43] = \"LinkLabel\";\n    Type[Type[\"URL\"] = 44] = \"URL\";\n})(Type || (Type = {}));\n/**\nData structure used to accumulate a block's content during [leaf\nblock parsing](#BlockParser.leaf).\n*/\nclass LeafBlock {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The start position of the block.\n    */\n    start, \n    /**\n    The block's text content.\n    */\n    content) {\n        this.start = start;\n        this.content = content;\n        /**\n        @internal\n        */\n        this.marks = [];\n        /**\n        The block parsers active for this block.\n        */\n        this.parsers = [];\n    }\n}\n/**\nData structure used during block-level per-line parsing.\n*/\nclass Line {\n    constructor() {\n        /**\n        The line's full text.\n        */\n        this.text = \"\";\n        /**\n        The base indent provided by the composite contexts (that have\n        been handled so far).\n        */\n        this.baseIndent = 0;\n        /**\n        The string position corresponding to the base indent.\n        */\n        this.basePos = 0;\n        /**\n        The number of contexts handled @internal\n        */\n        this.depth = 0;\n        /**\n        Any markers (i.e. block quote markers) parsed for the contexts. @internal\n        */\n        this.markers = [];\n        /**\n        The position of the next non-whitespace character beyond any\n        list, blockquote, or other composite block markers.\n        */\n        this.pos = 0;\n        /**\n        The column of the next non-whitespace character.\n        */\n        this.indent = 0;\n        /**\n        The character code of the character after `pos`.\n        */\n        this.next = -1;\n    }\n    /**\n    @internal\n    */\n    forward() {\n        if (this.basePos > this.pos)\n            this.forwardInner();\n    }\n    /**\n    @internal\n    */\n    forwardInner() {\n        let newPos = this.skipSpace(this.basePos);\n        this.indent = this.countIndent(newPos, this.pos, this.indent);\n        this.pos = newPos;\n        this.next = newPos == this.text.length ? -1 : this.text.charCodeAt(newPos);\n    }\n    /**\n    Skip whitespace after the given position, return the position of\n    the next non-space character or the end of the line if there's\n    only space after `from`.\n    */\n    skipSpace(from) { return skipSpace(this.text, from); }\n    /**\n    @internal\n    */\n    reset(text) {\n        this.text = text;\n        this.baseIndent = this.basePos = this.pos = this.indent = 0;\n        this.forwardInner();\n        this.depth = 1;\n        while (this.markers.length)\n            this.markers.pop();\n    }\n    /**\n    Move the line's base position forward to the given position.\n    This should only be called by composite [block\n    parsers](#BlockParser.parse) or [markup skipping\n    functions](#NodeSpec.composite).\n    */\n    moveBase(to) {\n        this.basePos = to;\n        this.baseIndent = this.countIndent(to, this.pos, this.indent);\n    }\n    /**\n    Move the line's base position forward to the given _column_.\n    */\n    moveBaseColumn(indent) {\n        this.baseIndent = indent;\n        this.basePos = this.findColumn(indent);\n    }\n    /**\n    Store a composite-block-level marker. Should be called from\n    [markup skipping functions](#NodeSpec.composite) when they\n    consume any non-whitespace characters.\n    */\n    addMarker(elt) {\n        this.markers.push(elt);\n    }\n    /**\n    Find the column position at `to`, optionally starting at a given\n    position and column.\n    */\n    countIndent(to, from = 0, indent = 0) {\n        for (let i = from; i < to; i++)\n            indent += this.text.charCodeAt(i) == 9 ? 4 - indent % 4 : 1;\n        return indent;\n    }\n    /**\n    Find the position corresponding to the given column.\n    */\n    findColumn(goal) {\n        let i = 0;\n        for (let indent = 0; i < this.text.length && indent < goal; i++)\n            indent += this.text.charCodeAt(i) == 9 ? 4 - indent % 4 : 1;\n        return i;\n    }\n    /**\n    @internal\n    */\n    scrub() {\n        if (!this.baseIndent)\n            return this.text;\n        let result = \"\";\n        for (let i = 0; i < this.basePos; i++)\n            result += \" \";\n        return result + this.text.slice(this.basePos);\n    }\n}\nfunction skipForList(bl, cx, line) {\n    if (line.pos == line.text.length ||\n        (bl != cx.block && line.indent >= cx.stack[line.depth + 1].value + line.baseIndent))\n        return true;\n    if (line.indent >= line.baseIndent + 4)\n        return false;\n    let size = (bl.type == Type.OrderedList ? isOrderedList : isBulletList)(line, cx, false);\n    return size > 0 &&\n        (bl.type != Type.BulletList || isHorizontalRule(line, cx, false) < 0) &&\n        line.text.charCodeAt(line.pos + size - 1) == bl.value;\n}\nconst DefaultSkipMarkup = {\n    [Type.Blockquote](bl, cx, line) {\n        if (line.next != 62 /* '>' */)\n            return false;\n        line.markers.push(elt(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1));\n        line.moveBase(line.pos + (space(line.text.charCodeAt(line.pos + 1)) ? 2 : 1));\n        bl.end = cx.lineStart + line.text.length;\n        return true;\n    },\n    [Type.ListItem](bl, _cx, line) {\n        if (line.indent < line.baseIndent + bl.value && line.next > -1)\n            return false;\n        line.moveBaseColumn(line.baseIndent + bl.value);\n        return true;\n    },\n    [Type.OrderedList]: skipForList,\n    [Type.BulletList]: skipForList,\n    [Type.Document]() { return true; }\n};\nfunction space(ch) { return ch == 32 || ch == 9 || ch == 10 || ch == 13; }\nfunction skipSpace(line, i = 0) {\n    while (i < line.length && space(line.charCodeAt(i)))\n        i++;\n    return i;\n}\nfunction skipSpaceBack(line, i, to) {\n    while (i > to && space(line.charCodeAt(i - 1)))\n        i--;\n    return i;\n}\nfunction isFencedCode(line) {\n    if (line.next != 96 && line.next != 126 /* '`~' */)\n        return -1;\n    let pos = line.pos + 1;\n    while (pos < line.text.length && line.text.charCodeAt(pos) == line.next)\n        pos++;\n    if (pos < line.pos + 3)\n        return -1;\n    if (line.next == 96)\n        for (let i = pos; i < line.text.length; i++)\n            if (line.text.charCodeAt(i) == 96)\n                return -1;\n    return pos;\n}\nfunction isBlockquote(line) {\n    return line.next != 62 /* '>' */ ? -1 : line.text.charCodeAt(line.pos + 1) == 32 ? 2 : 1;\n}\nfunction isHorizontalRule(line, cx, breaking) {\n    if (line.next != 42 && line.next != 45 && line.next != 95 /* '_-*' */)\n        return -1;\n    let count = 1;\n    for (let pos = line.pos + 1; pos < line.text.length; pos++) {\n        let ch = line.text.charCodeAt(pos);\n        if (ch == line.next)\n            count++;\n        else if (!space(ch))\n            return -1;\n    }\n    // Setext headers take precedence\n    if (breaking && line.next == 45 && isSetextUnderline(line) > -1 && line.depth == cx.stack.length &&\n        cx.parser.leafBlockParsers.indexOf(DefaultLeafBlocks.SetextHeading) > -1)\n        return -1;\n    return count < 3 ? -1 : 1;\n}\nfunction inList(cx, type) {\n    for (let i = cx.stack.length - 1; i >= 0; i--)\n        if (cx.stack[i].type == type)\n            return true;\n    return false;\n}\nfunction isBulletList(line, cx, breaking) {\n    return (line.next == 45 || line.next == 43 || line.next == 42 /* '-+*' */) &&\n        (line.pos == line.text.length - 1 || space(line.text.charCodeAt(line.pos + 1))) &&\n        (!breaking || inList(cx, Type.BulletList) || line.skipSpace(line.pos + 2) < line.text.length) ? 1 : -1;\n}\nfunction isOrderedList(line, cx, breaking) {\n    let pos = line.pos, next = line.next;\n    for (;;) {\n        if (next >= 48 && next <= 57 /* '0-9' */)\n            pos++;\n        else\n            break;\n        if (pos == line.text.length)\n            return -1;\n        next = line.text.charCodeAt(pos);\n    }\n    if (pos == line.pos || pos > line.pos + 9 ||\n        (next != 46 && next != 41 /* '.)' */) ||\n        (pos < line.text.length - 1 && !space(line.text.charCodeAt(pos + 1))) ||\n        breaking && !inList(cx, Type.OrderedList) &&\n            (line.skipSpace(pos + 1) == line.text.length || pos > line.pos + 1 || line.next != 49 /* '1' */))\n        return -1;\n    return pos + 1 - line.pos;\n}\nfunction isAtxHeading(line) {\n    if (line.next != 35 /* '#' */)\n        return -1;\n    let pos = line.pos + 1;\n    while (pos < line.text.length && line.text.charCodeAt(pos) == 35)\n        pos++;\n    if (pos < line.text.length && line.text.charCodeAt(pos) != 32)\n        return -1;\n    let size = pos - line.pos;\n    return size > 6 ? -1 : size;\n}\nfunction isSetextUnderline(line) {\n    if (line.next != 45 && line.next != 61 /* '-=' */ || line.indent >= line.baseIndent + 4)\n        return -1;\n    let pos = line.pos + 1;\n    while (pos < line.text.length && line.text.charCodeAt(pos) == line.next)\n        pos++;\n    let end = pos;\n    while (pos < line.text.length && space(line.text.charCodeAt(pos)))\n        pos++;\n    return pos == line.text.length ? end : -1;\n}\nconst EmptyLine = /^[ \\t]*$/, CommentEnd = /-->/, ProcessingEnd = /\\?>/;\nconst HTMLBlockStyle = [\n    [/^<(?:script|pre|style)(?:\\s|>|$)/i, /<\\/(?:script|pre|style)>/i],\n    [/^\\s*<!--/, CommentEnd],\n    [/^\\s*<\\?/, ProcessingEnd],\n    [/^\\s*<![A-Z]/, />/],\n    [/^\\s*<!\\[CDATA\\[/, /\\]\\]>/],\n    [/^\\s*<\\/?(?:address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)(?:\\s|\\/?>|$)/i, EmptyLine],\n    [/^\\s*(?:<\\/[a-z][\\w-]*\\s*>|<[a-z][\\w-]*(\\s+[a-z:_][\\w-.]*(?:\\s*=\\s*(?:[^\\s\"'=<>`]+|'[^']*'|\"[^\"]*\"))?)*\\s*>)\\s*$/i, EmptyLine]\n];\nfunction isHTMLBlock(line, _cx, breaking) {\n    if (line.next != 60 /* '<' */)\n        return -1;\n    let rest = line.text.slice(line.pos);\n    for (let i = 0, e = HTMLBlockStyle.length - (breaking ? 1 : 0); i < e; i++)\n        if (HTMLBlockStyle[i][0].test(rest))\n            return i;\n    return -1;\n}\nfunction getListIndent(line, pos) {\n    let indentAfter = line.countIndent(pos, line.pos, line.indent);\n    let indented = line.countIndent(line.skipSpace(pos), pos, indentAfter);\n    return indented >= indentAfter + 5 ? indentAfter + 1 : indented;\n}\nfunction addCodeText(marks, from, to) {\n    let last = marks.length - 1;\n    if (last >= 0 && marks[last].to == from && marks[last].type == Type.CodeText)\n        marks[last].to = to;\n    else\n        marks.push(elt(Type.CodeText, from, to));\n}\n// Rules for parsing blocks. A return value of false means the rule\n// doesn't apply here, true means it does. When true is returned and\n// `p.line` has been updated, the rule is assumed to have consumed a\n// leaf block. Otherwise, it is assumed to have opened a context.\nconst DefaultBlockParsers = {\n    LinkReference: undefined,\n    IndentedCode(cx, line) {\n        let base = line.baseIndent + 4;\n        if (line.indent < base)\n            return false;\n        let start = line.findColumn(base);\n        let from = cx.lineStart + start, to = cx.lineStart + line.text.length;\n        let marks = [], pendingMarks = [];\n        addCodeText(marks, from, to);\n        while (cx.nextLine() && line.depth >= cx.stack.length) {\n            if (line.pos == line.text.length) { // Empty\n                addCodeText(pendingMarks, cx.lineStart - 1, cx.lineStart);\n                for (let m of line.markers)\n                    pendingMarks.push(m);\n            }\n            else if (line.indent < base) {\n                break;\n            }\n            else {\n                if (pendingMarks.length) {\n                    for (let m of pendingMarks) {\n                        if (m.type == Type.CodeText)\n                            addCodeText(marks, m.from, m.to);\n                        else\n                            marks.push(m);\n                    }\n                    pendingMarks = [];\n                }\n                addCodeText(marks, cx.lineStart - 1, cx.lineStart);\n                for (let m of line.markers)\n                    marks.push(m);\n                to = cx.lineStart + line.text.length;\n                let codeStart = cx.lineStart + line.findColumn(line.baseIndent + 4);\n                if (codeStart < to)\n                    addCodeText(marks, codeStart, to);\n            }\n        }\n        if (pendingMarks.length) {\n            pendingMarks = pendingMarks.filter(m => m.type != Type.CodeText);\n            if (pendingMarks.length)\n                line.markers = pendingMarks.concat(line.markers);\n        }\n        cx.addNode(cx.buffer.writeElements(marks, -from).finish(Type.CodeBlock, to - from), from);\n        return true;\n    },\n    FencedCode(cx, line) {\n        let fenceEnd = isFencedCode(line);\n        if (fenceEnd < 0)\n            return false;\n        let from = cx.lineStart + line.pos, ch = line.next, len = fenceEnd - line.pos;\n        let infoFrom = line.skipSpace(fenceEnd), infoTo = skipSpaceBack(line.text, line.text.length, infoFrom);\n        let marks = [elt(Type.CodeMark, from, from + len)];\n        if (infoFrom < infoTo)\n            marks.push(elt(Type.CodeInfo, cx.lineStart + infoFrom, cx.lineStart + infoTo));\n        for (let first = true; cx.nextLine() && line.depth >= cx.stack.length; first = false) {\n            let i = line.pos;\n            if (line.indent - line.baseIndent < 4)\n                while (i < line.text.length && line.text.charCodeAt(i) == ch)\n                    i++;\n            if (i - line.pos >= len && line.skipSpace(i) == line.text.length) {\n                for (let m of line.markers)\n                    marks.push(m);\n                marks.push(elt(Type.CodeMark, cx.lineStart + line.pos, cx.lineStart + i));\n                cx.nextLine();\n                break;\n            }\n            else {\n                if (!first)\n                    addCodeText(marks, cx.lineStart - 1, cx.lineStart);\n                for (let m of line.markers)\n                    marks.push(m);\n                let textStart = cx.lineStart + line.basePos, textEnd = cx.lineStart + line.text.length;\n                if (textStart < textEnd)\n                    addCodeText(marks, textStart, textEnd);\n            }\n        }\n        cx.addNode(cx.buffer.writeElements(marks, -from)\n            .finish(Type.FencedCode, cx.prevLineEnd() - from), from);\n        return true;\n    },\n    Blockquote(cx, line) {\n        let size = isBlockquote(line);\n        if (size < 0)\n            return false;\n        cx.startContext(Type.Blockquote, line.pos);\n        cx.addNode(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1);\n        line.moveBase(line.pos + size);\n        return null;\n    },\n    HorizontalRule(cx, line) {\n        if (isHorizontalRule(line, cx, false) < 0)\n            return false;\n        let from = cx.lineStart + line.pos;\n        cx.nextLine();\n        cx.addNode(Type.HorizontalRule, from);\n        return true;\n    },\n    BulletList(cx, line) {\n        let size = isBulletList(line, cx, false);\n        if (size < 0)\n            return false;\n        if (cx.block.type != Type.BulletList)\n            cx.startContext(Type.BulletList, line.basePos, line.next);\n        let newBase = getListIndent(line, line.pos + 1);\n        cx.startContext(Type.ListItem, line.basePos, newBase - line.baseIndent);\n        cx.addNode(Type.ListMark, cx.lineStart + line.pos, cx.lineStart + line.pos + size);\n        line.moveBaseColumn(newBase);\n        return null;\n    },\n    OrderedList(cx, line) {\n        let size = isOrderedList(line, cx, false);\n        if (size < 0)\n            return false;\n        if (cx.block.type != Type.OrderedList)\n            cx.startContext(Type.OrderedList, line.basePos, line.text.charCodeAt(line.pos + size - 1));\n        let newBase = getListIndent(line, line.pos + size);\n        cx.startContext(Type.ListItem, line.basePos, newBase - line.baseIndent);\n        cx.addNode(Type.ListMark, cx.lineStart + line.pos, cx.lineStart + line.pos + size);\n        line.moveBaseColumn(newBase);\n        return null;\n    },\n    ATXHeading(cx, line) {\n        let size = isAtxHeading(line);\n        if (size < 0)\n            return false;\n        let off = line.pos, from = cx.lineStart + off;\n        let endOfSpace = skipSpaceBack(line.text, line.text.length, off), after = endOfSpace;\n        while (after > off && line.text.charCodeAt(after - 1) == line.next)\n            after--;\n        if (after == endOfSpace || after == off || !space(line.text.charCodeAt(after - 1)))\n            after = line.text.length;\n        let buf = cx.buffer\n            .write(Type.HeaderMark, 0, size)\n            .writeElements(cx.parser.parseInline(line.text.slice(off + size + 1, after), from + size + 1), -from);\n        if (after < line.text.length)\n            buf.write(Type.HeaderMark, after - off, endOfSpace - off);\n        let node = buf.finish(Type.ATXHeading1 - 1 + size, line.text.length - off);\n        cx.nextLine();\n        cx.addNode(node, from);\n        return true;\n    },\n    HTMLBlock(cx, line) {\n        let type = isHTMLBlock(line, cx, false);\n        if (type < 0)\n            return false;\n        let from = cx.lineStart + line.pos, end = HTMLBlockStyle[type][1];\n        let marks = [], trailing = end != EmptyLine;\n        while (!end.test(line.text) && cx.nextLine()) {\n            if (line.depth < cx.stack.length) {\n                trailing = false;\n                break;\n            }\n            for (let m of line.markers)\n                marks.push(m);\n        }\n        if (trailing)\n            cx.nextLine();\n        let nodeType = end == CommentEnd ? Type.CommentBlock : end == ProcessingEnd ? Type.ProcessingInstructionBlock : Type.HTMLBlock;\n        let to = cx.prevLineEnd();\n        cx.addNode(cx.buffer.writeElements(marks, -from).finish(nodeType, to - from), from);\n        return true;\n    },\n    SetextHeading: undefined // Specifies relative precedence for block-continue function\n};\n// This implements a state machine that incrementally parses link references. At each\n// next line, it looks ahead to see if the line continues the reference or not. If it\n// doesn't and a valid link is available ending before that line, it finishes that.\n// Similarly, on `finish` (when the leaf is terminated by external circumstances), it\n// creates a link reference if there's a valid reference up to the current point.\nclass LinkReferenceParser {\n    constructor(leaf) {\n        this.stage = 0 /* RefStage.Start */;\n        this.elts = [];\n        this.pos = 0;\n        this.start = leaf.start;\n        this.advance(leaf.content);\n    }\n    nextLine(cx, line, leaf) {\n        if (this.stage == -1 /* RefStage.Failed */)\n            return false;\n        let content = leaf.content + \"\\n\" + line.scrub();\n        let finish = this.advance(content);\n        if (finish > -1 && finish < content.length)\n            return this.complete(cx, leaf, finish);\n        return false;\n    }\n    finish(cx, leaf) {\n        if ((this.stage == 2 /* RefStage.Link */ || this.stage == 3 /* RefStage.Title */) && skipSpace(leaf.content, this.pos) == leaf.content.length)\n            return this.complete(cx, leaf, leaf.content.length);\n        return false;\n    }\n    complete(cx, leaf, len) {\n        cx.addLeafElement(leaf, elt(Type.LinkReference, this.start, this.start + len, this.elts));\n        return true;\n    }\n    nextStage(elt) {\n        if (elt) {\n            this.pos = elt.to - this.start;\n            this.elts.push(elt);\n            this.stage++;\n            return true;\n        }\n        if (elt === false)\n            this.stage = -1 /* RefStage.Failed */;\n        return false;\n    }\n    advance(content) {\n        for (;;) {\n            if (this.stage == -1 /* RefStage.Failed */) {\n                return -1;\n            }\n            else if (this.stage == 0 /* RefStage.Start */) {\n                if (!this.nextStage(parseLinkLabel(content, this.pos, this.start, true)))\n                    return -1;\n                if (content.charCodeAt(this.pos) != 58 /* ':' */)\n                    return this.stage = -1 /* RefStage.Failed */;\n                this.elts.push(elt(Type.LinkMark, this.pos + this.start, this.pos + this.start + 1));\n                this.pos++;\n            }\n            else if (this.stage == 1 /* RefStage.Label */) {\n                if (!this.nextStage(parseURL(content, skipSpace(content, this.pos), this.start)))\n                    return -1;\n            }\n            else if (this.stage == 2 /* RefStage.Link */) {\n                let skip = skipSpace(content, this.pos), end = 0;\n                if (skip > this.pos) {\n                    let title = parseLinkTitle(content, skip, this.start);\n                    if (title) {\n                        let titleEnd = lineEnd(content, title.to - this.start);\n                        if (titleEnd > 0) {\n                            this.nextStage(title);\n                            end = titleEnd;\n                        }\n                    }\n                }\n                if (!end)\n                    end = lineEnd(content, this.pos);\n                return end > 0 && end < content.length ? end : -1;\n            }\n            else { // RefStage.Title\n                return lineEnd(content, this.pos);\n            }\n        }\n    }\n}\nfunction lineEnd(text, pos) {\n    for (; pos < text.length; pos++) {\n        let next = text.charCodeAt(pos);\n        if (next == 10)\n            break;\n        if (!space(next))\n            return -1;\n    }\n    return pos;\n}\nclass SetextHeadingParser {\n    nextLine(cx, line, leaf) {\n        let underline = line.depth < cx.stack.length ? -1 : isSetextUnderline(line);\n        let next = line.next;\n        if (underline < 0)\n            return false;\n        let underlineMark = elt(Type.HeaderMark, cx.lineStart + line.pos, cx.lineStart + underline);\n        cx.nextLine();\n        cx.addLeafElement(leaf, elt(next == 61 ? Type.SetextHeading1 : Type.SetextHeading2, leaf.start, cx.prevLineEnd(), [\n            ...cx.parser.parseInline(leaf.content, leaf.start),\n            underlineMark\n        ]));\n        return true;\n    }\n    finish() {\n        return false;\n    }\n}\nconst DefaultLeafBlocks = {\n    LinkReference(_, leaf) { return leaf.content.charCodeAt(0) == 91 /* '[' */ ? new LinkReferenceParser(leaf) : null; },\n    SetextHeading() { return new SetextHeadingParser; }\n};\nconst DefaultEndLeaf = [\n    (_, line) => isAtxHeading(line) >= 0,\n    (_, line) => isFencedCode(line) >= 0,\n    (_, line) => isBlockquote(line) >= 0,\n    (p, line) => isBulletList(line, p, true) >= 0,\n    (p, line) => isOrderedList(line, p, true) >= 0,\n    (p, line) => isHorizontalRule(line, p, true) >= 0,\n    (p, line) => isHTMLBlock(line, p, true) >= 0\n];\nconst scanLineResult = { text: \"\", end: 0 };\n/**\nBlock-level parsing functions get access to this context object.\n*/\nclass BlockContext {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The parser configuration used.\n    */\n    parser, \n    /**\n    @internal\n    */\n    input, fragments, \n    /**\n    @internal\n    */\n    ranges) {\n        this.parser = parser;\n        this.input = input;\n        this.ranges = ranges;\n        this.line = new Line();\n        this.atEnd = false;\n        /**\n        For reused nodes on gaps, we can't directly put the original\n        node into the tree, since that may be bigger than its parent.\n        When this happens, we create a dummy tree that is replaced by\n        the proper node in `injectGaps` @internal\n        */\n        this.reusePlaceholders = new Map;\n        this.stoppedAt = null;\n        /**\n        The range index that absoluteLineStart points into @internal\n        */\n        this.rangeI = 0;\n        this.to = ranges[ranges.length - 1].to;\n        this.lineStart = this.absoluteLineStart = this.absoluteLineEnd = ranges[0].from;\n        this.block = CompositeBlock.create(Type.Document, 0, this.lineStart, 0, 0);\n        this.stack = [this.block];\n        this.fragments = fragments.length ? new FragmentCursor(fragments, input) : null;\n        this.readLine();\n    }\n    get parsedPos() {\n        return this.absoluteLineStart;\n    }\n    advance() {\n        if (this.stoppedAt != null && this.absoluteLineStart > this.stoppedAt)\n            return this.finish();\n        let { line } = this;\n        for (;;) {\n            for (let markI = 0;;) {\n                let next = line.depth < this.stack.length ? this.stack[this.stack.length - 1] : null;\n                while (markI < line.markers.length && (!next || line.markers[markI].from < next.end)) {\n                    let mark = line.markers[markI++];\n                    this.addNode(mark.type, mark.from, mark.to);\n                }\n                if (!next)\n                    break;\n                this.finishContext();\n            }\n            if (line.pos < line.text.length)\n                break;\n            // Empty line\n            if (!this.nextLine())\n                return this.finish();\n        }\n        if (this.fragments && this.reuseFragment(line.basePos))\n            return null;\n        start: for (;;) {\n            for (let type of this.parser.blockParsers)\n                if (type) {\n                    let result = type(this, line);\n                    if (result != false) {\n                        if (result == true)\n                            return null;\n                        line.forward();\n                        continue start;\n                    }\n                }\n            break;\n        }\n        let leaf = new LeafBlock(this.lineStart + line.pos, line.text.slice(line.pos));\n        for (let parse of this.parser.leafBlockParsers)\n            if (parse) {\n                let parser = parse(this, leaf);\n                if (parser)\n                    leaf.parsers.push(parser);\n            }\n        lines: while (this.nextLine()) {\n            if (line.pos == line.text.length)\n                break;\n            if (line.indent < line.baseIndent + 4) {\n                for (let stop of this.parser.endLeafBlock)\n                    if (stop(this, line, leaf))\n                        break lines;\n            }\n            for (let parser of leaf.parsers)\n                if (parser.nextLine(this, line, leaf))\n                    return null;\n            leaf.content += \"\\n\" + line.scrub();\n            for (let m of line.markers)\n                leaf.marks.push(m);\n        }\n        this.finishLeaf(leaf);\n        return null;\n    }\n    stopAt(pos) {\n        if (this.stoppedAt != null && this.stoppedAt < pos)\n            throw new RangeError(\"Can't move stoppedAt forward\");\n        this.stoppedAt = pos;\n    }\n    reuseFragment(start) {\n        if (!this.fragments.moveTo(this.absoluteLineStart + start, this.absoluteLineStart) ||\n            !this.fragments.matches(this.block.hash))\n            return false;\n        let taken = this.fragments.takeNodes(this);\n        if (!taken)\n            return false;\n        this.absoluteLineStart += taken;\n        this.lineStart = toRelative(this.absoluteLineStart, this.ranges);\n        this.moveRangeI();\n        if (this.absoluteLineStart < this.to) {\n            this.lineStart++;\n            this.absoluteLineStart++;\n            this.readLine();\n        }\n        else {\n            this.atEnd = true;\n            this.readLine();\n        }\n        return true;\n    }\n    /**\n    The number of parent blocks surrounding the current block.\n    */\n    get depth() {\n        return this.stack.length;\n    }\n    /**\n    Get the type of the parent block at the given depth. When no\n    depth is passed, return the type of the innermost parent.\n    */\n    parentType(depth = this.depth - 1) {\n        return this.parser.nodeSet.types[this.stack[depth].type];\n    }\n    /**\n    Move to the next input line. This should only be called by\n    (non-composite) [block parsers](#BlockParser.parse) that consume\n    the line directly, or leaf block parser\n    [`nextLine`](#LeafBlockParser.nextLine) methods when they\n    consume the current line (and return true).\n    */\n    nextLine() {\n        this.lineStart += this.line.text.length;\n        if (this.absoluteLineEnd >= this.to) {\n            this.absoluteLineStart = this.absoluteLineEnd;\n            this.atEnd = true;\n            this.readLine();\n            return false;\n        }\n        else {\n            this.lineStart++;\n            this.absoluteLineStart = this.absoluteLineEnd + 1;\n            this.moveRangeI();\n            this.readLine();\n            return true;\n        }\n    }\n    /**\n    Retrieve the text of the line after the current one, without\n    actually moving the context's current line forward.\n    */\n    peekLine() {\n        return this.scanLine(this.absoluteLineEnd + 1).text;\n    }\n    moveRangeI() {\n        while (this.rangeI < this.ranges.length - 1 && this.absoluteLineStart >= this.ranges[this.rangeI].to) {\n            this.rangeI++;\n            this.absoluteLineStart = Math.max(this.absoluteLineStart, this.ranges[this.rangeI].from);\n        }\n    }\n    /**\n    @internal\n    Collect the text for the next line.\n    */\n    scanLine(start) {\n        let r = scanLineResult;\n        r.end = start;\n        if (start >= this.to) {\n            r.text = \"\";\n        }\n        else {\n            r.text = this.lineChunkAt(start);\n            r.end += r.text.length;\n            if (this.ranges.length > 1) {\n                let textOffset = this.absoluteLineStart, rangeI = this.rangeI;\n                while (this.ranges[rangeI].to < r.end) {\n                    rangeI++;\n                    let nextFrom = this.ranges[rangeI].from;\n                    let after = this.lineChunkAt(nextFrom);\n                    r.end = nextFrom + after.length;\n                    r.text = r.text.slice(0, this.ranges[rangeI - 1].to - textOffset) + after;\n                    textOffset = r.end - r.text.length;\n                }\n            }\n        }\n        return r;\n    }\n    /**\n    @internal\n    Populate this.line with the content of the next line. Skip\n    leading characters covered by composite blocks.\n    */\n    readLine() {\n        let { line } = this, { text, end } = this.scanLine(this.absoluteLineStart);\n        this.absoluteLineEnd = end;\n        line.reset(text);\n        for (; line.depth < this.stack.length; line.depth++) {\n            let cx = this.stack[line.depth], handler = this.parser.skipContextMarkup[cx.type];\n            if (!handler)\n                throw new Error(\"Unhandled block context \" + Type[cx.type]);\n            let marks = this.line.markers.length;\n            if (!handler(cx, this, line)) {\n                if (this.line.markers.length > marks)\n                    cx.end = this.line.markers[this.line.markers.length - 1].to;\n                line.forward();\n                break;\n            }\n            line.forward();\n        }\n    }\n    lineChunkAt(pos) {\n        let next = this.input.chunk(pos), text;\n        if (!this.input.lineChunks) {\n            let eol = next.indexOf(\"\\n\");\n            text = eol < 0 ? next : next.slice(0, eol);\n        }\n        else {\n            text = next == \"\\n\" ? \"\" : next;\n        }\n        return pos + text.length > this.to ? text.slice(0, this.to - pos) : text;\n    }\n    /**\n    The end position of the previous line.\n    */\n    prevLineEnd() { return this.atEnd ? this.lineStart : this.lineStart - 1; }\n    /**\n    @internal\n    */\n    startContext(type, start, value = 0) {\n        this.block = CompositeBlock.create(type, value, this.lineStart + start, this.block.hash, this.lineStart + this.line.text.length);\n        this.stack.push(this.block);\n    }\n    /**\n    Start a composite block. Should only be called from [block\n    parser functions](#BlockParser.parse) that return null.\n    */\n    startComposite(type, start, value = 0) {\n        this.startContext(this.parser.getNodeType(type), start, value);\n    }\n    /**\n    @internal\n    */\n    addNode(block, from, to) {\n        if (typeof block == \"number\")\n            block = new Tree(this.parser.nodeSet.types[block], none, none, (to !== null && to !== void 0 ? to : this.prevLineEnd()) - from);\n        this.block.addChild(block, from - this.block.from);\n    }\n    /**\n    Add a block element. Can be called by [block\n    parsers](#BlockParser.parse).\n    */\n    addElement(elt) {\n        this.block.addChild(elt.toTree(this.parser.nodeSet), elt.from - this.block.from);\n    }\n    /**\n    Add a block element from a [leaf parser](#LeafBlockParser). This\n    makes sure any extra composite block markup (such as blockquote\n    markers) inside the block are also added to the syntax tree.\n    */\n    addLeafElement(leaf, elt) {\n        this.addNode(this.buffer\n            .writeElements(injectMarks(elt.children, leaf.marks), -elt.from)\n            .finish(elt.type, elt.to - elt.from), elt.from);\n    }\n    /**\n    @internal\n    */\n    finishContext() {\n        let cx = this.stack.pop();\n        let top = this.stack[this.stack.length - 1];\n        top.addChild(cx.toTree(this.parser.nodeSet), cx.from - top.from);\n        this.block = top;\n    }\n    finish() {\n        while (this.stack.length > 1)\n            this.finishContext();\n        return this.addGaps(this.block.toTree(this.parser.nodeSet, this.lineStart));\n    }\n    addGaps(tree) {\n        return this.ranges.length > 1 ?\n            injectGaps(this.ranges, 0, tree.topNode, this.ranges[0].from, this.reusePlaceholders) : tree;\n    }\n    /**\n    @internal\n    */\n    finishLeaf(leaf) {\n        for (let parser of leaf.parsers)\n            if (parser.finish(this, leaf))\n                return;\n        let inline = injectMarks(this.parser.parseInline(leaf.content, leaf.start), leaf.marks);\n        this.addNode(this.buffer\n            .writeElements(inline, -leaf.start)\n            .finish(Type.Paragraph, leaf.content.length), leaf.start);\n    }\n    elt(type, from, to, children) {\n        if (typeof type == \"string\")\n            return elt(this.parser.getNodeType(type), from, to, children);\n        return new TreeElement(type, from);\n    }\n    /**\n    @internal\n    */\n    get buffer() { return new Buffer(this.parser.nodeSet); }\n}\nfunction injectGaps(ranges, rangeI, tree, offset, dummies) {\n    let rangeEnd = ranges[rangeI].to;\n    let children = [], positions = [], start = tree.from + offset;\n    function movePastNext(upto, inclusive) {\n        while (inclusive ? upto >= rangeEnd : upto > rangeEnd) {\n            let size = ranges[rangeI + 1].from - rangeEnd;\n            offset += size;\n            upto += size;\n            rangeI++;\n            rangeEnd = ranges[rangeI].to;\n        }\n    }\n    for (let ch = tree.firstChild; ch; ch = ch.nextSibling) {\n        movePastNext(ch.from + offset, true);\n        let from = ch.from + offset, node, reuse = dummies.get(ch.tree);\n        if (reuse) {\n            node = reuse;\n        }\n        else if (ch.to + offset > rangeEnd) {\n            node = injectGaps(ranges, rangeI, ch, offset, dummies);\n            movePastNext(ch.to + offset, false);\n        }\n        else {\n            node = ch.toTree();\n        }\n        children.push(node);\n        positions.push(from - start);\n    }\n    movePastNext(tree.to + offset, false);\n    return new Tree(tree.type, children, positions, tree.to + offset - start, tree.tree ? tree.tree.propValues : undefined);\n}\n/**\nA Markdown parser configuration.\n*/\nclass MarkdownParser extends Parser {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The parser's syntax [node\n    types](https://lezer.codemirror.net/docs/ref/#common.NodeSet).\n    */\n    nodeSet, \n    /**\n    @internal\n    */\n    blockParsers, \n    /**\n    @internal\n    */\n    leafBlockParsers, \n    /**\n    @internal\n    */\n    blockNames, \n    /**\n    @internal\n    */\n    endLeafBlock, \n    /**\n    @internal\n    */\n    skipContextMarkup, \n    /**\n    @internal\n    */\n    inlineParsers, \n    /**\n    @internal\n    */\n    inlineNames, \n    /**\n    @internal\n    */\n    wrappers) {\n        super();\n        this.nodeSet = nodeSet;\n        this.blockParsers = blockParsers;\n        this.leafBlockParsers = leafBlockParsers;\n        this.blockNames = blockNames;\n        this.endLeafBlock = endLeafBlock;\n        this.skipContextMarkup = skipContextMarkup;\n        this.inlineParsers = inlineParsers;\n        this.inlineNames = inlineNames;\n        this.wrappers = wrappers;\n        /**\n        @internal\n        */\n        this.nodeTypes = Object.create(null);\n        for (let t of nodeSet.types)\n            this.nodeTypes[t.name] = t.id;\n    }\n    createParse(input, fragments, ranges) {\n        let parse = new BlockContext(this, input, fragments, ranges);\n        for (let w of this.wrappers)\n            parse = w(parse, input, fragments, ranges);\n        return parse;\n    }\n    /**\n    Reconfigure the parser.\n    */\n    configure(spec) {\n        let config = resolveConfig(spec);\n        if (!config)\n            return this;\n        let { nodeSet, skipContextMarkup } = this;\n        let blockParsers = this.blockParsers.slice(), leafBlockParsers = this.leafBlockParsers.slice(), blockNames = this.blockNames.slice(), inlineParsers = this.inlineParsers.slice(), inlineNames = this.inlineNames.slice(), endLeafBlock = this.endLeafBlock.slice(), wrappers = this.wrappers;\n        if (nonEmpty(config.defineNodes)) {\n            skipContextMarkup = Object.assign({}, skipContextMarkup);\n            let nodeTypes = nodeSet.types.slice(), styles;\n            for (let s of config.defineNodes) {\n                let { name, block, composite, style } = typeof s == \"string\" ? { name: s } : s;\n                if (nodeTypes.some(t => t.name == name))\n                    continue;\n                if (composite)\n                    skipContextMarkup[nodeTypes.length] =\n                        (bl, cx, line) => composite(cx, line, bl.value);\n                let id = nodeTypes.length;\n                let group = composite ? [\"Block\", \"BlockContext\"] : !block ? undefined\n                    : id >= Type.ATXHeading1 && id <= Type.SetextHeading2 ? [\"Block\", \"LeafBlock\", \"Heading\"] : [\"Block\", \"LeafBlock\"];\n                nodeTypes.push(NodeType.define({\n                    id,\n                    name,\n                    props: group && [[NodeProp.group, group]]\n                }));\n                if (style) {\n                    if (!styles)\n                        styles = {};\n                    if (Array.isArray(style) || style instanceof Tag)\n                        styles[name] = style;\n                    else\n                        Object.assign(styles, style);\n                }\n            }\n            nodeSet = new NodeSet(nodeTypes);\n            if (styles)\n                nodeSet = nodeSet.extend(styleTags(styles));\n        }\n        if (nonEmpty(config.props))\n            nodeSet = nodeSet.extend(...config.props);\n        if (nonEmpty(config.remove)) {\n            for (let rm of config.remove) {\n                let block = this.blockNames.indexOf(rm), inline = this.inlineNames.indexOf(rm);\n                if (block > -1)\n                    blockParsers[block] = leafBlockParsers[block] = undefined;\n                if (inline > -1)\n                    inlineParsers[inline] = undefined;\n            }\n        }\n        if (nonEmpty(config.parseBlock)) {\n            for (let spec of config.parseBlock) {\n                let found = blockNames.indexOf(spec.name);\n                if (found > -1) {\n                    blockParsers[found] = spec.parse;\n                    leafBlockParsers[found] = spec.leaf;\n                }\n                else {\n                    let pos = spec.before ? findName(blockNames, spec.before)\n                        : spec.after ? findName(blockNames, spec.after) + 1 : blockNames.length - 1;\n                    blockParsers.splice(pos, 0, spec.parse);\n                    leafBlockParsers.splice(pos, 0, spec.leaf);\n                    blockNames.splice(pos, 0, spec.name);\n                }\n                if (spec.endLeaf)\n                    endLeafBlock.push(spec.endLeaf);\n            }\n        }\n        if (nonEmpty(config.parseInline)) {\n            for (let spec of config.parseInline) {\n                let found = inlineNames.indexOf(spec.name);\n                if (found > -1) {\n                    inlineParsers[found] = spec.parse;\n                }\n                else {\n                    let pos = spec.before ? findName(inlineNames, spec.before)\n                        : spec.after ? findName(inlineNames, spec.after) + 1 : inlineNames.length - 1;\n                    inlineParsers.splice(pos, 0, spec.parse);\n                    inlineNames.splice(pos, 0, spec.name);\n                }\n            }\n        }\n        if (config.wrap)\n            wrappers = wrappers.concat(config.wrap);\n        return new MarkdownParser(nodeSet, blockParsers, leafBlockParsers, blockNames, endLeafBlock, skipContextMarkup, inlineParsers, inlineNames, wrappers);\n    }\n    /**\n    @internal\n    */\n    getNodeType(name) {\n        let found = this.nodeTypes[name];\n        if (found == null)\n            throw new RangeError(`Unknown node type '${name}'`);\n        return found;\n    }\n    /**\n    Parse the given piece of inline text at the given offset,\n    returning an array of [`Element`](#Element) objects representing\n    the inline content.\n    */\n    parseInline(text, offset) {\n        let cx = new InlineContext(this, text, offset);\n        outer: for (let pos = offset; pos < cx.end;) {\n            let next = cx.char(pos);\n            for (let token of this.inlineParsers)\n                if (token) {\n                    let result = token(cx, next, pos);\n                    if (result >= 0) {\n                        pos = result;\n                        continue outer;\n                    }\n                }\n            pos++;\n        }\n        return cx.resolveMarkers(0);\n    }\n}\nfunction nonEmpty(a) {\n    return a != null && a.length > 0;\n}\nfunction resolveConfig(spec) {\n    if (!Array.isArray(spec))\n        return spec;\n    if (spec.length == 0)\n        return null;\n    let conf = resolveConfig(spec[0]);\n    if (spec.length == 1)\n        return conf;\n    let rest = resolveConfig(spec.slice(1));\n    if (!rest || !conf)\n        return conf || rest;\n    let conc = (a, b) => (a || none).concat(b || none);\n    let wrapA = conf.wrap, wrapB = rest.wrap;\n    return {\n        props: conc(conf.props, rest.props),\n        defineNodes: conc(conf.defineNodes, rest.defineNodes),\n        parseBlock: conc(conf.parseBlock, rest.parseBlock),\n        parseInline: conc(conf.parseInline, rest.parseInline),\n        remove: conc(conf.remove, rest.remove),\n        wrap: !wrapA ? wrapB : !wrapB ? wrapA :\n            (inner, input, fragments, ranges) => wrapA(wrapB(inner, input, fragments, ranges), input, fragments, ranges)\n    };\n}\nfunction findName(names, name) {\n    let found = names.indexOf(name);\n    if (found < 0)\n        throw new RangeError(`Position specified relative to unknown parser ${name}`);\n    return found;\n}\nlet nodeTypes = [NodeType.none];\nfor (let i = 1, name; name = Type[i]; i++) {\n    nodeTypes[i] = NodeType.define({\n        id: i,\n        name,\n        props: i >= Type.Escape ? [] : [[NodeProp.group, i in DefaultSkipMarkup ? [\"Block\", \"BlockContext\"] : [\"Block\", \"LeafBlock\"]]],\n        top: name == \"Document\"\n    });\n}\nconst none = [];\nclass Buffer {\n    constructor(nodeSet) {\n        this.nodeSet = nodeSet;\n        this.content = [];\n        this.nodes = [];\n    }\n    write(type, from, to, children = 0) {\n        this.content.push(type, from, to, 4 + children * 4);\n        return this;\n    }\n    writeElements(elts, offset = 0) {\n        for (let e of elts)\n            e.writeTo(this, offset);\n        return this;\n    }\n    finish(type, length) {\n        return Tree.build({\n            buffer: this.content,\n            nodeSet: this.nodeSet,\n            reused: this.nodes,\n            topID: type,\n            length\n        });\n    }\n}\n/**\nElements are used to compose syntax nodes during parsing.\n*/\nclass Element {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The node's\n    [id](https://lezer.codemirror.net/docs/ref/#common.NodeType.id).\n    */\n    type, \n    /**\n    The start of the node, as an offset from the start of the document.\n    */\n    from, \n    /**\n    The end of the node.\n    */\n    to, \n    /**\n    The node's child nodes @internal\n    */\n    children = none) {\n        this.type = type;\n        this.from = from;\n        this.to = to;\n        this.children = children;\n    }\n    /**\n    @internal\n    */\n    writeTo(buf, offset) {\n        let startOff = buf.content.length;\n        buf.writeElements(this.children, offset);\n        buf.content.push(this.type, this.from + offset, this.to + offset, buf.content.length + 4 - startOff);\n    }\n    /**\n    @internal\n    */\n    toTree(nodeSet) {\n        return new Buffer(nodeSet).writeElements(this.children, -this.from).finish(this.type, this.to - this.from);\n    }\n}\nclass TreeElement {\n    constructor(tree, from) {\n        this.tree = tree;\n        this.from = from;\n    }\n    get to() { return this.from + this.tree.length; }\n    get type() { return this.tree.type.id; }\n    get children() { return none; }\n    writeTo(buf, offset) {\n        buf.nodes.push(this.tree);\n        buf.content.push(buf.nodes.length - 1, this.from + offset, this.to + offset, -1);\n    }\n    toTree() { return this.tree; }\n}\nfunction elt(type, from, to, children) {\n    return new Element(type, from, to, children);\n}\nconst EmphasisUnderscore = { resolve: \"Emphasis\", mark: \"EmphasisMark\" };\nconst EmphasisAsterisk = { resolve: \"Emphasis\", mark: \"EmphasisMark\" };\nconst LinkStart = {}, ImageStart = {};\nclass InlineDelimiter {\n    constructor(type, from, to, side) {\n        this.type = type;\n        this.from = from;\n        this.to = to;\n        this.side = side;\n    }\n}\nconst Escapable = \"!\\\"#$%&'()*+,-./:;<=>?@[\\\\]^_`{|}~\";\nlet Punctuation = /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\u2010-\\u2027]/;\ntry {\n    Punctuation = new RegExp(\"[\\\\p{S}|\\\\p{P}]\", \"u\");\n}\ncatch (_) { }\nconst DefaultInline = {\n    Escape(cx, next, start) {\n        if (next != 92 /* '\\\\' */ || start == cx.end - 1)\n            return -1;\n        let escaped = cx.char(start + 1);\n        for (let i = 0; i < Escapable.length; i++)\n            if (Escapable.charCodeAt(i) == escaped)\n                return cx.append(elt(Type.Escape, start, start + 2));\n        return -1;\n    },\n    Entity(cx, next, start) {\n        if (next != 38 /* '&' */)\n            return -1;\n        let m = /^(?:#\\d+|#x[a-f\\d]+|\\w+);/i.exec(cx.slice(start + 1, start + 31));\n        return m ? cx.append(elt(Type.Entity, start, start + 1 + m[0].length)) : -1;\n    },\n    InlineCode(cx, next, start) {\n        if (next != 96 /* '`' */ || start && cx.char(start - 1) == 96)\n            return -1;\n        let pos = start + 1;\n        while (pos < cx.end && cx.char(pos) == 96)\n            pos++;\n        let size = pos - start, curSize = 0;\n        for (; pos < cx.end; pos++) {\n            if (cx.char(pos) == 96) {\n                curSize++;\n                if (curSize == size && cx.char(pos + 1) != 96)\n                    return cx.append(elt(Type.InlineCode, start, pos + 1, [\n                        elt(Type.CodeMark, start, start + size),\n                        elt(Type.CodeMark, pos + 1 - size, pos + 1)\n                    ]));\n            }\n            else {\n                curSize = 0;\n            }\n        }\n        return -1;\n    },\n    HTMLTag(cx, next, start) {\n        if (next != 60 /* '<' */ || start == cx.end - 1)\n            return -1;\n        let after = cx.slice(start + 1, cx.end);\n        let url = /^(?:[a-z][-\\w+.]+:[^\\s>]+|[a-z\\d.!#$%&'*+/=?^_`{|}~-]+@[a-z\\d](?:[a-z\\d-]{0,61}[a-z\\d])?(?:\\.[a-z\\d](?:[a-z\\d-]{0,61}[a-z\\d])?)*)>/i.exec(after);\n        if (url) {\n            return cx.append(elt(Type.Autolink, start, start + 1 + url[0].length, [\n                elt(Type.LinkMark, start, start + 1),\n                // url[0] includes the closing bracket, so exclude it from this slice\n                elt(Type.URL, start + 1, start + url[0].length),\n                elt(Type.LinkMark, start + url[0].length, start + 1 + url[0].length)\n            ]));\n        }\n        let comment = /^!--[^>](?:-[^-]|[^-])*?-->/i.exec(after);\n        if (comment)\n            return cx.append(elt(Type.Comment, start, start + 1 + comment[0].length));\n        let procInst = /^\\?[^]*?\\?>/.exec(after);\n        if (procInst)\n            return cx.append(elt(Type.ProcessingInstruction, start, start + 1 + procInst[0].length));\n        let m = /^(?:![A-Z][^]*?>|!\\[CDATA\\[[^]*?\\]\\]>|\\/\\s*[a-zA-Z][\\w-]*\\s*>|\\s*[a-zA-Z][\\w-]*(\\s+[a-zA-Z:_][\\w-.:]*(?:\\s*=\\s*(?:[^\\s\"'=<>`]+|'[^']*'|\"[^\"]*\"))?)*\\s*(\\/\\s*)?>)/.exec(after);\n        if (!m)\n            return -1;\n        return cx.append(elt(Type.HTMLTag, start, start + 1 + m[0].length));\n    },\n    Emphasis(cx, next, start) {\n        if (next != 95 && next != 42)\n            return -1;\n        let pos = start + 1;\n        while (cx.char(pos) == next)\n            pos++;\n        let before = cx.slice(start - 1, start), after = cx.slice(pos, pos + 1);\n        let pBefore = Punctuation.test(before), pAfter = Punctuation.test(after);\n        let sBefore = /\\s|^$/.test(before), sAfter = /\\s|^$/.test(after);\n        let leftFlanking = !sAfter && (!pAfter || sBefore || pBefore);\n        let rightFlanking = !sBefore && (!pBefore || sAfter || pAfter);\n        let canOpen = leftFlanking && (next == 42 || !rightFlanking || pBefore);\n        let canClose = rightFlanking && (next == 42 || !leftFlanking || pAfter);\n        return cx.append(new InlineDelimiter(next == 95 ? EmphasisUnderscore : EmphasisAsterisk, start, pos, (canOpen ? 1 /* Mark.Open */ : 0 /* Mark.None */) | (canClose ? 2 /* Mark.Close */ : 0 /* Mark.None */)));\n    },\n    HardBreak(cx, next, start) {\n        if (next == 92 /* '\\\\' */ && cx.char(start + 1) == 10 /* '\\n' */)\n            return cx.append(elt(Type.HardBreak, start, start + 2));\n        if (next == 32) {\n            let pos = start + 1;\n            while (cx.char(pos) == 32)\n                pos++;\n            if (cx.char(pos) == 10 && pos >= start + 2)\n                return cx.append(elt(Type.HardBreak, start, pos + 1));\n        }\n        return -1;\n    },\n    Link(cx, next, start) {\n        return next == 91 /* '[' */ ? cx.append(new InlineDelimiter(LinkStart, start, start + 1, 1 /* Mark.Open */)) : -1;\n    },\n    Image(cx, next, start) {\n        return next == 33 /* '!' */ && cx.char(start + 1) == 91 /* '[' */\n            ? cx.append(new InlineDelimiter(ImageStart, start, start + 2, 1 /* Mark.Open */)) : -1;\n    },\n    LinkEnd(cx, next, start) {\n        if (next != 93 /* ']' */)\n            return -1;\n        // Scanning back to the next link/image start marker\n        for (let i = cx.parts.length - 1; i >= 0; i--) {\n            let part = cx.parts[i];\n            if (part instanceof InlineDelimiter && (part.type == LinkStart || part.type == ImageStart)) {\n                // If this one has been set invalid (because it would produce\n                // a nested link) or there's no valid link here ignore both.\n                if (!part.side || cx.skipSpace(part.to) == start && !/[(\\[]/.test(cx.slice(start + 1, start + 2))) {\n                    cx.parts[i] = null;\n                    return -1;\n                }\n                // Finish the content and replace the entire range in\n                // this.parts with the link/image node.\n                let content = cx.takeContent(i);\n                let link = cx.parts[i] = finishLink(cx, content, part.type == LinkStart ? Type.Link : Type.Image, part.from, start + 1);\n                // Set any open-link markers before this link to invalid.\n                if (part.type == LinkStart)\n                    for (let j = 0; j < i; j++) {\n                        let p = cx.parts[j];\n                        if (p instanceof InlineDelimiter && p.type == LinkStart)\n                            p.side = 0 /* Mark.None */;\n                    }\n                return link.to;\n            }\n        }\n        return -1;\n    }\n};\nfunction finishLink(cx, content, type, start, startPos) {\n    let { text } = cx, next = cx.char(startPos), endPos = startPos;\n    content.unshift(elt(Type.LinkMark, start, start + (type == Type.Image ? 2 : 1)));\n    content.push(elt(Type.LinkMark, startPos - 1, startPos));\n    if (next == 40 /* '(' */) {\n        let pos = cx.skipSpace(startPos + 1);\n        let dest = parseURL(text, pos - cx.offset, cx.offset), title;\n        if (dest) {\n            pos = cx.skipSpace(dest.to);\n            // The destination and title must be separated by whitespace\n            if (pos != dest.to) {\n                title = parseLinkTitle(text, pos - cx.offset, cx.offset);\n                if (title)\n                    pos = cx.skipSpace(title.to);\n            }\n        }\n        if (cx.char(pos) == 41 /* ')' */) {\n            content.push(elt(Type.LinkMark, startPos, startPos + 1));\n            endPos = pos + 1;\n            if (dest)\n                content.push(dest);\n            if (title)\n                content.push(title);\n            content.push(elt(Type.LinkMark, pos, endPos));\n        }\n    }\n    else if (next == 91 /* '[' */) {\n        let label = parseLinkLabel(text, startPos - cx.offset, cx.offset, false);\n        if (label) {\n            content.push(label);\n            endPos = label.to;\n        }\n    }\n    return elt(type, start, endPos, content);\n}\n// These return `null` when falling off the end of the input, `false`\n// when parsing fails otherwise (for use in the incremental link\n// reference parser).\nfunction parseURL(text, start, offset) {\n    let next = text.charCodeAt(start);\n    if (next == 60 /* '<' */) {\n        for (let pos = start + 1; pos < text.length; pos++) {\n            let ch = text.charCodeAt(pos);\n            if (ch == 62 /* '>' */)\n                return elt(Type.URL, start + offset, pos + 1 + offset);\n            if (ch == 60 || ch == 10 /* '<\\n' */)\n                return false;\n        }\n        return null;\n    }\n    else {\n        let depth = 0, pos = start;\n        for (let escaped = false; pos < text.length; pos++) {\n            let ch = text.charCodeAt(pos);\n            if (space(ch)) {\n                break;\n            }\n            else if (escaped) {\n                escaped = false;\n            }\n            else if (ch == 40 /* '(' */) {\n                depth++;\n            }\n            else if (ch == 41 /* ')' */) {\n                if (!depth)\n                    break;\n                depth--;\n            }\n            else if (ch == 92 /* '\\\\' */) {\n                escaped = true;\n            }\n        }\n        return pos > start ? elt(Type.URL, start + offset, pos + offset) : pos == text.length ? null : false;\n    }\n}\nfunction parseLinkTitle(text, start, offset) {\n    let next = text.charCodeAt(start);\n    if (next != 39 && next != 34 && next != 40 /* '\"\\'(' */)\n        return false;\n    let end = next == 40 ? 41 : next;\n    for (let pos = start + 1, escaped = false; pos < text.length; pos++) {\n        let ch = text.charCodeAt(pos);\n        if (escaped)\n            escaped = false;\n        else if (ch == end)\n            return elt(Type.LinkTitle, start + offset, pos + 1 + offset);\n        else if (ch == 92 /* '\\\\' */)\n            escaped = true;\n    }\n    return null;\n}\nfunction parseLinkLabel(text, start, offset, requireNonWS) {\n    for (let escaped = false, pos = start + 1, end = Math.min(text.length, pos + 999); pos < end; pos++) {\n        let ch = text.charCodeAt(pos);\n        if (escaped)\n            escaped = false;\n        else if (ch == 93 /* ']' */)\n            return requireNonWS ? false : elt(Type.LinkLabel, start + offset, pos + 1 + offset);\n        else {\n            if (requireNonWS && !space(ch))\n                requireNonWS = false;\n            if (ch == 91 /* '[' */)\n                return false;\n            else if (ch == 92 /* '\\\\' */)\n                escaped = true;\n        }\n    }\n    return null;\n}\n/**\nInline parsing functions get access to this context, and use it to\nread the content and emit syntax nodes.\n*/\nclass InlineContext {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The parser that is being used.\n    */\n    parser, \n    /**\n    The text of this inline section.\n    */\n    text, \n    /**\n    The starting offset of the section in the document.\n    */\n    offset) {\n        this.parser = parser;\n        this.text = text;\n        this.offset = offset;\n        /**\n        @internal\n        */\n        this.parts = [];\n    }\n    /**\n    Get the character code at the given (document-relative)\n    position.\n    */\n    char(pos) { return pos >= this.end ? -1 : this.text.charCodeAt(pos - this.offset); }\n    /**\n    The position of the end of this inline section.\n    */\n    get end() { return this.offset + this.text.length; }\n    /**\n    Get a substring of this inline section. Again uses\n    document-relative positions.\n    */\n    slice(from, to) { return this.text.slice(from - this.offset, to - this.offset); }\n    /**\n    @internal\n    */\n    append(elt) {\n        this.parts.push(elt);\n        return elt.to;\n    }\n    /**\n    Add a [delimiter](#DelimiterType) at this given position. `open`\n    and `close` indicate whether this delimiter is opening, closing,\n    or both. Returns the end of the delimiter, for convenient\n    returning from [parse functions](#InlineParser.parse).\n    */\n    addDelimiter(type, from, to, open, close) {\n        return this.append(new InlineDelimiter(type, from, to, (open ? 1 /* Mark.Open */ : 0 /* Mark.None */) | (close ? 2 /* Mark.Close */ : 0 /* Mark.None */)));\n    }\n    /**\n    Returns true when there is an unmatched link or image opening\n    token before the current position.\n    */\n    get hasOpenLink() {\n        for (let i = this.parts.length - 1; i >= 0; i--) {\n            let part = this.parts[i];\n            if (part instanceof InlineDelimiter && (part.type == LinkStart || part.type == ImageStart))\n                return true;\n        }\n        return false;\n    }\n    /**\n    Add an inline element. Returns the end of the element.\n    */\n    addElement(elt) {\n        return this.append(elt);\n    }\n    /**\n    Resolve markers between this.parts.length and from, wrapping matched markers in the\n    appropriate node and updating the content of this.parts. @internal\n    */\n    resolveMarkers(from) {\n        // Scan forward, looking for closing tokens\n        for (let i = from; i < this.parts.length; i++) {\n            let close = this.parts[i];\n            if (!(close instanceof InlineDelimiter && close.type.resolve && (close.side & 2 /* Mark.Close */)))\n                continue;\n            let emp = close.type == EmphasisUnderscore || close.type == EmphasisAsterisk;\n            let closeSize = close.to - close.from;\n            let open, j = i - 1;\n            // Continue scanning for a matching opening token\n            for (; j >= from; j--) {\n                let part = this.parts[j];\n                if (part instanceof InlineDelimiter && (part.side & 1 /* Mark.Open */) && part.type == close.type &&\n                    // Ignore emphasis delimiters where the character count doesn't match\n                    !(emp && ((close.side & 1 /* Mark.Open */) || (part.side & 2 /* Mark.Close */)) &&\n                        (part.to - part.from + closeSize) % 3 == 0 && ((part.to - part.from) % 3 || closeSize % 3))) {\n                    open = part;\n                    break;\n                }\n            }\n            if (!open)\n                continue;\n            let type = close.type.resolve, content = [];\n            let start = open.from, end = close.to;\n            // Emphasis marker effect depends on the character count. Size consumed is minimum of the two\n            // markers.\n            if (emp) {\n                let size = Math.min(2, open.to - open.from, closeSize);\n                start = open.to - size;\n                end = close.from + size;\n                type = size == 1 ? \"Emphasis\" : \"StrongEmphasis\";\n            }\n            // Move the covered region into content, optionally adding marker nodes\n            if (open.type.mark)\n                content.push(this.elt(open.type.mark, start, open.to));\n            for (let k = j + 1; k < i; k++) {\n                if (this.parts[k] instanceof Element)\n                    content.push(this.parts[k]);\n                this.parts[k] = null;\n            }\n            if (close.type.mark)\n                content.push(this.elt(close.type.mark, close.from, end));\n            let element = this.elt(type, start, end, content);\n            // If there are leftover emphasis marker characters, shrink the close/open markers. Otherwise, clear them.\n            this.parts[j] = emp && open.from != start ? new InlineDelimiter(open.type, open.from, start, open.side) : null;\n            let keep = this.parts[i] = emp && close.to != end ? new InlineDelimiter(close.type, end, close.to, close.side) : null;\n            // Insert the new element in this.parts\n            if (keep)\n                this.parts.splice(i, 0, element);\n            else\n                this.parts[i] = element;\n        }\n        // Collect the elements remaining in this.parts into an array.\n        let result = [];\n        for (let i = from; i < this.parts.length; i++) {\n            let part = this.parts[i];\n            if (part instanceof Element)\n                result.push(part);\n        }\n        return result;\n    }\n    /**\n    Find an opening delimiter of the given type. Returns `null` if\n    no delimiter is found, or an index that can be passed to\n    [`takeContent`](#InlineContext.takeContent) otherwise.\n    */\n    findOpeningDelimiter(type) {\n        for (let i = this.parts.length - 1; i >= 0; i--) {\n            let part = this.parts[i];\n            if (part instanceof InlineDelimiter && part.type == type && (part.side & 1 /* Mark.Open */))\n                return i;\n        }\n        return null;\n    }\n    /**\n    Remove all inline elements and delimiters starting from the\n    given index (which you should get from\n    [`findOpeningDelimiter`](#InlineContext.findOpeningDelimiter),\n    resolve delimiters inside of them, and return them as an array\n    of elements.\n    */\n    takeContent(startIndex) {\n        let content = this.resolveMarkers(startIndex);\n        this.parts.length = startIndex;\n        return content;\n    }\n    /**\n    Return the delimiter at the given index. Mostly useful to get\n    additional info out of a delimiter index returned by\n    [`findOpeningDelimiter`](#InlineContext.findOpeningDelimiter).\n    Returns null if there is no delimiter at this index.\n    */\n    getDelimiterAt(index) {\n        let part = this.parts[index];\n        return part instanceof InlineDelimiter ? part : null;\n    }\n    /**\n    Skip space after the given (document) position, returning either\n    the position of the next non-space character or the end of the\n    section.\n    */\n    skipSpace(from) { return skipSpace(this.text, from - this.offset) + this.offset; }\n    elt(type, from, to, children) {\n        if (typeof type == \"string\")\n            return elt(this.parser.getNodeType(type), from, to, children);\n        return new TreeElement(type, from);\n    }\n}\n/**\nThe opening delimiter type used by the standard link parser.\n*/\nInlineContext.linkStart = LinkStart;\n/**\nOpening delimiter type used for standard images.\n*/\nInlineContext.imageStart = ImageStart;\nfunction injectMarks(elements, marks) {\n    if (!marks.length)\n        return elements;\n    if (!elements.length)\n        return marks;\n    let elts = elements.slice(), eI = 0;\n    for (let mark of marks) {\n        while (eI < elts.length && elts[eI].to < mark.to)\n            eI++;\n        if (eI < elts.length && elts[eI].from < mark.from) {\n            let e = elts[eI];\n            if (e instanceof Element)\n                elts[eI] = new Element(e.type, e.from, e.to, injectMarks(e.children, [mark]));\n        }\n        else {\n            elts.splice(eI++, 0, mark);\n        }\n    }\n    return elts;\n}\n// These are blocks that can span blank lines, and should thus only be\n// reused if their next sibling is also being reused.\nconst NotLast = [Type.CodeBlock, Type.ListItem, Type.OrderedList, Type.BulletList];\nclass FragmentCursor {\n    constructor(fragments, input) {\n        this.fragments = fragments;\n        this.input = input;\n        // Index into fragment array\n        this.i = 0;\n        // Active fragment\n        this.fragment = null;\n        this.fragmentEnd = -1;\n        // Cursor into the current fragment, if any. When `moveTo` returns\n        // true, this points at the first block after `pos`.\n        this.cursor = null;\n        if (fragments.length)\n            this.fragment = fragments[this.i++];\n    }\n    nextFragment() {\n        this.fragment = this.i < this.fragments.length ? this.fragments[this.i++] : null;\n        this.cursor = null;\n        this.fragmentEnd = -1;\n    }\n    moveTo(pos, lineStart) {\n        while (this.fragment && this.fragment.to <= pos)\n            this.nextFragment();\n        if (!this.fragment || this.fragment.from > (pos ? pos - 1 : 0))\n            return false;\n        if (this.fragmentEnd < 0) {\n            let end = this.fragment.to;\n            while (end > 0 && this.input.read(end - 1, end) != \"\\n\")\n                end--;\n            this.fragmentEnd = end ? end - 1 : 0;\n        }\n        let c = this.cursor;\n        if (!c) {\n            c = this.cursor = this.fragment.tree.cursor();\n            c.firstChild();\n        }\n        let rPos = pos + this.fragment.offset;\n        while (c.to <= rPos)\n            if (!c.parent())\n                return false;\n        for (;;) {\n            if (c.from >= rPos)\n                return this.fragment.from <= lineStart;\n            if (!c.childAfter(rPos))\n                return false;\n        }\n    }\n    matches(hash) {\n        let tree = this.cursor.tree;\n        return tree && tree.prop(NodeProp.contextHash) == hash;\n    }\n    takeNodes(cx) {\n        let cur = this.cursor, off = this.fragment.offset, fragEnd = this.fragmentEnd - (this.fragment.openEnd ? 1 : 0);\n        let start = cx.absoluteLineStart, end = start, blockI = cx.block.children.length;\n        let prevEnd = end, prevI = blockI;\n        for (;;) {\n            if (cur.to - off > fragEnd) {\n                if (cur.type.isAnonymous && cur.firstChild())\n                    continue;\n                break;\n            }\n            let pos = toRelative(cur.from - off, cx.ranges);\n            if (cur.to - off <= cx.ranges[cx.rangeI].to) { // Fits in current range\n                cx.addNode(cur.tree, pos);\n            }\n            else {\n                let dummy = new Tree(cx.parser.nodeSet.types[Type.Paragraph], [], [], 0, cx.block.hashProp);\n                cx.reusePlaceholders.set(dummy, cur.tree);\n                cx.addNode(dummy, pos);\n            }\n            // Taken content must always end in a block, because incremental\n            // parsing happens on block boundaries. Never stop directly\n            // after an indented code block, since those can continue after\n            // any number of blank lines.\n            if (cur.type.is(\"Block\")) {\n                if (NotLast.indexOf(cur.type.id) < 0) {\n                    end = cur.to - off;\n                    blockI = cx.block.children.length;\n                }\n                else {\n                    end = prevEnd;\n                    blockI = prevI;\n                    prevEnd = cur.to - off;\n                    prevI = cx.block.children.length;\n                }\n            }\n            if (!cur.nextSibling())\n                break;\n        }\n        while (cx.block.children.length > blockI) {\n            cx.block.children.pop();\n            cx.block.positions.pop();\n        }\n        return end - start;\n    }\n}\n// Convert an input-stream-relative position to a\n// Markdown-doc-relative position by subtracting the size of all input\n// gaps before `abs`.\nfunction toRelative(abs, ranges) {\n    let pos = abs;\n    for (let i = 1; i < ranges.length; i++) {\n        let gapFrom = ranges[i - 1].to, gapTo = ranges[i].from;\n        if (gapFrom < abs)\n            pos -= gapTo - gapFrom;\n    }\n    return pos;\n}\nconst markdownHighlighting = styleTags({\n    \"Blockquote/...\": tags.quote,\n    HorizontalRule: tags.contentSeparator,\n    \"ATXHeading1/... SetextHeading1/...\": tags.heading1,\n    \"ATXHeading2/... SetextHeading2/...\": tags.heading2,\n    \"ATXHeading3/...\": tags.heading3,\n    \"ATXHeading4/...\": tags.heading4,\n    \"ATXHeading5/...\": tags.heading5,\n    \"ATXHeading6/...\": tags.heading6,\n    \"Comment CommentBlock\": tags.comment,\n    Escape: tags.escape,\n    Entity: tags.character,\n    \"Emphasis/...\": tags.emphasis,\n    \"StrongEmphasis/...\": tags.strong,\n    \"Link/... Image/...\": tags.link,\n    \"OrderedList/... BulletList/...\": tags.list,\n    \"BlockQuote/...\": tags.quote,\n    \"InlineCode CodeText\": tags.monospace,\n    \"URL Autolink\": tags.url,\n    \"HeaderMark HardBreak QuoteMark ListMark LinkMark EmphasisMark CodeMark\": tags.processingInstruction,\n    \"CodeInfo LinkLabel\": tags.labelName,\n    LinkTitle: tags.string,\n    Paragraph: tags.content\n});\n/**\nThe default CommonMark parser.\n*/\nconst parser = new MarkdownParser(new NodeSet(nodeTypes).extend(markdownHighlighting), Object.keys(DefaultBlockParsers).map(n => DefaultBlockParsers[n]), Object.keys(DefaultBlockParsers).map(n => DefaultLeafBlocks[n]), Object.keys(DefaultBlockParsers), DefaultEndLeaf, DefaultSkipMarkup, Object.keys(DefaultInline).map(n => DefaultInline[n]), Object.keys(DefaultInline), []);\n\nfunction leftOverSpace(node, from, to) {\n    let ranges = [];\n    for (let n = node.firstChild, pos = from;; n = n.nextSibling) {\n        let nextPos = n ? n.from : to;\n        if (nextPos > pos)\n            ranges.push({ from: pos, to: nextPos });\n        if (!n)\n            break;\n        pos = n.to;\n    }\n    return ranges;\n}\n/**\nCreate a Markdown extension to enable nested parsing on code\nblocks and/or embedded HTML.\n*/\nfunction parseCode(config) {\n    let { codeParser, htmlParser } = config;\n    let wrap = parseMixed((node, input) => {\n        let id = node.type.id;\n        if (codeParser && (id == Type.CodeBlock || id == Type.FencedCode)) {\n            let info = \"\";\n            if (id == Type.FencedCode) {\n                let infoNode = node.node.getChild(Type.CodeInfo);\n                if (infoNode)\n                    info = input.read(infoNode.from, infoNode.to);\n            }\n            let parser = codeParser(info);\n            if (parser)\n                return { parser, overlay: node => node.type.id == Type.CodeText };\n        }\n        else if (htmlParser && (id == Type.HTMLBlock || id == Type.HTMLTag || id == Type.CommentBlock)) {\n            return { parser: htmlParser, overlay: leftOverSpace(node.node, node.from, node.to) };\n        }\n        return null;\n    });\n    return { wrap };\n}\n\nconst StrikethroughDelim = { resolve: \"Strikethrough\", mark: \"StrikethroughMark\" };\n/**\nAn extension that implements\n[GFM-style](https://github.github.com/gfm/#strikethrough-extension-)\nStrikethrough syntax using `~~` delimiters.\n*/\nconst Strikethrough = {\n    defineNodes: [{\n            name: \"Strikethrough\",\n            style: { \"Strikethrough/...\": tags.strikethrough }\n        }, {\n            name: \"StrikethroughMark\",\n            style: tags.processingInstruction\n        }],\n    parseInline: [{\n            name: \"Strikethrough\",\n            parse(cx, next, pos) {\n                if (next != 126 /* '~' */ || cx.char(pos + 1) != 126 || cx.char(pos + 2) == 126)\n                    return -1;\n                let before = cx.slice(pos - 1, pos), after = cx.slice(pos + 2, pos + 3);\n                let sBefore = /\\s|^$/.test(before), sAfter = /\\s|^$/.test(after);\n                let pBefore = Punctuation.test(before), pAfter = Punctuation.test(after);\n                return cx.addDelimiter(StrikethroughDelim, pos, pos + 2, !sAfter && (!pAfter || sBefore || pBefore), !sBefore && (!pBefore || sAfter || pAfter));\n            },\n            after: \"Emphasis\"\n        }]\n};\n// Parse a line as a table row and return the row count. When `elts`\n// is given, push syntax elements for the content onto it.\nfunction parseRow(cx, line, startI = 0, elts, offset = 0) {\n    let count = 0, first = true, cellStart = -1, cellEnd = -1, esc = false;\n    let parseCell = () => {\n        elts.push(cx.elt(\"TableCell\", offset + cellStart, offset + cellEnd, cx.parser.parseInline(line.slice(cellStart, cellEnd), offset + cellStart)));\n    };\n    for (let i = startI; i < line.length; i++) {\n        let next = line.charCodeAt(i);\n        if (next == 124 /* '|' */ && !esc) {\n            if (!first || cellStart > -1)\n                count++;\n            first = false;\n            if (elts) {\n                if (cellStart > -1)\n                    parseCell();\n                elts.push(cx.elt(\"TableDelimiter\", i + offset, i + offset + 1));\n            }\n            cellStart = cellEnd = -1;\n        }\n        else if (esc || next != 32 && next != 9) {\n            if (cellStart < 0)\n                cellStart = i;\n            cellEnd = i + 1;\n        }\n        esc = !esc && next == 92;\n    }\n    if (cellStart > -1) {\n        count++;\n        if (elts)\n            parseCell();\n    }\n    return count;\n}\nfunction hasPipe(str, start) {\n    for (let i = start; i < str.length; i++) {\n        let next = str.charCodeAt(i);\n        if (next == 124 /* '|' */)\n            return true;\n        if (next == 92 /* '\\\\' */)\n            i++;\n    }\n    return false;\n}\nconst delimiterLine = /^\\|?(\\s*:?-+:?\\s*\\|)+(\\s*:?-+:?\\s*)?$/;\nclass TableParser {\n    constructor() {\n        // Null means we haven't seen the second line yet, false means this\n        // isn't a table, and an array means this is a table and we've\n        // parsed the given rows so far.\n        this.rows = null;\n    }\n    nextLine(cx, line, leaf) {\n        if (this.rows == null) { // Second line\n            this.rows = false;\n            let lineText;\n            if ((line.next == 45 || line.next == 58 || line.next == 124 /* '-:|' */) &&\n                delimiterLine.test(lineText = line.text.slice(line.pos))) {\n                let firstRow = [], firstCount = parseRow(cx, leaf.content, 0, firstRow, leaf.start);\n                if (firstCount == parseRow(cx, lineText, line.pos))\n                    this.rows = [cx.elt(\"TableHeader\", leaf.start, leaf.start + leaf.content.length, firstRow),\n                        cx.elt(\"TableDelimiter\", cx.lineStart + line.pos, cx.lineStart + line.text.length)];\n            }\n        }\n        else if (this.rows) { // Line after the second\n            let content = [];\n            parseRow(cx, line.text, line.pos, content, cx.lineStart);\n            this.rows.push(cx.elt(\"TableRow\", cx.lineStart + line.pos, cx.lineStart + line.text.length, content));\n        }\n        return false;\n    }\n    finish(cx, leaf) {\n        if (!this.rows)\n            return false;\n        cx.addLeafElement(leaf, cx.elt(\"Table\", leaf.start, leaf.start + leaf.content.length, this.rows));\n        return true;\n    }\n}\n/**\nThis extension provides\n[GFM-style](https://github.github.com/gfm/#tables-extension-)\ntables, using syntax like this:\n\n```\n| head 1 | head 2 |\n| ---    | ---    |\n| cell 1 | cell 2 |\n```\n*/\nconst Table = {\n    defineNodes: [\n        { name: \"Table\", block: true },\n        { name: \"TableHeader\", style: { \"TableHeader/...\": tags.heading } },\n        \"TableRow\",\n        { name: \"TableCell\", style: tags.content },\n        { name: \"TableDelimiter\", style: tags.processingInstruction },\n    ],\n    parseBlock: [{\n            name: \"Table\",\n            leaf(_, leaf) { return hasPipe(leaf.content, 0) ? new TableParser : null; },\n            endLeaf(cx, line, leaf) {\n                if (leaf.parsers.some(p => p instanceof TableParser) || !hasPipe(line.text, line.basePos))\n                    return false;\n                let next = cx.peekLine();\n                return delimiterLine.test(next) && parseRow(cx, line.text, line.basePos) == parseRow(cx, next, line.basePos);\n            },\n            before: \"SetextHeading\"\n        }]\n};\nclass TaskParser {\n    nextLine() { return false; }\n    finish(cx, leaf) {\n        cx.addLeafElement(leaf, cx.elt(\"Task\", leaf.start, leaf.start + leaf.content.length, [\n            cx.elt(\"TaskMarker\", leaf.start, leaf.start + 3),\n            ...cx.parser.parseInline(leaf.content.slice(3), leaf.start + 3)\n        ]));\n        return true;\n    }\n}\n/**\nExtension providing\n[GFM-style](https://github.github.com/gfm/#task-list-items-extension-)\ntask list items, where list items can be prefixed with `[ ]` or\n`[x]` to add a checkbox.\n*/\nconst TaskList = {\n    defineNodes: [\n        { name: \"Task\", block: true, style: tags.list },\n        { name: \"TaskMarker\", style: tags.atom }\n    ],\n    parseBlock: [{\n            name: \"TaskList\",\n            leaf(cx, leaf) {\n                return /^\\[[ xX]\\][ \\t]/.test(leaf.content) && cx.parentType().name == \"ListItem\" ? new TaskParser : null;\n            },\n            after: \"SetextHeading\"\n        }]\n};\nconst autolinkRE = /(www\\.)|(https?:\\/\\/)|([\\w.+-]{1,100}@)|(mailto:|xmpp:)/gy;\nconst urlRE = /[\\w-]+(\\.[\\w-]+)+(\\/[^\\s<]*)?/gy;\nconst lastTwoDomainWords = /[\\w-]+\\.[\\w-]+($|\\/)/;\nconst emailRE = /[\\w.+-]+@[\\w-]+(\\.[\\w.-]+)+/gy;\nconst xmppResourceRE = /\\/[a-zA-Z\\d@.]+/gy;\nfunction count(str, from, to, ch) {\n    let result = 0;\n    for (let i = from; i < to; i++)\n        if (str[i] == ch)\n            result++;\n    return result;\n}\nfunction autolinkURLEnd(text, from) {\n    urlRE.lastIndex = from;\n    let m = urlRE.exec(text);\n    if (!m || lastTwoDomainWords.exec(m[0])[0].indexOf(\"_\") > -1)\n        return -1;\n    let end = from + m[0].length;\n    for (;;) {\n        let last = text[end - 1], m;\n        if (/[?!.,:*_~]/.test(last) ||\n            last == \")\" && count(text, from, end, \")\") > count(text, from, end, \"(\"))\n            end--;\n        else if (last == \";\" && (m = /&(?:#\\d+|#x[a-f\\d]+|\\w+);$/.exec(text.slice(from, end))))\n            end = from + m.index;\n        else\n            break;\n    }\n    return end;\n}\nfunction autolinkEmailEnd(text, from) {\n    emailRE.lastIndex = from;\n    let m = emailRE.exec(text);\n    if (!m)\n        return -1;\n    let last = m[0][m[0].length - 1];\n    return last == \"_\" || last == \"-\" ? -1 : from + m[0].length - (last == \".\" ? 1 : 0);\n}\n/**\nExtension that implements autolinking for\n`www.`/`http://`/`https://`/`mailto:`/`xmpp:` URLs and email\naddresses.\n*/\nconst Autolink = {\n    parseInline: [{\n            name: \"Autolink\",\n            parse(cx, next, absPos) {\n                let pos = absPos - cx.offset;\n                if (pos && /\\w/.test(cx.text[pos - 1]))\n                    return -1;\n                autolinkRE.lastIndex = pos;\n                let m = autolinkRE.exec(cx.text), end = -1;\n                if (!m)\n                    return -1;\n                if (m[1] || m[2]) { // www., http://\n                    end = autolinkURLEnd(cx.text, pos + m[0].length);\n                    if (end > -1 && cx.hasOpenLink) {\n                        let noBracket = /([^\\[\\]]|\\[[^\\]]*\\])*/.exec(cx.text.slice(pos, end));\n                        end = pos + noBracket[0].length;\n                    }\n                }\n                else if (m[3]) { // email address\n                    end = autolinkEmailEnd(cx.text, pos);\n                }\n                else { // mailto:/xmpp:\n                    end = autolinkEmailEnd(cx.text, pos + m[0].length);\n                    if (end > -1 && m[0] == \"xmpp:\") {\n                        xmppResourceRE.lastIndex = end;\n                        m = xmppResourceRE.exec(cx.text);\n                        if (m)\n                            end = m.index + m[0].length;\n                    }\n                }\n                if (end < 0)\n                    return -1;\n                cx.addElement(cx.elt(\"URL\", absPos, end + cx.offset));\n                return end + cx.offset;\n            }\n        }]\n};\n/**\nExtension bundle containing [`Table`](#Table),\n[`TaskList`](#TaskList), [`Strikethrough`](#Strikethrough), and\n[`Autolink`](#Autolink).\n*/\nconst GFM = [Table, TaskList, Strikethrough, Autolink];\nfunction parseSubSuper(ch, node, mark) {\n    return (cx, next, pos) => {\n        if (next != ch || cx.char(pos + 1) == ch)\n            return -1;\n        let elts = [cx.elt(mark, pos, pos + 1)];\n        for (let i = pos + 1; i < cx.end; i++) {\n            let next = cx.char(i);\n            if (next == ch)\n                return cx.addElement(cx.elt(node, pos, i + 1, elts.concat(cx.elt(mark, i, i + 1))));\n            if (next == 92 /* '\\\\' */)\n                elts.push(cx.elt(\"Escape\", i, i++ + 2));\n            if (space(next))\n                break;\n        }\n        return -1;\n    };\n}\n/**\nExtension providing\n[Pandoc-style](https://pandoc.org/MANUAL.html#superscripts-and-subscripts)\nsuperscript using `^` markers.\n*/\nconst Superscript = {\n    defineNodes: [\n        { name: \"Superscript\", style: tags.special(tags.content) },\n        { name: \"SuperscriptMark\", style: tags.processingInstruction }\n    ],\n    parseInline: [{\n            name: \"Superscript\",\n            parse: parseSubSuper(94 /* '^' */, \"Superscript\", \"SuperscriptMark\")\n        }]\n};\n/**\nExtension providing\n[Pandoc-style](https://pandoc.org/MANUAL.html#superscripts-and-subscripts)\nsubscript using `~` markers.\n*/\nconst Subscript = {\n    defineNodes: [\n        { name: \"Subscript\", style: tags.special(tags.content) },\n        { name: \"SubscriptMark\", style: tags.processingInstruction }\n    ],\n    parseInline: [{\n            name: \"Subscript\",\n            parse: parseSubSuper(126 /* '~' */, \"Subscript\", \"SubscriptMark\")\n        }]\n};\n/**\nExtension that parses two colons with only letters, underscores,\nand numbers between them as `Emoji` nodes.\n*/\nconst Emoji = {\n    defineNodes: [{ name: \"Emoji\", style: tags.character }],\n    parseInline: [{\n            name: \"Emoji\",\n            parse(cx, next, pos) {\n                let match;\n                if (next != 58 /* ':' */ || !(match = /^[a-zA-Z_0-9]+:/.exec(cx.slice(pos + 1, cx.end))))\n                    return -1;\n                return cx.addElement(cx.elt(\"Emoji\", pos, pos + 1 + match[0].length));\n            }\n        }]\n};\n\nexport { Autolink, BlockContext, Element, Emoji, GFM, InlineContext, LeafBlock, Line, MarkdownParser, Strikethrough, Subscript, Superscript, Table, TaskList, parseCode, parser };\n","import { Parser, NodeProp, NodeSet, NodeType, DefaultBufferLength, Tree, IterMode } from '@lezer/common';\n\n/**\nA parse stack. These are used internally by the parser to track\nparsing progress. They also provide some properties and methods\nthat external code such as a tokenizer can use to get information\nabout the parse state.\n*/\nclass Stack {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The parse that this stack is part of @internal\n    */\n    p, \n    /**\n    Holds state, input pos, buffer index triplets for all but the\n    top state @internal\n    */\n    stack, \n    /**\n    The current parse state @internal\n    */\n    state, \n    // The position at which the next reduce should take place. This\n    // can be less than `this.pos` when skipped expressions have been\n    // added to the stack (which should be moved outside of the next\n    // reduction)\n    /**\n    @internal\n    */\n    reducePos, \n    /**\n    The input position up to which this stack has parsed.\n    */\n    pos, \n    /**\n    The dynamic score of the stack, including dynamic precedence\n    and error-recovery penalties\n    @internal\n    */\n    score, \n    // The output buffer. Holds (type, start, end, size) quads\n    // representing nodes created by the parser, where `size` is\n    // amount of buffer array entries covered by this node.\n    /**\n    @internal\n    */\n    buffer, \n    // The base offset of the buffer. When stacks are split, the split\n    // instance shared the buffer history with its parent up to\n    // `bufferBase`, which is the absolute offset (including the\n    // offset of previous splits) into the buffer at which this stack\n    // starts writing.\n    /**\n    @internal\n    */\n    bufferBase, \n    /**\n    @internal\n    */\n    curContext, \n    /**\n    @internal\n    */\n    lookAhead = 0, \n    // A parent stack from which this was split off, if any. This is\n    // set up so that it always points to a stack that has some\n    // additional buffer content, never to a stack with an equal\n    // `bufferBase`.\n    /**\n    @internal\n    */\n    parent) {\n        this.p = p;\n        this.stack = stack;\n        this.state = state;\n        this.reducePos = reducePos;\n        this.pos = pos;\n        this.score = score;\n        this.buffer = buffer;\n        this.bufferBase = bufferBase;\n        this.curContext = curContext;\n        this.lookAhead = lookAhead;\n        this.parent = parent;\n    }\n    /**\n    @internal\n    */\n    toString() {\n        return `[${this.stack.filter((_, i) => i % 3 == 0).concat(this.state)}]@${this.pos}${this.score ? \"!\" + this.score : \"\"}`;\n    }\n    // Start an empty stack\n    /**\n    @internal\n    */\n    static start(p, state, pos = 0) {\n        let cx = p.parser.context;\n        return new Stack(p, [], state, pos, pos, 0, [], 0, cx ? new StackContext(cx, cx.start) : null, 0, null);\n    }\n    /**\n    The stack's current [context](#lr.ContextTracker) value, if\n    any. Its type will depend on the context tracker's type\n    parameter, or it will be `null` if there is no context\n    tracker.\n    */\n    get context() { return this.curContext ? this.curContext.context : null; }\n    // Push a state onto the stack, tracking its start position as well\n    // as the buffer base at that point.\n    /**\n    @internal\n    */\n    pushState(state, start) {\n        this.stack.push(this.state, start, this.bufferBase + this.buffer.length);\n        this.state = state;\n    }\n    // Apply a reduce action\n    /**\n    @internal\n    */\n    reduce(action) {\n        var _a;\n        let depth = action >> 19 /* Action.ReduceDepthShift */, type = action & 65535 /* Action.ValueMask */;\n        let { parser } = this.p;\n        let lookaheadRecord = this.reducePos < this.pos - 25 /* Lookahead.Margin */ && this.setLookAhead(this.pos);\n        let dPrec = parser.dynamicPrecedence(type);\n        if (dPrec)\n            this.score += dPrec;\n        if (depth == 0) {\n            this.pushState(parser.getGoto(this.state, type, true), this.reducePos);\n            // Zero-depth reductions are a special case—they add stuff to\n            // the stack without popping anything off.\n            if (type < parser.minRepeatTerm)\n                this.storeNode(type, this.reducePos, this.reducePos, lookaheadRecord ? 8 : 4, true);\n            this.reduceContext(type, this.reducePos);\n            return;\n        }\n        // Find the base index into `this.stack`, content after which will\n        // be dropped. Note that with `StayFlag` reductions we need to\n        // consume two extra frames (the dummy parent node for the skipped\n        // expression and the state that we'll be staying in, which should\n        // be moved to `this.state`).\n        let base = this.stack.length - ((depth - 1) * 3) - (action & 262144 /* Action.StayFlag */ ? 6 : 0);\n        let start = base ? this.stack[base - 2] : this.p.ranges[0].from, size = this.reducePos - start;\n        // This is a kludge to try and detect overly deep left-associative\n        // trees, which will not increase the parse stack depth and thus\n        // won't be caught by the regular stack-depth limit check.\n        if (size >= 2000 /* Recover.MinBigReduction */ && !((_a = this.p.parser.nodeSet.types[type]) === null || _a === void 0 ? void 0 : _a.isAnonymous)) {\n            if (start == this.p.lastBigReductionStart) {\n                this.p.bigReductionCount++;\n                this.p.lastBigReductionSize = size;\n            }\n            else if (this.p.lastBigReductionSize < size) {\n                this.p.bigReductionCount = 1;\n                this.p.lastBigReductionStart = start;\n                this.p.lastBigReductionSize = size;\n            }\n        }\n        let bufferBase = base ? this.stack[base - 1] : 0, count = this.bufferBase + this.buffer.length - bufferBase;\n        // Store normal terms or `R -> R R` repeat reductions\n        if (type < parser.minRepeatTerm || (action & 131072 /* Action.RepeatFlag */)) {\n            let pos = parser.stateFlag(this.state, 1 /* StateFlag.Skipped */) ? this.pos : this.reducePos;\n            this.storeNode(type, start, pos, count + 4, true);\n        }\n        if (action & 262144 /* Action.StayFlag */) {\n            this.state = this.stack[base];\n        }\n        else {\n            let baseStateID = this.stack[base - 3];\n            this.state = parser.getGoto(baseStateID, type, true);\n        }\n        while (this.stack.length > base)\n            this.stack.pop();\n        this.reduceContext(type, start);\n    }\n    // Shift a value into the buffer\n    /**\n    @internal\n    */\n    storeNode(term, start, end, size = 4, mustSink = false) {\n        if (term == 0 /* Term.Err */ &&\n            (!this.stack.length || this.stack[this.stack.length - 1] < this.buffer.length + this.bufferBase)) {\n            // Try to omit/merge adjacent error nodes\n            let cur = this, top = this.buffer.length;\n            if (top == 0 && cur.parent) {\n                top = cur.bufferBase - cur.parent.bufferBase;\n                cur = cur.parent;\n            }\n            if (top > 0 && cur.buffer[top - 4] == 0 /* Term.Err */ && cur.buffer[top - 1] > -1) {\n                if (start == end)\n                    return;\n                if (cur.buffer[top - 2] >= start) {\n                    cur.buffer[top - 2] = end;\n                    return;\n                }\n            }\n        }\n        if (!mustSink || this.pos == end) { // Simple case, just append\n            this.buffer.push(term, start, end, size);\n        }\n        else { // There may be skipped nodes that have to be moved forward\n            let index = this.buffer.length;\n            if (index > 0 && (this.buffer[index - 4] != 0 /* Term.Err */ || this.buffer[index - 1] < 0)) {\n                let mustMove = false;\n                for (let scan = index; scan > 0 && this.buffer[scan - 2] > end; scan -= 4) {\n                    if (this.buffer[scan - 1] >= 0) {\n                        mustMove = true;\n                        break;\n                    }\n                }\n                if (mustMove)\n                    while (index > 0 && this.buffer[index - 2] > end) {\n                        // Move this record forward\n                        this.buffer[index] = this.buffer[index - 4];\n                        this.buffer[index + 1] = this.buffer[index - 3];\n                        this.buffer[index + 2] = this.buffer[index - 2];\n                        this.buffer[index + 3] = this.buffer[index - 1];\n                        index -= 4;\n                        if (size > 4)\n                            size -= 4;\n                    }\n            }\n            this.buffer[index] = term;\n            this.buffer[index + 1] = start;\n            this.buffer[index + 2] = end;\n            this.buffer[index + 3] = size;\n        }\n    }\n    // Apply a shift action\n    /**\n    @internal\n    */\n    shift(action, type, start, end) {\n        if (action & 131072 /* Action.GotoFlag */) {\n            this.pushState(action & 65535 /* Action.ValueMask */, this.pos);\n        }\n        else if ((action & 262144 /* Action.StayFlag */) == 0) { // Regular shift\n            let nextState = action, { parser } = this.p;\n            if (end > this.pos || type <= parser.maxNode) {\n                this.pos = end;\n                if (!parser.stateFlag(nextState, 1 /* StateFlag.Skipped */))\n                    this.reducePos = end;\n            }\n            this.pushState(nextState, start);\n            this.shiftContext(type, start);\n            if (type <= parser.maxNode)\n                this.buffer.push(type, start, end, 4);\n        }\n        else { // Shift-and-stay, which means this is a skipped token\n            this.pos = end;\n            this.shiftContext(type, start);\n            if (type <= this.p.parser.maxNode)\n                this.buffer.push(type, start, end, 4);\n        }\n    }\n    // Apply an action\n    /**\n    @internal\n    */\n    apply(action, next, nextStart, nextEnd) {\n        if (action & 65536 /* Action.ReduceFlag */)\n            this.reduce(action);\n        else\n            this.shift(action, next, nextStart, nextEnd);\n    }\n    // Add a prebuilt (reused) node into the buffer.\n    /**\n    @internal\n    */\n    useNode(value, next) {\n        let index = this.p.reused.length - 1;\n        if (index < 0 || this.p.reused[index] != value) {\n            this.p.reused.push(value);\n            index++;\n        }\n        let start = this.pos;\n        this.reducePos = this.pos = start + value.length;\n        this.pushState(next, start);\n        this.buffer.push(index, start, this.reducePos, -1 /* size == -1 means this is a reused value */);\n        if (this.curContext)\n            this.updateContext(this.curContext.tracker.reuse(this.curContext.context, value, this, this.p.stream.reset(this.pos - value.length)));\n    }\n    // Split the stack. Due to the buffer sharing and the fact\n    // that `this.stack` tends to stay quite shallow, this isn't very\n    // expensive.\n    /**\n    @internal\n    */\n    split() {\n        let parent = this;\n        let off = parent.buffer.length;\n        // Because the top of the buffer (after this.pos) may be mutated\n        // to reorder reductions and skipped tokens, and shared buffers\n        // should be immutable, this copies any outstanding skipped tokens\n        // to the new buffer, and puts the base pointer before them.\n        while (off > 0 && parent.buffer[off - 2] > parent.reducePos)\n            off -= 4;\n        let buffer = parent.buffer.slice(off), base = parent.bufferBase + off;\n        // Make sure parent points to an actual parent with content, if there is such a parent.\n        while (parent && base == parent.bufferBase)\n            parent = parent.parent;\n        return new Stack(this.p, this.stack.slice(), this.state, this.reducePos, this.pos, this.score, buffer, base, this.curContext, this.lookAhead, parent);\n    }\n    // Try to recover from an error by 'deleting' (ignoring) one token.\n    /**\n    @internal\n    */\n    recoverByDelete(next, nextEnd) {\n        let isNode = next <= this.p.parser.maxNode;\n        if (isNode)\n            this.storeNode(next, this.pos, nextEnd, 4);\n        this.storeNode(0 /* Term.Err */, this.pos, nextEnd, isNode ? 8 : 4);\n        this.pos = this.reducePos = nextEnd;\n        this.score -= 190 /* Recover.Delete */;\n    }\n    /**\n    Check if the given term would be able to be shifted (optionally\n    after some reductions) on this stack. This can be useful for\n    external tokenizers that want to make sure they only provide a\n    given token when it applies.\n    */\n    canShift(term) {\n        for (let sim = new SimulatedStack(this);;) {\n            let action = this.p.parser.stateSlot(sim.state, 4 /* ParseState.DefaultReduce */) || this.p.parser.hasAction(sim.state, term);\n            if (action == 0)\n                return false;\n            if ((action & 65536 /* Action.ReduceFlag */) == 0)\n                return true;\n            sim.reduce(action);\n        }\n    }\n    // Apply up to Recover.MaxNext recovery actions that conceptually\n    // inserts some missing token or rule.\n    /**\n    @internal\n    */\n    recoverByInsert(next) {\n        if (this.stack.length >= 300 /* Recover.MaxInsertStackDepth */)\n            return [];\n        let nextStates = this.p.parser.nextStates(this.state);\n        if (nextStates.length > 4 /* Recover.MaxNext */ << 1 || this.stack.length >= 120 /* Recover.DampenInsertStackDepth */) {\n            let best = [];\n            for (let i = 0, s; i < nextStates.length; i += 2) {\n                if ((s = nextStates[i + 1]) != this.state && this.p.parser.hasAction(s, next))\n                    best.push(nextStates[i], s);\n            }\n            if (this.stack.length < 120 /* Recover.DampenInsertStackDepth */)\n                for (let i = 0; best.length < 4 /* Recover.MaxNext */ << 1 && i < nextStates.length; i += 2) {\n                    let s = nextStates[i + 1];\n                    if (!best.some((v, i) => (i & 1) && v == s))\n                        best.push(nextStates[i], s);\n                }\n            nextStates = best;\n        }\n        let result = [];\n        for (let i = 0; i < nextStates.length && result.length < 4 /* Recover.MaxNext */; i += 2) {\n            let s = nextStates[i + 1];\n            if (s == this.state)\n                continue;\n            let stack = this.split();\n            stack.pushState(s, this.pos);\n            stack.storeNode(0 /* Term.Err */, stack.pos, stack.pos, 4, true);\n            stack.shiftContext(nextStates[i], this.pos);\n            stack.reducePos = this.pos;\n            stack.score -= 200 /* Recover.Insert */;\n            result.push(stack);\n        }\n        return result;\n    }\n    // Force a reduce, if possible. Return false if that can't\n    // be done.\n    /**\n    @internal\n    */\n    forceReduce() {\n        let { parser } = this.p;\n        let reduce = parser.stateSlot(this.state, 5 /* ParseState.ForcedReduce */);\n        if ((reduce & 65536 /* Action.ReduceFlag */) == 0)\n            return false;\n        if (!parser.validAction(this.state, reduce)) {\n            let depth = reduce >> 19 /* Action.ReduceDepthShift */, term = reduce & 65535 /* Action.ValueMask */;\n            let target = this.stack.length - depth * 3;\n            if (target < 0 || parser.getGoto(this.stack[target], term, false) < 0) {\n                let backup = this.findForcedReduction();\n                if (backup == null)\n                    return false;\n                reduce = backup;\n            }\n            this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n            this.score -= 100 /* Recover.Reduce */;\n        }\n        this.reducePos = this.pos;\n        this.reduce(reduce);\n        return true;\n    }\n    /**\n    Try to scan through the automaton to find some kind of reduction\n    that can be applied. Used when the regular ForcedReduce field\n    isn't a valid action. @internal\n    */\n    findForcedReduction() {\n        let { parser } = this.p, seen = [];\n        let explore = (state, depth) => {\n            if (seen.includes(state))\n                return;\n            seen.push(state);\n            return parser.allActions(state, (action) => {\n                if (action & (262144 /* Action.StayFlag */ | 131072 /* Action.GotoFlag */)) ;\n                else if (action & 65536 /* Action.ReduceFlag */) {\n                    let rDepth = (action >> 19 /* Action.ReduceDepthShift */) - depth;\n                    if (rDepth > 1) {\n                        let term = action & 65535 /* Action.ValueMask */, target = this.stack.length - rDepth * 3;\n                        if (target >= 0 && parser.getGoto(this.stack[target], term, false) >= 0)\n                            return (rDepth << 19 /* Action.ReduceDepthShift */) | 65536 /* Action.ReduceFlag */ | term;\n                    }\n                }\n                else {\n                    let found = explore(action, depth + 1);\n                    if (found != null)\n                        return found;\n                }\n            });\n        };\n        return explore(this.state, 0);\n    }\n    /**\n    @internal\n    */\n    forceAll() {\n        while (!this.p.parser.stateFlag(this.state, 2 /* StateFlag.Accepting */)) {\n            if (!this.forceReduce()) {\n                this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n                break;\n            }\n        }\n        return this;\n    }\n    /**\n    Check whether this state has no further actions (assumed to be a direct descendant of the\n    top state, since any other states must be able to continue\n    somehow). @internal\n    */\n    get deadEnd() {\n        if (this.stack.length != 3)\n            return false;\n        let { parser } = this.p;\n        return parser.data[parser.stateSlot(this.state, 1 /* ParseState.Actions */)] == 65535 /* Seq.End */ &&\n            !parser.stateSlot(this.state, 4 /* ParseState.DefaultReduce */);\n    }\n    /**\n    Restart the stack (put it back in its start state). Only safe\n    when this.stack.length == 3 (state is directly below the top\n    state). @internal\n    */\n    restart() {\n        this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n        this.state = this.stack[0];\n        this.stack.length = 0;\n    }\n    /**\n    @internal\n    */\n    sameState(other) {\n        if (this.state != other.state || this.stack.length != other.stack.length)\n            return false;\n        for (let i = 0; i < this.stack.length; i += 3)\n            if (this.stack[i] != other.stack[i])\n                return false;\n        return true;\n    }\n    /**\n    Get the parser used by this stack.\n    */\n    get parser() { return this.p.parser; }\n    /**\n    Test whether a given dialect (by numeric ID, as exported from\n    the terms file) is enabled.\n    */\n    dialectEnabled(dialectID) { return this.p.parser.dialect.flags[dialectID]; }\n    shiftContext(term, start) {\n        if (this.curContext)\n            this.updateContext(this.curContext.tracker.shift(this.curContext.context, term, this, this.p.stream.reset(start)));\n    }\n    reduceContext(term, start) {\n        if (this.curContext)\n            this.updateContext(this.curContext.tracker.reduce(this.curContext.context, term, this, this.p.stream.reset(start)));\n    }\n    /**\n    @internal\n    */\n    emitContext() {\n        let last = this.buffer.length - 1;\n        if (last < 0 || this.buffer[last] != -3)\n            this.buffer.push(this.curContext.hash, this.pos, this.pos, -3);\n    }\n    /**\n    @internal\n    */\n    emitLookAhead() {\n        let last = this.buffer.length - 1;\n        if (last < 0 || this.buffer[last] != -4)\n            this.buffer.push(this.lookAhead, this.pos, this.pos, -4);\n    }\n    updateContext(context) {\n        if (context != this.curContext.context) {\n            let newCx = new StackContext(this.curContext.tracker, context);\n            if (newCx.hash != this.curContext.hash)\n                this.emitContext();\n            this.curContext = newCx;\n        }\n    }\n    /**\n    @internal\n    */\n    setLookAhead(lookAhead) {\n        if (lookAhead <= this.lookAhead)\n            return false;\n        this.emitLookAhead();\n        this.lookAhead = lookAhead;\n        return true;\n    }\n    /**\n    @internal\n    */\n    close() {\n        if (this.curContext && this.curContext.tracker.strict)\n            this.emitContext();\n        if (this.lookAhead > 0)\n            this.emitLookAhead();\n    }\n}\nclass StackContext {\n    constructor(tracker, context) {\n        this.tracker = tracker;\n        this.context = context;\n        this.hash = tracker.strict ? tracker.hash(context) : 0;\n    }\n}\n// Used to cheaply run some reductions to scan ahead without mutating\n// an entire stack\nclass SimulatedStack {\n    constructor(start) {\n        this.start = start;\n        this.state = start.state;\n        this.stack = start.stack;\n        this.base = this.stack.length;\n    }\n    reduce(action) {\n        let term = action & 65535 /* Action.ValueMask */, depth = action >> 19 /* Action.ReduceDepthShift */;\n        if (depth == 0) {\n            if (this.stack == this.start.stack)\n                this.stack = this.stack.slice();\n            this.stack.push(this.state, 0, 0);\n            this.base += 3;\n        }\n        else {\n            this.base -= (depth - 1) * 3;\n        }\n        let goto = this.start.p.parser.getGoto(this.stack[this.base - 3], term, true);\n        this.state = goto;\n    }\n}\n// This is given to `Tree.build` to build a buffer, and encapsulates\n// the parent-stack-walking necessary to read the nodes.\nclass StackBufferCursor {\n    constructor(stack, pos, index) {\n        this.stack = stack;\n        this.pos = pos;\n        this.index = index;\n        this.buffer = stack.buffer;\n        if (this.index == 0)\n            this.maybeNext();\n    }\n    static create(stack, pos = stack.bufferBase + stack.buffer.length) {\n        return new StackBufferCursor(stack, pos, pos - stack.bufferBase);\n    }\n    maybeNext() {\n        let next = this.stack.parent;\n        if (next != null) {\n            this.index = this.stack.bufferBase - next.bufferBase;\n            this.stack = next;\n            this.buffer = next.buffer;\n        }\n    }\n    get id() { return this.buffer[this.index - 4]; }\n    get start() { return this.buffer[this.index - 3]; }\n    get end() { return this.buffer[this.index - 2]; }\n    get size() { return this.buffer[this.index - 1]; }\n    next() {\n        this.index -= 4;\n        this.pos -= 4;\n        if (this.index == 0)\n            this.maybeNext();\n    }\n    fork() {\n        return new StackBufferCursor(this.stack, this.pos, this.index);\n    }\n}\n\n// See lezer-generator/src/encode.ts for comments about the encoding\n// used here\nfunction decodeArray(input, Type = Uint16Array) {\n    if (typeof input != \"string\")\n        return input;\n    let array = null;\n    for (let pos = 0, out = 0; pos < input.length;) {\n        let value = 0;\n        for (;;) {\n            let next = input.charCodeAt(pos++), stop = false;\n            if (next == 126 /* Encode.BigValCode */) {\n                value = 65535 /* Encode.BigVal */;\n                break;\n            }\n            if (next >= 92 /* Encode.Gap2 */)\n                next--;\n            if (next >= 34 /* Encode.Gap1 */)\n                next--;\n            let digit = next - 32 /* Encode.Start */;\n            if (digit >= 46 /* Encode.Base */) {\n                digit -= 46 /* Encode.Base */;\n                stop = true;\n            }\n            value += digit;\n            if (stop)\n                break;\n            value *= 46 /* Encode.Base */;\n        }\n        if (array)\n            array[out++] = value;\n        else\n            array = new Type(value);\n    }\n    return array;\n}\n\nclass CachedToken {\n    constructor() {\n        this.start = -1;\n        this.value = -1;\n        this.end = -1;\n        this.extended = -1;\n        this.lookAhead = 0;\n        this.mask = 0;\n        this.context = 0;\n    }\n}\nconst nullToken = new CachedToken;\n/**\n[Tokenizers](#lr.ExternalTokenizer) interact with the input\nthrough this interface. It presents the input as a stream of\ncharacters, tracking lookahead and hiding the complexity of\n[ranges](#common.Parser.parse^ranges) from tokenizer code.\n*/\nclass InputStream {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    @internal\n    */\n    input, \n    /**\n    @internal\n    */\n    ranges) {\n        this.input = input;\n        this.ranges = ranges;\n        /**\n        @internal\n        */\n        this.chunk = \"\";\n        /**\n        @internal\n        */\n        this.chunkOff = 0;\n        /**\n        Backup chunk\n        */\n        this.chunk2 = \"\";\n        this.chunk2Pos = 0;\n        /**\n        The character code of the next code unit in the input, or -1\n        when the stream is at the end of the input.\n        */\n        this.next = -1;\n        /**\n        @internal\n        */\n        this.token = nullToken;\n        this.rangeIndex = 0;\n        this.pos = this.chunkPos = ranges[0].from;\n        this.range = ranges[0];\n        this.end = ranges[ranges.length - 1].to;\n        this.readNext();\n    }\n    /**\n    @internal\n    */\n    resolveOffset(offset, assoc) {\n        let range = this.range, index = this.rangeIndex;\n        let pos = this.pos + offset;\n        while (pos < range.from) {\n            if (!index)\n                return null;\n            let next = this.ranges[--index];\n            pos -= range.from - next.to;\n            range = next;\n        }\n        while (assoc < 0 ? pos > range.to : pos >= range.to) {\n            if (index == this.ranges.length - 1)\n                return null;\n            let next = this.ranges[++index];\n            pos += next.from - range.to;\n            range = next;\n        }\n        return pos;\n    }\n    /**\n    @internal\n    */\n    clipPos(pos) {\n        if (pos >= this.range.from && pos < this.range.to)\n            return pos;\n        for (let range of this.ranges)\n            if (range.to > pos)\n                return Math.max(pos, range.from);\n        return this.end;\n    }\n    /**\n    Look at a code unit near the stream position. `.peek(0)` equals\n    `.next`, `.peek(-1)` gives you the previous character, and so\n    on.\n    \n    Note that looking around during tokenizing creates dependencies\n    on potentially far-away content, which may reduce the\n    effectiveness incremental parsing—when looking forward—or even\n    cause invalid reparses when looking backward more than 25 code\n    units, since the library does not track lookbehind.\n    */\n    peek(offset) {\n        let idx = this.chunkOff + offset, pos, result;\n        if (idx >= 0 && idx < this.chunk.length) {\n            pos = this.pos + offset;\n            result = this.chunk.charCodeAt(idx);\n        }\n        else {\n            let resolved = this.resolveOffset(offset, 1);\n            if (resolved == null)\n                return -1;\n            pos = resolved;\n            if (pos >= this.chunk2Pos && pos < this.chunk2Pos + this.chunk2.length) {\n                result = this.chunk2.charCodeAt(pos - this.chunk2Pos);\n            }\n            else {\n                let i = this.rangeIndex, range = this.range;\n                while (range.to <= pos)\n                    range = this.ranges[++i];\n                this.chunk2 = this.input.chunk(this.chunk2Pos = pos);\n                if (pos + this.chunk2.length > range.to)\n                    this.chunk2 = this.chunk2.slice(0, range.to - pos);\n                result = this.chunk2.charCodeAt(0);\n            }\n        }\n        if (pos >= this.token.lookAhead)\n            this.token.lookAhead = pos + 1;\n        return result;\n    }\n    /**\n    Accept a token. By default, the end of the token is set to the\n    current stream position, but you can pass an offset (relative to\n    the stream position) to change that.\n    */\n    acceptToken(token, endOffset = 0) {\n        let end = endOffset ? this.resolveOffset(endOffset, -1) : this.pos;\n        if (end == null || end < this.token.start)\n            throw new RangeError(\"Token end out of bounds\");\n        this.token.value = token;\n        this.token.end = end;\n    }\n    /**\n    Accept a token ending at a specific given position.\n    */\n    acceptTokenTo(token, endPos) {\n        this.token.value = token;\n        this.token.end = endPos;\n    }\n    getChunk() {\n        if (this.pos >= this.chunk2Pos && this.pos < this.chunk2Pos + this.chunk2.length) {\n            let { chunk, chunkPos } = this;\n            this.chunk = this.chunk2;\n            this.chunkPos = this.chunk2Pos;\n            this.chunk2 = chunk;\n            this.chunk2Pos = chunkPos;\n            this.chunkOff = this.pos - this.chunkPos;\n        }\n        else {\n            this.chunk2 = this.chunk;\n            this.chunk2Pos = this.chunkPos;\n            let nextChunk = this.input.chunk(this.pos);\n            let end = this.pos + nextChunk.length;\n            this.chunk = end > this.range.to ? nextChunk.slice(0, this.range.to - this.pos) : nextChunk;\n            this.chunkPos = this.pos;\n            this.chunkOff = 0;\n        }\n    }\n    readNext() {\n        if (this.chunkOff >= this.chunk.length) {\n            this.getChunk();\n            if (this.chunkOff == this.chunk.length)\n                return this.next = -1;\n        }\n        return this.next = this.chunk.charCodeAt(this.chunkOff);\n    }\n    /**\n    Move the stream forward N (defaults to 1) code units. Returns\n    the new value of [`next`](#lr.InputStream.next).\n    */\n    advance(n = 1) {\n        this.chunkOff += n;\n        while (this.pos + n >= this.range.to) {\n            if (this.rangeIndex == this.ranges.length - 1)\n                return this.setDone();\n            n -= this.range.to - this.pos;\n            this.range = this.ranges[++this.rangeIndex];\n            this.pos = this.range.from;\n        }\n        this.pos += n;\n        if (this.pos >= this.token.lookAhead)\n            this.token.lookAhead = this.pos + 1;\n        return this.readNext();\n    }\n    setDone() {\n        this.pos = this.chunkPos = this.end;\n        this.range = this.ranges[this.rangeIndex = this.ranges.length - 1];\n        this.chunk = \"\";\n        return this.next = -1;\n    }\n    /**\n    @internal\n    */\n    reset(pos, token) {\n        if (token) {\n            this.token = token;\n            token.start = pos;\n            token.lookAhead = pos + 1;\n            token.value = token.extended = -1;\n        }\n        else {\n            this.token = nullToken;\n        }\n        if (this.pos != pos) {\n            this.pos = pos;\n            if (pos == this.end) {\n                this.setDone();\n                return this;\n            }\n            while (pos < this.range.from)\n                this.range = this.ranges[--this.rangeIndex];\n            while (pos >= this.range.to)\n                this.range = this.ranges[++this.rangeIndex];\n            if (pos >= this.chunkPos && pos < this.chunkPos + this.chunk.length) {\n                this.chunkOff = pos - this.chunkPos;\n            }\n            else {\n                this.chunk = \"\";\n                this.chunkOff = 0;\n            }\n            this.readNext();\n        }\n        return this;\n    }\n    /**\n    @internal\n    */\n    read(from, to) {\n        if (from >= this.chunkPos && to <= this.chunkPos + this.chunk.length)\n            return this.chunk.slice(from - this.chunkPos, to - this.chunkPos);\n        if (from >= this.chunk2Pos && to <= this.chunk2Pos + this.chunk2.length)\n            return this.chunk2.slice(from - this.chunk2Pos, to - this.chunk2Pos);\n        if (from >= this.range.from && to <= this.range.to)\n            return this.input.read(from, to);\n        let result = \"\";\n        for (let r of this.ranges) {\n            if (r.from >= to)\n                break;\n            if (r.to > from)\n                result += this.input.read(Math.max(r.from, from), Math.min(r.to, to));\n        }\n        return result;\n    }\n}\n/**\n@internal\n*/\nclass TokenGroup {\n    constructor(data, id) {\n        this.data = data;\n        this.id = id;\n    }\n    token(input, stack) {\n        let { parser } = stack.p;\n        readToken(this.data, input, stack, this.id, parser.data, parser.tokenPrecTable);\n    }\n}\nTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/**\n@hide\n*/\nclass LocalTokenGroup {\n    constructor(data, precTable, elseToken) {\n        this.precTable = precTable;\n        this.elseToken = elseToken;\n        this.data = typeof data == \"string\" ? decodeArray(data) : data;\n    }\n    token(input, stack) {\n        let start = input.pos, skipped = 0;\n        for (;;) {\n            let atEof = input.next < 0, nextPos = input.resolveOffset(1, 1);\n            readToken(this.data, input, stack, 0, this.data, this.precTable);\n            if (input.token.value > -1)\n                break;\n            if (this.elseToken == null)\n                return;\n            if (!atEof)\n                skipped++;\n            if (nextPos == null)\n                break;\n            input.reset(nextPos, input.token);\n        }\n        if (skipped) {\n            input.reset(start, input.token);\n            input.acceptToken(this.elseToken, skipped);\n        }\n    }\n}\nLocalTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/**\n`@external tokens` declarations in the grammar should resolve to\nan instance of this class.\n*/\nclass ExternalTokenizer {\n    /**\n    Create a tokenizer. The first argument is the function that,\n    given an input stream, scans for the types of tokens it\n    recognizes at the stream's position, and calls\n    [`acceptToken`](#lr.InputStream.acceptToken) when it finds\n    one.\n    */\n    constructor(\n    /**\n    @internal\n    */\n    token, options = {}) {\n        this.token = token;\n        this.contextual = !!options.contextual;\n        this.fallback = !!options.fallback;\n        this.extend = !!options.extend;\n    }\n}\n// Tokenizer data is stored a big uint16 array containing, for each\n// state:\n//\n//  - A group bitmask, indicating what token groups are reachable from\n//    this state, so that paths that can only lead to tokens not in\n//    any of the current groups can be cut off early.\n//\n//  - The position of the end of the state's sequence of accepting\n//    tokens\n//\n//  - The number of outgoing edges for the state\n//\n//  - The accepting tokens, as (token id, group mask) pairs\n//\n//  - The outgoing edges, as (start character, end character, state\n//    index) triples, with end character being exclusive\n//\n// This function interprets that data, running through a stream as\n// long as new states with the a matching group mask can be reached,\n// and updating `input.token` when it matches a token.\nfunction readToken(data, input, stack, group, precTable, precOffset) {\n    let state = 0, groupMask = 1 << group, { dialect } = stack.p.parser;\n    scan: for (;;) {\n        if ((groupMask & data[state]) == 0)\n            break;\n        let accEnd = data[state + 1];\n        // Check whether this state can lead to a token in the current group\n        // Accept tokens in this state, possibly overwriting\n        // lower-precedence / shorter tokens\n        for (let i = state + 3; i < accEnd; i += 2)\n            if ((data[i + 1] & groupMask) > 0) {\n                let term = data[i];\n                if (dialect.allows(term) &&\n                    (input.token.value == -1 || input.token.value == term ||\n                        overrides(term, input.token.value, precTable, precOffset))) {\n                    input.acceptToken(term);\n                    break;\n                }\n            }\n        let next = input.next, low = 0, high = data[state + 2];\n        // Special case for EOF\n        if (input.next < 0 && high > low && data[accEnd + high * 3 - 3] == 65535 /* Seq.End */) {\n            state = data[accEnd + high * 3 - 1];\n            continue scan;\n        }\n        // Do a binary search on the state's edges\n        for (; low < high;) {\n            let mid = (low + high) >> 1;\n            let index = accEnd + mid + (mid << 1);\n            let from = data[index], to = data[index + 1] || 0x10000;\n            if (next < from)\n                high = mid;\n            else if (next >= to)\n                low = mid + 1;\n            else {\n                state = data[index + 2];\n                input.advance();\n                continue scan;\n            }\n        }\n        break;\n    }\n}\nfunction findOffset(data, start, term) {\n    for (let i = start, next; (next = data[i]) != 65535 /* Seq.End */; i++)\n        if (next == term)\n            return i - start;\n    return -1;\n}\nfunction overrides(token, prev, tableData, tableOffset) {\n    let iPrev = findOffset(tableData, tableOffset, prev);\n    return iPrev < 0 || findOffset(tableData, tableOffset, token) < iPrev;\n}\n\n// Environment variable used to control console output\nconst verbose = typeof process != \"undefined\" && process.env && /\\bparse\\b/.test(process.env.LOG);\nlet stackIDs = null;\nfunction cutAt(tree, pos, side) {\n    let cursor = tree.cursor(IterMode.IncludeAnonymous);\n    cursor.moveTo(pos);\n    for (;;) {\n        if (!(side < 0 ? cursor.childBefore(pos) : cursor.childAfter(pos)))\n            for (;;) {\n                if ((side < 0 ? cursor.to < pos : cursor.from > pos) && !cursor.type.isError)\n                    return side < 0 ? Math.max(0, Math.min(cursor.to - 1, pos - 25 /* Lookahead.Margin */))\n                        : Math.min(tree.length, Math.max(cursor.from + 1, pos + 25 /* Lookahead.Margin */));\n                if (side < 0 ? cursor.prevSibling() : cursor.nextSibling())\n                    break;\n                if (!cursor.parent())\n                    return side < 0 ? 0 : tree.length;\n            }\n    }\n}\nclass FragmentCursor {\n    constructor(fragments, nodeSet) {\n        this.fragments = fragments;\n        this.nodeSet = nodeSet;\n        this.i = 0;\n        this.fragment = null;\n        this.safeFrom = -1;\n        this.safeTo = -1;\n        this.trees = [];\n        this.start = [];\n        this.index = [];\n        this.nextFragment();\n    }\n    nextFragment() {\n        let fr = this.fragment = this.i == this.fragments.length ? null : this.fragments[this.i++];\n        if (fr) {\n            this.safeFrom = fr.openStart ? cutAt(fr.tree, fr.from + fr.offset, 1) - fr.offset : fr.from;\n            this.safeTo = fr.openEnd ? cutAt(fr.tree, fr.to + fr.offset, -1) - fr.offset : fr.to;\n            while (this.trees.length) {\n                this.trees.pop();\n                this.start.pop();\n                this.index.pop();\n            }\n            this.trees.push(fr.tree);\n            this.start.push(-fr.offset);\n            this.index.push(0);\n            this.nextStart = this.safeFrom;\n        }\n        else {\n            this.nextStart = 1e9;\n        }\n    }\n    // `pos` must be >= any previously given `pos` for this cursor\n    nodeAt(pos) {\n        if (pos < this.nextStart)\n            return null;\n        while (this.fragment && this.safeTo <= pos)\n            this.nextFragment();\n        if (!this.fragment)\n            return null;\n        for (;;) {\n            let last = this.trees.length - 1;\n            if (last < 0) { // End of tree\n                this.nextFragment();\n                return null;\n            }\n            let top = this.trees[last], index = this.index[last];\n            if (index == top.children.length) {\n                this.trees.pop();\n                this.start.pop();\n                this.index.pop();\n                continue;\n            }\n            let next = top.children[index];\n            let start = this.start[last] + top.positions[index];\n            if (start > pos) {\n                this.nextStart = start;\n                return null;\n            }\n            if (next instanceof Tree) {\n                if (start == pos) {\n                    if (start < this.safeFrom)\n                        return null;\n                    let end = start + next.length;\n                    if (end <= this.safeTo) {\n                        let lookAhead = next.prop(NodeProp.lookAhead);\n                        if (!lookAhead || end + lookAhead < this.fragment.to)\n                            return next;\n                    }\n                }\n                this.index[last]++;\n                if (start + next.length >= Math.max(this.safeFrom, pos)) { // Enter this node\n                    this.trees.push(next);\n                    this.start.push(start);\n                    this.index.push(0);\n                }\n            }\n            else {\n                this.index[last]++;\n                this.nextStart = start + next.length;\n            }\n        }\n    }\n}\nclass TokenCache {\n    constructor(parser, stream) {\n        this.stream = stream;\n        this.tokens = [];\n        this.mainToken = null;\n        this.actions = [];\n        this.tokens = parser.tokenizers.map(_ => new CachedToken);\n    }\n    getActions(stack) {\n        let actionIndex = 0;\n        let main = null;\n        let { parser } = stack.p, { tokenizers } = parser;\n        let mask = parser.stateSlot(stack.state, 3 /* ParseState.TokenizerMask */);\n        let context = stack.curContext ? stack.curContext.hash : 0;\n        let lookAhead = 0;\n        for (let i = 0; i < tokenizers.length; i++) {\n            if (((1 << i) & mask) == 0)\n                continue;\n            let tokenizer = tokenizers[i], token = this.tokens[i];\n            if (main && !tokenizer.fallback)\n                continue;\n            if (tokenizer.contextual || token.start != stack.pos || token.mask != mask || token.context != context) {\n                this.updateCachedToken(token, tokenizer, stack);\n                token.mask = mask;\n                token.context = context;\n            }\n            if (token.lookAhead > token.end + 25 /* Lookahead.Margin */)\n                lookAhead = Math.max(token.lookAhead, lookAhead);\n            if (token.value != 0 /* Term.Err */) {\n                let startIndex = actionIndex;\n                if (token.extended > -1)\n                    actionIndex = this.addActions(stack, token.extended, token.end, actionIndex);\n                actionIndex = this.addActions(stack, token.value, token.end, actionIndex);\n                if (!tokenizer.extend) {\n                    main = token;\n                    if (actionIndex > startIndex)\n                        break;\n                }\n            }\n        }\n        while (this.actions.length > actionIndex)\n            this.actions.pop();\n        if (lookAhead)\n            stack.setLookAhead(lookAhead);\n        if (!main && stack.pos == this.stream.end) {\n            main = new CachedToken;\n            main.value = stack.p.parser.eofTerm;\n            main.start = main.end = stack.pos;\n            actionIndex = this.addActions(stack, main.value, main.end, actionIndex);\n        }\n        this.mainToken = main;\n        return this.actions;\n    }\n    getMainToken(stack) {\n        if (this.mainToken)\n            return this.mainToken;\n        let main = new CachedToken, { pos, p } = stack;\n        main.start = pos;\n        main.end = Math.min(pos + 1, p.stream.end);\n        main.value = pos == p.stream.end ? p.parser.eofTerm : 0 /* Term.Err */;\n        return main;\n    }\n    updateCachedToken(token, tokenizer, stack) {\n        let start = this.stream.clipPos(stack.pos);\n        tokenizer.token(this.stream.reset(start, token), stack);\n        if (token.value > -1) {\n            let { parser } = stack.p;\n            for (let i = 0; i < parser.specialized.length; i++)\n                if (parser.specialized[i] == token.value) {\n                    let result = parser.specializers[i](this.stream.read(token.start, token.end), stack);\n                    if (result >= 0 && stack.p.parser.dialect.allows(result >> 1)) {\n                        if ((result & 1) == 0 /* Specialize.Specialize */)\n                            token.value = result >> 1;\n                        else\n                            token.extended = result >> 1;\n                        break;\n                    }\n                }\n        }\n        else {\n            token.value = 0 /* Term.Err */;\n            token.end = this.stream.clipPos(start + 1);\n        }\n    }\n    putAction(action, token, end, index) {\n        // Don't add duplicate actions\n        for (let i = 0; i < index; i += 3)\n            if (this.actions[i] == action)\n                return index;\n        this.actions[index++] = action;\n        this.actions[index++] = token;\n        this.actions[index++] = end;\n        return index;\n    }\n    addActions(stack, token, end, index) {\n        let { state } = stack, { parser } = stack.p, { data } = parser;\n        for (let set = 0; set < 2; set++) {\n            for (let i = parser.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */);; i += 3) {\n                if (data[i] == 65535 /* Seq.End */) {\n                    if (data[i + 1] == 1 /* Seq.Next */) {\n                        i = pair(data, i + 2);\n                    }\n                    else {\n                        if (index == 0 && data[i + 1] == 2 /* Seq.Other */)\n                            index = this.putAction(pair(data, i + 2), token, end, index);\n                        break;\n                    }\n                }\n                if (data[i] == token)\n                    index = this.putAction(pair(data, i + 1), token, end, index);\n            }\n        }\n        return index;\n    }\n}\nclass Parse {\n    constructor(parser, input, fragments, ranges) {\n        this.parser = parser;\n        this.input = input;\n        this.ranges = ranges;\n        this.recovering = 0;\n        this.nextStackID = 0x2654; // ♔, ♕, ♖, ♗, ♘, ♙, ♠, ♡, ♢, ♣, ♤, ♥, ♦, ♧\n        this.minStackPos = 0;\n        this.reused = [];\n        this.stoppedAt = null;\n        this.lastBigReductionStart = -1;\n        this.lastBigReductionSize = 0;\n        this.bigReductionCount = 0;\n        this.stream = new InputStream(input, ranges);\n        this.tokens = new TokenCache(parser, this.stream);\n        this.topTerm = parser.top[1];\n        let { from } = ranges[0];\n        this.stacks = [Stack.start(this, parser.top[0], from)];\n        this.fragments = fragments.length && this.stream.end - from > parser.bufferLength * 4\n            ? new FragmentCursor(fragments, parser.nodeSet) : null;\n    }\n    get parsedPos() {\n        return this.minStackPos;\n    }\n    // Move the parser forward. This will process all parse stacks at\n    // `this.pos` and try to advance them to a further position. If no\n    // stack for such a position is found, it'll start error-recovery.\n    //\n    // When the parse is finished, this will return a syntax tree. When\n    // not, it returns `null`.\n    advance() {\n        let stacks = this.stacks, pos = this.minStackPos;\n        // This will hold stacks beyond `pos`.\n        let newStacks = this.stacks = [];\n        let stopped, stoppedTokens;\n        // If a large amount of reductions happened with the same start\n        // position, force the stack out of that production in order to\n        // avoid creating a tree too deep to recurse through.\n        // (This is an ugly kludge, because unfortunately there is no\n        // straightforward, cheap way to check for this happening, due to\n        // the history of reductions only being available in an\n        // expensive-to-access format in the stack buffers.)\n        if (this.bigReductionCount > 300 /* Rec.MaxLeftAssociativeReductionCount */ && stacks.length == 1) {\n            let [s] = stacks;\n            while (s.forceReduce() && s.stack.length && s.stack[s.stack.length - 2] >= this.lastBigReductionStart) { }\n            this.bigReductionCount = this.lastBigReductionSize = 0;\n        }\n        // Keep advancing any stacks at `pos` until they either move\n        // forward or can't be advanced. Gather stacks that can't be\n        // advanced further in `stopped`.\n        for (let i = 0; i < stacks.length; i++) {\n            let stack = stacks[i];\n            for (;;) {\n                this.tokens.mainToken = null;\n                if (stack.pos > pos) {\n                    newStacks.push(stack);\n                }\n                else if (this.advanceStack(stack, newStacks, stacks)) {\n                    continue;\n                }\n                else {\n                    if (!stopped) {\n                        stopped = [];\n                        stoppedTokens = [];\n                    }\n                    stopped.push(stack);\n                    let tok = this.tokens.getMainToken(stack);\n                    stoppedTokens.push(tok.value, tok.end);\n                }\n                break;\n            }\n        }\n        if (!newStacks.length) {\n            let finished = stopped && findFinished(stopped);\n            if (finished) {\n                if (verbose)\n                    console.log(\"Finish with \" + this.stackID(finished));\n                return this.stackToTree(finished);\n            }\n            if (this.parser.strict) {\n                if (verbose && stopped)\n                    console.log(\"Stuck with token \" + (this.tokens.mainToken ? this.parser.getName(this.tokens.mainToken.value) : \"none\"));\n                throw new SyntaxError(\"No parse at \" + pos);\n            }\n            if (!this.recovering)\n                this.recovering = 5 /* Rec.Distance */;\n        }\n        if (this.recovering && stopped) {\n            let finished = this.stoppedAt != null && stopped[0].pos > this.stoppedAt ? stopped[0]\n                : this.runRecovery(stopped, stoppedTokens, newStacks);\n            if (finished) {\n                if (verbose)\n                    console.log(\"Force-finish \" + this.stackID(finished));\n                return this.stackToTree(finished.forceAll());\n            }\n        }\n        if (this.recovering) {\n            let maxRemaining = this.recovering == 1 ? 1 : this.recovering * 3 /* Rec.MaxRemainingPerStep */;\n            if (newStacks.length > maxRemaining) {\n                newStacks.sort((a, b) => b.score - a.score);\n                while (newStacks.length > maxRemaining)\n                    newStacks.pop();\n            }\n            if (newStacks.some(s => s.reducePos > pos))\n                this.recovering--;\n        }\n        else if (newStacks.length > 1) {\n            // Prune stacks that are in the same state, or that have been\n            // running without splitting for a while, to avoid getting stuck\n            // with multiple successful stacks running endlessly on.\n            outer: for (let i = 0; i < newStacks.length - 1; i++) {\n                let stack = newStacks[i];\n                for (let j = i + 1; j < newStacks.length; j++) {\n                    let other = newStacks[j];\n                    if (stack.sameState(other) ||\n                        stack.buffer.length > 500 /* Rec.MinBufferLengthPrune */ && other.buffer.length > 500 /* Rec.MinBufferLengthPrune */) {\n                        if (((stack.score - other.score) || (stack.buffer.length - other.buffer.length)) > 0) {\n                            newStacks.splice(j--, 1);\n                        }\n                        else {\n                            newStacks.splice(i--, 1);\n                            continue outer;\n                        }\n                    }\n                }\n            }\n            if (newStacks.length > 12 /* Rec.MaxStackCount */) {\n                newStacks.sort((a, b) => b.score - a.score);\n                newStacks.splice(12 /* Rec.MaxStackCount */, newStacks.length - 12 /* Rec.MaxStackCount */);\n            }\n        }\n        this.minStackPos = newStacks[0].pos;\n        for (let i = 1; i < newStacks.length; i++)\n            if (newStacks[i].pos < this.minStackPos)\n                this.minStackPos = newStacks[i].pos;\n        return null;\n    }\n    stopAt(pos) {\n        if (this.stoppedAt != null && this.stoppedAt < pos)\n            throw new RangeError(\"Can't move stoppedAt forward\");\n        this.stoppedAt = pos;\n    }\n    // Returns an updated version of the given stack, or null if the\n    // stack can't advance normally. When `split` and `stacks` are\n    // given, stacks split off by ambiguous operations will be pushed to\n    // `split`, or added to `stacks` if they move `pos` forward.\n    advanceStack(stack, stacks, split) {\n        let start = stack.pos, { parser } = this;\n        let base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n        if (this.stoppedAt != null && start > this.stoppedAt)\n            return stack.forceReduce() ? stack : null;\n        if (this.fragments) {\n            let strictCx = stack.curContext && stack.curContext.tracker.strict, cxHash = strictCx ? stack.curContext.hash : 0;\n            for (let cached = this.fragments.nodeAt(start); cached;) {\n                let match = this.parser.nodeSet.types[cached.type.id] == cached.type ? parser.getGoto(stack.state, cached.type.id) : -1;\n                if (match > -1 && cached.length && (!strictCx || (cached.prop(NodeProp.contextHash) || 0) == cxHash)) {\n                    stack.useNode(cached, match);\n                    if (verbose)\n                        console.log(base + this.stackID(stack) + ` (via reuse of ${parser.getName(cached.type.id)})`);\n                    return true;\n                }\n                if (!(cached instanceof Tree) || cached.children.length == 0 || cached.positions[0] > 0)\n                    break;\n                let inner = cached.children[0];\n                if (inner instanceof Tree && cached.positions[0] == 0)\n                    cached = inner;\n                else\n                    break;\n            }\n        }\n        let defaultReduce = parser.stateSlot(stack.state, 4 /* ParseState.DefaultReduce */);\n        if (defaultReduce > 0) {\n            stack.reduce(defaultReduce);\n            if (verbose)\n                console.log(base + this.stackID(stack) + ` (via always-reduce ${parser.getName(defaultReduce & 65535 /* Action.ValueMask */)})`);\n            return true;\n        }\n        if (stack.stack.length >= 8400 /* Rec.CutDepth */) {\n            while (stack.stack.length > 6000 /* Rec.CutTo */ && stack.forceReduce()) { }\n        }\n        let actions = this.tokens.getActions(stack);\n        for (let i = 0; i < actions.length;) {\n            let action = actions[i++], term = actions[i++], end = actions[i++];\n            let last = i == actions.length || !split;\n            let localStack = last ? stack : stack.split();\n            let main = this.tokens.mainToken;\n            localStack.apply(action, term, main ? main.start : localStack.pos, end);\n            if (verbose)\n                console.log(base + this.stackID(localStack) + ` (via ${(action & 65536 /* Action.ReduceFlag */) == 0 ? \"shift\"\n                    : `reduce of ${parser.getName(action & 65535 /* Action.ValueMask */)}`} for ${parser.getName(term)} @ ${start}${localStack == stack ? \"\" : \", split\"})`);\n            if (last)\n                return true;\n            else if (localStack.pos > start)\n                stacks.push(localStack);\n            else\n                split.push(localStack);\n        }\n        return false;\n    }\n    // Advance a given stack forward as far as it will go. Returns the\n    // (possibly updated) stack if it got stuck, or null if it moved\n    // forward and was given to `pushStackDedup`.\n    advanceFully(stack, newStacks) {\n        let pos = stack.pos;\n        for (;;) {\n            if (!this.advanceStack(stack, null, null))\n                return false;\n            if (stack.pos > pos) {\n                pushStackDedup(stack, newStacks);\n                return true;\n            }\n        }\n    }\n    runRecovery(stacks, tokens, newStacks) {\n        let finished = null, restarted = false;\n        for (let i = 0; i < stacks.length; i++) {\n            let stack = stacks[i], token = tokens[i << 1], tokenEnd = tokens[(i << 1) + 1];\n            let base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n            if (stack.deadEnd) {\n                if (restarted)\n                    continue;\n                restarted = true;\n                stack.restart();\n                if (verbose)\n                    console.log(base + this.stackID(stack) + \" (restarted)\");\n                let done = this.advanceFully(stack, newStacks);\n                if (done)\n                    continue;\n            }\n            let force = stack.split(), forceBase = base;\n            for (let j = 0; j < 10 /* Rec.ForceReduceLimit */ && force.forceReduce(); j++) {\n                if (verbose)\n                    console.log(forceBase + this.stackID(force) + \" (via force-reduce)\");\n                let done = this.advanceFully(force, newStacks);\n                if (done)\n                    break;\n                if (verbose)\n                    forceBase = this.stackID(force) + \" -> \";\n            }\n            for (let insert of stack.recoverByInsert(token)) {\n                if (verbose)\n                    console.log(base + this.stackID(insert) + \" (via recover-insert)\");\n                this.advanceFully(insert, newStacks);\n            }\n            if (this.stream.end > stack.pos) {\n                if (tokenEnd == stack.pos) {\n                    tokenEnd++;\n                    token = 0 /* Term.Err */;\n                }\n                stack.recoverByDelete(token, tokenEnd);\n                if (verbose)\n                    console.log(base + this.stackID(stack) + ` (via recover-delete ${this.parser.getName(token)})`);\n                pushStackDedup(stack, newStacks);\n            }\n            else if (!finished || finished.score < stack.score) {\n                finished = stack;\n            }\n        }\n        return finished;\n    }\n    // Convert the stack's buffer to a syntax tree.\n    stackToTree(stack) {\n        stack.close();\n        return Tree.build({ buffer: StackBufferCursor.create(stack),\n            nodeSet: this.parser.nodeSet,\n            topID: this.topTerm,\n            maxBufferLength: this.parser.bufferLength,\n            reused: this.reused,\n            start: this.ranges[0].from,\n            length: stack.pos - this.ranges[0].from,\n            minRepeatType: this.parser.minRepeatTerm });\n    }\n    stackID(stack) {\n        let id = (stackIDs || (stackIDs = new WeakMap)).get(stack);\n        if (!id)\n            stackIDs.set(stack, id = String.fromCodePoint(this.nextStackID++));\n        return id + stack;\n    }\n}\nfunction pushStackDedup(stack, newStacks) {\n    for (let i = 0; i < newStacks.length; i++) {\n        let other = newStacks[i];\n        if (other.pos == stack.pos && other.sameState(stack)) {\n            if (newStacks[i].score < stack.score)\n                newStacks[i] = stack;\n            return;\n        }\n    }\n    newStacks.push(stack);\n}\nclass Dialect {\n    constructor(source, flags, disabled) {\n        this.source = source;\n        this.flags = flags;\n        this.disabled = disabled;\n    }\n    allows(term) { return !this.disabled || this.disabled[term] == 0; }\n}\nconst id = x => x;\n/**\nContext trackers are used to track stateful context (such as\nindentation in the Python grammar, or parent elements in the XML\ngrammar) needed by external tokenizers. You declare them in a\ngrammar file as `@context exportName from \"module\"`.\n\nContext values should be immutable, and can be updated (replaced)\non shift or reduce actions.\n\nThe export used in a `@context` declaration should be of this\ntype.\n*/\nclass ContextTracker {\n    /**\n    Define a context tracker.\n    */\n    constructor(spec) {\n        this.start = spec.start;\n        this.shift = spec.shift || id;\n        this.reduce = spec.reduce || id;\n        this.reuse = spec.reuse || id;\n        this.hash = spec.hash || (() => 0);\n        this.strict = spec.strict !== false;\n    }\n}\n/**\nHolds the parse tables for a given grammar, as generated by\n`lezer-generator`, and provides [methods](#common.Parser) to parse\ncontent with.\n*/\nclass LRParser extends Parser {\n    /**\n    @internal\n    */\n    constructor(spec) {\n        super();\n        /**\n        @internal\n        */\n        this.wrappers = [];\n        if (spec.version != 14 /* File.Version */)\n            throw new RangeError(`Parser version (${spec.version}) doesn't match runtime version (${14 /* File.Version */})`);\n        let nodeNames = spec.nodeNames.split(\" \");\n        this.minRepeatTerm = nodeNames.length;\n        for (let i = 0; i < spec.repeatNodeCount; i++)\n            nodeNames.push(\"\");\n        let topTerms = Object.keys(spec.topRules).map(r => spec.topRules[r][1]);\n        let nodeProps = [];\n        for (let i = 0; i < nodeNames.length; i++)\n            nodeProps.push([]);\n        function setProp(nodeID, prop, value) {\n            nodeProps[nodeID].push([prop, prop.deserialize(String(value))]);\n        }\n        if (spec.nodeProps)\n            for (let propSpec of spec.nodeProps) {\n                let prop = propSpec[0];\n                if (typeof prop == \"string\")\n                    prop = NodeProp[prop];\n                for (let i = 1; i < propSpec.length;) {\n                    let next = propSpec[i++];\n                    if (next >= 0) {\n                        setProp(next, prop, propSpec[i++]);\n                    }\n                    else {\n                        let value = propSpec[i + -next];\n                        for (let j = -next; j > 0; j--)\n                            setProp(propSpec[i++], prop, value);\n                        i++;\n                    }\n                }\n            }\n        this.nodeSet = new NodeSet(nodeNames.map((name, i) => NodeType.define({\n            name: i >= this.minRepeatTerm ? undefined : name,\n            id: i,\n            props: nodeProps[i],\n            top: topTerms.indexOf(i) > -1,\n            error: i == 0,\n            skipped: spec.skippedNodes && spec.skippedNodes.indexOf(i) > -1\n        })));\n        if (spec.propSources)\n            this.nodeSet = this.nodeSet.extend(...spec.propSources);\n        this.strict = false;\n        this.bufferLength = DefaultBufferLength;\n        let tokenArray = decodeArray(spec.tokenData);\n        this.context = spec.context;\n        this.specializerSpecs = spec.specialized || [];\n        this.specialized = new Uint16Array(this.specializerSpecs.length);\n        for (let i = 0; i < this.specializerSpecs.length; i++)\n            this.specialized[i] = this.specializerSpecs[i].term;\n        this.specializers = this.specializerSpecs.map(getSpecializer);\n        this.states = decodeArray(spec.states, Uint32Array);\n        this.data = decodeArray(spec.stateData);\n        this.goto = decodeArray(spec.goto);\n        this.maxTerm = spec.maxTerm;\n        this.tokenizers = spec.tokenizers.map(value => typeof value == \"number\" ? new TokenGroup(tokenArray, value) : value);\n        this.topRules = spec.topRules;\n        this.dialects = spec.dialects || {};\n        this.dynamicPrecedences = spec.dynamicPrecedences || null;\n        this.tokenPrecTable = spec.tokenPrec;\n        this.termNames = spec.termNames || null;\n        this.maxNode = this.nodeSet.types.length - 1;\n        this.dialect = this.parseDialect();\n        this.top = this.topRules[Object.keys(this.topRules)[0]];\n    }\n    createParse(input, fragments, ranges) {\n        let parse = new Parse(this, input, fragments, ranges);\n        for (let w of this.wrappers)\n            parse = w(parse, input, fragments, ranges);\n        return parse;\n    }\n    /**\n    Get a goto table entry @internal\n    */\n    getGoto(state, term, loose = false) {\n        let table = this.goto;\n        if (term >= table[0])\n            return -1;\n        for (let pos = table[term + 1];;) {\n            let groupTag = table[pos++], last = groupTag & 1;\n            let target = table[pos++];\n            if (last && loose)\n                return target;\n            for (let end = pos + (groupTag >> 1); pos < end; pos++)\n                if (table[pos] == state)\n                    return target;\n            if (last)\n                return -1;\n        }\n    }\n    /**\n    Check if this state has an action for a given terminal @internal\n    */\n    hasAction(state, terminal) {\n        let data = this.data;\n        for (let set = 0; set < 2; set++) {\n            for (let i = this.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */), next;; i += 3) {\n                if ((next = data[i]) == 65535 /* Seq.End */) {\n                    if (data[i + 1] == 1 /* Seq.Next */)\n                        next = data[i = pair(data, i + 2)];\n                    else if (data[i + 1] == 2 /* Seq.Other */)\n                        return pair(data, i + 2);\n                    else\n                        break;\n                }\n                if (next == terminal || next == 0 /* Term.Err */)\n                    return pair(data, i + 1);\n            }\n        }\n        return 0;\n    }\n    /**\n    @internal\n    */\n    stateSlot(state, slot) {\n        return this.states[(state * 6 /* ParseState.Size */) + slot];\n    }\n    /**\n    @internal\n    */\n    stateFlag(state, flag) {\n        return (this.stateSlot(state, 0 /* ParseState.Flags */) & flag) > 0;\n    }\n    /**\n    @internal\n    */\n    validAction(state, action) {\n        return !!this.allActions(state, a => a == action ? true : null);\n    }\n    /**\n    @internal\n    */\n    allActions(state, action) {\n        let deflt = this.stateSlot(state, 4 /* ParseState.DefaultReduce */);\n        let result = deflt ? action(deflt) : undefined;\n        for (let i = this.stateSlot(state, 1 /* ParseState.Actions */); result == null; i += 3) {\n            if (this.data[i] == 65535 /* Seq.End */) {\n                if (this.data[i + 1] == 1 /* Seq.Next */)\n                    i = pair(this.data, i + 2);\n                else\n                    break;\n            }\n            result = action(pair(this.data, i + 1));\n        }\n        return result;\n    }\n    /**\n    Get the states that can follow this one through shift actions or\n    goto jumps. @internal\n    */\n    nextStates(state) {\n        let result = [];\n        for (let i = this.stateSlot(state, 1 /* ParseState.Actions */);; i += 3) {\n            if (this.data[i] == 65535 /* Seq.End */) {\n                if (this.data[i + 1] == 1 /* Seq.Next */)\n                    i = pair(this.data, i + 2);\n                else\n                    break;\n            }\n            if ((this.data[i + 2] & (65536 /* Action.ReduceFlag */ >> 16)) == 0) {\n                let value = this.data[i + 1];\n                if (!result.some((v, i) => (i & 1) && v == value))\n                    result.push(this.data[i], value);\n            }\n        }\n        return result;\n    }\n    /**\n    Configure the parser. Returns a new parser instance that has the\n    given settings modified. Settings not provided in `config` are\n    kept from the original parser.\n    */\n    configure(config) {\n        // Hideous reflection-based kludge to make it easy to create a\n        // slightly modified copy of a parser.\n        let copy = Object.assign(Object.create(LRParser.prototype), this);\n        if (config.props)\n            copy.nodeSet = this.nodeSet.extend(...config.props);\n        if (config.top) {\n            let info = this.topRules[config.top];\n            if (!info)\n                throw new RangeError(`Invalid top rule name ${config.top}`);\n            copy.top = info;\n        }\n        if (config.tokenizers)\n            copy.tokenizers = this.tokenizers.map(t => {\n                let found = config.tokenizers.find(r => r.from == t);\n                return found ? found.to : t;\n            });\n        if (config.specializers) {\n            copy.specializers = this.specializers.slice();\n            copy.specializerSpecs = this.specializerSpecs.map((s, i) => {\n                let found = config.specializers.find(r => r.from == s.external);\n                if (!found)\n                    return s;\n                let spec = Object.assign(Object.assign({}, s), { external: found.to });\n                copy.specializers[i] = getSpecializer(spec);\n                return spec;\n            });\n        }\n        if (config.contextTracker)\n            copy.context = config.contextTracker;\n        if (config.dialect)\n            copy.dialect = this.parseDialect(config.dialect);\n        if (config.strict != null)\n            copy.strict = config.strict;\n        if (config.wrap)\n            copy.wrappers = copy.wrappers.concat(config.wrap);\n        if (config.bufferLength != null)\n            copy.bufferLength = config.bufferLength;\n        return copy;\n    }\n    /**\n    Tells you whether any [parse wrappers](#lr.ParserConfig.wrap)\n    are registered for this parser.\n    */\n    hasWrappers() {\n        return this.wrappers.length > 0;\n    }\n    /**\n    Returns the name associated with a given term. This will only\n    work for all terms when the parser was generated with the\n    `--names` option. By default, only the names of tagged terms are\n    stored.\n    */\n    getName(term) {\n        return this.termNames ? this.termNames[term] : String(term <= this.maxNode && this.nodeSet.types[term].name || term);\n    }\n    /**\n    The eof term id is always allocated directly after the node\n    types. @internal\n    */\n    get eofTerm() { return this.maxNode + 1; }\n    /**\n    The type of top node produced by the parser.\n    */\n    get topNode() { return this.nodeSet.types[this.top[1]]; }\n    /**\n    @internal\n    */\n    dynamicPrecedence(term) {\n        let prec = this.dynamicPrecedences;\n        return prec == null ? 0 : prec[term] || 0;\n    }\n    /**\n    @internal\n    */\n    parseDialect(dialect) {\n        let values = Object.keys(this.dialects), flags = values.map(() => false);\n        if (dialect)\n            for (let part of dialect.split(\" \")) {\n                let id = values.indexOf(part);\n                if (id >= 0)\n                    flags[id] = true;\n            }\n        let disabled = null;\n        for (let i = 0; i < values.length; i++)\n            if (!flags[i]) {\n                for (let j = this.dialects[values[i]], id; (id = this.data[j++]) != 65535 /* Seq.End */;)\n                    (disabled || (disabled = new Uint8Array(this.maxTerm + 1)))[id] = 1;\n            }\n        return new Dialect(dialect, flags, disabled);\n    }\n    /**\n    Used by the output of the parser generator. Not available to\n    user code. @hide\n    */\n    static deserialize(spec) {\n        return new LRParser(spec);\n    }\n}\nfunction pair(data, off) { return data[off] | (data[off + 1] << 16); }\nfunction findFinished(stacks) {\n    let best = null;\n    for (let stack of stacks) {\n        let stopped = stack.p.stoppedAt;\n        if ((stack.pos == stack.p.stream.end || stopped != null && stack.pos > stopped) &&\n            stack.p.parser.stateFlag(stack.state, 2 /* StateFlag.Accepting */) &&\n            (!best || best.score < stack.score))\n            best = stack;\n    }\n    return best;\n}\nfunction getSpecializer(spec) {\n    if (spec.external) {\n        let mask = spec.extend ? 1 /* Specialize.Extend */ : 0 /* Specialize.Specialize */;\n        return (value, stack) => (spec.external(value, stack) << 1) | mask;\n    }\n    return spec.get;\n}\n\nexport { ContextTracker, ExternalTokenizer, InputStream, LRParser, LocalTokenGroup, Stack };\n","import { ContextTracker, ExternalTokenizer, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { parseMixed } from '@lezer/common';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst scriptText = 55,\n  StartCloseScriptTag = 1,\n  styleText = 56,\n  StartCloseStyleTag = 2,\n  textareaText = 57,\n  StartCloseTextareaTag = 3,\n  EndTag = 4,\n  SelfClosingEndTag = 5,\n  StartTag = 6,\n  StartScriptTag = 7,\n  StartStyleTag = 8,\n  StartTextareaTag = 9,\n  StartSelfClosingTag = 10,\n  StartCloseTag = 11,\n  NoMatchStartCloseTag = 12,\n  MismatchedStartCloseTag = 13,\n  missingCloseTag = 58,\n  IncompleteTag = 14,\n  IncompleteCloseTag = 15,\n  commentContent$1 = 59,\n  Element = 21,\n  TagName = 23,\n  Attribute = 24,\n  AttributeName = 25,\n  AttributeValue = 27,\n  UnquotedAttributeValue = 28,\n  ScriptText = 29,\n  StyleText = 32,\n  TextareaText = 35,\n  OpenTag = 37,\n  CloseTag = 38,\n  Dialect_noMatch = 0,\n  Dialect_selfClosing = 1;\n\n/* Hand-written tokenizers for HTML. */\n\nconst selfClosers = {\n  area: true, base: true, br: true, col: true, command: true,\n  embed: true, frame: true, hr: true, img: true, input: true,\n  keygen: true, link: true, meta: true, param: true, source: true,\n  track: true, wbr: true, menuitem: true\n};\n\nconst implicitlyClosed = {\n  dd: true, li: true, optgroup: true, option: true, p: true,\n  rp: true, rt: true, tbody: true, td: true, tfoot: true,\n  th: true, tr: true\n};\n\nconst closeOnOpen = {\n  dd: {dd: true, dt: true},\n  dt: {dd: true, dt: true},\n  li: {li: true},\n  option: {option: true, optgroup: true},\n  optgroup: {optgroup: true},\n  p: {\n    address: true, article: true, aside: true, blockquote: true, dir: true,\n    div: true, dl: true, fieldset: true, footer: true, form: true,\n    h1: true, h2: true, h3: true, h4: true, h5: true, h6: true,\n    header: true, hgroup: true, hr: true, menu: true, nav: true, ol: true,\n    p: true, pre: true, section: true, table: true, ul: true\n  },\n  rp: {rp: true, rt: true},\n  rt: {rp: true, rt: true},\n  tbody: {tbody: true, tfoot: true},\n  td: {td: true, th: true},\n  tfoot: {tbody: true},\n  th: {td: true, th: true},\n  thead: {tbody: true, tfoot: true},\n  tr: {tr: true}\n};\n\nfunction nameChar(ch) {\n  return ch == 45 || ch == 46 || ch == 58 || ch >= 65 && ch <= 90 || ch == 95 || ch >= 97 && ch <= 122 || ch >= 161\n}\n\nlet cachedName = null, cachedInput = null, cachedPos = 0;\nfunction tagNameAfter(input, offset) {\n  let pos = input.pos + offset;\n  if (cachedPos == pos && cachedInput == input) return cachedName\n  let next = input.peek(offset), name = \"\";\n  for (;;) {\n    if (!nameChar(next)) break\n    name += String.fromCharCode(next);\n    next = input.peek(++offset);\n  }\n  // Undefined to signal there's a <? or <!, null for just missing\n  cachedInput = input; cachedPos = pos;\n  return cachedName = name ? name.toLowerCase() : next == question || next == bang ? undefined : null\n}\n\nconst lessThan = 60, greaterThan = 62, slash = 47, question = 63, bang = 33, dash = 45;\n\nfunction ElementContext(name, parent) {\n  this.name = name;\n  this.parent = parent;\n}\n\nconst startTagTerms = [StartTag, StartSelfClosingTag, StartScriptTag, StartStyleTag, StartTextareaTag];\n\nconst elementContext = new ContextTracker({\n  start: null,\n  shift(context, term, stack, input) {\n    return startTagTerms.indexOf(term) > -1 ? new ElementContext(tagNameAfter(input, 1) || \"\", context) : context\n  },\n  reduce(context, term) {\n    return term == Element && context ? context.parent : context\n  },\n  reuse(context, node, stack, input) {\n    let type = node.type.id;\n    return type == StartTag || type == OpenTag\n      ? new ElementContext(tagNameAfter(input, 1) || \"\", context) : context\n  },\n  strict: false\n});\n\nconst tagStart = new ExternalTokenizer((input, stack) => {\n  if (input.next != lessThan) {\n    // End of file, close any open tags\n    if (input.next < 0 && stack.context) input.acceptToken(missingCloseTag);\n    return\n  }\n  input.advance();\n  let close = input.next == slash;\n  if (close) input.advance();\n  let name = tagNameAfter(input, 0);\n  if (name === undefined) return\n  if (!name) return input.acceptToken(close ? IncompleteCloseTag : IncompleteTag)\n\n  let parent = stack.context ? stack.context.name : null;\n  if (close) {\n    if (name == parent) return input.acceptToken(StartCloseTag)\n    if (parent && implicitlyClosed[parent]) return input.acceptToken(missingCloseTag, -2)\n    if (stack.dialectEnabled(Dialect_noMatch)) return input.acceptToken(NoMatchStartCloseTag)\n    for (let cx = stack.context; cx; cx = cx.parent) if (cx.name == name) return\n    input.acceptToken(MismatchedStartCloseTag);\n  } else {\n    if (name == \"script\") return input.acceptToken(StartScriptTag)\n    if (name == \"style\") return input.acceptToken(StartStyleTag)\n    if (name == \"textarea\") return input.acceptToken(StartTextareaTag)\n    if (selfClosers.hasOwnProperty(name)) return input.acceptToken(StartSelfClosingTag)\n    if (parent && closeOnOpen[parent] && closeOnOpen[parent][name]) input.acceptToken(missingCloseTag, -1);\n    else input.acceptToken(StartTag);\n  }\n}, {contextual: true});\n\nconst commentContent = new ExternalTokenizer(input => {\n  for (let dashes = 0, i = 0;; i++) {\n    if (input.next < 0) {\n      if (i) input.acceptToken(commentContent$1);\n      break\n    }\n    if (input.next == dash) {\n      dashes++;\n    } else if (input.next == greaterThan && dashes >= 2) {\n      if (i >= 3) input.acceptToken(commentContent$1, -2);\n      break\n    } else {\n      dashes = 0;\n    }\n    input.advance();\n  }\n});\n\nfunction inForeignElement(context) {\n  for (; context; context = context.parent)\n    if (context.name == \"svg\" || context.name == \"math\") return true\n  return false\n}\n\nconst endTag = new ExternalTokenizer((input, stack) => {\n  if (input.next == slash && input.peek(1) == greaterThan) {\n    let selfClosing = stack.dialectEnabled(Dialect_selfClosing) || inForeignElement(stack.context);\n    input.acceptToken(selfClosing ? SelfClosingEndTag : EndTag, 2);\n  } else if (input.next == greaterThan) {\n    input.acceptToken(EndTag, 1);\n  }\n});\n\nfunction contentTokenizer(tag, textToken, endToken) {\n  let lastState = 2 + tag.length;\n  return new ExternalTokenizer(input => {\n    // state means:\n    // - 0 nothing matched\n    // - 1 '<' matched\n    // - 2 '</'\n    // - 3-(1+tag.length) part of the tag matched\n    // - lastState whole tag + possibly whitespace matched\n    for (let state = 0, matchedLen = 0, i = 0;; i++) {\n      if (input.next < 0) {\n        if (i) input.acceptToken(textToken);\n        break\n      }\n      if (state == 0 && input.next == lessThan ||\n          state == 1 && input.next == slash ||\n          state >= 2 && state < lastState && input.next == tag.charCodeAt(state - 2)) {\n        state++;\n        matchedLen++;\n      } else if (state == lastState && input.next == greaterThan) {\n        if (i > matchedLen)\n          input.acceptToken(textToken, -matchedLen);\n        else\n          input.acceptToken(endToken, -(matchedLen - 2));\n        break\n      } else if ((input.next == 10 /* '\\n' */ || input.next == 13 /* '\\r' */) && i) {\n        input.acceptToken(textToken, 1);\n        break\n      } else {\n        state = matchedLen = 0;\n      }\n      input.advance();\n    }\n  })\n}\n\nconst scriptTokens = contentTokenizer(\"script\", scriptText, StartCloseScriptTag);\n\nconst styleTokens = contentTokenizer(\"style\", styleText, StartCloseStyleTag);\n\nconst textareaTokens = contentTokenizer(\"textarea\", textareaText, StartCloseTextareaTag);\n\nconst htmlHighlighting = styleTags({\n  \"Text RawText IncompleteTag IncompleteCloseTag\": tags.content,\n  \"StartTag StartCloseTag SelfClosingEndTag EndTag\": tags.angleBracket,\n  TagName: tags.tagName,\n  \"MismatchedCloseTag/TagName\": [tags.tagName,  tags.invalid],\n  AttributeName: tags.attributeName,\n  \"AttributeValue UnquotedAttributeValue\": tags.attributeValue,\n  Is: tags.definitionOperator,\n  \"EntityReference CharacterReference\": tags.character,\n  Comment: tags.blockComment,\n  ProcessingInst: tags.processingInstruction,\n  DoctypeDecl: tags.documentMeta\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \",xOVO!rOOO!ZQ#tO'#CrO!`Q#tO'#C{O!eQ#tO'#DOO!jQ#tO'#DRO!oQ#tO'#DTO!tOaO'#CqO#PObO'#CqO#[OdO'#CqO$kO!rO'#CqOOO`'#Cq'#CqO$rO$fO'#DUO$zQ#tO'#DWO%PQ#tO'#DXOOO`'#Dl'#DlOOO`'#DZ'#DZQVO!rOOO%UQ&rO,59^O%aQ&rO,59gO%lQ&rO,59jO%wQ&rO,59mO&SQ&rO,59oOOOa'#D_'#D_O&_OaO'#CyO&jOaO,59]OOOb'#D`'#D`O&rObO'#C|O&}ObO,59]OOOd'#Da'#DaO'VOdO'#DPO'bOdO,59]OOO`'#Db'#DbO'jO!rO,59]O'qQ#tO'#DSOOO`,59],59]OOOp'#Dc'#DcO'vO$fO,59pOOO`,59p,59pO(OQ#|O,59rO(TQ#|O,59sOOO`-E7X-E7XO(YQ&rO'#CtOOQW'#D['#D[O(hQ&rO1G.xOOOa1G.x1G.xOOO`1G/Z1G/ZO(sQ&rO1G/ROOOb1G/R1G/RO)OQ&rO1G/UOOOd1G/U1G/UO)ZQ&rO1G/XOOO`1G/X1G/XO)fQ&rO1G/ZOOOa-E7]-E7]O)qQ#tO'#CzOOO`1G.w1G.wOOOb-E7^-E7^O)vQ#tO'#C}OOOd-E7_-E7_O){Q#tO'#DQOOO`-E7`-E7`O*QQ#|O,59nOOOp-E7a-E7aOOO`1G/[1G/[OOO`1G/^1G/^OOO`1G/_1G/_O*VQ,UO,59`OOQW-E7Y-E7YOOOa7+$d7+$dOOO`7+$u7+$uOOOb7+$m7+$mOOOd7+$p7+$pOOO`7+$s7+$sO*bQ#|O,59fO*gQ#|O,59iO*lQ#|O,59lOOO`1G/Y1G/YO*qO7[O'#CwO+SOMhO'#CwOOQW1G.z1G.zOOO`1G/Q1G/QOOO`1G/T1G/TOOO`1G/W1G/WOOOO'#D]'#D]O+eO7[O,59cOOQW,59c,59cOOOO'#D^'#D^O+vOMhO,59cOOOO-E7Z-E7ZOOQW1G.}1G.}OOOO-E7[-E7[\",\n  stateData: \",c~O!_OS~OUSOVPOWQOXROYTO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O|_O!eZO~OgaO~OgbO~OgcO~OgdO~OgeO~O!XfOPmP![mP~O!YiOQpP![pP~O!ZlORsP![sP~OUSOVPOWQOXROYTOZqO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O!eZO~O![rO~P#gO!]sO!fuO~OgvO~OgwO~OS|OT}OiyO~OS!POT}OiyO~OS!ROT}OiyO~OS!TOT}OiyO~OS}OT}OiyO~O!XfOPmX![mX~OP!WO![!XO~O!YiOQpX![pX~OQ!ZO![!XO~O!ZlORsX![sX~OR!]O![!XO~O![!XO~P#gOg!_O~O!]sO!f!aO~OS!bO~OS!cO~Oj!dOShXThXihX~OS!fOT!gOiyO~OS!hOT!gOiyO~OS!iOT!gOiyO~OS!jOT!gOiyO~OS!gOT!gOiyO~Og!kO~Og!lO~Og!mO~OS!nO~Ol!qO!a!oO!c!pO~OS!rO~OS!sO~OS!tO~Ob!uOc!uOd!uO!a!wO!b!uO~Ob!xOc!xOd!xO!c!wO!d!xO~Ob!uOc!uOd!uO!a!{O!b!uO~Ob!xOc!xOd!xO!c!{O!d!xO~OT~cbd!ey|!e~\",\n  goto: \"%q!aPPPPPPPPPPPPPPPPPPPPP!b!hP!nPP!zP!}#Q#T#Z#^#a#g#j#m#s#y!bP!b!bP$P$V$m$s$y%P%V%]%cPPPPPPPP%iX^OX`pXUOX`pezabcde{!O!Q!S!UR!q!dRhUR!XhXVOX`pRkVR!XkXWOX`pRnWR!XnXXOX`pQrXR!XpXYOX`pQ`ORx`Q{aQ!ObQ!QcQ!SdQ!UeZ!e{!O!Q!S!UQ!v!oR!z!vQ!y!pR!|!yQgUR!VgQjVR!YjQmWR![mQpXR!^pQtZR!`tS_O`ToXp\",\n  nodeNames: \"⚠ StartCloseTag StartCloseTag StartCloseTag EndTag SelfClosingEndTag StartTag StartTag StartTag StartTag StartTag StartCloseTag StartCloseTag StartCloseTag IncompleteTag IncompleteCloseTag Document Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue ScriptText CloseTag OpenTag StyleText CloseTag OpenTag TextareaText CloseTag OpenTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag CloseTag DoctypeDecl\",\n  maxTerm: 68,\n  context: elementContext,\n  nodeProps: [\n    [\"closedBy\", -10,1,2,3,7,8,9,10,11,12,13,\"EndTag\",6,\"EndTag SelfClosingEndTag\",-4,22,31,34,37,\"CloseTag\"],\n    [\"openedBy\", 4,\"StartTag StartCloseTag\",5,\"StartTag\",-4,30,33,36,38,\"OpenTag\"],\n    [\"group\", -10,14,15,18,19,20,21,40,41,42,43,\"Entity\",17,\"Entity TextContent\",-3,29,32,35,\"TextContent Entity\"],\n    [\"isolate\", -11,22,30,31,33,34,36,37,38,39,42,43,\"ltr\",-3,27,28,40,\"\"]\n  ],\n  propSources: [htmlHighlighting],\n  skippedNodes: [0],\n  repeatNodeCount: 9,\n  tokenData: \"!<p!aR!YOX$qXY,QYZ,QZ[$q[]&X]^,Q^p$qpq,Qqr-_rs3_sv-_vw3}wxHYx}-_}!OH{!O!P-_!P!Q$q!Q![-_![!]Mz!]!^-_!^!_!$S!_!`!;x!`!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4U-_4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!Z$|caPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr$qrs&}sv$qvw+Pwx(tx!^$q!^!_*V!_!a&X!a#S$q#S#T&X#T;'S$q;'S;=`+z<%lO$q!R&bXaP!b`!dpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&Xq'UVaP!dpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}P'pTaPOv'kw!^'k!_;'S'k;'S;=`(P<%lO'kP(SP;=`<%l'kp([S!dpOv(Vx;'S(V;'S;=`(h<%lO(Vp(kP;=`<%l(Vq(qP;=`<%l&}a({WaP!b`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t`)jT!b`Or)esv)ew;'S)e;'S;=`)y<%lO)e`)|P;=`<%l)ea*SP;=`<%l(t!Q*^V!b`!dpOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!Q*vP;=`<%l*V!R*|P;=`<%l&XW+UYlWOX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+PW+wP;=`<%l+P!Z+}P;=`<%l$q!a,]`aP!b`!dp!_^OX&XXY,QYZ,QZ]&X]^,Q^p&Xpq,Qqr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!_-ljiSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q[/ebiSlWOX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+PS0rXiSqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0mS1bP;=`<%l0m[1hP;=`<%l/^!V1vciSaP!b`!dpOq&Xqr1krs&}sv1kvw0mwx(tx!P1k!P!Q&X!Q!^1k!^!_*V!_!a&X!a#s1k#s$f&X$f;'S1k;'S;=`3R<%l?Ah1k?Ah?BY&X?BY?Mn1k?MnO&X!V3UP;=`<%l1k!_3[P;=`<%l-_!Z3hV!ahaP!dpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}!_4WiiSlWd!ROX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst>]tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^/^!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!Z5zblWOX5uXZ7SZ[5u[^7S^p5uqr5urs7Sst+Ptw5uwx7Sx!]5u!]!^7w!^!a7S!a#S5u#S#T7S#T;'S5u;'S;=`8n<%lO5u!R7VVOp7Sqs7St!]7S!]!^7l!^;'S7S;'S;=`7q<%lO7S!R7qOb!R!R7tP;=`<%l7S!Z8OYlWb!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!Z8qP;=`<%l5u!_8{iiSlWOX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst/^tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^:j!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!_:sbiSlWb!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!V<QciSOp7Sqr;{rs7Sst0mtw;{wx7Sx!P;{!P!Q7S!Q!];{!]!^=]!^!a7S!a#s;{#s$f7S$f;'S;{;'S;=`>P<%l?Ah;{?Ah?BY7S?BY?Mn;{?MnO7S!V=dXiSb!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!V>SP;=`<%l;{!_>YP;=`<%l8t!_>dhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^/^!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!Z@TalWOX@OXZAYZ[@O[^AY^p@Oqr@OrsAYsw@OwxAYx!]@O!]!^Az!^!aAY!a#S@O#S#TAY#T;'S@O;'S;=`Bq<%lO@O!RA]UOpAYq!]AY!]!^Ao!^;'SAY;'S;=`At<%lOAY!RAtOc!R!RAwP;=`<%lAY!ZBRYlWc!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!ZBtP;=`<%l@O!_COhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^Dj!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!_DsbiSlWc!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VFQbiSOpAYqrE{rsAYswE{wxAYx!PE{!P!QAY!Q!]E{!]!^GY!^!aAY!a#sE{#s$fAY$f;'SE{;'S;=`G|<%l?AhE{?Ah?BYAY?BY?MnE{?MnOAY!VGaXiSc!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!VHPP;=`<%lE{!_HVP;=`<%lBw!ZHcW!cxaP!b`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t!aIYliSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OKQ!O!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!aK_kiSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!`&X!`!aMS!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!TM_XaP!b`!dp!fQOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!aNZ!ZiSgQaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OMz!O!PMz!P!Q$q!Q![Mz![!]Mz!]!^-_!^!_*V!_!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f$}-_$}%OMz%O%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4UMz4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Je-_$Je$JgMz$Jg$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!a!$PP;=`<%lMz!R!$ZY!b`!dpOq*Vqr!$yrs(Vsv*Vwx)ex!a*V!a!b!4t!b;'S*V;'S;=`*s<%lO*V!R!%Q]!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!%y!O!f*V!f!g!']!g#W*V#W#X!0`#X;'S*V;'S;=`*s<%lO*V!R!&QX!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!&m!O;'S*V;'S;=`*s<%lO*V!R!&vV!b`!dp!ePOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!'dX!b`!dpOr*Vrs(Vsv*Vwx)ex!q*V!q!r!(P!r;'S*V;'S;=`*s<%lO*V!R!(WX!b`!dpOr*Vrs(Vsv*Vwx)ex!e*V!e!f!(s!f;'S*V;'S;=`*s<%lO*V!R!(zX!b`!dpOr*Vrs(Vsv*Vwx)ex!v*V!v!w!)g!w;'S*V;'S;=`*s<%lO*V!R!)nX!b`!dpOr*Vrs(Vsv*Vwx)ex!{*V!{!|!*Z!|;'S*V;'S;=`*s<%lO*V!R!*bX!b`!dpOr*Vrs(Vsv*Vwx)ex!r*V!r!s!*}!s;'S*V;'S;=`*s<%lO*V!R!+UX!b`!dpOr*Vrs(Vsv*Vwx)ex!g*V!g!h!+q!h;'S*V;'S;=`*s<%lO*V!R!+xY!b`!dpOr!+qrs!,hsv!+qvw!-Swx!.[x!`!+q!`!a!/j!a;'S!+q;'S;=`!0Y<%lO!+qq!,mV!dpOv!,hvx!-Sx!`!,h!`!a!-q!a;'S!,h;'S;=`!.U<%lO!,hP!-VTO!`!-S!`!a!-f!a;'S!-S;'S;=`!-k<%lO!-SP!-kO|PP!-nP;=`<%l!-Sq!-xS!dp|POv(Vx;'S(V;'S;=`(h<%lO(Vq!.XP;=`<%l!,ha!.aX!b`Or!.[rs!-Ssv!.[vw!-Sw!`!.[!`!a!.|!a;'S!.[;'S;=`!/d<%lO!.[a!/TT!b`|POr)esv)ew;'S)e;'S;=`)y<%lO)ea!/gP;=`<%l!.[!R!/sV!b`!dp|POr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!0]P;=`<%l!+q!R!0gX!b`!dpOr*Vrs(Vsv*Vwx)ex#c*V#c#d!1S#d;'S*V;'S;=`*s<%lO*V!R!1ZX!b`!dpOr*Vrs(Vsv*Vwx)ex#V*V#V#W!1v#W;'S*V;'S;=`*s<%lO*V!R!1}X!b`!dpOr*Vrs(Vsv*Vwx)ex#h*V#h#i!2j#i;'S*V;'S;=`*s<%lO*V!R!2qX!b`!dpOr*Vrs(Vsv*Vwx)ex#m*V#m#n!3^#n;'S*V;'S;=`*s<%lO*V!R!3eX!b`!dpOr*Vrs(Vsv*Vwx)ex#d*V#d#e!4Q#e;'S*V;'S;=`*s<%lO*V!R!4XX!b`!dpOr*Vrs(Vsv*Vwx)ex#X*V#X#Y!+q#Y;'S*V;'S;=`*s<%lO*V!R!4{Y!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!a!4t!a!b!:]!b;'S!4t;'S;=`!;r<%lO!4tq!5pV!dpOv!5kvx!6Vx!a!5k!a!b!7W!b;'S!5k;'S;=`!8V<%lO!5kP!6YTO!a!6V!a!b!6i!b;'S!6V;'S;=`!7Q<%lO!6VP!6lTO!`!6V!`!a!6{!a;'S!6V;'S;=`!7Q<%lO!6VP!7QOyPP!7TP;=`<%l!6Vq!7]V!dpOv!5kvx!6Vx!`!5k!`!a!7r!a;'S!5k;'S;=`!8V<%lO!5kq!7yS!dpyPOv(Vx;'S(V;'S;=`(h<%lO(Vq!8YP;=`<%l!5ka!8bX!b`Or!8]rs!6Vsv!8]vw!6Vw!a!8]!a!b!8}!b;'S!8];'S;=`!:V<%lO!8]a!9SX!b`Or!8]rs!6Vsv!8]vw!6Vw!`!8]!`!a!9o!a;'S!8];'S;=`!:V<%lO!8]a!9vT!b`yPOr)esv)ew;'S)e;'S;=`)y<%lO)ea!:YP;=`<%l!8]!R!:dY!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!`!4t!`!a!;S!a;'S!4t;'S;=`!;r<%lO!4t!R!;]V!b`!dpyPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!;uP;=`<%l!4t!V!<TXjSaP!b`!dpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X\",\n  tokenizers: [scriptTokens, styleTokens, textareaTokens, endTag, tagStart, commentContent, 0, 1, 2, 3, 4, 5],\n  topRules: {\"Document\":[0,16]},\n  dialects: {noMatch: 0, selfClosing: 515},\n  tokenPrec: 517\n});\n\nfunction getAttrs(openTag, input) {\n  let attrs = Object.create(null);\n  for (let att of openTag.getChildren(Attribute)) {\n    let name = att.getChild(AttributeName), value = att.getChild(AttributeValue) || att.getChild(UnquotedAttributeValue);\n    if (name) attrs[input.read(name.from, name.to)] =\n      !value ? \"\" : value.type.id == AttributeValue ? input.read(value.from + 1, value.to - 1) : input.read(value.from, value.to);\n  }\n  return attrs\n}\n\nfunction findTagName(openTag, input) {\n  let tagNameNode = openTag.getChild(TagName);\n  return tagNameNode ? input.read(tagNameNode.from, tagNameNode.to) : \" \"\n}\n\nfunction maybeNest(node, input, tags) {\n  let attrs;\n  for (let tag of tags) {\n    if (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(node.node.parent.firstChild, input))))\n      return {parser: tag.parser}\n  }\n  return null\n}\n\n// tags?: {\n//   tag: string,\n//   attrs?: ({[attr: string]: string}) => boolean,\n//   parser: Parser\n// }[]\n// attributes?: {\n//   name: string,\n//   tagName?: string,\n//   parser: Parser\n// }[]\n \nfunction configureNesting(tags = [], attributes = []) {\n  let script = [], style = [], textarea = [], other = [];\n  for (let tag of tags) {\n    let array = tag.tag == \"script\" ? script : tag.tag == \"style\" ? style : tag.tag == \"textarea\" ? textarea : other;\n    array.push(tag);\n  }\n  let attrs = attributes.length ? Object.create(null) : null;\n  for (let attr of attributes) (attrs[attr.name] || (attrs[attr.name] = [])).push(attr);\n\n  return parseMixed((node, input) => {\n    let id = node.type.id;\n    if (id == ScriptText) return maybeNest(node, input, script)\n    if (id == StyleText) return maybeNest(node, input, style)\n    if (id == TextareaText) return maybeNest(node, input, textarea)\n\n    if (id == Element && other.length) {\n      let n = node.node, open = n.firstChild, tagName = open && findTagName(open, input), attrs;\n      if (tagName) for (let tag of other) {\n        if (tag.tag == tagName && (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(open, input))))) {\n          let close = n.lastChild;\n          let to = close.type.id == CloseTag ? close.from : n.to;\n          if (to > open.to)\n            return {parser: tag.parser, overlay: [{from: open.to, to}]}\n        }\n      }\n    }\n\n    if (attrs && id == Attribute) {\n      let n = node.node, nameNode;\n      if (nameNode = n.firstChild) {\n        let matches = attrs[input.read(nameNode.from, nameNode.to)];\n        if (matches) for (let attr of matches) {\n          if (attr.tagName && attr.tagName != findTagName(n.parent, input)) continue\n          let value = n.lastChild;\n          if (value.type.id == AttributeValue) {\n            let from = value.from + 1;\n            let last = value.lastChild, to = value.to - (last && last.isError ? 0 : 1);\n            if (to > from) return {parser: attr.parser, overlay: [{from, to}]}\n          } else if (value.type.id == UnquotedAttributeValue) {\n            return {parser: attr.parser, overlay: [{from: value.from, to: value.to}]}\n          }\n        }\n      }\n    }\n    return null\n  })\n}\n\nexport { configureNesting, parser };\n","import { ExternalTokenizer, LRParser, LocalTokenGroup } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst descendantOp = 122,\n  Unit = 1,\n  identifier = 123,\n  callee = 124,\n  VariableName = 2,\n  queryIdentifier = 125,\n  queryVariableName = 3,\n  QueryCallee = 4;\n\n/* Hand-written tokenizers for CSS tokens that can't be\n   expressed by Lezer's built-in tokenizer. */\n\nconst space = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197,\n               8198, 8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288];\nconst colon = 58, parenL = 40, underscore = 95, bracketL = 91, dash = 45, period = 46,\n      hash = 35, percent = 37, ampersand = 38, backslash = 92, newline = 10, asterisk = 42;\n\nfunction isAlpha(ch) { return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch >= 161 }\n\nfunction isDigit(ch) { return ch >= 48 && ch <= 57 }\n\nfunction isHex(ch) { return isDigit(ch) || ch >= 97 && ch <= 102 || ch >= 65 && ch <= 70 }\n\nconst identifierTokens = (id, varName, callee) => (input, stack) => {\n  for (let inside = false, dashes = 0, i = 0;; i++) {\n    let {next} = input;\n    if (isAlpha(next) || next == dash || next == underscore || (inside && isDigit(next))) {\n      if (!inside && (next != dash || i > 0)) inside = true;\n      if (dashes === i && next == dash) dashes++;\n      input.advance();\n    } else if (next == backslash && input.peek(1) != newline) {\n      input.advance();\n      if (isHex(input.next)) {\n        do { input.advance(); } while (isHex(input.next))\n        if (input.next == 32) input.advance();\n      } else if (input.next > -1) {\n        input.advance();\n      }\n      inside = true;\n    } else {\n      if (inside) input.acceptToken(\n        dashes == 2 && stack.canShift(VariableName) ? varName : next == parenL ? callee : id\n      );\n      break\n    }\n  }\n};\n\nconst identifiers = new ExternalTokenizer(\n  identifierTokens(identifier, VariableName, callee)\n);\nconst queryIdentifiers = new ExternalTokenizer(\n  identifierTokens(queryIdentifier, queryVariableName, QueryCallee)\n);\n\nconst descendant = new ExternalTokenizer(input => {\n  if (space.includes(input.peek(-1))) {\n    let {next} = input;\n    if (isAlpha(next) || next == underscore || next == hash || next == period ||\n        next == asterisk || next == bracketL || next == colon && isAlpha(input.peek(1)) ||\n        next == dash || next == ampersand)\n      input.acceptToken(descendantOp);\n  }\n});\n\nconst unitToken = new ExternalTokenizer(input => {\n  if (!space.includes(input.peek(-1))) {\n    let {next} = input;\n    if (next == percent) { input.advance(); input.acceptToken(Unit); }\n    if (isAlpha(next)) {\n      do { input.advance(); } while (isAlpha(input.next) || isDigit(input.next))\n      input.acceptToken(Unit);\n    }\n  }\n});\n\nconst cssHighlighting = styleTags({\n  \"AtKeyword import charset namespace keyframes media supports\": tags.definitionKeyword,\n  \"from to selector\": tags.keyword,\n  NamespaceName: tags.namespace,\n  KeyframeName: tags.labelName,\n  KeyframeRangeName: tags.operatorKeyword,\n  TagName: tags.tagName,\n  ClassName: tags.className,\n  PseudoClassName: tags.constant(tags.className),\n  IdName: tags.labelName,\n  \"FeatureName PropertyName\": tags.propertyName,\n  AttributeName: tags.attributeName,\n  NumberLiteral: tags.number,\n  KeywordQuery: tags.keyword,\n  UnaryQueryOp: tags.operatorKeyword,\n  \"CallTag ValueName\": tags.atom,\n  VariableName: tags.variableName,\n  Callee: tags.operatorKeyword,\n  Unit: tags.unit,\n  \"UniversalSelector NestingSelector\": tags.definitionOperator,\n  \"MatchOp CompareOp\": tags.compareOperator,\n  \"ChildOp SiblingOp, LogicOp\": tags.logicOperator,\n  BinOp: tags.arithmeticOperator,\n  Important: tags.modifier,\n  Comment: tags.blockComment,\n  ColorLiteral: tags.color,\n  \"ParenthesizedContent StringLiteral\": tags.string,\n  \":\": tags.punctuation,\n  \"PseudoOp #\": tags.derefOperator,\n  \"; ,\": tags.separator,\n  \"( )\": tags.paren,\n  \"[ ]\": tags.squareBracket,\n  \"{ }\": tags.brace\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_callee = {__proto__:null,lang:38, \"nth-child\":38, \"nth-last-child\":38, \"nth-of-type\":38, \"nth-last-of-type\":38, dir:38, \"host-context\":38, if:84, url:124, \"url-prefix\":124, domain:124, regexp:124};\nconst spec_queryIdentifier = {__proto__:null,or:98, and:98, not:106, only:106, layer:170};\nconst spec_QueryCallee = {__proto__:null,selector:112, layer:166};\nconst spec_AtKeyword = {__proto__:null,\"@import\":162, \"@media\":174, \"@charset\":178, \"@namespace\":182, \"@keyframes\":188, \"@supports\":200, \"@scope\":204};\nconst spec_identifier = {__proto__:null,to:207};\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"EbQYQdOOO#qQdOOP#xO`OOOOQP'#Cf'#CfOOQP'#Ce'#CeO#}QdO'#ChO$nQaO'#CcO$xQdO'#CkO%TQdO'#DpO%YQdO'#DrO%_QdO'#DuO%_QdO'#DxOOQP'#FV'#FVO&eQhO'#EhOOQS'#FU'#FUOOQS'#Ek'#EkQYQdOOO&lQdO'#EOO&PQhO'#EUO&lQdO'#EWO'aQdO'#EYO'lQdO'#E]O'tQhO'#EcO(VQdO'#EeO(bQaO'#CfO)VQ`O'#D{O)[Q`O'#F`O)gQdO'#F`QOQ`OOP)qO&jO'#CaPOOO)C@t)C@tOOQP'#Cj'#CjOOQP,59S,59SO#}QdO,59SO)|QdO,59VO%TQdO,5:[O%YQdO,5:^O%_QdO,5:aO%_QdO,5:cO%_QdO,5:dO%_QdO'#ErO*XQ`O,58}O*aQdO'#DzOOQS,58},58}OOQP'#Cn'#CnOOQO'#Dn'#DnOOQP,59V,59VO*hQ`O,59VO*mQ`O,59VOOQP'#Dq'#DqOOQP,5:[,5:[OOQO'#Ds'#DsO*rQpO,5:^O+]QaO,5:aO+sQaO,5:dOOQW'#DZ'#DZO,ZQhO'#DdO,xQhO'#FaO'tQhO'#DbO-WQ`O'#DhOOQW'#F['#F[O-]Q`O,5;SO-eQ`O'#DeOOQS-E8i-E8iOOQ['#Cs'#CsO-jQdO'#CtO.QQdO'#CzO.hQdO'#C}O/OQ!pO'#DPO1RQ!jO,5:jOOQO'#DU'#DUO*mQ`O'#DTO1cQ!nO'#FXO3`Q`O'#DVO3eQ`O'#DkOOQ['#FX'#FXO-`Q`O,5:pO3jQ!bO,5:rOOQS'#E['#E[O3rQ`O,5:tO3wQdO,5:tOOQO'#E_'#E_O4PQ`O,5:wO4UQhO,5:}O%_QdO'#DgOOQS,5;P,5;PO-eQ`O,5;PO4^QdO,5;PO4fQdO,5:gO4vQdO'#EtO5TQ`O,5;zO5TQ`O,5;zPOOO'#Ej'#EjP5`O&jO,58{POOO,58{,58{OOQP1G.n1G.nOOQP1G.q1G.qO*hQ`O1G.qO*mQ`O1G.qOOQP1G/v1G/vO5kQpO1G/xO5sQaO1G/{O6ZQaO1G/}O6qQaO1G0OO7XQaO,5;^OOQO-E8p-E8pOOQS1G.i1G.iO7cQ`O,5:fO7hQdO'#DoO7oQdO'#CrOOQP1G/x1G/xO&lQdO1G/xO7vQ!jO'#DZO8UQ!bO,59vO8^QhO,5:OOOQO'#F]'#F]O8XQ!bO,59zO'tQhO,59xO8fQhO'#EvO8sQ`O,5;{O9OQhO,59|O9uQhO'#DiOOQW,5:S,5:SOOQS1G0n1G0nOOQW,5:P,5:PO9|Q!fO'#FYOOQS'#FY'#FYOOQS'#Em'#EmO;^QdO,59`OOQ[,59`,59`O;tQdO,59fOOQ[,59f,59fO<[QdO,59iOOQ[,59i,59iOOQ[,59k,59kO&lQdO,59mO<rQhO'#EQOOQW'#EQ'#EQO=WQ`O1G0UO1[QhO1G0UOOQ[,59o,59oO'tQhO'#DXOOQ[,59q,59qO=]Q#tO,5:VOOQS1G0[1G0[OOQS1G0^1G0^OOQS1G0`1G0`O=hQ`O1G0`O=mQdO'#E`OOQS1G0c1G0cOOQS1G0i1G0iO=xQaO,5:RO-`Q`O1G0kOOQS1G0k1G0kO-eQ`O1G0kO>PQ!fO1G0ROOQO1G0R1G0ROOQO,5;`,5;`O>gQdO,5;`OOQO-E8r-E8rO>tQ`O1G1fPOOO-E8h-E8hPOOO1G.g1G.gOOQP7+$]7+$]OOQP7+%d7+%dO&lQdO7+%dOOQS1G0Q1G0QO?PQaO'#F_O?ZQ`O,5:ZO?`Q!fO'#ElO@^QdO'#FWO@hQ`O,59^O@mQ!bO7+%dO&lQdO1G/bO@uQhO1G/fOOQW1G/j1G/jOOQW1G/d1G/dOAWQhO,5;bOOQO-E8t-E8tOAfQhO'#DZOAtQhO'#F^OBPQ`O'#F^OBUQ`O,5:TOOQS-E8k-E8kOOQ[1G.z1G.zOOQ[1G/Q1G/QOOQ[1G/T1G/TOOQ[1G/X1G/XOBZQdO,5:lOOQS7+%p7+%pOB`Q`O7+%pOBeQhO'#DYOBmQ`O,59sO'tQhO,59sOOQ[1G/q1G/qOBuQ`O1G/qOOQS7+%z7+%zOBzQbO'#DPOOQO'#Eb'#EbOCYQ`O'#EaOOQO'#Ea'#EaOCeQ`O'#EwOCmQdO,5:zOOQS,5:z,5:zOOQ[1G/m1G/mOOQS7+&V7+&VO-`Q`O7+&VOCxQ!fO'#EsO&lQdO'#EsOEPQdO7+%mOOQO7+%m7+%mOOQO1G0z1G0zOEdQ!bO<<IOOElQdO'#EqOEvQ`O,5;yOOQP1G/u1G/uOOQS-E8j-E8jOFOQdO'#EpOFYQ`O,5;rOOQ]1G.x1G.xOOQP<<IO<<IOOFbQdO7+$|OOQO'#D]'#D]OFiQ!bO7+%QOFqQhO'#EoOF{Q`O,5;xO&lQdO,5;xOOQW1G/o1G/oOOQO'#ES'#ESOGTQ`O1G0WOOQS<<I[<<I[O&lQdO,59tOGnQhO1G/_OOQ[1G/_1G/_OGuQ`O1G/_OOQW-E8l-E8lOOQ[7+%]7+%]OOQO,5:{,5:{O=pQdO'#ExOCeQ`O,5;cOOQS,5;c,5;cOOQS-E8u-E8uOOQS1G0f1G0fOOQS<<Iq<<IqOG}Q!fO,5;_OOQS-E8q-E8qOOQO<<IX<<IXOOQPAN>jAN>jOIUQaO,5;]OOQO-E8o-E8oOI`QdO,5;[OOQO-E8n-E8nOOQW<<Hh<<HhOOQW<<Hl<<HlOIjQhO<<HlOI{QhO,5;ZOJWQ`O,5;ZOOQO-E8m-E8mOJ]QdO1G1dOBZQdO'#EuOJgQ`O7+%rOOQW7+%r7+%rOJoQ!bO1G/`OOQ[7+$y7+$yOJzQhO7+$yPKRQ`O'#EnOOQO,5;d,5;dOOQO-E8v-E8vOOQS1G0}1G0}OKWQ`OAN>WO&lQdO1G0uOK]Q`O7+'OOOQO,5;a,5;aOOQO-E8s-E8sOOQW<<I^<<I^OOQ[<<He<<HePOQW,5;Y,5;YOOQWG23rG23rOKeQdO7+&a\",\n  stateData: \"Kx~O#sOS#tQQ~OW[OZ[O]TO`VOaVOi]OjWOmXO!jYO!mZO!saO!ybO!{cO!}dO#QeO#WfO#YgO#oRO~OQiOW[OZ[O]TO`VOaVOi]OjWOmXO!jYO!mZO!saO!ybO!{cO!}dO#QeO#WfO#YgO#ohO~O#m$SP~P!dO#tmO~O#ooO~O]qO`rOarOjsOmtO!juO!mwO#nvO~OpzO!^xO~P$SOc!QO#o|O#p}O~O#o!RO~O#o!TO~OW[OZ[O]TO`VOaVOjWOmXO!jYO!mZO#oRO~OS!]Oe!YO!V![O!Y!`O#q!XOp$TP~Ok$TP~P&POQ!jOe!cOm!dOp!eOr!mOt!mOz!kO!`!lO#o!bO#p!hO#}!fO~Ot!qO!`!lO#o!pO~Ot!sO#o!sO~OS!]Oe!YO!V![O!Y!`O#q!XO~Oe!vOpzO#Z!xO~O]YX`YX`!pXaYXjYXmYXpYX!^YX!jYX!mYX#nYX~O`!zO~Ok!{O#m$SXo$SX~O#m$SXo$SX~P!dO#u#OO#v#OO#w#QO~Oc#UO#o|O#p}O~OpzO!^xO~Oo$SP~P!dOe#`O~Oe#aO~Ol#bO!h#cO~O]qO`rOarOjsOmtO~Op!ia!^!ia!j!ia!m!ia#n!iad!ia~P*zOp!la!^!la!j!la!m!la#n!lad!la~P*zOR#gOS!]Oe!YOr#gOt#gO!V![O!Y!`O#q#dO#}!fO~O!R#iO!^#jOk$TXp$TX~Oe#mO~Ok#oOpzO~Oe!vO~O]#rO`#rOd#uOi#rOj#rOk#rO~P&lO]#rO`#rOi#rOj#rOk#rOl#wO~P&lO]#rO`#rOi#rOj#rOk#rOo#yO~P&lOP#zOSsXesXksXvsX!VsX!YsX!usX!wsX#qsX!TsXQsX]sX`sXdsXisXjsXmsXpsXrsXtsXzsX!`sX#osX#psX#}sXlsXosX!^sX!qsX#msX~Ov#{O!u#|O!w#}Ok$TP~P'tOe#aOS#{Xk#{Xv#{X!V#{X!Y#{X!u#{X!w#{X#q#{XQ#{X]#{X`#{Xd#{Xi#{Xj#{Xm#{Xp#{Xr#{Xt#{Xz#{X!`#{X#o#{X#p#{X#}#{Xl#{Xo#{X!^#{X!q#{X#m#{X~Oe$RO~Oe$TO~Ok$VOv#{O~Ok$WO~Ot$XO!`!lO~Op$YO~OpzO!R#iO~OpzO#Z$`O~O!q$bOk!oa#m!oao!oa~P&lOk#hX#m#hXo#hX~P!dOk!{O#m$Sao$Sa~O#u#OO#v#OO#w$hO~Ol$jO!h$kO~Op!ii!^!ii!j!ii!m!ii#n!iid!ii~P*zOp!ki!^!ki!j!ki!m!ki#n!kid!ki~P*zOp!li!^!li!j!li!m!li#n!lid!li~P*zOp#fa!^#fa~P$SOo$lO~Od$RP~P%_Od#zP~P&lO`!PXd}X!R}X!T!PX~O`$sO!T$tO~Od$uO!R#iO~Ok#jXp#jX!^#jX~P'tO!^#jOk$Tap$Ta~O!R#iOk!Uap!Ua!^!Uad!Ua`!Ua~OS!]Oe!YO!V![O!Y!`O#q$yO~Od$QP~P9dOv#{OQ#|X]#|X`#|Xd#|Xe#|Xi#|Xj#|Xk#|Xm#|Xp#|Xr#|Xt#|Xz#|X!`#|X#o#|X#p#|X#}#|Xl#|Xo#|X~O]#rO`#rOd%OOi#rOj#rOk#rO~P&lO]#rO`#rOi#rOj#rOk#rOl%PO~P&lO]#rO`#rOi#rOj#rOk#rOo%QO~P&lOe%SOS!tXk!tX!V!tX!Y!tX#q!tX~Ok%TO~Od%YOt%ZO!a%ZO~Ok%[O~Oo%cO#o%^O#}%]O~Od%dO~P$SOv#{O!^%hO!q%jOk!oi#m!oio!oi~P&lOk#ha#m#hao#ha~P!dOk!{O#m$Sio$Si~O!^%mOd$RX~P$SOd%oO~Ov#{OQ#`Xd#`Xe#`Xm#`Xp#`Xr#`Xt#`Xz#`X!^#`X!`#`X#o#`X#p#`X#}#`X~O!^%qOd#zX~P&lOd%sO~Ol%tOv#{O~OR#gOr#gOt#gO#q%vO#}!fO~O!R#iOk#jap#ja!^#ja~O`!PXd}X!R}X!^}X~O!R#iO!^%xOd$QX~O`%zO~Od%{O~O#o%|O~Ok&OO~O`&PO!R#iO~Od&ROk&QO~Od&UO~OP#zOpsX!^sXdsX~O#}%]Op#TX!^#TX~OpzO!^&WO~Oo&[O#o%^O#}%]O~Ov#{OQ#gXe#gXk#gXm#gXp#gXr#gXt#gXz#gX!^#gX!`#gX!q#gX#m#gX#o#gX#p#gX#}#gXo#gX~O!^%hO!q&`Ok!oq#m!oqo!oq~P&lOl&aOv#{O~Od#eX!^#eX~P%_O!^%mOd$Ra~Od#dX!^#dX~P&lO!^%qOd#za~Od&fO~P&lOd&gO!T&hO~Od#cX!^#cX~P9dO!^%xOd$Qa~O]&mOd&oO~OS#bae#ba!V#ba!Y#ba#q#ba~Od&qO~PG]Od&qOk&rO~Ov#{OQ#gae#gak#gam#gap#gar#gat#gaz#ga!^#ga!`#ga!q#ga#m#ga#o#ga#p#ga#}#gao#ga~Od#ea!^#ea~P$SOd#da!^#da~P&lOR#gOr#gOt#gO#q%vO#}%]O~O!R#iOd#ca!^#ca~O`&xO~O!^%xOd$Qi~P&lO]&mOd&|O~Ov#{Od|ik|i~Od&}O~PG]Ok'OO~Od'PO~O!^%xOd$Qq~Od#cq!^#cq~P&lO#s!a#t#}]#}v!m~\",\n  goto: \"2h$UPPPPP$VP$YP$c$uP$cP%X$cPP%_PPP%e%o%oPPPPP%oPP%oP&]P%oP%o'W%oP't'w'}'}(^'}P'}P'}P'}'}P(m'}(yP(|PP)p)v$c)|$c*SP$cP$c$cP*Y*{+YP$YP+aP+dP$YP$YP$YP+j$YP+m+p+s+z$YP$YPP$YP,P,V,f,|-[-b-l-r-x.O.U.`.f.l.rPPPPPPPPPPP.x/R/w/z0|P1U1u2O2R2U2[RnQ_^OP`kz!{$dq[OPYZ`kuvwxz!v!{#`$d%mqSOPYZ`kuvwxz!v!{#`$d%mQpTR#RqQ!OVR#SrQ#S!QS$Q!i!jR$i#U!V!mac!c!d!e!z#a#c#t#v#x#{$a$k$p$s%h%i%q%u%z&P&d&l&x'Q!U!mac!c!d!e!z#a#c#t#v#x#{$a$k$p$s%h%i%q%u%z&P&d&l&x'QU#g!Y$t&hU%`$Y%b&WR&V%_!V!iac!c!d!e!z#a#c#t#v#x#{$a$k$p$s%h%i%q%u%z&P&d&l&x'QR$S!kQ%W$RR&S%Xk!^]bf!Y![!g#i#j#m$P$R%X%xQ#e!YQ${#mQ%w$tQ&j%xR&w&hQ!ygQ#p!`Q$^!xR%f$`R#n!]!U!mac!c!d!e!z#a#c#t#v#x#{$a$k$p$s%h%i%q%u%z&P&d&l&x'QQ!qdR$X!rQ!PVR#TrQ#S!PR$i#TQ!SWR#VsQ!UXR#WtQ{UQ!wgQ#^yQ#o!_Q$U!nQ$[!uQ$_!yQ%e$^Q&Y%aQ&]%fR&v&XSjPzQ!}kQ$c!{R%k$dZiPkz!{$dR$P!gQ%}%SR&z&mR!rdR!teR$Z!tS%a$Y%bR&t&WV%_$Y%b&WQ#PmR$g#PQ`OSkPzU!a`k$dR$d!{Q$p#aY%p$p%u&d&l'QQ%u$sQ&d%qQ&l%zR'Q&xQ#t!cQ#v!dQ#x!eV$}#t#v#xQ%X$RR&T%XQ%y$zS&k%y&yR&y&lQ%r$pR&e%rQ%n$mR&c%nQyUR#]yQ%i$aR&_%iQ!|jS$e!|$fR$f!}Q&n%}R&{&nQ#k!ZR$x#kQ%b$YR&Z%bQ&X%aR&u&X__OP`kz!{$d^UOP`kz!{$dQ!VYQ!WZQ#XuQ#YvQ#ZwQ#[xQ$]!vQ$m#`R&b%mR$q#aQ!gaQ!oc[#q!c!d!e#t#v#xQ$a!zd$o#a$p$s%q%u%z&d&l&x'QQ$r#cQ%R#{S%g$a%iQ%l$kQ&^%hR&p&P]#s!c!d!e#t#v#xW!Z]b!g$PQ!ufQ#f!YQ#l![Q$v#iQ$w#jQ$z#mS%V$R%XR&i%xQ#h!YQ%w$tR&w&hR$|#mR$n#`QlPR#_zQ!_]Q!nbQ$O!gR%U$P\",\n  nodeNames: \"⚠ Unit VariableName VariableName QueryCallee Comment StyleSheet RuleSet UniversalSelector TagSelector TagName NestingSelector ClassSelector . ClassName PseudoClassSelector : :: PseudoClassName PseudoClassName ) ( ArgList ValueName ParenthesizedValue AtKeyword # ; ] [ BracketedValue } { BracedValue ColorLiteral NumberLiteral StringLiteral BinaryExpression BinOp CallExpression Callee IfExpression if ArgList IfBranch KeywordQuery FeatureQuery FeatureName BinaryQuery LogicOp ComparisonQuery CompareOp UnaryQuery UnaryQueryOp ParenthesizedQuery SelectorQuery selector ParenthesizedSelector CallQuery ArgList , CallLiteral CallTag ParenthesizedContent PseudoClassName ArgList IdSelector IdName AttributeSelector AttributeName MatchOp ChildSelector ChildOp DescendantSelector SiblingSelector SiblingOp Block Declaration PropertyName Important ImportStatement import Layer layer LayerName layer MediaStatement media CharsetStatement charset NamespaceStatement namespace NamespaceName KeyframesStatement keyframes KeyframeName KeyframeList KeyframeSelector KeyframeRangeName SupportsStatement supports ScopeStatement scope to AtRule Styles\",\n  maxTerm: 143,\n  nodeProps: [\n    [\"isolate\", -2,5,36,\"\"],\n    [\"openedBy\", 20,\"(\",28,\"[\",31,\"{\"],\n    [\"closedBy\", 21,\")\",29,\"]\",32,\"}\"]\n  ],\n  propSources: [cssHighlighting],\n  skippedNodes: [0,5,106],\n  repeatNodeCount: 15,\n  tokenData: \"JQ~R!YOX$qX^%i^p$qpq%iqr({rs-ust/itu6Wuv$qvw7Qwx7cxy9Qyz9cz{9h{|:R|}>t}!O?V!O!P?t!P!Q@]!Q![AU![!]BP!]!^B{!^!_C^!_!`DY!`!aDm!a!b$q!b!cEn!c!}$q!}#OG{#O#P$q#P#QH^#Q#R6W#R#o$q#o#pHo#p#q6W#q#rIQ#r#sIc#s#y$q#y#z%i#z$f$q$f$g%i$g#BY$q#BY#BZ%i#BZ$IS$q$IS$I_%i$I_$I|$q$I|$JO%i$JO$JT$q$JT$JU%i$JU$KV$q$KV$KW%i$KW&FU$q&FU&FV%i&FV;'S$q;'S;=`Iz<%lO$q`$tSOy%Qz;'S%Q;'S;=`%c<%lO%Q`%VS!a`Oy%Qz;'S%Q;'S;=`%c<%lO%Q`%fP;=`<%l%Q~%nh#s~OX%QX^'Y^p%Qpq'Yqy%Qz#y%Q#y#z'Y#z$f%Q$f$g'Y$g#BY%Q#BY#BZ'Y#BZ$IS%Q$IS$I_'Y$I_$I|%Q$I|$JO'Y$JO$JT%Q$JT$JU'Y$JU$KV%Q$KV$KW'Y$KW&FU%Q&FU&FV'Y&FV;'S%Q;'S;=`%c<%lO%Q~'ah#s~!a`OX%QX^'Y^p%Qpq'Yqy%Qz#y%Q#y#z'Y#z$f%Q$f$g'Y$g#BY%Q#BY#BZ'Y#BZ$IS%Q$IS$I_'Y$I_$I|%Q$I|$JO'Y$JO$JT%Q$JT$JU'Y$JU$KV%Q$KV$KW'Y$KW&FU%Q&FU&FV'Y&FV;'S%Q;'S;=`%c<%lO%Qj)OUOy%Qz#]%Q#]#^)b#^;'S%Q;'S;=`%c<%lO%Qj)gU!a`Oy%Qz#a%Q#a#b)y#b;'S%Q;'S;=`%c<%lO%Qj*OU!a`Oy%Qz#d%Q#d#e*b#e;'S%Q;'S;=`%c<%lO%Qj*gU!a`Oy%Qz#c%Q#c#d*y#d;'S%Q;'S;=`%c<%lO%Qj+OU!a`Oy%Qz#f%Q#f#g+b#g;'S%Q;'S;=`%c<%lO%Qj+gU!a`Oy%Qz#h%Q#h#i+y#i;'S%Q;'S;=`%c<%lO%Qj,OU!a`Oy%Qz#T%Q#T#U,b#U;'S%Q;'S;=`%c<%lO%Qj,gU!a`Oy%Qz#b%Q#b#c,y#c;'S%Q;'S;=`%c<%lO%Qj-OU!a`Oy%Qz#h%Q#h#i-b#i;'S%Q;'S;=`%c<%lO%Qj-iS!qY!a`Oy%Qz;'S%Q;'S;=`%c<%lO%Q~-xWOY-uZr-urs.bs#O-u#O#P.g#P;'S-u;'S;=`/c<%lO-u~.gOt~~.jRO;'S-u;'S;=`.s;=`O-u~.vXOY-uZr-urs.bs#O-u#O#P.g#P;'S-u;'S;=`/c;=`<%l-u<%lO-u~/fP;=`<%l-uj/nYjYOy%Qz!Q%Q!Q![0^![!c%Q!c!i0^!i#T%Q#T#Z0^#Z;'S%Q;'S;=`%c<%lO%Qj0cY!a`Oy%Qz!Q%Q!Q![1R![!c%Q!c!i1R!i#T%Q#T#Z1R#Z;'S%Q;'S;=`%c<%lO%Qj1WY!a`Oy%Qz!Q%Q!Q![1v![!c%Q!c!i1v!i#T%Q#T#Z1v#Z;'S%Q;'S;=`%c<%lO%Qj1}YrY!a`Oy%Qz!Q%Q!Q![2m![!c%Q!c!i2m!i#T%Q#T#Z2m#Z;'S%Q;'S;=`%c<%lO%Qj2tYrY!a`Oy%Qz!Q%Q!Q![3d![!c%Q!c!i3d!i#T%Q#T#Z3d#Z;'S%Q;'S;=`%c<%lO%Qj3iY!a`Oy%Qz!Q%Q!Q![4X![!c%Q!c!i4X!i#T%Q#T#Z4X#Z;'S%Q;'S;=`%c<%lO%Qj4`YrY!a`Oy%Qz!Q%Q!Q![5O![!c%Q!c!i5O!i#T%Q#T#Z5O#Z;'S%Q;'S;=`%c<%lO%Qj5TY!a`Oy%Qz!Q%Q!Q![5s![!c%Q!c!i5s!i#T%Q#T#Z5s#Z;'S%Q;'S;=`%c<%lO%Qj5zSrY!a`Oy%Qz;'S%Q;'S;=`%c<%lO%Qd6ZUOy%Qz!_%Q!_!`6m!`;'S%Q;'S;=`%c<%lO%Qd6tS!hS!a`Oy%Qz;'S%Q;'S;=`%c<%lO%Qb7VSZQOy%Qz;'S%Q;'S;=`%c<%lO%Q~7fWOY7cZw7cwx.bx#O7c#O#P8O#P;'S7c;'S;=`8z<%lO7c~8RRO;'S7c;'S;=`8[;=`O7c~8_XOY7cZw7cwx.bx#O7c#O#P8O#P;'S7c;'S;=`8z;=`<%l7c<%lO7c~8}P;=`<%l7cj9VSeYOy%Qz;'S%Q;'S;=`%c<%lO%Q~9hOd~n9oUWQvWOy%Qz!_%Q!_!`6m!`;'S%Q;'S;=`%c<%lO%Qj:YWvW!mQOy%Qz!O%Q!O!P:r!P!Q%Q!Q![=w![;'S%Q;'S;=`%c<%lO%Qj:wU!a`Oy%Qz!Q%Q!Q![;Z![;'S%Q;'S;=`%c<%lO%Qj;bY!a`#}YOy%Qz!Q%Q!Q![;Z![!g%Q!g!h<Q!h#X%Q#X#Y<Q#Y;'S%Q;'S;=`%c<%lO%Qj<VY!a`Oy%Qz{%Q{|<u|}%Q}!O<u!O!Q%Q!Q![=^![;'S%Q;'S;=`%c<%lO%Qj<zU!a`Oy%Qz!Q%Q!Q![=^![;'S%Q;'S;=`%c<%lO%Qj=eU!a`#}YOy%Qz!Q%Q!Q![=^![;'S%Q;'S;=`%c<%lO%Qj>O[!a`#}YOy%Qz!O%Q!O!P;Z!P!Q%Q!Q![=w![!g%Q!g!h<Q!h#X%Q#X#Y<Q#Y;'S%Q;'S;=`%c<%lO%Qj>yS!^YOy%Qz;'S%Q;'S;=`%c<%lO%Qj?[WvWOy%Qz!O%Q!O!P:r!P!Q%Q!Q![=w![;'S%Q;'S;=`%c<%lO%Qj?yU]YOy%Qz!Q%Q!Q![;Z![;'S%Q;'S;=`%c<%lO%Q~@bTvWOy%Qz{@q{;'S%Q;'S;=`%c<%lO%Q~@xS!a`#t~Oy%Qz;'S%Q;'S;=`%c<%lO%QjAZ[#}YOy%Qz!O%Q!O!P;Z!P!Q%Q!Q![=w![!g%Q!g!h<Q!h#X%Q#X#Y<Q#Y;'S%Q;'S;=`%c<%lO%QjBUU`YOy%Qz![%Q![!]Bh!];'S%Q;'S;=`%c<%lO%QbBoSaQ!a`Oy%Qz;'S%Q;'S;=`%c<%lO%QjCQSkYOy%Qz;'S%Q;'S;=`%c<%lO%QhCcU!TWOy%Qz!_%Q!_!`Cu!`;'S%Q;'S;=`%c<%lO%QhC|S!TW!a`Oy%Qz;'S%Q;'S;=`%c<%lO%QlDaS!TW!hSOy%Qz;'S%Q;'S;=`%c<%lO%QjDtV!jQ!TWOy%Qz!_%Q!_!`Cu!`!aEZ!a;'S%Q;'S;=`%c<%lO%QbEbS!jQ!a`Oy%Qz;'S%Q;'S;=`%c<%lO%QjEqYOy%Qz}%Q}!OFa!O!c%Q!c!}GO!}#T%Q#T#oGO#o;'S%Q;'S;=`%c<%lO%QjFfW!a`Oy%Qz!c%Q!c!}GO!}#T%Q#T#oGO#o;'S%Q;'S;=`%c<%lO%QjGV[iY!a`Oy%Qz}%Q}!OGO!O!Q%Q!Q![GO![!c%Q!c!}GO!}#T%Q#T#oGO#o;'S%Q;'S;=`%c<%lO%QjHQSmYOy%Qz;'S%Q;'S;=`%c<%lO%QnHcSl^Oy%Qz;'S%Q;'S;=`%c<%lO%QjHtSpYOy%Qz;'S%Q;'S;=`%c<%lO%QjIVSoYOy%Qz;'S%Q;'S;=`%c<%lO%QfIhU!mQOy%Qz!_%Q!_!`6m!`;'S%Q;'S;=`%c<%lO%Q`I}P;=`<%l$q\",\n  tokenizers: [descendant, unitToken, identifiers, queryIdentifiers, 1, 2, 3, 4, new LocalTokenGroup(\"m~RRYZ[z{a~~g~aO#v~~dP!P!Qg~lO#w~~\", 28, 129)],\n  topRules: {\"StyleSheet\":[0,6],\"Styles\":[1,105]},\n  specialized: [{term: 124, get: (value) => spec_callee[value] || -1},{term: 125, get: (value) => spec_queryIdentifier[value] || -1},{term: 4, get: (value) => spec_QueryCallee[value] || -1},{term: 25, get: (value) => spec_AtKeyword[value] || -1},{term: 123, get: (value) => spec_identifier[value] || -1}],\n  tokenPrec: 1963\n});\n\nexport { parser };\n","import { parser } from '@lezer/css';\nimport { syntaxTree, LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\nimport { NodeWeakMap, IterMode } from '@lezer/common';\n\nlet _properties = null;\nfunction properties() {\n    if (!_properties && typeof document == \"object\" && document.body) {\n        let { style } = document.body, names = [], seen = new Set;\n        for (let prop in style)\n            if (prop != \"cssText\" && prop != \"cssFloat\") {\n                if (typeof style[prop] == \"string\") {\n                    if (/[A-Z]/.test(prop))\n                        prop = prop.replace(/[A-Z]/g, ch => \"-\" + ch.toLowerCase());\n                    if (!seen.has(prop)) {\n                        names.push(prop);\n                        seen.add(prop);\n                    }\n                }\n            }\n        _properties = names.sort().map(name => ({ type: \"property\", label: name, apply: name + \": \" }));\n    }\n    return _properties || [];\n}\nconst pseudoClasses = /*@__PURE__*/[\n    \"active\", \"after\", \"any-link\", \"autofill\", \"backdrop\", \"before\",\n    \"checked\", \"cue\", \"default\", \"defined\", \"disabled\", \"empty\",\n    \"enabled\", \"file-selector-button\", \"first\", \"first-child\",\n    \"first-letter\", \"first-line\", \"first-of-type\", \"focus\",\n    \"focus-visible\", \"focus-within\", \"fullscreen\", \"has\", \"host\",\n    \"host-context\", \"hover\", \"in-range\", \"indeterminate\", \"invalid\",\n    \"is\", \"lang\", \"last-child\", \"last-of-type\", \"left\", \"link\", \"marker\",\n    \"modal\", \"not\", \"nth-child\", \"nth-last-child\", \"nth-last-of-type\",\n    \"nth-of-type\", \"only-child\", \"only-of-type\", \"optional\", \"out-of-range\",\n    \"part\", \"placeholder\", \"placeholder-shown\", \"read-only\", \"read-write\",\n    \"required\", \"right\", \"root\", \"scope\", \"selection\", \"slotted\", \"target\",\n    \"target-text\", \"valid\", \"visited\", \"where\"\n].map(name => ({ type: \"class\", label: name }));\nconst values = /*@__PURE__*/[\n    \"above\", \"absolute\", \"activeborder\", \"additive\", \"activecaption\", \"after-white-space\",\n    \"ahead\", \"alias\", \"all\", \"all-scroll\", \"alphabetic\", \"alternate\", \"always\",\n    \"antialiased\", \"appworkspace\", \"asterisks\", \"attr\", \"auto\", \"auto-flow\", \"avoid\", \"avoid-column\",\n    \"avoid-page\", \"avoid-region\", \"axis-pan\", \"background\", \"backwards\", \"baseline\", \"below\",\n    \"bidi-override\", \"blink\", \"block\", \"block-axis\", \"bold\", \"bolder\", \"border\", \"border-box\",\n    \"both\", \"bottom\", \"break\", \"break-all\", \"break-word\", \"bullets\", \"button\", \"button-bevel\",\n    \"buttonface\", \"buttonhighlight\", \"buttonshadow\", \"buttontext\", \"calc\", \"capitalize\",\n    \"caps-lock-indicator\", \"caption\", \"captiontext\", \"caret\", \"cell\", \"center\", \"checkbox\", \"circle\",\n    \"cjk-decimal\", \"clear\", \"clip\", \"close-quote\", \"col-resize\", \"collapse\", \"color\", \"color-burn\",\n    \"color-dodge\", \"column\", \"column-reverse\", \"compact\", \"condensed\", \"contain\", \"content\",\n    \"contents\", \"content-box\", \"context-menu\", \"continuous\", \"copy\", \"counter\", \"counters\", \"cover\",\n    \"crop\", \"cross\", \"crosshair\", \"currentcolor\", \"cursive\", \"cyclic\", \"darken\", \"dashed\", \"decimal\",\n    \"decimal-leading-zero\", \"default\", \"default-button\", \"dense\", \"destination-atop\", \"destination-in\",\n    \"destination-out\", \"destination-over\", \"difference\", \"disc\", \"discard\", \"disclosure-closed\",\n    \"disclosure-open\", \"document\", \"dot-dash\", \"dot-dot-dash\", \"dotted\", \"double\", \"down\", \"e-resize\",\n    \"ease\", \"ease-in\", \"ease-in-out\", \"ease-out\", \"element\", \"ellipse\", \"ellipsis\", \"embed\", \"end\",\n    \"ethiopic-abegede-gez\", \"ethiopic-halehame-aa-er\", \"ethiopic-halehame-gez\", \"ew-resize\", \"exclusion\",\n    \"expanded\", \"extends\", \"extra-condensed\", \"extra-expanded\", \"fantasy\", \"fast\", \"fill\", \"fill-box\",\n    \"fixed\", \"flat\", \"flex\", \"flex-end\", \"flex-start\", \"footnotes\", \"forwards\", \"from\",\n    \"geometricPrecision\", \"graytext\", \"grid\", \"groove\", \"hand\", \"hard-light\", \"help\", \"hidden\", \"hide\",\n    \"higher\", \"highlight\", \"highlighttext\", \"horizontal\", \"hsl\", \"hsla\", \"hue\", \"icon\", \"ignore\",\n    \"inactiveborder\", \"inactivecaption\", \"inactivecaptiontext\", \"infinite\", \"infobackground\", \"infotext\",\n    \"inherit\", \"initial\", \"inline\", \"inline-axis\", \"inline-block\", \"inline-flex\", \"inline-grid\",\n    \"inline-table\", \"inset\", \"inside\", \"intrinsic\", \"invert\", \"italic\", \"justify\", \"keep-all\",\n    \"landscape\", \"large\", \"larger\", \"left\", \"level\", \"lighter\", \"lighten\", \"line-through\", \"linear\",\n    \"linear-gradient\", \"lines\", \"list-item\", \"listbox\", \"listitem\", \"local\", \"logical\", \"loud\", \"lower\",\n    \"lower-hexadecimal\", \"lower-latin\", \"lower-norwegian\", \"lowercase\", \"ltr\", \"luminosity\", \"manipulation\",\n    \"match\", \"matrix\", \"matrix3d\", \"medium\", \"menu\", \"menutext\", \"message-box\", \"middle\", \"min-intrinsic\",\n    \"mix\", \"monospace\", \"move\", \"multiple\", \"multiple_mask_images\", \"multiply\", \"n-resize\", \"narrower\",\n    \"ne-resize\", \"nesw-resize\", \"no-close-quote\", \"no-drop\", \"no-open-quote\", \"no-repeat\", \"none\",\n    \"normal\", \"not-allowed\", \"nowrap\", \"ns-resize\", \"numbers\", \"numeric\", \"nw-resize\", \"nwse-resize\",\n    \"oblique\", \"opacity\", \"open-quote\", \"optimizeLegibility\", \"optimizeSpeed\", \"outset\", \"outside\",\n    \"outside-shape\", \"overlay\", \"overline\", \"padding\", \"padding-box\", \"painted\", \"page\", \"paused\",\n    \"perspective\", \"pinch-zoom\", \"plus-darker\", \"plus-lighter\", \"pointer\", \"polygon\", \"portrait\",\n    \"pre\", \"pre-line\", \"pre-wrap\", \"preserve-3d\", \"progress\", \"push-button\", \"radial-gradient\", \"radio\",\n    \"read-only\", \"read-write\", \"read-write-plaintext-only\", \"rectangle\", \"region\", \"relative\", \"repeat\",\n    \"repeating-linear-gradient\", \"repeating-radial-gradient\", \"repeat-x\", \"repeat-y\", \"reset\", \"reverse\",\n    \"rgb\", \"rgba\", \"ridge\", \"right\", \"rotate\", \"rotate3d\", \"rotateX\", \"rotateY\", \"rotateZ\", \"round\",\n    \"row\", \"row-resize\", \"row-reverse\", \"rtl\", \"run-in\", \"running\", \"s-resize\", \"sans-serif\", \"saturation\",\n    \"scale\", \"scale3d\", \"scaleX\", \"scaleY\", \"scaleZ\", \"screen\", \"scroll\", \"scrollbar\", \"scroll-position\",\n    \"se-resize\", \"self-start\", \"self-end\", \"semi-condensed\", \"semi-expanded\", \"separate\", \"serif\", \"show\",\n    \"single\", \"skew\", \"skewX\", \"skewY\", \"skip-white-space\", \"slide\", \"slider-horizontal\",\n    \"slider-vertical\", \"sliderthumb-horizontal\", \"sliderthumb-vertical\", \"slow\", \"small\", \"small-caps\",\n    \"small-caption\", \"smaller\", \"soft-light\", \"solid\", \"source-atop\", \"source-in\", \"source-out\",\n    \"source-over\", \"space\", \"space-around\", \"space-between\", \"space-evenly\", \"spell-out\", \"square\", \"start\",\n    \"static\", \"status-bar\", \"stretch\", \"stroke\", \"stroke-box\", \"sub\", \"subpixel-antialiased\", \"svg_masks\",\n    \"super\", \"sw-resize\", \"symbolic\", \"symbols\", \"system-ui\", \"table\", \"table-caption\", \"table-cell\",\n    \"table-column\", \"table-column-group\", \"table-footer-group\", \"table-header-group\", \"table-row\",\n    \"table-row-group\", \"text\", \"text-bottom\", \"text-top\", \"textarea\", \"textfield\", \"thick\", \"thin\",\n    \"threeddarkshadow\", \"threedface\", \"threedhighlight\", \"threedlightshadow\", \"threedshadow\", \"to\", \"top\",\n    \"transform\", \"translate\", \"translate3d\", \"translateX\", \"translateY\", \"translateZ\", \"transparent\",\n    \"ultra-condensed\", \"ultra-expanded\", \"underline\", \"unidirectional-pan\", \"unset\", \"up\", \"upper-latin\",\n    \"uppercase\", \"url\", \"var\", \"vertical\", \"vertical-text\", \"view-box\", \"visible\", \"visibleFill\",\n    \"visiblePainted\", \"visibleStroke\", \"visual\", \"w-resize\", \"wait\", \"wave\", \"wider\", \"window\", \"windowframe\",\n    \"windowtext\", \"words\", \"wrap\", \"wrap-reverse\", \"x-large\", \"x-small\", \"xor\", \"xx-large\", \"xx-small\"\n].map(name => ({ type: \"keyword\", label: name })).concat(/*@__PURE__*/[\n    \"aliceblue\", \"antiquewhite\", \"aqua\", \"aquamarine\", \"azure\", \"beige\",\n    \"bisque\", \"black\", \"blanchedalmond\", \"blue\", \"blueviolet\", \"brown\",\n    \"burlywood\", \"cadetblue\", \"chartreuse\", \"chocolate\", \"coral\", \"cornflowerblue\",\n    \"cornsilk\", \"crimson\", \"cyan\", \"darkblue\", \"darkcyan\", \"darkgoldenrod\",\n    \"darkgray\", \"darkgreen\", \"darkkhaki\", \"darkmagenta\", \"darkolivegreen\",\n    \"darkorange\", \"darkorchid\", \"darkred\", \"darksalmon\", \"darkseagreen\",\n    \"darkslateblue\", \"darkslategray\", \"darkturquoise\", \"darkviolet\",\n    \"deeppink\", \"deepskyblue\", \"dimgray\", \"dodgerblue\", \"firebrick\",\n    \"floralwhite\", \"forestgreen\", \"fuchsia\", \"gainsboro\", \"ghostwhite\",\n    \"gold\", \"goldenrod\", \"gray\", \"grey\", \"green\", \"greenyellow\", \"honeydew\",\n    \"hotpink\", \"indianred\", \"indigo\", \"ivory\", \"khaki\", \"lavender\",\n    \"lavenderblush\", \"lawngreen\", \"lemonchiffon\", \"lightblue\", \"lightcoral\",\n    \"lightcyan\", \"lightgoldenrodyellow\", \"lightgray\", \"lightgreen\", \"lightpink\",\n    \"lightsalmon\", \"lightseagreen\", \"lightskyblue\", \"lightslategray\",\n    \"lightsteelblue\", \"lightyellow\", \"lime\", \"limegreen\", \"linen\", \"magenta\",\n    \"maroon\", \"mediumaquamarine\", \"mediumblue\", \"mediumorchid\", \"mediumpurple\",\n    \"mediumseagreen\", \"mediumslateblue\", \"mediumspringgreen\", \"mediumturquoise\",\n    \"mediumvioletred\", \"midnightblue\", \"mintcream\", \"mistyrose\", \"moccasin\",\n    \"navajowhite\", \"navy\", \"oldlace\", \"olive\", \"olivedrab\", \"orange\", \"orangered\",\n    \"orchid\", \"palegoldenrod\", \"palegreen\", \"paleturquoise\", \"palevioletred\",\n    \"papayawhip\", \"peachpuff\", \"peru\", \"pink\", \"plum\", \"powderblue\",\n    \"purple\", \"rebeccapurple\", \"red\", \"rosybrown\", \"royalblue\", \"saddlebrown\",\n    \"salmon\", \"sandybrown\", \"seagreen\", \"seashell\", \"sienna\", \"silver\", \"skyblue\",\n    \"slateblue\", \"slategray\", \"snow\", \"springgreen\", \"steelblue\", \"tan\",\n    \"teal\", \"thistle\", \"tomato\", \"turquoise\", \"violet\", \"wheat\", \"white\",\n    \"whitesmoke\", \"yellow\", \"yellowgreen\"\n].map(name => ({ type: \"constant\", label: name })));\nconst tags = /*@__PURE__*/[\n    \"a\", \"abbr\", \"address\", \"article\", \"aside\", \"b\", \"bdi\", \"bdo\", \"blockquote\", \"body\",\n    \"br\", \"button\", \"canvas\", \"caption\", \"cite\", \"code\", \"col\", \"colgroup\", \"dd\", \"del\",\n    \"details\", \"dfn\", \"dialog\", \"div\", \"dl\", \"dt\", \"em\", \"figcaption\", \"figure\", \"footer\",\n    \"form\", \"header\", \"hgroup\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"hr\", \"html\", \"i\", \"iframe\",\n    \"img\", \"input\", \"ins\", \"kbd\", \"label\", \"legend\", \"li\", \"main\", \"meter\", \"nav\", \"ol\", \"output\",\n    \"p\", \"pre\", \"ruby\", \"section\", \"select\", \"small\", \"source\", \"span\", \"strong\", \"sub\", \"summary\",\n    \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"tr\", \"u\", \"ul\"\n].map(name => ({ type: \"type\", label: name }));\nconst atRules = /*@__PURE__*/[\n    \"@charset\", \"@color-profile\", \"@container\", \"@counter-style\", \"@font-face\", \"@font-feature-values\",\n    \"@font-palette-values\", \"@import\", \"@keyframes\", \"@layer\", \"@media\", \"@namespace\", \"@page\",\n    \"@position-try\", \"@property\", \"@scope\", \"@starting-style\", \"@supports\", \"@view-transition\"\n].map(label => ({ type: \"keyword\", label }));\nconst identifier = /^(\\w[\\w-]*|-\\w[\\w-]*|)$/, variable = /^-(-[\\w-]*)?$/;\nfunction isVarArg(node, doc) {\n    var _a;\n    if (node.name == \"(\" || node.type.isError)\n        node = node.parent || node;\n    if (node.name != \"ArgList\")\n        return false;\n    let callee = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.firstChild;\n    if ((callee === null || callee === void 0 ? void 0 : callee.name) != \"Callee\")\n        return false;\n    return doc.sliceString(callee.from, callee.to) == \"var\";\n}\nconst VariablesByNode = /*@__PURE__*/new NodeWeakMap();\nconst declSelector = [\"Declaration\"];\nfunction astTop(node) {\n    for (let cur = node;;) {\n        if (cur.type.isTop)\n            return cur;\n        if (!(cur = cur.parent))\n            return node;\n    }\n}\nfunction variableNames(doc, node, isVariable) {\n    if (node.to - node.from > 4096) {\n        let known = VariablesByNode.get(node);\n        if (known)\n            return known;\n        let result = [], seen = new Set, cursor = node.cursor(IterMode.IncludeAnonymous);\n        if (cursor.firstChild())\n            do {\n                for (let option of variableNames(doc, cursor.node, isVariable))\n                    if (!seen.has(option.label)) {\n                        seen.add(option.label);\n                        result.push(option);\n                    }\n            } while (cursor.nextSibling());\n        VariablesByNode.set(node, result);\n        return result;\n    }\n    else {\n        let result = [], seen = new Set;\n        node.cursor().iterate(node => {\n            var _a;\n            if (isVariable(node) && node.matchContext(declSelector) && ((_a = node.node.nextSibling) === null || _a === void 0 ? void 0 : _a.name) == \":\") {\n                let name = doc.sliceString(node.from, node.to);\n                if (!seen.has(name)) {\n                    seen.add(name);\n                    result.push({ label: name, type: \"variable\" });\n                }\n            }\n        });\n        return result;\n    }\n}\n/**\nCreate a completion source for a CSS dialect, providing a\npredicate for determining what kind of syntax node can act as a\ncompletable variable. This is used by language modes like Sass and\nLess to reuse this package's completion logic.\n*/\nconst defineCSSCompletionSource = (isVariable) => context => {\n    let { state, pos } = context, node = syntaxTree(state).resolveInner(pos, -1);\n    let isDash = node.type.isError && node.from == node.to - 1 && state.doc.sliceString(node.from, node.to) == \"-\";\n    if (node.name == \"PropertyName\" ||\n        (isDash || node.name == \"TagName\") && /^(Block|Styles)$/.test(node.resolve(node.to).name))\n        return { from: node.from, options: properties(), validFor: identifier };\n    if (node.name == \"ValueName\")\n        return { from: node.from, options: values, validFor: identifier };\n    if (node.name == \"PseudoClassName\")\n        return { from: node.from, options: pseudoClasses, validFor: identifier };\n    if (isVariable(node) || (context.explicit || isDash) && isVarArg(node, state.doc))\n        return { from: isVariable(node) || isDash ? node.from : pos,\n            options: variableNames(state.doc, astTop(node), isVariable),\n            validFor: variable };\n    if (node.name == \"TagName\") {\n        for (let { parent } = node; parent; parent = parent.parent)\n            if (parent.name == \"Block\")\n                return { from: node.from, options: properties(), validFor: identifier };\n        return { from: node.from, options: tags, validFor: identifier };\n    }\n    if (node.name == \"AtKeyword\")\n        return { from: node.from, options: atRules, validFor: identifier };\n    if (!context.explicit)\n        return null;\n    let above = node.resolve(pos), before = above.childBefore(pos);\n    if (before && before.name == \":\" && above.name == \"PseudoClassSelector\")\n        return { from: pos, options: pseudoClasses, validFor: identifier };\n    if (before && before.name == \":\" && above.name == \"Declaration\" || above.name == \"ArgList\")\n        return { from: pos, options: values, validFor: identifier };\n    if (above.name == \"Block\" || above.name == \"Styles\")\n        return { from: pos, options: properties(), validFor: identifier };\n    return null;\n};\n/**\nCSS property, variable, and value keyword completion source.\n*/\nconst cssCompletionSource = /*@__PURE__*/defineCSSCompletionSource(n => n.name == \"VariableName\");\n\n/**\nA language provider based on the [Lezer CSS\nparser](https://github.com/lezer-parser/css), extended with\nhighlighting and indentation information.\n*/\nconst cssLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"css\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                Declaration: /*@__PURE__*/continuedIndent()\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                \"Block KeyframeList\": foldInside\n            })\n        ]\n    }),\n    languageData: {\n        commentTokens: { block: { open: \"/*\", close: \"*/\" } },\n        indentOnInput: /^\\s*\\}$/,\n        wordChars: \"-\"\n    }\n});\n/**\nLanguage support for CSS.\n*/\nfunction css() {\n    return new LanguageSupport(cssLanguage, cssLanguage.data.of({ autocomplete: cssCompletionSource }));\n}\n\nexport { css, cssCompletionSource, cssLanguage, defineCSSCompletionSource };\n","import { ContextTracker, ExternalTokenizer, LRParser, LocalTokenGroup } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst noSemi = 316,\n  noSemiType = 317,\n  incdec = 1,\n  incdecPrefix = 2,\n  questionDot = 3,\n  JSXStartTag = 4,\n  insertSemi = 318,\n  spaces = 320,\n  newline = 321,\n  LineComment = 5,\n  BlockComment = 6,\n  Dialect_jsx = 0;\n\n/* Hand-written tokenizers for JavaScript tokens that can't be\n   expressed by lezer's built-in tokenizer. */\n\nconst space = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200,\n               8201, 8202, 8232, 8233, 8239, 8287, 12288];\n\nconst braceR = 125, semicolon = 59, slash = 47, star = 42, plus = 43, minus = 45, lt = 60, comma = 44,\n      question = 63, dot = 46, bracketL = 91;\n\nconst trackNewline = new ContextTracker({\n  start: false,\n  shift(context, term) {\n    return term == LineComment || term == BlockComment || term == spaces ? context : term == newline\n  },\n  strict: false\n});\n\nconst insertSemicolon = new ExternalTokenizer((input, stack) => {\n  let {next} = input;\n  if (next == braceR || next == -1 || stack.context)\n    input.acceptToken(insertSemi);\n}, {contextual: true, fallback: true});\n\nconst noSemicolon = new ExternalTokenizer((input, stack) => {\n  let {next} = input, after;\n  if (space.indexOf(next) > -1) return\n  if (next == slash && ((after = input.peek(1)) == slash || after == star)) return\n  if (next != braceR && next != semicolon && next != -1 && !stack.context)\n    input.acceptToken(noSemi);\n}, {contextual: true});\n\nconst noSemicolonType = new ExternalTokenizer((input, stack) => {\n  if (input.next == bracketL && !stack.context) input.acceptToken(noSemiType);\n}, {contextual: true});\n\nconst operatorToken = new ExternalTokenizer((input, stack) => {\n  let {next} = input;\n  if (next == plus || next == minus) {\n    input.advance();\n    if (next == input.next) {\n      input.advance();\n      let mayPostfix = !stack.context && stack.canShift(incdec);\n      input.acceptToken(mayPostfix ? incdec : incdecPrefix);\n    }\n  } else if (next == question && input.peek(1) == dot) {\n    input.advance(); input.advance();\n    if (input.next < 48 || input.next > 57) // No digit after\n      input.acceptToken(questionDot);\n  }\n}, {contextual: true});\n\nfunction identifierChar(ch, start) {\n  return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch == 95 || ch >= 192 ||\n    !start && ch >= 48 && ch <= 57\n}\n\nconst jsx = new ExternalTokenizer((input, stack) => {\n  if (input.next != lt || !stack.dialectEnabled(Dialect_jsx)) return\n  input.advance();\n  if (input.next == slash) return\n  // Scan for an identifier followed by a comma or 'extends', don't\n  // treat this as a start tag if present.\n  let back = 0;\n  while (space.indexOf(input.next) > -1) { input.advance(); back++; }\n  if (identifierChar(input.next, true)) {\n    input.advance();\n    back++;\n    while (identifierChar(input.next, false)) { input.advance(); back++; }\n    while (space.indexOf(input.next) > -1) { input.advance(); back++; }\n    if (input.next == comma) return\n    for (let i = 0;; i++) {\n      if (i == 7) {\n        if (!identifierChar(input.next, true)) return\n        break\n      }\n      if (input.next != \"extends\".charCodeAt(i)) break\n      input.advance();\n      back++;\n    }\n  }\n  input.acceptToken(JSXStartTag, -back);\n});\n\nconst jsHighlight = styleTags({\n  \"get set async static\": tags.modifier,\n  \"for while do if else switch try catch finally return throw break continue default case defer\": tags.controlKeyword,\n  \"in of await yield void typeof delete instanceof as satisfies\": tags.operatorKeyword,\n  \"let var const using function class extends\": tags.definitionKeyword,\n  \"import export from\": tags.moduleKeyword,\n  \"with debugger new\": tags.keyword,\n  TemplateString: tags.special(tags.string),\n  super: tags.atom,\n  BooleanLiteral: tags.bool,\n  this: tags.self,\n  null: tags.null,\n  Star: tags.modifier,\n  VariableName: tags.variableName,\n  \"CallExpression/VariableName TaggedTemplateExpression/VariableName\": tags.function(tags.variableName),\n  VariableDefinition: tags.definition(tags.variableName),\n  Label: tags.labelName,\n  PropertyName: tags.propertyName,\n  PrivatePropertyName: tags.special(tags.propertyName),\n  \"CallExpression/MemberExpression/PropertyName\": tags.function(tags.propertyName),\n  \"FunctionDeclaration/VariableDefinition\": tags.function(tags.definition(tags.variableName)),\n  \"ClassDeclaration/VariableDefinition\": tags.definition(tags.className),\n  \"NewExpression/VariableName\": tags.className,\n  PropertyDefinition: tags.definition(tags.propertyName),\n  PrivatePropertyDefinition: tags.definition(tags.special(tags.propertyName)),\n  UpdateOp: tags.updateOperator,\n  \"LineComment Hashbang\": tags.lineComment,\n  BlockComment: tags.blockComment,\n  Number: tags.number,\n  String: tags.string,\n  Escape: tags.escape,\n  ArithOp: tags.arithmeticOperator,\n  LogicOp: tags.logicOperator,\n  BitOp: tags.bitwiseOperator,\n  CompareOp: tags.compareOperator,\n  RegExp: tags.regexp,\n  Equals: tags.definitionOperator,\n  Arrow: tags.function(tags.punctuation),\n  \": Spread\": tags.punctuation,\n  \"( )\": tags.paren,\n  \"[ ]\": tags.squareBracket,\n  \"{ }\": tags.brace,\n  \"InterpolationStart InterpolationEnd\": tags.special(tags.brace),\n  \".\": tags.derefOperator,\n  \", ;\": tags.separator,\n  \"@\": tags.meta,\n\n  TypeName: tags.typeName,\n  TypeDefinition: tags.definition(tags.typeName),\n  \"type enum interface implements namespace module declare\": tags.definitionKeyword,\n  \"abstract global Privacy readonly override\": tags.modifier,\n  \"is keyof unique infer asserts\": tags.operatorKeyword,\n\n  JSXAttributeValue: tags.attributeValue,\n  JSXText: tags.content,\n  \"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag\": tags.angleBracket,\n  \"JSXIdentifier JSXNameSpacedName\": tags.tagName,\n  \"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName\": tags.attributeName,\n  \"JSXBuiltin/JSXIdentifier\": tags.standard(tags.tagName)\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_identifier = {__proto__:null,export:20, as:25, from:33, default:36, async:41, function:42, in:52, out:55, const:56, extends:60, this:64, true:72, false:72, null:84, void:88, typeof:92, super:108, new:142, delete:154, yield:163, await:167, class:172, public:235, private:235, protected:235, readonly:237, instanceof:256, satisfies:259, import:292, keyof:349, unique:353, infer:359, asserts:395, is:397, abstract:417, implements:419, type:421, let:424, var:426, using:429, interface:435, enum:439, namespace:445, module:447, declare:451, global:455, defer:471, for:476, of:485, while:488, with:492, do:496, if:500, else:502, switch:506, case:512, try:518, catch:522, finally:526, return:530, throw:534, break:538, continue:542, debugger:546};\nconst spec_word = {__proto__:null,async:129, get:131, set:133, declare:195, public:197, private:197, protected:197, static:199, abstract:201, override:203, readonly:209, accessor:211, new:401};\nconst spec_LessThan = {__proto__:null,\"<\":193};\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"$F|Q%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Il'#IlO1XQ`O'#GsO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JrO6[Q!0MxO'#JsO6uQ`O'#F]O6zQ,UO'#FtOOQ!0Lf'#Ff'#FfO7VO7dO'#FfO9XQMhO'#F|O9`Q`O'#F{OOQ!0Lf'#Js'#JsOOQ!0Lb'#Jr'#JrO9eQ`O'#GwOOQ['#K_'#K_O9pQ`O'#IYO9uQ!0LrO'#IZOOQ['#J`'#J`OOQ['#I_'#I_Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GsO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EyO;hQMhO'#FeO;xQ`O'#GsOOQO'#K`'#K`O;}Q`O'#K`O<]Q`O'#G{O<]Q`O'#G|O<]Q`O'#HOO9kQ`O'#HRO=SQ`O'#HUO>kQ`O'#CeO>{Q`O'#HcO?TQ`O'#HiO?TQ`O'#HkO`QlO'#HmO?TQ`O'#HoO?TQ`O'#HrO?YQ`O'#HxO?_Q!0LsO'#IOO%[QlO'#IQO?jQ!0LsO'#ISO?uQ!0LsO'#IUO9uQ!0LrO'#IWO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FeOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jv'#JvO%[QlO'#JvOOQO'#Jy'#JyOOQO'#Ih'#IhOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#J}'#J}OC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jx'#JxODlQpO'#JyOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CD})CD}OOOO'#I`'#I`OFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ia'#IaOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Ic'#IcOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IdOGyQ`O'#JtOIxQ!fO'#JtO+}QlO'#JtOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KTOKPQ`O'#KSOKPQ`O'#KSOKXQ`O,5;^OK^Q`O'#KROOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KQONtQ`O'#KPO9eQ`O'#KPO! YQ`O'#KPO! bQ`O,5;]O! gQ`O'#KPO!#lQ!fO'#JsOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#Jz'#JzOOQO-E<j-E<jO9kQ`O,5=_O!$rQ`O,5=_O!$wQlO,5;ZO!&zQMhO'#EkO!(eQ`O,5;ZO!(jQlO'#DyO!(tQpO,5;dO!(|QpO,5;dO%[QlO,5;dOOQ['#FT'#FTOOQ['#FV'#FVO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eOOQ['#FZ'#FZO!)[QlO,5;tOOQ!0Lf,5;y,5;yOOQ!0Lf,5;z,5;zOOQ!0Lf,5;|,5;|O%[QlO'#IpO!+_Q!0LrO,5<iO%[QlO,5;eO!&zQMhO,5;eO!+|QMhO,5;eO!-nQMhO'#E^O%[QlO,5;wOOQ!0Lf,5;{,5;{O!-uQ,UO'#FjO!.rQ,UO'#KXO!.^Q,UO'#KXO!.yQ,UO'#KXOOQO'#KX'#KXO!/_Q,UO,5<SOOOW,5<`,5<`O!/pQlO'#FvOOOW'#Io'#IoO7VO7dO,5<QO!/wQ,UO'#FxOOQ!0Lf,5<Q,5<QO!0hQ$IUO'#CyOOQ!0Lh'#C}'#C}O!0{O#@ItO'#DRO!1iQMjO,5<eO!1pQ`O,5<hO!3YQ(CWO'#GXO!3jQ`O'#GYO!3oQ`O'#GYO!5_Q(CWO'#G^O!6dQpO'#GbOOQO'#Gn'#GnO!,TQMhO'#GmOOQO'#Gp'#GpO!,TQMhO'#GoO!7VQ$IUO'#JlOOQ!0Lh'#Jl'#JlO!7aQ`O'#JkO!7oQ`O'#JjO!7wQ`O'#CuOOQ!0Lh'#C{'#C{O!8YQ`O'#C}OOQ!0Lh'#DV'#DVOOQ!0Lh'#DX'#DXO!8_Q`O,5<eO1SQ`O'#DZO!,TQMhO'#GPO!,TQMhO'#GRO!8gQ`O'#GTO!8lQ`O'#GUO!3oQ`O'#G[O!,TQMhO'#GaO<]Q`O'#JkO!8qQ`O'#EqO!9`Q`O,5<gOOQ!0Lb'#Cr'#CrO!9hQ`O'#ErO!:bQpO'#EsOOQ!0Lb'#KR'#KRO!:iQ!0LrO'#KaO9uQ!0LrO,5=cO`QlO,5>tOOQ['#Jh'#JhOOQ[,5>u,5>uOOQ[-E<]-E<]O!<hQ!0MxO,5:bO!:]QpO,5:`O!?RQ!0MxO,5:jO%[QlO,5:jO!AiQ!0MxO,5:lOOQO,5@z,5@zO!BYQMhO,5=_O!BhQ!0LrO'#JiO9`Q`O'#JiO!ByQ!0LrO,59ZO!CUQpO,59ZO!C^QMhO,59ZO:dQMhO,59ZO!CiQ`O,5;ZO!CqQ`O'#HbO!DVQ`O'#KdO%[QlO,5;}O!:]QpO,5<PO!D_Q`O,5=zO!DdQ`O,5=zO!DiQ`O,5=zO!DwQ`O,5=zO9uQ!0LrO,5=zO<]Q`O,5=jOOQO'#Cy'#CyO!EOQpO,5=gO!EWQMhO,5=hO!EcQ`O,5=jO!EhQ!bO,5=mO!EpQ`O'#K`O?YQ`O'#HWO9kQ`O'#HYO!EuQ`O'#HYO:dQMhO'#H[O!EzQ`O'#H[OOQ[,5=p,5=pO!FPQ`O'#H]O!FbQ`O'#CoO!FgQ`O,59PO!FqQ`O,59PO!HvQlO,59POOQ[,59P,59PO!IWQ!0LrO,59PO%[QlO,59PO!KcQlO'#HeOOQ['#Hf'#HfOOQ['#Hg'#HgO`QlO,5=}O!KyQ`O,5=}O`QlO,5>TO`QlO,5>VO!LOQ`O,5>XO`QlO,5>ZO!LTQ`O,5>^O!LYQlO,5>dOOQ[,5>j,5>jO%[QlO,5>jO9uQ!0LrO,5>lOOQ[,5>n,5>nO#!dQ`O,5>nOOQ[,5>p,5>pO#!dQ`O,5>pOOQ[,5>r,5>rO##QQpO'#D_O%[QlO'#JvO##sQpO'#JvO##}QpO'#DmO#$`QpO'#DmO#&qQlO'#DmO#&xQ`O'#JuO#'QQ`O,5:WO#'VQ`O'#EtO#'eQ`O'#KUO#'mQ`O,5;_O#'rQpO'#DmO#(PQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#(WQ`O,5:oO?YQ`O,5;YO!CUQpO,5;YO!C^QMhO,5;YO:dQMhO,5;YO#(`Q`O,5@bO#(eQ07dO,5:sOOQO-E<f-E<fO#)kQ!0MSO,5;RODWQpO,5:rO#)uQpO,5:rODWQpO,5;RO!ByQ!0LrO,5:rOOQ!0Lb'#Ej'#EjOOQO,5;R,5;RO%[QlO,5;RO#*SQ!0LrO,5;RO#*_Q!0LrO,5;RO!CUQpO,5:rOOQO,5;X,5;XO#*mQ!0LrO,5;RPOOO'#I^'#I^P#+RO&2DjO,58|POOO,58|,58|OOOO-E<^-E<^OOQ!0Lh1G.p1G.pOOOO-E<_-E<_OOOO,59},59}O#+^Q!bO,59}OOOO-E<a-E<aOOQ!0Lf1G/g1G/gO#+cQ!fO,5?OO+}QlO,5?OOOQO,5?U,5?UO#+mQlO'#IdOOQO-E<b-E<bO#+zQ`O,5@`O#,SQ!fO,5@`O#,ZQ`O,5@nOOQ!0Lf1G/m1G/mO%[QlO,5@oO#,cQ`O'#IjOOQO-E<h-E<hO#,ZQ`O,5@nOOQ!0Lb1G0x1G0xOOQ!0Ln1G/x1G/xOOQ!0Ln1G0Y1G0YO%[QlO,5@lO#,wQ!0LrO,5@lO#-YQ!0LrO,5@lO#-aQ`O,5@kO9eQ`O,5@kO#-iQ`O,5@kO#-wQ`O'#ImO#-aQ`O,5@kOOQ!0Lb1G0w1G0wO!(tQpO,5:uO!)PQpO,5:uOOQS,5:w,5:wO#.iQdO,5:wO#.qQMhO1G2yO9kQ`O1G2yOOQ!0Lf1G0u1G0uO#/PQ!0MxO1G0uO#0UQ!0MvO,5;VOOQ!0Lh'#GW'#GWO#0rQ!0MzO'#JlO!$wQlO1G0uO#2}Q!fO'#JwO%[QlO'#JwO#3XQ`O,5:eOOQ!0Lh'#D_'#D_OOQ!0Lf1G1O1G1OO%[QlO1G1OOOQ!0Lf1G1f1G1fO#3^Q`O1G1OO#5rQ!0MxO1G1PO#5yQ!0MxO1G1PO#8aQ!0MxO1G1PO#8hQ!0MxO1G1PO#;OQ!0MxO1G1PO#=fQ!0MxO1G1PO#=mQ!0MxO1G1PO#=tQ!0MxO1G1PO#@[Q!0MxO1G1PO#@cQ!0MxO1G1PO#BpQ?MtO'#CiO#DkQ?MtO1G1`O#DrQ?MtO'#JsO#EVQ!0MxO,5?[OOQ!0Lb-E<n-E<nO#GdQ!0MxO1G1PO#HaQ!0MzO1G1POOQ!0Lf1G1P1G1PO#IdQMjO'#J|O#InQ`O,5:xO#IsQ!0MxO1G1cO#JgQ,UO,5<WO#JoQ,UO,5<XO#JwQ,UO'#FoO#K`Q`O'#FnOOQO'#KY'#KYOOQO'#In'#InO#KeQ,UO1G1nOOQ!0Lf1G1n1G1nOOOW1G1y1G1yO#KvQ?MtO'#JrO#LQQ`O,5<bO!)[QlO,5<bOOOW-E<m-E<mOOQ!0Lf1G1l1G1lO#LVQpO'#KXOOQ!0Lf,5<d,5<dO#L_QpO,5<dO#LdQMhO'#DTOOOO'#Ib'#IbO#LkO#@ItO,59mOOQ!0Lh,59m,59mO%[QlO1G2PO!8lQ`O'#IrO#LvQ`O,5<zOOQ!0Lh,5<w,5<wO!,TQMhO'#IuO#MdQMjO,5=XO!,TQMhO'#IwO#NVQMjO,5=ZO!&zQMhO,5=]OOQO1G2S1G2SO#NaQ!dO'#CrO#NtQ(CWO'#ErO$ |QpO'#GbO$!dQ!dO,5<sO$!kQ`O'#K[O9eQ`O'#K[O$!yQ`O,5<uO$#aQ!dO'#C{O!,TQMhO,5<tO$#kQ`O'#GZO$$PQ`O,5<tO$$UQ!dO'#GWO$$cQ!dO'#K]O$$mQ`O'#K]O!&zQMhO'#K]O$$rQ`O,5<xO$$wQlO'#JvO$%RQpO'#GcO#$`QpO'#GcO$%dQ`O'#GgO!3oQ`O'#GkO$%iQ!0LrO'#ItO$%tQpO,5<|OOQ!0Lp,5<|,5<|O$%{QpO'#GcO$&YQpO'#GdO$&kQpO'#GdO$&pQMjO,5=XO$'QQMjO,5=ZOOQ!0Lh,5=^,5=^O!,TQMhO,5@VO!,TQMhO,5@VO$'bQ`O'#IyO$'vQ`O,5@UO$(OQ`O,59aOOQ!0Lh,59i,59iO$(TQ`O,5@VO$)TQ$IYO,59uOOQ!0Lh'#Jp'#JpO$)vQMjO,5<kO$*iQMjO,5<mO@zQ`O,5<oOOQ!0Lh,5<p,5<pO$*sQ`O,5<vO$*xQMjO,5<{O$+YQ`O'#KPO!$wQlO1G2RO$+_Q`O1G2RO9eQ`O'#KSO9eQ`O'#EtO%[QlO'#EtO9eQ`O'#I{O$+dQ!0LrO,5@{OOQ[1G2}1G2}OOQ[1G4`1G4`OOQ!0Lf1G/|1G/|OOQ!0Lf1G/z1G/zO$-fQ!0MxO1G0UOOQ[1G2y1G2yO!&zQMhO1G2yO%[QlO1G2yO#.tQ`O1G2yO$/jQMhO'#EkOOQ!0Lb,5@T,5@TO$/wQ!0LrO,5@TOOQ[1G.u1G.uO!ByQ!0LrO1G.uO!CUQpO1G.uO!C^QMhO1G.uO$0YQ`O1G0uO$0_Q`O'#CiO$0jQ`O'#KeO$0rQ`O,5=|O$0wQ`O'#KeO$0|Q`O'#KeO$1[Q`O'#JRO$1jQ`O,5AOO$1rQ!fO1G1iOOQ!0Lf1G1k1G1kO9kQ`O1G3fO@zQ`O1G3fO$1yQ`O1G3fO$2OQ`O1G3fO!DiQ`O1G3fO9uQ!0LrO1G3fOOQ[1G3f1G3fO!EcQ`O1G3UO!&zQMhO1G3RO$2TQ`O1G3ROOQ[1G3S1G3SO!&zQMhO1G3SO$2YQ`O1G3SO$2bQpO'#HQOOQ[1G3U1G3UO!6_QpO'#I}O!EhQ!bO1G3XOOQ[1G3X1G3XOOQ[,5=r,5=rO$2jQMhO,5=tO9kQ`O,5=tO$%dQ`O,5=vO9`Q`O,5=vO!CUQpO,5=vO!C^QMhO,5=vO:dQMhO,5=vO$2xQ`O'#KcO$3TQ`O,5=wOOQ[1G.k1G.kO$3YQ!0LrO1G.kO@zQ`O1G.kO$3eQ`O1G.kO9uQ!0LrO1G.kO$5mQ!fO,5AQO$5zQ`O,5AQO9eQ`O,5AQO$6VQlO,5>PO$6^Q`O,5>POOQ[1G3i1G3iO`QlO1G3iOOQ[1G3o1G3oOOQ[1G3q1G3qO?TQ`O1G3sO$6cQlO1G3uO$:gQlO'#HtOOQ[1G3x1G3xO$:tQ`O'#HzO?YQ`O'#H|OOQ[1G4O1G4OO$:|QlO1G4OO9uQ!0LrO1G4UOOQ[1G4W1G4WOOQ!0Lb'#G_'#G_O9uQ!0LrO1G4YO9uQ!0LrO1G4[O$?TQ`O,5@bO!)[QlO,5;`O9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CUQpO,5:XO$?YQ?MtO,5:XOOQO,5;`,5;`O$?dQpO'#IeO$?zQ`O,5@aOOQ!0Lf1G/r1G/rO$@SQpO'#IkO$@^Q`O,5@pOOQ!0Lb1G0y1G0yO#$`QpO,5:XOOQO'#Ig'#IgO$@fQpO,5:qOOQ!0Ln,5:q,5:qO#(ZQ`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CUQpO1G0tO!C^QMhO1G0tOOQ!0Lb1G5|1G5|O!ByQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@mQ!0LrO1G0mO$@xQ!0LrO1G0mO!CUQpO1G0^ODWQpO1G0^O$AWQ!0LrO1G0mOOQO1G0^1G0^O$AlQ!0MxO1G0mPOOO-E<[-E<[POOO1G.h1G.hOOOO1G/i1G/iO$AvQ!bO,5<iO$BOQ!fO1G4jOOQO1G4p1G4pO%[QlO,5?OO$BYQ`O1G5zO$BbQ`O1G6YO$BjQ!fO1G6ZO9eQ`O,5?UO$BtQ!0MxO1G6WO%[QlO1G6WO$CUQ!0LrO1G6WO$CgQ`O1G6VO$CgQ`O1G6VO9eQ`O1G6VO$CoQ`O,5?XO9eQ`O,5?XOOQO,5?X,5?XO$DTQ`O,5?XO$+YQ`O,5?XOOQO-E<k-E<kOOQS1G0a1G0aOOQS1G0c1G0cO#.lQ`O1G0cOOQ[7+(e7+(eO!&zQMhO7+(eO%[QlO7+(eO$DcQ`O7+(eO$DnQMhO7+(eO$D|Q!0MzO,5=XO$GXQ!0MzO,5=ZO$IdQ!0MzO,5=XO$KuQ!0MzO,5=ZO$NWQ!0MzO,59uO%!]Q!0MzO,5<kO%$hQ!0MzO,5<mO%&sQ!0MzO,5<{OOQ!0Lf7+&a7+&aO%)UQ!0MxO7+&aO%)xQlO'#IfO%*VQ`O,5@cO%*_Q!fO,5@cOOQ!0Lf1G0P1G0PO%*iQ`O7+&jOOQ!0Lf7+&j7+&jO%*nQ?MtO,5:fO%[QlO7+&zO%*xQ?MtO,5:bO%+VQ?MtO,5:jO%+aQ?MtO,5:lO%+kQMhO'#IiO%+uQ`O,5@hOOQ!0Lh1G0d1G0dOOQO1G1r1G1rOOQO1G1s1G1sO%+}Q!jO,5<ZO!)[QlO,5<YOOQO-E<l-E<lOOQ!0Lf7+'Y7+'YOOOW7+'e7+'eOOOW1G1|1G1|O%,YQ`O1G1|OOQ!0Lf1G2O1G2OOOOO,59o,59oO%,_Q!dO,59oOOOO-E<`-E<`OOQ!0Lh1G/X1G/XO%,fQ!0MxO7+'kOOQ!0Lh,5?^,5?^O%-YQMhO1G2fP%-aQ`O'#IrPOQ!0Lh-E<p-E<pO%-}QMjO,5?aOOQ!0Lh-E<s-E<sO%.pQMjO,5?cOOQ!0Lh-E<u-E<uO%.zQ!dO1G2wO%/RQ!dO'#CrO%/iQMhO'#KSO$$wQlO'#JvOOQ!0Lh1G2_1G2_O%/sQ`O'#IqO%0[Q`O,5@vO%0[Q`O,5@vO%0dQ`O,5@vO%0oQ`O,5@vOOQO1G2a1G2aO%0}QMjO1G2`O$+YQ`O'#K[O!,TQMhO1G2`O%1_Q(CWO'#IsO%1lQ`O,5@wO!&zQMhO,5@wO%1tQ!dO,5@wOOQ!0Lh1G2d1G2dO%4UQ!fO'#CiO%4`Q`O,5=POOQ!0Lb,5<},5<}O%4hQpO,5<}OOQ!0Lb,5=O,5=OOCwQ`O,5<}O%4sQpO,5<}OOQ!0Lb,5=R,5=RO$+YQ`O,5=VOOQO,5?`,5?`OOQO-E<r-E<rOOQ!0Lp1G2h1G2hO#$`QpO,5<}O$$wQlO,5=PO%5RQ`O,5=OO%5^QpO,5=OO!,TQMhO'#IuO%6WQMjO1G2sO!,TQMhO'#IwO%6yQMjO1G2uO%7TQMjO1G5qO%7_QMjO1G5qOOQO,5?e,5?eOOQO-E<w-E<wOOQO1G.{1G.{O!,TQMhO1G5qO!,TQMhO1G5qO!:]QpO,59wO%[QlO,59wOOQ!0Lh,5<j,5<jO%7lQ`O1G2ZO!,TQMhO1G2bO%7qQ!0MxO7+'mOOQ!0Lf7+'m7+'mO!$wQlO7+'mO%8eQ`O,5;`OOQ!0Lb,5?g,5?gOOQ!0Lb-E<y-E<yO%8jQ!dO'#K^O#(ZQ`O7+(eO4UQ!fO7+(eO$DfQ`O7+(eO%8tQ!0MvO'#CiO%9XQ!0MvO,5=SO%9lQ`O,5=SO%9tQ`O,5=SOOQ!0Lb1G5o1G5oOOQ[7+$a7+$aO!ByQ!0LrO7+$aO!CUQpO7+$aO!$wQlO7+&aO%9yQ`O'#JQO%:bQ`O,5APOOQO1G3h1G3hO9kQ`O,5APO%:bQ`O,5APO%:jQ`O,5APOOQO,5?m,5?mOOQO-E=P-E=POOQ!0Lf7+'T7+'TO%:oQ`O7+)QO9uQ!0LrO7+)QO9kQ`O7+)QO@zQ`O7+)QO%:tQ`O7+)QOOQ[7+)Q7+)QOOQ[7+(p7+(pO%:yQ!0MvO7+(mO!&zQMhO7+(mO!E^Q`O7+(nOOQ[7+(n7+(nO!&zQMhO7+(nO%;TQ`O'#KbO%;`Q`O,5=lOOQO,5?i,5?iOOQO-E<{-E<{OOQ[7+(s7+(sO%<rQpO'#HZOOQ[1G3`1G3`O!&zQMhO1G3`O%[QlO1G3`O%<yQ`O1G3`O%=UQMhO1G3`O9uQ!0LrO1G3bO$%dQ`O1G3bO9`Q`O1G3bO!CUQpO1G3bO!C^QMhO1G3bO%=dQ`O'#JPO%=xQ`O,5@}O%>QQpO,5@}OOQ!0Lb1G3c1G3cOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>]Q`O7+$VO%[QlO1G6lO%[QlO1G6mO%>bQ!0LrO1G6lO%>lQlO1G3kO%>sQ`O1G3kO%>xQlO1G3kOOQ[7+)T7+)TO9uQ!0LrO7+)_O`QlO7+)aOOQ['#Kh'#KhOOQ['#JS'#JSO%?PQlO,5>`OOQ[,5>`,5>`O%[QlO'#HuO%?^Q`O'#HwOOQ[,5>f,5>fO9eQ`O,5>fOOQ[,5>h,5>hOOQ[7+)j7+)jOOQ[7+)p7+)pOOQ[7+)t7+)tOOQ[7+)v7+)vO%?cQpO1G5|O%?}Q?MtO1G0zO%@XQ`O1G0zOOQO1G/s1G/sO%@dQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?P,5?POOQO-E<c-E<cOOQO,5?V,5?VOOQO-E<i-E<iO!CUQpO1G/sOOQO-E<e-E<eOOQ!0Ln1G0]1G0]OOQ!0Lf7+%u7+%uO#(ZQ`O7+%uOOQ!0Lf7+&`7+&`O?YQ`O7+&`O!CUQpO7+&`OOQO7+%x7+%xO$AlQ!0MxO7+&XOOQO7+&X7+&XO%[QlO7+&XO%@nQ!0LrO7+&XO!ByQ!0LrO7+%xO!CUQpO7+%xO%@yQ!0LrO7+&XO%AXQ!0MxO7++rO%[QlO7++rO%AiQ`O7++qO%AiQ`O7++qOOQO1G4s1G4sO9eQ`O1G4sO%AqQ`O1G4sOOQS7+%}7+%}O#(ZQ`O<<LPO4UQ!fO<<LPO%BPQ`O<<LPOOQ[<<LP<<LPO!&zQMhO<<LPO%[QlO<<LPO%BXQ`O<<LPO%BdQ!0MzO,5?aO%DoQ!0MzO,5?cO%FzQ!0MzO1G2`O%I]Q!0MzO1G2sO%KhQ!0MzO1G2uO%MsQ!fO,5?QO%[QlO,5?QOOQO-E<d-E<dO%M}Q`O1G5}OOQ!0Lf<<JU<<JUO%NVQ?MtO1G0uO&!^Q?MtO1G1PO&!eQ?MtO1G1PO&$fQ?MtO1G1PO&$mQ?MtO1G1PO&&nQ?MtO1G1PO&(oQ?MtO1G1PO&(vQ?MtO1G1PO&(}Q?MtO1G1PO&+OQ?MtO1G1PO&+VQ?MtO1G1PO&+^Q!0MxO<<JfO&-UQ?MtO1G1PO&.RQ?MvO1G1PO&/UQ?MvO'#JlO&1[Q?MtO1G1cO&1iQ?MtO1G0UO&1sQMjO,5?TOOQO-E<g-E<gO!)[QlO'#FqOOQO'#KZ'#KZOOQO1G1u1G1uO&1}Q`O1G1tO&2SQ?MtO,5?[OOOW7+'h7+'hOOOO1G/Z1G/ZO&2^Q!dO1G4xOOQ!0Lh7+(Q7+(QP!&zQMhO,5?^O!,TQMhO7+(cO&2eQ`O,5?]O9eQ`O,5?]O$+YQ`O,5?]OOQO-E<o-E<oO&2sQ`O1G6bO&2sQ`O1G6bO&2{Q`O1G6bO&3WQMjO7+'zO&3hQ!dO,5?_O&3rQ`O,5?_O!&zQMhO,5?_OOQO-E<q-E<qO&3wQ!dO1G6cO&4RQ`O1G6cO&4ZQ`O1G2kO!&zQMhO1G2kOOQ!0Lb1G2i1G2iOOQ!0Lb1G2j1G2jO%4hQpO1G2iO!CUQpO1G2iOCwQ`O1G2iOOQ!0Lb1G2q1G2qO&4`QpO1G2iO&4nQ`O1G2kO$+YQ`O1G2jOCwQ`O1G2jO$$wQlO1G2kO&4vQ`O1G2jO&5jQMjO,5?aOOQ!0Lh-E<t-E<tO&6]QMjO,5?cOOQ!0Lh-E<v-E<vO!,TQMhO7++]O&6gQMjO7++]O&6qQMjO7++]OOQ!0Lh1G/c1G/cO&7OQ`O1G/cOOQ!0Lh7+'u7+'uO&7TQMjO7+'|O&7eQ!0MxO<<KXOOQ!0Lf<<KX<<KXO&8XQ`O1G0zO!&zQMhO'#IzO&8^Q`O,5@xO&:`Q!fO<<LPO!&zQMhO1G2nO&:gQ!0LrO1G2nOOQ[<<G{<<G{O!ByQ!0LrO<<G{O&:xQ!0MxO<<I{OOQ!0Lf<<I{<<I{OOQO,5?l,5?lO&;lQ`O,5?lO&;qQ`O,5?lOOQO-E=O-E=OO&<PQ`O1G6kO&<PQ`O1G6kO9kQ`O1G6kO@zQ`O<<LlOOQ[<<Ll<<LlO&<XQ`O<<LlO9uQ!0LrO<<LlO9kQ`O<<LlOOQ[<<LX<<LXO%:yQ!0MvO<<LXOOQ[<<LY<<LYO!E^Q`O<<LYO&<^QpO'#I|O&<iQ`O,5@|O!)[QlO,5@|OOQ[1G3W1G3WOOQO'#JO'#JOO9uQ!0LrO'#JOO&<qQpO,5=uOOQ[,5=u,5=uO&<xQpO'#EgO&=PQpO'#GeO&=UQ`O7+(zO&=ZQ`O7+(zOOQ[7+(z7+(zO!&zQMhO7+(zO%[QlO7+(zO&=cQ`O7+(zOOQ[7+(|7+(|O9uQ!0LrO7+(|O$%dQ`O7+(|O9`Q`O7+(|O!CUQpO7+(|O&=nQ`O,5?kOOQO-E<}-E<}OOQO'#H^'#H^O&=yQ`O1G6iO9uQ!0LrO<<GqOOQ[<<Gq<<GqO@zQ`O<<GqO&>RQ`O7+,WO&>WQ`O7+,XO%[QlO7+,WO%[QlO7+,XOOQ[7+)V7+)VO&>]Q`O7+)VO&>bQlO7+)VO&>iQ`O7+)VOOQ[<<Ly<<LyOOQ[<<L{<<L{OOQ[-E=Q-E=QOOQ[1G3z1G3zO&>nQ`O,5>aOOQ[,5>c,5>cO&>sQ`O1G4QO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&>xQ?MtO1G6ZO?YQ`O7+%_OOQ!0Lf<<Ia<<IaOOQ!0Lf<<Iz<<IzO?YQ`O<<IzOOQO<<Is<<IsO$AlQ!0MxO<<IsO%[QlO<<IsOOQO<<Id<<IdO!ByQ!0LrO<<IdO&?SQ!0LrO<<IsO&?_Q!0MxO<= ^O&?oQ`O<= ]OOQO7+*_7+*_O9eQ`O7+*_OOQ[ANAkANAkO&?wQ!fOANAkO!&zQMhOANAkO#(ZQ`OANAkO4UQ!fOANAkO&@OQ`OANAkO%[QlOANAkO&@WQ!0MzO7+'zO&BiQ!0MzO,5?aO&DtQ!0MzO,5?cO&GPQ!0MzO7+'|O&IbQ!fO1G4lO&IlQ?MtO7+&aO&KpQ?MvO,5=XO&MwQ?MvO,5=ZO&NXQ?MvO,5=XO&NiQ?MvO,5=ZO&NyQ?MvO,59uO'#PQ?MvO,5<kO'%SQ?MvO,5<mO''hQ?MvO,5<{O')^Q?MtO7+'kO')kQ?MtO7+'mO')xQ`O,5<]OOQO7+'`7+'`OOQ!0Lh7+*d7+*dO')}QMjO<<K}OOQO1G4w1G4wO'*UQ`O1G4wO'*aQ`O1G4wO'*oQ`O7++|O'*oQ`O7++|O!&zQMhO1G4yO'*wQ!dO1G4yO'+RQ`O7++}O'+ZQ`O7+(VO'+fQ!dO7+(VOOQ!0Lb7+(T7+(TOOQ!0Lb7+(U7+(UO!CUQpO7+(TOCwQ`O7+(TO'+pQ`O7+(VO!&zQMhO7+(VO$+YQ`O7+(UO'+uQ`O7+(VOCwQ`O7+(UO'+}QMjO<<NwO!,TQMhO<<NwOOQ!0Lh7+$}7+$}O',XQ!dO,5?fOOQO-E<x-E<xO',cQ!0MvO7+(YO!&zQMhO7+(YOOQ[AN=gAN=gO9kQ`O1G5WOOQO1G5W1G5WO',sQ`O1G5WO',xQ`O7+,VO',xQ`O7+,VO9uQ!0LrOANBWO@zQ`OANBWOOQ[ANBWANBWO'-QQ`OANBWOOQ[ANAsANAsOOQ[ANAtANAtO'-VQ`O,5?hOOQO-E<z-E<zO'-bQ?MtO1G6hOOQO,5?j,5?jOOQO-E<|-E<|OOQ[1G3a1G3aO'-lQ`O,5=POOQ[<<Lf<<LfO!&zQMhO<<LfO&=UQ`O<<LfO'-qQ`O<<LfO%[QlO<<LfOOQ[<<Lh<<LhO9uQ!0LrO<<LhO$%dQ`O<<LhO9`Q`O<<LhO'-yQpO1G5VO'.UQ`O7+,TOOQ[AN=]AN=]O9uQ!0LrOAN=]OOQ[<= r<= rOOQ[<= s<= sO'.^Q`O<= rO'.cQ`O<= sOOQ[<<Lq<<LqO'.hQ`O<<LqO'.mQlO<<LqOOQ[1G3{1G3{O?YQ`O7+)lO'.tQ`O<<JQO'/PQ?MtO<<JQOOQO<<Hy<<HyOOQ!0LfAN?fAN?fOOQOAN?_AN?_O$AlQ!0MxOAN?_OOQOAN?OAN?OO%[QlOAN?_OOQO<<My<<MyOOQ[G27VG27VO!&zQMhOG27VO#(ZQ`OG27VO'/ZQ!fOG27VO4UQ!fOG27VO'/bQ`OG27VO'/jQ?MtO<<JfO'/wQ?MvO1G2`O'1mQ?MvO,5?aO'3pQ?MvO,5?cO'5sQ?MvO1G2sO'7vQ?MvO1G2uO'9yQ?MtO<<KXO':WQ?MtO<<I{OOQO1G1w1G1wO!,TQMhOANAiOOQO7+*c7+*cO':eQ`O7+*cO':pQ`O<= hO':xQ!dO7+*eOOQ!0Lb<<Kq<<KqO$+YQ`O<<KqOCwQ`O<<KqO';SQ`O<<KqO!&zQMhO<<KqOOQ!0Lb<<Ko<<KoO!CUQpO<<KoO';_Q!dO<<KqOOQ!0Lb<<Kp<<KpO';iQ`O<<KqO!&zQMhO<<KqO$+YQ`O<<KpO';nQMjOANDcO';xQ!0MvO<<KtOOQO7+*r7+*rO9kQ`O7+*rO'<YQ`O<= qOOQ[G27rG27rO9uQ!0LrOG27rO@zQ`OG27rO!)[QlO1G5SO'<bQ`O7+,SO'<jQ`O1G2kO&=UQ`OANBQOOQ[ANBQANBQO!&zQMhOANBQO'<oQ`OANBQOOQ[ANBSANBSO9uQ!0LrOANBSO$%dQ`OANBSOOQO'#H_'#H_OOQO7+*q7+*qOOQ[G22wG22wOOQ[ANE^ANE^OOQ[ANE_ANE_OOQ[ANB]ANB]O'<wQ`OANB]OOQ[<<MW<<MWO!)[QlOAN?lOOQOG24yG24yO$AlQ!0MxOG24yO#(ZQ`OLD,qOOQ[LD,qLD,qO!&zQMhOLD,qO'<|Q!fOLD,qO'=TQ?MvO7+'zO'>yQ?MvO,5?aO'@|Q?MvO,5?cO'CPQ?MvO7+'|O'DuQMjOG27TOOQO<<M}<<M}OOQ!0LbANA]ANA]O$+YQ`OANA]OCwQ`OANA]O'EVQ!dOANA]OOQ!0LbANAZANAZO'E^Q`OANA]O!&zQMhOANA]O'EiQ!dOANA]OOQ!0LbANA[ANA[OOQO<<N^<<N^OOQ[LD-^LD-^O9uQ!0LrOLD-^O'EsQ?MtO7+*nOOQO'#Gf'#GfOOQ[G27lG27lO&=UQ`OG27lO!&zQMhOG27lOOQ[G27nG27nO9uQ!0LrOG27nOOQ[G27wG27wO'E}Q?MtOG25WOOQOLD*eLD*eOOQ[!$(!]!$(!]O#(ZQ`O!$(!]O!&zQMhO!$(!]O'FXQ!0MzOG27TOOQ!0LbG26wG26wO$+YQ`OG26wO'HjQ`OG26wOCwQ`OG26wO'HuQ!dOG26wO!&zQMhOG26wOOQ[!$(!x!$(!xOOQ[LD-WLD-WO&=UQ`OLD-WOOQ[LD-YLD-YOOQ[!)9Ew!)9EwO#(ZQ`O!)9EwOOQ!0LbLD,cLD,cO$+YQ`OLD,cOCwQ`OLD,cO'H|Q`OLD,cO'IXQ!dOLD,cOOQ[!$(!r!$(!rOOQ[!.K;c!.K;cO'I`Q?MvOG27TOOQ!0Lb!$( }!$( }O$+YQ`O!$( }OCwQ`O!$( }O'KUQ`O!$( }OOQ!0Lb!)9Ei!)9EiO$+YQ`O!)9EiOCwQ`O!)9EiOOQ!0Lb!.K;T!.K;TO$+YQ`O!.K;TOOQ!0Lb!4/0o!4/0oO!)[QlO'#DzO1PQ`O'#EXO'KaQ!fO'#JrO'KhQ!L^O'#DvO'KoQlO'#EOO'KvQ!fO'#CiO'N^Q!fO'#CiO!)[QlO'#EQO'NnQlO,5;ZO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO'#IpO(!qQ`O,5<iO!)[QlO,5;eO(!yQMhO,5;eO($dQMhO,5;eO!)[QlO,5;wO!&zQMhO'#GmO(!yQMhO'#GmO!&zQMhO'#GoO(!yQMhO'#GoO1SQ`O'#DZO1SQ`O'#DZO!&zQMhO'#GPO(!yQMhO'#GPO!&zQMhO'#GRO(!yQMhO'#GRO!&zQMhO'#GaO(!yQMhO'#GaO!)[QlO,5:jO($kQpO'#D_O($uQpO'#JvO!)[QlO,5@oO'NnQlO1G0uO(%PQ?MtO'#CiO!)[QlO1G2PO!&zQMhO'#IuO(!yQMhO'#IuO!&zQMhO'#IwO(!yQMhO'#IwO(%ZQ!dO'#CrO!&zQMhO,5<tO(!yQMhO,5<tO'NnQlO1G2RO!)[QlO7+&zO!&zQMhO1G2`O(!yQMhO1G2`O!&zQMhO'#IuO(!yQMhO'#IuO!&zQMhO'#IwO(!yQMhO'#IwO!&zQMhO1G2bO(!yQMhO1G2bO'NnQlO7+'mO'NnQlO7+&aO!&zQMhOANAiO(!yQMhOANAiO(%nQ`O'#EoO(%sQ`O'#EoO(%{Q`O'#F]O(&QQ`O'#EyO(&VQ`O'#KTO(&bQ`O'#KRO(&mQ`O,5;ZO(&rQMjO,5<eO(&yQ`O'#GYO('OQ`O'#GYO('TQ`O,5<eO(']Q`O,5<gO('eQ`O,5;ZO('mQ?MtO1G1`O('tQ`O,5<tO('yQ`O,5<tO((OQ`O,5<vO((TQ`O,5<vO((YQ`O1G2RO((_Q`O1G0uO((dQMjO<<K}O((kQMjO<<K}O((rQMhO'#F|O9`Q`O'#F{OAuQ`O'#EnO!)[QlO,5;tO!3oQ`O'#GYO!3oQ`O'#GYO!3oQ`O'#G[O!3oQ`O'#G[O!,TQMhO7+(cO!,TQMhO7+(cO%.zQ!dO1G2wO%.zQ!dO1G2wO!&zQMhO,5=]O!&zQMhO,5=]\",\n  stateData: \"()x~O'|OS'}OSTOS(ORQ~OPYOQYOSfOY!VOaqOdzOeyOl!POpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_XO!iuO!lZO!oYO!pYO!qYO!svO!uwO!xxO!|]O$W|O$niO%h}O%j!QO%l!OO%m!OO%n!OO%q!RO%s!SO%v!TO%w!TO%y!UO&W!WO&^!XO&`!YO&b!ZO&d![O&g!]O&m!^O&s!_O&u!`O&w!aO&y!bO&{!cO(TSO(VTO(YUO(aVO(o[O~OWtO~P`OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$W!kO$niO(T!dO(VTO(YUO(aVO(o[O~Oa!wOs!nO!S!oO!b!yO!c!vO!d!vO!|<VO#T!pO#U!pO#V!xO#W!pO#X!pO#[!zO#]!zO(U!lO(VTO(YUO(e!mO(o!sO~O(O!{O~OP]XR]X[]Xa]Xj]Xr]X!Q]X!S]X!]]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X'z]X(a]X(r]X(y]X(z]X~O!g%RX~P(qO_!}O(V#PO(W!}O(X#PO~O_#QO(X#PO(Y#PO(Z#QO~Ox#SO!U#TO(b#TO(c#VO~OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$W!kO$niO(T<ZO(VTO(YUO(aVO(o[O~O![#ZO!]#WO!Y(hP!Y(vP~P+}O!^#cO~P`OPYOQYOSfOd!jOe!iOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$W!kO$niO(VTO(YUO(aVO(o[O~Op#mO![#iO!|]O#i#lO#j#iO(T<[O!k(sP~P.iO!l#oO(T#nO~O!x#sO!|]O%h#tO~O#k#uO~O!g#vO#k#uO~OP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!]$_O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO#z$WO#{$XO(aVO(r$YO(y#|O(z#}O~Oa(fX'z(fX'w(fX!k(fX!Y(fX!_(fX%i(fX!g(fX~P1qO#S$dO#`$eO$Q$eOP(gXR(gX[(gXj(gXr(gX!Q(gX!S(gX!](gX!l(gX!p(gX#R(gX#n(gX#o(gX#p(gX#q(gX#r(gX#s(gX#t(gX#u(gX#v(gX#x(gX#z(gX#{(gX(a(gX(r(gX(y(gX(z(gX!_(gX%i(gX~Oa(gX'z(gX'w(gX!Y(gX!k(gXv(gX!g(gX~P4UO#`$eO~O$]$hO$_$gO$f$mO~OSfO!_$nO$i$oO$k$qO~Oh%VOj%dOk%dOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T$sO(VTO(YUO(a$uO(y$}O(z%POg(^P~Ol%[O~P7eO!l%eO~O!S%hO!_%iO(T%gO~O!g%mO~Oa%nO'z%nO~O!Q%rO~P%[O(U!lO~P%[O%n%vO~P%[Oh%VO!l%eO(T%gO(U!lO~Oe%}O!l%eO(T%gO~Oj$RO~O!_&PO(T%gO(U!lO(VTO(YUO`)WP~O!Q&SO!l&RO%j&VO&T&WO~P;SO!x#sO~O%s&YO!S)SX!_)SX(T)SX~O(T&ZO~Ol!PO!u&`O%j!QO%l!OO%m!OO%n!OO%q!RO%s!SO%v!TO%w!TO~Od&eOe&dO!x&bO%h&cO%{&aO~P<bOd&hOeyOl!PO!_&gO!u&`O!xxO!|]O%h}O%l!OO%m!OO%n!OO%q!RO%s!SO%v!TO%w!TO%y!UO~Ob&kO#`&nO%j&iO(U!lO~P=gO!l&oO!u&sO~O!l#oO~O!_XO~Oa%nO'x&{O'z%nO~Oa%nO'x'OO'z%nO~Oa%nO'x'QO'z%nO~O'w]X!Y]Xv]X!k]X&[]X!_]X%i]X!g]X~P(qO!b'_O!c'WO!d'WO(U!lO(VTO(YUO~Os'UO!S'TO!['XO(e'SO!^(iP!^(xP~P@nOn'bO!_'`O(T%gO~Oe'gO!l%eO(T%gO~O!Q&SO!l&RO~Os!nO!S!oO!|<VO#T!pO#U!pO#W!pO#X!pO(U!lO(VTO(YUO(e!mO(o!sO~O!b'mO!c'lO!d'lO#V!pO#['nO#]'nO~PBYOa%nOh%VO!g#vO!l%eO'z%nO(r'pO~O!p'tO#`'rO~PChOs!nO!S!oO(VTO(YUO(e!mO(o!sO~O!_XOs(mX!S(mX!b(mX!c(mX!d(mX!|(mX#T(mX#U(mX#V(mX#W(mX#X(mX#[(mX#](mX(U(mX(V(mX(Y(mX(e(mX(o(mX~O!c'lO!d'lO(U!lO~PDWO(P'xO(Q'xO(R'zO~O_!}O(V'|O(W!}O(X'|O~O_#QO(X'|O(Y'|O(Z#QO~Ov(OO~P%[Ox#SO!U#TO(b#TO(c(RO~O![(TO!Y'WX!Y'^X!]'WX!]'^X~P+}O!](VO!Y(hX~OP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!](VO!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO#z$WO#{$XO(aVO(r$YO(y#|O(z#}O~O!Y(hX~PHRO!Y([O~O!Y(uX!](uX!g(uX!k(uX(r(uX~O#`(uX#k#dX!^(uX~PJUO#`(]O!Y(wX!](wX~O!](^O!Y(vX~O!Y(aO~O#`$eO~PJUO!^(bO~P`OR#zO!Q#yO!S#{O!l#xO(aVOP!na[!naj!nar!na!]!na!p!na#R!na#n!na#o!na#p!na#q!na#r!na#s!na#t!na#u!na#v!na#x!na#z!na#{!na(r!na(y!na(z!na~Oa!na'z!na'w!na!Y!na!k!nav!na!_!na%i!na!g!na~PKlO!k(cO~O!g#vO#`(dO(r'pO!](tXa(tX'z(tX~O!k(tX~PNXO!S%hO!_%iO!|]O#i(iO#j(hO(T%gO~O!](jO!k(sX~O!k(lO~O!S%hO!_%iO#j(hO(T%gO~OP(gXR(gX[(gXj(gXr(gX!Q(gX!S(gX!](gX!l(gX!p(gX#R(gX#n(gX#o(gX#p(gX#q(gX#r(gX#s(gX#t(gX#u(gX#v(gX#x(gX#z(gX#{(gX(a(gX(r(gX(y(gX(z(gX~O!g#vO!k(gX~P! uOR(nO!Q(mO!l#xO#S$dO!|!{a!S!{a~O!x!{a%h!{a!_!{a#i!{a#j!{a(T!{a~P!#vO!x(rO~OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_XO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$W!kO$niO(T!dO(VTO(YUO(aVO(o[O~Oh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O<sO!S${O!_$|O!i>VO!l$xO#j<yO$W%`O$t<uO$v<wO$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~O#k(xO~O![(zO!k(kP~P%[O(e(|O(o[O~O!S)OO!l#xO(e(|O(o[O~OP<UOQ<UOSfOd>ROe!iOpkOr<UOskOtkOzkO|<UO!O<UO!SWO!WkO!XkO!_!eO!i<XO!lZO!o<UO!p<UO!q<UO!s<YO!u<]O!x!hO$W!kO$n>PO(T)]O(VTO(YUO(aVO(o[O~O!]$_Oa$qa'z$qa'w$qa!k$qa!Y$qa!_$qa%i$qa!g$qa~Ol)dO~P!&zOh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Og(pP~P!,TO!Q)iO!g)hO!_$^X$Z$^X$]$^X$_$^X$f$^X~O!g)hO!_({X$Z({X$]({X$_({X$f({X~O!Q)iO~P!.^O!Q)iO!_({X$Z({X$]({X$_({X$f({X~O!_)kO$Z)oO$])jO$_)jO$f)pO~O![)sO~P!)[O$]$hO$_$gO$f)wO~On$zX!Q$zX#S$zX'y$zX(y$zX(z$zX~OgmXg$zXnmX!]mX#`mX~P!0SOx)yO(b)zO(c)|O~On*VO!Q*OO'y*PO(y$}O(z%PO~Og)}O~P!1WOg*WO~Oh%VOr%XOs$tOt$tOz%YO|%ZO!O<sO!S*YO!_*ZO!i>VO!l$xO#j<yO$W%`O$t<uO$v<wO$y%aO(VTO(YUO(a$uO(y$}O(z%PO~Op*`O![*^O(T*XO!k)OP~P!1uO#k*aO~O!l*bO~Oh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O<sO!S${O!_$|O!i>VO!l$xO#j<yO$W%`O$t<uO$v<wO$y%aO(T*dO(VTO(YUO(a$uO(y$}O(z%PO~O![*gO!Y)PP~P!3tOr*sOs!nO!S*iO!b*qO!c*kO!d*kO!l*bO#[*rO%`*mO(U!lO(VTO(YUO(e!mO~O!^*pO~P!5iO#S$dOn(`X!Q(`X'y(`X(y(`X(z(`X!](`X#`(`X~Og(`X$O(`X~P!6kOn*xO#`*wOg(_X!](_X~O!]*yOg(^X~Oj%dOk%dOl%dO(T&ZOg(^P~Os*|O~Og)}O(T&ZO~O!l+SO~O(T(vO~Op+WO!S%hO![#iO!_%iO!|]O#i#lO#j#iO(T%gO!k(sP~O!g#vO#k+XO~O!S%hO![+ZO!](^O!_%iO(T%gO!Y(vP~Os'[O!S+]O![+[O(VTO(YUO(e(|O~O!^(xP~P!9|O!]+^Oa)TX'z)TX~OP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO#z$WO#{$XO(aVO(r$YO(y#|O(z#}O~Oa!ja!]!ja'z!ja'w!ja!Y!ja!k!jav!ja!_!ja%i!ja!g!ja~P!:tOR#zO!Q#yO!S#{O!l#xO(aVOP!ra[!raj!rar!ra!]!ra!p!ra#R!ra#n!ra#o!ra#p!ra#q!ra#r!ra#s!ra#t!ra#u!ra#v!ra#x!ra#z!ra#{!ra(r!ra(y!ra(z!ra~Oa!ra'z!ra'w!ra!Y!ra!k!rav!ra!_!ra%i!ra!g!ra~P!=[OR#zO!Q#yO!S#{O!l#xO(aVOP!ta[!taj!tar!ta!]!ta!p!ta#R!ta#n!ta#o!ta#p!ta#q!ta#r!ta#s!ta#t!ta#u!ta#v!ta#x!ta#z!ta#{!ta(r!ta(y!ta(z!ta~Oa!ta'z!ta'w!ta!Y!ta!k!tav!ta!_!ta%i!ta!g!ta~P!?rOh%VOn+gO!_'`O%i+fO~O!g+iOa(]X!_(]X'z(]X!](]X~Oa%nO!_XO'z%nO~Oh%VO!l%eO~Oh%VO!l%eO(T%gO~O!g#vO#k(xO~Ob+tO%j+uO(T+qO(VTO(YUO!^)XP~O!]+vO`)WX~O[+zO~O`+{O~O!_&PO(T%gO(U!lO`)WP~O%j,OO~P;SOh%VO#`,SO~Oh%VOn,VO!_$|O~O!_,XO~O!Q,ZO!_XO~O%n%vO~O!x,`O~Oe,eO~Ob,fO(T#nO(VTO(YUO!^)VP~Oe%}O~O%j!QO(T&ZO~P=gO[,kO`,jO~OPYOQYOSfOdzOeyOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!iuO!lZO!oYO!pYO!qYO!svO!xxO!|]O$niO%h}O(VTO(YUO(aVO(o[O~O!_!eO!u!gO$W!kO(T!dO~P!FyO`,jOa%nO'z%nO~OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!x!hO$W!kO$niO(T!dO(VTO(YUO(aVO(o[O~Oa,pOl!OO!uwO%l!OO%m!OO%n!OO~P!IcO!l&oO~O&^,vO~O!_,xO~O&o,zO&q,{OP&laQ&laS&laY&laa&lad&lae&lal&lap&lar&las&lat&laz&la|&la!O&la!S&la!W&la!X&la!_&la!i&la!l&la!o&la!p&la!q&la!s&la!u&la!x&la!|&la$W&la$n&la%h&la%j&la%l&la%m&la%n&la%q&la%s&la%v&la%w&la%y&la&W&la&^&la&`&la&b&la&d&la&g&la&m&la&s&la&u&la&w&la&y&la&{&la'w&la(T&la(V&la(Y&la(a&la(o&la!^&la&e&lab&la&j&la~O(T-QO~Oh!eX!]!RX!^!RX!g!RX!g!eX!l!eX#`!RX~O!]!eX!^!eX~P#!iO!g-VO#`-UOh(jX!]#hX!^#hX!g(jX!l(jX~O!](jX!^(jX~P##[Oh%VO!g-XO!l%eO!]!aX!^!aX~Os!nO!S!oO(VTO(YUO(e!mO~OP<UOQ<UOSfOd>ROe!iOpkOr<UOskOtkOzkO|<UO!O<UO!SWO!WkO!XkO!_!eO!i<XO!lZO!o<UO!p<UO!q<UO!s<YO!u<]O!x!hO$W!kO$n>PO(VTO(YUO(aVO(o[O~O(T=QO~P#$qO!]-]O!^(iX~O!^-_O~O!g-VO#`-UO!]#hX!^#hX~O!]-`O!^(xX~O!^-bO~O!c-cO!d-cO(U!lO~P#$`O!^-fO~P'_On-iO!_'`O~O!Y-nO~Os!{a!b!{a!c!{a!d!{a#T!{a#U!{a#V!{a#W!{a#X!{a#[!{a#]!{a(U!{a(V!{a(Y!{a(e!{a(o!{a~P!#vO!p-sO#`-qO~PChO!c-uO!d-uO(U!lO~PDWOa%nO#`-qO'z%nO~Oa%nO!g#vO#`-qO'z%nO~Oa%nO!g#vO!p-sO#`-qO'z%nO(r'pO~O(P'xO(Q'xO(R-zO~Ov-{O~O!Y'Wa!]'Wa~P!:tO![.PO!Y'WX!]'WX~P%[O!](VO!Y(ha~O!Y(ha~PHRO!](^O!Y(va~O!S%hO![.TO!_%iO(T%gO!Y'^X!]'^X~O#`.VO!](ta!k(taa(ta'z(ta~O!g#vO~P#,wO!](jO!k(sa~O!S%hO!_%iO#j.ZO(T%gO~Op.`O!S%hO![.]O!_%iO!|]O#i._O#j.]O(T%gO!]'aX!k'aX~OR.dO!l#xO~Oh%VOn.gO!_'`O%i.fO~Oa#ci!]#ci'z#ci'w#ci!Y#ci!k#civ#ci!_#ci%i#ci!g#ci~P!:tOn>]O!Q*OO'y*PO(y$}O(z%PO~O#k#_aa#_a#`#_a'z#_a!]#_a!k#_a!_#_a!Y#_a~P#/sO#k(`XP(`XR(`X[(`Xa(`Xj(`Xr(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X'z(`X(a(`X(r(`X!k(`X!Y(`X'w(`Xv(`X!_(`X%i(`X!g(`X~P!6kO!].tO!k(kX~P!:tO!k.wO~O!Y.yO~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mia#mij#mir#mi!]#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#n#mi~P#3cO#n$OO~P#3cOP$[OR#zOr$aO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO[#mia#mij#mi!]#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#r#mi~P#6QO#r$QO~P#6QOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO(aVOa#mi!]#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#v#mi~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO(aVO(z#}Oa#mi!]#mi#z#mi#{#mi'z#mi(r#mi(y#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#x$UO~P#;VO#x#mi~P#;VO#v$SO~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO(aVO(y#|O(z#}Oa#mi!]#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#z#mi~P#={O#z$WO~P#={OP]XR]X[]Xj]Xr]X!Q]X!S]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X!]]X!^]X~O$O]X~P#@jOP$[OR#zO[<mOj<bOr<kO!Q#yO!S#{O!l#xO!p$[O#R<bO#n<_O#o<`O#p<`O#q<`O#r<aO#s<bO#t<bO#u<lO#v<cO#x<eO#z<gO#{<hO(aVO(r$YO(y#|O(z#}O~O$O.{O~P#BwO#S$dO#`<nO$Q<nO$O(gX!^(gX~P! uOa'da!]'da'z'da'w'da!k'da!Y'dav'da!_'da%i'da!g'da~P!:tO[#mia#mij#mir#mi!]#mi#R#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO(y#mi(z#mi~P#EyOn>]O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P#EyO!]/POg(pX~P!1WOg/RO~Oa$Pi!]$Pi'z$Pi'w$Pi!Y$Pi!k$Piv$Pi!_$Pi%i$Pi!g$Pi~P!:tO$]/SO$_/SO~O$]/TO$_/TO~O!g)hO#`/UO!_$cX$Z$cX$]$cX$_$cX$f$cX~O![/VO~O!_)kO$Z/XO$])jO$_)jO$f/YO~O!]<iO!^(fX~P#BwO!^/ZO~O!g)hO$f({X~O$f/]O~Ov/^O~P!&zOx)yO(b)zO(c/aO~O!S/dO~O(y$}On%aa!Q%aa'y%aa(z%aa!]%aa#`%aa~Og%aa$O%aa~P#L{O(z%POn%ca!Q%ca'y%ca(y%ca!]%ca#`%ca~Og%ca$O%ca~P#MnO!]fX!gfX!kfX!k$zX(rfX~P!0SOp%WO![/mO!](^O(T/lO!Y(vP!Y)PP~P!1uOr*sO!b*qO!c*kO!d*kO!l*bO#[*rO%`*mO(U!lO(VTO(YUO~Os<}O!S/nO![+[O!^*pO(e<|O!^(xP~P$ [O!k/oO~P#/sO!]/pO!g#vO(r'pO!k)OX~O!k/uO~OnoX!QoX'yoX(yoX(zoX~O!g#vO!koX~P$#OOp/wO!S%hO![*^O!_%iO(T%gO!k)OP~O#k/xO~O!Y$zX!]$zX!g%RX~P!0SO!]/yO!Y)PX~P#/sO!g/{O~O!Y/}O~OpkO(T0OO~P.iOh%VOr0TO!g#vO!l%eO(r'pO~O!g+iO~Oa%nO!]0XO'z%nO~O!^0ZO~P!5iO!c0[O!d0[O(U!lO~P#$`Os!nO!S0]O(VTO(YUO(e!mO~O#[0_O~Og%aa!]%aa#`%aa$O%aa~P!1WOg%ca!]%ca#`%ca$O%ca~P!1WOj%dOk%dOl%dO(T&ZOg'mX!]'mX~O!]*yOg(^a~Og0hO~On0jO#`0iOg(_a!](_a~OR0kO!Q0kO!S0lO#S$dOn}a'y}a(y}a(z}a!]}a#`}a~Og}a$O}a~P$(cO!Q*OO'y*POn$sa(y$sa(z$sa!]$sa#`$sa~Og$sa$O$sa~P$)_O!Q*OO'y*POn$ua(y$ua(z$ua!]$ua#`$ua~Og$ua$O$ua~P$*QO#k0oO~Og%Ta!]%Ta#`%Ta$O%Ta~P!1WO!g#vO~O#k0rO~O!]+^Oa)Ta'z)Ta~OR#zO!Q#yO!S#{O!l#xO(aVOP!ri[!rij!rir!ri!]!ri!p!ri#R!ri#n!ri#o!ri#p!ri#q!ri#r!ri#s!ri#t!ri#u!ri#v!ri#x!ri#z!ri#{!ri(r!ri(y!ri(z!ri~Oa!ri'z!ri'w!ri!Y!ri!k!riv!ri!_!ri%i!ri!g!ri~P$+oOh%VOr%XOs$tOt$tOz%YO|%ZO!O<sO!S${O!_$|O!i>VO!l$xO#j<yO$W%`O$t<uO$v<wO$y%aO(VTO(YUO(a$uO(y$}O(z%PO~Op0{O%]0|O(T0zO~P$.VO!g+iOa(]a!_(]a'z(]a!](]a~O#k1SO~O[]X!]fX!^fX~O!]1TO!^)XX~O!^1VO~O[1WO~Ob1YO(T+qO(VTO(YUO~O!_&PO(T%gO`'uX!]'uX~O!]+vO`)Wa~O!k1]O~P!:tO[1`O~O`1aO~O#`1fO~On1iO!_$|O~O(e(|O!^)UP~Oh%VOn1rO!_1oO%i1qO~O[1|O!]1zO!^)VX~O!^1}O~O`2POa%nO'z%nO~O(T#nO(VTO(YUO~O#S$dO#`$eO$Q$eOP(gXR(gX[(gXr(gX!Q(gX!S(gX!](gX!l(gX!p(gX#R(gX#n(gX#o(gX#p(gX#q(gX#r(gX#s(gX#t(gX#u(gX#v(gX#x(gX#z(gX#{(gX(a(gX(r(gX(y(gX(z(gX~Oj2SO&[2TOa(gX~P$3pOj2SO#`$eO&[2TO~Oa2VO~P%[Oa2XO~O&e2[OP&ciQ&ciS&ciY&cia&cid&cie&cil&cip&cir&cis&cit&ciz&ci|&ci!O&ci!S&ci!W&ci!X&ci!_&ci!i&ci!l&ci!o&ci!p&ci!q&ci!s&ci!u&ci!x&ci!|&ci$W&ci$n&ci%h&ci%j&ci%l&ci%m&ci%n&ci%q&ci%s&ci%v&ci%w&ci%y&ci&W&ci&^&ci&`&ci&b&ci&d&ci&g&ci&m&ci&s&ci&u&ci&w&ci&y&ci&{&ci'w&ci(T&ci(V&ci(Y&ci(a&ci(o&ci!^&cib&ci&j&ci~Ob2bO!^2`O&j2aO~P`O!_XO!l2dO~O&q,{OP&liQ&liS&liY&lia&lid&lie&lil&lip&lir&lis&lit&liz&li|&li!O&li!S&li!W&li!X&li!_&li!i&li!l&li!o&li!p&li!q&li!s&li!u&li!x&li!|&li$W&li$n&li%h&li%j&li%l&li%m&li%n&li%q&li%s&li%v&li%w&li%y&li&W&li&^&li&`&li&b&li&d&li&g&li&m&li&s&li&u&li&w&li&y&li&{&li'w&li(T&li(V&li(Y&li(a&li(o&li!^&li&e&lib&li&j&li~O!Y2jO~O!]!aa!^!aa~P#BwOs!nO!S!oO![2pO(e!mO!]'XX!^'XX~P@nO!]-]O!^(ia~O!]'_X!^'_X~P!9|O!]-`O!^(xa~O!^2wO~P'_Oa%nO#`3QO'z%nO~Oa%nO!g#vO#`3QO'z%nO~Oa%nO!g#vO!p3UO#`3QO'z%nO(r'pO~Oa%nO'z%nO~P!:tO!]$_Ov$qa~O!Y'Wi!]'Wi~P!:tO!](VO!Y(hi~O!](^O!Y(vi~O!Y(wi!](wi~P!:tO!](ti!k(tia(ti'z(ti~P!:tO#`3WO!](ti!k(tia(ti'z(ti~O!](jO!k(si~O!S%hO!_%iO!|]O#i3]O#j3[O(T%gO~O!S%hO!_%iO#j3[O(T%gO~On3dO!_'`O%i3cO~Oh%VOn3dO!_'`O%i3cO~O#k%aaP%aaR%aa[%aaa%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa'z%aa(a%aa(r%aa!k%aa!Y%aa'w%aav%aa!_%aa%i%aa!g%aa~P#L{O#k%caP%caR%ca[%caa%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca'z%ca(a%ca(r%ca!k%ca!Y%ca'w%cav%ca!_%ca%i%ca!g%ca~P#MnO#k%aaP%aaR%aa[%aaa%aaj%aar%aa!S%aa!]%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa'z%aa(a%aa(r%aa!k%aa!Y%aa'w%aa#`%aav%aa!_%aa%i%aa!g%aa~P#/sO#k%caP%caR%ca[%caa%caj%car%ca!S%ca!]%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca'z%ca(a%ca(r%ca!k%ca!Y%ca'w%ca#`%cav%ca!_%ca%i%ca!g%ca~P#/sO#k}aP}a[}aa}aj}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a'z}a(a}a(r}a!k}a!Y}a'w}av}a!_}a%i}a!g}a~P$(cO#k$saP$saR$sa[$saa$saj$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa'z$sa(a$sa(r$sa!k$sa!Y$sa'w$sav$sa!_$sa%i$sa!g$sa~P$)_O#k$uaP$uaR$ua[$uaa$uaj$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua'z$ua(a$ua(r$ua!k$ua!Y$ua'w$uav$ua!_$ua%i$ua!g$ua~P$*QO#k%TaP%TaR%Ta[%Taa%Taj%Tar%Ta!S%Ta!]%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta'z%Ta(a%Ta(r%Ta!k%Ta!Y%Ta'w%Ta#`%Tav%Ta!_%Ta%i%Ta!g%Ta~P#/sOa#cq!]#cq'z#cq'w#cq!Y#cq!k#cqv#cq!_#cq%i#cq!g#cq~P!:tO![3lO!]'YX!k'YX~P%[O!].tO!k(ka~O!].tO!k(ka~P!:tO!Y3oO~O$O!na!^!na~PKlO$O!ja!]!ja!^!ja~P#BwO$O!ra!^!ra~P!=[O$O!ta!^!ta~P!?rOg']X!]']X~P!,TO!]/POg(pa~OSfO!_4TO$d4UO~O!^4YO~Ov4ZO~P#/sOa$mq!]$mq'z$mq'w$mq!Y$mq!k$mqv$mq!_$mq%i$mq!g$mq~P!:tO!Y4]O~P!&zO!S4^O~O!Q*OO'y*PO(z%POn'ia(y'ia!]'ia#`'ia~Og'ia$O'ia~P%-fO!Q*OO'y*POn'ka(y'ka(z'ka!]'ka#`'ka~Og'ka$O'ka~P%.XO(r$YO~P#/sO!YfX!Y$zX!]fX!]$zX!g%RX#`fX~P!0SOp%WO(T=WO~P!1uOp4bO!S%hO![4aO!_%iO(T%gO!]'eX!k'eX~O!]/pO!k)Oa~O!]/pO!g#vO!k)Oa~O!]/pO!g#vO(r'pO!k)Oa~Og$|i!]$|i#`$|i$O$|i~P!1WO![4jO!Y'gX!]'gX~P!3tO!]/yO!Y)Pa~O!]/yO!Y)Pa~P#/sOP]XR]X[]Xj]Xr]X!Q]X!S]X!Y]X!]]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X~Oj%YX!g%YX~P%2OOj4oO!g#vO~Oh%VO!g#vO!l%eO~Oh%VOr4tO!l%eO(r'pO~Or4yO!g#vO(r'pO~Os!nO!S4zO(VTO(YUO(e!mO~O(y$}On%ai!Q%ai'y%ai(z%ai!]%ai#`%ai~Og%ai$O%ai~P%5oO(z%POn%ci!Q%ci'y%ci(y%ci!]%ci#`%ci~Og%ci$O%ci~P%6bOg(_i!](_i~P!1WO#`5QOg(_i!](_i~P!1WO!k5VO~Oa$oq!]$oq'z$oq'w$oq!Y$oq!k$oqv$oq!_$oq%i$oq!g$oq~P!:tO!Y5ZO~O!]5[O!_)QX~P#/sOa$zX!_$zX%^]X'z$zX!]$zX~P!0SO%^5_OaoX!_oX'zoX!]oX~P$#OOp5`O(T#nO~O%^5_O~Ob5fO%j5gO(T+qO(VTO(YUO!]'tX!^'tX~O!]1TO!^)Xa~O[5kO~O`5lO~O[5pO~Oa%nO'z%nO~P#/sO!]5uO#`5wO!^)UX~O!^5xO~Or6OOs!nO!S*iO!b!yO!c!vO!d!vO!|<VO#T!pO#U!pO#V!pO#W!pO#X!pO#[5}O#]!zO(U!lO(VTO(YUO(e!mO(o!sO~O!^5|O~P%;eOn6TO!_1oO%i6SO~Oh%VOn6TO!_1oO%i6SO~Ob6[O(T#nO(VTO(YUO!]'sX!^'sX~O!]1zO!^)Va~O(VTO(YUO(e6^O~O`6bO~Oj6eO&[6fO~PNXO!k6gO~P%[Oa6iO~Oa6iO~P%[Ob2bO!^6nO&j2aO~P`O!g6pO~O!g6rOh(ji!](ji!^(ji!g(ji!l(jir(ji(r(ji~O!]#hi!^#hi~P#BwO#`6sO!]#hi!^#hi~O!]!ai!^!ai~P#BwOa%nO#`6|O'z%nO~Oa%nO!g#vO#`6|O'z%nO~O!](tq!k(tqa(tq'z(tq~P!:tO!](jO!k(sq~O!S%hO!_%iO#j7TO(T%gO~O!_'`O%i7WO~On7[O!_'`O%i7WO~O#k'iaP'iaR'ia['iaa'iaj'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia'z'ia(a'ia(r'ia!k'ia!Y'ia'w'iav'ia!_'ia%i'ia!g'ia~P%-fO#k'kaP'kaR'ka['kaa'kaj'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka'z'ka(a'ka(r'ka!k'ka!Y'ka'w'kav'ka!_'ka%i'ka!g'ka~P%.XO#k$|iP$|iR$|i[$|ia$|ij$|ir$|i!S$|i!]$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i'z$|i(a$|i(r$|i!k$|i!Y$|i'w$|i#`$|iv$|i!_$|i%i$|i!g$|i~P#/sO#k%aiP%aiR%ai[%aia%aij%air%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai'z%ai(a%ai(r%ai!k%ai!Y%ai'w%aiv%ai!_%ai%i%ai!g%ai~P%5oO#k%ciP%ciR%ci[%cia%cij%cir%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci'z%ci(a%ci(r%ci!k%ci!Y%ci'w%civ%ci!_%ci%i%ci!g%ci~P%6bO!]'Ya!k'Ya~P!:tO!].tO!k(ki~O$O#ci!]#ci!^#ci~P#BwOP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mij#mir#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi$O#mi(r#mi(y#mi(z#mi!]#mi!^#mi~O#n#mi~P%NdO#n<_O~P%NdOP$[OR#zOr<kO!Q#yO!S#{O!l#xO!p$[O#n<_O#o<`O#p<`O#q<`O(aVO[#mij#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi$O#mi(r#mi(y#mi(z#mi!]#mi!^#mi~O#r#mi~P&!lO#r<aO~P&!lOP$[OR#zO[<mOj<bOr<kO!Q#yO!S#{O!l#xO!p$[O#R<bO#n<_O#o<`O#p<`O#q<`O#r<aO#s<bO#t<bO#u<lO(aVO#x#mi#z#mi#{#mi$O#mi(r#mi(y#mi(z#mi!]#mi!^#mi~O#v#mi~P&$tOP$[OR#zO[<mOj<bOr<kO!Q#yO!S#{O!l#xO!p$[O#R<bO#n<_O#o<`O#p<`O#q<`O#r<aO#s<bO#t<bO#u<lO#v<cO(aVO(z#}O#z#mi#{#mi$O#mi(r#mi(y#mi!]#mi!^#mi~O#x<eO~P&&uO#x#mi~P&&uO#v<cO~P&$tOP$[OR#zO[<mOj<bOr<kO!Q#yO!S#{O!l#xO!p$[O#R<bO#n<_O#o<`O#p<`O#q<`O#r<aO#s<bO#t<bO#u<lO#v<cO#x<eO(aVO(y#|O(z#}O#{#mi$O#mi(r#mi!]#mi!^#mi~O#z#mi~P&)UO#z<gO~P&)UOa#|y!]#|y'z#|y'w#|y!Y#|y!k#|yv#|y!_#|y%i#|y!g#|y~P!:tO[#mij#mir#mi#R#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi$O#mi(r#mi!]#mi!^#mi~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O#n<_O#o<`O#p<`O#q<`O(aVO(y#mi(z#mi~P&,QOn>^O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P&,QO#S$dOP(`XR(`X[(`Xj(`Xn(`Xr(`X!Q(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X$O(`X'y(`X(a(`X(r(`X(y(`X(z(`X!](`X!^(`X~O$O$Pi!]$Pi!^$Pi~P#BwO$O!ri!^!ri~P$+oOg']a!]']a~P!1WO!^7nO~O!]'da!^'da~P#BwO!Y7oO~P#/sO!g#vO(r'pO!]'ea!k'ea~O!]/pO!k)Oi~O!]/pO!g#vO!k)Oi~Og$|q!]$|q#`$|q$O$|q~P!1WO!Y'ga!]'ga~P#/sO!g7vO~O!]/yO!Y)Pi~P#/sO!]/yO!Y)Pi~O!Y7yO~Oh%VOr8OO!l%eO(r'pO~Oj8QO!g#vO~Or8TO!g#vO(r'pO~O!Q*OO'y*PO(z%POn'ja(y'ja!]'ja#`'ja~Og'ja$O'ja~P&5RO!Q*OO'y*POn'la(y'la(z'la!]'la#`'la~Og'la$O'la~P&5tOg(_q!](_q~P!1WO#`8VOg(_q!](_q~P!1WO!Y8WO~Og%Oq!]%Oq#`%Oq$O%Oq~P!1WOa$oy!]$oy'z$oy'w$oy!Y$oy!k$oyv$oy!_$oy%i$oy!g$oy~P!:tO!g6rO~O!]5[O!_)Qa~O!_'`OP$TaR$Ta[$Taj$Tar$Ta!Q$Ta!S$Ta!]$Ta!l$Ta!p$Ta#R$Ta#n$Ta#o$Ta#p$Ta#q$Ta#r$Ta#s$Ta#t$Ta#u$Ta#v$Ta#x$Ta#z$Ta#{$Ta(a$Ta(r$Ta(y$Ta(z$Ta~O%i7WO~P&8fO%^8[Oa%[i!_%[i'z%[i!]%[i~Oa#cy!]#cy'z#cy'w#cy!Y#cy!k#cyv#cy!_#cy%i#cy!g#cy~P!:tO[8^O~Ob8`O(T+qO(VTO(YUO~O!]1TO!^)Xi~O`8dO~O(e(|O!]'pX!^'pX~O!]5uO!^)Ua~O!^8nO~P%;eO(o!sO~P$&YO#[8oO~O!_1oO~O!_1oO%i8qO~On8tO!_1oO%i8qO~O[8yO!]'sa!^'sa~O!]1zO!^)Vi~O!k8}O~O!k9OO~O!k9RO~O!k9RO~P%[Oa9TO~O!g9UO~O!k9VO~O!](wi!^(wi~P#BwOa%nO#`9_O'z%nO~O!](ty!k(tya(ty'z(ty~P!:tO!](jO!k(sy~O%i9bO~P&8fO!_'`O%i9bO~O#k$|qP$|qR$|q[$|qa$|qj$|qr$|q!S$|q!]$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q'z$|q(a$|q(r$|q!k$|q!Y$|q'w$|q#`$|qv$|q!_$|q%i$|q!g$|q~P#/sO#k'jaP'jaR'ja['jaa'jaj'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja'z'ja(a'ja(r'ja!k'ja!Y'ja'w'jav'ja!_'ja%i'ja!g'ja~P&5RO#k'laP'laR'la['laa'laj'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la'z'la(a'la(r'la!k'la!Y'la'w'lav'la!_'la%i'la!g'la~P&5tO#k%OqP%OqR%Oq[%Oqa%Oqj%Oqr%Oq!S%Oq!]%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq'z%Oq(a%Oq(r%Oq!k%Oq!Y%Oq'w%Oq#`%Oqv%Oq!_%Oq%i%Oq!g%Oq~P#/sO!]'Yi!k'Yi~P!:tO$O#cq!]#cq!^#cq~P#BwO(y$}OP%aaR%aa[%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa$O%aa(a%aa(r%aa!]%aa!^%aa~On%aa!Q%aa'y%aa(z%aa~P&IyO(z%POP%caR%ca[%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca$O%ca(a%ca(r%ca!]%ca!^%ca~On%ca!Q%ca'y%ca(y%ca~P&LQOn>^O!Q*OO'y*PO(z%PO~P&IyOn>^O!Q*OO'y*PO(y$}O~P&LQOR0kO!Q0kO!S0lO#S$dOP}a[}aj}an}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a$O}a'y}a(a}a(r}a(y}a(z}a!]}a!^}a~O!Q*OO'y*POP$saR$sa[$saj$san$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa$O$sa(a$sa(r$sa(y$sa(z$sa!]$sa!^$sa~O!Q*OO'y*POP$uaR$ua[$uaj$uan$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua$O$ua(a$ua(r$ua(y$ua(z$ua!]$ua!^$ua~On>^O!Q*OO'y*PO(y$}O(z%PO~OP%TaR%Ta[%Taj%Tar%Ta!S%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta$O%Ta(a%Ta(r%Ta!]%Ta!^%Ta~P''VO$O$mq!]$mq!^$mq~P#BwO$O$oq!]$oq!^$oq~P#BwO!^9oO~O$O9pO~P!1WO!g#vO!]'ei!k'ei~O!g#vO(r'pO!]'ei!k'ei~O!]/pO!k)Oq~O!Y'gi!]'gi~P#/sO!]/yO!Y)Pq~Or9wO!g#vO(r'pO~O[9yO!Y9xO~P#/sO!Y9xO~Oj:PO!g#vO~Og(_y!](_y~P!1WO!]'na!_'na~P#/sOa%[q!_%[q'z%[q!]%[q~P#/sO[:UO~O!]1TO!^)Xq~O`:YO~O#`:ZO!]'pa!^'pa~O!]5uO!^)Ui~P#BwO!S:]O~O!_1oO%i:`O~O(VTO(YUO(e:eO~O!]1zO!^)Vq~O!k:hO~O!k:iO~O!k:jO~O!k:jO~P%[O#`:mO!]#hy!^#hy~O!]#hy!^#hy~P#BwO%i:rO~P&8fO!_'`O%i:rO~O$O#|y!]#|y!^#|y~P#BwOP$|iR$|i[$|ij$|ir$|i!S$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i$O$|i(a$|i(r$|i!]$|i!^$|i~P''VO!Q*OO'y*PO(z%POP'iaR'ia['iaj'ian'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia$O'ia(a'ia(r'ia(y'ia!]'ia!^'ia~O!Q*OO'y*POP'kaR'ka['kaj'kan'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka$O'ka(a'ka(r'ka(y'ka(z'ka!]'ka!^'ka~O(y$}OP%aiR%ai[%aij%ain%air%ai!Q%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai$O%ai'y%ai(a%ai(r%ai(z%ai!]%ai!^%ai~O(z%POP%ciR%ci[%cij%cin%cir%ci!Q%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci$O%ci'y%ci(a%ci(r%ci(y%ci!]%ci!^%ci~O$O$oy!]$oy!^$oy~P#BwO$O#cy!]#cy!^#cy~P#BwO!g#vO!]'eq!k'eq~O!]/pO!k)Oy~O!Y'gq!]'gq~P#/sOr:|O!g#vO(r'pO~O[;QO!Y;PO~P#/sO!Y;PO~Og(_!R!](_!R~P!1WOa%[y!_%[y'z%[y!]%[y~P#/sO!]1TO!^)Xy~O!]5uO!^)Uq~O(T;XO~O!_1oO%i;[O~O!k;_O~O%i;dO~P&8fOP$|qR$|q[$|qj$|qr$|q!S$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q$O$|q(a$|q(r$|q!]$|q!^$|q~P''VO!Q*OO'y*PO(z%POP'jaR'ja['jaj'jan'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja$O'ja(a'ja(r'ja(y'ja!]'ja!^'ja~O!Q*OO'y*POP'laR'la['laj'lan'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la$O'la(a'la(r'la(y'la(z'la!]'la!^'la~OP%OqR%Oq[%Oqj%Oqr%Oq!S%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq$O%Oq(a%Oq(r%Oq!]%Oq!^%Oq~P''VOg%e!Z!]%e!Z#`%e!Z$O%e!Z~P!1WO!Y;hO~P#/sOr;iO!g#vO(r'pO~O[;kO!Y;hO~P#/sO!]'pq!^'pq~P#BwO!]#h!Z!^#h!Z~P#BwO#k%e!ZP%e!ZR%e!Z[%e!Za%e!Zj%e!Zr%e!Z!S%e!Z!]%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z'z%e!Z(a%e!Z(r%e!Z!k%e!Z!Y%e!Z'w%e!Z#`%e!Zv%e!Z!_%e!Z%i%e!Z!g%e!Z~P#/sOr;tO!g#vO(r'pO~O!Y;uO~P#/sOr;|O!g#vO(r'pO~O!Y;}O~P#/sOP%e!ZR%e!Z[%e!Zj%e!Zr%e!Z!S%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z$O%e!Z(a%e!Z(r%e!Z!]%e!Z!^%e!Z~P''VOr<QO!g#vO(r'pO~Ov(fX~P1qO!Q%rO~P!)[O(U!lO~P!)[O!YfX!]fX#`fX~P%2OOP]XR]X[]Xj]Xr]X!Q]X!S]X!]]X!]fX!l]X!p]X#R]X#S]X#`]X#`fX#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X~O!gfX!k]X!kfX(rfX~P'LTOP<UOQ<UOSfOd>ROe!iOpkOr<UOskOtkOzkO|<UO!O<UO!SWO!WkO!XkO!_XO!i<XO!lZO!o<UO!p<UO!q<UO!s<YO!u<]O!x!hO$W!kO$n>PO(T)]O(VTO(YUO(aVO(o[O~O!]<iO!^$qa~Oh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O<tO!S${O!_$|O!i>WO!l$xO#j<zO$W%`O$t<vO$v<xO$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Ol)dO~P(!yOr!eX(r!eX~P#!iOr(jX(r(jX~P##[O!^]X!^fX~P'LTO!YfX!Y$zX!]fX!]$zX#`fX~P!0SO#k<^O~O!g#vO#k<^O~O#`<nO~Oj<bO~O#`=OO!](wX!^(wX~O#`<nO!](uX!^(uX~O#k=PO~Og=RO~P!1WO#k=XO~O#k=YO~Og=RO(T&ZO~O!g#vO#k=ZO~O!g#vO#k=PO~O$O=[O~P#BwO#k=]O~O#k=^O~O#k=cO~O#k=dO~O#k=eO~O#k=fO~O$O=gO~P!1WO$O=hO~P!1WOl=sO~P7eOk#S#T#U#W#X#[#i#j#u$n$t$v$y%]%^%h%i%j%q%s%v%w%y%{~(OT#o!X'|(U#ps#n#qr!Q'}$]'}(T$_(e~\",\n  goto: \"$9Y)]PPPPPP)^PP)aP)rP+W/]PPPP6mPP7TPP=QPPP@tPA^PA^PPPA^PCfPA^PA^PA^PCjPCoPD^PIWPPPI[PPPPI[L_PPPLeMVPI[PI[PP! eI[PPPI[PI[P!#lI[P!'S!(X!(bP!)U!)Y!)U!,gPPPPPPP!-W!(XPP!-h!/YP!2iI[I[!2n!5z!:h!:h!>gPPP!>oI[PPPPPPPPP!BOP!C]PPI[!DnPI[PI[I[I[I[I[PI[!FQP!I[P!LbP!Lf!Lp!Lt!LtP!IXP!Lx!LxP#!OP#!SI[PI[#!Y#%_CjA^PA^PA^A^P#&lA^A^#)OA^#+vA^#.SA^A^#.r#1W#1W#1]#1f#1W#1qPP#1WPA^#2ZA^#6YA^A^6mPPP#:_PPP#:x#:xP#:xP#;`#:xPP#;fP#;]P#;]#;y#;]#<e#<k#<n)aP#<q)aP#<z#<z#<zP)aP)aP)aP)aPP)aP#=Q#=TP#=T)aP#=XP#=[P)aP)aP)aP)aP)aP)a)aPP#=b#=h#=s#=y#>P#>V#>]#>k#>q#>{#?R#?]#?c#?s#?y#@k#@}#AT#AZ#Ai#BO#Cs#DR#DY#Et#FS#Gt#HS#HY#H`#Hf#Hp#Hv#H|#IW#Ij#IpPPPPPPPPPPP#IvPPPPPPP#Jk#Mx$ b$ i$ qPPP$']P$'f$*_$0x$0{$1O$1}$2Q$2X$2aP$2g$2jP$3W$3[$4S$5b$5g$5}PP$6S$6Y$6^$6a$6e$6i$7e$7|$8e$8i$8l$8o$8y$8|$9Q$9UR!|RoqOXst!Z#d%m&r&t&u&w,s,x2[2_Y!vQ'`-e1o5{Q%tvQ%|yQ&T|Q&j!VS'W!e-]Q'f!iS'l!r!yU*k$|*Z*oQ+o%}S+|&V&WQ,d&dQ-c'_Q-m'gQ-u'mQ0[*qQ1b,OQ1y,eR<{<Y%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_S#q]<V!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SU+P%]<s<tQ+t&PQ,f&gQ,m&oQ0x+gQ0}+iQ1Y+uQ2R,kQ3`.gQ5`0|Q5f1TQ6[1zQ7Y3dQ8`5gR9e7['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>S!S!nQ!r!v!y!z$|'W'_'`'l'm'n*k*o*q*r-]-c-e-u0[0_1o5{5}%[$ti#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;k<l<m<o<p<q<r<u<v<w<x<y<z=S=T=U=V=X=Y=]=^=_=`=a=b=c=d=g=h>P>X>Y>]>^Q&X|Q'U!eS'[%i-`Q+t&PQ,P&WQ,f&gQ0n+SQ1Y+uQ1_+{Q2Q,jQ2R,kQ5f1TQ5o1aQ6[1zQ6_1|Q6`2PQ8`5gQ8c5lQ8|6bQ:X8dQ:f8yQ;V:YR<}*ZrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R,h&k&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'b'r(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>R>S[#]WZ#W#Z'X(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ%wxQ%{yW&Q|&V&W,OQ&_!TQ'c!hQ'e!iQ(q#sS+n%|%}Q+r&PQ,_&bQ,c&dS-l'f'gQ.i(rQ1R+oQ1X+uQ1Z+vQ1^+zQ1t,`S1x,d,eQ2|-mQ5e1TQ5i1WQ5n1`Q6Z1yQ8_5gQ8b5kQ8f5pQ:T8^R;T:U!U$zi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y!^%yy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{Q+h%wQ,T&[Q,W&]Q,b&dQ.h(qQ1s,_U1w,c,d,eQ3e.iQ6U1tS6Y1x1yQ8x6Z#f>T#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^o>U<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=hW%Ti%V*y>PS&[!Q&iQ&]!RQ&^!SU*}%[%d=sR,R&Y%]%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;k<l<m<o<p<q<r<u<v<w<x<y<z=S=T=U=V=X=Y=]=^=_=`=a=b=c=d=g=h>P>X>Y>]>^T)z$u){V+P%]<s<tW'[!e%i*Z-`S(}#y#zQ+c%rQ+y&SS.b(m(nQ1j,XQ5T0kR8i5u'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>S$i$^c#Y#e%q%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.|.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`<W=vT#TV#U'RkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SQ'Y!eR2q-]!W!nQ!e!r!v!y!z$|'W'_'`'l'm'n*Z*k*o*q*r-]-c-e-u0[0_1o5{5}R1l,ZnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&y!^Q'v!xS(s#u<^Q+l%zQ,]&_Q,^&aQ-j'dQ-w'oS.r(x=PS0q+X=ZQ1P+mQ1n,[Q2c,zQ2e,{Q2m-WQ2z-kQ2}-oS5Y0r=eQ5a1QS5d1S=fQ6t2oQ6x2{Q6}3SQ8]5bQ9Y6vQ9Z6yQ9^7OR:l9V$d$]c#Y#e%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`<W=vS(o#p'iQ)P#zS+b%q.|S.c(n(pR3^.d'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SS#q]<VQ&t!XQ&u!YQ&w![Q&x!]R2Z,vQ'a!hQ+e%wQ-h'cS.e(q+hQ2x-gW3b.h.i0w0yQ6w2yW7U3_3a3e5^U9a7V7X7ZU:q9c9d9fS;b:p:sQ;p;cR;x;qU!wQ'`-eT5y1o5{!Q_OXZ`st!V!Z#d#h%e%m&i&k&r&t&u&w(j,s,x.[2[2_]!pQ!r'`-e1o5{T#q]<V%^{OPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_S(}#y#zS.b(m(n!s=l$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SU$fd)_,mS(p#p'iU*v%R(w4OU0m+O.n7gQ5^0xQ7V3`Q9d7YR:s9em!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}Q't!uS(f#g2US-s'k'wQ/s*]Q0R*jQ3U-vQ4f/tQ4r0TQ4s0UQ4x0^Q7r4`S7}4t4vS8R4y4{Q9r7sQ9v7yQ9{8OQ:Q8TS:{9w9xS;g:|;PS;s;h;iS;{;t;uS<P;|;}R<S<QQ#wbQ's!uS(e#g2US(g#m+WQ+Y%fQ+j%xQ+p&OU-r'k't'wQ.W(fU/r*]*`/wQ0S*jQ0V*lQ1O+kQ1u,aS3R-s-vQ3Z.`S4e/s/tQ4n0PS4q0R0^Q4u0WQ6W1vQ7P3US7q4`4bQ7u4fU7|4r4x4{Q8P4wQ8v6XS9q7r7sQ9u7yQ9}8RQ:O8SQ:c8wQ:y9rS:z9v9xQ;S:QQ;^:dS;f:{;PS;r;g;hS;z;s;uS<O;{;}Q<R<PQ<T<SQ=o=jQ={=tR=|=uV!wQ'`-e%^aOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_S#wz!j!r=i$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SR=o>R%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Q%fj!^%xy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{S&Oz!jQ+k%yQ,a&dW1v,b,c,d,eU6X1w1x1yS8w6Y6ZQ:d8x!r=j$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SQ=t>QR=u>R%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Y#bWZ#W#Z(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ,n&o!p=k$Z$n)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SR=n'XU']!e%i*ZR2s-`%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SQ,m&oQ0x+gQ3`.gQ7Y3dR9e7[!b$Tc#Y%q(S(Y(t(y)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:o<W!P<d)^)q-Z.|2k2n3p3y3z4P4X6u7b7k7l8k9X9g9m9n;W;`=v!f$Vc#Y%q(S(Y(t(y)W)X)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:o<W!T<f)^)q-Z.|2k2n3p3v3w3y3z4P4X6u7b7k7l8k9X9g9m9n;W;`=v!^$Zc#Y%q(S(Y(t(y)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:o<WQ4_/kz>S)^)q-Z.|2k2n3p4P4X6u7b7k7l8k9X9g9m9n;W;`=vQ>X>ZR>Y>['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SS$oh$pR4U/U'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>ST$kf$qQ$ifS)j$l)nR)v$qT$jf$qT)l$l)n'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>ST$oh$pQ$rhR)u$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_!s>Q$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>S#glOPXZst!Z!`!o#S#d#o#{$n%m&k&n&o&r&t&u&w&{'T'b)O)s*i+]+g,p,s,x-i.g/V/n0]0l1r2S2T2V2X2[2_2a3d4T4z6T6e6f6i7[8t9T!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^Q+T%aQ/c*Oo4O<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=h!U$yi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>YQ*c$zU*l$|*Z*oQ+U%bQ0W*m#f=q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^n=r<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=hQ=w>TQ=x>UQ=y>VR=z>W!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^o4O<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=hnoOXst!Z#d%m&r&t&u&w,s,x2[2_S*f${*YQ-R'OQ-S'QR4i/y%[%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;k<l<m<o<p<q<r<u<v<w<x<y<z=S=T=U=V=X=Y=]=^=_=`=a=b=c=d=g=h>P>X>Y>]>^Q,U&]Q1h,WQ5s1gR8h5tV*n$|*Z*oU*n$|*Z*oT5z1o5{S0P*i/nQ4w0]T8S4z:]Q+j%xQ0V*lQ1O+kQ1u,aQ6W1vQ8v6XQ:c8wR;^:d!U%Oi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Yx*R$v)e*S*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>OS0`*t0a#f<o#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^n<p<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=h!d=S(u)c*[*e.j.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[`=T3}7c7f7j9h:t:w;yS=_.l3iT=`7e9k!U%Qi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y|*T$v)e*U*t+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>OS0b*u0c#f<q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^n<r<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=h!h=U(u)c*[*e.k.l.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[d=V3}7d7e7j9h9i:t:u:w;yS=a.m3jT=b7f9lrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q&f!UR,p&ornOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R&f!UQ,Y&^R1d,RsnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q1p,_S6R1s1tU8p6P6Q6US:_8r8sS;Y:^:aQ;m;ZR;w;nQ&m!VR,i&iR6_1|R:f8yW&Q|&V&W,OR1Z+vQ&r!WR,s&sR,y&xT2],x2_R,}&yQ,|&yR2f,}Q'y!{R-y'ySsOtQ#dXT%ps#dQ#OTR'{#OQ#RUR'}#RQ){$uR/`){Q#UVR(Q#UQ#XWU(W#X(X.QQ(X#YR.Q(YQ-^'YR2r-^Q.u(yS3m.u3nR3n.vQ-e'`R2v-eY!rQ'`-e1o5{R'j!rQ/Q)eR4S/QU#_W%h*YU(_#_(`.RQ(`#`R.R(ZQ-a']R2t-at`OXst!V!Z#d%m&i&k&r&t&u&w,s,x2[2_S#hZ%eU#r`#h.[R.[(jQ(k#jQ.X(gW.a(k.X3X7RQ3X.YR7R3YQ)n$lR/W)nQ$phR)t$pQ$`cU)a$`-|<jQ-|<WR<j)qQ/q*]W4c/q4d7t9sU4d/r/s/tS7t4e4fR9s7u$e*Q$v(u)c)e*[*e*t*u+Q+R+V.l.m.o.p.q/_/g/i/k/v/|0d0e0v1e3f3g3h3}4R4[4g4h4l4|5O5R5S5W5r7]7^7_7`7e7f7h7i7j7p7w7z8U8X8Z9h9i9j9t9|:R:S:t:u:v:w:x:};R;e;j;v;y=p=}>O>Z>[Q/z*eU4k/z4m7xQ4m/|R7x4lS*o$|*ZR0Y*ox*S$v)e*t*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>O!d.j(u)c*[*e.l.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/h*S.j7ca7c3}7e7f7j9h:t:w;yQ0a*tQ3i.lU4}0a3i9kR9k7e|*U$v)e*t*u+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>O!h.k(u)c*[*e.l.m.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/j*U.k7de7d3}7e7f7j9h9i:t:u:w;yQ0c*uQ3j.mU5P0c3j9lR9l7fQ*z%UR0g*zQ5]0vR8Y5]Q+_%kR0u+_Q5v1jS8j5v:[R:[8kQ,[&_R1m,[Q5{1oR8m5{Q1{,fS6]1{8zR8z6_Q1U+rW5h1U5j8a:VQ5j1XQ8a5iR:V8bQ+w&QR1[+wQ2_,xR6m2_YrOXst#dQ&v!ZQ+a%mQ,r&rQ,t&tQ,u&uQ,w&wQ2Y,sS2],x2_R6l2[Q%opQ&z!_Q&}!aQ'P!bQ'R!cQ'q!uQ+`%lQ+l%zQ,Q&XQ,h&mQ-P&|W-p'k's't'wQ-w'oQ0X*nQ1P+mQ1c,PS2O,i,lQ2g-OQ2h-RQ2i-SQ2}-oW3P-r-s-v-xQ5a1QQ5m1_Q5q1eQ6V1uQ6a2QQ6k2ZU6z3O3R3UQ6}3SQ8]5bQ8e5oQ8g5rQ8l5zQ8u6WQ8{6`S9[6{7PQ9^7OQ:W8cQ:b8vQ:g8|Q:n9]Q;U:XQ;]:cQ;a:oQ;l;VR;o;^Q%zyQ'd!iQ'o!uU+m%{%|%}Q-W'VU-k'e'f'gS-o'k'uQ0Q*jS1Q+n+oQ2o-YS2{-l-mQ3S-tS4p0R0UQ5b1RQ6v2uQ6y2|Q7O3TU7{4r4s4vQ9z7}R;O9{S$wi>PR*{%VU%Ui%V>PR0f*yQ$viS(u#v+iS)c$b$cQ)e$dQ*[$xS*e${*YQ*t%OQ*u%QQ+Q%^Q+R%_Q+V%cQ.l<oQ.m<qQ.o<uQ.p<wQ.q<yQ/_)yQ/g*RQ/i*TQ/k*VQ/v*aS/|*g/mQ0d*wQ0e*xl0v+f,V.f1i1q3c6S7W8q9b:`:r;[;dQ1e,SQ3f=SQ3g=UQ3h=XS3}<l<mQ4R/PS4[/d4^Q4g/xQ4h/yQ4l/{Q4|0`Q5O0bQ5R0iQ5S0jQ5W0oQ5r1fQ7]=]Q7^=_Q7_=aQ7`=cQ7e<pQ7f<rQ7h<vQ7i<xQ7j<zQ7p4_Q7w4jQ7z4oQ8U5QQ8X5[Q8Z5_Q9h=YQ9i=TQ9j=VQ9t7vQ9|8QQ:R8VQ:S8[Q:t=^Q:u=`Q:v=bQ:w=dQ:x9pQ:}9yQ;R:PQ;e=gQ;j;QQ;v;kQ;y=hQ=p>PQ=}>XQ>O>YQ>Z>]R>[>^Q+O%]Q.n<sR7g<tnpOXst!Z#d%m&r&t&u&w,s,x2[2_Q!fPS#fZ#oQ&|!`W'h!o*i0]4zQ(P#SQ)Q#{Q)r$nS,l&k&nQ,q&oQ-O&{S-T'T/nQ-g'bQ.x)OQ/[)sQ0s+]Q0y+gQ2W,pQ2y-iQ3a.gQ4W/VQ5U0lQ6Q1rQ6c2SQ6d2TQ6h2VQ6j2XQ6o2aQ7Z3dQ7m4TQ8s6TQ9P6eQ9Q6fQ9S6iQ9f7[Q:a8tR:k9T#[cOPXZst!Z!`!o#d#o#{%m&k&n&o&r&t&u&w&{'T'b)O*i+]+g,p,s,x-i.g/n0]0l1r2S2T2V2X2[2_2a3d4z6T6e6f6i7[8t9TQ#YWQ#eYQ%quQ%svS%uw!gS(S#W(VQ(Y#ZQ(t#uQ(y#xQ)R$OQ)S$PQ)T$QQ)U$RQ)V$SQ)W$TQ)X$UQ)Y$VQ)Z$WQ)[$XQ)^$ZQ)`$_Q)b$aQ)g$eW)q$n)s/V4TQ+d%tQ+x&RS-Z'X2pQ-x'rS-}(T.PQ.S(]Q.U(dQ.s(xQ.v(zQ.z<UQ.|<XQ.}<YQ/O<]Q/b)}Q0p+XQ2k-UQ2n-XQ3O-qQ3V.VQ3k.tQ3p<^Q3q<_Q3r<`Q3s<aQ3t<bQ3u<cQ3v<dQ3w<eQ3x<fQ3y<gQ3z<hQ3{.{Q3|<kQ4P<nQ4Q<{Q4X<iQ5X0rQ5c1SQ6u=OQ6{3QQ7Q3WQ7a3lQ7b=PQ7k=RQ7l=ZQ8k5wQ9X6sQ9]6|Q9g=[Q9m=eQ9n=fQ:o9_Q;W:ZQ;`:mQ<W#SR=v>SR#[WR'Z!el!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}S'V!e-]U*j$|*Z*oS-Y'W'_S0U*k*qQ0^*rQ2u-cQ4v0[R4{0_R({#xQ!fQT-d'`-e]!qQ!r'`-e1o5{Q#p]R'i<VR)f$dY!uQ'`-e1o5{Q'k!rS'u!v!yS'w!z5}S-t'l'mQ-v'nR3T-uT#kZ%eS#jZ%eS%km,oU(g#h#i#lS.Y(h(iQ.^(jQ0t+^Q3Y.ZU3Z.[.]._S7S3[3]R9`7Td#^W#W#Z%h(T(^*Y+Z.T/mr#gZm#h#i#l%e(h(i(j+^.Z.[.]._3[3]7TS*]$x*bQ/t*^Q2U,oQ2l-VQ4`/pQ6q2dQ7s4aQ9W6rT=m'X+[V#aW%h*YU#`W%h*YS(U#W(^U(Z#Z+Z/mS-['X+[T.O(T.TV'^!e%i*ZQ$lfR)x$qT)m$l)nR4V/UT*_$x*bT*h${*YQ0w+fQ1g,VQ3_.fQ5t1iQ6P1qQ7X3cQ8r6SQ9c7WQ:^8qQ:p9bQ;Z:`Q;c:rQ;n;[R;q;dnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&l!VR,h&itmOXst!U!V!Z#d%m&i&r&t&u&w,s,x2[2_R,o&oT%lm,oR1k,XR,g&gQ&U|S+}&V&WR1^,OR+s&PT&p!W&sT&q!W&sT2^,x2_\",\n  nodeNames: \"⚠ ArithOp ArithOp ?. JSXStartTag LineComment BlockComment Script Hashbang ExportDeclaration export Star as VariableName String Escape from ; default FunctionDeclaration async function VariableDefinition > < TypeParamList in out const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration defer ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem\",\n  maxTerm: 380,\n  context: trackNewline,\n  nodeProps: [\n    [\"isolate\", -8,5,6,14,37,39,51,53,55,\"\"],\n    [\"group\", -26,9,17,19,68,207,211,215,216,218,221,224,234,237,243,245,247,249,252,258,264,266,268,270,272,274,275,\"Statement\",-34,13,14,32,35,36,42,51,54,55,57,62,70,72,76,80,82,84,85,110,111,120,121,136,139,141,142,143,144,145,147,148,167,169,171,\"Expression\",-23,31,33,37,41,43,45,173,175,177,178,180,181,182,184,185,186,188,189,190,201,203,205,206,\"Type\",-3,88,103,109,\"ClassItem\"],\n    [\"openedBy\", 23,\"<\",38,\"InterpolationStart\",56,\"[\",60,\"{\",73,\"(\",160,\"JSXStartCloseTag\"],\n    [\"closedBy\", -2,24,168,\">\",40,\"InterpolationEnd\",50,\"]\",61,\"}\",74,\")\",165,\"JSXEndTag\"]\n  ],\n  propSources: [jsHighlight],\n  skippedNodes: [0,5,6,278],\n  repeatNodeCount: 37,\n  tokenData: \"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$<r#p#q$=h#q#r$>x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$i&j(Wp(Z!b'|0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(X#S$i&j'}0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$i&j(Wp(Z!b'}0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$i&j!p),Q(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(V':f$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$i&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$d`$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$d``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$d`$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(Z!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$d`(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$i&j(Wp(Z!bOY%ZYZ&cZq%Zqr<Srs&}st%ZtuCruw%Zwx(rx!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr(r<__WS$i&j(Wp(Z!bOY<SYZ&cZr<Srs=^sw<Swx@nx!^<S!^!_Bm!_#O<S#O#P>`#P#o<S#o#pBm#p;'S<S;'S;=`Cl<%lO<S(Q=g]WS$i&j(Z!bOY=^YZ&cZw=^wx>`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$i&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(Z!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$i&j(WpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(WpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Wp(Z!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l<S%9[C}i$i&j(o%1l(Wp(Z!bOY%ZYZ&cZr%Zrs&}st%ZtuCruw%Zwx(rx!Q%Z!Q![Cr![!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr%9[EoP;=`<%lCr07[FRk$i&j(Wp(Z!b$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr+dHRk$i&j(Wp(Z!b$]#tOY%ZYZ&cZr%Zrs&}st%ZtuGvuw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Gv![!^%Z!^!_*g!_!c%Z!c!}Gv!}#O%Z#O#P&c#P#R%Z#R#SGv#S#T%Z#T#oGv#o#p*g#p$g%Z$g;'SGv;'S;=`Iv<%lOGv+dIyP;=`<%lGv07[JPP;=`<%lEr(KWJ_`$i&j(Wp(Z!b#p(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KWKl_$i&j$Q(Ch(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z,#xLva(z+JY$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sv%ZvwM{wx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KWNW`$i&j#z(Ch(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At! c_(Y';W$i&j(WpOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b'l!!i_$i&j(WpOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b&z!#mX$i&jOw!#hwx6cx!^!#h!^!_!$Y!_#o!#h#o#p!$Y#p;'S!#h;'S;=`!$r<%lO!#h`!$]TOw!$Ywx7]x;'S!$Y;'S;=`!$l<%lO!$Y`!$oP;=`<%l!$Y&z!$uP;=`<%l!#h'l!%R]$d`$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(r!Q!&PZ(WpOY!%zYZ!$YZr!%zrs!$Ysw!%zwx!&rx#O!%z#O#P!$Y#P;'S!%z;'S;=`!']<%lO!%z!Q!&yU$d`(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)r!Q!'`P;=`<%l!%z'l!'fP;=`<%l!!b/5|!'t_!l/.^$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#&U!)O_!k!Lf$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z-!n!*[b$i&j(Wp(Z!b(U%&f#q(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rxz%Zz{!+d{!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW!+o`$i&j(Wp(Z!b#n(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z+;x!,|`$i&j(Wp(Z!br+4YOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z,$U!.Z_!]+Jf$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[!/ec$i&j(Wp(Z!b!Q.2^OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!0p!P!Q%Z!Q![!3Y![!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#%|!0ya$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!2O!P!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#%|!2Z_![!L^$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!3eg$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!3Y![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S!3Y#S#X%Z#X#Y!4|#Y#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!5Vg$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx{%Z{|!6n|}%Z}!O!6n!O!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!6wc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!8_c$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[!9uf$i&j(Wp(Z!b#o(ChOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcxz!;Zz{#-}{!P!;Z!P!Q#/d!Q!^!;Z!^!_#(i!_!`#7S!`!a#8i!a!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z?O!;fb$i&j(Wp(Z!b!X7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z>^!<w`$i&j(Z!b!X7`OY!<nYZ&cZw!<nwx!=yx!P!<n!P!Q!Eq!Q!^!<n!^!_!Gr!_!}!<n!}#O!KS#O#P!Dy#P#o!<n#o#p!Gr#p;'S!<n;'S;=`!L]<%lO!<n<z!>Q^$i&j!X7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y<z!?Td$i&j!X7`O!^&c!_#W&c#W#X!>|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!X7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!X7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c<z!C][$i&jOY!CWYZ&cZ!^!CW!^!_!Ar!_#O!CW#O#P!DR#P#Q!=y#Q#o!CW#o#p!Ar#p;'S!CW;'S;=`!Ds<%lO!CW<z!DWX$i&jOY!CWYZ&cZ!^!CW!^!_!Ar!_#o!CW#o#p!Ar#p;'S!CW;'S;=`!Ds<%lO!CW<z!DvP;=`<%l!CW<z!EOX$i&jOY!=yYZ&cZ!^!=y!^!_!@c!_#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y<z!EnP;=`<%l!=y>^!Ezl$i&j(Z!b!X7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(Z!b!X7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(Z!b!X7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(Z!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$i&j(Z!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!<n#Q#o!KS#o#p!JU#p;'S!KS;'S;=`!LV<%lO!KS>^!LYP;=`<%l!KS>^!L`P;=`<%l!<n=l!Ll`$i&j(Wp!X7`OY!LcYZ&cZr!Lcrs!=ys!P!Lc!P!Q!Mn!Q!^!Lc!^!_# o!_!}!Lc!}#O#%P#O#P!Dy#P#o!Lc#o#p# o#p;'S!Lc;'S;=`#&Y<%lO!Lc=l!Mwl$i&j(Wp!X7`OY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#W(r#W#X!Mn#X#Z(r#Z#[!Mn#[#](r#]#^!Mn#^#a(r#a#b!Mn#b#g(r#g#h!Mn#h#i(r#i#j!Mn#j#k!Mn#k#m(r#m#n!Mn#n#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(r8Q# vZ(Wp!X7`OY# oZr# ors!@cs!P# o!P!Q#!i!Q!}# o!}#O#$R#O#P!Bq#P;'S# o;'S;=`#$y<%lO# o8Q#!pe(Wp!X7`OY)rZr)rs#O)r#P#W)r#W#X#!i#X#Z)r#Z#[#!i#[#])r#]#^#!i#^#a)r#a#b#!i#b#g)r#g#h#!i#h#i)r#i#j#!i#j#k#!i#k#m)r#m#n#!i#n;'S)r;'S;=`*Z<%lO)r8Q#$WX(WpOY#$RZr#$Rrs!Ars#O#$R#O#P!B[#P#Q# o#Q;'S#$R;'S;=`#$s<%lO#$R8Q#$vP;=`<%l#$R8Q#$|P;=`<%l# o=l#%W^$i&j(WpOY#%PYZ&cZr#%Prs!CWs!^#%P!^!_#$R!_#O#%P#O#P!DR#P#Q!Lc#Q#o#%P#o#p#$R#p;'S#%P;'S;=`#&S<%lO#%P=l#&VP;=`<%l#%P=l#&]P;=`<%l!Lc?O#&kn$i&j(Wp(Z!b!X7`OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#W%Z#W#X#&`#X#Z%Z#Z#[#&`#[#]%Z#]#^#&`#^#a%Z#a#b#&`#b#g%Z#g#h#&`#h#i%Z#i#j#&`#j#k#&`#k#m%Z#m#n#&`#n#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z9d#(r](Wp(Z!b!X7`OY#(iZr#(irs!Grsw#(iwx# ox!P#(i!P!Q#)k!Q!}#(i!}#O#+`#O#P!Bq#P;'S#(i;'S;=`#,`<%lO#(i9d#)th(Wp(Z!b!X7`OY*gZr*grs'}sw*gwx)rx#O*g#P#W*g#W#X#)k#X#Z*g#Z#[#)k#[#]*g#]#^#)k#^#a*g#a#b#)k#b#g*g#g#h#)k#h#i*g#i#j#)k#j#k#)k#k#m*g#m#n#)k#n;'S*g;'S;=`+Z<%lO*g9d#+gZ(Wp(Z!bOY#+`Zr#+`rs!JUsw#+`wx#$Rx#O#+`#O#P!B[#P#Q#(i#Q;'S#+`;'S;=`#,Y<%lO#+`9d#,]P;=`<%l#+`9d#,cP;=`<%l#(i?O#,o`$i&j(Wp(Z!bOY#,fYZ&cZr#,frs!KSsw#,fwx#%Px!^#,f!^!_#+`!_#O#,f#O#P!DR#P#Q!;Z#Q#o#,f#o#p#+`#p;'S#,f;'S;=`#-q<%lO#,f?O#-tP;=`<%l#,f?O#-zP;=`<%l!;Z07[#.[b$i&j(Wp(Z!b(O0/l!X7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z07[#/o_$i&j(Wp(Z!bT0/lOY#/dYZ&cZr#/drs#0nsw#/dwx#4Ox!^#/d!^!_#5}!_#O#/d#O#P#1p#P#o#/d#o#p#5}#p;'S#/d;'S;=`#6|<%lO#/d06j#0w]$i&j(Z!bT0/lOY#0nYZ&cZw#0nwx#1px!^#0n!^!_#3R!_#O#0n#O#P#1p#P#o#0n#o#p#3R#p;'S#0n;'S;=`#3x<%lO#0n05W#1wX$i&jT0/lOY#1pYZ&cZ!^#1p!^!_#2d!_#o#1p#o#p#2d#p;'S#1p;'S;=`#2{<%lO#1p0/l#2iST0/lOY#2dZ;'S#2d;'S;=`#2u<%lO#2d0/l#2xP;=`<%l#2d05W#3OP;=`<%l#1p01O#3YW(Z!bT0/lOY#3RZw#3Rwx#2dx#O#3R#O#P#2d#P;'S#3R;'S;=`#3r<%lO#3R01O#3uP;=`<%l#3R06j#3{P;=`<%l#0n05x#4X]$i&j(WpT0/lOY#4OYZ&cZr#4Ors#1ps!^#4O!^!_#5Q!_#O#4O#O#P#1p#P#o#4O#o#p#5Q#p;'S#4O;'S;=`#5w<%lO#4O00^#5XW(WpT0/lOY#5QZr#5Qrs#2ds#O#5Q#O#P#2d#P;'S#5Q;'S;=`#5q<%lO#5Q00^#5tP;=`<%l#5Q05x#5zP;=`<%l#4O01p#6WY(Wp(Z!bT0/lOY#5}Zr#5}rs#3Rsw#5}wx#5Qx#O#5}#O#P#2d#P;'S#5};'S;=`#6v<%lO#5}01p#6yP;=`<%l#5}07[#7PP;=`<%l#/d)3h#7ab$i&j$Q(Ch(Wp(Z!b!X7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;ZAt#8vb$Z#t$i&j(Wp(Z!b!X7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z'Ad#:Zp$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#<_![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#<_#S#U%Z#U#V#?i#V#X%Z#X#Y!4|#Y#b%Z#b#c#>_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#<jk$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#<_![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#<_#S#X%Z#X#Y!4|#Y#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!g$b$i&j$O)Lv(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#R-<U(Wp(Z!b$n7`OY*gZr*grs'}sw*gwx)rx!P*g!P!Q#MO!Q!^*g!^!_#Mt!_!`$ f!`#O*g#P;'S*g;'S;=`+Z<%lO*g(n#MXX$k&j(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g(El#M}Z#r(Ch(Wp(Z!bOY*gZr*grs'}sw*gwx)rx!_*g!_!`#Np!`#O*g#P;'S*g;'S;=`+Z<%lO*g(El#NyX$Q(Ch(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g(El$ oX#s(Ch(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g*)x$!ga#`*!Y$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`!a$#l!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(K[$#w_#k(Cl$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x$%Vag!*r#s(Ch$f#|$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`$&[!`!a$'f!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$&g_#s(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$'qa#r(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`!a$(v!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$)R`#r(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(Kd$*`a(r(Ct$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!a%Z!a!b$+e!b#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$+p`$i&j#{(Ch(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#`$,}_!|$Ip$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f$.X_!S0,v$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(n$/]Z$i&jO!^$0O!^!_$0f!_#i$0O#i#j$0k#j#l$0O#l#m$2^#m#o$0O#o#p$0f#p;'S$0O;'S;=`$4i<%lO$0O(n$0VT_#S$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c#S$0kO_#S(n$0p[$i&jO!Q&c!Q![$1f![!^&c!_!c&c!c!i$1f!i#T&c#T#Z$1f#Z#o&c#o#p$3|#p;'S&c;'S;=`&w<%lO&c(n$1kZ$i&jO!Q&c!Q![$2^![!^&c!_!c&c!c!i$2^!i#T&c#T#Z$2^#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$2cZ$i&jO!Q&c!Q![$3U![!^&c!_!c&c!c!i$3U!i#T&c#T#Z$3U#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$3ZZ$i&jO!Q&c!Q![$0O![!^&c!_!c&c!c!i$0O!i#T&c#T#Z$0O#Z#o&c#p;'S&c;'S;=`&w<%lO&c#S$4PR!Q![$4Y!c!i$4Y#T#Z$4Y#S$4]S!Q![$4Y!c!i$4Y#T#Z$4Y#q#r$0f(n$4lP;=`<%l$0O#1[$4z_!Y#)l$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$6U`#x(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z+;p$7c_$i&j(Wp(Z!b(a+4QOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$8qk$i&j(Wp(Z!b(T,2j$_#t(e$I[OY%ZYZ&cZr%Zrs&}st%Ztu$8buw%Zwx(rx}%Z}!O$:f!O!Q%Z!Q![$8b![!^%Z!^!_*g!_!c%Z!c!}$8b!}#O%Z#O#P&c#P#R%Z#R#S$8b#S#T%Z#T#o$8b#o#p*g#p$g%Z$g;'S$8b;'S;=`$<l<%lO$8b+d$:qk$i&j(Wp(Z!b$_#tOY%ZYZ&cZr%Zrs&}st%Ztu$:fuw%Zwx(rx}%Z}!O$:f!O!Q%Z!Q![$:f![!^%Z!^!_*g!_!c%Z!c!}$:f!}#O%Z#O#P&c#P#R%Z#R#S$:f#S#T%Z#T#o$:f#o#p*g#p$g%Z$g;'S$:f;'S;=`$<f<%lO$:f+d$<iP;=`<%l$:f07[$<oP;=`<%l$8b#Jf$<{X!_#Hb(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g,#x$=sa(y+JY$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p#q$+e#q;'S%Z;'S;=`+a<%lO%Z)>v$?V_!^(CdvBr$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!q7`$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$i&j(Wp(Z!b'|0/l$]#t(T,2j(e$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$i&j(Wp(Z!b'}0/l$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr\",\n  tokenizers: [noSemicolon, noSemicolonType, operatorToken, jsx, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, insertSemicolon, new LocalTokenGroup(\"$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOx~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!U~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(c~~\", 141, 340), new LocalTokenGroup(\"j~RQYZXz{^~^O(Q~~aP!P!Qd~iO(R~~\", 25, 323)],\n  topRules: {\"Script\":[0,7],\"SingleExpression\":[1,276],\"SingleClassItem\":[2,277]},\n  dialects: {jsx: 0, ts: 15175},\n  dynamicPrecedences: {\"80\":1,\"82\":1,\"94\":1,\"169\":1,\"199\":1},\n  specialized: [{term: 327, get: (value) => spec_identifier[value] || -1},{term: 343, get: (value) => spec_word[value] || -1},{term: 95, get: (value) => spec_LessThan[value] || -1}],\n  tokenPrec: 15201\n});\n\nexport { parser };\n","import { parser } from '@lezer/javascript';\nimport { syntaxTree, LRLanguage, indentNodeProp, continuedIndent, flatIndent, delimitedIndent, foldNodeProp, foldInside, defineLanguageFacet, sublanguageProp, LanguageSupport } from '@codemirror/language';\nimport { EditorSelection } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { snippetCompletion, ifNotIn, completeFromList } from '@codemirror/autocomplete';\nimport { NodeWeakMap, IterMode } from '@lezer/common';\n\n/**\nA collection of JavaScript-related\n[snippets](https://codemirror.net/6/docs/ref/#autocomplete.snippet).\n*/\nconst snippets = [\n    /*@__PURE__*/snippetCompletion(\"function ${name}(${params}) {\\n\\t${}\\n}\", {\n        label: \"function\",\n        detail: \"definition\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\\n\\t${}\\n}\", {\n        label: \"for\",\n        detail: \"loop\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"for (let ${name} of ${collection}) {\\n\\t${}\\n}\", {\n        label: \"for\",\n        detail: \"of loop\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"do {\\n\\t${}\\n} while (${})\", {\n        label: \"do\",\n        detail: \"loop\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"while (${}) {\\n\\t${}\\n}\", {\n        label: \"while\",\n        detail: \"loop\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"try {\\n\\t${}\\n} catch (${error}) {\\n\\t${}\\n}\", {\n        label: \"try\",\n        detail: \"/ catch block\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"if (${}) {\\n\\t${}\\n}\", {\n        label: \"if\",\n        detail: \"block\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"if (${}) {\\n\\t${}\\n} else {\\n\\t${}\\n}\", {\n        label: \"if\",\n        detail: \"/ else block\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"class ${name} {\\n\\tconstructor(${params}) {\\n\\t\\t${}\\n\\t}\\n}\", {\n        label: \"class\",\n        detail: \"definition\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"import {${names}} from \\\"${module}\\\"\\n${}\", {\n        label: \"import\",\n        detail: \"named\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"import ${name} from \\\"${module}\\\"\\n${}\", {\n        label: \"import\",\n        detail: \"default\",\n        type: \"keyword\"\n    })\n];\n/**\nA collection of snippet completions for TypeScript. Includes the\nJavaScript [snippets](https://codemirror.net/6/docs/ref/#lang-javascript.snippets).\n*/\nconst typescriptSnippets = /*@__PURE__*/snippets.concat([\n    /*@__PURE__*/snippetCompletion(\"interface ${name} {\\n\\t${}\\n}\", {\n        label: \"interface\",\n        detail: \"definition\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"type ${name} = ${type}\", {\n        label: \"type\",\n        detail: \"definition\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"enum ${name} {\\n\\t${}\\n}\", {\n        label: \"enum\",\n        detail: \"definition\",\n        type: \"keyword\"\n    })\n]);\n\nconst cache = /*@__PURE__*/new NodeWeakMap();\nconst ScopeNodes = /*@__PURE__*/new Set([\n    \"Script\", \"Block\",\n    \"FunctionExpression\", \"FunctionDeclaration\", \"ArrowFunction\", \"MethodDeclaration\",\n    \"ForStatement\"\n]);\nfunction defID(type) {\n    return (node, def) => {\n        let id = node.node.getChild(\"VariableDefinition\");\n        if (id)\n            def(id, type);\n        return true;\n    };\n}\nconst functionContext = [\"FunctionDeclaration\"];\nconst gatherCompletions = {\n    FunctionDeclaration: /*@__PURE__*/defID(\"function\"),\n    ClassDeclaration: /*@__PURE__*/defID(\"class\"),\n    ClassExpression: () => true,\n    EnumDeclaration: /*@__PURE__*/defID(\"constant\"),\n    TypeAliasDeclaration: /*@__PURE__*/defID(\"type\"),\n    NamespaceDeclaration: /*@__PURE__*/defID(\"namespace\"),\n    VariableDefinition(node, def) { if (!node.matchContext(functionContext))\n        def(node, \"variable\"); },\n    TypeDefinition(node, def) { def(node, \"type\"); },\n    __proto__: null\n};\nfunction getScope(doc, node) {\n    let cached = cache.get(node);\n    if (cached)\n        return cached;\n    let completions = [], top = true;\n    function def(node, type) {\n        let name = doc.sliceString(node.from, node.to);\n        completions.push({ label: name, type });\n    }\n    node.cursor(IterMode.IncludeAnonymous).iterate(node => {\n        if (top) {\n            top = false;\n        }\n        else if (node.name) {\n            let gather = gatherCompletions[node.name];\n            if (gather && gather(node, def) || ScopeNodes.has(node.name))\n                return false;\n        }\n        else if (node.to - node.from > 8192) {\n            // Allow caching for bigger internal nodes\n            for (let c of getScope(doc, node.node))\n                completions.push(c);\n            return false;\n        }\n    });\n    cache.set(node, completions);\n    return completions;\n}\nconst Identifier = /^[\\w$\\xa1-\\uffff][\\w$\\d\\xa1-\\uffff]*$/;\nconst dontComplete = [\n    \"TemplateString\", \"String\", \"RegExp\",\n    \"LineComment\", \"BlockComment\",\n    \"VariableDefinition\", \"TypeDefinition\", \"Label\",\n    \"PropertyDefinition\", \"PropertyName\",\n    \"PrivatePropertyDefinition\", \"PrivatePropertyName\",\n    \"JSXText\", \"JSXAttributeValue\", \"JSXOpenTag\", \"JSXCloseTag\", \"JSXSelfClosingTag\",\n    \".\", \"?.\"\n];\n/**\nCompletion source that looks up locally defined names in\nJavaScript code.\n*/\nfunction localCompletionSource(context) {\n    let inner = syntaxTree(context.state).resolveInner(context.pos, -1);\n    if (dontComplete.indexOf(inner.name) > -1)\n        return null;\n    let isWord = inner.name == \"VariableName\" ||\n        inner.to - inner.from < 20 && Identifier.test(context.state.sliceDoc(inner.from, inner.to));\n    if (!isWord && !context.explicit)\n        return null;\n    let options = [];\n    for (let pos = inner; pos; pos = pos.parent) {\n        if (ScopeNodes.has(pos.name))\n            options = options.concat(getScope(context.state.doc, pos));\n    }\n    return {\n        options,\n        from: isWord ? inner.from : context.pos,\n        validFor: Identifier\n    };\n}\nfunction pathFor(read, member, name) {\n    var _a;\n    let path = [];\n    for (;;) {\n        let obj = member.firstChild, prop;\n        if ((obj === null || obj === void 0 ? void 0 : obj.name) == \"VariableName\") {\n            path.push(read(obj));\n            return { path: path.reverse(), name };\n        }\n        else if ((obj === null || obj === void 0 ? void 0 : obj.name) == \"MemberExpression\" && ((_a = (prop = obj.lastChild)) === null || _a === void 0 ? void 0 : _a.name) == \"PropertyName\") {\n            path.push(read(prop));\n            member = obj;\n        }\n        else {\n            return null;\n        }\n    }\n}\n/**\nHelper function for defining JavaScript completion sources. It\nreturns the completable name and object path for a completion\ncontext, or null if no name/property completion should happen at\nthat position. For example, when completing after `a.b.c` it will\nreturn `{path: [\"a\", \"b\"], name: \"c\"}`. When completing after `x`\nit will return `{path: [], name: \"x\"}`. When not in a property or\nname, it will return null if `context.explicit` is false, and\n`{path: [], name: \"\"}` otherwise.\n*/\nfunction completionPath(context) {\n    let read = (node) => context.state.doc.sliceString(node.from, node.to);\n    let inner = syntaxTree(context.state).resolveInner(context.pos, -1);\n    if (inner.name == \"PropertyName\") {\n        return pathFor(read, inner.parent, read(inner));\n    }\n    else if ((inner.name == \".\" || inner.name == \"?.\") && inner.parent.name == \"MemberExpression\") {\n        return pathFor(read, inner.parent, \"\");\n    }\n    else if (dontComplete.indexOf(inner.name) > -1) {\n        return null;\n    }\n    else if (inner.name == \"VariableName\" || inner.to - inner.from < 20 && Identifier.test(read(inner))) {\n        return { path: [], name: read(inner) };\n    }\n    else if (inner.name == \"MemberExpression\") {\n        return pathFor(read, inner, \"\");\n    }\n    else {\n        return context.explicit ? { path: [], name: \"\" } : null;\n    }\n}\nfunction enumeratePropertyCompletions(obj, top) {\n    let options = [], seen = new Set;\n    for (let depth = 0;; depth++) {\n        for (let name of (Object.getOwnPropertyNames || Object.keys)(obj)) {\n            if (!/^[a-zA-Z_$\\xaa-\\uffdc][\\w$\\xaa-\\uffdc]*$/.test(name) || seen.has(name))\n                continue;\n            seen.add(name);\n            let value;\n            try {\n                value = obj[name];\n            }\n            catch (_) {\n                continue;\n            }\n            options.push({\n                label: name,\n                type: typeof value == \"function\" ? (/^[A-Z]/.test(name) ? \"class\" : top ? \"function\" : \"method\")\n                    : top ? \"variable\" : \"property\",\n                boost: -depth\n            });\n        }\n        let next = Object.getPrototypeOf(obj);\n        if (!next)\n            return options;\n        obj = next;\n    }\n}\n/**\nDefines a [completion source](https://codemirror.net/6/docs/ref/#autocomplete.CompletionSource) that\ncompletes from the given scope object (for example `globalThis`).\nWill enter properties of the object when completing properties on\na directly-named path.\n*/\nfunction scopeCompletionSource(scope) {\n    let cache = new Map;\n    return (context) => {\n        let path = completionPath(context);\n        if (!path)\n            return null;\n        let target = scope;\n        for (let step of path.path) {\n            target = target[step];\n            if (!target)\n                return null;\n        }\n        let options = cache.get(target);\n        if (!options)\n            cache.set(target, options = enumeratePropertyCompletions(target, !path.path.length));\n        return {\n            from: context.pos - path.name.length,\n            options,\n            validFor: Identifier\n        };\n    };\n}\n\n/**\nA language provider based on the [Lezer JavaScript\nparser](https://github.com/lezer-parser/javascript), extended with\nhighlighting and indentation information.\n*/\nconst javascriptLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"javascript\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                IfStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|else\\b)/ }),\n                TryStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|catch\\b|finally\\b)/ }),\n                LabeledStatement: flatIndent,\n                SwitchBody: context => {\n                    let after = context.textAfter, closed = /^\\s*\\}/.test(after), isCase = /^\\s*(case|default)\\b/.test(after);\n                    return context.baseIndent + (closed ? 0 : isCase ? 1 : 2) * context.unit;\n                },\n                Block: /*@__PURE__*/delimitedIndent({ closing: \"}\" }),\n                ArrowFunction: cx => cx.baseIndent + cx.unit,\n                \"TemplateString BlockComment\": () => null,\n                \"Statement Property\": /*@__PURE__*/continuedIndent({ except: /^\\s*{/ }),\n                JSXElement(context) {\n                    let closed = /^\\s*<\\//.test(context.textAfter);\n                    return context.lineIndent(context.node.from) + (closed ? 0 : context.unit);\n                },\n                JSXEscape(context) {\n                    let closed = /\\s*\\}/.test(context.textAfter);\n                    return context.lineIndent(context.node.from) + (closed ? 0 : context.unit);\n                },\n                \"JSXOpenTag JSXSelfClosingTag\"(context) {\n                    return context.column(context.node.from) + context.unit;\n                }\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                \"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType\": foldInside,\n                BlockComment(tree) { return { from: tree.from + 2, to: tree.to - 2 }; }\n            })\n        ]\n    }),\n    languageData: {\n        closeBrackets: { brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"`\"] },\n        commentTokens: { line: \"//\", block: { open: \"/*\", close: \"*/\" } },\n        indentOnInput: /^\\s*(?:case |default:|\\{|\\}|<\\/)$/,\n        wordChars: \"$\"\n    }\n});\nconst jsxSublanguage = {\n    test: node => /^JSX/.test(node.name),\n    facet: /*@__PURE__*/defineLanguageFacet({ commentTokens: { block: { open: \"{/*\", close: \"*/}\" } } })\n};\n/**\nA language provider for TypeScript.\n*/\nconst typescriptLanguage = /*@__PURE__*/javascriptLanguage.configure({ dialect: \"ts\" }, \"typescript\");\n/**\nLanguage provider for JSX.\n*/\nconst jsxLanguage = /*@__PURE__*/javascriptLanguage.configure({\n    dialect: \"jsx\",\n    props: [/*@__PURE__*/sublanguageProp.add(n => n.isTop ? [jsxSublanguage] : undefined)]\n});\n/**\nLanguage provider for JSX + TypeScript.\n*/\nconst tsxLanguage = /*@__PURE__*/javascriptLanguage.configure({\n    dialect: \"jsx ts\",\n    props: [/*@__PURE__*/sublanguageProp.add(n => n.isTop ? [jsxSublanguage] : undefined)]\n}, \"typescript\");\nlet kwCompletion = (name) => ({ label: name, type: \"keyword\" });\nconst keywords = /*@__PURE__*/\"break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield\".split(\" \").map(kwCompletion);\nconst typescriptKeywords = /*@__PURE__*/keywords.concat(/*@__PURE__*/[\"declare\", \"implements\", \"private\", \"protected\", \"public\"].map(kwCompletion));\n/**\nJavaScript support. Includes [snippet](https://codemirror.net/6/docs/ref/#lang-javascript.snippets)\nand local variable completion.\n*/\nfunction javascript(config = {}) {\n    let lang = config.jsx ? (config.typescript ? tsxLanguage : jsxLanguage)\n        : config.typescript ? typescriptLanguage : javascriptLanguage;\n    let completions = config.typescript ? typescriptSnippets.concat(typescriptKeywords) : snippets.concat(keywords);\n    return new LanguageSupport(lang, [\n        javascriptLanguage.data.of({\n            autocomplete: ifNotIn(dontComplete, completeFromList(completions))\n        }),\n        javascriptLanguage.data.of({\n            autocomplete: localCompletionSource\n        }),\n        config.jsx ? autoCloseTags : [],\n    ]);\n}\nfunction findOpenTag(node) {\n    for (;;) {\n        if (node.name == \"JSXOpenTag\" || node.name == \"JSXSelfClosingTag\" || node.name == \"JSXFragmentTag\")\n            return node;\n        if (node.name == \"JSXEscape\" || !node.parent)\n            return null;\n        node = node.parent;\n    }\n}\nfunction elementName(doc, tree, max = doc.length) {\n    for (let ch = tree === null || tree === void 0 ? void 0 : tree.firstChild; ch; ch = ch.nextSibling) {\n        if (ch.name == \"JSXIdentifier\" || ch.name == \"JSXBuiltin\" || ch.name == \"JSXNamespacedName\" ||\n            ch.name == \"JSXMemberExpression\")\n            return doc.sliceString(ch.from, Math.min(ch.to, max));\n    }\n    return \"\";\n}\nconst android = typeof navigator == \"object\" && /*@__PURE__*//Android\\b/.test(navigator.userAgent);\n/**\nExtension that will automatically insert JSX close tags when a `>` or\n`/` is typed.\n*/\nconst autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text, defaultInsert) => {\n    if ((android ? view.composing : view.compositionStarted) || view.state.readOnly ||\n        from != to || (text != \">\" && text != \"/\") ||\n        !javascriptLanguage.isActiveAt(view.state, from, -1))\n        return false;\n    let base = defaultInsert(), { state } = base;\n    let closeTags = state.changeByRange(range => {\n        var _a;\n        let { head } = range, around = syntaxTree(state).resolveInner(head - 1, -1), name;\n        if (around.name == \"JSXStartTag\")\n            around = around.parent;\n        if (state.doc.sliceString(head - 1, head) != text || around.name == \"JSXAttributeValue\" && around.to > head) ;\n        else if (text == \">\" && around.name == \"JSXFragmentTag\") {\n            return { range, changes: { from: head, insert: `</>` } };\n        }\n        else if (text == \"/\" && around.name == \"JSXStartCloseTag\") {\n            let empty = around.parent, base = empty.parent;\n            if (base && empty.from == head - 2 &&\n                ((name = elementName(state.doc, base.firstChild, head)) || ((_a = base.firstChild) === null || _a === void 0 ? void 0 : _a.name) == \"JSXFragmentTag\")) {\n                let insert = `${name}>`;\n                return { range: EditorSelection.cursor(head + insert.length, -1), changes: { from: head, insert } };\n            }\n        }\n        else if (text == \">\") {\n            let openTag = findOpenTag(around);\n            if (openTag && openTag.name == \"JSXOpenTag\" &&\n                !/^\\/?>|^<\\//.test(state.doc.sliceString(head, head + 2)) &&\n                (name = elementName(state.doc, openTag, head)))\n                return { range, changes: { from: head, insert: `</${name}>` } };\n        }\n        return { range };\n    });\n    if (closeTags.changes.empty)\n        return false;\n    view.dispatch([\n        base,\n        state.update(closeTags, { userEvent: \"input.complete\", scrollIntoView: true })\n    ]);\n    return true;\n});\n\n/**\nConnects an [ESLint](https://eslint.org/) linter to CodeMirror's\n[lint](https://codemirror.net/6/docs/ref/#lint) integration. `eslint` should be an instance of the\n[`Linter`](https://eslint.org/docs/developer-guide/nodejs-api#linter)\nclass, and `config` an optional ESLint configuration. The return\nvalue of this function can be passed to [`linter`](https://codemirror.net/6/docs/ref/#lint.linter)\nto create a JavaScript linting extension.\n\nNote that ESLint targets node, and is tricky to run in the\nbrowser. The\n[eslint-linter-browserify](https://github.com/UziTech/eslint-linter-browserify)\npackage may help with that (see\n[example](https://github.com/UziTech/eslint-linter-browserify/blob/master/example/script.js)).\n*/\nfunction esLint(eslint, config) {\n    if (!config) {\n        config = {\n            parserOptions: { ecmaVersion: 2019, sourceType: \"module\" },\n            env: { browser: true, node: true, es6: true, es2015: true, es2017: true, es2020: true },\n            rules: {}\n        };\n        eslint.getRules().forEach((desc, name) => {\n            var _a;\n            if ((_a = desc.meta.docs) === null || _a === void 0 ? void 0 : _a.recommended)\n                config.rules[name] = 2;\n        });\n    }\n    return (view) => {\n        let { state } = view, found = [];\n        for (let { from, to } of javascriptLanguage.findRegions(state)) {\n            let fromLine = state.doc.lineAt(from), offset = { line: fromLine.number - 1, col: from - fromLine.from, pos: from };\n            for (let d of eslint.verify(state.sliceDoc(from, to), config))\n                found.push(translateDiagnostic(d, state.doc, offset));\n        }\n        return found;\n    };\n}\nfunction mapPos(line, col, doc, offset) {\n    return doc.line(line + offset.line).from + col + (line == 1 ? offset.col - 1 : -1);\n}\nfunction translateDiagnostic(input, doc, offset) {\n    let start = mapPos(input.line, input.column, doc, offset);\n    let result = {\n        from: start,\n        to: input.endLine != null && input.endColumn != 1 ? mapPos(input.endLine, input.endColumn, doc, offset) : start,\n        message: input.message,\n        source: input.ruleId ? \"eslint:\" + input.ruleId : \"eslint\",\n        severity: input.severity == 1 ? \"warning\" : \"error\",\n    };\n    if (input.fix) {\n        let { range, text } = input.fix, from = range[0] + offset.pos - start, to = range[1] + offset.pos - start;\n        result.actions = [{\n                name: \"fix\",\n                apply(view, start) {\n                    view.dispatch({ changes: { from: start + from, to: start + to, insert: text }, scrollIntoView: true });\n                }\n            }];\n    }\n    return result;\n}\n\nexport { autoCloseTags, completionPath, esLint, javascript, javascriptLanguage, jsxLanguage, localCompletionSource, scopeCompletionSource, snippets, tsxLanguage, typescriptLanguage, typescriptSnippets };\n","import { parser, configureNesting } from '@lezer/html';\nimport { cssLanguage, css } from '@codemirror/lang-css';\nimport { javascriptLanguage, typescriptLanguage, jsxLanguage, tsxLanguage, javascript } from '@codemirror/lang-javascript';\nimport { EditorView } from '@codemirror/view';\nimport { EditorSelection } from '@codemirror/state';\nimport { syntaxTree, LRLanguage, indentNodeProp, foldNodeProp, bracketMatchingHandle, LanguageSupport } from '@codemirror/language';\n\nconst Targets = [\"_blank\", \"_self\", \"_top\", \"_parent\"];\nconst Charsets = [\"ascii\", \"utf-8\", \"utf-16\", \"latin1\", \"latin1\"];\nconst Methods = [\"get\", \"post\", \"put\", \"delete\"];\nconst Encs = [\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"];\nconst Bool = [\"true\", \"false\"];\nconst S = {}; // Empty tag spec\nconst Tags = {\n    a: {\n        attrs: {\n            href: null, ping: null, type: null,\n            media: null,\n            target: Targets,\n            hreflang: null\n        }\n    },\n    abbr: S,\n    address: S,\n    area: {\n        attrs: {\n            alt: null, coords: null, href: null, target: null, ping: null,\n            media: null, hreflang: null, type: null,\n            shape: [\"default\", \"rect\", \"circle\", \"poly\"]\n        }\n    },\n    article: S,\n    aside: S,\n    audio: {\n        attrs: {\n            src: null, mediagroup: null,\n            crossorigin: [\"anonymous\", \"use-credentials\"],\n            preload: [\"none\", \"metadata\", \"auto\"],\n            autoplay: [\"autoplay\"],\n            loop: [\"loop\"],\n            controls: [\"controls\"]\n        }\n    },\n    b: S,\n    base: { attrs: { href: null, target: Targets } },\n    bdi: S,\n    bdo: S,\n    blockquote: { attrs: { cite: null } },\n    body: S,\n    br: S,\n    button: {\n        attrs: {\n            form: null, formaction: null, name: null, value: null,\n            autofocus: [\"autofocus\"],\n            disabled: [\"autofocus\"],\n            formenctype: Encs,\n            formmethod: Methods,\n            formnovalidate: [\"novalidate\"],\n            formtarget: Targets,\n            type: [\"submit\", \"reset\", \"button\"]\n        }\n    },\n    canvas: { attrs: { width: null, height: null } },\n    caption: S,\n    center: S,\n    cite: S,\n    code: S,\n    col: { attrs: { span: null } },\n    colgroup: { attrs: { span: null } },\n    command: {\n        attrs: {\n            type: [\"command\", \"checkbox\", \"radio\"],\n            label: null, icon: null, radiogroup: null, command: null, title: null,\n            disabled: [\"disabled\"],\n            checked: [\"checked\"]\n        }\n    },\n    data: { attrs: { value: null } },\n    datagrid: { attrs: { disabled: [\"disabled\"], multiple: [\"multiple\"] } },\n    datalist: { attrs: { data: null } },\n    dd: S,\n    del: { attrs: { cite: null, datetime: null } },\n    details: { attrs: { open: [\"open\"] } },\n    dfn: S,\n    div: S,\n    dl: S,\n    dt: S,\n    em: S,\n    embed: { attrs: { src: null, type: null, width: null, height: null } },\n    eventsource: { attrs: { src: null } },\n    fieldset: { attrs: { disabled: [\"disabled\"], form: null, name: null } },\n    figcaption: S,\n    figure: S,\n    footer: S,\n    form: {\n        attrs: {\n            action: null, name: null,\n            \"accept-charset\": Charsets,\n            autocomplete: [\"on\", \"off\"],\n            enctype: Encs,\n            method: Methods,\n            novalidate: [\"novalidate\"],\n            target: Targets\n        }\n    },\n    h1: S, h2: S, h3: S, h4: S, h5: S, h6: S,\n    head: {\n        children: [\"title\", \"base\", \"link\", \"style\", \"meta\", \"script\", \"noscript\", \"command\"]\n    },\n    header: S,\n    hgroup: S,\n    hr: S,\n    html: {\n        attrs: { manifest: null }\n    },\n    i: S,\n    iframe: {\n        attrs: {\n            src: null, srcdoc: null, name: null, width: null, height: null,\n            sandbox: [\"allow-top-navigation\", \"allow-same-origin\", \"allow-forms\", \"allow-scripts\"],\n            seamless: [\"seamless\"]\n        }\n    },\n    img: {\n        attrs: {\n            alt: null, src: null, ismap: null, usemap: null, width: null, height: null,\n            crossorigin: [\"anonymous\", \"use-credentials\"]\n        }\n    },\n    input: {\n        attrs: {\n            alt: null, dirname: null, form: null, formaction: null,\n            height: null, list: null, max: null, maxlength: null, min: null,\n            name: null, pattern: null, placeholder: null, size: null, src: null,\n            step: null, value: null, width: null,\n            accept: [\"audio/*\", \"video/*\", \"image/*\"],\n            autocomplete: [\"on\", \"off\"],\n            autofocus: [\"autofocus\"],\n            checked: [\"checked\"],\n            disabled: [\"disabled\"],\n            formenctype: Encs,\n            formmethod: Methods,\n            formnovalidate: [\"novalidate\"],\n            formtarget: Targets,\n            multiple: [\"multiple\"],\n            readonly: [\"readonly\"],\n            required: [\"required\"],\n            type: [\"hidden\", \"text\", \"search\", \"tel\", \"url\", \"email\", \"password\", \"datetime\", \"date\", \"month\",\n                \"week\", \"time\", \"datetime-local\", \"number\", \"range\", \"color\", \"checkbox\", \"radio\",\n                \"file\", \"submit\", \"image\", \"reset\", \"button\"]\n        }\n    },\n    ins: { attrs: { cite: null, datetime: null } },\n    kbd: S,\n    keygen: {\n        attrs: {\n            challenge: null, form: null, name: null,\n            autofocus: [\"autofocus\"],\n            disabled: [\"disabled\"],\n            keytype: [\"RSA\"]\n        }\n    },\n    label: { attrs: { for: null, form: null } },\n    legend: S,\n    li: { attrs: { value: null } },\n    link: {\n        attrs: {\n            href: null, type: null,\n            hreflang: null,\n            media: null,\n            sizes: [\"all\", \"16x16\", \"16x16 32x32\", \"16x16 32x32 64x64\"]\n        }\n    },\n    map: { attrs: { name: null } },\n    mark: S,\n    menu: { attrs: { label: null, type: [\"list\", \"context\", \"toolbar\"] } },\n    meta: {\n        attrs: {\n            content: null,\n            charset: Charsets,\n            name: [\"viewport\", \"application-name\", \"author\", \"description\", \"generator\", \"keywords\"],\n            \"http-equiv\": [\"content-language\", \"content-type\", \"default-style\", \"refresh\"]\n        }\n    },\n    meter: { attrs: { value: null, min: null, low: null, high: null, max: null, optimum: null } },\n    nav: S,\n    noscript: S,\n    object: {\n        attrs: {\n            data: null, type: null, name: null, usemap: null, form: null, width: null, height: null,\n            typemustmatch: [\"typemustmatch\"]\n        }\n    },\n    ol: { attrs: { reversed: [\"reversed\"], start: null, type: [\"1\", \"a\", \"A\", \"i\", \"I\"] },\n        children: [\"li\", \"script\", \"template\", \"ul\", \"ol\"] },\n    optgroup: { attrs: { disabled: [\"disabled\"], label: null } },\n    option: { attrs: { disabled: [\"disabled\"], label: null, selected: [\"selected\"], value: null } },\n    output: { attrs: { for: null, form: null, name: null } },\n    p: S,\n    param: { attrs: { name: null, value: null } },\n    pre: S,\n    progress: { attrs: { value: null, max: null } },\n    q: { attrs: { cite: null } },\n    rp: S,\n    rt: S,\n    ruby: S,\n    samp: S,\n    script: {\n        attrs: {\n            type: [\"text/javascript\"],\n            src: null,\n            async: [\"async\"],\n            defer: [\"defer\"],\n            charset: Charsets\n        }\n    },\n    section: S,\n    select: {\n        attrs: {\n            form: null, name: null, size: null,\n            autofocus: [\"autofocus\"],\n            disabled: [\"disabled\"],\n            multiple: [\"multiple\"]\n        }\n    },\n    slot: { attrs: { name: null } },\n    small: S,\n    source: { attrs: { src: null, type: null, media: null } },\n    span: S,\n    strong: S,\n    style: {\n        attrs: {\n            type: [\"text/css\"],\n            media: null,\n            scoped: null\n        }\n    },\n    sub: S,\n    summary: S,\n    sup: S,\n    table: S,\n    tbody: S,\n    td: { attrs: { colspan: null, rowspan: null, headers: null } },\n    template: S,\n    textarea: {\n        attrs: {\n            dirname: null, form: null, maxlength: null, name: null, placeholder: null,\n            rows: null, cols: null,\n            autofocus: [\"autofocus\"],\n            disabled: [\"disabled\"],\n            readonly: [\"readonly\"],\n            required: [\"required\"],\n            wrap: [\"soft\", \"hard\"]\n        }\n    },\n    tfoot: S,\n    th: { attrs: { colspan: null, rowspan: null, headers: null, scope: [\"row\", \"col\", \"rowgroup\", \"colgroup\"] } },\n    thead: S,\n    time: { attrs: { datetime: null } },\n    title: S,\n    tr: S,\n    track: {\n        attrs: {\n            src: null, label: null, default: null,\n            kind: [\"subtitles\", \"captions\", \"descriptions\", \"chapters\", \"metadata\"],\n            srclang: null\n        }\n    },\n    ul: { children: [\"li\", \"script\", \"template\", \"ul\", \"ol\"] },\n    var: S,\n    video: {\n        attrs: {\n            src: null, poster: null, width: null, height: null,\n            crossorigin: [\"anonymous\", \"use-credentials\"],\n            preload: [\"auto\", \"metadata\", \"none\"],\n            autoplay: [\"autoplay\"],\n            mediagroup: [\"movie\"],\n            muted: [\"muted\"],\n            controls: [\"controls\"]\n        }\n    },\n    wbr: S\n};\nconst GlobalAttrs = {\n    accesskey: null,\n    class: null,\n    contenteditable: Bool,\n    contextmenu: null,\n    dir: [\"ltr\", \"rtl\", \"auto\"],\n    draggable: [\"true\", \"false\", \"auto\"],\n    dropzone: [\"copy\", \"move\", \"link\", \"string:\", \"file:\"],\n    hidden: [\"hidden\"],\n    id: null,\n    inert: [\"inert\"],\n    itemid: null,\n    itemprop: null,\n    itemref: null,\n    itemscope: [\"itemscope\"],\n    itemtype: null,\n    lang: [\"ar\", \"bn\", \"de\", \"en-GB\", \"en-US\", \"es\", \"fr\", \"hi\", \"id\", \"ja\", \"pa\", \"pt\", \"ru\", \"tr\", \"zh\"],\n    spellcheck: Bool,\n    autocorrect: Bool,\n    autocapitalize: Bool,\n    style: null,\n    tabindex: null,\n    title: null,\n    translate: [\"yes\", \"no\"],\n    rel: [\"stylesheet\", \"alternate\", \"author\", \"bookmark\", \"help\", \"license\", \"next\", \"nofollow\", \"noreferrer\", \"prefetch\", \"prev\", \"search\", \"tag\"],\n    role: /*@__PURE__*/\"alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer\".split(\" \"),\n    \"aria-activedescendant\": null,\n    \"aria-atomic\": Bool,\n    \"aria-autocomplete\": [\"inline\", \"list\", \"both\", \"none\"],\n    \"aria-busy\": Bool,\n    \"aria-checked\": [\"true\", \"false\", \"mixed\", \"undefined\"],\n    \"aria-controls\": null,\n    \"aria-describedby\": null,\n    \"aria-disabled\": Bool,\n    \"aria-dropeffect\": null,\n    \"aria-expanded\": [\"true\", \"false\", \"undefined\"],\n    \"aria-flowto\": null,\n    \"aria-grabbed\": [\"true\", \"false\", \"undefined\"],\n    \"aria-haspopup\": Bool,\n    \"aria-hidden\": Bool,\n    \"aria-invalid\": [\"true\", \"false\", \"grammar\", \"spelling\"],\n    \"aria-label\": null,\n    \"aria-labelledby\": null,\n    \"aria-level\": null,\n    \"aria-live\": [\"off\", \"polite\", \"assertive\"],\n    \"aria-multiline\": Bool,\n    \"aria-multiselectable\": Bool,\n    \"aria-owns\": null,\n    \"aria-posinset\": null,\n    \"aria-pressed\": [\"true\", \"false\", \"mixed\", \"undefined\"],\n    \"aria-readonly\": Bool,\n    \"aria-relevant\": null,\n    \"aria-required\": Bool,\n    \"aria-selected\": [\"true\", \"false\", \"undefined\"],\n    \"aria-setsize\": null,\n    \"aria-sort\": [\"ascending\", \"descending\", \"none\", \"other\"],\n    \"aria-valuemax\": null,\n    \"aria-valuemin\": null,\n    \"aria-valuenow\": null,\n    \"aria-valuetext\": null\n};\nconst eventAttributes = /*@__PURE__*/(\"beforeunload copy cut dragstart dragover dragleave dragenter dragend \" +\n    \"drag paste focus blur change click load mousedown mouseenter mouseleave \" +\n    \"mouseup keydown keyup resize scroll unload\").split(\" \").map(n => \"on\" + n);\nfor (let a of eventAttributes)\n    GlobalAttrs[a] = null;\nclass Schema {\n    constructor(extraTags, extraAttrs) {\n        this.tags = { ...Tags, ...extraTags };\n        this.globalAttrs = { ...GlobalAttrs, ...extraAttrs };\n        this.allTags = Object.keys(this.tags);\n        this.globalAttrNames = Object.keys(this.globalAttrs);\n    }\n}\nSchema.default = /*@__PURE__*/new Schema;\nfunction elementName(doc, tree, max = doc.length) {\n    if (!tree)\n        return \"\";\n    let tag = tree.firstChild;\n    let name = tag && tag.getChild(\"TagName\");\n    return name ? doc.sliceString(name.from, Math.min(name.to, max)) : \"\";\n}\nfunction findParentElement(tree, skip = false) {\n    for (; tree; tree = tree.parent)\n        if (tree.name == \"Element\") {\n            if (skip)\n                skip = false;\n            else\n                return tree;\n        }\n    return null;\n}\nfunction allowedChildren(doc, tree, schema) {\n    let parentInfo = schema.tags[elementName(doc, findParentElement(tree))];\n    return (parentInfo === null || parentInfo === void 0 ? void 0 : parentInfo.children) || schema.allTags;\n}\nfunction openTags(doc, tree) {\n    let open = [];\n    for (let parent = findParentElement(tree); parent && !parent.type.isTop; parent = findParentElement(parent.parent)) {\n        let tagName = elementName(doc, parent);\n        if (tagName && parent.lastChild.name == \"CloseTag\")\n            break;\n        if (tagName && open.indexOf(tagName) < 0 && (tree.name == \"EndTag\" || tree.from >= parent.firstChild.to))\n            open.push(tagName);\n    }\n    return open;\n}\nconst identifier = /^[:\\-\\.\\w\\u00b7-\\uffff]*$/;\nfunction completeTag(state, schema, tree, from, to) {\n    let end = /\\s*>/.test(state.sliceDoc(to, to + 5)) ? \"\" : \">\";\n    let parent = findParentElement(tree, tree.name == \"StartTag\" || tree.name == \"TagName\");\n    return { from, to,\n        options: allowedChildren(state.doc, parent, schema).map(tagName => ({ label: tagName, type: \"type\" })).concat(openTags(state.doc, tree).map((tag, i) => ({ label: \"/\" + tag, apply: \"/\" + tag + end,\n            type: \"type\", boost: 99 - i }))),\n        validFor: /^\\/?[:\\-\\.\\w\\u00b7-\\uffff]*$/ };\n}\nfunction completeCloseTag(state, tree, from, to) {\n    let end = /\\s*>/.test(state.sliceDoc(to, to + 5)) ? \"\" : \">\";\n    return { from, to,\n        options: openTags(state.doc, tree).map((tag, i) => ({ label: tag, apply: tag + end, type: \"type\", boost: 99 - i })),\n        validFor: identifier };\n}\nfunction completeStartTag(state, schema, tree, pos) {\n    let options = [], level = 0;\n    for (let tagName of allowedChildren(state.doc, tree, schema))\n        options.push({ label: \"<\" + tagName, type: \"type\" });\n    for (let open of openTags(state.doc, tree))\n        options.push({ label: \"</\" + open + \">\", type: \"type\", boost: 99 - level++ });\n    return { from: pos, to: pos, options, validFor: /^<\\/?[:\\-\\.\\w\\u00b7-\\uffff]*$/ };\n}\nfunction completeAttrName(state, schema, tree, from, to) {\n    let elt = findParentElement(tree), info = elt ? schema.tags[elementName(state.doc, elt)] : null;\n    let localAttrs = info && info.attrs ? Object.keys(info.attrs) : [];\n    let names = info && info.globalAttrs === false ? localAttrs\n        : localAttrs.length ? localAttrs.concat(schema.globalAttrNames) : schema.globalAttrNames;\n    return { from, to,\n        options: names.map(attrName => ({ label: attrName, type: \"property\" })),\n        validFor: identifier };\n}\nfunction completeAttrValue(state, schema, tree, from, to) {\n    var _a;\n    let nameNode = (_a = tree.parent) === null || _a === void 0 ? void 0 : _a.getChild(\"AttributeName\");\n    let options = [], token = undefined;\n    if (nameNode) {\n        let attrName = state.sliceDoc(nameNode.from, nameNode.to);\n        let attrs = schema.globalAttrs[attrName];\n        if (!attrs) {\n            let elt = findParentElement(tree), info = elt ? schema.tags[elementName(state.doc, elt)] : null;\n            attrs = (info === null || info === void 0 ? void 0 : info.attrs) && info.attrs[attrName];\n        }\n        if (attrs) {\n            let base = state.sliceDoc(from, to).toLowerCase(), quoteStart = '\"', quoteEnd = '\"';\n            if (/^['\"]/.test(base)) {\n                token = base[0] == '\"' ? /^[^\"]*$/ : /^[^']*$/;\n                quoteStart = \"\";\n                quoteEnd = state.sliceDoc(to, to + 1) == base[0] ? \"\" : base[0];\n                base = base.slice(1);\n                from++;\n            }\n            else {\n                token = /^[^\\s<>='\"]*$/;\n            }\n            for (let value of attrs)\n                options.push({ label: value, apply: quoteStart + value + quoteEnd, type: \"constant\" });\n        }\n    }\n    return { from, to, options, validFor: token };\n}\nfunction htmlCompletionFor(schema, context) {\n    let { state, pos } = context, tree = syntaxTree(state).resolveInner(pos, -1), around = tree.resolve(pos);\n    for (let scan = pos, before; around == tree && (before = tree.childBefore(scan));) {\n        let last = before.lastChild;\n        if (!last || !last.type.isError || last.from < last.to)\n            break;\n        around = tree = before;\n        scan = last.from;\n    }\n    if (tree.name == \"TagName\") {\n        return tree.parent && /CloseTag$/.test(tree.parent.name) ? completeCloseTag(state, tree, tree.from, pos)\n            : completeTag(state, schema, tree, tree.from, pos);\n    }\n    else if (tree.name == \"StartTag\" || tree.name == \"IncompleteTag\") {\n        return completeTag(state, schema, tree, pos, pos);\n    }\n    else if (tree.name == \"StartCloseTag\" || tree.name == \"IncompleteCloseTag\") {\n        return completeCloseTag(state, tree, pos, pos);\n    }\n    else if (tree.name == \"OpenTag\" || tree.name == \"SelfClosingTag\" || tree.name == \"AttributeName\") {\n        return completeAttrName(state, schema, tree, tree.name == \"AttributeName\" ? tree.from : pos, pos);\n    }\n    else if (tree.name == \"Is\" || tree.name == \"AttributeValue\" || tree.name == \"UnquotedAttributeValue\") {\n        return completeAttrValue(state, schema, tree, tree.name == \"Is\" ? pos : tree.from, pos);\n    }\n    else if (context.explicit && (around.name == \"Element\" || around.name == \"Text\" || around.name == \"Document\")) {\n        return completeStartTag(state, schema, tree, pos);\n    }\n    else {\n        return null;\n    }\n}\n/**\nHTML tag completion. Opens and closes tags and attributes in a\ncontext-aware way.\n*/\nfunction htmlCompletionSource(context) {\n    return htmlCompletionFor(Schema.default, context);\n}\n/**\nCreate a completion source for HTML extended with additional tags\nor attributes.\n*/\nfunction htmlCompletionSourceWith(config) {\n    let { extraTags, extraGlobalAttributes: extraAttrs } = config;\n    let schema = extraAttrs || extraTags ? new Schema(extraTags, extraAttrs) : Schema.default;\n    return (context) => htmlCompletionFor(schema, context);\n}\n\nconst jsonParser = /*@__PURE__*/javascriptLanguage.parser.configure({ top: \"SingleExpression\" });\nconst defaultNesting = [\n    { tag: \"script\",\n        attrs: attrs => attrs.type == \"text/typescript\" || attrs.lang == \"ts\",\n        parser: typescriptLanguage.parser },\n    { tag: \"script\",\n        attrs: attrs => attrs.type == \"text/babel\" || attrs.type == \"text/jsx\",\n        parser: jsxLanguage.parser },\n    { tag: \"script\",\n        attrs: attrs => attrs.type == \"text/typescript-jsx\",\n        parser: tsxLanguage.parser },\n    { tag: \"script\",\n        attrs(attrs) {\n            return /^(importmap|speculationrules|application\\/(.+\\+)?json)$/i.test(attrs.type);\n        },\n        parser: jsonParser },\n    { tag: \"script\",\n        attrs(attrs) {\n            return !attrs.type || /^(?:text|application)\\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(attrs.type);\n        },\n        parser: javascriptLanguage.parser },\n    { tag: \"style\",\n        attrs(attrs) {\n            return (!attrs.lang || attrs.lang == \"css\") && (!attrs.type || /^(text\\/)?(x-)?(stylesheet|css)$/i.test(attrs.type));\n        },\n        parser: cssLanguage.parser }\n];\nconst defaultAttrs = /*@__PURE__*/[\n    { name: \"style\",\n        parser: /*@__PURE__*/cssLanguage.parser.configure({ top: \"Styles\" }) }\n].concat(/*@__PURE__*/eventAttributes.map(name => ({ name, parser: javascriptLanguage.parser })));\nconst htmlPlain = /*@__PURE__*/LRLanguage.define({\n    name: \"html\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                Element(context) {\n                    let after = /^(\\s*)(<\\/)?/.exec(context.textAfter);\n                    if (context.node.to <= context.pos + after[0].length)\n                        return context.continue();\n                    return context.lineIndent(context.node.from) + (after[2] ? 0 : context.unit);\n                },\n                \"OpenTag CloseTag SelfClosingTag\"(context) {\n                    return context.column(context.node.from) + context.unit;\n                },\n                Document(context) {\n                    if (context.pos + /\\s*/.exec(context.textAfter)[0].length < context.node.to)\n                        return context.continue();\n                    let endElt = null, close;\n                    for (let cur = context.node;;) {\n                        let last = cur.lastChild;\n                        if (!last || last.name != \"Element\" || last.to != cur.to)\n                            break;\n                        endElt = cur = last;\n                    }\n                    if (endElt && !((close = endElt.lastChild) && (close.name == \"CloseTag\" || close.name == \"SelfClosingTag\")))\n                        return context.lineIndent(endElt.from) + context.unit;\n                    return null;\n                }\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                Element(node) {\n                    let first = node.firstChild, last = node.lastChild;\n                    if (!first || first.name != \"OpenTag\")\n                        return null;\n                    return { from: first.to, to: last.name == \"CloseTag\" ? last.from : node.to };\n                }\n            }),\n            /*@__PURE__*/bracketMatchingHandle.add({\n                \"OpenTag CloseTag\": node => node.getChild(\"TagName\")\n            })\n        ]\n    }),\n    languageData: {\n        commentTokens: { block: { open: \"<!--\", close: \"-->\" } },\n        indentOnInput: /^\\s*<\\/\\w+\\W$/,\n        wordChars: \"-_\"\n    }\n});\n/**\nA language provider based on the [Lezer HTML\nparser](https://github.com/lezer-parser/html), extended with the\nJavaScript and CSS parsers to parse the content of `<script>` and\n`<style>` tags.\n*/\nconst htmlLanguage = /*@__PURE__*/htmlPlain.configure({\n    wrap: /*@__PURE__*/configureNesting(defaultNesting, defaultAttrs)\n});\n/**\nLanguage support for HTML, including\n[`htmlCompletion`](https://codemirror.net/6/docs/ref/#lang-html.htmlCompletion) and JavaScript and\nCSS support extensions.\n*/\nfunction html(config = {}) {\n    let dialect = \"\", wrap;\n    if (config.matchClosingTags === false)\n        dialect = \"noMatch\";\n    if (config.selfClosingTags === true)\n        dialect = (dialect ? dialect + \" \" : \"\") + \"selfClosing\";\n    if (config.nestedLanguages && config.nestedLanguages.length ||\n        config.nestedAttributes && config.nestedAttributes.length)\n        wrap = configureNesting((config.nestedLanguages || []).concat(defaultNesting), (config.nestedAttributes || []).concat(defaultAttrs));\n    let lang = wrap ? htmlPlain.configure({ wrap, dialect }) : dialect ? htmlLanguage.configure({ dialect }) : htmlLanguage;\n    return new LanguageSupport(lang, [\n        htmlLanguage.data.of({ autocomplete: htmlCompletionSourceWith(config) }),\n        config.autoCloseTags !== false ? autoCloseTags : [],\n        javascript().support,\n        css().support\n    ]);\n}\nconst selfClosers = /*@__PURE__*/new Set(/*@__PURE__*/\"area base br col command embed frame hr img input keygen link meta param source track wbr menuitem\".split(\" \"));\n/**\nExtension that will automatically insert close tags when a `>` or\n`/` is typed.\n*/\nconst autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text, insertTransaction) => {\n    if (view.composing || view.state.readOnly || from != to || (text != \">\" && text != \"/\") ||\n        !htmlLanguage.isActiveAt(view.state, from, -1))\n        return false;\n    let base = insertTransaction(), { state } = base;\n    let closeTags = state.changeByRange(range => {\n        var _a, _b, _c;\n        let didType = state.doc.sliceString(range.from - 1, range.to) == text;\n        let { head } = range, after = syntaxTree(state).resolveInner(head, -1), name;\n        if (didType && text == \">\" && after.name == \"EndTag\") {\n            let tag = after.parent;\n            if (((_b = (_a = tag.parent) === null || _a === void 0 ? void 0 : _a.lastChild) === null || _b === void 0 ? void 0 : _b.name) != \"CloseTag\" &&\n                (name = elementName(state.doc, tag.parent, head)) &&\n                !selfClosers.has(name)) {\n                let to = head + (state.doc.sliceString(head, head + 1) === \">\" ? 1 : 0);\n                let insert = `</${name}>`;\n                return { range, changes: { from: head, to, insert } };\n            }\n        }\n        else if (didType && text == \"/\" && after.name == \"IncompleteCloseTag\") {\n            let tag = after.parent;\n            if (after.from == head - 2 && ((_c = tag.lastChild) === null || _c === void 0 ? void 0 : _c.name) != \"CloseTag\" &&\n                (name = elementName(state.doc, tag, head)) && !selfClosers.has(name)) {\n                let to = head + (state.doc.sliceString(head, head + 1) === \">\" ? 1 : 0);\n                let insert = `${name}>`;\n                return {\n                    range: EditorSelection.cursor(head + insert.length, -1),\n                    changes: { from: head, to, insert }\n                };\n            }\n        }\n        return { range };\n    });\n    if (closeTags.changes.empty)\n        return false;\n    view.dispatch([\n        base,\n        state.update(closeTags, {\n            userEvent: \"input.complete\",\n            scrollIntoView: true\n        })\n    ]);\n    return true;\n});\n\nexport { autoCloseTags, html, htmlCompletionSource, htmlCompletionSourceWith, htmlLanguage };\n","import { EditorSelection, countColumn, Prec, EditorState } from '@codemirror/state';\nimport { EditorView, keymap } from '@codemirror/view';\nimport { defineLanguageFacet, foldNodeProp, indentNodeProp, languageDataProp, foldService, syntaxTree, Language, LanguageDescription, ParseContext, indentUnit, LanguageSupport } from '@codemirror/language';\nimport { CompletionContext } from '@codemirror/autocomplete';\nimport { parser, GFM, Subscript, Superscript, Emoji, MarkdownParser, parseCode } from '@lezer/markdown';\nimport { html, htmlCompletionSource } from '@codemirror/lang-html';\nimport { NodeProp } from '@lezer/common';\n\nconst data = /*@__PURE__*/defineLanguageFacet({ commentTokens: { block: { open: \"<!--\", close: \"-->\" } } });\nconst headingProp = /*@__PURE__*/new NodeProp();\nconst commonmark = /*@__PURE__*/parser.configure({\n    props: [\n        /*@__PURE__*/foldNodeProp.add(type => {\n            return !type.is(\"Block\") || type.is(\"Document\") || isHeading(type) != null || isList(type) ? undefined\n                : (tree, state) => ({ from: state.doc.lineAt(tree.from).to, to: tree.to });\n        }),\n        /*@__PURE__*/headingProp.add(isHeading),\n        /*@__PURE__*/indentNodeProp.add({\n            Document: () => null\n        }),\n        /*@__PURE__*/languageDataProp.add({\n            Document: data\n        })\n    ]\n});\nfunction isHeading(type) {\n    let match = /^(?:ATX|Setext)Heading(\\d)$/.exec(type.name);\n    return match ? +match[1] : undefined;\n}\nfunction isList(type) {\n    return type.name == \"OrderedList\" || type.name == \"BulletList\";\n}\nfunction findSectionEnd(headerNode, level) {\n    let last = headerNode;\n    for (;;) {\n        let next = last.nextSibling, heading;\n        if (!next || (heading = isHeading(next.type)) != null && heading <= level)\n            break;\n        last = next;\n    }\n    return last.to;\n}\nconst headerIndent = /*@__PURE__*/foldService.of((state, start, end) => {\n    for (let node = syntaxTree(state).resolveInner(end, -1); node; node = node.parent) {\n        if (node.from < start)\n            break;\n        let heading = node.type.prop(headingProp);\n        if (heading == null)\n            continue;\n        let upto = findSectionEnd(node, heading);\n        if (upto > end)\n            return { from: end, to: upto };\n    }\n    return null;\n});\nfunction mkLang(parser) {\n    return new Language(data, parser, [], \"markdown\");\n}\n/**\nLanguage support for strict CommonMark.\n*/\nconst commonmarkLanguage = /*@__PURE__*/mkLang(commonmark);\nconst extended = /*@__PURE__*/commonmark.configure([GFM, Subscript, Superscript, Emoji, {\n        props: [\n            /*@__PURE__*/foldNodeProp.add({\n                Table: (tree, state) => ({ from: state.doc.lineAt(tree.from).to, to: tree.to })\n            })\n        ]\n    }]);\n/**\nLanguage support for [GFM](https://github.github.com/gfm/) plus\nsubscript, superscript, and emoji syntax.\n*/\nconst markdownLanguage = /*@__PURE__*/mkLang(extended);\nfunction getCodeParser(languages, defaultLanguage) {\n    return (info) => {\n        if (info && languages) {\n            let found = null;\n            // Strip anything after whitespace\n            info = /\\S*/.exec(info)[0];\n            if (typeof languages == \"function\")\n                found = languages(info);\n            else\n                found = LanguageDescription.matchLanguageName(languages, info, true);\n            if (found instanceof LanguageDescription)\n                return found.support ? found.support.language.parser : ParseContext.getSkippingParser(found.load());\n            else if (found)\n                return found.parser;\n        }\n        return defaultLanguage ? defaultLanguage.parser : null;\n    };\n}\n\nclass Context {\n    constructor(node, from, to, spaceBefore, spaceAfter, type, item) {\n        this.node = node;\n        this.from = from;\n        this.to = to;\n        this.spaceBefore = spaceBefore;\n        this.spaceAfter = spaceAfter;\n        this.type = type;\n        this.item = item;\n    }\n    blank(maxWidth, trailing = true) {\n        let result = this.spaceBefore + (this.node.name == \"Blockquote\" ? \">\" : \"\");\n        if (maxWidth != null) {\n            while (result.length < maxWidth)\n                result += \" \";\n            return result;\n        }\n        else {\n            for (let i = this.to - this.from - result.length - this.spaceAfter.length; i > 0; i--)\n                result += \" \";\n            return result + (trailing ? this.spaceAfter : \"\");\n        }\n    }\n    marker(doc, add) {\n        let number = this.node.name == \"OrderedList\" ? String((+itemNumber(this.item, doc)[2] + add)) : \"\";\n        return this.spaceBefore + number + this.type + this.spaceAfter;\n    }\n}\nfunction getContext(node, doc) {\n    let nodes = [], context = [];\n    for (let cur = node; cur; cur = cur.parent) {\n        if (cur.name == \"FencedCode\")\n            return context;\n        if (cur.name == \"ListItem\" || cur.name == \"Blockquote\")\n            nodes.push(cur);\n    }\n    for (let i = nodes.length - 1; i >= 0; i--) {\n        let node = nodes[i], match;\n        let line = doc.lineAt(node.from), startPos = node.from - line.from;\n        if (node.name == \"Blockquote\" && (match = /^ *>( ?)/.exec(line.text.slice(startPos)))) {\n            context.push(new Context(node, startPos, startPos + match[0].length, \"\", match[1], \">\", null));\n        }\n        else if (node.name == \"ListItem\" && node.parent.name == \"OrderedList\" &&\n            (match = /^( *)\\d+([.)])( *)/.exec(line.text.slice(startPos)))) {\n            let after = match[3], len = match[0].length;\n            if (after.length >= 4) {\n                after = after.slice(0, after.length - 4);\n                len -= 4;\n            }\n            context.push(new Context(node.parent, startPos, startPos + len, match[1], after, match[2], node));\n        }\n        else if (node.name == \"ListItem\" && node.parent.name == \"BulletList\" &&\n            (match = /^( *)([-+*])( {1,4}\\[[ xX]\\])?( +)/.exec(line.text.slice(startPos)))) {\n            let after = match[4], len = match[0].length;\n            if (after.length > 4) {\n                after = after.slice(0, after.length - 4);\n                len -= 4;\n            }\n            let type = match[2];\n            if (match[3])\n                type += match[3].replace(/[xX]/, ' ');\n            context.push(new Context(node.parent, startPos, startPos + len, match[1], after, type, node));\n        }\n    }\n    return context;\n}\nfunction itemNumber(item, doc) {\n    return /^(\\s*)(\\d+)(?=[.)])/.exec(doc.sliceString(item.from, item.from + 10));\n}\nfunction renumberList(after, doc, changes, offset = 0) {\n    for (let prev = -1, node = after;;) {\n        if (node.name == \"ListItem\") {\n            let m = itemNumber(node, doc);\n            let number = +m[2];\n            if (prev >= 0) {\n                if (number != prev + 1)\n                    return;\n                changes.push({ from: node.from + m[1].length, to: node.from + m[0].length, insert: String(prev + 2 + offset) });\n            }\n            prev = number;\n        }\n        let next = node.nextSibling;\n        if (!next)\n            break;\n        node = next;\n    }\n}\nfunction normalizeIndent(content, state) {\n    let blank = /^[ \\t]*/.exec(content)[0].length;\n    if (!blank || state.facet(indentUnit) != \"\\t\")\n        return content;\n    let col = countColumn(content, 4, blank);\n    let space = \"\";\n    for (let i = col; i > 0;) {\n        if (i >= 4) {\n            space += \"\\t\";\n            i -= 4;\n        }\n        else {\n            space += \" \";\n            i--;\n        }\n    }\n    return space + content.slice(blank);\n}\n/**\nReturns a command like\n[`insertNewlineContinueMarkup`](https://codemirror.net/6/docs/ref/#lang-markdown.insertNewlineContinueMarkup),\nallowing further configuration.\n*/\nconst insertNewlineContinueMarkupCommand = (config = {}) => ({ state, dispatch }) => {\n    let tree = syntaxTree(state), { doc } = state;\n    let dont = null, changes = state.changeByRange(range => {\n        if (!range.empty || !markdownLanguage.isActiveAt(state, range.from, -1) && !markdownLanguage.isActiveAt(state, range.from, 1))\n            return dont = { range };\n        let pos = range.from, line = doc.lineAt(pos);\n        let context = getContext(tree.resolveInner(pos, -1), doc);\n        while (context.length && context[context.length - 1].from > pos - line.from)\n            context.pop();\n        if (!context.length)\n            return dont = { range };\n        let inner = context[context.length - 1];\n        if (inner.to - inner.spaceAfter.length > pos - line.from)\n            return dont = { range };\n        let emptyLine = pos >= (inner.to - inner.spaceAfter.length) && !/\\S/.test(line.text.slice(inner.to));\n        // Empty line in list\n        if (inner.item && emptyLine) {\n            let first = inner.node.firstChild, second = inner.node.getChild(\"ListItem\", \"ListItem\");\n            // Not second item or blank line before: delete a level of markup\n            if (first.to >= pos || second && second.to < pos ||\n                line.from > 0 && !/[^\\s>]/.test(doc.lineAt(line.from - 1).text) ||\n                config.nonTightLists === false) {\n                let next = context.length > 1 ? context[context.length - 2] : null;\n                let delTo, insert = \"\";\n                if (next && next.item) { // Re-add marker for the list at the next level\n                    delTo = line.from + next.from;\n                    insert = next.marker(doc, 1);\n                }\n                else {\n                    delTo = line.from + (next ? next.to : 0);\n                }\n                let changes = [{ from: delTo, to: pos, insert }];\n                if (inner.node.name == \"OrderedList\")\n                    renumberList(inner.item, doc, changes, -2);\n                if (next && next.node.name == \"OrderedList\")\n                    renumberList(next.item, doc, changes);\n                return { range: EditorSelection.cursor(delTo + insert.length), changes };\n            }\n            else { // Move second item down, making tight two-item list non-tight\n                let insert = blankLine(context, state, line);\n                return { range: EditorSelection.cursor(pos + insert.length + 1),\n                    changes: { from: line.from, insert: insert + state.lineBreak } };\n            }\n        }\n        if (inner.node.name == \"Blockquote\" && emptyLine && line.from) {\n            let prevLine = doc.lineAt(line.from - 1), quoted = />\\s*$/.exec(prevLine.text);\n            // Two aligned empty quoted lines in a row\n            if (quoted && quoted.index == inner.from) {\n                let changes = state.changes([{ from: prevLine.from + quoted.index, to: prevLine.to },\n                    { from: line.from + inner.from, to: line.to }]);\n                return { range: range.map(changes), changes };\n            }\n        }\n        let changes = [];\n        if (inner.node.name == \"OrderedList\")\n            renumberList(inner.item, doc, changes);\n        let continued = inner.item && inner.item.from < line.from;\n        let insert = \"\";\n        // If not dedented\n        if (!continued || /^[\\s\\d.)\\-+*>]*/.exec(line.text)[0].length >= inner.to) {\n            for (let i = 0, e = context.length - 1; i <= e; i++) {\n                insert += i == e && !continued ? context[i].marker(doc, 1)\n                    : context[i].blank(i < e ? countColumn(line.text, 4, context[i + 1].from) - insert.length : null);\n            }\n        }\n        let from = pos;\n        while (from > line.from && /\\s/.test(line.text.charAt(from - line.from - 1)))\n            from--;\n        insert = normalizeIndent(insert, state);\n        if (nonTightList(inner.node, state.doc))\n            insert = blankLine(context, state, line) + state.lineBreak + insert;\n        changes.push({ from, to: pos, insert: state.lineBreak + insert });\n        return { range: EditorSelection.cursor(from + insert.length + 1), changes };\n    });\n    if (dont)\n        return false;\n    dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"input\" }));\n    return true;\n};\n/**\nThis command, when invoked in Markdown context with cursor\nselection(s), will create a new line with the markup for\nblockquotes and lists that were active on the old line. If the\ncursor was directly after the end of the markup for the old line,\ntrailing whitespace and list markers are removed from that line.\n\nThe command does nothing in non-Markdown context, so it should\nnot be used as the only binding for Enter (even in a Markdown\ndocument, HTML and code regions might use a different language).\n*/\nconst insertNewlineContinueMarkup = /*@__PURE__*/insertNewlineContinueMarkupCommand();\nfunction isMark(node) {\n    return node.name == \"QuoteMark\" || node.name == \"ListMark\";\n}\nfunction nonTightList(node, doc) {\n    if (node.name != \"OrderedList\" && node.name != \"BulletList\")\n        return false;\n    let first = node.firstChild, second = node.getChild(\"ListItem\", \"ListItem\");\n    if (!second)\n        return false;\n    let line1 = doc.lineAt(first.to), line2 = doc.lineAt(second.from);\n    let empty = /^[\\s>]*$/.test(line1.text);\n    return line1.number + (empty ? 0 : 1) < line2.number;\n}\nfunction blankLine(context, state, line) {\n    let insert = \"\";\n    for (let i = 0, e = context.length - 2; i <= e; i++) {\n        insert += context[i].blank(i < e\n            ? countColumn(line.text, 4, context[i + 1].from) - insert.length\n            : null, i < e);\n    }\n    return normalizeIndent(insert, state);\n}\nfunction contextNodeForDelete(tree, pos) {\n    let node = tree.resolveInner(pos, -1), scan = pos;\n    if (isMark(node)) {\n        scan = node.from;\n        node = node.parent;\n    }\n    for (let prev; prev = node.childBefore(scan);) {\n        if (isMark(prev)) {\n            scan = prev.from;\n        }\n        else if (prev.name == \"OrderedList\" || prev.name == \"BulletList\") {\n            node = prev.lastChild;\n            scan = node.to;\n        }\n        else {\n            break;\n        }\n    }\n    return node;\n}\n/**\nThis command will, when invoked in a Markdown context with the\ncursor directly after list or blockquote markup, delete one level\nof markup. When the markup is for a list, it will be replaced by\nspaces on the first invocation (a further invocation will delete\nthe spaces), to make it easy to continue a list.\n\nWhen not after Markdown block markup, this command will return\nfalse, so it is intended to be bound alongside other deletion\ncommands, with a higher precedence than the more generic commands.\n*/\nconst deleteMarkupBackward = ({ state, dispatch }) => {\n    let tree = syntaxTree(state);\n    let dont = null, changes = state.changeByRange(range => {\n        let pos = range.from, { doc } = state;\n        if (range.empty && markdownLanguage.isActiveAt(state, range.from)) {\n            let line = doc.lineAt(pos);\n            let context = getContext(contextNodeForDelete(tree, pos), doc);\n            if (context.length) {\n                let inner = context[context.length - 1];\n                let spaceEnd = inner.to - inner.spaceAfter.length + (inner.spaceAfter ? 1 : 0);\n                // Delete extra trailing space after markup\n                if (pos - line.from > spaceEnd && !/\\S/.test(line.text.slice(spaceEnd, pos - line.from)))\n                    return { range: EditorSelection.cursor(line.from + spaceEnd),\n                        changes: { from: line.from + spaceEnd, to: pos } };\n                if (pos - line.from == spaceEnd &&\n                    // Only apply this if we're on the line that has the\n                    // construct's syntax, or there's only indentation in the\n                    // target range\n                    (!inner.item || line.from <= inner.item.from || !/\\S/.test(line.text.slice(0, inner.to)))) {\n                    let start = line.from + inner.from;\n                    // Replace a list item marker with blank space\n                    if (inner.item && inner.node.from < inner.item.from && /\\S/.test(line.text.slice(inner.from, inner.to))) {\n                        let insert = inner.blank(countColumn(line.text, 4, inner.to) - countColumn(line.text, 4, inner.from));\n                        if (start == line.from)\n                            insert = normalizeIndent(insert, state);\n                        return { range: EditorSelection.cursor(start + insert.length),\n                            changes: { from: start, to: line.from + inner.to, insert } };\n                    }\n                    // Delete one level of indentation\n                    if (start < pos)\n                        return { range: EditorSelection.cursor(start), changes: { from: start, to: pos } };\n                }\n            }\n        }\n        return dont = { range };\n    });\n    if (dont)\n        return false;\n    dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"delete\" }));\n    return true;\n};\n\n/**\nA small keymap with Markdown-specific bindings. Binds Enter to\n[`insertNewlineContinueMarkup`](https://codemirror.net/6/docs/ref/#lang-markdown.insertNewlineContinueMarkup)\nand Backspace to\n[`deleteMarkupBackward`](https://codemirror.net/6/docs/ref/#lang-markdown.deleteMarkupBackward).\n*/\nconst markdownKeymap = [\n    { key: \"Enter\", run: insertNewlineContinueMarkup },\n    { key: \"Backspace\", run: deleteMarkupBackward }\n];\nconst htmlNoMatch = /*@__PURE__*/html({ matchClosingTags: false });\n/**\nMarkdown language support.\n*/\nfunction markdown(config = {}) {\n    let { codeLanguages, defaultCodeLanguage, addKeymap = true, base: { parser } = commonmarkLanguage, completeHTMLTags = true, pasteURLAsLink: pasteURL = true, htmlTagLanguage = htmlNoMatch } = config;\n    if (!(parser instanceof MarkdownParser))\n        throw new RangeError(\"Base parser provided to `markdown` should be a Markdown parser\");\n    let extensions = config.extensions ? [config.extensions] : [];\n    let support = [htmlTagLanguage.support, headerIndent], defaultCode;\n    if (pasteURL)\n        support.push(pasteURLAsLink);\n    if (defaultCodeLanguage instanceof LanguageSupport) {\n        support.push(defaultCodeLanguage.support);\n        defaultCode = defaultCodeLanguage.language;\n    }\n    else if (defaultCodeLanguage) {\n        defaultCode = defaultCodeLanguage;\n    }\n    let codeParser = codeLanguages || defaultCode ? getCodeParser(codeLanguages, defaultCode) : undefined;\n    extensions.push(parseCode({ codeParser, htmlParser: htmlTagLanguage.language.parser }));\n    if (addKeymap)\n        support.push(Prec.high(keymap.of(markdownKeymap)));\n    let lang = mkLang(parser.configure(extensions));\n    if (completeHTMLTags)\n        support.push(lang.data.of({ autocomplete: htmlTagCompletion }));\n    return new LanguageSupport(lang, support);\n}\nfunction htmlTagCompletion(context) {\n    let { state, pos } = context, m = /<[:\\-\\.\\w\\u00b7-\\uffff]*$/.exec(state.sliceDoc(pos - 25, pos));\n    if (!m)\n        return null;\n    let tree = syntaxTree(state).resolveInner(pos, -1);\n    while (tree && !tree.type.isTop) {\n        if (tree.name == \"CodeBlock\" || tree.name == \"FencedCode\" || tree.name == \"ProcessingInstructionBlock\" ||\n            tree.name == \"CommentBlock\" || tree.name == \"Link\" || tree.name == \"Image\")\n            return null;\n        tree = tree.parent;\n    }\n    return {\n        from: pos - m[0].length, to: pos,\n        options: htmlTagCompletions(),\n        validFor: /^<[:\\-\\.\\w\\u00b7-\\uffff]*$/\n    };\n}\nlet _tagCompletions = null;\nfunction htmlTagCompletions() {\n    if (_tagCompletions)\n        return _tagCompletions;\n    let result = htmlCompletionSource(new CompletionContext(EditorState.create({ extensions: htmlNoMatch }), 0, true));\n    return _tagCompletions = result ? result.options : [];\n}\nconst nonPlainText = /code|horizontalrule|html|link|comment|processing|escape|entity|image|mark|url/i;\n/**\nAn extension that intercepts pastes when the pasted content looks\nlike a URL and the selection is non-empty and selects regular\ntext, making the selection a link with the pasted URL as target.\n*/\nconst pasteURLAsLink = /*@__PURE__*/EditorView.domEventHandlers({\n    paste: (event, view) => {\n        var _a;\n        let { main } = view.state.selection;\n        if (main.empty)\n            return false;\n        let link = (_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.getData(\"text/plain\");\n        if (!link || !/^(https?:\\/\\/|mailto:|xmpp:|www\\.)/.test(link))\n            return false;\n        if (/^www\\./.test(link))\n            link = \"https://\" + link;\n        if (!markdownLanguage.isActiveAt(view.state, main.from, 1))\n            return false;\n        let tree = syntaxTree(view.state), crossesNode = false;\n        // Verify that no nodes are started/ended between the selection\n        // points, and we're not inside any non-plain-text construct.\n        tree.iterate({\n            from: main.from, to: main.to,\n            enter: node => { if (node.from > main.from || nonPlainText.test(node.name))\n                crossesNode = true; },\n            leave: node => { if (node.to < main.to)\n                crossesNode = true; }\n        });\n        if (crossesNode)\n            return false;\n        view.dispatch({\n            changes: [{ from: main.from, insert: \"[\" }, { from: main.to, insert: `](${link})` }],\n            userEvent: \"input.paste\",\n            scrollIntoView: true\n        });\n        return true;\n    }\n});\n\nexport { commonmarkLanguage, deleteMarkupBackward, insertNewlineContinueMarkup, insertNewlineContinueMarkupCommand, markdown, markdownKeymap, markdownLanguage, pasteURLAsLink };\n","import { LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\nimport { defineCSSCompletionSource } from '@codemirror/lang-css';\nimport { ExternalTokenizer, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst descendantOp = 110,\n  Unit = 1,\n  openArgList = 2;\n\nconst space = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197,\n    8198, 8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288];\nfunction isAlpha(ch) { return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch >= 161; }\nfunction isDigit(ch) { return ch >= 48 && ch <= 57; }\nconst argList = /*@__PURE__*/new ExternalTokenizer((input, stack) => {\n    if (input.next == 40 /* Ch.parenL */) {\n        let prev = input.peek(-1);\n        if (isAlpha(prev) || isDigit(prev) || prev == 95 /* Ch.underscore */ || prev == 45 /* Ch.dash */)\n            input.acceptToken(openArgList, 1);\n    }\n});\nconst descendant = /*@__PURE__*/new ExternalTokenizer(input => {\n    if (space.indexOf(input.peek(-1)) > -1) {\n        let { next } = input;\n        if (isAlpha(next) || next == 95 /* Ch.underscore */ || next == 35 /* Ch.hash */ || next == 46 /* Ch.period */ ||\n            next == 91 /* Ch.bracketL */ || next == 58 /* Ch.colon */ || next == 45 /* Ch.dash */)\n            input.acceptToken(descendantOp);\n    }\n});\nconst unitToken = /*@__PURE__*/new ExternalTokenizer(input => {\n    if (space.indexOf(input.peek(-1)) < 0) {\n        let { next } = input;\n        if (next == 37 /* Ch.percent */) {\n            input.advance();\n            input.acceptToken(Unit);\n        }\n        if (isAlpha(next)) {\n            do {\n                input.advance();\n            } while (isAlpha(input.next));\n            input.acceptToken(Unit);\n        }\n    }\n});\n\nconst lessHighlighting = /*@__PURE__*/styleTags({\n    \"import charset namespace keyframes media supports when\": tags.definitionKeyword,\n    \"from to selector\": tags.keyword,\n    NamespaceName: tags.namespace,\n    KeyframeName: tags.labelName,\n    TagName: tags.tagName,\n    ClassName: tags.className,\n    PseudoClassName: /*@__PURE__*/tags.constant(tags.className),\n    IdName: tags.labelName,\n    \"FeatureName PropertyName PropertyVariable\": tags.propertyName,\n    AttributeName: tags.attributeName,\n    NumberLiteral: tags.number,\n    KeywordQuery: tags.keyword,\n    UnaryQueryOp: tags.operatorKeyword,\n    \"CallTag ValueName\": tags.atom,\n    VariableName: tags.variableName,\n    \"AtKeyword Interpolation\": /*@__PURE__*/tags.special(tags.variableName),\n    Callee: tags.operatorKeyword,\n    Unit: tags.unit,\n    \"UniversalSelector NestingSelector\": tags.definitionOperator,\n    MatchOp: tags.compareOperator,\n    \"ChildOp SiblingOp, LogicOp\": tags.logicOperator,\n    BinOp: tags.arithmeticOperator,\n    Important: tags.modifier,\n    \"Comment LineComment\": tags.blockComment,\n    ColorLiteral: tags.color,\n    \"ParenthesizedContent StringLiteral\": tags.string,\n    Escape: /*@__PURE__*/tags.special(tags.string),\n    \": ...\": tags.punctuation,\n    \"PseudoOp #\": tags.derefOperator,\n    \"; ,\": tags.separator,\n    \"( )\": tags.paren,\n    \"[ ]\": tags.squareBracket,\n    \"{ }\": tags.brace\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_identifier = {__proto__:null,lang:40, \"nth-child\":40, \"nth-last-child\":40, \"nth-of-type\":40, \"nth-last-of-type\":40, dir:40, \"host-context\":40, and:244, or:244, not:74, only:74, url:86, \"url-prefix\":86, domain:86, regexp:86, when:117, selector:142, from:172, to:174};\nconst spec_AtKeyword = {__proto__:null,\"@import\":126, \"@plugin\":126, \"@media\":152, \"@charset\":156, \"@namespace\":160, \"@keyframes\":166, \"@supports\":178};\nconst parser = /*@__PURE__*/LRParser.deserialize({\n  version: 14,\n  states: \"@^O!gQWOOO!nQaO'#CeOOQP'#Cd'#CdO$RQWO'#CgO$xQaO'#EaO%cQWO'#CiO%kQWO'#DZO%pQWO'#D^O%uQaO'#DfOOQP'#Es'#EsO'YQWO'#DlO'yQWO'#DyO(QQWO'#D{O(xQWO'#D}O)TQWO'#EQO'bQWO'#EWO)YQ`O'#FTO)]Q`O'#FTO)hQ`O'#FTO)vQWO'#EYOOQO'#Er'#ErOOQO'#FV'#FVOOQO'#Ec'#EcO){QWO'#EqO*WQWO'#EqQOQWOOOOQP'#Ch'#ChOOQP,59R,59RO$RQWO,59RO*bQWO'#EdO+PQWO,58|O+_QWO,59TO%kQWO,59uO%pQWO,59xO*bQWO,59{O*bQWO,59}OOQO'#De'#DeO*bQWO,5:OO,bQpO'#E}O,iQWO'#DkOOQO,58|,58|O(QQWO,58|O,pQWO,5:{OOQO,5:{,5:{OOQT'#Cl'#ClO-UQeO,59TO.cQ[O,59TOOQP'#D]'#D]OOQP,59u,59uOOQO'#D_'#D_O.hQpO,59xOOQO'#EZ'#EZO.pQ`O,5;oOOQO,5;o,5;oO/OQWO,5:WO/VQWO,5:WOOQS'#Dn'#DnO/rQWO'#DsO/yQ!fO'#FRO0eQWO'#DtOOQS'#FS'#FSO+YQWO,5:eO'bQWO'#DrOOQS'#Cu'#CuO(QQWO'#CwO0jQ!hO'#CyO2^Q!fO,5:gO2oQWO'#DWOOQS'#Ex'#ExO(QQWO'#DQOOQO'#EP'#EPO2tQWO,5:iO2yQWO,5:iOOQO'#ES'#ESO3RQWO,5:lO3WQ!fO,5:rO3iQ`O'#EkO.pQ`O,5;oOOQO,5:|,5:|O3zQWO,5:tOOQO,5:},5:}O4XQWO,5;]OOQO-E8a-E8aOOQP1G.m1G.mOOQP'#Ce'#CeO5RQaO,5;OOOQP'#Df'#DfOOQO-E8b-E8bOOQO1G.h1G.hO(QQWO1G.hO5fQWO1G.hO5nQeO1G.oO.cQ[O1G.oOOQP1G/a1G/aO6{QpO1G/dO7fQaO1G/gO8cQaO1G/iO9`QaO1G/jO:]Q!fO'#FOO:yQ!fO'#ExOOQO'#FO'#FOOOQO,5;i,5;iO<^QWO,5;iO<iQWO,5:VO<nQ!fO1G.hOOQO1G0g1G0gO=PQWO'#CnOOQP1G.o1G.oO=WQWO'#CqOOQP1G/d1G/dO(QQWO1G/dO=_Q`O1G1ZOOQO1G1Z1G1ZO=mQWO1G/rO=rQ!fO'#FQO>WQWO1G/rO>]Q!fO'#DnO>qQWO,5:ZO>vQ!fO,5:_OOQO'#DP'#DPO'bQWO,5:]O?XQWO'#DwOOQS,5:b,5:bO?`QWO,5:dO'bQWO'#EiO?gQWO,5;mO*bQWO,5:`OOQO1G0P1G0PO?uQ!fO,5:^O@aQ!fO,59cOOQS,59e,59eO(QQWO,59iOOQS,59n,59nO@rQWO,59pOOQO1G0R1G0RO@yQ#tO,59rOARQ!fO,59lOOQO1G0T1G0TOBrQWO1G0TOBwQWO'#ETOOQO1G0W1G0WOOQO1G0^1G0^OOQO,5;V,5;VOOQO-E8i-E8iOCVQ!fO1G0bOCvQWO1G0`O%kQWO'#E_O$RQWO'#E`OEZQWO'#E^OOQO1G0b1G0bPEkQWO'#EcO<nQ!fO7+$SOOQO7+$S7+$SO(QQWO7+$SOOQP7+$Z7+$ZOOQP7+%O7+%OO(QQWO7+%OOEpQ!fO'#EeOF}QWO,5;jO(QQWO,5;jOOQO,5;j,5;jO+gQpO'#EgOG[QWO1G1TOOQO1G1T1G1TOOQO1G/q1G/qOGgQaO'#EvOGnQWO,59YOGsQWO'#EwOG}QWO,59]OHSQ!fO7+%OOOQO7+&u7+&uOOQO7+%^7+%^O(QQWO'#EhOHeQWO,5;lOHmQWO7+%^O(QQWO1G/uOOQS1G/y1G/yOOQS1G/w1G/wOHrQWO,5:cOHwQ!fO1G0OOOQS1G0O1G0OOIYQ!fO,5;TOOQO-E8g-E8gOItQaO1G/zOOQS1G.}1G.}OOQS1G/T1G/TOI{Q!fO1G/[OOQS1G/[1G/[OJ^QWO1G/^OOQO7+%o7+%oOJcQYO'#CyO+YQWO'#EjOJkQWO,5:oOOQO,5:o,5:oOJyQ!fO'#ElO(QQWO'#ElOL^QWO7+%|OOQO7+%|7+%|OOQO7+%z7+%zOOQO,5:y,5:yOOQO,5:z,5:zOLqQaO,5:xOOQO,5:x,5:xOOQO<<Gn<<GnO<nQ!fO<<GnOMRQ!fO<<HjOOQO-E8c-E8cOMdQWO1G1UOOQO,5;R,5;ROOQO-E8e-E8eOOQO7+&o7+&oOMqQWO,5;bOOQP1G.t1G.tO(QQWO'#EfOMyQWO,5;cOOQT1G.w1G.wOOQP<<Hj<<HjONRQ!fO,5;SOOQO-E8f-E8fO/OQWO<<HxONgQWO7+%aOOQS1G/}1G/}OOQS7+%j7+%jOOQS7+%f7+%fOOQS7+$v7+$vOOQS7+$x7+$xOOQO,5;U,5;UOOQO-E8h-E8hOOQO1G0Z1G0ZONnQ!fO,5;WOOQO-E8j-E8jOOQO<<Ih<<IhOOQO1G0d1G0dOOQOAN=YAN=YOOQPAN>UAN>UO!!RQWO,5;QOOQO-E8d-E8dO!!]QWOAN>dOOQS<<H{<<H{OOQOG24OG24O\",\n  stateData: \"!!n~O#dOSROSSOS~OVXOYXO^TO_TOfaOgbOoaOpWOyVO!OUO!aYO!nZO!p[O!r]O!u^O!{_O#hPO#iRO~O#a#eP~P]O^XX^!}X_XXcXXjXXp!}XyXX!OXX!UXX!ZXX![XX!^XX#PXX#aXX#bXX#iXX#oXX#pXX#p!}X#x!}X!]XX~O#hjO~O^oO_oOcmOyqO!OpO!UrO#bsO#ilO#otO#ptO~OjvO![yO!^wO#P{O!Z#TX#a#TX!]#TX~P$WOd!OO#h|O~O#h!PO~O#h!RO~O#h!TO#p!VO#x!VO^!YX^#wX_!YXc!YXj!YXy!YX!O!YX!U!YX!Z!YX![!YX!^!YX#P!YX#a!YX#b!YX#i!YX#o!YX#p!YX!]!YX~Oj!XOn!WO~Og!^Oj!ZOo!^Op!^Ou!`O!i!]O#h!YO~O!^#uP~P'bOf!fOg!fOh!fOj!bOl!fOn!fOo!fOp!fOu!gO{!eO#h!aO#m!cO~On!iO{!eO#h!hO~O#h!kO~Op!nO#p!VO#x!VO^#wX~OjvO#p!VO#x!VO^#wX~O^!qO~O!Z!rO#a#eX!]#eX~O#a#eX!]#eX~P]OVXOYXO^TO_TOp!xOyVO!OUO#h!vO#iRO~OcmOjvO![!{O!^wO~Od#OO#h|O~Of!fOg#VOh!fOj!bOl!fOn!fOo!fOp!fOu!gO{!eO#h!aO#m!cO#s#WO~Oa#XO~P+gO!]#eP~P]O![!{O!^wO#P#]O!Z#Ta#a#Ta!]#Ta~OQ#^O^]a_]ac]aj]ay]a!O]a!U]a!Z]a![]a!^]a#P]a#a]a#b]a#i]a#o]a#p]a!]]aa]a~OQ#`O~Ow#aO!S#bO~Op!nO#p#dO#x#dO^#wa~O!Z#uP~P'bOa#tP~P(QOg!^Oj!ZOo!^Op!^Ou!`O!i!]O~O#h#hO~P/^OQ#mOc#pOr#lOy#oO#n#kO!^#uX!Z#uXa#uX~Oj#rO~OP#vOQmXrmXymX!ZmX#nmX^mXamXcmXfmXgmXhmXjmXlmXnmXomXpmXumX{mX#hmX#mmX!^mX#PmX#amXwmX!]mX~OQ#`Or#wOy#yO!Z#zO#n#kO~Oj#{O~O!Z#}O~On$OO{!eO~O!^$PO~OQ#mOr#lOy#oO!^wO#n#kO~O#h!TO^#_Xp#_X#p#_X#x#_X~O!O$WO!^wO#i$XO~P(QO!Z!rO#a#ea!]#ea~O^oO_oOyqO!OpO!UrO#bsO#ilO#otO#ptO~Oc#Waj#Wa![#Wa!^#Waa#Wa~P4dO![$_O!^wO~OQ#^O^]i_]ic]ij]iy]i!O]i!U]i!Z]i![]i!^]i#P]i#a]i#b]i#i]i#o]i#p]i!]]ia]i~Ow$aO!S$bO~O^oO_oOyqO!OpO#ilO~Oc!Tij!Ti!U!Ti!Z!Ti![!Ti!^!Ti#P!Ti#a!Ti#b!Ti#o!Ti#p!Ti!]!Tia!Ti~P7TOc!Vij!Vi!U!Vi!Z!Vi![!Vi!^!Vi#P!Vi#a!Vi#b!Vi#o!Vi#p!Vi!]!Via!Vi~P7TOc!Wij!Wi!U!Wi!Z!Wi![!Wi!^!Wi#P!Wi#a!Wi#b!Wi#o!Wi#p!Wi!]!Wia!Wi~P7TOQ#`O^$eOr#wOy#yO#n#kOa#rXc#rX!Z#rX~P(QO#s$fOQ#lX^#lXa#lXc#lXf#lXg#lXh#lXj#lXl#lXn#lXo#lXp#lXr#lXu#lXy#lX{#lX!Z#lX#h#lX#m#lX#n#lX~Oa$iOc$gO!Z$gO~O!]$jO~OQ#`Or#wOy#yO!^wO#n#kO~Oa#jP~P*bOa#kP~P(QOp!nO#p$pO#x$pO^#wi~O!Z$qO~OQ#`Oc$rOr#wOy#yO#n#kOa#tX~Oa$tO~OQ!bX^!dXa!bXr!bXy!bX#n!bX~O^$uO~OQ#mOa$vOr#lOy#oO#n#kO~Oa#uP~P'bOw$zO~P(QOc#pO!^#ua!Z#uaa#ua~OQ#mOr#lOy#oO#n#kOc!fa!^!fa!Z!faa!fa~OQ#`Oa%OOr#wOy#yO#n#kO~Ow%RO~P(QOn%SO|%SO~OQ#`Or#wOy#yO#n#kO!Zta^taatactaftagtahtajtaltantaotaptauta{ta#hta#mta!^ta#Pta#atawta!]ta~O!Z%TO~O!]%XO!x%VO!y%VO#m%UO~OQ#`Oc%ZOr#wOy#yO#P%]O#n#kO!Z#Oi#a#Oi!]#Oi~P(QO!Z%^OV!|iY!|i^!|i_!|if!|ig!|io!|ip!|iy!|i!O!|i!a!|i!n!|i!p!|i!r!|i!u!|i!{!|i#a!|i#h!|i#i!|i!]!|i~OjvO!Z#QX#a#QX!]#QX~P*bO!Z!rO~OQ#`Or#wOy#yO#n#kOa#XXc#XXf#XXg#XXh#XXj#XXl#XXn#XXo#XXp#XXu#XX{#XX!Z#XX#h#XX#m#XX~Oa#rac#ra!Z#ra~P(QOa%jOc$gO!Z$gO~Oa#jX~P$WOa%lO~Oc%mOa#kX~P(QOa%oO~OQ#`Or#wOw%pOy#yO#n#kO~Oc$rOa#ta~On%sO~Oa%uO~OQ#`Or#wOw%vOy#yO#n#kO~OQ#mOr#lOy#oO#n#kOc#]a!^#]a!Z#]aa#]a~Oa%wO~P4dOQ#`Or#wOw%xOy#yO#n#kO~Oa%yO~OP#vO!^mX~O!]%|O!x%VO!y%VO#m%UO~OQ#`Or#wOy#yO#n#kOc#`Xf#`Xg#`Xh#`Xj#`Xl#`Xn#`Xo#`Xp#`Xu#`X{#`X!Z#`X#P#`X#a#`X#h#`X#m#`X!]#`X~Oc%ZO#P&PO!Z#Oq#a#Oq!]#Oq~P(QOjvO!Z#Qa#a#Qa!]#Qa~P4dOQ#`Or#wOw&SOy#yO#n#kO~Oa#ric#ri!Z#ri~P(QOcmOa#ja~Oc%mOa#ka~OQ#`Or#wOy#yO#n#kOa#[ac#[a~Oa&WO~P(QOQ#`Or#wOy#yO#n#kOc#`af#`ag#`ah#`aj#`al#`an#`ao#`ap#`au#`a{#`a!Z#`a#P#`a#a#`a#h#`a#m#`a!]#`a~Oa#Yac#Ya~P(QO!Z&XO~Of#dpg#m|#iRSRr~\",\n  goto: \"0^#zPPPPPP#{P$Q$^P$Q$j$QPP$sP$yPP%PPPP%jP%jP&ZPPP%jP'O%jP%jP%jP'jPP$QP(a$Q(jP$QP$Q$Q(p$QPPPP(w#{P)f)f)q)f)f)f)fP)f)t)f#{P#{P#{P){#{P*O*RPP#{P#{*U*aP*f*i*i*a*a*l*s*}+e+k+q+w+},T,_PPPP,e,k,pPP-[-_-bPPPP.u/UP/[/_/k0QP0VVdOhweXOhmrsuw#^#r$YeQOhmrsuw#^#r$YQkRQ!ulR%`$XQ}TR!}oQ#_}R$`!}Q#_!Or#x!d#U#[#f#u#|$U$]$c$o$y%Q%Y%d%e%q%}R$`#O!]!f[vy!X!b!g!q!{#U#`#b#o#w#y$U$_$b$d$e$g$m$r$u%Z%[%g%m%t&T![!f[vy!X!b!g!q!{#U#`#b#o#w#y$U$_$b$d$e$g$m$r$u%Z%[%g%m%t&TT%V$P%WY#l![!m#j#t${s#w!d#U#[#f#u#|$U$]$c$o$y%Q%Y%d%e%q%}![!f[vy!X!b!g!q!{#U#`#b#o#w#y$U$_$b$d$e$g$m$r$u%Z%[%g%m%t&TQ!i]R$O!jQ!QUQ#PpR%_$WQ!SVR#QqZuS!w$k$}%aQxSS!znzQ#s!_Q$R!mQ$V!qS$^!|#[Q%c$]Q%z%VR&R%dc!^Z_!W!Z!`#l#m#p%sR#i!ZZ#n![!m#j#t${R!j]R!l^R$Q!lU`OhwQ!UWR$S!nVeOhwR$Z!qR$Y!qShOwR!thQnSS!yn%kR%k$kQ$d#UQ$m#`Y%f$d$m%g%t&TQ%g$eQ%t$uR&T%mQ%n$mR&U%nQ$h#YR%i$hQ$s#fR%r$sQ#q![R$|#qQ%W$PR%{%WQ!o`Q#c!UT$T!o#cQ%[$UR&O%[QiOR#ZwVfOhwUSOhwQ!wmQ#RrQ#SsQ#TuQ$k#^Q$}#rR%a$YR$l#^R$n#`Q!d[S#Uv$gQ#[yQ#f!XQ#u!bQ#|!gQ$U!qQ$]!{d$c#U#`$d$e$m$u%g%m%t&TQ$o#bQ$y#oQ%P#wQ%Q#yS%Y$U%[Q%d$_Q%e$bQ%q$rR%}%ZQzSQ!pbQ!|nQ%b$YR&Q%aQ#YvR%h$gR#g!XQ!_ZQ#e!WQ$x#mR&V%sW![Z!W#m%sQ!m_Q#j!ZQ#t!`Q$w#lR${#pVcOhwSgOwR!sh\",\n  nodeNames: \"⚠ Unit ( Comment LineComment StyleSheet RuleSet UniversalSelector TagSelector TagName NestingSelector ClassSelector ClassName PseudoClassSelector : :: PseudoClassName ) ArgList , PseudoClassName ArgList VariableName AtKeyword PropertyVariable ValueName ( ParenthesizedValue ColorLiteral NumberLiteral StringLiteral Escape Interpolation BinaryExpression BinOp LogicOp UnaryExpression UnaryQueryOp CallExpression ] SubscriptExpression [ CallLiteral CallTag ParenthesizedContent IdSelector # IdName AttributeSelector AttributeName MatchOp ChildSelector ChildOp DescendantSelector SiblingSelector SiblingOp InterpolatedSelector ; when } { Block ImportStatement import KeywordQuery FeatureQuery FeatureName BinaryQuery UnaryQuery ParenthesizedQuery SelectorQuery selector CallQuery ArgList SubscriptQuery MediaStatement media CharsetStatement charset NamespaceStatement namespace NamespaceName KeyframesStatement keyframes KeyframeName KeyframeList from to SupportsStatement supports DetachedRuleSet PropertyName Declaration Important Inclusion IdSelector ClassSelector Inclusion CallExpression\",\n  maxTerm: 133,\n  nodeProps: [\n    [\"isolate\", -3,3,4,30,\"\"],\n    [\"openedBy\", 17,\"(\",59,\"{\"],\n    [\"closedBy\", 26,\")\",60,\"}\"]\n  ],\n  propSources: [lessHighlighting],\n  skippedNodes: [0,3,4],\n  repeatNodeCount: 10,\n  tokenData: \"!2q~R!ZOX$tX^%l^p$tpq%lqr)Ors-xst/ltu6Zuv$tvw8^wx:Uxy;syz<Uz{<Z{|<t|}BQ}!OBc!O!PDo!P!QFY!Q![Jw![!]Kr!]!^Ln!^!_MP!_!`M{!`!aNl!a!b$t!b!c! m!c!}!&R!}#O!'y#O#P$t#P#Q!([#Q#R!(m#R#T$t#T#o!&R#o#p!)S#p#q!(m#q#r!)e#r#s!)v#s#y$t#y#z%l#z$f$t$f$g%l$g#BY$t#BY#BZ%l#BZ$IS$t$IS$I_%l$I_$I|$t$I|$JO%l$JO$JT$t$JT$JU%l$JU$KV$t$KV$KW%l$KW&FU$t&FU&FV%l&FV;'S$t;'S;=`!2k<%lO$t`$wSOy%Tz;'S%T;'S;=`%f<%lO%T`%YS|`Oy%Tz;'S%T;'S;=`%f<%lO%T`%iP;=`<%l%T~%qh#d~OX%TX^']^p%Tpq']qy%Tz#y%T#y#z']#z$f%T$f$g']$g#BY%T#BY#BZ']#BZ$IS%T$IS$I_']$I_$I|%T$I|$JO']$JO$JT%T$JT$JU']$JU$KV%T$KV$KW']$KW&FU%T&FU&FV']&FV;'S%T;'S;=`%f<%lO%T~'dh#d~|`OX%TX^']^p%Tpq']qy%Tz#y%T#y#z']#z$f%T$f$g']$g#BY%T#BY#BZ']#BZ$IS%T$IS$I_']$I_$I|%T$I|$JO']$JO$JT%T$JT$JU']$JU$KV%T$KV$KW']$KW&FU%T&FU&FV']&FV;'S%T;'S;=`%f<%lO%Tk)RUOy%Tz#]%T#]#^)e#^;'S%T;'S;=`%f<%lO%Tk)jU|`Oy%Tz#a%T#a#b)|#b;'S%T;'S;=`%f<%lO%Tk*RU|`Oy%Tz#d%T#d#e*e#e;'S%T;'S;=`%f<%lO%Tk*jU|`Oy%Tz#c%T#c#d*|#d;'S%T;'S;=`%f<%lO%Tk+RU|`Oy%Tz#f%T#f#g+e#g;'S%T;'S;=`%f<%lO%Tk+jU|`Oy%Tz#h%T#h#i+|#i;'S%T;'S;=`%f<%lO%Tk,RU|`Oy%Tz#T%T#T#U,e#U;'S%T;'S;=`%f<%lO%Tk,jU|`Oy%Tz#b%T#b#c,|#c;'S%T;'S;=`%f<%lO%Tk-RU|`Oy%Tz#h%T#h#i-e#i;'S%T;'S;=`%f<%lO%Tk-lS#PZ|`Oy%Tz;'S%T;'S;=`%f<%lO%T~-{WOY-xZr-xrs.es#O-x#O#P.j#P;'S-x;'S;=`/f<%lO-x~.jOn~~.mRO;'S-x;'S;=`.v;=`O-x~.yXOY-xZr-xrs.es#O-x#O#P.j#P;'S-x;'S;=`/f;=`<%l-x<%lO-x~/iP;=`<%l-xo/qY!OROy%Tz!Q%T!Q![0a![!c%T!c!i0a!i#T%T#T#Z0a#Z;'S%T;'S;=`%f<%lO%Tm0fY|`Oy%Tz!Q%T!Q![1U![!c%T!c!i1U!i#T%T#T#Z1U#Z;'S%T;'S;=`%f<%lO%Tm1ZY|`Oy%Tz!Q%T!Q![1y![!c%T!c!i1y!i#T%T#T#Z1y#Z;'S%T;'S;=`%f<%lO%Tm2QYl]|`Oy%Tz!Q%T!Q![2p![!c%T!c!i2p!i#T%T#T#Z2p#Z;'S%T;'S;=`%f<%lO%Tm2wYl]|`Oy%Tz!Q%T!Q![3g![!c%T!c!i3g!i#T%T#T#Z3g#Z;'S%T;'S;=`%f<%lO%Tm3lY|`Oy%Tz!Q%T!Q![4[![!c%T!c!i4[!i#T%T#T#Z4[#Z;'S%T;'S;=`%f<%lO%Tm4cYl]|`Oy%Tz!Q%T!Q![5R![!c%T!c!i5R!i#T%T#T#Z5R#Z;'S%T;'S;=`%f<%lO%Tm5WY|`Oy%Tz!Q%T!Q![5v![!c%T!c!i5v!i#T%T#T#Z5v#Z;'S%T;'S;=`%f<%lO%Tm5}Sl]|`Oy%Tz;'S%T;'S;=`%f<%lO%Tm6^YOy%Tz!_%T!_!`6|!`!c%T!c!}7a!}#T%T#T#o7a#o;'S%T;'S;=`%f<%lO%Td7TS!SS|`Oy%Tz;'S%T;'S;=`%f<%lO%Tm7h[h]|`Oy%Tz}%T}!O7a!O!Q%T!Q![7a![!c%T!c!}7a!}#T%T#T#o7a#o;'S%T;'S;=`%f<%lO%Ta8c[YPOy%Tz}%T}!O9X!O!Q%T!Q![9X![!c%T!c!}9X!}#T%T#T#o9X#o;'S%T;'S;=`%f<%lO%Ta9`[YP|`Oy%Tz}%T}!O9X!O!Q%T!Q![9X![!c%T!c!}9X!}#T%T#T#o9X#o;'S%T;'S;=`%f<%lO%T~:XWOY:UZw:Uwx.ex#O:U#O#P:q#P;'S:U;'S;=`;m<%lO:U~:tRO;'S:U;'S;=`:};=`O:U~;QXOY:UZw:Uwx.ex#O:U#O#P:q#P;'S:U;'S;=`;m;=`<%l:U<%lO:U~;pP;=`<%l:Uo;xSj_Oy%Tz;'S%T;'S;=`%f<%lO%T~<ZOa~m<bUVPrWOy%Tz!_%T!_!`6|!`;'S%T;'S;=`%f<%lO%To<{Y#pQrWOy%Tz!O%T!O!P=k!P!Q%T!Q![@p![#R%T#R#SAm#S;'S%T;'S;=`%f<%lO%Tm=pU|`Oy%Tz!Q%T!Q![>S![;'S%T;'S;=`%f<%lO%Tm>ZY#m]|`Oy%Tz!Q%T!Q![>S![!g%T!g!h>y!h#X%T#X#Y>y#Y;'S%T;'S;=`%f<%lO%Tm?OY|`Oy%Tz{%T{|?n|}%T}!O?n!O!Q%T!Q![@V![;'S%T;'S;=`%f<%lO%Tm?sU|`Oy%Tz!Q%T!Q![@V![;'S%T;'S;=`%f<%lO%Tm@^U#m]|`Oy%Tz!Q%T!Q![@V![;'S%T;'S;=`%f<%lO%Tm@w[#m]|`Oy%Tz!O%T!O!P>S!P!Q%T!Q![@p![!g%T!g!h>y!h#X%T#X#Y>y#Y;'S%T;'S;=`%f<%lO%TbAtS#xQ|`Oy%Tz;'S%T;'S;=`%f<%lO%TkBVScZOy%Tz;'S%T;'S;=`%f<%lO%TmBhXrWOy%Tz}%T}!OCT!O!P=k!P!Q%T!Q![@p![;'S%T;'S;=`%f<%lO%TmCYW|`Oy%Tz!c%T!c!}Cr!}#T%T#T#oCr#o;'S%T;'S;=`%f<%lO%TmCy[f]|`Oy%Tz}%T}!OCr!O!Q%T!Q![Cr![!c%T!c!}Cr!}#T%T#T#oCr#o;'S%T;'S;=`%f<%lO%ToDtW#iROy%Tz!O%T!O!PE^!P!Q%T!Q![>S![;'S%T;'S;=`%f<%lO%TlEcU|`Oy%Tz!O%T!O!PEu!P;'S%T;'S;=`%f<%lO%TlE|S#s[|`Oy%Tz;'S%T;'S;=`%f<%lO%T~F_VrWOy%Tz{Ft{!P%T!P!QIl!Q;'S%T;'S;=`%f<%lO%T~FyU|`OyFtyzG]z{Hd{;'SFt;'S;=`If<%lOFt~G`TOzG]z{Go{;'SG];'S;=`H^<%lOG]~GrVOzG]z{Go{!PG]!P!QHX!Q;'SG];'S;=`H^<%lOG]~H^OR~~HaP;=`<%lG]~HiW|`OyFtyzG]z{Hd{!PFt!P!QIR!Q;'SFt;'S;=`If<%lOFt~IYS|`R~Oy%Tz;'S%T;'S;=`%f<%lO%T~IiP;=`<%lFt~IsV|`S~OYIlYZ%TZyIlyzJYz;'SIl;'S;=`Jq<%lOIl~J_SS~OYJYZ;'SJY;'S;=`Jk<%lOJY~JnP;=`<%lJY~JtP;=`<%lIlmJ|[#m]Oy%Tz!O%T!O!P>S!P!Q%T!Q![@p![!g%T!g!h>y!h#X%T#X#Y>y#Y;'S%T;'S;=`%f<%lO%TkKwU^ZOy%Tz![%T![!]LZ!];'S%T;'S;=`%f<%lO%TcLbS_R|`Oy%Tz;'S%T;'S;=`%f<%lO%TkLsS!ZZOy%Tz;'S%T;'S;=`%f<%lO%ThMUUrWOy%Tz!_%T!_!`Mh!`;'S%T;'S;=`%f<%lO%ThMoS|`rWOy%Tz;'S%T;'S;=`%f<%lO%TlNSW!SSrWOy%Tz!^%T!^!_Mh!_!`%T!`!aMh!a;'S%T;'S;=`%f<%lO%TjNsV!UQrWOy%Tz!_%T!_!`Mh!`!a! Y!a;'S%T;'S;=`%f<%lO%Tb! aS!UQ|`Oy%Tz;'S%T;'S;=`%f<%lO%To! rYg]Oy%Tz!b%T!b!c!!b!c!}!#R!}#T%T#T#o!#R#o#p!$O#p;'S%T;'S;=`%f<%lO%Tm!!iWg]|`Oy%Tz!c%T!c!}!#R!}#T%T#T#o!#R#o;'S%T;'S;=`%f<%lO%Tm!#Y[g]|`Oy%Tz}%T}!O!#R!O!Q%T!Q![!#R![!c%T!c!}!#R!}#T%T#T#o!#R#o;'S%T;'S;=`%f<%lO%To!$TW|`Oy%Tz!c%T!c!}!$m!}#T%T#T#o!$m#o;'S%T;'S;=`%f<%lO%To!$r^|`Oy%Tz}%T}!O!$m!O!Q%T!Q![!$m![!c%T!c!}!$m!}#T%T#T#o!$m#o#q%T#q#r!%n#r;'S%T;'S;=`%f<%lO%To!%uSp_|`Oy%Tz;'S%T;'S;=`%f<%lO%To!&W[#h_Oy%Tz}%T}!O!&|!O!Q%T!Q![!&|![!c%T!c!}!&|!}#T%T#T#o!&|#o;'S%T;'S;=`%f<%lO%To!'T[#h_|`Oy%Tz}%T}!O!&|!O!Q%T!Q![!&|![!c%T!c!}!&|!}#T%T#T#o!&|#o;'S%T;'S;=`%f<%lO%Tk!(OSyZOy%Tz;'S%T;'S;=`%f<%lO%Tm!(aSw]Oy%Tz;'S%T;'S;=`%f<%lO%Td!(pUOy%Tz!_%T!_!`6|!`;'S%T;'S;=`%f<%lO%Tk!)XS!^ZOy%Tz;'S%T;'S;=`%f<%lO%Tk!)jS!]ZOy%Tz;'S%T;'S;=`%f<%lO%To!){Y#oQOr%Trs!*ksw%Twx!.wxy%Tz!_%T!_!`6|!`;'S%T;'S;=`%f<%lO%Tm!*pZ|`OY!*kYZ%TZr!*krs!+csy!*kyz!+vz#O!*k#O#P!-j#P;'S!*k;'S;=`!.q<%lO!*km!+jSo]|`Oy%Tz;'S%T;'S;=`%f<%lO%T]!+yWOY!+vZr!+vrs!,cs#O!+v#O#P!,h#P;'S!+v;'S;=`!-d<%lO!+v]!,hOo]]!,kRO;'S!+v;'S;=`!,t;=`O!+v]!,wXOY!+vZr!+vrs!,cs#O!+v#O#P!,h#P;'S!+v;'S;=`!-d;=`<%l!+v<%lO!+v]!-gP;=`<%l!+vm!-oU|`Oy!*kyz!+vz;'S!*k;'S;=`!.R;=`<%l!+v<%lO!*km!.UXOY!+vZr!+vrs!,cs#O!+v#O#P!,h#P;'S!+v;'S;=`!-d;=`<%l!*k<%lO!+vm!.tP;=`<%l!*km!.|Z|`OY!.wYZ%TZw!.wwx!+cxy!.wyz!/oz#O!.w#O#P!1^#P;'S!.w;'S;=`!2e<%lO!.w]!/rWOY!/oZw!/owx!,cx#O!/o#O#P!0[#P;'S!/o;'S;=`!1W<%lO!/o]!0_RO;'S!/o;'S;=`!0h;=`O!/o]!0kXOY!/oZw!/owx!,cx#O!/o#O#P!0[#P;'S!/o;'S;=`!1W;=`<%l!/o<%lO!/o]!1ZP;=`<%l!/om!1cU|`Oy!.wyz!/oz;'S!.w;'S;=`!1u;=`<%l!/o<%lO!.wm!1xXOY!/oZw!/owx!,cx#O!/o#O#P!0[#P;'S!/o;'S;=`!1W;=`<%l!.w<%lO!/om!2hP;=`<%l!.w`!2nP;=`<%l$t\",\n  tokenizers: [descendant, unitToken, argList, 0, 1, 2, 3, 4],\n  topRules: {\"StyleSheet\":[0,5]},\n  specialized: [{term: 116, get: (value) => spec_identifier[value] || -1},{term: 23, get: (value) => spec_AtKeyword[value] || -1}],\n  tokenPrec: 2180\n});\n\n/**\nA language provider for Less style sheets.\n*/\nconst lessLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"less\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                Declaration: /*@__PURE__*/continuedIndent()\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                Block: foldInside\n            })\n        ]\n    }),\n    languageData: {\n        commentTokens: { block: { open: \"/*\", close: \"*/\" }, line: \"//\" },\n        indentOnInput: /^\\s*\\}$/,\n        wordChars: \"@-\"\n    }\n});\n/**\nProperty, variable, @-variable, and value keyword completion\nsource.\n*/\nconst lessCompletionSource = /*@__PURE__*/defineCSSCompletionSource(node => node.name == \"VariableName\" || node.name == \"AtKeyword\");\n/**\nLanguage support for Less.\n*/\nfunction less() {\n    return new LanguageSupport(lessLanguage, lessLanguage.data.of({ autocomplete: lessCompletionSource }));\n}\n\nexport { less, lessCompletionSource, lessLanguage };\n","import { ExternalTokenizer, ContextTracker, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst indent = 168,\n  dedent = 169,\n  descendantOp = 170,\n  InterpolationEnd = 1,\n  InterpolationContinue = 2,\n  Unit = 3,\n  callee = 171,\n  identifier = 172,\n  VariableName = 4,\n  queryIdentifier = 173,\n  InterpolationStart = 5,\n  newline = 174,\n  blankLineStart = 175,\n  eof = 176,\n  whitespace = 177,\n  LineComment = 6,\n  Comment = 7,\n  IndentedMixin = 8,\n  IndentedInclude = 9,\n  Dialect_indented = 0;\n\n/* Hand-written tokenizers for CSS tokens that can't be\n   expressed by Lezer's built-in tokenizer. */\n\nconst space = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197,\n               8198, 8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288];\nconst colon = 58, parenL = 40, underscore = 95, bracketL = 91, dash = 45, period = 46,\n      hash = 35, percent = 37, braceL = 123, braceR = 125, slash = 47, asterisk = 42,\n      newlineChar = 10, equals = 61, plus = 43, and = 38;\n\nfunction isAlpha(ch) { return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch >= 161 }\n\nfunction isDigit(ch) { return ch >= 48 && ch <= 57 }\n\nfunction startOfComment(input) {\n  let next;\n  return input.next == slash && ((next = input.peek(1)) == slash || next == asterisk)\n}\n\nconst spaces = new ExternalTokenizer((input, stack) => {\n  if (stack.dialectEnabled(Dialect_indented)) {\n    let prev;\n    if (input.next < 0 && stack.canShift(eof)) {\n      input.acceptToken(eof);\n    } else if (((prev = input.peek(-1)) == newlineChar || prev < 0) && stack.canShift(blankLineStart)) {\n      let spaces = 0;\n      while (input.next != newlineChar && space.includes(input.next)) { input.advance(); spaces++; }\n      if (input.next == newlineChar || startOfComment(input))\n        input.acceptToken(blankLineStart, -spaces);\n      else if (spaces)\n        input.acceptToken(whitespace);\n    } else if (input.next == newlineChar) {\n      input.acceptToken(newline, 1);\n    } else if (space.includes(input.next)) {\n      input.advance();\n      while (input.next != newlineChar && space.includes(input.next)) input.advance();\n      input.acceptToken(whitespace);\n    }\n  } else {\n    let length = 0;\n    while (space.includes(input.next)) {\n      input.advance();\n      length++;\n    }\n    if (length) input.acceptToken(whitespace);\n  }\n}, {contextual: true});\n\nconst comments = new ExternalTokenizer((input, stack) => {\n  if (!startOfComment(input)) return\n  input.advance();\n  if (stack.dialectEnabled(Dialect_indented)) {\n    let indentedComment = -1;\n    for (let off = 1;; off++) {\n      let prev = input.peek(-off - 1);\n      if (prev == newlineChar || prev < 0) {\n        indentedComment = off + 1;\n        break\n      } else if (!space.includes(prev)) {\n        break\n      }\n    }\n    if (indentedComment > -1) { // Weird indented-style comment\n      let block = input.next == asterisk, end = 0;\n      input.advance();\n      while (input.next >= 0) {\n        if (input.next == newlineChar) {\n          input.advance();\n          let indented = 0;\n          while (input.next != newlineChar && space.includes(input.next)) {\n            indented++;\n            input.advance();\n          }\n          if (indented < indentedComment) {\n            end = -indented - 1;\n            break\n          }\n        } else if (block && input.next == asterisk && input.peek(1) == slash) {\n          end = 2;\n          break\n        } else {\n          input.advance();\n        }\n      }\n      input.acceptToken(block ? Comment : LineComment, end);\n      return\n    }\n  }\n  if (input.next == slash) {\n    while (input.next != newlineChar && input.next >= 0) input.advance();\n    input.acceptToken(LineComment);\n  } else {\n    input.advance();\n    while (input.next >= 0) {\n      let {next} = input;\n      input.advance();\n      if (next == asterisk && input.next == slash) {\n        input.advance();\n        break\n      }\n    }\n    input.acceptToken(Comment);\n  }\n});\n\nconst indentedMixins = new ExternalTokenizer((input, stack) => {\n  if ((input.next == plus || input.next == equals) && stack.dialectEnabled(Dialect_indented))\n    input.acceptToken(input.next == equals ? IndentedMixin : IndentedInclude, 1);\n});\n\nconst indentation = new ExternalTokenizer((input, stack) => {\n  if (!stack.dialectEnabled(Dialect_indented)) return\n  let cDepth = stack.context.depth;\n  if (input.next < 0 && cDepth) {\n    input.acceptToken(dedent);\n    return\n  }\n  let prev = input.peek(-1);\n  if (prev == newlineChar) {\n    let depth = 0;\n    while (input.next != newlineChar && space.includes(input.next)) {\n      input.advance();\n      depth++;\n    }\n    if (depth != cDepth &&\n        input.next != newlineChar && !startOfComment(input)) {\n      if (depth < cDepth) input.acceptToken(dedent, -depth);\n      else input.acceptToken(indent);\n    }\n  }\n});\n\nconst identifiers = new ExternalTokenizer((input, stack) => {\n  for (let inside = false, dashes = 0, i = 0;; i++) {\n    let {next} = input;\n    if (isAlpha(next) || next == dash || next == underscore || (inside && isDigit(next))) {\n      if (!inside && (next != dash || i > 0)) inside = true;\n      if (dashes === i && next == dash) dashes++;\n      input.advance();\n    } else if (next == hash && input.peek(1) == braceL) {\n      input.acceptToken(InterpolationStart, 2);\n      break\n    } else {\n      if (inside) input.acceptToken(\n        dashes == 2 && stack.canShift(VariableName) ? VariableName\n          : stack.canShift(queryIdentifier) ? queryIdentifier\n          : next == parenL ? callee\n          : identifier);\n      break\n    }\n  }\n});\n\nconst interpolationEnd = new ExternalTokenizer(input => {\n  if (input.next == braceR) {\n    input.advance();\n    while (isAlpha(input.next) || input.next == dash || input.next == underscore || isDigit(input.next))\n      input.advance();\n    if (input.next == hash && input.peek(1) == braceL)\n      input.acceptToken(InterpolationContinue, 2);\n    else\n      input.acceptToken(InterpolationEnd);\n  }\n});\n\nconst descendant = new ExternalTokenizer(input => {\n  if (space.includes(input.peek(-1))) {\n    let {next} = input;\n    if (isAlpha(next) || next == underscore || next == hash || next == period ||\n        next == bracketL || next == colon && isAlpha(input.peek(1)) || next == dash || next == and || next == asterisk)\n      input.acceptToken(descendantOp);\n  }\n});\n\nconst unitToken = new ExternalTokenizer(input => {\n  if (!space.includes(input.peek(-1))) {\n    let {next} = input;\n    if (next == percent) { input.advance(); input.acceptToken(Unit); }\n    if (isAlpha(next)) {\n      do { input.advance(); } while (isAlpha(input.next) || isDigit(input.next))\n      input.acceptToken(Unit);\n    }\n  }\n});\n\nfunction IndentLevel(parent, depth) {\n  this.parent = parent;\n  this.depth = depth;\n  this.hash = (parent ? parent.hash + parent.hash << 8 : 0) + depth + (depth << 4);\n}\n\nconst topIndent = new IndentLevel(null, 0);\n\nconst trackIndent = new ContextTracker({\n  start: topIndent,\n  shift(context, term, stack, input) {\n    if (term == indent) return new IndentLevel(context, stack.pos - input.pos)\n    if (term == dedent) return context.parent\n    return context\n  },\n  hash(context) { return context.hash }\n});\n\nconst cssHighlighting = styleTags({\n  \"AtKeyword import charset namespace keyframes media supports include mixin use forward extend at-root\": tags.definitionKeyword,\n  \"Keyword selector\": tags.keyword,\n  \"ControlKeyword\": tags.controlKeyword,\n  NamespaceName: tags.namespace,\n  KeyframeName: tags.labelName,\n  KeyframeRangeName: tags.operatorKeyword,\n  TagName: tags.tagName,\n  \"ClassName Suffix\": tags.className,\n  PseudoClassName: tags.constant(tags.className),\n  IdName: tags.labelName,\n  \"FeatureName PropertyName\": tags.propertyName,\n  AttributeName: tags.attributeName,\n  NumberLiteral: tags.number,\n  KeywordQuery: tags.keyword,\n  UnaryQueryOp: tags.operatorKeyword,\n  \"CallTag ValueName\": tags.atom,\n  VariableName: tags.variableName,\n  SassVariableName: tags.special(tags.variableName),\n  Callee: tags.operatorKeyword,\n  Unit: tags.unit,\n  \"UniversalSelector NestingSelector IndentedMixin IndentedInclude\": tags.definitionOperator,\n  MatchOp: tags.compareOperator,\n  \"ChildOp SiblingOp, LogicOp\": tags.logicOperator,\n  BinOp: tags.arithmeticOperator,\n  \"Important Global Default\": tags.modifier,\n  Comment: tags.blockComment,\n  LineComment: tags.lineComment,\n  ColorLiteral: tags.color,\n  \"ParenthesizedContent StringLiteral\": tags.string,\n  \"InterpolationStart InterpolationContinue InterpolationEnd\": tags.meta,\n  \": \\\"...\\\"\": tags.punctuation,\n  \"PseudoOp #\": tags.derefOperator,\n  \"; ,\": tags.separator,\n  \"( )\": tags.paren,\n  \"[ ]\": tags.squareBracket,\n  \"{ }\": tags.brace\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_identifier = {__proto__:null,not:62, using:197, as:207, with:211, without:211, hide:225, show:225, if:263, from:269, to:271, through:273, in:279};\nconst spec_callee = {__proto__:null,url:82, \"url-prefix\":82, domain:82, regexp:82, lang:104, \"nth-child\":104, \"nth-last-child\":104, \"nth-of-type\":104, \"nth-last-of-type\":104, dir:104, \"host-context\":104};\nconst spec_AtKeyword = {__proto__:null,\"@import\":162, \"@include\":194, \"@mixin\":200, \"@function\":200, \"@use\":204, \"@extend\":214, \"@at-root\":218, \"@forward\":222, \"@media\":228, \"@charset\":232, \"@namespace\":236, \"@keyframes\":242, \"@supports\":254, \"@if\":258, \"@else\":260, \"@for\":266, \"@each\":276, \"@while\":282, \"@debug\":286, \"@warn\":286, \"@error\":286, \"@return\":286};\nconst spec_queryIdentifier = {__proto__:null,layer:166, not:184, only:184, selector:190};\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"!$WQ`Q+tOOO#fQ+tOOP#mOpOOOOQ#U'#Ch'#ChO#rQ(pO'#CjOOQ#U'#Ci'#CiO%_Q)QO'#GXO%rQ.jO'#CnO&mQ#dO'#D]O'dQ(pO'#CgO'kQ)OO'#D_O'vQ#dO'#DfO'{Q#dO'#DiO(QQ#dO'#DqOOQ#U'#GX'#GXO(VQ(pO'#GXO(^Q(nO'#DuO%rQ.jO'#D}O%rQ.jO'#E`O%rQ.jO'#EcO%rQ.jO'#EeO(cQ)OO'#EjO)TQ)OO'#ElO%rQ.jO'#EnO)bQ)OO'#EqO%rQ.jO'#EsO)|Q)OO'#EuO*XQ)OO'#ExO*aQ)OO'#FOO*uQ)OO'#FbOOQ&Z'#GW'#GWOOQ&Y'#Fe'#FeO+PQ(nO'#FeQ`Q+tOOO%rQ.jO'#FQO+[Q(nO'#FUO+aQ)OO'#FZO%rQ.jO'#F^O%rQ.jO'#F`OOQ&Z'#Fm'#FmO+iQ+uO'#GaO+vQ(oO'#GaQOQ#SOOP,XO#SO'#GVPOOO)CAz)CAzOOQ#U'#Cm'#CmOOQ#U,59W,59WOOQ#i'#Cp'#CpO%rQ.jO'#CsO,xQ.wO'#CuO/dQ.^O,59YO%rQ.jO'#CzOOQ#S'#DP'#DPO/uQ(nO'#DUO/zQ)OO'#DZOOQ#i'#GZ'#GZO0SQ(nO'#DOOOQ#U'#D^'#D^OOQ#U,59w,59wO&mQ#dO,59wO0XQ)OO,59yO'vQ#dO,5:QO'{Q#dO,5:TO(cQ)OO,5:WO(cQ)OO,5:YO(cQ)OO,5:ZO(cQ)OO'#FlO0dQ(nO,59RO0oQ+tO'#DsO0vQ#TO'#DsOOQ&Z,59R,59ROOQ#U'#Da'#DaOOQ#S'#Dd'#DdOOQ#U,59y,59yO0{Q(nO,59yO1QQ(nO,59yOOQ#U'#Dh'#DhOOQ#U,5:Q,5:QOOQ#S'#Dj'#DjO1VQ9`O,5:TOOQ#U'#Dr'#DrOOQ#U,5:],5:]O2YQ.jO,5:aO2dQ.jO,5:iO3`Q.jO,5:zO3mQ.YO,5:}O4OQ.jO,5;POOQ#U'#Cj'#CjO4wQ(pO,5;UO5UQ(pO,5;WOOQ&Z,5;W,5;WO5]Q)OO,5;WO5bQ.jO,5;YOOQ#S'#ET'#ETO6TQ.jO'#E]O6kQ(nO'#GcO*aQ)OO'#EZO7PQ(nO'#E^OOQ#S'#Gd'#GdO0gQ(nO,5;]O4UQ.YO,5;_OOQ#d'#Ew'#EwO+PQ(nO,5;aO7UQ)OO,5;aOOQ#S'#Ez'#EzO7^Q(nO,5;dO7cQ(nO,5;jO7nQ(nO,5;|OOQ&Z'#Gf'#GfOOQ&Y,5<P,5<POOQ&Y-E9c-E9cO3mQ.YO,5;lO7|Q)OO,5;pO8RQ)OO'#GhO8ZQ)OO,5;uO3mQ.YO,5;xO4UQ.YO,5;zOOQ&Z-E9k-E9kO8`Q(oO,5<{OOQ&Z'#Gb'#GbO8qQ+uO'#FpO8`Q(oO,5<{POO#S'#Fd'#FdP9UO#SO,5<qPOOO,5<q,5<qO9dQ.YO,59_OOQ#i,59a,59aO%rQ.jO,59cO%rQ.jO,59hO%rQ.jO'#FiO9rQ#WO1G.tOOQ#k1G.t1G.tO9zQ.oO,59fO<pQ! lO,59pOOQ#d'#D['#D[OOQ#d'#Fh'#FhO<{Q)OO,59uOOQ#i,59u,59uO={Q.jO'#DQOOQ#i,59j,59jOOQ#U1G/c1G/cOOQ#U1G/e1G/eO0{Q(nO1G/eO1QQ(nO1G/eOOQ#U1G/l1G/lO>VQ9`O1G/oO>pQ(pO1G/rO?dQ(pO1G/tO@WQ(pO1G/uO@zQ(pO,5<WOOQ#S-E9j-E9jOOQ&Z1G.m1G.mOAXQ(nO,5:_OA^Q+uO,5:_OAeQ)OO'#DeOAlQ.jO'#DcOOQ#U1G/o1G/oO%rQ.jO1G/oOBkQ.jO'#DwOBuQ.kO1G/{OOQ#T1G/{1G/{OCrQ)OO'#EQO+PQ(nO1G0TO2pQ)OO1G0TODaQ+uO'#GfOOQ&Z1G0f1G0fO0SQ(nO1G0fOOQ&Z1G0i1G0iOOQ&Z1G0k1G0kO0SQ(nO1G0kOFyQ)OO1G0kOOQ&Z1G0p1G0pOOQ&Z1G0r1G0rOGRQ)OO1G0rOGWQ(nO1G0rOG]Q)OO1G0tOOQ&Z1G0t1G0tOGkQ.jO'#FsOG{Q#dO1G0tOHQQ!N^O'#CuOH]Q!NUO'#ETOHkQ!NUO,5:pOHsQ(nO,5:wOOQ#S'#Ge'#GeOHnQ!NUO,5:sO*aQ)OO,5:rOH{Q)OO'#FrOI`Q(nO,5<}OIqQ(nO,5:uO(cQ)OO,5:xOOQ&Z1G0w1G0wOOQ&Z1G0y1G0yOOQ&Z1G0{1G0{O+PQ(nO1G0{OJYQ)OO'#E{OOQ&Z1G1O1G1OOOQ&Z1G1U1G1UOOQ&Z1G1h1G1hOJeQ+uO1G1WO%rQ.jO1G1[OL}Q)OO'#FxOMYQ)OO,5=SO%rQ.jO1G1aOOQ&Z1G1d1G1dOOQ&Z1G1f1G1fOMbQ(oO1G2gOMsQ+uO,5<[OOQ#T,5<[,5<[OOQ#T-E9n-E9nPOO#S-E9b-E9bPOOO1G2]1G2]OOQ#i1G.y1G.yONWQ.oO1G.}OOQ#i1G/S1G/SO!!|Q.^O,5<TOOQ#W-E9g-E9gOOQ#k7+$`7+$`OOQ#i1G/[1G/[O!#_Q(nO1G/[OOQ#d-E9f-E9fOOQ#i1G/a1G/aO!#dQ.jO'#FfO!$qQ.jO'#G]O!&]Q.jO'#GZO!&dQ(nO,59lOOQ#U7+%P7+%POOQ#U7+%Z7+%ZO%rQ.jO7+%ZOOQ&Z1G/y1G/yO!&iQ#TO1G/yO!&nQ(pO'#G_O!&xQ(nO,5:PO!&}Q.jO'#G^O!'XQ(nO,59}O!'^Q.YO7+%ZO!'lQ.YO'#GZO!'}Q(nO,5:cOOQ#T,5:c,5:cO!(VQ.kO'#FoO%rQ.jO'#FoO!)yQ.kO7+%gOOQ#T7+%g7+%gO!*mQ#dO,5:lOOQ&Z7+%o7+%oO+PQ(nO7+%oO7nQ(nO7+&QO+PQ(nO7+&VOOQ#d'#Eh'#EhO!*rQ)OO7+&VO!+QQ(nO7+&^O*aQ)OO7+&^OOQ#d-E9q-E9qOOQ&Z7+&`7+&`O!+VQ.jO'#GgOOQ#d,5<_,5<_OF|Q(nO7+&`O%rQ.jO1G0[O!+qQ.jO1G0_OOQ#S1G0c1G0cOOQ#S1G0^1G0^O!+xQ(nO,5<^OOQ#S-E9p-E9pO!,^Q(pO1G0dOOQ&Z7+&g7+&gO,gQ(vO'#CuOOQ#S'#E}'#E}O!,eQ(nO'#E|OOQ#S'#E|'#E|O!,sQ(nO'#FuO!-OQ)OO,5;gOOQ&Z,5;g,5;gO!-ZQ+uO7+&rO!/sQ)OO7+&rO!0OQ.jO7+&vOOQ#d,5<d,5<dOOQ#d-E9v-E9vO3mQ.YO7+&{OOQ#T1G1v1G1vOOQ#i7+$v7+$vOOQ#d-E9d-E9dO!0aQ.jO'#FgO!0nQ(nO,5<wO!0nQ(nO,5<wO%rQ.jO,5<wOOQ#i1G/W1G/WO!0vQ.YO<<HuOOQ&Z7+%e7+%eO!1UQ)OO'#FkO!1`Q(nO,5<yOOQ#U1G/k1G/kO!1hQ.jO'#FjO!1rQ(nO,5<xOOQ#U1G/i1G/iOOQ#U<<Hu<<HuO1_Q.jO,5<YO!1zQ(nO'#FnOOQ#S-E9l-E9lOOQ#T1G/}1G/}O!2PQ.kO,5<ZOOQ#e-E9m-E9mOOQ#T<<IR<<IROOQ#S'#ES'#ESO!3sQ(nO1G0WOOQ&Z<<IZ<<IZOOQ&Z<<Il<<IlOOQ&Z<<Iq<<IqO0SQ(nO<<IqO*aQ)OO<<IxO!3{Q(nO<<IxO!4TQ.jO'#FtO!4hQ)OO,5=ROG]Q)OO<<IzO!4yQ.jO7+%vOOQ#S'#EV'#EVO!5QQ!NUO7+%yOOQ#S7+&O7+&OOOQ#S,5;h,5;hOJ]Q)OO'#FvO!,sQ(nO,5<aOOQ#d,5<a,5<aOOQ#d-E9s-E9sOOQ&Z1G1R1G1ROOQ&Z-E9u-E9uO!/sQ)OO<<J^O%rQ.jO,5<cOOQ&Z<<J^<<J^O%rQ.jO<<JbOOQ&Z<<Jg<<JgO!5YQ.jO,5<RO!5gQ.jO,5<ROOQ#S-E9e-E9eO!5nQ(nO1G2cO!5vQ.jO1G2cOOQ#UAN>aAN>aO!6QQ(pO,5<VOOQ#S-E9i-E9iO!6[Q.jO,5<UOOQ#S-E9h-E9hO!6fQ.YO1G1tO!6oQ(nO1G1tO!*mQ#dO'#FqO!6zQ(nO7+%rOOQ#d7+%r7+%rO+PQ(nOAN?]O!7SQ(nOAN?dO0gQ(nOAN?dO!7[Q.jO,5<`OOQ#d-E9r-E9rOG]Q)OOAN?fOOQ&ZAN?fAN?fOOQ#S<<Ib<<IbOOQ#S<<Ie<<IeO!7vQ.jO<<IeOOQ#S,5<b,5<bOOQ#S-E9t-E9tOOQ#d1G1{1G1{P!8_Q)OO'#FwOOQ&ZAN?xAN?xO3mQ.YO1G1}O3mQ.YOAN?|OOQ#S1G1m1G1mO%rQ.jO1G1mO!8dQ(nO7+'}OOQ#S7+'`7+'`OOQ#S,5<],5<]OOQ#S-E9o-E9oOOQ#d<<I^<<I^OOQ&ZG24wG24wO0gQ(nOG25OOOQ&ZG25OG25OOOQ&ZG25QG25QO!8lQ(nOAN?POOQ&Z7+'i7+'iOOQ&ZG25hG25hO!8qQ.jO7+'XOOQ&ZLD*jLD*jOOQ#SG24kG24k\",\n  stateData: \"!9R~O$wOSVOSUOS$uQQ~OS`OTVOWcOXbO_UOc`OqWOuYO|[O!SYO!ZZO!rmO!saO#TbO#WcO#YdO#_eO#afO#cgO#fhO#hiO#jjO#mkO#slO#urO#ysO$OtO$RuO$TvO$rSO$|RO%S]O~O$m%TP~P`O$u{O~Oq^Xu^Xu!jXw^X|^X!S^X!Z^X!a^X!d^X!h^X$p^X$t^X~Oq${Xu${Xw${X|${X!S${X!Z${X!a${X!d${X!h${X$p${X$t${X~O$r}O!o${X$v${Xf${Xe${X~P$jOS!XOTVO_!XOc!XOf!QOh!XOj!XOo!TOy!VO|!WO$q!UO$r!PO%O!RO~O$r!ZO~Oq!]Ou!^O|!`O!S!^O!Z!_O!a!aO!d!cO!h!fO$p!bO$t!gO~Ow!dO~P&rO!U!mO$q!jO$r!iO~O$r!nO~O$r!pO~O$r!rO~Ou!tO~P$jOu!tO~OTVO_UOqWOuYO|[O!SYO!ZZO$r!yO$|RO%S]O~Of!}O!h!fO$t!gO~P(cOTVOc#UOf#QO#O#SO#R#TO$s#PO!h%VP$t%VP~Oj#YOy!VO$r#XO~Oj#[O$r#[O~OTVOc#UOf#QO#O#SO#R#TO$s#PO~O!o%VP$v%VP~P)bO!o#`O$t#`O$v#`O~Oc#dO~Oc#eO$P%[P~O$m%TX!p%TX$o%TX~P`O!o#kO$t#kO$m%TX!p%TX$o%TX~OU#nOV#nO$t#pO$w#nO~OR#rO$tiX!hiXeiXwiX~OPiXQiXliXmiXqiXTiXciXfiX!oiX!uiX#OiX#RiX$siX$viX#UiX#ZiX#]iX#diXSiX_iXhiXjiXoiXyiX|iX!liX!miX!niX$qiX$riX%OiX$miXviX{iX#{iX#|iX!piX$oiX~P,gOP#wOQ#uOl#sOm#sOq#tO~Of#yO~O{#}O$r#zO~Of$OO~O!U$TO$q!jO$r!iO~Ow!dO!h!fO$t!gO~O!p%TP~P`O$n$_O~Of$`O~Of$aO~O{$bO!_$cO~OS!XOTVO_!XOc!XOf$dOh!XOj!XOo!TOy!VO|!WO$q!UO$r!PO%O!RO~O!h!fO$t!gO~P1_Ol#sOm#sOq#tO!u$gO!o%VP$t%VP$v%VP~P*aOl#sOm#sOq#tO!o#`O$v#`O~O!h!fO#U$lO$t$jO~P2}Ol#sOm#sOq#tO!h!fO$t!gO~O#Z$pO#]$oO$t#`O~P2}Oq!]Ou!^O|!`O!S!^O!Z!_O!a!aO!d!cO$p!bO~O!o#`O$t#`O$v#`O~P4]Of$sO~P&rO#]$tO~O#Z$xO#d$wO$t#`O~P2}OS$}Oh$}Oj$}Oy!VO$q!UO%O$yO~OTVOc#UOf#QO#O#SO#R#TO$s$zO~P5oOm%POw%QO!h%VX$t%VX!o%VX$v%VX~Of%TO~Oj%XOy!VO~O!h%YO~Om%PO!h!fO$t!gO~O!h!fO!o#`O$t$jO$v#`O~O#z%_O~Ow%`O$P%[X~O$P%bO~O!o#kO$t#kO$m%Ta!p%Ta$o%Ta~O!o$dX$m$dX$t$dX!p$dX$o$dX~P`OU#nOV#nO$t%jO$w#nO~Oe%kOl#sOm#sOq#tO~OP%pOQ#uO~Ol#sOm#sOq#tOPnaQnaTnacnafna!ona!una#Ona#Rna$sna$tna$vna!hna#Una#Zna#]na#dnaenaSna_nahnajnaonawnayna|na!lna!mna!nna$qna$rna%Ona$mnavna{na#{na#|na!pna$ona~Oe%qOj%rOz%rO~O{%tO$r#zO~OS!XOTVO_!XOf!QOh!XOj!XOo!TOy!VO|!WO$q!UO$r!PO%O!RO~Oc%wOe%PP~P=TO{%zO!_%{O~Oq!]Ou!^O|!`O!S!^O!Z!_O~Ow!`i!a!`i!d!`i!h!`i$p!`i$t!`i!o!`i$v!`if!`ie!`i~P>_Ow!bi!a!bi!d!bi!h!bi$p!bi$t!bi!o!bi$v!bif!bie!bi~P>_Ow!ci!a!ci!d!ci!h!ci$p!ci$t!ci!o!ci$v!cif!cie!ci~P>_Ow$`a!h$`a$t$`a~P4]O!p%|O~O$o%TP~P`Oe%RP~P(cOe%QP~P%rOS!XOTVO_!XOc!XOf!QOh!XOo!TOy!VO|!WO$q!UO$r!PO%O!RO~Oe&VOj&TO~PAsOl#sOm#sOq#tOw&XO!l&ZO!m&ZO!n&ZO!o!ii$t!ii$v!ii$m!ii!p!ii$o!ii~P%rOf&[OT!tXc!tX!o!tX#O!tX#R!tX$s!tX$t!tX$v!tX~O$n$_OS%YXT%YXW%YXX%YX_%YXc%YXq%YXu%YX|%YX!S%YX!Z%YX!r%YX!s%YX#T%YX#W%YX#Y%YX#_%YX#a%YX#c%YX#f%YX#h%YX#j%YX#m%YX#s%YX#u%YX#y%YX$O%YX$R%YX$T%YX$m%YX$r%YX$|%YX%S%YX!p%YX!o%YX$t%YX$o%YX~O$r!PO$|&aO~O#]&cO~Ou&dO~O!o#`O#d$wO$t#`O$v#`O~O!o%ZP#d%ZP$t%ZP$v%ZP~P%rO$r!PO~OR#rO!|iXeiX~Oe!wXm!wXu!yX!|!yX~Ou&jO!|&kO~Oe&lOm%PO~Ow$fX!h$fX$t$fX!o$fX$v$fX~P*aOw%QO!h%Va$t%Va!o%Va$v%Va~Om%POw!}a!h!}a$t!}a!o!}a$v!}ae!}a~O!p&xO$r&sO%O&rO~O#v&zOS#tiT#tiW#tiX#ti_#tic#tiq#tiu#ti|#ti!S#ti!Z#ti!r#ti!s#ti#T#ti#W#ti#Y#ti#_#ti#a#ti#c#ti#f#ti#h#ti#j#ti#m#ti#s#ti#u#ti#y#ti$O#ti$R#ti$T#ti$m#ti$r#ti$|#ti%S#ti!p#ti!o#ti$t#ti$o#ti~Oc&|Ow$lX$P$lX~Ow%`O$P%[a~O!o#kO$t#kO$m%Ti!p%Ti$o%Ti~O!o$da$m$da$t$da!p$da$o$da~P`Oq#tOPkiQkilkimkiTkickifki!oki!uki#Oki#Rki$ski$tki$vki!hki#Uki#Zki#]ki#dkiekiSki_kihkijkiokiwkiyki|ki!lki!mki!nki$qki$rki%Oki$mkivki{ki#{ki#|ki!pki$oki~Ol#sOm#sOq#tOP$]aQ$]a~Oe'QO~Ol#sOm#sOq#tOS$YXT$YX_$YXc$YXe$YXf$YXh$YXj$YXo$YXv$YXw$YXy$YX|$YX$q$YX$r$YX%O$YX~Ov'UOw'SOe%PX~P%rOS$}XT$}X_$}Xc$}Xe$}Xf$}Xh$}Xj$}Xl$}Xm$}Xo$}Xq$}Xv$}Xw$}Xy$}X|$}X$q$}X$r$}X%O$}X~Ou'VO~P!%OOe'WO~O$o'YO~Ow'ZOe%RX~P4]Oe']O~Ow'^Oe%QX~P%rOe'`O~Ol#sOm#sOq#tO{'aO~Ou'bOe$}Xl$}Xm$}Xq$}X~Oe'eOj'cO~Ol#sOm#sOq#tOS$cXT$cX_$cXc$cXf$cXh$cXj$cXo$cXw$cXy$cX|$cX!l$cX!m$cX!n$cX!o$cX$q$cX$r$cX$t$cX$v$cX%O$cX$m$cX!p$cX$o$cX~Ow&XO!l'hO!m'hO!n'hO!o!iq$t!iq$v!iq$m!iq!p!iq$o!iq~P%rO$r'iO~O!o#`O#]'nO$t#`O$v#`O~Ou'oO~Ol#sOm#sOq#tOw'qO!o%ZX#d%ZX$t%ZX$v%ZX~O$s'uO~P5oOm%POw$fa!h$fa$t$fa!o$fa$v$fa~Oe'wO~P4]O%O&rOw#pX!h#pX$t#pX~Ow'yO!h!fO$t!gO~O!p'}O$r&sO%O&rO~O#v(POS#tqT#tqW#tqX#tq_#tqc#tqq#tqu#tq|#tq!S#tq!Z#tq!r#tq!s#tq#T#tq#W#tq#Y#tq#_#tq#a#tq#c#tq#f#tq#h#tq#j#tq#m#tq#s#tq#u#tq#y#tq$O#tq$R#tq$T#tq$m#tq$r#tq$|#tq%S#tq!p#tq!o#tq$t#tq$o#tq~O!h!fO#w(QO$t!gO~Ol#sOm#sOq#tO#{(SO#|(SO~Oc(VOe$ZXw$ZX~P=TOw'SOe%Pa~Ol#sOm#sOq#tO{(ZO~Oe$_Xw$_X~P(cOw'ZOe%Ra~Oe$^Xw$^X~P%rOw'^Oe%Qa~Ou'bO~Ol#sOm#sOq#tOS$caT$ca_$cac$caf$cah$caj$cao$caw$cay$ca|$ca!l$ca!m$ca!n$ca!o$ca$q$ca$r$ca$t$ca$v$ca%O$ca$m$ca!p$ca$o$ca~Oe(dOq(bO~Oe(gOm%PO~Ow$hX!o$hX#d$hX$t$hX$v$hX~P%rOw'qO!o%Za#d%Za$t%Za$v%Za~Oe(lO~P%rOe(mO!|(nO~Ov(vOe$Zaw$Za~P%rOu(wO~P!%OOw'SOe%Pi~Ow'SOe%Pi~P%rOe$_aw$_a~P4]Oe$^aw$^a~P%rOl#sOm#sOq#tOw(yOe$bij$bi~Oe(|Oq(bO~Oe)OOm%PO~Ol#sOm#sOq#tOw$ha!o$ha#d$ha$t$ha$v$ha~OS$}Oh$}Oj$}Oy!VO$q!UO$s'uO%O&rO~O#w(QO~Ow'SOe%Pq~Oe)WO~Oe$Zqw$Zq~P%rO%Oql!dl~\",\n  goto: \"=Y%]PPPPPPPPPPP%^%h%h%{P%h&`&cP(UPP)ZP*YP)ZPP)ZP)ZP+f,j-lPPP-xPPPP)Z/S%h/W%hP/^P/d/j/p%hP/v%h/|P%hP%h%hP%h0S0VP1k1}2XPPPPP%^PP2_P2b'w'w2h'w'wP'wP'w'wP%^PP%^P%^PP2qP%^P%^P%^PP%^P%^P%^P2w%^P2z2}3Q3X%^P%^PPP%^PPPP%^PP%^P%^P%^P3^3d3j4Y4h4n4t4z5Q5W5d5j5p5z6Q6W6b6h6n6t6zPPPPPPPPPPPP7Q7T7aP8WP:_:b:eP:h:q:w;T;p;y=S=VanOPqx!f#l$_%fs^OPefqx!a!b!c!d!f#l$_$`%T%f'ZsTOPefqx!a!b!c!d!f#l$_$`%T%f'ZR!OUb^ef!a!b!c!d$`%T'Z`_OPqx!f#l$_%f!x!XVabcdgiruv!Q!T!t#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j'S'V'^'b'q't(Q(S(U(Y(^(w)Ug#Uhlm!u#Q#S$i%P%Q&d'o!x!XVabcdgiruv!Q!T!t#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j'S'V'^'b'q't(Q(S(U(Y(^(w)UQ&b$pR&i$x!y!XVabcdgiruv!Q!T!t#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j'S'V'^'b'q't(Q(S(U(Y(^(w)U!x!XVabcdgiruv!Q!T!t#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j'S'V'^'b'q't(Q(S(U(Y(^(w)UU$}#Q&k(nU&u%Y&w'yR'x&t!x!XVabcdgiruv!Q!T!t#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j'S'V'^'b'q't(Q(S(U(Y(^(w)UV$}#Q&k(n#P!YVabcdgiruv!Q!T!t#Q#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j&k'S'V'^'b'q't(Q(S(U(Y(^(n(w)UQ$P!YQ&_$lQ&`$oR(e'n!x!XVabcdgiruv!Q!T!t#s#t#u$O$a$c$d$e$w%_%b%v%{&Q&X&Y&j'S'V'^'b'q't(Q(S(U(Y(^(w)UQ#YjU$}#Q&k(nR%X#ZT#{!W#|Q![WR$Q!]Q!kYR$R!^Q$R!mR%y$TQ!lYR$S!^Q$R!lR%y$SQ!oZR$U!_Q!q[R$V!`R!s]Q!hXQ!|fQ$]!eQ$f!tQ$k!vQ$m!wQ$r!{Q%U#VQ%[#^Q%]#_Q%^#cQ%c#gQ'l&_Q'{&vQ(R&zQ(T'OQ(q'zQ(s(PQ)P(gQ)S(tQ)T(uR)V)OSpOqUyP!f$_Q#jxQ%g#lR'P%fa`OPqx!f#l$_%fQ$f!tR(a'bR$i!uQ'j&[R(z(bQ${#QQ'v&kR)R(nQ&b$pR's&iR#ZjR#]kR%Z#]S&v%Y&wR(o'yV&t%Y&w'yQ#o{R%i#oQqOR#bqQ%v$OQ&Q$a^'R%v&Q't(U(Y(^)UQ't&jQ(U'SQ(Y'VQ(^'^R)U(wQ'T%vU(W'T(X(xQ(X'UR(x(YQ#|!WR%s#|Q#v!SR%o#vQ'_&QR(_'_Q'[&OR(]'[Q!eXR$[!eUxP!f$_S#ix%fR%f#lQ&U$dR'd&UQ&Y$eR'g&YQ#myQ%e#jT%h#m%eQ(c'jR({(cQ%R#RR&o%RQ$u#OS&e$u(jR(j'sQ'r&gR(i'rQ&w%YR'|&wQ'z&vR(p'zQ&y%^R(O&yQ%a#eR&}%aR|QSoOq]wPx!f#l$_%f`XOPqx!f#l$_%fQ!zeQ!{fQ$W!aQ$X!bQ$Y!cQ$Z!dQ&O$`Q&p%TR(['ZQ!SVQ!uaQ!vbQ!wcQ!xdQ#OgQ#WiQ#crQ#guQ#hvS#q!Q$dQ#x!TQ$e!tQ%l#sQ%m#tQ%n#ul%u$O$a%v&Q&j'S'V'^'t(U(Y(^(w)UQ&S$cS&W$e&YQ&g$wQ&{%_Q'O%bQ'X%{Q'f&XQ(`'bQ(h'qQ(t(QR(u(SR%x$OR&R$aR&P$`QzPQ$^!fR%}$_X#ly#j#m%eQ#VhQ#_mQ$h!uR&^$iW#Rhm!u$iQ#^lQ$|#QQ%S#SQ&m%PQ&n%QQ'p&dR(f'oQ%O#QQ'v&kR)R(nQ#apQ$k!vQ$n!xQ$q!zQ$v#OQ%V#WQ%W#YQ%]#_Q%d#hQ&]$hQ&f$uQ&q%XQ'k&^Q'l&_S'm&`&bQ(k'sQ(}(eR)Q(jR&h$wR#ft\",\n  nodeNames: \"⚠ InterpolationEnd InterpolationContinue Unit VariableName InterpolationStart LineComment Comment IndentedMixin IndentedInclude StyleSheet RuleSet UniversalSelector TagSelector TagName NestingSelector SuffixedSelector Suffix Interpolation SassVariableName ValueName ) ( ParenthesizedValue ColorLiteral NumberLiteral StringLiteral BinaryExpression BinOp LogicOp UnaryExpression LogicOp NamespacedValue . CallExpression Callee ArgList : ... , CallLiteral CallTag ParenthesizedContent ] [ LineNames LineName ClassSelector ClassName PseudoClassSelector :: PseudoClassName PseudoClassName ArgList PseudoClassName ArgList IdSelector # IdName AttributeSelector AttributeName MatchOp ChildSelector ChildOp DescendantSelector SiblingSelector SiblingOp PlaceholderSelector ClassName Block { Declaration PropertyName Map Important Global Default ; } ImportStatement AtKeyword import Layer layer LayerName KeywordQuery FeatureQuery FeatureName BinaryQuery ComparisonQuery CompareOp UnaryQuery LogicOp ParenthesizedQuery SelectorQuery selector IncludeStatement include Keyword MixinStatement mixin UseStatement use Keyword Star Keyword ExtendStatement extend RootStatement at-root ForwardStatement forward Keyword MediaStatement media CharsetStatement charset NamespaceStatement namespace NamespaceName KeyframesStatement keyframes KeyframeName KeyframeList KeyframeSelector KeyframeRangeName SupportsStatement supports IfStatement ControlKeyword ControlKeyword Keyword ForStatement ControlKeyword Keyword Keyword Keyword EachStatement ControlKeyword Keyword WhileStatement ControlKeyword OutputStatement ControlKeyword AtRule Styles\",\n  maxTerm: 196,\n  context: trackIndent,\n  nodeProps: [\n    [\"openedBy\", 1,\"InterpolationStart\",5,\"InterpolationEnd\",21,\"(\",43,\"[\",78,\"{\"],\n    [\"isolate\", -3,6,7,26,\"\"],\n    [\"closedBy\", 22,\")\",44,\"]\",70,\"}\"]\n  ],\n  propSources: [cssHighlighting],\n  skippedNodes: [0,6,7,146],\n  repeatNodeCount: 21,\n  tokenData: \"!$Q~RyOq#rqr$jrs0jst2^tu8{uv;hvw;{wx<^xy={yz>^z{>c{|>||}Co}!ODQ!O!PDo!P!QFY!Q![Fk![!]Gf!]!^Hb!^!_Hs!_!`Is!`!aJ^!a!b#r!b!cKa!c!}#r!}#OMn#O#P#r#P#QNP#Q#RNb#R#T#r#T#UNw#U#c#r#c#d!!Y#d#o#r#o#p!!o#p#qNb#q#r!#Q#r#s!#c#s;'S#r;'S;=`!#z<%lO#rW#uSOy$Rz;'S$R;'S;=`$d<%lO$RW$WSzWOy$Rz;'S$R;'S;=`$d<%lO$RW$gP;=`<%l$RY$m[Oy$Rz!_$R!_!`%c!`#W$R#W#X%v#X#Z$R#Z#[)Z#[#]$R#]#^,V#^;'S$R;'S;=`$d<%lO$RY%jSzWlQOy$Rz;'S$R;'S;=`$d<%lO$RY%{UzWOy$Rz#X$R#X#Y&_#Y;'S$R;'S;=`$d<%lO$RY&dUzWOy$Rz#Y$R#Y#Z&v#Z;'S$R;'S;=`$d<%lO$RY&{UzWOy$Rz#T$R#T#U'_#U;'S$R;'S;=`$d<%lO$RY'dUzWOy$Rz#i$R#i#j'v#j;'S$R;'S;=`$d<%lO$RY'{UzWOy$Rz#`$R#`#a(_#a;'S$R;'S;=`$d<%lO$RY(dUzWOy$Rz#h$R#h#i(v#i;'S$R;'S;=`$d<%lO$RY(}S!nQzWOy$Rz;'S$R;'S;=`$d<%lO$RY)`UzWOy$Rz#`$R#`#a)r#a;'S$R;'S;=`$d<%lO$RY)wUzWOy$Rz#c$R#c#d*Z#d;'S$R;'S;=`$d<%lO$RY*`UzWOy$Rz#U$R#U#V*r#V;'S$R;'S;=`$d<%lO$RY*wUzWOy$Rz#T$R#T#U+Z#U;'S$R;'S;=`$d<%lO$RY+`UzWOy$Rz#`$R#`#a+r#a;'S$R;'S;=`$d<%lO$RY+yS!mQzWOy$Rz;'S$R;'S;=`$d<%lO$RY,[UzWOy$Rz#a$R#a#b,n#b;'S$R;'S;=`$d<%lO$RY,sUzWOy$Rz#d$R#d#e-V#e;'S$R;'S;=`$d<%lO$RY-[UzWOy$Rz#c$R#c#d-n#d;'S$R;'S;=`$d<%lO$RY-sUzWOy$Rz#f$R#f#g.V#g;'S$R;'S;=`$d<%lO$RY.[UzWOy$Rz#h$R#h#i.n#i;'S$R;'S;=`$d<%lO$RY.sUzWOy$Rz#T$R#T#U/V#U;'S$R;'S;=`$d<%lO$RY/[UzWOy$Rz#b$R#b#c/n#c;'S$R;'S;=`$d<%lO$RY/sUzWOy$Rz#h$R#h#i0V#i;'S$R;'S;=`$d<%lO$RY0^S!lQzWOy$Rz;'S$R;'S;=`$d<%lO$R~0mWOY0jZr0jrs1Vs#O0j#O#P1[#P;'S0j;'S;=`2W<%lO0j~1[Oj~~1_RO;'S0j;'S;=`1h;=`O0j~1kXOY0jZr0jrs1Vs#O0j#O#P1[#P;'S0j;'S;=`2W;=`<%l0j<%lO0j~2ZP;=`<%l0jZ2cY!ZPOy$Rz!Q$R!Q![3R![!c$R!c!i3R!i#T$R#T#Z3R#Z;'S$R;'S;=`$d<%lO$RY3WYzWOy$Rz!Q$R!Q![3v![!c$R!c!i3v!i#T$R#T#Z3v#Z;'S$R;'S;=`$d<%lO$RY3{YzWOy$Rz!Q$R!Q![4k![!c$R!c!i4k!i#T$R#T#Z4k#Z;'S$R;'S;=`$d<%lO$RY4rYhQzWOy$Rz!Q$R!Q![5b![!c$R!c!i5b!i#T$R#T#Z5b#Z;'S$R;'S;=`$d<%lO$RY5iYhQzWOy$Rz!Q$R!Q![6X![!c$R!c!i6X!i#T$R#T#Z6X#Z;'S$R;'S;=`$d<%lO$RY6^YzWOy$Rz!Q$R!Q![6|![!c$R!c!i6|!i#T$R#T#Z6|#Z;'S$R;'S;=`$d<%lO$RY7TYhQzWOy$Rz!Q$R!Q![7s![!c$R!c!i7s!i#T$R#T#Z7s#Z;'S$R;'S;=`$d<%lO$RY7xYzWOy$Rz!Q$R!Q![8h![!c$R!c!i8h!i#T$R#T#Z8h#Z;'S$R;'S;=`$d<%lO$RY8oShQzWOy$Rz;'S$R;'S;=`$d<%lO$R_9O`Oy$Rz}$R}!O:Q!O!Q$R!Q![:Q![!_$R!_!`;T!`!c$R!c!}:Q!}#R$R#R#S:Q#S#T$R#T#o:Q#o;'S$R;'S;=`$d<%lO$RZ:X^zWcROy$Rz}$R}!O:Q!O!Q$R!Q![:Q![!c$R!c!}:Q!}#R$R#R#S:Q#S#T$R#T#o:Q#o;'S$R;'S;=`$d<%lO$R[;[S!_SzWOy$Rz;'S$R;'S;=`$d<%lO$RZ;oS%SPlQOy$Rz;'S$R;'S;=`$d<%lO$RZ<QS_ROy$Rz;'S$R;'S;=`$d<%lO$R~<aWOY<^Zw<^wx1Vx#O<^#O#P<y#P;'S<^;'S;=`=u<%lO<^~<|RO;'S<^;'S;=`=V;=`O<^~=YXOY<^Zw<^wx1Vx#O<^#O#P<y#P;'S<^;'S;=`=u;=`<%l<^<%lO<^~=xP;=`<%l<^Z>QSfROy$Rz;'S$R;'S;=`$d<%lO$R~>cOe~_>jU$|PlQOy$Rz!_$R!_!`;T!`;'S$R;'S;=`$d<%lO$RZ?TWlQ!dPOy$Rz!O$R!O!P?m!P!Q$R!Q![Br![;'S$R;'S;=`$d<%lO$RZ?rUzWOy$Rz!Q$R!Q![@U![;'S$R;'S;=`$d<%lO$RZ@]YzW%OROy$Rz!Q$R!Q![@U![!g$R!g!h@{!h#X$R#X#Y@{#Y;'S$R;'S;=`$d<%lO$RZAQYzWOy$Rz{$R{|Ap|}$R}!OAp!O!Q$R!Q![BX![;'S$R;'S;=`$d<%lO$RZAuUzWOy$Rz!Q$R!Q![BX![;'S$R;'S;=`$d<%lO$RZB`UzW%OROy$Rz!Q$R!Q![BX![;'S$R;'S;=`$d<%lO$RZBy[zW%OROy$Rz!O$R!O!P@U!P!Q$R!Q![Br![!g$R!g!h@{!h#X$R#X#Y@{#Y;'S$R;'S;=`$d<%lO$RZCtSwROy$Rz;'S$R;'S;=`$d<%lO$RZDVWlQOy$Rz!O$R!O!P?m!P!Q$R!Q![Br![;'S$R;'S;=`$d<%lO$RZDtWqROy$Rz!O$R!O!PE^!P!Q$R!Q![@U![;'S$R;'S;=`$d<%lO$RYEcUzWOy$Rz!O$R!O!PEu!P;'S$R;'S;=`$d<%lO$RYE|SvQzWOy$Rz;'S$R;'S;=`$d<%lO$RYF_SlQOy$Rz;'S$R;'S;=`$d<%lO$RZFp[%OROy$Rz!O$R!O!P@U!P!Q$R!Q![Br![!g$R!g!h@{!h#X$R#X#Y@{#Y;'S$R;'S;=`$d<%lO$RkGkUucOy$Rz![$R![!]G}!];'S$R;'S;=`$d<%lO$RXHUS!SPzWOy$Rz;'S$R;'S;=`$d<%lO$RZHgS!oROy$Rz;'S$R;'S;=`$d<%lO$RjHzU!|`lQOy$Rz!_$R!_!`I^!`;'S$R;'S;=`$d<%lO$RjIgS!|`zWlQOy$Rz;'S$R;'S;=`$d<%lO$RnIzU!|`!_SOy$Rz!_$R!_!`%c!`;'S$R;'S;=`$d<%lO$RkJgV!aP!|`lQOy$Rz!_$R!_!`I^!`!aJ|!a;'S$R;'S;=`$d<%lO$RXKTS!aPzWOy$Rz;'S$R;'S;=`$d<%lO$RXKdYOy$Rz}$R}!OLS!O!c$R!c!}Lq!}#T$R#T#oLq#o;'S$R;'S;=`$d<%lO$RXLXWzWOy$Rz!c$R!c!}Lq!}#T$R#T#oLq#o;'S$R;'S;=`$d<%lO$RXLx[!rPzWOy$Rz}$R}!OLq!O!Q$R!Q![Lq![!c$R!c!}Lq!}#T$R#T#oLq#o;'S$R;'S;=`$d<%lO$RZMsS|ROy$Rz;'S$R;'S;=`$d<%lO$R_NUS{VOy$Rz;'S$R;'S;=`$d<%lO$R[NeUOy$Rz!_$R!_!`;T!`;'S$R;'S;=`$d<%lO$RkNzUOy$Rz#b$R#b#c! ^#c;'S$R;'S;=`$d<%lO$Rk! cUzWOy$Rz#W$R#W#X! u#X;'S$R;'S;=`$d<%lO$Rk! |SmczWOy$Rz;'S$R;'S;=`$d<%lO$Rk!!]UOy$Rz#f$R#f#g! u#g;'S$R;'S;=`$d<%lO$RZ!!tS!hROy$Rz;'S$R;'S;=`$d<%lO$RZ!#VS!pROy$Rz;'S$R;'S;=`$d<%lO$R]!#hU!dPOy$Rz!_$R!_!`;T!`;'S$R;'S;=`$d<%lO$RW!#}P;=`<%l#r\",\n  tokenizers: [indentation, descendant, interpolationEnd, unitToken, identifiers, spaces, comments, indentedMixins, 0, 1, 2, 3, 4],\n  topRules: {\"StyleSheet\":[0,10],\"Styles\":[1,145]},\n  dialects: {indented: 0},\n  specialized: [{term: 172, get: (value) => spec_identifier[value] || -1},{term: 171, get: (value) => spec_callee[value] || -1},{term: 80, get: (value) => spec_AtKeyword[value] || -1},{term: 173, get: (value) => spec_queryIdentifier[value] || -1}],\n  tokenPrec: 3217\n});\n\nexport { parser };\n","import { parser } from '@lezer/sass';\nimport { LRLanguage, foldNodeProp, foldInside, indentNodeProp, continuedIndent, LanguageSupport } from '@codemirror/language';\nimport { defineCSSCompletionSource } from '@codemirror/lang-css';\n\n/**\nA language provider based on the [Lezer Sass\nparser](https://github.com/lezer-parser/sass), extended with\nhighlighting and indentation information.\n*/\nconst sassLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"sass\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/foldNodeProp.add({\n                Block: foldInside,\n                Comment(node, state) {\n                    return { from: node.from + 2, to: state.sliceDoc(node.to - 2, node.to) == \"*/\" ? node.to - 2 : node.to };\n                }\n            }),\n            /*@__PURE__*/indentNodeProp.add({\n                Declaration: /*@__PURE__*/continuedIndent()\n            })\n        ]\n    }),\n    languageData: {\n        commentTokens: { block: { open: \"/*\", close: \"*/\" }, line: \"//\" },\n        indentOnInput: /^\\s*\\}$/,\n        wordChars: \"$-\"\n    }\n});\nconst indentedSassLanguage = /*@__PURE__*/sassLanguage.configure({\n    dialect: \"indented\",\n    props: [\n        /*@__PURE__*/indentNodeProp.add({\n            \"Block RuleSet\": cx => cx.baseIndent + cx.unit\n        }),\n        /*@__PURE__*/foldNodeProp.add({\n            Block: node => ({ from: node.from, to: node.to })\n        })\n    ]\n});\n/**\nProperty, variable, $-variable, and value keyword completion\nsource.\n*/\nconst sassCompletionSource = /*@__PURE__*/defineCSSCompletionSource(node => node.name == \"VariableName\" || node.name == \"SassVariableName\");\n/**\nLanguage support for CSS.\n*/\nfunction sass(config) {\n    return new LanguageSupport((config === null || config === void 0 ? void 0 : config.indented) ? indentedSassLanguage : sassLanguage, sassLanguage.data.of({ autocomplete: sassCompletionSource }));\n}\n\nexport { sass, sassCompletionSource, sassLanguage };\n","import { LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\nconst jsonHighlighting = styleTags({\n  String: tags.string,\n  Number: tags.number,\n  \"True False\": tags.bool,\n  PropertyName: tags.propertyName,\n  Null: tags.null,\n  \", :\": tags.separator,\n  \"[ ]\": tags.squareBracket,\n  \"{ }\": tags.brace\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#ClOOQO'#Cr'#CrQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CtOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59W,59WO!iQPO,59WOVQPO,59QOqQPO'#CmO!nQPO,59`OOQO1G.k1G.kOVQPO'#CnO!vQPO,59aOOQO1G.r1G.rOOQO1G.l1G.lOOQO,59X,59XOOQO-E6k-E6kOOQO,59Y,59YOOQO-E6l-E6l\",\n  stateData: \"#O~OeOS~OQSORSOSSOTSOWQO_ROgPO~OVXOgUO~O^[O~PVO[^O~O]_OVhX~OVaO~O]bO^iX~O^dO~O]_OVha~O]bO^ia~O\",\n  goto: \"!kjPPPPPPkPPkqwPPPPk{!RPPP!XP!e!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R\",\n  nodeNames: \"⚠ JsonText True False Null Number String } { Object Property PropertyName : , ] [ Array\",\n  maxTerm: 25,\n  nodeProps: [\n    [\"isolate\", -2,6,11,\"\"],\n    [\"openedBy\", 7,\"{\",14,\"[\"],\n    [\"closedBy\", 8,\"}\",15,\"]\"]\n  ],\n  propSources: [jsonHighlighting],\n  skippedNodes: [0],\n  repeatNodeCount: 2,\n  tokenData: \"(|~RaXY!WYZ!W]^!Wpq!Wrs!]|}$u}!O$z!Q!R%T!R![&c![!]&t!}#O&y#P#Q'O#Y#Z'T#b#c'r#h#i(Z#o#p(r#q#r(w~!]Oe~~!`Wpq!]qr!]rs!xs#O!]#O#P!}#P;'S!];'S;=`$o<%lO!]~!}Og~~#QXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#m~#pR!Q![#y!c!i#y#T#Z#y~#|R!Q![$V!c!i$V#T#Z$V~$YR!Q![$c!c!i$c#T#Z$c~$fR!Q![!]!c!i!]#T#Z!]~$rP;=`<%l!]~$zO]~~$}Q!Q!R%T!R![&c~%YRT~!O!P%c!g!h%w#X#Y%w~%fP!Q![%i~%nRT~!Q![%i!g!h%w#X#Y%w~%zR{|&T}!O&T!Q![&Z~&WP!Q![&Z~&`PT~!Q![&Z~&hST~!O!P%c!Q![&c!g!h%w#X#Y%w~&yO[~~'OO_~~'TO^~~'WP#T#U'Z~'^P#`#a'a~'dP#g#h'g~'jP#X#Y'm~'rOR~~'uP#i#j'x~'{P#`#a(O~(RP#`#a(U~(ZOS~~(^P#f#g(a~(dP#i#j(g~(jP#X#Y(m~(rOQ~~(wOW~~(|OV~\",\n  tokenizers: [0],\n  topRules: {\"JsonText\":[0,1]},\n  tokenPrec: 0\n});\n\nexport { parser };\n","import { parser } from '@lezer/json';\nimport { LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\n\n/**\nCalls\n[`JSON.parse`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse)\non the document and, if that throws an error, reports it as a\nsingle diagnostic.\n*/\nconst jsonParseLinter = () => (view) => {\n    try {\n        JSON.parse(view.state.doc.toString());\n    }\n    catch (e) {\n        if (!(e instanceof SyntaxError))\n            throw e;\n        const pos = getErrorPosition(e, view.state.doc);\n        return [{\n                from: pos,\n                message: e.message,\n                severity: 'error',\n                to: pos\n            }];\n    }\n    return [];\n};\nfunction getErrorPosition(error, doc) {\n    let m;\n    if (m = error.message.match(/at position (\\d+)/))\n        return Math.min(+m[1], doc.length);\n    if (m = error.message.match(/at line (\\d+) column (\\d+)/))\n        return Math.min(doc.line(+m[1]).from + (+m[2]) - 1, doc.length);\n    return 0;\n}\n\n/**\nA language provider that provides JSON parsing.\n*/\nconst jsonLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"json\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                Object: /*@__PURE__*/continuedIndent({ except: /^\\s*\\}/ }),\n                Array: /*@__PURE__*/continuedIndent({ except: /^\\s*\\]/ })\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                \"Object Array\": foldInside\n            })\n        ]\n    }),\n    languageData: {\n        closeBrackets: { brackets: [\"[\", \"{\", '\"'] },\n        indentOnInput: /^\\s*[\\}\\]]$/\n    }\n});\n/**\nJSON language support.\n*/\nfunction json() {\n    return new LanguageSupport(jsonLanguage);\n}\n\nexport { json, jsonLanguage, jsonParseLinter };\n","import { LRLanguage, LanguageSupport, LanguageDescription } from '@codemirror/language';\nimport { parseMixed } from '@lezer/common';\nimport { ExternalTokenizer, LRParser, ContextTracker } from '@lezer/lr';\nimport { Tag, tags, styleTags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst PieDiagram = 1,\n  MindmapDiagram = 2,\n  empty = 5;\n\nconst skipCodePoints = [-1, 9, 10, 13, 32, 9];\nconst diagramMap = {\n    mindmap: MindmapDiagram,\n    pie: PieDiagram,\n};\nconst diagrams = Object.keys(diagramMap);\nconst longestTextLength = Math.max(...diagrams.map((el) => el.length));\nconst diagramText = new ExternalTokenizer((input) => {\n    if (skipCodePoints.includes(input.next))\n        return;\n    let tokens = '';\n    for (let i = 0; i < longestTextLength; i++) {\n        const codePoint = input.peek(i);\n        if (skipCodePoints.includes(codePoint))\n            break;\n        tokens += String.fromCodePoint(codePoint);\n    }\n    while (input.next !== -1) {\n        input.advance();\n    }\n    if (diagrams.includes(tokens))\n        input.acceptToken(diagramMap[tokens]);\n    else\n        input.acceptToken(empty);\n    return;\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst parser$2 = LRParser.deserialize({\n  version: 14,\n  states: \"[OQOPOOQOOOOO\",\n  stateData: \"]~OPPOQPOTPO~O\",\n  goto: \"QPP\",\n  nodeNames: \"⚠ PieDiagram MindmapDiagram MermaidDiagram\",\n  maxTerm: 5,\n  skippedNodes: [0],\n  repeatNodeCount: 0,\n  tokenData: \"RORO\",\n  tokenizers: [diagramText],\n  topRules: {\"MermaidDiagram\":[0,3]},\n  tokenPrec: 0\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst indent = 30,\n  LineText1 = 1,\n  LineText2 = 2,\n  LineText3 = 3,\n  LineText4 = 4,\n  LineText5 = 5,\n  newline$2 = 31,\n  newlineEmpty = 32;\n\nconst LineTextTokens = [LineText1, LineText2, LineText3, LineText4, LineText5];\nconst newline$1 = 10, carriageReturn = 13, space = 32, tab = 9, hash = 35, colon = 58, parenL = 40, parenR = 41, bracketL = 91, bracketR = 93, braceL = 123, braceR = 125;\nconst newlines = new ExternalTokenizer((input, _stack) => {\n    if (input.next < 0)\n        return;\n    else {\n        input.advance();\n        let spaces = 0;\n        while (input.next == space || input.next == tab) {\n            input.advance();\n            spaces++;\n        }\n        let empty = input.next == newline$1 ||\n            input.next == carriageReturn ||\n            input.next == hash;\n        input.acceptToken(empty ? newlineEmpty : newline$2, -spaces);\n    }\n}, { contextual: true, fallback: true });\nconst lineTextType = new ExternalTokenizer((input, stack) => {\n    let chars = 0;\n    while (input.next > -1 && input.next !== newline$1) {\n        if (input.next === colon)\n            return;\n        if (input.next === parenL ||\n            input.next === bracketL ||\n            input.next === braceL) {\n            if (chars > 0) {\n                input.acceptToken(stack.context.lineType);\n                return;\n            }\n            else\n                return;\n        }\n        if ((input.next === parenR ||\n            input.next === bracketR ||\n            input.next === braceR) &&\n            chars > 0) {\n            input.acceptToken(stack.context.lineType);\n            return;\n        }\n        input.advance();\n        chars++;\n    }\n    input.acceptToken(stack.context.lineType);\n});\nconst indentation = new ExternalTokenizer((input, _stack) => {\n    let prev = input.peek(-1);\n    if (prev == newline$1 || prev == carriageReturn) {\n        while (true) {\n            if (input.next == space)\n                ;\n            else if (input.next == tab)\n                ;\n            else\n                break;\n            input.advance();\n        }\n        if (input.next != newline$1 &&\n            input.next != carriageReturn &&\n            input.next != hash) {\n            input.acceptToken(indent);\n        }\n    }\n});\nconst indentTracker = {\n    lineType: LineText1,\n};\nconst countIndent = (space) => {\n    let depth = 0;\n    for (let i = 0; i < space.length; i++)\n        depth += space.charCodeAt(i) == tab ? 8 - (depth % 8) : 1;\n    return depth;\n};\nconst getLineType = (depth) => {\n    return LineTextTokens[depth % 5];\n};\nconst trackIndent = new ContextTracker({\n    start: indentTracker,\n    shift(context, term, stack, input) {\n        if (term === indent) {\n            const depth = countIndent(input.read(input.pos, stack.pos));\n            context.lineType = getLineType(depth);\n        }\n        return context;\n    },\n});\n\nconst mermaidTags = {\n    diagramName: Tag.define(tags.typeName)\n};\nconst mindmapTags = {\n    diagramName: Tag.define(mermaidTags.diagramName),\n    lineText1: Tag.define(),\n    lineText2: Tag.define(),\n    lineText3: Tag.define(),\n    lineText4: Tag.define(),\n    lineText5: Tag.define(),\n};\nconst pieTags = {\n    diagramName: Tag.define(mermaidTags.diagramName),\n    lineComment: Tag.define(tags.lineComment),\n    number: Tag.define(tags.number),\n    showData: Tag.define(tags.keyword),\n    string: Tag.define(tags.string),\n    title: Tag.define(tags.keyword),\n    titleText: Tag.define(tags.string),\n};\n\nconst mindmapHighlighting = styleTags({\n    DiagramName: mindmapTags.diagramName,\n    LineText1: mindmapTags.lineText1,\n    LineText2: mindmapTags.lineText2,\n    LineText3: mindmapTags.lineText3,\n    LineText4: mindmapTags.lineText4,\n    LineText5: mindmapTags.lineText5,\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_word$1 = {__proto__:null,mindmap:72, icon:76};\nconst parser$1 = LRParser.deserialize({\n  version: 14,\n  states: \"&fOYQ[OOOOQW'#Cw'#CwQbQ[OOQgQ[OOOOQW'#Cc'#CcOOQW-E6u-E6uOlQ]O'#CdOOQW'#Cx'#CxQgQ[OOO!]Q^O,59OOOQW-E6v-E6vOOQW'#DR'#DRO!vQ[O'#CgO!{Q^O'#CjO!{Q^O'#CmO!{Q^O'#CnO!{Q^O'#CqO!{Q^O'#CrO!{Q^O'#CsO!{Q^O'#CvOOQW'#DU'#DUO#^Q[O1G.jOOQW1G.j1G.jO#hQ[O,59ROOQW'#Ch'#ChOOQW,59U,59UO#mQ[O,59XO#rQ[O,59YO#wQ[O,59]O#|Q[O,59^O$RQ[O,59_O$WQ[O,59bOOQW7+$U7+$UO!{Q^O1G.mOOQW1G.s1G.sOOQW1G.t1G.tOOQW1G.w1G.wOOQW1G.x1G.xOOQW1G.y1G.yOOQW1G.|1G.|O$]Q[O7+$XOOQW<<Gs<<Gs\",\n  stateData: \"$b~OrOSpOS~OoPOtSO~OoPO~OoUO~OnXOmWXoWX~OXbO]_O`^OcaOd`OicO~OPZOQZORZOSZOTZOY[Ow]O~PwOvhO~OPZOQZORZOSZOTZO~OmWioWi~PwO]qO~O_rO~OXsO~OctO~OduO~O]vO~OhwO~OXyO~O\",\n  goto: \"#[yPPPPPPPz}PP!R!UP!RPP!X!XPP!X!X!XPP!X!]!cPPPPPPPP!iPP#URROTVRWRfXRg[TdXeQQORTQQWRRYWQeXQi]Qj^Qk_Ql`QmaQnbQocRxqQfXRpe\",\n  nodeNames: \"⚠ LineText1 LineText2 LineText3 LineText4 LineText5 MindmapDiagram DiagramName Line ) :: IconLine Icon ( ClassLine ] [ Square RoundedSquare )) (( Circle Bang Cloud }} {{ Hexagon\",\n  maxTerm: 40,\n  context: trackIndent,\n  nodeProps: [\n    [\"openedBy\", 9,\"(\",15,\"[\",19,\"((\",24,\"{{\"],\n    [\"closedBy\", 13,\")\",16,\"]\",20,\"))\",25,\"}}\"]\n  ],\n  propSources: [mindmapHighlighting],\n  skippedNodes: [0],\n  repeatNodeCount: 2,\n  tokenData: \"$b~R]XYz[]zpqzxy!fyz!s![!]#Q!c!}#e!}#O#p#O#P!]#P#Q#u#T#o#e#o#p#z#q#r$V~!PSr~XYz[]zpqz#O#P!]~!`QYZz]^z~!kP]~xy!n~!sOd~~!xPX~yz!{~#QOc~~#TP![!]#W~#]PY~![!]#`~#eOw~~#jQs~!c!}#e#T#o#e~#uO`~~#zO_~~#}P#o#p$Q~$VOi~~$YP#q#r$]~$bOh~\",\n  tokenizers: [indentation, lineTextType, 0, newlines],\n  topRules: {\"MindmapDiagram\":[0,6]},\n  specialized: [{term: 35, get: value => spec_word$1[value] || -1}],\n  tokenPrec: 0\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst TitleText = 1;\n\nconst newline = 10;\nconst titleText = new ExternalTokenizer((input) => {\n    let { next } = input;\n    if (next === newline) {\n        input.acceptToken(TitleText);\n        return;\n    }\n    while (input.next !== newline && input.next !== -1) {\n        input.advance();\n    }\n    input.acceptToken(TitleText);\n});\n\nconst pieHighlighting = styleTags({\n    DiagramName: pieTags.diagramName,\n    LineComment: pieTags.lineComment,\n    Number: pieTags.number,\n    ShowData: pieTags.showData,\n    String: pieTags.string,\n    Title: pieTags.title,\n    TitleText: pieTags.titleText,\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_word = {__proto__:null,pie:36, showData:38, title:40};\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"#xO]QQOOObQQO'#ClOOQO'#Cf'#CfQ]QQOOOOQO'#C`'#C`OsQQO'#CcOOQO'#Cg'#CgOxQQO,59WO!TQQO,59WO!cQRO,59WOOQO'#Ca'#CaOOQP'#Cb'#CbOOQO-E6d-E6dO!qQQO,58}OOQO-E6e-E6eO!vQQO1G.rO#RQRO1G.rO!vQQO1G.rOOQO1G.i1G.iO#^QQO7+$^O#^QQO7+$^O#iQQO<<Gx\",\n  stateData: \"#t~O^OSQOS_OS~ObSO~OWTOcYOdZO[`Xb`X~Oe]O~OWTO[`ab`a~OWTOdZO[`ab`a~OPaOWTO[`ab`a~OXbO~OWTO[`ib`i~OPcO[`ib`i~OWTO[`qb`q~OWTO[`yb`y~O\",\n  goto: \"!iaPPPPbfioPPz!QPPPP!eTPORRWPQXPR`WcUPVWX_acdeQROR[RQVPW^V_deS_WXQdaRecTQOR\",\n  nodeNames: \"⚠ TitleText LineComment PieDiagram DiagramName ShowData Title Dataset String Number\",\n  maxTerm: 21,\n  propSources: [pieHighlighting],\n  skippedNodes: [0,2],\n  repeatNodeCount: 2,\n  tokenData: \"%[~RYXYqYZ!P]^qpqqrs!Uuv#r!Q![$a![!]$z!c!}%P#T#o%P~vR^~XYq]^qpqq~!UO_~~!XVOr!Urs!ns#O!U#O#P!s#P;'S!U;'S;=`#l<%lO!U~!sOW~~!vRO;'S!U;'S;=`#P;=`O!U~#SWOr!Urs!ns#O!U#O#P!s#P;'S!U;'S;=`#l;=`<%l!U<%lO!U~#oP;=`<%l!U~#uPuv#x~#}SQ~OY#xZ;'S#x;'S;=`$Z<%lO#x~$^P;=`<%l#x~$fQX~!O!P$l!Q![$a~$oP!Q![$r~$wPX~!Q![$r~%POe~~%UQa~!c!}%P#T#o%P\",\n  tokenizers: [titleText, 0],\n  topRules: {\"PieDiagram\":[0,3]},\n  specialized: [{term: 17, get: value => spec_word[value] || -1}],\n  tokenPrec: 0\n});\n\nconst mermaidLanguage = LRLanguage.define({\n    name: 'mermaid',\n    parser: parser$2.configure({\n        wrap: parseMixed((node) => {\n            if (node.name === 'MindmapDiagram')\n                return { parser: parser$1 };\n            if (node.name === 'PieDiagram')\n                return { parser: parser };\n            return null;\n        }),\n    }),\n});\nconst mindmapLanguage = LRLanguage.define({\n    name: 'mindmap',\n    parser: parser$1,\n});\nconst pieLanguage = LRLanguage.define({\n    name: 'pie',\n    parser: parser,\n});\n\nfunction mermaid() {\n    return new LanguageSupport(mermaidLanguage);\n}\nfunction mindmap() {\n    return new LanguageSupport(mindmapLanguage);\n}\nfunction pie() {\n    return new LanguageSupport(pieLanguage);\n}\n\nconst mermaidLanguageDescription = LanguageDescription.of({\n    name: 'mermaid',\n    load: async () => {\n        return mermaid();\n    },\n});\nconst mindmapLanguageDescription = LanguageDescription.of({\n    name: 'mindmap',\n    load: async () => {\n        return mindmap();\n    },\n});\nconst pieLanguageDescription = LanguageDescription.of({\n    name: 'pie',\n    load: async () => {\n        return pie();\n    },\n});\n\nexport { mermaid, mermaidLanguage, mermaidLanguageDescription, mermaidTags, mindmap, mindmapLanguage, mindmapLanguageDescription, mindmapTags, pie, pieLanguage, pieLanguageDescription, pieTags };\n","import { ExternalTokenizer, ContextTracker, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst printKeyword = 1,\n  indent = 194,\n  dedent = 195,\n  newline$1 = 196,\n  blankLineStart = 197,\n  newlineBracketed = 198,\n  eof = 199,\n  stringContent = 200,\n  Escape = 2,\n  replacementStart = 3,\n  stringEnd = 201,\n  ParenL = 24,\n  ParenthesizedExpression = 25,\n  TupleExpression = 49,\n  ComprehensionExpression = 50,\n  BracketL = 55,\n  ArrayExpression = 56,\n  ArrayComprehensionExpression = 57,\n  BraceL = 59,\n  DictionaryExpression = 60,\n  DictionaryComprehensionExpression = 61,\n  SetExpression = 62,\n  SetComprehensionExpression = 63,\n  ArgList = 65,\n  subscript = 238,\n  String$1 = 71,\n  stringStart = 241,\n  stringStartD = 242,\n  stringStartL = 243,\n  stringStartLD = 244,\n  stringStartR = 245,\n  stringStartRD = 246,\n  stringStartRL = 247,\n  stringStartRLD = 248,\n  FormatString = 72,\n  stringStartF = 249,\n  stringStartFD = 250,\n  stringStartFL = 251,\n  stringStartFLD = 252,\n  stringStartFR = 253,\n  stringStartFRD = 254,\n  stringStartFRL = 255,\n  stringStartFRLD = 256,\n  FormatReplacement = 73,\n  nestedFormatReplacement = 77,\n  importList = 263,\n  TypeParamList = 112,\n  ParamList = 130,\n  SequencePattern = 151,\n  MappingPattern = 152,\n  PatternArgList = 155;\n\nconst newline = 10, carriageReturn = 13, space = 32, tab = 9, hash = 35, parenOpen = 40, dot = 46,\n      braceOpen = 123, braceClose = 125, singleQuote = 39, doubleQuote = 34, backslash = 92,\n      letter_o = 111, letter_x = 120, letter_N = 78, letter_u = 117, letter_U = 85;\n\nconst bracketed = new Set([\n  ParenthesizedExpression, TupleExpression, ComprehensionExpression, importList, ArgList, ParamList,\n  ArrayExpression, ArrayComprehensionExpression, subscript,\n  SetExpression, SetComprehensionExpression, FormatString, FormatReplacement, nestedFormatReplacement,\n  DictionaryExpression, DictionaryComprehensionExpression,\n  SequencePattern, MappingPattern, PatternArgList, TypeParamList\n]);\n\nfunction isLineBreak(ch) {\n  return ch == newline || ch == carriageReturn\n}\n\nfunction isHex(ch) {\n  return ch >= 48 && ch <= 57 || ch >= 65 && ch <= 70 || ch >= 97 && ch <= 102\n}\n\nconst newlines = new ExternalTokenizer((input, stack) => {\n  let prev;\n  if (input.next < 0) {\n    input.acceptToken(eof);\n  } else if (stack.context.flags & cx_Bracketed) {\n    if (isLineBreak(input.next)) input.acceptToken(newlineBracketed, 1);\n  } else if (((prev = input.peek(-1)) < 0 || isLineBreak(prev)) &&\n             stack.canShift(blankLineStart)) {\n    let spaces = 0;\n    while (input.next == space || input.next == tab) { input.advance(); spaces++; }\n    if (input.next == newline || input.next == carriageReturn || input.next == hash)\n      input.acceptToken(blankLineStart, -spaces);\n  } else if (isLineBreak(input.next)) {\n    input.acceptToken(newline$1, 1);\n  }\n}, {contextual: true});\n\nconst indentation = new ExternalTokenizer((input, stack) => {\n  let context = stack.context;\n  if (context.flags) return\n  let prev = input.peek(-1);\n  if (prev == newline || prev == carriageReturn) {\n    let depth = 0, chars = 0;\n    for (;;) {\n      if (input.next == space) depth++;\n      else if (input.next == tab) depth += 8 - (depth % 8);\n      else break\n      input.advance();\n      chars++;\n    }\n    if (depth != context.indent &&\n        input.next != newline && input.next != carriageReturn && input.next != hash) {\n      if (depth < context.indent) input.acceptToken(dedent, -chars);\n      else input.acceptToken(indent);\n    }\n  }\n});\n\n// Flags used in Context objects\nconst cx_Bracketed = 1, cx_String = 2, cx_DoubleQuote = 4, cx_Long = 8, cx_Raw = 16, cx_Format = 32;\n\nfunction Context(parent, indent, flags) {\n  this.parent = parent;\n  this.indent = indent;\n  this.flags = flags;\n  this.hash = (parent ? parent.hash + parent.hash << 8 : 0) + indent + (indent << 4) + flags + (flags << 6);\n}\n\nconst topIndent = new Context(null, 0, 0);\n\nfunction countIndent(space) {\n  let depth = 0;\n  for (let i = 0; i < space.length; i++)\n    depth += space.charCodeAt(i) == tab ? 8 - (depth % 8) : 1;\n  return depth\n}\n\nconst stringFlags = new Map([\n  [stringStart, 0],\n  [stringStartD, cx_DoubleQuote],\n  [stringStartL, cx_Long],\n  [stringStartLD, cx_Long | cx_DoubleQuote],\n  [stringStartR, cx_Raw],\n  [stringStartRD, cx_Raw | cx_DoubleQuote],\n  [stringStartRL, cx_Raw | cx_Long],\n  [stringStartRLD, cx_Raw | cx_Long | cx_DoubleQuote],\n  [stringStartF, cx_Format],\n  [stringStartFD, cx_Format | cx_DoubleQuote],\n  [stringStartFL, cx_Format | cx_Long],\n  [stringStartFLD, cx_Format | cx_Long | cx_DoubleQuote],\n  [stringStartFR, cx_Format | cx_Raw],\n  [stringStartFRD, cx_Format | cx_Raw | cx_DoubleQuote],\n  [stringStartFRL, cx_Format | cx_Raw | cx_Long],\n  [stringStartFRLD, cx_Format | cx_Raw | cx_Long | cx_DoubleQuote]\n].map(([term, flags]) => [term, flags | cx_String]));\n\nconst trackIndent = new ContextTracker({\n  start: topIndent,\n  reduce(context, term, _, input) {\n    if ((context.flags & cx_Bracketed) && bracketed.has(term) ||\n        (term == String$1 || term == FormatString) && (context.flags & cx_String))\n      return context.parent\n    return context\n  },\n  shift(context, term, stack, input) {\n    if (term == indent)\n      return new Context(context, countIndent(input.read(input.pos, stack.pos)), 0)\n    if (term == dedent)\n      return context.parent\n    if (term == ParenL || term == BracketL || term == BraceL || term == replacementStart)\n      return new Context(context, 0, cx_Bracketed)\n    if (stringFlags.has(term))\n      return new Context(context, 0, stringFlags.get(term) | (context.flags & cx_Bracketed))\n    return context\n  },\n  hash(context) { return context.hash }\n});\n\nconst legacyPrint = new ExternalTokenizer(input => {\n  for (let i = 0; i < 5; i++) {\n    if (input.next != \"print\".charCodeAt(i)) return\n    input.advance();\n  }\n  if (/\\w/.test(String.fromCharCode(input.next))) return\n  for (let off = 0;; off++) {\n    let next = input.peek(off);\n    if (next == space || next == tab) continue\n    if (next != parenOpen && next != dot && next != newline && next != carriageReturn && next != hash)\n      input.acceptToken(printKeyword);\n    return\n  }\n});\n\nconst strings = new ExternalTokenizer((input, stack) => {\n  let {flags} = stack.context;\n  let quote = (flags & cx_DoubleQuote) ? doubleQuote : singleQuote;\n  let long = (flags & cx_Long) > 0;\n  let escapes = !(flags & cx_Raw);\n  let format = (flags & cx_Format) > 0;\n\n  let start = input.pos;\n  for (;;) {\n    if (input.next < 0) {\n      break\n    } else if (format && input.next == braceOpen) {\n      if (input.peek(1) == braceOpen) {\n        input.advance(2);\n      } else {\n        if (input.pos == start) {\n          input.acceptToken(replacementStart, 1);\n          return\n        }\n        break\n      }\n    } else if (escapes && input.next == backslash) {\n      if (input.pos == start) {\n        input.advance();\n        let escaped = input.next;\n        if (escaped >= 0) {\n          input.advance();\n          skipEscape(input, escaped);\n        }\n        input.acceptToken(Escape);\n        return\n      }\n      break\n    } else if (input.next == backslash && !escapes && input.peek(1) > -1) {\n      // Raw strings still ignore escaped quotes, weirdly.\n      input.advance(2);\n    } else if (input.next == quote && (!long || input.peek(1) == quote && input.peek(2) == quote)) {\n      if (input.pos == start) {\n        input.acceptToken(stringEnd, long ? 3 : 1);\n        return\n      }\n      break\n    } else if (input.next == newline) {\n      if (long) {\n        input.advance();\n      } else if (input.pos == start) {\n        input.acceptToken(stringEnd);\n        return\n      }\n      break\n    } else {\n      input.advance();\n    }\n  }\n  if (input.pos > start) input.acceptToken(stringContent);\n});\n\nfunction skipEscape(input, ch) {\n  if (ch == letter_o) {\n    for (let i = 0; i < 2 && input.next >= 48 && input.next <= 55; i++) input.advance();\n  } else if (ch == letter_x) {\n    for (let i = 0; i < 2 && isHex(input.next); i++) input.advance();\n  } else if (ch == letter_u) {\n    for (let i = 0; i < 4 && isHex(input.next); i++) input.advance();\n  } else if (ch == letter_U) {\n    for (let i = 0; i < 8 && isHex(input.next); i++) input.advance();\n  } else if (ch == letter_N) {\n    if (input.next == braceOpen) {\n      input.advance();\n      while (input.next >= 0 && input.next != braceClose && input.next != singleQuote &&\n             input.next != doubleQuote && input.next != newline) input.advance();\n      if (input.next == braceClose) input.advance();\n    }\n  }\n}\n\nconst pythonHighlighting = styleTags({\n  \"async \\\"*\\\" \\\"**\\\" FormatConversion FormatSpec\": tags.modifier,\n  \"for while if elif else try except finally return raise break continue with pass assert await yield match case\": tags.controlKeyword,\n  \"in not and or is del\": tags.operatorKeyword,\n  \"from def class global nonlocal lambda\": tags.definitionKeyword,\n  import: tags.moduleKeyword,\n  \"with as print\": tags.keyword,\n  Boolean: tags.bool,\n  None: tags.null,\n  VariableName: tags.variableName,\n  \"CallExpression/VariableName\": tags.function(tags.variableName),\n  \"FunctionDefinition/VariableName\": tags.function(tags.definition(tags.variableName)),\n  \"ClassDefinition/VariableName\": tags.definition(tags.className),\n  PropertyName: tags.propertyName,\n  \"CallExpression/MemberExpression/PropertyName\": tags.function(tags.propertyName),\n  Comment: tags.lineComment,\n  Number: tags.number,\n  String: tags.string,\n  FormatString: tags.special(tags.string),\n  Escape: tags.escape,\n  UpdateOp: tags.updateOperator,\n  \"ArithOp!\": tags.arithmeticOperator,\n  BitOp: tags.bitwiseOperator,\n  CompareOp: tags.compareOperator,\n  AssignOp: tags.definitionOperator,\n  Ellipsis: tags.punctuation,\n  At: tags.meta,\n  \"( )\": tags.paren,\n  \"[ ]\": tags.squareBracket,\n  \"{ }\": tags.brace,\n  \".\": tags.derefOperator,\n  \", ;\": tags.separator\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_identifier = {__proto__:null,await:44, or:54, and:56, in:60, not:62, is:64, if:70, else:72, lambda:76, yield:94, from:96, async:102, for:104, None:162, True:164, False:164, del:178, pass:182, break:186, continue:190, return:194, raise:202, import:206, as:208, global:212, nonlocal:214, assert:218, type:223, elif:236, while:240, try:246, except:248, finally:250, with:254, def:258, class:268, match:279, case:285};\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"##jO`QeOOP$}OSOOO&WQtO'#HUOOQS'#Co'#CoOOQS'#Cp'#CpO'vQdO'#CnO*UQtO'#HTOOQS'#HU'#HUOOQS'#DU'#DUOOQS'#HT'#HTO*rQdO'#D_O+VQdO'#DfO+gQdO'#DjO+zOWO'#DuO,VOWO'#DvO.[QtO'#GuOOQS'#Gu'#GuO'vQdO'#GtO0ZQtO'#GtOOQS'#Eb'#EbO0rQdO'#EcOOQS'#Gs'#GsO0|QdO'#GrOOQV'#Gr'#GrO1XQdO'#FYOOQS'#G^'#G^O1^QdO'#FXOOQV'#IS'#ISOOQV'#Gq'#GqOOQV'#Fq'#FqQ`QeOOO'vQdO'#CqO1lQdO'#C}O1sQdO'#DRO2RQdO'#HYO2cQtO'#EVO'vQdO'#EWOOQS'#EY'#EYOOQS'#E['#E[OOQS'#E^'#E^O2wQdO'#E`O3_QdO'#EdO3rQdO'#EfO3zQtO'#EfO1XQdO'#EiO0rQdO'#ElO1XQdO'#EnO0rQdO'#EtO0rQdO'#EwO4VQdO'#EyO4^QdO'#FOO4iQdO'#EzO0rQdO'#FOO1XQdO'#FQO1XQdO'#FVO4nQdO'#F[P4uOdO'#GpPOOO)CBd)CBdOOQS'#Ce'#CeOOQS'#Cf'#CfOOQS'#Cg'#CgOOQS'#Ch'#ChOOQS'#Ci'#CiOOQS'#Cj'#CjOOQS'#Cl'#ClO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO5TQdO'#DoOOQS,5:Y,5:YO5hQdO'#HdOOQS,5:],5:]O5uQ!fO,5:]O5zQtO,59YO1lQdO,59bO1lQdO,59bO1lQdO,59bO8jQdO,59bO8oQdO,59bO8vQdO,59jO8}QdO'#HTO:TQdO'#HSOOQS'#HS'#HSOOQS'#D['#D[O:lQdO,59aO'vQdO,59aO:zQdO,59aOOQS,59y,59yO;PQdO,5:RO'vQdO,5:ROOQS,5:Q,5:QO;_QdO,5:QO;dQdO,5:XO'vQdO,5:XO'vQdO,5:VOOQS,5:U,5:UO;uQdO,5:UO;zQdO,5:WOOOW'#Fy'#FyO<POWO,5:aOOQS,5:a,5:aO<[QdO'#HwOOOW'#Dw'#DwOOOW'#Fz'#FzO<lOWO,5:bOOQS,5:b,5:bOOQS'#F}'#F}O<zQtO,5:iO?lQtO,5=`O@VQ#xO,5=`O@vQtO,5=`OOQS,5:},5:}OA_QeO'#GWOBqQdO,5;^OOQV,5=^,5=^OB|QtO'#IPOCkQdO,5;tOOQS-E:[-E:[OOQV,5;s,5;sO4dQdO'#FQOOQV-E9o-E9oOCsQtO,59]OEzQtO,59iOFeQdO'#HVOFpQdO'#HVO1XQdO'#HVOF{QdO'#DTOGTQdO,59mOGYQdO'#HZO'vQdO'#HZO0rQdO,5=tOOQS,5=t,5=tO0rQdO'#EROOQS'#ES'#ESOGwQdO'#GPOHXQdO,58|OHXQdO,58|O*xQdO,5:oOHgQtO'#H]OOQS,5:r,5:rOOQS,5:z,5:zOHzQdO,5;OOI]QdO'#IOO1XQdO'#H}OOQS,5;Q,5;QOOQS'#GT'#GTOIqQtO,5;QOJPQdO,5;QOJUQdO'#IQOOQS,5;T,5;TOJdQdO'#H|OOQS,5;W,5;WOJuQdO,5;YO4iQdO,5;`O4iQdO,5;cOJ}QtO'#ITO'vQdO'#ITOKXQdO,5;eO4VQdO,5;eO0rQdO,5;jO1XQdO,5;lOK^QeO'#EuOLjQgO,5;fO!!kQdO'#IUO4iQdO,5;jO!!vQdO,5;lO!#OQdO,5;qO!#ZQtO,5;vO'vQdO,5;vPOOO,5=[,5=[P!#bOSO,5=[P!#jOdO,5=[O!&bQtO1G.jO!&iQtO1G.jO!)YQtO1G.jO!)dQtO1G.jO!+}QtO1G.jO!,bQtO1G.jO!,uQdO'#HcO!-TQtO'#GuO0rQdO'#HcO!-_QdO'#HbOOQS,5:Z,5:ZO!-gQdO,5:ZO!-lQdO'#HeO!-wQdO'#HeO!.[QdO,5>OOOQS'#Ds'#DsOOQS1G/w1G/wOOQS1G.|1G.|O!/[QtO1G.|O!/cQtO1G.|O1lQdO1G.|O!0OQdO1G/UOOQS'#DZ'#DZO0rQdO,59tOOQS1G.{1G.{O!0VQdO1G/eO!0gQdO1G/eO!0oQdO1G/fO'vQdO'#H[O!0tQdO'#H[O!0yQtO1G.{O!1ZQdO,59iO!2aQdO,5=zO!2qQdO,5=zO!2yQdO1G/mO!3OQtO1G/mOOQS1G/l1G/lO!3`QdO,5=uO!4VQdO,5=uO0rQdO1G/qO!4tQdO1G/sO!4yQtO1G/sO!5ZQtO1G/qOOQS1G/p1G/pOOQS1G/r1G/rOOOW-E9w-E9wOOQS1G/{1G/{O!5kQdO'#HxO0rQdO'#HxO!5|QdO,5>cOOOW-E9x-E9xOOQS1G/|1G/|OOQS-E9{-E9{O!6[Q#xO1G2zO!6{QtO1G2zO'vQdO,5<jOOQS,5<j,5<jOOQS-E9|-E9|OOQS,5<r,5<rOOQS-E:U-E:UOOQV1G0x1G0xO1XQdO'#GRO!7dQtO,5>kOOQS1G1`1G1`O!8RQdO1G1`OOQS'#DV'#DVO0rQdO,5=qOOQS,5=q,5=qO!8WQdO'#FrO!8cQdO,59oO!8kQdO1G/XO!8uQtO,5=uOOQS1G3`1G3`OOQS,5:m,5:mO!9fQdO'#GtOOQS,5<k,5<kOOQS-E9}-E9}O!9wQdO1G.hOOQS1G0Z1G0ZO!:VQdO,5=wO!:gQdO,5=wO0rQdO1G0jO0rQdO1G0jO!:xQdO,5>jO!;ZQdO,5>jO1XQdO,5>jO!;lQdO,5>iOOQS-E:R-E:RO!;qQdO1G0lO!;|QdO1G0lO!<RQdO,5>lO!<aQdO,5>lO!<oQdO,5>hO!=VQdO,5>hO!=hQdO'#EpO0rQdO1G0tO!=sQdO1G0tO!=xQgO1G0zO!AvQgO1G0}O!EqQdO,5>oO!E{QdO,5>oO!FTQtO,5>oO0rQdO1G1PO!F_QdO1G1PO4iQdO1G1UO!!vQdO1G1WOOQV,5;a,5;aO!FdQfO,5;aO!FiQgO1G1QO!JjQdO'#GZO4iQdO1G1QO4iQdO1G1QO!JzQdO,5>pO!KXQdO,5>pO1XQdO,5>pOOQV1G1U1G1UO!KaQdO'#FSO!KrQ!fO1G1WO!KzQdO1G1WOOQV1G1]1G1]O4iQdO1G1]O!LPQdO1G1]O!LXQdO'#F^OOQV1G1b1G1bO!#ZQtO1G1bPOOO1G2v1G2vP!L^OSO1G2vOOQS,5=},5=}OOQS'#Dp'#DpO0rQdO,5=}O!LfQdO,5=|O!LyQdO,5=|OOQS1G/u1G/uO!MRQdO,5>PO!McQdO,5>PO!MkQdO,5>PO!NOQdO,5>PO!N`QdO,5>POOQS1G3j1G3jOOQS7+$h7+$hO!8kQdO7+$pO#!RQdO1G.|O#!YQdO1G.|OOQS1G/`1G/`OOQS,5<`,5<`O'vQdO,5<`OOQS7+%P7+%PO#!aQdO7+%POOQS-E9r-E9rOOQS7+%Q7+%QO#!qQdO,5=vO'vQdO,5=vOOQS7+$g7+$gO#!vQdO7+%PO##OQdO7+%QO##TQdO1G3fOOQS7+%X7+%XO##eQdO1G3fO##mQdO7+%XOOQS,5<_,5<_O'vQdO,5<_O##rQdO1G3aOOQS-E9q-E9qO#$iQdO7+%]OOQS7+%_7+%_O#$wQdO1G3aO#%fQdO7+%_O#%kQdO1G3gO#%{QdO1G3gO#&TQdO7+%]O#&YQdO,5>dO#&sQdO,5>dO#&sQdO,5>dOOQS'#Dx'#DxO#'UO&jO'#DzO#'aO`O'#HyOOOW1G3}1G3}O#'fQdO1G3}O#'nQdO1G3}O#'yQ#xO7+(fO#(jQtO1G2UP#)TQdO'#GOOOQS,5<m,5<mOOQS-E:P-E:POOQS7+&z7+&zOOQS1G3]1G3]OOQS,5<^,5<^OOQS-E9p-E9pOOQS7+$s7+$sO#)bQdO,5=`O#){QdO,5=`O#*^QtO,5<aO#*qQdO1G3cOOQS-E9s-E9sOOQS7+&U7+&UO#+RQdO7+&UO#+aQdO,5<nO#+uQdO1G4UOOQS-E:Q-E:QO#,WQdO1G4UOOQS1G4T1G4TOOQS7+&W7+&WO#,iQdO7+&WOOQS,5<p,5<pO#,tQdO1G4WOOQS-E:S-E:SOOQS,5<l,5<lO#-SQdO1G4SOOQS-E:O-E:OO1XQdO'#EqO#-jQdO'#EqO#-uQdO'#IRO#-}QdO,5;[OOQS7+&`7+&`O0rQdO7+&`O#.SQgO7+&fO!JmQdO'#GXO4iQdO7+&fO4iQdO7+&iO#2QQtO,5<tO'vQdO,5<tO#2[QdO1G4ZOOQS-E:W-E:WO#2fQdO1G4ZO4iQdO7+&kO0rQdO7+&kOOQV7+&p7+&pO!KrQ!fO7+&rO!KzQdO7+&rO`QeO1G0{OOQV-E:X-E:XO4iQdO7+&lO4iQdO7+&lOOQV,5<u,5<uO#2nQdO,5<uO!JmQdO,5<uOOQV7+&l7+&lO#2yQgO7+&lO#6tQdO,5<vO#7PQdO1G4[OOQS-E:Y-E:YO#7^QdO1G4[O#7fQdO'#IWO#7tQdO'#IWO1XQdO'#IWOOQS'#IW'#IWO#8PQdO'#IVOOQS,5;n,5;nO#8XQdO,5;nO0rQdO'#FUOOQV7+&r7+&rO4iQdO7+&rOOQV7+&w7+&wO4iQdO7+&wO#8^QfO,5;xOOQV7+&|7+&|POOO7+(b7+(bO#8cQdO1G3iOOQS,5<c,5<cO#8qQdO1G3hOOQS-E9u-E9uO#9UQdO,5<dO#9aQdO,5<dO#9tQdO1G3kOOQS-E9v-E9vO#:UQdO1G3kO#:^QdO1G3kO#:nQdO1G3kO#:UQdO1G3kOOQS<<H[<<H[O#:yQtO1G1zOOQS<<Hk<<HkP#;WQdO'#FtO8vQdO1G3bO#;eQdO1G3bO#;jQdO<<HkOOQS<<Hl<<HlO#;zQdO7+)QOOQS<<Hs<<HsO#<[QtO1G1yP#<{QdO'#FsO#=YQdO7+)RO#=jQdO7+)RO#=rQdO<<HwO#=wQdO7+({OOQS<<Hy<<HyO#>nQdO,5<bO'vQdO,5<bOOQS-E9t-E9tOOQS<<Hw<<HwOOQS,5<g,5<gO0rQdO,5<gO#>sQdO1G4OOOQS-E9y-E9yO#?^QdO1G4OO<[QdO'#H{OOOO'#D{'#D{OOOO'#F|'#F|O#?oO&jO,5:fOOOW,5>e,5>eOOOW7+)i7+)iO#?zQdO7+)iO#@SQdO1G2zO#@mQdO1G2zP'vQdO'#FuO0rQdO<<IpO1XQdO1G2YP1XQdO'#GSO#AOQdO7+)pO#AaQdO7+)pOOQS<<Ir<<IrP1XQdO'#GUP0rQdO'#GQOOQS,5;],5;]O#ArQdO,5>mO#BQQdO,5>mOOQS1G0v1G0vOOQS<<Iz<<IzOOQV-E:V-E:VO4iQdO<<JQOOQV,5<s,5<sO4iQdO,5<sOOQV<<JQ<<JQOOQV<<JT<<JTO#BYQtO1G2`P#BdQdO'#GYO#BkQdO7+)uO#BuQgO<<JVO4iQdO<<JVOOQV<<J^<<J^O4iQdO<<J^O!KrQ!fO<<J^O#FpQgO7+&gOOQV<<JW<<JWO#FzQgO<<JWOOQV1G2a1G2aO1XQdO1G2aO#JuQdO1G2aO4iQdO<<JWO1XQdO1G2bP0rQdO'#G[O#KQQdO7+)vO#K_QdO7+)vOOQS'#FT'#FTO0rQdO,5>rO#KgQdO,5>rO#KrQdO,5>rO#K}QdO,5>qO#L`QdO,5>qOOQS1G1Y1G1YOOQS,5;p,5;pOOQV<<Jc<<JcO#LhQdO1G1dOOQS7+)T7+)TP#LmQdO'#FwO#L}QdO1G2OO#MbQdO1G2OO#MrQdO1G2OP#M}QdO'#FxO#N[QdO7+)VO#NlQdO7+)VO#NlQdO7+)VO#NtQdO7+)VO$ UQdO7+(|O8vQdO7+(|OOQSAN>VAN>VO$ oQdO<<LmOOQSAN>cAN>cO0rQdO1G1|O$!PQtO1G1|P$!ZQdO'#FvOOQS1G2R1G2RP$!hQdO'#F{O$!uQdO7+)jO$#`QdO,5>gOOOO-E9z-E9zOOOW<<MT<<MTO$#nQdO7+(fOOQSAN?[AN?[OOQS7+'t7+'tO$$XQdO<<M[OOQS,5<q,5<qO$$jQdO1G4XOOQS-E:T-E:TOOQVAN?lAN?lOOQV1G2_1G2_O4iQdOAN?qO$$xQgOAN?qOOQVAN?xAN?xO4iQdOAN?xOOQV<<JR<<JRO4iQdOAN?rO4iQdO7+'{OOQV7+'{7+'{O1XQdO7+'{OOQVAN?rAN?rOOQS7+'|7+'|O$(sQdO<<MbOOQS1G4^1G4^O0rQdO1G4^OOQS,5<w,5<wO$)QQdO1G4]OOQS-E:Z-E:ZOOQU'#G_'#G_O$)cQfO7+'OO$)nQdO'#F_O$*uQdO7+'jO$+VQdO7+'jOOQS7+'j7+'jO$+bQdO<<LqO$+rQdO<<LqO$+rQdO<<LqO$+zQdO'#H^OOQS<<Lh<<LhO$,UQdO<<LhOOQS7+'h7+'hOOQS'#D|'#D|OOOO1G4R1G4RO$,oQdO1G4RO$,wQdO1G4RP!=hQdO'#GVOOQVG25]G25]O4iQdOG25]OOQVG25dG25dOOQVG25^G25^OOQV<<Kg<<KgO4iQdO<<KgOOQS7+)x7+)xP$-SQdO'#G]OOQU-E:]-E:]OOQV<<Jj<<JjO$-vQtO'#FaOOQS'#Fc'#FcO$.WQdO'#FbO$.xQdO'#FbOOQS'#Fb'#FbO$.}QdO'#IYO$)nQdO'#FiO$)nQdO'#FiO$/fQdO'#FjO$)nQdO'#FkO$/mQdO'#IZOOQS'#IZ'#IZO$0[QdO,5;yOOQS<<KU<<KUO$0dQdO<<KUO$0tQdOANB]O$1UQdOANB]O$1^QdO'#H_OOQS'#H_'#H_O1sQdO'#DcO$1wQdO,5=xOOQSANBSANBSOOOO7+)m7+)mO$2`QdO7+)mOOQVLD*wLD*wOOQVANARANARO5uQ!fO'#GaO$2hQtO,5<SO$)nQdO'#FmOOQS,5<W,5<WOOQS'#Fd'#FdO$3YQdO,5;|O$3_QdO,5;|OOQS'#Fg'#FgO$)nQdO'#G`O$4PQdO,5<QO$4kQdO,5>tO$4{QdO,5>tO1XQdO,5<PO$5^QdO,5<TO$5cQdO,5<TO$)nQdO'#I[O$5hQdO'#I[O$5mQdO,5<UOOQS,5<V,5<VO0rQdO'#FpOOQU1G1e1G1eO4iQdO1G1eOOQSAN@pAN@pO$5rQdOG27wO$6SQdO,59}OOQS1G3d1G3dOOOO<<MX<<MXOOQS,5<{,5<{OOQS-E:_-E:_O$6XQtO'#FaO$6`QdO'#I]O$6nQdO'#I]O$6vQdO,5<XOOQS1G1h1G1hO$6{QdO1G1hO$7QQdO,5<zOOQS-E:^-E:^O$7lQdO,5=OO$8TQdO1G4`OOQS-E:b-E:bOOQS1G1k1G1kOOQS1G1o1G1oO$8eQdO,5>vO$)nQdO,5>vOOQS1G1p1G1pOOQS,5<[,5<[OOQU7+'P7+'PO$+zQdO1G/iO$)nQdO,5<YO$8sQdO,5>wO$8zQdO,5>wOOQS1G1s1G1sOOQS7+'S7+'SP$)nQdO'#GdO$9SQdO1G4bO$9^QdO1G4bO$9fQdO1G4bOOQS7+%T7+%TO$9tQdO1G1tO$:SQtO'#FaO$:ZQdO,5<}OOQS,5<},5<}O$:iQdO1G4cOOQS-E:a-E:aO$)nQdO,5<|O$:pQdO,5<|O$:uQdO7+)|OOQS-E:`-E:`O$;PQdO7+)|O$)nQdO,5<ZP$)nQdO'#GcO$;XQdO1G2hO$)nQdO1G2hP$;gQdO'#GbO$;nQdO<<MhO$;xQdO1G1uO$<WQdO7+(SO8vQdO'#C}O8vQdO,59bO8vQdO,59bO8vQdO,59bO$<fQtO,5=`O8vQdO1G.|O0rQdO1G/XO0rQdO7+$pP$<yQdO'#GOO'vQdO'#GtO$=WQdO,59bO$=]QdO,59bO$=dQdO,59mO$=iQdO1G/UO1sQdO'#DRO8vQdO,59j\",\n  stateData: \"$>S~O%cOS%^OSSOS%]PQ~OPdOVaOfoOhYOopOs!POvqO!PrO!Q{O!T!SO!U!RO!XZO!][O!h`O!r`O!s`O!t`O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#l!QO#o!TO#s!UO#u!VO#z!WO#}hO$P!XO%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~O%]!YO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%j![O%k!]O%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aO~Ok%xXl%xXm%xXn%xXo%xXp%xXs%xXz%xX{%xX!x%xX#g%xX%[%xX%_%xX%z%xXg%xX!T%xX!U%xX%{%xX!W%xX![%xX!Q%xX#[%xXt%xX!m%xX~P%SOfoOhYO!XZO!][O!h`O!r`O!s`O!t`O%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~Oz%wX{%wX#g%wX%[%wX%_%wX%z%wX~Ok!pOl!qOm!oOn!oOo!rOp!sOs!tO!x%wX~P)pOV!zOg!|Oo0cOv0qO!PrO~P'vOV#OOo0cOv0qO!W#PO~P'vOV#SOa#TOo0cOv0qO![#UO~P'vOQ#XO%`#XO%a#ZO~OQ#^OR#[O%`#^O%a#`O~OV%iX_%iXa%iXh%iXk%iXl%iXm%iXn%iXo%iXp%iXs%iXz%iX!X%iX!f%iX%j%iX%k%iX%l%iX%m%iX%n%iX%o%iX%p%iX%q%iX%r%iX%s%iXg%iX!T%iX!U%iX~O&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O{%iX!x%iX#g%iX%[%iX%_%iX%z%iX%{%iX!W%iX![%iX!Q%iX#[%iXt%iX!m%iX~P,eOz#dO{%hX!x%hX#g%hX%[%hX%_%hX%z%hX~Oo0cOv0qO~P'vO#g#gO%[#iO%_#iO~O%uWO~O!T#nO#u!VO#z!WO#}hO~OopO~P'vOV#sOa#tO%uWO{wP~OV#xOo0cOv0qO!Q#yO~P'vO{#{O!x$QO%z#|O#g!yX%[!yX%_!yX~OV#xOo0cOv0qO#g#SX%[#SX%_#SX~P'vOo0cOv0qO#g#WX%[#WX%_#WX~P'vOh$WO%uWO~O!f$YO!r$YO%uWO~OV$eO~P'vO!U$gO#s$hO#u$iO~O{$jO~OV$qO~P'vOS$sO%[$rO%_$rO%c$tO~OV$}Oa$}Og%POo0cOv0qO~P'vOo0cOv0qO{%SO~P'vO&Y%UO~Oa!bOh!iO!X!kO!f!mOVba_bakbalbambanbaobapbasbazba{ba!xba#gba%[ba%_ba%jba%kba%lba%mba%nba%oba%pba%qba%rba%sba%zbagba!Tba!Uba%{ba!Wba![ba!Qba#[batba!mba~On%ZO~Oo%ZO~P'vOo0cO~P'vOk0eOl0fOm0dOn0dOo0mOp0nOs0rOg%wX!T%wX!U%wX%{%wX!W%wX![%wX!Q%wX#[%wX!m%wX~P)pO%{%]Og%vXz%vX!T%vX!U%vX!W%vX{%vX~Og%_Oz%`O!T%dO!U%cO~Og%_O~Oz%gO!T%dO!U%cO!W&SX~O!W%kO~Oz%lO{%nO!T%dO!U%cO![%}X~O![%rO~O![%sO~OQ#XO%`#XO%a%uO~OV%wOo0cOv0qO!PrO~P'vOQ#^OR#[O%`#^O%a%zO~OV!qa_!qaa!qah!qak!qal!qam!qan!qao!qap!qas!qaz!qa{!qa!X!qa!f!qa!x!qa#g!qa%[!qa%_!qa%j!qa%k!qa%l!qa%m!qa%n!qa%o!qa%p!qa%q!qa%r!qa%s!qa%z!qag!qa!T!qa!U!qa%{!qa!W!qa![!qa!Q!qa#[!qat!qa!m!qa~P#yOz%|O{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P%SOV&OOopOvqO{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P'vOz%|O{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#g$zX%[$zX%_$zX~P'vO#g#gO%[&TO%_&TO~O!f&UOh&sX%[&sXz&sX#[&sX#g&sX%_&sX#Z&sXg&sX~Oh!iO%[&WO~Okealeameaneaoeapeaseazea{ea!xea#gea%[ea%_ea%zeagea!Tea!Uea%{ea!Wea![ea!Qea#[eatea!mea~P%SOsqazqa{qa#gqa%[qa%_qa%zqa~Ok!pOl!qOm!oOn!oOo!rOp!sO!xqa~PEcO%z&YOz%yX{%yX~O%uWOz%yX{%yX~Oz&]O{wX~O{&_O~Oz%lO#g%}X%[%}X%_%}Xg%}X{%}X![%}X!m%}X%z%}X~OV0lOo0cOv0qO!PrO~P'vO%z#|O#gUa%[Ua%_Ua~Oz&hO#g&PX%[&PX%_&PXn&PX~P%SOz&kO!Q&jO#g#Wa%[#Wa%_#Wa~Oz&lO#[&nO#g&rX%[&rX%_&rXg&rX~O!f$YO!r$YO#Z&qO%uWO~O#Z&qO~Oz&sO#g&tX%[&tX%_&tX~Oz&uO#g&pX%[&pX%_&pX{&pX~O!X&wO%z&xO~Oz&|On&wX~P%SOn'PO~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO%['UO~P'vOt'YO#p'WO#q'XOP#naV#naf#nah#nao#nas#nav#na!P#na!Q#na!T#na!U#na!X#na!]#na!h#na!r#na!s#na!t#na!{#na!}#na#P#na#R#na#T#na#X#na#Z#na#^#na#_#na#a#na#c#na#l#na#o#na#s#na#u#na#z#na#}#na$P#na%X#na%o#na%p#na%t#na%u#na&Z#na&[#na&]#na&^#na&_#na&`#na&a#na&b#na&c#na&d#na&e#na&f#na&g#na&h#na&i#na&j#na%Z#na%_#na~Oz'ZO#[']O{&xX~Oh'_O!X&wO~Oh!iO{$jO!X&wO~O{'eO~P%SO%['hO%_'hO~OS'iO%['hO%_'hO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%k!]O~P!#uO%kWi~P!#uOV!aO_!aOa!bOh!iO!X!kO!f!mO%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%m!_O%n!_O~P!&pO%mWi%nWi~P!&pOa!bOh!iO!X!kO!f!mOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%mWi%nWi%oWi%pWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~OV!aO_!aO%q!aO%r!aO%s!aO~P!)nOVWi_Wi%qWi%rWi%sWi~P!)nO!T%dO!U%cOg&VXz&VX~O%z'kO%{'kO~P,eOz'mOg&UX~Og'oO~Oz'pO{'rO!W&XX~Oo0cOv0qOz'pO{'sO!W&XX~P'vO!W'uO~Om!oOn!oOo!rOp!sOkjisjizji{ji!xji#gji%[ji%_ji%zji~Ol!qO~P!.aOlji~P!.aOk0eOl0fOm0dOn0dOo0mOp0nO~Ot'wO~P!/jOV'|Og'}Oo0cOv0qO~P'vOg'}Oz(OO~Og(QO~O!U(SO~Og(TOz(OO!T%dO!U%cO~P%SOk0eOl0fOm0dOn0dOo0mOp0nOgqa!Tqa!Uqa%{qa!Wqa![qa!Qqa#[qatqa!mqa~PEcOV'|Oo0cOv0qO!W&Sa~P'vOz(WO!W&Sa~O!W(XO~Oz(WO!T%dO!U%cO!W&Sa~P%SOV(]Oo0cOv0qO![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~P'vOz(^O![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~O![(aO~Oz(^O!T%dO!U%cO![%}a~P%SOz(dO!T%dO!U%cO![&Ta~P%SOz(gO{&lX![&lX!m&lX%z&lX~O{(kO![(mO!m(nO%z(jO~OV&OOopOvqO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~P'vOz(pO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~O!f&UOh&sa%[&saz&sa#[&sa#g&sa%_&sa#Z&sag&sa~O%[(uO~OV#sOa#tO%uWO~Oz&]O{wa~OopOvqO~P'vOz(^O#g%}a%[%}a%_%}ag%}a{%}a![%}a!m%}a%z%}a~P%SOz(zO#g%hX%[%hX%_%hX%z%hX~O%z#|O#gUi%[Ui%_Ui~O#g&Pa%[&Pa%_&Pan&Pa~P'vOz(}O#g&Pa%[&Pa%_&Pan&Pa~O%uWO#g&ra%[&ra%_&rag&ra~Oz)SO#g&ra%[&ra%_&rag&ra~Og)VO~OV)WOh$WO%uWO~O#Z)XO~O%uWO#g&ta%[&ta%_&ta~Oz)ZO#g&ta%[&ta%_&ta~Oo0cOv0qO#g&pa%[&pa%_&pa{&pa~P'vOz)^O#g&pa%[&pa%_&pa{&pa~OV)`Oa)`O%uWO~O%z)eO~Ot)hO#j)gOP#hiV#hif#hih#hio#his#hiv#hi!P#hi!Q#hi!T#hi!U#hi!X#hi!]#hi!h#hi!r#hi!s#hi!t#hi!{#hi!}#hi#P#hi#R#hi#T#hi#X#hi#Z#hi#^#hi#_#hi#a#hi#c#hi#l#hi#o#hi#s#hi#u#hi#z#hi#}#hi$P#hi%X#hi%o#hi%p#hi%t#hi%u#hi&Z#hi&[#hi&]#hi&^#hi&_#hi&`#hi&a#hi&b#hi&c#hi&d#hi&e#hi&f#hi&g#hi&h#hi&i#hi&j#hi%Z#hi%_#hi~Ot)iOP#kiV#kif#kih#kio#kis#kiv#ki!P#ki!Q#ki!T#ki!U#ki!X#ki!]#ki!h#ki!r#ki!s#ki!t#ki!{#ki!}#ki#P#ki#R#ki#T#ki#X#ki#Z#ki#^#ki#_#ki#a#ki#c#ki#l#ki#o#ki#s#ki#u#ki#z#ki#}#ki$P#ki%X#ki%o#ki%p#ki%t#ki%u#ki&Z#ki&[#ki&]#ki&^#ki&_#ki&`#ki&a#ki&b#ki&c#ki&d#ki&e#ki&f#ki&g#ki&h#ki&i#ki&j#ki%Z#ki%_#ki~OV)kOn&wa~P'vOz)lOn&wa~Oz)lOn&wa~P%SOn)pO~O%Y)tO~Ot)wO#p'WO#q)vOP#niV#nif#nih#nio#nis#niv#ni!P#ni!Q#ni!T#ni!U#ni!X#ni!]#ni!h#ni!r#ni!s#ni!t#ni!{#ni!}#ni#P#ni#R#ni#T#ni#X#ni#Z#ni#^#ni#_#ni#a#ni#c#ni#l#ni#o#ni#s#ni#u#ni#z#ni#}#ni$P#ni%X#ni%o#ni%p#ni%t#ni%u#ni&Z#ni&[#ni&]#ni&^#ni&_#ni&`#ni&a#ni&b#ni&c#ni&d#ni&e#ni&f#ni&g#ni&h#ni&i#ni&j#ni%Z#ni%_#ni~OV)zOo0cOv0qO{$jO~P'vOo0cOv0qO{&xa~P'vOz*OO{&xa~OV*SOa*TOg*WO%q*UO%uWO~O{$jO&{*YO~Oh'_O~Oh!iO{$jO~O%[*_O~O%[*aO%_*aO~OV$}Oa$}Oo0cOv0qOg&Ua~P'vOz*dOg&Ua~Oo0cOv0qO{*gO!W&Xa~P'vOz*hO!W&Xa~Oo0cOv0qOz*hO{*kO!W&Xa~P'vOo0cOv0qOz*hO!W&Xa~P'vOz*hO{*kO!W&Xa~Om0dOn0dOo0mOp0nOgjikjisjizji!Tji!Uji%{ji!Wji{ji![ji#gji%[ji%_ji!Qji#[jitji!mji%zji~Ol0fO~P!NkOlji~P!NkOV'|Og*pOo0cOv0qO~P'vOn*rO~Og*pOz*tO~Og*uO~OV'|Oo0cOv0qO!W&Si~P'vOz*vO!W&Si~O!W*wO~OV(]Oo0cOv0qO![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~P'vOz*zO!T%dO!U%cO![&Ti~Oz*}O![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~O![+OO~Oa+QOo0cOv0qO![&Ti~P'vOz*zO![&Ti~O![+SO~OV+UOo0cOv0qO{&la![&la!m&la%z&la~P'vOz+VO{&la![&la!m&la%z&la~O!]+YO&n+[O![!nX~O![+^O~O{(kO![+_O~O{(kO![+_O!m+`O~OV&OOopOvqO{%hq!x%hq#g%hq%[%hq%_%hq%z%hq~P'vOz$ri{$ri!x$ri#g$ri%[$ri%_$ri%z$ri~P%SOV&OOopOvqO~P'vOV&OOo0cOv0qO#g%ha%[%ha%_%ha%z%ha~P'vOz+aO#g%ha%[%ha%_%ha%z%ha~Oz$ia#g$ia%[$ia%_$ian$ia~P%SO#g&Pi%[&Pi%_&Pin&Pi~P'vOz+dO#g#Wq%[#Wq%_#Wq~O#[+eOz$va#g$va%[$va%_$vag$va~O%uWO#g&ri%[&ri%_&rig&ri~Oz+gO#g&ri%[&ri%_&rig&ri~OV+iOh$WO%uWO~O%uWO#g&ti%[&ti%_&ti~Oo0cOv0qO#g&pi%[&pi%_&pi{&pi~P'vO{#{Oz#eX!W#eX~Oz+mO!W&uX~O!W+oO~Ot+rO#j)gOP#hqV#hqf#hqh#hqo#hqs#hqv#hq!P#hq!Q#hq!T#hq!U#hq!X#hq!]#hq!h#hq!r#hq!s#hq!t#hq!{#hq!}#hq#P#hq#R#hq#T#hq#X#hq#Z#hq#^#hq#_#hq#a#hq#c#hq#l#hq#o#hq#s#hq#u#hq#z#hq#}#hq$P#hq%X#hq%o#hq%p#hq%t#hq%u#hq&Z#hq&[#hq&]#hq&^#hq&_#hq&`#hq&a#hq&b#hq&c#hq&d#hq&e#hq&f#hq&g#hq&h#hq&i#hq&j#hq%Z#hq%_#hq~On$|az$|a~P%SOV)kOn&wi~P'vOz+yOn&wi~Oz,TO{$jO#[,TO~O#q,VOP#nqV#nqf#nqh#nqo#nqs#nqv#nq!P#nq!Q#nq!T#nq!U#nq!X#nq!]#nq!h#nq!r#nq!s#nq!t#nq!{#nq!}#nq#P#nq#R#nq#T#nq#X#nq#Z#nq#^#nq#_#nq#a#nq#c#nq#l#nq#o#nq#s#nq#u#nq#z#nq#}#nq$P#nq%X#nq%o#nq%p#nq%t#nq%u#nq&Z#nq&[#nq&]#nq&^#nq&_#nq&`#nq&a#nq&b#nq&c#nq&d#nq&e#nq&f#nq&g#nq&h#nq&i#nq&j#nq%Z#nq%_#nq~O#[,WOz%Oa{%Oa~Oo0cOv0qO{&xi~P'vOz,YO{&xi~O{#{O%z,[Og&zXz&zX~O%uWOg&zXz&zX~Oz,`Og&yX~Og,bO~O%Y,eO~O!T%dO!U%cOg&Viz&Vi~OV$}Oa$}Oo0cOv0qOg&Ui~P'vO{,hOz$la!W$la~Oo0cOv0qO{,iOz$la!W$la~P'vOo0cOv0qO{*gO!W&Xi~P'vOz,lO!W&Xi~Oo0cOv0qOz,lO!W&Xi~P'vOz,lO{,oO!W&Xi~Og$hiz$hi!W$hi~P%SOV'|Oo0cOv0qO~P'vOn,qO~OV'|Og,rOo0cOv0qO~P'vOV'|Oo0cOv0qO!W&Sq~P'vOz$gi![$gi#g$gi%[$gi%_$gig$gi{$gi!m$gi%z$gi~P%SOV(]Oo0cOv0qO~P'vOa+QOo0cOv0qO![&Tq~P'vOz,sO![&Tq~O![,tO~OV(]Oo0cOv0qO![%}q#g%}q%[%}q%_%}qg%}q{%}q!m%}q%z%}q~P'vO{,uO~OV+UOo0cOv0qO{&li![&li!m&li%z&li~P'vOz,zO{&li![&li!m&li%z&li~O!]+YO&n+[O![!na~O{(kO![,}O~OV&OOo0cOv0qO#g%hi%[%hi%_%hi%z%hi~P'vOz-OO#g%hi%[%hi%_%hi%z%hi~O%uWO#g&rq%[&rq%_&rqg&rq~Oz-RO#g&rq%[&rq%_&rqg&rq~OV)`Oa)`O%uWO!W&ua~Oz-TO!W&ua~On$|iz$|i~P%SOV)kO~P'vOV)kOn&wq~P'vOt-XOP#myV#myf#myh#myo#mys#myv#my!P#my!Q#my!T#my!U#my!X#my!]#my!h#my!r#my!s#my!t#my!{#my!}#my#P#my#R#my#T#my#X#my#Z#my#^#my#_#my#a#my#c#my#l#my#o#my#s#my#u#my#z#my#}#my$P#my%X#my%o#my%p#my%t#my%u#my&Z#my&[#my&]#my&^#my&_#my&`#my&a#my&b#my&c#my&d#my&e#my&f#my&g#my&h#my&i#my&j#my%Z#my%_#my~O%Z-]O%_-]O~P`O#q-^OP#nyV#nyf#nyh#nyo#nys#nyv#ny!P#ny!Q#ny!T#ny!U#ny!X#ny!]#ny!h#ny!r#ny!s#ny!t#ny!{#ny!}#ny#P#ny#R#ny#T#ny#X#ny#Z#ny#^#ny#_#ny#a#ny#c#ny#l#ny#o#ny#s#ny#u#ny#z#ny#}#ny$P#ny%X#ny%o#ny%p#ny%t#ny%u#ny&Z#ny&[#ny&]#ny&^#ny&_#ny&`#ny&a#ny&b#ny&c#ny&d#ny&e#ny&f#ny&g#ny&h#ny&i#ny&j#ny%Z#ny%_#ny~Oz-aO{$jO#[-aO~Oo0cOv0qO{&xq~P'vOz-dO{&xq~O%z,[Og&zaz&za~O{#{Og&zaz&za~OV*SOa*TO%q*UO%uWOg&ya~Oz-hOg&ya~O$S-lO~OV$}Oa$}Oo0cOv0qO~P'vOo0cOv0qO{-mOz$li!W$li~P'vOo0cOv0qOz$li!W$li~P'vO{-mOz$li!W$li~Oo0cOv0qO{*gO~P'vOo0cOv0qO{*gO!W&Xq~P'vOz-pO!W&Xq~Oo0cOv0qOz-pO!W&Xq~P'vOs-sO!T%dO!U%cOg&Oq!W&Oq![&Oqz&Oq~P!/jOa+QOo0cOv0qO![&Ty~P'vOz$ji![$ji~P%SOa+QOo0cOv0qO~P'vOV+UOo0cOv0qO~P'vOV+UOo0cOv0qO{&lq![&lq!m&lq%z&lq~P'vO{(kO![-xO!m-yO%z-wO~OV&OOo0cOv0qO#g%hq%[%hq%_%hq%z%hq~P'vO%uWO#g&ry%[&ry%_&ryg&ry~OV)`Oa)`O%uWO!W&ui~Ot-}OP#m!RV#m!Rf#m!Rh#m!Ro#m!Rs#m!Rv#m!R!P#m!R!Q#m!R!T#m!R!U#m!R!X#m!R!]#m!R!h#m!R!r#m!R!s#m!R!t#m!R!{#m!R!}#m!R#P#m!R#R#m!R#T#m!R#X#m!R#Z#m!R#^#m!R#_#m!R#a#m!R#c#m!R#l#m!R#o#m!R#s#m!R#u#m!R#z#m!R#}#m!R$P#m!R%X#m!R%o#m!R%p#m!R%t#m!R%u#m!R&Z#m!R&[#m!R&]#m!R&^#m!R&_#m!R&`#m!R&a#m!R&b#m!R&c#m!R&d#m!R&e#m!R&f#m!R&g#m!R&h#m!R&i#m!R&j#m!R%Z#m!R%_#m!R~Oo0cOv0qO{&xy~P'vOV*SOa*TO%q*UO%uWOg&yi~O$S-lO%Z.VO%_.VO~OV.aOh._O!X.^O!].`O!h.YO!s.[O!t.[O%p.XO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O~Oo0cOv0qOz$lq!W$lq~P'vO{.fOz$lq!W$lq~Oo0cOv0qO{*gO!W&Xy~P'vOz.gO!W&Xy~Oo0cOv.kO~P'vOs-sO!T%dO!U%cOg&Oy!W&Oy![&Oyz&Oy~P!/jO{(kO![.nO~O{(kO![.nO!m.oO~OV*SOa*TO%q*UO%uWO~Oh.tO!f.rOz$TX#[$TX%j$TXg$TX~Os$TX{$TX!W$TX![$TX~P$-bO%o.vO%p.vOs$UXz$UX{$UX#[$UX%j$UX!W$UXg$UX![$UX~O!h.xO~Oz.|O#[/OO%j.yOs&|X{&|X!W&|Xg&|X~Oa/RO~P$)zOh.tOs&}Xz&}X{&}X#[&}X%j&}X!W&}Xg&}X![&}X~Os/VO{$jO~Oo0cOv0qOz$ly!W$ly~P'vOo0cOv0qO{*gO!W&X!R~P'vOz/ZO!W&X!R~Og&RXs&RX!T&RX!U&RX!W&RX![&RXz&RX~P!/jOs-sO!T%dO!U%cOg&Qa!W&Qa![&Qaz&Qa~O{(kO![/^O~O!f.rOh$[as$[az$[a{$[a#[$[a%j$[a!W$[ag$[a![$[a~O!h/eO~O%o.vO%p.vOs$Uaz$Ua{$Ua#[$Ua%j$Ua!W$Uag$Ua![$Ua~O%j.yOs$Yaz$Ya{$Ya#[$Ya!W$Yag$Ya![$Ya~Os&|a{&|a!W&|ag&|a~P$)nOz/jOs&|a{&|a!W&|ag&|a~O!W/mO~Og/mO~O{/oO~O![/pO~Oo0cOv0qO{*gO!W&X!Z~P'vO{/sO~O%z/tO~P$-bOz/uO#[/OO%j.yOg'PX~Oz/uOg'PX~Og/wO~O!h/xO~O#[/OOs%Saz%Sa{%Sa%j%Sa!W%Sag%Sa![%Sa~O#[/OO%j.yOs%Waz%Wa{%Wa!W%Wag%Wa~Os&|i{&|i!W&|ig&|i~P$)nOz/zO#[/OO%j.yO!['Oa~Og'Pa~P$)nOz0SOg'Pa~Oa0UO!['Oi~P$)zOz0WO!['Oi~Oz0WO#[/OO%j.yO!['Oi~O#[/OO%j.yOg$biz$bi~O%z0ZO~P$-bO#[/OO%j.yOg%Vaz%Va~Og'Pi~P$)nO{0^O~Oa0UO!['Oq~P$)zOz0`O!['Oq~O#[/OO%j.yOz%Ui![%Ui~Oa0UO~P$)zOa0UO!['Oy~P$)zO#[/OO%j.yOg$ciz$ci~O#[/OO%j.yOz%Uq![%Uq~Oz+aO#g%ha%[%ha%_%ha%z%ha~P%SOV&OOo0cOv0qO~P'vOn0hO~Oo0hO~P'vO{0iO~Ot0jO~P!/jO&]&Z&j&h&i&g&f&d&e&c&b&`&a&_&^&[%u~\",\n  goto: \"!=j'QPPPPPP'RP'Z*s+[+t,_,y-fP.SP'Z.r.r'ZPPP'Z2[PPPPPP2[5PPP5PP7b7k=sPP=v>h>kPP'Z'ZPP>zPP'Z'ZPP'Z'Z'Z'Z'Z?O?w'ZP?zP@QDXGuGyPG|HWH['ZPPPH_Hk'RP'R'RP'RP'RP'RP'RP'R'R'RP'RPP'RPP'RP'RPHqH}IVPI^IdPI^PI^I^PPPI^PKrPK{LVL]KrPI^LfPI^PLmLsPLwM]MzNeLwLwNkNxLwLwLwLw! ^! d! g! l! o! y!!P!!]!!o!!u!#P!#V!#s!#y!$P!$Z!$a!$g!$y!%T!%Z!%a!%k!%q!%w!%}!&T!&Z!&e!&k!&u!&{!'U!'[!'k!'s!'}!(UPPPPPPPPPPP!([!(_!(e!(n!(x!)TPPPPPPPPPPPP!-u!/Z!3^!6oPP!6w!7W!7a!8Y!8P!8c!8i!8l!8o!8r!8z!9jPPPPPPPPPPPPPPPPP!9m!9q!9wP!:]!:a!:m!:v!;S!;j!;m!;p!;v!;|!<S!<VP!<_!<h!=d!=g]eOn#g$j)t,P'}`OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'm'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0r{!cQ#c#p$R$d$p%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g}!dQ#c#p$R$d$p$u%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g!P!eQ#c#p$R$d$p$u$v%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g!R!fQ#c#p$R$d$p$u$v$w%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g!T!gQ#c#p$R$d$p$u$v$w$x%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g!V!hQ#c#p$R$d$p$u$v$w$x$y%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g!Z!hQ!n#c#p$R$d$p$u$v$w$x$y$z%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g'}TOTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'm'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0r&eVOYZ[dnprxy}!P!Q!U!i!k!o!p!q!s!t#[#d#g#y#{#}$Q$h$j$}%S%Z%^%`%g%l%n%w%|&Z&_&j&k&u&x'P'W'Z'l'm'p'r's'w(O(W(^(d(g(p(r(z)^)e)g)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+U+V+Y+a+d+k,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0n0r%oXOYZ[dnrxy}!P!Q!U!i!k#[#d#g#y#{#}$Q$h$j$}%S%^%`%g%l%n%w%|&Z&_&j&k&u&x'P'W'Z'l'm'p'r's'w(O(W(^(d(g(p(r(z)^)e)g)p)t)z*O*Y*d*g*h*k*q*t*v*y*z*}+U+V+Y+a+d+k,P,X,Y,],g,h,i,k,l,o,s,u,w,y,z-O-d-f-m-p.f.g/V/Z0i0j0kQ#vqQ/[.kR0o0q't`OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0rh#jhz{$W$Z&l&q)S)X+f+g-RW#rq&].k0qQ$]|Q$a!OQ$n!VQ$o!WW$|!i'm*d,gS&[#s#tQ'S$iQ(s&UQ)U&nU)Y&s)Z+jW)a&w+m-T-{Q*Q']W*R'_,`-h.TQ+l)`S,_*S*TQ-Q+eQ-_,TQ-c,WQ.R-al.W-l.^._.a.z.|/R/j/o/t/y0U0Z0^Q/S.`Q/a.tQ/l/OU0P/u0S0[X0V/z0W0_0`R&Z#r!_!wYZ!P!Q!k%S%`%g'p'r's(O(W)g*g*h*k*q*t*v,h,i,k,l,o-m-p.f.g/ZR%^!vQ!{YQ%x#[Q&d#}Q&g$QR,{+YT.j-s/s!Y!jQ!n#c#p$R$d$p$u$v$w$x$y$z%e%j%p%q&`'O'g(q(|)j*o*x+w,v0gQ&X#kQ'c$oR*^'dR'l$|Q%V!mR/_.r'|_OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'm'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0rS#a_#b!P.[-l.^._.`.a.t.z.|/R/j/o/t/u/y/z0S0U0W0Z0[0^0_0`'|_OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'm'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0rT#a_#bT#^^#_R(o%xa(l%x(n(o+`,{-y-z.oT+[(k+]R-z,{Q$PsQ+l)aQ,^*RR-e,_X#}s$O$P&fQ&y$aQ'a$nQ'd$oR)s'SQ)b&wV-S+m-T-{ZgOn$j)t,PXkOn)t,PQ$k!TQ&z$bQ&{$cQ'^$mQ'b$oQ)q'RQ)x'WQ){'XQ)|'YQ*Z'`S*]'c'dQ+s)gQ+u)hQ+v)iQ+z)oS+|)r*[Q,Q)vQ,R)wS,S)y)zQ,d*^Q-V+rQ-W+tQ-Y+{S-Z+},OQ-`,UQ-b,VQ-|-XQ.O-[Q.P-^Q.Q-_Q.p-}Q.q.RQ/W.dR/r/XWkOn)t,PR#mjQ'`$nS)r'S'aR,O)sQ,]*RR-f,^Q*['`Q+})rR-[,OZiOjn)t,PQ'f$pR*`'gT-j,e-ku.c-l.^._.a.t.z.|/R/j/o/t/u/y0S0U0Z0[0^t.c-l.^._.a.t.z.|/R/j/o/t/u/y0S0U0Z0[0^Q/S.`X0V/z0W0_0`!P.Z-l.^._.`.a.t.z.|/R/j/o/t/u/y/z0S0U0W0Z0[0^0_0`Q.w.YR/f.xg.z.].{/b/i/n/|0O0Q0]0a0bu.b-l.^._.a.t.z.|/R/j/o/t/u/y0S0U0Z0[0^X.u.W.b/a0PR/c.tV0R/u0S0[R/X.dQnOS#on,PR,P)tQ&^#uR(x&^S%m#R#wS(_%m(bT(b%p&`Q%a!yQ%h!}W(P%a%h(U(YQ(U%eR(Y%jQ&i$RR)O&iQ(e%qQ*{(`T+R(e*{Q'n%OR*e'nS'q%R%SY*i'q*j,m-q.hU*j'r's'tU,m*k*l*mS-q,n,oR.h-rQ#Y]R%t#YQ#_^R%y#_Q(h%vS+W(h+XR+X(iQ+](kR,|+]Q#b_R%{#bQ#ebQ%}#cW&Q#e%}({+bQ({&cR+b0gQ$OsS&e$O&fR&f$PQ&v$_R)_&vQ&V#jR(t&VQ&m$VS)T&m+hR+h)UQ$Z{R&p$ZQ&t$]R)[&tQ+n)bR-U+nQ#hfR&S#hQ)f&zR+q)fQ&}$dS)m&})nR)n'OQ'V$kR)u'VQ'[$lS*P'[,ZR,Z*QQ,a*VR-i,aWjOn)t,PR#ljQ-k,eR.U-kd.{.]/b/i/n/|0O0Q0]0a0bR/h.{U.s.W/a0PR/`.sQ/{/nS0X/{0YR0Y/|S/v/b/cR0T/vQ.}.]R/k.}R!ZPXmOn)t,PWlOn)t,PR'T$jYfOn$j)t,PR&R#g[sOn#g$j)t,PR&d#}&dQOYZ[dnprxy}!P!Q!U!i!k!o!p!q!s!t#[#d#g#y#{#}$Q$h$j$}%S%Z%^%`%g%l%n%w%|&Z&_&j&k&u&x'P'W'Z'l'm'p'r's'w(O(W(^(d(g(p(r(z)^)e)g)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+U+V+Y+a+d+k,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0n0rQ!nTQ#caQ#poU$Rt%c(SS$d!R$gQ$p!XQ$u!cQ$v!dQ$w!eQ$x!fQ$y!gQ$z!hQ%e!zQ%j#OQ%p#SQ%q#TQ&`#xQ'O$eQ'g$qQ(q&OU(|&h(}+cW)j&|)l+x+yQ*o'|Q*x(]Q+w)kQ,v+QR0g0lQ!yYQ!}ZQ$b!PQ$c!QQ%R!kQ't%S^'{%`%g(O(W*q*t*v^*f'p*h,k,l-p.g/ZQ*l'rQ*m'sQ+t)gQ,j*gQ,n*kQ-n,hQ-o,iQ-r,oQ.e-mR/Y.f[bOn#g$j)t,P!^!vYZ!P!Q!k%S%`%g'p'r's(O(W)g*g*h*k*q*t*v,h,i,k,l,o-m-p.f.g/ZQ#R[Q#fdS#wrxQ$UyW$_}$Q'P)pS$l!U$hW${!i'm*d,gS%v#[+Y`&P#d%|(p(r(z+a-O0kQ&a#yQ&b#{Q&c#}Q'j$}Q'z%^W([%l(^*y*}Q(`%nQ(i%wQ(v&ZS(y&_0iQ)P&jQ)Q&kU)]&u)^+kQ)d&xQ)y'WY)}'Z*O,X,Y-dQ*b'lS*n'w0jW+P(d*z,s,wW+T(g+V,y,zQ+p)eQ,U)zQ,c*YQ,x+UQ-P+dQ-e,]Q-v,uQ.S-fR/q/VhUOn#d#g$j%|&_'w(p(r)t,P%U!uYZ[drxy}!P!Q!U!i!k#[#y#{#}$Q$h$}%S%^%`%g%l%n%w&Z&j&k&u&x'P'W'Z'l'm'p'r's(O(W(^(d(g(z)^)e)g)p)z*O*Y*d*g*h*k*q*t*v*y*z*}+U+V+Y+a+d+k,X,Y,],g,h,i,k,l,o,s,u,w,y,z-O-d-f-m-p.f.g/V/Z0i0j0kQ#qpW%W!o!s0d0nQ%X!pQ%Y!qQ%[!tQ%f0cS'v%Z0hQ'x0eQ'y0fQ,p*rQ-u,qS.i-s/sR0p0rU#uq.k0qR(w&][cOn#g$j)t,PZ!xY#[#}$Q+YQ#W[Q#zrR$TxQ%b!yQ%i!}Q%o#RQ'j${Q(V%eQ(Z%jQ(c%pQ(f%qQ*|(`Q,f*bQ-t,pQ.m-uR/].lQ$StQ(R%cR*s(SQ.l-sR/}/sR#QZR#V[R%Q!iQ%O!iV*c'm*d,g!Z!lQ!n#c#p$R$d$p$u$v$w$x$y$z%e%j%p%q&`'O'g(q(|)j*o*x+w,v0gR%T!kT#]^#_Q%x#[R,{+YQ(m%xS+_(n(oQ,}+`Q-x,{S.n-y-zR/^.oT+Z(k+]Q$`}Q&g$QQ)o'PR+{)pQ$XzQ)W&qR+i)XQ$XzQ&o$WQ)W&qR+i)XQ#khW$Vz$W&q)XQ$[{Q&r$ZZ)R&l)S+f+g-RR$^|R)c&wXlOn)t,PQ$f!RR'Q$gQ$m!UR'R$hR*X'_Q*V'_V-g,`-h.TQ.d-lQ/P.^R/Q._U.]-l.^._Q/U.aQ/b.tQ/g.zU/i.|/j/yQ/n/RQ/|/oQ0O/tU0Q/u0S0[Q0]0UQ0a0ZR0b0^R/T.`R/d.t\",\n  nodeNames: \"⚠ print Escape { Comment Script AssignStatement * BinaryExpression BitOp BitOp BitOp BitOp ArithOp ArithOp @ ArithOp ** UnaryExpression ArithOp BitOp AwaitExpression await ) ( ParenthesizedExpression BinaryExpression or and CompareOp in not is UnaryExpression ConditionalExpression if else LambdaExpression lambda ParamList VariableName AssignOp , : NamedExpression AssignOp YieldExpression yield from TupleExpression ComprehensionExpression async for LambdaExpression ] [ ArrayExpression ArrayComprehensionExpression } { DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression CallExpression ArgList AssignOp MemberExpression . PropertyName Number String FormatString FormatReplacement FormatSelfDoc FormatConversion FormatSpec FormatReplacement FormatSelfDoc ContinuedString Ellipsis None Boolean TypeDef AssignOp UpdateStatement UpdateOp ExpressionStatement DeleteStatement del PassStatement pass BreakStatement break ContinueStatement continue ReturnStatement return YieldStatement PrintStatement RaiseStatement raise ImportStatement import as ScopeStatement global nonlocal AssertStatement assert TypeDefinition type TypeParamList TypeParam StatementGroup ; IfStatement Body elif WhileStatement while ForStatement TryStatement try except finally WithStatement with FunctionDefinition def ParamList AssignOp TypeDef ClassDefinition class DecoratedStatement Decorator At MatchStatement match MatchBody MatchClause case CapturePattern LiteralPattern ArithOp ArithOp AsPattern OrPattern LogicOp AttributePattern SequencePattern MappingPattern StarPattern ClassPattern PatternArgList KeywordPattern KeywordPattern Guard\",\n  maxTerm: 277,\n  context: trackIndent,\n  nodeProps: [\n    [\"isolate\", -5,4,71,72,73,77,\"\"],\n    [\"group\", -15,6,85,87,88,90,92,94,96,98,99,100,102,105,108,110,\"Statement Statement\",-22,8,18,21,25,40,49,50,56,57,60,61,62,63,64,67,70,71,72,79,80,81,82,\"Expression\",-10,114,116,119,121,122,126,128,133,135,138,\"Statement\",-9,143,144,147,148,150,151,152,153,154,\"Pattern\"],\n    [\"openedBy\", 23,\"(\",54,\"[\",58,\"{\"],\n    [\"closedBy\", 24,\")\",55,\"]\",59,\"}\"]\n  ],\n  propSources: [pythonHighlighting],\n  skippedNodes: [0,4],\n  repeatNodeCount: 34,\n  tokenData: \"!2|~R!`OX%TXY%oY[%T[]%o]p%Tpq%oqr'ars)Yst*xtu%Tuv,dvw-hwx.Uxy/tyz0[z{0r{|2S|}2p}!O3W!O!P4_!P!Q:Z!Q!R;k!R![>_![!]Do!]!^Es!^!_FZ!_!`Gk!`!aHX!a!b%T!b!cIf!c!dJU!d!eK^!e!hJU!h!i!#f!i!tJU!t!u!,|!u!wJU!w!x!.t!x!}JU!}#O!0S#O#P&o#P#Q!0j#Q#R!1Q#R#SJU#S#T%T#T#UJU#U#VK^#V#YJU#Y#Z!#f#Z#fJU#f#g!,|#g#iJU#i#j!.t#j#oJU#o#p!1n#p#q!1s#q#r!2a#r#s!2f#s$g%T$g;'SJU;'S;=`KW<%lOJU`%YT&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T`%lP;=`<%l%To%v]&n`%c_OX%TXY%oY[%T[]%o]p%Tpq%oq#O%T#O#P&o#P#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To&tX&n`OY%TYZ%oZ]%T]^%o^#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc'f[&n`O!_%T!_!`([!`#T%T#T#U(r#U#f%T#f#g(r#g#h(r#h#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc(cTmR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc(yT!mR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk)aV&n`&[ZOr%Trs)vs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk){V&n`Or%Trs*bs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk*iT&n`&^ZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To+PZS_&n`OY*xYZ%TZ]*x]^%T^#o*x#o#p+r#p#q*x#q#r+r#r;'S*x;'S;=`,^<%lO*x_+wTS_OY+rZ]+r^;'S+r;'S;=`,W<%lO+r_,ZP;=`<%l+ro,aP;=`<%l*xj,kV%rQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj-XT!xY&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj-oV%lQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk.]V&n`&ZZOw%Twx.rx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk.wV&n`Ow%Twx/^x#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk/eT&n`&]ZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk/{ThZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc0cTgR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk0yXVZ&n`Oz%Tz{1f{!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk1mVaR&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk2ZV%oZ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc2wTzR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To3_W%pZ&n`O!_%T!_!`-Q!`!a3w!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Td4OT&{S&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk4fX!fQ&n`O!O%T!O!P5R!P!Q%T!Q![6T![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk5WV&n`O!O%T!O!P5m!P#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk5tT!rZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti6[a!hX&n`O!Q%T!Q![6T![!g%T!g!h7a!h!l%T!l!m9s!m#R%T#R#S6T#S#X%T#X#Y7a#Y#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti7fZ&n`O{%T{|8X|}%T}!O8X!O!Q%T!Q![8s![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti8^V&n`O!Q%T!Q![8s![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti8z]!hX&n`O!Q%T!Q![8s![!l%T!l!m9s!m#R%T#R#S8s#S#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti9zT!hX&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk:bX%qR&n`O!P%T!P!Q:}!Q!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj;UV%sQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti;ro!hX&n`O!O%T!O!P=s!P!Q%T!Q![>_![!d%T!d!e?q!e!g%T!g!h7a!h!l%T!l!m9s!m!q%T!q!rA]!r!z%T!z!{Bq!{#R%T#R#S>_#S#U%T#U#V?q#V#X%T#X#Y7a#Y#^%T#^#_9s#_#c%T#c#dA]#d#l%T#l#mBq#m#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti=xV&n`O!Q%T!Q![6T![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti>fc!hX&n`O!O%T!O!P=s!P!Q%T!Q![>_![!g%T!g!h7a!h!l%T!l!m9s!m#R%T#R#S>_#S#X%T#X#Y7a#Y#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti?vY&n`O!Q%T!Q!R@f!R!S@f!S#R%T#R#S@f#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti@mY!hX&n`O!Q%T!Q!R@f!R!S@f!S#R%T#R#S@f#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiAbX&n`O!Q%T!Q!YA}!Y#R%T#R#SA}#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiBUX!hX&n`O!Q%T!Q!YA}!Y#R%T#R#SA}#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiBv]&n`O!Q%T!Q![Co![!c%T!c!iCo!i#R%T#R#SCo#S#T%T#T#ZCo#Z#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiCv]!hX&n`O!Q%T!Q![Co![!c%T!c!iCo!i#R%T#R#SCo#S#T%T#T#ZCo#Z#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%ToDvV{_&n`O!_%T!_!`E]!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TcEdT%{R&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkEzT#gZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkFbXmR&n`O!^%T!^!_F}!_!`([!`!a([!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TjGUV%mQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkGrV%zZ&n`O!_%T!_!`([!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkH`WmR&n`O!_%T!_!`([!`!aHx!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TjIPV%nQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkIoV_Q#}P&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%ToJ_]&n`&YS%uZO!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUoKZP;=`<%lJUoKge&n`&YS%uZOr%Trs)Ysw%Twx.Ux!Q%T!Q![JU![!c%T!c!tJU!t!uLx!u!}JU!}#R%T#R#SJU#S#T%T#T#fJU#f#gLx#g#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUoMRa&n`&YS%uZOr%TrsNWsw%Twx! vx!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUkN_V&n`&`ZOr%TrsNts#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkNyV&n`Or%Trs! `s#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk! gT&n`&bZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk! }V&n`&_ZOw%Twx!!dx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!!iV&n`Ow%Twx!#Ox#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!#VT&n`&aZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!#oe&n`&YS%uZOr%Trs!%Qsw%Twx!&px!Q%T!Q![JU![!c%T!c!tJU!t!u!(`!u!}JU!}#R%T#R#SJU#S#T%T#T#fJU#f#g!(`#g#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!%XV&n`&dZOr%Trs!%ns#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!%sV&n`Or%Trs!&Ys#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!&aT&n`&fZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!&wV&n`&cZOw%Twx!'^x#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!'cV&n`Ow%Twx!'xx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!(PT&n`&eZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!(ia&n`&YS%uZOr%Trs!)nsw%Twx!+^x!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!)uV&n`&hZOr%Trs!*[s#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!*aV&n`Or%Trs!*vs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!*}T&n`&jZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!+eV&n`&gZOw%Twx!+zx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!,PV&n`Ow%Twx!,fx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!,mT&n`&iZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!-Vi&n`&YS%uZOr%TrsNWsw%Twx! vx!Q%T!Q![JU![!c%T!c!dJU!d!eLx!e!hJU!h!i!(`!i!}JU!}#R%T#R#SJU#S#T%T#T#UJU#U#VLx#V#YJU#Y#Z!(`#Z#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUo!.}a&n`&YS%uZOr%Trs)Ysw%Twx.Ux!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!0ZT!XZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc!0qT!WR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj!1XV%kQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T~!1sO!]~k!1zV%jR&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T~!2fO![~i!2mT%tX&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T\",\n  tokenizers: [legacyPrint, indentation, newlines, strings, 0, 1, 2, 3, 4],\n  topRules: {\"Script\":[0,5]},\n  specialized: [{term: 221, get: (value) => spec_identifier[value] || -1}],\n  tokenPrec: 7668\n});\n\nexport { parser };\n","import { parser } from '@lezer/python';\nimport { syntaxTree, LRLanguage, indentNodeProp, delimitedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\nimport { NodeWeakMap, IterMode } from '@lezer/common';\nimport { snippetCompletion, ifNotIn, completeFromList } from '@codemirror/autocomplete';\n\nconst cache = /*@__PURE__*/new NodeWeakMap();\nconst ScopeNodes = /*@__PURE__*/new Set([\n    \"Script\", \"Body\",\n    \"FunctionDefinition\", \"ClassDefinition\", \"LambdaExpression\",\n    \"ForStatement\", \"MatchClause\"\n]);\nfunction defID(type) {\n    return (node, def, outer) => {\n        if (outer)\n            return false;\n        let id = node.node.getChild(\"VariableName\");\n        if (id)\n            def(id, type);\n        return true;\n    };\n}\nconst gatherCompletions = {\n    FunctionDefinition: /*@__PURE__*/defID(\"function\"),\n    ClassDefinition: /*@__PURE__*/defID(\"class\"),\n    ForStatement(node, def, outer) {\n        if (outer)\n            for (let child = node.node.firstChild; child; child = child.nextSibling) {\n                if (child.name == \"VariableName\")\n                    def(child, \"variable\");\n                else if (child.name == \"in\")\n                    break;\n            }\n    },\n    ImportStatement(_node, def) {\n        var _a, _b;\n        let { node } = _node;\n        let isFrom = ((_a = node.firstChild) === null || _a === void 0 ? void 0 : _a.name) == \"from\";\n        for (let ch = node.getChild(\"import\"); ch; ch = ch.nextSibling) {\n            if (ch.name == \"VariableName\" && ((_b = ch.nextSibling) === null || _b === void 0 ? void 0 : _b.name) != \"as\")\n                def(ch, isFrom ? \"variable\" : \"namespace\");\n        }\n    },\n    AssignStatement(node, def) {\n        for (let child = node.node.firstChild; child; child = child.nextSibling) {\n            if (child.name == \"VariableName\")\n                def(child, \"variable\");\n            else if (child.name == \":\" || child.name == \"AssignOp\")\n                break;\n        }\n    },\n    ParamList(node, def) {\n        for (let prev = null, child = node.node.firstChild; child; child = child.nextSibling) {\n            if (child.name == \"VariableName\" && (!prev || !/\\*|AssignOp/.test(prev.name)))\n                def(child, \"variable\");\n            prev = child;\n        }\n    },\n    CapturePattern: /*@__PURE__*/defID(\"variable\"),\n    AsPattern: /*@__PURE__*/defID(\"variable\"),\n    __proto__: null\n};\nfunction getScope(doc, node) {\n    let cached = cache.get(node);\n    if (cached)\n        return cached;\n    let completions = [], top = true;\n    function def(node, type) {\n        let name = doc.sliceString(node.from, node.to);\n        completions.push({ label: name, type });\n    }\n    node.cursor(IterMode.IncludeAnonymous).iterate(node => {\n        if (node.name) {\n            let gather = gatherCompletions[node.name];\n            if (gather && gather(node, def, top) || !top && ScopeNodes.has(node.name))\n                return false;\n            top = false;\n        }\n        else if (node.to - node.from > 8192) {\n            // Allow caching for bigger internal nodes\n            for (let c of getScope(doc, node.node))\n                completions.push(c);\n            return false;\n        }\n    });\n    cache.set(node, completions);\n    return completions;\n}\nconst Identifier = /^[\\w\\xa1-\\uffff][\\w\\d\\xa1-\\uffff]*$/;\nconst dontComplete = [\"String\", \"FormatString\", \"Comment\", \"PropertyName\"];\n/**\nCompletion source that looks up locally defined names in\nPython code.\n*/\nfunction localCompletionSource(context) {\n    let inner = syntaxTree(context.state).resolveInner(context.pos, -1);\n    if (dontComplete.indexOf(inner.name) > -1)\n        return null;\n    let isWord = inner.name == \"VariableName\" ||\n        inner.to - inner.from < 20 && Identifier.test(context.state.sliceDoc(inner.from, inner.to));\n    if (!isWord && !context.explicit)\n        return null;\n    let options = [];\n    for (let pos = inner; pos; pos = pos.parent) {\n        if (ScopeNodes.has(pos.name))\n            options = options.concat(getScope(context.state.doc, pos));\n    }\n    return {\n        options,\n        from: isWord ? inner.from : context.pos,\n        validFor: Identifier\n    };\n}\nconst globals = /*@__PURE__*/[\n    \"__annotations__\", \"__builtins__\", \"__debug__\", \"__doc__\", \"__import__\", \"__name__\",\n    \"__loader__\", \"__package__\", \"__spec__\",\n    \"False\", \"None\", \"True\"\n].map(n => ({ label: n, type: \"constant\" })).concat(/*@__PURE__*/[\n    \"ArithmeticError\", \"AssertionError\", \"AttributeError\", \"BaseException\", \"BlockingIOError\",\n    \"BrokenPipeError\", \"BufferError\", \"BytesWarning\", \"ChildProcessError\", \"ConnectionAbortedError\",\n    \"ConnectionError\", \"ConnectionRefusedError\", \"ConnectionResetError\", \"DeprecationWarning\",\n    \"EOFError\", \"Ellipsis\", \"EncodingWarning\", \"EnvironmentError\", \"Exception\", \"FileExistsError\",\n    \"FileNotFoundError\", \"FloatingPointError\", \"FutureWarning\", \"GeneratorExit\", \"IOError\",\n    \"ImportError\", \"ImportWarning\", \"IndentationError\", \"IndexError\", \"InterruptedError\",\n    \"IsADirectoryError\", \"KeyError\", \"KeyboardInterrupt\", \"LookupError\", \"MemoryError\",\n    \"ModuleNotFoundError\", \"NameError\", \"NotADirectoryError\", \"NotImplemented\", \"NotImplementedError\",\n    \"OSError\", \"OverflowError\", \"PendingDeprecationWarning\", \"PermissionError\", \"ProcessLookupError\",\n    \"RecursionError\", \"ReferenceError\", \"ResourceWarning\", \"RuntimeError\", \"RuntimeWarning\",\n    \"StopAsyncIteration\", \"StopIteration\", \"SyntaxError\", \"SyntaxWarning\", \"SystemError\",\n    \"SystemExit\", \"TabError\", \"TimeoutError\", \"TypeError\", \"UnboundLocalError\", \"UnicodeDecodeError\",\n    \"UnicodeEncodeError\", \"UnicodeError\", \"UnicodeTranslateError\", \"UnicodeWarning\", \"UserWarning\",\n    \"ValueError\", \"Warning\", \"ZeroDivisionError\"\n].map(n => ({ label: n, type: \"type\" }))).concat(/*@__PURE__*/[\n    \"bool\", \"bytearray\", \"bytes\", \"classmethod\", \"complex\", \"float\", \"frozenset\", \"int\", \"list\",\n    \"map\", \"memoryview\", \"object\", \"range\", \"set\", \"staticmethod\", \"str\", \"super\", \"tuple\", \"type\"\n].map(n => ({ label: n, type: \"class\" }))).concat(/*@__PURE__*/[\n    \"abs\", \"aiter\", \"all\", \"anext\", \"any\", \"ascii\", \"bin\", \"breakpoint\", \"callable\", \"chr\",\n    \"compile\", \"delattr\", \"dict\", \"dir\", \"divmod\", \"enumerate\", \"eval\", \"exec\", \"exit\", \"filter\",\n    \"format\", \"getattr\", \"globals\", \"hasattr\", \"hash\", \"help\", \"hex\", \"id\", \"input\", \"isinstance\",\n    \"issubclass\", \"iter\", \"len\", \"license\", \"locals\", \"max\", \"min\", \"next\", \"oct\", \"open\",\n    \"ord\", \"pow\", \"print\", \"property\", \"quit\", \"repr\", \"reversed\", \"round\", \"setattr\", \"slice\",\n    \"sorted\", \"sum\", \"vars\", \"zip\"\n].map(n => ({ label: n, type: \"function\" })));\nconst snippets = [\n    /*@__PURE__*/snippetCompletion(\"def ${name}(${params}):\\n\\t${}\", {\n        label: \"def\",\n        detail: \"function\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"for ${name} in ${collection}:\\n\\t${}\", {\n        label: \"for\",\n        detail: \"loop\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"while ${}:\\n\\t${}\", {\n        label: \"while\",\n        detail: \"loop\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"try:\\n\\t${}\\nexcept ${error}:\\n\\t${}\", {\n        label: \"try\",\n        detail: \"/ except block\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"if ${}:\\n\\t\\n\", {\n        label: \"if\",\n        detail: \"block\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"if ${}:\\n\\t${}\\nelse:\\n\\t${}\", {\n        label: \"if\",\n        detail: \"/ else block\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"class ${name}:\\n\\tdef __init__(self, ${params}):\\n\\t\\t\\t${}\", {\n        label: \"class\",\n        detail: \"definition\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"import ${module}\", {\n        label: \"import\",\n        detail: \"statement\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"from ${module} import ${names}\", {\n        label: \"from\",\n        detail: \"import\",\n        type: \"keyword\"\n    })\n];\n/**\nAutocompletion for built-in Python globals and keywords.\n*/\nconst globalCompletion = /*@__PURE__*/ifNotIn(dontComplete, /*@__PURE__*/completeFromList(/*@__PURE__*/globals.concat(snippets)));\n\nfunction innerBody(context) {\n    let { node, pos } = context;\n    let lineIndent = context.lineIndent(pos, -1);\n    let found = null;\n    for (;;) {\n        let before = node.childBefore(pos);\n        if (!before) {\n            break;\n        }\n        else if (before.name == \"Comment\") {\n            pos = before.from;\n        }\n        else if (before.name == \"Body\" || before.name == \"MatchBody\") {\n            if (context.baseIndentFor(before) + context.unit <= lineIndent)\n                found = before;\n            node = before;\n        }\n        else if (before.name == \"MatchClause\") {\n            node = before;\n        }\n        else if (before.type.is(\"Statement\")) {\n            node = before;\n        }\n        else {\n            break;\n        }\n    }\n    return found;\n}\nfunction indentBody(context, node) {\n    let base = context.baseIndentFor(node);\n    let line = context.lineAt(context.pos, -1), to = line.from + line.text.length;\n    // Don't consider blank, deindented lines at the end of the\n    // block part of the block\n    if (/^\\s*($|#)/.test(line.text) &&\n        context.node.to < to + 100 &&\n        !/\\S/.test(context.state.sliceDoc(to, context.node.to)) &&\n        context.lineIndent(context.pos, -1) <= base)\n        return null;\n    // A normally deindenting keyword that appears at a higher\n    // indentation than the block should probably be handled by the next\n    // level\n    if (/^\\s*(else:|elif |except |finally:|case\\s+[^=:]+:)/.test(context.textAfter) && context.lineIndent(context.pos, -1) > base)\n        return null;\n    return base + context.unit;\n}\n/**\nA language provider based on the [Lezer Python\nparser](https://github.com/lezer-parser/python), extended with\nhighlighting and indentation information.\n*/\nconst pythonLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"python\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                Body: context => {\n                    var _a;\n                    let body = /^\\s*(#|$)/.test(context.textAfter) && innerBody(context) || context.node;\n                    return (_a = indentBody(context, body)) !== null && _a !== void 0 ? _a : context.continue();\n                },\n                MatchBody: context => {\n                    var _a;\n                    let inner = innerBody(context);\n                    return (_a = indentBody(context, inner || context.node)) !== null && _a !== void 0 ? _a : context.continue();\n                },\n                IfStatement: cx => /^\\s*(else:|elif )/.test(cx.textAfter) ? cx.baseIndent : cx.continue(),\n                \"ForStatement WhileStatement\": cx => /^\\s*else:/.test(cx.textAfter) ? cx.baseIndent : cx.continue(),\n                TryStatement: cx => /^\\s*(except[ :]|finally:|else:)/.test(cx.textAfter) ? cx.baseIndent : cx.continue(),\n                MatchStatement: cx => {\n                    if (/^\\s*case /.test(cx.textAfter))\n                        return cx.baseIndent + cx.unit;\n                    return cx.continue();\n                },\n                \"TupleExpression ComprehensionExpression ParamList ArgList ParenthesizedExpression\": /*@__PURE__*/delimitedIndent({ closing: \")\" }),\n                \"DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression\": /*@__PURE__*/delimitedIndent({ closing: \"}\" }),\n                \"ArrayExpression ArrayComprehensionExpression\": /*@__PURE__*/delimitedIndent({ closing: \"]\" }),\n                MemberExpression: cx => cx.baseIndent + cx.unit,\n                \"String FormatString\": () => null,\n                Script: context => {\n                    var _a;\n                    let inner = innerBody(context);\n                    return (_a = (inner && indentBody(context, inner))) !== null && _a !== void 0 ? _a : context.continue();\n                },\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                \"ArrayExpression DictionaryExpression SetExpression TupleExpression\": foldInside,\n                Body: (node, state) => ({ from: node.from + 1, to: node.to - (node.to == state.doc.length ? 0 : 1) }),\n                \"String FormatString\": (node, state) => ({ from: state.doc.lineAt(node.from).to, to: node.to })\n            })\n        ],\n    }),\n    languageData: {\n        closeBrackets: {\n            brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"'''\", '\"\"\"'],\n            stringPrefixes: [\"f\", \"fr\", \"rf\", \"r\", \"u\", \"b\", \"br\", \"rb\",\n                \"F\", \"FR\", \"RF\", \"R\", \"U\", \"B\", \"BR\", \"RB\"]\n        },\n        commentTokens: { line: \"#\" },\n        // Indent logic logic are triggered upon below input patterns\n        indentOnInput: /^\\s*([\\}\\]\\)]|else:|elif |except |finally:|case\\s+[^:]*:?)$/,\n    }\n});\n/**\nPython language support.\n*/\nfunction python() {\n    return new LanguageSupport(pythonLanguage, [\n        pythonLanguage.data.of({ autocomplete: localCompletionSource }),\n        pythonLanguage.data.of({ autocomplete: globalCompletion }),\n    ]);\n}\n\nexport { globalCompletion, localCompletionSource, python, pythonLanguage };\n","import { ContextTracker, ExternalTokenizer, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst StartTag = 1,\n  StartCloseTag = 2,\n  MissingCloseTag = 3,\n  mismatchedStartCloseTag = 4,\n  incompleteStartCloseTag = 5,\n  commentContent$1 = 36,\n  piContent$1 = 37,\n  cdataContent$1 = 38,\n  Element = 11,\n  OpenTag = 13;\n\n/* Hand-written tokenizer for XML tag matching. */\n\nfunction nameChar(ch) {\n  return ch == 45 || ch == 46 || ch == 58 || ch >= 65 && ch <= 90 || ch == 95 || ch >= 97 && ch <= 122 || ch >= 161\n}\n\nfunction isSpace(ch) {\n  return ch == 9 || ch == 10 || ch == 13 || ch == 32\n}\n\nlet cachedName = null, cachedInput = null, cachedPos = 0;\nfunction tagNameAfter(input, offset) {\n  let pos = input.pos + offset;\n  if (cachedInput == input && cachedPos == pos) return cachedName\n  while (isSpace(input.peek(offset))) offset++;\n  let name = \"\";\n  for (;;) {\n    let next = input.peek(offset);\n    if (!nameChar(next)) break\n    name += String.fromCharCode(next);\n    offset++;\n  }\n  cachedInput = input; cachedPos = pos;\n  return cachedName = name || null\n}\n\nfunction ElementContext(name, parent) {\n  this.name = name;\n  this.parent = parent;\n}\n\nconst elementContext = new ContextTracker({\n  start: null,\n  shift(context, term, stack, input) {\n    return term == StartTag ? new ElementContext(tagNameAfter(input, 1) || \"\", context) : context\n  },\n  reduce(context, term) {\n    return term == Element && context ? context.parent : context\n  },\n  reuse(context, node, _stack, input) {\n    let type = node.type.id;\n    return type == StartTag || type == OpenTag\n      ? new ElementContext(tagNameAfter(input, 1) || \"\", context) : context\n  },\n  strict: false\n});\n\nconst startTag = new ExternalTokenizer((input, stack) => {\n  if (input.next != 60 /* '<' */) return\n  input.advance();\n  if (input.next == 47 /* '/' */) {\n    input.advance();\n    let name = tagNameAfter(input, 0);\n    if (!name) return input.acceptToken(incompleteStartCloseTag)\n    if (stack.context && name == stack.context.name) return input.acceptToken(StartCloseTag)\n    for (let cx = stack.context; cx; cx = cx.parent) if (cx.name == name) return input.acceptToken(MissingCloseTag, -2)\n    input.acceptToken(mismatchedStartCloseTag);\n  } else if (input.next != 33 /* '!' */ && input.next != 63 /* '?' */) {\n    return input.acceptToken(StartTag)\n  }\n}, {contextual: true});\n\nfunction scanTo(type, end) {\n  return new ExternalTokenizer(input => {\n    let len = 0, first = end.charCodeAt(0);\n    scan: for (;; input.advance(), len++) {\n      if (input.next < 0) break\n      if (input.next == first) {\n        for (let i = 1; i < end.length; i++)\n          if (input.peek(i) != end.charCodeAt(i)) continue scan\n        break\n      }\n    }\n    if (len) input.acceptToken(type);\n  })\n}\n\nconst commentContent = scanTo(commentContent$1, \"-->\");\nconst piContent = scanTo(piContent$1, \"?>\");\nconst cdataContent = scanTo(cdataContent$1, \"]]>\");\n\nconst xmlHighlighting = styleTags({\n  Text: tags.content,\n  \"StartTag StartCloseTag EndTag SelfCloseEndTag\": tags.angleBracket,\n  TagName: tags.tagName,\n  \"MismatchedCloseTag/TagName\": [tags.tagName, tags.invalid],\n  AttributeName: tags.attributeName,\n  AttributeValue: tags.attributeValue,\n  Is: tags.definitionOperator,\n  \"EntityReference CharacterReference\": tags.character,\n  Comment: tags.blockComment,\n  ProcessingInst: tags.processingInstruction,\n  DoctypeDecl: tags.documentMeta,\n  Cdata: tags.special(tags.string)\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \",lOQOaOOOrOxO'#CfOzOpO'#CiO!tOaO'#CgOOOP'#Cg'#CgO!{OrO'#CrO#TOtO'#CsO#]OpO'#CtOOOP'#DT'#DTOOOP'#Cv'#CvQQOaOOOOOW'#Cw'#CwO#eOxO,59QOOOP,59Q,59QOOOO'#Cx'#CxO#mOpO,59TO#uO!bO,59TOOOP'#C|'#C|O$TOaO,59RO$[OpO'#CoOOOP,59R,59ROOOQ'#C}'#C}O$dOrO,59^OOOP,59^,59^OOOS'#DO'#DOO$lOtO,59_OOOP,59_,59_O$tOpO,59`O$|OpO,59`OOOP-E6t-E6tOOOW-E6u-E6uOOOP1G.l1G.lOOOO-E6v-E6vO%UO!bO1G.oO%UO!bO1G.oO%dOpO'#CkO%lO!bO'#CyO%zO!bO1G.oOOOP1G.o1G.oOOOP1G.w1G.wOOOP-E6z-E6zOOOP1G.m1G.mO&VOpO,59ZO&_OpO,59ZOOOQ-E6{-E6{OOOP1G.x1G.xOOOS-E6|-E6|OOOP1G.y1G.yO&gOpO1G.zO&gOpO1G.zOOOP1G.z1G.zO&oO!bO7+$ZO&}O!bO7+$ZOOOP7+$Z7+$ZOOOP7+$c7+$cO'YOpO,59VO'bOpO,59VO'mO!bO,59eOOOO-E6w-E6wO'{OpO1G.uO'{OpO1G.uOOOP1G.u1G.uO(TOpO7+$fOOOP7+$f7+$fO(]O!bO<<GuOOOP<<Gu<<GuOOOP<<G}<<G}O'bOpO1G.qO'bOpO1G.qO(hO#tO'#CnO(vO&jO'#CnOOOO1G.q1G.qO)UOpO7+$aOOOP7+$a7+$aOOOP<<HQ<<HQOOOPAN=aAN=aOOOPAN=iAN=iO'bOpO7+$]OOOO7+$]7+$]OOOO'#Cz'#CzO)^O#tO,59YOOOO,59Y,59YOOOO'#C{'#C{O)lO&jO,59YOOOP<<G{<<G{OOOO<<Gw<<GwOOOO-E6x-E6xOOOO1G.t1G.tOOOO-E6y-E6y\",\n  stateData: \")z~OPQOSVOTWOVWOWWOXWOiXOyPO!QTO!SUO~OvZOx]O~O^`Oz^O~OPQOQcOSVOTWOVWOWWOXWOyPO!QTO!SUO~ORdO~P!SOteO!PgO~OuhO!RjO~O^lOz^O~OvZOxoO~O^qOz^O~O[vO`sOdwOz^O~ORyO~P!SO^{Oz^O~OteO!P}O~OuhO!R!PO~O^!QOz^O~O[!SOz^O~O[!VO`sOd!WOz^O~Oa!YOz^O~Oz^O[mX`mXdmX~O[!VO`sOd!WO~O^!]Oz^O~O[!_Oz^O~O[!aOz^O~O[!cO`sOd!dOz^O~O[!cO`sOd!dO~Oa!eOz^O~Oz^O{!gO}!hO~Oz^O[ma`madma~O[!kOz^O~O[!lOz^O~O[!mO`sOd!nO~OW!qOX!qO{!sO|!qO~OW!tOX!tO}!sO!O!tO~O[!vOz^O~OW!qOX!qO{!yO|!qO~OW!tOX!tO}!yO!O!tO~O\",\n  goto: \"%cxPPPPPPPPPPyyP!PP!VPP!`!jP!pyyyP!v!|#S$[$k$q$w$}%TPPPP%ZXWORYbXRORYb_t`qru!T!U!bQ!i!YS!p!e!fR!w!oQdRRybXSORYbQYORmYQ[PRn[Q_QQkVjp_krz!R!T!X!Z!^!`!f!j!oQr`QzcQ!RlQ!TqQ!XsQ!ZtQ!^{Q!`!QQ!f!YQ!j!]R!o!eQu`S!UqrU![u!U!bR!b!TQ!r!gR!x!rQ!u!hR!z!uQbRRxbQfTR|fQiUR!OiSXOYTaRb\",\n  nodeNames: \"⚠ StartTag StartCloseTag MissingCloseTag StartCloseTag StartCloseTag Document Text EntityReference CharacterReference Cdata Element EndTag OpenTag TagName Attribute AttributeName Is AttributeValue CloseTag SelfCloseEndTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag DoctypeDecl\",\n  maxTerm: 50,\n  context: elementContext,\n  nodeProps: [\n    [\"closedBy\", 1,\"SelfCloseEndTag EndTag\",13,\"CloseTag MissingCloseTag\"],\n    [\"openedBy\", 12,\"StartTag StartCloseTag\",19,\"OpenTag\",20,\"StartTag\"],\n    [\"isolate\", -6,13,18,19,21,22,24,\"\"]\n  ],\n  propSources: [xmlHighlighting],\n  skippedNodes: [0],\n  repeatNodeCount: 9,\n  tokenData: \"!)v~R!YOX$qXY)iYZ)iZ]$q]^)i^p$qpq)iqr$qrs*vsv$qvw+fwx/ix}$q}!O0[!O!P$q!P!Q2z!Q![$q![!]4n!]!^$q!^!_8U!_!`!#t!`!a!$l!a!b!%d!b!c$q!c!}4n!}#P$q#P#Q!'W#Q#R$q#R#S4n#S#T$q#T#o4n#o%W$q%W%o4n%o%p$q%p&a4n&a&b$q&b1p4n1p4U$q4U4d4n4d4e$q4e$IS4n$IS$I`$q$I`$Ib4n$Ib$Kh$q$Kh%#t4n%#t&/x$q&/x&Et4n&Et&FV$q&FV;'S4n;'S;:j8O;:j;=`)c<%l?&r$q?&r?Ah4n?Ah?BY$q?BY?Mn4n?MnO$qi$zXVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qa%nVVP!O`Ov%gwx&Tx!^%g!^!_&o!_;'S%g;'S;=`'W<%lO%gP&YTVPOv&Tw!^&T!_;'S&T;'S;=`&i<%lO&TP&lP;=`<%l&T`&tS!O`Ov&ox;'S&o;'S;=`'Q<%lO&o`'TP;=`<%l&oa'ZP;=`<%l%gX'eWVP|WOr'^rs&Tsv'^w!^'^!^!_'}!_;'S'^;'S;=`(i<%lO'^W(ST|WOr'}sv'}w;'S'};'S;=`(c<%lO'}W(fP;=`<%l'}X(lP;=`<%l'^h(vV|W!O`Or(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(oh)`P;=`<%l(oi)fP;=`<%l$qo)t`VP|W!O`zUOX$qXY)iYZ)iZ]$q]^)i^p$qpq)iqr$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qk+PV{YVP!O`Ov%gwx&Tx!^%g!^!_&o!_;'S%g;'S;=`'W<%lO%g~+iast,n![!]-r!c!}-r#R#S-r#T#o-r%W%o-r%p&a-r&b1p-r4U4d-r4e$IS-r$I`$Ib-r$Kh%#t-r&/x&Et-r&FV;'S-r;'S;:j/c?&r?Ah-r?BY?Mn-r~,qQ!Q![,w#l#m-V~,zQ!Q![,w!]!^-Q~-VOX~~-YR!Q![-c!c!i-c#T#Z-c~-fS!Q![-c!]!^-Q!c!i-c#T#Z-c~-ug}!O-r!O!P-r!Q![-r![!]-r!]!^/^!c!}-r#R#S-r#T#o-r$}%O-r%W%o-r%p&a-r&b1p-r1p4U-r4U4d-r4e$IS-r$I`$Ib-r$Je$Jg-r$Kh%#t-r&/x&Et-r&FV;'S-r;'S;:j/c?&r?Ah-r?BY?Mn-r~/cOW~~/fP;=`<%l-rk/rW}bVP|WOr'^rs&Tsv'^w!^'^!^!_'}!_;'S'^;'S;=`(i<%lO'^k0eZVP|W!O`Or$qrs%gsv$qwx'^x}$q}!O1W!O!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qk1aZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_!`$q!`!a2S!a;'S$q;'S;=`)c<%lO$qk2_X!PQVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qm3TZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_!`$q!`!a3v!a;'S$q;'S;=`)c<%lO$qm4RXdSVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qo4{!P`S^QVP|W!O`Or$qrs%gsv$qwx'^x}$q}!O4n!O!P4n!P!Q$q!Q![4n![!]4n!]!^$q!^!_(o!_!c$q!c!}4n!}#R$q#R#S4n#S#T$q#T#o4n#o$}$q$}%O4n%O%W$q%W%o4n%o%p$q%p&a4n&a&b$q&b1p4n1p4U4n4U4d4n4d4e$q4e$IS4n$IS$I`$q$I`$Ib4n$Ib$Je$q$Je$Jg4n$Jg$Kh$q$Kh%#t4n%#t&/x$q&/x&Et4n&Et&FV$q&FV;'S4n;'S;:j8O;:j;=`)c<%l?&r$q?&r?Ah4n?Ah?BY$q?BY?Mn4n?MnO$qo8RP;=`<%l4ni8]Y|W!O`Oq(oqr8{rs&osv(owx'}x!a(o!a!b!#U!b;'S(o;'S;=`)]<%lO(oi9S_|W!O`Or(ors&osv(owx'}x}(o}!O:R!O!f(o!f!g;e!g!}(o!}#ODh#O#W(o#W#XLp#X;'S(o;'S;=`)]<%lO(oi:YX|W!O`Or(ors&osv(owx'}x}(o}!O:u!O;'S(o;'S;=`)]<%lO(oi;OV!QP|W!O`Or(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(oi;lX|W!O`Or(ors&osv(owx'}x!q(o!q!r<X!r;'S(o;'S;=`)]<%lO(oi<`X|W!O`Or(ors&osv(owx'}x!e(o!e!f<{!f;'S(o;'S;=`)]<%lO(oi=SX|W!O`Or(ors&osv(owx'}x!v(o!v!w=o!w;'S(o;'S;=`)]<%lO(oi=vX|W!O`Or(ors&osv(owx'}x!{(o!{!|>c!|;'S(o;'S;=`)]<%lO(oi>jX|W!O`Or(ors&osv(owx'}x!r(o!r!s?V!s;'S(o;'S;=`)]<%lO(oi?^X|W!O`Or(ors&osv(owx'}x!g(o!g!h?y!h;'S(o;'S;=`)]<%lO(oi@QY|W!O`Or?yrs@psv?yvwA[wxBdx!`?y!`!aCr!a;'S?y;'S;=`Db<%lO?ya@uV!O`Ov@pvxA[x!`@p!`!aAy!a;'S@p;'S;=`B^<%lO@pPA_TO!`A[!`!aAn!a;'SA[;'S;=`As<%lOA[PAsOiPPAvP;=`<%lA[aBQSiP!O`Ov&ox;'S&o;'S;=`'Q<%lO&oaBaP;=`<%l@pXBiX|WOrBdrsA[svBdvwA[w!`Bd!`!aCU!a;'SBd;'S;=`Cl<%lOBdXC]TiP|WOr'}sv'}w;'S'};'S;=`(c<%lO'}XCoP;=`<%lBdiC{ViP|W!O`Or(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(oiDeP;=`<%l?yiDoZ|W!O`Or(ors&osv(owx'}x!e(o!e!fEb!f#V(o#V#WIr#W;'S(o;'S;=`)]<%lO(oiEiX|W!O`Or(ors&osv(owx'}x!f(o!f!gFU!g;'S(o;'S;=`)]<%lO(oiF]X|W!O`Or(ors&osv(owx'}x!c(o!c!dFx!d;'S(o;'S;=`)]<%lO(oiGPX|W!O`Or(ors&osv(owx'}x!v(o!v!wGl!w;'S(o;'S;=`)]<%lO(oiGsX|W!O`Or(ors&osv(owx'}x!c(o!c!dH`!d;'S(o;'S;=`)]<%lO(oiHgX|W!O`Or(ors&osv(owx'}x!}(o!}#OIS#O;'S(o;'S;=`)]<%lO(oiI]V|W!O`yPOr(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(oiIyX|W!O`Or(ors&osv(owx'}x#W(o#W#XJf#X;'S(o;'S;=`)]<%lO(oiJmX|W!O`Or(ors&osv(owx'}x#T(o#T#UKY#U;'S(o;'S;=`)]<%lO(oiKaX|W!O`Or(ors&osv(owx'}x#h(o#h#iK|#i;'S(o;'S;=`)]<%lO(oiLTX|W!O`Or(ors&osv(owx'}x#T(o#T#UH`#U;'S(o;'S;=`)]<%lO(oiLwX|W!O`Or(ors&osv(owx'}x#c(o#c#dMd#d;'S(o;'S;=`)]<%lO(oiMkX|W!O`Or(ors&osv(owx'}x#V(o#V#WNW#W;'S(o;'S;=`)]<%lO(oiN_X|W!O`Or(ors&osv(owx'}x#h(o#h#iNz#i;'S(o;'S;=`)]<%lO(oi! RX|W!O`Or(ors&osv(owx'}x#m(o#m#n! n#n;'S(o;'S;=`)]<%lO(oi! uX|W!O`Or(ors&osv(owx'}x#d(o#d#e!!b#e;'S(o;'S;=`)]<%lO(oi!!iX|W!O`Or(ors&osv(owx'}x#X(o#X#Y?y#Y;'S(o;'S;=`)]<%lO(oi!#_V!SP|W!O`Or(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(ok!$PXaQVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qo!$wX[UVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qk!%mZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_!`$q!`!a!&`!a;'S$q;'S;=`)c<%lO$qk!&kX!RQVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qk!'aZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_#P$q#P#Q!(S#Q;'S$q;'S;=`)c<%lO$qk!(]ZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_!`$q!`!a!)O!a;'S$q;'S;=`)c<%lO$qk!)ZXxQVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$q\",\n  tokenizers: [startTag, commentContent, piContent, cdataContent, 0, 1, 2, 3, 4],\n  topRules: {\"Document\":[0,6]},\n  tokenPrec: 0\n});\n\nexport { parser };\n","import { parser } from '@lezer/xml';\nimport { syntaxTree, LRLanguage, indentNodeProp, foldNodeProp, bracketMatchingHandle, LanguageSupport } from '@codemirror/language';\nimport { EditorSelection } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\n\nfunction tagName(doc, tag) {\n    let name = tag && tag.getChild(\"TagName\");\n    return name ? doc.sliceString(name.from, name.to) : \"\";\n}\nfunction elementName$1(doc, tree) {\n    let tag = tree && tree.firstChild;\n    return !tag || tag.name != \"OpenTag\" ? \"\" : tagName(doc, tag);\n}\nfunction attrName(doc, tag, pos) {\n    let attr = tag && tag.getChildren(\"Attribute\").find(a => a.from <= pos && a.to >= pos);\n    let name = attr && attr.getChild(\"AttributeName\");\n    return name ? doc.sliceString(name.from, name.to) : \"\";\n}\nfunction findParentElement(tree) {\n    for (let cur = tree && tree.parent; cur; cur = cur.parent)\n        if (cur.name == \"Element\")\n            return cur;\n    return null;\n}\nfunction findLocation(state, pos) {\n    var _a;\n    let at = syntaxTree(state).resolveInner(pos, -1), inTag = null;\n    for (let cur = at; !inTag && cur.parent; cur = cur.parent)\n        if (cur.name == \"OpenTag\" || cur.name == \"CloseTag\" || cur.name == \"SelfClosingTag\" || cur.name == \"MismatchedCloseTag\")\n            inTag = cur;\n    if (inTag && (inTag.to > pos || inTag.lastChild.type.isError)) {\n        let elt = inTag.parent;\n        if (at.name == \"TagName\")\n            return inTag.name == \"CloseTag\" || inTag.name == \"MismatchedCloseTag\"\n                ? { type: \"closeTag\", from: at.from, context: elt }\n                : { type: \"openTag\", from: at.from, context: findParentElement(elt) };\n        if (at.name == \"AttributeName\")\n            return { type: \"attrName\", from: at.from, context: inTag };\n        if (at.name == \"AttributeValue\")\n            return { type: \"attrValue\", from: at.from, context: inTag };\n        let before = at == inTag || at.name == \"Attribute\" ? at.childBefore(pos) : at;\n        if ((before === null || before === void 0 ? void 0 : before.name) == \"StartTag\")\n            return { type: \"openTag\", from: pos, context: findParentElement(elt) };\n        if ((before === null || before === void 0 ? void 0 : before.name) == \"StartCloseTag\" && before.to <= pos)\n            return { type: \"closeTag\", from: pos, context: elt };\n        if ((before === null || before === void 0 ? void 0 : before.name) == \"Is\")\n            return { type: \"attrValue\", from: pos, context: inTag };\n        if (before)\n            return { type: \"attrName\", from: pos, context: inTag };\n        return null;\n    }\n    else if (at.name == \"StartCloseTag\") {\n        return { type: \"closeTag\", from: pos, context: at.parent };\n    }\n    while (at.parent && at.to == pos && !((_a = at.lastChild) === null || _a === void 0 ? void 0 : _a.type.isError))\n        at = at.parent;\n    if (at.name == \"Element\" || at.name == \"Text\" || at.name == \"Document\")\n        return { type: \"tag\", from: pos, context: at.name == \"Element\" ? at : findParentElement(at) };\n    return null;\n}\nclass Element {\n    constructor(spec, attrs, attrValues) {\n        this.attrs = attrs;\n        this.attrValues = attrValues;\n        this.children = [];\n        this.name = spec.name;\n        this.completion = Object.assign(Object.assign({ type: \"type\" }, spec.completion || {}), { label: this.name });\n        this.openCompletion = Object.assign(Object.assign({}, this.completion), { label: \"<\" + this.name });\n        this.closeCompletion = Object.assign(Object.assign({}, this.completion), { label: \"</\" + this.name + \">\", boost: 2 });\n        this.closeNameCompletion = Object.assign(Object.assign({}, this.completion), { label: this.name + \">\" });\n        this.text = spec.textContent ? spec.textContent.map(s => ({ label: s, type: \"text\" })) : [];\n    }\n}\nconst Identifier = /^[:\\-\\.\\w\\u00b7-\\uffff]*$/;\nfunction attrCompletion(spec) {\n    return Object.assign(Object.assign({ type: \"property\" }, spec.completion || {}), { label: spec.name });\n}\nfunction valueCompletion(spec) {\n    return typeof spec == \"string\" ? { label: `\"${spec}\"`, type: \"constant\" }\n        : /^\"/.test(spec.label) ? spec\n            : Object.assign(Object.assign({}, spec), { label: `\"${spec.label}\"` });\n}\n/**\nCreate a completion source for the given schema.\n*/\nfunction completeFromSchema(eltSpecs, attrSpecs) {\n    let allAttrs = [], globalAttrs = [];\n    let attrValues = Object.create(null);\n    for (let s of attrSpecs) {\n        let completion = attrCompletion(s);\n        allAttrs.push(completion);\n        if (s.global)\n            globalAttrs.push(completion);\n        if (s.values)\n            attrValues[s.name] = s.values.map(valueCompletion);\n    }\n    let allElements = [], topElements = [];\n    let byName = Object.create(null);\n    for (let s of eltSpecs) {\n        let attrs = globalAttrs, attrVals = attrValues;\n        if (s.attributes)\n            attrs = attrs.concat(s.attributes.map(s => {\n                if (typeof s == \"string\")\n                    return allAttrs.find(a => a.label == s) || { label: s, type: \"property\" };\n                if (s.values) {\n                    if (attrVals == attrValues)\n                        attrVals = Object.create(attrVals);\n                    attrVals[s.name] = s.values.map(valueCompletion);\n                }\n                return attrCompletion(s);\n            }));\n        let elt = new Element(s, attrs, attrVals);\n        byName[elt.name] = elt;\n        allElements.push(elt);\n        if (s.top)\n            topElements.push(elt);\n    }\n    if (!topElements.length)\n        topElements = allElements;\n    for (let i = 0; i < allElements.length; i++) {\n        let s = eltSpecs[i], elt = allElements[i];\n        if (s.children) {\n            for (let ch of s.children)\n                if (byName[ch])\n                    elt.children.push(byName[ch]);\n        }\n        else {\n            elt.children = allElements;\n        }\n    }\n    return cx => {\n        var _a;\n        let { doc } = cx.state, loc = findLocation(cx.state, cx.pos);\n        if (!loc || (loc.type == \"tag\" && !cx.explicit))\n            return null;\n        let { type, from, context } = loc;\n        if (type == \"openTag\") {\n            let children = topElements;\n            let parentName = elementName$1(doc, context);\n            if (parentName) {\n                let parent = byName[parentName];\n                children = (parent === null || parent === void 0 ? void 0 : parent.children) || allElements;\n            }\n            return {\n                from,\n                options: children.map(ch => ch.completion),\n                validFor: Identifier\n            };\n        }\n        else if (type == \"closeTag\") {\n            let parentName = elementName$1(doc, context);\n            return parentName ? {\n                from,\n                to: cx.pos + (doc.sliceString(cx.pos, cx.pos + 1) == \">\" ? 1 : 0),\n                options: [((_a = byName[parentName]) === null || _a === void 0 ? void 0 : _a.closeNameCompletion) || { label: parentName + \">\", type: \"type\" }],\n                validFor: Identifier\n            } : null;\n        }\n        else if (type == \"attrName\") {\n            let parent = byName[tagName(doc, context)];\n            return {\n                from,\n                options: (parent === null || parent === void 0 ? void 0 : parent.attrs) || globalAttrs,\n                validFor: Identifier\n            };\n        }\n        else if (type == \"attrValue\") {\n            let attr = attrName(doc, context, from);\n            if (!attr)\n                return null;\n            let parent = byName[tagName(doc, context)];\n            let values = ((parent === null || parent === void 0 ? void 0 : parent.attrValues) || attrValues)[attr];\n            if (!values || !values.length)\n                return null;\n            return {\n                from,\n                to: cx.pos + (doc.sliceString(cx.pos, cx.pos + 1) == '\"' ? 1 : 0),\n                options: values,\n                validFor: /^\"[^\"]*\"?$/\n            };\n        }\n        else if (type == \"tag\") {\n            let parentName = elementName$1(doc, context), parent = byName[parentName];\n            let closing = [], last = context && context.lastChild;\n            if (parentName && (!last || last.name != \"CloseTag\" || tagName(doc, last) != parentName))\n                closing.push(parent ? parent.closeCompletion : { label: \"</\" + parentName + \">\", type: \"type\", boost: 2 });\n            let options = closing.concat(((parent === null || parent === void 0 ? void 0 : parent.children) || (context ? allElements : topElements)).map(e => e.openCompletion));\n            if (context && (parent === null || parent === void 0 ? void 0 : parent.text.length)) {\n                let openTag = context.firstChild;\n                if (openTag.to > cx.pos - 20 && !/\\S/.test(cx.state.sliceDoc(openTag.to, cx.pos)))\n                    options = options.concat(parent.text);\n            }\n            return {\n                from,\n                options,\n                validFor: /^<\\/?[:\\-\\.\\w\\u00b7-\\uffff]*$/\n            };\n        }\n        else {\n            return null;\n        }\n    };\n}\n\n/**\nA language provider based on the [Lezer XML\nparser](https://github.com/lezer-parser/xml), extended with\nhighlighting and indentation information.\n*/\nconst xmlLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"xml\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                Element(context) {\n                    let closed = /^\\s*<\\//.test(context.textAfter);\n                    return context.lineIndent(context.node.from) + (closed ? 0 : context.unit);\n                },\n                \"OpenTag CloseTag SelfClosingTag\"(context) {\n                    return context.column(context.node.from) + context.unit;\n                }\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                Element(subtree) {\n                    let first = subtree.firstChild, last = subtree.lastChild;\n                    if (!first || first.name != \"OpenTag\")\n                        return null;\n                    return { from: first.to, to: last.name == \"CloseTag\" ? last.from : subtree.to };\n                }\n            }),\n            /*@__PURE__*/bracketMatchingHandle.add({\n                \"OpenTag CloseTag\": node => node.getChild(\"TagName\")\n            })\n        ]\n    }),\n    languageData: {\n        commentTokens: { block: { open: \"<!--\", close: \"-->\" } },\n        indentOnInput: /^\\s*<\\/$/\n    }\n});\n/**\nXML language support. Includes schema-based autocompletion when\nconfigured.\n*/\nfunction xml(conf = {}) {\n    let support = [xmlLanguage.data.of({\n            autocomplete: completeFromSchema(conf.elements || [], conf.attributes || [])\n        })];\n    if (conf.autoCloseTags !== false)\n        support.push(autoCloseTags);\n    return new LanguageSupport(xmlLanguage, support);\n}\nfunction elementName(doc, tree, max = doc.length) {\n    if (!tree)\n        return \"\";\n    let tag = tree.firstChild;\n    let name = tag && tag.getChild(\"TagName\");\n    return name ? doc.sliceString(name.from, Math.min(name.to, max)) : \"\";\n}\n/**\nExtension that will automatically insert close tags when a `>` or\n`/` is typed.\n*/\nconst autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text, insertTransaction) => {\n    if (view.composing || view.state.readOnly || from != to || (text != \">\" && text != \"/\") ||\n        !xmlLanguage.isActiveAt(view.state, from, -1))\n        return false;\n    let base = insertTransaction(), { state } = base;\n    let closeTags = state.changeByRange(range => {\n        var _a, _b, _c;\n        let { head } = range;\n        let didType = state.doc.sliceString(head - 1, head) == text;\n        let after = syntaxTree(state).resolveInner(head, -1), name;\n        if (didType && text == \">\" && after.name == \"EndTag\") {\n            let tag = after.parent;\n            if (((_b = (_a = tag.parent) === null || _a === void 0 ? void 0 : _a.lastChild) === null || _b === void 0 ? void 0 : _b.name) != \"CloseTag\" &&\n                (name = elementName(state.doc, tag.parent, head))) {\n                let to = head + (state.doc.sliceString(head, head + 1) === \">\" ? 1 : 0);\n                let insert = `</${name}>`;\n                return { range, changes: { from: head, to, insert } };\n            }\n        }\n        else if (didType && text == \"/\" && after.name == \"StartCloseTag\") {\n            let base = after.parent;\n            if (after.from == head - 2 && ((_c = base.lastChild) === null || _c === void 0 ? void 0 : _c.name) != \"CloseTag\" &&\n                (name = elementName(state.doc, base, head))) {\n                let to = head + (state.doc.sliceString(head, head + 1) === \">\" ? 1 : 0);\n                let insert = `${name}>`;\n                return {\n                    range: EditorSelection.cursor(head + insert.length, -1),\n                    changes: { from: head, to, insert }\n                };\n            }\n        }\n        return { range };\n    });\n    if (closeTags.changes.empty)\n        return false;\n    view.dispatch([\n        base,\n        state.update(closeTags, {\n            userEvent: \"input.complete\",\n            scrollIntoView: true\n        })\n    ]);\n    return true;\n});\n\nexport { autoCloseTags, completeFromSchema, xml, xmlLanguage };\n","import { syntaxTree, indentNodeProp, continuedIndent, foldNodeProp, LRLanguage, LanguageSupport } from '@codemirror/language';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { ExternalTokenizer, LRParser } from '@lezer/lr';\nimport { ifNotIn, completeFromList } from '@codemirror/autocomplete';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst whitespace = 36,\n  LineComment = 1,\n  BlockComment = 2,\n  String$1 = 3,\n  Number = 4,\n  Bool = 5,\n  Null = 6,\n  ParenL = 7,\n  ParenR = 8,\n  BraceL = 9,\n  BraceR = 10,\n  BracketL = 11,\n  BracketR = 12,\n  Semi = 13,\n  Dot = 14,\n  Operator = 15,\n  Punctuation = 16,\n  SpecialVar = 17,\n  Identifier = 18,\n  QuotedIdentifier = 19,\n  Keyword = 20,\n  Type = 21,\n  Bits = 22,\n  Bytes = 23,\n  Builtin = 24;\n\nfunction isAlpha(ch) {\n    return ch >= 65 /* Ch.A */ && ch <= 90 /* Ch.Z */ || ch >= 97 /* Ch.a */ && ch <= 122 /* Ch.z */ || ch >= 48 /* Ch._0 */ && ch <= 57 /* Ch._9 */;\n}\nfunction isHexDigit(ch) {\n    return ch >= 48 /* Ch._0 */ && ch <= 57 /* Ch._9 */ || ch >= 97 /* Ch.a */ && ch <= 102 /* Ch.f */ || ch >= 65 /* Ch.A */ && ch <= 70 /* Ch.F */;\n}\nfunction readLiteral(input, endQuote, backslashEscapes) {\n    for (let escaped = false;;) {\n        if (input.next < 0)\n            return;\n        if (input.next == endQuote && !escaped) {\n            input.advance();\n            return;\n        }\n        escaped = backslashEscapes && !escaped && input.next == 92 /* Ch.Backslash */;\n        input.advance();\n    }\n}\nfunction readDoubleDollarLiteral(input, tag) {\n    scan: for (;;) {\n        if (input.next < 0)\n            return;\n        if (input.next == 36 /* Ch.Dollar */) {\n            input.advance();\n            for (let i = 0; i < tag.length; i++) {\n                if (input.next != tag.charCodeAt(i))\n                    continue scan;\n                input.advance();\n            }\n            if (input.next == 36 /* Ch.Dollar */) {\n                input.advance();\n                return;\n            }\n        }\n        else {\n            input.advance();\n        }\n    }\n}\nfunction readPLSQLQuotedLiteral(input, openDelim) {\n    let matchingDelim = \"[{<(\".indexOf(String.fromCharCode(openDelim));\n    let closeDelim = matchingDelim < 0 ? openDelim : \"]}>)\".charCodeAt(matchingDelim);\n    for (;;) {\n        if (input.next < 0)\n            return;\n        if (input.next == closeDelim && input.peek(1) == 39 /* Ch.SingleQuote */) {\n            input.advance(2);\n            return;\n        }\n        input.advance();\n    }\n}\nfunction readWord(input, result) {\n    for (;;) {\n        if (input.next != 95 /* Ch.Underscore */ && !isAlpha(input.next))\n            break;\n        if (result != null)\n            result += String.fromCharCode(input.next);\n        input.advance();\n    }\n    return result;\n}\nfunction readWordOrQuoted(input) {\n    if (input.next == 39 /* Ch.SingleQuote */ || input.next == 34 /* Ch.DoubleQuote */ || input.next == 96 /* Ch.Backtick */) {\n        let quote = input.next;\n        input.advance();\n        readLiteral(input, quote, false);\n    }\n    else {\n        readWord(input);\n    }\n}\nfunction readBits(input, endQuote) {\n    while (input.next == 48 /* Ch._0 */ || input.next == 49 /* Ch._1 */)\n        input.advance();\n    if (endQuote && input.next == endQuote)\n        input.advance();\n}\nfunction readNumber(input, sawDot) {\n    for (;;) {\n        if (input.next == 46 /* Ch.Dot */) {\n            if (sawDot)\n                break;\n            sawDot = true;\n        }\n        else if (input.next < 48 /* Ch._0 */ || input.next > 57 /* Ch._9 */) {\n            break;\n        }\n        input.advance();\n    }\n    if (input.next == 69 /* Ch.E */ || input.next == 101 /* Ch.e */) {\n        input.advance();\n        if (input.next == 43 /* Ch.Plus */ || input.next == 45 /* Ch.Dash */)\n            input.advance();\n        while (input.next >= 48 /* Ch._0 */ && input.next <= 57 /* Ch._9 */)\n            input.advance();\n    }\n}\nfunction eol(input) {\n    while (!(input.next < 0 || input.next == 10 /* Ch.Newline */))\n        input.advance();\n}\nfunction inString(ch, str) {\n    for (let i = 0; i < str.length; i++)\n        if (str.charCodeAt(i) == ch)\n            return true;\n    return false;\n}\nconst Space = \" \\t\\r\\n\";\nfunction keywords(keywords, types, builtin) {\n    let result = Object.create(null);\n    result[\"true\"] = result[\"false\"] = Bool;\n    result[\"null\"] = result[\"unknown\"] = Null;\n    for (let kw of keywords.split(\" \"))\n        if (kw)\n            result[kw] = Keyword;\n    for (let tp of types.split(\" \"))\n        if (tp)\n            result[tp] = Type;\n    for (let kw of (builtin || \"\").split(\" \"))\n        if (kw)\n            result[kw] = Builtin;\n    return result;\n}\nconst SQLTypes = \"array binary bit boolean char character clob date decimal double float int integer interval large national nchar nclob numeric object precision real smallint time timestamp varchar varying \";\nconst SQLKeywords = \"absolute action add after all allocate alter and any are as asc assertion at authorization before begin between both breadth by call cascade cascaded case cast catalog check close collate collation column commit condition connect connection constraint constraints constructor continue corresponding count create cross cube current current_date current_default_transform_group current_transform_group_for_type current_path current_role current_time current_timestamp current_user cursor cycle data day deallocate declare default deferrable deferred delete depth deref desc describe descriptor deterministic diagnostics disconnect distinct do domain drop dynamic each else elseif end end-exec equals escape except exception exec execute exists exit external fetch first for foreign found from free full function general get global go goto grant group grouping handle having hold hour identity if immediate in indicator initially inner inout input insert intersect into is isolation join key language last lateral leading leave left level like limit local localtime localtimestamp locator loop map match method minute modifies module month names natural nesting new next no none not of old on only open option or order ordinality out outer output overlaps pad parameter partial path prepare preserve primary prior privileges procedure public read reads recursive redo ref references referencing relative release repeat resignal restrict result return returns revoke right role rollback rollup routine row rows savepoint schema scroll search second section select session session_user set sets signal similar size some space specific specifictype sql sqlexception sqlstate sqlwarning start state static system_user table temporary then timezone_hour timezone_minute to trailing transaction translation treat trigger under undo union unique unnest until update usage user using value values view when whenever where while with without work write year zone \";\nconst defaults = {\n    backslashEscapes: false,\n    hashComments: false,\n    spaceAfterDashes: false,\n    slashComments: false,\n    doubleQuotedStrings: false,\n    doubleDollarQuotedStrings: false,\n    unquotedBitLiterals: false,\n    treatBitsAsBytes: false,\n    charSetCasts: false,\n    plsqlQuotingMechanism: false,\n    operatorChars: \"*+\\-%<>!=&|~^/\",\n    specialVar: \"?\",\n    identifierQuotes: '\"',\n    caseInsensitiveIdentifiers: false,\n    words: /*@__PURE__*/keywords(SQLKeywords, SQLTypes)\n};\nfunction dialect(spec, kws, types, builtin) {\n    let dialect = {};\n    for (let prop in defaults)\n        dialect[prop] = (spec.hasOwnProperty(prop) ? spec : defaults)[prop];\n    if (kws)\n        dialect.words = keywords(kws, types || \"\", builtin);\n    return dialect;\n}\nfunction tokensFor(d) {\n    return new ExternalTokenizer(input => {\n        var _a;\n        let { next } = input;\n        input.advance();\n        if (inString(next, Space)) {\n            while (inString(input.next, Space))\n                input.advance();\n            input.acceptToken(whitespace);\n        }\n        else if (next == 36 /* Ch.Dollar */ && d.doubleDollarQuotedStrings) {\n            let tag = readWord(input, \"\");\n            if (input.next == 36 /* Ch.Dollar */) {\n                input.advance();\n                readDoubleDollarLiteral(input, tag);\n                input.acceptToken(String$1);\n            }\n        }\n        else if (next == 39 /* Ch.SingleQuote */ || next == 34 /* Ch.DoubleQuote */ && d.doubleQuotedStrings) {\n            readLiteral(input, next, d.backslashEscapes);\n            input.acceptToken(String$1);\n        }\n        else if (next == 35 /* Ch.Hash */ && d.hashComments ||\n            next == 47 /* Ch.Slash */ && input.next == 47 /* Ch.Slash */ && d.slashComments) {\n            eol(input);\n            input.acceptToken(LineComment);\n        }\n        else if (next == 45 /* Ch.Dash */ && input.next == 45 /* Ch.Dash */ &&\n            (!d.spaceAfterDashes || input.peek(1) == 32 /* Ch.Space */)) {\n            eol(input);\n            input.acceptToken(LineComment);\n        }\n        else if (next == 47 /* Ch.Slash */ && input.next == 42 /* Ch.Star */) {\n            input.advance();\n            for (let depth = 1;;) {\n                let cur = input.next;\n                if (input.next < 0)\n                    break;\n                input.advance();\n                if (cur == 42 /* Ch.Star */ && input.next == 47 /* Ch.Slash */) {\n                    depth--;\n                    input.advance();\n                    if (!depth)\n                        break;\n                }\n                else if (cur == 47 /* Ch.Slash */ && input.next == 42 /* Ch.Star */) {\n                    depth++;\n                    input.advance();\n                }\n            }\n            input.acceptToken(BlockComment);\n        }\n        else if ((next == 101 /* Ch.e */ || next == 69 /* Ch.E */) && input.next == 39 /* Ch.SingleQuote */) {\n            input.advance();\n            readLiteral(input, 39 /* Ch.SingleQuote */, true);\n            input.acceptToken(String$1);\n        }\n        else if ((next == 110 /* Ch.n */ || next == 78 /* Ch.N */) && input.next == 39 /* Ch.SingleQuote */ &&\n            d.charSetCasts) {\n            input.advance();\n            readLiteral(input, 39 /* Ch.SingleQuote */, d.backslashEscapes);\n            input.acceptToken(String$1);\n        }\n        else if (next == 95 /* Ch.Underscore */ && d.charSetCasts) {\n            for (let i = 0;; i++) {\n                if (input.next == 39 /* Ch.SingleQuote */ && i > 1) {\n                    input.advance();\n                    readLiteral(input, 39 /* Ch.SingleQuote */, d.backslashEscapes);\n                    input.acceptToken(String$1);\n                    break;\n                }\n                if (!isAlpha(input.next))\n                    break;\n                input.advance();\n            }\n        }\n        else if (d.plsqlQuotingMechanism &&\n            (next == 113 /* Ch.q */ || next == 81 /* Ch.Q */) && input.next == 39 /* Ch.SingleQuote */ &&\n            input.peek(1) > 0 && !inString(input.peek(1), Space)) {\n            let openDelim = input.peek(1);\n            input.advance(2);\n            readPLSQLQuotedLiteral(input, openDelim);\n            input.acceptToken(String$1);\n        }\n        else if (inString(next, d.identifierQuotes)) {\n            const endQuote = next == 91 /* Ch.BracketL */ ? 93 /* Ch.BracketR */ : next;\n            readLiteral(input, endQuote, false);\n            input.acceptToken(QuotedIdentifier);\n        }\n        else if (next == 40 /* Ch.ParenL */) {\n            input.acceptToken(ParenL);\n        }\n        else if (next == 41 /* Ch.ParenR */) {\n            input.acceptToken(ParenR);\n        }\n        else if (next == 123 /* Ch.BraceL */) {\n            input.acceptToken(BraceL);\n        }\n        else if (next == 125 /* Ch.BraceR */) {\n            input.acceptToken(BraceR);\n        }\n        else if (next == 91 /* Ch.BracketL */) {\n            input.acceptToken(BracketL);\n        }\n        else if (next == 93 /* Ch.BracketR */) {\n            input.acceptToken(BracketR);\n        }\n        else if (next == 59 /* Ch.Semi */) {\n            input.acceptToken(Semi);\n        }\n        else if (d.unquotedBitLiterals && next == 48 /* Ch._0 */ && input.next == 98 /* Ch.b */) {\n            input.advance();\n            readBits(input);\n            input.acceptToken(Bits);\n        }\n        else if ((next == 98 /* Ch.b */ || next == 66 /* Ch.B */) && (input.next == 39 /* Ch.SingleQuote */ || input.next == 34 /* Ch.DoubleQuote */)) {\n            const quoteStyle = input.next;\n            input.advance();\n            if (d.treatBitsAsBytes) {\n                readLiteral(input, quoteStyle, d.backslashEscapes);\n                input.acceptToken(Bytes);\n            }\n            else {\n                readBits(input, quoteStyle);\n                input.acceptToken(Bits);\n            }\n        }\n        else if (next == 48 /* Ch._0 */ && (input.next == 120 /* Ch.x */ || input.next == 88 /* Ch.X */) ||\n            (next == 120 /* Ch.x */ || next == 88 /* Ch.X */) && input.next == 39 /* Ch.SingleQuote */) {\n            let quoted = input.next == 39 /* Ch.SingleQuote */;\n            input.advance();\n            while (isHexDigit(input.next))\n                input.advance();\n            if (quoted && input.next == 39 /* Ch.SingleQuote */)\n                input.advance();\n            input.acceptToken(Number);\n        }\n        else if (next == 46 /* Ch.Dot */ && input.next >= 48 /* Ch._0 */ && input.next <= 57 /* Ch._9 */) {\n            readNumber(input, true);\n            input.acceptToken(Number);\n        }\n        else if (next == 46 /* Ch.Dot */) {\n            input.acceptToken(Dot);\n        }\n        else if (next >= 48 /* Ch._0 */ && next <= 57 /* Ch._9 */) {\n            readNumber(input, false);\n            input.acceptToken(Number);\n        }\n        else if (inString(next, d.operatorChars)) {\n            while (inString(input.next, d.operatorChars))\n                input.advance();\n            input.acceptToken(Operator);\n        }\n        else if (inString(next, d.specialVar)) {\n            if (input.next == next)\n                input.advance();\n            readWordOrQuoted(input);\n            input.acceptToken(SpecialVar);\n        }\n        else if (next == 58 /* Ch.Colon */ || next == 44 /* Ch.Comma */) {\n            input.acceptToken(Punctuation);\n        }\n        else if (isAlpha(next)) {\n            let word = readWord(input, String.fromCharCode(next));\n            input.acceptToken(input.next == 46 /* Ch.Dot */ || input.peek(-word.length - 1) == 46 /* Ch.Dot */\n                ? Identifier : (_a = d.words[word.toLowerCase()]) !== null && _a !== void 0 ? _a : Identifier);\n        }\n    });\n}\nconst tokens = /*@__PURE__*/tokensFor(defaults);\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst parser$1 = /*@__PURE__*/LRParser.deserialize({\n  version: 14,\n  states: \"%vQ]QQOOO#wQRO'#DSO$OQQO'#CwO%eQQO'#CxO%lQQO'#CyO%sQQO'#CzOOQQ'#DS'#DSOOQQ'#C}'#C}O'UQRO'#C{OOQQ'#Cv'#CvOOQQ'#C|'#C|Q]QQOOQOQQOOO'`QQO'#DOO(xQRO,59cO)PQQO,59cO)UQQO'#DSOOQQ,59d,59dO)cQQO,59dOOQQ,59e,59eO)jQQO,59eOOQQ,59f,59fO)qQQO,59fOOQQ-E6{-E6{OOQQ,59b,59bOOQQ-E6z-E6zOOQQ,59j,59jOOQQ-E6|-E6|O+VQRO1G.}O+^QQO,59cOOQQ1G/O1G/OOOQQ1G/P1G/POOQQ1G/Q1G/QP+kQQO'#C}O+rQQO1G.}O)PQQO,59cO,PQQO'#Cw\",\n  stateData: \",[~OtOSPOSQOS~ORUOSUOTUOUUOVROXSOZTO]XO^QO_UO`UOaPObPOcPOdUOeUOfUOgUOhUO~O^]ORvXSvXTvXUvXVvXXvXZvX]vX_vX`vXavXbvXcvXdvXevXfvXgvXhvX~OsvX~P!jOa_Ob_Oc_O~ORUOSUOTUOUUOVROXSOZTO^tO_UO`UOa`Ob`Oc`OdUOeUOfUOgUOhUO~OWaO~P$ZOYcO~P$ZO[eO~P$ZORUOSUOTUOUUOVROXSOZTO^QO_UO`UOaPObPOcPOdUOeUOfUOgUOhUO~O]hOsoX~P%zOajObjOcjO~O^]ORkaSkaTkaUkaVkaXkaZka]ka_ka`kaakabkackadkaekafkagkahka~Oska~P'kO^]O~OWvXYvX[vX~P!jOWnO~P$ZOYoO~P$ZO[pO~P$ZO^]ORkiSkiTkiUkiVkiXkiZki]ki_ki`kiakibkickidkiekifkigkihki~Oski~P)xOWkaYka[ka~P'kO]hO~P$ZOWkiYki[ki~P)xOasObsOcsO~O\",\n  goto: \"#hwPPPPPPPPPPPPPPPPPPPPPPPPPPx||||!Y!^!d!xPPP#[TYOZeUORSTWZbdfqT[OZQZORiZSWOZQbRQdSQfTZgWbdfqQ^PWk^lmrQl_Qm`RrseVORSTWZbdfq\",\n  nodeNames: \"⚠ LineComment BlockComment String Number Bool Null ( ) { } [ ] ; . Operator Punctuation SpecialVar Identifier QuotedIdentifier Keyword Type Bits Bytes Builtin Script Statement CompositeIdentifier Parens Braces Brackets Statement\",\n  maxTerm: 38,\n  nodeProps: [\n    [\"isolate\", -4,1,2,3,19,\"\"]\n  ],\n  skippedNodes: [0,1,2],\n  repeatNodeCount: 3,\n  tokenData: \"RORO\",\n  tokenizers: [0, tokens],\n  topRules: {\"Script\":[0,25]},\n  tokenPrec: 0\n});\n\nfunction tokenBefore(tree) {\n    let cursor = tree.cursor().moveTo(tree.from, -1);\n    while (/Comment/.test(cursor.name))\n        cursor.moveTo(cursor.from, -1);\n    return cursor.node;\n}\nfunction idName(doc, node) {\n    let text = doc.sliceString(node.from, node.to);\n    let quoted = /^([`'\"\\[])(.*)([`'\"\\]])$/.exec(text);\n    return quoted ? quoted[2] : text;\n}\nfunction plainID(node) {\n    return node && (node.name == \"Identifier\" || node.name == \"QuotedIdentifier\");\n}\nfunction pathFor(doc, id) {\n    if (id.name == \"CompositeIdentifier\") {\n        let path = [];\n        for (let ch = id.firstChild; ch; ch = ch.nextSibling)\n            if (plainID(ch))\n                path.push(idName(doc, ch));\n        return path;\n    }\n    return [idName(doc, id)];\n}\nfunction parentsFor(doc, node) {\n    for (let path = [];;) {\n        if (!node || node.name != \".\")\n            return path;\n        let name = tokenBefore(node);\n        if (!plainID(name))\n            return path;\n        path.unshift(idName(doc, name));\n        node = tokenBefore(name);\n    }\n}\nfunction sourceContext(state, startPos) {\n    let pos = syntaxTree(state).resolveInner(startPos, -1);\n    let aliases = getAliases(state.doc, pos);\n    if (pos.name == \"Identifier\" || pos.name == \"QuotedIdentifier\" || pos.name == \"Keyword\") {\n        return { from: pos.from,\n            quoted: pos.name == \"QuotedIdentifier\" ? state.doc.sliceString(pos.from, pos.from + 1) : null,\n            parents: parentsFor(state.doc, tokenBefore(pos)),\n            aliases };\n    }\n    if (pos.name == \".\") {\n        return { from: startPos, quoted: null, parents: parentsFor(state.doc, pos), aliases };\n    }\n    else {\n        return { from: startPos, quoted: null, parents: [], empty: true, aliases };\n    }\n}\nconst EndFrom = /*@__PURE__*/new Set(/*@__PURE__*/\"where group having order union intersect except all distinct limit offset fetch for\".split(\" \"));\nfunction getAliases(doc, at) {\n    let statement;\n    for (let parent = at; !statement; parent = parent.parent) {\n        if (!parent)\n            return null;\n        if (parent.name == \"Statement\")\n            statement = parent;\n    }\n    let aliases = null;\n    for (let scan = statement.firstChild, sawFrom = false, prevID = null; scan; scan = scan.nextSibling) {\n        let kw = scan.name == \"Keyword\" ? doc.sliceString(scan.from, scan.to).toLowerCase() : null;\n        let alias = null;\n        if (!sawFrom) {\n            sawFrom = kw == \"from\";\n        }\n        else if (kw == \"as\" && prevID && plainID(scan.nextSibling)) {\n            alias = idName(doc, scan.nextSibling);\n        }\n        else if (kw && EndFrom.has(kw)) {\n            break;\n        }\n        else if (prevID && plainID(scan)) {\n            alias = idName(doc, scan);\n        }\n        if (alias) {\n            if (!aliases)\n                aliases = Object.create(null);\n            aliases[alias] = pathFor(doc, prevID);\n        }\n        prevID = /Identifier$/.test(scan.name) ? scan : null;\n    }\n    return aliases;\n}\nfunction maybeQuoteCompletions(openingQuote, closingQuote, completions) {\n    return completions.map(c => ({ ...c, label: c.label[0] == openingQuote ? c.label : openingQuote + c.label + closingQuote, apply: undefined }));\n}\nconst Span = /^\\w*$/, QuotedSpan = /^[`'\"\\[]?\\w*[`'\"\\]]?$/;\nfunction isSelfTag(namespace) {\n    return namespace.self && typeof namespace.self.label == \"string\";\n}\nclass CompletionLevel {\n    constructor(idQuote, idCaseInsensitive) {\n        this.idQuote = idQuote;\n        this.idCaseInsensitive = idCaseInsensitive;\n        this.list = [];\n        this.children = undefined;\n    }\n    child(name) {\n        let children = this.children || (this.children = Object.create(null));\n        let found = children[name];\n        if (found)\n            return found;\n        if (name && !this.list.some(c => c.label == name))\n            this.list.push(nameCompletion(name, \"type\", this.idQuote, this.idCaseInsensitive));\n        return (children[name] = new CompletionLevel(this.idQuote, this.idCaseInsensitive));\n    }\n    maybeChild(name) {\n        return this.children ? this.children[name] : null;\n    }\n    addCompletion(option) {\n        let found = this.list.findIndex(o => o.label == option.label);\n        if (found > -1)\n            this.list[found] = option;\n        else\n            this.list.push(option);\n    }\n    addCompletions(completions) {\n        for (let option of completions)\n            this.addCompletion(typeof option == \"string\" ? nameCompletion(option, \"property\", this.idQuote, this.idCaseInsensitive) : option);\n    }\n    addNamespace(namespace) {\n        if (Array.isArray(namespace)) {\n            this.addCompletions(namespace);\n        }\n        else if (isSelfTag(namespace)) {\n            this.addNamespace(namespace.children);\n        }\n        else {\n            this.addNamespaceObject(namespace);\n        }\n    }\n    addNamespaceObject(namespace) {\n        for (let name of Object.keys(namespace)) {\n            let children = namespace[name], self = null;\n            let parts = name.replace(/\\\\?\\./g, p => p == \".\" ? \"\\0\" : p).split(\"\\0\");\n            let scope = this;\n            if (isSelfTag(children)) {\n                self = children.self;\n                children = children.children;\n            }\n            for (let i = 0; i < parts.length; i++) {\n                if (self && i == parts.length - 1)\n                    scope.addCompletion(self);\n                scope = scope.child(parts[i].replace(/\\\\\\./g, \".\"));\n            }\n            scope.addNamespace(children);\n        }\n    }\n}\nfunction nameCompletion(label, type, idQuote, idCaseInsensitive) {\n    if ((new RegExp(\"^[a-z_][a-z_\\\\d]*$\", idCaseInsensitive ? \"i\" : \"\")).test(label))\n        return { label, type };\n    return { label, type, apply: idQuote + label + getClosingQuote(idQuote) };\n}\nfunction getClosingQuote(openingQuote) {\n    return openingQuote === \"[\" ? \"]\" : openingQuote;\n}\n// Some of this is more gnarly than it has to be because we're also\n// supporting the deprecated, not-so-well-considered style of\n// supplying the schema (dotted property names for schemas, separate\n// `tables` and `schemas` completions).\nfunction completeFromSchema(schema, tables, schemas, defaultTableName, defaultSchemaName, dialect) {\n    var _a;\n    let idQuote = ((_a = dialect === null || dialect === void 0 ? void 0 : dialect.spec.identifierQuotes) === null || _a === void 0 ? void 0 : _a[0]) || '\"';\n    let top = new CompletionLevel(idQuote, !!(dialect === null || dialect === void 0 ? void 0 : dialect.spec.caseInsensitiveIdentifiers));\n    let defaultSchema = defaultSchemaName ? top.child(defaultSchemaName) : null;\n    top.addNamespace(schema);\n    if (tables)\n        (defaultSchema || top).addCompletions(tables);\n    if (schemas)\n        top.addCompletions(schemas);\n    if (defaultSchema)\n        top.addCompletions(defaultSchema.list);\n    if (defaultTableName)\n        top.addCompletions((defaultSchema || top).child(defaultTableName).list);\n    return (context) => {\n        let { parents, from, quoted, empty, aliases } = sourceContext(context.state, context.pos);\n        if (empty && !context.explicit)\n            return null;\n        if (aliases && parents.length == 1)\n            parents = aliases[parents[0]] || parents;\n        let level = top;\n        for (let name of parents) {\n            while (!level.children || !level.children[name]) {\n                if (level == top && defaultSchema)\n                    level = defaultSchema;\n                else if (level == defaultSchema && defaultTableName)\n                    level = level.child(defaultTableName);\n                else\n                    return null;\n            }\n            let next = level.maybeChild(name);\n            if (!next)\n                return null;\n            level = next;\n        }\n        let options = level.list;\n        if (level == top && aliases)\n            options = options.concat(Object.keys(aliases).map(name => ({ label: name, type: \"constant\" })));\n        if (quoted) {\n            let openingQuote = quoted[0];\n            let closingQuote = getClosingQuote(openingQuote);\n            let quoteAfter = context.state.sliceDoc(context.pos, context.pos + 1) == closingQuote;\n            return {\n                from,\n                to: quoteAfter ? context.pos + 1 : undefined,\n                options: maybeQuoteCompletions(openingQuote, closingQuote, options),\n                validFor: QuotedSpan,\n            };\n        }\n        else {\n            return {\n                from,\n                options: options,\n                validFor: Span\n            };\n        }\n    };\n}\nfunction completionType(tokenType) {\n    return tokenType == Type ? \"type\" : tokenType == Keyword ? \"keyword\" : \"variable\";\n}\nfunction completeKeywords(keywords, upperCase, build) {\n    let completions = Object.keys(keywords)\n        .map(keyword => build(upperCase ? keyword.toUpperCase() : keyword, completionType(keywords[keyword])));\n    return ifNotIn([\"QuotedIdentifier\", \"String\", \"LineComment\", \"BlockComment\", \".\"], completeFromList(completions));\n}\n\nlet parser = /*@__PURE__*/parser$1.configure({\n    props: [\n        /*@__PURE__*/indentNodeProp.add({\n            Statement: /*@__PURE__*/continuedIndent()\n        }),\n        /*@__PURE__*/foldNodeProp.add({\n            Statement(tree, state) { return { from: Math.min(tree.from + 100, state.doc.lineAt(tree.from).to), to: tree.to }; },\n            BlockComment(tree) { return { from: tree.from + 2, to: tree.to - 2 }; }\n        }),\n        /*@__PURE__*/styleTags({\n            Keyword: tags.keyword,\n            Type: tags.typeName,\n            Builtin: /*@__PURE__*/tags.standard(tags.name),\n            Bits: tags.number,\n            Bytes: tags.string,\n            Bool: tags.bool,\n            Null: tags.null,\n            Number: tags.number,\n            String: tags.string,\n            Identifier: tags.name,\n            QuotedIdentifier: /*@__PURE__*/tags.special(tags.string),\n            SpecialVar: /*@__PURE__*/tags.special(tags.name),\n            LineComment: tags.lineComment,\n            BlockComment: tags.blockComment,\n            Operator: tags.operator,\n            \"Semi Punctuation\": tags.punctuation,\n            \"( )\": tags.paren,\n            \"{ }\": tags.brace,\n            \"[ ]\": tags.squareBracket\n        })\n    ]\n});\n/**\nRepresents an SQL dialect.\n*/\nclass SQLDialect {\n    constructor(\n    /**\n    @internal\n    */\n    dialect, \n    /**\n    The language for this dialect.\n    */\n    language, \n    /**\n    The spec used to define this dialect.\n    */\n    spec) {\n        this.dialect = dialect;\n        this.language = language;\n        this.spec = spec;\n    }\n    /**\n    Returns the language for this dialect as an extension.\n    */\n    get extension() { return this.language.extension; }\n    /**\n    Reconfigure the parser used by this dialect. Returns a new\n    dialect object.\n    */\n    configureLanguage(options, name) {\n        return new SQLDialect(this.dialect, this.language.configure(options, name), this.spec);\n    }\n    /**\n    Define a new dialect.\n    */\n    static define(spec) {\n        let d = dialect(spec, spec.keywords, spec.types, spec.builtin);\n        let language = LRLanguage.define({\n            name: \"sql\",\n            parser: parser.configure({\n                tokenizers: [{ from: tokens, to: tokensFor(d) }]\n            }),\n            languageData: {\n                commentTokens: { line: \"--\", block: { open: \"/*\", close: \"*/\" } },\n                closeBrackets: { brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"`\"] }\n            }\n        });\n        return new SQLDialect(d, language, spec);\n    }\n}\nfunction defaultKeyword(label, type) { return { label, type, boost: -1 }; }\n/**\nReturns a completion source that provides keyword completion for\nthe given SQL dialect.\n*/\nfunction keywordCompletionSource(dialect, upperCase = false, build) {\n    return completeKeywords(dialect.dialect.words, upperCase, build || defaultKeyword);\n}\n/**\nReturns a completion sources that provides schema-based completion\nfor the given configuration.\n*/\nfunction schemaCompletionSource(config) {\n    return config.schema ? completeFromSchema(config.schema, config.tables, config.schemas, config.defaultTable, config.defaultSchema, config.dialect || StandardSQL)\n        : () => null;\n}\nfunction schemaCompletion(config) {\n    return config.schema ? (config.dialect || StandardSQL).language.data.of({\n        autocomplete: schemaCompletionSource(config)\n    }) : [];\n}\n/**\nSQL language support for the given SQL dialect, with keyword\ncompletion, and, if provided, schema-based completion as extra\nextensions.\n*/\nfunction sql(config = {}) {\n    let lang = config.dialect || StandardSQL;\n    return new LanguageSupport(lang.language, [\n        schemaCompletion(config),\n        lang.language.data.of({\n            autocomplete: keywordCompletionSource(lang, config.upperCaseKeywords, config.keywordCompletion)\n        })\n    ]);\n}\n/**\nThe standard SQL dialect.\n*/\nconst StandardSQL = /*@__PURE__*/SQLDialect.define({});\n/**\nDialect for [PostgreSQL](https://www.postgresql.org).\n*/\nconst PostgreSQL = /*@__PURE__*/SQLDialect.define({\n    charSetCasts: true,\n    doubleDollarQuotedStrings: true,\n    operatorChars: \"+-*/<>=~!@#%^&|`?\",\n    specialVar: \"\",\n    keywords: SQLKeywords + \"abort abs absent access according ada admin aggregate alias also always analyse analyze array_agg array_max_cardinality asensitive assert assignment asymmetric atomic attach attribute attributes avg backward base64 begin_frame begin_partition bernoulli bit_length blocked bom cache called cardinality catalog_name ceil ceiling chain char_length character_length character_set_catalog character_set_name character_set_schema characteristics characters checkpoint class class_origin cluster coalesce cobol collation_catalog collation_name collation_schema collect column_name columns command_function command_function_code comment comments committed concurrently condition_number configuration conflict connection_name constant constraint_catalog constraint_name constraint_schema contains content control conversion convert copy corr cost covar_pop covar_samp csv cume_dist current_catalog current_row current_schema cursor_name database datalink datatype datetime_interval_code datetime_interval_precision db debug defaults defined definer degree delimiter delimiters dense_rank depends derived detach detail dictionary disable discard dispatch dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue document dump dynamic_function dynamic_function_code element elsif empty enable encoding encrypted end_frame end_partition endexec enforced enum errcode error event every exclude excluding exclusive exp explain expression extension extract family file filter final first_value flag floor following force foreach fortran forward frame_row freeze fs functions fusion generated granted greatest groups handler header hex hierarchy hint id ignore ilike immediately immutable implementation implicit import include including increment indent index indexes info inherit inherits inline insensitive instance instantiable instead integrity intersection invoker isnull key_member key_type label lag last_value lead leakproof least length library like_regex link listen ln load location lock locked log logged lower mapping matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text min minvalue mod mode more move multiset mumps name namespace nfc nfd nfkc nfkd nil normalize normalized nothing notice notify notnull nowait nth_value ntile nullable nullif nulls number occurrences_regex octet_length octets off offset oids operator options ordering others over overlay overriding owned owner parallel parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partition pascal passing passthrough password percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding prepared print_strict_params procedural procedures program publication query quote raise range rank reassign recheck recovery refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex rename repeatable replace replica requiring reset respect restart restore result_oid returned_cardinality returned_length returned_octet_length returned_sqlstate returning reverse routine_catalog routine_name routine_schema routines row_count row_number rowtype rule scale schema_name schemas scope scope_catalog scope_name scope_schema security selective self sensitive sequence sequences serializable server server_name setof share show simple skip slice snapshot source specific_name sqlcode sqlerror sqrt stable stacked standalone statement statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time table_name tables tablesample tablespace temp template ties token top_level_count transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex trigger_catalog trigger_name trigger_schema trim trim_array truncate trusted type types uescape unbounded uncommitted unencrypted unlink unlisten unlogged unnamed untyped upper uri use_column use_variable user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema vacuum valid validate validator value_of var_pop var_samp varbinary variable_conflict variadic verbose version versioning views volatile warning whitespace width_bucket window within wrapper xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate yes\",\n    types: SQLTypes + \"bigint int8 bigserial serial8 varbit bool box bytea cidr circle precision float8 inet int4 json jsonb line lseg macaddr macaddr8 money numeric pg_lsn point polygon float4 int2 smallserial serial2 serial serial4 text timetz timestamptz tsquery tsvector txid_snapshot uuid xml\"\n});\nconst MySQLKeywords = \"accessible algorithm analyze asensitive authors auto_increment autocommit avg avg_row_length binlog btree cache catalog_name chain change changed checkpoint checksum class_origin client_statistics coalesce code collations columns comment committed completion concurrent consistent contains contributors convert database databases day_hour day_microsecond day_minute day_second delay_key_write delayed delimiter des_key_file dev_pop dev_samp deviance directory disable discard distinctrow div dual dumpfile enable enclosed ends engine engines enum errors escaped even event events every explain extended fast field fields flush force found_rows fulltext grants handler hash high_priority hosts hour_microsecond hour_minute hour_second ignore ignore_server_ids import index index_statistics infile innodb insensitive insert_method install invoker iterate keys kill linear lines list load lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modify mutex mysql_errno no_write_to_binlog offline offset one online optimize optionally outfile pack_keys parser partition partitions password phase plugin plugins prev processlist profile profiles purge query quick range read_write rebuild recover regexp relaylog remove rename reorganize repair repeatable replace require resume rlike row_format rtree schedule schema_name schemas second_microsecond security sensitive separator serializable server share show slave slow snapshot soname spatial sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result ssl starting starts std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace terminated triggers truncate uncommitted uninstall unlock upgrade use use_frm user_resources user_statistics utc_date utc_time utc_timestamp variables views warnings xa xor year_month zerofill\";\nconst MySQLTypes = SQLTypes + \"bool blob long longblob longtext medium mediumblob mediumint mediumtext tinyblob tinyint tinytext text bigint int1 int2 int3 int4 int8 float4 float8 varbinary varcharacter precision datetime unsigned signed\";\nconst MySQLBuiltin = \"charset clear edit ego help nopager notee nowarning pager print prompt quit rehash source status system tee\";\n/**\n[MySQL](https://dev.mysql.com/) dialect.\n*/\nconst MySQL = /*@__PURE__*/SQLDialect.define({\n    operatorChars: \"*+-%<>!=&|^\",\n    charSetCasts: true,\n    doubleQuotedStrings: true,\n    unquotedBitLiterals: true,\n    hashComments: true,\n    spaceAfterDashes: true,\n    specialVar: \"@?\",\n    identifierQuotes: \"`\",\n    keywords: SQLKeywords + \"group_concat \" + MySQLKeywords,\n    types: MySQLTypes,\n    builtin: MySQLBuiltin\n});\n/**\nVariant of [`MySQL`](https://codemirror.net/6/docs/ref/#lang-sql.MySQL) for\n[MariaDB](https://mariadb.org/).\n*/\nconst MariaSQL = /*@__PURE__*/SQLDialect.define({\n    operatorChars: \"*+-%<>!=&|^\",\n    charSetCasts: true,\n    doubleQuotedStrings: true,\n    unquotedBitLiterals: true,\n    hashComments: true,\n    spaceAfterDashes: true,\n    specialVar: \"@?\",\n    identifierQuotes: \"`\",\n    keywords: SQLKeywords + \"always generated groupby_concat hard persistent shutdown soft virtual \" + MySQLKeywords,\n    types: MySQLTypes,\n    builtin: MySQLBuiltin\n});\nlet MSSQLBuiltin = \n// Aggregate https://msdn.microsoft.com/en-us/library/ms173454.aspx\n\"approx_count_distinct approx_percentile_cont approx_percentile_disc avg checksum_agg count count_big grouping grouping_id max min product stdev stdevp sum var varp \" +\n    // AI https://learn.microsoft.com/en-us/sql/t-sql/functions/ai-functions-transact-sql?view=sql-server-ver17\n    \"ai_generate_embeddings ai_generate_chunks \" +\n    // Analytic https://learn.microsoft.com/en-us/sql/t-sql/functions/analytic-functions-transact-sql?view=sql-server-ver17\n    \"cume_dist first_value lag last_value lead percentile_cont percentile_disc percent_rank \" +\n    // Bit Manipulation https://learn.microsoft.com/en-us/sql/t-sql/functions/bit-manipulation-functions-overview?view=sql-server-ver17\n    \"left_shift right_shift bit_count get_bit set_bit \" +\n    // Collation Functions https://learn.microsoft.com/en-us/sql/t-sql/functions/collation-functions-collationproperty-transact-sql?view=sql-server-ver17\n    \"collationproperty tertiary_weights \" +\n    // Configuration https://learn.microsoft.com/en-us/sql/t-sql/functions/configuration-functions-transact-sql?view=sql-server-ver17\n    \"@@datefirst @@dbts @@langid @@language @@lock_timeout @@max_connections @@max_precision @@nestlevel @@options @@remserver @@servername @@servicename @@spid @@textsize @@version \" +\n    // Conversion https://learn.microsoft.com/en-us/sql/t-sql/functions/conversion-functions-transact-sql?view=sql-server-ver17\n    \"cast convert parse try_cast try_convert try_parse \" +\n    // Cryptographic https://learn.microsoft.com/en-us/sql/t-sql/functions/cryptographic-functions-transact-sql?view=sql-server-ver17\n    \"asymkey_id asymkeyproperty certproperty cert_id crypt_gen_random decryptbyasymkey decryptbycert decryptbykey decryptbykeyautoasymkey decryptbykeyautocert decryptbypassphrase encryptbyasymkey encryptbycert encryptbykey encryptbypassphrase hashbytes is_objectsigned key_guid key_id key_name signbyasymkey signbycert symkeyproperty verifysignedbycert verifysignedbyasymkey \" +\n    // Cursor https://learn.microsoft.com/en-us/sql/t-sql/functions/cursor-functions-transact-sql?view=sql-server-ver17\n    \"@@cursor_rows @@fetch_status cursor_status \" +\n    // Data type https://learn.microsoft.com/en-us/sql/t-sql/functions/data-type-functions-transact-sql?view=sql-server-ver17\n    \"datalength ident_current ident_incr ident_seed identity sql_variant_property \" +\n    // Date & time https://learn.microsoft.com/en-us/sql/t-sql/functions/date-and-time-data-types-and-functions-transact-sql?view=sql-server-ver17\n    \"@@datefirst current_timestamp current_timezone current_timezone_id date_bucket dateadd datediff datediff_big datefromparts datename datepart datetime2fromparts datetimefromparts datetimeoffsetfromparts datetrunc day eomonth getdate getutcdate isdate month smalldatetimefromparts switchoffset sysdatetime sysdatetimeoffset sysutcdatetime timefromparts todatetimeoffset year \" +\n    // Fuzzy string match https://learn.microsoft.com/en-us/sql/t-sql/functions/edit-distance-transact-sql?view=sql-server-ver17\n    \"edit_distance edit_distance_similarity jaro_winkler_distance jaro_winkler_similarity \" +\n    // Graph https://learn.microsoft.com/en-us/sql/t-sql/functions/graph-functions-transact-sql?view=sql-server-ver17\n    \"edge_id_from_parts graph_id_from_edge_id graph_id_from_node_id node_id_from_parts object_id_from_edge_id object_id_from_node_id \" +\n    // JSON https://learn.microsoft.com/en-us/sql/t-sql/functions/json-functions-transact-sql?view=sql-server-ver17\n    \"json isjson json_array json_contains json_modify json_object json_path_exists json_query json_value \" +\n    // Regular Expressions https://learn.microsoft.com/en-us/sql/t-sql/functions/regular-expressions-functions-transact-sql?view=sql-server-ver17\n    \"regexp_like regexp_replace regexp_substr regexp_instr regexp_count regexp_matches regexp_split_to_table \" +\n    // Mathematical https://learn.microsoft.com/en-us/sql/t-sql/functions/mathematical-functions-transact-sql?view=sql-server-ver17\n    \"abs acos asin atan atn2 ceiling cos cot degrees exp floor log log10 pi power radians rand round sign sin sqrt square tan \" +\n    // Logical https://learn.microsoft.com/en-us/sql/t-sql/functions/logical-functions-choose-transact-sql?view=sql-server-ver17\n    \"choose greatest iif least \" +\n    // Metadata https://learn.microsoft.com/en-us/sql/t-sql/functions/metadata-functions-transact-sql?view=sql-server-ver17\n    \"@@procid app_name applock_mode applock_test assemblyproperty col_length col_name columnproperty databasepropertyex db_id db_name file_id file_idex file_name filegroup_id filegroup_name filegroupproperty fileproperty filepropertyex fulltextcatalogproperty fulltextserviceproperty index_col indexkey_property indexproperty next value for object_definition object_id object_name object_schema_name objectproperty objectpropertyex original_db_name parsename schema_id schema_name scope_identity serverproperty stats_date type_id type_name typeproperty \" +\n    // Ranking https://learn.microsoft.com/en-us/sql/t-sql/functions/ranking-functions-transact-sql?view=sql-server-ver17\n    \"dense_rank ntile rank row_number \" +\n    // Replication https://learn.microsoft.com/en-us/sql/t-sql/functions/replication-functions-publishingservername?view=sql-server-ver17\n    \"publishingservername \" +\n    // Security https://learn.microsoft.com/en-us/sql/t-sql/functions/security-functions-transact-sql?view=sql-server-ver17\n    \"certenclosed certprivatekey current_user database_principal_id has_dbaccess has_perms_by_name is_member is_rolemember is_srvrolemember loginproperty original_login permissions pwdencrypt pwdcompare session_user sessionproperty suser_id suser_name suser_sid suser_sname system_user user user_id user_name \" +\n    // String https://learn.microsoft.com/en-us/sql/t-sql/functions/string-functions-transact-sql?view=sql-server-ver17\n    \"ascii char charindex concat concat_ws difference format left len lower ltrim nchar patindex quotename replace replicate reverse right rtrim soundex space str string_agg string_escape stuff substring translate trim unicode upper \" +\n    // System https://learn.microsoft.com/en-us/sql/t-sql/functions/system-functions-transact-sql?view=sql-server-ver17\n    \"$partition @@error @@identity @@pack_received @@rowcount @@trancount binary_checksum checksum compress connectionproperty context_info current_request_id current_transaction_id decompress error_line error_message error_number error_procedure error_severity error_state formatmessage get_filestream_transaction_context getansinull host_id host_name isnull isnumeric min_active_rowversion newid newsequentialid rowcount_big session_context xact_state \" +\n    // System Statistical https://learn.microsoft.com/en-us/sql/t-sql/functions/system-statistical-functions-transact-sql?view=sql-server-ver17\n    \"@@connections @@cpu_busy @@idle @@io_busy @@pack_sent @@packet_errors @@timeticks @@total_errors @@total_read @@total_write \" +\n    // Text & Image https://learn.microsoft.com/en-us/sql/t-sql/functions/text-and-image-functions-textptr-transact-sql?view=sql-server-ver17\n    \"textptr textvalid \" +\n    // Trigger https://learn.microsoft.com/en-us/sql/t-sql/functions/trigger-functions-transact-sql?view=sql-server-ver17\n    \"columns_updated eventdata trigger_nestlevel \" +\n    // Vectors https://learn.microsoft.com/en-us/sql/t-sql/functions/vector-functions-transact-sql?view=sql-server-ver17\n    \"vector_distance vectorproperty vector_search \" +\n    // Relational operators https://msdn.microsoft.com/en-us/library/ms187957.aspx\n    \"generate_series opendatasource openjson openquery openrowset openxml predict string_split \" +\n    // Other\n    \"coalesce nullif apply catch filter force include keep keepfixed modify optimize parameterization parameters partition recompile sequence set\";\n/**\nSQL dialect for Microsoft [SQL\nServer](https://www.microsoft.com/en-us/sql-server).\n*/\nconst MSSQL = /*@__PURE__*/SQLDialect.define({\n    keywords: SQLKeywords +\n        // Reserved Keywords https://learn.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql?view=sql-server-ver17\n        \"add external procedure all fetch public alter file raiserror and fillfactor read any for readtext as foreign reconfigure asc freetext references authorization freetexttable replication backup from restore begin full restrict between function return break goto revert browse grant revoke bulk group right by having rollback cascade holdlock rowcount case identity rowguidcol check identity_insert rule checkpoint identitycol save close if schema clustered in securityaudit coalesce index select collate inner semantickeyphrasetable column insert semanticsimilaritydetailstable commit intersect semanticsimilaritytable compute into session_user constraint is set contains join setuser containstable key shutdown continue kill some convert left statistics create like system_user cross lineno table current load tablesample current_date merge textsize current_time national then current_timestamp nocheck to current_user nonclustered top cursor not tran database null transaction dbcc nullif trigger deallocate of truncate declare off try_convert default offsets tsequal delete on union deny open unique desc opendatasource unpivot disk openquery update distinct openrowset updatetext distributed openxml use double option user drop or values dump order varying else outer view end over waitfor errlvl percent when escape pivot where except plan while exec precision with execute primary within group exists print writetext exit proc \" +\n        // table hints https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver17\n        \"noexpand index forceseek forcescan holdlock nolock nowait paglock readcommitted readcommittedlock readpast readuncommitted repeatableread rowlock serializable snapshot spatial_window_max_cells tablock tablockx updlock xlock keepidentity keepdefaults ignore_constraints ignore_triggers\",\n    types: SQLTypes + \"smalldatetime datetimeoffset datetime2 datetime bigint smallint smallmoney tinyint money real text nvarchar ntext varbinary image hierarchyid uniqueidentifier sql_variant xml\",\n    builtin: MSSQLBuiltin,\n    operatorChars: \"*+-%<>!=^&|/\",\n    specialVar: \"@\",\n    identifierQuotes: \"\\\"[\"\n});\n/**\n[SQLite](https://sqlite.org/) dialect.\n*/\nconst SQLite = /*@__PURE__*/SQLDialect.define({\n    keywords: SQLKeywords + \"abort analyze attach autoincrement conflict database detach exclusive fail glob ignore index indexed instead isnull notnull offset plan pragma query raise regexp reindex rename replace temp vacuum virtual\",\n    types: SQLTypes + \"bool blob long longblob longtext medium mediumblob mediumint mediumtext tinyblob tinyint tinytext text bigint int2 int8 unsigned signed real\",\n    builtin: \"auth backup bail changes clone databases dbinfo dump echo eqp explain fullschema headers help import imposter indexes iotrace lint load log mode nullvalue once print prompt quit restore save scanstats separator shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width\",\n    operatorChars: \"*+-%<>!=&|/~\",\n    identifierQuotes: \"`\\\"\",\n    specialVar: \"@:?$\"\n});\n/**\nDialect for [Cassandra](https://cassandra.apache.org/)'s SQL-ish query language.\n*/\nconst Cassandra = /*@__PURE__*/SQLDialect.define({\n    keywords: \"add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime infinity NaN\",\n    types: SQLTypes + \"ascii bigint blob counter frozen inet list map static text timeuuid tuple uuid varint\",\n    slashComments: true\n});\n/**\n[PL/SQL](https://en.wikipedia.org/wiki/PL/SQL) dialect.\n*/\nconst PLSQL = /*@__PURE__*/SQLDialect.define({\n    keywords: SQLKeywords + \"abort accept access add all alter and any arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body by case cast char_base check close cluster clusters colauth column comment commit compress connected constant constraint crash create current currval cursor data_base database dba deallocate debugoff debugon declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry exception exception_init exchange exclusive exists external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base of off offline on online only option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw rebuild record ref references refresh rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work\",\n    builtin: \"appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define echo editfile embedded feedback flagger flush heading headsep instance linesize lno loboffset logsource longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar repfooter repheader serveroutput shiftinout show showmode spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout timing trimout trimspool ttitle underline verify version wrap\",\n    types: SQLTypes + \"ascii bfile bfilename bigserial bit blob dec long number nvarchar nvarchar2 serial smallint string text uid varchar2 xml\",\n    operatorChars: \"*/+-%<>!=~\",\n    doubleQuotedStrings: true,\n    charSetCasts: true,\n    plsqlQuotingMechanism: true\n});\n\nexport { Cassandra, MSSQL, MariaSQL, MySQL, PLSQL, PostgreSQL, SQLDialect, SQLite, StandardSQL, keywordCompletionSource, schemaCompletionSource, sql };\n","import { LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\nconst javaHighlighting = styleTags({\n  null: tags.null,\n    instanceof: tags.operatorKeyword,\n  this: tags.self,\n  \"new super assert open to with void\": tags.keyword,\n  \"class interface extends implements enum var\": tags.definitionKeyword,\n  \"module package import\": tags.moduleKeyword,\n  \"switch while for if else case default do break continue return try catch finally throw\": tags.controlKeyword,\n  [\"requires exports opens uses provides public private protected static transitive abstract final \" +\n   \"strictfp synchronized native transient volatile throws\"]: tags.modifier,\n  IntegerLiteral: tags.integer,\n  FloatingPointLiteral: tags.float,\n  \"StringLiteral TextBlock\": tags.string,\n  CharacterLiteral: tags.character,\n  LineComment: tags.lineComment,\n  BlockComment: tags.blockComment,\n  BooleanLiteral: tags.bool,\n  PrimitiveType: tags.standard(tags.typeName),\n  TypeName: tags.typeName,\n  Identifier: tags.variableName,\n  \"MethodName/Identifier\": tags.function(tags.variableName),\n  Definition: tags.definition(tags.variableName),\n  ArithOp: tags.arithmeticOperator,\n  LogicOp: tags.logicOperator,\n  BitOp: tags.bitwiseOperator,\n  CompareOp: tags.compareOperator,\n  AssignOp: tags.definitionOperator,\n  UpdateOp: tags.updateOperator,\n  Asterisk: tags.punctuation,\n  Label: tags.labelName,\n  \"( )\": tags.paren,\n  \"[ ]\": tags.squareBracket,\n  \"{ }\": tags.brace,\n  \".\": tags.derefOperator,\n  \", ;\": tags.separator\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_identifier = {__proto__:null,true:34, false:34, null:42, void:46, byte:48, short:48, int:48, long:48, char:48, float:48, double:48, boolean:48, extends:62, super:64, class:76, this:78, new:84, public:100, protected:102, private:104, abstract:106, static:108, final:110, strictfp:112, default:114, synchronized:116, native:118, transient:120, volatile:122, throws:150, implements:160, interface:166, enum:176, instanceof:238, open:267, module:269, requires:274, transitive:276, exports:278, to:280, opens:282, uses:284, provides:286, with:288, package:292, import:296, if:308, else:310, while:314, for:318, var:325, assert:332, switch:336, case:342, do:346, break:350, continue:354, return:358, throw:364, try:368, catch:372, finally:380};\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"##jQ]QPOOQ$wQPOOO(bQQO'#H^O*iQQO'#CbOOQO'#Cb'#CbO*pQPO'#CaO*xOSO'#CpOOQO'#Hc'#HcOOQO'#Cu'#CuO,eQPO'#D_O-OQQO'#HmOOQO'#Hm'#HmO/gQQO'#HhO/nQQO'#HhOOQO'#Hh'#HhOOQO'#Hg'#HgO1rQPO'#DUO2PQPO'#GnO4wQPO'#D_O5OQPO'#DzO*pQPO'#E[O5qQPO'#E[OOQO'#DV'#DVO7SQQO'#HaO9^QQO'#EeO9eQPO'#EdO9jQPO'#EfOOQO'#Hb'#HbO7jQQO'#HbO:pQQO'#FhO:wQPO'#ExO:|QPO'#E}O:|QPO'#FPOOQO'#Ha'#HaOOQO'#HY'#HYOOQO'#Gh'#GhOOQO'#HX'#HXO<^QPO'#FiOOQO'#HW'#HWOOQO'#Gg'#GgQ]QPOOOOQO'#Hs'#HsO<cQPO'#HsO<hQPO'#D{O<hQPO'#EVO<hQPO'#EQO<pQPO'#HpO=RQQO'#EfO*pQPO'#C`O=ZQPO'#C`O*pQPO'#FcO=`QPO'#FeO=kQPO'#FkO=kQPO'#FnO<hQPO'#FsO=pQPO'#FpO:|QPO'#FwO=kQPO'#FyO]QPO'#GOO=uQPO'#GQO>QQPO'#GSO>]QPO'#GUO=kQPO'#GWO:|QPO'#GXO>dQPO'#GZO?QQQO'#HiO?mQQO'#CuO?tQPO'#HxO@SQPO'#D_O@rQPO'#DpO?wQPO'#DqO@|QPO'#HxOA_QPO'#DpOAgQPO'#IROAlQPO'#E`OOQO'#Hr'#HrOOQO'#Gm'#GmQ$wQPOOOAtQPO'#HsOOQO'#H^'#H^OCsQQO,58{OOQO'#H['#H[OOOO'#Gi'#GiOEfOSO,59[OOQO,59[,59[OOQO'#Hi'#HiOFVQPO,59eOGXQPO,59yOOQO-E:f-E:fO*pQPO,58zOG{QPO,58zO*pQPO,5;}OHQQPO'#DQOHVQPO'#DQOOQO'#Gk'#GkOIVQQO,59jOOQO'#Dm'#DmOJqQPO'#HuOJ{QPO'#DlOKZQPO'#HtOKcQPO,5<_OKhQPO,59^OLRQPO'#CxOOQO,59c,59cOLYQPO,59bOLeQQO'#H^ONgQQO'#CbO!!iQPO'#D_O!#nQQO'#HmO!$OQQO,59pO!$VQPO'#DvO!$eQPO'#H|O!$mQPO,5:`O!$rQPO,5:`O!%YQPO,5;nO!%eQPO'#ITO!%pQPO,5;eO!%uQPO,5=YOOQO-E:l-E:lOOQO,5:f,5:fO!']QPO,5:fO!'dQPO,5:vO?tQPO,5<_O*pQPO,5:vO<hQPO,5:gO<hQPO,5:qO<hQPO,5:lO<hQPO,5<_O!'zQPO,59qO:|QPO,5:}O!(RQPO,5;QO:|QPO,59TO!(aQPO'#DXOOQO,5;O,5;OOOQO'#El'#ElOOQO'#Eo'#EoO:|QPO,5;UO:|QPO,5;UO:|QPO,5;UO:|QPO,5;UO:|QPO,5;UO:|QPO,5;UO:|QPO,5;UO:|QPO,5;UO:|QPO,5;UO:|QPO,5;fOOQO,5;i,5;iOOQO,5<S,5<SO!(hQPO,5;bO!(yQPO,5;dO!(hQPO'#CyO!)QQQO'#HmO!)`QQO,5;kO]QPO,5<TOOQO-E:e-E:eOOQO,5>_,5>_O!*sQPO,5:gO!+RQPO,5:qO!+ZQPO,5:lO!+fQPO,5>[O!$VQPO,5>[O!'iQPO,59UO!+qQQO,58zO!+yQQO,5;}O!,RQQO,5<PO*pQPO,5<PO:|QPO'#DUO]QPO,5<VO]QPO,5<YO!,ZQPO'#FrO]QPO,5<[O]QPO,5<aO!,kQQO,5<cO!,uQPO,5<eO!,zQPO,5<jOOQO'#Fj'#FjOOQO,5<l,5<lO!-PQPO,5<lOOQO,5<n,5<nO!-UQPO,5<nO!-ZQQO,5<pOOQO,5<p,5<pO>gQPO,5<rO!-bQQO,5<sO!-iQPO'#GdO!.oQPO,5<uO>gQPO,5<}O!2mQPO,59jO!2zQPO'#HuO!3RQPO,59xO!3WQPO,5>dO?tQPO,59xO!3cQPO,5:[OAlQPO,5:zO!3kQPO'#DrO?wQPO'#DrO!3vQPO'#HyO!4OQPO,5:]O?tQPO,5>dO!(hQPO,5>dOAgQPO,5>mOOQO,5:[,5:[O!$rQPO'#DtOOQO,5>m,5>mO!4TQPO'#EaOOQO,5:z,5:zO!7UQPO,5:zO!(hQPO'#DxOOQO-E:k-E:kOOQO,5:y,5:yO*pQPO,58}O!7ZQPO'#ChOOQO1G.k1G.kOOOO-E:g-E:gOOQO1G.v1G.vO!+qQQO1G.fO*pQPO1G.fO!7eQQO1G1iOOQO,59l,59lO!7mQPO,59lOOQO-E:i-E:iO!7rQPO,5>aO!8ZQPO,5:WO<hQPO'#GpO!8bQPO,5>`OOQO1G1y1G1yOOQO1G.x1G.xO!8{QPO'#CyO!9kQPO'#HmO!9uQPO'#CzO!:TQPO'#HlO!:]QPO,59dOOQO1G.|1G.|OLYQPO1G.|O!:sQPO,59eO!;QQQO'#H^O!;cQQO'#CbOOQO,5:b,5:bO<hQPO,5:cOOQO,5:a,5:aO!;tQQO,5:aOOQO1G/[1G/[O!;yQPO,5:bO!<[QPO'#GsO!<oQPO,5>hOOQO1G/z1G/zO!<wQPO'#DvO!=YQPO1G/zO!(hQPO'#GqO!=_QPO1G1YO:|QPO1G1YO<hQPO'#GyO!=gQPO,5>oOOQO1G1P1G1POOQO1G0Q1G0QO!=oQPO'#E]OOQO1G0b1G0bO!>`QPO1G1yO!'dQPO1G0bO!*sQPO1G0RO!+RQPO1G0]O!+ZQPO1G0WOOQO1G/]1G/]O!>eQQO1G.pO9eQPO1G0jO*pQPO1G0jO<pQPO'#HpO!@[QQO1G.pOOQO1G.p1G.pO!@aQQO1G0iOOQO1G0l1G0lO!@hQPO1G0lO!@sQQO1G.oO!AZQQO'#HqO!AhQPO,59sO!BzQQO1G0pO!DfQQO1G0pO!DmQQO1G0pO!FUQQO1G0pO!F]QQO1G0pO!GbQQO1G0pO!I]QQO1G0pO!IdQQO1G0pO!IkQQO1G0pO!IuQQO1G1QO!I|QQO'#HmOOQO1G0|1G0|O!KSQQO1G1OOOQO1G1O1G1OOOQO1G1o1G1oO!KjQPO'#D[O!(hQPO'#D|O!(hQPO'#D}OOQO1G0R1G0RO!KqQPO1G0RO!KvQPO1G0RO!LOQPO1G0RO!LZQPO'#EXOOQO1G0]1G0]O!LnQPO1G0]O!LsQPO'#ETO!(hQPO'#ESOOQO1G0W1G0WO!MmQPO1G0WO!MrQPO1G0WO!MzQPO'#EhO!NRQPO'#EhOOQO'#Gx'#GxO!NZQQO1G0mO# }QQO1G3vO9eQPO1G3vO#$PQPO'#FXOOQO1G.f1G.fOOQO1G1i1G1iO#$WQPO1G1kOOQO1G1k1G1kO#$cQQO1G1kO#$kQPO1G1qOOQO1G1t1G1tO+QQPO'#D_O-OQQO,5<bO#(cQPO,5<bO#(tQPO,5<^O#({QPO,5<^OOQO1G1v1G1vOOQO1G1{1G1{OOQO1G1}1G1}O:|QPO1G1}O#,oQPO'#F{OOQO1G2P1G2PO=kQPO1G2UOOQO1G2W1G2WOOQO1G2Y1G2YOOQO1G2[1G2[OOQO1G2^1G2^OOQO1G2_1G2_O#,vQQO'#H^O#-aQQO'#CbO-OQQO'#HmO#-zQQOOO#.hQQO'#EeO#.VQQO'#HbO!$VQPO'#GeO#.oQPO,5=OOOQO'#HQ'#HQO#.wQPO1G2aO#2uQPO'#G]O>gQPO'#GaOOQO1G2a1G2aO#2zQPO1G2iO#6xQPO,5>gOOQO1G/d1G/dOOQO1G4O1G4OO#7ZQPO1G/dOOQO1G/v1G/vOOQO1G0f1G0fO!7UQPO1G0fOOQO,5:^,5:^O!(hQPO'#DsO#7`QPO,5:^O?wQPO'#GrO#7kQPO,5>eOOQO1G/w1G/wOAgQPO'#H{O#7sQPO1G4OO?tQPO1G4OOOQO1G4X1G4XO!#YQPO'#DvO!!iQPO'#D_OOQO,5:{,5:{O#8OQPO,5:{O#8OQPO,5:{O#8VQQO'#HaO#9hQQO'#HbO#9rQQO'#EbO#9}QPO'#EbO#:VQPO'#IOOOQO,5:d,5:dOOQO1G.i1G.iO#:bQQO'#EeO#:rQQO'#H`O#;SQPO'#FTOOQO'#H`'#H`O#;^QPO'#H`O#;{QPO'#IWO#<TQPO,59SOOQO7+$Q7+$QO!+qQQO7+$QOOQO7+'T7+'TOOQO1G/W1G/WO#<YQPO'#DoO#<dQQO'#HvOOQO'#Hv'#HvOOQO1G/r1G/rOOQO,5=[,5=[OOQO-E:n-E:nO#<tQWO,58{O#<{QPO,59fOOQO,59f,59fO!(hQPO'#HoOKmQPO'#GjO#=ZQPO,5>WOOQO1G/O1G/OOOQO7+$h7+$hOOQO1G/{1G/{O#=cQQO1G/{OOQO1G/}1G/}O#=hQPO1G/{OOQO1G/|1G/|O<hQPO1G/}OOQO,5=_,5=_OOQO-E:q-E:qOOQO7+%f7+%fOOQO,5=],5=]OOQO-E:o-E:oO:|QPO7+&tOOQO7+&t7+&tOOQO,5=e,5=eOOQO-E:w-E:wO#=mQPO'#EUO#={QPO'#EUOOQO'#Gw'#GwO#>dQPO,5:wOOQO,5:w,5:wOOQO7+'e7+'eOOQO7+%|7+%|OOQO7+%m7+%mO!KqQPO7+%mO!KvQPO7+%mO!LOQPO7+%mOOQO7+%w7+%wO!LnQPO7+%wOOQO7+%r7+%rO!MmQPO7+%rO!MrQPO7+%rOOQO7+&U7+&UOOQO'#Ee'#EeO9eQPO7+&UO9eQPO,5>[O#?TQPO7+$[OOQO7+&T7+&TOOQO7+&W7+&WO:|QPO'#GlO#?cQPO,5>]OOQO1G/_1G/_O:|QPO7+&lO#?nQQO,59eO#@tQPO,59vOOQO,59v,59vOOQO,5:h,5:hOOQO'#EP'#EPOOQO,5:i,5:iO#@{QPO'#EYO<hQPO'#EYO#A^QPO'#IPO#AiQPO,5:sO?tQPO'#HxO!(hQPO'#HxO#AqQPO'#DpOOQO'#Gu'#GuO#AxQPO,5:oOOQO,5:o,5:oOOQO,5:n,5:nOOQO,5;S,5;SO#BrQQO,5;SO#ByQPO,5;SOOQO-E:v-E:vOOQO7+&X7+&XOOQO7+)b7+)bO#CQQQO7+)bOOQO'#G|'#G|O#DqQPO,5;sOOQO,5;s,5;sO#DxQPO'#FYO*pQPO'#FYO*pQPO'#FYO*pQPO'#FYO#EWQPO7+'VO#E]QPO7+'VOOQO7+'V7+'VO]QPO7+']O#EhQPO1G1|O?tQPO1G1|O#EvQQO1G1xO!(aQPO1G1xO#E}QPO1G1xO#FUQQO7+'iOOQO'#HP'#HPO#F]QPO,5<gOOQO,5<g,5<gO#FdQPO'#HsO:|QPO'#F|O#FlQPO7+'pO#FqQPO,5=PO?tQPO,5=PO#FvQPO1G2jO#HPQPO1G2jOOQO1G2j1G2jOOQO-E;O-E;OOOQO7+'{7+'{O!<[QPO'#G_O>gQPO,5<wOOQO,5<{,5<{O#HXQPO7+(TOOQO7+(T7+(TO#LVQPO1G4ROOQO7+%O7+%OOOQO7+&Q7+&QO#LhQPO,5:_OOQO1G/x1G/xOOQO,5=^,5=^OOQO-E:p-E:pOOQO7+)j7+)jO#LsQPO7+)jO!:bQPO,5:aOOQO1G0g1G0gO#MOQPO1G0gO#MVQPO,59qO#MkQPO,5:|O9eQPO,5:|O!(hQPO'#GtO#MpQPO,5>jO#M{QPO,59TO#NSQPO'#IVO#N[QPO,5;oO*pQPO'#G{O#NaQPO,5>rOOQO1G.n1G.nOOQO<<Gl<<GlO#NiQPO'#HwO#NqQPO,5:ZOOQO1G/Q1G/QOOQO,5>Z,5>ZOOQO,5=U,5=UOOQO-E:h-E:hO#NvQPO7+%gOOQO7+%g7+%gOOQO7+%i7+%iOOQO<<J`<<J`O$ ^QPO'#H^O$ eQPO'#CbO$ lQPO,5:pO$ qQPO,5:xO#=mQPO,5:pOOQO-E:u-E:uOOQO1G0c1G0cOOQO<<IX<<IXO!KqQPO<<IXO!KvQPO<<IXOOQO<<Ic<<IcOOQO<<I^<<I^O!MmQPO<<I^OOQO<<Ip<<IpO$ vQQO<<GvO9eQPO<<IpO*pQPO<<IpOOQO<<Gv<<GvO$#mQQO,5=WOOQO-E:j-E:jO$#zQQO<<JWOOQO1G/b1G/bOOQO,5:t,5:tO$$bQPO,5:tO$$pQPO,5:tO$%RQPO'#GvO$%iQPO,5>kO$%tQPO'#EZOOQO1G0_1G0_O$%{QPO1G0_O?tQPO,5:pOOQO-E:s-E:sOOQO1G0Z1G0ZOOQO1G0n1G0nO$&QQQO1G0nOOQO<<L|<<L|OOQO-E:z-E:zOOQO1G1_1G1_O$&XQQO,5;tOOQO'#G}'#G}O#DxQPO,5;tOOQO'#IX'#IXO$&aQQO,5;tO$&rQQO,5;tOOQO<<Jq<<JqO$&zQPO<<JqOOQO<<Jw<<JwO:|QPO7+'hO$'PQPO7+'hO!(aQPO7+'dO$'_QPO7+'dO$'dQQO7+'dOOQO<<KT<<KTOOQO-E:}-E:}OOQO1G2R1G2ROOQO,5<h,5<hO$'kQQO,5<hOOQO<<K[<<K[O:|QPO1G2kO$'rQPO1G2kOOQO,5=n,5=nOOQO7+(U7+(UO$'wQPO7+(UOOQO-E;Q-E;QO$)fQWO'#HhO$)QQWO'#HhO$)mQPO'#G`O<hQPO,5<yO!$VQPO,5<yOOQO1G2c1G2cOOQO<<Ko<<KoO$*OQPO1G/yOOQO<<MU<<MUOOQO7+&R7+&RO$*ZQPO1G0jO$*fQQO1G0hOOQO1G0h1G0hO$*nQPO1G0hOOQO,5=`,5=`OOQO-E:r-E:rO$*sQQO1G.oOOQO1G1[1G1[O$*}QPO'#GzO$+[QPO,5>qOOQO1G1Z1G1ZO$+dQPO'#FUOOQO,5=g,5=gOOQO-E:y-E:yO$+iQPO'#GoO$+vQPO,5>cOOQO1G/u1G/uOOQO<<IR<<IROOQO1G0[1G0[O$,OQPO1G0dO$,TQPO1G0[O$,YQPO1G0dOOQOAN>sAN>sO!KqQPOAN>sOOQOAN>xAN>xOOQOAN?[AN?[O9eQPOAN?[OOQO1G0`1G0`O$,_QPO1G0`OOQO,5=b,5=bOOQO-E:t-E:tO$,mQPO,5:uOOQO7+%y7+%yOOQO7+&Y7+&YOOQO1G1`1G1`O$,tQQO1G1`OOQO-E:{-E:{O$,|QQO'#IYO$,wQPO1G1`O$&gQPO1G1`O*pQPO1G1`OOQOAN@]AN@]O$-XQQO<<KSO:|QPO<<KSO$-`QPO<<KOOOQO<<KO<<KOO!(aQPO<<KOOOQO1G2S1G2SO$-eQQO7+(VO:|QPO7+(VOOQO<<Kp<<KpP!-iQPO'#HSO!$VQPO'#HRO$-oQPO,5<zO$-zQPO1G2eO<hQPO1G2eO9eQPO7+&SO$.PQPO7+&SOOQO7+&S7+&SOOQO,5=f,5=fOOQO-E:x-E:xO#M{QPO,5;pOOQO,5=Z,5=ZOOQO-E:m-E:mO$.UQPO7+&OOOQO7+%v7+%vO$.dQPO7+&OOOQOG24_G24_OOQOG24vG24vOOQO7+%z7+%zOOQO7+&z7+&zO*pQPO'#HOO$.iQPO,5>tO$.qQPO7+&zO$.vQQO'#IZOOQOAN@nAN@nO$/RQQOAN@nOOQOAN@jAN@jO$/YQPOAN@jO$/_QQO<<KqO$/iQPO,5=mOOQO-E;P-E;POOQO7+(P7+(PO$/zQPO7+(PO$0PQPO<<InOOQO<<In<<InO$0UQPO<<IjOOQO<<Ij<<IjO#M{QPO<<IjO$0UQPO<<IjO$0dQQO,5=jOOQO-E:|-E:|OOQO<<Jf<<JfO$0oQPO,5>uOOQOG26YG26YOOQOG26UG26UOOQO<<Kk<<KkOOQOAN?YAN?YOOQOAN?UAN?UO#M{QPOAN?UO$0wQPOAN?UO$0|QPOAN?UO$1[QPOG24pOOQOG24pG24pO#M{QPOG24pOOQOLD*[LD*[O$1aQPOLD*[OOQO!$'Mv!$'MvO*pQPO'#CaO$1fQQO'#H^O$1yQQO'#CbO!(hQPO'#Cy\",\n  stateData: \"$2i~OPOSQOS%yOS~OZ`O_VO`VOaVObVOcVOeVOg^Oh^Op!POv{OwkOz!OO}cO!PvO!SyO!TyO!UyO!VyO!WyO!XyO!YyO!ZzO![!`O!]yO!^yO!_yO!u}O!z|O#fpO#roO#tpO#upO#y!RO#z!QO$W!SO$Y!TO$`!UO$c!VO$e!XO$h!WO$l!YO$n!ZO$s![O$u!]O$w!^O$y!_O$|!aO%O!bO%}TO&PRO&RQO&XUO&tdO~Og^Oh^Ov{O}cO!P!mO!SyO!TyO!UyO!VyO!W!pO!XyO!YyO!ZzO!]yO!^yO!_yO!u}O!z|O%}TO&P!cO&R!dO&_!hO&tdO~OWiXW&QXZ&QXuiXu&QX!P&QX!b&QX#]&QX#_&QX#a&QX#b&QX#d&QX#e&QX#f&QX#g&QX#h&QX#i&QX#k&QX#o&QX#r&QX%}iX&PiX&RiX&^&QX&_iX&_&QX&n&QX&viX&v&QX&x!aX~O#p$^X~P&bOWUXW&]XZUXuUXu&]X!PUX!bUX#]UX#_UX#aUX#bUX#dUX#eUX#fUX#gUX#hUX#iUX#kUX#oUX#rUX%}&]X&P&]X&R&]X&^UX&_UX&_&]X&nUX&vUX&v&]X&x!aX~O#p$^X~P(iO&PSO&R!qO~O&W!vO&Y!tO~Og^Oh^O!SyO!TyO!UyO!VyO!WyO!XyO!YyO!ZzO!]yO!^yO!_yO%}TO&P!wO&RWOg!RXh!RX$h!RX&P!RX&R!RX~O#y!|O#z!{O$W!}Ov!RX!u!RX!z!RX&t!RX~P+QOW#XOu#OO%}TO&P#SO&R#SO&v&aX~OW#[Ou&[X%}&[X&P&[X&R&[X&v&[XY&[Xw&[X&n&[X&q&[XZ&[Xq&[X&^&[X!P&[X#_&[X#a&[X#b&[X#d&[X#e&[X#f&[X#g&[X#h&[X#i&[X#k&[X#o&[X#r&[X}&[X!r&[X#p&[Xs&[X|&[X~O&_#YO~P-dO&_&[X~P-dOZ`O_VO`VOaVObVOcVOeVOg^Oh^Op!POwkOz!OO!SyO!TyO!UyO!VyO!WyO!XyO!YyO!ZzO!]yO!^yO!_yO#fpO#roO#tpO#upO%}TO&XUO~O&P#^O&R#]OY&pP~P/uO%}TOg%bXh%bXv%bX!S%bX!T%bX!U%bX!V%bX!W%bX!X%bX!Y%bX!Z%bX!]%bX!^%bX!_%bX!u%bX!z%bX$h%bX&P%bX&R%bX&t%bX&_%bX~O!SyO!TyO!UyO!VyO!WyO!XyO!YyO!ZzO!]yO!^yO!_yOg!RXh!RXv!RX!u!RX!z!RX&P!RX&R!RX&t!RX&_!RX~O$h!RX~P3gO|#kO~P]Og^Oh^Ov#pO!u#rO!z#qO&P!wO&RWO&t#oO~O$h#sO~P5VOu#uO&v#vO!P&TX#_&TX#a&TX#b&TX#d&TX#e&TX#f&TX#g&TX#h&TX#i&TX#k&TX#o&TX#r&TX&^&TX&_&TX&n&TX~OW#tOY&TX#p&TXs&TXq&TX|&TX~P5xO!b#wO#]#wOW&UXu&UX!P&UX#_&UX#a&UX#b&UX#d&UX#e&UX#f&UX#g&UX#h&UX#i&UX#k&UX#o&UX#r&UX&^&UX&_&UX&n&UX&v&UXY&UX#p&UXs&UXq&UX|&UX~OZ#XX~P7jOZ#xO~O&v#vO~O#_#|O#a#}O#b$OO#d$QO#e$RO#f$SO#g$TO#h$UO#i$UO#k$YO#o$VO#r$WO&^#zO&_#zO&n#{O~O!P$XO~P9oO&x$ZO~OZ`O_VO`VOaVObVOcVOeVOg^Oh^Op!POwkOz!OO#fpO#roO#tpO#upO%}TO&P0qO&R0pO&XUO~O#p$_O~O![$aO~O&P#SO&R#SO~Og^Oh^O&P!wO&RWO&_#YO~OW$gO&v#vO~O#z!{O~O!W$kO&PSO&R!qO~OZ$lO~OZ$oO~O!P$vO&P$uO&R$uO~O!P$xO&P$uO&R$uO~O!P${O~P:|OZ%OO}cO~OW&]Xu&]X%}&]X&P&]X&R&]X&_&]X~OZ!aX~P>lOWiXuiX%}iX&PiX&RiX&_iX~OZ!aX~P?XOu#OO%}TO&P#SO&R#SO~O%}TO~P3gOg^Oh^Ov#pO!u#rO!z#qO&_!hO&t#oO~O&P!cO&R!dO~P@ZOg^Oh^O%}TO&P!cO&R!dO~O}cO!P%aO~OZ%bO~O}%dO!m%gO~O}cOg&gXh&gXv&gX!S&gX!T&gX!U&gX!V&gX!W&gX!X&gX!Y&gX!Z&gX!]&gX!^&gX!_&gX!u&gX!z&gX%}&gX&P&gX&R&gX&_&gX&t&gX~OW%jOZ%kOgTahTa%}Ta&PTa&RTa~OvTa!STa!TTa!UTa!VTa!WTa!XTa!YTa!ZTa!]Ta!^Ta!_Ta!uTa!zTa#yTa#zTa$WTa$hTa&tTa&_TauTaYTaqTa|Ta!PTa~PC[O&W%nO&Y!tO~Ou#OO%}TOqma&^maYma&nma!Pma~O&vma}ma!rma~PEnO!SyO!TyO!UyO!VyO!WyO!XyO!YyO!ZzO!]yO!^yO!_yO~Og!Rah!Rav!Ra!u!Ra!z!Ra$h!Ra&P!Ra&R!Ra&t!Ra&_!Ra~PFdO#z%pO~Os%rO~Ou%sO%}TO~Ou#OO%}ra&Pra&Rra&vraYrawra&nra&qra!Pra&^raqra~OWra#_ra#ara#bra#dra#era#fra#gra#hra#ira#kra#ora#rra&_ra#prasra|ra~PH_Ou#OO%}TOq&iX!P&iX!b&iX~OY&iX#p&iX~PJ`O!b%vOq!`X!P!`XY!`X~Oq%wO!P&hX~O!P%yO~Ov%zO~Og^Oh^O%}0oO&P!wO&RWO&b%}O~O&^&`P~PKmO%}TO&P!wO&RWO~OW&QXYiXY!aXY&QXZ&QXq!aXu&QXwiX!b&QX#]&QX#_&QX#a&QX#b&QX#d&QX#e&QX#f&QX#g&QX#h&QX#i&QX#k&QX#o&QX#r&QX&^&QX&_&QX&niX&n&QX&qiX&viX&v&QX&x!aX~P?XOWUXYUXY!aXY&]XZUXq!aXuUXw&]X!bUX#]UX#_UX#aUX#bUX#dUX#eUX#fUX#gUX#hUX#iUX#kUX#oUX#rUX&^UX&_UX&nUX&n&]X&q&]X&vUX&v&]X&x!aX~P>lOg^Oh^O%}TO&P!wO&RWOg!RXh!RX&P!RX&R!RX~PFdOu#OOw&XO%}TO&P&UO&R&TO&q&WO~OW#XOY&aX&n&aX&v&aX~P!#YOY&ZO~P9oOg^Oh^O&P!wO&RWO~Oq&]OY&pX~OY&_O~Og^Oh^O%}TO&P!wO&RWOY&pP~PFdOY&dO&n&bO&v#vO~Oq&eO&x$ZOY&wX~OY&gO~O%}TOg%bah%bav%ba!S%ba!T%ba!U%ba!V%ba!W%ba!X%ba!Y%ba!Z%ba!]%ba!^%ba!_%ba!u%ba!z%ba$h%ba&P%ba&R%ba&t%ba&_%ba~O|&hO~P]O}&iO~Op&uOw&vO&PSO&R!qO&_#YO~Oz&tO~P!'iOz&xO&PSO&R!qO&_#YO~OY&eP~P:|Og^Oh^O%}TO&P!wO&RWO~O}cO~P:|OW#XOu#OO%}TO&v&aX~O#r$WO!P#sa#_#sa#a#sa#b#sa#d#sa#e#sa#f#sa#g#sa#h#sa#i#sa#k#sa#o#sa&^#sa&_#sa&n#saY#sa#p#sas#saq#sa|#sa~Oo'_O}'^O!r'`O&_!hO~O}'eO!r'`O~Oo'iO}'hO&_!hO~OZ#xOu'mO%}TO~OW%jO}'sO~OW%jO!P'uO~OW'vO!P'wO~O$h!WO&P0qO&R0pO!P&eP~P/uO!P(SO#p(TO~P9oO}(UO~O$c(WO~O!P(XO~O!P(YO~O!P(ZO~P9oO!P(]O~P9oOZ$lO_VO`VOaVObVOcVOeVOg^Oh^Op!POwkOz!OO%}TO&P(_O&R(^O&XUO~PFdO%Q(hO%U(iOZ$}a_$}a`$}aa$}ab$}ac$}ae$}ag$}ah$}ap$}av$}aw$}az$}a}$}a!P$}a!S$}a!T$}a!U$}a!V$}a!W$}a!X$}a!Y$}a!Z$}a![$}a!]$}a!^$}a!_$}a!u$}a!z$}a#f$}a#r$}a#t$}a#u$}a#y$}a#z$}a$W$}a$Y$}a$`$}a$c$}a$e$}a$h$}a$l$}a$n$}a$s$}a$u$}a$w$}a$y$}a$|$}a%O$}a%w$}a%}$}a&P$}a&R$}a&X$}a&t$}a|$}a$a$}a$q$}a~O}ra!rra'Ora~PH_OZ%bO~PJ`O!P(mO~O!m%gO}&la!P&la~O}cO!P(pO~Oo(tOq!fX&^!fX~Oq(vO&^&mX~O&^(xO~OZ`O_VO`VOaVObVOcVOeVOg^Oh^Op)UOv{Ow)TOz!OO|)PO}cO!PvO![!`O!u}O!z|O#fpO#roO#tpO#upO#y!RO#z!QO$W!SO$Y!TO$`!UO$c!VO$e!XO$h!WO$l!YO$n!ZO$s![O$u!]O$w!^O$y!_O$|!aO%O!bO%}TO&PRO&RQO&XUO&_#YO&tdO~PFdO}%dO~O})]OY&zP~P:|OW%jO!P)dO~Os)eO~Ou#OO%}TOq&ia!P&ia!b&iaY&ia#p&ia~O})fO~P:|Oq%wO!P&ha~Og^Oh^O%}0oO&P!wO&RWO~O&b)mO~P!8jOu#OO%}TOq&aX&^&aXY&aX&n&aX!P&aX~O}&aX!r&aX~P!9SOo)oOp)oOqnX&^nX~Oq)pO&^&`X~O&^)rO~Ou#OOw)tO%}TO&PSO&R!qO~OYma&nma&vma~P!:bOW&QXY!aXq!aXu!aX%}!aX~OWUXY!aXq!aXu!aX%}!aX~OW)wO~Ou#OO%}TO&P#SO&R#SO&q)yO~Og^Oh^O%}TO&P!wO&RWO~PFdOq&]OY&pa~Ou#OO%}TO&P#SO&R#SO&q&WO~OY)|O~OY*PO&n&bO~Oq&eOY&wa~Og^Oh^Ov{O|*XO!u}O%}TO&P!wO&RWO&tdO~PFdO!P*YO~OW^iZ#XXu^i!P^i!b^i#]^i#_^i#a^i#b^i#d^i#e^i#f^i#g^i#h^i#i^i#k^i#o^i#r^i&^^i&_^i&n^i&v^iY^i#p^is^iq^i|^i~OW*iO~Os*jO~P9oOz*kO&PSO&R!qO~O!P]iY]i#p]is]iq]i|]i~P9oOq*lOY&eX!P&eX~P9oOY*nO~O#f$SO#g$TO#k$YO#r$WO!P#^i#_#^i#a#^i#b#^i#d#^i#e#^i#o#^i&^#^i&_#^i&n#^iY#^i#p#^is#^iq#^i|#^i~O#h$UO#i$UO~P!AmO#_#|O#d$QO#e$RO#f$SO#g$TO#h$UO#i$UO#k$YO#r$WO&^#zO&_#zO&n#{O!P#^i#b#^i#o#^iY#^i#p#^is#^iq#^i|#^i~O#a#^i~P!CUO#a#}O~P!CUO#_#|O#f$SO#g$TO#h$UO#i$UO#k$YO#r$WO&^#zO&_#zO!P#^i#a#^i#b#^i#d#^i#e#^i#o#^iY#^i#p#^is#^iq#^i|#^i~O&n#^i~P!DtO&n#{O~P!DtO#f$SO#g$TO#k$YO#r$WO!P#^i#a#^i#b#^i#e#^i#o#^iY#^i#p#^is#^iq#^i|#^i~O#_#|O#d$QO#h$UO#i$UO&^#zO&_#zO&n#{O~P!FdO#k$YO#r$WO!P#^i#_#^i#a#^i#b#^i#d#^i#e#^i#f#^i#h#^i#i#^i#o#^i&^#^i&_#^i&n#^iY#^i#p#^is#^iq#^i|#^i~O#g$TO~P!G{O#g#^i~P!G{O#h#^i#i#^i~P!AmO#p*oO~P9oO#_&aX#a&aX#b&aX#d&aX#e&aX#f&aX#g&aX#h&aX#i&aX#k&aX#o&aX#r&aX&_&aX#p&aXs&aX|&aX~P!9SO!P#liY#li#p#lis#liq#li|#li~P9oO|*rO~P$wO}'^O~O}'^O!r'`O~Oo'_O}'^O!r'`O~O%}TO&P#SO&R#SO|&sP!P&sP~PFdO}'eO~Og^Oh^Ov{O|+PO!P*}O!u}O!z|O%}TO&P!wO&RWO&_!hO&tdO~PFdO}'hO~Oo'iO}'hO~Os+RO~P:|Ou+TO%}TO~Ou'mO})fO%}TOW#Zi!P#Zi#_#Zi#a#Zi#b#Zi#d#Zi#e#Zi#f#Zi#g#Zi#h#Zi#i#Zi#k#Zi#o#Zi#r#Zi&^#Zi&_#Zi&n#Zi&v#ZiY#Zi#p#Zis#Ziq#Zi|#Zi~O}'^OW&diu&di!P&di#_&di#a&di#b&di#d&di#e&di#f&di#g&di#h&di#i&di#k&di#o&di#r&di&^&di&_&di&n&di&v&diY&di#p&dis&diq&di|&di~O#}+]O$P+^O$R+^O$S+_O$T+`O~O|+[O~P##nO$Z+aO&PSO&R!qO~OW+bO!P+cO~O$a+dOZ$_i_$_i`$_ia$_ib$_ic$_ie$_ig$_ih$_ip$_iv$_iw$_iz$_i}$_i!P$_i!S$_i!T$_i!U$_i!V$_i!W$_i!X$_i!Y$_i!Z$_i![$_i!]$_i!^$_i!_$_i!u$_i!z$_i#f$_i#r$_i#t$_i#u$_i#y$_i#z$_i$W$_i$Y$_i$`$_i$c$_i$e$_i$h$_i$l$_i$n$_i$s$_i$u$_i$w$_i$y$_i$|$_i%O$_i%w$_i%}$_i&P$_i&R$_i&X$_i&t$_i|$_i$q$_i~Og^Oh^O$h#sO&P!wO&RWO~O!P+hO~P:|O!P+iO~OZ`O_VO`VOaVObVOcVOeVOg^Oh^Op!POv{OwkOz!OO}cO!PvO!SyO!TyO!UyO!VyO!WyO!XyO!YyO!Z+nO![!`O!]yO!^yO!_yO!u}O!z|O#fpO#roO#tpO#upO#y!RO#z!QO$W!SO$Y!TO$`!UO$c!VO$e!XO$h!WO$l!YO$n!ZO$q+oO$s![O$u!]O$w!^O$y!_O$|!aO%O!bO%}TO&PRO&RQO&XUO&tdO~O|+mO~P#)QOW&QXY&QXZ&QXu&QX!P&QX&viX&v&QX~P?XOWUXYUXZUXuUX!PUX&vUX&v&]X~P>lOW#tOu#uO&v#vO~OW&UXY%XXu&UX!P%XX&v&UX~OZ#XX~P#.VOY+uO!P+sO~O%Q(hO%U(iOZ$}i_$}i`$}ia$}ib$}ic$}ie$}ig$}ih$}ip$}iv$}iw$}iz$}i}$}i!P$}i!S$}i!T$}i!U$}i!V$}i!W$}i!X$}i!Y$}i!Z$}i![$}i!]$}i!^$}i!_$}i!u$}i!z$}i#f$}i#r$}i#t$}i#u$}i#y$}i#z$}i$W$}i$Y$}i$`$}i$c$}i$e$}i$h$}i$l$}i$n$}i$s$}i$u$}i$w$}i$y$}i$|$}i%O$}i%w$}i%}$}i&P$}i&R$}i&X$}i&t$}i|$}i$a$}i$q$}i~OZ+xO~O%Q(hO%U(iOZ%Vi_%Vi`%Via%Vib%Vic%Vie%Vig%Vih%Vip%Viv%Viw%Viz%Vi}%Vi!P%Vi!S%Vi!T%Vi!U%Vi!V%Vi!W%Vi!X%Vi!Y%Vi!Z%Vi![%Vi!]%Vi!^%Vi!_%Vi!u%Vi!z%Vi#f%Vi#r%Vi#t%Vi#u%Vi#y%Vi#z%Vi$W%Vi$Y%Vi$`%Vi$c%Vi$e%Vi$h%Vi$l%Vi$n%Vi$s%Vi$u%Vi$w%Vi$y%Vi$|%Vi%O%Vi%w%Vi%}%Vi&P%Vi&R%Vi&X%Vi&t%Vi|%Vi$a%Vi$q%Vi~Ou#OO%}TO}&oa!P&oa!m&oa~O!P,OO~Oo(tOq!fa&^!fa~Oq(vO&^&ma~O!m%gO}&li!P&li~O|,XO~P]OW,ZO~P5xOW&UXu&UX#_&UX#a&UX#b&UX#d&UX#e&UX#f&UX#g&UX#h&UX#i&UX#k&UX#o&UX#r&UX&^&UX&_&UX&n&UX&v&UX~OZ#xO!P&UX~P#8^OW$gOZ#xO&v#vO~Op,]Ow,]O~Oq,^O}&rX!P&rX~O!b,`O#]#wOY&UXZ#XX~P#8^OY&SXq&SX|&SX!P&SX~P9oO})]O|&yP~P:|OY&SXg%[Xh%[X%}%[X&P%[X&R%[Xq&SX|&SX!P&SX~Oq,cOY&zX~OY,eO~O})fO|&kP~P:|Oq&jX!P&jX|&jXY&jX~P9oO&bTa~PC[Oo)oOp)oOqna&^na~Oq)pO&^&`a~OW,mO~Ow,nO~Ou#OO%}TO&P,rO&R,qO~Og^Oh^Ov#pO!u#rO&P!wO&RWO&t#oO~Og^Oh^Ov{O|,wO!u}O%}TO&P!wO&RWO&tdO~PFdOw-SO&PSO&R!qO&_#YO~Oq*lOY&ea!P&ea~O#_ma#ama#bma#dma#ema#fma#gma#hma#ima#kma#oma#rma&_ma#pmasma|ma~PEnO|-WO~P$wOZ#xO}'^Oq!|X|!|X!P!|X~Oq-[O|&sX!P&sX~O|-_O!P-^O~O&_!hO~P5VOg^Oh^Ov{O|-cO!P*}O!u}O!z|O%}TO&P!wO&RWO&_!hO&tdO~PFdOs-dO~P9oOs-dO~P:|O}'^OW&dqu&dq!P&dq#_&dq#a&dq#b&dq#d&dq#e&dq#f&dq#g&dq#h&dq#i&dq#k&dq#o&dq#r&dq&^&dq&_&dq&n&dq&v&dqY&dq#p&dqs&dqq&dq|&dq~O|-hO~P##nO!W-lO$O-lO&PSO&R!qO~O!P-oO~O$Z-pO&PSO&R!qO~O!b%vO#p-rOq!`X!P!`X~O!P-tO~P9oO!P-tO~P:|O!P-wO~P9oO|-yO~P#)QO![$aO#p-zO~O!P-|O~O!b-}O~OY.QOZ$lO_VO`VOaVObVOcVOeVOg^Oh^Op!POwkOz!OO%}TO&P(_O&R(^O&XUO~PFdOY.QO!P.RO~O%Q(hO%U(iOZ%Vq_%Vq`%Vqa%Vqb%Vqc%Vqe%Vqg%Vqh%Vqp%Vqv%Vqw%Vqz%Vq}%Vq!P%Vq!S%Vq!T%Vq!U%Vq!V%Vq!W%Vq!X%Vq!Y%Vq!Z%Vq![%Vq!]%Vq!^%Vq!_%Vq!u%Vq!z%Vq#f%Vq#r%Vq#t%Vq#u%Vq#y%Vq#z%Vq$W%Vq$Y%Vq$`%Vq$c%Vq$e%Vq$h%Vq$l%Vq$n%Vq$s%Vq$u%Vq$w%Vq$y%Vq$|%Vq%O%Vq%w%Vq%}%Vq&P%Vq&R%Vq&X%Vq&t%Vq|%Vq$a%Vq$q%Vq~Ou#OO%}TO}&oi!P&oi!m&oi~O&n&bOq!ga&^!ga~O!m%gO}&lq!P&lq~O|.^O~P]Op.`Ow&vOz&tO&PSO&R!qO&_#YO~O!P.aO~Oq,^O}&ra!P&ra~O})]O~P:|Oq.gO|&yX~O|.iO~Oq,cOY&za~Oq.mO|&kX~O|.oO~Ow.pO~Oq!aXu!aX!P!aX!b!aX%}!aX~OZ&QX~P#N{OZUX~P#N{O!P.qO~OZ.rO~OW^yZ#XXu^y!P^y!b^y#]^y#_^y#a^y#b^y#d^y#e^y#f^y#g^y#h^y#i^y#k^y#o^y#r^y&^^y&_^y&n^y&v^yY^y#p^ys^yq^y|^y~OY%`aq%`a!P%`a~P9oO!P#nyY#ny#p#nys#nyq#ny|#ny~P9oO}'^Oq!|a|!|a!P!|a~OZ#xO}'^Oq!|a|!|a!P!|a~O%}TO&P#SO&R#SOq%jX|%jX!P%jX~PFdOq-[O|&sa!P&sa~O|!}X~P$wO|/PO~Os/QO~P9oOW%jO!P/RO~OW%jO$Q/WO&PSO&R!qO!P&|P~OW%jO$U/XO~O!P/YO~O!b%vO#p/[Oq!`X!P!`X~OY/^O~O!P/_O~P9oO#p/`O~P9oO!b/bO~OY/cOZ$lO_VO`VOaVObVOcVOeVOg^Oh^Op!POwkOz!OO%}TO&P(_O&R(^O&XUO~PFdOW#[Ou&[X%}&[X&P&[X&R&[X'O&[X~O&_#YO~P$)QOu#OO%}TO'O/eO&P%SX&R%SX~O&n&bOq!gi&^!gi~Op/iO&PSO&R!qO~OW*iOZ#xO~O!P/kO~OY&SXq&SX~P9oO})]Oq%nX|%nX~P:|Oq.gO|&ya~O!b/nO~O})fOq%cX|%cX~P:|Oq.mO|&ka~OY/qO~O!P/rO~OZ/sO~O}'^Oq!|i|!|i!P!|i~O|!}a~P$wOW%jO!P/wO~OW%jOq/xO!P&|X~OY/|O~P9oOY0OO~OY%Xq!P%Xq~P9oO'O/eO&P%Sa&R%Sa~OY0TO~O!P0WO~Ou#OO!P0YO!Z0ZO%}TO~OY0[O~Oq/xO!P&|a~O!P0_O~OW%jOq/xO!P&}X~OY0aO~P9oOY0bO~OY%Xy!P%Xy~P9oOu#OO%}TO&P%ua&R%ua'O%ua~OY0cO~O!P0dO~Ou#OO!P0eO!Z0fO%}TO~OW%jOq%ra!P%ra~Oq/xO!P&}a~O!P0jO~Ou#OO!P0jO!Z0kO%}TO~O!P0lO~O!P0nO~O#p&QXY&QXs&QXq&QX|&QX~P&bO#pUXYUXsUXqUX|UX~P(iO`Q_P#g%y&P&Xc&X~\",\n  goto: \"#+S'OPPPP'P'd*x.OP'dPP.d.h0PPPPPP1nP3ZPP4v7l:[<z=d?[PPP?bPA{PPPBu3ZPDqPPElPFcFkPPPPPPPPPPPPGvH_PKjKrLOLjLpLvNiNmNmNuP! U!!^!#R!#]P!#r!!^P!#x!$S!!y!$cP!%S!%^!%d!!^!%g!%mFcFc!%q!%{!&O3Z!'m3Z3Z!)iP.hP!)mPP!*_PPPPPP.hP.h!+O.hPP.hP.hPP.h!,g!,qPP!,w!-QPPPPPPPP'PP'PPP!-U!-U!-i!-UPP!-UP!-UP!.S!.VP!-U!.m!-UP!-UP!.p!.sP!-UP!-UP!-UP!-UP!-U!-UP!-UP!.wP!.}!/Q!/WP!-U!/d!/gP!/o!0R!4T!4Z!4a!5g!5m!5{!7R!7X!7_!7i!7o!7u!7{!8R!8X!8_!8e!8k!8q!8w!8}!9T!9_!9e!9o!9uPPP!9{!-U!:pP!>WP!?[P!Ap!BW!E]3ZPPP!F|!Jm!MaPP#!P#!SP#$`#$f#&V#&f#&n#'p#(Y#)T#)^#)a#)oP#)r#*OP#*V#*^P#*aP#*lP#*o#*r#*u#*y#+PstOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,Y'urOPXY`acopx!Y![!_!a!e!f!h!i!o!x#P#T#Y#[#_#`#e#i#l#n#u#w#x#|#}$O$P$Q$R$S$T$U$V$Y$Z$[$]$_$e$l$m$n$o$p$q%O%S%V%Z%^%_%b%d%g%k%u%v%{%|&R&S&[&]&`&b&d&i'X'^'_'`'e'h'i'm'n'p'{'|(O(T(U(`(l(t(v({(})O)Q)R)])f)o)p*P*T*W*l*o*p*q*z*{+O+T+d+f+h+i+l+o+r+s+x+},W,Y,^,`,u-[-^-a-r-t-}.R.V.g.m/O/[/_/b/d/n/q0R0X0Z0[0f0h0k0r#xhO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%d%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o,Y,`-r-t-}.g.m/[/_/b/n0Z0f0kt!sT!Q!S!T!{!}$k%p+]+^+_+`-k-m/W/X/x0oQ#mdS&Y#`(}Q&l#oU&q#t$g,ZQ&x#vW(b%O+s.R/dU)Y%j'v+bQ)Z%kS)u&S,WU*f&s-R._Q*k&yQ,t*TQ-P*iQ.j,cR.t,uu!sT!Q!S!T!{!}$k%p+]+^+_+`-k-m/W/X/x0oT%l!r)l#{qO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o,Y,`-r-t-}.g.m/[/_/b/n0Z0f0k#zlO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o,Y,`-r-t-}.g.m/[/_/b/n0Z0f0kX(c%O+s.R/d$TVO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%O%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o+s,Y,`-r-t-}.R.g.m/[/_/b/d/n0Z0f0k$TkO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%O%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o+s,Y,`-r-t-}.R.g.m/[/_/b/d/n0Z0f0k&O[OPX`ceopx!O!Y![!_!a!g!i!o#Y#_#b#e#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Y$Z$[$_$f$l$m$n$o$p$q%O%_%b%d%g%k%v%{&]&b&d&i&t'^'_'`'h'i'm'{'}(O(T(U(d(t)O)Q)R)])f)o)p*P*U*W*l*o*q*{*|+O+T+d+h+i+l+o+s,Y,^,`-^-r-t-}.R.g.m/O/[/_/b/d/n0Z0f0k0rQ&Q#[Q)s&RV.T+x.X/e&O[OPX`ceopx!O!Y![!_!a!g!i!o#Y#_#b#e#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Y$Z$[$_$f$l$m$n$o$p$q%O%_%b%d%g%k%v%{&]&b&d&i&t'^'_'`'h'i'm'{'}(O(T(U(d(t)O)Q)R)])f)o)p*P*U*W*l*o*q*{*|+O+T+d+h+i+l+o+s,Y,^,`-^-r-t-}.R.g.m/O/[/_/b/d/n0Z0f0k0rV.T+x.X/e&O]OPX`ceopx!O!Y![!_!a!g!i!o#Y#_#b#e#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Y$Z$[$_$f$l$m$n$o$p$q%O%_%b%d%g%k%v%{&]&b&d&i&t'^'_'`'h'i'm'{'}(O(T(U(d(t)O)Q)R)])f)o)p*P*U*W*l*o*q*{*|+O+T+d+h+i+l+o+s,Y,^,`-^-r-t-}.R.g.m/O/[/_/b/d/n0Z0f0k0rV.U+x.X/eS#Z[.TS$f!O&tS&s#t$gQ&y#vQ)V%dQ-R*iR._,Z$kZO`copx!Y![!_!a#Y#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Y$Z$_$l$m$n$o$p$q%O%d%g%k%v&b&d'_'`'i'm(O(T(U(t)Q)R)])f)o)p*P*l*o+T+d+h+i+l+o+s,Y,^,`-r-t-}.R.g.m/[/_/b/d/n0Z0f0kQ&O#YR,k)p&P_OPX`ceopx!Y![!_!a!g!i!o#Y#_#b#e#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Y$Z$[$_$l$m$n$o$p$q%O%_%b%d%g%k%v%{&]&b&d&i'^'_'`'h'i'm'{'}(O(T(U(d(t)O)Q)R)])f)o)p*P*U*W*l*o*q*{*|+O+T+d+h+i+l+o+s+x,Y,^,`-^-r-t-}.R.X.g.m/O/[/_/b/d/e/n0Z0f0k0r!o#QY!e!x#R#T#`#n$]%R%S%V%^%u%|&S&[&`'X'|(`(l({(}*T*p*z+f+r+},W,u-a.V/q0R0X0[0h$SkO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%O%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o+s,Y,`-r-t-}.R.g.m/[/_/b/d/n0Z0f0kQ$m!UQ$n!VQ$s!ZQ$|!`R+p(WQ#yiS'q$e*hQ*e&rQ+X'rS,[)T)UQ-O*gQ-Y*vQ.b,]Q.x-QQ.{-ZQ/j.`Q/u.yR0V/iQ'a$bW*[&m'b'c'dQ+W'qU,x*]*^*_Q-X*vQ-f+XS.u,y,zS.z-Y-ZQ/t.vR/v.{]!mP!o'^*q-^/OreOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,Y[!gP!o'^*q-^/OW#b`#e%b&]Q'}$oW(d%O+s.R/dS*U&i*WS*w'e-[S*|'h+OR.X+xh#VY!W!e#n#s%V'|*T*z+f,u-aQ)j%wQ)v&WR,o)y#xnOcopx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o,Y,`-r-t-}.g.m/[/_/b/n0Z0f0k^!kP!g!o'^*q-^/Ov#TY!W#`#n#s%w&W&[&`'|(`(})y*T+f+r,u.W/hQ#g`Q$b{Q$c|Q$d}W%S!e%V*z-aS%Y!h(vQ%`!iQ&m#pQ&n#qQ&o#rQ(u%ZS(y%^({Q*R&eS*v'e-[R-Z*wU)h%v)f.mR+V'p[!mP!o'^*q-^/OT*}'h+O^!iP!g!o'^*q-^/OQ'd$bQ'l$dQ*_&mQ*d&oV*{'h*|+OQ%[!hR,S(vQ(s%YR,R(u#znO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o,Y,`-r-t-}.g.m/[/_/b/n0Z0f0kQ%c!kS(l%S(yR(|%`T#e`%bU#c`#e%bR)z&]Q%f!lQ(n%UQ(r%XQ,U(zR.],VrvOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,Y[!mP!o'^*q-^/OQ%P!bQ%a!jQ%i!pQ'[$ZQ([$|Q(k%QQ(p%WQ+z(iR.Y+yrtOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,Y[!mP!o'^*q-^/OS*V&i*WT*}'h+OQ'c$bS*^&m'dR,z*_Q'b$bQ'g$cU*]&m'c'dQ*a&nS,y*^*_R.v,zQ*u'`R+Q'iQ'k$dS*c&o'lR,}*dQ'j$dU*b&o'k'lS,|*c*dR.w,}rtOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,Y[!mP!o'^*q-^/OT*}'h+OQ'f$cS*`&n'gR,{*aQ*x'eR.|-[R-`*yQ&j#mR*Z&lT*V&i*WQ%e!lS(q%X%fR,P(rR)R%dWk%O+s.R/d#{lO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o,Y,`-r-t-}.g.m/[/_/b/n0Z0f0k$SiO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%O%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o+s,Y,`-r-t-}.R.g.m/[/_/b/d/n0Z0f0kU&r#t$g,ZS*g&s._Q-Q*iR.y-RT'o$e'p!_#|m#a$r$z$}&w&z&{'O'P'Q'R'S'W'Z)[)g+S+g+j-T-V-e-v-{.e/Z/a/}0Q!]$Pm#a$r$z$}&w&z&{'O'P'R'S'W'Z)[)g+S+g+j-T-V-e-v-{.e/Z/a/}0Q#{nO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o,Y,`-r-t-}.g.m/[/_/b/n0Z0f0ka)^%k)],`.g/n0Z0f0kQ)`%kR.k,cQ't$hQ)b%oR,f)cT+Y's+ZsvOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,YruOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,YQ$w!]R$y!^R$p!XrvOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,YR(O$oR$q!XR(V$sT+k(U+lX(f%P(g(k+{R+y(hQ.W+xR/h.XQ(j%PQ+w(gQ+|(kR.Z+{R%Q!bQ(e%OV.P+s.R/dQxOQ#lcW$`x#l)Q,YQ)Q%dR,Y)RrXOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,Yn!fP!o#e&]&i'^'e'h*W*q+O+x-[-^/Ol!zX!f#P#_#i$[%Z%_%{&R'n'{)O0r!j#PY!e!x#T#`#n$]%S%V%^%u%|&S&[&`'X'|(`(l({(}*T*p*z+f+r+},W,u-a.V/q0R0X0[0hQ#_`Q#ia#d$[op!Y!_!a#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$l%g%k%v&b&d'_'`'i'm(O(T(t)])f)o*P*l*o+T+h+i+o,^,`-r-t-}.g.m/[/_/b/n0Z0f0kS%Z!h(vS%_!i*{S%{#Y)pQ&R#[S'n$e'pY'{$o%O+s.R/dQ)O%bR0r$YQ!uUR%m!uQ)q&OR,l)q^#RY#`$]'X'|(`*px%R!e!x#n%V%^%|&S&[&`({(}*T*z+f+r,W,u-a.V0R[%t#R%R%u+}0X0hS%u#T%SQ+}(lQ0X/qR0h0[Q*m&{R-U*mQ!oPU%h!o*q/OQ*q'^R/O-^!pbOP`cx![!o#e#l$_$m$n$o$p$q%O%b%d&]&i'^'e'h(U)Q)R*W*q+O+d+l+s+x,Y-[-^.R/O/dY!yX!f#_'{)OT#jb!yQ.n,gR/p.nQ%x#VR)k%xQ&c#fS*O&c.[R.[,QQ(w%[R,T(wQ&^#cR){&^Q,_)WR.d,_Q+O'hR-b+OQ-]*xR.}-]Q*W&iR,v*WQ'p$eR+U'pQ&f#gR*S&fQ.h,aR/m.hQ,d)`R.l,dQ+Z'sR-g+ZQ-k+]R/T-kQ/y/US0^/y0`R0`/{Q+l(UR-x+lQ(g%PS+v(g+{R+{(kQ/f.VR0S/fQ+t(eR.S+t`wOcx#l%d)Q)R,YQ$t![Q']$_Q'y$mQ'z$nQ(Q$pQ(R$qS+k(U+lR-q+d'dsOPXY`acopx!Y![!_!a!e!f!h!i!o!x#P#T#Y#[#_#`#e#i#l#n#u#w#x#|#}$O$P$Q$R$S$T$U$V$Y$Z$[$]$_$e$l$m$n$o$p$q%O%S%V%Z%^%_%b%d%g%u%v%{%|&R&S&[&]&`&b&d&i'X'^'_'`'e'h'i'm'n'p'{'|(O(T(U(`(l(t(v({(})O)Q)R)f)o)p*P*T*W*l*o*p*q*z*{+O+T+d+f+h+i+l+o+r+s+x+},W,Y,^,u-[-^-a-r-t-}.R.V.m/O/[/_/b/d/q0R0X0[0h0ra)_%k)],`.g/n0Z0f0kQ!rTQ$h!QQ$i!SQ$j!TQ%o!{Q%q!}Q'x$kQ)c%pQ)l0oS-i+]+_Q-m+^Q-n+`Q/S-kS/U-m/WQ/{/XR0]/x%uSOT`cdopx!Q!S!T!Y![!_!a!{!}#`#l#o#t#u#v#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$g$k$l$m$n$o$p$q%O%d%j%k%p%v&S&d&s&y'm'v(O(T(U(})Q)R)])f*P*T*i*l*o+T+]+^+_+`+b+d+h+i+l+o+s,W,Y,Z,`,c,u-R-k-m-r-t-}.R._.g.m/W/X/[/_/b/d/n/x0Z0f0k0oQ)a%kQ,a)]S.f,`/nQ/l.gQ0g0ZQ0i0fR0m0krmOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,YS#a`$lQ$WoQ$^pQ$r!YQ$z!_Q$}!aQ&w#uQ&z#wY&{#x$o+h-t/_Q&}#|Q'O#}Q'P$OQ'Q$PQ'R$QQ'S$RQ'T$SQ'U$TQ'V$UQ'W$VQ'Z$Z^)[%k)].g/n0Z0f0kU)g%v)f.mQ*Q&dQ+S'mQ+g(OQ+j(TQ,p*PQ-T*lQ-V*oQ-e+TQ-v+iQ-{+oQ.e,`Q/Z-rQ/a-}Q/}/[R0Q/b#xgO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o,Y,`-r-t-}.g.m/[/_/b/n0Z0f0kW(a%O+s.R/dR)S%drYOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,Y[!eP!o'^*q-^/OW!xX$[%{'{Q#``Q#ne#S$]op!Y!_!a#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$l%k%v&d'm(O(T)])f*P*l*o+T+h+i+o,`-r-t-}.g.m/[/_/b/n0Z0f0kQ%V!gS%^!i*{d%|#Y%g&b'_'`'i(t)o)p,^Q&S#_Q&[#bS&`#e&]Q'X$YQ'|$oW(`%O+s.R/dQ({%_Q(}%bS*T&i*WQ*p0rS*z'h+OQ+f'}Q+r(dQ,W)OQ,u*UQ-a*|S.V+x.XR0R/e&O_OPX`ceopx!Y![!_!a!g!i!o#Y#_#b#e#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Y$Z$[$_$l$m$n$o$p$q%O%_%b%d%g%k%v%{&]&b&d&i'^'_'`'h'i'm'{'}(O(T(U(d(t)O)Q)R)])f)o)p*P*U*W*l*o*q*{*|+O+T+d+h+i+l+o+s+x,Y,^,`-^-r-t-}.R.X.g.m/O/[/_/b/d/e/n0Z0f0k0rQ$e!OQ'r$fR*h&t&ZWOPX`ceopx!O!Y![!_!a!g!i!o#Y#[#_#b#e#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Y$Z$[$_$f$l$m$n$o$p$q%O%_%b%d%g%k%v%{&R&]&b&d&i&t'^'_'`'h'i'm'{'}(O(T(U(d(t)O)Q)R)])f)o)p*P*U*W*l*o*q*{*|+O+T+d+h+i+l+o+s+x,Y,^,`-^-r-t-}.R.X.g.m/O/[/_/b/d/e/n0Z0f0k0rR&P#Y$QjOcopx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%O%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o+s,Y,`-r-t-}.R.g.m/[/_/b/d/n0Z0f0kQ#f`Q&O#YQ'Y$YU)W%g'`'iQ)}&bQ*s'_Q,Q(tQ,j)oQ,k)pR.c,^Q)n%}R,i)m$SfO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%O%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o+s,Y,`-r-t-}.R.g.m/[/_/b/d/n0Z0f0kT&p#t,ZQ&|#xQ(P$oQ-u+hQ/]-tR0P/_]!nP!o'^*q-^/O#PaOPX`bcx![!f!o!y#_#e#l$_$m$n$o$p$q%O%b%d&]&i'^'e'h'{(U)O)Q)R*W*q+O+d+l+s+x,Y-[-^.R/O/dU#WY!W'|Q%T!eU&k#n#s+fQ(o%VS,s*T*zT.s,u-aj#UY!W!e#n#s%V%w&W)y*T*z,u-aU&V#`&`(}Q)x&[Q+e'|Q+q(`Q-s+fQ.O+rQ/g.WR0U/hQ)i%vQ,g)fR/o.mR,h)f`!jP!o'^'h*q+O-^/OT%W!g*|R%]!hW%U!e%V*z-aQ(z%^R,V({S#d`%bR&a#eQ)X%gT*t'`'iR*y'e[!lP!o'^*q-^/OR%X!gR#h`R,b)]R)a%kT-j+]-kQ/V-mR/z/WR/z/X\",\n  nodeNames: \"⚠ LineComment BlockComment Program ModuleDeclaration MarkerAnnotation Identifier ScopedIdentifier . Annotation ) ( AnnotationArgumentList AssignmentExpression FieldAccess IntegerLiteral FloatingPointLiteral BooleanLiteral CharacterLiteral StringLiteral TextBlock null ClassLiteral void PrimitiveType TypeName ScopedTypeName GenericType TypeArguments AnnotatedType Wildcard extends super , ArrayType ] Dimension [ class this ParenthesizedExpression ObjectCreationExpression new ArgumentList } { ClassBody ; FieldDeclaration Modifiers public protected private abstract static final strictfp default synchronized native transient volatile VariableDeclarator Definition AssignOp ArrayInitializer MethodDeclaration TypeParameters TypeParameter TypeBound FormalParameters ReceiverParameter FormalParameter SpreadParameter Throws throws Block ClassDeclaration Superclass SuperInterfaces implements InterfaceTypeList InterfaceDeclaration interface ExtendsInterfaces InterfaceBody ConstantDeclaration EnumDeclaration enum EnumBody EnumConstant EnumBodyDeclarations AnnotationTypeDeclaration AnnotationTypeBody AnnotationTypeElementDeclaration StaticInitializer ConstructorDeclaration ConstructorBody ExplicitConstructorInvocation ArrayAccess MethodInvocation MethodName MethodReference ArrayCreationExpression Dimension AssignOp BinaryExpression CompareOp CompareOp LogicOp LogicOp BitOp BitOp BitOp ArithOp ArithOp ArithOp BitOp InstanceofExpression instanceof LambdaExpression InferredParameters TernaryExpression LogicOp : UpdateExpression UpdateOp UnaryExpression LogicOp BitOp CastExpression ElementValueArrayInitializer ElementValuePair open module ModuleBody ModuleDirective requires transitive exports to opens uses provides with PackageDeclaration package ImportDeclaration import Asterisk ExpressionStatement LabeledStatement Label IfStatement if else WhileStatement while ForStatement for ForSpec LocalVariableDeclaration var EnhancedForStatement ForSpec AssertStatement assert SwitchStatement switch SwitchBlock SwitchLabel case DoStatement do BreakStatement break ContinueStatement continue ReturnStatement return SynchronizedStatement ThrowStatement throw TryStatement try CatchClause catch CatchFormalParameter CatchType FinallyClause finally TryWithResourcesStatement ResourceSpecification Resource ClassContent\",\n  maxTerm: 276,\n  nodeProps: [\n    [\"isolate\", -4,1,2,18,19,\"\"],\n    [\"group\", -26,4,47,76,77,82,87,92,145,147,150,151,153,156,158,161,163,165,167,172,174,176,178,180,181,183,191,\"Statement\",-25,6,13,14,15,16,17,18,19,20,21,22,39,40,41,99,100,102,103,106,118,120,122,125,127,130,\"Expression\",-7,23,24,25,26,27,29,34,\"Type\"],\n    [\"openedBy\", 10,\"(\",44,\"{\"],\n    [\"closedBy\", 11,\")\",45,\"}\"]\n  ],\n  propSources: [javaHighlighting],\n  skippedNodes: [0,1,2],\n  repeatNodeCount: 28,\n  tokenData: \"#'f_R!_OX%QXY'fYZ)bZ^'f^p%Qpq'fqr*|rs,^st%Qtu4euv5zvw7[wx8rxyAZyzAwz{Be{|CZ|}Dq}!OE_!O!PFx!P!Q! r!Q!R!,h!R![!0`![!]!>p!]!^!@Q!^!_!@n!_!`!BX!`!a!B{!a!b!Di!b!c!EX!c!}!LT!}#O!Mj#O#P%Q#P#Q!NW#Q#R!Nt#R#S4e#S#T%Q#T#o4e#o#p# h#p#q#!U#q#r##n#r#s#$[#s#y%Q#y#z'f#z$f%Q$f$g'f$g#BY4e#BY#BZ#$x#BZ$IS4e$IS$I_#$x$I_$I|4e$I|$JO#$x$JO$JT4e$JT$JU#$x$JU$KV4e$KV$KW#$x$KW&FU4e&FU&FV#$x&FV;'S4e;'S;=`5t<%lO4eS%VV&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QS%qO&YSS%tVOY&ZYZ%lZr&Zrs&ys;'S&Z;'S;=`'`<%lO&ZS&^VOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QS&vP;=`<%l%QS&|UOY&ZYZ%lZr&Zs;'S&Z;'S;=`'`<%lO&ZS'cP;=`<%l&Z_'mk&YS%yZOX%QXY'fYZ)bZ^'f^p%Qpq'fqr%Qrs%qs#y%Q#y#z'f#z$f%Q$f$g'f$g#BY%Q#BY#BZ'f#BZ$IS%Q$IS$I_'f$I_$I|%Q$I|$JO'f$JO$JT%Q$JT$JU'f$JU$KV%Q$KV$KW'f$KW&FU%Q&FU&FV'f&FV;'S%Q;'S;=`&s<%lO%Q_)iY&YS%yZX^*Xpq*X#y#z*X$f$g*X#BY#BZ*X$IS$I_*X$I|$JO*X$JT$JU*X$KV$KW*X&FU&FV*XZ*^Y%yZX^*Xpq*X#y#z*X$f$g*X#BY#BZ*X$IS$I_*X$I|$JO*X$JT$JU*X$KV$KW*X&FU&FV*XV+TX#tP&YSOY%QYZ%lZr%Qrs%qs!_%Q!_!`+p!`;'S%Q;'S;=`&s<%lO%QU+wV#_Q&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT,aXOY,|YZ%lZr,|rs3Ys#O,|#O#P2d#P;'S,|;'S;=`3S<%lO,|T-PXOY-lYZ%lZr-lrs.^s#O-l#O#P.x#P;'S-l;'S;=`2|<%lO-lT-qX&YSOY-lYZ%lZr-lrs.^s#O-l#O#P.x#P;'S-l;'S;=`2|<%lO-lT.cVcPOY&ZYZ%lZr&Zrs&ys;'S&Z;'S;=`'`<%lO&ZT.}V&YSOY-lYZ/dZr-lrs1]s;'S-l;'S;=`2|<%lO-lT/iW&YSOY0RZr0Rrs0ns#O0R#O#P0s#P;'S0R;'S;=`1V<%lO0RP0UWOY0RZr0Rrs0ns#O0R#O#P0s#P;'S0R;'S;=`1V<%lO0RP0sOcPP0vTOY0RYZ0RZ;'S0R;'S;=`1V<%lO0RP1YP;=`<%l0RT1`XOY,|YZ%lZr,|rs1{s#O,|#O#P2d#P;'S,|;'S;=`3S<%lO,|T2QUcPOY&ZYZ%lZr&Zs;'S&Z;'S;=`'`<%lO&ZT2gVOY-lYZ/dZr-lrs1]s;'S-l;'S;=`2|<%lO-lT3PP;=`<%l-lT3VP;=`<%l,|T3_VcPOY&ZYZ%lZr&Zrs3ts;'S&Z;'S;=`'`<%lO&ZT3yR&WSXY4SYZ4`pq4SP4VRXY4SYZ4`pq4SP4eO&XP_4lb&YS&PZOY%QYZ%lZr%Qrs%qst%Qtu4eu!Q%Q!Q![4e![!c%Q!c!}4e!}#R%Q#R#S4e#S#T%Q#T#o4e#o$g%Q$g;'S4e;'S;=`5t<%lO4e_5wP;=`<%l4eU6RX#hQ&YSOY%QYZ%lZr%Qrs%qs!_%Q!_!`6n!`;'S%Q;'S;=`&s<%lO%QU6uV#]Q&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV7cZ&nR&YSOY%QYZ%lZr%Qrs%qsv%Qvw8Uw!_%Q!_!`6n!`;'S%Q;'S;=`&s<%lO%QU8]V#aQ&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT8wZ&YSOY9jYZ%lZr9jrs:xsw9jwx%Qx#O9j#O#P<S#P;'S9j;'S;=`AT<%lO9jT9oX&YSOY%QYZ%lZr%Qrs%qsw%Qwx:[x;'S%Q;'S;=`&s<%lO%QT:cVbP&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT:{XOY&ZYZ%lZr&Zrs&ysw&Zwx;hx;'S&Z;'S;=`'`<%lO&ZT;mVbPOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT<XZ&YSOY<zYZ%lZr<zrs=rsw<zwx9jx#O<z#O#P9j#P;'S<z;'S;=`?^<%lO<zT=PZ&YSOY<zYZ%lZr<zrs=rsw<zwx:[x#O<z#O#P%Q#P;'S<z;'S;=`?^<%lO<zT=uZOY>hYZ%lZr>hrs?dsw>hwx;hx#O>h#O#P&Z#P;'S>h;'S;=`@}<%lO>hT>kZOY<zYZ%lZr<zrs=rsw<zwx:[x#O<z#O#P%Q#P;'S<z;'S;=`?^<%lO<zT?aP;=`<%l<zT?gZOY>hYZ%lZr>hrs@Ysw>hwx;hx#O>h#O#P&Z#P;'S>h;'S;=`@}<%lO>hP@]VOY@YZw@Ywx@rx#O@Y#P;'S@Y;'S;=`@w<%lO@YP@wObPP@zP;=`<%l@YTAQP;=`<%l>hTAWP;=`<%l9j_AbVZZ&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVBOVYR&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVBnX$ZP&YS#gQOY%QYZ%lZr%Qrs%qs!_%Q!_!`6n!`;'S%Q;'S;=`&s<%lO%QVCbZ#fR&YSOY%QYZ%lZr%Qrs%qs{%Q{|DT|!_%Q!_!`6n!`;'S%Q;'S;=`&s<%lO%QVD[V#rR&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVDxVqR&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVEf[#fR&YSOY%QYZ%lZr%Qrs%qs}%Q}!ODT!O!_%Q!_!`6n!`!aF[!a;'S%Q;'S;=`&s<%lO%QVFcV&xR&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_GPZWY&YSOY%QYZ%lZr%Qrs%qs!O%Q!O!PGr!P!Q%Q!Q![IQ![;'S%Q;'S;=`&s<%lO%QVGwX&YSOY%QYZ%lZr%Qrs%qs!O%Q!O!PHd!P;'S%Q;'S;=`&s<%lO%QVHkV&qR&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QTIXc&YS`POY%QYZ%lZr%Qrs%qs!Q%Q!Q![IQ![!f%Q!f!gJd!g!hKQ!h!iJd!i#R%Q#R#SNz#S#W%Q#W#XJd#X#YKQ#Y#ZJd#Z;'S%Q;'S;=`&s<%lO%QTJkV&YS`POY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QTKV]&YSOY%QYZ%lZr%Qrs%qs{%Q{|LO|}%Q}!OLO!O!Q%Q!Q![Lp![;'S%Q;'S;=`&s<%lO%QTLTX&YSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Lp![;'S%Q;'S;=`&s<%lO%QTLwc&YS`POY%QYZ%lZr%Qrs%qs!Q%Q!Q![Lp![!f%Q!f!gJd!g!h%Q!h!iJd!i#R%Q#R#SNS#S#W%Q#W#XJd#X#Y%Q#Y#ZJd#Z;'S%Q;'S;=`&s<%lO%QTNXZ&YSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Lp![#R%Q#R#SNS#S;'S%Q;'S;=`&s<%lO%QT! PZ&YSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![IQ![#R%Q#R#SNz#S;'S%Q;'S;=`&s<%lO%Q_! y]&YS#gQOY%QYZ%lZr%Qrs%qsz%Qz{!!r{!P%Q!P!Q!)e!Q!_%Q!_!`6n!`;'S%Q;'S;=`&s<%lO%Q_!!wX&YSOY!!rYZ!#dZr!!rrs!%Psz!!rz{!&_{;'S!!r;'S;=`!'s<%lO!!r_!#iT&YSOz!#xz{!$[{;'S!#x;'S;=`!$y<%lO!#xZ!#{TOz!#xz{!$[{;'S!#x;'S;=`!$y<%lO!#xZ!$_VOz!#xz{!$[{!P!#x!P!Q!$t!Q;'S!#x;'S;=`!$y<%lO!#xZ!$yOQZZ!$|P;=`<%l!#x_!%SXOY!%oYZ!#dZr!%ors!'ysz!%oz{!(i{;'S!%o;'S;=`!)_<%lO!%o_!%rXOY!!rYZ!#dZr!!rrs!%Psz!!rz{!&_{;'S!!r;'S;=`!'s<%lO!!r_!&dZ&YSOY!!rYZ!#dZr!!rrs!%Psz!!rz{!&_{!P!!r!P!Q!'V!Q;'S!!r;'S;=`!'s<%lO!!r_!'^V&YSQZOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!'vP;=`<%l!!r_!'|XOY!%oYZ!#dZr!%ors!#xsz!%oz{!(i{;'S!%o;'S;=`!)_<%lO!%o_!(lZOY!!rYZ!#dZr!!rrs!%Psz!!rz{!&_{!P!!r!P!Q!'V!Q;'S!!r;'S;=`!'s<%lO!!r_!)bP;=`<%l!%o_!)lV&YSPZOY!)eYZ%lZr!)ers!*Rs;'S!)e;'S;=`!+X<%lO!)e_!*WVPZOY!*mYZ%lZr!*mrs!+_s;'S!*m;'S;=`!,b<%lO!*m_!*rVPZOY!)eYZ%lZr!)ers!*Rs;'S!)e;'S;=`!+X<%lO!)e_!+[P;=`<%l!)e_!+dVPZOY!*mYZ%lZr!*mrs!+ys;'S!*m;'S;=`!,b<%lO!*mZ!,OSPZOY!+yZ;'S!+y;'S;=`!,[<%lO!+yZ!,_P;=`<%l!+y_!,eP;=`<%l!*mT!,ou&YS_POY%QYZ%lZr%Qrs%qs!O%Q!O!P!/S!P!Q%Q!Q![!0`![!d%Q!d!e!3j!e!f%Q!f!gJd!g!hKQ!h!iJd!i!n%Q!n!o!2U!o!q%Q!q!r!5h!r!z%Q!z!{!7`!{#R%Q#R#S!2r#S#U%Q#U#V!3j#V#W%Q#W#XJd#X#YKQ#Y#ZJd#Z#`%Q#`#a!2U#a#c%Q#c#d!5h#d#l%Q#l#m!7`#m;'S%Q;'S;=`&s<%lO%QT!/Za&YS`POY%QYZ%lZr%Qrs%qs!Q%Q!Q![IQ![!f%Q!f!gJd!g!hKQ!h!iJd!i#W%Q#W#XJd#X#YKQ#Y#ZJd#Z;'S%Q;'S;=`&s<%lO%QT!0gi&YS_POY%QYZ%lZr%Qrs%qs!O%Q!O!P!/S!P!Q%Q!Q![!0`![!f%Q!f!gJd!g!hKQ!h!iJd!i!n%Q!n!o!2U!o#R%Q#R#S!2r#S#W%Q#W#XJd#X#YKQ#Y#ZJd#Z#`%Q#`#a!2U#a;'S%Q;'S;=`&s<%lO%QT!2]V&YS_POY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT!2wZ&YSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!0`![#R%Q#R#S!2r#S;'S%Q;'S;=`&s<%lO%QT!3oY&YSOY%QYZ%lZr%Qrs%qs!Q%Q!Q!R!4_!R!S!4_!S;'S%Q;'S;=`&s<%lO%QT!4f`&YS_POY%QYZ%lZr%Qrs%qs!Q%Q!Q!R!4_!R!S!4_!S!n%Q!n!o!2U!o#R%Q#R#S!3j#S#`%Q#`#a!2U#a;'S%Q;'S;=`&s<%lO%QT!5mX&YSOY%QYZ%lZr%Qrs%qs!Q%Q!Q!Y!6Y!Y;'S%Q;'S;=`&s<%lO%QT!6a_&YS_POY%QYZ%lZr%Qrs%qs!Q%Q!Q!Y!6Y!Y!n%Q!n!o!2U!o#R%Q#R#S!5h#S#`%Q#`#a!2U#a;'S%Q;'S;=`&s<%lO%QT!7e_&YSOY%QYZ%lZr%Qrs%qs!O%Q!O!P!8d!P!Q%Q!Q![!:r![!c%Q!c!i!:r!i#T%Q#T#Z!:r#Z;'S%Q;'S;=`&s<%lO%QT!8i]&YSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!9b![!c%Q!c!i!9b!i#T%Q#T#Z!9b#Z;'S%Q;'S;=`&s<%lO%QT!9gc&YSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!9b![!c%Q!c!i!9b!i!r%Q!r!sKQ!s#R%Q#R#S!8d#S#T%Q#T#Z!9b#Z#d%Q#d#eKQ#e;'S%Q;'S;=`&s<%lO%QT!:yi&YS_POY%QYZ%lZr%Qrs%qs!O%Q!O!P!<h!P!Q%Q!Q![!:r![!c%Q!c!i!:r!i!n%Q!n!o!2U!o!r%Q!r!sKQ!s#R%Q#R#S!=r#S#T%Q#T#Z!:r#Z#`%Q#`#a!2U#a#d%Q#d#eKQ#e;'S%Q;'S;=`&s<%lO%QT!<ma&YSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!9b![!c%Q!c!i!9b!i!r%Q!r!sKQ!s#T%Q#T#Z!9b#Z#d%Q#d#eKQ#e;'S%Q;'S;=`&s<%lO%QT!=w]&YSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!:r![!c%Q!c!i!:r!i#T%Q#T#Z!:r#Z;'S%Q;'S;=`&s<%lO%QV!>wX#pR&YSOY%QYZ%lZr%Qrs%qs![%Q![!]!?d!];'S%Q;'S;=`&s<%lO%QV!?kV&vR&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!@XV!PR&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!@uY&_Z&YSOY%QYZ%lZr%Qrs%qs!^%Q!^!_!Ae!_!`+p!`;'S%Q;'S;=`&s<%lO%QU!AlX#iQ&YSOY%QYZ%lZr%Qrs%qs!_%Q!_!`6n!`;'S%Q;'S;=`&s<%lO%QV!B`X!bR&YSOY%QYZ%lZr%Qrs%qs!_%Q!_!`+p!`;'S%Q;'S;=`&s<%lO%QV!CSY&^R&YSOY%QYZ%lZr%Qrs%qs!_%Q!_!`+p!`!a!Cr!a;'S%Q;'S;=`&s<%lO%QU!CyY#iQ&YSOY%QYZ%lZr%Qrs%qs!_%Q!_!`6n!`!a!Ae!a;'S%Q;'S;=`&s<%lO%Q_!DrV&bX#oQ&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!E`X%}Z&YSOY%QYZ%lZr%Qrs%qs#]%Q#]#^!E{#^;'S%Q;'S;=`&s<%lO%QV!FQX&YSOY%QYZ%lZr%Qrs%qs#b%Q#b#c!Fm#c;'S%Q;'S;=`&s<%lO%QV!FrX&YSOY%QYZ%lZr%Qrs%qs#h%Q#h#i!G_#i;'S%Q;'S;=`&s<%lO%QV!GdX&YSOY%QYZ%lZr%Qrs%qs#X%Q#X#Y!HP#Y;'S%Q;'S;=`&s<%lO%QV!HUX&YSOY%QYZ%lZr%Qrs%qs#f%Q#f#g!Hq#g;'S%Q;'S;=`&s<%lO%QV!HvX&YSOY%QYZ%lZr%Qrs%qs#Y%Q#Y#Z!Ic#Z;'S%Q;'S;=`&s<%lO%QV!IhX&YSOY%QYZ%lZr%Qrs%qs#T%Q#T#U!JT#U;'S%Q;'S;=`&s<%lO%QV!JYX&YSOY%QYZ%lZr%Qrs%qs#V%Q#V#W!Ju#W;'S%Q;'S;=`&s<%lO%QV!JzX&YSOY%QYZ%lZr%Qrs%qs#X%Q#X#Y!Kg#Y;'S%Q;'S;=`&s<%lO%QV!KnV&tR&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!L[b&RZ&YSOY%QYZ%lZr%Qrs%qst%Qtu!LTu!Q%Q!Q![!LT![!c%Q!c!}!LT!}#R%Q#R#S!LT#S#T%Q#T#o!LT#o$g%Q$g;'S!LT;'S;=`!Md<%lO!LT_!MgP;=`<%l!LT_!MqVuZ&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!N_VsR&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QU!N{X#eQ&YSOY%QYZ%lZr%Qrs%qs!_%Q!_!`6n!`;'S%Q;'S;=`&s<%lO%QV# oV}R&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_#!_Z'OX#dQ&YSOY%QYZ%lZr%Qrs%qs!_%Q!_!`6n!`#p%Q#p#q##Q#q;'S%Q;'S;=`&s<%lO%QU##XV#bQ&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV##uV|R&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT#$cV#uP&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_#%Ru&YS%yZ&PZOX%QXY'fYZ)bZ^'f^p%Qpq'fqr%Qrs%qst%Qtu4eu!Q%Q!Q![4e![!c%Q!c!}4e!}#R%Q#R#S4e#S#T%Q#T#o4e#o#y%Q#y#z'f#z$f%Q$f$g'f$g#BY4e#BY#BZ#$x#BZ$IS4e$IS$I_#$x$I_$I|4e$I|$JO#$x$JO$JT4e$JT$JU#$x$JU$KV4e$KV$KW#$x$KW&FU4e&FU&FV#$x&FV;'S4e;'S;=`5t<%lO4e\",\n  tokenizers: [0, 1, 2, 3],\n  topRules: {\"Program\":[0,3],\"ClassContent\":[1,194]},\n  dynamicPrecedences: {\"27\":1,\"232\":-1,\"243\":-1},\n  specialized: [{term: 231, get: (value) => spec_identifier[value] || -1}],\n  tokenPrec: 7144\n});\n\nexport { parser };\n","import { parser } from '@lezer/java';\nimport { LRLanguage, indentNodeProp, continuedIndent, flatIndent, delimitedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\n\n/**\nA language provider based on the [Lezer Java\nparser](https://github.com/lezer-parser/java), extended with\nhighlighting and indentation information.\n*/\nconst javaLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"java\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                IfStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|else\\b)/ }),\n                TryStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|catch|finally)\\b/ }),\n                LabeledStatement: flatIndent,\n                SwitchBlock: context => {\n                    let after = context.textAfter, closed = /^\\s*\\}/.test(after), isCase = /^\\s*(case|default)\\b/.test(after);\n                    return context.baseIndent + (closed ? 0 : isCase ? 1 : 2) * context.unit;\n                },\n                Block: /*@__PURE__*/delimitedIndent({ closing: \"}\" }),\n                BlockComment: () => null,\n                Statement: /*@__PURE__*/continuedIndent({ except: /^{/ })\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                [\"Block SwitchBlock ClassBody ElementValueArrayInitializer ModuleBody EnumBody \" +\n                    \"ConstructorBody InterfaceBody ArrayInitializer\"]: foldInside,\n                BlockComment(tree) { return { from: tree.from + 2, to: tree.to - 2 }; }\n            })\n        ]\n    }),\n    languageData: {\n        commentTokens: { line: \"//\", block: { open: \"/*\", close: \"*/\" } },\n        indentOnInput: /^\\s*(?:case |default:|\\{|\\})$/\n    }\n});\n/**\nJava language support.\n*/\nfunction java() {\n    return new LanguageSupport(javaLanguage);\n}\n\nexport { java, javaLanguage };\n","import { ExternalTokenizer, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst closureParamDelim = 1,\n  tpOpen = 2,\n  tpClose = 3,\n  RawString = 4,\n  Float = 5;\n\nconst _b = 98, _e = 101, _f = 102, _r = 114, _E = 69, Zero = 48,\n      Dot = 46, Plus = 43, Minus = 45, Hash = 35, Quote = 34, Pipe = 124, LessThan = 60, GreaterThan = 62;\n\nfunction isNum(ch) { return ch >= 48 && ch <= 57 }\nfunction isNum_(ch) { return isNum(ch) || ch == 95 }\n\nconst literalTokens = new ExternalTokenizer((input, stack) => {\n  if (isNum(input.next)) {\n    let isFloat = false;\n    do { input.advance(); } while (isNum_(input.next))\n    if (input.next == Dot) {\n      isFloat = true;\n      input.advance();\n      if (isNum(input.next)) {\n        do { input.advance(); } while (isNum_(input.next))\n      } else if (input.next == Dot || input.next > 0x7f || /\\w/.test(String.fromCharCode(input.next))) {\n        return\n      }\n    }\n    if (input.next == _e || input.next == _E) {\n      isFloat = true;\n      input.advance();\n      if (input.next == Plus || input.next == Minus) input.advance();\n      if (!isNum_(input.next)) return\n      do { input.advance(); } while (isNum_(input.next))\n    }\n    if (input.next == _f) {\n      let after = input.peek(1);\n      if (after == Zero + 3 && input.peek(2) == Zero + 2 ||\n          after == Zero + 6 && input.peek(2) == Zero + 4) {\n        input.advance(3);\n        isFloat = true;\n      } else {\n        return\n      }\n    }\n    if (isFloat) input.acceptToken(Float);\n  } else if (input.next == _b || input.next == _r) {\n    if (input.next == _b) input.advance();\n    if (input.next != _r) return\n    input.advance();\n    let count = 0;\n    while (input.next == Hash) { count++; input.advance(); }\n    if (input.next != Quote) return\n    input.advance();\n    content: for (;;) {\n      if (input.next < 0) return\n      let isQuote = input.next == Quote;\n      input.advance();\n      if (isQuote) {\n        for (let i = 0; i < count; i++) {\n          if (input.next != Hash) continue content\n          input.advance();\n        }\n        input.acceptToken(RawString);\n        return\n      }\n    }\n  }\n});\n\nconst closureParam = new ExternalTokenizer(input => {\n  if (input.next == Pipe) input.acceptToken(closureParamDelim, 1);\n});\n\nconst tpDelim = new ExternalTokenizer(input => {\n  if (input.next == LessThan) input.acceptToken(tpOpen, 1);\n  else if (input.next == GreaterThan) input.acceptToken(tpClose, 1);\n});\n\nconst rustHighlighting = styleTags({\n  \"const macro_rules struct union enum type fn impl trait let static\": tags.definitionKeyword,\n  \"mod use crate\": tags.moduleKeyword,\n  \"pub unsafe async mut extern default move\": tags.modifier,\n  \"for if else loop while match continue break return await\": tags.controlKeyword,\n  \"as in ref\": tags.operatorKeyword,\n  \"where _ crate super dyn\": tags.keyword,\n  \"self\": tags.self,\n  String: tags.string,\n  Char: tags.character,\n  RawString: tags.special(tags.string),\n  Boolean: tags.bool,\n  Identifier: tags.variableName,\n  \"CallExpression/Identifier\": tags.function(tags.variableName),\n  BoundIdentifier: tags.definition(tags.variableName),\n  \"FunctionItem/BoundIdentifier\": tags.function(tags.definition(tags.variableName)),\n  LoopLabel: tags.labelName,\n  FieldIdentifier: tags.propertyName,\n  \"CallExpression/FieldExpression/FieldIdentifier\": tags.function(tags.propertyName),\n  Lifetime: tags.special(tags.variableName),\n  ScopeIdentifier: tags.namespace,\n  TypeIdentifier: tags.typeName,\n  \"MacroInvocation/Identifier MacroInvocation/ScopedIdentifier/Identifier\": tags.macroName,\n  \"MacroInvocation/TypeIdentifier MacroInvocation/ScopedIdentifier/TypeIdentifier\": tags.macroName,\n  \"\\\"!\\\"\": tags.macroName,\n  UpdateOp: tags.updateOperator,\n  LineComment: tags.lineComment,\n  BlockComment: tags.blockComment,\n  Integer: tags.integer,\n  Float: tags.float,\n  ArithOp: tags.arithmeticOperator,\n  LogicOp: tags.logicOperator,\n  BitOp: tags.bitwiseOperator,\n  CompareOp: tags.compareOperator,\n  \"=\": tags.definitionOperator,\n  \".. ... => ->\": tags.punctuation,\n  \"( )\": tags.paren,\n  \"[ ]\": tags.squareBracket,\n  \"{ }\": tags.brace,\n  \". DerefOp\": tags.derefOperator,\n  \"&\": tags.operator,\n  \", ; ::\": tags.separator,\n  \"Attribute/...\": tags.meta,\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_identifier = {__proto__:null,self:28, super:32, crate:34, impl:46, true:72, false:72, pub:88, in:92, const:96, unsafe:104, async:108, move:110, if:114, let:118, ref:142, mut:144, _:198, else:200, match:204, as:248, return:252, await:262, break:270, continue:276, while:312, loop:316, for:320, macro_rules:327, mod:334, extern:342, struct:346, where:364, union:379, enum:382, type:390, default:395, fn:396, trait:412, use:420, static:438, dyn:476};\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"$2xQ]Q_OOP$wOWOOO&sQWO'#CnO)WQWO'#I`OOQP'#I`'#I`OOQQ'#Ie'#IeO)hO`O'#C}OOQR'#Ih'#IhO)sQWO'#IuOOQO'#Hk'#HkO)xQWO'#DpOOQR'#Iw'#IwO)xQWO'#DpO*ZQWO'#DpOOQO'#Iv'#IvO,SQWO'#J`O,ZQWO'#EiOOQV'#Hp'#HpO,cQYO'#F{OOQV'#El'#ElOOQV'#Em'#EmOOQV'#En'#EnO.YQ_O'#EkO0_Q_O'#EoO2gQWOOO4QQ_O'#FPO7hQWO'#J`OOQV'#FY'#FYO7{Q_O'#F^O:WQ_O'#FaOOQO'#F`'#F`O=sQ_O'#FcO=}Q_O'#FbO@VQWO'#FgOOQO'#J`'#J`OOQV'#Io'#IoOA]Q_O'#InOEPQWO'#InOOQV'#Fw'#FwOF[QWO'#JuOFcQWO'#F|OOQO'#IO'#IOOGrQWO'#GhOOQV'#Im'#ImOOQV'#Il'#IlOOQV'#Hj'#HjQGyQ_OOOKeQ_O'#DUOKlQYO'#CqOOQP'#I_'#I_OOQV'#Hg'#HgQ]Q_OOOLuQWO'#I`ONsQYO'#DXO!!eQWO'#JuO!!lQWO'#JuO!!vQ_O'#DfO!%]Q_O'#E}O!(sQ_O'#FWO!,ZQWO'#FZO!.^QXO'#FbO!.cQ_O'#EeO!!vQ_O'#FmO!0uQWO'#FoO!0zQWO'#FoO!1PQ^O'#FqO!1WQWO'#JuO!1_QWO'#FtO!1dQWO'#FxO!2WQWO'#JjO!2_QWO'#GOO!2_QWO'#G`O!2_QWO'#GbO!2_QWO'#GsOOQO'#Ju'#JuO!2dQWO'#GhO!2lQYO'#GpO!2_QWO'#GqO!3uQ^O'#GtO!3|QWO'#GuO!4hQWO'#HOP!4sOpO'#CcPOOO)CC})CC}OOOO'#Hi'#HiO!5OO`O,59iOOQV,59i,59iO!5ZQYO,5?aOOQO-E;i-E;iOOQO,5:[,5:[OOQP,59Z,59ZO)xQWO,5:[O)xQWO,5:[O!5oQWO,5?kO!5zQYO,5;qO!6PQYO,5;TO!6hQWO,59QO!7kQXO'#CnO!7xQXO'#I`O!9SQWO'#CoO,^QWO'#EiOOQV-E;n-E;nO!9eQWO'#FsOOQV,5<g,5<gO!9SQWO'#CoO!9jQWO'#CoO!9oQWO'#I`O! yQWO'#JuO!9yQWO'#J`O!:aQWO,5;VOOQO'#In'#InO!0zQWO'#DaO!<aQWO'#DcO!<iQWO,5;ZO.YQ_O,5;ZOOQO,5;[,5;[OOQV'#Er'#ErOOQV'#Es'#EsOOQV'#Et'#EtOOQV'#Eu'#EuOOQV'#Ev'#EvOOQV'#Ew'#EwOOQV'#Ex'#ExOOQV'#Ey'#EyO.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;fO!=PQ_O,5;kO!@gQ_O'#FROOQO,5;l,5;lO!BrQWO,5;pO.YQ_O,5;wOKlQYO,5;gO!D_QWO,5;kO!EOQWO,5;xOOQO,5;x,5;xO!E]QWO,5;xO!EbQ_O,5;xO!GmQWO'#CfO!GrQWO,5<QO!G|Q_O,5<QOOQO,5;{,5;{O!JjQXO'#CnO!K{QXO'#I`OOQS'#Dk'#DkOOQP'#Ir'#IrO!LuQ[O'#IrO!L}QXO'#DjO!M{QWO'#DnO!M{QWO'#DnO!N^QWO'#DnOOQP'#It'#ItO!NcQXO'#ItO# ^Q^O'#DoO# hQWO'#DrO# pQ^O'#DzO# zQ^O'#D|O#!RQWO'#EPO#!^QXO'#FdOOQP'#ES'#ESOOQP'#Iq'#IqO#!lQXO'#JfOOQP'#Je'#JeO#!tQXO,5;}O#!yQXO'#I`O!1PQ^O'#DyO!1PQ^O'#FdO##sQWO,5;|OOQO,5;|,5;|OKlQYO,5;|O#$ZQWO'#FhOOQO,5<R,5<ROOQV,5=l,5=lO#&`QYO'#FzOOQV,5<h,5<hO#&gQWO,5<hO#&nQWO,5=SO!1WQWO,59rO!1dQWO,5<dO#&uQWO,5=iO!2_QWO,5<jO!2_QWO,5<zO!2_QWO,5<|O!2_QWO,5=QO#&|QWO,5=]O#'TQWO,5=SO!2_QWO,5=]O!3|QWO,5=aO#']QWO,5=jOOQO-E;|-E;|O#'hQWO'#JjOOQV-E;h-E;hO#(PQWO'#HRO#(WQ_O,59pOOQV,59p,59pO#(_QWO,59pO#(dQ_O,59pO#)SQZO'#CuO#+[QZO'#CvOOQV'#C|'#C|O#-wQWO'#HTO#.OQYO'#IdOOQO'#Hh'#HhO#.WQWO'#CwO#.WQWO'#CwO#.iQWO'#CwOOQR'#Ic'#IcO#.nQZO'#IbO#1TQYO'#HTO#1qQYO'#H[O#2}QYO'#H_OKlQYO'#H`OOQR'#Hb'#HbO#4ZQWO'#HeO#4`QYO,59]OOQR'#Ib'#IbO#5PQZO'#CtO#7[QYO'#HUO#7aQWO'#HTO#7fQYO'#CrO#8VQWO'#H]O#7fQYO'#HcOOQV-E;e-E;eO#8_QWO,59sOOQV,59{,59{O#8mQYO,5=[OOQV,59},59}O!0zQWO,59}O#;aQWO'#IpOOQO'#Ip'#IpO!1PQ^O'#DhO!0zQWO,5:QO#;hQWO,5;iO#<OQWO,5;rO#<fQ_O,5;rOOQO,5;u,5;uO#@PQ_O,5;|O#BXQWO,5;PO!0zQWO,5<XO#B`QWO,5<ZOOQV,5<Z,5<ZO#BkQWO,5<]O!1PQ^O'#EOOOQQ'#D_'#D_O#BsQWO,59rO#BxQWO,5<`O#B}QWO,5<dOOQO,5@U,5@UO#CVQWO,5=iOOQQ'#Cv'#CvO#C[QYO,5<jO#CmQYO,5<zO#CxQYO,5<|O#DTQYO,5=_O#DcQYO,5=SO#E{QYO'#GQO#FYQYO,5=[O#FmQWO,5=[O#F{QYO,5=[O#HUQYO,5=]O#HdQWO,5=`O!1PQ^O,5=`O#HrQWO'#CnO#ITQWO'#I`OOQO'#Jy'#JyO#IfQWO'#IQO#IkQWO'#GwOOQO'#Jz'#JzO#JSQWO'#GzOOQO'#G|'#G|OOQO'#Jx'#JxO#IkQWO'#GwO#JZQWO'#GxO#J`QWO,5=aO#JeQWO,5=jO!1dQWO,5=jO#'`QWO,5=jPOOO'#Hf'#HfP#JjOpO,58}POOO,58},58}OOOO-E;g-E;gOOQV1G/T1G/TO#JuQWO1G4{O#JzQ^O'#CyPOQQ'#Cx'#CxOOQO1G/v1G/vOOQP1G.u1G.uO)xQWO1G/vO#NTQ!fO'#ETO#N[Q!fO'#EaO#NcQ!fO'#EbO$ kQWO1G1yO$!_Q_O1G1yOOQP1G5V1G5VOOQO1G1]1G1]O$&RQWO1G0oO$&WQWO'#CiO!7xQXO'#I`O!6PQYO1G.lO!5oQWO,5<_O!9SQWO,59ZO!9SQWO,59ZO!5oQWO,5?kO$&iQWO1G0uO$(vQWO1G0wO$*nQWO1G0wO$+UQWO1G0wO$-YQWO1G0wO$-aQWO1G0wO$/bQWO1G0wO$/iQWO1G0wO$1jQWO1G0wO$1qQWO1G0wO$3YQWO1G1QO$5ZQWO1G1VO$5zQ_O'#JcO$8SQWO'#JcOOQO'#Jb'#JbO$8^QWO,5;mOOQO'#Dw'#DwOOQO1G1[1G1[OOQO1G1Y1G1YO$8cQWO1G1cOOQO1G1R1G1RO$8jQ_O'#HrO$:xQWO,5@OO.YQ_O1G1dOOQO1G1d1G1dO$;QQWO1G1dO$;_QWO1G1dO$;dQWO1G1eOOQO1G1l1G1lO$;lQWO1G1lOOQP,5?^,5?^O$;vQ^O,5:kO$<aQXO,5:YO!M{QWO,5:YO!M{QWO,5:YO!1PQ^O,5:gO$=bQWO'#IyOOQO'#Ix'#IxO$=pQWO,5:ZO# ^Q^O,5:ZO$=uQWO'#DsOOQP,5:^,5:^O$>WQWO,5:fOOQP,5:h,5:hO!1PQ^O,5:hO!1PQ^O,5:mO$>]QYO,5<OO$>gQ_O'#HsO$>tQXO,5@QOOQV1G1i1G1iOOQP,5:e,5:eO$>|QXO,5<OO$?[QWO1G1hO$?dQWO'#CnO$?oQWO'#FiOOQO'#Fi'#FiO$?wQWO'#FjO.YQ_O'#FkOOQO'#Ji'#JiO$?|QWO'#JhOOQO'#Jg'#JgO$@UQWO,5<SOOQQ'#Hv'#HvO$@ZQYO,5<fOOQV,5<f,5<fO$@bQYO,5<fOOQV1G2S1G2SO$@iQWO1G2nO$@qQWO1G/^O$@vQWO1G2OO#CVQWO1G3TO$AOQYO1G2UO#CmQYO1G2fO#CxQYO1G2hO$AaQYO1G2lO!2_QWO1G2wO#DcQYO1G2nO#HUQYO1G2wO$AiQWO1G2{O$AnQWO1G3UO!1dQWO1G3UO$AsQWO1G3UOOQV1G/[1G/[O$A{QWO1G/[O$BQQ_O1G/[O#7aQWO,5=oO$BXQYO,5?OO$BmQWO,5?OO$BrQZO'#IeOOQO-E;f-E;fOOQR,59c,59cO#.WQWO,59cO#.WQWO,59cOOQR,5=n,5=nO$E_QYO'#HVO$FwQZO,5=oO!5oQWO,5={O$IZQWO,5=oO$IbQZO,5=vO$KqQYO,5=vO$>]QYO,5=vO$LRQWO'#KRO$L^QWO,5=xOOQR,5=y,5=yO$LcQWO,5=zO$>]QYO,5>PO$>]QYO,5>POOQO1G.w1G.wO$>]QYO1G.wO$LnQYO,5=pO$LvQZO,59^OOQR,59^,59^O$>]QYO,5=wO% YQZO,5=}OOQR,5=},5=}O%#lQWO1G/_O!6PQYO1G/_O#FYQYO1G2vO%#qQWO1G2vO%$PQYO1G2vOOQV1G/i1G/iO%%YQWO,5:SO%%bQ_O1G/lO%*kQWO1G1^O%+RQWO1G1hOOQO1G1h1G1hO$>]QYO1G1hO%+iQ^O'#EgOOQV1G0k1G0kOOQV1G1s1G1sO!!vQ_O1G1sO!0zQWO1G1uO!1PQ^O1G1wO!.cQ_O1G1wOOQP,5:j,5:jO$>]QYO1G/^OOQO'#Cn'#CnO%+vQWO1G1zOOQV1G2O1G2OO%,OQWO'#CnO%,WQWO1G3TO%,]QWO1G3TO%,bQYO'#GQO%,sQWO'#G]O%-UQYO'#G_O%.hQYO'#GXOOQV1G2U1G2UO%/wQWO1G2UO%/|QWO1G2UO$ARQWO1G2UOOQV1G2f1G2fO%/wQWO1G2fO#CpQWO1G2fO%0UQWO'#GdOOQV1G2h1G2hO%0gQWO1G2hO#C{QWO1G2hO%0lQYO'#GSO$>]QYO1G2lO$AdQWO1G2lOOQV1G2y1G2yO%1xQWO1G2yO%3hQ^O'#GkO%3rQWO1G2nO#DfQWO1G2nO%4QQYO,5<lO%4[QYO,5<lO%4jQYO,5<lO%5XQYO,5<lOOQQ,5<l,5<lO!1WQWO'#JuO%5dQYO,5<lO%5lQWO1G2vOOQV1G2v1G2vO%5tQWO1G2vO$>]QYO1G2vOOQV1G2w1G2wO%5tQWO1G2wO%5yQWO1G2wO#HXQWO1G2wOOQV1G2z1G2zO.YQ_O1G2zO$>]QYO1G2zO%6RQWO1G2zOOQO,5>l,5>lOOQO-E<O-E<OOOQO,5=c,5=cOOQO,5=e,5=eOOQO,5=g,5=gOOQO,5=h,5=hO%6aQWO'#J|OOQO'#J{'#J{O%6iQWO,5=fO%6nQWO,5=cO!1dQWO,5=dOOQV1G2{1G2{O$>]QYO1G3UPOOO-E;d-E;dPOOO1G.i1G.iOOQO7+*g7+*gO%7VQYO'#IcO%7nQYO'#IfO%7yQYO'#IfO%8RQYO'#IfO%8^QYO,59eOOQO7+%b7+%bOOQP7+$a7+$aO%8cQ!fO'#JTOOQS'#EX'#EXOOQS'#EY'#EYOOQS'#EZ'#EZOOQS'#JT'#JTO%;UQWO'#EWOOQS'#E`'#E`OOQS'#JR'#JROOQS'#Hn'#HnO%;ZQ!fO,5:oOOQV,5:o,5:oOOQV'#JQ'#JQO%;bQ!fO,5:{OOQV,5:{,5:{O%;iQ!fO,5:|OOQV,5:|,5:|OOQV7+'e7+'eOOQV7+&Z7+&ZO%;pQ!fO,59TOOQO,59T,59TO%>YQWO7+$WO%>_QWO1G1yOOQV1G1y1G1yO!9SQWO1G.uO%>dQWO,5?}O%>nQ_O'#HqO%@|QWO,5?}OOQO1G1X1G1XOOQO7+&}7+&}O%AUQWO,5>^OOQO-E;p-E;pO%AcQWO7+'OO.YQ_O7+'OOOQO7+'O7+'OOOQO7+'P7+'PO%AjQWO7+'POOQO7+'W7+'WOOQP1G0V1G0VO%ArQXO1G/tO!M{QWO1G/tO%BsQXO1G0RO%CkQ^O'#HlO%C{QWO,5?eOOQP1G/u1G/uO%DWQWO1G/uO%D]QWO'#D_OOQO'#Dt'#DtO%DhQWO'#DtO%DmQWO'#I{OOQO'#Iz'#IzO%DuQWO,5:_O%DzQWO'#DtO%EPQWO'#DtOOQP1G0Q1G0QOOQP1G0S1G0SOOQP1G0X1G0XO%EXQXO1G1jO%EdQXO'#FeOOQP,5>_,5>_O!1PQ^O'#FeOOQP-E;q-E;qO$>]QYO1G1jOOQO7+'S7+'SOOQO,5<T,5<TO%ErQWO,5<UO.YQ_O,5<UO%EwQWO,5<VO%FRQWO'#HtO%FdQWO,5@SOOQO1G1n1G1nOOQQ-E;t-E;tOOQV1G2Q1G2QO%FlQYO1G2QO#DcQYO7+(YO$>]QYO7+$xOOQV7+'j7+'jO%FsQWO7+(oO%FxQWO7+(oOOQV7+'p7+'pO%/wQWO7+'pO%F}QWO7+'pO%GVQWO7+'pOOQV7+(Q7+(QO%/wQWO7+(QO#CpQWO7+(QOOQV7+(S7+(SO%0gQWO7+(SO#C{QWO7+(SO$>]QYO7+(WO%GeQWO7+(WO#HUQYO7+(cO%GjQWO7+(YO#DfQWO7+(YOOQV7+(c7+(cO%5tQWO7+(cO%5yQWO7+(cO#HXQWO7+(cOOQV7+(g7+(gO$>]QYO7+(pO%GxQWO7+(pO!1dQWO7+(pOOQV7+$v7+$vO%G}QWO7+$vO%HSQZO1G3ZO%JfQWO1G4jOOQO1G4j1G4jOOQR1G.}1G.}O#.WQWO1G.}O%JkQWO'#KQOOQO'#HW'#HWO%J|QWO'#HXO%KXQWO'#KQOOQO'#KP'#KPO%KaQWO,5=qO%KfQYO'#H[O%LrQWO'#GmO%L}QYO'#CtO%MXQWO'#GmO$>]QYO1G3ZOOQR1G3g1G3gO#7aQWO1G3ZO%M^QZO1G3bO$>]QYO1G3bO& mQYO'#IVO& }QWO,5@mOOQR1G3d1G3dOOQR1G3f1G3fO.YQ_O1G3fOOQR1G3k1G3kO&!VQYO7+$cO&!_QYO'#KOOOQQ'#J}'#J}O&!gQYO1G3[O&!lQZO1G3cOOQQ7+$y7+$yO&${QWO7+$yO&%QQWO7+(bOOQV7+(b7+(bO%5tQWO7+(bO$>]QYO7+(bO#FYQYO7+(bO&%YQWO7+(bO!.cQ_O1G/nO&%hQWO7+%WO$?[QWO7+'SO&%pQWO'#EhO&%{Q^O'#EhOOQU'#Ho'#HoO&%{Q^O,5;ROOQV,5;R,5;RO&&VQWO,5;RO&&[Q^O,5;RO!0zQWO7+'_OOQV7+'a7+'aO&&iQWO7+'cO&&qQWO7+'cO&&xQWO7+$xO&'TQ!fO7+'fO&'[Q!fO7+'fOOQV7+(o7+(oO!1dQWO7+(oO&'cQYO,5<lO&'nQYO,5<lO!1dQWO'#GWO&'|QWO'#JpO&([QWO'#G^O!BxQWO'#G^O&(aQWO'#JpOOQO'#Jo'#JoO&(iQWO,5<wOOQO'#DX'#DXO&(nQYO'#JrO&)}QWO'#JrO$>]QYO'#JrOOQO'#Jq'#JqO&*YQWO,5<yO&*_QWO'#GZO#D^QWO'#G[O&*gQWO'#G[O&*oQWO'#JmOOQO'#Jl'#JlO&*zQYO'#GTOOQO,5<s,5<sO&+PQWO7+'pO&+UQWO'#JtO&+dQWO'#GeO#BxQWO'#GeO&+uQWO'#JtOOQO'#Js'#JsO&+}QWO,5=OO$>]QYO'#GUO&,SQYO'#JkOOQQ,5<n,5<nO&,kQWO7+(WOOQV7+(e7+(eO&.TQ^O'#D|O&._QWO'#GlO&.gQ^O'#JwOOQO'#Gn'#GnO&.nQWO'#JwOOQO'#Jv'#JvO&.vQWO,5=VO&.{QWO'#I`O&/]Q^O'#GmO&/dQWO'#IqO&/rQWO'#GmOOQV7+(Y7+(YO&/zQWO7+(YO$>]QYO7+(YO&0SQYO'#HxO&0hQYO1G2WOOQQ1G2W1G2WOOQQ,5<m,5<mO$>]QYO,5<qO&0pQWO,5<rO&0uQWO7+(bO&1QQWO7+(fO&1XQWO7+(fOOQV7+(f7+(fO.YQ_O7+(fO$>]QYO7+(fO&1dQWO'#IRO&1nQWO,5@hOOQO1G3Q1G3QOOQO1G2}1G2}OOQO1G3P1G3POOQO1G3R1G3ROOQO1G3S1G3SOOQO1G3O1G3OO&1vQWO7+(pO$>]QYO,59fO&2RQ^O'#ISO&2xQYO,5?QOOQR1G/P1G/PO&3QQ!bO,5:pO&3VQ!fO,5:rOOQS-E;l-E;lOOQV1G0Z1G0ZOOQV1G0g1G0gOOQV1G0h1G0hO&3^QWO'#JTOOQO1G.o1G.oOOQV<<Gr<<GrO&3iQWO1G5iO$5zQ_O,5>]O&3qQWO,5>]OOQO-E;o-E;oOOQO<<Jj<<JjO&3{QWO<<JjOOQO<<Jk<<JkO&4SQXO7+%`O&5TQWO,5>WOOQO-E;j-E;jOOQP7+%a7+%aO!1PQ^O,5:`O&5cQWO'#HmO&5wQWO,5?gOOQP1G/y1G/yOOQO,5:`,5:`O&6PQWO,5:`O%DzQWO,5:`O$>]QYO,5<PO&6UQXO,5<PO&6dQXO7+'UO.YQ_O1G1pO&6oQWO1G1pOOQO,5>`,5>`OOQO-E;r-E;rOOQV7+'l7+'lO&6yQWO<<KtO#DfQWO<<KtO&7XQWO<<HdOOQV<<LZ<<LZO!1dQWO<<LZOOQV<<K[<<K[O&7dQWO<<K[O%/wQWO<<K[O&7iQWO<<K[OOQV<<Kl<<KlO%/wQWO<<KlOOQV<<Kn<<KnO%0gQWO<<KnO&7qQWO<<KrO$>]QYO<<KrOOQV<<K}<<K}O%5tQWO<<K}O%5yQWO<<K}O#HXQWO<<K}OOQV<<Kt<<KtO&7yQWO<<KtO$>]QYO<<KtO&8RQWO<<L[O$>]QYO<<L[O&8^QWO<<L[OOQV<<Hb<<HbO$>]QYO7+(uOOQO7+*U7+*UOOQR7+$i7+$iO&8cQWO,5@lOOQO'#Gm'#GmO&8kQWO'#GmO&8vQYO'#IUO&8cQWO,5@lOOQR1G3]1G3]O&:cQYO,5=vO&;rQYO,5=XO&;|QWO,5=XOOQO,5=X,5=XOOQR7+(u7+(uO&<RQZO7+(uO&>eQZO7+(|O&@tQWO,5>qOOQO-E<T-E<TO&APQWO7+)QOOQO<<G}<<G}O&AWQYO'#ITO&AcQYO,5@jOOQQ7+(v7+(vOOQQ<<He<<HeO$>]QYO<<K|OOQV<<K|<<K|O&0uQWO<<K|O&AkQWO<<K|O%5tQWO<<K|O&AsQWO7+%YOOQV<<Hr<<HrOOQO<<Jn<<JnO.YQ_O,5;SO&AzQWO,5;SO.YQ_O'#EjO&BPQWO,5;SOOQU-E;m-E;mO&B[QWO1G0mOOQV1G0m1G0mO&%{Q^O1G0mOOQV<<Jy<<JyO!.cQ_O<<J}OOQV<<J}<<J}OOQV<<Hd<<HdO.YQ_O<<HdO&BaQWO'#FvO&BfQWO<<KQO&BnQ!fO<<KQO&BuQWO<<KQO&BzQWO<<KQO&CSQ!fO<<KQOOQV<<KQ<<KQO&CZQWO<<LZO&C`QWO,5@[O$>]QYO,5<xO&ChQWO,5<xO&CmQWO'#H{O&C`QWO,5@[OOQV1G2c1G2cO&DRQWO,5@^O$>]QYO,5@^O&D^QYO'#H|O&EsQWO,5@^OOQO1G2e1G2eO%,nQWO,5<uOOQO,5<v,5<vO&E{QYO'#HzO&G_QWO,5@XO%,bQYO,5=pO$>]QYO,5<oO&GjQWO,5@`O.YQ_O,5=PO&GrQWO,5=PO&G}QWO,5=PO&H`QWO'#H}O&GjQWO,5@`OOQV1G2j1G2jO&HtQYO,5<pO%0lQYO,5>PO&I]QYO,5@VOOQV<<Kr<<KrO&ItQWO,5=XO&KfQ^O,5:hO&KmQWO,5=XO$>]QYO,5=WO&KuQWO,5@cO&K}QWO,5@cO&MvQ^O'#IPO&KuQWO,5@cOOQO1G2q1G2qO&NTQWO,5=WO&N]QWO<<KtO&NkQYO,5>oO&NvQYO,5>dO' UQYO,5>dOOQQ,5>d,5>dOOQQ-E;v-E;vOOQQ7+'r7+'rO' aQYO1G2]O$>]QYO1G2^OOQV<<LQ<<LQO.YQ_O<<LQO' lQWO<<LQO' sQWO<<LQOOQO,5>m,5>mOOQO-E<P-E<POOQV<<L[<<L[O.YQ_O<<L[O'!OQYO1G/QO'!ZQYO,5>nOOQQ,5>n,5>nO'!fQYO,5>nOOQQ-E<Q-E<QOOQS1G0[1G0[O'$tQ!fO1G0^O'%RQ!fO1G0^O'%YQWO1G3wOOQOAN@UAN@UO'%dQWO1G/zOOQO,5>X,5>XOOQO-E;k-E;kO!1PQ^O1G/zOOQO1G/z1G/zO'%oQWO1G/zO'%tQXO1G1kO$>]QYO1G1kO'&PQWO7+'[OOQVANA`ANA`O'&ZQWOANA`O$>]QYOANA`O'&cQWOANA`OOQVAN>OAN>OO.YQ_OAN>OO'&qQWOANAuOOQVAN@vAN@vO'&vQWOAN@vOOQVANAWANAWOOQVANAYANAYOOQVANA^ANA^O'&{QWOANA^OOQVANAiANAiO%5tQWOANAiO%5yQWOANAiO''TQWOANA`OOQVANAvANAvO.YQ_OANAvO''cQWOANAvO$>]QYOANAvOOQR<<La<<LaO''nQWO1G6WO%JkQWO,5>pOOQO'#HY'#HYO''vQWO'#HZOOQO,5>p,5>pOOQO-E<S-E<SO'(RQYO1G2sO'(]QWO1G2sOOQO1G2s1G2sO$>]QYO<<LaOOQR<<Ll<<LlOOQQ,5>o,5>oOOQQ-E<R-E<RO&0uQWOANAhOOQVANAhANAhO%5tQWOANAhO$>]QYOANAhO'(bQWO1G1rO')UQ^O1G0nO.YQ_O1G0nO'*zQWO,5;UO'+RQWO1G0nP'+WQWO'#ERP&%{Q^O'#HpOOQV7+&X7+&XO'+cQWO7+&XO&&qQWOAN@iO'+hQWOAN>OO!5oQWO,5<bOOQS,5>a,5>aO'+oQWOAN@lO'+tQWOAN@lOOQS-E;s-E;sOOQVAN@lAN@lO'+|QWOAN@lOOQVANAuANAuO',UQWO1G5vO',^QWO1G2dO$>]QYO1G2dO&'|QWO,5>gOOQO,5>g,5>gOOQO-E;y-E;yO',iQWO1G5xO',qQWO1G5xO&(nQYO,5>hO',|QWO,5>hO$>]QYO,5>hOOQO-E;z-E;zO'-XQWO'#JnOOQO1G2a1G2aOOQO,5>f,5>fOOQO-E;x-E;xO&'cQYO,5<lO'-gQYO1G2ZO'.RQWO1G5zO'.ZQWO1G2kO.YQ_O1G2kO'.eQWO1G2kO&+UQWO,5>iOOQO,5>i,5>iOOQO-E;{-E;{OOQQ,5>c,5>cOOQQ-E;u-E;uO'.pQWO1G2sO'/QQWO1G2rO'/]QWO1G5}O'/eQ^O,5>kOOQO'#Go'#GoOOQO,5>k,5>kO'/lQWO,5>kOOQO-E;}-E;}O$>]QYO1G2rO'/zQYO7+'xO'0VQWOANAlOOQVANAlANAlO.YQ_OANAlO'0^QWOANAvOOQS7+%x7+%xO'0eQWO7+%xO'0pQ!fO7+%xO'0}QWO7+%fO!1PQ^O7+%fO'1YQXO7+'VOOQVG26zG26zO'1eQWOG26zO'1sQWOG26zO$>]QYOG26zO'1{QWOG23jOOQVG27aG27aOOQVG26bG26bOOQVG26xG26xOOQVG27TG27TO%5tQWOG27TO'2SQWOG27bOOQVG27bG27bO.YQ_OG27bO'2ZQWOG27bOOQO1G4[1G4[OOQO7+(_7+(_OOQRANA{ANA{OOQVG27SG27SO%5tQWOG27SO&0uQWOG27SO'2fQ^O7+&YO'4PQWO7+'^O'4sQ^O7+&YO.YQ_O7+&YP.YQ_O,5;SP'6PQWO,5;SP'6UQWO,5;SOOQV<<Is<<IsOOQVG26TG26TOOQVG23jG23jOOQO1G1|1G1|OOQVG26WG26WO'6aQWOG26WP&B}QWO'#HuO'6fQWO7+(OOOQO1G4R1G4RO'6qQWO7++dO'6yQWO1G4SO$>]QYO1G4SO%,nQWO'#HyO'7UQWO,5@YO'7dQWO7+(VO.YQ_O7+(VOOQO1G4T1G4TOOQO1G4V1G4VO'7nQWO1G4VO'7|QWO7+(^OOQVG27WG27WO'8XQWOG27WOOQS<<Id<<IdO'8`QWO<<IdO'8kQWO<<IQOOQVLD,fLD,fO'8vQWOLD,fO'9OQWOLD,fOOQVLD)ULD)UOOQVLD,oLD,oOOQVLD,|LD,|O'9^QWOLD,|O.YQ_OLD,|OOQVLD,nLD,nO%5tQWOLD,nO'9eQ^O<<ItO';OQWO<<JxO';rQ^O<<ItP'=OQWO1G0nP'=oQ^O1G0nP.YQ_O1G0nP'?bQWO1G0nOOQVLD+rLD+rO'?gQWO7+)nOOQO,5>e,5>eOOQO-E;w-E;wO'?rQWO<<KqOOQVLD,rLD,rOOQSAN?OAN?OOOQV!$(!Q!$(!QO'?|QWO!$(!QOOQV!$(!h!$(!hO'@UQWO!$(!hOOQV!$(!Y!$(!YO'@]Q^OAN?`POQU7+&Y7+&YP'AvQWO7+&YP'BgQ^O7+&YP.YQ_O7+&YOOQV!)9El!)9ElOOQV!)9FS!)9FSPOQU<<It<<ItP'DYQWO<<ItP'DyQ^O<<ItPOQUAN?`AN?`O'FlQWO'#CnO'FsQXO'#CnO'GlQWO'#I`O'IRQXO'#I`O'IxQWO'#DpO'IxQWO'#DpO!.cQ_O'#EkO'JZQ_O'#EoO'JbQ_O'#FPO'MfQ_O'#FbO'MmQXO'#I`O'NdQ_O'#E}O( gQ_O'#FWO'IxQWO,5:[O'IxQWO,5:[O!.cQ_O,5;ZO!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;fO(!jQ_O,5;kO(%nQWO,5;kO(&OQWO,5;|O(&VQYO'#CuO(&bQYO'#CvO(&mQWO'#CwO(&mQWO'#CwO('OQYO'#CtO('ZQWO,5;iO('bQWO,5;rO('iQ_O,5;rO((oQ_O,5;|O'IxQWO1G/vO((vQWO1G0uO(*eQWO1G0wO(*oQWO1G0wO(,dQWO1G0wO(,kQWO1G0wO(.]QWO1G0wO(.dQWO1G0wO(0UQWO1G0wO(0]QWO1G0wO(0dQWO1G1QO(0tQWO1G1VO(1UQYO'#IeO(&mQWO,59cO(&mQWO,59cO(1aQWO1G1^O(1hQWO1G1hO(&mQWO1G.}O(1oQWO'#DpO!.^QXO'#FbO(1tQWO,5;ZO(1{QWO'#Cw\",\n  stateData: \"(2_~O&|OSUOS&}PQ~OPoOQ!QOSVOTVOZeO[lO^RO_RO`ROa!UOd[Og!nOsVOtVOuVOw!POyvO|!VO}mO!Q!dO!U!WO!W!XO!X!^O!Z!YO!]!pO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO$i!eO$m!fO$q!gO$s!hO%T!iO%V!jO%Z!kO%]!lO%^!mO%f!oO%j!qO%s!rO'Q`O'TQO'ZkO'^UO'gcO'qiO(QdO~O&}!sO~OZbX[bXdbXdlXobXwjX}bX!lbX!qbX!tbX#ObX#PbX#pbX'gbX'qbX'rbX'xbX'ybX'zbX'{bX'|bX'}bX(ObX(PbX(QbX(RbX(TbX~OybXXbX!ebX!PbXvbX#RbX~P$|OZ'SX['SXd'SXd'XXo'SXw'kXy'SX}'SX!l'SX!q'SX!t'SX#O'SX#P'SX#p'SX'g'SX'q'SX'r'SX'x'SX'y'SX'z'SX'{'SX'|'SX'}'SX(O'SX(P'SX(Q'SX(R'SX(T'SXv'SX~OX'SX!e'SX!P'SX#R'SX~P'ZOr!uO']!wO'_!uO~Od!xO~O^RO_RO`ROaRO'TQO~Od!}O~Od#PO[(SXo(SXy(SX}(SX!l(SX!q(SX!t(SX#O(SX#P(SX#p(SX'g(SX'q(SX'r(SX'x(SX'y(SX'z(SX'{(SX'|(SX'}(SX(O(SX(P(SX(Q(SX(R(SX(T(SXv(SX~OZ#OO~P*`OZ#RO[#QO~OQ!QO^#TO_#TO`#TOa#]Od#ZOg!nOyvO|!VO!Q!dO!U#^O!W!lO!]!pO$i!eO$m!fO$q!gO$s!hO%T!iO%V!jO%Z!kO%]!lO%^!mO%f!oO%j!qO%s!rO'Q#VO'T#SO~OPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO'gcO'qiO(QdO~P)xOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!j#eO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO'gcO'qiO(QdO~P)xO[#}Oo#xO}#zO!l#yO!q#jO!t#yO#O#xO#P#uO#p$OO'g#gO'q#yO'r#lO'x#hO'y#iO'z#iO'{#kO'|#nO'}#mO(O#|O(P#gO(Q#hO(R#fO(T#hO~OPoOQ!QOSVOTVOZeOd[OsVOtVOuVOw!PO!U#bO!W#cO!X!^O!Z!YO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO[#sXo#sXy#sX}#sX!l#sX!q#sX!t#sX#O#sX#P#sX#p#sX'g#sX'q#sX'r#sX'x#sX'y#sX'z#sX'{#sX'|#sX'}#sX(O#sX(P#sX(Q#sX(R#sX(T#sXX#sX!e#sX!P#sXv#sX#R#sX~P)xOX(SX!e(SX!P(SXw(SX#R(SX~P*`OPoOQ!QOSVOTVOX$ROZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'Q$UO'ZkO'^UO'gcO'qiO(QdO~P)xOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!P$XO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'Q$UO'ZkO'^UO'gcO'qiO(QdO~P)xOQ!QOSVOTVO[$gO^$pO_$ZO`9yOa9yOd$aOsVOtVOuVO}$eO!i$qO!l$lO!q$hO#V$lO'T$YO'^UO'g$[O~O!j$rOP(XP~P<cOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Q$uO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO'gcO'qiO(QdO~P)xOw$vO~Oo'bX#O'bX#P'bX#p'bX'r'bX'x'bX'y'bX'z'bX'{'bX'|'bX'}'bX(O'bX(P'bX(R'bX(T'bX~OP%tXQ%tXS%tXT%tXZ%tX[%tX^%tX_%tX`%tXa%tXd%tXg%tXs%tXt%tXu%tXw%tXy%tX|%tX}%tX!Q%tX!U%tX!W%tX!X%tX!Z%tX!]%tX!l%tX!q%tX!t%tX#Y%tX#r%tX#{%tX$O%tX$b%tX$d%tX$f%tX$i%tX$m%tX$q%tX$s%tX%T%tX%V%tX%Z%tX%]%tX%^%tX%f%tX%j%tX%s%tX&z%tX'Q%tX'T%tX'Z%tX'^%tX'g%tX'q%tX(Q%tXv%tX~P@[Oy$xO['bX}'bX!l'bX!q'bX!t'bX'g'bX'q'bX(Q'bXv'bX~P@[Ow$yO!Q(iX!U(iX!W(iX$q(iX%](iX%^(iX~Oy$zO~PEsO!Q$}O!U%UO!W!lO$m%OO$q%PO$s%QO%T%RO%V%SO%Z%TO%]!lO%^%VO%f%WO%j%XO%s%YO~O!Q!lO!U!lO!W!lO$q%[O%]!lO~O%^%VO~PGaOPoOQ!QOSVOTVOZeO[lO^RO_RO`ROa!UOd[Og!nOsVOtVOuVOw!POyvO|!VO}mO!Q!dO!U!WO!W!XO!X!^O!Z!YO!]!pO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO$i!eO$m!fO$q!gO$s!hO%T!iO%V!jO%Z!kO%]!lO%^!mO%f!oO%j!qO%s!rO'Q#VO'TQO'ZkO'^UO'gcO'qiO(QdO~Ov%`O~P]OQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f%wO%^%xO&W%{O'T%dO'Z%eO(Q%zO~PGaO!Q{X!U{X!W{X$m{X$q{X$s{X%T{X%V{X%Z{X%]{X%^{X%f{X%j{X%s{X~P'ZO!Q{X!U{X!W{X$m{X$q{X$s{X%T{X%V{X%Z{X%]{X%^{X%f{X%j{X%s{X~O}%}O'T{XQ{XZ{X[{X^{X_{X`{Xa{Xd{Xg{X!q{X$f{X&W{X'Z{X(Q{X~PMuOg&PO%f%WO!Q(iX!U(iX!W(iX$q(iX%](iX%^(iX~Ow!PO~P! yOw!PO!X&RO~PEvOPoOQ!QOSVOTVOZeO[lO^9qO_9qO`9qOa9qOd9tOsVOtVOuVOw!PO}mO!U#bO!W#cO!X:zO!Z!YO!]&UO!l9wO!q9vO!t9wO#Y!_O#r9zO#{9{O$O!]O$b!`O$d!bO$f!cO'T9oO'ZkO'^UO'gcO'q9wO(QdO~OPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO'gcO'qiO(QdOo#qXy#qX#O#qX#P#qX#p#qX'r#qX'x#qX'y#qX'z#qX'{#qX'|#qX'}#qX(O#qX(P#qX(R#qX(T#qXX#qX!e#qX!P#qXv#qX#R#qX~P)xOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO'gcO'qiO(QdOo#zXy#zX#O#zX#P#zX#p#zX'r#zX'x#zX'y#zX'z#zX'{#zX'|#zX'}#zX(O#zX(P#zX(R#zX(T#zXX#zX!e#zX!P#zXv#zX#R#zX~P)xO'ZkO[#}Xo#}Xy#}X}#}X!l#}X!q#}X!t#}X#O#}X#P#}X#p#}X'g#}X'q#}X'r#}X'x#}X'y#}X'z#}X'{#}X'|#}X'}#}X(O#}X(P#}X(Q#}X(R#}X(T#}XX#}X!e#}X!P#}Xv#}Xw#}X#R#}X~OPoO~OPoOQ!QOSVOTVOZeO[lO^9qO_9qO`9qOa9qOd9tOsVOtVOuVOw!PO}mO!U#bO!W#cO!X:zO!Z!YO!l9wO!q9vO!t9wO#Y!_O#r9zO#{9{O$O!]O$b!`O$d!bO$f!cO'T9oO'ZkO'^UO'gcO'q9wO(QdO~O!S&_O~Ow!PO~O!j&bO~P<cO'T&cO~PEvOZ&eO~O'T&cO~O'^UOw(^Xy(^X!Q(^X!U(^X!W(^X$q(^X%](^X%^(^X~Oa&hO~P!1iO'T&iO~O_&nO'T&cO~OQ&oOZ&pO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f%wO%^%xO&W%{O'T%dO'Z%eO(Q%zO~PGaO!j&uO~P<cO^&wO_&wO`&wOa&wOd'POw&|O'T&vO(Q&}O~O!i'UO!j'TO'T&cO~O&}!sO'O'VO'P'XO~Or!uO']'ZO'_!uO~OQ']O^'ia_'ia`'iaa'ia'T'ia~O['cOw'dO}'bO~OQ']O~OQ!QO^#TO_#TO`#TOa'kOd#ZO'T#SO~O['lO~OZbXdlXXbXobXPbX!SbX!ebX'rbX!PbX!ObXybX!ZbX#RbXvbX~O[bXwbX}bX~P!6mOZ'SXd'XXX'SX['SXo'SXw'SX}'SX#p'SXP'SX!S'SX!e'SX'r'SX!P'SX!O'SXy'SX!Z'SX#R'SXv'SX~O^#TO_#TO`#TOa'kO'T#SO~OZ'mO~Od'oO~OZ'SXd'XX~PMuOZ'pOX(SX!e(SX!P(SXw(SX#R(SX~P*`O[#}O}#zO(O#|O(R#fOo#_ay#_a!l#_a!q#_a!t#_a#O#_a#P#_a#p#_a'g#_a'q#_a'r#_a'x#_a'y#_a'z#_a'{#_a'|#_a'}#_a(P#_a(Q#_a(T#_aX#_a!e#_a!P#_av#_aw#_a#R#_a~Ow!PO!X&RO~Oy#caX#ca!e#ca!P#cav#ca#R#ca~P2gOPoOQ!QOSVOTVOZeOd[OsVOtVOuVOw!PO!U#bO!W#cO!X!^O!Z!YO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO[#sao#say#sa}#sa!l#sa!q#sa!t#sa#O#sa#P#sa#p#sa'g#sa'q#sa'r#sa'x#sa'y#sa'z#sa'{#sa'|#sa'}#sa(O#sa(P#sa(Q#sa(R#sa(T#saX#sa!e#sa!P#sav#sa#R#sa~P)xOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'Q#VO'ZkO'^UO'gcO'qiO(QdO!P(UP~P)xOu(SO#w(TO'T(RO~O[#}O}#zO!q#jO'g#gO'r#lO'x#hO'y#iO'z#iO'{#kO'|#nO'}#mO(O#|O(P#gO(Q#hO(R#fO(T#hO!l#sa!t#sa#p#sa'q#sa~Oo#xO#O#xO#P#uOy#saX#sa!e#sa!P#sav#sa#R#sa~P!B}Oy(YO!e(WOX(WX~P2gOX(ZO~OPoOQ!QOSVOTVOX(ZOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'Q$UO'ZkO'^UO'gcO'qiO(QdO~P)xOZ#RO~O!P(_O!e(WO~P2gOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'Q$UO'ZkO'^UO'gcO'qiO(QdO~P)xOZbXdlXwjX}jX!tbX'qbX~OP!RX!S!RX!e!RX'p!RX'r!RX!O!RXo!RXy!RX!P!RXX!RX!Z!RX#R!RXv!RX~P!JUOZ'SXd'XXw'kX}'kX!t'SX'q'SX~OP!`X!S!`X!e!`X'r!`X!O!`Xo!`Xy!`X!P!`XX!`X!Z!`X#R!`Xv!`X~P!KgOT(aOu(aO~O!t(bO'q(bOP!^X!S!^X!e!^X'r!^X!O!^Xo!^Xy!^X!P!^XX!^X!Z!^X#R!^Xv!^X~O^9rO_9rO`9yOa9yO'T9pO~Od(eO~O'p(fOP'hX!S'hX!e'hX'r'hX!O'hXo'hXy'hX!P'hXX'hX!Z'hX#R'hXv'hX~O!j&bO!P'lP~P<cOw(kO}(jO~O!j&bOX'lP~P<cO!j(oO~P<cOZ'pO!t(bO'q(bO~O!S(qO'r(pOP$WX!e$WX~O!e(rOP(YX~OP(tO~OP!aX!S!aX!e!aX'r!aX!O!aXo!aXy!aX!P!aXX!aX!Z!aX#R!aXv!aX~P!KgOy$UaX$Ua!e$Ua!P$Uav$Ua#R$Ua~P2gO!l(|O'Q#VO'T(xOv(ZP~OQ!QO^#TO_#TO`#TOa#]Od#ZOg!nOyvO|!VO!Q!dO!U#^O!W!lO!]!pO$i!eO$m!fO$q!gO$s!hO%T!iO%V!jO%Z!kO%]!lO%^!mO%f!oO%j!qO%s!rO'Q`O'T#SO~Ov)TO~P#$iOy)VO~PEsO%^)WO~PGaOa)ZO~P!1iO%f)`O~PEvO_)aO'T&cO~O!i)fO!j)eO'T&cO~O'^UO!Q(^X!U(^X!W(^X$q(^X%](^X%^(^X~Ov%uX~P2gOv)gO~PGyOv)gO~Ov)gO~P]OQiXQ'XXZiXd'XX}iX#piX(PiX~ORiXwiX$fiX$|iX[iXoiXyiX!liX!qiX!tiX#OiX#PiX'giX'qiX'riX'xiX'yiX'ziX'{iX'|iX'}iX(OiX(QiX(RiX(TiX!PiX!eiXXiXPiXviX!SiX#RiX~P#(kOQjXQlXRjXZjXdlX}jX#pjX(PjXwjX$fjX$|jX[jXojXyjX!ljX!qjX!tjX#OjX#PjX'gjX'qjX'rjX'xjX'yjX'zjX'{jX'|jX'}jX(OjX(QjX(RjX(TjX!PjX!ejXXjX!SjXPjXvjX#RjX~O%^)jO~PGaOQ']Od)kO~O^)mO_)mO`)mOa)mO'T%dO~Od)qO~OQ']OZ)uO})sOR'UX#p'UX(P'UXw'UX$f'UX$|'UX['UXo'UXy'UX!l'UX!q'UX!t'UX#O'UX#P'UX'g'UX'q'UX'r'UX'x'UX'y'UX'z'UX'{'UX'|'UX'}'UX(O'UX(Q'UX(R'UX(T'UX!P'UX!e'UXX'UXP'UXv'UX!S'UX#R'UX~OQ!QO^:bO_:^O`TOaTOd:aO%^)jO'T:_O~PGaOQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!j)yO!q%oO$f%wO%^%xO&W%{O'T%dO'Z%eO(Q%zO~PGaOQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!P)|O!q%oO$f%wO%^%xO&W%{O'T%dO'Z%eO(Q%zO~PGaO(P*OO~OR*QO#p*RO(P*PO~OQhXQ'XXZhXd'XX}hX(PhX~ORhX#phXwhX$fhX$|hX[hXohXyhX!lhX!qhX!thX#OhX#PhX'ghX'qhX'rhX'xhX'yhX'zhX'{hX'|hX'}hX(OhX(QhX(RhX(ThX!PhX!ehXXhXPhXvhX!ShX#RhX~P#4kOQ*SO~O})sO~OQ!QO^%vO_%cO`TOaTOd%jO$f%wO%^%xO'T%dO~PGaO!Q*VO!j*VO~O^*YO`*YOa*YO!O*ZO~OQ&oOZ*[O[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f%wO%^%xO&W%{O'T%dO'Z%eO(Q%zO~PGaO[#}Oo:YO}#zO!l:ZO!q#jO!t:ZO#O:YO#P:VO#p$OO'g#gO'q:ZO'r#lO'x#hO'y#iO'z#iO'{#kO'|#nO'}#mO(O#|O(P#gO(Q#hO(R#fO(T#hO~Ow'dX~P#9vOy#qaX#qa!e#qa!P#qav#qa#R#qa~P2gOy#zaX#za!e#za!P#zav#za#R#za~P2gOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!S&_O!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO'gcO'qiO(QdOo#zay#za#O#za#P#za#p#za'r#za'x#za'y#za'z#za'{#za'|#za'}#za(O#za(P#za(R#za(T#zaX#za!e#za!P#zav#za#R#za~P)xOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Q*eO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO'gcO'qiO(QdO~P)xOw*fO~P#9vO$b*iO$d*jO$f*kO~O!O*lO'r(pO~O!S*nO~O'T*oO~Ow$yOy*qO~O'T*rO~OQ*uOw*vOy*yO}*wO$|*xO~OQ*uOw*vO$|*xO~OQ*uOw+QO$|*xO~OQ*uOo+VOy+XO!S+UO~OQ*uO}+ZO~OQ!QOZ%rO[%qO^%vO`TOaTOd%jOg%yO}%pO!U!lO!W!lO!q%oO$f%wO$q%[O%]!lO%^%xO&W%{O'T%dO'Z%eO(Q%zO~OR+bO_+^O!Q+cO~P#DkO_%cO!Q!lOw&UX$|&UX(P&UX~P#DkOw$yO$f+hO$|*xO(P*PO~OQ!QOZ*[O[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f%wO%^%xO&W%{O'T%dO'Z%eO(Q%zO~PGaOQ*uOw$yO!S+UO$|*xO~Oo+nOy+mO!S+oO'r(pO~OdlXy!RX#pbXv!RX!e!RX~Od'XXy(mX#p'SXv(mX!e(mX~Od+qO~O^#TO_#TO`#TOa'kOw&|O'T&vO(Q+vO~Ov(oP~P!3|O#p+{O~Oy+|O~O!S+}O~O&}!sO'O'VO'P,PO~Od,QO~OSVOTVO_%cOsVOtVOuVOw!PO!Q!lO'^UO~P#DkOS,^OT,^OZ,^O['cO_,YOd,^Oo,^Os,^Ou,^Ow'dOy,^O}'bO!S,^O!e,^O!l,^O!q,[O!t,^O!y,^O#O,^O#P,^O#Q,^O#R,^O'Q,^O'Z%eO'^UO'g,ZO'r,[O'v,_O'x,ZO'y,[O'z,[O'{,[O'|,]O'},]O(O,^O(P,`O(Q,`O(R,aO~O!P,dO~P#KkOX,gO~P#KkOv,iO~P#KkOo'tX#O'tX#P'tX#p'tX'r'tX'x'tX'y'tX'z'tX'{'tX'|'tX'}'tX(O'tX(P'tX(R'tX(T'tX~Oy,jO['tX}'tX!l'tX!q'tX!t'tX'g'tX'q'tX(Q'tXv'tX~P#NjOP$giQ$giS$giT$giZ$gi[$gi^$gi_$gi`$gia$gid$gig$gis$git$giu$giw$giy$gi|$gi}$gi!Q$gi!U$gi!W$gi!X$gi!Z$gi!]$gi!l$gi!q$gi!t$gi#Y$gi#r$gi#{$gi$O$gi$b$gi$d$gi$f$gi$i$gi$m$gi$q$gi$s$gi%T$gi%V$gi%Z$gi%]$gi%^$gi%f$gi%j$gi%s$gi&z$gi'Q$gi'T$gi'Z$gi'^$gi'g$gi'q$gi(Q$giv$gi~P#NjOX,kO~O['cOo,lOw'dO}'bOX]X~Oy#ciX#ci!e#ci!P#civ#ci#R#ci~P2gO[#}O}#zO'x#hO(O#|O(Q#hO(R#fO(T#hOo#eiy#ei!l#ei!q#ei!t#ei#O#ei#P#ei#p#ei'q#ei'r#ei'y#ei'z#ei'{#ei'|#ei'}#eiX#ei!e#ei!P#eiv#ei#R#ei~O'g#ei(P#ei~P$'PO[#}O}#zO(O#|O(R#fOo#eiy#ei!l#ei!q#ei!t#ei#O#ei#P#ei#p#ei'q#ei'r#ei'y#ei'z#ei'{#ei'|#ei'}#eiX#ei!e#ei!P#eiv#ei#R#ei~O'g#ei'x#ei(P#ei(Q#ei(T#eiw#ei~P$)QO'g#gO(P#gO~P$'PO[#}O}#zO'g#gO'x#hO'y#iO'z#iO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiy#ei!l#ei!t#ei#O#ei#P#ei#p#ei'q#ei'r#ei'{#ei'|#ei'}#eiX#ei!e#ei!P#eiv#ei#R#ei~O!q#ei~P$+`O!q#jO~P$+`O[#}O}#zO!q#jO'g#gO'x#hO'y#iO'z#iO'{#kO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiy#ei!l#ei!t#ei#O#ei#P#ei#p#ei'q#ei'|#ei'}#eiX#ei!e#ei!P#eiv#ei#R#ei~O'r#ei~P$-hO'r#lO~P$-hO[#}O}#zO!q#jO#P#uO'g#gO'r#lO'x#hO'y#iO'z#iO'{#kO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiy#ei!l#ei!t#ei#O#ei#p#ei'q#ei'|#eiX#ei!e#ei!P#eiv#ei#R#ei~O'}#ei~P$/pO'}#mO~P$/pO[#}O}#zO!q#jO'g#gO'r#lO'x#hO'y#iO'z#iO'{#kO'|#nO'}#mO(O#|O(P#gO(Q#hO(R#fO(T#hO!l#ni!t#ni#p#ni'q#ni~Oo#xO#O#xO#P#uOy#niX#ni!e#ni!P#niv#ni#R#ni~P$1xO[#}O}#zO!q#jO'g#gO'r#lO'x#hO'y#iO'z#iO'{#kO'|#nO'}#mO(O#|O(P#gO(Q#hO(R#fO(T#hO!l#si!t#si#p#si'q#si~Oo#xO#O#xO#P#uOy#siX#si!e#si!P#siv#si#R#si~P$3yOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'Q#VO'ZkO'^UO'gcO'qiO(QdO~P)xO!e,sO!P(VX~P2gO!P,uO~OX,vO~P2gOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO'gcO'qiO(QdOX&fX!e&fX!P&fX~P)xO!e(WOX(Wa~Oy,zO!e(WOX(WX~P2gOX,{O~O!P,|O!e(WO~O!P-OO!e(WO~P2gOSVOTVOsVOtVOuVO'^UO'g$[O~P!6POP!baZca!S!ba!e!ba!tca'qca'r!ba!O!bao!bay!ba!P!baX!ba!Z!ba#R!bav!ba~O!e-TO'r(pO!P'mXX'mX~O!P-VO~O!i-`O!j-_O!l-[O'T-XOv'nP~OX-aO~O_%cO!Q!lO~P#DkO!j-gOP&gX!e&gX~P<cO!e(rOP(Ya~O!S-iO'r(pOP$Wa!e$Wa~Ow!PO(P*PO~OvbX!S!kX!ebX~O'Q#VO'T(xO~O!S-mO~O!e-oOv([X~Ov-qO~Ov-sO~P,cOv-sO~P#$iO_-uO'T&cO~O!S-vO~Ow$yOy-wO~OQ*uOw*vOy-zO}*wO$|*xO~OQ*uOo.UO~Oy._O~O!S.`O~O!j.bO'T&cO~Ov.cO~Ov.cO~PGyOQ']O^'Wa_'Wa`'Waa'Wa'T'Wa~Od.gO~OQ'XXQ'kXR'kXZ'kXd'XX}'kX#p'kX(P'kXw'kX$f'kX$|'kX['kXo'kXy'kX!l'kX!q'kX!t'kX#O'kX#P'kX'g'kX'q'kX'r'kX'x'kX'y'kX'z'kX'{'kX'|'kX'}'kX(O'kX(Q'kX(R'kX(T'kX!P'kX!e'kXX'kXP'kXv'kX!S'kX#R'kX~OQ!QOZ%rO[%qO^.rO_%cO`TOaTOd%jOg%yO}%pO!j.sO!q.pO!t.kO#V.mO$f%wO%^%xO&W%{O'Q#VO'T%dO'Z%eO(Q%zO!P(sP~PGaO#Q.tOR%wa#p%wa(P%waw%wa$f%wa$|%wa[%wao%way%wa}%wa!l%wa!q%wa!t%wa#O%wa#P%wa'g%wa'q%wa'r%wa'x%wa'y%wa'z%wa'{%wa'|%wa'}%wa(O%wa(Q%wa(R%wa(T%wa!P%wa!e%waX%waP%wav%wa!S%wa#R%wa~O%^.vO~PGaO(P*POR&Oa#p&Oaw&Oa$f&Oa$|&Oa[&Oao&Oay&Oa}&Oa!l&Oa!q&Oa!t&Oa#O&Oa#P&Oa'g&Oa'q&Oa'r&Oa'x&Oa'y&Oa'z&Oa'{&Oa'|&Oa'}&Oa(O&Oa(Q&Oa(R&Oa(T&Oa!P&Oa!e&OaX&OaP&Oav&Oa!S&Oa#R&Oa~O_%cO!Q!lO!j.xO(P*OO~P#DkO!e.yO(P*PO!P(uX~O!P.{O~OX.|Oy.}O(P*PO~O'Z%eOR(qP~OQ']O})sORfa#pfa(Pfawfa$ffa$|fa[faofayfa!lfa!qfa!tfa#Ofa#Pfa'gfa'qfa'rfa'xfa'yfa'zfa'{fa'|fa'}fa(Ofa(Qfa(Rfa(Tfa!Pfa!efaXfaPfavfa!Sfa#Rfa~OQ']O})sOR&Va#p&Va(P&Vaw&Va$f&Va$|&Va[&Vao&Vay&Va!l&Va!q&Va!t&Va#O&Va#P&Va'g&Va'q&Va'r&Va'x&Va'y&Va'z&Va'{&Va'|&Va'}&Va(O&Va(Q&Va(R&Va(T&Va!P&Va!e&VaX&VaP&Vav&Va!S&Va#R&Va~O!P/UO~Ow$yO$f/ZO$|*xO(P*PO~OQ!QOZ/[O[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f%wO%^%xO&W%{O'T%dO'Z%eO(Q%zO~PGaOo/^O'r(pO~O#W/_OP!YiQ!YiS!YiT!YiZ!Yi[!Yi^!Yi_!Yi`!Yia!Yid!Yig!Yio!Yis!Yit!Yiu!Yiw!Yiy!Yi|!Yi}!Yi!Q!Yi!U!Yi!W!Yi!X!Yi!Z!Yi!]!Yi!l!Yi!q!Yi!t!Yi#O!Yi#P!Yi#Y!Yi#p!Yi#r!Yi#{!Yi$O!Yi$b!Yi$d!Yi$f!Yi$i!Yi$m!Yi$q!Yi$s!Yi%T!Yi%V!Yi%Z!Yi%]!Yi%^!Yi%f!Yi%j!Yi%s!Yi&z!Yi'Q!Yi'T!Yi'Z!Yi'^!Yi'g!Yi'q!Yi'r!Yi'x!Yi'y!Yi'z!Yi'{!Yi'|!Yi'}!Yi(O!Yi(P!Yi(Q!Yi(R!Yi(T!YiX!Yi!e!Yi!P!Yiv!Yi!i!Yi!j!Yi#V!Yi#R!Yi~Oy#ziX#zi!e#zi!P#ziv#zi#R#zi~P2gOy$UiX$Ui!e$Ui!P$Uiv$Ui#R$Ui~P2gOv/eO!j&bO'Q`O~P<cOw/nO}/mO~Oy!RX#pbX~Oy/oO~O#p/pO~OR+bO_+dO!Q/sO'T&iO'Z%eO~Oa/zO|!VO'Q#VO'T(ROv(cP~OQ!QOZ%rO[%qO^%vO_%cO`TOa/zOd%jOg%yO|!VO}%pO!q%oO$f%wO%^%xO&W%{O'Q#VO'T%dO'Z%eO(Q%zO!P(eP~PGaOQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f0VO%^%xO&W%{O'T%dO'Z%eO(Q%zOw(`Py(`P~PGaOw*vO~Oy-zO$|*xO~Oa/zO|!VO'Q#VO'T*oOv(gP~Ow+QO~OQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f0VO%^%xO&W%{O'T%dO'Z%eO(Q%zO(R0`O~PGaOy0dO~OQ!QOSVOTVO[$gO^0lO_$ZO`9yOa9yOd$aOsVOtVOuVO}$eO!i$qO!j0mO!l$lO!q0eO!t0hO'Q#VO'T$YO'Z%eO'^UO'g$[O~O#V0nO!P(jP~P%1}Ow!POy0pO#Q0rO$|*xO~OR0uO!e0sO~P#(kOR0uO!S+UO!e0sO(P*OO~OR0uOo0wO!S+UO!e0sOQ'VXZ'VX}'VX#p'VX(P'VX~OR0uOo0wO!e0sO~OR0uO!e0sO~O$f/ZO(P*PO~Ow$yO~Ow$yO$|*xO~Oo0}Oy0|O!S1OO'r(pO~O!e1POv(pX~Ov1RO~O^#TO_#TO`#TOa'kOw&|O'T&vO(Q1VO~Oo1YOQ'VXR'VXZ'VX}'VX!e'VX(P'VX~O!e1ZO(P*POR'YX~O!e1ZOR'YX~O!e1ZO(P*OOR'YX~OR1]O~O!S1^OS'wXT'wXZ'wX['wX_'wXd'wXo'wXs'wXu'wXw'wXy'wX}'wX!P'wX!e'wX!l'wX!q'wX!t'wX!y'wX#O'wX#P'wX#Q'wX#R'wX'Q'wX'Z'wX'^'wX'g'wX'r'wX'v'wX'x'wX'y'wX'z'wX'{'wX'|'wX'}'wX(O'wX(P'wX(Q'wX(R'wXX'wXv'wX~O}1_O~O!P1aO~P#KkOX1bO~P#KkOv1cO~P#KkOS,^OT,^OZ,^O['cO_1dOd,^Oo,^Os,^Ou,^Ow'dOy,^O}'bO!S,^O!e,^O!l,^O!q,[O!t,^O!y,^O#O,^O#P,^O#Q,^O#R,^O'Q,^O'Z%eO'^UO'g,ZO'r,[O'v,_O'x,ZO'y,[O'z,[O'{,[O'|,]O'},]O(O,^O(P,`O(Q,`O(R,aO~OX1fO~Oy,jO~O!e,sO!P(Va~P2gOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'Q#VO'ZkO'^UO'gcO'qiO(QdO!P&eX!e&eX~P)xO!e,sO!P(Va~OX&fa!e&fa!P&fa~P2gOX1kO~P2gO!P1mO!e(WO~OP!biZci!S!bi!e!bi!tci'qci'r!bi!O!bio!biy!bi!P!biX!bi!Z!bi#R!biv!bi~O'r(pOP!oi!S!oi!e!oi!O!oio!oiy!oi!P!oiX!oi!Z!oi#R!oiv!oi~O!j&bO!P&`X!e&`XX&`X~P<cO!e-TO!P'maX'ma~O!P1qO~Ov!RX!S!kX!e!RX~O!S1rO~O!e1sOv'oX~Ov1uO~O'T-XO~O!j1xO'T-XO~O(P*POP$Wi!e$Wi~O!S1yO'r(pOP$XX!e$XX~O!S1|O~Ov$_a!e$_a~P2gO!l(|O'Q#VO'T(xOv&hX!e&hX~O!e-oOv([a~Ov2QO~P,cOy2UO~O#p2VO~Oy2WO$|*xO~Ow*vOy2WO}*wO$|*xO~Oo2aO~Ow!POy2fO#Q2hO$|*xO~O!S2jO~Ov2lO~O#Q2mOR%wi#p%wi(P%wiw%wi$f%wi$|%wi[%wio%wiy%wi}%wi!l%wi!q%wi!t%wi#O%wi#P%wi'g%wi'q%wi'r%wi'x%wi'y%wi'z%wi'{%wi'|%wi'}%wi(O%wi(Q%wi(R%wi(T%wi!P%wi!e%wiX%wiP%wiv%wi!S%wi#R%wi~Od2nO~O^2qO!j.sO!q2rO'Q#VO'Z%eO~O(P*PO!P%{X!e%{X~O!e2sO!P(tX~O!P2uO~OQ!QOZ%rO[%qO^2wO_%cO`TOaTOd%jOg%yO}%pO!j2xO!q%oO$f%wO%^%xO&W%{O'T%dO'Z%eO(Q%zO~PGaO^2yO!j2xO(P*OO~O!P%aX!e%aX~P#4kO^2yO~O(P*POR&Oi#p&Oiw&Oi$f&Oi$|&Oi[&Oio&Oiy&Oi}&Oi!l&Oi!q&Oi!t&Oi#O&Oi#P&Oi'g&Oi'q&Oi'r&Oi'x&Oi'y&Oi'z&Oi'{&Oi'|&Oi'}&Oi(O&Oi(Q&Oi(R&Oi(T&Oi!P&Oi!e&OiX&OiP&Oiv&Oi!S&Oi#R&Oi~O_%cO!Q!lO!P&yX!e&yX~P#DkO!e.yO!P(ua~OR3QO(P*PO~O!e3ROR(rX~OR3TO~O(P*POR&Pi#p&Piw&Pi$f&Pi$|&Pi[&Pio&Piy&Pi}&Pi!l&Pi!q&Pi!t&Pi#O&Pi#P&Pi'g&Pi'q&Pi'r&Pi'x&Pi'y&Pi'z&Pi'{&Pi'|&Pi'}&Pi(O&Pi(Q&Pi(R&Pi(T&Pi!P&Pi!e&PiX&PiP&Piv&Pi!S&Pi#R&Pi~O!P3UO~O$f3VO(P*PO~Ow$yO$f3VO$|*xO(P*PO~Ow!PO!Z!YO~O!Z3aO#R3_O'r(pO~O!j&bO'Q#VO~P<cOv3eO~Ov3eO!j&bO'Q`O~P<cO!O3hO'r(pO~Ow!PO~P#9vOo3kOy3jO(P*PO~O!P3oO~P%;pOv3rO~P%;pOR0uO!S+UO!e0sO~OR0uOo0wO!S+UO!e0sO~Oa/zO|!VO'Q#VO'T(RO~O!S3uO~O!e3wOv(dX~Ov3yO~OQ!QOZ%rO[%qO^%vO_%cO`TOa/zOd%jOg%yO|!VO}%pO!q%oO$f%wO%^%xO&W%{O'Q#VO'T%dO'Z%eO(Q%zO~PGaO!e3|O(P*PO!P(fX~O!P4OO~O!S4PO(P*OO~O!S+UO(P*PO~O!e4ROw(aXy(aX~OQ4TO~Oy2WO~Oa/zO|!VO'Q#VO'T*oO~Oo4WOw*vO}*wOv%XX!e%XX~O!e4ZOv(hX~Ov4]O~O(P4_Oy(_Xw(_X$|(_XR(_Xo(_X!e(_X~Oy4aO(P*PO~OQ!QOSVOTVO[$gO^4bO_$ZO`9yOa9yOd$aOsVOtVOuVO}$eO!i$qO!l$lO!q$hO#V$lO'T$YO'^UO'g$[O~O!j4cO'Z%eO~P&,sO!S4eO'r(pO~O#V4gO~P%1}O!e4hO!P(kX~O!P4jO~O!P%aX!S!aX!e%aX'r!aX~P!KgO!j&bO~P&,sO!e4hO!P(kX!S'eX'r'eX~O^2yO!j2xO~Ow!POy2fO~O_4pO!Q/sO'T&iO'Z%eOR&lX!e&lX~OR4rO!e0sO~O!S4tO~Ow$yO$|*xO(P*PO~Oy4uO~P2gOo4vOy4uO(P*PO~Ov&uX!e&uX~P!3|O!e1POv(pa~Oo4|Oy4{O(P*PO~OSVOTVO_%cOsVOtVOuVOw!PO!Q!lO'^UOR&vX!e&vX~P#DkO!e1ZOR'Ya~O!y5SO~O!P5TO~P#KkO!S1^OX'wX#R'wX~O!e,sO!P(Vi~O!P&ea!e&ea~P2gOX5WO~P2gOP!bqZcq!S!bq!e!bq!tcq'qcq'r!bq!O!bqo!bqy!bq!P!bqX!bq!Z!bq#R!bqv!bq~O'r(pO!P&`a!e&`aX&`a~O!i-`O!j-_O!l5YO'T-XOv&aX!e&aX~O!e1sOv'oa~O!S5[O~O!S5`O'r(pOP$Xa!e$Xa~O(P*POP$Wq!e$Wq~Ov$^i!e$^i~P2gOw!POy5bO#Q5dO$|*xO~Oo5gOy5fO(P*PO~Oy5iO~Oy5iO$|*xO~Oy5mO(P*PO~Ow!POy5bO~Oo5tOy5sO(P*PO~O!S5vO~O!e2sO!P(ta~O^2yO!j2xO'Z%eO~OQ!QOZ%rO[%qO^.rO_%cO`TOaTOd%jOg%yO}%pO!j.sO!q.pO!t5zO#V5|O$f%wO%^%xO&W%{O'Q#VO'T%dO'Z%eO(Q%zO!P&xX!e&xX~PGaOQ!QOZ%rO[%qO^6OO_%cO`TOaTOd%jOg%yO}%pO!j6PO!q%oO$f%wO%^%xO&W%{O'T%dO'Z%eO(P*OO(Q%zO~PGaO!P%aa!e%aa~P#4kO^6QO~O#Q6ROR%wq#p%wq(P%wqw%wq$f%wq$|%wq[%wqo%wqy%wq}%wq!l%wq!q%wq!t%wq#O%wq#P%wq'g%wq'q%wq'r%wq'x%wq'y%wq'z%wq'{%wq'|%wq'}%wq(O%wq(Q%wq(R%wq(T%wq!P%wq!e%wqX%wqP%wqv%wq!S%wq#R%wq~O(P*POR&Oq#p&Oqw&Oq$f&Oq$|&Oq[&Oqo&Oqy&Oq}&Oq!l&Oq!q&Oq!t&Oq#O&Oq#P&Oq'g&Oq'q&Oq'r&Oq'x&Oq'y&Oq'z&Oq'{&Oq'|&Oq'}&Oq(O&Oq(Q&Oq(R&Oq(T&Oq!P&Oq!e&OqX&OqP&Oqv&Oq!S&Oq#R&Oq~O(P*PO!P&ya!e&ya~OX6SO~P2gO'Z%eOR&wX!e&wX~O!e3ROR(ra~O$f6YO(P*PO~Ow![q~P#9vO#R6]O~O!Z3aO#R6]O'r(pO~Ov6bO~O#R6fO~Oy6gO!P6hO~O!P6hO~P%;pOy6kO~Ov6kOy6gO~Ov6kO~P%;pOy6mO~O!e3wOv(da~O!S6pO~Oa/zO|!VO'Q#VO'T(ROv&oX!e&oX~O!e3|O(P*PO!P(fa~OQ!QOZ%rO[%qO^%vO_%cO`TOa/zOd%jOg%yO|!VO}%pO!q%oO$f%wO%^%xO&W%{O'Q#VO'T%dO'Z%eO(Q%zO!P&pX!e&pX~PGaO!e3|O!P(fa~OQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f0VO%^%xO&W%{O'T%dO'Z%eO(Q%zOw&nX!e&nXy&nX~PGaO!e4ROw(aay(aa~O!e4ZOv(ha~Oo7SOv%Xa!e%Xa~Oo7SOw*vO}*wOv%Xa!e%Xa~Oa/zO|!VO'Q#VO'T*oOv&qX!e&qX~O(P*POy$xaw$xa$|$xaR$xao$xa!e$xa~O(P4_Oy(_aw(_a$|(_aR(_ao(_a!e(_a~O!P%aa!S!aX!e%aa'r!aX~P!KgOQ!QOSVOTVO[$gO_$ZO`9yOa9yOd$aOsVOtVOuVO}$eO!i$qO!j&bO!l$lO!q$hO#V$lO'T$YO'^UO'g$[O~O^7ZO~P&JUO^6QO!j6PO~O!e4hO!P(ka~O!e4hO!P(ka!S'eX'r'eX~OQ!QOSVOTVO[$gO^0lO_$ZO`9yOa9yOd$aOsVOtVOuVO}$eO!i$qO!j0mO!l$lO!q0eO!t7_O'Q#VO'T$YO'Z%eO'^UO'g$[O~O#V7aO!P&sX!e&sX~P&L]O!S7cO'r(pO~Ow!POy5bO$|*xO(P*PO~O!S+UOR&la!e&la~Oo0wO!S+UOR&la!e&la~Oo0wOR&la!e&la~O(P*POR$yi!e$yi~Oy7fO~P2gOo7gOy7fO(P*PO~O(P*PORni!eni~O(P*POR&va!e&va~O(P*OOR&va!e&va~OS,^OT,^OZ,^O_,^Od,^Oo,^Os,^Ou,^Oy,^O!S,^O!e,^O!l,^O!q,[O!t,^O!y,^O#O,^O#P,^O#Q,^O#R,^O'Q,^O'Z%eO'^UO'g,ZO'r,[O'x,ZO'y,[O'z,[O'{,[O'|,]O'},]O(O,^O~O(P7iO(Q7iO(R7iO~P'!qO!P7kO~P#KkO!P&ei!e&ei~P2gO'r(pOv!hi!e!hi~O!S7mO~O(P*POP$Xi!e$Xi~Ov$^q!e$^q~P2gOw!POy7oO~Ow!POy7oO#Q7rO$|*xO~Oy7tO~Oy7uO~Oy7vO(P*PO~Ow!POy7oO$|*xO(P*PO~Oo7{Oy7zO(P*PO~O!e2sO!P(ti~O(P*PO!P%}X!e%}X~O!P%ai!e%ai~P#4kO^8OO~O!e8TO['bXv$`i}'bX!l'bX!q'bX!t'bX'g'bX'q'bX(Q'bX~P@[OQ#[iS#[iT#[i[#[i^#[i_#[i`#[ia#[id#[is#[it#[iu#[iv$`i}#[i!i#[i!j#[i!l#[i!q#[i!t'bX#V#[i'Q#[i'T#[i'^#[i'g#[i'q'bX(Q'bX~P@[O#R#^a~P2gO#R8WO~O!Z3aO#R8XO'r(pO~Ov8[O~Oy8^O~P2gOy8`O~Oy6gO!P8aO~Ov8`Oy6gO~O!e3wOv(di~O(P*POv%Qi!e%Qi~O!e3|O!P(fi~O!e3|O(P*PO!P(fi~O(P*PO!P&pa!e&pa~O(P8hOw(bX!e(bXy(bX~O(P*PO!S$wiy$wiw$wi$|$wiR$wio$wi!e$wi~O!e4ZOv(hi~Ov%Xi!e%Xi~P2gOo8kOv%Xi!e%Xi~O!P%ai!S!aX!e%ai'r!aX~P!KgO(P*PO!P%`i!e%`i~O!e4hO!P(ki~O#V8nO~P&L]O!P&sa!S'eX!e&sa'r'eX~O(P*POR$zq!e$zq~Oy8pO~P2gOy7zO~P2gO(P8rO(Q8rO(R8rO~O(P8rO(Q8rO(R8rO~P'!qO'r(pOv!hq!e!hq~O(P*POP$Xq!e$Xq~Ow!POy8uO$|*xO(P*PO~Ow!POy8uO~Oy8xO~P2gOy8zO~P2gOo8|Oy8zO(P*PO~OQ#[qS#[qT#[q[#[q^#[q_#[q`#[qa#[qd#[qs#[qt#[qu#[qv$`q}#[q!i#[q!j#[q!l#[q!q#[q#V#[q'Q#[q'T#[q'^#[q'g#[q~O!e9PO['bXv$`q}'bX!l'bX!q'bX!t'bX'g'bX'q'bX(Q'bX~P@[Oo'bX!t'bX#O'bX#P'bX#p'bX'q'bX'r'bX'x'bX'y'bX'z'bX'{'bX'|'bX'}'bX(O'bX(P'bX(Q'bX(R'bX(T'bX~P'2fO#R9UO~O!Z3aO#R9UO'r(pO~Oy9WO~O(P*POv%Qq!e%Qq~O!e3|O!P(fq~O(P*PO!P&pi!e&pi~O(P8hOw(ba!e(bay(ba~Ov%Xq!e%Xq~P2gO!P&si!S'eX!e&si'r'eX~O(P*PO!P%`q!e%`q~Oy9]O~P2gO(P9^O(Q9^O(R9^O~O'r(pOv!hy!e!hy~Ow!POy9_O~Ow!POy9_O$|*xO(P*PO~Oy9aO~P2gOQ#[yS#[yT#[y[#[y^#[y_#[y`#[ya#[yd#[ys#[yt#[yu#[yv$`y}#[y!i#[y!j#[y!l#[y!q#[y#V#[y'Q#[y'T#[y'^#[y'g#[y~O!e9dO['bXv$`y}'bX!l'bX!q'bX!t'bX'g'bX'q'bX(Q'bX~P@[Oo'bX!t'bX#O'bX#P'bX#p'bX'q'bX'r'bX'x'bX'y'bX'z'bX'{'bX'|'bX'}'bX(O'bX(P'bX(Q'bX(R'bX(T'bX~P'9eO!e9eO['bX}'bX!l'bX!q'bX!t'bX'g'bX'q'bX(Q'bX~P@[OQ#[iS#[iT#[i[#[i^#[i_#[i`#[ia#[id#[is#[it#[iu#[i}#[i!i#[i!j#[i!l#[i!q#[i!t'bX#V#[i'Q#[i'T#[i'^#[i'g#[i'q'bX(Q'bX~P@[O#R9hO~O(P*PO!P&pq!e&pq~Ov%Xy!e%Xy~P2gOw!POy9iO~Oy9jO~P2gOQ#[!RS#[!RT#[!R[#[!R^#[!R_#[!R`#[!Ra#[!Rd#[!Rs#[!Rt#[!Ru#[!Rv$`!R}#[!R!i#[!R!j#[!R!l#[!R!q#[!R#V#[!R'Q#[!R'T#[!R'^#[!R'g#[!R~O!e9kO['bX}'bX!l'bX!q'bX!t'bX'g'bX'q'bX(Q'bX~P@[OQ#[qS#[qT#[q[#[q^#[q_#[q`#[qa#[qd#[qs#[qt#[qu#[q}#[q!i#[q!j#[q!l#[q!q#[q!t'bX#V#[q'Q#[q'T#[q'^#[q'g#[q'q'bX(Q'bX~P@[O!e9nO['bX}'bX!l'bX!q'bX!t'bX'g'bX'q'bX(Q'bX~P@[OQ#[yS#[yT#[y[#[y^#[y_#[y`#[ya#[yd#[ys#[yt#[yu#[y}#[y!i#[y!j#[y!l#[y!q#[y!t'bX#V#[y'Q#[y'T#[y'^#[y'g#[y'q'bX(Q'bX~P@[OwbX~P$|OwjX}jX!tbX'qbX~P!6mOZ'SXd'XXo'SXw'kX!t'SX'q'SX'r'SX~O['SXd'SXw'SX}'SX!l'SX!q'SX#O'SX#P'SX#p'SX'g'SX'x'SX'y'SX'z'SX'{'SX'|'SX'}'SX(O'SX(P'SX(Q'SX(R'SX(T'SX~P'GTOP'SX}'kX!S'SX!e'SX!O'SXy'SX!P'SXX'SX!Z'SX#R'SXv'SX~P'GTO^9qO_9qO`9qOa9qO'T9oO~O!j:OO~P!.cOPoOQ!QOSVOTVOZeOd9tOsVOtVOuVO!U#bO!W#cO!X:zO!Z!YO#Y!_O#r9zO#{9{O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO[#sXo#sXw#sX}#sX!l#sX!q#sX!t#sX#O#sX#P#sX#p#sX'g#sX'q#sX'r#sX'x#sX'y#sX'z#sX'{#sX'|#sX'}#sX(O#sX(P#sX(Q#sX(R#sX(T#sX~P'IxO#Q$uO~P!.cO}'kXP'SX!S'SX!e'SX!O'SXy'SX!P'SXX'SX!Z'SX#R'SXv'SX~P'GTOo#qX#O#qX#P#qX#p#qX'r#qX'x#qX'y#qX'z#qX'{#qX'|#qX'}#qX(O#qX(P#qX(R#qX(T#qX~P!.cOo#zX#O#zX#P#zX#p#zX'r#zX'x#zX'y#zX'z#zX'{#zX'|#zX'}#zX(O#zX(P#zX(R#zX(T#zX~P!.cOPoOQ!QOSVOTVOZeOd9tOsVOtVOuVO!U#bO!W#cO!X:zO!Z!YO#Y!_O#r9zO#{9{O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO[#sao#saw#sa}#sa!l#sa!q#sa!t#sa#O#sa#P#sa#p#sa'g#sa'q#sa'r#sa'x#sa'y#sa'z#sa'{#sa'|#sa'}#sa(O#sa(P#sa(Q#sa(R#sa(T#sa~P'IxOo:YO#O:YO#P:VOw#sa~P!B}Ow$Ua~P#9vOQ'XXd'XX}iX~OQlXdlX}jX~O^:sO_:sO`:sOa:sO'T:_O~OQ'XXd'XX}hX~Ow#qa~P#9vOw#za~P#9vO!S&_Oo#za#O#za#P#za#p#za'r#za'x#za'y#za'z#za'{#za'|#za'}#za(O#za(P#za(R#za(T#za~P!.cO#Q*eO~P!.cOw#ci~P#9vO[#}O}#zO'x#hO(O#|O(Q#hO(R#fO(T#hOo#eiw#ei!l#ei!q#ei!t#ei#O#ei#P#ei#p#ei'q#ei'r#ei'y#ei'z#ei'{#ei'|#ei'}#ei~O'g#ei(P#ei~P((}O'g#gO(P#gO~P((}O[#}O}#zO'g#gO'x#hO'y#iO'z#iO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiw#ei!l#ei!t#ei#O#ei#P#ei#p#ei'q#ei'r#ei'{#ei'|#ei'}#ei~O!q#ei~P(*yO!q#jO~P(*yO[#}O}#zO!q#jO'g#gO'x#hO'y#iO'z#iO'{#kO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiw#ei!l#ei!t#ei#O#ei#P#ei#p#ei'q#ei'|#ei'}#ei~O'r#ei~P(,rO'r#lO~P(,rO[#}O}#zO!q#jO#P:VO'g#gO'r#lO'x#hO'y#iO'z#iO'{#kO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiw#ei!l#ei!t#ei#O#ei#p#ei'q#ei'|#ei~O'}#ei~P(.kO'}#mO~P(.kOo:YO#O:YO#P:VOw#ni~P$1xOo:YO#O:YO#P:VOw#si~P$3yOQ'XXd'XX}'kX~Ow#zi~P#9vOw$Ui~P#9vOd9}O~Ow#ca~P#9vOd:uO~OU'x_'v'P'O'^s!y'^'T'Z~\",\n  goto: \"$Ku(vPPPPPPP(wPP)OPP)^PPPP)d-hP0f5aP7R7R8v7R>wD_DpPDvHQPPPPPPK`P! P! _PPPPP!!VP!$oP!$oPP!&oP!(rP!(w!)n!*f!*f!*f!(w!+]P!(w!.Q!.TPP!.ZP!(w!(w!(w!(wP!(w!(wP!(w!(w!.y!/dP!/dJ}J}J}PPPP!/d!.y!/sPP!$oP!0^!0a!0g!1h!1t!3t!3t!5r!7t!1t!1t!9p!;_!=O!>k!@U!Am!CS!De!1t!1tP!1tP!1t!1t!Et!1tP!Ge!1t!1tP!Ie!1tP!1t!7t!7t!1t!7t!1t!Kl!Mt!Mw!7t!1t!Mz!M}!M}!M}!NR!$oP!$oP!$oP! P! PP!N]! P! PP!Ni# }! PP! PP#!^##c##k#$Z#$_#$e#$e#$mP#&s#&s#&y#'o#'{! PP! PP#(]#(l! PP! PPP#(x#)W#)d#)|#)^! P! PP! P! P! PP#*S#*S#*Y#*`#*S#*S! P! PP#*m#*v#+Q#+Q#,x#.l#.x#.x#.{#.{5a5a5a5a5a5a5a5aP5a#/O#/U#/p#1{#2R#2b#6^#6d#6j#6|#7W#8w#9R#9b#9h#9n#9x#:S#:Y#:g#:m#:s#:}#;]#;g#=u#>R#>`#>f#>n#>u#?PPPPPPPP#?V#BaP#F^#Jx#Ls#Nr$&^P$&aPPP$)_$)h$)z$/U$1d$1m$3fP!(w$4`$7r$:i$>T$>^$>c$>fPPP$>i$A`$A|P$BaPPPPPPPPPP$BvP$EU$EX$E[$Eb$Ee$Eh$Ek$En$Et$HO$HR$HU$HX$H[$H_$Hb$He$Hh$Hk$Hn$Jt$Jw$Jz#*S$KW$K^$Ka$Kd$Kh$Kl$Ko$KrQ!tPT'V!s'Wi!SOlm!P!T$T$W$y%b)U*f/gQ'i#QR,n'l(OSOY[bfgilmop!O!P!T!Y!Z![!_!`!c!p!q!|!}#Q#U#Z#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$`$a$e$g$h$q$r$y%X%_%b&U&Y&[&b&u&z&|'P'a'l'n'o'}(W(Y(b(d(e(f(j(o(p(r(|)S)U)i*Z*f*i*k*l+Z+n+z,q,s,z-R-T-g-m-t.}/^/b/d/g0e0g0m0}1P1h1r1|3_3a3f3h3k4W4c4h4v4|5[5g5t6]6a7S7^7g7m7{8W8X8k8|9U9h9s9t9u9v9w9x9z9{9|9}:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f:gS(z$v-oQ*p&eQ*t&hQ-k(yQ-y)ZW0Z+Q0Y4Z7UR4Y0[&w!RObfgilmop!O!P!T!Y!Z![!_!`!c!p#Q#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r$y%_%b&U&Y&[&b&u'l'}(W(Y(b(f(j(o(p(r(|)S)U)i*Z*f*i*k*l+Z+n,s,z-T-g-m-t.}/^/b/d/g0e0g0m0}1h1r1|3_3a3f3h3k4W4c4h4v4|5[5g5t6]6a7S7^7g7m7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f#r]Ofgilmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i+n,s,z-m.}0}1h1|3_3a3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9hb#[b#Q$y'l(b)S)U*Z-t!h$bo!c!p$e$g$h$q$r&U&b&u(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7m$b%k!Q!n$O$u%o%p%q%y%{&P&o&p&r'](q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8g!W:y!Y!_!`*i*l/^3h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:fR:|%n$_%u!Q!n$O$u%o%p%q&P&o&p&r'](q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8g$e%l!Q!n$O$u%n%o%p%q%y%{&P&o&p&r'](q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8g'hZOY[fgilmop!O!P!T!Y!Z![!_!`!c!p!|!}#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$`$a$e$g$h$q$r%_%b%i%j&U&Y&[&b&u'a'}(W(Y(d(e(f(j(o(p(r(|)i)p)q*f*i*k*l+Z+n,s,z-R-T-g-m.i.}/^/b/d/g0e0g0m0}1h1r1|3_3a3f3h3k4W4c4h4v4|5[5g5t6]6a7S7^7g7m7{8W8X8k8|9U9h9s9t9u9v9w9x9z9{9|9}:O:P:Q:R:S:T:U:V:W:X:Y:Z:`:a:e:f:g:t:u:x$^%l!Q!n$O$u%n%o%p%q%y%{&P&p&r(q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8gQ&j!hQ&k!iQ&l!jQ&m!kQ&s!oQ)[%QQ)]%RQ)^%SQ)_%TQ)b%WQ+`&oS,R']1ZQ.W)`S/r*u4TR4n0s+yTOY[bfgilmop!O!P!Q!T!Y!Z![!_!`!c!n!p!q!|!}#Q#U#Z#e#o#p#q#r#s#t#u#v#w#x#y#z#}$O$T$W$`$a$e$g$h$q$r$u$y%X%_%b%i%j%n%o%p%q%y%{&P&U&Y&[&b&o&p&r&u&z&|'P']'a'l'n'o'}(W(Y(b(d(e(f(j(o(p(q(r(|)S)U)i)p)q)s)x)y*O*P*R*V*Z*[*^*e*f*i*k*l*n*w*x+U+V+Z+h+n+o+z+},q,s,z-R-T-g-i-m-t-v.U.`.i.p.t.x.y.}/Z/[/^/b/d/g/{/}0`0e0g0m0r0w0}1O1P1Y1Z1h1r1y1|2a2h2j2m2s2v3V3_3a3f3h3k3u3{3|4R4U4W4_4c4e4h4t4v4|5[5`5d5g5t5v6R6Y6]6a6p6v6x7S7^7c7g7m7r7{8W8X8g8k8|9U9h9s9t9u9v9w9x9z9{9|9}:O:P:Q:R:S:T:U:V:W:X:Y:Z:`:a:e:f:g:t:u:xQ'[!xQ'h#PQ)l%gU)r%m*T*WR.f)kQ,T']R5P1Z#t%s!Q!n$O$u%p%q&P&p&r(q)x)y*O*R*V*[*^*e*n*w+V+h+o+}-i-v.U.`.t.x.y/Z/[/{/}0`0r0w1O1Y1y2a2h2j2m2v3V3u3{3|4U4e4t5`5d5v6R6Y6p6v6x7c7r8gQ)x%oQ+_&oQ,U']n,^'b'c'd,c,f,h,l/m/n1_3n3q5T5U7kS.q)s2sQ/O*PQ/Q*SQ/q*uS0Q*x4RQ0a+U[0o+Z.j0g4h5y7^Q2v.pS4d0e2rQ4m0sQ5Q1ZQ6T3RQ6z4PQ7O4TQ7X4_R9Y8h&jVOfgilmop!O!P!T!Y!Z![!_!`!c!p#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r%_%b&U&Y&[&b&u']'}(W(Y(b(f(j(o(p(r(|)i*f*i*k*l+Z+n,s,z-T-g-m.}/^/b/d/g0e0g0m0}1Z1h1r1|3_3a3f3h3k4W4c4h4v4|5[5g5t6]6a7S7^7g7m7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:fU&g!g%P%[o,^'b'c'd,c,f,h,l/m/n1_3n3q5T5U7k$nsOfgilm!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y'}(W(Y(|)i*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9z9{:O:P:Q:R:S:T:U:V:W:X:Y:eS$tp9xS&O!W#bS&Q!X#cQ&`!bQ*_&RQ*a&VS*d&[:fQ*h&^Q,T']Q-j(wQ/i*jQ0p+[S2f.X0qQ3]/_Q3^/`Q3g/hQ3i/kQ5P1ZU5b2R2g4lU7o5c5e5rQ8]6dS8u7p7qS9_8v8wR9i9`i{Ob!O!P!T$y%_%b)S)U)i-thxOb!O!P!T$y%_%b)S)U)i-tW/v*v/t3w6qQ/}*wW0[+Q0Y4Z7UQ3{/{Q6x3|R8g6v!h$do!c!p$e$g$h$q$r&U&b&u(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7mQ&d!dQ&f!fQ&n!mW&x!q%X&|1PQ'S!rQ)X$}Q)Y%OQ)a%VU)d%Y'T'UQ*s&hS+s&z'PS-Y(k1sQ-u)WQ-x)ZS.a)e)fS0x+c/sQ1S+zQ1W+{S1v-_-`Q2k.bQ3s/pQ5]1xR5h2V${sOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f$zsOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:fR3]/_V&T!Y!`*i!i$lo!c!p$e$g$h$q$r&U&b&u(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7m!k$^o!c!p$e$g$h$q$r&U&b&u(b(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7m!i$co!c!p$e$g$h$q$r&U&b&u(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7m&e^Ofgilmop!O!P!T!Y!Z![!_!`!c!p#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r%_%b&U&Y&[&b&u'}(W(Y(f(j(o(p(r(|)i*f*i*k*l+Z+n,s,z-T-g-m.}/^/b/d/g0e0g0m0}1h1r1|3_3a3f3h3k4W4c4h4v4|5[5g5t6]6a7S7^7g7m7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:fR(l$fQ-[(kR5Y1sQ(S#|S({$v-oS-Z(k1sQ-l(yW/u*v/t3w6qS1w-_-`Q3v/vR5^1xQ'e#Or,e'b'c'd'j'p)u,c,f,h,l/m/n1_3n3q5U6fR,o'mk,a'b'c'd,c,f,h,l/m/n1_3n3q5UQ'f#Or,e'b'c'd'j'p)u,c,f,h,l/m/n1_3n3q5U6fR,p'mR*g&]X/c*f/d/g3f!}aOb!O!P!T#z$v$y%_%b'}(y)S)U)i)s*f*v*w+Q+Z,s-o-t.j/b/d/g/t/{0Y0g1h2s3f3w3|4Z4h5y6a6q6v7U7^Q3`/aQ6_3bQ8Y6`R9V8Z${rOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f#nfOfglmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#z#}$T$W%_%b&Y&['}(W(Y(|)i+n,s,z-m.}0}1h1|3_3a3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h!T9u!Y!_!`*i*l/^3h9u9v9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:e:f#rfOfgilmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i+n,s,z-m.}0}1h1|3_3a3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h!X9u!Y!_!`*i*l/^3h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f$srOfglmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#z#}$T$W%_%b&Y&['}(W(Y(|)i*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:e:f#U#oh#d$P$Q$V$s%^&W&X'q't'u'v'w'x'y'z'{'|(O(U([(`*b*c,r,w,y-n0z1i1l1}3P4w5V5a6^6e7R7e7h7s7y8j8q8{9[9b}:P&S&]/k3[6d:[:]:c:d:h:j:k:l:m:n:o:p:q:r:v:w:{#W#ph#d$P$Q$V$s%^&W&X'q'r't'u'v'w'x'y'z'{'|(O(U([(`*b*c,r,w,y-n0z1i1l1}3P4w5V5a6^6e7R7e7h7s7y8j8q8{9[9b!P:Q&S&]/k3[6d:[:]:c:d:h:i:j:k:l:m:n:o:p:q:r:v:w:{#S#qh#d$P$Q$V$s%^&W&X'q'u'v'w'x'y'z'{'|(O(U([(`*b*c,r,w,y-n0z1i1l1}3P4w5V5a6^6e7R7e7h7s7y8j8q8{9[9b{:R&S&]/k3[6d:[:]:c:d:h:k:l:m:n:o:p:q:r:v:w:{#Q#rh#d$P$Q$V$s%^&W&X'q'v'w'x'y'z'{'|(O(U([(`*b*c,r,w,y-n0z1i1l1}3P4w5V5a6^6e7R7e7h7s7y8j8q8{9[9by:S&S&]/k3[6d:[:]:c:d:h:l:m:n:o:p:q:r:v:w:{#O#sh#d$P$Q$V$s%^&W&X'q'w'x'y'z'{'|(O(U([(`*b*c,r,w,y-n0z1i1l1}3P4w5V5a6^6e7R7e7h7s7y8j8q8{9[9bw:T&S&]/k3[6d:[:]:c:d:h:m:n:o:p:q:r:v:w:{!|#th#d$P$Q$V$s%^&W&X'q'x'y'z'{'|(O(U([(`*b*c,r,w,y-n0z1i1l1}3P4w5V5a6^6e7R7e7h7s7y8j8q8{9[9bu:U&S&]/k3[6d:[:]:c:d:h:n:o:p:q:r:v:w:{!x#vh#d$P$Q$V$s%^&W&X'q'z'{'|(O(U([(`*b*c,r,w,y-n0z1i1l1}3P4w5V5a6^6e7R7e7h7s7y8j8q8{9[9bq:W&S&]/k3[6d:[:]:c:d:h:p:q:r:v:w:{!v#wh#d$P$Q$V$s%^&W&X'q'{'|(O(U([(`*b*c,r,w,y-n0z1i1l1}3P4w5V5a6^6e7R7e7h7s7y8j8q8{9[9bo:X&S&]/k3[6d:[:]:c:d:h:q:r:v:w:{$]#{h#`#d$P$Q$V$s%^&S&W&X&]'q'r's't'u'v'w'x'y'z'{'|(O(U([(`*b*c,r,w,y-n/k0z1i1l1}3P3[4w5V5a6^6d6e7R7e7h7s7y8j8q8{9[9b:[:]:c:d:h:i:j:k:l:m:n:o:p:q:r:v:w:{${jOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f$v!aOfgilmp!O!P!T!Y!Z!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9w9x9z:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:fQ&Y![Q&Z!]R:e9{#rpOfgilmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i+n,s,z-m.}0}1h1|3_3a3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9hQ&[!^!W9x!Y!_!`*i*l/^3h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:fR:f:zR$moR-f(rR$wqT(}$v-oQ/f*fS3d/d/gR6c3fQ3m/mQ3p/nQ6i3nR6l3qQ$zwQ)V${Q*q&fQ+f&qQ+i&sQ-w)YW.Z)b+j+k+lS/X*]+gW2b.W.[.].^U3W/Y/]0yU5o2c2d2eS6W3X3ZS7w5p5qS8Q6V6XQ8y7xS8}8R8SR9c9O^|O!O!P!T%_%b)iX)R$y)S)U-tQ&r!nQ*^&PQ*|&jQ+P&kQ+T&lQ+W&mQ+]&nQ+l&sQ-})[Q.Q)]Q.T)^Q.V)_Q.Y)aQ.^)bQ2S-uQ2e.WR4U0VU+a&o*u4TR4o0sQ+Y&mQ+k&sS.])b+l^0v+_+`/q/r4m4n7OS2d.W.^S4Q0R0SR5q2eS0R*x4RQ0a+UR7X4_U+d&o*u4TR4p0sQ*z&jQ+O&kQ+S&lQ+g&qQ+j&sS-{)[*|S.P)]+PS.S)^+TU.[)b+k+lQ/Y*]Q0X*{Q0q+[Q2X-|Q2Y-}Q2].QQ2_.TU2c.W.].^Q2g.XS3Z/]0yS5c2R4lQ5j2ZS5p2d2eQ6X3XS7q5e5rQ7x5qQ8R6VQ8v7pQ9O8SR9`8wQ0T*xR6|4RQ*y&jQ*}&kU-z)[*z*|U.O)]+O+PS2W-{-}S2[.P.QQ4X0ZQ5i2YQ5k2]R7T4YQ/w*vQ3t/tQ6r3wR8d6qQ*{&jS-|)[*|Q2Z-}Q4X0ZR7T4YQ+R&lU.R)^+S+TS2^.S.TR5l2_Q0]+QQ4V0YQ7V4ZR8l7UQ+[&nS.X)a+]S2R-u.YR5e2SQ0i+ZQ4f0gQ7`4hR8m7^Q.m)sQ0i+ZQ2p.jQ4f0gQ5|2sQ7`4hQ7}5yR8m7^Q0i+ZR4f0gX'O!q%X&|1PX&{!q%X&|1PW'O!q%X&|1PS+u&z'PR1U+z_|O!O!P!T%_%b)iQ%a!PS)h%_%bR.d)i$^%u!Q!n$O$u%o%p%q&P&o&p&r'](q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8gQ*U%yR*X%{$c%n!Q!n$O$u%o%p%q%y%{&P&o&p&r'](q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8gW)t%m%x*T*WQ.e)jR2{.vR.m)sR5|2sQ'W!sR,O'WQ!TOQ$TlQ$WmQ%b!P[%|!T$T$W%b)U/gQ)U$yR/g*f$b%i!Q!n$O$u%o%p%q%y%{&P&o&p&r'](q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8g[)n%i)p.i:`:t:xQ)p%jQ.i)qQ:`%nQ:t:aR:x:uQ!vUR'Y!vS!OO!TU%]!O%_)iQ%_!PR)i%b#rYOfgilmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i+n,s,z-m.}0}1h1|3_3a3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9hh!yY!|#U$`'a'n(d,q-R9s9|:gQ!|[b#Ub#Q$y'l(b)S)U*Z-t!h$`o!c!p$e$g$h$q$r&U&b&u(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7mQ'a!}Q'n#ZQ(d$aQ,q'oQ-R(e!W9s!Y!_!`*i*l/^3h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:fQ9|9tR:g9}Q-U(gR1p-UQ1t-[R5Z1tQ,c'bQ,f'cQ,h'dW1`,c,f,h5UR5U1_Q/d*fS3c/d3fR3f/gfbO!O!P!T$y%_%b)S)U)i-tp#Wb'}(y.j/b/t/{0Y0g1h5y6a6q6v7U7^Q'}#zS(y$v-oQ.j)sW/b*f/d/g3fQ/t*vQ/{*wQ0Y+QQ0g+ZQ1h,sQ5y2sQ6q3wQ6v3|Q7U4ZR7^4hQ,t(OQ1g,rT1j,t1gS(X$Q([Q(^$VU,x(X(^,}R,}(`Q(s$mR-h(sQ-p)OR2P-pQ3n/mQ3q/nT6j3n3qQ)S$yS-r)S-tR-t)UQ4`0aR7Y4``0t+^+_+`+a+d/q/r7OR4q0tQ8i6zR9Z8iQ4S0TR6}4SQ3x/wQ6n3tT6s3x6nQ3}/|Q6t3zU6y3}6t8eR8e6uQ4[0]Q7Q4VT7W4[7QhzOb!O!P!T$y%_%b)S)U)i-tQ$|xW%Zz$|%f)v$b%f!Q!n$O$u%o%p%q%y%{&P&o&p&r'](q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8gR)v%nS4i0i0nS7]4f4gT7b4i7]W&z!q%X&|1PS+r&z+zR+z'PQ1Q+wR4z1QU1[,S,T,UR5R1[S3S/Q7OR6U3SQ2t.mQ5x2pT5}2t5xQ.z)zR3O.z^_O!O!P!T%_%b)iY#Xb$y)S)U-t$l#_fgilmp!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W&Y&['}(W(Y(|*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f!h$io!c!p$e$g$h$q$r&U&b&u(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7mS'j#Q'lQ-P(bR/V*Z&v!RObfgilmop!O!P!T!Y!Z![!_!`!c!p#Q#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r$y%_%b&U&Y&[&b&u'l'}(W(Y(b(f(j(o(p(r(|)S)U)i*Z*f*i*k*l+Z+n,s,z-T-g-m-t.}/^/b/d/g0e0g0m0}1h1r1|3_3a3f3h3k4W4c4h4v4|5[5g5t6]6a7S7^7g7m7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f[!{Y[#U#Z9s9tW&{!q%X&|1P['`!|!}'n'o9|9}S(c$`$aS+t&z'PU,X'a,q:gS-Q(d(eQ1T+zR1n-RS%t!Q&oQ&q!nQ(V$OQ(w$uS)w%o.pQ)z%pQ)}%qS*]&P&rQ+e&pQ,S']Q-d(qQ.l)sU.w)x)y2vS/O*O*PQ/P*RQ/T*VQ/W*[Q/]*^Q/`*eQ/l*nQ/|*wS0S*x4RQ0a+UQ0c+VQ0y+hQ0{+oQ1X+}Q1{-iQ2T-vQ2`.UQ2i.`Q2z.tQ2|.xQ2}.yQ3X/ZQ3Y/[S3z/{/}Q4^0`Q4l0rQ4s0wQ4x1OQ4}1YQ5O1ZQ5_1yQ5n2aQ5r2hQ5u2jQ5w2mQ5{2sQ6V3VQ6o3uQ6u3{Q6w3|Q7P4UQ7X4_Q7[4eQ7d4tQ7n5`Q7p5dQ7|5vQ8P6RQ8S6YQ8c6pS8f6v6xQ8o7cQ8w7rR9X8g$^%m!Q!n$O$u%o%p%q&P&o&p&r'](q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8gQ)j%nQ*T%yR*W%{$y%h!Q!n$O$u%i%j%n%o%p%q%y%{&P&o&p&r'](q)p)q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.i.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8g:`:a:t:u:x'pWOY[bfgilmop!O!P!T!Y!Z![!_!`!c!p!|!}#Q#U#Z#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$`$a$e$g$h$q$r$y%_%b&U&Y&[&b&u'a'l'n'o'}(W(Y(b(d(e(f(j(o(p(r(|)S)U)i*Z*f*i*k*l+Z+n,q,s,z-R-T-g-m-t.}/^/b/d/g0e0g0m0}1h1r1|3_3a3f3h3k4W4c4h4v4|5[5g5t6]6a7S7^7g7m7{8W8X8k8|9U9h9s9t9u9v9w9x9z9{9|9}:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f:g$x%g!Q!n$O$u%i%j%n%o%p%q%y%{&P&o&p&r'](q)p)q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.i.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8g:`:a:t:u:x_&y!q%X&z&|'P+z1PR,V']$zrOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f!j$]o!c!p$e$g$h$q$r&U&b&u(b(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7mQ,T']R5P1Z_}O!O!P!T%_%b)i^|O!O!P!T%_%b)iQ#YbX)R$y)S)U-tbhO!O!T3_6]8W8X9U9hS#`f9uQ#dgQ$PiQ$QlQ$VmQ$spW%^!P%_%b)iU&S!Y!`*iQ&W!ZQ&X![Q&]!_Q'q#eQ'r#oS's#p:QQ't#qQ'u#rQ'v#sQ'w#tQ'x#uQ'y#vQ'z#wQ'{#xQ'|#yQ(O#zQ(U#}Q([$TQ(`$WQ*b&YQ*c&[Q,r'}Q,w(WQ,y(YQ-n(|Q/k*lQ0z+nQ1i,sQ1l,zQ1}-mQ3P.}Q3[/^Q4w0}Q5V1hQ5a1|Q6^3aQ6d3hQ6e3kQ7R4WQ7e4vQ7h4|Q7s5gQ7y5tQ8j7SQ8q7gQ8{7{Q9[8kQ9b8|Q:[9wQ:]9xQ:c9zQ:d9{Q:h:OQ:i:PQ:j:RQ:k:SQ:l:TQ:m:UQ:n:VQ:o:WQ:p:XQ:q:YQ:r:ZQ:v:eQ:w:fR:{9v^tO!O!P!T%_%b)i$`#afgilmp!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W&Y&['}(W(Y(|*i*l+n,s,z-m.}/^0}1h1|3a3h3k4W4v4|5g5t7S7g7{8k8|9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:fQ6[3_Q8V6]Q9R8WQ9T8XQ9g9UR9m9hQ&V!YQ&^!`R/h*iQ$joQ&a!cQ&t!pU(g$e$g(jS(n$h0eQ(u$qQ(v$rQ*`&UQ*m&bQ+p&uQ-S(fS-b(o4cQ-c(pQ-e(rW/a*f/d/g3fQ/j*kW0f+Z0g4h7^Q1o-TQ1z-gQ3b/bQ4k0mQ5X1rQ7l5[Q8Z6aR8t7m!h$_o!c!p$e$g$h$q$r&U&b&u(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7mR-P(b'qXOY[bfgilmop!O!P!T!Y!Z![!_!`!c!p!|!}#Q#U#Z#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$`$a$e$g$h$q$r$y%_%b&U&Y&[&b&u'a'l'n'o'}(W(Y(b(d(e(f(j(o(p(r(|)S)U)i*Z*f*i*k*l+Z+n,q,s,z-R-T-g-m-t.}/^/b/d/g0e0g0m0}1h1r1|3_3a3f3h3k4W4c4h4v4|5[5g5t6]6a7S7^7g7m7{8W8X8k8|9U9h9s9t9u9v9w9x9z9{9|9}:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f:g$zqOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f!i$fo!c!p$e$g$h$q$r&U&b&u(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7m&d^Ofgilmop!O!P!T!Y!Z![!_!`!c!p#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r%_%b&U&Y&[&b&u'}(W(Y(f(j(o(p(r(|)i*f*i*k*l+Z+n,s,z-T-g-m.}/^/b/d/g0e0g0m0}1h1r1|3_3a3f3h3k4W4c4h4v4|5[5g5t6]6a7S7^7g7m7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f[!zY[$`$a9s9t['_!|!}(d(e9|9}W)o%i%j:`:aU,W'a-R:gW.h)p)q:t:uT2o.i:xQ(i$eQ(m$gR-W(jV(h$e$g(jR-^(kR-](k$znOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f!i$ko!c!p$e$g$h$q$r&U&b&u(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7mS'g#O'pj,a'b'c'd,c,f,h,l/m/n1_3n3q5UQ,m'jQ.u)uR8_6f`,b'b'c'd,c,f,h1_5UQ1e,lX3l/m/n3n3qj,a'b'c'd,c,f,h,l/m/n1_3n3q5UQ7j5TR8s7k^uO!O!P!T%_%b)i$`#afgilmp!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W&Y&['}(W(Y(|*i*l+n,s,z-m.}/^0}1h1|3a3h3k4W4v4|5g5t7S7g7{8k8|9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:fQ6Z3_Q8U6]Q9Q8WQ9S8XQ9f9UR9l9hR(Q#zR(P#zQ$SlR(]$TR$ooR$noR)Q$vR)P$vQ)O$vR2O-ohwOb!O!P!T$y%_%b)S)U)i-t$l!lz!Q!n$O$u$|%f%n%o%p%q%y%{&P&o&p&r'](q)s)v)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8gR${xR0b+UR0W*xR0U*xR6{4PR/y*vR/x*vR0P*wR0O*wR0_+QR0^+Q%XyObxz!O!P!Q!T!n$O$u$y$|%_%b%f%n%o%p%q%y%{&P&o&p&r'](q)S)U)i)s)v)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-t-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8gR0k+ZR0j+ZQ'R!qQ)c%XQ+w&|R4y1PX'Q!q%X&|1PR+y&|R+x&|T/S*S4TT/R*S4TR.o)sR.n)sR){%p\",\n  nodeNames: \"⚠ | < > RawString Float LineComment BlockComment SourceFile ] InnerAttribute ! [ MetaItem self Metavariable super crate Identifier ScopedIdentifier :: QualifiedScope AbstractType impl SelfType MetaType TypeIdentifier ScopedTypeIdentifier ScopeIdentifier TypeArgList TypeBinding = Lifetime String Escape Char Boolean Integer } { Block ; ConstItem Vis pub ( in ) const BoundIdentifier : UnsafeBlock unsafe AsyncBlock async move IfExpression if LetDeclaration let LiteralPattern ArithOp MetaPattern SelfPattern ScopedIdentifier TuplePattern ScopedTypeIdentifier , StructPattern FieldPatternList FieldPattern ref mut FieldIdentifier .. RefPattern SlicePattern CapturedPattern ReferencePattern & MutPattern RangePattern ... OrPattern MacroPattern ParenthesizedTokens TokenBinding Identifier TokenRepetition ArithOp BitOp LogicOp UpdateOp CompareOp -> => ArithOp BracketedTokens BracedTokens _ else MatchExpression match MatchBlock MatchArm Attribute Guard UnaryExpression ArithOp DerefOp LogicOp ReferenceExpression TryExpression BinaryExpression ArithOp ArithOp BitOp BitOp BitOp BitOp LogicOp LogicOp AssignmentExpression TypeCastExpression as ReturnExpression return RangeExpression CallExpression ArgList AwaitExpression await FieldExpression GenericFunction BreakExpression break LoopLabel ContinueExpression continue IndexExpression ArrayExpression TupleExpression MacroInvocation UnitExpression ClosureExpression ParamList Parameter Parameter ParenthesizedExpression StructExpression FieldInitializerList ShorthandFieldInitializer FieldInitializer BaseFieldInitializer MatchArm WhileExpression while LoopExpression loop ForExpression for MacroInvocation MacroDefinition macro_rules MacroRule EmptyStatement ModItem mod DeclarationList AttributeItem ForeignModItem extern StructItem struct TypeParamList ConstrainedTypeParameter TraitBounds HigherRankedTraitBound RemovedTraitBound OptionalTypeParameter ConstParameter WhereClause where LifetimeClause TypeBoundClause FieldDeclarationList FieldDeclaration OrderedFieldDeclarationList UnionItem union EnumItem enum EnumVariantList EnumVariant TypeItem type FunctionItem default fn ParamList Parameter SelfParameter VariadicParameter VariadicParameter ImplItem TraitItem trait AssociatedType LetDeclaration UseDeclaration use ScopedIdentifier UseAsClause ScopedIdentifier UseList ScopedUseList UseWildcard ExternCrateDeclaration StaticItem static ExpressionStatement ExpressionStatement GenericType FunctionType ForLifetimes ParamList VariadicParameter Parameter VariadicParameter Parameter ReferenceType PointerType TupleType UnitType ArrayType MacroInvocation EmptyType DynamicType dyn BoundedType\",\n  maxTerm: 359,\n  nodeProps: [\n    [\"isolate\", -4,4,6,7,33,\"\"],\n    [\"group\", -42,4,5,14,15,16,17,18,19,33,35,36,37,40,51,53,56,101,107,111,112,113,122,123,125,127,128,130,132,133,134,137,139,140,141,142,143,144,148,149,155,157,159,\"Expression\",-16,22,24,25,26,27,222,223,230,231,232,233,234,235,236,237,239,\"Type\",-20,42,161,162,165,166,169,170,172,188,190,194,196,204,205,207,208,209,217,218,220,\"Statement\",-17,49,60,62,63,64,65,68,74,75,76,77,78,80,81,83,84,99,\"Pattern\"],\n    [\"openedBy\", 9,\"[\",38,\"{\",47,\"(\"],\n    [\"closedBy\", 12,\"]\",39,\"}\",45,\")\"]\n  ],\n  propSources: [rustHighlighting],\n  skippedNodes: [0,6,7,240],\n  repeatNodeCount: 32,\n  tokenData: \"$%h_R!XOX$nXY5gYZ6iZ]$n]^5g^p$npq5gqr7Xrs9cst:Rtu;Tuv>vvwAQwxCbxy!+Tyz!,Vz{!-X{|!/_|}!0g}!O!1i!O!P!3v!P!Q!8[!Q!R!Bw!R![!Dr![!]#+q!]!^#-{!^!_#.}!_!`#1b!`!a#3o!a!b#6S!b!c#7U!c!}#8W!}#O#:T#O#P#;V#P#Q#Cb#Q#R#Dd#R#S#8W#S#T$n#T#U#8W#U#V#El#V#f#8W#f#g#Ic#g#o#8W#o#p$ S#p#q$!U#q#r$$f#r${$n${$|#8W$|4w$n4w5b#8W5b5i$n5i6S#8W6S;'S$n;'S;=`4s<%lO$nU$u]'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$nU%uV'_Q'OSOz&[z{&v{!P&[!P!Q'x!Q;'S&[;'S;=`*s<%lO&[S&aV'OSOz&[z{&v{!P&[!P!Q'x!Q;'S&[;'S;=`*s<%lO&[S&yVOz'`z{&v{!P'`!P!Q*y!Q;'S'`;'S;=`*m<%lO'`S'cVOz&[z{&v{!P&[!P!Q'x!Q;'S&[;'S;=`*s<%lO&[S'{UOz'`{!P'`!P!Q(_!Q;'S'`;'S;=`*m<%lO'`S(bUOz(t{!P(t!P!Q(_!Q;'S(t;'S;=`*a<%lO(tS(wVOz)^z{)z{!P)^!P!Q(_!Q;'S)^;'S;=`*g<%lO)^S)eV'PS'OSOz)^z{)z{!P)^!P!Q(_!Q;'S)^;'S;=`*g<%lO)^S)}UOz(tz{)z{!P(t!Q;'S(t;'S;=`*a<%lO(tS*dP;=`<%l(tS*jP;=`<%l)^S*pP;=`<%l'`S*vP;=`<%l&[S+OO'PSU+T]'_QOY+|YZ-xZr+|rs'`sz+|z{+O{!P+|!P!Q4y!Q#O+|#O#P'`#P;'S+|;'S;=`4m<%lO+|U,R]'_QOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$nU-P]'_QOY+|YZ-xZr+|rs'`sz+|z{.d{!P+|!P!Q/Z!Q#O+|#O#P'`#P;'S+|;'S;=`4m<%lO+|U-}V'_QOz&[z{&v{!P&[!P!Q'x!Q;'S&[;'S;=`*s<%lO&[Q.iV'_QOY.dYZ/OZr.ds#O.d#P;'S.d;'S;=`/T<%lO.dQ/TO'_QQ/WP;=`<%l.dU/`]'_QOY0XYZ3uZr0Xrs(tsz0Xz{.d{!P0X!P!Q/Z!Q#O0X#O#P(t#P;'S0X;'S;=`4a<%lO0XU0^]'_QOY1VYZ2XZr1Vrs)^sz1Vz{2w{!P1V!P!Q/Z!Q#O1V#O#P)^#P;'S1V;'S;=`4g<%lO1VU1`]'_Q'PS'OSOY1VYZ2XZr1Vrs)^sz1Vz{2w{!P1V!P!Q/Z!Q#O1V#O#P)^#P;'S1V;'S;=`4g<%lO1VU2bV'_Q'PS'OSOz)^z{)z{!P)^!P!Q(_!Q;'S)^;'S;=`*g<%lO)^U2|]'_QOY0XYZ3uZr0Xrs(tsz0Xz{2w{!P0X!P!Q.d!Q#O0X#O#P(t#P;'S0X;'S;=`4a<%lO0XU3zV'_QOz)^z{)z{!P)^!P!Q(_!Q;'S)^;'S;=`*g<%lO)^U4dP;=`<%l0XU4jP;=`<%l1VU4pP;=`<%l+|U4vP;=`<%l$nU5QV'_Q'PSOY.dYZ/OZr.ds#O.d#P;'S.d;'S;=`/T<%lO.d_5p]'_Q&|X'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_6rV'_Q&|X'OSOz&[z{&v{!P&[!P!Q'x!Q;'S&[;'S;=`*s<%lO&[_7b_ZX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!_$n!_!`8a!`#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_8j]#PX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_9lV']Q'OS'^XOz&[z{&v{!P&[!P!Q'x!Q;'S&[;'S;=`*s<%lO&[_:[]'QX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_;^i'_Q'vW'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!c$n!c!}<{!}#O$n#O#P&[#P#R$n#R#S<{#S#T$n#T#o<{#o${$n${$|<{$|4w$n4w5b<{5b5i$n5i6S<{6S;'S$n;'S;=`4s<%lO$n_=Uj'_Q_X'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q![<{![!c$n!c!}<{!}#O$n#O#P&[#P#R$n#R#S<{#S#T$n#T#o<{#o${$n${$|<{$|4w$n4w5b<{5b5i$n5i6S<{6S;'S$n;'S;=`4s<%lO$n_?P_(TP'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!_$n!_!`@O!`#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_@X]#OX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_AZa!qX'_Q'OSOY$nYZ%nZr$nrs&[sv$nvwB`wz$nz{+O{!P$n!P!Q,z!Q!_$n!_!`@O!`#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_Bi]'}X'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_Cik'_Q'OSOYE^YZGfZrE^rsHvswE^wxFdxzE^z{Ih{!PE^!P!QKl!Q!cE^!c!}Lp!}#OE^#O#P!!l#P#RE^#R#SLp#S#TE^#T#oLp#o${E^${$|Lp$|4wE^4w5bLp5b5iE^5i6SLp6S;'SE^;'S;=`!*}<%lOE^_Ee_'_Q'OSOY$nYZ%nZr$nrs&[sw$nwxFdxz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_Fm]'_Q'OSsXOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_GmX'_Q'OSOw&[wxHYxz&[z{&v{!P&[!P!Q'x!Q;'S&[;'S;=`*s<%lO&[]HaV'OSsXOz&[z{&v{!P&[!P!Q'x!Q;'S&[;'S;=`*s<%lO&[]H{X'OSOw&[wxHYxz&[z{&v{!P&[!P!Q'x!Q;'S&[;'S;=`*s<%lO&[_Im_'_QOY+|YZ-xZr+|rs'`sw+|wxJlxz+|z{+O{!P+|!P!Q4y!Q#O+|#O#P'`#P;'S+|;'S;=`4m<%lO+|_Js]'_QsXOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_Kq_'_QOY+|YZ-xZr+|rs'`sw+|wxJlxz+|z{.d{!P+|!P!Q/Z!Q#O+|#O#P'`#P;'S+|;'S;=`4m<%lO+|_Lyl'_Q'OS'ZXOY$nYZ%nZr$nrs&[sw$nwxFdxz$nz{+O{!P$n!P!Q,z!Q![Nq![!c$n!c!}Nq!}#O$n#O#P&[#P#R$n#R#SNq#S#T$n#T#oNq#o${$n${$|Nq$|4w$n4w5bNq5b5i$n5i6SNq6S;'S$n;'S;=`4s<%lO$n_Nzj'_Q'OS'ZXOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q![Nq![!c$n!c!}Nq!}#O$n#O#P&[#P#R$n#R#SNq#S#T$n#T#oNq#o${$n${$|Nq$|4w$n4w5bNq5b5i$n5i6SNq6S;'S$n;'S;=`4s<%lO$n]!!qZ'OSOzHvz{!#d{!PHv!P!Q!$n!Q#iHv#i#j!%Z#j#lHv#l#m!'V#m;'SHv;'S;=`!*w<%lOHv]!#gXOw'`wx!$Sxz'`z{&v{!P'`!P!Q*y!Q;'S'`;'S;=`*m<%lO'`]!$XVsXOz&[z{&v{!P&[!P!Q'x!Q;'S&[;'S;=`*s<%lO&[]!$qWOw'`wx!$Sxz'`{!P'`!P!Q(_!Q;'S'`;'S;=`*m<%lO'`]!%`^'OSOz&[z{&v{!P&[!P!Q'x!Q![!&[![!c&[!c!i!&[!i#T&[#T#Z!&[#Z#o&[#o#p!({#p;'S&[;'S;=`*s<%lO&[]!&a['OSOz&[z{&v{!P&[!P!Q'x!Q![!'V![!c&[!c!i!'V!i#T&[#T#Z!'V#Z;'S&[;'S;=`*s<%lO&[]!'[['OSOz&[z{&v{!P&[!P!Q'x!Q![!(Q![!c&[!c!i!(Q!i#T&[#T#Z!(Q#Z;'S&[;'S;=`*s<%lO&[]!(V['OSOz&[z{&v{!P&[!P!Q'x!Q![Hv![!c&[!c!iHv!i#T&[#T#ZHv#Z;'S&[;'S;=`*s<%lO&[]!)Q['OSOz&[z{&v{!P&[!P!Q'x!Q![!)v![!c&[!c!i!)v!i#T&[#T#Z!)v#Z;'S&[;'S;=`*s<%lO&[]!){^'OSOz&[z{&v{!P&[!P!Q'x!Q![!)v![!c&[!c!i!)v!i#T&[#T#Z!)v#Z#q&[#q#rHv#r;'S&[;'S;=`*s<%lO&[]!*zP;=`<%lHv_!+QP;=`<%lE^_!+^]}X'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_!,`]!PX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_!-`_(QX'_QOY+|YZ-xZr+|rs'`sz+|z{+O{!P+|!P!Q4y!Q!_+|!_!`!._!`#O+|#O#P'`#P;'S+|;'S;=`4m<%lO+|_!.f]#OX'_QOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_!/h_(PX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!_$n!_!`@O!`#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_!0p]!eX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_!1r`'gX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!_$n!_!`@O!`!a!2t!a#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_!2}]#QX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_!4P^(OX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!O$n!O!P!4{!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_!5U`!lX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!O$n!O!P!6W!P!Q,z!Q!_$n!_!`!7Y!`#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_!6a]!tX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$nV!7c]'qP'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_!8c_'_Q'xXOY+|YZ-xZr+|rs'`sz+|z{!9b{!P+|!P!Q!:O!Q!_+|!_!`!._!`#O+|#O#P'`#P;'S+|;'S;=`4m<%lO+|_!9iV&}]'_QOY.dYZ/OZr.ds#O.d#P;'S.d;'S;=`/T<%lO.d_!:V]'_QUXOY!;OYZ3uZr!;Ors!>jsz!;Oz{!Aq{!P!;O!P!Q!:O!Q#O!;O#O#P!>j#P;'S!;O;'S;=`!Bk<%lO!;O_!;V]'_QUXOY!<OYZ2XZr!<Ors!=Ssz!<Oz{!@q{!P!<O!P!Q!:O!Q#O!<O#O#P!=S#P;'S!<O;'S;=`!Bq<%lO!<O_!<Z]'_QUX'PS'OSOY!<OYZ2XZr!<Ors!=Ssz!<Oz{!@q{!P!<O!P!Q!:O!Q#O!<O#O#P!=S#P;'S!<O;'S;=`!Bq<%lO!<O]!=]XUX'PS'OSOY!=SYZ)^Zz!=Sz{!=x{!P!=S!P!Q!?[!Q;'S!=S;'S;=`!@k<%lO!=S]!=}XUXOY!>jYZ(tZz!>jz{!=x{!P!>j!P!Q!?|!Q;'S!>j;'S;=`!@e<%lO!>j]!>oXUXOY!=SYZ)^Zz!=Sz{!=x{!P!=S!P!Q!?[!Q;'S!=S;'S;=`!@k<%lO!=S]!?aXUXOY!>jYZ(tZz!>jz{!?|{!P!>j!P!Q!?[!Q;'S!>j;'S;=`!@e<%lO!>jX!@RSUXOY!?|Z;'S!?|;'S;=`!@_<%lO!?|X!@bP;=`<%l!?|]!@hP;=`<%l!>j]!@nP;=`<%l!=S_!@x]'_QUXOY!;OYZ3uZr!;Ors!>jsz!;Oz{!@q{!P!;O!P!Q!Aq!Q#O!;O#O#P!>j#P;'S!;O;'S;=`!Bk<%lO!;OZ!AxX'_QUXOY!AqYZ/OZr!Aqrs!?|s#O!Aq#O#P!?|#P;'S!Aq;'S;=`!Be<%lO!AqZ!BhP;=`<%l!Aq_!BnP;=`<%l!;O_!BtP;=`<%l!<O_!CQjuX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q![!Dr![#O$n#O#P&[#P#R$n#R#S!Dr#S#U$n#U#V#!}#V#]$n#]#^!FZ#^#c$n#c#d#%u#d#i$n#i#j!FZ#j#l$n#l#m#(g#m;'S$n;'S;=`4s<%lO$n_!D{duX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q![!Dr![#O$n#O#P&[#P#R$n#R#S!Dr#S#]$n#]#^!FZ#^#i$n#i#j!FZ#j;'S$n;'S;=`4s<%lO$n_!Fbg'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!R$n!R!S!Gy!S!T$n!T!U!K_!U!W$n!W!X!Le!X!Y$n!Y!Z!J]!Z#O$n#O#P&[#P#g$n#g#h!Mk#h;'S$n;'S;=`4s<%lO$n_!HQa'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!S$n!S!T!IV!T!W$n!W!X!J]!X#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_!I^_'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!Y$n!Y!Z!J]!Z#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_!Jf]uX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_!Kf_'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!S$n!S!T!J]!T#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_!Ll_'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!U$n!U!V!J]!V#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_!Mr_'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P#]$n#]#^!Nq#^;'S$n;'S;=`4s<%lO$n_!Nx_'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P#n$n#n#o# w#o;'S$n;'S;=`4s<%lO$n_#!O_'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P#X$n#X#Y!J]#Y;'S$n;'S;=`4s<%lO$n_##Ua'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!R#$Z!R!S#$Z!S#O$n#O#P&[#P#R$n#R#S#$Z#S;'S$n;'S;=`4s<%lO$n_#$deuX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!R#$Z!R!S#$Z!S#O$n#O#P&[#P#R$n#R#S#$Z#S#]$n#]#^!FZ#^#i$n#i#j!FZ#j;'S$n;'S;=`4s<%lO$n_#%|`'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!Y#'O!Y#O$n#O#P&[#P#R$n#R#S#'O#S;'S$n;'S;=`4s<%lO$n_#'XduX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!Y#'O!Y#O$n#O#P&[#P#R$n#R#S#'O#S#]$n#]#^!FZ#^#i$n#i#j!FZ#j;'S$n;'S;=`4s<%lO$n_#(nd'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q![#)|![!c$n!c!i#)|!i#O$n#O#P&[#P#R$n#R#S#)|#S#T$n#T#Z#)|#Z;'S$n;'S;=`4s<%lO$n_#*VhuX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q![#)|![!c$n!c!i#)|!i#O$n#O#P&[#P#R$n#R#S#)|#S#T$n#T#Z#)|#Z#]$n#]#^!FZ#^#i$n#i#j!FZ#j;'S$n;'S;=`4s<%lO$n_#+z_!SX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q![$n![!]#,y!]#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_#-S]dX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_#.U]yX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_#/W`#PX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!^$n!^!_#0Y!_!`8a!`#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_#0c_'yX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!_$n!_!`@O!`#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_#1k`oX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!_$n!_!`8a!`!a#2m!a#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_#2v]#RX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_#3x`#PX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!_$n!_!`8a!`!a#4z!a#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_#5T_'zX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!_$n!_!`@O!`#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_#6]](RX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$nV#7_]'pP'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_#8cj'_Q'OS!yW'TPOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q![#8W![!c$n!c!}#8W!}#O$n#O#P&[#P#R$n#R#S#8W#S#T$n#T#o#8W#o${$n${$|#8W$|4w$n4w5b#8W5b5i$n5i6S#8W6S;'S$n;'S;=`4s<%lO$n_#:^][X'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$nU#;[Z'OSOz#;}z{#<k{!P#;}!P!Q#=V!Q#i#;}#i#j#=n#j#l#;}#l#m#?j#m;'S#;};'S;=`#C[<%lO#;}U#<UVrQ'OSOz&[z{&v{!P&[!P!Q'x!Q;'S&[;'S;=`*s<%lO&[U#<pVrQOz'`z{&v{!P'`!P!Q*y!Q;'S'`;'S;=`*m<%lO'`U#=[UrQOz'`{!P'`!P!Q(_!Q;'S'`;'S;=`*m<%lO'`U#=s^'OSOz&[z{&v{!P&[!P!Q'x!Q![#>o![!c&[!c!i#>o!i#T&[#T#Z#>o#Z#o&[#o#p#A`#p;'S&[;'S;=`*s<%lO&[U#>t['OSOz&[z{&v{!P&[!P!Q'x!Q![#?j![!c&[!c!i#?j!i#T&[#T#Z#?j#Z;'S&[;'S;=`*s<%lO&[U#?o['OSOz&[z{&v{!P&[!P!Q'x!Q![#@e![!c&[!c!i#@e!i#T&[#T#Z#@e#Z;'S&[;'S;=`*s<%lO&[U#@j['OSOz&[z{&v{!P&[!P!Q'x!Q![#;}![!c&[!c!i#;}!i#T&[#T#Z#;}#Z;'S&[;'S;=`*s<%lO&[U#Ae['OSOz&[z{&v{!P&[!P!Q'x!Q![#BZ![!c&[!c!i#BZ!i#T&[#T#Z#BZ#Z;'S&[;'S;=`*s<%lO&[U#B`^'OSOz&[z{&v{!P&[!P!Q'x!Q![#BZ![!c&[!c!i#BZ!i#T&[#T#Z#BZ#Z#q&[#q#r#;}#r;'S&[;'S;=`*s<%lO&[U#C_P;=`<%l#;}_#Ck]XX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_#Dm_'{X'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!_$n!_!`@O!`#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_#Ewl'_Q'OS!yW'TPOY$nYZ%nZr$nrs#Gosw$nwx#H]xz$nz{+O{!P$n!P!Q,z!Q![#8W![!c$n!c!}#8W!}#O$n#O#P&[#P#R$n#R#S#8W#S#T$n#T#o#8W#o${$n${$|#8W$|4w$n4w5b#8W5b5i$n5i6S#8W6S;'S$n;'S;=`4s<%lO$n]#GvV'OS'^XOz&[z{&v{!P&[!P!Q'x!Q;'S&[;'S;=`*s<%lO&[_#Hd_'_Q'OSOYE^YZGfZrE^rsHvswE^wxFdxzE^z{Ih{!PE^!P!QKl!Q#OE^#O#P!!l#P;'SE^;'S;=`!*}<%lOE^_#Ink'_Q'OS!yW'TPOY$nYZ%nZr$nrs&[st#Kctz$nz{+O{!P$n!P!Q,z!Q![#8W![!c$n!c!}#8W!}#O$n#O#P&[#P#R$n#R#S#8W#S#T$n#T#o#8W#o${$n${$|#8W$|4w$n4w5b#8W5b5i$n5i6S#8W6S;'S$n;'S;=`4s<%lO$nV#Kji'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!c$n!c!}#MX!}#O$n#O#P&[#P#R$n#R#S#MX#S#T$n#T#o#MX#o${$n${$|#MX$|4w$n4w5b#MX5b5i$n5i6S#MX6S;'S$n;'S;=`4s<%lO$nV#Mbj'_Q'OS'TPOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q![#MX![!c$n!c!}#MX!}#O$n#O#P&[#P#R$n#R#S#MX#S#T$n#T#o#MX#o${$n${$|#MX$|4w$n4w5b#MX5b5i$n5i6S#MX6S;'S$n;'S;=`4s<%lO$n_$ ]]wX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_$!_a'rX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q!_$n!_!`@O!`#O$n#O#P&[#P#p$n#p#q$#d#q;'S$n;'S;=`4s<%lO$n_$#m]'|X'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n_$$o]vX'_Q'OSOY$nYZ%nZr$nrs&[sz$nz{+O{!P$n!P!Q,z!Q#O$n#O#P&[#P;'S$n;'S;=`4s<%lO$n\",\n  tokenizers: [closureParam, tpDelim, literalTokens, 0, 1, 2, 3],\n  topRules: {\"SourceFile\":[0,8]},\n  specialized: [{term: 281, get: (value) => spec_identifier[value] || -1}],\n  tokenPrec: 15596\n});\n\nexport { parser };\n","import { parser } from '@lezer/rust';\nimport { LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\n\n/**\nA syntax provider based on the [Lezer Rust\nparser](https://github.com/lezer-parser/rust), extended with\nhighlighting and indentation information.\n*/\nconst rustLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"rust\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                IfExpression: /*@__PURE__*/continuedIndent({ except: /^\\s*({|else\\b)/ }),\n                \"String BlockComment\": () => null,\n                \"AttributeItem\": cx => cx.continue(),\n                \"Statement MatchArm\": /*@__PURE__*/continuedIndent()\n            }),\n            /*@__PURE__*/foldNodeProp.add(type => {\n                if (/(Block|edTokens|List)$/.test(type.name))\n                    return foldInside;\n                if (type.name == \"BlockComment\")\n                    return tree => ({ from: tree.from + 2, to: tree.to - 2 });\n                return undefined;\n            })\n        ]\n    }),\n    languageData: {\n        commentTokens: { line: \"//\", block: { open: \"/*\", close: \"*/\" } },\n        indentOnInput: /^\\s*(?:\\{|\\})$/,\n        closeBrackets: { stringPrefixes: [\"b\", \"r\", \"br\"] }\n    }\n});\n/**\nRust language support\n*/\nfunction rust() {\n    return new LanguageSupport(rustLanguage);\n}\n\nexport { rust, rustLanguage };\n","import { ExternalTokenizer, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst RawString = 1,\n  templateArgsEndFallback = 2,\n  MacroName = 3;\n\nconst R = 82, L = 76, u = 117, U = 85,\n      a = 97, z = 122, A = 65, Z = 90, Underscore = 95,\n      Zero = 48,\n      Quote = 34,\n      ParenL = 40, ParenR = 41,\n      Space = 32, GreaterThan = 62;\n\nconst rawString = new ExternalTokenizer(input => {\n  // Raw string literals can start with: R, LR, uR, UR, u8R\n  if (input.next == L || input.next == U) {\n    input.advance();\n  } else if (input.next == u) {\n    input.advance();\n    if (input.next == Zero + 8) input.advance();\n  }\n  if (input.next != R) return\n  input.advance();\n  if (input.next != Quote) return\n  input.advance();\n\n  let marker = \"\";\n  while (input.next != ParenL) {\n    if (input.next == Space || input.next <= 13 || input.next == ParenR) return\n    marker += String.fromCharCode(input.next);\n    input.advance();\n  }\n  input.advance();\n\n  for (;;) {\n    if (input.next < 0)\n      return input.acceptToken(RawString)\n    if (input.next == ParenR) {\n      let match = true;\n      for (let i = 0; match && i < marker.length; i++)\n        if (input.peek(i + 1) != marker.charCodeAt(i)) match = false;\n      if (match && input.peek(marker.length + 1) == Quote)\n        return input.acceptToken(RawString, 2 + marker.length)\n    }\n    input.advance();\n  }\n});\n\nconst fallback = new ExternalTokenizer(input => {\n  if (input.next == GreaterThan) {\n    // Provide a template-args-closing token when the next characters\n    // are \">>\", in which case the regular tokenizer will only see a\n    // bit shift op.\n    if (input.peek(1) == GreaterThan)\n      input.acceptToken(templateArgsEndFallback, 1);\n  } else {\n    // Notice all-uppercase identifiers\n    let sawLetter = false, i = 0;\n    for (;; i++) {\n      if (input.next >= A && input.next <= Z) sawLetter = true;\n      else if (input.next >= a && input.next <= z) return\n      else if (input.next != Underscore && !(input.next >= Zero && input.next <= Zero + 9)) break\n      input.advance();\n    }\n    if (sawLetter && i > 1) input.acceptToken(MacroName);\n  }\n}, {extend: true});\n\nconst cppHighlighting = styleTags({\n  \"typedef struct union enum class typename decltype auto template operator friend noexcept namespace using requires concept import export module __attribute__ __declspec __based\": tags.definitionKeyword,\n  \"extern MsCallModifier MsPointerModifier extern static register thread_local inline const volatile restrict _Atomic mutable constexpr constinit consteval virtual explicit VirtualSpecifier Access\": tags.modifier,\n  \"if else switch for while do case default return break continue goto throw try catch\": tags.controlKeyword,\n  \"co_return co_yield co_await\": tags.controlKeyword,\n  \"new sizeof delete static_assert\": tags.operatorKeyword,\n  \"NULL nullptr\": tags.null,\n  this: tags.self,\n  \"True False\": tags.bool,\n  \"TypeSize PrimitiveType\": tags.standard(tags.typeName),\n  TypeIdentifier: tags.typeName,\n  FieldIdentifier: tags.propertyName,\n  \"CallExpression/FieldExpression/FieldIdentifier\": tags.function(tags.propertyName),\n  \"ModuleName/Identifier\": tags.namespace,\n  \"PartitionName\": tags.labelName,\n  StatementIdentifier: tags.labelName,\n  \"Identifier DestructorName\": tags.variableName,\n  \"CallExpression/Identifier\": tags.function(tags.variableName),\n  \"CallExpression/ScopedIdentifier/Identifier\": tags.function(tags.variableName),\n  \"FunctionDeclarator/Identifier FunctionDeclarator/DestructorName\": tags.function(tags.definition(tags.variableName)),\n  NamespaceIdentifier: tags.namespace,\n  OperatorName: tags.operator,\n  ArithOp: tags.arithmeticOperator,\n  LogicOp: tags.logicOperator,\n  BitOp: tags.bitwiseOperator,\n  CompareOp: tags.compareOperator,\n  AssignOp: tags.definitionOperator,\n  UpdateOp: tags.updateOperator,\n  LineComment: tags.lineComment,\n  BlockComment: tags.blockComment,\n  Number: tags.number,\n  String: tags.string,\n  \"RawString SystemLibString\": tags.special(tags.string),\n  CharLiteral: tags.character,\n  EscapeSequence: tags.escape,\n  \"UserDefinedLiteral/Identifier\": tags.literal,\n  PreProcArg: tags.meta,\n  \"PreprocDirectiveName #include #ifdef #ifndef #if #define #else #endif #elif\": tags.processingInstruction,\n  MacroName: tags.special(tags.name),\n  \"( )\": tags.paren,\n  \"[ ]\": tags.squareBracket,\n  \"{ }\": tags.brace,\n  \"< >\": tags.angleBracket,\n  \". ->\": tags.derefOperator,\n  \", ;\": tags.separator\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_identifier = {__proto__:null,bool:36, char:36, int:36, float:36, double:36, void:36, size_t:36, ssize_t:36, intptr_t:36, uintptr_t:36, charptr_t:36, int8_t:36, int16_t:36, int32_t:36, int64_t:36, uint8_t:36, uint16_t:36, uint32_t:36, uint64_t:36, char8_t:36, char16_t:36, char32_t:36, char64_t:36, const:70, volatile:72, restrict:74, _Atomic:76, mutable:78, constexpr:80, constinit:82, consteval:84, struct:88, __declspec:92, final:148, override:148, public:152, private:152, protected:152, virtual:154, extern:160, static:162, register:164, inline:166, thread_local:168, __attribute__:172, __based:178, __restrict:180, __uptr:180, __sptr:180, _unaligned:180, __unaligned:180, noexcept:194, requires:198, TRUE:786, true:786, FALSE:788, false:788, typename:218, class:220, template:234, throw:248, __cdecl:256, __clrcall:256, __stdcall:256, __fastcall:256, __thiscall:256, __vectorcall:256, try:260, catch:264, export:282, import:286, case:296, default:298, if:308, else:314, switch:318, do:322, while:324, for:330, return:334, break:338, continue:342, goto:346, co_return:350, co_yield:354, using:362, typedef:366, namespace:380, new:398, delete:400, co_await:402, concept:406, enum:410, static_assert:414, friend:422, union:424, explicit:430, operator:444, module:456, signed:518, unsigned:518, long:518, short:518, decltype:528, auto:530, sizeof:566, NULL:572, nullptr:586, this:588};\nconst spec_ = {__proto__:null,\"<\":755};\nconst spec_templateArgsEnd = {__proto__:null,\">\":135};\nconst spec_scopedIdentifier = {__proto__:null,operator:388, new:576, delete:582};\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"$;SQ!QQVOOP'gOUOOO(XOWO'#CdO,RQUO'#CgO,]QUO'#FjO-sQbO'#CxO.UQUO'#CxO0TQUO'#KZO0[QUO'#CwO0gOpO'#DvO0oQ!dO'#D]OOQR'#JO'#JOO5XQVO'#GUO5fQUO'#JVOOQQ'#JV'#JVO8zQUO'#KnO<eQUO'#KnO>{QVO'#E^O?]QUO'#E^OOQQ'#Ed'#EdOOQQ'#Ee'#EeO?bQVO'#EfO@XQVO'#EiOBUQUO'#FPOBvQUO'#FhOOQR'#Fj'#FjOB{QUO'#FjOOQR'#LR'#LROOQR'#LQ'#LQOETQVO'#KQOFxQUO'#LWOGVQUO'#KrOGkQUO'#LWOH]QUO'#LYOOQR'#HU'#HUOOQR'#HV'#HVOOQR'#HW'#HWOOQR'#K}'#K}OOQR'#J_'#J_Q!QQVOOOHkQVO'#FOOIWQUO'#EhOI_QUOOOKZQVO'#HgOKkQUO'#HgONVQUO'#KrONaQUO'#KrOOQQ'#Kr'#KrO!!_QUO'#KrOOQQ'#Jq'#JqO!!lQUO'#HxOOQQ'#KZ'#KZO!&^QUO'#KZO!&zQUO'#KQO!(zQVO'#I]O!(zQVO'#I`OCQQUO'#KQOOQQ'#Ip'#IpOOQQ'#KQ'#KQO!,}QUO'#KZOOQR'#KY'#KYO!-UQUO'#DZO!/mQUO'#KoOOQQ'#Ko'#KoO!/tQUO'#KoO!/{QUO'#ETO!0QQUO'#EWO!0VQUO'#FRO8zQUO'#FPO!QQVO'#F^O!0[Q#vO'#F`O!0gQUO'#FkO!0oQUO'#FpO!0tQVO'#FrO!0oQUO'#FuO!3sQUO'#FvO!3xQVO'#FxO!4SQUO'#FzO!4XQUO'#F|O!4^QUO'#GOO!4cQVO'#GQO!(zQVO'#GSO!4jQUO'#GpO!4xQUO'#GYO!(zQVO'#FeO!6VQUO'#FeO!6[QVO'#G`O!6cQUO'#GaO!6nQUO'#GnO!6sQUO'#GrO!6xQUO'#GzO!7jQ&lO'#HiO!:mQUO'#GuO!:}QUO'#HXO!;YQUO'#HZO!;bQUO'#DXO!;bQUO'#HuO!;bQUO'#HvO!;yQUO'#HwO!<[QUO'#H|O!=PQUO'#H}O!>uQVO'#IbO!(zQVO'#IdO!?PQUO'#IgO!?WQVO'#IjP!@}{,UO'#CbP!6n{,UO'#CbP!AY{7[O'#CbP!6n{,UO'#CbP!A_{,UO'#CbP!AjOSO'#IzPOOO)CEn)CEnOOOO'#I|'#I|O!AtOWO,59OOOQR,59O,59OO!(zQVO,59VOOQQ,59X,59XOOQR'#Do'#DoO!(zQVO,5;ROOQR,5<U,5<UO!BPQUO,59ZO!(zQVO,5>qOOQR'#IX'#IXOOQR'#IY'#IYOOQR'#IZ'#IZOOQR'#I['#I[O!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!DOQVO,5>zOOQQ,5?W,5?WO!EqQVO'#CjO!IjQUO'#CzOOQQ,59d,59dOOQQ,59c,59cOOQQ,5<},5<}O!IwQ&lO,5=mO!?PQUO,5?RO!LkQVO,5?UO!LrQbO,59dO!L}QVO'#FYOOQQ,5?P,5?PO!M_QVO,59WO!MfO`O,5:bO!MkQbO'#D^O!M|QbO'#K_O!N[QbO,59wO!NdQbO'#CxO!NuQUO'#CxO!NzQUO'#KZO# UQUO'#CwOOQR-E<|-E<|O# aQUO,5ApO# hQVO'#EfO@XQVO'#EiOBUQUO,5;kOOQR,5<p,5<pO#$aQUO'#KQO#$hQUO'#KQO!(zQVO'#IUO8zQUO,5;kO#${Q&lO'#HiO#(SQUO'#CtO#*wQbO'#CxO#*|QUO'#CwO#.jQUO'#KZOOQQ-E=T-E=TO#0}QUO,5AYO#1XQUO'#KZO#1cQUO,5AYOOQR,5Ap,5ApOOQQ,5>l,5>lO#3gQUO'#CgO#4]QUO,5>pO#6OQUO'#IeOOQR'#I}'#I}O#6WQUO,5:xO#6tQUO,5:xO#7eQUO,5:xO#8YQUO'#CuO!0QQUO'#CmOOQQ'#JW'#JWO#6tQUO,5:xO#8bQUO,5;QO!4xQUO'#DOO#9kQUO,5;QO#9pQUO,5>QO#:|QUO'#DOO#;dQUO,5>{O#;iQUO'#KxO#<rQUO,5;TO#<zQVO,5;TO#=UQUO,5;TOOQQ,5;T,5;TO#>}QUO'#L]O#?UQUO,5>UO#?ZQbO'#CxO#?fQUO'#GcO#?kQUO'#E^O#@[QUO,5;kO#@sQUO'#LOO#@{QUO,5;rOKkQUO'#HfOBUQUO'#HgO#AQQUO'#KrO!6nQUO'#HjO#AxQUO'#CuO!0tQVO,5<SOOQQ'#Cg'#CgOOQR'#Jh'#JhO#A}QVO,5=`OOQQ,5?Z,5?ZO#DWQbO'#CxO#DcQUO'#GcOOQQ'#Ji'#JiOOQQ-E=g-E=gOGVQUO,5ArOGkQUO,5ArO#DhQUO,5AtO#DsQUO'#G|OOQR,5Ar,5ArO#DhQUO,5ArO#EOQUO'#HOO#EWQUO,5AtOOQR,5At,5AtOOQR,5Au,5AuO#EfQVO,5AuOOQR-E=]-E=]O#G`QVO,5;jOOQR,5;j,5;jO#IaQUO'#EjO#JfQUO'#EwO#K]QVO'#ExO#MoQUO'#EvO#MwQUO'#EyO#NvQUO'#EzOOQQ'#K{'#K{O$ mQUO,5;SO$!sQUO'#EvOOQQ,5;S,5;SO$#pQUO,5;SO$%cQUO,5:yO$'|QVO,5>PO$(WQUO'#E[O$(eQUO,5>ROOQQ,5>S,5>SO$,RQVO'#C|OOQQ-E=o-E=oOOQQ,5>d,5>dOOQQ,59a,59aO$,]QUO,5>wO$.]QUO,5>zO!6nQUO,59uO$.pQUO,5;qO$.}QUO,5<{O!0QQUO,5:oOOQQ,5:r,5:rO$/YQUO,5;mO$/_QUO'#KnOBUQUO,5;kOOQR,5;x,5;xO$0OQUO'#FbO$0^QUO'#FbO$0cQUO,5;zO$3|QVO'#FmO!0tQVO,5<VO!0oQUO,5<VO!0VQUO,5<[O$4TQVO'#GUO$7PQUO,5<^O!0tQVO,5<aO$:gQVO,5<bO$:tQUO,5<dOOQR,5<d,5<dO$;}QUO,5<dOOQR,5<f,5<fOOQR,5<h,5<hOOQQ'#Fi'#FiO$<SQUO,5<jO$<XQUO,5<lOOQR,5<l,5<lO$=_QUO,5<nO$>eQUO,5<rO$>pQUO,5=[O$>uQUO,5=[O!4xQUO,5<tO$>}QUO,5<tO$?cQUO,5<PO$@iQVO,5<PO$BzQUO,5<zOOQR,5<z,5<zOOQR,5<{,5<{O$>uQUO,5<{O$DQQUO,5<{O$D]QUO,5=YO!(zQVO,5=^O!(zQVO,5=fO#NeQUO,5=mOOQQ,5>T,5>TO$FbQUO,5>TO$FlQUO,5>TO$FqQUO,5>TO$FvQUO,5>TO!6nQUO,5>TO$HtQUO'#KZO$H{QUO,5=oO$IWQUO,5=aOKkQUO,5=oO$JQQUO,5=sOOQR,5=s,5=sO$JYQUO,5=sO$LeQVO'#H[OOQQ,5=u,5=uO!;]QUO,5=uO%#`QUO'#KkO%#gQUO'#K[O%#{QUO'#KkO%$VQUO'#DyO%$hQUO'#D|O%'eQUO'#K[OOQQ'#K['#K[O%)WQUO'#K[O%#gQUO'#K[O%)]QUO'#K[OOQQ,59s,59sOOQQ,5>a,5>aOOQQ,5>b,5>bO%)eQUO'#HzO%)mQUO,5>cOOQQ,5>c,5>cO%-XQUO,5>cO%-dQUO,5>hO%1OQVO,5>iO%1VQUO,5>|O# hQVO'#EfO%4]QUO,5>|OOQQ,5>|,5>|O%4|QUO,5?OO%7QQUO,5?RO!<[QUO,5?RO%8|QUO,5?UO%<iQVO,5?UP!A_{,UO,58|P%<p{,UO,58|P%=O{7[O,58|P%=U{,UO,58|PO{O'#Ju'#JuP%=Z{,UO'#LdPOOO'#Ld'#LdP%=a{,UO'#LdPOOO,58|,58|POOO,5?f,5?fP%=fOSO,5?fOOOO-E<z-E<zOOQR1G.j1G.jO%=mQUO1G.qO%>sQUO1G0mOOQQ1G0m1G0mO%@PQUO'#CpO%B`QbO'#CxO%BkQUO'#CsO%BpQUO'#CsO%BuQUO1G.uO#AxQUO'#CrOOQQ1G.u1G.uO%DxQUO1G4]O%FOQUO1G4^O%GqQUO1G4^O%IdQUO1G4^O%KVQUO1G4^O%LxQUO1G4^O%NkQUO1G4^O&!^QUO1G4^O&$PQUO1G4^O&%rQUO1G4^O&'eQUO1G4^O&)WQUO1G4^O&*yQUO'#KPO&,SQUO'#KPO&,[QUO,59UOOQQ,5=P,5=PO&.dQUO,5=PO&.nQUO,5=PO&.sQUO,5=PO&.xQUO,5=PO!6nQUO,5=PO#NeQUO1G3XO&/SQUO1G4mO!<[QUO1G4mO&1OQUO1G4pO&2qQVO1G4pOOQQ1G/O1G/OOOQQ1G.}1G.}OOQQ1G2i1G2iO!IwQ&lO1G3XO&2xQUO'#LPO@XQVO'#EiO&4RQUO'#F]OOQQ'#Ja'#JaO&4WQUO'#FZO&4cQUO'#LPO&4kQUO,5;tO&4pQUO1G.rOOQQ1G.r1G.rOOQR1G/|1G/|O&6cQ!dO'#JPO&6hQbO,59xO&8yQ!eO'#D`O&9QQ!dO'#JRO&9VQbO,5@yO&9VQbO,5@yOOQR1G/c1G/cO&9bQbO1G/cO&9gQ&lO'#GeO&:eQbO,59dOOQR1G7[1G7[O#@[QUO1G1VO&:pQUO1G1^OBUQUO1G1VO&=RQUO'#CzO#*wQbO,59dO&@tQUO1G6tOOQR-E<{-E<{O&BWQUO1G0dO#6WQUO1G0dOOQQ-E=U-E=UO#6tQUO1G0dOOQQ1G0l1G0lO&B{QUO,59jOOQQ1G3l1G3lO&CcQUO,59jO&CyQUO,59jO!M_QVO1G4gO!(zQVO'#JYO&DeQUO,5AdOOQQ1G0o1G0oO!(zQVO1G0oO!6nQUO'#JnO&DmQUO,5AwOOQQ1G3p1G3pOOQR1G1V1G1VO&HjQVO'#FOO!M_QVO,5;sOOQQ,5;s,5;sOBUQUO'#JcO&JfQUO,5AjO&JnQVO'#E[OOQR1G1^1G1^O&M]QUO'#L]OOQR1G1n1G1nOOQR-E=f-E=fOOQR1G7^1G7^O#DhQUO1G7^OGVQUO1G7^O#DhQUO1G7`OOQR1G7`1G7`O&MeQUO'#G}O&MmQUO'#LXOOQQ,5=h,5=hO&M{QUO,5=jO&NQQUO,5=kOOQR1G7a1G7aO#EfQVO1G7aO&NVQUO1G7aO' ]QVO,5=kOOQR1G1U1G1UO$.vQUO'#E]O'!RQUO'#E]OOQQ'#Kz'#KzO'!lQUO'#KyO'!wQUO,5;UO'#PQUO'#ElO'#dQUO'#ElO'#wQUO'#EtOOQQ'#J['#J[O'#|QUO,5;cO'$sQUO,5;cO'%nQUO,5;dO'&tQVO,5;dOOQQ,5;d,5;dO''OQVO,5;dO'&tQVO,5;dO''VQUO,5;bO'(SQUO,5;eO'(_QUO'#KqO'(gQUO,5:vO'(lQUO,5;fOOQQ1G0n1G0nOOQQ'#J]'#J]O''VQUO,5;bO!4xQUO'#E}OOQQ,5;b,5;bO')gQUO'#E`O'+aQUO'#E{OHrQUO1G0nO'+fQUO'#EbOOQQ'#JX'#JXO'-OQUO'#KsOOQQ'#Ks'#KsO'-xQUO1G0eO'.pQUO1G3kO'/vQVO1G3kOOQQ1G3k1G3kO'0QQVO1G3kO'0XQUO'#L`O'1eQUO'#KXO'1sQUO'#KWO'2OQUO,59hO'2WQUO1G/aO'2]QUO'#FPOOQR1G1]1G1]OOQR1G2g1G2gO$>uQUO1G2gO'2gQUO1G2gO'2rQUO1G0ZOOQR'#J`'#J`O'2wQVO1G1XO'8pQUO'#FTO'8uQUO1G1VO!6nQUO'#JdO'9TQUO,5;|O$0^QUO,5;|OOQQ'#Fc'#FcOOQQ,5;|,5;|O'9cQUO1G1fOOQR1G1f1G1fO'9kQUO,5<XO$.vQUO'#FWOBUQUO'#FWO'9rQUO,5<XO!(zQVO,5<XO'9zQUO,5<XO':PQVO1G1qO!0tQVO1G1qOOQR1G1v1G1vO'?oQUO1G1xOOQR1G1{1G1{O'?tQUO1G1|OBUQUO1G2]O'@}QVO1G1|O'CcQUO1G1|O'ChQUO'#GWO8zQUO1G2]OOQR1G2O1G2OOOQR1G2U1G2UOOQR1G2W1G2WOOQR1G2Y1G2YO'CmQUO1G2^O!4xQUO1G2^OOQR1G2v1G2vO'CuQUO1G2vO$>}QUO1G2`OOQQ'#Cv'#CvO'CzQUO'#G[O'DuQUO'#G[O'DzQUO'#LSO'EYQUO'#G_OOQQ'#LT'#LTO'EhQUO1G2`O'EmQVO1G1kO'HOQVO'#GUOBUQUO'#FWOOQR'#Je'#JeO'EmQVO1G1kO'HYQUO'#FvOOQR1G2f1G2fO'H_QUO1G2gO'HdQUO'#JgO'2gQUO1G2gO!(zQVO1G2tO'HlQUO1G2xO'IuQUO1G3QO'J{QUO1G3XOOQQ1G3o1G3oO'KaQUO1G3oOOQR1G3Z1G3ZO'KfQUO'#KZO'2]QUO'#LUOGkQUO'#LWOOQR'#Gy'#GyO#DhQUO'#LYOOQR'#HQ'#HQO'KpQUO'#GvO'#wQUO'#GuOOQR1G2{1G2{O'LmQUO1G2{O'MdQUO1G3ZO'MoQUO1G3_O'MtQUO1G3_OOQR1G3_1G3_O'M|QUO'#H]OOQR'#H]'#H]O( VQUO'#H]O!(zQVO'#H`O!(zQVO'#H_OOQR'#L['#L[O( [QUO'#L[OOQR'#Jk'#JkO( aQVO,5=vOOQQ,5=v,5=vO( hQUO'#H^O( pQUO'#HZOOQQ1G3a1G3aO( zQUO,5@vOOQQ,5@v,5@vO%)WQUO,5@vO%)]QUO,5@vO%$VQUO,5:eO(%iQUO'#KlO(%wQUO'#KlOOQQ,5:e,5:eOOQQ'#JS'#JSO(&SQUO'#D}O(&^QUO'#KrOGkQUO'#LWO('YQUO'#D}OOQQ'#Hp'#HpOOQQ'#Hr'#HrOOQQ'#Hs'#HsOOQQ'#Km'#KmOOQQ'#JU'#JUO('dQUO,5:hOOQQ,5:h,5:hO((aQUO'#LWO((nQUO'#HtO()UQUO,5@vO()]QUO'#H{O()hQUO'#L_O()pQUO,5>fO()uQUO'#L^OOQQ1G3}1G3}O(-lQUO1G3}O(-sQUO1G3}O(-zQUO1G4TO(/QQUO1G4TO(/VQUO,5A}O!6nQUO1G4hO!(zQVO'#IiOOQQ1G4m1G4mO(/[QUO1G4mO(1_QVO1G4pPOOO1G.h1G.hP!A_{,UO1G.hP(3_QUO'#LfP(3j{,UO1G.hP(3o{7[O1G.hPO{O-E=s-E=sPOOO,5BO,5BOP(3w{,UO,5BOPOOO1G5Q1G5QO!(zQVO7+$]O(3|QUO'#CzOOQQ,59_,59_O(4XQbO,59dO(4dQbO,59_OOQQ,59^,59^OOQQ7+)w7+)wO!M_QVO'#JtO(4oQUO,5@kOOQQ1G.p1G.pOOQQ1G2k1G2kO(4wQUO1G2kO(4|QUO7+(sOOQQ7+*X7+*XO(7bQUO7+*XO(7iQUO7+*XO(1_QVO7+*[O#NeQUO7+(sO(7vQVO'#JbO(8ZQUO,5AkO(8cQUO,5;vOOQQ'#Cp'#CpOOQQ,5;w,5;wO!(zQVO'#F[OOQQ-E=_-E=_O!M_QVO,5;uOOQQ1G1`1G1`OOQQ,5?k,5?kOOQQ-E<}-E<}OOQR'#Dg'#DgOOQR'#Di'#DiOOQR'#Dl'#DlO(9lQ!eO'#K`O(9sQMkO'#K`O(9zQ!eO'#K`OOQR'#K`'#K`OOQR'#JQ'#JQO(:RQ!eO,59zOOQQ,59z,59zO(:YQbO,5?mOOQQ-E=P-E=PO(:hQbO1G6eOOQR7+$}7+$}OOQR7+&q7+&qOOQR7+&x7+&xO'8uQUO7+&qO(:sQUO7+&OO#6WQUO7+&OO(;hQUO1G/UO(<OQUO1G/UO(<jQUO7+*ROOQQ7+*V7+*VO(>]QUO,5?tOOQQ-E=W-E=WO(?fQUO7+&ZOOQQ,5@Y,5@YOOQQ-E=l-E=lO(?kQUO'#LPO@XQVO'#EiO(@wQUO1G1_OOQQ1G1_1G1_O(BQQUO,5?}OOQQ,5?},5?}OOQQ-E=a-E=aO(BfQUO'#KqOOQR7+,x7+,xO#DhQUO7+,xOOQR7+,z7+,zO(BsQUO,5=iO#DsQUO'#JjO(CUQUO,5AsOOQR1G3U1G3UOOQR1G3V1G3VO(CdQUO7+,{OOQR7+,{7+,{O(E[QUO,5:wO(FyQUO'#EwO!(zQVO,5;VO(GlQUO,5:wO(GvQUO'#EpO(HXQUO'#EzOOQQ,5;Z,5;ZO#K]QVO'#ExO(HoQUO,5:wO(HvQUO'#EyO#GgQUO'#JZO(J`QUO,5AeOOQQ1G0p1G0pO(JkQUO,5;WO!<[QUO,5;^O(KUQUO,5;_O(KdQUO,5;WO(MvQUO,5;`OOQQ-E=Y-E=YO(NOQUO1G0}OOQQ1G1O1G1OO(NyQUO1G1OO)!PQVO1G1OO)!WQVO1G1OO)!bQUO1G0|OOQQ1G0|1G0|OOQQ1G1P1G1PO)#_QUO'#JoO)#iQUO,5A]OOQQ1G0b1G0bOOQQ-E=Z-E=ZO)#qQUO,5;iO!<[QUO,5;iO)$nQVO,5:zO)$uQUO,5;gO$ mQUO7+&YOOQQ7+&Y7+&YO!(zQVO'#EfO)$|QUO,5:|OOQQ'#Kt'#KtOOQQ-E=V-E=VOOQQ,5A_,5A_OOQQ'#Jl'#JlO)(qQUO7+&PPOQQ7+&P7+&POOQQ7+)V7+)VO))iQUO7+)VO)*oQVO7+)VOOQQ,5>m,5>mO$)YQVO'#JsO)*vQUO,5@rOOQQ1G/S1G/SOOQQ7+${7+${O)+RQUO7+(RO)+WQUO7+(ROOQR7+(R7+(RO$>uQUO7+(ROOQQ7+%u7+%uOOQR-E=^-E=^O!0VQUO,5;oOOQQ,5@O,5@OOOQQ-E=b-E=bO$0^QUO1G1hOOQQ1G1h1G1hOOQR7+'Q7+'QOOQR1G1s1G1sOBUQUO,5;rO)+tQUO,5<YO)+{QUO1G1sO)-UQUO1G1sO!0tQVO7+']O)-ZQVO7+']O)2yQUO7+'dO)3OQVO7+'hO)5dQUO7+'wO)5nQUO7+'hO)6tQVO7+'hOKkQUO7+'wO$>hQUO,5<rO!4xQUO7+'xO)6{QUO7+'xOOQR7+(b7+(bO)7QQUO7+'zO)7VQUO,5<vO'CzQUO,5<vO)7}QUO,5<vO'CzQUO,5<vOOQQ,5<w,5<wO)8`QVO,5<xO'EYQUO'#JfO)8jQUO,5AnO)8rQUO,5<yOOQR7+'z7+'zO)8}QVO7+'VO)5gQUO'#LOOOQR-E=c-E=cO);`QVO,5<bOOQQ,5@R,5@RO!6nQUO,5@ROOQQ-E=e-E=eO)=wQUO7+(`O)>}QUO7+(dO)?SQVO7+(dOOQQ7+(l7+(lOOQQ7+)Z7+)ZO)?[QUO'#KkO)?fQUO'#KkOOQR,5=b,5=bO)?sQUO,5=bO!;bQUO,5=bO!;bQUO,5=bO!;bQUO,5=bOOQR7+(g7+(gOOQR7+(u7+(uOOQR7+(y7+(yOOQR,5=w,5=wO)?xQUO,5=zO)AOQUO,5=yOOQR,5Av,5AvOOQR-E=i-E=iOOQQ1G3b1G3bO)BUQUO,5=xO)BZQVO'#EfOOQQ1G6b1G6bO%)WQUO1G6bO%)]QUO1G6bOOQQ1G0P1G0POOQQ-E=Q-E=QO)DrQUO,5AWO(%iQUO'#JTO)D}QUO,5AWO)D}QUO,5AWO)EVQUO,5:iO8zQUO,5:iOOQQ,5>],5>]O)EaQUO,5ArO)EhQUO'#EVO)FrQUO'#EVO)G]QUO,5:iO)GgQUO'#HlO)GgQUO'#HmOOQQ'#Kp'#KpO)HUQUO'#KpO!(zQVO'#HnOOQQ,5:i,5:iO)HvQUO,5:iO!M_QVO,5:iOOQQ-E=S-E=SOOQQ1G0S1G0SOOQQ,5>`,5>`O)H{QUO1G6bO!(zQVO,5>gO)LjQUO'#JrO)LuQUO,5AyOOQQ1G4Q1G4QO)L}QUO,5AxOOQQ,5Ax,5AxOOQQ7+)i7+)iO*!lQUO7+)iOOQQ7+)o7+)oO*'kQVO1G7iO*)mQUO7+*SO*)rQUO,5?TO**xQUO7+*[POOO7+$S7+$SP*,kQUO'#LgP*,sQUO,5BQP*,x{,UO7+$SPOOO1G7j1G7jO*,}QUO<<GwOOQQ1G.y1G.yOOQQ'#IT'#ITO*.pQUO,5@`OOQQ,5@`,5@`OOQQ-E=r-E=rOOQQ7+(V7+(VOOQQ<<Ms<<MsO*/yQUO<<MsO*1|QUO<<MvO*3oQUO<<L_O*4TQUO,5?|OOQQ,5?|,5?|OOQQ-E=`-E=`OOQQ1G1b1G1bO*5^QUO,5;vO*6dQUO1G1aOOQQ1G1a1G1aOOQR,5@z,5@zO*7mQ!eO,5@zO*7tQMkO,5@zO*7{Q!eO,5@zOOQR-E=O-E=OOOQQ1G/f1G/fO*8SQ!eO'#DwOOQQ1G5X1G5XOOQR<<J]<<J]O*8ZQUO<<IjO*9OQUO7+$pOOQQ<<Iu<<IuO(7vQVO,5;ROOQR<=!d<=!dOOQQ1G3T1G3TOOQQ,5@U,5@UOOQQ-E=h-E=hOOQR<=!g<=!gO*9{QUO1G0cO*:SQUO'#EzO*:dQUO1G0cO*:kQUO'#I}O*<RQUO1G0qO!(zQVO1G0qOOQQ,5;[,5;[OOQQ,5;],5;]OOQQ,5?u,5?uOOQQ-E=X-E=XO!<[QUO1G0xO*=bQUO1G0xOOQQ1G0y1G0yO*=sQUO'#ElOOQQ1G0z1G0zOOQQ7+&j7+&jO*>XQUO7+&jO*?_QVO7+&jOOQQ7+&h7+&hOOQQ,5@Z,5@ZOOQQ-E=m-E=mO*@ZQUO1G1TO*@eQUO1G1TO*AOQUO1G0fOOQQ1G0f1G0fO*BUQUO'#K|O*B^QUO1G1ROOQQ<<It<<ItOOQQ'#Hb'#HbO'+fQUO,5={OOQQ'#Hd'#HdO'+fQUO,5=}OOQQ-E=j-E=jPOQQ<<Ik<<IkPOQQ-E=k-E=kOOQQ<<Lq<<LqO*BcQUO'#LbO*CoQUO'#LaOOQQ,5@_,5@_OOQQ-E=q-E=qOOQR<<Km<<KmO$>uQUO<<KmO*C}QUO<<KmOOQR1G1Z1G1ZOOQQ7+'S7+'SO!M_QVO1G1tO*DSQUO1G1tOOQR7+'_7+'_OOQR<<Jw<<JwO!0tQVO<<JwOOQR<<KO<<KOO*D_QUO<<KSO*EeQVO<<KSOKkQUO<<KcO!M_QVO<<KcO*ElQUO<<KSO!0tQVO<<KSO*FuQUO<<KSO*FzQUO<<KcO*GVQUO<<KdOOQR<<Kd<<KdOOQR<<Kf<<KfO*G[QUO1G2bO)7VQUO1G2bO'CzQUO1G2bO*GmQUO1G2dO*HsQVO1G2dOOQQ1G2d1G2dO*H}QVO1G2dO*IUQUO,5@QOOQQ-E=d-E=dOOQQ1G2e1G2eO*IdQUO1G1|O*JmQVO1G1|O*JtQUO1G1|OOQQ1G5m1G5mOOQR<<Kz<<KzOOQR<<LO<<LOO*JyQVO<<LOO*KUQUO<<LOOOQR1G2|1G2|O*KZQUO1G2|O*KbQUO1G3eOOQR1G3d1G3dOOQQ7++|7++|O%)WQUO7++|O*KmQUO1G6rO*KmQUO1G6rO(%iQUO,5?oO*KuQUO,5?oOOQQ-E=R-E=RO*LQQUO1G0TOOQQ1G0T1G0TO*L[QUO1G0TO!M_QVO1G0TO*LaQUO1G0TOOQQ1G3w1G3wO*LkQUO,5:qO)EhQUO,5:qO*MXQUO,5:qO)EhQUO,5:qO$#uQUO,5:uO*MvQVO,5>VO)GgQUO'#JpO*NQQUO1G0TO*NcQVO1G0TOOQQ1G3u1G3uO*NjQUO,5>WO*NuQUO,5>XO+ dQUO,5>YO+!jQUO1G0TO%)]QUO7++|O+#pQUO1G4ROOQQ,5@^,5@^OOQQ-E=p-E=pOOQQ<<MT<<MTOOQQ<<Mn<<MnO+$yQUO1G4oP+&|QUO'#JvP+'UQUO,5BRPO{O1G7l1G7lPOOO<<Gn<<GnOOQQANC_ANC_OOQR1G6f1G6fO+'^Q!eO,5:cOOQQ,5:c,5:cO+'eQUO1G0mO+(qQUO7+&]O+*QQUO7+&dO+*cQUO,5;WOOQQ<<JU<<JUO+*qQUO7+&oOOQQ7+&Q7+&QO!4xQUO'#J^O++lQUO,5AhOOQQ7+&m7+&mOOQQ1G3g1G3gO++tQUO1G3iOOQQ,5>n,5>nO+/iQUOANAXOOQRANAXANAXO+/nQUO7+'`OOQRAN@cAN@cO+0zQVOAN@nO+1RQUOAN@nO!0tQVOAN@nO+2[QUOAN@nO+2aQUOAN@}O+2lQUOAN@}O+3rQUOAN@}OOQRAN@nAN@nO!M_QVOAN@}OOQRANAOANAOO+3wQUO7+'|O)7VQUO7+'|OOQQ7+(O7+(OO+4YQUO7+(OO+5`QVO7+(OO+5gQVO7+'hO+5nQUOANAjOOQR7+(h7+(hOOQR7+)P7+)PO+5sQUO7+)PO+5xQUO7+)POOQQ<= h<= hO+6QQUO7+,^O+6YQUO1G5ZOOQQ1G5Z1G5ZO+6eQUO7+%oOOQQ7+%o7+%oO+6vQUO7+%oO*NcQVO7+%oOOQQ7+)a7+)aO+6{QUO7+%oO+8RQUO7+%oO!M_QVO7+%oO+8]QUO1G0]O*LkQUO1G0]O)EhQUO1G0]OOQQ1G0a1G0aO+8zQUO1G3qO+:QQVO1G3qOOQQ1G3q1G3qO+:[QVO1G3qO+:cQUO,5@[OOQQ-E=n-E=nOOQQ1G3r1G3rO%)WQUO<= hOOQQ7+*Z7+*ZPOQQ,5@b,5@bPOQQ-E=t-E=tOOQQ1G/}1G/}OOQQ,5?x,5?xOOQQ-E=[-E=[OOQRG26sG26sO+:zQUOG26YO!0tQVOG26YO+<TQUOG26YOOQRG26YG26YO!M_QVOG26iO!0tQVOG26iO+<YQUOG26iO+=`QUOG26iO+=eQUO<<KhOOQQ<<Kj<<KjOOQRG27UG27UOOQR<<Lk<<LkO+=vQUO<<LkOOQQ7+*u7+*uOOQQ<<IZ<<IZO+={QUO<<IZO!M_QVO<<IZO+>QQUO<<IZO+?WQUO<<IZO*NcQVO<<IZOOQQ<<L{<<L{O+?iQUO7+%wO*LkQUO7+%wOOQQ7+)]7+)]O+@WQUO7+)]O+A^QVO7+)]OOQQANESANESO!0tQVOLD+tOOQRLD+tLD+tO+AeQUOLD,TO+BkQUOLD,TOOQRLD,TLD,TO!0tQVOLD,TOOQRANBVANBVOOQQAN>uAN>uO+BpQUOAN>uO+CvQUOAN>uO!M_QVOAN>uO+C{QUO<<IcOOQQ<<Lw<<LwOOQR!$( `!$( `O!0tQVO!$( oOOQR!$( o!$( oOOQQG24aG24aO+DjQUOG24aO+EpQUOG24aOOQR!)9EZ!)9EZOOQQLD){LD){O+EuQUO'#CgO(dQUO'#CgO+IrQUO'#CzO+LcQUO'#CzO!E{QUO'#CzO+M[QUO'#CzO+MoQUO'#CzO,#bQUO'#CzO,#rQUO'#CzO,$PQUO'#CzO,$[QbO,59dO,$gQbO,59dO,$rQbO,59dO,$}QbO'#CxO,%`QbO'#CxO,%qQbO'#CxO,&SQUO'#CgO,(gQUO'#CgO,(tQUO'#CgO,+iQUO'#CgO,.lQUO'#CgO,.|QUO'#CgO,2uQUO'#CgO,2|QUO'#CgO,3|QUO'#CgO,6VQUO,5:xO#?kQUO,5:xO#?kQUO,5:xO#=ZQUO'#L]O,6sQbO'#CxO,7OQbO'#CxO,7ZQbO'#CxO,7fQbO'#CxO#6tQUO'#E^O,7qQUO'#E^O,9OQUO'#HgO,9pQbO'#CxO,9{QbO'#CxO,:WQUO'#CwO,:]QUO'#CwO,:bQUO'#CpO,:pQbO,59dO,:{QbO,59dO,;WQbO,59dO,;cQbO,59dO,;nQbO,59dO,;yQbO,59dO,<UQbO,59dO,6VQUO1G0dO,<aQUO1G0dO#?kQUO1G0dO,7qQUO1G0dO,>nQUO'#KZO,?OQUO'#CzO,?^QbO,59dO,6VQUO7+&OO,<aQUO7+&OO,?iQUO'#EwO,@[QUO'#EzO,@{QUO'#E^O,AQQUO'#GcO,AVQUO'#CwO,A[QUO'#CxO,AaQUO'#CxO,AfQUO'#CwO,AkQUO'#GcO,ApQUO'#KZO,B^QUO'#KZO,BhQUO'#CwO,BsQUO'#CwO,COQUO'#CwO,<aQUO,5:xO,7qQUO,5:xO,7qQUO,5:xO,CZQUO'#KZO,CnQbO'#CxO,CyQUO'#CsO,DOQUO'#E^\",\n  stateData: \",Dt~O(nOSSOSTOSRPQVPQ'ePQ'gPQ'hPQ'iPQ'jPQ'kPQ'lPQ'mPQ~O*[OS~OPmO]eOb!]Oe!POmTOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!TxO!VfO!X!XO!Y!WO!i!YO!opO!r!`O!s!aO!t!aO!u!bO!v!aO!x!cO!{!dO#V#QO#a#VO#b#TO#i#OO#p!xO#t!fO#v!eO$R!gO$T!hO$Y!vO$Z!wO$`!iO$e!jO$g!kO$h!lO$k!mO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO${!tO$}!uO%U!yO%_#ZO%`#[O%a#YO%c!zO%e#UO%g!{O%l#SO%o!|O%v!}O%|#PO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(rRO)QYO)TaO)V|O)W{O)YiO)Z!ZO)]XO)icO)jdO~OR#bOV#]O'e#^O'g#_O'h#`O'i#`O'j#aO'k#aO'l#_O'm#_O~OX#dO(o#fO(q#dO~O]ZX]jXejXmhXqZXqjXsjXtjXujXvjXwjXxjXyjXzjX!OjX!TjX!VZX!VjX!XZX!YZX![ZX!^ZX!_ZX!aZX!bZX!eZX!fZX!gZX!hZX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX&rjX&sjX(rjX(uZX(v$]X(wZX(xZX)TZX)TjX)UZX)VZX)VjX)WZX)WjX)XZX)YZX)ZZX)kZX~O)YjX!UZX~P(dO]$OO!V#mO!X#|O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO(w#lO(x#lO)T#nO)U#pO)V#oO)W#qO)X#iO)Y#kO)Z#}O~Oe$SO%Y$TO'[$UO'_$VO(y$PO~Om$WO~O!T$XO](}Xe(}Xs(}Xt(}Xu(}Xv(}Xw(}Xx(}Xy(}Xz(}X!O(}X!V(}X!r(}X!s(}X!t(}X!u(}X!v(}X!x(}X!{(}X%v(}X&r(}X&s(}X(r(}X)T(}X)V(}X)W(}X)Y(}X~Om$WO~P.ZOm$WO!g$ZO)k$ZO~OX$[O)^$[O~O!R$]O)P)RP)Z)RP~OPmO]$fOb!]Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!TxO!V$gO!X!XO!Y!WO!i!YO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#V#QO#a#VO#b#TO#v!eO$Y!vO$Z!wO$`!iO$e!jO$g!kO$h!lO$k!mO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO)QYO)T$lO)W$lO)YiO)Z!ZO)]XO)icO)jdO~Om$`O#t$mO(rRO~P0zO](]Xb'yXe(]Xm'yXm(]Xs'yXs(]Xt'yXt(]Xu'yXu(]Xv'yXv(]Xw'yXw(]Xx'yXx(]Xy'yXy(]Xz'yXz(]X|'yX!O'yX!V(]X!o(]X!r'yX!r(]X!s'yX!s(]X!t'yX!t(]X!u'yX!u(]X!v'yX!v(]X!x'yX!x(]X!{(]X#a'yX#b'yX%e'yX%l'yX%o(]X%v(]X&m'yX&r'yX&s'yX(r'yX(r(]X)T(]X)V(]X)W(]X~Ob!TOm$pOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#a#VO#b#TO%e#UO%l#SO&m!RO&r#WO&s!TO(r$oO~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!O!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO&r#WO&s$xO])bXe)bXm)bX!V)bX!{)bX%v)bX(r)bX)T)bX)V)bX)W)bX~O)Y$wO~P:nOPmO]eOe!POs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!VfO!X!XO!Y!WO!i!YO!{!dO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO)TaO)V|O)W{O)Z!ZO)]XO)icO)jdO~Ob%ROm:{O!|%SO(r$yO~P<lO)T%TO~Ob!]Om$`O|#RO#a#VO#b#TO%e#UO%l#SO&m!RO&r#WO&s!TO(r;OO~P<lOPmO]$fOb%ROm:{O!V$gO!W%`O!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)T$lO)W%^O)Z!ZO)]XO)icO)jdO)k%]O~O]%iOe!POm%cO!V%lO!{!dO%v$nO(r;PO)T%eO)V%jO)W%jO~O(v%nO~O)Y#kO~O(r%oO](tX!V(tX!X(tX!Y(tX![(tX!^(tX!_(tX!a(tX!b(tX!e(tX!f(tX!h(tX(u(tX(w(tX(x(tX)T(tX)U(tX)V(tX)W(tX)X(tX)Y(tX)Z(tX!g(tX)k(tX[(tX!W(tX(v(tX!U(tXQ(tX!d(tX~OP%pO(pQO~PCQO]%iOe!POs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V%lO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO!{!dO%o!|O%v!}O)T;aO)V|O)W|O~Om%sO!o%xO(r$yO~PE_O!TxO#v!eO(v%zO)k%}O])fX!V)fX~O]%iOe!POm%sO!V%lO!{!dO%v!}O(r$yO)T;aO)V|O)W|O~O!TxO#v!eO)Y&QO)k&RO~O!U&UO~P!QO]&ZO!TxO!V&XO)T&WO)V&[O)W&[O~Oq&VO~PHrO]&dO!V&cO~OPmO]eOe!PO!VfO!X!XO!Y!WO!i!YO!{!dO#V#QO%_#ZO%`#[O%a#YO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO)TaO)V|O)W{O)Z!ZO)]XO)icO)jdO~Ob%ROm:{O%v$nO(r$yO~PIgO]%iOe!POm;]O!V%lO!{!dO%v$nO(r$yO)T;aO)V|O)W|O~Oq&gO](tX])fX!V(tX!V)fX!X(tX!Y(tX![(tX!^(tX!_(tX!a(tX!b(tX!e(tX!f(tX!h(tX(u(tX(w(tX(x(tX)T(tX)U(tX)V(tX)W(tX)X(tX)Y(tX)Z(tX[(tX[)fX!U(tX~O!g$ZO)k$ZO~PL]O!g(tX)k(tX~PL]O](tX!V(tX!X(tX!Y(tX![(tX!^(tX!_(tX!a(tX!b(tX!e(tX!f(tX!h(tX(u(tX(w(tX(x(tX)T(tX)U(tX)V(tX)W(tX)X(tX)Y(tX)Z(tX!g(tX)k(tX[(tX!U(tX~O])fX!V)fX[)fX~PNkOb&iO&m!RO]&lXe&lXm&lXs&lXt&lXu&lXv&lXw&lXx&lXy&lXz&lX!O&lX!V&lX!r&lX!s&lX!t&lX!u&lX!v&lX!x&lX!{&lX%v&lX&r&lX&s&lX(r&lX)T&lX)V&lX)W&lX)Y&lX[&lX!T&lX!X&lX!Y&lX![&lX!^&lX!_&lX!a&lX!b&lX!e&lX!f&lX!h&lX(u&lX(w&lX(x&lX)U&lX)X&lX)Z&lX!g&lX)k&lX!W&lXQ&lX!d&lX(v&lX!U&lX#v&lX~Oq&gOm(}X[(}XQ(}X!d(}X!h(}X)Z(}X)k(}X~P.ZO!g$ZO)k$ZO](tX!V(tX!X(tX!Y(tX![(tX!^(tX!_(tX!a(tX!b(tX!e(tX!f(tX!h(tX(u(tX(w(tX(x(tX)T(tX)U(tX)V(tX)W(tX)X(tX)Y(tX)Z(tX[(tX!W(tX(v(tX!U(tXQ(tX!d(tX~OPmO]$fOb%ROm:{O!V$gO!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)T$lO)W$lO)Z!ZO)]XO)icO)jdO~O](}Xe(}Xm(}Xs(}Xt(}Xu(}Xv(}Xw(}Xx(}Xy(}Xz(}X!O(}X!V(}X!r(}X!s(}X!t(}X!u(}X!v(}X!x(}X!{(}X%v(}X&r(}X&s(}X(r(}X)T(}X)V(}X)W(}X)Y(}X[(}XQ(}X!d(}X!h(}X)Z(}X)k(}X~O]$OO~P!*qO]&mO~O])cXb)cXe)cXm)cXs)cXt)cXu)cXv)cXw)cXx)cXy)cXz)cX|)cX!O)cX!V)cX!o)cX!r)cX!s)cX!t)cX!u)cX!v)cX!x)cX!{)cX#a)cX#b)cX%e)cX%l)cX%o)cX%v)cX&m)cX&r)cX&s)cX(r)cX)T)cX)V)cX)W)cX~O(pQO~P!-ZO%U&oO~P!-ZO]&pO~O]$OO~O!TxO~O$W&xO(r%oO(v&wO~O]&yOx&{O~O]&yO~OPmO]$fOb%ROm:{O!TxO!V$gO!X!XO!Y!WO!i!YO#V#QO#p!xO#v!eO$Y!vO$Z!wO$`!iO$e!jO$g!kO$h!lO$k!mO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r:nO)QYO)T$lO)W$lO)YiO)Z!ZO)]XO)icO)jdO~O]'QO~O!T$XO)Y'SO~P!(zO)Y'UO~O)Y'VO~O(r'WO~O)Y'ZO~P!(zOm;_O%U'_O%e'_O(r;QO~Ob!TOm$pOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO#a#VO#b#TO%e#UO%l#SO&m!RO&r#WO&s!TO(r$oO~O(v'cO~O)Y'eO~P!(zO!TxO(r%oO)k'gO~O(r%oO~O]'jO~O]'kOe%nXm%nX!V%nX!{%nX%v%nX(r%nX)T%nX)V%nX)W%nX~O]'oO!V'pO!X'mO!g'mO%Z'mO%['mO%]'mO%^'mO%_'qO%`'qO%a'mO(x'nO)k'mO)y'rO~P8zO]%iOb!TOe!POs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!V%lO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO!{!dO#a#VO#b#TO%e#UO%l#SO&m!RO&r#WO&s!TO)T;aO)V|O)W|O~Om;`Oq&VO%v$nO(r;RO~P!8jO(r%oO(v'wO)Y'xO~O]&dO!T'zO~Om$pO!O!_O!T(RO!l(WO(r$oO(v(QO)QYO~Om$pO|(_O!T([O#b(_O(r$oO~Ob!TOm$pO|#RO#a#VO#b#TO%e#UO%l#SO&m!RO&r#WO&s!TO(r$oO~O](aO~OPmOb%ROm:{O!V$gO!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)T$lO)W$lO)]XO)icO)jdO~O](cO)Z(dO~P!=UO]$OO~P!<[OPmO]$fOb%ROm:{O!V(jO!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)T$lO)W$lO)Z!ZO)]XO)icO)jdO~OY(kO(pQO(r%oO~O'f(nO~OS(rOT(oO*X(qO~O]$OO(n(uO~Q'nXX#dO(o(wO(q#dO~Oe)ROm(|O&r#WO(r({O~O!Y'Sa!['Sa!^'Sa!_'Sa!a'Sa!b'Sa!e'Sa!f'Sa!h'Sa(u'Sa)T'Sa)U'Sa)V'Sa)W'Sa)X'Sa)Y'Sa)Z'Sa!g'Sa)k'Sa['Sa!W'Sa(v'Sa!U'SaQ'Sa!d'Sa~OPmOb%ROm:{O!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)]XO)icO)jdO]'Sa!V'Sa!X'Sa(w'Sa(x'Sa~P!B_O!T$XO[(sP~P!(zO]oX]%WXeoXmnXqoXq%WXsoXtoXuoXvoXwoXxoXyoXzoX!OoX!ToX!VoX!V%WX!X%WX!Y%WX![%WX!^%WX!_%WX!a%WX!b%WX!e%WX!f%WX!gnX!h%WX!roX!soX!toX!uoX!voX!xoX!{oX%voX&roX&soX(roX(u%WX(w%WX(x%WX)ToX)T%WX)U%WX)VoX)V%WX)WoX)W%WX)X%WX)Y%WX)Z%WX)knX[%WX~O)YoX[oX!U%WX~P!E{O])eO!V)fO!X)cO!g)cO%Z)cO%[)cO%])cO%^)cO%_)gO%`)gO%a)cO(x)dO)k)cO)y)hO~P8zOPmO]$fOb%ROm:{O!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)T$lO)W$lO)Z!ZO)]XO)icO)jdO~O!V)mO~P!JwOe)pO%Y)qO(y$PO~O!T$XO!V)sO(w)tO!U)sP~P!JwO!T$XO~P!(zO)[){O~Om)|O]!QX!h!QX)P!QX)Z!QX~O]*OO!h*PO)P)RX)Z)RX~O)P*SO)Z*TO~Oe$SO%Y*UO'[$UO'_$VO(y$PO~Om*VO~Om*VO[(}X~P.ZOm*VO!g$ZO)k$ZO~O)Y*WO~P:nOPmO]$fOb!]Om$`Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!V$gO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r;OO)T$lO)W$lO)Z!ZO)]XO)icO)jdO~Oq&gO~P!&zOq&gO!W(tX(v(tXQ(tX!d(tX~PNkO]'oO!V'pO!X'mO!g'mO%Z'mO%['mO%]'mO%^'mO%_'qO%`'qO%a'mO(x'nO)k'mO)y'rO~O]jXejXmhXqjXsjXtjXujXvjXwjXxjXyjXzjX!OjX!VjX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX&rjX&sjX(rjX)TjX)VjX)WjX!TjX!hjX)ZjX)kjX[jX~O!ljX(vjX)YjX!XjX!YjX![jX!^jX!_jX!ajX!bjX!ejX!fjX(ujX(wjX(xjX)UjX)XjX!gjX!WjXQjX!djX!UjX#vjX#TjX#VjX#pjXbjX|jX!ojX#ajX#bjX#ijX#tjX${jX%cjX%ejX%kjX%ljX%ojX&mjX)QjX~P#%yO(y*[O~Om*]O~O](}Xe(}Xs(}Xt(}Xu(}Xv(}Xw(}Xx(}Xy(}Xz(}X!O(}X!V(}X!r(}X!s(}X!t(}X!u(}X!v(}X!x(}X!{(}X%v(}X&r(}X&s(}X(r(}X)T(}X)V(}X)W(}X)Y(}X!T(}X!X(}X!Y(}X![(}X!^(}X!_(}X!a(}X!b(}X!e(}X!f(}X!h(}X(u(}X(w(}X(x(}X)U(}X)X(}X)Z(}X!g(}X)k(}X[(}X!W(}XQ(}X!d(}X(v(}X!U(}X#v(}X~Om*]O~P#+ROs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!O!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO])bae)bam)ba!V)ba!{)ba%v)ba(r)ba)T)ba)V)ba)W)baQ)ba!d)ba!h)ba)Z)ba)k)ba[)ba!T)ba(v)ba)Y)ba~O&r#WO&s$xO~P#.qOq&gOm(}X~P#+RO&r)ba~P#.qO]ZXmhXqZXqjX!TjX!VZX!XZX!YZX![ZX!^ZX!_ZX!aZX!bZX!eZX!fZX!gZX!hZX(uZX(wZX(xZX)TZX)UZX)VZX)WZX)XZX)YZX)ZZX)kZX[ZX~O!WZX(vZX!UZXQZX!dZX~P#1jO]$OO!V#mO!X#|O(w#lO(x#lO~O!Y&xa![&xa!^&xa!_&xa!a&xa!b&xa!e&xa!f&xa!g&xa!h&xa(u&xa)T&xa)U&xa)V&xa)W&xa)X&xa)Y&xa)Z&xa)k&xa[&xa!W&xa(v&xa!U&xaQ&xa!d&xa~P#3zOm;iO!T$XO~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O~PKkOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!|%SO~PKkO]&dO!V&cO[#Qa!T#Qa!h#Qa#v#Qa)Y#Qa)k#QaQ#Qa!d#Qa(v#Qa~Oq&gO!T$XO~O[*dO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO[*dO~O[*fO]&dO!V&cO~O]&ZOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V&XO&r#WO&s$xO)T&WO)V&[O)W&[O~O[rXQrX!drX!hrX)ZrX)YrX~P#9{O[*iO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h*jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!W)lX~P#3zO!W*lO!h*mO~O!W*lO!h*mO~P!(zO!W*lO~Oq&gO!g$ZO!h*nO)k$ZO](tX!V(tX!W(tX!W*PX!X(tX!Y(tX![(tX!^(tX!_(tX!a(tX!b(tX!e(tX!f(tX(u(tX(w(tX(x(tX)T(tX)U(tX)V(tX)W(tX)X(tX)Z(tX~O!h(tX~P#=ZO!W*pO~Oe$SO%Y*UO(y:sO~Om;lO~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!|%SO~PBUO]*wO!T*rO!V&cO!h*uO#v!eO)k*sO)Y)rX~O!h*uO)Y)rX~O)Y*xO~Oq&gO])fX!T)fX!V)fX!h)fX#v)fX)Y)fX)k)fX[)fXQ)fX!d)fX(v)fX~Oq&gO~OP%pO(pQO]%ha!V%ha!X%ha!Y%ha![%ha!^%ha!_%ha!a%ha!b%ha!e%ha!f%ha!h%ha(r%ha(u%ha(w%ha(x%ha)T%ha)U%ha)V%ha)W%ha)X%ha)Y%ha)Z%ha!g%ha)k%ha[%ha!W%ha(v%ha!U%haQ%ha!d%ha~Oe$SO%Y$TO(y:pO~Om:xO~O!TxO#v!eO)k%}O~Om<]O&r#WO(r;hO~O$Z+UO%`+VO~O!TxO#v!eO)Y+WO)k+XO~OPmO]$fOb%ROm:{O!V$gO!X!XO!Y!WO!i!YO#V#QO$Z+UO%_#ZO%`+ZO%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)T$lO)W$lO)Z!ZO)]XO)icO)jdO~O!U+[O~P!QOb!TOm$pOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#a+bO#b+cO#i+dO%e#UO%l#SO&m!RO&r#WO&s!TO(r$oO)QYO~OQ)mP!d)mP~P#GgO]&ZOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V&XO)T&WO)V&[O)W&[O~O[#kX!T#kX#v#kX)Y#kX)k#kXQ#kX!d#kX!h#kX)Z#kX!x#kX(v#kX~P#IkOPmO]$fOb%ROm:{Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V$gO!W+jO!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)T+kO)W$lO)Z!ZO)]XO)icO)jdO~O]&dO!V+lO~O]&ZO!V&XO)QYO)T&WO)V&[O)W&[O)Z+oO[)eP~P8zO]&ZO!V&XO)T&WO)V&[O)W&[O~O[#nX!T#nX#v#nX)Y#nX)k#nXQ#nX!d#nX!h#nX)Z#nX!x#nX(v#nX~P#NeO!TxO])oX!V)oX~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O#T+wO#p+xO(x+uO)V+sO)W+sO~O]#jX!T#jX!V#jX[#jX#v#jX)Y#jX)k#jXQ#jX!d#jX!h#jX)Z#jX!x#jX(v#jX~P$ xO#V+zO~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!l+{O#T+wO#V+zO#p+xO(x+uO)V+{O)W+{O])gP!T)gP!V)gP#v)gP(v)gP)k)gP[)gP!h)gP)Y)gP~O!x)gPQ)gP!d)gP~P$#uOPmO]$fOb%ROm:{Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V$gO!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)W$lO)Z!ZO)]XO)icO)jdO~O!W,RO)T,SO~P$%pO)QYO)Z+oO[)eP~P8zO]&dO!V&cO[&Za!T&Za!h&Za#v&Za)Y&Za)k&ZaQ&Za!d&Za(v&Za~OPmO]$fOb!]Om:}Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!V$gO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r;SO)T$lO)W$lO)Z!ZO)]XO)icO)jdO~OQ(zP!d(zP~P$)YO]$OO!V#mO(w#lO(x#lO!X'Pa!Y'Pa!['Pa!^'Pa!_'Pa!a'Pa!b'Pa!e'Pa!f'Pa!h'Pa(u'Pa)T'Pa)U'Pa)V'Pa)W'Pa)X'Pa)Y'Pa)Z'Pa!g'Pa)k'Pa['Pa!W'Pa(v'Pa!U'PaQ'Pa!d'Pa~O]$OO!V#mO!X#|O(w#lO(x#lO~P!B_O!TxO#t!fO)QYO~P8zO!TxO(r%oO)k,]O~O#x,bO~OQ)bX!d)bX!h)bX)Z)bX)k)bX[)bX!T)bX(v)bX)Y)bX~P:nO(v,fO(w,dO)Q$UX)Y$UX~O(r,gO~O)QYO)Y,jO~OPmO]$fOb!]Om:|Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!V$gO!X!XO!Y!WO!i!YO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO)QYO)T$lO)W$lO)YiO)Z!ZO)]XO)icO)jdO~O(r;TO~P$0kOPmO]$fOb%ROm:{O!TxO!V$gO!X!XO!Y!WO!i!YO#V#QO#v!eO$Y!vO$Z!wO$`!iO$e!jO$g!kO$h!lO$k!mO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r:nO)QYO)T$lO)W$lO)YiO)Z!ZO)]XO)icO)jdO~O$h,tO~OPmO]$fOb!]Om:|Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!V$gO!X!XO!Y!WO!i!YO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#V#QO#a#VO#b#TO$}!uO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO)QYO)T$lO)W$lO)Z!ZO)]XO)icO)jdO~O${,zO(r;OO)Y,xO~P$7UO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y,|O)Z#}O~P#3zO)Y,|O~O)Y,}O~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y-OO)Z#}O~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y-PO)Z#}O~P#3zOq&gO)QYO)k-RO~O)Y-SO~Om;_O(r;QO~O]-ZO!{!dO&r#WO&s$xO(r-VO)T-WO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO(v-^O)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!TxO$`!iO$e!jO$g!kO$h!lO$k-cO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO$}!uO(r:oOe$Xa!o$Xa!{$Xa#i$Xa#p$Xa#t$Xa#v$Xa$R$Xa$T$Xa$Y$Xa$Z$Xa${$Xa%U$Xa%c$Xa%g$Xa%o$Xa%|$Xa(k$Xa)V$Xa!U$Xa$c$Xa~P$0kO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y-dO)Z#}O~P#3zOm-fO!TxO)k,]O~O)k-hO~O]&]a!X&]a!Y&]a![&]a!^&]a!_&]a!a&]a!b&]a!e&]a!f&]a!h&]a(u&]a(w&]a(x&]a)U&]a)V&]a)W&]a)X&]a)Y&]a)Z&]a!g&]a)k&]a[&]a!W&]a!T&]a#v&]a(v&]a!U&]aQ&]a!d&]a~O)T-lO!V&]a~P$DbO[-lO~O!W-lO~O!V-mO)T&]a~P$DbO](}Xe(}Xs(}Xt(}Xu(}Xv(}Xw(}Xx(}Xy(}Xz(}X!O(}X!V(}X!r(}X!s(}X!t(}X!u(}X!v(}X!x(}X!{(}X%v(}X&r(}X&s(}X(r(}X)T(}X)V(}X)W(}X~Om;nO~P$GQO]&dO!V&cO)Y-nO~Om;dO!o-qO#V+zO#i-vO#t!fO${,zO%c!zO%k-uO%o!|O%v!}O(r;UO)QYO~P!8jO!n-zO(r,gO~O)QYO)Y-|O~OPmO]$fOb%ROm:{O!T.RO!V$gO!X!XO!Y!WO!i!YO#V.YO#a.XO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO(x.QO)T$lO)W$lO)Y.OO)Z!ZO)]XO)icO)jdO~O!U.WO~P$JbO])_Xe)_Xs)_Xt)_Xu)_Xv)_Xw)_Xx)_Xy)_Xz)_X!O)_X!T)_X!V)_X!l)_X!r)_X!s)_X!t)_X!u)_X!v)_X!x)_X!{)_X%v)_X&r)_X&s)_X(r)_X(v)_X)T)_X)V)_X)W)_X)Y)_X[)_X!h)_X)Z)_X!X)_X!Y)_X![)_X!^)_X!_)_X!a)_X!b)_X!e)_X!f)_X(u)_X(w)_X(x)_X)U)_X)X)_X!g)_X)k)_X!W)_XQ)_X!d)_X#T)_X#V)_X#p)_X#v)_Xb)_X|)_X!o)_X#a)_X#b)_X#i)_X#t)_X${)_X%c)_X%e)_X%k)_X%l)_X%o)_X&m)_X)Q)_X!U)_X~Om*]O~P$LlOm$pO!T(RO!l._O(r$oO(v(QO)QYO~Oq&gOm)_X~P$LlOm$pO!n.dO!o.dO(r$oO)QYO~Om;eO!U.oO!n.qO!o.pO#i-vO${!tO$}!uO%g!{O%k-uO%o!|O%v!}O(r;WO)QYO~P!8jO!T(RO!l._O(v(QO])OXe)OXm)OXs)OXt)OXu)OXv)OXw)OXx)OXy)OXz)OX!O)OX!V)OX!r)OX!s)OX!t)OX!u)OX!v)OX!x)OX!{)OX%v)OX&r)OX&s)OX(r)OX)T)OX)V)OX)W)OX~O)Y)OX[)OX!X)OX!Y)OX![)OX!^)OX!_)OX!a)OX!b)OX!e)OX!f)OX!h)OX(u)OX(w)OX(x)OX)U)OX)X)OX)Z)OX!g)OX)k)OX!W)OXQ)OX!d)OX!U)OX#v)OX~P%%eO!T(RO~O!T(RO(v(QO~O(r%oO!U*RP~O!T([O(v.vO]&kae&kam&kas&kat&kau&kav&kaw&kax&kay&kaz&ka!O&ka!V&ka!r&ka!s&ka!t&ka!u&ka!v&ka!x&ka!{&ka%v&ka&r&ka&s&ka(r&ka)T&ka)V&ka)W&ka)Y&ka[&ka!X&ka!Y&ka![&ka!^&ka!_&ka!a&ka!b&ka!e&ka!f&ka!h&ka(u&ka(w&ka(x&ka)U&ka)X&ka)Z&ka!g&ka)k&ka!W&kaQ&ka!d&ka!U&ka#v&ka~Om$pO!T([O(r$oO~O&r#WO&s$xO]&pae&pam&pas&pat&pau&pav&paw&pax&pay&paz&pa!O&pa!V&pa!r&pa!s&pa!t&pa!u&pa!v&pa!x&pa!{&pa%v&pa(r&pa)T&pa)V&pa)W&pa)Y&pa[&pa!T&pa!X&pa!Y&pa![&pa!^&pa!_&pa!a&pa!b&pa!e&pa!f&pa!h&pa(u&pa(w&pa(x&pa)U&pa)X&pa)Z&pa!g&pa)k&pa!W&paQ&pa!d&pa(v&pa!U&pa#v&pa~O&s.{O~P!(zO!Y#rO![#sO!f#{O)T#nO!^'Ua!_'Ua!a'Ua!b'Ua!e'Ua!h'Ua(u'Ua)U'Ua)V'Ua)W'Ua)X'Ua)Y'Ua)Z'Ua!g'Ua)k'Ua['Ua!W'Ua(v'Ua!U'UaQ'Ua!d'Ua~P#3zO!V'dX!X'dX!Y'dX!['dX!^'dX!_'dX!a'dX!b'dX!e'dX!f'dX!h'dX(u'dX(w'dX(x'dX)T'dX)U'dX)V'dX)W'dX)X'dX)Z'dX['dX~O].}O)Y'dX!g'dX)k'dX!W'dX(v'dX!U'dXQ'dX!d'dX~P%2xO!Y#rO![#sO!f#{O)T#nO!^'Wa!_'Wa!a'Wa!b'Wa!e'Wa!h'Wa(u'Wa)U'Wa)V'Wa)W'Wa)X'Wa)Y'Wa)Z'Wa!g'Wa)k'Wa['Wa!W'Wa(v'Wa!U'WaQ'Wa!d'Wa~P#3zO]$OO!T$XO!V/OO&r#WO&s$xO~O!X'Za!Y'Za!['Za!^'Za!_'Za!a'Za!b'Za!e'Za!f'Za!h'Za(u'Za(w'Za(x'Za)T'Za)U'Za)V'Za)W'Za)X'Za)Y'Za)Z'Za!g'Za)k'Za['Za!W'Za(v'Za!U'ZaQ'Za!d'Za~P%6oO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!h'^a)Y'^a!g'^a)k'^a['^a!W'^a(v'^a!U'^aQ'^a!d'^a~P#3zOPmO]$fOb%ROm:{O!V$gO!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)T$lO)W%^O)Z!ZO)]XO)icO)jdO)k%]O~O!W/RO~P%:oOS(rOT(oO]$OO*X(qO~O]/UO'f/VO*X/SO~OS/ZOT(oO*X/YO~O]$OO~Q'na!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO(v/]O)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O)Y#Zi[#Zi~P#3zO]dXmhXqdXqjX!VdX!XdX!YdX![dX!^dX!_dX!adX!bdX!edX!fdX!gdX!hdX(udX(wdX(xdX)TdX)UdX)VdX)WdX)XdX)YdX)ZdX)kdX[dX!WdX(vdX!TdX#vdX!UdXQdX!ddX~Oe/_O%Y*UO(y/^O~Om/`O~Om/aO~Oq&gO]ci!Vci!Xci!Yci![ci!^ci!_ci!aci!bci!eci!fci!gci!hci(uci(wci(xci)Tci)Uci)Vci)Wci)Xci)Yci)Zci)kci[ci!Wci(vci!UciQci!dci~O!W/cO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO![#sO)T#nO!Y&zi!^&zi!_&zi!a&zi!b&zi!e&zi!f&zi!h&zi(u&zi)U&zi)V&zi)W&zi)X&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y&zi![&zi!^&zi!_&zi!a&zi!b&zi!e&zi!f&zi!h&zi(u&zi)T&zi)U&zi)V&zi)W&zi)X&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O)T#nO)W#qO)X#iO!h&zi(u&zi)U&zi)V&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O)T#nO)V#oO)W#qO)X#iO!h&zi(u&zi)U&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#rO![#sO!_#wO!a#yO!b#zO!e#zO!f#{O)T#nO)W#qO)X#iO!^&zi!h&zi(u&zi)U&zi)V&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#rO![#sO!a#yO!b#zO!e#zO!f#{O)T#nO)W#qO)X#iO!^&zi!_&zi!h&zi(u&zi)U&zi)V&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#rO![#sO!a#yO!b#zO!e#zO!f#{O)T#nO)X#iO!^&zi!_&zi!h&zi(u&zi)U&zi)V&zi)W&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#rO![#sO!b#zO!e#zO!f#{O)T#nO)X#iO!^&zi!_&zi!a&zi!h&zi(u&zi)U&zi)V&zi)W&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#rO![#sO!f#{O)T#nO!^&zi!_&zi!a&zi!b&zi!e&zi!h&zi(u&zi)U&zi)V&zi)W&zi)X&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#rO![#sO)T#nO!^&zi!_&zi!a&zi!b&zi!e&zi!f&zi!h&zi(u&zi)U&zi)V&zi)W&zi)X&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O)T#nO)U#pO)V#oO)W#qO)X#iO!h&zi(u&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h/dO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O[(sX~P#3zO!h/dO[(sX~O[/fO~O]%Xaq%Xa!X%Xa!Y%Xa![%Xa!^%Xa!_%Xa!a%Xa!b%Xa!e%Xa!f%Xa!h%Xa(u%Xa(w%Xa(x%Xa)U%Xa)V%Xa)W%Xa)X%Xa)Y%Xa)Z%Xa!g%Xa)k%Xa[%Xa!W%Xa!T%Xa#v%Xa(v%Xa!U%XaQ%Xa!d%Xa~O)T/gO!V%Xa~P&,aO[/gO~O!W/gO~O!V/hO)T%Xa~P&,aO!X'Zi!Y'Zi!['Zi!^'Zi!_'Zi!a'Zi!b'Zi!e'Zi!f'Zi!h'Zi(u'Zi(w'Zi(x'Zi)T'Zi)U'Zi)V'Zi)W'Zi)X'Zi)Y'Zi)Z'Zi!g'Zi)k'Zi['Zi!W'Zi(v'Zi!U'ZiQ'Zi!d'Zi~P%6oO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!h'^i)Y'^i!g'^i)k'^i['^i!W'^i(v'^i!U'^iQ'^i!d'^i~P#3zO!W/mO~P%:oO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h/oO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!U)sX~P#3zO(r/rO~O!V/tO(w)tO)k/vO~O!h/oO!U)sX~O!U/wO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!h`i(u`i)Y`i!g`i)k`i[`i!W`i(v`i!U`iQ`i!d`i~P#3zO!R/xO~Om)|O]!Qa!h!Qa)P!Qa)Z!Qa~OP0QO]0POm0QO!R0QO!T/}O!V0OO!X0QO!Y0QO![0QO!^0QO!_0QO!a0QO!b0QO!e0QO!f0QO!g0QO!h0QO!i0QO(pQO(v0QO(w0QO(x0QO)T/zO)U/{O)V/{O)W/|O)X#iO)Y0QO)Z0QO)]XO~O[0TO~P&6yO!R$]O~O!h*PO)P)Ra)Z)Ra~O)P0XO~O])eO!V)fO!X)cO!g)cO%Z)cO%[)cO%])cO%^)cO%_)gO%`)gO%a)cO(x)dO)k)cO)y)hO~Oe)pO%Y*UO(y$PO~O)Y0ZO~O]oXeoXmnXqoXsoXtoXuoXvoXwoXxoXyoXzoX!OoX!VoX!roX!soX!toX!uoX!voX!xoX!{oX%voX&roX&soX(roX)ToX)VoX)WoX!ToX!hoX)ZoX[oXQoX!doX~O!loX(voX)YoX!XoX!YoX![oX!^oX!_oX!aoX!boX!eoX!foX(uoX(woX(xoX)UoX)XoX!goX)koX!WoX!UoX#voX#ToX#VoX#poXboX|oX!ooX#aoX#boX#ioX#toX${oX%coX%eoX%koX%loX%ooX&moX)QoX~P&:uOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!O!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO~O])bie)bim)bi!V)bi!{)bi%v)bi(r)bi)T)bi)V)bi)W)biQ)bi!d)bi!h)bi)Z)bi)k)bi[)bi!T)bi&r)bi(v)bi)Y)bi~P&?sO]&dO!V&cO[#Qi!T#Qi!h#Qi#v#Qi)Y#Qi)k#QiQ#Qi!d#Qi(v#Qi~O[raQra!dra!hra)Zra)Yra~P#9{O[raQra!dra!hra)Zra)Yra~P#IkO]&dO!V+lO[raQra!dra!hra)Zra)Yra~O!h*jO!W)la~O!h*nO!W*Pa~OPmOb!]Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!X!XO!Y!WO!i!YO!s!aO!t!aO!v!aO!x!cO#V#QO#a#VO#b#TO#v!eO$Y!vO$Z!wO$`!iO$e!jO$g!kO$h!lO$k!mO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO%_#ZO%`#[O%a#YO%e#UO%l#SO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO)QYO)YiO)Z!ZO)]XO)icO)jdO~O]eOe!POmTO!T*rO!U&UO!V0iO!opO!r!`O!u!bO!{!dO#i#OO#p!xO#t!fO$R!gO$T!hO${!tO$}!uO%U!yO%c!zO%g!{O%o!|O%v!}O%|#PO(rRO(w)tO)TaO)V|O)W{O~P&DuO!h*uO)Y)ra~OPmO]$fOb!]Om:}O|#RO!T$XO!V$gO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r;VO)QYO)T$lO)W$lO)Z0oO)]XO)icO)jdO[(sP[)eP~P&?sO!h*nO!W*PX~O]$OO!T$XO~O!h0tO!T){X#v){X)k){X~O)Y0vO~O)Y0wO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y0yO)Z#}O~P#3zO)Y0wO~P!?WO]1TOe!POm%cO!V1RO!{!dO%v$nO(r$yO)T0{O)Z1OO~O)V1PO)W1PO)k0|OQ#PX!d#PX!h#PX[#PX~P' dO!h1UOQ)mX!d)mX~OQ1WO!d1WO~O)Z1ZO)k1YOQ#`X!d#`X!h#`X~P!<[O)Z1ZO)k1YOQ#`X!d#`X!h#`X~P!;bOq&VO~O[#ka!T#ka#v#ka)Y#ka)k#kaQ#ka!d#ka!h#ka)Z#ka!x#ka(v#ka~P#IkO]&dO!V+lO[#ka!T#ka#v#ka)Y#ka)k#kaQ#ka!d#ka!h#ka)Z#ka!x#ka(v#ka~O!W1`O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!W1`O)T1bO~P$%pO!W1`O~P!(zO]#ja!T#ja!V#ja[#ja#v#ja)Y#ja)k#jaQ#ja!d#ja!h#ja)Z#ja!x#ja(v#ja~P$ xO[1fO]&dO!V+lO~O!h1gO[)eX~O[1iO~O]&dO!V+lO[#na!T#na#v#na)Y#na)k#naQ#na!d#na!h#na)Z#na!x#na(v#na~O]1mOs#SXt#SXu#SXv#SXw#SXx#SXy#SXz#SX!T#SX!V#SX#T#SX#p#SX(x#SX)V#SX)W#SX!l#SX!x#SX#V#SX#v#SX(v#SX)k#SX[#SX!h#SX)Y#SXQ#SX!d#SX)Z#SX~O]1nO~O]1qOm$pO!V$gO#V#QO(r$oO)icO)jdO~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!l+{O#T+wO#V+zO#p+xO(x+uO)V+{O)W+{O~O])gX!T)gX!V)gX!x)gX#v)gX(v)gX)k)gX[)gX!h)gX)Y)gXQ)gX!d)gX~P'+}O!x!cO]#Ri!T#Ri!V#Ri#v#Ri(v#Ri)k#Ri[#Ri!h#Ri)Y#RiQ#Ri!d#Ri~O!W1yO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!W1yO)T1{O~P$%pO!W1yO~P!(zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}OQ*SX!d*SX!h*SX~P#3zO)Z1|OQ({X!d({X!h({X~O!h1}OQ(zX!d(zX~OQ2PO!d2PO~O[2QO~O#t$mO)QYO~P8zOm-fO!TxO)k2UO~O[2VO~O#x,bOP#ui]#uib#uie#uim#uis#uit#uiu#uiv#uiw#uix#uiy#uiz#ui|#ui!O#ui!T#ui!V#ui!X#ui!Y#ui!i#ui!o#ui!r#ui!s#ui!t#ui!u#ui!v#ui!x#ui!{#ui#V#ui#a#ui#b#ui#i#ui#p#ui#t#ui#v#ui$R#ui$T#ui$Y#ui$Z#ui$`#ui$e#ui$g#ui$h#ui$k#ui$m#ui$o#ui$q#ui$s#ui$u#ui$w#ui${#ui$}#ui%U#ui%_#ui%`#ui%a#ui%c#ui%e#ui%g#ui%l#ui%o#ui%v#ui%|#ui&m#ui&r#ui&s#ui'Q#ui'R#ui'V#ui'Y#ui'a#ui'b#ui(k#ui(p#ui(r#ui)Q#ui)T#ui)V#ui)W#ui)Y#ui)Z#ui)]#ui)i#ui)j#ui!U#ui$c#ui!n#ui%k#ui~O]&dO~O]&dO!TxO!V&cO#v!eO~O(v2[O(w,dO)Q$Ua)Y$Ua~O)QYO)Y2^O~O[2_O~P,]O[2_O)Y#kO~O[2_O~O$c2dOP$_i]$_ib$_ie$_im$_is$_it$_iu$_iv$_iw$_ix$_iy$_iz$_i|$_i!O$_i!T$_i!V$_i!X$_i!Y$_i!i$_i!o$_i!r$_i!s$_i!t$_i!u$_i!v$_i!x$_i!{$_i#V$_i#a$_i#b$_i#i$_i#p$_i#t$_i#v$_i$R$_i$T$_i$Y$_i$Z$_i$`$_i$e$_i$g$_i$h$_i$k$_i$m$_i$o$_i$q$_i$s$_i$u$_i$w$_i${$_i$}$_i%U$_i%_$_i%`$_i%a$_i%c$_i%e$_i%g$_i%l$_i%o$_i%v$_i%|$_i&m$_i&r$_i&s$_i'Q$_i'R$_i'V$_i'Y$_i'a$_i'b$_i(k$_i(p$_i(r$_i)Q$_i)T$_i)V$_i)W$_i)Y$_i)Z$_i)]$_i)i$_i)j$_i!U$_i~O]1qO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y2gO)Z#}O~P#3zOPmO]$fOb!]Om:|O|#RO!V$gO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r;OO)T$lO)W$lO)Y2jO)Z!ZO)]XO)icO)jdO~P&?sO)Y2gO~O(r-VO~O)QYO)k2mO~O)Y2oO~O]-ZOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!{!dO!|%SO(r-VO)T-WO~O)T2tO~O]&dO!V2vO!h2wO)Y)vX~O]-ZO!{!dO(r-VO)T-WO~O)Y2zO~O!TxO$`!iO$e!jO$g!kO$h!lO$k-cO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO$}!uO(r:oOe$Xi!o$Xi!{$Xi#i$Xi#p$Xi#t$Xi#v$Xi$R$Xi$T$Xi$Y$Xi$Z$Xi${$Xi%U$Xi%c$Xi%g$Xi%o$Xi%|$Xi(k$Xi)V$Xi!U$Xi$c$Xi~P$0kOm:|O(r:oO~P0zO]3OO~O)Y2TO~O!u3QO(r%oO~O[3TO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h3UO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO[3VO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO]&dO!V+lO!T%ui#v%ui)Y%ui)k%ui~O!W3WO~Om:zO)Y(}X~P$GQOb!TOm$pO|3^O#a#VO#b3]O#t!fO%e#UO%l3_O&m!RO&r#WO&s!TO(r$oO)QYO~P&?sOm;dO!o-qO#i-vO#t!fO${,zO%c!zO%k-uO%o!|O%v!}O(r;UO)QYO~P!8jO]&dO!V&cO)Y3aO~O)Y3bO~O)QYO)Y3bO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y3cO)Z#}O~P#3zO)Y3cO~O)Y3fO~O!U3hO~P$JbOm$pO(r$oO~O]3jO!T'zO~P'+iO!T(RO!l3mO(v(QO])Oae)Oam)Oas)Oat)Oau)Oav)Oaw)Oax)Oay)Oaz)Oa!O)Oa!V)Oa!r)Oa!s)Oa!t)Oa!u)Oa!v)Oa!x)Oa!{)Oa%v)Oa&r)Oa&s)Oa(r)Oa)T)Oa)V)Oa)W)Oa)Y)Oa[)Oa!X)Oa!Y)Oa![)Oa!^)Oa!_)Oa!a)Oa!b)Oa!e)Oa!f)Oa!h)Oa(u)Oa(w)Oa(x)Oa)U)Oa)X)Oa)Z)Oa!g)Oa)k)Oa!W)OaQ)Oa!d)Oa!U)Oa#v)Oa~Om$pO!n.dO!o.dO(r$oO~O!h3qO)Z3sO!T)`X~O!o3uO)QYO~P8zO)Y3vO~PGVO]3{Om(|O!T$XO!{!dO%v$nO&r#WO(r({O(v4PO)T3xO)V3|O)W3|O~O)Y4QO)k4SO~P(&eOm;eO!U4UO!n.qO!o.pO#i-vO${!tO$}!uO%g!{O%k-uO%o!|O%v!}O(r;WO)QYO~P!8jOm;eO%v!}O(r;WO~P!8jO(v4VO~Om$pO!T(RO(r$oO(v(QO)QYO~O!l3mO~P((sO)k4XO!U&oX!h&oX~O!h4YO!U*RX~O!U4[O~Ob4^Om$pO&m!RO(r$oO~O!T([O]&kie&kim&kis&kit&kiu&kiv&kiw&kix&kiy&kiz&ki!O&ki!V&ki!r&ki!s&ki!t&ki!u&ki!v&ki!x&ki!{&ki%v&ki&r&ki&s&ki(r&ki)T&ki)V&ki)W&ki)Y&ki[&ki!X&ki!Y&ki![&ki!^&ki!_&ki!a&ki!b&ki!e&ki!f&ki!h&ki(u&ki(w&ki(x&ki)U&ki)X&ki)Z&ki!g&ki)k&ki!W&kiQ&ki!d&ki!U&ki#v&ki~O(v&ki~P(*TO(v.vO~P(*TO[4aO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO[4aO~O[4bO~O]$OO!T$XO!V'Zi!X'Zi!Y'Zi!['Zi!^'Zi!_'Zi!a'Zi!b'Zi!e'Zi!f'Zi!h'Zi(u'Zi(w'Zi(x'Zi)T'Zi)U'Zi)V'Zi)W'Zi)X'Zi)Y'Zi)Z'Zi!g'Zi)k'Zi['Zi!W'Zi(v'Zi!U'ZiQ'Zi!d'Zi~OPmOb%ROm:{O!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)Z!ZO)]XO)icO)jdO]#]aq#]a!T#]a!V#]a)T#]a)V#]a)W#]a~O(r%oO)Z4gO[*ZP~O*X4fO~O'f4iO*X4fO~O*X4jO~OmnXqoXq&wX~Oe4lO%Y*UO(y/^O~Oe4lO%Y*UO(y4mO~O!h/dO[(sa~O!W4qO~O]&dO!V+lO!T%uq#v%uq)Y%uq)k%uq~O]$OO!T$XO!X'Zq!Y'Zq!['Zq!^'Zq!_'Zq!a'Zq!b'Zq!e'Zq!f'Zq!h'Zq(u'Zq(w'Zq(x'Zq)T'Zq)U'Zq)V'Zq)W'Zq)X'Zq)Y'Zq)Z'Zq!g'Zq)k'Zq['Zq!W'Zq(v'Zq!U'ZqQ'Zq!d'Zq~O!V'Zq~P(5bO!V/OO&r#WO&s$xO~P(5bO!T$XO!V)sO(w)tO!U(UX!h(UX~P!JwO!h/oO!U)sa~O!W4yO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h*jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!U4}O~P&6yO!W4}O~P&6yO[4}O~P&6yO[5SO~P&6yO]5TO!h'ua)P'ua)Z'ua~O!h*PO)P)Ri)Z)Ri~O]&dO!V&cO[#Qq!T#Qq!h#Qq#v#Qq)Y#Qq)k#QqQ#Qq!d#Qq(v#Qq~O[riQri!dri!hri)Zri)Yri~P#IkO]&dO!V+lO[riQri!dri!hri)Zri)Yri~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!h'Tq)Y'Tq!g'Tq)k'Tq['Tq!W'Tq(v'Tq!U'TqQ'Tq!d'Tq~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!W'|a!h'|a~P#3zO!W5YO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h5ZO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y#kO)Z#}O!U)sX~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!h#{i)Y#{i~P#3zO]*wO!T$XO!V&cO)k*sO!h(Va)Y(Va~O!h1gO[)eX]'dX~P%2xO)Z5]O!T%qa!h%qa#v%qa)k%qa~O!h0tO!T){a#v){a)k){a~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y5`O)Z#}O~P#3zO]1TOe!POm;]O!V1RO!{!dO%v$nO(r$yO)T;yO)V5bO)W5bO~OQ#Pa!d#Pa!h#Pa[#Pa~P(DjO]1TOe!POs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V1RO!{!dO!|%SO%v$nO(r$yOQ#kX!d#kX!h#kX[#kX~Om%cO)T0{O)V;zO)W;zO~P(ElO]&dOQ#Pa!d#Pa!h#Pa[#Pa~O!V&cO)k5fO~P(GZO(r%oOQ#dX!d#dX!h#dX[#dX~O)V;zO)W;zOQ#nX!d#nX!h#nX[#nX~P' dO!V+lO~P(GZO]1TOb!TOe!POm;^O|#RO!V1RO!{!dO#a#VO#b#TO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO(r;RO)QYO)T;yO)V5bO)W5bO)Z+oO[)eP~P&?sO!h1UOQ)ma!d)ma~Oq&gO)k5kOQ#`am(}X!d#`a!h#`a)Z(}X~P$GQO(r-VOQ#ga!d#ga!h#ga~Oq&gO)k5kOQ#`a])_Xe)_Xm)_Xs)_Xt)_Xu)_Xv)_Xw)_Xx)_Xy)_Xz)_X!O)_X!T)_X!V)_X!d#`a!h#`a!l)_X!r)_X!s)_X!t)_X!u)_X!v)_X!x)_X!{)_X%v)_X&r)_X&s)_X(r)_X(v)_X)T)_X)V)_X)W)_X)Z)_X~O#a5nO#b5nO~O]&dO!V+lO[#ki!T#ki#v#ki)Y#ki)k#kiQ#ki!d#ki!h#ki)Z#ki!x#ki(v#ki~O!W5pO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!W5pO~P!(zO!W5pO)T5rO~P$%pO]#ji!T#ji!V#ji[#ji#v#ji)Y#ji)k#jiQ#ji!d#ji!h#ji)Z#ji!x#ji(v#ji~P$ xO)QYO)Z5tO~P8zO!h1gO[)ea~O&r#WO&s$xO!T#qa!x#qa#v#qa(v#qa)k#qa[#qa!h#qa)Y#qaQ#qa!d#qa)Z#qa~P#NeO[5yO~P!(zO[)pP~P!4xO)U6PO)V5}O]#Ua!T#Ua!V#Ua)T#Ua)W#Uas#Uat#Uau#Uav#Uaw#Uax#Uay#Uaz#Ua!l#Ua!x#Ua#T#Ua#V#Ua#p#Ua#v#Ua(v#Ua(x#Ua)k#Uab#Uae#Uam#Ua|#Ua!O#Ua!o#Ua!r#Ua!s#Ua!t#Ua!u#Ua!v#Ua!{#Ua#a#Ua#b#Ua#i#Ua#t#Ua${#Ua%c#Ua%e#Ua%k#Ua%l#Ua%o#Ua%v#Ua&m#Ua&r#Ua&s#Ua(r#Ua)Q#Ua)Y#Ua[#Ua!h#UaQ#Ua!d#Ua~O!x!cO]#Rq!T#Rq!V#Rq#v#Rq(v#Rq)k#Rq[#Rq!h#Rq)Y#RqQ#Rq!d#Rq~O!W6UO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!W6UO~P!(zO!h1}OQ(za!d(za~O)Y6ZO~Om-fO!TxO)k6[O~O]*wO!T$XO!V&cO!h*uO)Y)rX~O)k6`O~P)+cO[6bO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO[6bO~O$c6dOP$_q]$_qb$_qe$_qm$_qs$_qt$_qu$_qv$_qw$_qx$_qy$_qz$_q|$_q!O$_q!T$_q!V$_q!X$_q!Y$_q!i$_q!o$_q!r$_q!s$_q!t$_q!u$_q!v$_q!x$_q!{$_q#V$_q#a$_q#b$_q#i$_q#p$_q#t$_q#v$_q$R$_q$T$_q$Y$_q$Z$_q$`$_q$e$_q$g$_q$h$_q$k$_q$m$_q$o$_q$q$_q$s$_q$u$_q$w$_q${$_q$}$_q%U$_q%_$_q%`$_q%a$_q%c$_q%e$_q%g$_q%l$_q%o$_q%v$_q%|$_q&m$_q&r$_q&s$_q'Q$_q'R$_q'V$_q'Y$_q'a$_q'b$_q(k$_q(p$_q(r$_q)Q$_q)T$_q)V$_q)W$_q)Y$_q)Z$_q)]$_q)i$_q)j$_q!U$_q~O)Y6eO~OPmO]$fOb!]Om:|O|#RO!V$gO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r;OO)T$lO)W$lO)Y6gO)Z!ZO)]XO)icO)jdO~P&?sO(v6iO)k*sO~P)+cO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y6gO)Z#}O~P#3zO[6kO~P!(zO)Y6oO~O)Y6pO~O]-ZOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!{!dO(r-VO)T-WO~O]&dO!V2vO!h%Oa)Y%Oa[%Oa~O!W6vO)T6wO~P$%pO!h2wO)Y)va~O[6zO]&dO!V2vO~O!TxO$`!iO$e!jO$g!kO$h!lO$k-cO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO$}!uO(r:oOe$Xq!o$Xq!{$Xq#i$Xq#p$Xq#t$Xq#v$Xq$R$Xq$T$Xq$Y$Xq$Z$Xq${$Xq%U$Xq%c$Xq%g$Xq%o$Xq%|$Xq(k$Xq)V$Xq!U$Xq$c$Xq~P$0kOPmO]$fOb!]Om:|O|#RO!V$gO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r;OO)QYO)T$lO)W$lO)Y6|O)Z!ZO)]XO)icO)jdO~P&?sO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y7PO)Z#}O~P#3zO)Y7QO~OP7RO(pQO~Om*]O)Y)_X~P$GQOq&gOm(}X)Y)_X~P$GQO)Y7TO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O)Y&Sa~P#3zO!U7VO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO)Y7WO~OPmO]$fOb!]Om:}O|#RO!V$gO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r;VO)QYO)T$lO)W$lO)Z0oO)]XO)icO)jdO[)eP~P&?sO!h3qO)Z7[O!T)`a~O!h3qO!T)`a~O)Y7aO)k7cO~P(&eO)Y7eO~PGVO]3{Om(|Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!{!dO!|%SO%v$nO&r#WO(r({O)T3xO)V3|O)W3|O~O)T7iO~O]&dO!T*rO!V7kO!h7lO#v!eO(v4PO~O)Y7aO)k7nO~P)FwO]3{Om(|O!{!dO%v$nO&r#WO(r({O)T3xO)V3|O)W3|O~Oq&gO])dX!T)dX!V)dX!h)dX#v)dX(v)dX)Y)dX)k)dX[)dX~O)Y7aO~O!T(RO!l7tO(v(QO])Oie)Oim)Ois)Oit)Oiu)Oiv)Oiw)Oix)Oiy)Oiz)Oi!O)Oi!V)Oi!r)Oi!s)Oi!t)Oi!u)Oi!v)Oi!x)Oi!{)Oi%v)Oi&r)Oi&s)Oi(r)Oi)T)Oi)V)Oi)W)Oi)Y)Oi[)Oi!X)Oi!Y)Oi![)Oi!^)Oi!_)Oi!a)Oi!b)Oi!e)Oi!f)Oi!h)Oi(u)Oi(w)Oi(x)Oi)U)Oi)X)Oi)Z)Oi!g)Oi)k)Oi!W)OiQ)Oi!d)Oi!U)Oi#v)Oi~O(r%oO!U(fX!h(fX~O!h4YO!U*Ra~Oq&gO]*Qae*Qam*Qas*Qat*Qau*Qav*Qaw*Qax*Qay*Qaz*Qa!O*Qa!T*Qa!V*Qa!r*Qa!s*Qa!t*Qa!u*Qa!v*Qa!x*Qa!{*Qa%v*Qa&r*Qa&s*Qa(r*Qa)T*Qa)V*Qa)W*Qa)Y*Qa[*Qa!X*Qa!Y*Qa![*Qa!^*Qa!_*Qa!a*Qa!b*Qa!e*Qa!f*Qa!h*Qa(u*Qa(w*Qa(x*Qa)U*Qa)X*Qa)Z*Qa!g*Qa)k*Qa!W*QaQ*Qa!d*Qa(v*Qa!U*Qa#v*Qa~O!T([O]&kqe&kqm&kqs&kqt&kqu&kqv&kqw&kqx&kqy&kqz&kq!O&kq!V&kq!r&kq!s&kq!t&kq!u&kq!v&kq!x&kq!{&kq%v&kq&r&kq&s&kq(r&kq)T&kq)V&kq)W&kq)Y&kq[&kq!X&kq!Y&kq![&kq!^&kq!_&kq!a&kq!b&kq!e&kq!f&kq!h&kq(u&kq(w&kq(x&kq)U&kq)X&kq)Z&kq!g&kq)k&kq!W&kqQ&kq!d&kq(v&kq!U&kq#v&kq~OPmOb%ROm:{O!T$XO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)]XO)icO)jdO~O]*Vi!V*Vi!X*Vi!Y*Vi![*Vi!^*Vi!_*Vi!a*Vi!b*Vi!e*Vi!f*Vi!h*Vi(u*Vi(w*Vi(x*Vi)T*Vi)U*Vi)V*Vi)W*Vi)X*Vi)Y*Vi)Z*Vi!g*Vi)k*Vi[*Vi!W*Vi(v*Vi!U*ViQ*Vi!d*Vi~P*&WO[7yO~O!W7zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!h'^q)Y'^q!g'^q)k'^q['^q!W'^q(v'^q!U'^qQ'^q!d'^q~P#3zO!h7{O[*ZX~O[7}O~O*X8OO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!h_y)Y_y!g_y)k_y[_y!W_y(v_y!U_yQ_y!d_y~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O[(ha!h(ha~P#3zO]$OO!T$XO!V'Zy!X'Zy!Y'Zy!['Zy!^'Zy!_'Zy!a'Zy!b'Zy!e'Zy!f'Zy!h'Zy(u'Zy(w'Zy(x'Zy)T'Zy)U'Zy)V'Zy)W'Zy)X'Zy)Y'Zy)Z'Zy!g'Zy)k'Zy['Zy!W'Zy(v'Zy!U'ZyQ'Zy!d'Zy~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!h'^y)Y'^y!g'^y)k'^y['^y!W'^y(v'^y!U'^yQ'^y!d'^y~P#3zO]&dO!V+lO!T%uy#v%uy)Y%uy)k%uy~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!U(Ua!h(Ua~P#3zO!W4yO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!U#}i!h#}i~P#3zO!U8QO~P&6yO!W8QO~P&6yO[8QO~P&6yO[8SO~P&6yO]&dO!V&cO[#Qy!T#Qy!h#Qy#v#Qy)Y#Qy)k#QyQ#Qy!d#Qy(v#Qy~O]&dO!V+lO[rqQrq!drq!hrq)Zrq)Yrq~O]&dOQ#Pi!d#Pi!h#Pi[#Pi~O!V+lO~P*9jOQ#nX!d#nX!h#nX[#nX~P(DjO!V&cO~P*9jOQ(OX](OXe'qXm'qXs(OXt(OXu(OXv(OXw(OXx(OXy(OXz(OX!V(OX!d(OX!h(OX!{'qX%v'qX(r'qX)T(OX)V(OX)W(OX[(OX~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}OQ#_i!d#_i!h#_i[#_i~P#3zO&r#WO&s$xOQ#fi!d#fi!h#fi~O(r-VO)Z1ZO)k1YOQ#`X!d#`X!h#`X~O!W8XO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!W8XO~P!(zO!T#qi!x#qi#v#qi(v#qi)k#qi[#qi!h#qi)Y#qiQ#qi!d#qi)Z#qi~O]&dO!V+lO~P*?fO]&ZO!V&XO&r#WO&s$xO)T&WO)V&[O)W&[O~P*?fO[8ZO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!h8[O[)pX~O[8^O~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}OQ*UX!d*UX!h*UX~P#3zO)Z8aOQ*TX!d*TX!h*TX~O)Y8cO~O[$bi!h#{a)Y#{a~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y8fO)Z#}O~P#3zO[8hO~P!(zO[8hO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO[8hO~O]&dO!V&cO(v8nO~O)Y8oO~O]&dO!V2vO!h%Oi)Y%Oi[%Oi~O!W8rO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!W8rO)T8tO~P$%pO!W8rO~P!(zO]&dO!V2vO!h(Ya)Y(Ya~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y8uO)Z#}O~P#3zO)Y2jO~P!(zO)Y8uO~OP%pO[8vO(pQO~O[8vO~O)Y8wO~P%%eO#T8zO(x.QO)Y8xO~O!h3qO!T)`i~O)Z9OO!T'wa!h'wa~O)Y9QO)k9SO~P)FwO)Y9QO~O)Y9QO)k9WO~P(&eOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O~P)GgO]&dO!V7kO!T!ya!h!ya#v!ya(v!ya)Y!ya)k!ya[!ya~O!W9_O)T9`O~P$%pO!T$XO!h7lO(v4PO)Y9QO)k9WO~O!T$XO~P#EfO[9cO]&dO!V7kO~O]&dO!V7kO!T&aa!h&aa#v&aa(v&aa)Y&aa)k&aa[&aa~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O)Y&ba~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y9QO)Z#}O~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!U&oi!h&oi~P#3zO!V/OO]']i!T']i!X']i!Y']i![']i!^']i!_']i!a']i!b']i!e']i!f']i!h']i(u']i(w']i(x']i)T']i)U']i)V']i)W']i)X']i)Y']i)Z']i!g']i)k']i[']i!W']i(v']i!U']iQ']i!d']i~O(r%oO)Z9fO~O!h7{O[*Za~O[9hO~P&6yO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!U(Ua)Y#Zi~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}OQ#_q!d#_q!h#_q[#_q~P#3zO&r#WO&s$xOQ#fq!d#fq!h#fq~O)k5kOQ#`a!d#`a!h#`a~O]&dO!V+lO!T#qq!x#qq#v#qq(v#qq)k#qq[#qq!h#qq)Y#qqQ#qq!d#qq)Z#qq~O!h8[O[)pa~O)V5}O]&Vi!T&Vi!V&Vi)T&Vi)U&Vi)W&Vis&Vit&Viu&Viv&Viw&Vix&Viy&Viz&Vi!l&Vi!x&Vi#T&Vi#V&Vi#p&Vi#v&Vi(v&Vi(x&Vi)k&Vib&Vie&Vim&Vi|&Vi!O&Vi!o&Vi!r&Vi!s&Vi!t&Vi!u&Vi!v&Vi!{&Vi#a&Vi#b&Vi#i&Vi#t&Vi${&Vi%c&Vi%e&Vi%k&Vi%l&Vi%o&Vi%v&Vi&m&Vi&r&Vi&s&Vi(r&Vi)Q&Vi)Y&Vi[&Vi!h&ViQ&Vi!d&Vi~O)Y9kO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O[$bq!h#{i)Y#{i~P#3zO[9mO~P!(zO[9mO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO[9mO~O]&dO!V&cO(v9pO~O[9qO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO[9qO~O]&dO!V2vO!h%Oq)Y%Oq[%Oq~O!W9uO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!W9uO~P!(zO)Y6gO~P!(zO)Y9vO~O)Y9wO~O(x.QO)Y9wO~O!h3qO!T)`q~O)Z9yO!T'wi!h'wi~O!T$XO!h7lO(v4PO)Y9zO)k9|O~O)Y9zO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y9zO)Z#}O~P#3zO)Y9zO)k:PO~P)FwO]&dO!V7kO!T!yi!h!yi#v!yi(v!yi)Y!yi)k!yi[!yi~O!W:TO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!W:TO)T:VO~P$%pO!W:TO~P!(zO]&dO!V7kO!T(da!h(da(v(da)Y(da)k(da~O[:XO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO[:XO~O[:^O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO[:^O~O]&dO!V2vO!h%Oy)Y%Oy[%Oy~O)Y:_O~O)Y:`O~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y:`O)Z#}O~P#3zO!T$XO!h7lO(v4PO)Y:`O)k:cO~O]&dO!V7kO!T!yq!h!yq#v!yq(v!yq)Y!yq)k!yq[!yq~O!W:eO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!W:eO~P!(zO[:gO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO[:gO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y:iO)Z#}O~P#3zO)Y:iO~O]&dO!V7kO!T!yy!h!yy#v!yy(v!yy)Y!yy)k!yy[!yy~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y:mO)Z#}O~P#3zO)Y:mO~O]ZXmhXqZXqjX!TjX!VZX!XZX!YZX![ZX!^ZX!_ZX!aZX!bZX!eZX!fZX!gZX!hZX(uZX(v$]X(wZX(xZX)TZX)UZX)VZX)WZX)XZX)YZX)ZZX)kZX~O]%WXmnXqoXq%WX!ToX!V%WX!X%WX!Y%WX![%WX!^%WX!_%WX!a%WX!b%WX!e%WX!f%WX!gnX!h%WX(u%WX(w%WX(x%WX)T%WX)U%WX)V%WX)W%WX)X%WX)Z%WX)knX[%WXQ%WX!d%WX~O)Y%WX!W%WX(v%WX!U%WX~P+GrO]oX]%WXeoXmnXqoXq%WXsoXtoXuoXvoXwoXxoXyoXzoX!OoX!VoX!V%WX!roX!soX!toX!uoX!voX!xoX!{oX%voX&roX&soX(roX)ToX)VoX)WoX[oX[%WX!hoX)ZoX~O)YoX)koX~P+JSO]%WXmnXqoXq%WX!V%WX!h%WXQ%WX!d%WX[%WX~O!T%WX#v%WX)Y%WX)k%WX(v%WX~P+LmOQoXQ%WX!ToX!X%WX!Y%WX![%WX!^%WX!_%WX!a%WX!b%WX!doX!d%WX!e%WX!f%WX!gnX!h%WX(u%WX(w%WX(x%WX)T%WX)U%WX)V%WX)W%WX)X%WX)Z%WX)knX~P+JSO]oX]%WXmnXqoXq%WXsoXtoXuoXvoXwoXxoXyoXzoX!OoX!V%WX!roX!soX!toX!uoX!voX!xoX!{oX%voX&roX&soX(roX)ToX)VoX)WoX~O!ToX(voX)YoX)koX~P, eOeoX!VoX)Y%WX~P, eOmnXqoX)Y%WX~Oe)pO%Y)qO(y:pO~Oe)pO%Y)qO(y:uO~Oe)pO%Y)qO(y:qO~Oe$SO%Y*UO'[$UO'_$VO(y:pO~Oe$SO%Y*UO'[$UO'_$VO(y:rO~Oe$SO%Y*UO'[$UO'_$VO(y:tO~O[jX]jXsjXtjXujXvjXwjXxjXyjXzjX!VjX&rjX&sjX)TjX)VjX)WjXejX!OjX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX(rjX~P#1jO]ZXmhXqZXqjX!VZX!hZX)YZX)kZX~O!TZX#vZX(vZX~P,'{OmhXqjX)QjX)YZX)kjX~O]ZX]jXejXmhXqZXqjXsjXtjXujXvjXwjXxjXyjXzjX!OjX!VZX!VjX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX&rjX&sjX(rjX)TjX)VjX)WjX[ZX[jX!hjX)ZjX)kjX~O)YZX~P,)VO]ZX]jXmhXqZXqjXsjXtjXujXvjXwjXxjXyjXzjX!TjX!VZX!VjX!XZX!YZX![ZX!^ZX!_ZX!aZX!bZX!eZX!fZX!gZX!hZX!hjX&rjX&sjX(uZX(wZX(xZX)TZX)TjX)UZX)VZX)VjX)WZX)WjX)XZX)ZZX)ZjX)kZX~OQZXQjX!dZX!djX~P,+pO]jXejXsjXtjXujXvjXwjXxjXyjXzjX!OjX!VjX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX&rjX&sjX(rjX)TjX)VjX)WjX~P#1jO]ZX]jXejXmhXqZXqjXsjXtjXujXvjXwjXxjXyjXzjX!OjX!VZX!VjX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX&rjX&sjX(rjX)TjX)VjX)WjX~O)YjX~P,0rO[ZX[jXejX!OjX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX(rjX)kjX~P,+pO]ZX]jXmhXqZXqjXsjXtjXujXvjXwjXxjXyjXzjX!OjX!TjX!VZX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX&rjX&sjX(rjX(vjX)TjX)VjX)WjX)YjX)kjX~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O~PBUOe$SO%Y*UO(y:pO~Oe$SO%Y*UO(y:qO~Oe$SO%Y*UO(y:wO~Oe$SO%Y*UO(y:vO~O]%iOe!POm%cOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V%lO!{!dO!|%SO%v$nO(r$yO)T;bO)V;cO)W;cO~O]%iOe!POm%cO!V%lO!{!dO%v$nO(r$yO)T;bO)V;cO)W;cO~Oe$SO%Y$TO(y:qO~Oe$SO%Y$TO(y:uO~Om:zO~Om:yO~O]dXmhXqjX!TdX~Oe)pO%Y*UO(y:pO~Oe)pO%Y*UO(y:qO~Oe)pO%Y*UO(y:rO~Oe)pO%Y*UO(y:sO~Oe)pO%Y*UO(y:tO~Oe)pO%Y*UO(y:vO~Oe)pO%Y*UO(y:wO~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O~P,9OO](}Xs(}Xt(}Xu(}Xv(}Xw(}Xx(}Xy(}Xz(}X!O(}X!r(}X!s(}X!t(}X!u(}X!v(}X!x(}X!{(}X%v(}X&r(}X&s(}X(r(}X)T(}X)V(}X)W(}X)k(}X~Om:yO!T(}X(v(}X)Y(}X~P,<}O]&wXmnXqoX!T&wX~Oe4lO%Y*UO(y;uO~Om;]O)T;yO)V5bO)W5bO~P(ElOe!POm%cO!{!dO%v$nO(r$yO~O]1TO!V1RO)T0{O)V;zO)W;zOQ#nX!d#nX!h#nX[#nX~P,?yO)T;ZO~Om;iO~Om;jO~Om;kO~Om;mO~Om;nO~Om;oO~Om;mO!T$XOQ(}X!d(}X!h(}X)Z(}X[(}X)k(}X~P$GQOm;kO!T$XO~P$GQOm;iO!g$ZO)k$ZO~Om;kO!g$ZO)k$ZO~Om;mO!g$ZO)k$ZO~Om;jO[(}X!h(}X)Z(}X)k(}X~P$GQOe/_O%Y*UO(y;uO~Om;vO~O)T<ZO~OV'e'h'i'g(p)]!R(rST%Z!Y!['je%[!i'R!f]'f*['k(w!^!_'l'm'l~\",\n  goto: \"%7`*[PPPPPP*]P*`PP.UPP4j7k7k:uP:u>PP>j>|?bFYMY!&^!,tP!3n!4c!5WP!5rPPPPPPPP!6]P!7uP!9W!:pP!:vPPPPPP!:yP!:yPP!:yPP!;VPPPPPP!=X!@oP!@rPP!A`!BTPPPPP!BXP>m!CjPP>m!Eq!Gr!HQ!Ig!KWP!KcP!Kr!Kr# S#$c#%y#)V#,a!Gr#,kPP!Gr#,r#,x#,k#,k#,{P#-P#-n#-n#-n#-n!KWP#.X#.j#1PP#1eP#3QP#3U#3^#4R#4^#6l#6t#6t#3UP#3UP#6{#7RP#7]PP#7x#8g#9X#7xP#9y#:VP#7xP#7xPP#7x#7xP#7xP#7xP#7xP#7xP#7xP#7xP#:Y#7]#:vP#;]P#;r#;r#;r#;r#<P#3UP#<g#Ac#BQPPPPPPPP#BxP#CWP#CWP#Cd#Fq#;RPP#CQ#GTP#Gh#Gs#Gy#Gy#CQ#HoP#3U#3U#3U#3U#3UP!Kr#IZ#Ib#Ib#Ib#If!N|#Ip!N|#It!HQ!HQ!HQ#Iw#Na!HQ>m>m>m$%Y!BT!BT!BT!BT!BT!BT!6]!6]!6]$%mP$'Y$'h!6]$'nPP!6]$)|$*P#Bo$*S:u7k$-Y$/T$0t$2d7kPP7k$4W7kP7k7kP7kP$7^7kP7kPP7k$7jPPPPPPPPP*]P$:r$:x$=a$?g$?m$@T$@_$@j$@y$AP$B_$C^$Ce$Cl$Cr$Cz$DU$D[$Dg$Dm$Dv$EO$EZ$Ea$Ek$Eq$E{$FS$Fc$Fi$FoP$Fu$F}$GU$Gd$IQ$IW$I^$Ie$InPPPPPPPP$It$IxPPPPP%!z$)|%!}%&V%(_PP%(l%(oPPPPPPPPPP%({%*O%*U%*Y%,P%-^%.P%.W%0g%0mPPP%0w%1S%1V%1]%2d%2g%2q%2{%3P%4T%4v%4|#BxP%5g%5w%5z%6[%6h%6l%6r%6x$)|$*P$*P%6{%7OP%7Y%7]R#cP'`mO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gU%pm%q7RQ&n!`Q(k#]d0Q*O/}0O0P0S5O5P5Q5T8RR7R3Ub}Oaewx{!g&T*r&v$j[!W!X!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$f$g$l%^%n&R&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0|1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gS%af0i#d%kgnp|#O$h$}%O%T%e%i%j%x&t'u'v(R*Z*a*c*u+^,m,w-`-q-x.g.n.p0^0z0{1P1T2`2k5b6h;X;Y;Z;a;b;c;p;q;r;s;w;x;y;z<X<Y<ZS%rm!YS&v!h#PQ'^!tQ'h!yQ'i!zQ(k#`Q(l#]Q(m#^Q*y%lQ,X&mQ,^&oQ-T'_Q-e'gQ-l'rS.s([4YQ/g)hQ0f*nQ2R,]Q2Y,dQ3P-fQ4c.}Q4g/UQ5g1OQ6]2UQ7O3QQ8b6[Q9f7{R;[1R$|#hS!]$z%R%U%[&k&l'R'Y'['b'd(b(f(i(x(y)S)T)U)V)W)X)Y)Z)[)])^)_)`)l)r)y+Y+h,P,T,k,v-i-j-}.z/q0a0c0h0j0x1a1z2b2i3S3d3e4d4e4k4n4t4v4z4{5e5q5x6V6f6j6t6{7r7s7u8T8U8d8g8k8s9U9]9l9r9}:U:Z:a:jQ&q!dQ(h#ZQ(t#bQ)k$U[*t%f*X0l2a2h2|Q,_&pQ/P(gQ/T(lQ/[(uS/j)j/QQ0s+RS4r/k/lR8P4s'a![O[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:g'a!VO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gQ)P#lS+R%z0tQ/s)tk4O.h3t3x3{3|7d7f7g7i7l9Y9Z:SQ)R#lk3}.h3t3x3{3|7d7f7g7i7l9Y9Z:Sl)Q#l.h3t3x3{3|7d7f7g7i7l9Y9Z:ST+R%z0t[UOwx!g&T*rW$a[e$f(c#l$q_!f!u!}#R#S#T#U#V#Z$T$U$m%V&V&Z&d&n'`(O(Q(V(_(h)k)q+]+b+c+u+z,Y,l,{-R-p-u.X.Y.`.a.e.r.v1U1Y1g1l1n2m3]3^3_3q3u5k6O6Q7]8[![%dg$h%e%j&t*Z*u+^,m,w-`0{1P2`;X;Y;Z;b;c;p;q;r;s;w;x;z<X<Y<ZY%tnp%x-q.gl(}#l.h3t3x3{3|7d7f7g7i7l9Y9Z:SS;f'u-xU;g(R.n.p&|;|af{|!W!X!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$g$l$}%O%T%^%i%n&R&X&c&z&}'P'j'k'v'z(a(j)m)s*a*c*i*j*m*s+X+Z+i+k+l,Q,S,o,r-h.Q.R.V/O/R/]/d/m/o/t/v0^0i0z0|1R1b1c1m1q1{2d2j2k2v4P4S4X4b5Z5b5f5r6`6d6g6h6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:g;a;yQ;}1Td<O&y'Q'c,x-^-_-b2g2{3OW<P&g*w1}3jQ<Q#O[<R!t'_'g,]2U6[T<^%z0t[VOwx!g&T*rW$b[e$f(cQ$q.v!j$r_!f!u!}#V#Z$T$U$m%V&V&Z&d&n'`(h)k)q+]+b+u,Y,l,{-R-p.e1U1Y1g1l1n2m3u5k8[&^${af{!W!X!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$g$l%^%n&R&X&c&z&}'P'j'k'z(a(j)m)s*i*j*m*s+X+Z+i+k+l,Q,S,o,r-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{2d2j2v4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:g![%dg$h%e%j&t*Z*u+^,m,w-`0{1P2`;X;Y;Z;b;c;p;q;r;s;w;x;z<X<Y<ZY%tnp%x-q.gQ's#O|'}#R#S#T#U(O(Q(V(_+c+z.X.Y.`.a.r3]3^3_3q6O6Q7]l(}#l.h3t3x3{3|7d7f7g7i7l9Y9Z:SS-o'u-xQ3X-uU;t(R.n.pn;||$}%O%T%i'v*a*c0^0z2k5b6h;a;y[<R!t'_'g,]2U6[W<S&g*w1}3jd<T&y'Q'c,x-^-_-b2g2{3OQ<[1TT<^%z0t!Q!UO[ewx!g$f&T&g&y'Q'c(c*r*w,x-^-_-b1}2g2{3O3j!v$u_!f!u!}#O#V#Z$T$U$m%V&V&Z&d&n'`'u(R(h)k)q+]+u,Y,l,{-R-p-x.e.n.p1T1U1Y1g1l1n2m3u5k8[&^%Qaf{!W!X!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$g$l%^%n&R&X&c&z&}'P'j'k'z(a(j)m)s*i*j*m*s+X+Z+i+k+l,Q,S,o,r-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{2d2j2v4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:g$Q%mgnp|#l$h$}%O%T%e%i%j%x%z&t'_'g'v*Z*a*c*u+^,],m,w-`-q.g.h0^0t0z0{1P2U2`2k3t3x3{3|5b6[6h7d7f7g7i7l9Y9Z:S;X;Y;Z;a;b;c;p;q;r;s;w;x;y;z<X<Y<ZQ']!tz(P#R#S#T#U(O(Q(V(_+z.X.Y.`.a.r3]3^3_3q6O6Q7]f-['a-U-W-Z2q2r2t2w6r6s8qQ1X+bQ1[+cQ2l,zQ3Y-uQ4].vQ5m1ZR8W5n!Q!UO[ewx!g$f&T&g&y'Q'c(c*r*w,x-^-_-b1}2g2{3O3j!x$u_!f!u!}#O#V#Z$T$U$m%V&V&Z&d&n'`'u(R(h)k)q+]+b+u,Y,l,{-R-p-x.e.n.p1T1U1Y1g1l1n2m3u5k8[&^%Qaf{!W!X!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$g$l%^%n&R&X&c&z&}'P'j'k'z(a(j)m)s*i*j*m*s+X+Z+i+k+l,Q,S,o,r-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{2d2j2v4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:g$S%mgnp|!t#l$h$}%O%T%e%i%j%x%z&t'_'g'v*Z*a*c*u+^,],m,w-`-q.g.h0^0t0z0{1P2U2`2k3t3x3{3|5b6[6h7d7f7g7i7l9Y9Z:S;X;Y;Z;a;b;c;p;q;r;s;w;x;y;z<X<Y<Z|(P#R#S#T#U(O(Q(V(_+c+z.X.Y.`.a.r3]3^3_3q6O6Q7]Q3Y-uR4].v[WOwx!g&T*rW$c[e$f(c#l$q_!f!u!}#R#S#T#U#V#Z$T$U$m%V&V&Z&d&n'`(O(Q(V(_(h)k)q+]+b+c+u+z,Y,l,{-R-p-u.X.Y.`.a.e.r.v1U1Y1g1l1n2m3]3^3_3q3u5k6O6Q7]8[![%dg$h%e%j&t*Z*u+^,m,w-`0{1P2`;X;Y;Z;b;c;p;q;r;s;w;x;z<X<Y<ZY%tnp%x-q.gl(}#l.h3t3x3{3|7d7f7g7i7l9Y9Z:SS;f'u-xU;g(R.n.pn;||$}%O%T%i'v*a*c0^0z2k5b6h;a;yQ;}1TQ<Q#O[<R!t'_'g,]2U6[&^<Uaf{!W!X!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$g$l%^%n&R&X&c&z&}'P'j'k'z(a(j)m)s*i*j*m*s+X+Z+i+k+l,Q,S,o,r-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{2d2j2v4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gd<V&y'Q'c,x-^-_-b2g2{3OW<W&g*w1}3jT<^%z0tp$QT$`$p%c%s(|:{:|:};];^;_;`;d;e<]o)n$W*V*]/`:x:y:z;i;j;k;l;m;n;o;vp$RT$`$p%c%s(|:{:|:};];^;_;`;d;e<]o)o$W*V*]/`:x:y:z;i;j;k;l;m;n;o;v^&f}!O$j$k%a%k;[d&j!U$u%Q%m'](P1X1[3Y4]V/b)P)Q4OS%Ze$fQ,U&gQ.|(cQ2n-RQ5z1nQ6W1}Q6n2mR9i8[#}!TO[_ewx!f!g!u!}#O#V#Z$T$U$f$m%V&T&V&Z&d&g&n&y'Q'`'c'u(R(c(h)k)q*r*w+]+b+u,Y,l,x,{-R-^-_-b-p-u-x.e.n.p1T1U1Y1g1l1n1}2g2m2{3O3j3u5k8[#[^O[_`wx!f!g!}#O$T$e$m$t$v&T&V&Z&d&n&s&y'Q'c'u(R)q*^*r*w+],Y,l,x,{-^-_-b-p-u-x.e.n.p1T1U1g2g2{3O3j3u_(V#R#S#T+c3]3^3_#}ZO[wx!g!k#R#S#T%n&T&V&Z&d&n&x&y&z&}'P'Q']'c'u'y(O(Q(R(V*r*w+]+c,Y,i,l,r-Q-^-_-b-p-u-x-{.`.e.n.r1T1U1g2d2l2{3O3]3^3_3j6d6k8h9m9q:X:^:gQ$^YR0U*PR*R$^e0Q*O/}0O0P0S5O5P5Q5T8R$f#zS%U%['R'Y'['b'd(i(x(y)S)V)W)X)Y)Z)[)_)`)l)r)y+Y+h,P,T,k,v-i-j-}.z/q0a0c0h0j0x1a1z2b2i3S3d3e4d4e4k4n4t4v4z4{5e5q5x6V6f6j6t6{7r7s7u8T8U8d8g8k8s9U9]9l9r9}:U:Z:a:je0Q*O/}0O0P0S5O5P5Q5T8R'`!YO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:ge0Q*O/}0O0P0S5O5P5Q5T8RR5U0U^(U#R#S#T+c3]3^3_Y.^(O(S(V(W7UU3l.[._.rS7Y3m4WR9d7t^(T#R#S#T+c3]3^3_[.](O(S(U(V(W7UW3k.[.^._.rU7X3l3m4WS8{7Y7tR:W9dT.l(R.nd]Owx!g&T'u(R*r-x.n!v^[_`!f!}#O$T$e$m$t$v&V&Z&d&n&s&y'Q'c)q*^*w+],Y,l,x,{-^-_-b-p-u.e.p1T1U1g2g2{3O3j3uQ%unT1v,O1w!jbOaenpwx{|!g#O$}%O%T%i%x&T'u'v(R*a*c*r-q-x.g.n.p0^0z1T2k5b6h;a;yf-X'a-U-W-Z2q2r2t2w6r6s8qj3y.h3t3x3{3|7d7f7g7i7l9Y9Z:Sr;{g$h%e%j&t*Z*u,m,w-`2`;X;Y;Z;p;r;wi<_+^0{1P;b;c;q;s;x;z<X<Y<Z!O&_y%Y&W&Z&['l)i*e*g+^+f+y/n0_0z0{1P1T1k5b5w;y;zz&bz%P%X%f&e't*X*`,c-y0[0]0l0}2a2h2|5W5c6m8jS'|#Q.Yn+m&Y*h+g+n+q-k/i0`1S1_4u5X5a5v8YQ2X,b^2u-Y2s2y6q6x8p9te7j3z7`7h7p7q9V9X9a:R:dS+_&V1UY+o&Z&d*w1T3jR5t1g#w!POaegnpwx{|!g#O$h$}%O%T%e%i%j%x&T&t'u'v(R*Z*a*c*r*u+^,m,w-`-q-x.g.n.p0^0z0{1P1T2`2k5b6h;X;Y;Z;a;b;c;p;q;r;s;w;x;y;z<X<Y<Z`oOwx!g&T'u*r-x#U!Paeg{|#O$h$}%O%T%e%i%j&t'v*Z*a*c*u+^,m,w-`0^0z0{1P1T2`2k5b6h;X;Y;Z;a;b;c;p;q;r;s;w;x;y;z<X<Y<ZU%wnp-qQ+O%xS.f(R.nT3w.g.pW+s&_+m+t1dV+{&b+|7jQ+y&aU+{&b+|7jQ-x'uT.T'z.V'`![O[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gX1s+z.Y6O6Q'W!VO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/]/d/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gW1s+z.Y6O6QR2f,t!WjO[wx!g!k%n&T&z&}'P'c*r,r-^-_-b2d2{6d6k8h9m9q:X:^:gY%We$f(c1q3jQ'T!nS(z#j5ZQ,n&yQ,y'QS.P'z.VQ2c,oQ6l2jQ6}3OQ8i6gR9n8f'W![O[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/]/d/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gX1s+z.Y6O6Q'ayO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l+z,Q,S,o,r,x-^-_-b-h.Q.R.V.Y/O/]/d/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X5Z5f5r6O6Q6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gQ&ayS'u#O-vR1]+dS+_&V1UR5o1]Q1Q+^R5h1PR1Q+^T+_&V1Uz&]%Y&W&Z&['l)i*e*g+^+f/n0_0z0{1P1T1k5b5w;y;zQ&^yR1o+y!P&]y%Y&W&Z&['l)i*e*g+^+f+y/n0_0z0{1P1T1k5b5w;y;zQ+v&_S+}&b7jS1e+m+tQ1u+|R5s1d!WkO[wx!g!k%n&T&z&}'P'c*r,r-^-_-b2d2{6d6k8h9m9q:X:^:gS%{o.fS&Pq-sQ&`yQ&r!eQ'f!yQ*q%fU*|%w%|3wS+Q%y&OQ+r&^Q,Z&nS,[&o'hQ,s&|S0Y*X,cS0p*}+OQ0r+PQ1p+yS2T,^-gQ5V0[Q5[0qQ5|1oQ6Z2SQ6^2XQ7o3zQ9T7`R:Q9V[uOwx!g&T*rQ,Z&nQ-w'uQ3Z-uR3`-xxlOwx!g!k%n&T&z'P*r,r2d6d6k8h9m9q:X:^:gU$i[&}-_S%{o.fS&Pq-sQ*q%fU*|%w%|3wS+Q%y&OS0Y*X,cS0p*}+OQ0r+PQ5V0[Q5[0qQ7o3zQ9T7`R:Q9VT,`&r,a]uOwx!g&T*r[uOwx!g&T*rQ,Z&nQ,o&yQ,x'QW-a'c-^-b2{Q-w'uQ3Z-uQ3`-xR6|3O[%gg$h,m,w-`2`R0m*u^$YV!U$b${%Q<S<TQ'T!nS)a$O*wS)w$X*rQ)z$ZY*t%f*X0l2h2|Q/P(gS/j)j/QS0b*i4bS0k*s6`Q0s+RQ4R.hQ4o/dS4r/k/lS4w/o5ZQ4|/vQ6a2aU7b3t3z4SQ8P4sQ8l6iY9R7`7c7d7m7nQ9s8nW9{9P9S9V9WQ:[9pU:b9|:O:PR:k:cS)w$X*rT4w/o5ZZ)u$X)v*r/o5ZQ&x!hR'y#PS,h&w'wQ2],fR6_2[xlOwx!g!k%n&T&z'P*r,r2d6d6k8h9m9q:X:^:gV$i[&}-_!XkO[wx!g!k%n&T&z&}'P'c*r,r-^-_-b2d2{6d6k8h9m9q:X:^:g!WhO[wx!g!k%n&T&z&}'P'c*r,r-^-_-b2d2{6d6k8h9m9q:X:^:gR'X!q!WkO[wx!g!k%n&T&z&}'P'c*r,r-^-_-b2d2{6d6k8h9m9q:X:^:gR,o&yQ&z!iQ&|!jQ'P!lR,r&{R,p&yxlOwx!g!k%n&T&z'P*r,r2d6d6k8h9m9q:X:^:gX-a'c-^-b2{[uOwx!g&T*rQ,{'QQ-w'uS.l(R.nR3`-x[uOwx!g&T*rQ,{'QW-a'c-^-b2{T.l(R.ng-['a-U-W-Z2q2r2t2w6r6s8qylOwx!g!k%n&T&z'P*r,r2d6d6k8h9m9q:X:^:gb!OOaewx{!g&T*r&|$k[f!W!X!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$f$g$l%^%n&R&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:g#d%kgnp|#O$h$}%O%T%e%i%j%x&t'u'v(R*Z*a*c*u+^,m,w-`-q-x.g.n.p0^0z0{1P1T2`2k5b6h;X;Y;Z;a;b;c;p;q;r;s;w;x;y;z<X<Y<ZQ'^!tQ-T'_Q-e'gQ2R,]Q6]2UR8b6[j$ST$`%c%s:{:|:};];^;_;`;d;ei)p$W*V:x:y:z;i;j;k;l;m;n;oj$ST$`%c%s:{:|:};];^;_;`;d;eh)p$W*V:x:y:z;i;j;k;l;m;n;oS/_(|<]V4l/`/a;v[uOwx!g&T*rQ-w'uR3`-x[uOwx!g&T*rT.l(R.n'`!YO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gR7S3U[uOwx!g&T*rQ-w'uS.l(R.nR3`-x[pOwx!g&T*rQ%xnS-q'u-xT.g(R.nS%|o.fS*}%w3wR0q+OQ+S%zR5^0tS%{o.fS&Pq-sU*|%w%|3wS+Q%y&OS0p*}+OQ0r+PQ5[0qQ7o3zQ9T7`R:Q9V`qOwx!g&T(R*r.nS%yn-qU&Op.g.pQ+P%xT-s'u-xS'{#Q.YR.Z'|T.S'z.VS.T'z.VQ8y7VR9x8zT6O1r8`R6Q1r#d!Pgnp|#O$h$}%O%T%e%i%j%x&t'u'v(R*Z*a*c*u+^,m,w-`-q-x.g.n.p0^0z0{1P1T2`2k5b6h;X;Y;Z;a;b;c;p;q;r;s;w;x;y;z<X<Y<Zb!QOaewx{!g&T*r&}![[f!W!X!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$f$g$l%^%n&R&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:g#d!Pgnp|#O$h$}%O%T%e%i%j%x&t'u'v(R*Z*a*c*u+^,m,w-`-q-x.g.n.p0^0z0{1P1T2`2k5b6h;X;Y;Z;a;b;c;p;q;r;s;w;x;y;z<X<Y<Zb!QOaewx{!g&T*r&|![[f!W!X!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$f$g$l%^%n&R&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gk3}.h3t3x3{3|7d7f7g7i7l9Y9Z:SQ4R.hS7b3t3zU9R7`7d7mS9{9P9VR:b:O#|!TO[_ewx!f!g!u!}#O#V#Z$T$U$f$m%V&T&V&Z&d&g&n&y'Q'`'c'u(R(c(h)k)q*r*w+]+b+u,Y,l,x,{-R-^-_-b-p-u-x.e.n.p1T1U1Y1g1l1n1}2g2m2{3O3j3u5k8[R4^.vQ(^#US.w(](_S4_.x.yR7x4`Q.t([R7v4Y#|!TO[_ewx!f!g!u!}#O#V#Z$T$U$f$m%V&T&V&Z&d&g&n&y'Q'`'c'u(R(c(h)k)q*r*w+]+b+u,Y,l,x,{-R-^-_-b-p-u-x.e.n.p1T1U1Y1g1l1n1}2g2m2{3O3j3u5k8[p$x`$e$t%Y&s'a(`(g)j*e-U/l1k5l5w8Vq)O#l%z.h0t3t3x3{3|7d7f7g7i7l9Y9Z:SR,V&gR6X1}'X!VO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/]/d/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:g$q#sS%U%['R'Y'['b'd(b(f(i(x(y)S)T)V)W)X)Y)Z)[)])^)_)`)l)r)y+Y+h,P,T,k,v-i-j-}.z/q0a0c0h0j0x1a1z2b2i3S3d3e4d4e4k4n4t4v4z4{5e5q5x6V6f6j6t6{7r7s7u8T8U8d8g8k8s9U9]9l9r9}:U:Z:a:j$]#tS%U%['R'Y'['b'd(i(x(y)S)W)_)`)l)r)y+Y+h,P,T,k,v-i-j-}.z/q0a0c0h0j0x1a1z2b2i3S3d3e4d4e4k4n4t4v4z4{5e5q5x6V6f6j6t6{7r7s7u8T8U8d8g8k8s9U9]9l9r9}:U:Z:a:j$Z#uS%U%['R'Y'['b'd(i(x(y)S)_)`)l)r)y+Y+h,P,T,k,v-i-j-}.z/q0a0c0h0j0x1a1z2b2i3S3d3e4d4e4k4n4t4v4z4{5e5q5x6V6f6j6t6{7r7s7u8T8U8d8g8k8s9U9]9l9r9}:U:Z:a:j$c#xS%U%['R'Y'['b'd(i(x(y)S)V)W)X)Y)_)`)l)r)y+Y+h,P,T,k,v-i-j-}.z/q0a0c0h0j0x1a1z2b2i3S3d3e4d4e4k4n4t4v4z4{5e5q5x6V6f6j6t6{7r7s7u8T8U8d8g8k8s9U9]9l9r9}:U:Z:a:j'X![O[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/]/d/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gQ/Q(gQ/k)jQ4s/lR9e7z']![O[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gQ#eQR(v#eU$}a;a;yb%Ve$f&g(c-R1n1}2m8[Q'`!u!Q*_$}%V'`*a*g+i,Q0^0_1c2q6r6u7f8q9Y9^:S;X;p;q;w;x<XS*a%O%TQ*g%YS+i&X1RQ,Q&cQ0^*cQ0_*eQ1c+lQ2q-WS6r2r2tQ6u2vQ7f3xQ8q6sS9Y7g7iQ9^7kQ:S9ZQ;X%eS;p;Y;ZS;q<Y<ZQ;w;rQ;x;sT<X0{;b[[Owx!g&T*rl$d[&}(O+],Y,i,l-Q-_-p-{.`.e.rl&}!k%n&z'P,r2d6d6k8h9m9q:X:^:g^(O#R#S#T+c3]3^3_`+]&V&Z&d*w1T1U1g3jS,Y&n-uQ,i&xU,l&y'Q3OS-Q']2lW-_'c-^-b2{S-p'u-xQ-{'yQ.`(QS.e(R.nR.r(VQ)}$]R/y)}Q0S*OQ5O/}Q5P0OQ5Q0PY5R0S5O5P5Q8RR8R5TQ*Q$^S0V*Q0WR0W*RS.a(Q.`S3o.a7]R7]3qQ3r.bS7Z3p3sU7_3r7Z8|R8|7[Q.n(RR4T.n!|_O[wx!f!g!}#O$T$m&T&V&Z&d&n&y'Q'c'u(R)q*r*w+],Y,l,x,{-^-_-b-p-u-x.e.n.p1T1U1g2g2{3O3j3uU$s_$v*^U$v`$e&sR*^$tU%Oa;a;yd*b%O*c2r6s7g9Z;Y;r;s<YQ*c%TQ2r-WQ6s2tQ7g3xQ9Z7iQ;Y%eQ;r;ZQ;s<ZT<Y0{;bS+|&b7jR1t+|S*k%[/qR0d*kQ1V+`R5j1VU+f&W0{;yR1^+fQ+t&_Q1d+mT1j+t1dQ8]5zR9j8]QwOS&Sw&TT&Tx*rQ,a&rR2W,aW)v$X*r/o5ZR/u)vU/p)r)w0hR4x/p[*v%f%g*X2a2h2|R0n*vQ,e&vR2Z,eQ-b'cQ2{-^T2}-b2{Q2x-YR6y2xQ-g'hQ2S,^T3R-g2SS%qm7RR*{%qdnOwx!g&T'u(R*r-x.nR%vnQ0u+SR5_0uQ.V'zR3g.VQ1w,OR6R1wU*o%a*y;[R0g*oS1h+o0oR5u1hQ7m3zQ9P7`U9b7m9P:OR:O9V$O!SO[_ewx!f!g!u!}#O#V#Z$T$U$f$m%V&T&V&Z&d&g&n&y'Q'`'c'u(R(c(h)k)q*r*w+]+b+u,Y,l,x,{-R-^-_-b-p-u-x.e.n.p.v1T1U1Y1g1l1n1}2g2m2{3O3j3u5k8[R&h!SQ4Z.tR7w4ZQ2O,VR6Y2OS/e)`)aR4p/eW(p#a(k(l/TR/X(pQ7|4gR9g7|T)b$O*w!USO[wx!g!k%n&T&z&}'P'c,r-^-_-b2d2{6d6k8h9m9q:X:^:gj$za{$l%^+k,S1b1{5r6w8t9`:VY%Ue$f(c1q3jY%[f$g(j)m*mQ&k!WQ&l!XQ'R!nQ'Y!rQ'[!sQ'b!vQ'd!xQ(b#XQ(f#YS(i#[+ZQ(x#gQ(y#jQ)S#mQ)T#rQ)U#sQ)V#tQ)W#uQ)X#vQ)Y#wQ)Z#xQ)[#yQ)]#zQ)^#{Q)_#|S)`$O*wQ)l$VQ)r$XQ)y$ZQ+Y&RS+h&X1RQ,P&cQ,T&gQ,k&yQ,v'QQ-i'jQ-j'kS-}'z.VQ.z(aS/q)s0iS0a*i4bQ0c*jQ0h*rQ0j*sQ0x+XS1a+i+lQ1z,QQ2b,oS2i,x6|Q3S-hQ3d.QQ3e.RQ4d/OQ4e/RQ4k/]Q4n/dQ4t/mQ4v/oQ4z/tQ4{/vQ5e0|Q5q1cQ5x1mQ6V1}S6f2g8uQ6j2jQ6t2vQ6{3OQ7r4PQ7s4SQ7u4XQ8T5ZQ8U5fQ8d6`Q8g6gQ8k6iQ8s6uS9U7c7nQ9]7kQ9l8fQ9r8nS9}9S9WQ:U9^Q:Z9pS:a9|:PR:j:cR,W&gd]Owx!g&T'u(R*r-x.n!v^[_`!f!}#O$T$e$m$t$v&V&Z&d&n&s&y'Q'c)q*^*w+],Y,l,x,{-^-_-b-p-u.e.p1T1U1g2g2{3O3j3u#r$|ae!u$f$}%O%T%V%Y%e&X&c&g'`(c*a*c*e*g+i+l,Q-R-W0^0_1R1c1n1}2m2q2r2t2v3x6r6s6u7f7g7i7k8[8q9Y9Z9^:S;X;Y;Z;a;b;p;q;r;s;w;x<X<Y<ZQ%unS+e&W+fW+s&_+m+t1dU+{&b+|7jQ1l+uT5d0{;y``Owx!g&T'u*r-xS$e[-pQ$t_b%Ye$f&g(c-R1n1}2m8[!h&s!f!}#O$T$m&V&Z&d&n&y'Q'c(R)q*w+],Y,l,x,{-^-_-b-u.e.n.p1T1U1g2g2{3O3j3uQ'a!uS(`#V+bQ(g#ZS)j$U(hQ*e%VQ-U'`Q/l)kQ1k+uQ5l1YQ5w1lR8V5kS(X#R3^S(Y#S3_V(Z#T+c3]R$_Ye0R*O/}0O0P0S5O5P5Q5T8RW(S#R#S#T+cQ(]#US.[(O(VS.b(Q.`Q.y(_W1s+z.Y6O6QQ3[-uQ3i.XQ3p.aQ4W.rU7U3]3^3_Q7^3qR8}7]Q.c(QR3n.`T.m(R.ndgOwx!g&T&n'u*r-u-xU$h[,Y-pQ&t!fQ'l!}Q'v#OQ)i$TQ*Z$m`+^&V&Z&d*w1T1U1g3jQ,m&yQ,w'QY-`'c-^-b2{3OS.h(R.nQ/n)qQ0z+]S2`,l-_S2k,x,{S3t.e.pQ6h2gR7d3ud]Owx!g&T'u(R*r-x.n!v^[_`!f!}#O$T$e$m$t$v&V&Z&d&n&s&y'Q'c)q*^*w+],Y,l,x,{-^-_-b-p-u.e.p1T1U1g2g2{3O3j3uR%unQ3z.hQ7`3tQ7h3xQ7p3{Q7q3|Q9V7dU9X7f7g7iQ9a7lS:R9Y9ZR:d:SZ+p&Z&d*w1T3jpzOnpwx!g%x&T'u(R*r-q-x.g.n.p[%Pa%e0{;a;b;yU%Xe%i1TQ%fg^&e{|%j1P5b;c;zQ't#OQ*X$hb*`$}%O%T;X;Y;Z<X<Y<ZQ,c&tQ-y'vQ0[*Z[0]*a*c;p;q;r;sQ0l*uQ0}+^Q2a,mQ2h,wS2|-`2`U5W0^;w;xQ5c0zQ6m2kR8j6hQ,O&bR9[7jS1r+z.YQ8_6OR8`6Q[%_f$g(j)m)s0iR0e*mR+a&VQ+`&VR5i1US&Yy+yQ*h%YU+g&W0{;yS+n&Z1TW+q&[1P5b;zQ-k'lQ/i)iS0`*e*gQ1S+^Q1_+fQ4u/nQ5X0_Q5a0zQ5v1kR8Y5wR5{1nYvOwx&T*rR&u!gW%hg,m,w-`T*Y$h2`T)x$X*r[uOwx!g&T*rQ'O!kQ*z%nQ,q&zQ,u'PQ2e,rQ6c2dQ8e6dQ8m6kQ9o8hQ:Y9mQ:]9qQ:f:XQ:h:^R:l:gxlOwx!g!k%n&T&z'P*r,r2d6d6k8h9m9q:X:^:gU$i[&}-_X-a'c-^-b2{Q-]'aR2p-US-Y'a-UQ2s-WQ2y-ZU6q2q2r2tQ6x2wS8p6r6sR9t8q[rOwx!g&T*rS-r'u-xT.i(R.nR+T%z[sOwx!g&T*rS-t'u-xT.j(R.n[tOwx!g&T*rT.k(R.nT.U'z.VX%bf%l0i1RQ.x(]R4`.yR.u([R(e#XQ(s#aS/S(k(lR4f/TR/W(mR4h/U\",\n  nodeNames: \"⚠ RawString > MacroName LineComment BlockComment PreprocDirective #include String EscapeSequence SystemLibString Identifier ) ( ArgumentList ConditionalExpression AssignmentExpression CallExpression PrimitiveType FieldExpression FieldIdentifier DestructorName TemplateMethod ScopedFieldIdentifier NamespaceIdentifier TemplateType TypeIdentifier ScopedTypeIdentifier ScopedNamespaceIdentifier :: NamespaceIdentifier TypeIdentifier TemplateArgumentList < TypeDescriptor const volatile restrict _Atomic mutable constexpr constinit consteval StructSpecifier struct MsDeclspecModifier __declspec Attribute AttributeName Identifier AttributeArgs { } [ ] UpdateOp ArithOp ArithOp ArithOp LogicOp BitOp BitOp BitOp CompareOp CompareOp CompareOp > CompareOp BitOp UpdateOp , Number CharLiteral AttributeArgs VirtualSpecifier BaseClassClause Access virtual FieldDeclarationList FieldDeclaration extern static register inline thread_local AttributeSpecifier __attribute__ PointerDeclarator MsBasedModifier __based MsPointerModifier FunctionDeclarator ParameterList ParameterDeclaration PointerDeclarator FunctionDeclarator Noexcept noexcept RequiresClause requires True False ParenthesizedExpression CommaExpression LambdaExpression LambdaCaptureSpecifier TemplateParameterList OptionalParameterDeclaration TypeParameterDeclaration typename class VariadicParameterDeclaration VariadicDeclarator ReferenceDeclarator OptionalTypeParameterDeclaration VariadicTypeParameterDeclaration TemplateTemplateParameterDeclaration template AbstractFunctionDeclarator AbstractPointerDeclarator AbstractArrayDeclarator AbstractParenthesizedDeclarator AbstractReferenceDeclarator ThrowSpecifier throw TrailingReturnType CompoundStatement FunctionDefinition MsCallModifier TryStatement try CatchClause catch LinkageSpecification Declaration InitDeclarator InitializerList InitializerPair SubscriptDesignator FieldDesignator ExportDeclaration export ImportDeclaration import ModuleName PartitionName HeaderName CaseStatement case default LabeledStatement StatementIdentifier ExpressionStatement IfStatement if ConditionClause Declaration else SwitchStatement switch DoStatement do while WhileStatement ForStatement for ReturnStatement return BreakStatement break ContinueStatement continue GotoStatement goto CoReturnStatement co_return CoYieldStatement co_yield AttributeStatement ForRangeLoop AliasDeclaration using TypeDefinition typedef PointerDeclarator FunctionDeclarator ArrayDeclarator ParenthesizedDeclarator ThrowStatement NamespaceDefinition namespace ScopedIdentifier Identifier OperatorName operator ArithOp BitOp CompareOp LogicOp new delete co_await ConceptDefinition concept UsingDeclaration enum StaticAssertDeclaration static_assert ConcatenatedString TemplateDeclaration FriendDeclaration friend union FunctionDefinition ExplicitFunctionSpecifier explicit FieldInitializerList FieldInitializer DefaultMethodClause DeleteMethodClause FunctionDefinition OperatorCast operator TemplateInstantiation FunctionDefinition FunctionDefinition Declaration ModuleDeclaration module RequiresExpression RequirementList SimpleRequirement TypeRequirement CompoundRequirement ReturnTypeRequirement ConstraintConjuction LogicOp ConstraintDisjunction LogicOp ArrayDeclarator ParenthesizedDeclarator ReferenceDeclarator TemplateFunction OperatorName StructuredBindingDeclarator ArrayDeclarator ParenthesizedDeclarator ReferenceDeclarator BitfieldClause FunctionDefinition FunctionDefinition Declaration FunctionDefinition Declaration AccessSpecifier UnionSpecifier ClassSpecifier EnumSpecifier SizedTypeSpecifier TypeSize EnumeratorList Enumerator DependentType Decltype decltype auto PlaceholderTypeSpecifier ParameterPackExpansion ParameterPackExpansion FieldIdentifier PointerExpression SubscriptExpression BinaryExpression ArithOp LogicOp LogicOp BitOp UnaryExpression LogicOp BitOp UpdateExpression CastExpression SizeofExpression sizeof CoAwaitExpression CompoundLiteralExpression NULL NewExpression new NewDeclarator DeleteExpression delete ParameterPackExpansion nullptr this UserDefinedLiteral ParamPack #define PreprocArg #if #ifdef #ifndef #else #endif #elif PreprocDirectiveName Macro Program\",\n  maxTerm: 426,\n  nodeProps: [\n    [\"group\", -35,1,8,11,15,16,17,19,71,72,100,101,102,104,191,208,229,242,243,270,271,272,277,280,281,282,284,285,286,287,290,292,293,294,295,296,\"Expression\",-13,18,25,26,27,43,255,256,257,258,262,263,265,266,\"Type\",-19,126,129,147,150,152,153,158,160,163,164,166,168,170,172,174,176,178,179,188,\"Statement\"],\n    [\"isolate\", -4,4,5,8,10,\"\"],\n    [\"openedBy\", 12,\"(\",52,\"{\",54,\"[\"],\n    [\"closedBy\", 13,\")\",51,\"}\",53,\"]\"]\n  ],\n  propSources: [cppHighlighting],\n  skippedNodes: [0,3,4,5,6,7,10,297,298,299,300,301,302,303,304,305,306,347,348],\n  repeatNodeCount: 41,\n  tokenData: \"&*r7ZR!UOX$eXY({YZ.gZ]$e]^+P^p$epq({qr.}rs0}st2ktu$euv!7dvw!9bwx!;exy!<Yyz!=Tz{!>O{|!?R|}!AV}!O!BQ!O!P!DX!P!Q#+y!Q!R#Az!R![$(x![!]$Ag!]!^$Cc!^!_$D^!_!`%1W!`!a%2X!a!b%5_!b!c$e!c!n%6Y!n!o%7q!o!w%6Y!w!x%7q!x!}%6Y!}#O%:n#O#P%<g#P#Q%Kz#Q#R%Ms#R#S%6Y#S#T$e#T#i%6Y#i#j%Nv#j#o%6Y#o#p&!e#p#q&#`#q#r&%f#r#s&&a#s;'S$e;'S;=`(u<%lO$e&t$nY)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e&r%eW)^W'f&jOY%^Zw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^&j&SU'f&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&j&kX'f&jOY%}YZ%}Z]%}]^'W^#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&j']V'f&jOY%}YZ%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&j'uP;=`<%l%}&r'{P;=`<%l%^&l(VW(qQ'f&jOY(OZr(Ors%}s#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O&l(rP;=`<%l(O&t(xP;=`<%l$e7Z)Y`)^W(qQ(n.o'f&j*[)`OX$eXY({YZ*[Z]$e]^+P^p$epq({qr$ers%^sw$ewx(Ox#O$e#O#P,^#P;'S$e;'S;=`(u<%lO$e.o*aT(n.oXY*[YZ*[]^*[pq*[#O#P*p.o*sQYZ*[]^*y.o*|PYZ*[4e+[`)^W(qQ(n.o'f&jOX$eXY+PYZ*[Z]$e]^+P^p$epq+Pqr$ers%^sw$ewx(Ox#O$e#O#P,^#P;'S$e;'S;=`(u<%lO$e4Z,cX'f&jOY%}YZ-OZ]%}]^-{^#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}4Z-V[(n.o'f&jOX%}XY-OYZ*[Z]%}]^-O^p%}pq-Oq#O%}#O#P,^#P;'S%};'S;=`'r<%lO%}4Z.QV'f&jOY%}YZ-OZ#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}7P.nT*X)`(n.oXY*[YZ*[]^*[pq*[#O#P*p3o/[[%^!b'QP)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`0Q!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o0_Y%]!b!a,g)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e6e1YY)^W(oQ(p/]'f&jOY%^Zr%^rs1xsw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^(U2RW)y!b)^W'f&jOY%^Zw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^4e2tf)^W(qQ'f&jOX$eXY2kZp$epq2kqr$ers%^sw$ewx(Ox!c$e!c!}4Y!}#O$e#O#P&f#P#T$e#T#W4Y#W#X5m#X#Y>u#Y#]4Y#]#^NZ#^#o4Y#o;'S$e;'S;=`(u<%lO$e4e4eb)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4e5xd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#Y7W#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4e7cd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#Z8q#Z#o4Y#o;'S$e;'S;=`(u<%lO$e4e8|d)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#]4Y#]#^:[#^#o4Y#o;'S$e;'S;=`(u<%lO$e4e:gd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#b4Y#b#c;u#c#o4Y#o;'S$e;'S;=`(u<%lO$e4e<Qd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#Y=`#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4e=mb)^W(qQ'e.o'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4e?Qf)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#`4Y#`#a@f#a#b4Y#b#cHV#c#o4Y#o;'S$e;'S;=`(u<%lO$e4e@qf)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#]4Y#]#^BV#^#g4Y#g#hEV#h#o4Y#o;'S$e;'S;=`(u<%lO$e4eBbd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#ZCp#Z#o4Y#o;'S$e;'S;=`(u<%lO$e4eC}b)^W(qQ'f&j'l.o'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4eEbd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#YFp#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4eF}b)^W(qQ'j.o'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4eHbd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#W4Y#W#XIp#X#o4Y#o;'S$e;'S;=`(u<%lO$e4eI{d)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#]4Y#]#^KZ#^#o4Y#o;'S$e;'S;=`(u<%lO$e4eKfd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#ZLt#Z#o4Y#o;'S$e;'S;=`(u<%lO$e4eMRb)^W(qQ'f&j'k.o'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4eNff)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#Z! z#Z#b4Y#b#c!.[#c#o4Y#o;'S$e;'S;=`(u<%lO$e4e!!Xf)^W(qQ'g.o'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#W4Y#W#X!#m#X#b4Y#b#c!(W#c#o4Y#o;'S$e;'S;=`(u<%lO$e4e!#xd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#Y!%W#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4e!%cd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#Z!&q#Z#o4Y#o;'S$e;'S;=`(u<%lO$e4e!'Ob)^W(qQ'h.o'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4e!(cd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#W4Y#W#X!)q#X#o4Y#o;'S$e;'S;=`(u<%lO$e4e!)|d)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#Y!+[#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4e!+gd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#Z!,u#Z#o4Y#o;'S$e;'S;=`(u<%lO$e4e!-Sb)^W(qQ'i.o'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4e!.gd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#V4Y#V#W!/u#W#o4Y#o;'S$e;'S;=`(u<%lO$e4e!0Qd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#`4Y#`#a!1`#a#o4Y#o;'S$e;'S;=`(u<%lO$e4e!1kd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#i4Y#i#j!2y#j#o4Y#o;'S$e;'S;=`(u<%lO$e4e!3Ud)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#W4Y#W#X!4d#X#o4Y#o;'S$e;'S;=`(u<%lO$e4e!4od)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#Y!5}#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4e!6[b)^W(qQV.o'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e3o!7q[)^W(qQ%Z!b![,g'f&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!8rY!g-y)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!9o])W,g)^W(qQ%[!b'f&jOY$eZr$ers%^sv$evw!:hwx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!:uY)V,g%^!b)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2X!;pW)[S(qQ)],g'f&jOY(OZr(Ors%}s#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O6i!<eY)^W(qQ]6_'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e'V!=`Y[a)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!>][)T,g)^W(qQ%Z!b'f&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!?`^)^W(qQ%Z!b!Y,g'f&jOY$eZr$ers%^sw$ewx(Ox{$e{|!@[|!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!@gY)^W!X-y(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2a!AbY!h,k)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!B__)^W(qQ%Z!b!Y,g'f&jOY$eZr$ers%^sw$ewx(Ox}$e}!O!@[!O!_$e!_!`!8g!`!a!C^!a#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!CiY(x-y)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2a!Dd^)^W(qQ'f&j(w,gOY$eZr$ers%^sw$ewx(Ox!O$e!O!P!E`!P!Q$e!Q![!GY![#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2a!Ei[)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!O$e!O!P!F_!P#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2a!FjY)Z,k)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2]!Gen)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx!Icx!Q$e!Q![!GY![!g$e!g!h#$w!h!i#*Y!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#X$e#X#Y#$w#Y#Z#*Y#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2T!IjY(qQ'f&jOY(OZr(Ors%}s!Q(O!Q![!JY![#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O2T!Jcn(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx!Icx!Q(O!Q![!JY![!g(O!g!h!La!h!i##`!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#X(O#X#Y!La#Y#Z##`#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T!Ljl(qQ!i,g'f&jOY(OZr(Ors%}s{(O{|!Nb|}(O}!O!Nb!O!Q(O!Q![# e![!c(O!c!h# e!h!i# e!i!n(O!n!o##`!o!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#Y# e#Y#Z# e#Z#`(O#`#a##`#a#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T!Ni^(qQ'f&jOY(OZr(Ors%}s!Q(O!Q![# e![!c(O!c!i# e!i#O(O#O#P&f#P#T(O#T#Z# e#Z;'S(O;'S;=`(o<%lO(O2T# nj(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx!Nbx!Q(O!Q![# e![!c(O!c!h# e!h!i# e!i!n(O!n!o##`!o!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#Y# e#Y#Z# e#Z#`(O#`#a##`#a#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T##id(qQ!i,g'f&jOY(OZr(Ors%}s!h(O!h!i##`!i!n(O!n!o##`!o!w(O!w!x##`!x#O(O#O#P&f#P#Y(O#Y#Z##`#Z#`(O#`#a##`#a#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2]#%Sn)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx(Ox{$e{|#'Q|}$e}!O#'Q!O!Q$e!Q![#(]![!c$e!c!h#(]!h!i#(]!i!n$e!n!o#*Y!o!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#Y#(]#Y#Z#(]#Z#`$e#`#a#*Y#a#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]#'Z`)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![#(]![!c$e!c!i#(]!i#O$e#O#P&f#P#T$e#T#Z#(]#Z;'S$e;'S;=`(u<%lO$e2]#(hj)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx!Nbx!Q$e!Q![#(]![!c$e!c!h#(]!h!i#(]!i!n$e!n!o#*Y!o!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#Y#(]#Y#Z#(]#Z#`$e#`#a#*Y#a#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]#*ef)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx(Ox!h$e!h!i#*Y!i!n$e!n!o#*Y!o!w$e!w!x#*Y!x#O$e#O#P&f#P#Y$e#Y#Z#*Y#Z#`$e#`#a#*Y#a#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e7Z#,W`)^W(qQ%Z!b![,g'f&jOY$eZr$ers%^sw$ewx(Oxz$ez{#-Y{!P$e!P!Q#:s!Q!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e7Z#-c])^W(qQ'f&jOY#-YYZ#.[Zr#-Yrs#/csw#-Ywx#5wxz#-Yz{#8j{#O#-Y#O#P#2`#P;'S#-Y;'S;=`#:m<%lO#-Y1e#._TOz#.[z{#.n{;'S#.[;'S;=`#/]<%lO#.[1e#.qVOz#.[z{#.n{!P#.[!P!Q#/W!Q;'S#.[;'S;=`#/]<%lO#.[1e#/]OT1e1e#/`P;=`<%l#.[7X#/jZ)^W'f&jOY#/cYZ#.[Zw#/cwx#0]xz#/cz{#4O{#O#/c#O#P#2`#P;'S#/c;'S;=`#5q<%lO#/c7P#0bX'f&jOY#0]YZ#.[Zz#0]z{#0}{#O#0]#O#P#2`#P;'S#0];'S;=`#3x<%lO#0]7P#1SZ'f&jOY#0]YZ#.[Zz#0]z{#0}{!P#0]!P!Q#1u!Q#O#0]#O#P#2`#P;'S#0];'S;=`#3x<%lO#0]7P#1|UT1e'f&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}7P#2eZ'f&jOY#0]YZ#0]Z]#0]]^#3W^z#0]z{#0}{#O#0]#O#P#2`#P;'S#0];'S;=`#3x<%lO#0]7P#3]X'f&jOY#0]YZ#0]Zz#0]z{#0}{#O#0]#O#P#2`#P;'S#0];'S;=`#3x<%lO#0]7P#3{P;=`<%l#0]7X#4V])^W'f&jOY#/cYZ#.[Zw#/cwx#0]xz#/cz{#4O{!P#/c!P!Q#5O!Q#O#/c#O#P#2`#P;'S#/c;'S;=`#5q<%lO#/c7X#5XW)^WT1e'f&jOY%^Zw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^7X#5tP;=`<%l#/c7R#6OZ(qQ'f&jOY#5wYZ#.[Zr#5wrs#0]sz#5wz{#6q{#O#5w#O#P#2`#P;'S#5w;'S;=`#8d<%lO#5w7R#6x](qQ'f&jOY#5wYZ#.[Zr#5wrs#0]sz#5wz{#6q{!P#5w!P!Q#7q!Q#O#5w#O#P#2`#P;'S#5w;'S;=`#8d<%lO#5w7R#7zW(qQT1e'f&jOY(OZr(Ors%}s#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O7R#8gP;=`<%l#5w7Z#8s_)^W(qQ'f&jOY#-YYZ#.[Zr#-Yrs#/csw#-Ywx#5wxz#-Yz{#8j{!P#-Y!P!Q#9r!Q#O#-Y#O#P#2`#P;'S#-Y;'S;=`#:m<%lO#-Y7Z#9}Y)^W(qQT1e'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e7Z#:pP;=`<%l#-Y7Z#;OY)^W(qQS1e'f&jOY#:sZr#:srs#;nsw#:swx#@{x#O#:s#O#P#<z#P;'S#:s;'S;=`#At<%lO#:s7X#;wW)^WS1e'f&jOY#;nZw#;nwx#<ax#O#;n#O#P#<z#P;'S#;n;'S;=`#@u<%lO#;n7P#<hUS1e'f&jOY#<aZ#O#<a#O#P#<z#P;'S#<a;'S;=`#>[<%lO#<a7P#=RXS1e'f&jOY#<aYZ%}Z]#<a]^#=n^#O#<a#O#P#>b#P;'S#<a;'S;=`#>[<%lO#<a7P#=uVS1e'f&jOY#<aYZ%}Z#O#<a#O#P#<z#P;'S#<a;'S;=`#>[<%lO#<a7P#>_P;=`<%l#<a7P#>i]S1e'f&jOY#<aYZ%}Z]#<a]^#=n^#O#<a#O#P#>b#P#b#<a#b#c#<a#c#f#<a#f#g#?b#g;'S#<a;'S;=`#>[<%lO#<a7P#?iUS1e'f&jOY#<aZ#O#<a#O#P#?{#P;'S#<a;'S;=`#>[<%lO#<a7P#@SZS1e'f&jOY#<aYZ%}Z]#<a]^#=n^#O#<a#O#P#>b#P#b#<a#b#c#<a#c;'S#<a;'S;=`#>[<%lO#<a7X#@xP;=`<%l#;n7R#AUW(qQS1e'f&jOY#@{Zr#@{rs#<as#O#@{#O#P#<z#P;'S#@{;'S;=`#An<%lO#@{7R#AqP;=`<%l#@{7Z#AwP;=`<%l#:s2]#BVt)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx#Dgx!O$e!O!P$ m!P!Q$e!Q![$(x![!g$e!g!h#$w!h!i#*Y!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#U$e#U#V$+X#V#X$e#X#Y#$w#Y#Z#*Y#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j#l$e#l#m$=`#m;'S$e;'S;=`(u<%lO$e2T#DnY(qQ'f&jOY(OZr(Ors%}s!Q(O!Q![#E^![#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O2T#Egp(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx#Dgx!O(O!O!P#Gk!P!Q(O!Q![#E^![!g(O!g!h!La!h!i##`!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#X(O#X#Y!La#Y#Z##`#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T#Gtn(qQ!i,g'f&jOY(OZr(Ors%}s!Q(O!Q![#Ir![!c(O!c!g#Ir!g!h#MS!h!i#Ir!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#X#Ir#X#Y#MS#Y#Z#Ir#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T#I{p(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx#LPx!Q(O!Q![#Ir![!c(O!c!g#Ir!g!h#MS!h!i#Ir!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#X#Ir#X#Y#MS#Y#Z#Ir#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T#LW^(qQ'f&jOY(OZr(Ors%}s!Q(O!Q![#Ir![!c(O!c!i#Ir!i#O(O#O#P&f#P#T(O#T#Z#Ir#Z;'S(O;'S;=`(o<%lO(O2T#M]t(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx#LPx{(O{|!Nb|}(O}!O!Nb!O!Q(O!Q![#Ir![!c(O!c!g#Ir!g!h#MS!h!i#Ir!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#X#Ir#X#Y#MS#Y#Z#Ir#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2]$ xp)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![$#|![!c$e!c!g$#|!g!h$&]!h!i$#|!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#X$#|#X#Y$&]#Y#Z$#|#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]$$Xp)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx#LPx!Q$e!Q![$#|![!c$e!c!g$#|!g!h$&]!h!i$#|!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#X$#|#X#Y$&]#Y#Z$#|#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]$&ht)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx#LPx{$e{|#'Q|}$e}!O#'Q!O!Q$e!Q![$#|![!c$e!c!g$#|!g!h$&]!h!i$#|!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#X$#|#X#Y$&]#Y#Z$#|#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]$)Tp)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx#Dgx!O$e!O!P$ m!P!Q$e!Q![$(x![!g$e!g!h#$w!h!i#*Y!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#X$e#X#Y#$w#Y#Z#*Y#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]$+b_)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!O$e!O!P$,a!P!Q$e!Q!R$-`!R![$(x![#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2]$,j[)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![!GY![#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2]$-kt)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx#Dgx!O$e!O!P$ m!P!Q$e!Q![$(x![!g$e!g!h#$w!h!i#*Y!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#U$e#U#V$/{#V#X$e#X#Y#$w#Y#Z#*Y#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j#l$e#l#m$0z#m;'S$e;'S;=`(u<%lO$e2]$0U[)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![$(x![#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2]$1T`)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![$2V![!c$e!c!i$2V!i#O$e#O#P&f#P#T$e#T#Z$2V#Z;'S$e;'S;=`(u<%lO$e2]$2br)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx$4lx!O$e!O!P$ m!P!Q$e!Q![$2V![!c$e!c!g$2V!g!h$:p!h!i$2V!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#X$2V#X#Y$:p#Y#Z$2V#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2T$4s^(qQ'f&jOY(OZr(Ors%}s!Q(O!Q![$5o![!c(O!c!i$5o!i#O(O#O#P&f#P#T(O#T#Z$5o#Z;'S(O;'S;=`(o<%lO(O2T$5xr(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx$4lx!O(O!O!P#Gk!P!Q(O!Q![$5o![!c(O!c!g$5o!g!h$8S!h!i$5o!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#X$5o#X#Y$8S#Y#Z$5o#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T$8]u(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx$4lx{(O{|!Nb|}(O}!O!Nb!O!P#Gk!P!Q(O!Q![$5o![!c(O!c!g$5o!g!h$8S!h!i$5o!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#X$5o#X#Y$8S#Y#Z$5o#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2]$:{u)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx$4lx{$e{|#'Q|}$e}!O#'Q!O!P$ m!P!Q$e!Q![$2V![!c$e!c!g$2V!g!h$:p!h!i$2V!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#X$2V#X#Y$:p#Y#Z$2V#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]$=ic)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!O$e!O!P$,a!P!Q$e!Q!R$>t!R![$2V![!c$e!c!i$2V!i#O$e#O#P&f#P#T$e#T#Z$2V#Z;'S$e;'S;=`(u<%lO$e2]$?Pv)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx$4lx!O$e!O!P$ m!P!Q$e!Q![$2V![!c$e!c!g$2V!g!h$:p!h!i$2V!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#U$2V#U#V$2V#V#X$2V#X#Y$:p#Y#Z$2V#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j#l$e#l#m$0z#m;'S$e;'S;=`(u<%lO$e4e$Ar[(v-X)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox![$e![!]$Bh!]#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3s$BsYm-})^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2]$CnY)Y,g)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e7V$Dk_q,g%]!b)^W(qQ'f&jOY$EjYZ$FlZr$Ejrs$GZsw$Ejwx%)Px!^$Ej!^!_%+w!_!`%.U!`!a%0]!a#O$Ej#O#P$Ib#P;'S$Ej;'S;=`%+q<%lO$Ej*[$Es])^W(qQ'f&jOY$EjYZ$FlZr$Ejrs$GZsw$Ejwx%)Px!`$Ej!`!a%*t!a#O$Ej#O#P$Ib#P;'S$Ej;'S;=`%+q<%lO$Ejp$FoTO!`$Fl!`!a$GO!a;'S$Fl;'S;=`$GT<%lO$Flp$GTO$Wpp$GWP;=`<%l$Fl*Y$GbZ)^W'f&jOY$GZYZ$FlZw$GZwx$HTx!`$GZ!`!a%(U!a#O$GZ#O#P$Ib#P;'S$GZ;'S;=`%(y<%lO$GZ*Q$HYX'f&jOY$HTYZ$FlZ!`$HT!`!a$Hu!a#O$HT#O#P$Ib#P;'S$HT;'S;=`$Mx<%lO$HT*Q$IOU$WpY#t'f&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}*Q$Ig['f&jOY$HTYZ$HTZ]$HT]^$J]^!`$HT!`!a$NO!a#O$HT#O#P%&n#P;'S$HT;'S;=`%'f;=`<%l%$z<%lO$HT*Q$JbX'f&jOY$HTYZ$J}Z!`$HT!`!a$Hu!a#O$HT#O#P$Ib#P;'S$HT;'S;=`$Mx<%lO$HT'[$KSX'f&jOY$J}YZ$FlZ!`$J}!`!a$Ko!a#O$J}#O#P$LY#P;'S$J};'S;=`$Mr<%lO$J}'[$KvU$Wp'f&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}'[$L_Z'f&jOY$J}YZ$J}Z]$J}]^$MQ^!`$J}!`!a$Ko!a#O$J}#O#P$LY#P;'S$J};'S;=`$Mr<%lO$J}'[$MVX'f&jOY$J}YZ$J}Z!`$J}!`!a$Ko!a#O$J}#O#P$LY#P;'S$J};'S;=`$Mr<%lO$J}'[$MuP;=`<%l$J}*Q$M{P;=`<%l$HT*Q$NVW$Wp'f&jOY$NoZ!`$No!`!a% ^!a#O$No#O#P% w#P;'S$No;'S;=`%#^<%lO$No)`$NtW'f&jOY$NoZ!`$No!`!a% ^!a#O$No#O#P% w#P;'S$No;'S;=`%#^<%lO$No)`% eUY#t'f&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%})`% |Y'f&jOY$NoYZ$NoZ]$No]^%!l^#O$No#O#P%#d#P;'S$No;'S;=`%$[;=`<%l%$z<%lO$No)`%!qX'f&jOY$NoYZ%}Z!`$No!`!a% ^!a#O$No#O#P% w#P;'S$No;'S;=`%#^<%lO$No)`%#aP;=`<%l$No)`%#iZ'f&jOY$NoYZ%}Z]$No]^%!l^!`$No!`!a% ^!a#O$No#O#P% w#P;'S$No;'S;=`%#^<%lO$No)`%$_XOY%$zZ!`%$z!`!a%%g!a#O%$z#O#P%%l#P;'S%$z;'S;=`%&h;=`<%l$No<%lO%$z#t%$}WOY%$zZ!`%$z!`!a%%g!a#O%$z#O#P%%l#P;'S%$z;'S;=`%&h<%lO%$z#t%%lOY#t#t%%oRO;'S%$z;'S;=`%%x;=`O%$z#t%%{XOY%$zZ!`%$z!`!a%%g!a#O%$z#O#P%%l#P;'S%$z;'S;=`%&h;=`<%l%$z<%lO%$z#t%&kP;=`<%l%$z*Q%&sZ'f&jOY$HTYZ$J}Z]$HT]^$J]^!`$HT!`!a$Hu!a#O$HT#O#P$Ib#P;'S$HT;'S;=`$Mx<%lO$HT*Q%'iXOY%$zZ!`%$z!`!a%%g!a#O%$z#O#P%%l#P;'S%$z;'S;=`%&h;=`<%l$HT<%lO%$z*Y%(aW$WpY#t)^W'f&jOY%^Zw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^*Y%(|P;=`<%l$GZ*S%)WZ(qQ'f&jOY%)PYZ$FlZr%)Prs$HTs!`%)P!`!a%)y!a#O%)P#O#P$Ib#P;'S%)P;'S;=`%*n<%lO%)P*S%*UW$WpY#t(qQ'f&jOY(OZr(Ors%}s#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O*S%*qP;=`<%l%)P*[%+RY$WpY#t)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e*[%+tP;=`<%l$Ej7V%,U^)^W(qQ%[!b!f,g'f&jOY$EjYZ$FlZr$Ejrs$GZsw$Ejwx%)Px!_$Ej!_!`%-Q!`!a%*t!a#O$Ej#O#P$Ib#P;'S$Ej;'S;=`%+q<%lO$Ej7V%-]]!g-y)^W(qQ'f&jOY$EjYZ$FlZr$Ejrs$GZsw$Ejwx%)Px!`$Ej!`!a%*t!a#O$Ej#O#P$Ib#P;'S$Ej;'S;=`%+q<%lO$Ej7V%.c]%]!b!b,g)^W(qQ'f&jOY$EjYZ$FlZr$Ejrs$GZsw$Ejwx%)Px!`$Ej!`!a%/[!a#O$Ej#O#P$Ib#P;'S$Ej;'S;=`%+q<%lO$Ej7V%/mY%]!b!b,g$WpY#t)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e)j%0hYY#t)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o%1c[)k!c)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`0Q!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o%2f]%]!b)^W(qQ!d,g'f&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`%3_!`!a%4[!a#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o%3lY%]!b!b,g)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o%4i[)^W(qQ%[!b!f,g'f&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e&u%5jY(uP)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e7Z%6ib)^W(yS(qQ!R,f(r%y'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![%6Y![!c$e!c!}%6Y!}#O$e#O#P&f#P#R$e#R#S%6Y#S#T$e#T#o%6Y#o;'S$e;'S;=`(u<%lO$e7Z%8Qb)^W(yS(qQ!R,f(r%y'f&jOY$eZr$ers%9Ysw$ewx%9{x!Q$e!Q![%6Y![!c$e!c!}%6Y!}#O$e#O#P&f#P#R$e#R#S%6Y#S#T$e#T#o%6Y#o;'S$e;'S;=`(u<%lO$e5P%9cW)^W(p/]'f&jOY%^Zw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^2T%:UW(qQ)],g'f&jOY(OZr(Ors%}s#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O3o%:yZ!V-y)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!}$e!}#O%;l#O#P&f#P;'S$e;'S;=`(u<%lO$e&u%;wY)QP)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e4e%<la'f&jOY%=qYZ%>[Z]%=q]^%?Z^!Q%=q!Q![%?w![!w%=q!w!x%AX!x#O%=q#O#P%H_#P#i%=q#i#j%Ds#j#l%=q#l#m%IR#m;'S%=q;'S;=`%Kt<%lO%=q&t%=xUXY'f&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}4e%>e[XY(n.o'f&jOX%}XY-OYZ*[Z]%}]^-O^p%}pq-Oq#O%}#O#P,^#P;'S%};'S;=`'r<%lO%}4e%?bVXY'f&jOY%}YZ-OZ#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&t%@OWXY'f&jOY%}Z!Q%}!Q![%@h![#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&t%@oWXY'f&jOY%}Z!Q%}!Q![%=q![#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&t%A^['f&jOY%}Z!Q%}!Q![%BS![!c%}!c!i%BS!i#O%}#O#P&f#P#T%}#T#Z%BS#Z;'S%};'S;=`'r<%lO%}&t%BX['f&jOY%}Z!Q%}!Q![%B}![!c%}!c!i%B}!i#O%}#O#P&f#P#T%}#T#Z%B}#Z;'S%};'S;=`'r<%lO%}&t%CS['f&jOY%}Z!Q%}!Q![%Cx![!c%}!c!i%Cx!i#O%}#O#P&f#P#T%}#T#Z%Cx#Z;'S%};'S;=`'r<%lO%}&t%C}['f&jOY%}Z!Q%}!Q![%Ds![!c%}!c!i%Ds!i#O%}#O#P&f#P#T%}#T#Z%Ds#Z;'S%};'S;=`'r<%lO%}&t%Dx['f&jOY%}Z!Q%}!Q![%En![!c%}!c!i%En!i#O%}#O#P&f#P#T%}#T#Z%En#Z;'S%};'S;=`'r<%lO%}&t%Es['f&jOY%}Z!Q%}!Q![%Fi![!c%}!c!i%Fi!i#O%}#O#P&f#P#T%}#T#Z%Fi#Z;'S%};'S;=`'r<%lO%}&t%Fn['f&jOY%}Z!Q%}!Q![%Gd![!c%}!c!i%Gd!i#O%}#O#P&f#P#T%}#T#Z%Gd#Z;'S%};'S;=`'r<%lO%}&t%Gi['f&jOY%}Z!Q%}!Q![%=q![!c%}!c!i%=q!i#O%}#O#P&f#P#T%}#T#Z%=q#Z;'S%};'S;=`'r<%lO%}&t%HfXXY'f&jOY%}YZ%}Z]%}]^'W^#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&t%IW['f&jOY%}Z!Q%}!Q![%I|![!c%}!c!i%I|!i#O%}#O#P&f#P#T%}#T#Z%I|#Z;'S%};'S;=`'r<%lO%}&t%JR['f&jOY%}Z!Q%}!Q![%Jw![!c%}!c!i%Jw!i#O%}#O#P&f#P#T%}#T#Z%Jw#Z;'S%};'S;=`'r<%lO%}&t%KO[XY'f&jOY%}Z!Q%}!Q![%Jw![!c%}!c!i%Jw!i#O%}#O#P&f#P#T%}#T#Z%Jw#Z;'S%};'S;=`'r<%lO%}&t%KwP;=`<%l%=q2a%LVZ!W,V)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P#Q%Lx#Q;'S$e;'S;=`(u<%lO$e'Y%MTY)Pd)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o%NQ[)^W(qQ%[!b'f&j!_,gOY$eZr$ers%^sw$ewx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e7Z& Vd)^W(yS(qQ!R,f(r%y'f&jOY$eZr$ers%9Ysw$ewx%9{x!Q$e!Q!Y%6Y!Y!Z%7q!Z![%6Y![!c$e!c!}%6Y!}#O$e#O#P&f#P#R$e#R#S%6Y#S#T$e#T#o%6Y#o;'S$e;'S;=`(u<%lO$e2]&!pY!T,g)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o&#m^)^W(qQ%[!b'f&j!^,gOY$eZr$ers%^sw$ewx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P#p$e#p#q&$i#q;'S$e;'S;=`(u<%lO$e3o&$vY)U,g%^!b)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e'V&%qY!Ua)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e(]&&nc)^W(qQ%[!b'RP'f&jOX$eXY&'yZp$epq&'yqr$ers%^sw$ewx(Ox!c$e!c!}&)_!}#O$e#O#P&f#P#R$e#R#S&)_#S#T$e#T#o&)_#o;'S$e;'S;=`(u<%lO$e&y&(Sc)^W(qQ'f&jOX$eXY&'yZp$epq&'yqr$ers%^sw$ewx(Ox!c$e!c!}&)_!}#O$e#O#P&f#P#R$e#R#S&)_#S#T$e#T#o&)_#o;'S$e;'S;=`(u<%lO$e&y&)jb)^W(qQeT'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![&)_![!c$e!c!}&)_!}#O$e#O#P&f#P#R$e#R#S&)_#S#T$e#T#o&)_#o;'S$e;'S;=`(u<%lO$e\",\n  tokenizers: [rawString, fallback, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n  topRules: {\"Program\":[0,307]},\n  dynamicPrecedences: {\"65\":1,\"87\":1,\"94\":1,\"119\":1,\"184\":1,\"187\":-10,\"240\":-10,\"241\":1,\"244\":-1,\"246\":-10,\"247\":1,\"262\":-1,\"267\":2,\"268\":2,\"306\":-10,\"365\":3,\"418\":1,\"419\":3,\"420\":1,\"421\":1},\n  specialized: [{term: 356, get: (value) => spec_identifier[value] || -1},{term: 33, get: (value) => spec_[value] || -1},{term: 66, get: (value) => spec_templateArgsEnd[value] || -1},{term: 363, get: (value) => spec_scopedIdentifier[value] || -1}],\n  tokenPrec: 24891\n});\n\nexport { parser };\n","import { parser } from '@lezer/cpp';\nimport { LRLanguage, indentNodeProp, continuedIndent, flatIndent, delimitedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\n\n/**\nA language provider based on the [Lezer C++\nparser](https://github.com/lezer-parser/cpp), extended with\nhighlighting and indentation information.\n*/\nconst cppLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"cpp\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                IfStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|else\\b)/ }),\n                TryStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|catch)\\b/ }),\n                LabeledStatement: flatIndent,\n                CaseStatement: context => context.baseIndent + context.unit,\n                BlockComment: () => null,\n                CompoundStatement: /*@__PURE__*/delimitedIndent({ closing: \"}\" }),\n                Statement: /*@__PURE__*/continuedIndent({ except: /^{/ })\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                \"DeclarationList CompoundStatement EnumeratorList FieldDeclarationList InitializerList\": foldInside,\n                BlockComment(tree) { return { from: tree.from + 2, to: tree.to - 2 }; }\n            })\n        ]\n    }),\n    languageData: {\n        commentTokens: { line: \"//\", block: { open: \"/*\", close: \"*/\" } },\n        indentOnInput: /^\\s*(?:case |default:|\\{|\\})$/,\n        closeBrackets: { stringPrefixes: [\"L\", \"u\", \"U\", \"u8\", \"LR\", \"UR\", \"uR\", \"u8R\", \"R\"] }\n    }\n});\n/**\nLanguage support for C++.\n*/\nfunction cpp() {\n    return new LanguageSupport(cppLanguage);\n}\n\nexport { cpp, cppLanguage };\n","import { LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\nconst lezerHighlighting = styleTags({\n  LineComment: tags.lineComment,\n  BlockComment: tags.blockComment,\n  AnyChar: tags.character,\n  Literal: tags.string,\n  \"tokens from grammar as empty prop extend specialize AtName\": tags.keyword,\n  \"@top @left @right @cut @external\": tags.modifier,\n  \"@precedence @tokens @context @dialects @skip @detectDelim @conflict\": tags.definitionKeyword,\n  \"@extend @specialize\": tags.operatorKeyword,\n  \"CharSet InvertedCharSet\": tags.regexp,\n  \"CharClass\": tags.atom,\n  RuleName: tags.variableName,\n  \"RuleDeclaration/RuleName InlineRule/RuleName TokensBody/RuleName\": tags.definition(tags.variableName),\n  PrecedenceName: tags.labelName,\n  Name: tags.name,\n  \"( )\": tags.paren,\n  \"[ ]\": tags.squareBracket,\n  \"{ }\": tags.brace,\n  '\"!\" ~ \"*\" + ? |': tags.operator\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_AtName = {__proto__:null,\"@asciiLetter\":244, \"@asciiUpperCase\":244, \"@asciiLowerCase\":244, \"@digit\":244, \"@whitespace\":244, \"@eof\":244, \"@specialize\":76, \"@extend\":78, \"@top\":98, \"@precedence\":102, \"@left\":108, \"@right\":110, \"@cut\":112, \"@tokens\":116, \"@conflict\":126, \"@local\":134, \"@else\":142, \"@external\":146, \"@context\":172, \"@dialects\":176, \"@skip\":182, \"@detectDelim\":190};\nconst spec_keyword = {__proto__:null,tokens:136, from:148, prop:156, as:158, propSource:162, extend:166, specialize:168};\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"<zQ]QPOOOOQO'#Ca'#CaO}QPO'#C`OOQO'#Eq'#EqOOQO'#E`'#E`Q]QPOOOxQPO'#D^O!YQPO'#D`O!_QPO'#DgO!dQQO'#DpO!iQQO'#D{O!zQPO'#ETO#PQPO'#EVO#UQPO'#EYOOQO'#E^'#E^O#ZQPO'#CdO#fQPO'#CnO$iQPO'#CoOOQO,58z,58zO#UQPO,58zO!QQPO,58zOOQO-E8^-E8^O}QPO,59xO$pQPO'#DbOOQO,59z,59zO$xQPO'#DiOOQO,5:R,5:RO%ZQPO,5:[O!zQPO,5:bO!zQPO,5:gO!zQPO,5:jO#UQPO,5:lOOQO'#Cg'#CgO%`QQO,5:oO%eQPO'#EXOOQO,5:q,5:qO%mQPO,5:tO&eQPO'#CeO&pQPO,59OO#^QPO,59OOOQO,59O,59OOOQO,59Y,59YO&xQPO,59YO(bQPO'#EyO(oQPO'#EyOOQO'#Ey'#EyOOQO'#Cv'#CvO)nQPO'#EwO#UQPO'#C}O*[QPO'#DQOOQO'#Ex'#ExO$sQPO'#DVO!zQPO'#DYOOQO'#E{'#E{O*cQPO'#DUOOQO'#Ew'#EwO*vQPO'#EfO+ZQPO'#D[O+lQPO'#EvOOQO'#Ev'#EvOOQO,59Z,59ZO+}QPO,59ZO,SQPO'#DROOQO1G.f1G.fO#UQPO1G.fOOQO1G/d1G/dO#UQPO1G/dO!QQPO1G/dOOQO'#DX'#DXO,[QPO'#DcO,pQPO'#EgO,{QPO,59|OOQO,59|,59|O-TQPO'#DoOOQO'#E|'#E|OOQO'#Eh'#EhO-lQPO,5:TOOQO,5:T,5:TO-}QPO'#DjO.SQPO'#DlO.jQPO'#DsOOQO1G/v1G/vO.qQQO1G/|O.vQQO1G0RO/OQQO1G0UO!zQPO1G0WO/TQPO1G0ZO/YQPO'#ElO/eQPO,5:sOOQO,5:s,5:sO/mQPO'#E]OOQO1G0b1G0bO/xQPO,59POOQO,5:{,5:{OOQO1G.j1G.jO0^QPO1G.jOOQO-E8_-E8_O!zQPO'#EcO0fQPO1G.tOOQO1G.t1G.tOxQPO,59_O0nQPO'#CuOOQO,59`,59`OOQO,59i,59iO#UQPO,59iO0uQPO'#EeOOQO,59d,59dOOQO,59f,59fOOQO,59h,59hOOQO'#Ee'#EeO2VQPO,59pOOQO,59l,59lO2jQPO,59lOOQO,59q,59qOOQO,59t,59tOOQO,5;Q,5;QOOQO-E8d-E8dO2oQPO,59vOOQO1G.u1G.uOOQO,59m,59mO,VQPO,59mOOQO7+$Q7+$QOOQO7+%O7+%OO#UQPO7+%OOOQO,59},59}OOQO,5;R,5;ROOQO-E8e-E8eOOQO1G/h1G/hOOQO,5:Z,5:ZOOQO-E8f-E8fOOQO1G/o1G/oO3QQPO'#DkOOQO,5:U,5:UO3]QPO'#DnOOQO,5:W,5:WOOQO'#Ej'#EjO3eQPO,5:_OOQO,5:_,5:_OxQPO'#DtO3lQPO7+%hO3qQPO7+%mO!zQPO7+%mO3vQPO7+%pO3{QQO7+%rOOQO7+%u7+%uOOQO,5;W,5;WOOQO-E8j-E8jOOQO1G0_1G0_OOQO'#Em'#EmO4QQPO,5:wOOQO,5:w,5:wOxQPO'#CmOOQO'#Eb'#EbO4]QPO1G.kOOQO7+$U7+$UP&sQPO'#EaOOQO,5:},5:}OOQO-E8a-E8aOOQO7+$`7+$`OOQO1G.y1G.yOOQO,59a,59aO4qQPO,59aOOQO1G/T1G/TOOQO-E8c-E8cOOQO1G/W1G/WOOQO1G/X1G/XOOQO<<Hj<<HjO4yQPO'#EyO5_QPO'#EiO5mQPO,5:VOOQO,5:V,5:VO5xQPO,5:YOOQO-E8h-E8hOOQO1G/y1G/yO6TQPO,5:`O6lQPO<<ISOOQO<<IX<<IXO6qQQO<<IXOOQO<<I[<<I[O6vQPO<<I^OOQO-E8k-E8kOOQO1G0c1G0cO6{QPO,59XOOQO-E8`-E8`O#nQPO'#EdO7QQPO1G.{OOQO1G.{1G.{OOQO,5;T,5;TOOQO-E8g-E8gOOQO1G/q1G/qO7YQPO1G/tO7_QPO1G/tOOQO1G/z1G/zO7gQPO'#DyOOQOAN>nAN>nO7oQPOAN>sO6lQPOAN>xOOQO1G.s1G.sOOQO,5;O,5;OOOQO-E8b-E8bOOQO7+$g7+$gOOQO7+%`7+%`O7tQPO7+%`O7yQPO'#DzO8XQPO'#EkO8dQPO,5:eOOQO,5:e,5:eOOQOG24_G24_OOQOG24dG24dOOQO<<Hz<<HzOOQO,5:f,5:fOOQO,5;V,5;VOOQO-E8i-E8iOOQO1G0P1G0P\",\n  stateData: \"8s~O#dOSPOSQOS~O!RUO!TVO![WO!eXO!kYO!xZO!z[O!}]O#R^O#fPO~OV_O`aO#i`O~O`gO~O`iO~O!fkO~O!flO!pmO!snO!uoO!voO~O#fpO~O`rO~O`aO~OUxOYuO#fpO~O#fpO#hyO~OV_O]!SOd!SOe!SOf!SOs!ROv!`Ow!`Oz!TO}!UO!P!YO#fPO#n!OO~O_!^O~P#nO_!jO#f!fO~O]!kO_!oO!T!pO!a!qO#fPO~O`!rO~O!l!xO~O_!{O#fpO~O`!|O!R!|a!T!|a![!|a!e!|a!k!|a!x!|a!z!|a!}!|a#R!|a#b!|a#f!|a~O[#OOUXX#gXX~OU#QO#g#PO~O#g#TO#h#VO~O#i#XO]#mX_#mXd#mXe#mXf#mXk#mXm#mXo#mXs#mXv#mXw#mXz#mX}#mX!P#mX#f#mX#n#mXr#mX#g#mX#h#mX~OV_O^#WO`aO~P'QOV#mX~P'QOV_O]!SOd!SOe!SOf!SOs!ROv!`Ow!`Oz!TO}!UO#fPO#n!OO~Ok#^Om#_Oo#`O_#kX!P#kXr#kX#g#kX#h#kX~P(vOr#cO~P#nO_xX!PxXrxX#gxX#hxX~P(vO_#YX!P#YXr#YX#g#YX#h#YX~P(vO!P!YO_!OXr!OX#g!OX#h!OX~O!P!YO_#jXr#jX#g#jX#h#jX~O_#jO~OV_O#i#XO~O!W#pO!X#pO!Y#pO_!VX#f!VX#g!VX~O#g#qO_#ZX#f#ZX~O_#sO#f!fO~OV_O]!cX_!cX!T!cX!a!cX#f!cX!i!cX~O]!kO_#vO!T!pO!a!qO#fPO~O`#wO~O`#yO~O]!kO!T!pO!a!qO!i$OO#fPO~O_#}O~P.XO!l$PO~O!l$QO!q$RO~O!l$SO~O]$UO~O#g$VO_#`X#f#`X~O_$XO#fpO~O_$[O!RUO#fPO~O]$^O^$^O`$]O#fpOUXa#gXa~OU$`O#g#PO~O#g#TO#h$dO~O#h$fO~P#nOk#^Om#_Oo#`OV#XX]#XX_#XXd#XXe#XXf#XXs#XXv#XXw#XXz#XX}#XX!P#XX#f#XX#n#XXr#XX#g#XX#h#XX~O_xa!Pxarxa#gxa#hxa~P(vOr$jO~O!P!YO_!Oar!Oa#g!Oa#h!Oa~O]$nO_$pO#fPO~O]$qO#fPO~O_$sO~P.XO]$uO~O]$vO~O]$xO~O!l$yO~O_${O!RUO#fPO~O]$^O^$^O`$]O#fpOUXi#gXi~O#g%OO#h%QO~O^#WO#i#XO]#mX_#mX#f#mX#g#mX~O#g%RO]#]X_#]X#f#]X~O]$nO_%TO#fPO~O]%UO#fPO#g%VO~OV_O]!ha_!ha!T!ha!a!ha!i!ha#f!ha~O`%XO~O!l%ZO~O]%[O~O_%]O~O#g%OO#h%`O~O_%aO~O]%bO#fPO~O_%fO#fPO~O]%gO~O_%iO~OV_O_!nX#f!nX#g!nX~O#g%kO_#_X#f#_X~O_%mO#fPO~Oe#dfz#f#q~\",\n  goto: \".d#qPPPP#r$QPP$}%nP%tPPPPP&m&q&}PPP'p(P(`(kP(kP(kP(k(kPP(k(kPP(u(|P)W(|P)_P)eP)mP)q)tPPP)mP)x){*R){P*U){)mPP*X*[P)mPP*`*f)mPP)mP)mPP)mP)mP*j)mP)m*m)mP*p*v*|+S+Y+`+g+t+z,Q,W,^,d,jPPP,pPPPP,t-Q-Z-gP.O.[SROTW!li!n!r#|T$Y!|$Z`QOTi!n!r!|#|$ZQfU`{a!P!R!W!Y#X#b%OQ$e#WY$m#w#y$o$q%VQ$t$OQ$|$]T%c%X%eQdQ`!Qa!P!R!W!Y#X#b%OQ!efQ#[{Q#l!`Q#t!kQ%W$tR%j%cQv_R#RwQqZSu_wQz`Q!tlQ!umQ!vnS!yr!zQ#f!UQ$T!wS$^#O$_Q$b#TR$w$RT$^#O$_QcQQ!bdQ!dfR#o!eQbQQt]S!acdQ!cfQ!woS#Z{!QQ#m!bS#n!d!eQ$h#[R$l#ok|a!P!R!W!Y#X#b#w#y$o$q%O%Vk}a!P!R!W!Y#X#b#w#y$o$q%O%VU#Y{|$mQ#k!`R$k#la!Sa!P!R!W!Y#X#b%OZ!Xa!R!Y#X%Oa!Va!P!R!W!Y#X#b%OS!gg!iR#e!TX!]a!R#X%OSROTT$Y!|$ZTROTRhVT!hg!iRjWX!li!n!r#|R#x!pR#z!qR!skT#{!r#|Q%Y$uR%h%[T%d%X%eRs[R!}tQTOReTQw_R#SwQ$_#OR$}$_Q#UzR$c#UQ%P$gR%_%PS#b!P!WR$i#bW!Za!R#X%OS#h!Z#iR#i![Q!igR#r!iQ!niR#u!nQ$o#wR%S$oQ#|!rR$r#|Q%e%XR%l%eQ!zrR$W!zQ$Z!|R$z$ZTSOTQ!_aQ#d!RQ$g#XR%^%OW![a!R#X%OR#g!YY!Pa!R!Y#X%OV#]!P!W#b`!Sa!P!R!W!Y#X#b%OS$n#w$oQ$q#yQ%U$qR%b%VY!Wa!R!Y#X%OV#a!P!W#bS!mi!nT#{!r#|\",\n  nodeNames: \"⚠ LineComment BlockComment Grammar RuleDeclaration RuleName ] [ Props Prop AtName Name = Literal . } { PropEsc ParamList Body CharSet AnyChar InvertedCharSet ScopedName Call ArgList CharClass ? Optional * Repeat + Repeat1 InlineRule ) ( ParenExpression Specialization @specialize @extend Sequence PrecedenceMarker ! PrecedenceName AmbiguityMarker ~ Choice | RuleDeclaration @top PrecedenceDeclaration @precedence PrecedenceBody Precedence @left @right @cut TokensDeclaration @tokens TokensBody TokenPrecedenceDeclaration PrecedenceBody TokenConflictDeclaration @conflict ConflictBody LiteralTokenDeclaration LocalTokensDeclaration @local tokens TokensBody ElseToken @else ExternalTokensDeclaration @external from TokensBody Token ExternalPropDeclaration prop as ExternalPropSourceDeclaration propSource ExternalSpecializeDeclaration extend specialize ContextDeclaration @context DialectsDeclaration @dialects DialectBody TopSkipDeclaration @skip SkipScope SkipBody DetectDelimDeclaration @detectDelim\",\n  maxTerm: 125,\n  nodeProps: [\n    [\"group\", 4,\"Declaration Declaration\",-16,5,13,20,21,22,23,24,26,28,30,32,33,36,37,40,46,\"Expression\",-16,48,50,57,60,62,65,66,72,77,80,82,85,87,90,92,94,\"Declaration\"],\n    [\"openedBy\", 6,\"[\",15,\"{\",34,\"(\"],\n    [\"closedBy\", 7,\"]\",16,\"}\",35,\")\"]\n  ],\n  propSources: [lezerHighlighting],\n  skippedNodes: [0,1,2],\n  repeatNodeCount: 14,\n  tokenData: \"3w~R!OX^$Rpq$Rqr$vrs&ftu(^wx)zxy+myz+rz{+w{|+||},R}!O,W!O!P,}!P!Q-S!Q![,W!^!_.{!_!`/Q!`!a/V!a!b/[!b!c/a!c!},W!}#O0q#P#Q0v#R#S0{#T#o,W#o#p1n#p#q1s#q#r1x#r#s1}#y#z$R$f$g$R$g#BY,W#BY#BZ2S#BZ$IS,W$IS$I_2S$I_$I|,W$I|$JO2S$JO$JT,W$JT$JU2S$JU$KV,W$KV$KW2S$KW&FU,W&FU&FV2S&FV;'S,W;'S;=`,w<%lO,W~$WY#d~X^$Rpq$R#y#z$R$f$g$R#BY#BZ$R$IS$I_$R$I|$JO$R$JT$JU$R$KV$KW$R&FU&FV$R~${Pz~!}#O%O~%RUO#O%O#O#P%e#P#Q&Z#Q;'S%O;'S;=`&`<%lO%O~%hRO;'S%O;'S;=`%q;=`O%O~%tVO#O%O#O#P%e#P#Q&Z#Q;'S%O;'S;=`&`;=`<%l%O<%lO%O~&`Of~~&cP;=`<%l%O~&kW]~OY&fZr&frs'Ts#O&f#O#P'Y#P;'S&f;'S;=`(W<%lO&f~'YO]~~']RO;'S&f;'S;=`'f;=`O&f~'kX]~OY&fZr&frs'Ts#O&f#O#P'Y#P;'S&f;'S;=`(W;=`<%l&f<%lO&f~(ZP;=`<%l&f~(aP!}#O(d~(gUO#O(d#O#P(y#P#Q)o#Q;'S(d;'S;=`)t<%lO(d~(|RO;'S(d;'S;=`)V;=`O(d~)YVO#O(d#O#P(y#P#Q)o#Q;'S(d;'S;=`)t;=`<%l(d<%lO(d~)tOd~~)wP;=`<%l(d~*PW]~OY)zZw)zwx'Tx#O)z#O#P*i#P;'S)z;'S;=`+g<%lO)z~*lRO;'S)z;'S;=`*u;=`O)z~*zX]~OY)zZw)zwx'Tx#O)z#O#P*i#P;'S)z;'S;=`+g;=`<%l)z<%lO)z~+jP;=`<%l)z~+rOs~~+wOr~~+|Om~~,ROo~~,WO#g~R,_W#fP#qQ}!O,W!Q![,W!c!},W#R#S,W#T#o,W$g;'S,W;'S;=`,w<%lO,WR,zP;=`<%l,W~-SO^~~-VQz{-]!P!Q.d~-`TOz-]z{-o{;'S-];'S;=`.^<%lO-]~-rVOz-]z{-o{!P-]!P!Q.X!Q;'S-];'S;=`.^<%lO-]~.^OQ~~.aP;=`<%l-]~.iSP~OY.dZ;'S.d;'S;=`.u<%lO.d~.xP;=`<%l.d~/QO#i~~/VO[~~/[O#h~~/aOk~~/dW}!O/|!Q![/|!c!}/|#R#S/|#T#o/|$g;'S/|;'S;=`0k<%lO/|~0RWY~}!O/|!Q![/|!c!}/|#R#S/|#T#o/|$g;'S/|;'S;=`0k<%lO/|~0nP;=`<%l/|~0vOV~~0{OU~R1UWeP#fP#qQ}!O,W!Q![,W!c!},W#R#S,W#T#o,W$g;'S,W;'S;=`,w<%lO,W~1sO`~~1xO!P~~1}O_~~2SO}~~2]h#d~#fP#qQX^$Rpq$R}!O,W!Q![,W!c!},W#R#S,W#T#o,W#y#z$R$f$g$R$g#BY,W#BY#BZ2S#BZ$IS,W$IS$I_2S$I_$I|,W$I|$JO2S$JO$JT,W$JT$JU2S$JU$KV,W$KV$KW2S$KW&FU,W&FU&FV2S&FV;'S,W;'S;=`,w<%lO,W\",\n  tokenizers: [0, 1],\n  topRules: {\"Grammar\":[0,3]},\n  specialized: [{term: 10, get: value => spec_AtName[value] || -1},{term: 125, get: value => spec_keyword[value] || -1}],\n  tokenPrec: 1086\n});\n\nexport { parser };\n","import { parser } from '@lezer/lezer';\nimport { LRLanguage, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\n\n/**\nA language provider based on the [Lezer Lezer\nparser](https://github.com/lezer-parser/lezer-grammar), extended\nwith highlighting and indentation information.\n*/\nconst lezerLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"lezer\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/foldNodeProp.add({\n                \"Body TokensBody SkipBody PrecedenceBody\": foldInside\n            })\n        ]\n    }),\n    languageData: {\n        commentTokens: { block: { open: \"/*\", close: \"*/\" }, line: \"//\" },\n        indentOnInput: /^\\s*\\}$/\n    }\n});\n/**\nLanguage support for Lezer grammars.\n*/\nfunction lezer() {\n    return new LanguageSupport(lezerLanguage);\n}\n\nexport { lezer, lezerLanguage };\n","import { ExternalTokenizer, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst castOpen = 1,\n  HeredocString = 2,\n  interpolatedStringContent = 275,\n  EscapeSequence = 3,\n  afterInterpolation = 276,\n  automaticSemicolon = 277,\n  eof = 278,\n  abstract = 4,\n  and = 5,\n  array = 6,\n  as = 7,\n  Boolean = 8,\n  _break = 9,\n  _case = 10,\n  _catch = 11,\n  clone = 12,\n  _const = 13,\n  _continue = 14,\n  _default = 15,\n  declare = 16,\n  _do = 17,\n  echo = 18,\n  _else = 19,\n  elseif = 20,\n  enddeclare = 21,\n  endfor = 22,\n  endforeach = 23,\n  endif = 24,\n  endswitch = 25,\n  endwhile = 26,\n  _enum = 27,\n  _extends = 28,\n  final = 29,\n  _finally = 30,\n  fn = 31,\n  _for = 32,\n  foreach = 33,\n  from = 34,\n  _function = 35,\n  global = 36,\n  goto = 37,\n  _if = 38,\n  _implements = 39,\n  include = 40,\n  include_once = 41,\n  _instanceof = 42,\n  insteadof = 43,\n  _interface = 44,\n  list = 45,\n  match = 46,\n  namespace = 47,\n  _new = 48,\n  _null = 49,\n  or = 50,\n  print = 51,\n  readonly = 52,\n  _require = 53,\n  require_once = 54,\n  _return = 55,\n  _switch = 56,\n  _throw = 57,\n  trait = 58,\n  _try = 59,\n  unset = 60,\n  use = 61,\n  _var = 62,\n  Visibility = 63,\n  _while = 64,\n  xor = 65,\n  _yield = 66;\n\nconst keywordMap = {\n  abstract,\n  and,\n  array,\n  as,\n  true: Boolean,\n  false: Boolean,\n  break: _break,\n  case: _case,\n  catch: _catch,\n  clone,\n  const: _const,\n  continue: _continue,\n  declare,\n  default: _default,\n  do: _do,\n  echo,\n  else: _else,\n  elseif,\n  enddeclare,\n  endfor,\n  endforeach,\n  endif,\n  endswitch,\n  endwhile,\n  enum: _enum,\n  extends: _extends,\n  final,\n  finally: _finally,\n  fn,\n  for: _for,\n  foreach,\n  from,\n  function: _function,\n  global,\n  goto,\n  if: _if,\n  implements: _implements,\n  include,\n  include_once,\n  instanceof: _instanceof,\n  insteadof,\n  interface: _interface,\n  list,\n  match,\n  namespace,\n  new: _new,\n  null: _null,\n  or,\n  print,\n  readonly,\n  require: _require,\n  require_once,\n  return: _return,\n  switch: _switch,\n  throw: _throw,\n  trait,\n  try: _try,\n  unset,\n  use,\n  var: _var,\n  public: Visibility,\n  private: Visibility,\n  protected: Visibility,\n  while: _while,\n  xor,\n  yield: _yield,\n  __proto__: null,\n};\n\nfunction keywords(name) {\n  let found = keywordMap[name.toLowerCase()];\n  return found == null ? -1 : found\n}\n\nfunction isSpace(ch) {\n  return ch == 9 || ch == 10 || ch == 13 || ch == 32\n}\n\nfunction isASCIILetter(ch) {\n  return ch >= 97 && ch <= 122 || ch >= 65 && ch <= 90\n}\n\nfunction isIdentifierStart(ch) {\n  return ch == 95 || ch >= 0x80 || isASCIILetter(ch)\n}\n\nfunction isHex(ch) {\n  return ch >= 48 && ch <= 55 || ch >= 97 && ch <= 102 || ch >= 65 && ch <= 70 /* 0-9, a-f, A-F */\n}\n\nconst castTypes = {\n  int: true, integer: true, bool: true, boolean: true,\n  float: true, double: true, real: true, string: true,\n  array: true, object: true, unset: true,\n  __proto__: null\n};\n\nconst expression = new ExternalTokenizer(input => {\n  if (input.next == 40 /* '(' */) {\n    input.advance();\n    let peek = 0;\n    while (isSpace(input.peek(peek))) peek++;\n    let name = \"\", next;\n    while (isASCIILetter(next = input.peek(peek))) {\n      name += String.fromCharCode(next);\n      peek++;\n    }\n    while (isSpace(input.peek(peek))) peek++;\n    if (input.peek(peek) == 41 /* ')' */ && castTypes[name.toLowerCase()])\n      input.acceptToken(castOpen);\n  } else if (input.next == 60 /* '<' */ && input.peek(1) == 60 && input.peek(2) == 60) {\n    for (let i = 0; i < 3; i++) input.advance();\n    while (input.next == 32 /* ' ' */ || input.next == 9 /* '\\t' */) input.advance();\n    let quoted = input.next == 39; /* \"'\" */\n    if (quoted) input.advance();\n    if (!isIdentifierStart(input.next)) return\n    let tag = String.fromCharCode(input.next);\n    for (;;) {\n      input.advance();\n      if (!isIdentifierStart(input.next) && !(input.next >= 48 && input.next <= 55) /* 0-9 */) break\n      tag += String.fromCharCode(input.next);\n    }\n    if (quoted) {\n      if (input.next != 39) return\n      input.advance();\n    }\n    if (input.next != 10 /* '\\n' */ && input.next != 13 /* '\\r' */) return\n    for (;;) {\n      let lineStart = input.next == 10 || input.next == 13;\n      input.advance();\n      if (input.next < 0) return\n      if (lineStart) {\n        while (input.next == 32 /* ' ' */ || input.next == 9 /* '\\t' */) input.advance();\n        let match = true;\n        for (let i = 0; i < tag.length; i++) {\n          if (input.next != tag.charCodeAt(i)) { match = false; break }\n          input.advance();\n        }\n        if (match) return input.acceptToken(HeredocString)\n      }\n    }\n  }\n});\n\nconst eofToken = new ExternalTokenizer(input => {\n  if (input.next < 0) input.acceptToken(eof);\n});\n\nconst semicolon = new ExternalTokenizer((input, stack) => {\n  if (input.next == 63 /* '?' */ && stack.canShift(automaticSemicolon) && input.peek(1) == 62 /* '>' */)\n    input.acceptToken(automaticSemicolon);\n});\n\nfunction scanEscape(input) {\n  let after = input.peek(1);\n  if (after == 110 /* 'n' */ || after == 114 /* 'r' */ || after == 116 /* 't' */ ||\n      after == 118 /* 'v' */ || after == 101 /* 'e' */ || after == 102 /* 'f' */ ||\n      after == 92 /* '\\\\' */ || after == 36 /* '\"' */ || after == 34 /* '$' */ ||\n      after == 123 /* '{' */)\n    return 2\n\n  if (after >= 48 && after <= 55 /* '0'-'7' */) {\n    let size = 2, next;\n    while (size < 5 && (next = input.peek(size)) >= 48 && next <= 55) size++;\n    return size\n  }\n\n  if (after == 120 /* 'x' */ && isHex(input.peek(2))) {\n    return isHex(input.peek(3)) ? 4 : 3\n  }\n\n  if (after == 117 /* 'u' */ && input.peek(2) == 123 /* '{' */) {\n    for (let size = 3;; size++) {\n      let next = input.peek(size);\n      if (next == 125 /* '}' */) return size == 2 ? 0 : size + 1\n      if (!isHex(next)) break\n    }\n  }\n\n  return 0\n}\n\nconst interpolated = new ExternalTokenizer((input, stack) => {\n  let content = false;\n  for (;; content = true) {\n    if (input.next == 34 /* '\"' */ || input.next < 0 ||\n        input.next == 36 /* '$' */ && (isIdentifierStart(input.peek(1)) || input.peek(1) == 123 /* '{' */) ||\n        input.next == 123 /* '{' */ && input.peek(1) == 36 /* '$' */) {\n      break\n    } else if (input.next == 92 /* '\\\\' */) {\n      let escaped = scanEscape(input);\n      if (escaped) {\n        if (content) break\n        else return input.acceptToken(EscapeSequence, escaped)\n      }\n    } else if (!content && (\n      input.next == 91 /* '[' */ ||\n      input.next == 45 /* '-' */ && input.peek(1) == 62 /* '>' */ && isIdentifierStart(input.peek(2)) ||\n      input.next == 63 /* '?' */ && input.peek(1) == 45 && input.peek(2) == 62 && isIdentifierStart(input.peek(3))\n    ) && stack.canShift(afterInterpolation)) {\n      break\n    }\n    input.advance();\n  }\n  if (content) input.acceptToken(interpolatedStringContent);\n});\n\nconst phpHighlighting = styleTags({\n  \"Visibility abstract final static\": tags.modifier,\n  \"for foreach while do if else elseif switch try catch finally return throw break continue default case\": tags.controlKeyword,\n  \"endif endfor endforeach endswitch endwhile declare enddeclare goto match\": tags.controlKeyword,\n  \"and or xor yield unset clone instanceof insteadof\": tags.operatorKeyword,\n  \"function fn class trait implements extends const enum global interface use var\": tags.definitionKeyword,\n  \"include include_once require require_once namespace\": tags.moduleKeyword,\n  \"new from echo print array list as\": tags.keyword,\n  null: tags.null,\n  Boolean: tags.bool,\n  VariableName: tags.variableName,\n  \"NamespaceName/...\": tags.namespace,\n  \"NamedType/...\": tags.typeName,\n  Name: tags.name,\n  \"CallExpression/Name\": tags.function(tags.variableName),\n  \"LabelStatement/Name\": tags.labelName,\n  \"MemberExpression/Name\": tags.propertyName,\n  \"MemberExpression/VariableName\": tags.special(tags.propertyName),\n  \"ScopedExpression/ClassMemberName/Name\": tags.propertyName,\n  \"ScopedExpression/ClassMemberName/VariableName\": tags.special(tags.propertyName),\n  \"CallExpression/MemberExpression/Name\": tags.function(tags.propertyName),\n  \"CallExpression/ScopedExpression/ClassMemberName/Name\": tags.function(tags.propertyName),\n  \"MethodDeclaration/Name\": tags.function(tags.definition(tags.variableName)),\n  \"FunctionDefinition/Name\": tags.function(tags.definition(tags.variableName)),\n  \"ClassDeclaration/Name\": tags.definition(tags.className),\n  UpdateOp: tags.updateOperator,\n  ArithOp: tags.arithmeticOperator,\n  \"LogicOp IntersectionType/&\": tags.logicOperator,\n  BitOp: tags.bitwiseOperator,\n  CompareOp: tags.compareOperator,\n  ControlOp: tags.controlOperator,\n  AssignOp: tags.definitionOperator,\n  \"$ ConcatOp\": tags.operator,\n  LineComment: tags.lineComment,\n  BlockComment: tags.blockComment,\n  Integer: tags.integer,\n  Float: tags.float,\n  String: tags.string,\n  ShellExpression: tags.special(tags.string),\n  \"=> ->\": tags.punctuation,\n  \"( )\": tags.paren,\n  \"#[ [ ]\": tags.squareBracket,\n  \"${ { }\": tags.brace,\n  \"-> ?->\": tags.derefOperator,\n  \", ; :: : \\\\\": tags.separator,\n  \"PhpOpen PhpClose\": tags.processingInstruction,\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_name = {__proto__:null,static:325, STATIC:325, class:351, CLASS:351};\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"%#[Q`OWOOQhQaOOP%oO`OOOOO#t'#Hh'#HhO%tO#|O'#DuOOO#u'#Dx'#DxQ&SOWO'#DxO&XO$VOOOOQ#u'#Dy'#DyO&lQaO'#D}O'[QdO'#EQO+QQdO'#IqO+_QdO'#ERO-RQaO'#EXO/bQ`O'#EUO/gQ`O'#E_O2UQaO'#E_O2]Q`O'#EgO2bQ`O'#EqO-RQaO'#EqO2mQpO'#FOO2rQ`O'#FOOOQS'#Iq'#IqO2wQ`O'#ExOOQS'#Ih'#IhO5SQdO'#IeO9UQeO'#F]O-RQaO'#FlO-RQaO'#FmO-RQaO'#FnO-RQaO'#FoO-RQaO'#FoO-RQaO'#FrOOQO'#Ir'#IrO9cQ`O'#FxOOQO'#Ht'#HtO9kQ`O'#HXO:VQ`O'#FsO:bQ`O'#HfO:mQ`O'#GPO:uQaO'#GQO-RQaO'#G`O-RQaO'#GcO;bOrO'#GfOOQS'#JP'#JPOOQS'#JO'#JOOOQS'#Ie'#IeO/bQ`O'#GmO/bQ`O'#GoO/bQ`O'#GtOhQaO'#GvO;iQ`O'#GwO;nQ`O'#GzO:]Q`O'#G}O;sQeO'#HOO;sQeO'#HPO;sQeO'#HQO;}Q`O'#HRO<SQ`O'#HTO<XQaO'#HUO>hQ`O'#HVO:]Q`O'#HWO>mQ`O'#HWO;}Q`O'#HXO:]Q`O'#HZO:]Q`O'#H[O:]Q`O'#H]O>rQ`O'#H`O>}Q`O'#HaO<XQaO'#HeOOQ#u'#Ic'#IcOOQ#u'#Hj'#HjQhQaOOO:]Q`O'#HYO:QQ`O'#HYO?]O#|O'#DsPOOO)CDT)CDTOOO#t-E;f-E;fOOO#u,5:d,5:dOOO#u'#Hi'#HiO&XO$VOOO?hQ$VO'#IbOOOO'#Ib'#IbQOOOOOOOQ#y,5:i,5:iO?oQaO,5:iOOQ#u,5:k,5:kO?vQaO,5:nO?}QaO,5;VO@UQpO,5;WOBsQaO'#EuOOQS,5;`,5;`OBzQ`O,5;pOOQP'#Fd'#FdO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xOOQ#u'#Iv'#IvOOQS,5<z,5<zOOQ#u,5:m,5:mODsQ`O,5:sODzQ`O'#FsOESQ`O'#FsOE[Q`O,5:pOEaQaO'#E`OOQS,5:y,5:yOGeQ`O'#IjO<XQaO'#EbO<XQaO'#IjOOQS'#Ij'#IjOGlQ`O'#IiOGtQ`O,5:yO/lQaO,5:yOGyQaO'#EhOOQS,5;R,5;ROOQS,5;],5;]OHTQ`O,5;]OHsQdO'#FQOJxQ`O'#HrO2mQpO,5;jOOQS,5;j,5;jOJ}QpO,5;jOKSQtO'#EQOKaQpO,5;dO2wQ`O'#E|OOQS'#E}'#E}OOQS'#Ip'#IpOKlQaO,5:xO-RQaO,5;uOOQS,5;w,5;wO-RQaO,5;wOKsQdO,5<WOLTQdO,5<XOLeQdO,5<YOLuQdO,5<ZON|QdO,5<ZO! TQdO,5<^O! eQ`O'#FyO! pQ`O'#IuO! xQ`O,5<dOOQO-E;r-E;rO! }Q`O'#I}O:]Q`O,5=rO!!VQ`O,5=rO;}Q`O,5=sO:]Q`O,5=wO:]Q`O,5=tO!![Q`O,5=tOOQS'#EQ'#EQO!!aQ`O'#FuO!!wQ`O,5<_O!#SQ`O,5<_O!#[Q`O,5?iO!#aQ`O,5<_O!#iQ`O,5<kO!#qQdO'#GYO!$PQdO'#I|O!$[QdO,5>QO!$dQ`O,5<kO!#[Q`O,5<kO!$lQdO,5<lO!$|Q`O,5<lO!%[Q`O,5<lO!%rQdO,5<zO!'wQdO,5<}O!(XOrO'#IPOOOQ'#JS'#JSO-RQaO'#GkOOOQ'#IP'#IPO!(yOrO,5=QOOQS,5=Q,5=QO!)QQaO,5=XO!)XQ`O,5=ZO!)aQeO,5=`O!)kQ`O,5=bO!)pQaO'#GxO!)aQeO,5=cO<XQaO'#G{O!)aQeO,5=fO!$[QdO,5=iO+_QdO,5=jOOQ#u,5=j,5=jO+_QdO,5=kOOQ#u,5=k,5=kO+_QdO,5=lOOQ#u,5=l,5=lO!)wQ`O,5=mO:]Q`O,5=oO!*PQdO'#JUOOQS'#JU'#JUO!$[QdO,5=pO!+iQaO,5=qO!-xQ`O'#GWO!-}QdO'#I{O!$[QdO,5=rOOQ#u,5=s,5=sO!.YQ`O,5=uO!.]Q`O,5=vO!.bQ`O,5=wO!.mQdO,5=zOOQ#u,5=z,5=zO2mQpO,5={O!.xQ`O,5={O!.}QdO'#JVO!$[QdO,5={O!/]Q`O,5={O!/eQdO'#IgO!$[QdO,5>POOQ#u-E;h-E;hO!1QQ`O,5=tOOO#u,5:_,5:_O!1]O#|O,5:_OOO#u-E;g-E;gOOOO,5>|,5>|OOQ#y1G0T1G0TO!1eQ`O1G0YO-RQaO1G0YO!2wQ`O1G0qOOQS1G0q1G0qOOQS'#Eo'#EoOOQS'#Il'#IlO-RQaO'#IlOOQS1G0r1G0rO!4ZQ`O'#IoO!5pQ`O'#IqO!5}QaO'#EwOOQO'#Io'#IoO!6XQ`O'#InO!6aQ`O,5;aO-RQaO'#FXOOQS'#FW'#FWOOQS1G1[1G1[O!6fQdO1G1dO!8kQdO1G1dO!:WQdO1G1dO!;sQdO1G1dO!=`QdO1G1dO!>{QdO1G1dO!@hQdO1G1dO!BTQdO1G1dO!CpQdO1G1dO!E]QdO1G1dO!FxQdO1G1dO!HeQdO1G1dO!JQQdO1G1dO!KmQdO1G1dO!MYQdO1G1dO!NuQdO1G1dOOQT1G0_1G0_O!#[Q`O,5<_O#!bQaO'#EYOOQS1G0[1G0[O#!iQ`O,5:zOEdQaO,5:zO#!nQaO,5;OO#!uQdO,5:|O#$tQdO,5?UO#&sQaO'#HmO#'TQ`O,5?TOOQS1G0e1G0eO#']Q`O1G0eO#'bQ`O'#IkO#(zQ`O'#IkO#)SQ`O,5;SOG|QaO,5;SOOQS1G0w1G0wOOQO,5>^,5>^OOQO-E;p-E;pOOQS1G1U1G1UO#)pQdO'#FQO#+uQ`O'#HsOJ}QpO1G1UO2wQ`O'#HpO#+zQtO,5;eO2wQ`O'#HqO#,iQtO,5;gO#-WQaO1G1OOOQS,5;h,5;hO#/gQtO'#FQO#/tQdO1G0dO-RQaO1G0dO#1aQdO1G1aO#2|QdO1G1cOOQO,5<e,5<eO#3^Q`O'#HuO#3lQ`O,5?aOOQO1G2O1G2OO:]Q`O,5?iO!$[QdO1G3^O:]Q`O1G3^OOQ#u1G3_1G3_O#3tQ`O1G3cO!1QQ`O1G3`O:]Q`O1G3`O#4PQpO'#FvO#4_Q`O'#FvO#4oQ`O'#FvO#4zQ`O'#FvO#5SQ`O'#FzO#5XQ`O'#F{OOQO'#It'#ItO#5`Q`O'#IsO#5hQ`O,5<aOOQS1G1y1G1yO2wQ`O1G1yO#5mQ`O1G1yO#5rQ`O1G1yO!#[Q`O1G5TO#5}QdO1G5TO!#[Q`O1G1yO#6]Q`O1G2VO!#[Q`O1G2VO<XQaO,5<tO#6eQdO'#H}O#6sQdO,5?hOOQ#u1G3l1G3lO-RQaO1G2VO2wQ`O1G2VO#7OQdO1G2WO9cQ`O'#GSO9cQ`O'#GTO#9bQ`O'#GUOOQS1G2W1G2WO!.]Q`O1G2WO!1TQ`O1G2WO!1QQ`O1G2WO!$|Q`O1G2WO:]O`O,5=RO#:[O`O,5=RO#:gO!bO,5=SO#:uQ`O,5=VOOOQ-E;}-E;}OOQS1G2l1G2lO#:|QaO'#GnO#;gQ$VO1G2sO#@gQ`O1G2sO#@rQ`O'#GpO#@}Q`O'#GsOOQ#u1G2u1G2uO#AYQ`O1G2uOOQ#u'#Gu'#GuOOQ#u'#JT'#JTOOQ#u1G2z1G2zO#A_Q`O1G2zO/bQ`O1G2|O#AdQaO,5=dO#AkQ`O,5=dOOQ#u1G2}1G2}O#ApQ`O1G2}O#AuQ`O,5=gOOQ#u1G3Q1G3QO#CXQ`O1G3QOOQ#u1G3T1G3TOOQ#u1G3U1G3UOOQ#u1G3V1G3VOOQ#u1G3W1G3WO#C^Q`O'#IUO;}Q`O'#IUO#CcQ$VO1G3XO#HiQ`O1G3ZO<XQaO'#ITO#HnQdO,5=eOOQ#u1G3[1G3[O#HyQ`O1G3]O<XQaO,5<rO#IOQdO'#H|O#I^QdO,5?gOOQ#u1G3^1G3^OOQ#u1G3a1G3aO!.]Q`O1G3aOOQ#u1G3b1G3bO#IiQ`O'#H^OOQ#u1G3c1G3cO#JfQ`O1G3cO#JkQ`O1G3cOOQ#u1G3f1G3fO#J|Q`O1G3gO#KRQpO1G3gO#KZQdO'#IWO#KlQdO,5?qO:]Q`O,5?qOOQ#u1G3g1G3gO2mQpO1G3gO#KwQ`O1G3gO!$[QdO1G3gO#K|QeO'#HkO#L^QdO,5?ROOQ#u1G3k1G3kOOQ#u1G3`1G3`O!.]Q`O1G3`O!1TQ`O1G3`OOO#u1G/y1G/yO-RQaO7+%tO#LlQdO7+%tOOQS7+&]7+&]O#NXQ`O,5?WO!+iQaO,5;bO#N`Q`O,5;cO$ uQaO'#HoO$!PQ`O,5?YOOQS1G0{1G0{O$!XQ`O,5;sO$!`Q`O'#EZO$!eQ`O'#IfO$!mQ`O,5:tOOQS1G0f1G0fO$!rQ`O1G0fO$!wQ`O1G0jO<XQaO1G0jOOQO,5>X,5>XOOQO-E;k-E;kOOQS7+&P7+&PO!+iQaO,5;TO$$^QaO'#HnO$$hQ`O,5?VOOQS1G0n1G0nO$$pQ`O1G0nPOQO'#FQ'#FQOOQO,5>_,5>_OOQO-E;q-E;qOOQS7+&p7+&pOOQS,5>[,5>[OOQS-E;n-E;nO$$uQtO,5>]OOQS-E;o-E;oO$%dQdO7+&jO$'iQtO'#FQO$'vQdO7+&OOOQS1G0j1G0jOOQO,5>a,5>aOOQO-E;s-E;sOOQ#u7+(x7+(xO!$[QdO7+(xOOQ#u7+(}7+(}O#JfQ`O7+(}O#JkQ`O7+(}OOQ#u7+(z7+(zO!.]Q`O7+(zO!1TQ`O7+(zO!1QQ`O7+(zO$)cQ`O,5<bO$)mQ`O,5<bO$)xQ`O,5<fO$)}QpO,5<bO$*]Q`O,5<bO!+iQaO,5<bOOQO,5<f,5<fO$*eQpO,5<gO$*pQ`O,5<gO$+OQ`O'#HwO$+iQ`O,5?_OOQS1G1{1G1{O$+qQpO7+'eO$+|Q`O'#GOO$,XQ`O7+'eOOQS7+'e7+'eO2wQ`O7+'eO#5mQ`O7+'eO$,aQdO7+*oO2wQ`O7+*oO$,oQ`O7+'eO-RQaO7+'qO2wQ`O7+'qO$,zQ`O7+'qO$-SQdO1G2`OOQS,5>i,5>iOOQS-E;{-E;{O$.lQdO7+'qO$.|QpO7+'qO$/XQdO'#IxOOQO,5<n,5<nOOQO,5<o,5<oO$/jQpO'#GXO$/uQ`O'#GXOOQO'#Iz'#IzOOQO'#H{'#H{O$0iQ`O'#GXO#JkQ`O'#GVO$1YQdO'#GXO!.mQdO'#GZO9cQ`O'#G[OOQO'#Iy'#IyOOQO'#Hz'#HzO$1eQ`O,5<pOOQ#y,5<p,5<pOOQS7+'r7+'rO!.]Q`O7+'rO!1TQ`O7+'rO!1QQ`O7+'rOOOQ1G2m1G2mO:]O`O1G2mO$2_O!bO1G2nO$2mO`O'#GiO$2rO`O1G2nOOOQ1G2q1G2qO$2wQaO,5=YO/bQ`O'#IQO$3bQ$VO7+(_OhQaO7+(_O/bQ`O'#IRO$8bQ`O7+(_O!$[QdO7+(_O$8mQ`O7+(_O$8rQaO'#GqO$;RQ`O'#GrOOQO'#IS'#ISO$;ZQ`O,5=[OOQ#u,5=[,5=[O$;fQ`O,5=_O!$[QdO7+(aO!$[QdO7+(fO!$[QdO7+(hO$;qQaO1G3OO$;xQ`O1G3OO$;}QaO1G3OO!$[QdO7+(iO<XQaO1G3RO!$[QdO7+(lO2wQ`O'#HSO;}Q`O,5>pOOQ#u,5>p,5>pOOQ#u-E<S-E<SO$<UQaO7+(uO$<mQdO,5>oOOQS-E<R-E<RO!$[QdO7+(wO$>VQdO1G2^OOQS,5>h,5>hOOQS-E;z-E;zOOQ#u7+({7+({O$?oQ`O'#GXO:]Q`O'#H_OOQO'#IV'#IVO$@fQ`O,5=xOOQ#u,5=x,5=xO$AcQ!bO'#EQO$AzQ!bO7+(}O$BYQpO7+)RO#KRQpO7+)RO$BbQ`O'#HbO!$[QdO7+)RO$BpQdO,5>rOOQS-E<U-E<UO$COQdO1G5]O$CZQ`O7+)RO#KRQpO7+)ROOQ#u7+)R7+)RO$C`QdO,5>VOOQS-E;i-E;iO$D{QdO<<I`OOQS1G4r1G4rO$FhQ`O1G0|OOQO,5>Z,5>ZOOQO-E;m-E;mOOQS1G1_1G1_O$8rQaO,5:uO$G}QaO'#HlO$H[Q`O,5?QOOQS1G0`1G0`OOQS7+&Q7+&QO$HdQ`O7+&UO$IyQ`O1G0oO$K`Q`O,5>YOOQO,5>Y,5>YOOQO-E;l-E;lOOQS7+&Y7+&YOOQS7+&U7+&UOOQ#u<<Ld<<LdOOQ#u<<Li<<LiO$AzQ!bO<<LiOOQ#u<<Lf<<LfO!.]Q`O<<LfO!1TQ`O<<LfO$LxQ`O1G1|O$MTQ`O1G2QO!+iQaO1G1|OOQO1G2Q1G2QO$MYQ`O1G1|O$MdQ`O1G1|O$NyQ`O1G2RO% XQ`O'#F|O!+iQaO1G2ROOQO1G2R1G2ROOQO,5>c,5>cOOQO-E;u-E;uOOQS<<KP<<KPO% aQ`O'#IwO% iQ`O'#IwO% nQ`O,5<jO2wQ`O<<KPO$+qQpO<<KPO% sQ`O<<KPO2wQ`O<<NZO% {QtO<<NZO#5mQ`O<<KPO%!^QdO<<K]O%!nQpO<<K]O-RQaO<<K]O2wQ`O<<K]O%!yQdO'#HyO%#bQdO,5?dO$1YQdO,5<sO$/jQpO,5<sO%#sQ`O,5<sO#JkQ`O,5<qO!.mQdO,5<uOOQO-E;y-E;yO%$dQ!bO,5<qO%$oQ!bO'#IqO!$[QdO,5<qOOQO,5<s,5<sOOQO,5<u,5<uO%$}QdO,5<vOOQO-E;x-E;xOOQ#y1G2[1G2[OOQS<<K^<<K^O!.]Q`O<<K^O!1TQ`O<<K^OOOQ7+(X7+(XO%%YO`O7+(YOOOO,5=T,5=TOOOQ7+(Y7+(YOhQaO,5>lOOQ#u-E<O-E<OOhQaO<<KyOOQ#u<<Ky<<KyO$8mQ`O,5>mOOQO-E<P-E<PO!$[QdO<<KyO$8mQ`O<<KyO%%_Q`O<<KyO%%dQ`O,5=]O%&yQaO,5=^OOQO-E<Q-E<QOOQ#u1G2v1G2vOOQ#u<<K{<<K{OOQ#u<<LQ<<LQOOQ#u<<LS<<LSOOQT7+(j7+(jO%'ZQ`O7+(jO%'`QaO7+(jO%'gQ`O7+(jOOQ#u<<LT<<LTO%'lQ`O7+(mO%)RQ`O7+(mOOQ#u<<LW<<LWO%)WQpO,5=nOOQ#u1G4[1G4[O%)fQ`O<<LaOOQ#u<<Lc<<LcO:]Q`O,5=yO%)kQdO,5=yOOQO-E<T-E<TOOQ#u1G3d1G3dO%)vQ!bO,5;eO%*XQ!bO,5;gO#JfQ`O<<LiO%*jQ!bO'#FQP%+OQpO<<LmO!$[QdO<<LmO%+WQ`O'#HcO9cQ`O'#HcO%+cQ`O'#JWO%+kQ`O,5=|OOQ#u<<Lm<<LmO:]Q`O1G4^O%+pQdO7+*wO$BYQpO<<LmO#KRQpO<<LmO%+{Q`O1G0aOOQO,5>W,5>WOOQO-E;j-E;jO!+iQaO,5;UOOQ#uANBTANBTO#JfQ`OANBTOOQ#uANBQANBQO!.]Q`OANBQO!+iQaO7+'hOOQO7+'l7+'lO%-bQ`O7+'hO%.wQ`O7+'hO%/SQ`O7+'lO!+iQaO7+'mOOQO7+'m7+'mO%/XQdO'#F}OOQO'#Hv'#HvO%/jQ`O,5<hOOQO,5<h,5<hO%/rQ`O7+'mO%1XQ`O'#HxO%1gQ`O,5?cO%1gQ`O,5?cOOQO1G2U1G2UO$+qQpOAN@kOOQSAN@kAN@kO2wQ`OAN@kO%1oQtOANCuO%2QQ`OAN@kO-RQaOAN@wO%2YQdOAN@wO%2jQpOAN@wOOQS,5>e,5>eOOQS-E;w-E;wOOQO1G2_1G2_O$1YQdO1G2_O$/jQpO1G2_O#JkQ`O1G2]O!.mQdO1G2aO%$dQ!bO1G2]O!$[QdO1G2]OOQO1G2a1G2aOOQO1G2]1G2]O%2uQaO'#G]OOQO1G2b1G2bOOQSAN@xAN@xO!.]Q`OAN@xOOOQ<<Kt<<KtOOQ#u1G4W1G4WOOQ#uANAeANAeOOQO1G4X1G4XO%4tQ`OANAeO!$[QdOANAeO%4yQaO1G2wO%5ZQaO1G2xOOQT<<LU<<LUO%5kQ`O<<LUO%5pQaO<<LUO-RQaO,5=hOOQT<<LX<<LXOOQO1G3Y1G3YO%5wQ`O1G3YO!)aQeOANA{O%5|QdO1G3eOOQO1G3e1G3eO%6XQ`O1G3eO%6aQ!bO,5>]O%6rQ!bO'#FQO!$[QdOANBXOOQ#uANBXANBXO:]Q`O,5=}O%7WQ`O,5=}O%7cQ`O'#IXO%7wQ`O,5?rOOQS1G3h1G3hOOQS7+)x7+)xP%+OQpOANBXO%8PQ`O1G0pOOQ#uG27oG27oOOQ#uG27lG27lO%9fQ`O<<KSO!+iQaO<<KSOOQO<<KW<<KWO%:{Q`O<<KXOOQO,5<i,5<iO-RQaO,5<iO%<bQ`O,5<iOOQO-E;t-E;tOOQO1G2S1G2SOOQO,5>d,5>dO%<jQ`O,5>dOOQO-E;v-E;vO%<oQ`O1G4}OOQSG26VG26VO$+qQpOG26VO2wQ`OG26VO%<wQdOG26cO-RQaOG26cOOQO7+'y7+'yO$1YQdO7+'yO%$dQ!bO7+'wO!$[QdO7+'wOOQO7+'{7+'{OOQO7+'w7+'wO%=XQ`OLD+}O%>hQ`O'#IqO%>rQ`O'#IhO!$[QdO'#IOO%@lQaO,5<wOOQO,5<w,5<wOOQSG26dG26dO!$[QdOG27POOQ#uG27PG27PO%BkQaO7+(cOOQTANApANApO%B{Q`OANApO%CQQ`O1G3SOOQO7+(t7+(tOOQ#uG27gG27gO%CXQ`OG27gOOQO7+)P7+)PO%C^Q`O7+)PO!$[QdO7+)POOQ#uG27sG27sOOQO1G3i1G3iO:]Q`O1G3iO%CfQ`O'#HdO9cQ`O'#HdOOQO,5>s,5>sOOQO-E<V-E<VP!$[QdOG27sO%CqQ`OAN@nO+_QdO1G2TOOQO1G2T1G2TO-RQaO1G2TOOQO1G4O1G4OOOQSLD+qLD+qO$+qQpOLD+qO%EWQdOLD+}OOQO<<Ke<<KeO!$[QdO<<KcOOQO<<Kc<<KcO:]Q`O,5<xO%EhQ`O,5<yOOQP,5>j,5>jOOQP-E;|-E;|OOQO1G2c1G2cOOQ#uLD,kLD,kOOQTG27[G27[O!$[QdOLD-RO!$[QdO<<LkOOQO<<Lk<<LkOOQO7+)T7+)TO:]Q`O,5>OO%EpQ`O,5>OPOQ#uLD-_LD-_OOQO7+'o7+'oO+_QdO7+'oOOQS!$( ]!$( ]OOQOAN@}AN@}OOQS1G2d1G2dOOQS1G2e1G2eO%E{QdO1G2eOOQ#u!$(!m!$(!mOOQOANBVANBVOOQO1G3j1G3jO:]Q`O1G3jOOQO<<KZ<<KZOOQS7+(P7+(POOQO7+)U7+)UO%FWQpO'#FOO%F]QpO'#FOO%FWQpO,5;jO%F]QpO,5;jO%FbQpO,5;jO%FgQpO,5;jO#JkQ`O'#E|O%FlQdO,5<lO%HbQaO,5;OO%FbQpO1G1UO%FgQpO1G1UO#JkQ`O'#HpO#JkQ`O'#HqO-RQaO1G0jO%HiQ`O'#FOO%HnQ`O'#FOO%HsQaO'#GQO#-WQaO'#G`O#-WQaO'#GcO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO%H}QdO'#IjO%JmQdO'#IjO#-WQaO'#EbO#-WQaO'#IjO%LrQaO,5:xO#-WQaO,5;uO#-WQaO,5;wO%LyQdO,5<WO%NoQdO,5<XO&!eQdO,5<YO&$ZQdO,5<ZO&&PQdO,5<ZO&&aQdO,5<^O&(VQdO,5<}O#-WQaO1G0YO&){QdO1G1dO&+qQdO1G1dO&-gQdO1G1dO&/]QdO1G1dO&1RQdO1G1dO&2wQdO1G1dO&4mQdO1G1dO&6cQdO1G1dO&8XQdO1G1dO&9}QdO1G1dO&;sQdO1G1dO&=iQdO1G1dO&?_QdO1G1dO&ATQdO1G1dO&ByQdO1G1dO&DoQdO,5:|O&FeQdO,5?UO&HZQdO1G0dO#-WQaO1G0dO&JPQdO1G1aO&KuQdO1G1cO#-WQaO1G2VO#-WQaO7+%tO&MkQdO7+%tO' aQdO7+&OO#-WQaO7+'qO'#VQdO7+'qO'${QdO<<I`O'&qQdO<<K]O#-WQaO<<K]O#-WQaOAN@wO'(gQdOAN@wO'*]QdOG26cO#-WQaOG26cO',RQdOLD+}O'-wQaO,5;OO'/vQaO1G0jO'1rQdO'#IeO'2PQeO'#F]O'5vQeO'#F]O#-WQaO'#FlO'/vQaO'#FlO#-WQaO'#FmO'/vQaO'#FmO#-WQaO'#FnO'/vQaO'#FnO#-WQaO'#FoO'/vQaO'#FoO#-WQaO'#FoO'/vQaO'#FoO#-WQaO'#FrO'/vQaO'#FrO'9|QaO,5:nO':TQ`O,5<kO':]Q`O1G0YO'/vQaO1G1OO';oQ`O1G2VO';wQ`O7+'qO'<PQpO7+'qO'<[QpO<<K]O'<gQpOAN@wO'<rQaO'#GQO'/vQaO'#G`O'/vQaO'#GcO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO'#EbO'/vQaO'#IjO'>tQaO,5:xO'/vQaO,5;uO'/vQaO,5;wO'@sQdO,5<WO'BxQdO,5<XO'D}QdO,5<YO'GSQdO,5<ZO'IXQdO,5<ZO'IxQdO,5<^O'K}QdO,5<}O'/vQaO1G0YO'NSQdO1G1dO(!XQdO1G1dO($^QdO1G1dO(&cQdO1G1dO((hQdO1G1dO(*mQdO1G1dO(,rQdO1G1dO(.wQdO1G1dO(0|QdO1G1dO(3RQdO1G1dO(5WQdO1G1dO(7]QdO1G1dO(9bQdO1G1dO(;gQdO1G1dO(=lQdO1G1dO(?qQdO,5:|O(AvQdO,5?UO(C{QdO1G0dO'/vQaO1G0dO(FQQdO1G1aO(HVQdO1G1cO'/vQaO1G2VO'/vQaO7+%tO(J[QdO7+%tO(LaQdO7+&OO'/vQaO7+'qO(NfQdO7+'qO)!kQdO<<I`O)$pQdO<<K]O'/vQaO<<K]O'/vQaOAN@wO)&uQdOAN@wO)(zQdOG26cO'/vQaOG26cO)+PQdOLD+}O)-UQaO,5;OO#-WQaO1G0jO)-]Q`O'#GPO)-eQpO,5;dO)-pQ`O,5<kO!#[Q`O,5<kO!#[Q`O1G2VO2wQ`O1G2VO2wQ`O7+'qO2wQ`O<<K]O)-xQdO,5<lO)/}QdO'#IjO)1vQdO'#IeO)2dQaO,5:nO)2kQ`O,5<kO)2sQ`O1G0YO)4VQ`O1G2VO)4_Q`O7+'qO)4gQpO7+'qO)4rQpO<<K]O)4}QpOAN@wO2wQ`O'#ExO<XQaO'#FlO<XQaO'#FmO<XQaO'#FnO<XQaO'#FoO<XQaO'#FoO<XQaO'#FrO)5YQaO'#GQO<XQaO'#G`O<XQaO'#GcO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO)5dQ`O'#FsO-RQaO'#EbO-RQaO'#IjO)5lQaO,5:xO<XQaO,5;uO<XQaO,5;wO)5sQdO,5<WO)7rQdO,5<XO)9qQdO,5<YO);pQdO,5<ZO)=oQdO,5<ZO)>YQdO,5<^O)@XQdO,5<lO)BWQdO,5<}O)DVQ`O'#JUO)ElQ`O'#IgO<XQaO1G0YO)GRQdO1G1dO)IQQdO1G1dO)KPQdO1G1dO)MOQdO1G1dO)N}QdO1G1dO*!|QdO1G1dO*${QdO1G1dO*&zQdO1G1dO*(yQdO1G1dO**xQdO1G1dO*,wQdO1G1dO*.vQdO1G1dO*0uQdO1G1dO*2tQdO1G1dO*4sQdO1G1dO*6rQaO,5;OO*6yQdO,5:|O*7ZQdO,5?UO*7kQaO'#HmO*7{Q`O,5?TO*8TQdO1G0dO<XQaO1G0dO*:SQdO1G1aO*<RQdO1G1cO<XQaO1G2VO!+iQaO'#ITO*>QQ`O,5=eO*>YQaO'#HkO*>dQ`O,5?RO<XQaO7+%tO*>lQdO7+%tO*@kQ`O1G0jO!+iQaO1G0jO*BQQdO7+&OO<XQaO7+'qO*DPQdO7+'qO*FOQ`O,5>oO*GeQ`O,5>VO*HzQdO<<I`O*JyQ`O7+&UO*L`QdO<<K]O<XQaO<<K]O<XQaOAN@wO*N_QdOAN@wO+!^QdOG26cO<XQaOG26cO+$]QdOLD+}O+&[QaO,5;OO<XQaO1G0jO+&cQdO'#IjO+'PQ`O'#GPO+'XQ`O,5<kO!#[Q`O,5<kO!#[Q`O1G2VO2wQ`O1G2VO2wQ`O7+'qO2wQ`O<<K]O+'aQdO'#IeO+'}QeO'#F]O+(nQeO'#F]O+*jQaO'#F]O+,SQaO'#F]O!+iQaO'#FlO!+iQaO'#FmO!+iQaO'#FnO!+iQaO'#FoO!+iQaO'#FoO!+iQaO'#FrO+-rQaO'#GQO!+iQaO'#G`O!+iQaO'#GcO+-|QaO,5:nO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO+.TQ`O'#IjO$8rQaO'#EbO+/mQaOG26cO$8rQaO'#IjO+1iQ`O'#IiO+1qQaO,5:xO!+iQaO,5;uO!+iQaO,5;wO+1xQ`O,5<WO+3_Q`O,5<XO+4tQ`O,5<YO+6ZQ`O,5<ZO+7pQ`O,5<ZO+9VQ`O,5<^O+:lQ`O,5<kO+:tQ`O,5<lO+<ZQ`O,5<}O+=pQ`O1G0YO!+iQaO1G0YO+?SQ`O1G1dO+@iQ`O1G1dO+BOQ`O1G1dO+CeQ`O1G1dO+DzQ`O1G1dO+FaQ`O1G1dO+GvQ`O1G1dO+I]Q`O1G1dO+JrQ`O1G1dO+LXQ`O1G1dO+MnQ`O1G1dO, TQ`O1G1dO,!jQ`O1G1dO,$PQ`O1G1dO,%fQ`O1G1dO,&{Q`O1G0dO!+iQaO1G0dO,(bQ`O1G1aO,)wQ`O1G1cO,+^Q`O1G2VO$8rQaO,5<tO!+iQaO1G2VO!+iQaO7+%tO,+fQ`O7+%tO,,{Q`O7+&OO!+iQaO7+'qO,.bQ`O7+'qO,.jQ`O7+'qO,0PQpO7+'qO,0[Q`O<<I`O,1qQ`O<<K]O,3WQpO<<K]O!+iQaO<<K]O!+iQaOAN@wO,3cQ`OAN@wO,4xQpOAN@wO,5TQ`OG26cO!+iQaOG26cO,6jQ`OLD+}O,8PQaO,5;OO!+iQaO1G0jO,8WQ`O'#IjO$8rQaO'#FlO$8rQaO'#FmO$8rQaO'#FnO$8rQaO'#FoO$8rQaO'#FoO+/mQaO'#FoO$8rQaO'#FrO,9pQaO'#GQO,9zQaO'#GQO$8rQaO'#G`O+/mQaO'#G`O$8rQaO'#GcO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO,;|Q`O'#FsO!+iQaO'#EbO!+iQaO'#IjO,<UQaO,5:xO,<]QaO,5:xO$8rQaO,5;uO+/mQaO,5;uO$8rQaO,5;wO,>[QdO,5<WO,?}QdO,5<XO,ApQdO,5<YO,CcQdO,5<ZO,EUQdO,5<ZO,FwQ`O,5<ZO,HWQdO,5<^O,IyQdO,5<lO%=XQ`O,5<lO,KlQdO,5<}O$8rQaO1G0YO+/mQaO1G0YO,M_QdO1G1dO- QQ`O1G1dO-!aQdO1G1dO-$SQ`O1G1dO-%cQdO1G1dO-'UQ`O1G1dO-(eQdO1G1dO-*WQ`O1G1dO-+gQdO1G1dO--YQ`O1G1dO-.iQdO1G1dO-0[Q`O1G1dO-1kQdO1G1dO-3^Q`O1G1dO-4mQdO1G1dO-6`Q`O1G1dO-7oQdO1G1dO-9bQ`O1G1dO-:qQdO1G1dO-<dQ`O1G1dO-=sQdO1G1dO-?fQ`O1G1dO-@uQdO1G1dO-BhQ`O1G1dO-CwQdO1G1dO-EjQ`O1G1dO-FyQdO1G1dO-HlQ`O1G1dO-I{QdO1G1dO-KnQ`O1G1dO-L}Q`O,5:|O-NdQ`O,5?UO. yQdO1G0dO.#lQ`O1G0dO$8rQaO1G0dO+/mQaO1G0dO.${QdO1G1aO.&nQ`O1G1aO.'}QdO1G1cO$8rQaO1G2VO$8rQaO7+%tO+/mQaO7+%tO.)pQdO7+%tO.+cQ`O7+%tO.,rQdO7+&OO..eQ`O7+&OO$8rQaO7+'qO./tQdO7+'qO.1gQdO<<I`O.3YQ`O<<I`O.4iQdO<<K]O$8rQaO<<K]O$8rQaOAN@wO.6[QdOAN@wO.7}QdOG26cO$8rQaOG26cO.9pQdOLD+}O.;cQaO,5;OO.;jQaO,5;OO$8rQaO1G0jO+/mQaO1G0jO.=iQ`O'#IjO.>{QdO'#IjO.BbQ`O'#IeO.BoQ`O'#GPO.BwQaO,5:nO.COQ`O,5<kO.CWQdO'#GYO.CiQ`O,5<kO!#[Q`O,5<kO.CqQ`O1G0YO.ETQdO,5:|O.FvQdO,5?UO.HiQ`O1G2VO!#[Q`O1G2VO.HqQdO'#H}O.ISQdO,5?hO2wQ`O1G2VO2wQ`O7+'qO.IbQ`O7+'qO.IjQdO1G2`O.KVQpO7+'qO.KbQpO<<K]O2wQ`O<<K]O.KmQpOAN@wO.KxQdO'#IeO.LcQ`O'#IeO.NVQaO,5:nO.N^QaO,5:nO.NeQ`O,5<kO.NmQ`O7+'qO.NuQ`O1G0YO/!XQ`O1G0YO/#kQ`O1G2VO/#sQ`O7+'qO/#{QpO7+'qO/$WQpOAN@wO/$cQpO<<K]O/$nQpOAN@wO/$yQ`O'#GPO/%RQ`O'#FsO/%ZQ`O,5<kO/%cQdO'#I|O!#[Q`O,5<kO!#[Q`O1G2VO2wQ`O1G2VO2wQ`O7+'qO2wQ`O<<K]O/%qQ`O'#GPO/%yQ`O,5<kO/&RQ`O,5<kO!#[Q`O,5<kO!#[Q`O1G2VO!#[Q`O1G2VO2wQ`O1G2VO2wQ`O<<K]O2wQ`O7+'qO2wQ`O<<K]O/&ZQ`O'#FsO/&cQ`O'#FsO/&kQ`O'#Fs\",\n  stateData: \"/'Q~O!eOS!fOS'SOS!hQQ~O!jTO'TRO~OPgOQ|OS!lOU_OW}OX!XO[mO]!_O^!WO`![Oa!SOb!]Ok!dOm!lOowOp!TOq!UOsuOt!gOu!VOv!POxkOykO|!bO}aO!O^O!P!eO!QxO!R}O!TpO!VlO!WlO!X!YO!Y!QO!ZzO![!cO!]!ZO!^!^O!_!fO!a!`O!b!RO!djO!nWO!pXO!z]O#X`O#dhO#fbO#gcO#sdO$[oO$dnO$eoO$hqO$krO$u!kO%TyO%U!OO%W}O%X}O%`|O'WYO'u{O~O!h!mO~O'TRO!j!iX&|!iX'Q!iX~O!j!pO~O!e!qO!f!qO!h!mO'Q!tO'S!qO~PhO!o!vO~PhO!n!tX#T!tX#s#vX'P!tX!y!tX#P!tX!p!tX~OT!tXz!tX!S!tX!c!tX!r!tX!w!tX!z!tX#X!tX#a!tX#b!tX#y!tX$R!tX$S!tX$T!tX$U!tX$V!tX$X!tX$Y!tX$Z!tX$[!tX$]!tX$^!tX$_!tX%T!tX#O!tX#Y!tX!o!tXV!tX#|!tX$O!tXw!tX{!tX~P&sOT'eXz'eX!S'eX!c'eX!w'eX!z'eX#T'eX#X'eX#a'eX#b'eX#y'eX$R'eX$S'eX$T'eX$U'eX$V'eX$X'eX$Y'eX$Z'eX$['eX$]'eX$^'eX$_'eX%T'eX~O!r!xO!n'eX'P'eX~P)dOT#SOz#QO!S#TO!c#UO!n#bO!w!yO!z!|O#T#PO#X!zO#a!{O#b!{O#y#OO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cO'P#bO~OPgOQ|OU_OW}O[mOowOs#fOxkOykO}aO!O^O!QxO!R}O!TpO!VlO!WlO!ZzO!djO!z]O#X`O#dhO#fbO#gcO#sdO$[oO$dnO$eoO$hqO%TyO%U!OO%W}O%X}O%`|O'WYO'u{O~O!z]O~O!z#iO~OP7wOQ|OU_OW}O[7zOo>uOs#fOx7xOy7xO}aO!O^O!Q8OO!R}O!T7}O!V7yO!W7yO!Z8QO!d:QO!z]O#T#mO#V#lO#X`O#dhO#fbO#gcO#sdO$[7|O$d7{O$e7|O$hqO%T8PO%U!OO%W}O%X}O%`|O'WYO'u{O#Y']P~O#O#qO~P/lO!z#rO~O#d#tO#fbO#gcO~O'a#vO~O#s#zO~OU$OO!R$OO!w#}O#s3hO'W#{O~OT'XXz'XX!S'XX!c'XX!n'XX!w'XX!z'XX#T'XX#X'XX#a'XX#b'XX#y'XX$R'XX$S'XX$T'XX$U'XX$V'XX$X'XX$Y'XX$Z'XX$['XX$]'XX$^'XX$_'XX%T'XX'P'XX!y'XX!o'XX~O#|$QO$O$RO~P3YOP7wOQ|OU_OW}O[7zOo>uOs#fOx7xOy7xO}aO!O^O!Q8OO!R}O!T7}O!V7yO!W7yO!Z8QO!d:QO!z]O#X`O#dhO#fbO#gcO#sdO$[7|O$d7{O$e7|O$hqO%T8PO%U!OO%W}O%X}O%`|O'WYO'u{OT$PXz$PX!S$PX!c$PX!n$PX!w$PX#a$PX#b$PX#y$PX$R$PX$S$PX$T$PX$U$PX$V$PX$X$PX$Y$PX$Z$PX$]$PX$^$PX$_$PX'P$PX!y$PX!o$PX~Or$TO#T8eO#V8dO~P5^O#sdO'WYO~OS$fO]$aOk$dOm$fOs$`O!a$bO$krO$u$eO~O!z$hO#T$jO'W$gO~Oo$mOs$lO#d$nO~O!z$hO#T$rO~O!U$uO$u$tO~P-ROR${O!p$zO#d$yO#g$zO&}${O~O't$}O~P;PO!z%SO~O!z%UO~O!n#bO'P#bO~P-RO!pXO~O!z%`O~OP7wOQ|OU_OW}O[7zOo>uOs#fOx7xOy7xO}aO!O^O!Q8OO!R}O!T7}O!V7yO!W7yO!Z8QO!d:QO!z]O#X`O#dhO#fbO#gcO#sdO$[7|O$d7{O$e7|O$hqO%T8PO%U!OO%W}O%X}O%`|O'WYO'u{O~O!z%dO~O]$aO~O!pXO#sdO'WYO~O]%rOs%rO#s%nO'WYO~O!j%wO'Q%wO'TRO~O'Q%zO~PhO!o%{O~PhO!r%}O~P<XO#Y&PO~P<XO!p&SO#d&RO'a&QO~OPgOQ|OU_OW}O[:WOo?jOs#fOx:UOy:UO}aO!O^O!Q:[O!R}O!T:ZO!V:VO!W:VO!Z:^O!d:TO!z]O#V&WO#X`O#dhO#fbO#gcO#sdO$[:YO$d:XO$e:YO$hqO%T:]O%U!OO%W}O%X}O%`|O'WYO'u{O~O!y'bP~P@aO!p&[O#d&]O'W$gO~OT#SOz#QO!S#TO!c#UO!w!yO!z!|O#T#PO#X!zO#a!{O#b!{O#y#OO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cO~O!y&oO~PCVO!z$hO#T&pO~Oo$mOs$lO~O!p&qO~O#O&tO#T=PO#V=OO!y']P~P<XOT8TOz8RO!S8UO!c8VO!w:_O!z!|O#T#PO#X!zO#a!{O#b!{O#y#OO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O'^X#Y'^X~O#P&uO~PEqO#O&xO#Y']X~O#Y&zO~O#O'PO!y'_P~P<XO!o'QO~PCVO!n#uX#T#uX#s#tX'P#uX!y#uX#P#uX!p#uX~OT#uXz#uX!S#uX!c#uX!w#uX!z#uX#X#uX#a#uX#b#uX#y#uX$R#uX$S#uX$T#uX$U#uX$V#uX$X#uX$Y#uX$Z#uX$[#uX$]#uX$^#uX$_#uX%T#uX#O#uX#Y#uX!o#uXV#uX!r#uX#|#uX$O#uXw#uX~PH[O#s'RO~O'a'UO~O#n!tX#V!tX#d!tX~P&sO!y']O#T'ZO#n'XO~O#T'aO~P-RO!n$`a'P$`a!y$`a!o$`a~PCVO!n$aa'P$aa!y$aa!o$aa~PCVO!n$ba'P$ba!y$ba!o$ba~PCVO!n$ca'P$ca!y$ca!o$ca~PCVO!z!|O#X!zO#a!{O#b!{O#y#OO%T#cOT$ca!S$ca!c$ca!n$ca!w$ca#T$ca$R$ca$S$ca$T$ca$U$ca$V$ca$X$ca$Y$ca$Z$ca$[$ca$]$ca$^$ca$_$ca'P$ca!y$ca!o$ca~Oz#QO~PMVO!n$fa'P$fa!y$fa!o$fa~PCVO!z!|O#O$mX#Y$mX~O#O'eO#Y'iX~O#Y'gO~O#T'hO'W$gO~O]'jO~O$u'nO~O!a'tO#T'rO#V'sO#d'qO$krO!y'gP~P2wO!_'zO!pXO!r'yO~O!z$hO'W$gO~O!z$hO~O!z$hO#T(OO~O!z$hO#T(QO~O#|(RO!n$|X#O$|X'P$|X~O#O(SO!n'pX'P'pX~O!n#bO'P#bO~O!r(WO#P(VO~O!n$ta'P$ta!y$ta!o$ta~PCVOl(YOw(ZO!p([O!z!|O~O$u(aO~O!z!|O#X!zO#a!{O#b!{O#y#OO~OT%Saz%Sa!S%Sa!c%Sa!n%Sa!w%Sa#T%Sa$R%Sa$S%Sa$T%Sa$U%Sa$V%Sa$X%Sa$Y%Sa$Z%Sa$[%Sa$]%Sa$^%Sa$_%Sa%T%Sa'P%Sa!y%Sa#O%Sa#P%Sa#Y%Sa!o%Sa!r%SaV%Sa#|%Sa$O%Sa!p%Sa~P!%aO!n%Va'P%Va!y%Va!o%Va~PCVO#X(dO#a(bO#b(bO'O(cOR&sX!p&sX#d&sX#g&sX&}&sX't&sX~O't(gO~P;PO!r(hO~PhO!p(kO!r(lO~O!r(hO'P(oO~PhO!b(sO~O!n(tO~P<XOZ)POn)QO~OT8TOz8RO!S8UO!c8VO!w:_O#O)TO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!n'xX'P'xX~P!%aOPgOQ|OU_OW}O[:WOo?jOs#fOx:UOy:UO}aO!O^O!Q:[O!R}O!T:ZO!V:VO!W:VO!Z:^O!d:TO!z]O#X`O#dhO#fbO#gcO#sdO$[:YO$d:XO$e:YO$hqO%T:]O%U!OO%W}O%X}O%`|O'WYO'u{O~O#|)XO~O#O)YO!n'oX'P'oX~Ol(YO!p([O~Ow(ZO!p)`O!r)cO~O!n#bO!pXO'P#bO~O#s)fO~OV)iO#O)gO!n'yX'P'yX~O#s)kO'WYO~OT8TOz8RO!S8UO!c8VO!w:_O#O)nO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!n'ZX'P'ZX#P'ZX~P!%aOl(YOw(ZO!p([O~O!j)tO'Q)tO~OT8TOz8RO!S8UO!c8VO!r)uO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO#Y)wO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y'cX#O'cX~P!%aO!r)yO!y'eX#O'eX~P)dO!y#kX#O#kX~P!+iO#O){O!y'bX~O!y)}O~O%T#cOT$Qiz$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi$^$Qi$_$Qi'P$Qi!y$Qi#O$Qi#P$Qi#Y$Qi!o$Qi!r$QiV$Qi#|$Qi$O$Qi!p$Qi~P!%aOz#QO#T#PO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO!w!yO#T#PO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi'P$Qi!y$Qi!o$Qi~P!%aOT#SOz#QO!c#UO!w!yO#T#PO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cO!S$Qi!n$Qi'P$Qi!y$Qi!o$Qi~P!%aOT#SOz#QO!w!yO#T#PO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cO!S$Qi!c$Qi!n$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO#T#PO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi$R$Qi$S$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO#T#PO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi$R$Qi$S$Qi$T$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO#T#PO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi$R$Qi$S$Qi$T$Qi$U$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO#T#PO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO$[#_O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$]$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO$Z#^O$[#_O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$]$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi$^$Qi'P$Qi!y$Qi!o$Qi~P!%aO_*PO~P<XO!y*SO~O#T*VO~P<XOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O#Ua#Y#Ua#P#Ua!n#Ua'P#Ua!r#Ua!y#Ua!o#UaV#Ua!p#Ua~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O'^a#Y'^a#P'^a!n'^a'P'^a!r'^a!y'^a!o'^aV'^a!p'^a~P!%aO#T#mO#V#lO#O&aX#Y&aX~P<XO#O&xO#Y']a~O#Y*YO~OT8TOz8RO!S8UO!c8VO!w:_O#O*[O#P*ZO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!y'_X~P!%aO#O*[O!y'_X~O!y*^O~O!n#wX#T#wX#s#tX'P#wX!y#wX#P#wX!p#wX~OT#wXz#wX!S#wX!c#wX!w#wX!z#wX#X#wX#a#wX#b#wX#y#wX$R#wX$S#wX$T#wX$U#wX$V#wX$X#wX$Y#wX$Z#wX$[#wX$]#wX$^#wX$_#wX%T#wX#O#wX#Y#wX!o#wXV#wX!r#wX#|#wX$O#wXw#wX~P#)XO#s*aO~O#n'XO!y#ma#T#ma#V#ma#d#ma!p#ma#P#ma!n#ma'P#ma~O#T'ZO!y#oa#n#oa#V#oa#d#oa!p#oa#P#oa!n#oa'P#oa~OPgOQ|OU_OW}O[5jOo7dOs#fOx5fOy5fO}aO!O^O!Q3xO!R}O!T5pO!V5hO!W5hO!Z3zO!d5dO!z]O#X`O#dhO#fbO#gcO#sdO$[5nO$d5lO$e5nO$hqO%T3yO%U!OO%W}O%X}O%`|O'WYO'u{O~O#n#uX#V#uX#d#uX~PH[Oz#QO!w!yO#T#PO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT#Qi!S#Qi!c#Qi!n#Qi'P#Qi!y#Qi!o#Qi~P!%aOz#QO!w!yO#T#PO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT#}i!S#}i!c#}i!n#}i'P#}i!y#}i!o#}i~P!%aO!n$Pi'P$Pi!y$Pi!o$Pi~PCVO#sdO'WYO#O&iX#Y&iX~O#O'eO#Y'ia~Ow(ZO!p)`O!r*rO~O#T*wO#V*yO#d*xO#n'XO~O#T*{O#V*yO#d*xO$krO~P2wO#|*|O!y$jX#O$jX~O#V*yO#d*xO~O#d*}O~O#d+PO~P2wO#O+QO!y'gX~O!y+SO~O!z+UO~O!_+YO!pXO!r+XO~O!r+[O!p'qi!n'qi'P'qi~O!r+_O#P+^O~O#d$nO!n&qX#O&qX'P&qX~O#O(SO!n'pa'P'pa~OT$tiz$ti!S$ti!c$ti!n$ti!w$ti!z$ti#T$ti#X$ti#a$ti#b$ti#y$ti#|#ha$O#ha$R$ti$S$ti$T$ti$U$ti$V$ti$X$ti$Y$ti$Z$ti$[$ti$]$ti$^$ti$_$ti%T$ti'P$ti!y$ti#O$ti#P$ti#Y$ti!o$ti!r$tiV$ti!p$ti~OS+kO]+nOm+kOs$`O!U+kO!_+qO!`+kO!a+kO!o+uO#d>xO$hqO$krO~P2wO#X+|O#a+{O#b+{O~O#d,OO%W,OO%^+}O'W$gO~O!o,PO~PCVOc%bXd%bXh%bXj%bXf%bXg%bXe%bX~PhOc,TOd,ROP%aiQ%aiS%aiU%aiW%aiX%ai[%ai]%ai^%ai`%aia%aib%aik%aim%aio%aip%aiq%ais%ait%aiu%aiv%aix%aiy%ai|%ai}%ai!O%ai!P%ai!Q%ai!R%ai!T%ai!V%ai!W%ai!X%ai!Y%ai!Z%ai![%ai!]%ai!^%ai!_%ai!a%ai!b%ai!d%ai!n%ai!p%ai!z%ai#X%ai#d%ai#f%ai#g%ai#s%ai$[%ai$d%ai$e%ai$h%ai$k%ai$u%ai%T%ai%U%ai%W%ai%X%ai%`%ai&|%ai'W%ai'u%ai'Q%ai!o%aih%aij%aif%aig%aiY%ai_%aii%aie%ai~Oc,XOd,UOh,WO~OY,YO_,ZO!o,^O~OY,YO_,ZOi%gX~Oi,`O~Oj,aO~O!n,cO~P<XO!n,eO~Of,fO~OT8TOV,gOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aOg,hO~O!z,iO~OZ)POn)QOP%uiQ%uiS%uiU%uiW%uiX%ui[%ui]%ui^%ui`%uia%uib%uik%uim%uio%uip%uiq%uis%uit%uiu%uiv%uix%uiy%ui|%ui}%ui!O%ui!P%ui!Q%ui!R%ui!T%ui!V%ui!W%ui!X%ui!Y%ui!Z%ui![%ui!]%ui!^%ui!_%ui!a%ui!b%ui!d%ui!n%ui!p%ui!z%ui#X%ui#d%ui#f%ui#g%ui#s%ui$[%ui$d%ui$e%ui$h%ui$k%ui$u%ui%T%ui%U%ui%W%ui%X%ui%`%ui&|%ui'W%ui'u%ui'Q%ui!o%uic%uid%uih%uij%uif%uig%uiY%ui_%uii%uie%ui~O#|,mO~O#O)TO!n%ma'P%ma~O!y,pO~O'W$gO!n&pX#O&pX'P&pX~O#O)YO!n'oa'P'oa~OS+kOY,vO]+nOm+kOs$`O!U+kO!_+qO!`+kO!a+kO!o,yO#d>xO$hqO$krO~P2wO!p)`O~OU$OO!R$OO!w3nO#s3iO'W,zO~O#s,|O~O!p-OO'a'UO~O#sdO'WYO!n&zX#O&zX'P&zX~O#O)gO!n'ya'P'ya~O#s-UO~O!n&_X#O&_X'P&_X#P&_X~P<XO#O)nO!n'Za'P'Za#P'Za~Oz#QO#T#PO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT!vq!S!vq!c!vq!n!vq!w!vq'P!vq!y!vq!o!vq~P!%aO!o-ZO~PCVOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y#ka#O#ka~P!%aO!y&cX#O&cX~P@aO#O){O!y'ba~O!o-_O~PCVO#P-`O~O#O-aO!o'YX~O!o-cO~O!y-dO~OT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O#Wi#Y#Wi~P!%aO!y&bX#O&bX~P<XO#O*[O!y'_a~O!y-jO~O#n'XO!y&ea#T&ea#V&ea#d&ea!p&ea#P&ea!n&ea'P&ea~OT#lqz#lq!S#lq!c#lq!n#lq!w#lq#T#lq#|#lq$O#lq$R#lq$S#lq$T#lq$U#lq$V#lq$X#lq$Y#lq$Z#lq$[#lq$]#lq$^#lq$_#lq%T#lq'P#lq!y#lq#O#lq#P#lq#Y#lq!o#lq!r#lqV#lq!p#lq~P!%aO#n#wX#V#wX#d#wX~P#)XOz#QO!w!yO#T#PO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT#Qq!S#Qq!c#Qq!n#Qq'P#Qq!y#Qq!o#Qq~P!%aO#V-sO#d-rO~P2wO#|-tO!y$ja#O$ja~O#d-uO~O#T-vO#V-sO#d-rO#n'XO~O#V-sO#d-rO~O#T'ZO#d-xO#n'XO~O!p-yO#|-zO!y$oa#O$oa~O!a'tO#T'rO#V'sO#d'qO$krO!y&kX#O&kX~P2wO#O+QO!y'ga~O!pXO#T'ZO#n'XO~O#T.QO#d.PO!y'kP~O!pXO!r.SO~O!r.VO!p'qq!n'qq'P'qq~O!_.XO!pXO!r.SO~O!r.]O#P.[O~OT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!n$|i#O$|i'P$|i~P!%aO!n$sq'P$sq!y$sq!o$sq~PCVO#P.[O#T'ZO#n'XO~O#O.^Ow'lX!p'lX!n'lX'P'lX~O#T'ZO#d>xO#n'XO~OS+kO].cOm+kOs$`O!U+kO!`+kO!a+kO#d>xO$hqO$krO~P2wOS+kO].cOm+kOs$`O!U+kO!`+kO!a+kO#d>xO$hqO~P2wO!n#bO!p-yO'P#bO~OS+kO]+nOm+kOs$`O!U+kO!_+qO!`+kO!a+kO!o.mO#d>xO$hqO$krO~P2wO#d.rO%W.rO%^+}O'W$gO~O%W.sO~O#Y.tO~Oc%bad%bah%baj%baf%bag%bae%ba~PhOc.wOd,ROP%aqQ%aqS%aqU%aqW%aqX%aq[%aq]%aq^%aq`%aqa%aqb%aqk%aqm%aqo%aqp%aqq%aqs%aqt%aqu%aqv%aqx%aqy%aq|%aq}%aq!O%aq!P%aq!Q%aq!R%aq!T%aq!V%aq!W%aq!X%aq!Y%aq!Z%aq![%aq!]%aq!^%aq!_%aq!a%aq!b%aq!d%aq!n%aq!p%aq!z%aq#X%aq#d%aq#f%aq#g%aq#s%aq$[%aq$d%aq$e%aq$h%aq$k%aq$u%aq%T%aq%U%aq%W%aq%X%aq%`%aq&|%aq'W%aq'u%aq'Q%aq!o%aqh%aqj%aqf%aqg%aqY%aq_%aqi%aqe%aq~Oc.|Od,UOh.{O~O!r(hO~OP7wOQ|OU_OW}O[<ROo?sOs#fOx<POy<PO}aO!O^O!Q<WO!R}O!T<VO!V<QO!W<QO!Z<[O!d:RO!z]O#X`O#dhO#fbO#gcO#sdO$[<TO$d<SO$e<TO$hqO%T<YO%U!OO%W}O%X}O%`|O'WYO'u{O~O!n/PO!r/PO~OY,YO_,ZO!o/RO~OY,YO_,ZOi%ga~O!y/VO~P!+iO!n/XO~O!n/XO~P<XOQ|OW}O!R}O%W}O%X}O%`|O'u{O~OT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!n&wa#O&wa'P&wa~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!n$zi#O$zi'P$zi~P!%aOS+kOY/cO].cOm+kOs$`O!U+kO!`+kO!a+kO#d>xO$hqO$krO~P2wOS+kOY,vO]+nOm+kOs$`O!U+kO!_+qO!`+kO!a+kO!o/fO#d>xO$hqO$krO~P2wOw!tX!p!tX#T!tX#n!tX#s#vX#|!tX'W!tX~Ow(ZO!p)`O#T3tO#n3sO~O!p-OO'a&fa~O]/nOs/nO#sdO'WYO~OV/rO!n&za#O&za'P&za~O#O)gO!n'yi'P'yi~O#s/tO~OT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!n&_a#O&_a'P&_a#P&_a~P!%aOz#QO#T#PO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT!vy!S!vy!c!vy!n!vy!w!vy'P!vy!y!vy!o!vy~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y#ji#O#ji~P!%aO_*PO!o&`X#O&`X~P<XO#O-aO!o'Ya~OT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O#Wq#Y#Wq~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y#]i#O#]i~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#P/yO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!y&ba#O&ba~P!%aO#|0OO!y$ji#O$ji~O#d0PO~O#V0SO#d0RO~P2wOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$ji#O$ji~P!%aO!p-yO#|0TO!y$oi#O$oi~O!o0YO'W$gO~O#O0[O!y'kX~O#d0^O~O!y0_O~O!pXO!r0bO~O#T'ZO#n'XO!p'qy!n'qy'P'qy~O!n$sy'P$sy!y$sy!o$sy~PCVO#P0eO#T'ZO#n'XO~O#sdO'WYOw&mX!p&mX#O&mX!n&mX'P&mX~O#O.^Ow'la!p'la!n'la'P'la~OS+kO]0mOm+kOs$`O!U+kO!`+kO!a+kO#d>xO$hqO~P2wO#T3tO#n3sO'W$gO~O#|)XO#T'eX#n'eX'W'eX~O!n#bO!p0sO'P#bO~O#Y0wO~Oh0|O~OT<aOz<]O!S<cO!c<eO!n0}O!r0}O!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO~P!%aOY%fa_%fa!o%fai%fa~PhO!y1PO~O!y1PO~P!+iO!n1RO~OT8TOz8RO!S8UO!c8VO!w:_O!y1TO#P1SO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aO!y1TO~O!y1UO#T'ZO#d1VO#n'XO~O!y1WO~O!n#bO#|1ZO'P#bO~O#n3sOw#ma!p#ma#T#ma'W#ma~O#T3tOw#oa!p#oa#n#oa'W#oa~Ow#uX!p#uX#T#uX#n#uX#s#tX'W#uX~O!p-OO'a*`O~OV1`O!o&VX#O&VX~O#O1bO!o'zX~O!o1dO~O#O)gO!n'yq'P'yq~OT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!o!}i#O!}i~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$jq#O$jq~P!%aO#|1kO!y$jq#O$jq~O#d1lO~O!n#bO!pXO!z$hO#P1oO'P#bO~O!o1rO'W$gO~OT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$oq#O$oq~P!%aO#T1tO#d1sO!y&lX#O&lX~O#O0[O!y'ka~O#T'ZO#n'XO!p'q!R!n'q!R'P'q!R~O!pXO!r1yO~O!n$s!R'P$s!R!y$s!R!o$s!R~PCVO#P1{O#T'ZO#n'XO~OP7wOU_O[:rOo?tOs#fOx:rOy:rO}aO!O^O!Q<XO!T:rO!V:rO!W:rO!Z:rO!d:SO!o2XO!z]O#X`O#dhO#fbO#gcO#sdO$[<UO$d:rO$e<UO$hqO%T<ZO%U!OO'WYO~P$<UOh2ZO~OY%ei_%ei!o%eii%ei~PhOY%fi_%fi!o%fii%fi~PhO!y2^O~O!y2^O~P!+iO!y2aO~O!n#bO#|2eO'P#bO~O%W2fO%`2fO~O#n3sOw&ea!p&ea#T&ea'W&ea~Ow#wX!p#wX#T#wX#n#wX#s#tX'W#wX~OV2iO!o&Va#O&Va~O]2kOs2kO#sdO'WYO!o&{X#O&{X~O#O1bO!o'za~OT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y#^i#O#^i~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$jy#O$jy~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$oy#O$oy~P!%aO!pXO#P2rO~O#d2sO~O#O0[O!y'ki~O!n$s!Z'P$s!Z!y$s!Z!o$s!Z~PCVOT<bOz<^O!S<dO!c<fO!w?_O#T#PO$R<`O$S<hO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cO~P!%aOV2{O{2zO~P)dOV2{O{2zOT'[Xz'[X!S'[X!c'[X!w'[X!z'[X#T'[X#X'[X#a'[X#b'[X#y'[X#|'[X$O'[X$R'[X$S'[X$T'[X$U'[X$V'[X$X'[X$Y'[X$Z'[X$['[X$]'[X$^'[X$_'[X%T'[X~OP7wOU_O[:rOo?tOs#fOx:rOy:rO}aO!O^O!Q<XO!T:rO!V:rO!W:rO!Z:rO!d:SO!o3OO!z]O#X`O#dhO#fbO#gcO#sdO$[<UO$d:rO$e<UO$hqO%T<ZO%U!OO'WYO~P$<UOY%eq_%eq!o%eqi%eq~PhO!y3QO~O!y%pi~PCVOe3RO~O%W3SO%`3SO~OV3VO!o&WX#O&WX~OT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$j!R#O$j!R~P!%aO!n$s!c'P$s!c!y$s!c!o$s!c~PCVO!a3`O'W$gO~OV3dO!o&Wa#O&Wa~O'W$gO!n%Ri'P%Ri~O'a'_O~O'a/jO~O'a*iO~O'a1]O~OT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$ta#|$ta$O$ta'P$ta!y$ta!o$ta#O$ta~P!%aO#T3uO~P-RO#s3lO~O#s3mO~O!U$uO$u$tO~P#-WOT8TOz8RO!S8UO!c8VO!w:_O#P3pO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!n'^X'P'^X!y'^X!o'^X~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#P5aO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O'^X#Y'^X#|'^X$O'^X!n'^X'P'^X!r'^X!y'^X!o'^XV'^X!p'^X~P!%aO#T5OO~P#-WOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$`a#|$`a$O$`a'P$`a!y$`a!o$`a#O$`a~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$aa#|$aa$O$aa'P$aa!y$aa!o$aa#O$aa~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$ba#|$ba$O$ba'P$ba!y$ba!o$ba#O$ba~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$ca#|$ca$O$ca'P$ca!y$ca!o$ca#O$ca~P!%aOz3{O#|$ca$O$ca#O$ca~PMVOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$fa#|$fa$O$fa'P$fa!y$fa!o$fa#O$fa~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n%Va#|%Va$O%Va'P%Va!y%Va!o%Va#O%Va~P!%aOz3{O#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#|$Qi$O$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi#|$Qi$O$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOT3}Oz3{O!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!S$Qi!n$Qi#|$Qi$O$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOT3}Oz3{O!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!S$Qi!c$Qi!n$Qi#|$Qi$O$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O#T#PO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#|$Qi$O$Qi$R$Qi$S$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O#T#PO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O#T#PO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O#T#PO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O$[4YO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$]$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O$Z4XO$[4YO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$]$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi$^$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n#Ua#|#Ua$O#Ua'P#Ua!y#Ua!o#Ua#O#Ua~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n'^a#|'^a$O'^a'P'^a!y'^a!o'^a#O'^a~P!%aOz3{O!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT#Qi!S#Qi!c#Qi!n#Qi#|#Qi$O#Qi'P#Qi!y#Qi!o#Qi#O#Qi~P!%aOz3{O!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT#}i!S#}i!c#}i!n#}i#|#}i$O#}i'P#}i!y#}i!o#}i#O#}i~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$Pi#|$Pi$O$Pi'P$Pi!y$Pi!o$Pi#O$Pi~P!%aOz3{O#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT!vq!S!vq!c!vq!n!vq!w!vq#|!vq$O!vq'P!vq!y!vq!o!vq#O!vq~P!%aOz3{O!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT#Qq!S#Qq!c#Qq!n#Qq#|#Qq$O#Qq'P#Qq!y#Qq!o#Qq#O#Qq~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$sq#|$sq$O$sq'P$sq!y$sq!o$sq#O$sq~P!%aOz3{O#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT!vy!S!vy!c!vy!n!vy!w!vy#|!vy$O!vy'P!vy!y!vy!o!vy#O!vy~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$sy#|$sy$O$sy'P$sy!y$sy!o$sy#O$sy~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$s!R#|$s!R$O$s!R'P$s!R!y$s!R!o$s!R#O$s!R~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$s!Z#|$s!Z$O$s!Z'P$s!Z!y$s!Z!o$s!Z#O$s!Z~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$s!c#|$s!c$O$s!c'P$s!c!y$s!c!o$s!c#O$s!c~P!%aOP7wOU_O[5kOo9xOs#fOx5gOy5gO}aO!O^O!Q5{O!T5qO!V5iO!W5iO!Z5}O!d5eO!z]O#T5bO#X`O#dhO#fbO#gcO#sdO$[5oO$d5mO$e5oO$hqO%T5|O%U!OO'WYO~P$<UOP7wOU_O[5kOo9xOs#fOx5gOy5gO}aO!O^O!Q5{O!T5qO!V5iO!W5iO!Z5}O!d5eO!z]O#X`O#dhO#fbO#gcO#sdO$[5oO$d5mO$e5oO$hqO%T5|O%U!OO'WYO~P$<UO#|4aO$O4bO#O'XX~P3YOP7wOU_O[5kOo9xOr4cOs#fOx5gOy5gO}aO!O^O!Q5{O!T5qO!V5iO!W5iO!Z5}O!d5eO!z]O#T4`O#V4_O#X`O#dhO#fbO#gcO#sdO$[5oO$d5mO$e5oO$hqO%T5|O%U!OO'WYOT$PXz$PX!S$PX!c$PX!n$PX!w$PX#a$PX#b$PX#y$PX#|$PX$O$PX$R$PX$S$PX$T$PX$U$PX$V$PX$X$PX$Y$PX$Z$PX$]$PX$^$PX$_$PX'P$PX!y$PX!o$PX#O$PX~P$<UOP7wOU_O[5kOo9xOr6dOs#fOx5gOy5gO}aO!O^O!Q5{O!T5qO!V5iO!W5iO!Z5}O!d5eO!z]O#T6aO#V6`O#X`O#dhO#fbO#gcO#sdO$[5oO$d5mO$e5oO$hqO%T5|O%U!OO'WYOT$PXz$PX!S$PX!c$PX!w$PX#O$PX#P$PX#Y$PX#a$PX#b$PX#y$PX#|$PX$O$PX$R$PX$S$PX$T$PX$U$PX$V$PX$X$PX$Y$PX$Z$PX$]$PX$^$PX$_$PX!n$PX'P$PX!r$PX!y$PX!o$PXV$PX!p$PX~P$<UO!r4kO~P<XO!r7iO#P5RO~OT8TOz8RO!S8UO!c8VO!r5SO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aO!r7jO#P5VO~O!r7kO#P5ZO~O#P5ZO#T'ZO#n'XO~O#P5[O#T'ZO#n'XO~O#P5_O#T'ZO#n'XO~OP7wOU_O[5kOo9xOs#fOx5gOy5gO}aO!O^O!Q5{O!T5qO!U$uO!V5iO!W5iO!Z5}O!d5eO!z]O#X`O#dhO#fbO#gcO#sdO$[5oO$d5mO$e5oO$hqO$u$tO%T5|O%U!OO'WYO~P$<UOP7wOU_O[5kOo9xOs#fOx5gOy5gO}aO!O^O!Q5{O!T5qO!V5iO!W5iO!Z5}O!d5eO!z]O#T7PO#X`O#dhO#fbO#gcO#sdO$[5oO$d5mO$e5oO$hqO%T5|O%U!OO'WYO~P$<UOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$`a#P$`a#Y$`a#|$`a$O$`a!n$`a'P$`a!r$`a!y$`a!o$`aV$`a!p$`a~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$aa#P$aa#Y$aa#|$aa$O$aa!n$aa'P$aa!r$aa!y$aa!o$aaV$aa!p$aa~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$ba#P$ba#Y$ba#|$ba$O$ba!n$ba'P$ba!r$ba!y$ba!o$baV$ba!p$ba~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$ca#P$ca#Y$ca#|$ca$O$ca!n$ca'P$ca!r$ca!y$ca!o$caV$ca!p$ca~P!%aOz6OO#O$ca#P$ca#Y$ca#|$ca$O$ca!r$caV$ca!p$ca~PMVOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$fa#P$fa#Y$fa#|$fa$O$fa!n$fa'P$fa!r$fa!y$fa!o$faV$fa!p$fa~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O%Va#P%Va#Y%Va#|%Va$O%Va!n%Va'P%Va!r%Va!y%Va!o%VaV%Va!p%Va~P!%aOz6OO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#Y$Qi#|$Qi$O$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi#O$Qi#P$Qi#Y$Qi#|$Qi$O$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOT6QOz6OO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO!S$Qi#O$Qi#P$Qi#Y$Qi#|$Qi$O$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOT6QOz6OO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO!S$Qi!c$Qi#O$Qi#P$Qi#Y$Qi#|$Qi$O$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO#T#PO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO#T#PO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO#T#PO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO#T#PO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO$[6]O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$]$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO$Z6[O$[6]O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$]$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi$^$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O#Ua#P#Ua#Y#Ua#|#Ua$O#Ua!n#Ua'P#Ua!r#Ua!y#Ua!o#UaV#Ua!p#Ua~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O'^a#P'^a#Y'^a#|'^a$O'^a!n'^a'P'^a!r'^a!y'^a!o'^aV'^a!p'^a~P!%aOz6OO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT#Qi!S#Qi!c#Qi#O#Qi#P#Qi#Y#Qi#|#Qi$O#Qi!n#Qi'P#Qi!r#Qi!y#Qi!o#QiV#Qi!p#Qi~P!%aOz6OO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT#}i!S#}i!c#}i#O#}i#P#}i#Y#}i#|#}i$O#}i!n#}i'P#}i!r#}i!y#}i!o#}iV#}i!p#}i~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$Pi#P$Pi#Y$Pi#|$Pi$O$Pi!n$Pi'P$Pi!r$Pi!y$Pi!o$PiV$Pi!p$Pi~P!%aOz6OO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT!vq!S!vq!c!vq!w!vq#O!vq#P!vq#Y!vq#|!vq$O!vq!n!vq'P!vq!r!vq!y!vq!o!vqV!vq!p!vq~P!%aOz6OO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT#Qq!S#Qq!c#Qq#O#Qq#P#Qq#Y#Qq#|#Qq$O#Qq!n#Qq'P#Qq!r#Qq!y#Qq!o#QqV#Qq!p#Qq~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$sq#P$sq#Y$sq#|$sq$O$sq!n$sq'P$sq!r$sq!y$sq!o$sqV$sq!p$sq~P!%aOz6OO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT!vy!S!vy!c!vy!w!vy#O!vy#P!vy#Y!vy#|!vy$O!vy!n!vy'P!vy!r!vy!y!vy!o!vyV!vy!p!vy~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$sy#P$sy#Y$sy#|$sy$O$sy!n$sy'P$sy!r$sy!y$sy!o$syV$sy!p$sy~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$s!R#P$s!R#Y$s!R#|$s!R$O$s!R!n$s!R'P$s!R!r$s!R!y$s!R!o$s!RV$s!R!p$s!R~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$s!Z#P$s!Z#Y$s!Z#|$s!Z$O$s!Z!n$s!Z'P$s!Z!r$s!Z!y$s!Z!o$s!ZV$s!Z!p$s!Z~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$s!c#P$s!c#Y$s!c#|$s!c$O$s!c!n$s!c'P$s!c!r$s!c!y$s!c!o$s!cV$s!c!p$s!c~P!%aO#T7cO~P#-WO!z$hO#T7gO~O!y5uO#T'ZO#n'XO~O!z$hO#T7hO~OT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$ta#P$ta#Y$ta#|$ta$O$ta!n$ta'P$ta!r$ta!y$ta!o$taV$ta!p$ta~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#P7bO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO!n'^X#|'^X$O'^X'P'^X!y'^X!o'^X#O'^X~P!%aO#|6bO$O6cO#O'XX#P'XX#Y'XX!r'XXV'XX!p'XX~P3YO!r6lO~P<XO!r9|O#P7SO~OT8TOz8RO!S8UO!c8VO!r7TO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aO!r9}O#P7WO~O!r:OO#P7[O~O#P7[O#T'ZO#n'XO~O#P7]O#T'ZO#n'XO~O#P7`O#T'ZO#n'XO~O!U$uO$u$tO~P<XOo7fOs$lO~O#T9ZO~P<XOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$`a#P$`a#Y$`a!n$`a'P$`a!r$`a!y$`a!o$`aV$`a!p$`a~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$aa#P$aa#Y$aa!n$aa'P$aa!r$aa!y$aa!o$aaV$aa!p$aa~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$ba#P$ba#Y$ba!n$ba'P$ba!r$ba!y$ba!o$baV$ba!p$ba~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$ca#P$ca#Y$ca!n$ca'P$ca!r$ca!y$ca!o$caV$ca!p$ca~P!%aOz8RO#O$ca#P$ca#Y$ca!r$caV$ca!p$ca~PMVOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$fa#P$fa#Y$fa!n$fa'P$fa!r$fa!y$fa!o$faV$fa!p$fa~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$ta#P$ta#Y$ta!n$ta'P$ta!r$ta!y$ta!o$taV$ta!p$ta~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O%Va#P%Va#Y%Va!n%Va'P%Va!r%Va!y%Va!o%VaV%Va!p%Va~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#O9_O#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y'xX~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#O9aO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y'ZX~P!%aOz8RO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#Y$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi#O$Qi#P$Qi#Y$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOT8TOz8RO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!S$Qi#O$Qi#P$Qi#Y$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOT8TOz8RO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!S$Qi!c$Qi#O$Qi#P$Qi#Y$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO#T#PO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#Y$Qi$R$Qi$S$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO#T#PO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#Y$Qi$R$Qi$S$Qi$T$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO#T#PO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#Y$Qi$R$Qi$S$Qi$T$Qi$U$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO#T#PO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#Y$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO$[8`O$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$]$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO$Z8_O$[8`O$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$]$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi$^$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aO#T9fO~P!+iO!n#Ua'P#Ua!y#Ua!o#Ua~PCVO!n'^a'P'^a!y'^a!o'^a~PCVO#T=PO#V=OO!y&aX#O&aX~P<XO#O9WO!y']a~Oz8RO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT#Qi!S#Qi!c#Qi#O#Qi#P#Qi#Y#Qi!n#Qi'P#Qi!r#Qi!y#Qi!o#QiV#Qi!p#Qi~P!%aOz8RO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT#}i!S#}i!c#}i#O#}i#P#}i#Y#}i!n#}i'P#}i!r#}i!y#}i!o#}iV#}i!p#}i~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$Pi#P$Pi#Y$Pi!n$Pi'P$Pi!r$Pi!y$Pi!o$PiV$Pi!p$Pi~P!%aO#O9_O!y%ma~O!y&_X#O&_X~P!+iO#O9aO!y'Za~Oz8RO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT!vq!S!vq!c!vq!w!vq#O!vq#P!vq#Y!vq!n!vq'P!vq!r!vq!y!vq!o!vqV!vq!p!vq~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y#Wi#O#Wi~P!%aOz8RO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT#Qq!S#Qq!c#Qq#O#Qq#P#Qq#Y#Qq!n#Qq'P#Qq!r#Qq!y#Qq!o#QqV#Qq!p#Qq~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$sq#P$sq#Y$sq!n$sq'P$sq!r$sq!y$sq!o$sqV$sq!p$sq~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y&wa#O&wa~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y&_a#O&_a~P!%aOz8RO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT!vy!S!vy!c!vy!w!vy#O!vy#P!vy#Y!vy!n!vy'P!vy!r!vy!y!vy!o!vyV!vy!p!vy~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y#Wq#O#Wq~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$sy#P$sy#Y$sy!n$sy'P$sy!r$sy!y$sy!o$syV$sy!p$sy~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$s!R#P$s!R#Y$s!R!n$s!R'P$s!R!r$s!R!y$s!R!o$s!RV$s!R!p$s!R~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$s!Z#P$s!Z#Y$s!Z!n$s!Z'P$s!Z!r$s!Z!y$s!Z!o$s!ZV$s!Z!p$s!Z~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$s!c#P$s!c#Y$s!c!n$s!c'P$s!c!r$s!c!y$s!c!o$s!cV$s!c!p$s!c~P!%aO#T9vO~P<XO#P9uO!n'^X'P'^X!r'^X!y'^X!o'^XV'^X!p'^X~PEqO!z$hO#T9zO~O!z$hO#T9{O~O#|8fO$O8gO#O'XX#P'XX#Y'XX!r'XXV'XX!p'XX~P3YOr8hO#T#mO#V#lO#O$PX#P$PX#Y$PX!r$PXV$PX!p$PX~P5^Or=UO#T:sO#V:qOT$PXz$PX!S$PX!c$PX!n$PX!r$PX!w$PX#a$PX#b$PX#y$PX$R$PX$S$PX$T$PX$U$PX$V$PX$X$PX$Y$PX$Z$PX$]$PX$^$PX$_$PX!o$PX#O$PX!p$PX'P$PX~P<XOr:rO#T:rO#V:rOT$PXz$PX!S$PX!c$PX!w$PX#a$PX#b$PX#y$PX$R$PX$S$PX$T$PX$U$PX$V$PX$X$PX$Y$PX$Z$PX$]$PX$^$PX$_$PX~P<XOr:wO#T=PO#V=OOT$PXz$PX!S$PX!c$PX!w$PX!y$PX#O$PX#a$PX#b$PX#y$PX$R$PX$S$PX$T$PX$U$PX$V$PX$X$PX$Y$PX$Z$PX$]$PX$^$PX$_$PX~P<XO!U$uO$u$tO~P!+iO!r8sO~P<XOT8TOz8RO!S8UO!c8VO!w:_O#P9TO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!y'^X#O'^X~P!%aOP7wOU_O[:rOo?tOs#fOx:rOy:rO}aO!O^O!Q<XO!T:rO!V:rO!W:rO!Z:rO!d:SO!z]O#X`O#dhO#fbO#gcO#sdO$[<UO$d:rO$e<UO$hqO%T<ZO%U!OO'WYO~P$<UO#O9WO!y']X~O#T;eO~P!+iOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$`a#O$`a~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$aa#O$aa~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$ba#O$ba~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$ca#O$ca~P!%aOz:`O%T#cOT$ca!S$ca!c$ca!w$ca!y$ca#O$ca#T$ca$R$ca$S$ca$T$ca$U$ca$V$ca$X$ca$Y$ca$Z$ca$[$ca$]$ca$^$ca$_$ca~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$fa#O$fa~P!%aO!r?SO#P9^O~OT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$ta#O$ta~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y%Va#O%Va~P!%aOT8TOz8RO!S8UO!c8VO!r9cO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aOz:`O#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi~P!%aOz:`O!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!y$Qi#O$Qi~P!%aOT:bOz:`O!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!S$Qi!y$Qi#O$Qi~P!%aOT:bOz:`O!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!S$Qi!c$Qi!y$Qi#O$Qi~P!%aOz:`O#T#PO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi$R$Qi$S$Qi~P!%aOz:`O#T#PO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi$R$Qi$S$Qi$T$Qi~P!%aOz:`O#T#PO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi$R$Qi$S$Qi$T$Qi$U$Qi~P!%aOz:`O#T#PO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi~P!%aOz:`O$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi~P!%aOz:`O$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi~P!%aOz:`O$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi~P!%aOz:`O$[:mO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$]$Qi~P!%aOz:`O$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi~P!%aOz:`O$Z:lO$[:mO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$]$Qi~P!%aOz:`O$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi$^$Qi~P!%aOz:`O!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT#Qi!S#Qi!c#Qi!y#Qi#O#Qi~P!%aOz:`O!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT#}i!S#}i!c#}i!y#}i#O#}i~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$Pi#O$Pi~P!%aO!r?TO#P9hO~Oz:`O#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT!vq!S!vq!c!vq!w!vq!y!vq#O!vq~P!%aOz:`O!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT#Qq!S#Qq!c#Qq!y#Qq#O#Qq~P!%aO!r?YO#P9oO~OT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$sq#O$sq~P!%aO#P9oO#T'ZO#n'XO~Oz:`O#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT!vy!S!vy!c!vy!w!vy!y!vy#O!vy~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$sy#O$sy~P!%aO#P9pO#T'ZO#n'XO~OT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$s!R#O$s!R~P!%aO#P9sO#T'ZO#n'XO~OT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$s!Z#O$s!Z~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$s!c#O$s!c~P!%aO#T;}O~P!+iOT8TOz8RO!S8UO!c8VO!w:_O#P;|O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!y'^X#O'^X~P!%aO!U$uO$u$tO~P$8rOP7wOU_O[:rOo?tOs#fOx:rOy:rO}aO!O^O!Q<XO!T:rO!U$uO!V:rO!W:rO!Z:rO!d:SO!z]O#X`O#dhO#fbO#gcO#sdO$[<UO$d:rO$e<UO$hqO$u$tO%T<ZO%U!OO'WYO~P$<UOo9yOs$lO~O#T>VO~P$8rOP7wOU_O[:rOo?tOs#fOx:rOy:rO}aO!O^O!Q<XO!T:rO!V:rO!W:rO!Z:rO!d:SO!z]O#T>WO#X`O#dhO#fbO#gcO#sdO$[<UO$d:rO$e<UO$hqO%T<ZO%U!OO'WYO~P$<UOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$`a!r$`a!o$`a#O$`a!p$`a'P$`a~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$aa!r$aa!o$aa#O$aa!p$aa'P$aa~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$ba!r$ba!o$ba#O$ba!p$ba'P$ba~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$ca!r$ca!o$ca#O$ca!p$ca'P$ca~P!%aOz<]O%T#cOT$ca!S$ca!c$ca!n$ca!r$ca!w$ca#T$ca$R$ca$S$ca$T$ca$U$ca$V$ca$X$ca$Y$ca$Z$ca$[$ca$]$ca$^$ca$_$ca!o$ca#O$ca!p$ca'P$ca~P!%aOz<^O%T#cOT$ca!S$ca!c$ca!w$ca#T$ca$R$ca$S$ca$T$ca$U$ca$V$ca$X$ca$Y$ca$Z$ca$[$ca$]$ca$^$ca$_$ca~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$fa!r$fa!o$fa#O$fa!p$fa'P$fa~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$ta!r$ta!o$ta#O$ta!p$ta'P$ta~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n%Va!r%Va!o%Va#O%Va!p%Va'P%Va~P!%aOz<]O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O#T#PO$R<`O$S<hO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi~P!%aOz<]O!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O!w?_O#T#PO$R<`O$S<hO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi~P!%aOT<aOz<]O!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!S$Qi!n$Qi!r$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOT<bOz<^O!c<fO!w?_O#T#PO$R<`O$S<hO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cO!S$Qi~P!%aOT<aOz<]O!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!S$Qi!c$Qi!n$Qi!r$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOT<bOz<^O!w?_O#T#PO$R<`O$S<hO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cO!S$Qi!c$Qi~P!%aOz<]O#T#PO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi$R$Qi$S$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O#T#PO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi$R$Qi$S$Qi~P!%aOz<]O#T#PO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi$R$Qi$S$Qi$T$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O#T#PO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi$R$Qi$S$Qi$T$Qi~P!%aOz<]O#T#PO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi$R$Qi$S$Qi$T$Qi$U$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O#T#PO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi$R$Qi$S$Qi$T$Qi$U$Qi~P!%aOz<]O#T#PO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O#T#PO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi~P!%aOz<]O$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi~P!%aOz<]O$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi~P!%aOz<]O$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi~P!%aOz<]O$[<wO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$]$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O$[<xO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$]$Qi~P!%aOz<]O$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi~P!%aOz<]O$Z<uO$[<wO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$]$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O$Z<vO$[<xO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$]$Qi~P!%aOz<]O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi$^$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi$^$Qi~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y#Ua#O#Ua~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y'^a#O'^a~P!%aOz<]O!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT#Qi!S#Qi!c#Qi!n#Qi!r#Qi!o#Qi#O#Qi!p#Qi'P#Qi~P!%aOz<^O!w?_O#T#PO$R<`O$S<hO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT#Qi!S#Qi!c#Qi~P!%aOz<]O!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT#}i!S#}i!c#}i!n#}i!r#}i!o#}i#O#}i!p#}i'P#}i~P!%aOz<^O!w?_O#T#PO$R<`O$S<hO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT#}i!S#}i!c#}i~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$Pi!r$Pi!o$Pi#O$Pi!p$Pi'P$Pi~P!%aOz<]O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT!vq!S!vq!c!vq!n!vq!r!vq!w!vq!o!vq#O!vq!p!vq'P!vq~P!%aOz<^O#T#PO$R<`O$S<hO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT!vq!S!vq!c!vq!w!vq~P!%aOz<]O!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT#Qq!S#Qq!c#Qq!n#Qq!r#Qq!o#Qq#O#Qq!p#Qq'P#Qq~P!%aOz<^O!w?_O#T#PO$R<`O$S<hO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT#Qq!S#Qq!c#Qq~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$sq!r$sq!o$sq#O$sq!p$sq'P$sq~P!%aOz<]O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT!vy!S!vy!c!vy!n!vy!r!vy!w!vy!o!vy#O!vy!p!vy'P!vy~P!%aOz<^O#T#PO$R<`O$S<hO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT!vy!S!vy!c!vy!w!vy~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$sy!r$sy!o$sy#O$sy!p$sy'P$sy~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$s!R!r$s!R!o$s!R#O$s!R!p$s!R'P$s!R~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$s!Z!r$s!Z!o$s!Z#O$s!Z!p$s!Z'P$s!Z~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$s!c!r$s!c!o$s!c#O$s!c!p$s!c'P$s!c~P!%aO#T>pO~P$8rOP7wOU_O[:rOo?tOs#fOx:rOy:rO}aO!O^O!Q<XO!T:rO!V:rO!W:rO!Z:rO!d:SO!z]O#T>qO#X`O#dhO#fbO#gcO#sdO$[<UO$d:rO$e<UO$hqO%T<ZO%U!OO'WYO~P$<UOT8TOz8RO!S8UO!c8VO!w:_O#P>oO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#P>nO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!n'^X!r'^X!o'^X#O'^X!p'^X'P'^X~P!%aOT'XXz'XX!S'XX!c'XX!w'XX!z'XX#O'XX#T'XX#X'XX#a'XX#b'XX#y'XX$R'XX$S'XX$T'XX$U'XX$V'XX$X'XX$Y'XX$Z'XX$['XX$]'XX$^'XX$_'XX%T'XX~O#|:uO$O:vO!y'XX~P.@qO!z$hO#T>zO~O!r;SO~P<XO!z$hO#T?PO~O#|;iO!n$|X!p$|X#O$|X'P$|X~O!r?pO#P;jO~OT8TOz8RO!S8UO!c8VO!r;kO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n#Ua!r#Ua!o#Ua#O#Ua!p#Ua'P#Ua~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n'^a!r'^a!o'^a#O'^a!p'^a'P'^a~P!%aO!r?qO#P;nO~O#d>xO!n&qX!p&qX#O&qX'P&qX~O#O?QO!n'pa!p'pa'P'pa~O!r?rO#P;uO~OT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$|i!p$|i#O$|i'P$|i~P!%aO#P;uO#T'ZO#n'XO~O#P;vO#T'ZO#n'XO~O#P;zO#T'ZO#n'XO~O#|=QO$O=SO!n'XX!r'XX!o'XX!p'XX'P'XX~P.@qO#|=RO$O=TOT'XXz'XX!S'XX!c'XX!w'XX!z'XX#T'XX#X'XX#a'XX#b'XX#y'XX$R'XX$S'XX$T'XX$U'XX$V'XX$X'XX$Y'XX$Z'XX$['XX$]'XX$^'XX$_'XX%T'XX~O!r=aO~P<XO!r=bO~P<XO!r?yO#P>[O~O!r?zO#P:rO~OT8TOz8RO!S8UO!c8VO!r>]O!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aOT8TOz8RO!S8UO!c8VO!r>^O!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aO!r?{O#P>cO~O!r?|O#P>hO~O#P>hO#T'ZO#n'XO~O#P:rO#T'ZO#n'XO~O#P>iO#T'ZO#n'XO~O#P>lO#T'ZO#n'XO~O!z$hO#T?nO~Oo>wOs$lO~O!z$hO#T?oO~O#O?QO!n'pX!p'pX'P'pX~O!z$hO#T?vO~O!z$hO#T?wO~O!z$hO#T?xO~Oo?lOs$lO~Oo?uOs$lO~Oo?tOs$lO~O%X$]%W$k!e$^#d%`#g'u'W#f~\",\n  goto: \"%1O'{PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP'|P(TPP(Z(^PPP(vP(^*o(^6cP6cPP>cFxF{PP6cGR! RP! UP! UPPGR! e! h! lGRGRPP! oP! rPPGR!)u!0q!0qGR!0uP!0u!0u!0u!2PP!;g!<T!<a!FP!F_P!Na!NdP6cP6c6cPPPPP!NgPPPPPPP6c6c6c6cPP6c6cP#&T#'|P#(Q#(t#'|#'|#(z#)^#)b6c6cP#)k#*R#*|#,Q#,W#,Q#,f#,Q#,Q#,z#,}#,}6cPP6cPP#-R#5S#5S#5WP#5^P(^#5b(^#5z#5}#5}#6T(^#6W(^(^#6^#6a(^#6j#6m(^(^(^(^(^#6p(^(^(^(^(^(^(^(^(^#6s#7V(^(^#7Z#7k#7n(^(^P#7q#7x#8O#8k#8u#8{#9V#9^#9d#:h#;j#;z#<d#=`#=f#=l#=r#=|#>S#>Y#>h#>n#>x#?O#?U#?[#?b#?l#?v#?|#@S#@^PPPPPPPP#@d#@hP#A^$(h$(k$(u$1R$1_$1t$1zP$1}$2Q$2W$5[$?Y$Gr$Gu$G{$HO$Kb$Ke$Kn$Kv$LQ$Li$MP$Mz%'}PP%0O%0S%0`%0u%0{Q!nQT!qV!rQUOR%x!mRVO}!hPVX!S!j!r!s!w%O%Q%T%V(h,Q,T.u.w/P0}1O1W2]|!hPVX!S!j!r!s!w%O%Q%T%V(h,Q,T.u.w/P0}1O1W2]Q%_!ZQ%h!aQ%m!eQ'k$cQ'x$iQ)d%lQ+W'{Q,k)QU.O+T+V+]Q.j+pQ/`,jS0a.T.UQ0q.dQ1n0VS1w0`0dQ2Q0nQ2q1pQ2t1xR3[2u|ZPVX!S!j!r!s!w%O%Q%T%V(h,Q,T.u.w/P0}1O1W2]2lf]`cgjklmnoprxyz!W!X!Y!]!e!f!g!y!z#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r#}$Q$R$T$h$z%S%U%d%r%}&S&W&[&q&t&u&x'P'X'Z']'a'e'p't'y(R(V(W(Y(Z([(t)T)X)`)c)g)n)u)y*V*Z*[*r*w*|+Q+X+[+^+_+j+m+q+t,Y,c,e,g,i,u,x-O-`-a-t-v-z.S.V.[.].^.b/X/n/y0O0T0b0e1R1S1b1k1o1y1{2k2r3n3p3s3t3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7i7j7k7o7w7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v9|9}:O:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?S?T?Y?^?_?p?q?r?y?z?{?|S$ku$`Q%W!V^%e!_$a'j)Y.f0o2OQ%i!bQ%j!cQ%k!dQ%v!kS&V!|){Q&]#OQ'l$dQ'm$eS'|$j'hQ)S%`Q*v'nQ+z(bQ,O(dQ-S)iU.g+n.c0mQ.q+{Q.r+|Q/d,vS0V-y0XQ1X/cQ1e/rS2T0s2WQ2h1`Q3U2iQ3^2zQ3_2{Q3c3VQ3f3`R3g3d0{!OPVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(R(V(h(t)T)X)n)u)y){*V*Z*[*|+^,Q,T,Y,c,e,g-`-a-t-z.[.u.w/P/X/y0O0T0e0s0}1O1R1S1W1k1o1{2W2]2r3p3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?^?_0z!OPVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(R(V(h(t)T)X)n)u)y){*V*Z*[*|+^,Q,T,Y,c,e,g-`-a-t-z.[.u.w/P/X/y0O0T0e0s0}1O1R1S1W1k1o1{2W2]2r3p3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?^?_Q#h^Q%O!PQ%P!QQ%Q!RQ,b(sQ.u,RR.y,UR&r#hQ*Q&qR/w-a0{hPVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(R(V(h(t)T)X)n)u)y){*V*Z*[*|+^,Q,T,Y,c,e,g-`-a-t-z.[.u.w/P/X/y0O0T0e0s0}1O1R1S1W1k1o1{2W2]2r3p3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?^?_R#j_k#n`j#i#q&t&x5d5e9W:Q:R:S:TR#saT&}#r'PR-h*[R&R!{0zhPVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(R(V(h(t)T)X)n)u)y){*V*Z*[*|+^,Q,T,Y,c,e,g-`-a-t-z.[.u.w/P/X/y0O0T0e0s0}1O1R1S1W1k1o1{2W2]2r3p3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?^?_R#tb-x!}[#e#k#u$U$V$W$X$Y$Z$v$w%X%Z%]%a%s%|&O&U&_&`&a&b&c&d&e&f&g&h&i&j&k&l&m&n&v&w&|'`'b'c(e(x)v)x)z*O*U*h*j+a+d,n,q-W-Y-[-e-f-g-w.Y/O/[/v0Q0Z0f1g1j1m1z2S2`2o2p2v3Z4]4^4d4e4f4g4h4i4j4l4m4n4o4p4q4r4s4t4u4v4w4x4y4z4{4|4}5P5Q5T5U5W5X5Y5]5^5`5t6e6f6g6h6i6j6k6m6n6o6p6q6r6s6t6u6v6w6x6y6z6{6|6}7O7Q7R7U7V7X7Y7Z7^7_7a7m7q8i8j8k8l8m8n8p8q8r8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9U9V9Y9[9]9d9e9g9i9j9k9l9m9n9q9r9t9w:p:x:y:z:{:|:};Q;R;T;U;V;W;X;Y;Z;[;];^;_;`;a;b;c;d;f;g;l;m;p;r;s;w;y;{<O=V=W=X=Y=Z=[=]=`=c=d=e=f=g=h=i=j=k=l=m=n=o=p=q=r=s=t=u=v=w=x=y=z={=|=}>O>P>Q>R>S>T>U>X>Y>Z>_>`>a>b>d>e>f>g>j>k>m>r>s>{>|>}?V?b?cQ'd$[Y(X$s8o;P=^=_S(]3o7lQ(`$tR+y(aT&X!|){#a$Pg#}$h'X'Z'p't'y(W([)`)c*r*w+Q+X+[+_+j+m+n+t,i,u,x-v.S.V.].b.c0b0m1y3n3s3t7i7j7k7w9|9}:O?S?T?Y?p?q?r?y?z?{?|3yfPVX]`cgjklmnoprxyz!S!W!X!Y!]!e!f!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r#}$Q$R$T$h$z%O%Q%S%T%U%V%d%r%}&S&W&[&q&t&u&x'P'X'Z']'a'e'p't'y(R(V(W(Y(Z([(h(t)T)X)`)c)g)n)u)y){*V*Z*[*r*w*|+Q+X+[+^+_+j+m+n+q+t,Q,T,Y,c,e,g,i,u,x-O-`-a-t-v-z.S.V.[.].^.b.c.u.w/P/X/n/y0O0T0b0e0m0s0}1O1R1S1W1b1k1o1y1{2W2]2k2r3n3p3s3t3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7i7j7k7o7w7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v9|9}:O:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?S?T?Y?^?_?p?q?r?y?z?{?|[#wd#x3h3i3j3kh'V#z'W)f,}-U/k/u1f3l3m3q3rQ)e%nR-T)kY#yd%n)k3h3iV'T#x3j3k1dePVX]`cjklmnoprxyz!S!W!X!Y!]!e!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a'e(R(V(Y(Z(h(t)T)X)g)n)u)y){*V*Z*[*|+^+q,Q,T,Y,c,e,g-O-`-a-t-z.[.^.u.w/P/X/n/y0O0T0e0s0}1O1R1S1W1b1k1o1{2W2]2k2r3p3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?^?_Q%o!fQ)l%r#O3vg#}$h'X'Z'p't'y(W([)`*w+Q+X+[+_+j+m+t,i,u,x-v.S.V.].b0b1y7i7j7k7w9|9}:O?S?T?Y?p?q?r?y?z?{?|a3w)c*r+n.c0m3n3s3tY'T#z)f-U3l3mZ*c'W,}/u3q3r0vhPVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(R(V(h(t)T)X)n)u)y){*V*Z*[*|+^,Q,T,Y,c,e,g-`-a-t-z.[.u.w/P/X/y0O0T0e0}1O1R1S1W1k1o1{2]2r3p3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?^?_T2U0s2WR&^#OR&]#O!r#Z[#e#u$U$V$W$X$Z$s$w%X%Z%]&`&a&b&c&d&e&f&g'`'b'c(e)v)x*O*j+d-Y.Y0f1z2`2p2v3Z9U9V!Y4U3o4d4e4f4g4i4j4l4m4n4o4p4q4r4s4{4|4}5P5Q5T5U5W5X5Y5]5^5`!^6X4^6e6f6g6h6j6k6m6n6o6p6q6r6s6t6|6}7O7Q7R7U7V7X7Y7Z7^7_7a7l7m#b8[#k%a%s%|&O&v&w&|(x*U+a,n,q-W-e-g/[4]5t7q8i8j8k8l8n8o8p8t8u8v8w8x8y8z8{9Y9[9]9d9g9i9l9n9q9r9t9w:p;R<O>r>s>{?b?c!|:i&U)z-[-f-w0Q0Z1g1j1m2o8q8r9e9j9k9m:x:y:z:{:};P;Q;T;U;V;W;X;Y;Z;[;d;f;g;l;m;p;r;s;w;y;{>R>S!`<o/O/v=V=W=X=Y=]=^=`=c=e=g=i=k=m=o=q>T>X>Z>_>a>d>e>g>j>k>m>|>}?Vo<p2S=_=d=f=h=j=l=n=p=r>U>Y>`>b>fS$iu#fQ$qwU'{$j$l&pQ'}$kS(P$m$rQ+Z'|Q+](OQ+`(QQ1p0VQ5s7dS5v7f7gQ5w7hQ7p9xS7r9y9zQ7s9{Q;O>uS;h>w>zQ;o?PQ>y?jS?O?l?nQ?U?oQ?`?sS?a?t?wS?d?u?vR?e?xT'u$h+Q!csPVXt!S!j!r!s!w$h%O%Q%T%V'p([(h)`+Q+j+t,Q,T,u,x.u.w/P0}1O1W2]Q$]rR*l'eQ-{+PQ.i+oQ0U-xQ0j.`Q1|0kR2w1}T0W-y0XQ+V'zQ.U+YR0d.XQ(_$tQ)^%iQ)s%vQ*u'mS+x(`(aQ-q*vR.p+yQ(^$tQ)b%kQ)r%vQ*q'lS*t'm)sU+w(_(`(aS-p*u*vS.o+x+yQ/i,{Q/{-nQ/}-qR0v.pQ(]$tQ)]%iQ)_%jQ)q%vU*s'm)r)sW+v(^(_(`(aQ,t)^U-o*t*u*vU.n+w+x+yS/|-p-qS0u.o.pQ1i/}R2Y0vX+r([)`+t,xb%f!_$a'j+n.c.f0m0o2OR,r)YQ$ovS+b(S?Qg?m([)`+i+j+m+t,u,x.a.b0lR0t.kT2V0s2W0}|PVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(R(V(h(t)T)X)n)u)y){*V*Z*[*|+^,Q,T,Y,c,e,g,m-`-a-t-z.[.u.w/P/X/y0O0T0e0s0}1O1R1S1W1k1o1{2W2]2r3p3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?^?_T$y{$|Q,O(dR.r+|T${{$|Q(j%OQ(r%QQ(w%TQ(z%VQ.},XQ0z.yQ0{.|R2c1WR(m%PX,[(k(l,],_R(n%PX(p%Q%T%V1WR%T!T_%b!]%S(t,c,e/X1RR%V!UR/],gR,j)PQ)a%kS*p'l)bS-m*q,{S/z-n/iR1h/{T,w)`,xQ-P)fU/l,|,}-UU1^/k/t/uR2n1fR/o-OR2l1bSSO!mR!oSQ!rVR%y!rQ!jPS!sV!rQ!wX[%u!j!s!w,Q1O2]Q,Q(hQ1O/PR2]0}Q)o%sS-X)o9bR9b8rQ-b*QR/x-bQ&y#oS*X&y9XR9X:tS*]&|&}R-i*]Q)|&YR-^)|!j'Y#|'o*f*z+O+T+e+i.T.W.Z.a/_0`0c0g0l1x2u5x5y5z7e7t7u7v;q;t;x?W?X?Z?f?g?h?iS*e'Y/g]/g,{-n.f0o1[2O!h'[#|'o*z+O+T+e+i.T.W.Z.a/_0`0c0g0l1x2u5x5y5z7e7t7u7v;q;t;x?W?X?Z?f?g?h?iS*g'[/hZ/h,{-n.f0o2OU#xd%n)kU'S#x3j3kQ3j3hR3k3iQ'W#z^*b'W,}/k/u1f3q3rQ,})fQ/u-UQ3q3lR3r3m|tPVX!S!j!r!s!w%O%Q%T%V(h,Q,T.u.w/P0}1O1W2]W$_t'p+j,uS'p$h+QS+j([+tT,u)`,xQ'f$]R*m'fQ0X-yR1q0XQ+R'vR-}+RQ0].PS1u0]1vR1v0^Q._+fR0i._Q+t([R.l+tW+m([)`+t,xS.b+j,uT.e+m.bQ)Z%fR,s)ZQ(T$oS+c(T?RR?R?mQ2W0sR2}2WQ$|{R(f$|Q,S(iR.v,SQ,V(jR.z,VQ,](kQ,_(lT/Q,],_Q)U%aS,o)U9`R9`8qQ)R%_R,l)RQ,x)`R/e,xQ)h%pS-R)h/sR/s-SQ1c/oR2m1cT!uV!rj!iPVX!j!r!s!w(h,Q/P0}1O2]Q%R!SQ(i%OW(p%Q%T%V1WQ.x,TQ0x.uR0y.w|[PVX!S!j!r!s!w%O%Q%T%V(h,Q,T.u.w/P0}1O1W2]Q#e]U#k`#q&xQ#ucQ$UkQ$VlQ$WmQ$XnQ$YoQ$ZpQ$sx^$vy3y5|8P:]<Y<ZQ$wzQ%X!WQ%Z!XQ%]!YW%a!]%S(t,eU%s!g&q-aQ%|!yQ&O!zS&U!|){^&_#Q3{6O8R:`<]<^Q&`#RQ&a#SQ&b#TQ&c#UQ&d#VQ&e#WQ&f#XQ&g#YQ&h#ZQ&i#[Q&j#]Q&k#^Q&l#_Q&m#`Q&n#aQ&v#lQ&w#mS&|#r'PQ'`$QQ'b$RQ'c$TQ(e$zQ(x%UQ)v%}Q)x&SQ)z&WQ*O&[Q*U&uS*h']5uQ*j'a^*k3p5a7b9u;|>n>oQ+a(RQ+d(VQ,n)TQ,q)XQ-W)nQ-Y)uQ-[)yQ-e*VQ-f*ZQ-g*[^-k3u5b7c9v;}>p>qQ-w*|Q.Y+^Q/O,YQ/[,gQ/v-`Q0Q-tQ0Z-zQ0f.[Q1g/yQ1j0OQ1m0TQ1z0eU2S0s2W:rQ2`1SQ2o1kQ2p1oQ2v1{Q3Z2rQ3o3xQ4]jQ4^5eQ4d5fQ4e5hQ4f5jQ4g5lQ4h5nQ4i5pQ4j3zQ4l3|Q4m3}Q4n4OQ4o4PQ4p4QQ4q4RQ4r4SQ4s4TQ4t4UQ4u4VQ4v4WQ4w4XQ4x4YQ4y4ZQ4z4[Q4{4_Q4|4`Q4}4aQ5P4bQ5Q4cQ5T4kQ5U5OQ5W5RQ5X5SQ5Y5VQ5]5ZQ5^5[Q5`5_Q5t5rQ6e5gQ6f5iQ6g5kQ6h5mQ6i5oQ6j5qQ6k5}Q6m6PQ6n6QQ6o6RQ6p6SQ6q6TQ6r6UQ6s6VQ6t6WQ6u6XQ6v6YQ6w6ZQ6x6[Q6y6]Q6z6^Q6{6_Q6|6`Q6}6aQ7O6bQ7Q6cQ7R6dQ7U6lQ7V7PQ7X7SQ7Y7TQ7Z7WQ7^7[Q7_7]Q7a7`Q7l5{Q7m5dQ7q7oQ8i7xQ8j7yQ8k7zQ8l7{Q8m7|Q8n7}Q8o8OQ8p8QU8q,c/X1RQ8r%dQ8t8SQ8u8TQ8v8UQ8w8VQ8x8WQ8y8XQ8z8YQ8{8ZQ8|8[Q8}8]Q9O8^Q9P8_Q9Q8`Q9R8aQ9S8bQ9U8dQ9V8eQ9Y8fQ9[8gQ9]8hQ9d8sQ9e9TQ9g9ZQ9i9^Q9j9_Q9k9aQ9l9cQ9m9fQ9n9hQ9q9oQ9r9pQ9t9sQ9w:QU:p#i&t9WQ:x:UQ:y:VQ:z:WQ:{:XQ:|:YQ:}:ZQ;P:[Q;Q:^Q;R:_Q;T:aQ;U:bQ;V:cQ;W:dQ;X:eQ;Y:fQ;Z:gQ;[:hQ;]:iQ;^:jQ;_:kQ;`:lQ;a:mQ;b:nQ;c:oQ;d:uQ;f:vQ;g:wQ;l;SQ;m;eQ;p;jQ;r;kQ;s;nQ;w;uQ;y;vQ;{;zQ<O:TQ=V<PQ=W<QQ=X<RQ=Y<SQ=Z<TQ=[<UQ=]<VQ=^<WQ=_<XQ=`<[Q=c<_Q=d<`Q=e<aQ=f<bQ=g<cQ=h<dQ=i<eQ=j<fQ=k<gQ=l<hQ=m<iQ=n<jQ=o<kQ=p<lQ=q<mQ=r<nQ=s<oQ=t<pQ=u<qQ=v<rQ=w<sQ=x<tQ=y<uQ=z<vQ={<wQ=|<xQ=}<yQ>O<zQ>P<{Q>Q<|Q>R=OQ>S=PQ>T=QQ>U=RQ>X=SQ>Y=TQ>Z=UQ>_=aQ>`=bQ>a>VQ>b>WQ>d>[Q>e>]Q>f>^Q>g>cQ>j>hQ>k>iQ>m>lQ>r:SQ>s:RQ>{>vQ>|:qQ>}:sQ?V;iQ?b?^R?c?_R*R&qQ%t!gQ)W%dT*P&q-a$WiPVX]cklmnopxyz!S!W!X!Y!j!r!s!w#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a$Q$R$T$z%O%Q%T%V%}&S&['a(V(h)u+^,Q,T.[.u.w/P0e0}1O1S1W1o1{2]2r3p3u8d8e!t5c']3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5f5h5j5l5n5p7b7c!x7n5a5b5d5e5g5i5k5m5o5q5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`$`:P`j!]!g!y!z#i#l#m#q#r%S%U&q&t&u&x'P(R(t)T)X)n*V*[,e,g-a5r7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8f8g8h8s9W9Z9^9c9h9o9p9s9u9v:Q:R:S:T:_>v?^?_#l>t!|%d&W)y){*Z*|,c-t-z/X/y0O0T1R1k9T9_9a9f:U:V:W:X:Y:Z:[:]:^:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:u:v:w;S;e;j;k;n;u;v;z;|;}=O=P!x?[,Y-`:q:s;i<P<Q<R<S<T<V<W<Y<[<]<_<a<c<e<g<i<k<m<o<q<s<u<w<y<{=Q=S=U=a>V>[>]>c>h>i>l>n>p!]?]0s2W:r<U<X<Z<^<`<b<d<f<h<j<l<n<p<r<t<v<x<z<|=R=T=b>W>^>o>qQ#p`Q&s#iQ&{#qR*T&tS#o`#q^$Sj5d5e:Q:R:S:TS*W&x9WT:t#i&tQ'O#rR*_'PR&T!{R&Z!|Q&Y!|R-]){Q#|gS'^#}3nS'o$h+QS*d'X3sU*f'Z*w-vQ*z'pQ+O'tQ+T'yQ+e(WW+i([)`+t,xQ,{)cQ-n*rQ.T+XQ.W+[Q.Z+_U.a+j+m,uQ.f+nQ/_,iQ0`.SQ0c.VQ0g.]Q0l.bQ0o.cQ1[3tQ1x0bQ2O0mQ2u1yQ5x7iQ5y7jQ5z7kQ7e7wQ7t9|Q7u9}Q7v:OQ;q?SQ;t?TQ;x?YQ?W?pQ?X?qQ?Z?rQ?f?yQ?g?zQ?h?{R?i?|0z!OPVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(R(V(h(t)T)X)n)u)y){*V*Z*[*|+^,Q,T,Y,c,e,g-`-a-t-z.[.u.w/P/X/y0O0T0e0s0}1O1R1S1W1k1o1{2W2]2r3p3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?^?_#`$Og#}$h'X'Z'p't'y(W([)`)c*r*w+Q+X+[+_+j+m+n+t,i,u,x-v.S.V.].b.c0b0m1y3n3s3t7i7j7k7w9|9}:O?S?T?Y?p?q?r?y?z?{?|S$[r'eQ%l!eS%p!f%rU+f(Y(Z+qQ-Q)gQ/m-OQ0h.^Q1a/nQ2j1bR3W2k|vPVX!S!j!r!s!w%O%Q%T%V(h,Q,T.u.w/P0}1O1W2]#Y#g]cklmnopxyz!W!X!Y#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a$Q$R$T$z%}&S&['a(V)u+^.[0e1S1o1{2r3p3u8d8e`+k([)`+j+m+t,u,x.b!t8c']3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5f5h5j5l5n5p7b7c!x<}5a5b5d5e5g5i5k5m5o5q5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`$`?k`j!]!g!y!z#i#l#m#q#r%S%U&q&t&u&x'P(R(t)T)X)n*V*[,e,g-a5r7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8f8g8h8s9W9Z9^9c9h9o9p9s9u9v:Q:R:S:T:_>v?^?_#l?}!|%d&W)y){*Z*|,c-t-z/X/y0O0T1R1k9T9_9a9f:U:V:W:X:Y:Z:[:]:^:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:u:v:w;S;e;j;k;n;u;v;z;|;}=O=P!x@O,Y-`:q:s;i<P<Q<R<S<T<V<W<Y<[<]<_<a<c<e<g<i<k<m<o<q<s<u<w<y<{=Q=S=U=a>V>[>]>c>h>i>l>n>p!]@P0s2W:r<U<X<Z<^<`<b<d<f<h<j<l<n<p<r<t<v<x<z<|=R=T=b>W>^>o>qR'w$hQ'v$hR-|+QR$^rQ#d[Q%Y!WQ%[!XQ%^!YQ(U$pQ({%WQ(|%XQ(}%ZQ)O%]Q)V%cQ)[%gQ)d%lQ)j%qQ)p%tQ*n'iQ-V)mQ-l*oQ.i+oQ.j+pQ.x,WQ/S,`Q/T,aQ/U,bQ/Z,fQ/^,hQ/b,pQ/q-PQ0j.`Q0q.dQ0r.hQ0t.kQ0y.{Q1Y/dQ1_/lQ1n0VQ1|0kQ2Q0nQ2R0pQ2[0|Q2d1XQ2g1^Q2w1}Q2y2PQ2|2VQ3P2ZQ3T2fQ3X2nQ3Y2pQ3]2xQ3a3RQ3b3SR3e3ZR.R+UQ+g(YQ+h(ZR.k+qS+s([+tT,w)`,xa+l([)`+j+m+t,u,x.bQ%g!_Q'i$aQ*o'jQ.h+nS0p.c.fS2P0m0oR2x2OQ$pvW+o([)`+t,xW.`+i+j+m,uS0k.a.bR1}0l|!aPVX!S!j!r!s!w%O%Q%T%V(h,Q,T.u.w/P0}1O1W2]Q$ctW+p([)`+t,xU.d+j+m,uR0n.b0z!OPVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(R(V(h(t)T)X)n)u)y){*V*Z*[*|+^,Q,T,Y,c,e,g-`-a-t-z.[.u.w/P/X/y0O0T0e0s0}1O1R1S1W1k1o1{2W2]2r3p3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?^?_R/a,m0}}PVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(R(V(h(t)T)X)n)u)y){*V*Z*[*|+^,Q,T,Y,c,e,g,m-`-a-t-z.[.u.w/P/X/y0O0T0e0s0}1O1R1S1W1k1o1{2W2]2r3p3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?^?_T$x{$|Q(q%QQ(v%TQ(y%VR2b1WQ%c!]Q(u%SQ,d(tQ/W,cQ/Y,eQ1Q/XR2_1RQ%q!fR)m%rR/p-O\",\n  nodeNames: \"⚠ ( HeredocString EscapeSequence abstract LogicOp array as Boolean break case catch clone const continue default declare do echo else elseif enddeclare endfor endforeach endif endswitch endwhile enum extends final finally fn for foreach from function global goto if implements include include_once LogicOp insteadof interface list match namespace new null LogicOp print readonly require require_once return switch throw trait try unset use var Visibility while LogicOp yield LineComment BlockComment TextInterpolation PhpClose Text PhpOpen Template TextInterpolation EmptyStatement ; } { Block : LabelStatement Name ExpressionStatement ConditionalExpression LogicOp MatchExpression ) ( ParenthesizedExpression MatchBlock MatchArm , => AssignmentExpression ArrayExpression ValueList & VariadicUnpacking ... Pair [ ] ListExpression ValueList Pair Pair SubscriptExpression MemberExpression -> ?-> Name VariableName DynamicVariable $ ${ CallExpression ArgList NamedArgument SpreadArgument CastExpression UnionType LogicOp IntersectionType OptionalType NamedType QualifiedName \\\\ NamespaceName Name NamespaceName Name ScopedExpression :: ClassMemberName DynamicMemberName AssignOp UpdateExpression UpdateOp YieldExpression BinaryExpression LogicOp LogicOp LogicOp BitOp BitOp BitOp CompareOp CompareOp BitOp ArithOp ConcatOp ArithOp ArithOp IncludeExpression RequireExpression CloneExpression UnaryExpression ControlOp LogicOp PrintIntrinsic FunctionExpression static ParamList Parameter #[ Attributes Attribute VariadicParameter PropertyParameter PropertyHooks PropertyHook UseList ArrowFunction NewExpression class BaseClause ClassInterfaceClause DeclarationList ConstDeclaration VariableDeclarator PropertyDeclaration VariableDeclarator MethodDeclaration UseDeclaration UseList UseInsteadOfClause UseAsClause UpdateExpression ArithOp ShellExpression ThrowExpression Integer Float String MemberExpression SubscriptExpression UnaryExpression ArithOp Interpolation String IfStatement ColonBlock SwitchStatement Block CaseStatement DefaultStatement ColonBlock WhileStatement EmptyStatement DoStatement ForStatement ForSpec SequenceExpression ForeachStatement ForSpec Pair GotoStatement ContinueStatement BreakStatement ReturnStatement TryStatement CatchDeclarator DeclareStatement EchoStatement UnsetStatement ConstDeclaration FunctionDefinition ClassDeclaration InterfaceDeclaration TraitDeclaration EnumDeclaration EnumBody EnumCase NamespaceDefinition NamespaceUseDeclaration UseGroup UseClause UseClause GlobalDeclaration FunctionStaticDeclaration Program\",\n  maxTerm: 318,\n  nodeProps: [\n    [\"group\", -36,2,8,49,82,84,86,89,94,95,103,107,108,112,113,116,120,126,132,137,139,140,154,155,156,157,160,161,173,174,188,190,191,192,193,194,200,\"Expression\",-28,75,79,81,83,201,203,208,210,211,214,217,218,219,220,221,223,224,225,226,227,228,229,230,231,234,235,239,240,\"Statement\",-4,121,123,124,125,\"Type\"],\n    [\"isolate\", -4,67,68,71,200,\"\"],\n    [\"openedBy\", 70,\"phpOpen\",77,\"{\",87,\"(\",102,\"#[\"],\n    [\"closedBy\", 72,\"phpClose\",78,\"}\",88,\")\",165,\"]\"]\n  ],\n  propSources: [phpHighlighting],\n  skippedNodes: [0],\n  repeatNodeCount: 32,\n  tokenData: \"!GQ_R!]OX$zXY&^YZ'sZ]$z]^&^^p$zpq&^qr)Rrs+Pst+otu2buv5evw6rwx8Vxy>]yz>yz{?g{|@}|}Bb}!OCO!O!PDh!P!QKT!Q!R!!o!R![!$q![!]!,P!]!^!-a!^!_!-}!_!`!1S!`!a!2d!a!b!3t!b!c!7^!c!d!7z!d!e!9Y!e!}!7z!}#O!;b#O#P!<O#P#Q!<l#Q#R!=Y#R#S!7z#S#T!=y#T#U!7z#U#V!9Y#V#o!7z#o#p!Cs#p#q!Da#q#r!Ev#r#s!Fd#s$f$z$f$g&^$g&j!7z&j$I_$z$I_$I`&^$I`$KW$z$KW$KX&^$KX;'S$z;'S;=`&W<%l?HT$z?HT?HU&^?HUO$zP%PV'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zP%kO'TPP%nWOY$zYZ%fZ!a$z!b;'S$z;'S;=`&W<%l~$z~O$z~~%fP&ZP;=`<%l$z_&ed'TP'S^OX$zXY&^YZ'sZ]$z]^&^^p$zpq&^q!^$z!^!_%k!_$f$z$f$g&^$g$I_$z$I_$I`&^$I`$KW$z$KW$KX&^$KX;'S$z;'S;=`&W<%l?HT$z?HT?HU&^?HUO$z_'zW'TP'S^XY(dYZ(d]^(dpq(d$f$g(d$I_$I`(d$KW$KX(d?HT?HU(d^(iW'S^XY(dYZ(d]^(dpq(d$f$g(d$I_$I`(d$KW$KX(d?HT?HU(dR)YW$eQ'TPOY$zYZ%fZ!^$z!^!_%k!_!`)r!`;'S$z;'S;=`&W<%lO$zR)yW$XQ'TPOY$zYZ%fZ!^$z!^!_%k!_!`*c!`;'S$z;'S;=`&W<%lO$zR*jV$XQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV+YV'tS'TP'uQOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_+v]'TP!e^OY,oYZ%fZ],o]^$z^!^,o!^!_-i!_!a,o!a!b/y!b!},o!}#O1f#O;'S,o;'S;=`/s<%lO,o_,vZ'TP!e^OY,oYZ%fZ],o]^$z^!^,o!^!_-i!_!a,o!a!b/y!b;'S,o;'S;=`/s<%lO,o_-nZ!e^OY,oYZ%fZ],o]^$z^!a,o!a!b.a!b;'S,o;'S;=`/s<%l~,o~O,o~~%f^.dWOY.|YZ/nZ].|]^/n^!`.|!a;'S.|;'S;=`/h<%lO.|^/RV!e^OY.|Z].|^!a.|!a!b.a!b;'S.|;'S;=`/h<%lO.|^/kP;=`<%l.|^/sO!e^_/vP;=`<%l,o_0OZ'TPOY,oYZ0qZ],o]^0x^!^,o!^!_-i!_!`,o!`!a$z!a;'S,o;'S;=`/s<%lO,o_0xO'TP!e^_1PV'TP!e^OY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_1oZ'TP$kQ!e^OY,oYZ%fZ],o]^$z^!^,o!^!_-i!_!a,o!a!b/y!b;'S,o;'S;=`/s<%lO,o_2i`'TP#fQOY$zYZ%fZ!^$z!^!_%k!_!c$z!c!}3k!}#R$z#R#S3k#S#T$z#T#o3k#o#p4w#p$g$z$g&j3k&j;'S$z;'S;=`&W<%lO$z_3ra'TP#d^OY$zYZ%fZ!Q$z!Q![3k![!^$z!^!_%k!_!c$z!c!}3k!}#R$z#R#S3k#S#T$z#T#o3k#o$g$z$g&j3k&j;'S$z;'S;=`&W<%lO$zV5OV'TP#gUOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR5lW'TP$^QOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR6]V$OQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_6yY#T^'TPOY$zYZ%fZv$zvw7iw!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR7pV$TQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR8^Z'TP%`QOY8VYZ9PZw8Vwx;_x!^8V!^!_;{!_#O8V#O#P<y#P;'S8V;'S;=`>V<%lO8VR9WV'TP%`QOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X<%lO9mQ9rV%`QOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X<%lO9mQ:^O%`QQ:aRO;'S9m;'S;=`:j;=`O9mQ:oW%`QOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X;=`<%l9m<%lO9mQ;[P;=`<%l9mR;fV'TP%`QOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR<Q]%`QOY8VYZ9PZw8Vwx;_x!a8V!a!b9m!b#O8V#O#P<y#P;'S8V;'S;=`>V<%l~8V~O8V~~%fR=OW'TPOY8VYZ9PZ!^8V!^!_;{!_;'S8V;'S;=`=h;=`<%l9m<%lO8VR=mW%`QOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X;=`<%l8V<%lO9mR>YP;=`<%l8VR>dV!zQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV?QV!yU'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR?nY'TP$^QOY$zYZ%fZz$zz{@^{!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR@eW$_Q'TPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zRAUY$[Q'TPOY$zYZ%fZ{$z{|At|!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zRA{V%TQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRBiV#OQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_CXZ$[Q%^W'TPOY$zYZ%fZ}$z}!OAt!O!^$z!^!_%k!_!`6U!`!aCz!a;'S$z;'S;=`&W<%lO$zVDRV#aU'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zVDo['TP$]QOY$zYZ%fZ!O$z!O!PEe!P!Q$z!Q![Fs![!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zVEjX'TPOY$zYZ%fZ!O$z!O!PFV!P!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zVF^V#VU'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRFz_'TP%XQOY$zYZ%fZ!Q$z!Q![Fs![!^$z!^!_%k!_!g$z!g!hGy!h#R$z#R#SJc#S#X$z#X#YGy#Y;'S$z;'S;=`&W<%lO$zRHO]'TPOY$zYZ%fZ{$z{|Hw|}$z}!OHw!O!Q$z!Q![Ii![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRH|X'TPOY$zYZ%fZ!Q$z!Q![Ii![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRIpZ'TP%XQOY$zYZ%fZ!Q$z!Q![Ii![!^$z!^!_%k!_#R$z#R#SHw#S;'S$z;'S;=`&W<%lO$zRJhX'TPOY$zYZ%fZ!Q$z!Q![Fs![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_K[['TP$^QOY$zYZ%fZz$zz{LQ{!P$z!P!Q,o!Q!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$z_LVX'TPOYLQYZLrZzLQz{N_{!^LQ!^!_! s!_;'SLQ;'S;=`!!i<%lOLQ_LwT'TPOzMWz{Mj{;'SMW;'S;=`NX<%lOMW^MZTOzMWz{Mj{;'SMW;'S;=`NX<%lOMW^MmVOzMWz{Mj{!PMW!P!QNS!Q;'SMW;'S;=`NX<%lOMW^NXO!f^^N[P;=`<%lMW_NdZ'TPOYLQYZLrZzLQz{N_{!PLQ!P!Q! V!Q!^LQ!^!_! s!_;'SLQ;'S;=`!!i<%lOLQ_! ^V!f^'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_! vZOYLQYZLrZzLQz{N_{!aLQ!a!bMW!b;'SLQ;'S;=`!!i<%l~LQ~OLQ~~%f_!!lP;=`<%lLQZ!!vm'TP%WYOY$zYZ%fZ!O$z!O!PFs!P!Q$z!Q![!$q![!^$z!^!_%k!_!d$z!d!e!&o!e!g$z!g!hGy!h!q$z!q!r!(a!r!z$z!z!{!){!{#R$z#R#S!%}#S#U$z#U#V!&o#V#X$z#X#YGy#Y#c$z#c#d!(a#d#l$z#l#m!){#m;'S$z;'S;=`&W<%lO$zZ!$xa'TP%WYOY$zYZ%fZ!O$z!O!PFs!P!Q$z!Q![!$q![!^$z!^!_%k!_!g$z!g!hGy!h#R$z#R#S!%}#S#X$z#X#YGy#Y;'S$z;'S;=`&W<%lO$zZ!&SX'TPOY$zYZ%fZ!Q$z!Q![!$q![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zZ!&tY'TPOY$zYZ%fZ!Q$z!Q!R!'d!R!S!'d!S!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zZ!'k['TP%WYOY$zYZ%fZ!Q$z!Q!R!'d!R!S!'d!S!^$z!^!_%k!_#R$z#R#S!&o#S;'S$z;'S;=`&W<%lO$zZ!(fX'TPOY$zYZ%fZ!Q$z!Q!Y!)R!Y!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zZ!)YZ'TP%WYOY$zYZ%fZ!Q$z!Q!Y!)R!Y!^$z!^!_%k!_#R$z#R#S!(a#S;'S$z;'S;=`&W<%lO$zZ!*Q]'TPOY$zYZ%fZ!Q$z!Q![!*y![!^$z!^!_%k!_!c$z!c!i!*y!i#T$z#T#Z!*y#Z;'S$z;'S;=`&W<%lO$zZ!+Q_'TP%WYOY$zYZ%fZ!Q$z!Q![!*y![!^$z!^!_%k!_!c$z!c!i!*y!i#R$z#R#S!){#S#T$z#T#Z!*y#Z;'S$z;'S;=`&W<%lO$zR!,WX!rQ'TPOY$zYZ%fZ![$z![!]!,s!]!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!,zV#yQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!-hV!nU'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!.S[$YQOY$zYZ%fZ!^$z!^!_!.x!_!`!/i!`!a*c!a!b!0]!b;'S$z;'S;=`&W<%l~$z~O$z~~%fR!/PW$ZQ'TPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR!/pX$YQ'TPOY$zYZ%fZ!^$z!^!_%k!_!`$z!`!a*c!a;'S$z;'S;=`&W<%lO$zP!0bR!jP!_!`!0k!r!s!0p#d#e!0pP!0pO!jPP!0sQ!j!k!0y#[#]!0yP!0|Q!r!s!0k#d#e!0k_!1ZX#|Y'TPOY$zYZ%fZ!^$z!^!_%k!_!`)r!`!a!1v!a;'S$z;'S;=`&W<%lO$zV!1}V#PU'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!2kX$YQ'TPOY$zYZ%fZ!^$z!^!_%k!_!`!3W!`!a!.x!a;'S$z;'S;=`&W<%lO$zR!3_V$YQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_!3{[!wQ'TPOY$zYZ%fZ}$z}!O!4q!O!^$z!^!_%k!_!`$z!`!a!6P!a!b!6m!b;'S$z;'S;=`&W<%lO$zV!4vX'TPOY$zYZ%fZ!^$z!^!_%k!_!`$z!`!a!5c!a;'S$z;'S;=`&W<%lO$zV!5jV#bU'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_!6WV!h^'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!6tW$RQ'TPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR!7eV$dQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_!8Ta'aS'TP'WYOY$zYZ%fZ!Q$z!Q![!7z![!^$z!^!_%k!_!c$z!c!}!7z!}#R$z#R#S!7z#S#T$z#T#o!7z#o$g$z$g&j!7z&j;'S$z;'S;=`&W<%lO$z_!9ce'aS'TP'WYOY$zYZ%fZr$zrs!:tsw$zwx8Vx!Q$z!Q![!7z![!^$z!^!_%k!_!c$z!c!}!7z!}#R$z#R#S!7z#S#T$z#T#o!7z#o$g$z$g&j!7z&j;'S$z;'S;=`&W<%lO$zR!:{V'TP'uQOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!;iV#XU'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_!<VV#s^'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!<sV#YQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!=aW$VQ'TPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR!>OZ'TPOY!=yYZ!>qZ!^!=y!^!_!@y!_#O!=y#O#P!Au#P#S!=y#S#T!CP#T;'S!=y;'S;=`!Cm<%lO!=yR!>vV'TPO#O!?]#O#P!?u#P#S!?]#S#T!@n#T;'S!?];'S;=`!@s<%lO!?]Q!?`VO#O!?]#O#P!?u#P#S!?]#S#T!@n#T;'S!?];'S;=`!@s<%lO!?]Q!?xRO;'S!?];'S;=`!@R;=`O!?]Q!@UWO#O!?]#O#P!?u#P#S!?]#S#T!@n#T;'S!?];'S;=`!@s;=`<%l!?]<%lO!?]Q!@sO%UQQ!@vP;=`<%l!?]R!@|]OY!=yYZ!>qZ!a!=y!a!b!?]!b#O!=y#O#P!Au#P#S!=y#S#T!CP#T;'S!=y;'S;=`!Cm<%l~!=y~O!=y~~%fR!AzW'TPOY!=yYZ!>qZ!^!=y!^!_!@y!_;'S!=y;'S;=`!Bd;=`<%l!?]<%lO!=yR!BgWO#O!?]#O#P!?u#P#S!?]#S#T!@n#T;'S!?];'S;=`!@s;=`<%l!=y<%lO!?]R!CWV%UQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!CpP;=`<%l!=y_!CzV!p^'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_!DjY$UQ#n['TPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`#p$z#p#q!EY#q;'S$z;'S;=`&W<%lO$zR!EaV$SQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!E}V!oQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!FkV$eQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z\",\n  tokenizers: [expression, interpolated, semicolon, 0, 1, 2, 3, eofToken],\n  topRules: {\"Template\":[0,73],\"Program\":[1,241]},\n  dynamicPrecedences: {\"298\":1},\n  specialized: [{term: 284, get: (value, stack) => (keywords(value) << 1), external: keywords},{term: 284, get: (value) => spec_name[value] || -1}],\n  tokenPrec: 29889\n});\n\nexport { parser };\n","import { parser } from '@lezer/php';\nimport { parseMixed } from '@lezer/common';\nimport { html } from '@codemirror/lang-html';\nimport { LRLanguage, indentNodeProp, continuedIndent, delimitedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\n\n/**\nA language provider based on the [Lezer PHP\nparser](https://github.com/lezer-parser/php), extended with\nhighlighting and indentation information.\n*/\nconst phpLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"php\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                IfStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|else\\b|elseif\\b|endif\\b)/ }),\n                TryStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|catch\\b|finally\\b)/ }),\n                SwitchBody: context => {\n                    let after = context.textAfter, closed = /^\\s*\\}/.test(after), isCase = /^\\s*(case|default)\\b/.test(after);\n                    return context.baseIndent + (closed ? 0 : isCase ? 1 : 2) * context.unit;\n                },\n                ColonBlock: cx => cx.baseIndent + cx.unit,\n                \"Block EnumBody DeclarationList\": /*@__PURE__*/delimitedIndent({ closing: \"}\" }),\n                ArrowFunction: cx => cx.baseIndent + cx.unit,\n                \"String BlockComment\": () => null,\n                Statement: /*@__PURE__*/continuedIndent({ except: /^({|end(for|foreach|switch|while)\\b)/ })\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                \"Block EnumBody DeclarationList SwitchBody ArrayExpression ValueList\": foldInside,\n                ColonBlock(tree) { return { from: tree.from + 1, to: tree.to }; },\n                BlockComment(tree) { return { from: tree.from + 2, to: tree.to - 2 }; }\n            })\n        ]\n    }),\n    languageData: {\n        commentTokens: { block: { open: \"/*\", close: \"*/\" }, line: \"//\" },\n        indentOnInput: /^\\s*(?:case |default:|end(?:if|for(?:each)?|switch|while)|else(?:if)?|\\{|\\})$/,\n        wordChars: \"$\",\n        closeBrackets: { stringPrefixes: [\"b\", \"B\"] }\n    }\n});\n/**\nPHP language support.\n*/\nfunction php(config = {}) {\n    let support = [], base;\n    if (config.baseLanguage === null) ;\n    else if (config.baseLanguage) {\n        base = config.baseLanguage;\n    }\n    else {\n        let htmlSupport = html({ matchClosingTags: false });\n        support.push(htmlSupport.support);\n        base = htmlSupport.language;\n    }\n    return new LanguageSupport(phpLanguage.configure({\n        wrap: base && parseMixed(node => {\n            if (!node.type.isTop)\n                return null;\n            return {\n                parser: base.parser,\n                overlay: node => node.name == \"Text\"\n            };\n        }),\n        top: config.plain ? \"Program\" : \"Template\"\n    }), support);\n}\n\nexport { php, phpLanguage };\n","import { LRLanguage, indentNodeProp, delimitedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { LRParser } from '@lezer/lr';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_Keyword = {__proto__:null,anyref:34, dataref:34, eqref:34, externref:34, i31ref:34, funcref:34, i8:34, i16:34, i32:34, i64:34, f32:34, f64:34};\nconst parser = /*@__PURE__*/LRParser.deserialize({\n  version: 14,\n  states: \"!^Q]QPOOOqQPO'#CbOOQO'#Cd'#CdOOQO'#Cl'#ClOOQO'#Ch'#ChQ]QPOOOOQO,58|,58|OxQPO,58|OOQO-E6f-E6fOOQO1G.h1G.h\",\n  stateData: \"!P~O_OSPOSQOS~OTPOVROXROYROZROaQO~OSUO~P]OSXO~P]O\",\n  goto: \"xaPPPPPPbPbPPPhPPPrXROPTVQTOQVPTWTVXSOPTV\",\n  nodeNames: \"⚠ LineComment BlockComment Module ) ( App Identifier Type Keyword Number String\",\n  maxTerm: 17,\n  nodeProps: [\n    [\"isolate\", -3,1,2,11,\"\"],\n    [\"openedBy\", 4,\"(\"],\n    [\"closedBy\", 5,\")\"],\n    [\"group\", -6,6,7,8,9,10,11,\"Expression\"]\n  ],\n  skippedNodes: [0,1,2],\n  repeatNodeCount: 1,\n  tokenData: \"0o~R^XY}YZ}]^}pq}rs!Stu#pxy'Uyz(e{|(j}!O(j!Q!R(s!R![*p!]!^.^#T#o.{~!SO_~~!VVOr!Srs!ls#O!S#O#P!q#P;'S!S;'S;=`#j<%lO!S~!qOZ~~!tRO;'S!S;'S;=`!};=`O!S~#QWOr!Srs!ls#O!S#O#P!q#P;'S!S;'S;=`#j;=`<%l!S<%lO!S~#mP;=`<%l!S~#siqr%bst%btu%buv%bvw%bwx%bz{%b{|%b}!O%b!O!P%b!P!Q%b!Q![%b![!]%b!^!_%b!_!`%b!`!a%b!a!b%b!b!c%b!c!}%b#Q#R%b#R#S%b#S#T%b#T#o%b#p#q%b#r#s%b~%giV~qr%bst%btu%buv%bvw%bwx%bz{%b{|%b}!O%b!O!P%b!P!Q%b!Q![%b![!]%b!^!_%b!_!`%b!`!a%b!a!b%b!b!c%b!c!}%b#Q#R%b#R#S%b#S#T%b#T#o%b#p#q%b#r#s%b~'ZPT~!]!^'^~'aTO!]'^!]!^'p!^;'S'^;'S;=`(_<%lO'^~'sVOy'^yz(Yz!]'^!]!^'p!^;'S'^;'S;=`(_<%lO'^~(_OQ~~(bP;=`<%l'^~(jOS~~(mQ!Q!R(s!R![*p~(xUY~!O!P)[!Q![*p!g!h){#R#S+U#X#Y){#l#m+[~)aRY~!Q![)j!g!h){#X#Y){~)oSY~!Q![)j!g!h){#R#S*j#X#Y){~*OR{|*X}!O*X!Q![*_~*[P!Q![*_~*dQY~!Q![*_#R#S*X~*mP!Q![)j~*uTY~!O!P)[!Q![*p!g!h){#R#S+U#X#Y){~+XP!Q![*p~+_R!Q![+h!c!i+h#T#Z+h~+mVY~!O!P,S!Q![+h!c!i+h!r!s-P#R#S+[#T#Z+h#d#e-P~,XTY~!Q![,h!c!i,h!r!s-P#T#Z,h#d#e-P~,mUY~!Q![,h!c!i,h!r!s-P#R#S.Q#T#Z,h#d#e-P~-ST{|-c}!O-c!Q![-o!c!i-o#T#Z-o~-fR!Q![-o!c!i-o#T#Z-o~-tSY~!Q![-o!c!i-o#R#S-c#T#Z-o~.TR!Q![,h!c!i,h#T#Z,h~.aP!]!^.d~.iSP~OY.dZ;'S.d;'S;=`.u<%lO.d~.xP;=`<%l.d~/QiX~qr.{st.{tu.{uv.{vw.{wx.{z{.{{|.{}!O.{!O!P.{!P!Q.{!Q![.{![!].{!^!_.{!_!`.{!`!a.{!a!b.{!b!c.{!c!}.{#Q#R.{#R#S.{#S#T.{#T#o.{#p#q.{#r#s.{\",\n  tokenizers: [0],\n  topRules: {\"Module\":[0,3]},\n  specialized: [{term: 9, get: (value) => spec_Keyword[value] || -1}],\n  tokenPrec: 0\n});\n\nconst wastLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"wast\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                App: /*@__PURE__*/delimitedIndent({ closing: \")\", align: false })\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                App: foldInside,\n                BlockComment(tree) { return { from: tree.from + 2, to: tree.to - 2 }; }\n            }),\n            /*@__PURE__*/styleTags({\n                Keyword: tags.keyword,\n                Type: tags.typeName,\n                Number: tags.number,\n                String: tags.string,\n                Identifier: tags.variableName,\n                LineComment: tags.lineComment,\n                BlockComment: tags.blockComment,\n                \"( )\": tags.paren\n            })\n        ]\n    }),\n    languageData: {\n        commentTokens: { line: \";;\", block: { open: \"(;\", close: \";)\" } },\n        closeBrackets: { brackets: [\"(\", '\"'] }\n    }\n});\nfunction wast() {\n    return new LanguageSupport(wastLanguage);\n}\n\nexport { wast, wastLanguage };\n","import { LRLanguage, LanguageSupport } from '@codemirror/language';\nimport { html } from '@codemirror/lang-html';\nimport { javascriptLanguage } from '@codemirror/lang-javascript';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { parseMixed } from '@lezer/common';\nimport { LRParser, LocalTokenGroup } from '@lezer/lr';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst parser = /*@__PURE__*/LRParser.deserialize({\n  version: 14,\n  states: \"%pOVOWOOObQPOOOpOSO'#C_OOOO'#Cp'#CpQVOWOOQxQPOOO!TQQOOQ!YQPOOOOOO,58y,58yO!_OSO,58yOOOO-E6n-E6nO!dQQO'#CqQ{QPOOO!iQPOOQ{QPOOO!qQPOOOOOO1G.e1G.eOOQO,59],59]OOQO-E6o-E6oO!yOpO'#CiO#RO`O'#CiQOQPOOO#ZO#tO'#CmO#fO!bO'#CmOOQO,59T,59TO#qOpO,59TO#vO`O,59TOOOO'#Cr'#CrO#{O#tO,59XOOQO,59X,59XOOOO'#Cs'#CsO$WO!bO,59XOOQO1G.o1G.oOOOO-E6p-E6pOOQO1G.s1G.sOOOO-E6q-E6q\",\n  stateData: \"$g~OjOS~OQROUROkQO~OWTOXUOZUO`VO~OSXOTWO~OXUO[]OlZO~OY^O~O[_O~OT`O~OYaO~OmcOodO~OmfOogO~O^iOnhO~O_jOphO~ObkOqkOrmO~OcnOsnOtmO~OnpO~OppO~ObkOqkOrrO~OcnOsnOtrO~OWX`~\",\n  goto: \"!^hPPPiPPPPPPPPPmPPPpPPsy!Q!WTROSRe]Re_QSORYSS[T^Rb[QlfRqlQogRso\",\n  nodeNames: \"⚠ Content Text Interpolation InterpolationContent }} Entity Attribute VueAttributeName : Identifier @ Is ScriptAttributeValue AttributeScript AttributeScript AttributeName AttributeValue Entity Entity\",\n  maxTerm: 36,\n  nodeProps: [\n    [\"isolate\", -3,3,13,17,\"\"]\n  ],\n  skippedNodes: [0],\n  repeatNodeCount: 4,\n  tokenData: \"'y~RdXY!aYZ!a]^!apq!ars!rwx!w}!O!|!O!P#t!Q![#y![!]$s!_!`%g!b!c%l!c!}#y#R#S#y#T#j#y#j#k%q#k#o#y%W;'S#y;'S;:j$m<%lO#y~!fSj~XY!aYZ!a]^!apq!a~!wOm~~!|Oo~!b#RX`!b}!O!|!Q![!|![!]!|!c!}!|#R#S!|#T#o!|%W;'S!|;'S;:j#n<%lO!|!b#qP;=`<%l!|~#yOl~%W$QXY#t`!b}!O!|!Q![#y![!]!|!c!}#y#R#S#y#T#o#y%W;'S#y;'S;:j$m<%lO#y%W$pP;=`<%l#y~$zXX~`!b}!O!|!Q![!|![!]!|!c!}!|#R#S!|#T#o!|%W;'S!|;'S;:j#n<%lO!|~%lO[~~%qOZ~%W%xXY#t`!b}!O&e!Q![#y![!]!|!c!}#y#R#S#y#T#o#y%W;'S#y;'S;:j$m<%lO#y!b&jX`!b}!O!|!Q![!|![!]!|!c!}'V#R#S!|#T#o'V%W;'S!|;'S;:j#n<%lO!|!b'^XW!b`!b}!O!|!Q![!|![!]!|!c!}'V#R#S!|#T#o'V%W;'S!|;'S;:j#n<%lO!|\",\n  tokenizers: [6, 7, /*@__PURE__*/new LocalTokenGroup(\"b~RP#q#rU~XP#q#r[~aOT~~\", 17, 4), /*@__PURE__*/new LocalTokenGroup(\"!k~RQvwX#o#p!_~^TU~Opmq!]m!^;'Sm;'S;=`!X<%lOm~pUOpmq!]m!]!^!S!^;'Sm;'S;=`!X<%lOm~!XOU~~![P;=`<%lm~!bP#o#p!e~!jOk~~\", 72, 2), /*@__PURE__*/new LocalTokenGroup(\"[~RPwxU~ZOp~~\", 11, 15), /*@__PURE__*/new LocalTokenGroup(\"[~RPrsU~ZOn~~\", 11, 14), /*@__PURE__*/new LocalTokenGroup(\"!e~RQvwXwx!_~^Tc~Opmq!]m!^;'Sm;'S;=`!X<%lOm~pUOpmq!]m!]!^!S!^;'Sm;'S;=`!X<%lOm~!XOc~~![P;=`<%lm~!dOt~~\", 66, 35), /*@__PURE__*/new LocalTokenGroup(\"!e~RQrsXvw^~^Or~~cTb~Oprq!]r!^;'Sr;'S;=`!^<%lOr~uUOprq!]r!]!^!X!^;'Sr;'S;=`!^<%lOr~!^Ob~~!aP;=`<%lr~\", 66, 33)],\n  topRules: {\"Content\":[0,1],\"Attribute\":[1,7]},\n  tokenPrec: 157\n});\n\nconst exprParser = /*@__PURE__*/javascriptLanguage.parser.configure({\n    top: \"SingleExpression\"\n});\nconst baseParser = /*@__PURE__*/parser.configure({\n    props: [\n        /*@__PURE__*/styleTags({\n            Text: tags.content,\n            Is: tags.definitionOperator,\n            AttributeName: tags.attributeName,\n            VueAttributeName: tags.keyword,\n            Identifier: tags.variableName,\n            \"AttributeValue ScriptAttributeValue\": tags.attributeValue,\n            Entity: tags.character,\n            \"{{ }}\": tags.brace,\n            \"@ :\": tags.punctuation\n        })\n    ]\n});\nconst exprMixed = { parser: exprParser };\nconst textParser = /*@__PURE__*/baseParser.configure({\n    wrap: /*@__PURE__*/parseMixed((node, input) => node.name == \"InterpolationContent\" ? exprMixed : null),\n});\nconst attrParser = /*@__PURE__*/baseParser.configure({\n    wrap: /*@__PURE__*/parseMixed((node, input) => node.name == \"AttributeScript\" ? exprMixed : null),\n    top: \"Attribute\"\n});\nconst textMixed = { parser: textParser }, attrMixed = { parser: attrParser };\nconst baseHTML = /*@__PURE__*/html();\nfunction makeVue(base) {\n    return base.configure({\n        dialect: \"selfClosing\",\n        wrap: parseMixed(mixVue)\n    }, \"vue\");\n}\n/**\nA language provider for Vue templates.\n*/\nconst vueLanguage = /*@__PURE__*/makeVue(baseHTML.language);\nfunction mixVue(node, input) {\n    switch (node.name) {\n        case \"Attribute\":\n            return /^(@|:|v-)/.test(input.read(node.from, node.from + 2)) ? attrMixed : null;\n        case \"Text\":\n            return textMixed;\n    }\n    return null;\n}\n/**\nVue template support.\n*/\nfunction vue(config = {}) {\n    let base = baseHTML;\n    if (config.base) {\n        if (config.base.language.name != \"html\" || !(config.base.language instanceof LRLanguage))\n            throw new RangeError(\"The base option must be the result of calling html(...)\");\n        base = config.base;\n    }\n    return new LanguageSupport(base.language == baseHTML.language ? vueLanguage : makeVue(base.language), [\n        base.support,\n        base.language.data.of({ closeBrackets: { brackets: [\"{\", '\"'] } })\n    ]);\n}\n\nexport { vue, vueLanguage };\n","import { LRLanguage, LanguageSupport } from '@codemirror/language';\nimport { html } from '@codemirror/lang-html';\nimport { javascriptLanguage } from '@codemirror/lang-javascript';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { parseMixed } from '@lezer/common';\nimport { ExternalTokenizer, LRParser } from '@lezer/lr';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst Text = 1,\n  attributeContentSingle = 33,\n  attributeContentDouble = 34,\n  scriptAttributeContentSingle = 35,\n  scriptAttributeContentDouble = 36;\n\nconst text = /*@__PURE__*/new ExternalTokenizer(input => {\n    let start = input.pos;\n    for (;;) {\n        if (input.next == 10 /* Ch.Newline */) {\n            input.advance();\n            break;\n        }\n        else if (input.next == 123 /* Ch.BraceL */ && input.peek(1) == 123 /* Ch.BraceL */ || input.next < 0) {\n            break;\n        }\n        input.advance();\n    }\n    if (input.pos > start)\n        input.acceptToken(Text);\n});\nfunction attrContent(quote, token, script) {\n    return new ExternalTokenizer(input => {\n        let start = input.pos;\n        while (input.next != quote && input.next >= 0 &&\n            (script || input.next != 38 /* Ch.Ampersand */ && (input.next != 123 /* Ch.BraceL */ || input.peek(1) != 123 /* Ch.BraceL */)))\n            input.advance();\n        if (input.pos > start)\n            input.acceptToken(token);\n    });\n}\nconst attrSingle = /*@__PURE__*/attrContent(39 /* Ch.SingleQuote */, attributeContentSingle, false);\nconst attrDouble = /*@__PURE__*/attrContent(34 /* Ch.DoubleQuote */, attributeContentDouble, false);\nconst scriptAttrSingle = /*@__PURE__*/attrContent(39 /* Ch.SingleQuote */, scriptAttributeContentSingle, true);\nconst scriptAttrDouble = /*@__PURE__*/attrContent(34 /* Ch.DoubleQuote */, scriptAttributeContentDouble, true);\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst parser = /*@__PURE__*/LRParser.deserialize({\n  version: 14,\n  states: \"(jOVOqOOOeQpOOOvO!bO'#CaOOOP'#Cx'#CxQVOqOOO!OQpO'#CfO!WQpO'#ClO!]QpO'#CrO!bQpO'#CsOOQO'#Cv'#CvQ!gQpOOQ!lQpOOQ!qQpOOOOOV,58{,58{O!vOpO,58{OOOP-E6v-E6vO!{QpO,59QO#TQpO,59QOOQO,59W,59WO#YQpO,59^OOQO,59_,59_O#_QpOOO#_QpOOO#gQpOOOOOV1G.g1G.gO#oQpO'#CyO#tQpO1G.lOOQO1G.l1G.lO#|QpO1G.lOOQO1G.x1G.xO$UO`O'#DUO$ZOWO'#DUOOQO'#Co'#CoQOQpOOOOQO'#Cu'#CuO$`OtO'#CwO$qOrO'#CwOOQO,59e,59eOOQO-E6w-E6wOOQO7+$W7+$WO%SQpO7+$WO%[QpO7+$WOOOO'#Cp'#CpO%aOpO,59pOOOO'#Cq'#CqO%fOpO,59pOOOS'#Cz'#CzO%kOtO,59cOOQO,59c,59cOOOQ'#C{'#C{O%|OrO,59cO&_QpO<<GrOOQO<<Gr<<GrOOQO1G/[1G/[OOOS-E6x-E6xOOQO1G.}1G.}OOOQ-E6y-E6yOOQOAN=^AN=^\",\n  stateData: \"&d~OvOS~OPROSQOVROWRO~OZTO[XO^VOaUOhWO~OR]OU^O~O[`O^aO~O[bO~O[cO~O[dO~ObeO~ObfO~ObgO~ORhO~O]kOwiO~O[lO~O_mO~OynOzoO~OysOztO~O[uO~O]wOwiO~O_yOwiO~OtzO~Os|O~OSQOV!OOW!OOr!OOy!QO~OSQOV!ROW!ROq!ROz!QO~O_!TOwiO~O]!UO~Oy!VO~Oz!VO~OSQOV!OOW!OOr!OOy!XO~OSQOV!ROW!ROq!ROz!XO~O]!ZO~O\",\n  goto: \"#dyPPPPPzPPPP!WPPPPP!WPP!Z!^!a!d!dP!g!j!m!p!v#Q#WPPPPPPPP#^SROSS!Os!PT!Rt!SRYPRqeR{nR}oRZPRqfR[PRqgQSOR_SQj`SvjxRxlQ!PsR!W!PQ!StR!Y!SQpeRrf\",\n  nodeNames: \"⚠ Text Content }} {{ Interpolation InterpolationContent Entity InvalidEntity Attribute BoundAttributeName [ Identifier ] ( ) ReferenceName # Is ExpressionAttributeValue AttributeInterpolation AttributeInterpolation EventName DirectiveName * StatementAttributeValue AttributeName AttributeValue\",\n  maxTerm: 42,\n  nodeProps: [\n    [\"openedBy\", 3,\"{{\",15,\"(\"],\n    [\"closedBy\", 4,\"}}\",14,\")\"],\n    [\"isolate\", -4,5,19,25,27,\"\"]\n  ],\n  skippedNodes: [0],\n  repeatNodeCount: 4,\n  tokenData: \"0r~RyOX#rXY$mYZ$mZ]#r]^$m^p#rpq$mqr#rrs%jst&Qtv#rvw&hwx)zxy*byz*xz{+`{}#r}!O+v!O!P-]!P!Q#r!Q![+v![!]+v!]!_#r!_!`-s!`!c#r!c!}+v!}#O.Z#O#P#r#P#Q.q#Q#R#r#R#S+v#S#T#r#T#o+v#o#p/X#p#q#r#q#r0Z#r%W#r%W;'S+v;'S;:j-V;:j;=`$g<%lO+vQ#wTUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rQ$ZSO#q#r#r;'S#r;'S;=`$g<%lO#rQ$jP;=`<%l#rR$t[UQvPOX#rXY$mYZ$mZ]#r]^$m^p#rpq$mq#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR%qTyPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR&XTaPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR&oXUQWPOp'[pq#rq!]'[!]!^#r!^#q'[#q#r(d#r;'S'[;'S;=`)t<%lO'[R'aXUQOp'[pq#rq!]'[!]!^'|!^#q'[#q#r(d#r;'S'[;'S;=`)t<%lO'[R(TTVPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR(gXOp'[pq#rq!]'[!]!^'|!^#q'[#q#r)S#r;'S'[;'S;=`)t<%lO'[P)VUOp)Sq!])S!]!^)i!^;'S)S;'S;=`)n<%lO)SP)nOVPP)qP;=`<%l)SR)wP;=`<%l'[R*RTzPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR*iT^PUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR+PT_PUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR+gThPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR+}b[PUQO}#r}!O+v!O!Q#r!Q![+v![!]+v!]!c#r!c!}+v!}#R#r#R#S+v#S#T#r#T#o+v#o#q#r#q#r$W#r%W#r%W;'S+v;'S;:j-V;:j;=`$g<%lO+vR-YP;=`<%l+vR-dTwPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR-zTUQbPO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR.bTZPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR.xT]PUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR/^VUQO#o#r#o#p/s#p#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR/zTSPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#r~0^TO#q#r#q#r0m#r;'S#r;'S;=`$g<%lO#r~0rOR~\",\n  tokenizers: [text, attrSingle, attrDouble, scriptAttrSingle, scriptAttrDouble, 0, 1],\n  topRules: {\"Content\":[0,2],\"Attribute\":[1,9]},\n  tokenPrec: 0\n});\n\nconst exprParser = /*@__PURE__*/javascriptLanguage.parser.configure({\n    top: \"SingleExpression\"\n});\nconst baseParser = /*@__PURE__*/parser.configure({\n    props: [\n        /*@__PURE__*/styleTags({\n            Text: tags.content,\n            Is: tags.definitionOperator,\n            AttributeName: tags.attributeName,\n            \"AttributeValue ExpressionAttributeValue StatementAttributeValue\": tags.attributeValue,\n            Entity: tags.character,\n            InvalidEntity: tags.invalid,\n            \"BoundAttributeName/Identifier\": tags.attributeName,\n            \"EventName/Identifier\": /*@__PURE__*/tags.special(tags.attributeName),\n            \"ReferenceName/Identifier\": tags.variableName,\n            \"DirectiveName/Identifier\": tags.keyword,\n            \"{{ }}\": tags.brace,\n            \"( )\": tags.paren,\n            \"[ ]\": tags.bracket,\n            \"# '*'\": tags.punctuation\n        })\n    ]\n});\nconst exprMixed = { parser: exprParser }, statementMixed = { parser: javascriptLanguage.parser };\nconst textParser = /*@__PURE__*/baseParser.configure({\n    wrap: /*@__PURE__*/parseMixed((node, input) => node.name == \"InterpolationContent\" ? exprMixed : null),\n});\nconst attrParser = /*@__PURE__*/baseParser.configure({\n    wrap: /*@__PURE__*/parseMixed((node, input) => {\n        var _a;\n        return node.name == \"InterpolationContent\" ? exprMixed\n            : node.name != \"AttributeInterpolation\" ? null\n                : ((_a = node.node.parent) === null || _a === void 0 ? void 0 : _a.name) == \"StatementAttributeValue\" ? statementMixed : exprMixed;\n    }),\n    top: \"Attribute\"\n});\nconst textMixed = { parser: textParser }, attrMixed = { parser: attrParser };\nconst baseHTML = /*@__PURE__*/html({ selfClosingTags: true });\nfunction mkAngular(language) {\n    return language.configure({ wrap: parseMixed(mixAngular) }, \"angular\");\n}\n/**\nA language provider for Angular Templates.\n*/\nconst angularLanguage = /*@__PURE__*/mkAngular(baseHTML.language);\nfunction mixAngular(node, input) {\n    switch (node.name) {\n        case \"Attribute\":\n            return /^[*#(\\[]|\\{\\{/.test(input.read(node.from, node.to)) ? attrMixed : null;\n        case \"Text\":\n            return textMixed;\n    }\n    return null;\n}\n/**\nAngular Template language support.\n*/\nfunction angular(config = {}) {\n    let base = baseHTML;\n    if (config.base) {\n        if (config.base.language.name != \"html\" || !(config.base.language instanceof LRLanguage))\n            throw new RangeError(\"The base option must be the result of calling html(...)\");\n        base = config.base;\n    }\n    return new LanguageSupport(base.language == baseHTML.language ? angularLanguage : mkAngular(base.language), [base.support, base.language.data.of({\n            closeBrackets: { brackets: [\"[\", \"{\", '\"'] },\n            indentOnInput: /^\\s*[\\}\\]]$/\n        })]);\n}\n\nexport { angular, angularLanguage };\n","import { ExternalTokenizer, LRParser } from '@lezer/lr';\nimport { LRLanguage, indentNodeProp, delimitedIndent, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { snippetCompletion, ifNotIn, completeFromList } from '@codemirror/autocomplete';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst strContent = 63,\n  strDollarBrace = 64,\n  strEnd = 65,\n  escapeSequence = 66,\n  indStrContent = 67,\n  indStrDollarBrace = 68,\n  indStrEnd = 69,\n  indEscapeSequence = 70;\n\nconst quote = 34, backslack = 92, braceL = 123, dollar = 36, apostrophe = 39;\nconst scanString = /*@__PURE__*/new ExternalTokenizer((input) => {\n    for (let afterDollar = false, i = 0;; i++) {\n        let { next } = input;\n        if (next < 0) {\n            if (i > 0)\n                input.acceptToken(strContent);\n            break;\n        }\n        else if (next === quote) {\n            if (i > 0)\n                input.acceptToken(strContent);\n            else\n                input.acceptToken(strEnd, 1);\n            break;\n        }\n        else if (next === braceL && afterDollar) {\n            if (i == 1)\n                input.acceptToken(strDollarBrace, 1);\n            else\n                input.acceptToken(strContent, -1);\n            break;\n        }\n        else if (next === backslack) {\n            input.advance();\n            input.acceptToken(escapeSequence, 1);\n        }\n        afterDollar = next === dollar;\n        input.advance();\n    }\n});\nconst scanIndString = /*@__PURE__*/new ExternalTokenizer((input) => {\n    for (let afterDollar = false, afterApostrophe = false, i = 0;; i++) {\n        let { next } = input;\n        if (next < 0) {\n            if (i > 0)\n                input.acceptToken(indStrContent);\n            break;\n        }\n        else if (next === apostrophe && afterApostrophe) {\n            if (i > 1)\n                input.acceptToken(indStrContent, -1);\n            else\n                input.acceptToken(indStrEnd, 1);\n            break;\n        }\n        else if (next === braceL && afterDollar) {\n            if (i == 1)\n                input.acceptToken(indStrDollarBrace, 1);\n            else\n                input.acceptToken(indStrContent, -1);\n            break;\n        }\n        else if (next === backslack) {\n            input.advance();\n            input.acceptToken(indEscapeSequence, 1);\n        }\n        afterDollar = next === dollar;\n        afterApostrophe = next === apostrophe;\n        input.advance();\n    }\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_Identifier = {__proto__:null,assert:22, with:26, let:30, inherit:42, in:48, if:52, then:54, else:56, builtins:70, null:214, true:216, false:216, rec:100, or:108};\nconst parser$1 = /*@__PURE__*/LRParser.deserialize({\n  version: 14,\n  states: \"7QO]QSOOO!sQWO'#DyO#XQ`O'#EjO&QQSO'#C`O&YQTO'#CnO'lQWO'#EWO(VQSO'#C|O(VQSO'#C|OOQO'#DQ'#DQOOQO'#DT'#DTO)dQUO'#DUO*yQSO'#DcOOQO'#Ej'#EjO,XQ`O'#EiOOQO'#Ei'#EiO-wQ`O'#EXOOQO'#Eh'#EhOOQO'#EX'#EXOOQO'#EW'#EWOOQO'#Dw'#DwO]QSO'#CfO]QSO'#ChO/dQSO'#D^O]QSO'#CuO]QSO'#D[O/xQSO'#D_QOQSOOO/}QSO'#CdO0`Q`O,5:eO3XQSO,5:eO3aQSO,5:eO4sQSO'#EOOOQO'#Cm'#CmOOQO'#Df'#DfO4}QSO,59wO]QSO'#CpO5`QSO'#ClO5eQSO'#EUO]QSO,58zO5sQSO,58zO5xQSO,58zOOQP'#EQ'#EQOOQP'#Dg'#DgO5}QTO,59YOOQO,59Y,59YO]QSO'#CoO6]QSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO6|QWO,59hO8VQSO'#D]O/xQSO'#D^OOQO,59h,59hOOQQ'#En'#EnOOQQ'#Dj'#DjO8hQUO,59pOOQO,59p,59pO]QSO'#DVOOQO'#Dk'#DkO8vQSO,59}OOQO,59},59}O8}QSO'#EiO6]QSO,59jOOQO,59i,59iO9XQSO,59QO9^QSO,59SO9cQSO,59UO]QSO,59UOOQO,59x,59xO9tQSO,59aO9yQSO,59vOOQO,59y,59yO:OQSO'#DhO;hQSO,5:jO]QSO,59OO;rQWO1G0PO;zQSO1G0POOQO1G0P1G0POOQO-E7d-E7dOOQO1G/c1G/cO<SQSO,59[O]QSO,59WOOQO'#Di'#DiO<XQSO,5:pO]QSO,5:qOOQO1G.f1G.fO<gQWO'#DyO<rQSO1G.fOOQP-E7e-E7eOOQO1G.t1G.tO<wQSO,59ZO<|Q`O'#EOOOQO1G/P1G/PO@PQWO1G/PO@WQWO1G/POAuQWO1G/POA|QWO1G/POBTQWO1G/POC^QWO1G/PODgQWO1G/POEpQWO1G/POFyQWO1G/POHSQWO1G/POI]QWO1G/POJfQWO1G/POKoQWO1G/POOQO,59w,59wOOQQ-E7h-E7hOOQO1G/[1G/[OLYQSO,59qOOQO-E7i-E7iOOQO1G/i1G/iOMfQ`O1G/UO]QSO1G.lO]QSO1G.nO]QSO1G.pOOQO1G.p1G.pO]QSO1G.{OOQO1G/b1G/bOOQO,5:S,5:SOOQO-E7f-E7fOOQO1G.j1G.jO! UQSO'#CdOOQO,5:P,5:PO! aQSO7+%kO! fQWO7+%kOOQO-E7c-E7cOOQO7+%k7+%kOOQO1G.v1G.vO! nQSO1G.rOOQO-E7g-E7gOOQO1G0[1G0[O! sQSO1G0]OOQO,5:e,5:eO]QSO7+$QOOQP1G.u1G.uO! xQ`O,5:jOOQQ1G/]1G/]O!#eQSO1G/UO)rQSO7+$pOOQO7+$W7+$WOOQO7+$Y7+$YOOQO7+$[7+$[O!#oQSO7+$gOOQO<<IV<<IVO!#tQSO<<IVP!#yQSO'#DeOOQO7+$^7+$^O!$OQSO7+%wOOQO<<Gl<<GlOOQO<<H[<<H[O]QSO<<HROOQOAN>qAN>qO!$ZQSO<<IcOOQOAN=mAN=mOOQOAN>}AN>}O!$iQSO,59jO)rQSO7+$p\",\n  stateData: \"!$x~O!jOSPOSQOS~OTQOUPOZdO]eO_fOfhOjgOs[Ou[Ov[Oz[O{[O|[O}[O!SiO!UZO!sSO#QVO#ZUO#_WO#`XO#aYO~OTkOVlOXnOeuO!sSO!usO~O!lvO!pwOT#^XU#^X_#^Xf#^Xn#^Xo#^Xs#^Xu#^Xv#^Xz#^X{#^X|#^X}#^X!S#^X!U#^X!`#^X!n#^X!s#^X!v#^X!|#^X!}#^X#O#^X#P#^X#Q#^X#R#^X#S#^X#T#^X#U#^X#V#^X#W#^X#X#^X#Y#^X#_#^X#`#^X#a#^X!q#^Xk#^Xg#^XV#^X!o#^Xl#^X~O!lvO!pxO~O!ayO!b}O!c|O!dyO~On!TOo!VO!n!OO!|!PO!}!PO#O!QO#P!RO#Q!SO#R!TO#S!UO#T!WO#U!XO#V!YO#W!ZO#X![O#Y!]O~O!`!zX!q!zXk!zXg!zXV!zX!o!zXl!zX~P&hOT[OU!_O_!`OfhOs[Ou[Ov[Oz[O{[O|[O}[O!SiO!UZO!sSO#QVO#ZUO#_WO#`XO#aYO~O!e!bO!f!fO!g!eO!h!bO~OT[OU!_O_!`OfhOs[Ou[Ov[Oz[O{[O|[O}[O!SiO!UZO!sSO#_WO#`XO#aYO~O!T!iO~P)rOT#]XU#]X_#]Xf#]Xs#]Xu#]Xv#]Xz#]X{#]X|#]X}#]X!S#]X!U#]X!s#]X#_#]X#`#]X#a#]X~O!v!kOn#]Xo#]X!`#]X!n#]X!|#]X!}#]X#O#]X#P#]X#Q#]X#R#]X#S#]X#T#]X#U#]X#V#]X#W#]X#X#]X#Y#]X!q#]Xk#]Xg#]XV#]X!o#]Xl#]X~P+QOn!{Xo!{X!`!{X!n!{X!|!{X!}!{X#O!{X#P!{X#Q!{X#R!{X#S!{X#T!{X#U!{X#V!{X#W!{X#X!{X#Y!{X!q!{Xk!{Xg!{XV!{X!o!{Xl!{X~P)rOToOU!_OeuOh!pO!sSO!usO~OU!_O~O!n!wO!v!uOVWX!oWX!w!rX~OT!PaU!Pa_!Paf!Pan!Pao!Pas!Pau!Pav!Paz!Pa{!Pa|!Pa}!Pa!S!Pa!U!Pa!`!Pa!l!ma!n!Pa!p!ma!s!Pa!v!Pa!|!Pa!}!Pa#O!Pa#P!Pa#Q!Pa#R!Pa#S!Pa#T!Pa#U!Pa#V!Pa#W!Pa#X!Pa#Y!Pa#_!Pa#`!Pa#a!Pa!q!Pak!Pag!PaV!Pa!o!Pal!Pa~OV!zO!o!xO~OV!zO~O!v!uOT!rXU!rX_!rXf!rXs!rXu!rXv!rXz!rX{!rX|!rX}!rX!S!rX!U!rX!W!rX!s!rX#_!rX#`!rX#a!rX~O!w!rX!T!rX~P3fOToOV!|OeuO!sSO!usO~O!w#OO~OT#POf#RO!sSO!usO~OU#TO~OT#UO~O!ayO!b}O!c#WO!dyO~OT#YO!sSO!usO~O!n!OO!|!PO!}!PO#O!QO#P!RO#Q!SO~Onpaopa!`pa#Rpa#Spa#Tpa#Upa#Vpa#Wpa#Xpa#Ypa!qpakpagpaVpa!opalpa~P6hOToOV#iOeuO!sSO!usO~O!e!bO!f!fO!g#kO!h!bO~O!T#nO~P)rO!v$mO!T#]X~P+QO!q#pO~O!q#qO~OToOeuOh#rO!sSO!usO~Ok#tO~Og#uO~OT#vO!sSO!usO~O!v!uOT!raU!ra_!raf!ras!rau!rav!raz!ra{!ra|!ra}!ra!S!ra!U!ra!W!ra!s!ra#_!ra#`!ra#a!ra~O!w!ra!T!ra~P:ZOT#yOX#{O~OV$OO!o#|O~OV$PO~OT#PO!q$SO!sSO!usO~OT#yOV$UOXnO~O!l$VO~OV$WO~On!rXo!rX!`!rX!n!rX!|!rX!}!rX#O!rX#P!rX#Q!rX#R!rX#S!rX#T!rX#U!rX#V!rX#W!rX#X!rX#Y!rX!q!rXk!rXg!rXV!rX!o!rXl!rX~P3fO!n!OO!|!POnmiomi!`mi#Omi#Pmi#Qmi#Rmi#Smi#Tmi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~O!}mi~P>iO!}!PO~P>iO!n!OO!|!PO!}!PO#O!QOnmiomi!`mi#Qmi#Rmi#Smi#Tmi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~O#Pmi~P@_O#P!RO~P@_O#R!TOnmiomi!`mi#Smi#Tmi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TO#R!TOomi!`mi#Smi#Tmi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TO#R!TO#S!UOomi!`mi#Tmi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TOo!VO#R!TO#S!UO!`mi#Tmi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TOo!VO#R!TO#S!UO#T!WO!`mi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TOo!VO#R!TO#S!UO#T!WO#U!XO!`mi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TOo!VO#R!TO#S!UO#T!WO#U!XO#V!YO!`mi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TOo!VO#R!TO#S!UO#T!WO#U!XO#V!YO#W!ZO!`mi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hO!`mi!qmikmigmiVmi!omilmi~P&hOV$YO~OTriUri_rifrisriurivrizri{ri|ri}ri!Sri!Uri!sri#_ri#`ri#ari~O!W$[Onriori!`ri!nri!|ri!}ri#Ori#Pri#Qri#Rri#Sri#Tri#Uri#Vri#Wri#Xri#Yri!qrikrigriVri!orilri~PL_O!n!wOVWX!oWX~OV$aO~OT#yOX$bO~O!q$dO~Og$eO~On!rao!ra!`!ra!n!ra!|!ra!}!ra#O!ra#P!ra#Q!ra#R!ra#S!ra#T!ra#U!ra#V!ra#W!ra#X!ra#Y!ra!q!rak!rag!raV!ra!o!ral!ra~P:ZO!W$nO!Tri~PL_Ol$hO~OV$iO~OT#yO~OT#PO!sSO!usO~OT#PO!q$lO!sSO!usO~OToO!sSO!usO~Oz!v!v~\",\n  goto: \"2g#cPPPP#dPPP#yP#dP#dP#dP$S$Z$k%{%fPPPP&PPPP&fPP&f'[(QP({PP({({)vPPPP({)z({({PPP({P*|+S+_+e+p+z,QPPPPPPPPPPP,WP-cPPPP-{P.VPPP$S$S#d.ZPPPPPPPPPPPPPP/o0e1fPPP2cwcOdeghsv}!f!p!w#O#R#p#q#r#t$V$hSmP#TV#z!x#|$cZqPfr!_!oYtPfr!_!oQ#Z!OQ#o!kR$Z$m!p[OUVZ_deghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!h!p!w#O#R#p#q#r#t$V$[$h$n[oPfr!_!o$mW#Pu#Q$e$jS#Y!O!kR#v!uTyS{wbOdeghsv}!f!p!w#O#R#p#q#r#t$V$h!gaOUVdeghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!p!w#O#R#p#q#r#t$V$h!g`OUVdeghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!p!w#O#R#p#q#r#t$V$h!q^OUVZ_deghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!h!p!w#O#R#p#q#r#t$V$[$h$n!q[OUVZ_deghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!h!p!w#O#R#p#q#r#t$V$[$h$nT!bY!d!p[OUVZ_deghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!h!p!w#O#R#p#q#r#t$V$[$h$nS!qf!`R!tiQ!ymR#}!ySrP!_Q!ofT!{r!oQ{SR#V{S!vkoS#w!v$XR$X#YQ#QuS$R#Q$jR$j$eQ!dYR#j!dQ!hZR#m!hQjOQ!mdQ!neQ!rgQ!shQ!}sQ#SvQ#X}Q#l!fQ#s!pQ#x!wQ$Q#OQ$T#RQ$]#pQ$^#qQ$_#rQ$`#tQ$f$VR$k$hvROdeghsv}!f!p!w#O#R#p#q#r#t$V$hR#UwapPfr!O!_!k!o$mTzS{vTOdeghsv}!f!p!w#O#R#p#q#r#t$V$hQ!^UQ!aVQ#[!PQ#]!QQ#^!RQ#_!SQ#`!TQ#a!UQ#b!VQ#c!WQ#d!XQ#e!YQ#f!ZQ#g![R#h!]!g_OUVdeghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!p!w#O#R#p#q#r#t$V$h!f`OUVdeghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!p!w#O#R#p#q#r#t$V$hS!gZ!hQ!l_T$g$[$n!j]OUV_deghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!p!w#O#R#p#q#r#t$V$[$hV!jZ!h$nT!cY!d\",\n  nodeNames: \"⚠ LineComment BlockComment Program Function Identifier { } Formal Ellipses Assert assert With with Let let Bind AttrPath String Interpolation Interpolation inherit ( ) in IfExpr if then else BinaryExpr < > UnaryExpr App Select builtins Null Integer Float Boolean IndentedString Interpolation Path HPath SPath URI Parenthesized AttrSet LetAttrSet RecAttrSet rec ] [ List or\",\n  maxTerm: 110,\n  nodeProps: [\n    [\"closedBy\", 6,\"}\",22,\")\",52,\"]\"],\n    [\"openedBy\", 7,\"{\",23,\"(\",51,\"[\"]\n  ],\n  skippedNodes: [0,1,2],\n  repeatNodeCount: 7,\n  tokenData: \">P~RtXY#cYZ#c]^#cpq#cqr#trs$Rst$Wtu$ovw$zwx%Vxy%byz%gz{%l{|%q|})]}!O)b!O!P*X!P!Q.r!Q!R0l!R![2e![!]3S!]!^3X!^!_3^!_!`5_!`!a5l!a!b5y!b!c6O!c!}6T!}#O;g#P#Q;l#R#S:u#T#o6T#o#p;q#p#q;v#q#r<R#r#s<W~#hS!j~XY#cYZ#c]^#cpq#cV#yP#ZP!_!`#|U$RO#VU~$WO!s~~$]SP~OY$WZ;'S$W;'S;=`$i<%lO$W~$lP;=`<%l$W~$rP#o#p$u~$zO!u~~$}Pvw%Q~%VO#W~~%YPwx%]~%bO#a~~%gOf~~%lOg~~%qO!}~~%vW#P~{|&`}!O&}!O!P&}!P!Q'j!Q![&}!c!}&}#R#S&}#T#o&}~&eW!|~{|&}}!O&}!O!P&}!P!Q'j!Q![&}!c!}&}#R#S&}#T#o&}T'QW{|&}}!O&}!O!P&}!P!Q'j!Q![&}!c!}&}#R#S&}#T#o&}T'mV{|(S}!O(S!O!P(S!Q![(S!c!}(S#R#S(S#T#o(ST(XWzT{|(S}!O(S!O!P(S!P!Q(q!Q![(S!c!}(S#R#S(S#T#o(ST(vVzT{|(S}!O(S!O!P(S!Q![(S!c!}(S#R#S(S#T#o(S~)bO!o~~)gX#Q~{|&}}!O&}!O!P&}!P!Q'j!Q![&}!`!a*S!c!}&}#R#S&}#T#o&}~*XO#Y~~*^W!vT{|&}}!O&}!O!P*v!P!Q'j!Q![,Q!c!}&}#R#S&}#T#o&}V*yW{|&}}!O&}!O!P+c!P!Q'j!Q![&}!c!}&}#R#S&}#T#o&}V+hWXQ{|&}}!O&}!O!P&}!P!Q'j!Q![&}!c!}&}#R#S&}#T#o&}~,V[v~{|&}}!O&}!O!P&}!P!Q'j!Q![,Q!c!g&}!g!h,{!h!}&}#R#S&}#T#X&}#X#Y,{#Y#o&}~-OW{|-h}!O-h!O!P&}!P!Q'j!Q![.T!c!}&}#R#S&}#T#o&}~-kW{|&}}!O&}!O!P&}!P!Q'j!Q![.T!c!}&}#R#S&}#T#o&}~.YWv~{|&}}!O&}!O!P&}!P!Q'j!Q![.T!c!}&}#R#S&}#T#o&}~.wX#O~z{/d{|(S}!O(S!O!P(S!P!Q0g!Q![(S!c!}(S#R#S(S#T#o(S~/iTQ~Oz/dz{/x{;'S/d;'S;=`0a<%lO/d~/{TO!P/d!P!Q0[!Q;'S/d;'S;=`0a<%lO/d~0aOQ~~0dP;=`<%l/d~0lO#R~~0qWu~{|&}}!O&}!O!P1Z!P!Q'j!Q![1v!c!}&}#R#S&}#T#o&}~1^W{|&}}!O&}!O!P&}!P!Q'j!Q![,Q!c!}&}#R#S&}#T#o&}~1{Wu~{|&}}!O&}!O!P&}!P!Q'j!Q![1v!c!}&}#R#S&}#T#o&}~2jWu~{|&}}!O&}!O!P,Q!P!Q'j!Q![2e!c!}&}#R#S&}#T#o&}~3XO!l~~3^O!q~~3cWn~{|3{}!O3{!O!P3{!Q![3{!_!`5Y!c!}3{#R#S3{#T#o3{~4OX{|3{}!O3{!O!P3{!P!Q4k!Q![3{!`!a5T!c!}3{#R#S3{#T#o3{~4nV{|3{}!O3{!O!P3{!Q![3{!c!}3{#R#S3{#T#o3{~5YO|~~5_O#S~V5dP!wP!_!`5gU5lO#UU~5qPo~!_!`5t~5yO#T~~6OO!n~~6TO!p~~6YYT~wx6x{|7a}!O6T!O!P7a!P!Q'j!Q![6T![!]8P!c!}6T#R#S:u#T#o6T~6}UT~wx6x}!O6x!Q![6x!c!}6x#R#S6x#T#o6x~7dX{|7a}!O7a!O!P7a!P!Q'j!Q![7a![!]8P!c!}7a#R#S&}#T#o7a~8Sdqr9btu9buv9bvw9bwx9bz{9b{|9b|}9b}!O9b!O!P9b!P!Q9b!Q![9b![!]9b!_!`9b!a!b9b!b!c9b!c!}9b#R#S9b#T#o9b#r#s9b~9gd}~qr9btu9buv9bvw9bwx9bz{9b{|9b|}9b}!O9b!O!P9b!P!Q9b!Q![9b![!]9b!_!`9b!a!b9b!b!c9b!c!}9b#R#S9b#T#o9b#r#s9b~:zXT~wx6x{|&}}!O:u!O!P&}!P!Q'j!Q![:u!c!}:u#R#S:u#T#o:u~;lO!U~~;qO!T~~;vOU~~;yP#p#q;|~<RO#X~~<WOV~~<ZP!P!Q<^~<aV{|<v}!O<v!O!P<v!Q![<v!c!}<v#R#S<v#T#o<v~<{W{~{|<v}!O<v!O!P<v!P!Q=e!Q![<v!c!}<v#R#S<v#T#o<v~=jV{~{|<v}!O<v!O!P<v!Q![<v!c!}<v#R#S<v#T#o<v\",\n  tokenizers: [scanString, scanIndString, 0, 1, 2],\n  topRules: {\"Program\":[0,3]},\n  specialized: [{term: 5, get: value => spec_Identifier[value] || -1}],\n  tokenPrec: 2290\n});\n\nconst parser = parser$1;\nconst nixLanguage = /*@__PURE__*/LRLanguage.define({\n    name: 'Nix',\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                Parenthesized: /*@__PURE__*/delimitedIndent({ closing: \")\" }),\n                AttrSet: /*@__PURE__*/delimitedIndent({ closing: \"}\" }),\n                List: /*@__PURE__*/delimitedIndent({ closing: \"]\" }),\n                Let: /*@__PURE__*/continuedIndent({ except: /^\\s*in\\b/ }),\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                AttrSet: foldInside,\n                List: foldInside,\n                Let(node) {\n                    let first = node.getChild(\"let\"), last = node.getChild(\"in\");\n                    if (!first || !last)\n                        return null;\n                    return { from: first.to, to: last.from };\n                },\n            }),\n            /*@__PURE__*/styleTags({\n                Identifier: tags.propertyName,\n                Boolean: tags.bool,\n                String: tags.string,\n                IndentedString: tags.string,\n                LineComment: tags.lineComment,\n                BlockComment: tags.blockComment,\n                Float: tags.float,\n                Integer: tags.integer,\n                Null: tags.null,\n                URI: tags.url,\n                SPath: tags.literal,\n                Path: tags.literal,\n                \"( )\": tags.paren,\n                \"{ }\": tags.brace,\n                \"[ ]\": tags.squareBracket,\n                \"if then else\": tags.controlKeyword,\n                \"import with let in rec builtins inherit assert or\": tags.keyword,\n            }),\n        ],\n    }),\n    languageData: {\n        commentTokens: { line: \"#\", block: { open: \"/*\", close: \"*/\" } },\n        closeBrackets: { brackets: [\"(\", \"[\", \"{\", \"''\", '\"'] },\n        indentOnInput: /^\\s*(in|\\}|\\)|\\])$/,\n    },\n});\nconst snippets = [\n    /*@__PURE__*/snippetCompletion(\"let ${binds} in ${expression}\", {\n        label: \"let\",\n        detail: \"Let ... in statement\",\n        type: \"keyword\",\n    }),\n    /*@__PURE__*/snippetCompletion(\"with ${expression}; ${expression}\", {\n        label: \"with\",\n        detail: \"With statement\",\n        type: \"keyword\",\n    }),\n];\nfunction nix() {\n    return new LanguageSupport(nixLanguage, nixLanguage.data.of({\n        autocomplete: ifNotIn([\"LineComment\", \"BlockComment\", \"String\", \"IndentedString\"], completeFromList(snippets)),\n    }));\n}\n\nexport { nix, nixLanguage, parser };\n","import { ContextTracker, ExternalTokenizer, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { LRLanguage, indentNodeProp, foldNodeProp, syntaxTree, LanguageSupport } from '@codemirror/language';\nimport { cssLanguage, css } from '@codemirror/lang-css';\nimport { typescriptLanguage, javascriptLanguage, javascript } from '@codemirror/lang-javascript';\nimport { parseMixed } from '@lezer/common';\nimport { parser as parser$1 } from '@lezer/javascript';\nimport { htmlCompletionSource } from '@codemirror/lang-html';\nimport { EditorView } from '@codemirror/view';\nimport { EditorSelection } from '@codemirror/state';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst scriptText = 145,\n  StartCloseScriptTag = 1,\n  styleText = 146,\n  StartCloseStyleTag = 2,\n  textareaText = 147,\n  StartCloseTextareaTag = 3,\n  StartTag = 4,\n  StartScriptTag = 5,\n  StartStyleTag = 6,\n  StartTextareaTag = 7,\n  StartSelfClosingTag = 8,\n  StartCloseTag = 9,\n  MismatchedStartCloseTag = 11,\n  missingCloseTag = 148,\n  IncompleteCloseTag = 12,\n  commentContent$1 = 149,\n  LongExpression = 13,\n  ShortExpression = 14,\n  Element = 67,\n  ScriptText = 110,\n  StyleText = 113,\n  TextareaText = 116,\n  OpenTag = 118;\n\nconst selfClosers = {\n  area: true,\n  base: true,\n  br: true,\n  col: true,\n  command: true,\n  embed: true,\n  frame: true,\n  hr: true,\n  img: true,\n  input: true,\n  keygen: true,\n  link: true,\n  meta: true,\n  param: true,\n  source: true,\n  track: true,\n  wbr: true,\n  menuitem: true\n};\n\nconst implicitlyClosed = {\n  dd: true,\n  li: true,\n  optgroup: true,\n  option: true,\n  p: true,\n  rp: true,\n  rt: true,\n  tbody: true,\n  td: true,\n  tfoot: true,\n  th: true,\n  tr: true\n};\n\nconst closeOnOpen = {\n  dd: { dd: true, dt: true },\n  dt: { dd: true, dt: true },\n  li: { li: true },\n  option: { option: true, optgroup: true },\n  optgroup: { optgroup: true },\n  p: {\n    address: true,\n    article: true,\n    aside: true,\n    blockquote: true,\n    dir: true,\n    div: true,\n    dl: true,\n    fieldset: true,\n    footer: true,\n    form: true,\n    h1: true,\n    h2: true,\n    h3: true,\n    h4: true,\n    h5: true,\n    h6: true,\n    header: true,\n    hgroup: true,\n    hr: true,\n    menu: true,\n    nav: true,\n    ol: true,\n    p: true,\n    pre: true,\n    section: true,\n    table: true,\n    ul: true\n  },\n  rp: { rp: true, rt: true },\n  rt: { rp: true, rt: true },\n  tbody: { tbody: true, tfoot: true },\n  td: { td: true, th: true },\n  tfoot: { tbody: true },\n  th: { td: true, th: true },\n  thead: { tbody: true, tfoot: true },\n  tr: { tr: true }\n};\n\nfunction nameChar(ch) {\n  return (\n    ch == 45 ||\n    ch == 46 ||\n    ch == 58 ||\n    (ch >= 65 && ch <= 90) ||\n    ch == 95 ||\n    (ch >= 97 && ch <= 122) ||\n    ch >= 161\n  )\n}\n\nfunction isSpace(ch) {\n  return ch == 9 || ch == 10 || ch == 13 || ch == 32\n}\n\nlet cachedName = null,\n  cachedInput = null,\n  cachedPos = 0;\nfunction tagNameAfter(input, offset) {\n  let pos = input.pos + offset;\n  if (cachedPos == pos && cachedInput == input) return cachedName\n  let next = input.peek(offset);\n  while (isSpace(next)) next = input.peek(++offset);\n  let name = \"\";\n  for (;;) {\n    if (!nameChar(next)) break\n    name += String.fromCharCode(next);\n    next = input.peek(++offset);\n  }\n  // Undefined to signal there's a <? or <!, null for just missing\n  cachedInput = input;\n  cachedPos = pos;\n  return (cachedName = name\n    ? name.toLowerCase()\n    : next == question || next == bang\n    ? undefined\n    : null)\n}\n\nconst lessThan = 60,\n  greaterThan$1 = 62,\n  slash$1 = 47,\n  question = 63,\n  bang = 33;\n\nfunction ElementContext(name, parent) {\n  this.name = name;\n  this.parent = parent;\n  this.hash = parent ? parent.hash : 0;\n  for (let i = 0; i < name.length; i++)\n    this.hash += (this.hash << 4) + name.charCodeAt(i) + (name.charCodeAt(i) << 8);\n}\n\nconst startTagTerms = [\n  StartTag,\n  StartSelfClosingTag,\n  StartScriptTag,\n  StartStyleTag,\n  StartTextareaTag\n];\n\nconst elementContext = /*@__PURE__*/new ContextTracker({\n  start: null,\n  shift(context, term, stack, input) {\n    return startTagTerms.indexOf(term) > -1\n      ? new ElementContext(tagNameAfter(input, 1) || \"\", context)\n      : context\n  },\n  reduce(context, term) {\n    return term == Element && context ? context.parent : context\n  },\n  reuse(context, node, stack, input) {\n    let type = node.type.id;\n    return type == StartTag || type == OpenTag\n      ? new ElementContext(tagNameAfter(input, 1) || \"\", context)\n      : context\n  },\n  hash(context) {\n    return context ? context.hash : 0\n  },\n  strict: false\n});\n\nconst tagStart = /*@__PURE__*/new ExternalTokenizer(\n  (input, stack) => {\n    if (input.next != lessThan) {\n      // End of file, close any open tags\n      if (input.next < 0 && stack.context) input.acceptToken(missingCloseTag);\n      return\n    }\n    input.advance();\n    let close = input.next == slash$1;\n    if (close) input.advance();\n    let name = tagNameAfter(input, 0);\n    if (name === undefined) return\n    if (!name) return input.acceptToken(close ? IncompleteCloseTag : StartTag)\n\n    let parent = stack.context ? stack.context.name : null;\n    if (close) {\n      if (name == parent) return input.acceptToken(StartCloseTag)\n      if (parent && implicitlyClosed[parent])\n        return input.acceptToken(missingCloseTag, -2)\n      // if (stack.dialectEnabled(Dialect_noMatch)) return input.acceptToken(NoMatchStartCloseTag)\n      for (let cx = stack.context; cx; cx = cx.parent) if (cx.name == name) return\n      input.acceptToken(MismatchedStartCloseTag);\n    } else {\n      if (name == \"script\") return input.acceptToken(StartScriptTag)\n      if (name == \"style\") return input.acceptToken(StartStyleTag)\n      if (name == \"textarea\") return input.acceptToken(StartTextareaTag)\n      if (selfClosers.hasOwnProperty(name)) return input.acceptToken(StartSelfClosingTag)\n      if (parent && closeOnOpen[parent] && closeOnOpen[parent][name])\n        input.acceptToken(missingCloseTag, -1);\n      else input.acceptToken(StartTag);\n    }\n  },\n  { contextual: true }\n);\n\nfunction contentTokenizer(tag, textToken, endToken) {\n  let lastState = 2 + tag.length;\n  return new ExternalTokenizer(input => {\n    // state means:\n    // - 0 nothing matched\n    // - 1 '<' matched\n    // - 2 '</' + possibly whitespace matched\n    // - 3-(1+tag.length) part of the tag matched\n    // - lastState whole tag + possibly whitespace matched\n    for (let state = 0, matchedLen = 0, i = 0; ; i++) {\n      if (input.next < 0) {\n        if (i) input.acceptToken(textToken);\n        break\n      }\n      if (\n        (state == 0 && input.next == lessThan) ||\n        (state == 1 && input.next == slash$1) ||\n        (state >= 2 && state < lastState && input.next == tag.charCodeAt(state - 2))\n      ) {\n        state++;\n        matchedLen++;\n      } else if ((state == 2 || state == lastState) && isSpace(input.next)) {\n        matchedLen++;\n      } else if (state == lastState && input.next == greaterThan$1) {\n        if (i > matchedLen) input.acceptToken(textToken, -matchedLen);\n        else input.acceptToken(endToken, -(matchedLen - 2));\n        break\n      } else if ((input.next == 10 /* '\\n' */ || input.next == 13) /* '\\r' */ && i) {\n        input.acceptToken(textToken, 1);\n        break\n      } else {\n        state = matchedLen = 0;\n      }\n      input.advance();\n    }\n  })\n}\n\nconst scriptTokens = /*@__PURE__*/contentTokenizer(\"script\", scriptText, StartCloseScriptTag);\n\nconst styleTokens = /*@__PURE__*/contentTokenizer(\"style\", styleText, StartCloseStyleTag);\n\nconst textareaTokens = /*@__PURE__*/contentTokenizer(\n  \"textarea\",\n  textareaText,\n  StartCloseTextareaTag\n);\n\nconst space = [\n    9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199,\n    8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288\n];\nconst parenOpen = 40;\nconst parenClose = 41;\nconst squareOpen = 91;\nconst squareClose = 93;\nconst curlyOpen = 123;\nconst curlyClose = 125;\nconst comma = 44;\nconst colon = 58;\nconst hash = 35;\nconst at = 64;\nconst slash = 47;\nconst greaterThan = 62;\nconst dash = 45;\nconst quoteDouble = 34;\nconst quoteSingle = 39;\nconst backslash = 92;\nconst newline = 10;\nconst asterisk = 42;\nconst tick = 96;\nconst prefixes = [colon, hash, at, slash];\nconst commentContent = /*@__PURE__*/new ExternalTokenizer(input => {\n    for (let dashes = 0, i = 0;; i++) {\n        if (input.next < 0) {\n            if (i)\n                input.acceptToken(commentContent$1);\n            break;\n        }\n        if (input.next == dash) {\n            dashes++;\n        }\n        else if (input.next == greaterThan && dashes >= 2) {\n            if (i > 3)\n                input.acceptToken(commentContent$1, -2);\n            break;\n        }\n        else {\n            dashes = 0;\n        }\n        input.advance();\n    }\n});\n// TODO: string handler does not handle interpolation\nfunction createStringHandler(input) {\n    let inString = false;\n    let inStringType = null;\n    let inStringIgnoreNext = false;\n    return () => {\n        if (inString) {\n            if (inStringIgnoreNext) {\n                inStringIgnoreNext = false;\n                return true;\n            }\n            if (input.next === backslash) {\n                inStringIgnoreNext = true;\n                return true;\n            }\n            if (inStringType === \"double\" && input.next === quoteDouble) {\n                inString = false;\n                inStringType = null;\n                return true;\n            }\n            if (inStringType === \"single\" && input.next === quoteSingle) {\n                inString = false;\n                inStringType = null;\n                return true;\n            }\n            if (inStringType === \"template\" && input.next === tick) {\n                inString = false;\n                inStringType = null;\n                return true;\n            }\n            return true;\n        }\n        if (input.next === quoteDouble) {\n            inString = true;\n            inStringType = \"double\";\n            return true;\n        }\n        if (input.next === quoteSingle) {\n            inString = true;\n            inStringType = \"single\";\n            return true;\n        }\n        if (input.next === tick) {\n            inString = true;\n            inStringType = \"template\";\n            return true;\n        }\n        return false;\n    };\n}\nfunction createCommentHandler(input) {\n    let inLineComment = false;\n    let inBlockComment = false;\n    return () => {\n        if (inLineComment) {\n            if (input.next === newline) {\n                inLineComment = false;\n                return true;\n            }\n            return true;\n        }\n        if (inBlockComment) {\n            if (input.next === asterisk && input.peek(1) === slash) {\n                inBlockComment = false;\n                return true;\n            }\n            return true;\n        }\n        if (input.next === slash && input.peek(1) === slash) {\n            inLineComment = true;\n            return true;\n        }\n        if (input.next === slash && input.peek(1) === asterisk) {\n            inBlockComment = true;\n            return true;\n        }\n        return false;\n    };\n}\n// closes on a delimiter that probably isn't in the expression\nconst longExpression = /*@__PURE__*/new ExternalTokenizer(input => {\n    if (prefixes.includes(input.next)) {\n        return;\n    }\n    const commentHandler = createCommentHandler(input);\n    const stringHandler = createStringHandler(input);\n    let stack = [];\n    const popIfMatch = (match) => {\n        const idx = stack.lastIndexOf(match);\n        if (idx !== -1) {\n            while (stack.length > idx) {\n                stack.pop();\n            }\n        }\n    };\n    for (let pos = 0;; pos++) {\n        // end of input\n        if (input.next < 0) {\n            if (pos > 0)\n                input.acceptToken(LongExpression);\n            break;\n        }\n        if (commentHandler() || stringHandler()) {\n            input.advance();\n            continue;\n        }\n        if (stack.length === 0 &&\n            (input.next === curlyClose ||\n                input.next === parenClose ||\n                input.next === squareClose)) {\n            input.acceptToken(LongExpression);\n            break;\n        }\n        // prettier-ignore\n        switch (input.next) {\n            case parenOpen:\n                stack.push(\"(\");\n                break;\n            case parenClose:\n                popIfMatch(\"(\");\n                break;\n            case squareOpen:\n                stack.push(\"[\");\n                break;\n            case squareClose:\n                popIfMatch(\"[\");\n                break;\n            case curlyOpen:\n                stack.push(\"{\");\n                break;\n            case curlyClose:\n                popIfMatch(\"{\");\n                break;\n        }\n        input.advance();\n    }\n});\n// same as long expression but will close on either a space or comma\n// that is reasonably not inside of the expression\nconst shortExpression = /*@__PURE__*/new ExternalTokenizer(input => {\n    if (prefixes.includes(input.peek(0))) {\n        return;\n    }\n    const commentHandler = createCommentHandler(input);\n    const stringHandler = createStringHandler(input);\n    let stack = [];\n    const popIfMatch = (match) => {\n        const idx = stack.lastIndexOf(match);\n        if (idx !== -1) {\n            while (stack.length > idx) {\n                stack.pop();\n            }\n        }\n    };\n    for (let pos = 0;; pos++) {\n        // end of input\n        if (input.next < 0) {\n            if (pos > 0)\n                input.acceptToken(ShortExpression);\n            break;\n        }\n        if (commentHandler() || stringHandler()) {\n            input.advance();\n            continue;\n        }\n        if (stack.length === 0 &&\n            (input.next === curlyClose ||\n                input.next === parenClose ||\n                input.next === squareClose ||\n                input.next === comma)) {\n            input.acceptToken(ShortExpression);\n            break;\n        }\n        // prettier-ignore\n        switch (input.next) {\n            case parenOpen:\n                stack.push(\"(\");\n                break;\n            case parenClose:\n                popIfMatch(\"(\");\n                break;\n            case squareOpen:\n                stack.push(\"[\");\n                break;\n            case squareClose:\n                popIfMatch(\"[\");\n                break;\n            case curlyOpen:\n                stack.push(\"{\");\n                break;\n            case curlyClose:\n                popIfMatch(\"{\");\n                break;\n        }\n        if (pos !== 0 && stack.length === 0 && space.includes(input.next)) {\n            input.acceptToken(ShortExpression);\n            break;\n        }\n        input.advance();\n    }\n});\n\nconst svelteHighlighting = /*@__PURE__*/styleTags({\n    \"Text RawText\": tags.content,\n    \"StartTag StartCloseTag SelfClosingEndTag EndTag\": tags.angleBracket,\n    \"TagName\": tags.tagName,\n    \"MismatchedCloseTag/TagName\": [tags.tagName, tags.invalid],\n    \"AttributeName\": tags.attributeName,\n    \"UnquotedAttributeValue\": tags.attributeValue,\n    \"DoubleQuote SingleQuote AttributeValueContent\": tags.attributeValue,\n    \"Is\": tags.definitionOperator,\n    \"EntityReference CharacterReference\": tags.character,\n    \"Comment\": tags.blockComment,\n    \"ProcessingInst\": tags.processingInstruction,\n    \"DoctypeDecl\": tags.documentMeta,\n    \"{ }\": tags.bracket,\n    \"[ ]\": tags.squareBracket,\n    \"( )\": tags.paren,\n    \"| , :\": tags.punctuation,\n    \"...\": tags.derefOperator,\n    \"ComponentName\": tags.className,\n    \"SvelteElementNamespace\": tags.namespace,\n    \"SvelteElementType\": tags.tagName,\n    \"StyleAttributeName\": tags.propertyName,\n    \"BlockType\": tags.controlKeyword,\n    \"BlockPrefix\": tags.typeOperator,\n    \"UnknownBlock/BlockType\": tags.invalid,\n    \"UnknownBlockContent\": tags.invalid,\n    \"if then catch\": tags.controlKeyword,\n    \"as\": tags.definitionOperator,\n    \"Variable\": tags.variableName,\n    \"Modifier\": tags.modifier,\n    \"DirectlyInterpolatedAttributeValue\": tags.attributeValue,\n    \"DirectiveOn/DirectiveName\": tags.controlKeyword,\n    \"DirectiveOn/DirectiveTarget\": tags.typeName,\n    \"DirectiveUse/DirectiveName\": tags.controlKeyword,\n    \"DirectiveUse/DirectiveTarget\": /*@__PURE__*/tags.function(tags.variableName),\n    \"DirectiveBind/DirectiveName\": tags.controlKeyword,\n    \"DirectiveBind/DirectiveTarget\": tags.variableName,\n    \"DirectiveLet/DirectiveName\": tags.definitionKeyword,\n    \"DirectiveLet/DirectiveTarget\": /*@__PURE__*/tags.definition(tags.variableName),\n    \"DirectiveTransition/DirectiveName\": tags.operatorKeyword,\n    \"DirectiveTransition/DirectiveTarget\": /*@__PURE__*/tags.function(tags.variableName),\n    \"DirectiveIn/DirectiveName\": tags.operatorKeyword,\n    \"DirectiveIn/DirectiveTarget\": /*@__PURE__*/tags.function(tags.variableName),\n    \"DirectiveOut/DirectiveName\": tags.operatorKeyword,\n    \"DirectiveOut/DirectiveTarget\": /*@__PURE__*/tags.function(tags.variableName),\n    \"DirectiveAnimate/DirectiveName\": tags.operatorKeyword,\n    \"DirectiveAnimate/DirectiveTarget\": /*@__PURE__*/tags.function(tags.variableName),\n    \"DirectiveClass/DirectiveName\": tags.attributeName,\n    \"DirectiveClass/DirectiveTarget\": tags.variableName,\n    \"DirectiveStyle/DirectiveName\": tags.attributeName,\n    \"DirectiveStyle/DirectiveTarget\": tags.propertyName\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_BlockPrefix = {__proto__:null,\"#\":41, \":\":51, \"/\":59, \"@\":109};\nconst spec_BlockType = {__proto__:null,if:44, else:52, each:64, await:82, then:90, catch:94, key:102, html:110, debug:114, const:118};\nconst spec_identifier = {__proto__:null,if:54, as:66, then:84, catch:86};\nconst spec_AttributeName = {__proto__:null,on:313, bind:317, let:319, class:321, style:323, use:325, transition:327, in:329, out:331, animate:333};\nconst spec_TagName = {__proto__:null,svelte:243};\nconst parser = /*@__PURE__*/LRParser.deserialize({\n  version: 14,\n  states: \"DxQVO#|OOO!ZO#|O'#ClO#[O#|O'#CzO$]O#|O'#DTO%^O#|O'#D_O&_Q'[O'#DjO&mQ&jO'#DrO&rQ&jO'#EpO&wQ&jO'#EsO&|Q&jO'#EvO'XQ&jO'#E|O'^OXO'#DqO'iOYO'#DqO'tO[O'#DqO)TO#|O'#DqOOOW'#Dq'#DqO)[O&zO'#FOO&|Q&jO'#FQO&|Q&jO'#FROOOW'#Fj'#FjOOOW'#FT'#FTQVO#|OOOOOW'#FU'#FUO!ZO#|O,59WOOOW,59W,59WO)uQ'[O'#DjO#[O#|O,59fOOOW,59f,59fO)|Q'[O'#DjOOOW'#FV'#FVO$]O#|O,59oOOOW,59o,59oO*fQ'[O'#DjOOOW'#FW'#FWO%^O#|O,59yOOOW,59y,59yO*mQ'[O'#DjO+OQ&jO,5:UO+TQ,UO,5:VO+YQ,UO,59XO+hQ,UO,59}O,nQ7[O,5:^O,uQ7[O,5;[O,|Q7[O,5;_O-TO,UO'#ExOOQO'#F|'#F|O-YQ7[O,5;bO-dQ7[O,5;hOOOX'#F^'#F^O-kOXO'#EnO-vOXO,5:]OOOY'#F_'#F_O.OOYO'#EqO.ZOYO,5:]OOO['#F`'#F`O.cO[O'#EtO.nO[O,5:]O.vO#|O,5:]O&|Q&jO'#E{OOOW,5:],5:]OOO`'#Fa'#FaO.}O&zO,5;jOOOW,5;j,5;jO/VQ,UO,5;lO/[Q,UO,5;mOOOW-E9R-E9ROOOW-E9S-E9SOOOW1G.r1G.rO/aQ,UO,59`O/fQ,UO,59dOOOW1G/Q1G/QO/kQ,UO,59nOOOW-E9T-E9TOOOW1G/Z1G/ZO/pQ,UO,59tO/xQ,UO,59xOOOW-E9U-E9UOOOW1G/e1G/eO/}Q,UO,59|OOOW1G/p1G/pO0SQMhO1G/qO0[Q'[O1G.sO0aQ'|O1G/RO0fQ'|O1G/[O0kQ'[O1G/fO0pQ'[O1G/iO0uQ!LQO1G/lO0zQ'[O1G/nO1PQ$ISO'#DtOOOO'#Dz'#DzO1[O,UO'#DyOOOO'#EO'#EOO1aO,UO'#D}OOOO'#EQ'#EQO1fO,UO'#EPOOOO'#ES'#ESO1kO,UO'#EROOOO'#EU'#EUO1pO,UO'#ETOOOO'#EW'#EWO1uO,UO'#EVOOOO'#EY'#EYO1zO,UO'#EXOOOO'#E['#E[O2PO,UO'#EZOOOO'#E^'#E^O2UO,UO'#E]OOOO'#E`'#E`O2ZO,UO'#E_O2`Q7[O'#DxO3gQ7[O'#EjO4kQ7[O'#ElOOQO'#Fl'#FlOOQO'#FY'#FYO5rQ7[O1G/xOOOX1G/x1G/xOOQO'#Fm'#FmO5yQ7[O1G0vOOOY1G0v1G0vO6QQ7[O1G0yOOO[1G0y1G0yO6XO(CWO,5;dO6^Q7[O1G0|OOOW1G0|1G0|OOOW1G1S1G1SO6hQ7[O1G1SOOOX-E9[-E9[O6oQ&jO'#EoOOOW1G/w1G/wOOOY-E9]-E9]O6tQ&jO'#ErOOO[-E9^-E9^O6yQ&jO'#EuO7OQ,UO,5;gOOO`-E9_-E9_OOOW1G1U1G1UOOOW1G1W1G1WOOOW1G1X1G1XP)dQ'[O'#DjO7TQ$ISO1G.zO7]Q&jO1G/OO7bQ&jO1G/YP*TQ'[O'#DjO7gQ!LQO1G/`O7oQ!LQO1G/bO7wQ&jO1G/dO7|Q&jO1G/hOOOW7+%]7+%]O8RQ&jO7+%]O8WQ&jO7+$_O8]Q$ISO7+$mO8bQ$ISO7+$vO8mQ&jO7+%QO8rQ&jO7+%TO8wQ&jO7+%WO9PQ&jO7+%YOOQO'#Du'#DuOOQO,5:`,5:`O9UQ&jO,5:`O9ZQ'[O,5:bO9`O07`O,5:eO9eO07`O,5:iO9jO07`O,5:kO9oO07`O,5:mO9tO07`O,5:oO9yO07`O,5:qO:OO07`O,5:sO:TO07`O,5:uO:YO07`O,5:wO:_O07`O,5:yO:dQ?MpO'#FZO:iQ7[O,5:dO;pQ!0LbO,5:dO<OQ!0LbO,5;UO<^Q7[O,5;WO=eQ!0LbO,5;WOOQO-E9W-E9WOOOX7+%d7+%dOOOY7+&b7+&bOOO[7+&e7+&eOOQO1G1O1G1OOOOW7+&h7+&hOOOW7+&n7+&nO=sQ,UO,5;ZO=xQ,UO,5;^O=}Q,UO,5;aOOOW1G1R1G1ROOOW7+$f7+$fO>SQ'[O7+$fOOOW7+$j7+$jOOOW7+$t7+$tOOOW7+$z7+$zO>XQ&jO7+$zOOOW7+$|7+$|O>^Q&jO7+$|OOOW7+%O7+%OOOOW7+%S7+%SOOOW<<Hw<<HwOOOW<<Gy<<GyO>cQ'|O<<HXOOOW<<Hb<<HbO>hQ'|O<<HbOOOW<<Hl<<HlOOOW<<Ho<<HoO>mQ!LQO'#FXO>rQ&jO<<HrOOOW<<Hr<<HrOOOW<<Ht<<HtOOQO1G/z1G/zO>zQ&jO1G/|OOQO1G0P1G0POOQO1G0T1G0TOOQO1G0V1G0VOOQO1G0X1G0XOOQO1G0Z1G0ZOOQO1G0]1G0]OOQO1G0_1G0_OOQO1G0a1G0aOOQO1G0c1G0cOOQO1G0e1G0eOOQO,5;u,5;uOOQO-E9X-E9XO?PQ!0LbO1G0OO?_Q'[O'#DjOOQO'#Ed'#EdO?uO#@ItO'#EdO@_O&2DjO'#EdOOQO1G0O1G0OOOQO1G0p1G0pO@fQ!0LbO1G0rOOQO1G0r1G0rOOOW1G0u1G0uOOOW1G0x1G0xOOOW1G0{1G0{O@tQ&jO<<HQOOOW<<Hf<<HfOOOW<<Hh<<HhO@yQ&jOAN=sOAUQ&jOAN=|OOQO,5;s,5;sOOQO-E9V-E9VOOOWAN>^AN>^OOQO7+%h7+%hOOQO7+%j7+%jOOOO'#Fz'#FzOOOO'#F['#F[OAZO#@ItO'#EfOOQO,5;O,5;OOAbO&jO,5;OOOOO'#F]'#F]OAgO&2DjO'#EhOAnO&jO,5;OOOQO7+&^7+&^OOOWAN=lAN=lOOOWG23_G23_OAsQ'[OG23_OAxQ!LQOG23_OOOWG23hG23hOOOO-E9Y-E9YOOQO1G0j1G0jOOOO-E9Z-E9ZOBTQ&jOLD(yOOOWLD(yLD(yOBYQ'[OLD(yOB_Q&jOLD(yOBgQ&jO!$'LeOBlQ&jO!$'LeOOOW!$'Le!$'LeOBqQ'[O!$'LeOOOW!)9BP!)9BPOBvQ&jO!)9BPOB{Q&jO!)9BPOOOW!.K7k!.K7kOCQQ&jO!.K7kOOOW!4/-V!4/-V\",\n  stateData: \"Cd~O$]OS~OSXOTUOUVOVWOWYOYbOZaO[cObTO!acO!bcO!ccO!dcO#scO#vdO$q`O~OSXOTUOUVOVWOWYOYbOZaO[cObiO!acO!bcO!ccO!dcO#scO$q`O~OSXOTUOUVOVWOWYOYbOZaO[cOblO!acO!bcO!ccO!dcO#scO$q`O~OSXOTUOUVOVWOWYOYbOZaO[cObpO!acO!bcO!ccO!dcO#scO$q`O~OSXOTUOUVOVWOWYOYbOZaO[cObtO!acO!bcO!ccO!dcO#scO$q`O~O]uOcvOdwO!WxO~O!gyO~O!gzO~O!g{O~O!g}O#k}O#m|O~O!g!PO~O$V!QOP#bP$Y#bP~O$W!TOQ#eP$Y#eP~O$X!WOR#hP$Y#hP~OSXOTUOUVOVWOWYOX![OYbOZaO[cObTO!acO!bcO!ccO!dcO#scO$q`O~O$Y!]O~P(PO$Z!^O$r!`O~O]uOcvOdwOi!fO!WxO~Om!gO~P)dOm!iO~P)dO]uOcvOdwOi!lO!WxO~Om!mO~P*TO]uOcvOdwOm!pO!WxO~Og!qO~Oe!rO~Of!sOp!tOy!uO!T!vO~O!X!wO!Z!xO!]!yO~Ob!zO!o#cO#_#bO$b!{O$d!}O$e#PO$f#RO$g#TO$h#VO$i#XO$j#ZO$k#]O$l#_O~O#a#gO~P+sO#a#jO~P+sO#a#lO~P+sO$c#mO~O#a#oO#q#pO~P+sO#a#pO~P+sO$V!QOP#bX$Y#bX~OP#sO$Y#tO~O$W!TOQ#eX$Y#eX~OQ#vO$Y#tO~O$X!WOR#hX$Y#hX~OR#xO$Y#tO~O$Y#tO~P(PO$Z!^O$r#{O~O#a#|O~O#a#}O~Oj$PO~Of$QO~Op$RO~O}$TO!P$UO~Oy$VO~O!T$WO~Og$XO!`$YO~O]$ZO~O^$[O~O^$]O~O]$^O~O]$_O~Ou$`O~O]$aO~Og$cO!k$eO$_$bO~O$c$fO~O$c$gO~O$c$hO~O$c$iO~O$c$jO~O$c$kO~O$c$lO~O$c$mO~O$c$nO~O$c$oO~O#T$pO#V$rOb!lX!o!lX#_!lX#a!lX$b!lX$d!lX$e!lX$f!lX$g!lX$h!lX$i!lX$j!lX$k!lX$l!lX#q!lX~O#V$sOb#^X!o#^X#_#^X#a#^X$b#^X$d#^X$e#^X$f#^X$g#^X$h#^X$i#^X$j#^X$k#^X$l#^X#q#^X~O#T$pO#V$uOb#`X!o#`X#_#`X#a#`X$b#`X$d#`X$e#`X$f#`X$g#`X$h#`X$i#`X$j#`X$k#`X$l#`X#q#`X~O#a$wO~P+sO#a$xO~P+sO#a$yO~P+sO#n$zO~O#a${O#q$|O~P+sO#a$|O~P+sO!g$}O~O!g%OO~O!g%PO~O#a%QO~Og%ROk%SO~Og%TO~Og%UO~Og%VOu%WO~Og%XOu%YO~Og%ZO~Og%[O~Og%]O~Og%^O~Oq%_O~Og%`Oz%aO{%aO~Og%bO~Og%cO~Og%fOt%dO~Og%gO~Og%hO~O]%iO~O!p%jO~O!p%kO~O!p%lO~O!p%mO~O!p%nO~O!p%oO~O!p%pO~O!p%qO~O!p%rO~O!p%sO~O#U%tO~O#T$pO#V%vOb!la!o!la#_!la#a!la$b!la$d!la$e!la$f!la$g!la$h!la$i!la$j!la$k!la$l!la#q!la~Ob%wO#X%yO#Z%zO#]%{O~Ob%wO#X%yO#Z%zO#]%|O~O#T$pO#V%}Ob#`a!o#`a#_#`a#a#`a$b#`a$d#`a$e#`a$f#`a$g#`a$h#`a$i#`a$j#`a$k#`a$l#`a#q#`a~Ob%wO#X%yO#Z%zO#]&OO~O#a&PO~O#a&QO~O#a&RO~O]&SO~Og&TO~Og&UO~O^&VO~O^&WO~Ou&XO~Og&ZOt%dO~Og&[O~Ob%wO#X%yO#Z%zO#]&]O~O]uO~Ob%wO!b&^O!c&^O!d&^O$m&_O~O#X&aO~P?dOb%wO!b&^O!c&^O!d&^O$o&cO~O#Z&aO~P?|Ob%wO#X%yO#Z%zO#]&fO~Og&gO~Og&hOr&iOt&jO~Og&kO~O#X#YX~P?dO#X&mO~O#Z#[X~P?|O#Z&mO~O]&oO~Og&pOr&qOu&rO~Os&sO~O]&tO~Og&uOr&vO~Og&wO~Os&xO~O]&yO~Og&zO~Os&{O~Og&|O~O!`$]#q$q#s#v!c!b#_!o!d#a~\",\n  goto: \"1T$qPPPPPPPPPPPPPPPP$r%QPPPPPP%`PPP%fP$r%lPPPPPP%z$r&QPPP&`P&`P&d$r&jP&x$rPP$rP$rP'O$rPPPPP$r'kP'y(V'yP'y(Y(fPP(Y(r(Y)O(Y)[(Y)h(Y)t(Y*Q(Y*^(Y*j(Y*vPPP+SP+cP+fP'yP'yP+i+l+o+},Q,T,c,f,iP,wPP,}-TP$rP$r$rP-c-i-s-y.T.Z.q.{/R/X/_/e/kPPPPPPPP/qP0V0cPPPPPPPPPPPP0oP0wicOPQRS^egjnr!ZiPOPQRS^egjnr!ZXfPQgjQhPR!egiQOPQRS^egjnr!ZQkQR!hjiROPQRS^egjnr!ZTmRnQoRR!kniSOPQRS^egjnr!ZQsSR!orhcOPQRS^egjnr!ZY%x$r$s$u%v%}X&^%y%z&`&diZOPQRS^egjnr!Ze#dyz{!O!P#f#i#k#n#qR$d!ze#hyz{!O!P#f#i#k#n#qe!|yz{!O!P#f#i#k#n#qe#Oyz{!O!P#f#i#k#n#qe#Qyz{!O!P#f#i#k#n#qe#Syz{!O!P#f#i#k#n#qe#Uyz{!O!P#f#i#k#n#qe#Wyz{!O!P#f#i#k#n#qe#Yyz{!O!P#f#i#k#n#qe#[yz{!O!P#f#i#k#n#qe#^yz{!O!P#f#i#k#n#qe#`yz{!O!P#f#i#k#n#qQ%{$rQ%|$sQ&O$uQ&]%vR&f%}R&b%yR&e%zR!SZR#t!Si[OPQRS^egjnr!ZR!V[R#t!Vi]OPQRS^egjnr!ZR!Y]R#t!Yi^OPQRS^egjnr!ZX}Xab![Q!]^R#t!Zi_OPQRS^egjnr!ZQeOR!ceQgPQjQT!dgjQnRR!jnQrSQ!Z^T!nr!ZQ%e$`R&Y%eQ#fyQ#izQ#k{Q#n!OQ#q!PZ$v#f#i#k#n#qQ$q#aQ$t#cT%u$q$tQ&`%yR&l&`Q&d%zR&n&dQ!RZR#r!RQ!U[R#u!UQ!X]R#w!XQ!_`R#z!_SdOeWfPQgjSmRnXqS^r!Ze#eyz{!O!P#f#i#k#n#qe#ayz{!O!P#f#i#k#n#qS&_%y&`T&c%z&dQ!OXQ!aaQ!bbR#y![\",\n  nodeNames: \"⚠ StartCloseTag StartCloseTag StartCloseTag StartTag StartTag StartTag StartTag StartTag StartCloseTag StartCloseTag StartCloseTag IncompleteCloseTag LongExpression ShortExpression Document IfBlock IfBlockOpen { BlockPrefix BlockPrefix BlockType BlockType } ElseBlock BlockPrefix BlockType if IfBlockClose BlockPrefix EachBlock EachBlockOpen BlockType as ( ) , Variable EachBlockClose AwaitBlock AwaitBlockOpen BlockType then catch ThenBlock BlockType CatchBlock BlockType AwaitBlockClose KeyBlock KeyBlockOpen BlockType KeyBlockClose RawHTMLBlock BlockPrefix BlockType DebugBlock BlockType ConstBlock BlockType Interpolation UnknownBlock UnknownBlockContent Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName DirectlyInterpolatedAttribute DirectlyInterpolatedAttributeValue SpreadInterpolatedAttribute ... Directive DirectiveOn DirectiveName AttributeName DirectiveTarget DirectiveBind DirectiveName DirectiveLet DirectiveName DirectiveClass DirectiveName DirectiveStyle DirectiveName DirectiveUse DirectiveName DirectiveTransition DirectiveName DirectiveIn DirectiveName DirectiveOut DirectiveName DirectiveAnimate DirectiveName | Modifier Is AttributeValue DoubleQuote AttributeValueContent SingleQuote AttributeValueContent UnquotedAttributeValue StyleAttribute StyleAttributeName Attribute EndTag ScriptText CloseTag OpenTag StyleText CloseTag OpenTag TextareaText CloseTag OpenTag ComponentName SvelteElementName SvelteElementNamespace SvelteElementType CloseTag SelfClosingTag SelfClosingEndTag Comment ProcessingInst MismatchedCloseTag CloseTag DoctypeDecl\",\n  maxTerm: 172,\n  context: elementContext,\n  nodeProps: [\n    [\"closedBy\", -10,1,2,3,5,6,7,8,9,10,11,\"EndTag\",4,\"EndTag SelfClosingEndTag\",17,\"IfBlockClose\",18,\"}\",31,\"EachBlockClose\",34,\"(\",40,\"AwaitBlockClose\",48,\"AwaitBlockOpen\",50,\"KeyBlockClose\",-4,68,112,115,118,\"CloseTag\",101,\"\\\"\",103,\"'\"],\n    [\"group\", -10,12,60,64,65,66,67,126,127,128,129,\"Entity\",-4,16,30,39,49,\"Block Entity\",-4,17,31,40,50,\"BlockOpen\",-3,24,44,46,\"BlockInline\",-4,28,38,48,52,\"BlockClose\",-4,53,56,58,61,\"BlockInline Entity\",63,\"Entity TextContent\",-3,110,113,116,\"TextContent Entity\"],\n    [\"openedBy\", 23,\"{\",28,\"IfBlockOpen\",35,\")\",38,\"EachBlockOpen\",52,\"KeyBlockOpen\",101,\"\\\"\",103,\"'\",109,\"StartTag StartCloseTag\",-4,111,114,117,123,\"OpenTag\",125,\"StartTag\"]\n  ],\n  propSources: [svelteHighlighting],\n  skippedNodes: [0],\n  repeatNodeCount: 13,\n  tokenData: \"&8h$IRR!dOX%aXY/TYZ/TZ[%a[]1{]^/T^p%apq/Tqr2yrsEastF_tuHxuv2yvw!)[wx#,nxy#-lyz#0Vz|2y|}#2p}!O#5Z!O!P#Kk!P!Q$%S!Q![2y![!]$'{!]!^2y!^!_$)u!_!`%'{!`!a%({!a!b2y!b!cF_!c!}%){!}#R2y#R#S%AU#S#T&%m#T#o&'m#o#p&1P#p#q&1d#q#r&3[#r#s2y#s$f%a$f$g2y$g%WHx%W%o%AU%o%pHx%p&a%AU&a&bHx&b1p%AU1p4UHx4U4d%AU4d4eHx4e$IS%AU$IS$I`Hx$I`$Ib%AU$Ib$KhHx$Kh%#t%AU%#t&/xHx&/x&Et%AU&Et&FVHx&FV;'S%AU;'S;:j&5p;:j;=`&5v<%l?&rHx?&r?Ah%AU?Ah?BY&5|?BY?Mn%AU?MnO&5|$3X%ng!aP#]7[$mMh$o!LQ!``OX'VXZ(wZ['V[^(w^p'Vpq(wqr'Vrs(wsv'Vvw*}wx(wx!^'V!^!_)q!_!a(w!a#S'V#S#T(w#T#o'V#o#p*}#p#q'V#q#r-b#r;'S'V;'S;=`.}<%lO'V7m'`g!aP#]7[!``OX'VXZ(wZ['V[^(w^p'Vpq(wqr'Vrs(wsv'Vvw*}wx(wx!^'V!^!_)q!_!a(w!a#S'V#S#T(w#T#o'V#o#p*}#p#q'V#q#r-b#r;'S'V;'S;=`.}<%lO'Va)OZ!aP!``Ov(wvw)qw!^(w!^!_)q!_#o(w#o#p)q#p#q(w#q#r*Y#r;'S(w;'S;=`*w<%lO(w`)vS!``O#q)q#r;'S)q;'S;=`*S<%lO)q`*VP;=`<%l)qP*_U!aPOv*Yw!^*Y!_#o*Y#p;'S*Y;'S;=`*q<%lO*YP*tP;=`<%l*Ya*zP;=`<%l(w7l+Uc#]7[!``OX*}XZ)qZ[*}[^)q^p*}pq)qqr*}rs)qsw*}wx)qx!^*}!^!a)q!a#S*}#S#T)q#T#q*}#q#r,a#r;'S*};'S;=`-[<%lO*}7[,fY#]7[OX,aZ[,a^p,aqr,asw,ax!^,a!a#S,a#T;'S,a;'S;=`-U<%lO,a7[-XP;=`<%l,a7l-_P;=`<%l*}7]-id!aP#]7[OX-bXZ*YZ[-b[^*Y^p-bpq*Yqr-brs*Ysv-bvw,awx*Yx!^-b!_!a*Y!a#S-b#S#T*Y#T#o-b#o#p,a#p;'S-b;'S;=`.w<%lO-b7].zP;=`<%l-b7m/QP;=`<%l'V$@q/bb!aP$mMh$o!LQ!``$]EUOX(wXY0jYZ0jZ](w]^0j^p(wpq0jqv(wvw)qw!^(w!^!_)q!_#o(w#o#p)q#p#q(w#q#r*Y#r;'S(w;'S;=`*w<%lO(wEV0sb!aP!``$]EUOX(wXY0jYZ0jZ](w]^0j^p(wpq0jqv(wvw)qw!^(w!^!_)q!_#o(w#o#p)q#p#q(w#q#r*Y#r;'S(w;'S;=`*w<%lO(w#J{2WZ!aP$mMh$o!LQ!``Ov(wvw)qw!^(w!^!_)q!_#o(w#o#p)q#p#q(w#q#r*Y#r;'S(w;'S;=`*w<%lO(w$DR3^p!p&j#U,U!aP#]7[$mMh$o!LQ!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wsv5bvw7uwx(wx!P5b!P!Q'V!Q![5b![!]'V!]!^5b!^!_:Q!_!a(w!a#S5b#S#T>y#T#o5b#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f;'S5b;'S;=`EZ<%l?Ah5b?Ah?BY'V?BY?Mn5b?MnO'VHg5qp!p&j#U,U!aP#]7[!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wsv5bvw7uwx(wx!P5b!P!Q'V!Q![5b![!]'V!]!^5b!^!_:Q!_!a(w!a#S5b#S#T>y#T#o5b#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f;'S5b;'S;=`EZ<%l?Ah5b?Ah?BY'V?BY?Mn5b?MnO'VHf8Sn!p&j#U,U#]7[!``!oWOX*}XZ)qZ[*}[^)q^p*}pq)qqr7urs)qsw7uwx)qx!P7u!P!Q*}!Q![7u![!]*}!]!^7u!^!_:Q!_!a)q!a#S7u#S#T:Q#T#o7u#o#q*}#q#r<y#r#s7u#s$f*}$f;'S7u;'S;=`>s<%l?Ah7u?Ah?BY*}?BY?Mn7u?MnO*}2Y:]f!p&j#U,U!``!oWOq)qqr:Qrs)qsw:Qwx)qx!P:Q!P!Q)q!Q![:Q![!])q!]!_:Q!_!a)q!a#o:Q#o#q)q#q#r;q#r#s:Q#s$f)q$f;'S:Q;'S;=`<s<%l?Ah:Q?Ah?BY)q?BY?Mn:Q?MnO)q1x;zZ!p&j#U,U!oWqr;qsw;qx!P;q!Q![;q!]!_;q!a#o;q#q#s;q$f;'S;q;'S;=`<m<%l?Ah;q?BY?Mn;q1x<pP;=`<%l;q2Y<vP;=`<%l:QHU=Ug!p&j#U,U#]7[!oWOX,aZ[,a^p,aqr<ysw<yx!P<y!P!Q,a!Q![<y![!],a!]!^<y!^!_;q!a#S<y#S#T;q#T#o<y#o#q,a#q#s<y#s$f,a$f;'S<y;'S;=`>m<%l?Ah<y?Ah?BY,a?BY?Mn<y?MnO,aHU>pP;=`<%l<yHf>vP;=`<%l7u2Z?Wi!p&j#U,U!aP!``!oWOq(wqr>yrs(wsv>yvw:Qwx(wx!P>y!P!Q(w!Q![>y![!](w!]!^>y!^!_:Q!_!a(w!a#o>y#o#p)q#p#q(w#q#r@u#r#s>y#s$f(w$f;'S>y;'S;=`Bo<%l?Ah>y?Ah?BY(w?BY?Mn>y?MnO(w1yAQg!p&j#U,U!aP!oWOq*Yqr@urs*Ysv@uvw;qwx*Yx!P@u!P!Q*Y!Q![@u![!]*Y!]!^@u!^!_;q!_!a*Y!a#o@u#p#q*Y#q#s@u#s$f*Y$f;'S@u;'S;=`Bi<%l?Ah@u?Ah?BY*Y?BY?Mn@u?MnO*Y1yBlP;=`<%l@u2ZBrP;=`<%l>yHVCSo!p&j#U,U!aP#]7[!oWOX-bXZ*YZ[-b[^*Y^p-bpq*YqrBurs*YsvBuvw<ywx*Yx!PBu!P!Q-b!Q![Bu![!]-b!]!^Bu!^!_;q!_!a*Y!a#SBu#S#T@u#T#oBu#o#p,a#p#q-b#q#sBu#s$f-b$f;'SBu;'S;=`ET<%l?AhBu?Ah?BY-b?BY?MnBu?MnO-bHVEWP;=`<%lBuHgE^P;=`<%l5b$3ZElZ#X!5v!aP$o!LQ!``Ov(wvw)qw!^(w!^!_)q!_#o(w#o#p)q#p#q(w#q#r*Y#r;'S(w;'S;=`*w<%lO(w$DTFtpcQ!p&j#U,U!aP#]7[$mMh$o!LQ!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wsv5bvw7uwx(wx!P5b!P!Q'V!Q![5b![!]'V!]!^5b!^!_:Q!_!a(w!a#S5b#S#T>y#T#o5b#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f;'S5b;'S;=`EZ<%l?Ah5b?Ah?BY'V?BY?Mn5b?MnO'V$FZIcweS!p&j#U,U!aP#]7[up$mMh$o!LQ$_!b!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wst5btuK|uv5bvw7uwx(wx!O5b!O!PN|!P!Q'V!Q![K|![!]'V!]!^5b!^!_:Q!_!a(w!a!c5b!c!}K|!}#R5b#R#SK|#S#T>y#T#oK|#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f$g5b$g;'SK|;'S;=`!&h<%l?AhK|?Ah?BY!&n?BY?MnK|?MnO!&nJoLcweS!p&j#U,U!aP#]7[up$_!b!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wst5btuK|uv5bvw7uwx(wx!O5b!O!PN|!P!Q'V!Q![K|![!]'V!]!^5b!^!_:Q!_!a(w!a!c5b!c!}K|!}#R5b#R#SK|#S#T>y#T#oK|#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f$g5b$g;'SK|;'S;=`!&h<%l?AhK|?Ah?BY!&n?BY?MnK|?MnO!&nIX! _w!p&j#U,U!aP#]7[up!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wst5btuN|uv5bvw7uwx(wx!O5b!O!PN|!P!Q'V!Q![N|![!]'V!]!^5b!^!_:Q!_!a(w!a!c5b!c!}N|!}#R5b#R#SN|#S#T>y#T#oN|#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f$g5b$g;'SN|;'S;=`!#x<%l?AhN|?Ah?BY!$O?BY?MnN|?MnO!$OIX!#{P;=`<%lN|8_!$Zq!aP#]7[up!``OX'VXZ(wZ['V[^(w^p'Vpq(wqr'Vrs(wst'Vtu!$Ouv'Vvw*}wx(wx!O'V!O!P!$O!P!Q'V!Q![!$O![!^'V!^!_)q!_!a(w!a!c'V!c!}!$O!}#R'V#R#S!$O#S#T(w#T#o!$O#o#p*}#p#q'V#q#r-b#r$g'V$g;'S!$O;'S;=`!&b<%lO!$O8_!&eP;=`<%l!$OJo!&kP;=`<%lK|9u!&}qeS!aP#]7[up$_!b!``OX'VXZ(wZ['V[^(w^p'Vpq(wqr'Vrs(wst'Vtu!&nuv'Vvw*}wx(wx!O'V!O!P!$O!P!Q'V!Q![!&n![!^'V!^!_)q!_!a(w!a!c'V!c!}!&n!}#R'V#R#S!&n#S#T(w#T#o!&n#o#p*}#p#q'V#q#r-b#r$g'V$g;'S!&n;'S;=`!)U<%lO!&n9u!)XP;=`<%l!&n$DR!)ko!p&j#U,U#]7[!``!oW!d#JkOX!+lXZ!-UZ[!+l[^!-U^p!+lpq)qqr!3Qrs!-Ust!B^tw!3Qwx!-Ux!P!3Q!P!Q!+l!Q![!3Q![!]!+l!]!^7u!^!_!7m!_!a!-U!a#S!3Q#S#T!7m#T#o!3Q#o#q!+l#q#r!>U#r#s!3Q#s$f!+l$f;'S!3Q;'S;=`!BW<%l?Ah!3Q?Ah?BY!+l?BY?Mn!3Q?MnO!+l$3X!+se#]7[!``OX!+lXZ!-UZ[!+l[^!-U^p!+lpq)qqr!+lrs!-Ust*}tw!+lwx!-Ux!]!+l!]!^!/[!^!a!-U!a#S!+l#S#T!-U#T#q!+l#q#r!0p#r;'S!+l;'S;=`!2z<%lO!+l#J{!-ZZ!``Op!-Upq)qqs!-Ust)qt!]!-U!]!^!-|!^#q!-U#q#r!.a#r;'S!-U;'S;=`!/U<%lO!-U#J{!.TS!``!b#JkO#q)q#r;'S)q;'S;=`*S<%lO)q#Jk!.dVOp!.aqs!.at!]!.a!]!^!.y!^;'S!.a;'S;=`!/O<%lO!.a#Jk!/OO!b#Jk#Jk!/RP;=`<%l!.a#J{!/XP;=`<%l!-U$3X!/ec#]7[!``!b#JkOX*}XZ)qZ[*}[^)q^p*}pq)qqr*}rs)qsw*}wx)qx!^*}!^!a)q!a#S*}#S#T)q#T#q*}#q#r,a#r;'S*};'S;=`-[<%lO*}$2w!0ub#]7[OX!0pXZ!.aZ[!0p[^!.a^p!0pqr!0prs!.ast,atw!0pwx!.ax!]!0p!]!^!1}!^!a!.a!a#S!0p#S#T!.a#T;'S!0p;'S;=`!2t<%lO!0p$2w!2UY#]7[!b#JkOX,aZ[,a^p,aqr,asw,ax!^,a!a#S,a#T;'S,a;'S;=`-U<%lO,a$2w!2wP;=`<%l!0p$3X!2}P;=`<%l!+l$DR!3_o!p&j#U,U#]7[!``!oWOX!+lXZ!-UZ[!+l[^!-U^p!+lpq)qqr!3Qrs!-Ust7utw!3Qwx!-Ux!P!3Q!P!Q!+l!Q![!3Q![!]!+l!]!^!5`!^!_!7m!_!a!-U!a#S!3Q#S#T!7m#T#o!3Q#o#q!+l#q#r!>U#r#s!3Q#s$f!+l$f;'S!3Q;'S;=`!BW<%l?Ah!3Q?Ah?BY!+l?BY?Mn!3Q?MnO!+l$DR!5on!p&j#U,U#]7[!``!b#Jk!oWOX*}XZ)qZ[*}[^)q^p*}pq)qqr7urs)qsw7uwx)qx!P7u!P!Q*}!Q![7u![!]*}!]!^7u!^!_:Q!_!a)q!a#S7u#S#T:Q#T#o7u#o#q*}#q#r<y#r#s7u#s$f*}$f;'S7u;'S;=`>s<%l?Ah7u?Ah?BY*}?BY?Mn7u?MnO*}$-u!7xi!p&j#U,U!``!oWOp!-Upq)qqr!7mrs!-Ust:Qtw!7mwx!-Ux!P!7m!P!Q!-U!Q![!7m![!]!-U!]!^!9g!^!_!7m!_!a!-U!a#o!7m#o#q!-U#q#r!;Y#r#s!7m#s$f!-U$f;'S!7m;'S;=`!>O<%l?Ah!7m?Ah?BY!-U?BY?Mn!7m?MnO!-U$-u!9tf!p&j#U,U!``!b#Jk!oWOq)qqr:Qrs)qsw:Qwx)qx!P:Q!P!Q)q!Q![:Q![!])q!]!_:Q!_!a)q!a#o:Q#o#q)q#q#r;q#r#s:Q#s$f)q$f;'S:Q;'S;=`<s<%l?Ah:Q?Ah?BY)q?BY?Mn:Q?MnO)q$-e!;cg!p&j#U,U!oWOp!.aqr!;Yrs!.ast;qtw!;Ywx!.ax!P!;Y!P!Q!.a!Q![!;Y![!]!.a!]!^!<z!^!_!;Y!_!a!.a!a#o!;Y#o#q!.a#q#s!;Y#s$f!.a$f;'S!;Y;'S;=`!=x<%l?Ah!;Y?Ah?BY!.a?BY?Mn!;Y?MnO!.a$-e!=VZ!p&j#U,U!b#Jk!oWqr;qsw;qx!P;q!Q![;q!]!_;q!a#o;q#q#s;q$f;'S;q;'S;=`<m<%l?Ah;q?BY?Mn;q$-e!={P;=`<%l!;Y$-u!>RP;=`<%l!7m$Cq!>am!p&j#U,U#]7[!oWOX!0pXZ!.aZ[!0p[^!.a^p!0pqr!>Urs!.ast<ytw!>Uwx!.ax!P!>U!P!Q!0p!Q![!>U![!]!0p!]!^!@[!^!_!;Y!_!a!.a!a#S!>U#S#T!;Y#T#o!>U#o#q!0p#q#s!>U#s$f!0p$f;'S!>U;'S;=`!BQ<%l?Ah!>U?Ah?BY!0p?BY?Mn!>U?MnO!0p$Cq!@ig!p&j#U,U#]7[!b#Jk!oWOX,aZ[,a^p,aqr<ysw<yx!P<y!P!Q,a!Q![<y![!],a!]!^<y!^!_;q!a#S<y#S#T;q#T#o<y#o#q,a#q#s<y#s$f,a$f;'S<y;'S;=`>m<%l?Ah<y?Ah?BY,a?BY?Mn<y?MnO,a$Cq!BTP;=`<%l!>U$DR!BZP;=`<%l!3Q$DR!Bkn!p&j#U,U#]7[!``!oWOX!DiXZ!FOZ[!Di[^!FO^p!Dipq)qqr!Knrs!FOsw!Knwx!FOx!P!Kn!P!Q!Di!Q![!Kn![!]!Di!]!^7u!^!_#!W!_!a!FO!a#S!Kn#S#T#!W#T#o!Kn#o#q!Di#q#r#(i#r#s!Kn#s$f!Di$f;'S!Kn;'S;=`#,h<%l?Ah!Kn?Ah?BY!Di?BY?Mn!Kn?MnO!Di$3X!Dpd#]7[!``OX!DiXZ!FOZ[!Di[^!FO^p!Dipq)qqr!Dirs!FOsw!Diwx!FOx!]!Di!]!^!G{!^!a!FO!a#S!Di#S#T!FO#T#q!Di#q#r!Ia#r;'S!Di;'S;=`!Kh<%lO!Di#J{!FTX!``Op!FOpq)qq!]!FO!]!^!Fp!^#q!FO#q#r!GT#r;'S!FO;'S;=`!Gu<%lO!FO#J{!FwS!``!c#JkO#q)q#r;'S)q;'S;=`*S<%lO)q#Jk!GWUOp!GTq!]!GT!]!^!Gj!^;'S!GT;'S;=`!Go<%lO!GT#Jk!GoO!c#Jk#Jk!GrP;=`<%l!GT#J{!GxP;=`<%l!FO$3X!HUc#]7[!``!c#JkOX*}XZ)qZ[*}[^)q^p*}pq)qqr*}rs)qsw*}wx)qx!^*}!^!a)q!a#S*}#S#T)q#T#q*}#q#r,a#r;'S*};'S;=`-[<%lO*}$2w!Ifa#]7[OX!IaXZ!GTZ[!Ia[^!GT^p!Iaqr!Iars!GTsw!Iawx!GTx!]!Ia!]!^!Jk!^!a!GT!a#S!Ia#S#T!GT#T;'S!Ia;'S;=`!Kb<%lO!Ia$2w!JrY#]7[!c#JkOX,aZ[,a^p,aqr,asw,ax!^,a!a#S,a#T;'S,a;'S;=`-U<%lO,a$2w!KeP;=`<%l!Ia$3X!KkP;=`<%l!Di$DR!K{n!p&j#U,U#]7[!``!oWOX!DiXZ!FOZ[!Di[^!FO^p!Dipq)qqr!Knrs!FOsw!Knwx!FOx!P!Kn!P!Q!Di!Q![!Kn![!]!Di!]!^!My!^!_#!W!_!a!FO!a#S!Kn#S#T#!W#T#o!Kn#o#q!Di#q#r#(i#r#s!Kn#s$f!Di$f;'S!Kn;'S;=`#,h<%l?Ah!Kn?Ah?BY!Di?BY?Mn!Kn?MnO!Di$DR!NYn!p&j#U,U#]7[!``!c#Jk!oWOX*}XZ)qZ[*}[^)q^p*}pq)qqr7urs)qsw7uwx)qx!P7u!P!Q*}!Q![7u![!]*}!]!^7u!^!_:Q!_!a)q!a#S7u#S#T:Q#T#o7u#o#q*}#q#r<y#r#s7u#s$f*}$f;'S7u;'S;=`>s<%l?Ah7u?Ah?BY*}?BY?Mn7u?MnO*}$-u#!ch!p&j#U,U!``!oWOp!FOpq)qqr#!Wrs!FOsw#!Wwx!FOx!P#!W!P!Q!FO!Q![#!W![!]!FO!]!^##}!^!_#!W!_!a!FO!a#o#!W#o#q!FO#q#r#%p#r#s#!W#s$f!FO$f;'S#!W;'S;=`#(c<%l?Ah#!W?Ah?BY!FO?BY?Mn#!W?MnO!FO$-u#$[f!p&j#U,U!``!c#Jk!oWOq)qqr:Qrs)qsw:Qwx)qx!P:Q!P!Q)q!Q![:Q![!])q!]!_:Q!_!a)q!a#o:Q#o#q)q#q#r;q#r#s:Q#s$f)q$f;'S:Q;'S;=`<s<%l?Ah:Q?Ah?BY)q?BY?Mn:Q?MnO)q$-e#%yf!p&j#U,U!oWOp!GTqr#%prs!GTsw#%pwx!GTx!P#%p!P!Q!GT!Q![#%p![!]!GT!]!^#'_!^!_#%p!_!a!GT!a#o#%p#o#q!GT#q#s#%p#s$f!GT$f;'S#%p;'S;=`#(]<%l?Ah#%p?Ah?BY!GT?BY?Mn#%p?MnO!GT$-e#'jZ!p&j#U,U!c#Jk!oWqr;qsw;qx!P;q!Q![;q!]!_;q!a#o;q#q#s;q$f;'S;q;'S;=`<m<%l?Ah;q?BY?Mn;q$-e#(`P;=`<%l#%p$-u#(fP;=`<%l#!W$Cq#(tl!p&j#U,U#]7[!oWOX!IaXZ!GTZ[!Ia[^!GT^p!Iaqr#(irs!GTsw#(iwx!GTx!P#(i!P!Q!Ia!Q![#(i![!]!Ia!]!^#*l!^!_#%p!_!a!GT!a#S#(i#S#T#%p#T#o#(i#o#q!Ia#q#s#(i#s$f!Ia$f;'S#(i;'S;=`#,b<%l?Ah#(i?Ah?BY!Ia?BY?Mn#(i?MnO!Ia$Cq#*yg!p&j#U,U#]7[!c#Jk!oWOX,aZ[,a^p,aqr<ysw<yx!P<y!P!Q,a!Q![<y![!],a!]!^<y!^!_;q!a#S<y#S#T;q#T#o<y#o#q,a#q#s<y#s$f,a$f;'S<y;'S;=`>m<%l?Ah<y?Ah?BY,a?BY?Mn<y?MnO,a$Cq#,eP;=`<%l#(i$DR#,kP;=`<%l!Kn$3Z#,yZ#Z#4`!aP$mMh!``Ov(wvw)qw!^(w!^!_)q!_#o(w#o#p)q#p#q(w#q#r*Y#r;'S(w;'S;=`*w<%lO(w$Du#.Rprr!p&j#U,U!aP#]7[$mMh$o!LQ!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wsv5bvw7uwx(wx!P5b!P!Q'V!Q![5b![!]'V!]!^5b!^!_:Q!_!a(w!a#S5b#S#T>y#T#o5b#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f;'S5b;'S;=`EZ<%l?Ah5b?Ah?BY'V?BY?Mn5b?MnO'V$DT#0lpsQ!p&j#U,U!aP#]7[$mMh$o!LQ!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wsv5bvw7uwx(wx!P5b!P!Q'V!Q![5b![!]'V!]!^5b!^!_:Q!_!a(w!a#S5b#S#T>y#T#o5b#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f;'S5b;'S;=`EZ<%l?Ah5b?Ah?BY'V?BY?Mn5b?MnO'V$DT#3VptQ!p&j#U,U!aP#]7[$mMh$o!LQ!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wsv5bvw7uwx(wx!P5b!P!Q'V!Q![5b![!]'V!]!^5b!^!_:Q!_!a(w!a#S5b#S#T>y#T#o5b#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f;'S5b;'S;=`EZ<%l?Ah5b?Ah?BY'V?BY?Mn5b?MnO'V$DT#5nr!p&j#U,U!aP#]7[$mMh$o!LQ!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wsv5bvw7uwx(wx}5b}!O#7x!O!P5b!P!Q'V!Q![5b![!]'V!]!^5b!^!_:Q!_!a(w!a#S5b#S#T>y#T#o5b#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f;'S5b;'S;=`EZ<%l?Ah5b?Ah?BY'V?BY?Mn5b?MnO'VHi#8Xq!p&j#U,U!aP#]7[!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr#:`rs(wsv#:`vw#<uwx(wx!P#:`!P!Q'V!Q![#:`![!]'V!]!^#:`!^!_#?S!_!`(w!`!a#Jo!a#S#:`#S#T#DR#T#o#:`#o#p*}#p#q'V#q#r#HR#r#s#:`#s$f'V$f;'S#:`;'S;=`#Ji<%l?Ah#:`?Ah?BY'V?BY?Mn#:`?MnO'VHg#:qp!p&j#U,U!aP#]7[!``#_W!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr#:`rs(wsv#:`vw#<uwx(wx!P#:`!P!Q'V!Q![#:`![!]'V!]!^#:`!^!_#?S!_!a(w!a#S#:`#S#T#DR#T#o#:`#o#p*}#p#q'V#q#r#HR#r#s#:`#s$f'V$f;'S#:`;'S;=`#Ji<%l?Ah#:`?Ah?BY'V?BY?Mn#:`?MnO'VHf#=Un!p&j#U,U#]7[!``#_W!oWOX*}XZ)qZ[*}[^)q^p*}pq)qqr#<urs)qsw#<uwx)qx!P#<u!P!Q*}!Q![#<u![!]*}!]!^#<u!^!_#?S!_!a)q!a#S#<u#S#T#?S#T#o#<u#o#q*}#q#r#BP#r#s#<u#s$f*}$f;'S#<u;'S;=`#C{<%l?Ah#<u?Ah?BY*}?BY?Mn#<u?MnO*}2Y#?af!p&j#U,U!``#_W!oWOq)qqr#?Srs)qsw#?Swx)qx!P#?S!P!Q)q!Q![#?S![!])q!]!_#?S!_!a)q!a#o#?S#o#q)q#q#r#@u#r#s#?S#s$f)q$f;'S#?S;'S;=`#Ay<%l?Ah#?S?Ah?BY)q?BY?Mn#?S?MnO)q1x#AQZ!p&j#U,U#_W!oWqr#@usw#@ux!P#@u!Q![#@u!]!_#@u!a#o#@u#q#s#@u$f;'S#@u;'S;=`#As<%l?Ah#@u?BY?Mn#@u1x#AvP;=`<%l#@u2Y#A|P;=`<%l#?SHU#B^g!p&j#U,U#]7[#_W!oWOX,aZ[,a^p,aqr#BPsw#BPx!P#BP!P!Q,a!Q![#BP![!],a!]!^#BP!^!_#@u!a#S#BP#S#T#@u#T#o#BP#o#q,a#q#s#BP#s$f,a$f;'S#BP;'S;=`#Cu<%l?Ah#BP?Ah?BY,a?BY?Mn#BP?MnO,aHU#CxP;=`<%l#BPHf#DOP;=`<%l#<u2Z#Dbi!p&j#U,U!aP!``#_W!oWOq(wqr#DRrs(wsv#DRvw#?Swx(wx!P#DR!P!Q(w!Q![#DR![!](w!]!^#DR!^!_#?S!_!a(w!a#o#DR#o#p)q#p#q(w#q#r#FP#r#s#DR#s$f(w$f;'S#DR;'S;=`#G{<%l?Ah#DR?Ah?BY(w?BY?Mn#DR?MnO(w1y#F^g!p&j#U,U!aP#_W!oWOq*Yqr#FPrs*Ysv#FPvw#@uwx*Yx!P#FP!P!Q*Y!Q![#FP![!]*Y!]!^#FP!^!_#@u!_!a*Y!a#o#FP#p#q*Y#q#s#FP#s$f*Y$f;'S#FP;'S;=`#Gu<%l?Ah#FP?Ah?BY*Y?BY?Mn#FP?MnO*Y1y#GxP;=`<%l#FP2Z#HOP;=`<%l#DRHV#Hbo!p&j#U,U!aP#]7[#_W!oWOX-bXZ*YZ[-b[^*Y^p-bpq*Yqr#HRrs*Ysv#HRvw#BPwx*Yx!P#HR!P!Q-b!Q![#HR![!]-b!]!^#HR!^!_#@u!_!a*Y!a#S#HR#S#T#FP#T#o#HR#o#p,a#p#q-b#q#s#HR#s$f-b$f;'S#HR;'S;=`#Jc<%l?Ah#HR?Ah?BY-b?BY?Mn#HR?MnO-bHV#JfP;=`<%l#HRHg#JlP;=`<%l#:`c#JxZ!aP$rQ!``Ov(wvw)qw!^(w!^!_)q!_#o(w#o#p)q#p#q(w#q#r*Y#r;'S(w;'S;=`*w<%lO(w$Ee#LOq!p&j#U,U!aP#]7[$mMh$o!LQ!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wsv5bvw7uwx(wx!O5b!O!P#NV!P!Q'V!Q![5b![!]'V!]!^5b!^!_:Q!_!a(w!a#S5b#S#T>y#T#o5b#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f;'S5b;'S;=`EZ<%l?Ah5b?Ah?BY'V?BY?Mn5b?MnO'VIy#Nfq!p&j#U,U!aP#]7[!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wsv5bvw7uwx(wx!O5b!O!P$!m!P!Q'V!Q![5b![!]'V!]!^5b!^!_:Q!_!a(w!a#S5b#S#T>y#T#o5b#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f;'S5b;'S;=`EZ<%l?Ah5b?Ah?BY'V?BY?Mn5b?MnO'VIy$#Op!k!b!p&j#U,U!aP#]7[!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wsv5bvw7uwx(wx!P5b!P!Q'V!Q![5b![!]'V!]!^5b!^!_:Q!_!a(w!a#S5b#S#T>y#T#o5b#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f;'S5b;'S;=`EZ<%l?Ah5b?Ah?BY'V?BY?Mn5b?MnO'V$3g$%chcQ!aP#]7[$mMh$o!LQ!``OX'VXZ(wZ['V[^(w^p'Vpq(wqr'Vrs(wsv'Vvw*}wx(wx!^'V!^!_)q!_!`(w!`!a$&}!a#S'V#S#T(w#T#o'V#o#p*}#p#q'V#q#r-b#r;'S'V;'S;=`.}<%lO'Vm$'YZ!aP!``#qW#a[Ov(wvw)qw!^(w!^!_)q!_#o(w#o#p)q#p#q(w#q#r*Y#r;'S(w;'S;=`*w<%lO(w$3_$(^g$cScQ!aP#]7[$mMh$o!LQ!``OX'VXZ(wZ['V[^(w^p'Vpq(wqr'Vrs(wsv'Vvw*}wx(wx!^'V!^!_)q!_!a(w!a#S'V#S#T(w#T#o'V#o#p*}#p#q'V#q#r-b#r;'S'V;'S;=`.}<%lO'V$-u$*Ug!p&j#U,U$mMh$o!LQ!``!oWOq)qqr$+mrs)qsw:Qwx)qx!P:Q!P!Q)q!Q![:Q![!])q!]!_:Q!_!a)q!a!b$LZ!b#o:Q#o#q)q#q#r;q#r#s:Q#s$f)q$f;'S:Q;'S;=`<s<%l?Ah:Q?Ah?BY)q?BY?Mn:Q?MnO)q2Z$+xl!p&j#U,U!``!oWOq)qqr:Qrs)qsw:Qwx)qx}:Q}!O$-p!O!P:Q!P!Q)q!Q![:Q![!])q!]!_:Q!_!a)q!a!f:Q!f!g$1Y!g#W:Q#W#X$Ac#X#o:Q#o#q)q#q#r;q#r#s:Q#s$f)q$f;'S:Q;'S;=`<s<%l?Ah:Q?Ah?BY)q?BY?Mn:Q?MnO)q2Z$-{h!p&j#U,U!``!oWOq)qqr:Qrs)qsw:Qwx)qx}:Q}!O$/g!O!P:Q!P!Q)q!Q![:Q![!])q!]!_:Q!_!a)q!a#o:Q#o#q)q#q#r;q#r#s:Q#s$f)q$f;'S:Q;'S;=`<s<%l?Ah:Q?Ah?BY)q?BY?Mn:Q?MnO)q2Z$/tf!p&j#U,U!``$qP!oWOq)qqr:Qrs)qsw:Qwx)qx!P:Q!P!Q)q!Q![:Q![!])q!]!_:Q!_!a)q!a#o:Q#o#q)q#q#r;q#r#s:Q#s$f)q$f;'S:Q;'S;=`<s<%l?Ah:Q?Ah?BY)q?BY?Mn:Q?MnO)q2Z$1eh!p&j#U,U!``!oWOq)qqr:Qrs)qsw:Qwx)qx!P:Q!P!Q)q!Q![:Q![!])q!]!_:Q!_!a)q!a!q:Q!q!r$3P!r#o:Q#o#q)q#q#r;q#r#s:Q#s$f)q$f;'S:Q;'S;=`<s<%l?Ah:Q?Ah?BY)q?BY?Mn:Q?MnO)q2Z$3[h!p&j#U,U!``!oWOq)qqr:Qrs)qsw:Qwx)qx!P:Q!P!Q)q!Q![:Q![!])q!]!_:Q!_!a)q!a!e:Q!e!f$4v!f#o:Q#o#q)q#q#r;q#r#s:Q#s$f)q$f;'S:Q;'S;=`<s<%l?Ah:Q?Ah?BY)q?BY?Mn:Q?MnO)q2Z$5Rh!p&j#U,U!``!oWOq)qqr:Qrs)qsw:Qwx)qx!P:Q!P!Q)q!Q![:Q![!])q!]!_:Q!_!a)q!a!v:Q!v!w$6m!w#o:Q#o#q)q#q#r;q#r#s:Q#s$f)q$f;'S:Q;'S;=`<s<%l?Ah:Q?Ah?BY)q?BY?Mn:Q?MnO)q2Z$6xh!p&j#U,U!``!oWOq)qqr:Qrs)qsw:Qwx)qx!P:Q!P!Q)q!Q![:Q![!])q!]!_:Q!_!a)q!a!{:Q!{!|$8d!|#o:Q#o#q)q#q#r;q#r#s:Q#s$f)q$f;'S:Q;'S;=`<s<%l?Ah:Q?Ah?BY)q?BY?Mn:Q?MnO)q2Z$8oh!p&j#U,U!``!oWOq)qqr:Qrs)qsw:Qwx)qx!P:Q!P!Q)q!Q![:Q![!])q!]!_:Q!_!a)q!a!r:Q!r!s$:Z!s#o:Q#o#q)q#q#r;q#r#s:Q#s$f)q$f;'S:Q;'S;=`<s<%l?Ah:Q?Ah?BY)q?BY?Mn:Q?MnO)q2Z$:fh!p&j#U,U!``!oWOq)qqr:Qrs)qsw:Qwx)qx!P:Q!P!Q)q!Q![:Q![!])q!]!_:Q!_!a)q!a!g:Q!g!h$<Q!h#o:Q#o#q)q#q#r;q#r#s:Q#s$f)q$f;'S:Q;'S;=`<s<%l?Ah:Q?Ah?BY)q?BY?Mn:Q?MnO)q2Z$<]g!p&j#U,U!``!oWOq$=tqr$<Qrs$=tsw$<Qwx$=tx!P$<Q!P!Q$=t!Q![$<Q![!]$=t!]!_$<Q!_!`$=t!`!a$>`!a#o$<Q#o#q$=t#q#r$?h#r#s$<Q#s$f$=t$f;'S$<Q;'S;=`$A]<%l?Ah$<Q?Ah?BY$=t?BY?Mn$<Q?MnO$=ta$=yV!``O!`$=t!`!a$>`!a#q$=t#q#r$>s#r;'S$=t;'S;=`$?b<%lO$=ta$>gS!``#vPO#q)q#r;'S)q;'S;=`*S<%lO)qP$>vTO!`$>s!`!a$?V!a;'S$>s;'S;=`$?[<%lO$>sP$?[O#vPP$?_P;=`<%l$>sa$?eP;=`<%l$=t1y$?qf!p&j#U,U!oWOq$>sqr$?hrs$>ssw$?hwx$>sx!P$?h!P!Q$>s!Q![$?h![!]$>s!]!_$?h!_!`$>s!`!a$?V!a#o$?h#o#q$>s#q#s$?h#s$f$>s$f;'S$?h;'S;=`$AV<%l?Ah$?h?Ah?BY$>s?BY?Mn$?h?MnO$>s1y$AYP;=`<%l$?h2Z$A`P;=`<%l$<Q2Z$Anh!p&j#U,U!``!oWOq)qqr:Qrs)qsw:Qwx)qx!P:Q!P!Q)q!Q![:Q![!])q!]!_:Q!_!a)q!a#c:Q#c#d$CY#d#o:Q#o#q)q#q#r;q#r#s:Q#s$f)q$f;'S:Q;'S;=`<s<%l?Ah:Q?Ah?BY)q?BY?Mn:Q?MnO)q2Z$Ceh!p&j#U,U!``!oWOq)qqr:Qrs)qsw:Qwx)qx!P:Q!P!Q)q!Q![:Q![!])q!]!_:Q!_!a)q!a#V:Q#V#W$EP#W#o:Q#o#q)q#q#r;q#r#s:Q#s$f)q$f;'S:Q;'S;=`<s<%l?Ah:Q?Ah?BY)q?BY?Mn:Q?MnO)q2Z$E[h!p&j#U,U!``!oWOq)qqr:Qrs)qsw:Qwx)qx!P:Q!P!Q)q!Q![:Q![!])q!]!_:Q!_!a)q!a#h:Q#h#i$Fv#i#o:Q#o#q)q#q#r;q#r#s:Q#s$f)q$f;'S:Q;'S;=`<s<%l?Ah:Q?Ah?BY)q?BY?Mn:Q?MnO)q2Z$GRh!p&j#U,U!``!oWOq)qqr:Qrs)qsw:Qwx)qx!P:Q!P!Q)q!Q![:Q![!])q!]!_:Q!_!a)q!a#m:Q#m#n$Hm#n#o:Q#o#q)q#q#r;q#r#s:Q#s$f)q$f;'S:Q;'S;=`<s<%l?Ah:Q?Ah?BY)q?BY?Mn:Q?MnO)q2Z$Hxh!p&j#U,U!``!oWOq)qqr:Qrs)qsw:Qwx)qx!P:Q!P!Q)q!Q![:Q![!])q!]!_:Q!_!a)q!a#d:Q#d#e$Jd#e#o:Q#o#q)q#q#r;q#r#s:Q#s$f)q$f;'S:Q;'S;=`<s<%l?Ah:Q?Ah?BY)q?BY?Mn:Q?MnO)q2Z$Joh!p&j#U,U!``!oWOq)qqr:Qrs)qsw:Qwx)qx!P:Q!P!Q)q!Q![:Q![!])q!]!_:Q!_!a)q!a#X:Q#X#Y$<Q#Y#o:Q#o#q)q#q#r;q#r#s:Q#s$f)q$f;'S:Q;'S;=`<s<%l?Ah:Q?Ah?BY)q?BY?Mn:Q?MnO)q2Z$Lfg!p&j#U,U!``!oWOq$M}qr$LZrs$M}sw$LZwx$M}x!P$LZ!P!Q$M}!Q![$LZ![!]$M}!]!_$LZ!_!a$M}!a!b%!o!b#o$LZ#o#q$M}#q#r%$c#r#s$LZ#s$f$M}$f;'S$LZ;'S;=`%'u<%l?Ah$LZ?Ah?BY$M}?BY?Mn$LZ?MnO$M}a$NSV!``O!a$M}!a!b$Ni!b#q$M}#q#r% h#r;'S$M};'S;=`%!i<%lO$M}a$NnV!``O!`$M}!`!a% T!a#q$M}#q#r% h#r;'S$M};'S;=`%!i<%lO$M}a% [S!``#sPO#q)q#r;'S)q;'S;=`*S<%lO)qP% kTO!a% h!a!b% z!b;'S% h;'S;=`%!c<%lO% hP% }TO!`% h!`!a%!^!a;'S% h;'S;=`%!c<%lO% hP%!cO#sPP%!fP;=`<%l% ha%!lP;=`<%l$M}2Z%!zg!p&j#U,U!``!oWOq$M}qr$LZrs$M}sw$LZwx$M}x!P$LZ!P!Q$M}!Q![$LZ![!]$M}!]!_$LZ!_!`$M}!`!a% T!a#o$LZ#o#q$M}#q#r%$c#r#s$LZ#s$f$M}$f;'S$LZ;'S;=`%'u<%l?Ah$LZ?Ah?BY$M}?BY?Mn$LZ?MnO$M}1y%$lf!p&j#U,U!oWOq% hqr%$crs% hsw%$cwx% hx!P%$c!P!Q% h!Q![%$c![!]% h!]!_%$c!_!a% h!a!b%&Q!b#o%$c#o#q% h#q#s%$c#s$f% h$f;'S%$c;'S;=`%'o<%l?Ah%$c?Ah?BY% h?BY?Mn%$c?MnO% h1y%&Zf!p&j#U,U!oWOq% hqr%$crs% hsw%$cwx% hx!P%$c!P!Q% h!Q![%$c![!]% h!]!_%$c!_!`% h!`!a%!^!a#o%$c#o#q% h#q#s%$c#s$f% h$f;'S%$c;'S;=`%'o<%l?Ah%$c?Ah?BY% h?BY?Mn%$c?MnO% h1y%'rP;=`<%l%$c2Z%'xP;=`<%l$LZ#KT%(YZ#VW!aP$mMh$o!LQ!``Ov(wvw)qw!^(w!^!_)q!_#o(w#o#p)q#p#q(w#q#r*Y#r;'S(w;'S;=`*w<%lO(w#KX%)YZ!aP$mMh$o!LQ!``#a[Ov(wvw)qw!^(w!^!_)q!_#o(w#o#p)q#p#q(w#q#r*Y#r;'S(w;'S;=`*w<%lO(w$IR%*j!aeS#kQ!p&j#U,U#n#t!aP#]7[up$mMh$o!LQ$_!b!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wst5btuK|uv5bvw7uwx(wx}5b}!O%.o!O!P%3S!P!Q'V!Q![%7r![!]'V!]!^5b!^!_:Q!_!a(w!a!c5b!c!}%<f!}#R5b#R#S%7r#S#T>y#T#o%<f#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f$g5b$g$}K|$}%O%7r%O%WK|%W%o%7r%o%pK|%p&a%7r&a&bK|&b1p%7r1p4U%7r4U4d%7r4d4eK|4e$IS%7r$IS$I`K|$I`$Ib%7r$Ib$JeK|$Je$Jg%7r$Jg$KhK|$Kh%#t%7r%#t&/xK|&/x&Et%7r&Et&FVK|&FV;'S%7r;'S;:j%<`;:j;=`!&h<%l?&rK|?&r?Ah%7r?Ah?BY!&n?BY?Mn%7r?MnO!&nHi%/Q!^#kQ!p&j#U,U!aP#]7[!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wsv5bvw7uwx(wx}5b}!O%.o!O!P%.o!P!Q'V!Q![%.o![!]'V!]!^5b!^!_:Q!_!a(w!a!c5b!c!}%.o!}#R5b#R#S%.o#S#T>y#T#o%.o#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f$}5b$}%O%.o%O%W5b%W%o%.o%o%p5b%p&a%.o&a&b5b&b1p%.o1p4U%.o4U4d%.o4d4e5b4e$IS%.o$IS$I`5b$I`$Ib%.o$Ib$Je5b$Je$Jg%.o$Jg$Kh5b$Kh%#t%.o%#t&/x5b&/x&Et%.o&Et&FV5b&FV;'S%.o;'S;:j%2|;:j;=`EZ<%l?&r5b?&r?Ah%.o?Ah?BY'V?BY?Mn%.o?MnO'VHi%3PP;=`<%l%.oIZ%3g!a#kQ!p&j#U,U!aP#]7[up!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wst5btuN|uv5bvw7uwx(wx}5b}!O%.o!O!P%3S!P!Q'V!Q![%3S![!]'V!]!^5b!^!_:Q!_!a(w!a!c5b!c!}%3S!}#R5b#R#S%3S#S#T>y#T#o%3S#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f$g5b$g$}N|$}%O%3S%O%WN|%W%o%3S%o%pN|%p&a%3S&a&bN|&b1p%3S1p4U%3S4U4d%3S4d4eN|4e$IS%3S$IS$I`N|$I`$Ib%3S$Ib$JeN|$Je$Jg%3S$Jg$KhN|$Kh%#t%3S%#t&/xN|&/x&Et%3S&Et&FVN|&FV;'S%3S;'S;:j%7l;:j;=`!#x<%l?&rN|?&r?Ah%3S?Ah?BY!$O?BY?Mn%3S?MnO!$OIZ%7oP;=`<%l%3SJq%8Z!aeS#kQ!p&j#U,U!aP#]7[up$_!b!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wst5btuK|uv5bvw7uwx(wx}5b}!O%.o!O!P%3S!P!Q'V!Q![%7r![!]'V!]!^5b!^!_:Q!_!a(w!a!c5b!c!}%7r!}#R5b#R#S%7r#S#T>y#T#o%7r#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f$g5b$g$}K|$}%O%7r%O%WK|%W%o%7r%o%pK|%p&a%7r&a&bK|&b1p%7r1p4U%7r4U4d%7r4d4eK|4e$IS%7r$IS$I`K|$I`$Ib%7r$Ib$JeK|$Je$Jg%7r$Jg$KhK|$Kh%#t%7r%#t&/xK|&/x&Et%7r&Et&FVK|&FV;'S%7r;'S;:j%<`;:j;=`!&h<%l?&rK|?&r?Ah%7r?Ah?BY!&n?BY?Mn%7r?MnO!&nJq%<cP;=`<%l%7rMg%=P!aeS#kQ!p&j#U,U#n#t!aP#]7[up$_!b!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wst5btuK|uv5bvw7uwx(wx}5b}!O%.o!O!P%3S!P!Q'V!Q![%7r![!]'V!]!^5b!^!_:Q!_!a(w!a!c5b!c!}%<f!}#R5b#R#S%7r#S#T>y#T#o%<f#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f$g5b$g$}K|$}%O%7r%O%WK|%W%o%7r%o%pK|%p&a%7r&a&bK|&b1p%7r1p4U%7r4U4d%7r4d4eK|4e$IS%7r$IS$I`K|$I`$Ib%7r$Ib$JeK|$Je$Jg%7r$Jg$KhK|$Kh%#t%7r%#t&/xK|&/x&Et%7r&Et&FVK|&FV;'S%7r;'S;:j%<`;:j;=`!&h<%l?&rK|?&r?Ah%7r?Ah?BY!&n?BY?Mn%7r?MnO!&n$F]%Aq!aeS!p&j#U,U!gQ!aP#]7[up$mMh$o!LQ$_!b!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wst5btuK|uv5bvw7uwx(wx}5b}!O%Ev!O!P%JZ!P!Q'V!Q![%Ny![!]'V!]!^5b!^!_:Q!_!a(w!a!c5b!c!}%Ny!}#R5b#R#S%Ny#S#T>y#T#o%Ny#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f$g5b$g$}K|$}%O%Ny%O%WK|%W%o%Ny%o%pK|%p&a%Ny&a&bK|&b1p%Ny1p4U%Ny4U4d%Ny4d4eK|4e$IS%Ny$IS$I`K|$I`$Ib%Ny$Ib$JeK|$Je$Jg%Ny$Jg$KhK|$Kh%#t%Ny%#t&/xK|&/x&Et%Ny&Et&FVK|&FV;'S%Ny;'S;:j&%g;:j;=`!&h<%l?&rK|?&r?Ah%Ny?Ah?BY!&n?BY?Mn%Ny?MnO!&nHi%FX!^!p&j#U,U!gQ!aP#]7[!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wsv5bvw7uwx(wx}5b}!O%Ev!O!P%Ev!P!Q'V!Q![%Ev![!]'V!]!^5b!^!_:Q!_!a(w!a!c5b!c!}%Ev!}#R5b#R#S%Ev#S#T>y#T#o%Ev#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f$}5b$}%O%Ev%O%W5b%W%o%Ev%o%p5b%p&a%Ev&a&b5b&b1p%Ev1p4U%Ev4U4d%Ev4d4e5b4e$IS%Ev$IS$I`5b$I`$Ib%Ev$Ib$Je5b$Je$Jg%Ev$Jg$Kh5b$Kh%#t%Ev%#t&/x5b&/x&Et%Ev&Et&FV5b&FV;'S%Ev;'S;:j%JT;:j;=`EZ<%l?&r5b?&r?Ah%Ev?Ah?BY'V?BY?Mn%Ev?MnO'VHi%JWP;=`<%l%EvIZ%Jn!a!p&j#U,U!gQ!aP#]7[up!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wst5btuN|uv5bvw7uwx(wx}5b}!O%Ev!O!P%JZ!P!Q'V!Q![%JZ![!]'V!]!^5b!^!_:Q!_!a(w!a!c5b!c!}%JZ!}#R5b#R#S%JZ#S#T>y#T#o%JZ#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f$g5b$g$}N|$}%O%JZ%O%WN|%W%o%JZ%o%pN|%p&a%JZ&a&bN|&b1p%JZ1p4U%JZ4U4d%JZ4d4eN|4e$IS%JZ$IS$I`N|$I`$Ib%JZ$Ib$JeN|$Je$Jg%JZ$Jg$KhN|$Kh%#t%JZ%#t&/xN|&/x&Et%JZ&Et&FVN|&FV;'S%JZ;'S;:j%Ns;:j;=`!#x<%l?&rN|?&r?Ah%JZ?Ah?BY!$O?BY?Mn%JZ?MnO!$OIZ%NvP;=`<%l%JZJq& b!aeS!p&j#U,U!gQ!aP#]7[up$_!b!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wst5btuK|uv5bvw7uwx(wx}5b}!O%Ev!O!P%JZ!P!Q'V!Q![%Ny![!]'V!]!^5b!^!_:Q!_!a(w!a!c5b!c!}%Ny!}#R5b#R#S%Ny#S#T>y#T#o%Ny#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f$g5b$g$}K|$}%O%Ny%O%WK|%W%o%Ny%o%pK|%p&a%Ny&a&bK|&b1p%Ny1p4U%Ny4U4d%Ny4d4eK|4e$IS%Ny$IS$I`K|$I`$Ib%Ny$Ib$JeK|$Je$Jg%Ny$Jg$KhK|$Kh%#t%Ny%#t&/xK|&/x&Et%Ny&Et&FVK|&FV;'S%Ny;'S;:j&%g;:j;=`!&h<%l?&rK|?&r?Ah%Ny?Ah?BY!&n?BY?Mn%Ny?MnO!&nJq&%jP;=`<%l%Ny$-u&&Oi!p&j#U,U!aP$mMh$o!LQ!``!oWOq(wqr>yrs(wsv>yvw:Qwx(wx!P>y!P!Q(w!Q![>y![!](w!]!^>y!^!_:Q!_!a(w!a#o>y#o#p)q#p#q(w#q#r@u#r#s>y#s$f(w$f;'S>y;'S;=`Bo<%l?Ah>y?Ah?BY(w?BY?Mn>y?MnO(w$IR&([!aeS!p&j#U,U#n#t!gQ!aP#]7[up$mMh$o!LQ$_!b!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wst5btuK|uv5bvw7uwx(wx}5b}!O%Ev!O!P%JZ!P!Q'V!Q![%Ny![!]'V!]!^5b!^!_:Q!_!a(w!a!c5b!c!}&,a!}#R5b#R#S%Ny#S#T>y#T#o&,a#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f$g5b$g$}K|$}%O%Ny%O%WK|%W%o%Ny%o%pK|%p&a%Ny&a&bK|&b1p%Ny1p4U%Ny4U4d%Ny4d4eK|4e$IS%Ny$IS$I`K|$I`$Ib%Ny$Ib$JeK|$Je$Jg%Ny$Jg$KhK|$Kh%#t%Ny%#t&/xK|&/x&Et%Ny&Et&FVK|&FV;'S%Ny;'S;:j&%g;:j;=`!&h<%l?&rK|?&r?Ah%Ny?Ah?BY!&n?BY?Mn%Ny?MnO!&nMg&,z!aeS!p&j#U,U#n#t!gQ!aP#]7[up$_!b!``!oWOX'VXZ(wZ['V[^(w^p'Vpq(wqr5brs(wst5btuK|uv5bvw7uwx(wx}5b}!O%Ev!O!P%JZ!P!Q'V!Q![%Ny![!]'V!]!^5b!^!_:Q!_!a(w!a!c5b!c!}&,a!}#R5b#R#S%Ny#S#T>y#T#o&,a#o#p*}#p#q'V#q#rBu#r#s5b#s$f'V$f$g5b$g$}K|$}%O%Ny%O%WK|%W%o%Ny%o%pK|%p&a%Ny&a&bK|&b1p%Ny1p4U%Ny4U4d%Ny4d4eK|4e$IS%Ny$IS$I`K|$I`$Ib%Ny$Ib$JeK|$Je$Jg%Ny$Jg$KhK|$Kh%#t%Ny%#t&/xK|&/x&Et%Ny&Et&FVK|&FV;'S%Ny;'S;:j&%g;:j;=`!&h<%l?&rK|?&r?Ah%Ny?Ah?BY!&n?BY?Mn%Ny?MnO!&n$3a&1WSb$3P!``O#q)q#r;'S)q;'S;=`*S<%lO)q$3a&1sg#TW!aP#]7[$mMh$o!LQ!``OX'VXZ(wZ['V[^(w^p'Vpq(wqr'Vrs(wsv'Vvw*}wx(wx!^'V!^!_)q!_!a(w!a#S'V#S#T(w#T#o'V#o#p*}#p#q'V#q#r-b#r;'S'V;'S;=`.}<%lO'V$FX&3oog#f!p&j#U,U!aP#]7[$mMh$o!LQ!oWOX-bXZ*YZ[-b[^*Y^p-bpq*YqrBurs*YsvBuvw<ywx*Yx!PBu!P!Q-b!Q![Bu![!]-b!]!^Bu!^!_;q!_!a*Y!a#SBu#S#T@u#T#oBu#o#p,a#p#q-b#q#sBu#s$f-b$f;'SBu;'S;=`ET<%l?AhBu?Ah?BY-b?BY?MnBu?MnO-b$F]&5sP;=`<%l%AU$FZ&5yP;=`<%lHx$5a&6aqeS!aP#]7[up$mMh$o!LQ$_!b!``OX'VXZ(wZ['V[^(w^p'Vpq(wqr'Vrs(wst'Vtu!&nuv'Vvw*}wx(wx!O'V!O!P!$O!P!Q'V!Q![!&n![!^'V!^!_)q!_!a(w!a!c'V!c!}!&n!}#R'V#R#S!&n#S#T(w#T#o!&n#o#p*}#p#q'V#q#r-b#r$g'V$g;'S!&n;'S;=`!)U<%lO!&n\",\n  tokenizers: [scriptTokens, styleTokens, textareaTokens, tagStart, commentContent, longExpression, shortExpression, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],\n  topRules: {\"Document\":[0,15]},\n  specialized: [{term: 19, get: value => spec_BlockPrefix[value] || -1},{term: 21, get: value => spec_BlockType[value] || -1},{term: 153, get: value => spec_identifier[value] || -1},{term: 77, get: value => spec_AttributeName[value] || -1},{term: 69, get: value => spec_TagName[value] || -1}],\n  tokenPrec: 1571\n});\n\nfunction getAttrs(element, input) {\n  let attrs = Object.create(null);\n  for (let att of element.firstChild.getChildren(\"Attribute\")) {\n    let name = att.getChild(\"AttributeName\"),\n      value = att.getChild(\"AttributeValue\") || att.getChild(\"UnquotedAttributeValue\");\n    if (name)\n      attrs[input.read(name.from, name.to)] = !value\n        ? \"\"\n        : value.name == \"AttributeValue\"\n        ? input.read(value.from + 1, value.to - 1)\n        : input.read(value.from, value.to);\n  }\n  return attrs\n}\n\nfunction maybeNest(node, input, tags) {\n  let attrs;\n  for (let tag of tags) {\n    if (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(node.node.parent, input))))\n      return { parser: tag.parser }\n  }\n  return null\n}\n\nconst expressionParser = /*@__PURE__*/parser$1.configure({ top: \"SingleExpression\" });\n\n// tags: {\n//   tag: \"script\" | \"style\" | \"textarea\",\n//   attrs?: ({[attr: string]: string}) => boolean,\n//   parser: Parser\n// }[]\n\nfunction configureNesting(tags) {\n  let script = [],\n    style = [],\n    textarea = [];\n  for (let tag of tags) {\n    let array =\n      tag.tag == \"script\"\n        ? script\n        : tag.tag == \"style\"\n        ? style\n        : tag.tag == \"textarea\"\n        ? textarea\n        : null;\n    if (!array)\n      throw new RangeError(\n        \"Only script, style, and textarea tags can host nested parsers\"\n      )\n    array.push(tag);\n  }\n  return parseMixed((node, input) => {\n    let id = node.type.id;\n    if (id === LongExpression) return { parser: expressionParser }\n    if (id === ShortExpression) return { parser: expressionParser }\n    if (id === ScriptText) return maybeNest(node, input, script)\n    if (id === StyleText) return maybeNest(node, input, style)\n    if (id === TextareaText) return maybeNest(node, input, textarea)\n    return null\n  })\n}\n\nconst defaultNesting = [\n    {\n        tag: \"script\",\n        attrs: attrs => attrs.type === \"text/typescript\" || attrs.lang === \"ts\",\n        parser: typescriptLanguage.parser\n    },\n    {\n        tag: \"script\",\n        attrs(attrs) {\n            return (!attrs.type ||\n                /^(?:text|application)\\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(attrs.type));\n        },\n        parser: javascriptLanguage.parser\n    },\n    {\n        tag: \"style\",\n        attrs(attrs) {\n            return ((!attrs.lang || attrs.lang === \"css\" || attrs.lang === \"scss\") &&\n                (!attrs.type || /^(text\\/)?(x-)?(stylesheet|css|scss)$/i.test(attrs.type)));\n        },\n        parser: cssLanguage.parser\n    }\n];\nconst svelteLanguage = /*@__PURE__*/LRLanguage.define({\n    // @ts-expect-error\n    parser: /*@__PURE__*/parser.configure({\n        wrap: /*@__PURE__*/configureNesting(defaultNesting),\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                \"Element\": context => {\n                    let after = /^(\\s*)(<\\/)?/.exec(context.textAfter);\n                    if (context.node.to <= context.pos + after[0].length)\n                        return context.continue();\n                    return context.lineIndent(context.node.from) + (after[2] ? 0 : context.unit);\n                },\n                \"Block\": context => {\n                    const node = context.node;\n                    const text = context.textAfter.trim();\n                    if (text.startsWith(\"{/\")) {\n                        const name = node.name;\n                        if ((name === \"IfBlock\" && text.startsWith(\"{/if\")) ||\n                            (name === \"EachBlock\" && text.startsWith(\"{/each\")) ||\n                            (name === \"AwaitBlock\" && text.startsWith(\"{/await\")) ||\n                            (name === \"KeyBlock\" && text.startsWith(\"{/key\"))) {\n                            return context.lineIndent(context.node.from);\n                        }\n                        return null;\n                    }\n                    if (node.name === \"IfBlock\" || node.name === \"EachBlock\") {\n                        if (text.startsWith(\"{:else\"))\n                            return context.lineIndent(node.from);\n                    }\n                    else if (node.name === \"AwaitBlock\") {\n                        if (text.startsWith(\"{:then\"))\n                            return context.lineIndent(node.from);\n                        if (text.startsWith(\"{:catch\"))\n                            return context.lineIndent(node.from);\n                    }\n                    // not sure if this needed to be duplicated\n                    let after = /^(\\s*)(<\\/)?/.exec(context.textAfter);\n                    if (context.node.to <= context.pos + after[0].length)\n                        return context.continue();\n                    return context.lineIndent(context.node.from) + (after[2] ? 0 : context.unit);\n                },\n                \"BlockOpen BlockClose BlockInline\": context => {\n                    return context.column(context.node.from) + context.unit;\n                },\n                \"OpenTag CloseTag SelfClosingTag\": context => {\n                    return context.column(context.node.from) + context.unit;\n                },\n                \"Document\": context => {\n                    if (context.pos + /\\s*/.exec(context.textAfter)[0].length < context.node.to) {\n                        return context.continue();\n                    }\n                    let endElt = null;\n                    let close;\n                    for (let cur = context.node;;) {\n                        let last = cur.lastChild;\n                        if (!last || last.name != \"Element\" || last.to != cur.to)\n                            break;\n                        endElt = cur = last;\n                    }\n                    if (endElt &&\n                        !((close = endElt.lastChild) &&\n                            (close.name === \"CloseTag\" || close.name === \"SelfClosingTag\"))) {\n                        return context.lineIndent(endElt.from) + context.unit;\n                    }\n                    return null;\n                }\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                \"Block\": node => {\n                    const open = `${node.name}Open`;\n                    const close = `${node.name}Close`;\n                    const first = node.firstChild;\n                    const last = node.lastChild;\n                    if (!first || first.name !== open)\n                        return null;\n                    return { from: first.to, to: (last === null || last === void 0 ? void 0 : last.name) === close ? last.from : node.to };\n                },\n                \"Element\": node => {\n                    let first = node.firstChild;\n                    let last = node.lastChild;\n                    if (!first || first.name != \"OpenTag\")\n                        return null;\n                    return { from: first.to, to: last.name === \"CloseTag\" ? last.from : node.to };\n                }\n            })\n        ]\n    }),\n    languageData: {\n        commentTokens: { block: { open: \"<!--\", close: \"-->\" } },\n        indentOnInput: /^\\s*((<\\/\\w+\\W)|(\\{:(else|then|catch))|(\\{\\/(if|each|await|key)))$/,\n        wordChars: \"-._\",\n        autocomplete: htmlCompletionSource\n    }\n});\nfunction svelte() {\n    return new LanguageSupport(svelteLanguage, [\n        javascript().support,\n        css().support,\n        autoCloseTags\n    ]);\n}\n// unfortunately the HTML language explicitly checks for the language type,\n// so we have to duplicate the entire autoCloseTags extension\nfunction elementName(doc, tree, max = doc.length) {\n    if (!tree)\n        return \"\";\n    let tag = tree.firstChild;\n    let name = tag &&\n        (tag.getChild(\"TagName\") ||\n            tag.getChild(\"ComponentName\") ||\n            tag.getChild(\"SvelteElementName\"));\n    return name ? doc.sliceString(name.from, Math.min(name.to, max)) : \"\";\n}\nconst autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text) => {\n    if (view.composing ||\n        view.state.readOnly ||\n        from != to ||\n        (text != \">\" && text != \"/\") ||\n        !svelteLanguage.isActiveAt(view.state, from, -1))\n        return false;\n    let { state } = view;\n    let changes = state.changeByRange(range => {\n        var _a, _b, _c;\n        let { head } = range;\n        let around = syntaxTree(state).resolveInner(head, -1);\n        let name;\n        if (around.name === \"TagName\" ||\n            around.name === \"ComponentName\" ||\n            around.name === \"SvelteElementName\" ||\n            around.name === \"StartTag\") {\n            around = around.parent;\n        }\n        if (text === \">\" && around.name === \"OpenTag\") {\n            if (((_b = (_a = around.parent) === null || _a === void 0 ? void 0 : _a.lastChild) === null || _b === void 0 ? void 0 : _b.name) != \"CloseTag\" &&\n                (name = elementName(state.doc, around.parent, head))) {\n                let hasRightBracket = view.state.doc.sliceString(head, head + 1) === \">\";\n                let insert = `${hasRightBracket ? \"\" : \">\"}</${name}>`;\n                return {\n                    range: EditorSelection.cursor(head + 1),\n                    changes: { from: head + (hasRightBracket ? 1 : 0), insert }\n                };\n            }\n        }\n        else if (text === \"/\" && around.name === \"OpenTag\") {\n            let empty = around.parent, base = empty === null || empty === void 0 ? void 0 : empty.parent;\n            if (empty.from == head - 1 &&\n                ((_c = base.lastChild) === null || _c === void 0 ? void 0 : _c.name) != \"CloseTag\" &&\n                (name = elementName(state.doc, base, head))) {\n                let hasRightBracket = view.state.doc.sliceString(head, head + 1) === \">\";\n                let insert = `/${name}${hasRightBracket ? \"\" : \">\"}`;\n                let pos = head + insert.length + (hasRightBracket ? 1 : 0);\n                return { range: EditorSelection.cursor(pos), changes: { from: head, insert } };\n            }\n        }\n        return { range };\n    });\n    if (changes.changes.empty)\n        return false;\n    view.dispatch(changes, { userEvent: \"input.type\", scrollIntoView: true });\n    return true;\n});\n\nexport { svelte, svelteLanguage, parser as svelteParser };\n","import { ExternalTokenizer, LRParser } from '@lezer/lr';\nimport { LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst interpStringContent = 296,\n  interpStringBrace = 297,\n  interpStringEnd = 298,\n  interpVStringContent = 299,\n  interpVStringBrace = 300,\n  interpVStringEnd = 301;\n\nconst quote = 34, backslash = 92, braceL = 123, braceR = 125;\nconst interpString = /*@__PURE__*/new ExternalTokenizer((input) => {\n    for (let i = 0;; i++) {\n        switch (input.next) {\n            case -1:\n                if (i > 0)\n                    input.acceptToken(interpStringContent);\n                return;\n            case quote:\n                if (i > 0)\n                    input.acceptToken(interpStringContent);\n                else\n                    input.acceptToken(interpStringEnd, 1);\n                return;\n            case braceL:\n                if (input.peek(1) === braceL)\n                    input.acceptToken(interpStringContent, 2);\n                else\n                    input.acceptToken(interpStringBrace);\n                return;\n            case braceR:\n                if (input.peek(1) === braceR)\n                    input.acceptToken(interpStringContent, 2);\n                return;\n            case backslash:\n                const next = input.peek(1);\n                if (next === braceL || next === braceR)\n                    return;\n                input.advance();\n            // FALLTHROUGH\n            default:\n                input.advance();\n        }\n    }\n});\nconst interpVString = /*@__PURE__*/new ExternalTokenizer((input) => {\n    for (let i = 0;; i++) {\n        switch (input.next) {\n            case -1:\n                if (i > 0)\n                    input.acceptToken(interpVStringContent);\n                return;\n            case quote:\n                if (input.peek(1) === quote)\n                    input.acceptToken(interpVStringContent, 2);\n                else if (i > 0)\n                    input.acceptToken(interpVStringContent);\n                else\n                    input.acceptToken(interpVStringEnd, 1);\n                return;\n            case braceL:\n                if (input.peek(1) === braceL)\n                    input.acceptToken(interpVStringContent, 2);\n                else\n                    input.acceptToken(interpVStringBrace);\n                return;\n            case braceR:\n                if (input.peek(1) === braceR)\n                    input.acceptToken(interpVStringContent, 2);\n                return;\n            default:\n                input.advance();\n        }\n    }\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_identifier = {__proto__:null,extern:10, alias:12, using:16, void:626, sbyte:626, byte:626, short:626, ushort:626, int:626, uint:626, long:626, ulong:626, nint:626, nuint:626, char:626, float:626, double:626, bool:626, decimal:626, string:626, object:626, dynamic:626, global:54, static:56, namespace:58, true:662, false:662, null:664, await:112, throw:114, ref:140, in:158, out:160, scoped:162, var:164, this:168, base:170, new:174, typeof:190, sizeof:194, checked:198, unchecked:202, default:204, nameof:206, switch:210, _:215, not:231, and:233, or:235, when:246, with:250, async:252, delegate:254, readonly:264, const:272, unsafe:278, params:283, where:284, class:286, struct:288, notnull:290, unmanaged:292, if:294, else:296, case:300, while:302, do:304, for:306, foreach:310, break:314, continue:316, goto:318, return:320, try:322, catch:324, finally:328, lock:330, yield:334, fixed:336, stackalloc:342, as:364, is:366, from:387, let:389, join:391, on:393, equals:395, into:397, orderby:399, ascending:401, descending:403, select:405, group:407, by:409, public:412, protected:414, internal:416, private:418, virtual:420, sealed:422, override:424, abstract:426, volatile:428, partial:430, required:432, file:435, get:442, set:444, init:446, event:448, add:453, remove:455, operator:458, implicit:464, explicit:466, interface:470, record:476, enum:478};\nconst parser$1 = /*@__PURE__*/LRParser.deserialize({\n  version: 14,\n  states: \"&E`O#`QSOOOOQO'#Hh'#HhO#gQSO'#IyOOQO'#Hi'#HiO%kQSO'#IyO%rQSO'#NiOOQO'#If'#IfO'fQSO'#NiOOQO'#J['#J[OOQO'#JX'#JXOOQO'#Ho'#HoO*|QSO'#IyQOQSOOO+TQSO'#MaO,wQSO'#I|O-PQSO'#I|O,zQSO'#JYO-UQSO'#C}OOQO'#Ma'#MaO-ZQSO'#NiO,zQSO'#NkOOQO'#Hq'#HqO,zQSO'#J]O,zQSO'#NYO,zQSO'#N^O-cQSO'#NqOOQO-E;f-E;fO-nQSO,5?eO-uQSO,5?eOOQO-E;g-E;gOOQO-E;o-E;oO-|QSO,5DTO/mQSO,5DTO,zQSO,5DVO,zQSO,5?wO,zQSO,5CtO,zQSO,5CxO-cQSO,5D]OOQO-E<d-E<dOOQO-E;m-E;mO/uQSO,5?fOOQO'#Ce'#CeO/zQSO,5?hO0]QSO'#I}O1TQSO,5?hO,zQSO,5?hO1YQSO,5?hO1bQSO'#JZO3hQSO,5?tO5kQSO,59iO6SQSO'#I}O6^QSO'#J^O6fQSO'#J_O6qQSO,59iO7[QSO,5DTO,zQSO,5DTO7cQSO,5DVO7kQSO,5?wO7yQSO,5CtO8XQSO,5CxOOQO'#Ch'#ChO8gQSO'#JQO-cQSO'#CkOOQO'#JS'#JSO,zQSO,5D]P8rQSO'#IzO8wQSO1G5PO9OQSO1G9oO,zQSO1G9qO,zQSO1G5cO,zQSO1G9`O,zQSO1G9dO-cQSO1G9wO9WQSO1G9oO,zQSO1G9oO7cQSO1G9qO9_QSO1G5cO9mQSO1G9`O9{QSO1G9dO,zQSO1G9wO:ZQSO1G5QO,zQSO'#JWO,zQSO,59aOOQO,5?i,5?iO:`QSO,5?iO-cQSO'#JOO,zQSO1G5SOOQO1G5S1G5SO;WQSO1G5SO,zQSO'#HpO;]QSO,5?uO=cQSO'#C|OOQO1G5`1G5`O=jQSO1G5`O,zQSO1G/TO,zQSO'#IeO?jQSO,5?xOB[QSO'#DPOOQO,5?y,5?yOOQO1G/T1G/TOBcQSO1G/TOCYQSO'#F^OOQO'#I]'#I]OCaQSO1G9oOExQSO'#HOO,zQSO'#LXO,zQSO'#NjOOQO1G9o1G9oOFPQSO1G9oOCaQSO1G9oOFXQSO'#LSOFaQSO1G9oOHvQSO1G9oO-fQSO'#NlOIRQSO'#HfOOQO'#Nm'#NmOOQO1G9q1G9qOI^QSO1G9qOIcQSO1G5cOIkQSO1G5cO,zQSO1G5cO9bQSO1G5cOLQQSO1G9`ON`QSO'#H`ONgQSO1G9`O,zQSO1G9`O9pQSO1G9`O!!|QSO1G9dO!#jQSO'#HbO!#qQSO'#N_O!$PQSO1G9dO,zQSO1G9dO:OQSO1G9dO!&fQSO'#JUOOQO'#Hk'#HkO!'YQSO,5?lOOQO'#Hm'#HmO!'jQSO'#JVOOQO'#JV'#JVOOQO,5?l,5?lO!(_QSO,59YO!(gQSO,59VO!(lQSO1G9wO!(tQSO7+/ZO,zQSO7+/ZO7cQSO7+/]O!({QSO7+*}O!)ZQSO7+.zO!)iQSO7+/OO,zQSO7+/cO!)wQSO7+/ZOOQO7+/Z7+/ZO!*YQSO7+/ZO!)wQSO7+/ZO!*bQSO7+/ZO!,wQSO7+/ZOOQO7+/]7+/]OI^QSO7+/]OIcQSO7+*}O!-SQSO7+*}O,zQSO7+*}O!)OQSO7+*}OLQQSO7+.zO!/iQSO7+.zO,zQSO7+.zO!)^QSO7+.zO!!|QSO7+/OO!2OQSO7+/OO,zQSO7+/OO!)lQSO7+/OO!(lQSO7+/cOOQO7+*l7+*lO!4eQSO,5?rO!5`QSO1G.{OOQO1G5T1G5TO!6^QSO'#JPO!6iQSO,5?jO!6nQSO7+*nOOQO7+*n7+*nOOQO,5>[,5>[OOQO-E;n-E;nO!6sQSO,59hO!6zQSO,59hOOQO,59h,59hO!7RQSO,59hOOQO7+*z7+*zO!7YQSO7+$oOOQO,5?P,5?POOQO-E<c-E<cO!:|QSO'#CeO!;TQSO'#JQO!;cQSO'#I}OOQO'#DR'#DROOQO'#DW'#DWOOQO'#Jd'#JdO!>WQSO'#DeO!>hQSO'#DZOOQO'#DZ'#DZO!AnQSO'#JaO!DqQSO'#JaO!FuQSO'#JiOOQO'#Ji'#JiO!GPQTO'#DXO!G[QUO'#DuOOQO'#Jg'#JgOOQO'#Jc'#JcO!GgQSO'#JbOOQO'#Jb'#JbO#!PQSOOO#'RQSO'#GbOOQO'#MQ'#MQOOQO'#MP'#MPO#(nQSO'#GcO#(sQSO'#GcOOQO'#Ja'#JaO!>hQSO'#J`O#({QSO'#J`OOQO,59k,59kO#)QQSO,59kO!>hQSO'#DdO#)VQSO'#DZO!>hQSO'#DZOOQO'#Dy'#DyO#*sQSO'#JxO#*{QSO'#L}O#+ZQSO'#KpO#+iQSO'#GcO#+tQSO'#MTO#,PQSO'#JaO#/QQSO'#JaO#0WQSO'#JvO#0`QSO'#EUO#0qQSO'#KpO#0yQSO'#JcO#1OQSO'#JcO#1TQSO'#JcO#1YQSO'#JcOOQO7+$o7+$oOOQO'#LV'#LVO#(vQSO'#LUO-cQSO'#LUOOQO,5;x,5;xO#1_QSO,5;xO#2RQSO'#LUOOQO'#LW'#LWO#2nQSO'#LVO-cQSO'#LUO#2YQSO'#LVOOQO-E<Z-E<ZO#2uQSO'#I}O#3^QSO'#MwO#3tQSO'#MwO#4bQSO'#MwO,zQSO'#NWOOQO'#Mc'#McOOQO'#Ih'#IhO#4jQSO,5=jOOQO,5=j,5=jO-cQSO'#MdO#4qQSO'#MeO-cQSO'#MsO#4yQSO'#MfO#5XQSO'#NTO#5dQSO,5AsO#5iQSO,5DUOFXQSO'#LTO#5wQSO'#LTO#6PQSO,5AnOOQO,5DW,5DWOOQO'#FZ'#FZO#6UQSO'#NoO#6^QSO'#NoO#6iQSO'#NnO#6qQSO,5>RO#6vQSO,5>QOOQO7+*}7+*}O#7OQSO'#MbOIcQSO7+*}O#7ZQSO'#MwO#7qQSO'#MwOOQO'#NZ'#NZOOQO'#Ii'#IiO#8_QSO,5=zOOQO,5=z,5=zO-cQSO'#N[OOQO7+.z7+.zOLQQSO7+.zO#8fQSO'#NeOOQO'#Nc'#NcOOQO'#Il'#IlO#8zQSO,5=|OOQO,5=|,5=|O#9RQSO'#NeO-cQSO'#NgO#9ZQSO'#NeO!#qQSO'#NaO#9iQSO'#N`OOQO'#Nb'#NbOOQO'#Na'#NaO,zQSO'#NaO#9qQSO,5CyOOQO7+/O7+/OO!!|QSO7+/OOOQO'#Hl'#HlO#9vQSO,5?pOOQO,5?p,5?pOOQO-E;i-E;iOOQO1G5W1G5WOOQO-E;k-E;kOOQO'#Cl'#ClO#:OQSO,5?oO-cQSO1G.tOOQO1G.q1G.qO#:WQSO7+/cO!(oQSO7+/cO#:`QSO<=$uOOQO<=$u<=$uO#:qQSO<=$uO#:`QSO<=$uO#:yQSO<=$uO#=`QSO<=$uO#=kQSO<=$uOOQO<=$w<=$wOI^QSO<=$wOIcQSO<<NiO#=rQSO<<NiO,zQSO<<NiO#@XQSO<<NiOLQQSO<=$fO#@dQSO<=$fO,zQSO<=$fO#ByQSO<=$fO!!|QSO<=$jO#CUQSO<=$jO,zQSO<=$jO#EkQSO<=$jO!(lQSO<=$}OOQO<<Ni<<NiOIcQSO<<NiOOQO<=$f<=$fOLQQSO<=$fOOQO<=$j<=$jO!!|QSO<=$jO#EvQSO<=$}O!(oQSO<=$}OOQO1G5^1G5^O#FOQSO1G5^OOQO7+$g7+$gO-cQSO'#HnO#FvQSO,5?kOOQO1G5U1G5UOOQO<<NY<<NYO#GRQSO1G/SOOQO1G/S1G/SO#GYQSO1G/SOOQO<<HZ<<HZO#GaQSO<<HZOOQO,59l,59lO#GfQSO,5@YOOQO,5@Y,5@YO#GkQSO,5@YO#GpQSO'#CeO#GzQSO,5:PO#HYQSO'#JmO!>hQSO'#JmO#HdQSO'#KrO#HlQSO,5;lO#HqQSO'#MRO#H|QSO,5:fO-cQSO'#KsOOQO'#Kq'#KqO#IRQSO,5=OO$#vQSO'#CeOOQO,59u,59uO$$^QSO'#DrOOQO'#Jk'#JkO$$cQSO,5@UO$$mQSO'#D|O$%QQSO,5@`O$%VQSO,5BhO$%[QSO,5@xO$%aQSO,5AZOOQO,5?},5?}OOQO,5@b,5@bO#0ZQSO,5@bO?rQSO,5?zOOQP'#Jh'#JhO!>hQSO'#JhOOQP'#Hr'#HrO$%fQTO,59sOOQO,59s,59sOOQQ'#Jl'#JlO!>hQSO'#JlOOQQ'#Ht'#HtO$%qQUO,5:aOOQO,5:a,5:aO$%|QSO,5@cO$$pQSO'#ERO$&RQSO,5<oO!>hQSO,5<oO!>hQSO,5<oO!>hQSO,5<oO!>hQSO,5<oO!>hQSO,5<oO!>hQSO,5<oO!>hQSO,5<oO!>hQSO,5<oO!>hQSO,5<oO!>hQSO,5<oO!>hQSO,5<oO!>hQSO,5<oO$)wQSO,5<|O-cQSO,5<oO$+dQSO,5<oOOQO,5<|,5<|O$,nQSO,5<}OOQO'#FR'#FRO$,xQSO'#FQO$-^QSO,5<}O$-cQSO,5?zO!>hQSO,5?zOOQO1G/V1G/VOOQO,5:O,5:OO$-mQSO'#CeO$-tQSO'#CuO$1eQSO,59uO!;^QSO'#JnO$$yQSO'#DzO$4SQSO'#KpO$4XQSO,59uO$%VQSO,5@dOOQO,5@d,5@dO$5tQSO'#JzO$6VQSO'#GPO$6aQSO,5BiO$6fQSO,5BiO$7SQSO'#CeO$,xQSO'#FQO#(sQSO,5<}O#0qQSO,5A[O$7rQSO,5BoO$7yQSO,5BoOOQO'#MW'#MWOOQO'#MV'#MVO#,PQSO'#MUOOQO'#M]'#M]O$:bQSO'#MUO$;RQSO'#MXO$;WQSO'#MYO!>hQSO'#M^OOQO,5?{,5?{O$;cQSO'#MWO!>hQSO'#MWO!>hQSO'#M]O-cQSO'#EbO$$mQSO'#D|O$?iQSO'#E]OOQO'#KU'#KUO$?pQSO,5:pO$ExQSO,5:pO$FTQSO,5<mO$FkQSO'#FQO$JpQSO'#FSOOQO,5A[,5A[O#0tQSO,5A[O-cQSO'#E`O!>hQSO'#EdO$JwQSO'#EhO$KVQSO,5ApO#(vQSO,5ApOOQO1G1d1G1dO-cQSO,5ApO-cQSO,5ApOOQO,5Aq,5AqO$KeQSO,5AqO$KyQSO,5ApO$LOQSO,5CpO$LTQSO,5CcO-cQSO,5COO#4qQSO,5CPO-cQSO,5C_O#4bQSO,5CcO,zQSO,5CrO#4yQSO,5CQO#5XQSO,5CoOOQO'#M}'#M}O$LqQSO,5ChO$L|QSO,5CPO$MXQSO'#NRO$MrQSO'#HQO$MyQSO'#M{OOQO,5Cc,5CcOOQO'#M{'#M{O$NTQSO,5CrOOQO-E<f-E<fOOQO1G3U1G3UO#6XQSO,5COO$NqQSO'#CeO% OQSO'#MhO% ZQSO'#K{O% iQSO'#KzO% tQSO'#MhO% yQSO'#MhOOQO'#Mk'#MkO%!RQSO,5CPO%!WQSO,5CUOOQO'#My'#MyO%!`QSO,5CdO!(oQSO,5CRO%!eQSO,5C_O#4yQSO,5CQO%!jQSO'#NSOOQO'#NS'#NSOOQO,5CQ,5CQO!>hQSO'#NXOOQO'#NX'#NXOOQO,5Co,5CoO%#YQSO1G7_O%#aQSO1G9pO,zQSO'#ImO%#aQSO1G9pO%#lQSO,5AoO%#lQSO,5AoOFXQSO'#I[OOQO1G7Y1G7YO%#tQSO,5DZO!>hQSO,5DZO#6UQSO'#InO%$PQSO,5DYO%$XQSO1G3mOOQO1G3l1G3lO%$^QSO,5B|O,zQSO'#IgO%$iQSO,5CcO-cQSO,5CvOOQO-E<g-E<gOOQO1G3f1G3fO%%VQSO,5CvO%%[QSO,5DPO-cQSO,5DRO%%dQSO,5DPOOQO-E<j-E<jOOQO1G3h1G3hO%%rQSO'#D{O%%}QSO,5DPO%!`QSO,5DSO%&SQSO,5DOO%&[QSO,5DROOQO,5C{,5C{O,zQSO,5C{O!#qQSO'#IkO%&aQSO,5CzOOQO1G9e1G9eOOQO-E;j-E;jOOQO1G5[1G5[O-cQSO'#HjO%&iQSO1G5ZO%&qQSO7+$`O#EvQSO<=$}OOQO<=$}<=$}OOQOANHaANHaO%&vQSOANHaO%'OQSOANHaO%)eQSOANHaO%)pQSOANHaO%)pQSOANHaOOQOANHcANHcO%*RQSOANDTOOQOANDTANDTOIcQSOANDTOIcQSOANDTO,zQSOANDTO%,hQSOANHQOOQOANHQANHQOLQQSOANHQOLQQSOANHQO,zQSOANHQO%.}QSOANHUOOQOANHUANHUO!!|QSOANHUO!!|QSOANHUO,zQSOANHUO%1dQSOANHiO!(oQSOANHiO%1dQSOANHiOOQOANHiANHiOOQO7+*x7+*xOOQO,5>Y,5>YOOQO-E;l-E;lOOQO7+$n7+$nO%1lQSO7+$nOOQOAN=uAN=uO%1sQSO'#ClOOQO1G5t1G5tO#0WQSO,5@ZO%:cQSO'#CeO%:vQSO'#ClOOQO1G/k1G/kO%;XQSO,5A_O$$yQSO'#HuO%;dQSO,5@XO%;lQSO,5@XO$FYQSO'#IUO%;vQSO,5A^OOQO1G1W1G1WO#(vQSO'#IcO%<OQSO,5BmOOQO1G0Q1G0QO#(vQSO,5A_OOQO1G2j1G2jOOQO,5:^,5:^O%<WQSO1G5pO!>hQSO1G5pO%=sQSO'#JrOOQO'#Jq'#JqO%>QQSO'#JqO%>bQSO'#JpOOQO,5:h,5:hO!>hQSO'#JrO%>mQSO'#JrO%?OQSO,5:hO#GfQSO1G5zO%?TQSO1G5zO%GmQSO'#JyOOQO1G8S1G8SO&#aQSO'#EjOOQO1G6d1G6dO&#kQSO'#EWOOQO'#J|'#J|OOQO1G6u1G6uOOQO1G5|1G5|OOQO1G5f1G5fO&#vQSO,5@SOOQP-E;p-E;pOOQO1G/_1G/_O&$TQSO,5@WOOQQ-E;r-E;rOOQO1G/{1G/{O&$bQSO1G5}O&,zQSO,5:mOOQO,5<s,5<sO&/xQSO1G2ZO&3OQSO1G2ZO&6OQSO1G2ZO&6YQSO1G2ZO&9]QSO1G2ZO&9gQSO1G2ZO&<mQSO1G2ZO&<tQSO1G2ZO&?wQSO1G2ZO&@OQSO1G2ZO&AsQSO1G2ZO&CYQSO1G2ZOOQO1G2h1G2hOOQO1G2Z1G2ZO&CaQSO'#CeO&GWQSO'#JQO&GfQSO'#KcO'!RQSO'#EnO'!ZQSO'#KdO$+dQSO'#EpO'!fQSO'#EvO'+RQSO'#EyOOQO'#Kb'#KbO'+]QSO'#CkOOQO'#Em'#EmO',gQSO'#KdO$+dQSO'#ErO',rQSO1G2ZO'-iQSO'#KkO'6UQSO'#ExO'>qQSO'#MSOOQO1G2i1G2iOOQO'#MS'#MSO#(vQSO'#KsO'@^QSO'#MRO$,nQSO1G2iO?rQSO1G5fO'@fQSO1G5fOOQO1G6O1G6OOOQO,5@f,5@fOOQO,5<k,5<kO'@mQSO,5<kO!>hQSO'#GOOOQO1G8T1G8TO!>hQSO'#GQO#HQQSO,59YO'@tQSO1G2iOOQO1G6v1G6vO#0tQSO1G6vO$;cQSO1G8ZO'@yQSO1G8ZOOQO,5Bq,5BqO'CbQSO,5BpOOQO,5Bp,5BpO'DRQSO'#M_O'DWQSO,5BsO'D]QSO,5BtO'DdQSO,5BtO'DiQSO,5BxO'FWQSO,5BrO'FqQSO'#MZOOQO,5Br,5BrO'F{QSO,5BwO'HhQSO,5:|O'HmQSO,59YO'IpQSO'#CeO'JoQSO'#JnOOQO'#KX'#KXO'KkQSO'#KXO'KuQSO'#KWO'K}QSO,5:wO'LSQSO,5:xO'L[QSO'#EWOOQO'#J{'#J{OOQO1G0[1G0[O'LoQSO'#JUO'L|QSO1G2XO'MUQSO1G0[O((`QSO1G2XO()iQSO'#FVOOQO'#K}'#K}OOQO1G2X1G2XO()vQSO'#CeO$$yQSO'#DeO(,jQSO'#LaO(,tQSO'#JjOOQO'#Kx'#KxO(-lQSO'#LRO(.WQSO'#F[OOQO'#Kw'#KwOOQO'#L`'#L`O(.`QSO'#L`OOQO'#Lb'#LbOOQO'#Lg'#LgOOQO'#Ln'#LnOOQO'#L_'#L_OOQO'#Ku'#KuOOQO'#IV'#IVO(/cQSO,5;nOOQO,5;n,5;nO#)VQSO'#DZO(/jQSO'#DZO(/tQSO'#FTO',gQSO'#FTO(0SQSO'#FTO-cQSO'#FXO(0XQSO'#IZOOQO'#IZ'#IZO#1TQSO'#LcO#1TQSO'#LhO(0vQSO'#LiO(4_QSO'#LjO(4dQSO'#LmO(4iQSO'#DZO(4sQSO'#LoO(5OQSO'#LpO#1TQSO'#LuO(5]QSO'#LvO(5bQSO'#LxO(5jQSO'#LyO(5oQSO'#L_O#0WQSO'#JvO(5tQSO'#KyO(6[QSO'#KyO(6iQSO'#KxO#1TQSO'#LdO(6}QSO'#LnO#0tQSO'#LrO#1TQSO'#L_O(7SQSO,5:zO(7hQSO,5:zO(7mQSO,5;OO(7tQSO'#CeOOQO'#K]'#K]O(8SQSO'#K[O(8[QSO,5;SOBhQSO1G7[O!>hQSO1G7[O(8aQSO1G7[O#(vQSO1G7[O$KyQSO1G7[OOQO1G7]1G7]O(8oQSO1G7[O(8wQSO'#NVOOQO1G9[1G9[O-cQSO1G8jO$L|QSO1G8kO-cQSO1G8yO#4bQSO1G8}O$LqQSO1G9SO,zQSO1G9^O#4yQSO1G8lO#5XQSO1G9ZO#6XQSO1G8jO(9PQSO1G8kO%!WQSO1G8pO%!eQSO1G8yOOQO1G8}1G8}O(9UQSO1G9^O#4yQSO1G8lOOQO1G8l1G8lOOQO1G9Z1G9ZOOQO1G9S1G9SO(9ZQSO,5CjO-cQSO,5CmO(;PQSO'#MoO(;WQSO'#MnO(;_QSO'#MnO(;sQSO,5=lO(;xQSO'#MpO(<ZQSO'#MpO$LqQSO'#MoO(<iQSO'#MoO$LqQSO'#MqO(<tQSO,5CgO!>hQSO,5CgO(<{QSO1G9^O(=QQSO'#LQO(=VQSO'#LPO(=_QSO1G8jO(=dQSO'#MiOOQO,5CS,5CSO% tQSO,5CSOOQO,5CV,5CVOOQO,5Ce,5CeO(=lQSO,5AgO!(bQSO'#IXO(=yQSO,5AfOOQO1G8k1G8kO(>UQSO'#MmO(>`QSO'#MmOOQO1G8p1G8pOBhQSO'#HYOOQO1G9O1G9OOOQO1G8m1G8mO(AvQSO'#CeO(CcQSO'#MkO(CnQSO'#MkOOQO1G8y1G8yO(CsQSO1G8yO(CxQSO,5CnO!>hQSO,5CnO(DPQSO,5CsO(DWQSO'#LZOOQO'#LY'#LYO(DoQSO'#L[OOQO'#L['#L[O(EZQSO'#LYOOQO7+,y7+,yO(ErQSO'#L]OOQO-E<k-E<kOOQO,5?X,5?XO(EwQSO7+/[O(FSQSO1G7ZOOQO-E<Y-E<YOFXQSO,5>vOOQO,5>v,5>vO!>hQSO1G9uO(F[QSO1G9uOOQO,5?Y,5?YOOQO-E<l-E<lOOQO7+)X7+)XOOQO-E<e-E<eOOQO,5?R,5?RO-cQSO1G9bO%%VQSO1G9bO(FfQSO1G9bO$6aQSO'#N]O%%}QSO1G9kO%!`QSO1G9nO%&SQSO1G9jO%&[QSO1G9mO(FkQSO1G9kO-cQSO1G9mO(FsQSO'#HcOOQO1G9k1G9kO%%}QSO1G9nO(GOQSO1G9jO!(oQSO1G9jOOQO'#D{'#D{O(GWQSO1G9mOOQO1G9g1G9gOOQO,5?V,5?VOOQO-E<i-E<iO!(bQSO,5>UOOQO-E;h-E;hOOQO<<Gz<<GzOOQOG2={G2={O(G]QSOG2={O(IrQSOG2={O(IzQSOG2={O(JVQSOG2={OOQOG29oG29oOIcQSOG29oO(JhQSOG29oOIcQSOG29oOOQOG2=lG2=lOLQQSOG2=lO(L}QSOG2=lOLQQSOG2=lOOQOG2=pG2=pO!!|QSOG2=pO) dQSOG2=pO!!|QSOG2=pO)#yQSOG2>TOOQOG2>TG2>TO)#yQSOG2>TOOQO<<HY<<HYOOQO1G5u1G5uO#0ZQSO1G5uO)$RQSO,5>aO!>hQSO,5>aOOQO-E;s-E;sO)$]QSO1G5sOOQO,5>p,5>pOOQO-E<S-E<SOOQO,5>},5>}OOQO-E<a-E<aOOQO1G6y1G6yO)$eQSO7++[OOQO,5@],5@]O$$pQSO'#HvO)&QQSO,5@[O)&]QSO,5@^O)&jQSO'#CeOOQO'#Js'#JsOOQO,5@^,5@^O!(bQSO,5@^O)&wQSO,5@^OOQO1G0S1G0SO)'VQSO7++fO#GfQSO'#JuOOQO'#Ju'#JuOOQO'#Hw'#HwO)'VQSO7++fO#0ZQSO'#JuOOQO,5@e,5@eO)/oQSO'#KaO)/}QSO'#K`O)0VQSO,5;UOOQO'#K_'#K_OOQO'#EX'#EXO)0_QSO'#KOO)0dQSO'#J}O)0lQSO,5:tO)0qQSO,5:rOOQP1G5n1G5nO)0yQSO1G5nO)1OQSO1G5nOOQQ1G5r1G5rO)0yQSO1G5rO)1OQSO1G5rO)1dQSO7++iOOQO1G0X1G0XO!>hQSO7+'uO'+]QSO'#EwO)BfQSO,5AVO)BmQSO'#H}O)BrQSO,5@}O)K_QSO'#KjO)KgQSO'#EoO)KlQSO'#KiOOQO,5;Y,5;YO)KtQSO,5;YOOQO'#Kf'#KfOOQO,5AO,5AOO'!^QSO,5AOOOQO,5;[,5;[OOQO,5;b,5;bO)K|QSO'#KnO)LWQSO'#KmO)L`QSO'#KmOOQO,5;e,5;eO)LnQSO,5;eO)LvQSO'#CeO)MaQSO,59YO)MoQSO'#KlO&!VQSO'#KlO)M}QSO,5;cO)NSQSO'#ElOOQO'#Ke'#KeOOQO,5;^,5;^O$+dQSO,5;^O$+dQSO,5;^OOQO,5AV,5AVO)NbQSO,5AVOOQO,5;d,5;dOOQO,5A_,5A_OOQO7+(T7+(TOOQO7++Q7++QO)NiQSO7++QOOQO1G2V1G2VO)NnQSO,5<jO)NuQSO'#MOO* SQSO,5<lO$,nQSO7+(TOOQO7+,b7+,bO* XQSO7+-uO$;cQSO7+-uOOQO1G8[1G8[O#,PQSO,5ByO$;cQSO1G8_O!>hQSO1G8`O* rQSO1G8`O!>hQSO1G8dOOQO'#M['#M[O* wQSO,5BuOOQO1G0h1G0hO*!cQSO,5@sO*!mQSO,5@`O$={QSO'#H{O*!rQSO,5@rOOQO1G0c1G0cO*!zQSO1G0dO*#PQSO'#CeO*%wQSO'#JiO*&RQSO'#KRO*&ZQSO'#E[OOQO'#KS'#KSO*&eQSO,5:uO!>hQSO'#KSO*&mQSO,5<nOOQO7+'s7+'sOOQO7+%v7+%vO*)tQSO7+'sO**}QSO'#LOO*+XQSO'#LOOOQO,5;q,5;qO*+aQSO,5;qO$FrQSO,5AbO*+iQSO,5:PO*+wQSO,59uO*.QQSO,5@YO*/tQSO,5AzO*1hQSO,5@bO#0ZQSO,5@bOOQO-E<X-E<XO%&[QSO,5AmO-cQSO,5AmO*3[QSO'#L^OOQO,5;v,5;vOOQO'#L^'#L^OOQO-E<T-E<TOOQO1G1Y1G1YO*4yQSO,5:OO*5sQSO,59uO*6yQSO,59uOOQO,5B],5B]O!(bQSO,5;oO*;zQSO'#KfO*<UQSO,5;oOOQO,5;o,5;oO%&SQSO,5AmO#6XQSO,5;sOOQO,5Ay,5AyO(0vQSO,5A}O(0vQSO,5BSO$$yQSO'#DeO*<ZQSO,5BTOOQSO'#L_O*<`QSO'#FlO(0vQSO,5BUO*>nQSO'#FnO(0vQSO,5BXO*?PQSO,59uO(4dQSO,5BXO*?^QSO,5BZO!>hQSO,5BZO*?cQSO,5B[OOQO,5B[,5B[O!>hQSO,5B[O(0vQSO,5BaO*?jQSO'#FxO(0vQSO,5BbO!>hQSO,5BdO*?}QSO,5BdO-cQSO'#F{O(0vQSO,5BeO*@SQSO,5AeOOQO,5Ae,5AeO(5yQSO'#KyOOQO,5Ad,5AdO*@eQSO,5BOOOQO,5BY,5BYO*@jQSO,5B^O,zQSO'#JWO,zQSO,59aO*@rQSO'#KZO*ATQSO'#KYO*AcQSO1G0fOOQO1G0f1G0fOOQO1G0j1G0jO$%VQSO'#H|O*AhQSO,5@vOOQO1G0n1G0nOOQO7+,v7+,vO*ApQSO7+,vOBhQSO7+,vO!>hQSO7+,vO*A}QSO7+,vO(8oQSO7+,vO#0ZQSO,5CqO#6XQSO7+.UO*B]QSO7+.VO%!WQSO7+.[O%!eQSO7+.eOOQO7+.i7+.iOOQO7+.n7+.nO*BbQSO7+.xO#4yQSO7+.WOOQO7+.W7+.WOOQO7+.u7+.uO*BgQSO7+.UOOQO7+.V7+.VOOQO7+.[7+.[OOQO7+.e7+.eO(CsQSO7+.eO*BlQSO7+.xO*BqQSO1G9WO*ByQSO1G9UO*COQSO1G9UO*CTQSO1G9WO*COQSO1G9XO$LqQSO,5CZO*CYQSO,5CZO$LqQSO,5C]O(:kQSO'#MqOOQO,5CY,5CYO(:wQSO'#MqO*CeQSO'#MoO*CqQSO'#MoOOQO1G3W1G3WOOQO,5C[,5C[OOQO,5CZ,5CZOOQO,5C],5C]OOQO1G9R1G9RO*CvQSO1G9RO#5XQSO7+.xO!>hQSO,5AlO#6XQSO'#IYO*C}QSO,5AkOOQO7+.U7+.UO*DVQSO'#CeO*DkQSO,5CTO*DsQSO,5CTOOQO,5CW,5CWOOQO,5Cf,5CfOOQO1G8n1G8nOOQO1G8q1G8qOOQO1G9P1G9PO*D{QSO'#K|OOQO'#K|'#K|OOQO1G7R1G7RO()lQSO1G7ROOQO,5>s,5>sOOQO-E<V-E<VO*EYQSO,5CXO!>hQSO,5CXO()lQSO'#MrOOQO,5CX,5CXO*EaQSO,5=tO*EfQSO'#MlO(CnQSO,5CVO*EkQSO'#HVOOQO1G9Y1G9YO*EvQSO1G9YOOQO1G9_1G9_O%!tQSO'#I^O*E}QSO,5AuOOQO,5Av,5AvO*FfQSO,5AtO*FkQSO,5AwOOQO1G4b1G4bO*FpQSO7+/aO%%VQSO7+.|O*FzQSO7+.|OOQO7+.|7+.|O*GPQSO,5CwOOQO7+/V7+/VO%%}QSO7+/YO*GXQSO7+/UO!(oQSO7+/UO*GaQSO7+/XO%&SQSO7+/UO%%}QSO7+/VO%!`QSO7+/YO%&[QSO7+/XO*GfQSO'#NfO*GqQSO,5=}O*GvQSO'#NfO*G{QSO'#NfOOQO7+/Y7+/YO*GXQSO7+/UOOQO7+/U7+/UOOQO7+/X7+/XOOQO1G3p1G3pOOQOLD3gLD3gO*HQQSOLD3gO*JgQSOLD3gO*JoQSOLD3gO*JzQSOLD/ZOOQOLD/ZLD/ZOIcQSOLD/ZO*MaQSOLD3WOOQOLD3WLD3WOLQQSOLD3WO+ vQSOLD3[OOQOLD3[LD3[O!!|QSOLD3[OOQOLD3oLD3oO+$]QSOLD3oOOQO7++a7++aO+$eQSO1G3{OOQO,5>b,5>bOOQO-E;t-E;tOOQO1G5x1G5xO!(bQSO1G5xO+$oQSO<= QOOQO,5@a,5@aOOQO-E;u-E;uO!>hQSO,5@{O+-XQSO,5@{O&!VQSO'#ITO+/aQSO,5@zOOQO1G0p1G0pO+/iQSO1G0pO+/nQSO,5@jO+/{QSO'#HxO+0TQSO,5@iO+0]QSO1G0`OOQO1G0^1G0^OOQO'#Hs'#HsO+0bQSO7++YO+0jQSO7++YO+0rQSO7++^O+0zQSO7++^O+1SQSO<<KaOOQO1G6q1G6qO+2oQSO1G6qOOQO'#Dx'#DxOOQO,5>i,5>iOOQO-E;{-E;{O!(bQSO'#IPO+;[QSO,5AUO&!VQSO,5;ZO!(bQSO'#IQO+;dQSO,5ATOOQO1G0t1G0tO+;lQSO1G0tOOQO1G6j1G6jO+;qQSO,5AYO'+UQSO'#ISO+<PQSO,5AXOOQO1G1P1G1PO+<XQSO1G1PO'+]QSO'#IRO+<^QSO,5AWO+<fQSO,5AWOOQO1G0}1G0}O+<tQSO'#KhO+<|QSO,5;WOOQO'#Kg'#KgOOQO1G0x1G0xO+?kQSO1G0xOOQO'#Gq'#GqO+@tQSO'#M`OOQO<<Nl<<NlOOQO1G2U1G2UO!>hQSO'#IbO+@yQSO,5BjOOQO1G2W1G2WOOQO<<Ko<<KoO+AUQSO<=#aOOQO1G8e1G8eO+AoQSO7+-yO+BYQSO7+-zO!>hQSO7+-zO+BaQSO7+.OO+C|QSO1G8aO!>hQSO'#IdO+DhQSO1G6_O!>hQSO1G6_O+DrQSO1G5zOOQO,5>g,5>gOOQO-E;y-E;yOOQO7+&O7+&OO+DwQSO'#HzO+EUQSO,5@mO+E^QSO'#KTO+EhQSO,5:vO!>hQSO'#KTOOQO1G0a1G0aO+EmQSO1G0aO+ErQSO,5@nOOQO1G2Y1G2YOOQO<<K_<<K_O()lQSO'#IWO+E|QSO,5AjOOQO1G1]1G1]O+FUQSO1G1^OOQO1G6|1G6|O+FZQSO1G5|O%&SQSO1G7XO%&[QSO1G7XO+G}QSO,5AxO!>hQSO,5AxOOQO1G7w1G7wOOQO1G1Z1G1ZO+HUQSO1G1ZO+J^QSO1G7XO!(oQSO1G7XOOQO1G1_1G1_O+JiQSO1G7iOOQO1G7n1G7nO+NpQSO,5:PO#1TQSO1G7oO+N{QSO'#LlOOQO'#Lk'#LkO, WQSO,5<WO, bQSO,5<WO!(bQSO'#FTO!>hQSO'#DZOOQO1G7p1G7pO',gQSO,5<YO)&wQSO,5<YOOQO1G7s1G7sO(0vQSO1G7sOOQO1G7u1G7uO, gQSO1G7uOOQO1G7v1G7vO, nQSO1G7vOOQO1G7{1G7{OOQO'#Lw'#LwO, uQSO'#LwO, |QSO,5<dO,!RQSO'#FTOOQO1G7|1G7|O,!ZQSO1G8OOOQO1G8O1G8OO,!bQSO,5<gOOQO1G8P1G8POOQO1G7P1G7PO,!gQSO'#FgOOQO1G7j1G7jOOQO'#I`'#I`O,!rQSO'#LsO,'PQSO'#LsO,'XQSO1G7xOOQSO1G7xO,+cQSO,5?rO,+wQSO1G.{O,,]QSO,5@uOOQO,5@u,5@uO,,eQSO'#KZO,zQSO'#KYOOQO,5@t,5@tOOQO7+&Q7+&QOOQO,5>h,5>hOOQO-E;z-E;zOBhQSO<=!bOOQO<=!b<=!bO,,mQSO<=!bO!>hQSO<=!bOOQO1G9]1G9]O,,zQSO<=#pOOQO<=#q<=#qOOQO<=#v<=#vOOQO<=$P<=$PO(CsQSO<=$PO,-PQSO<=$dOOQO<=#r<=#rOOQO<=#p<=#pO#5XQSO<=$dO#1dQSO'#H]OOQO7+.r7+.rO#1dQSO'#H[OOQO7+.p7+.pO#1dQSO'#H[OOQO7+.s7+.sOOQO1G8u1G8uO$LqQSO1G8uO$LqQSO1G8wOOQO1G8w1G8wO*C]QSO,5C]O,-UQSO,5CZOOQO7+.m7+.mOOQO<=$d<=$dO,-ZQSO1G7WOOQO,5>t,5>tOOQO-E<W-E<WOOQO1G8o1G8oO% tQSO1G8oOOQO1G8r1G8rOOQO1G9Q1G9QOOQO7+,m7+,mOOQO1G8s1G8sO,-eQSO1G8sO,-lQSO,5C^OOQO1G3`1G3`O,-qQSO'#CeO,-|QSO,5CWO,.UQSO'#MuO,.aQSO'#MtO,.iQSO'#MtO,.qQSO,5=qO#0tQSO'#MuO#0tQSO'#MvOOQO7+.t7+.tOOQO,5>x,5>xOOQO-E<[-E<[OOQO1G7`1G7`OOQO1G7c1G7cO,.vQSO<=$hOOQO<=$h<=$hO,.{QSO1G9cO,/TQSO'#IjOOQO<=$t<=$tO,/YQSO<=$pOOQO<=$p<=$pO,/YQSO<=$pOOQO<=$s<=$sO!(oQSO<=$pOOQO<=$q<=$qO%%}QSO<=$tO,/bQSO<=$sO,/gQSO,5DQO,/lQSO,5DQOOQO1G3i1G3iO,/qQSO,5DQO,/|QSO,5DQOOQO!$()R!$()RO,0XQSO!$()RO,2nQSO!$()ROOQO!$($u!$($uO,2vQSO!$($uOOQO!$((r!$((rO,5]QSO!$((rOOQO!$((v!$((vO,7rQSO!$((vOOQO!$()Z!$()ZOOQO7++d7++dO,:XQSO1G6gO,;yQSO1G6gOOQO,5>o,5>oOOQO-E<R-E<ROOQO7+&[7+&[O,<QQSO'#JiOOQO'#KP'#KPOOQO1G6U1G6UO,<[QSO1G6UOOQO,5>d,5>dOOQO-E;v-E;vOOQO7+%z7+%zOOQO-E;q-E;qOOQP<<Nt<<NtO)0yQSO<<NtOOQQ<<Nx<<NxO)0yQSO<<NxOOQO7+,]7+,]OOQO,5>k,5>kOOQO-E;}-E;}O,<fQSO1G0uOOQO,5>l,5>lOOQO-E<O-E<OOOQO7+&`7+&`OOQO,5>n,5>nO,<tQSO,5>nOOQO-E<Q-E<QOOQO7+&k7+&kO,=SQSO,5>mO&!VQSO,5>mOOQO-E<P-E<PO,=bQSO1G6rO',gQSO'#IOO,=jQSO,5ASOOQO1G0r1G0rO!>hQSO,5BzO,=rQSO,5>|OOQO-E<`-E<`O!>hQSO<=#fO,>PQSO<=#fOOQO-E<b-E<bO'FqQSO,5?OO,>WQSO7++yO,?VQSO'#ClOOQO7++y7++yOOQO,5>f,5>fOOQO-E;x-E;xO,?dQSO'#HyO,?nQSO,5@oOOQO1G0b1G0bO,?vQSO,5@oOOQO7+%{7+%{O,@QQSO,5>rOOQO,5>r,5>rOOQO-E<U-E<UOOQO7+&x7+&xO,@[QSO7+,sO!(oQSO7+,sO%&SQSO7+,sOOQO1G7d1G7dO,@gQSO1G7dO,BUQSO7+&uO,@[QSO7+,sO(0vQSO7+-TO,E{QSO7+-ZO,FQQSO'#I_O,HPQSO,5BWO,H[QSO1G1rO,J^QSO1G1rO,JeQSO1G1rO,JoQSO1G1tO',gQSO1G1tOOQO7+-_7+-_OOQO7+-a7+-aOOQO7+-b7+-bOOQO1G2O1G2OOOQO7+-j7+-jO,JtQSO'#L{O,JyQSO'#LzO,KRQSO1G2ROOQO,5<R,5<RO,KWQSO,5<RO&!VQSO'#LeO,K]QSO'#LeOOQO-E<^-E<^O,'PQSO,5B_O-cQSO'#FuO,KbQSO,5B`O#1TQSO,5B`OOQO,5B_,5B_OOQSO7+-dOOQO7+-d7+-dOOQO1G6`1G6`OOQO1G6a1G6aO,KjQSO,5@tOOQOANE|ANE|OBhQSOANE|O,KuQSOANE|OOQOANG[ANG[OOQOANGkANGkO#5XQSOANHOOOQOANHOANHOO#1dQSO'#NPO#(vQSO'#NPO-cQSO'#NPO,LSQSO,5=wO,LXQSO,5=vO,LaQSO,5=vOOQO7+.a7+.aOOQO7+.c7+.cOOQO7+.Z7+.ZOOQO7+.^7+.^OOQO7+.l7+.lOOQO7+._7+._OOQO1G8x1G8xO(CnQSO1G8rO#0tQSO,5CaO#0tQSO,5CbO,LfQSO'#MvOOQO,5C`,5C`O,LnQSO'#MuOOQO1G3]1G3]OOQO,5Ca,5CaOOQO,5Cb,5CbOOQOANHSANHSOOQO-E<h-E<hO$6aQSO,5?UOOQOANH[ANH[O,LvQSOANH[O,LvQSOANH[OOQOANH`ANH`OOQOANH_ANH_O,MOQSO1G9lO,MZQSO1G9lO,MfQSO1G9lO,MnQSO1G9lO,MsQSO1G9lOOQO!)9Lm!)9LmO,M{QSO!)9LmOOQO!)9Ha!)9HaOOQO!)9L^!)9L^OOQO!)9Lb!)9LbO!>hQSO7+,ROOQO7++p7++pO-!bQSOAND`O-!jQSOANDdO-!rQSO1G4XOOQO,5>j,5>jOOQO-E;|-E;|O-#QQSO1G8fO-#XQSOANGQO!>hQSOANGQOOQO1G4j1G4jO-#`QSO,5>eO!>hQSO,5>eOOQO-E;w-E;wO-#jQSO1G6ZO-#rQSO<=!_O-#rQSO<=!_O!(oQSO<=!_OOQO7+-O7+-OOOQO,5:p,5:pOOQO<=!o<=!oOOQO<=!u<=!uOOQO,5>y,5>yOOQO-E<]-E<]OOQO7+'^7+'^O-#}QSO7+'^O-$SQSO7+'^O-&UQSO7+'^O!>hQSO7+'`O-&]QSO7+'`O!>hQSO,5BgO,!bQSO'#IaO-&bQSO,5BfOOQO7+'m7+'mOOQO1G1m1G1mO-&jQSO,5BPO-&xQSO,5BPP,'PQSO'#LtOOQO1G7y1G7yO-*lQSO,5<aOOQO1G7z1G7zO#1TQSO1G7zO#0tQSO1G7zOOQO<=#O<=#OOOQOG2;hG2;hOBhQSOG2;hOOQOG2=jG2=jO#(vQSO,5CkO-cQSO,5CkO-*tQSO,5CkO#1dQSO1G3cOOQO1G3b1G3bOOQO1G8{1G8{OOQO1G8|1G8|OOQO1G4p1G4pOOQOG2=vG2=vO-+PQSOG2=vO-+XQSO7+/WO-+aQSO7+/WO-+fQSO7+/WOOQO7+/W7+/WOOQO!.KBX!.KBXO-+nQSO<= mOOQPG29zG29zOOQQG2:OG2:OO)NiQSO7+.QO$;cQSOG2<lO-+xQSOG2<lO-,PQSO1G4PO-,ZQSOANEyO-,ZQSOANEyOOQO<<Jx<<JxO-,fQSO<<JxO-,kQSO<<JxO-.mQSO<<JzO!>hQSO<<JzO-.tQSO1G8ROOQO,5>{,5>{OOQO-E<_-E<_O-/OQSO1G7kO!>hQSO1G7kO-2rQSO'#LfO&!VQSO'#LfO-6fQSO'#LfOOQO1G7k1G7kOOQO1G1{1G1{O-6nQSO1G1{O#0tQSO7+-fOOQO7+-f7+-fOOQOLD1SLD1SO-6sQSO1G9VO#(vQSO1G9VO!>hQSO1G9VO-7OQSO7+(}OOQOLD3bLD3bO-7TQSO<=$rOOQO<=$r<=$rOOQO<=#l<=#lO-7YQSOLD2WO$;cQSOLD2WO-7vQSOG2;eOOQOAN@dAN@dO-8RQSOAN@dOOQOAN@fAN@fO-8WQSOAN@fOOQO7+-V7+-VO-8_QSO7+-VOOQO,5BQ,5BQO-8fQSO,5BQO-8tQSO,5BQOOQO7+'g7+'gOOQO<=#Q<=#QO!>hQSO7+.qO-8{QSO7+.qO-9WQSO7+.qOOQO<<Li<<LiOOQOANH^ANH^O-9bQSO!$('rO-9gQSO!$('rOOQOG26OG26OOOQOG26QG26QO-:TQSO<=!qO-=wQSO1G7lO!>hQSO1G7lO-AkQSO1G7lO-ArQSO<=$]O!>hQSO<=$]OOQO!)9K^!)9K^O-A|QSO!)9K^OOQOANF]ANF]OOQO7+-W7+-WO-BRQSO7+-WO-BYQSOANGwOOQO!.K@x!.K@xO-BdQSO<=!rOOQOANF^ANF^O8gQSO'#JQO8gQSO'#JQO-FWQSO,5?lO!>hQSO'#DZO-LwQSO'#GbO.#PQSO'#GbO.&^QSO'#GbO$;cQSO'#DdO+HUQSO'#DdO!>hQSO'#DdO.)kQSO'#DdO$;cQSO'#DZO+HUQSO'#DZO.)kQSO'#DZO.+sQSO'#JaO$;cQSO'#DZO+HUQSO'#DZO.)kQSO'#DZO#0`QSO'#EUO.0oQSO'#CeO.0vQSO'#CeO.3kQSO,5@UO.3rQSO,5@UO.5}QSO,5@UO.8YQSO,5@UO.:eQSO,5<oO.:lQSO,5<oO.<wQSO,5<oO.?SQSO,5<oO$;cQSO,5<oO+HUQSO,5<oO+-XQSO,5<oO.)kQSO,5<oO$;cQSO,5<oO+HUQSO,5<oO+-XQSO,5<oO.)kQSO,5<oO$;cQSO,5<oO+HUQSO,5<oO+-XQSO,5<oO.)kQSO,5<oO$;cQSO,5<oO+HUQSO,5<oO+-XQSO,5<oO.)kQSO,5<oO$;cQSO,5<oO+HUQSO,5<oO+-XQSO,5<oO.)kQSO,5<oO$;cQSO,5<oO+HUQSO,5<oO+-XQSO,5<oO.)kQSO,5<oO$;cQSO,5<oO+HUQSO,5<oO+-XQSO,5<oO.)kQSO,5<oO$;cQSO,5<oO+HUQSO,5<oO+-XQSO,5<oO.)kQSO,5<oO$;cQSO,5<oO+HUQSO,5<oO+-XQSO,5<oO.)kQSO,5<oO$;cQSO,5<oO+HUQSO,5<oO+-XQSO,5<oO.)kQSO,5<oO$;cQSO,5<oO+HUQSO,5<oO+-XQSO,5<oO.)kQSO,5<oO.A_QSO,5<|O.EgQSO,5<|O.HtQSO,5<|O.LwQSO,5<|O-cQSO,5<oO/!UQSO,5<}O/!]QSO,5<}O/$hQSO,5<}O/&sQSO,5<}O()yQSO'#CeO/)OQSO,59uO/+sQSO,59uO/-SQSO,59uO/1rQSO,59uO/4VQSO,59uO$;cQSO'#M]O+HUQSO'#M]O.)kQSO'#M]O+-XQSO'#M]O$ExQSO,5:pO/7^QSO'#ClO/:kQSO'#CeO/;zQSO'#ClO/<YQSO1G5pO/=iQSO1G5pO/BXQSO1G5pO/CUQSO1G5pO$;cQSO1G5pO+HUQSO1G5pO+-XQSO1G5pO.)kQSO1G5pO/HxQSO1G2ZO0 OQSO1G2ZO0#cQSO1G2ZO0(QQSO1G2ZO0*tQSO1G2ZO01QQSO1G2ZO03bQSO1G2ZO03lQSO1G2ZO06QQSO1G2ZO0<ZQSO1G2ZO0>nQSO1G2ZO0C]QSO1G2ZO0CgQSO1G2ZO0CqQSO1G2ZO0C{QSO1G2ZO0DVQSO1G2ZO0F|QSO1G2ZO0MSQSO1G2ZO1 gQSO1G2ZO1&UQSO1G2ZO1&`QSO1G2ZO1&jQSO1G2ZO1&tQSO1G2ZO1'OQSO1G2ZO1)xQSO1G2ZO10OQSO1G2ZO12cQSO1G2ZO17QQSO1G2ZO17XQSO1G2ZO17`QSO1G2ZO17gQSO1G2ZO17nQSO1G2ZO1:eQSO1G2ZO1@kQSO1G2ZO1COQSO1G2ZO1GmQSO1G2ZO1GtQSO1G2ZO1G{QSO1G2ZO1HSQSO1G2ZO1HZQSO1G2ZO1IuQSO1G2ZO2 xQSO1G2ZO2$rQSO1G2ZO2(zQSO1G2ZO2*aQSO'#CeO2+WQSO'#CeO21hQSO'#CeO&!VQSO'#EpO26aQSO'#EpO27ZQSO'#EpO&!VQSO'#ErO26aQSO'#ErO27ZQSO'#ErO28TQSO'#MSO29dQSO'#MSO2>SQSO'#MSO2?PQSO'#MSO/!UQSO1G2iO/!]QSO1G2iO/$hQSO1G2iO/&sQSO1G2iO2BWQSO,5BwO2CgQSO,5BwO2HVQSO,5BwO2K^QSO,5BwO3!OQSO1G2XO3#bQSO1G2XO3&PQSO,5AgO3(_QSO,5AgO3*mQSO7++[O3+|QSO7++[O30lQSO7++[O31iQSO7++[O$;cQSO7+'uO+HUQSO7+'uO+-XQSO7+'uO.)kQSO7+'uO&!VQSO,5;^O26aQSO,5;^O27ZQSO,5;^O&!VQSO,5;^O26aQSO,5;^O27ZQSO,5;^O/!UQSO7+(TO/!]QSO7+(TO/$hQSO7+(TO/&sQSO7+(TO34pQSO,5ByO35XQSO,5ByO35pQSO,5ByO36XQSO,5ByO$;cQSO1G8dO+HUQSO1G8dO.)kQSO1G8dO+-XQSO1G8dP3:eQSO7+'sO3;wQSO7+'sO+HUQSO,5AlO3>fQSO'#K|O3@wQSO'#K|O3DqQSO1G7RO3F|QSO1G7RO3IXQSO<<KaO3JhQSO<<KaO4 WQSO<<KaO4!TQSO<<KaO4%[QSO1G0xO4%yQSO1G0xO4)mQSO1G0xO4.^QSO7+.OO4/mQSO7+.OO44]QSO7+.OO47dQSO7+.OO!>hQSO1G1ZO48aQSO1G7WO4<ZQSO7+&uO+-XQSO'#DZO4<eQSO'#JaO4>dQSO'#JaO4AtQSO'#JaO4CaQSO'#JaO4GTQSO'#JaO4ISQSO'#JaO4LsQSO'#JaO4N`QSO'#JaO5$VQSO'#GbO5(YQSO'#GcO5(_QSO'#GcO5(dQSO'#GcO5(iQSO'#GcO+-XQSO'#DdO5(nQSO'#DZO+-XQSO'#DZO34pQSO'#JaO35XQSO'#JaO35pQSO'#JaO36XQSO'#JaO5)zQSO,5@YO27ZQSO,5<oO26aQSO,5<oO5*PQSO,5<}O5*UQSO,5<}O5*ZQSO,5<}O5*`QSO,5<}O34pQSO'#MUO35XQSO'#MUO35pQSO'#MUO36XQSO'#MUO$ExQSO,5:pO5+iQSO'#K{O5,{QSO'#K{O5-SQSO1G2ZO5-ZQSO1G2ZO5-bQSO1G2ZO5-iQSO1G2ZO5-pQSO1G2ZO5/]QSO1G2ZO5/jQSO1G2iO5/oQSO1G2iO5/tQSO1G2iO5/yQSO1G2iO50OQSO'#M_O50TQSO'#M_O50YQSO'#M_O50_QSO'#M_O50dQSO,5BxO50kQSO,5BxO50rQSO,5BxO50yQSO,5BxO51QQSO'#LQO!(bQSO'#IXO!(bQSO'#IXO52WQSO,5AfO53jQSO,5AfO!(bQSO,5;oO56tQSO,5;oO#6XQSO'#IYO56yQSO,5AkO5;QQSO'#I}O#(sQSO'#GcO#(sQSO'#GcO#(sQSO'#GcO#(sQSO'#GcO#+ZQSO'#KpO#+ZQSO'#KpO#+ZQSO'#KpO#+ZQSO'#KpO#+iQSO'#GcO#+iQSO'#GcO#+iQSO'#GcO#+iQSO'#GcO#0`QSO'#EUO!>hQSO,5<oO!>hQSO,5<oO!>hQSO,5<oO!>hQSO,5<oO#(sQSO,5<}O#(sQSO,5<}O#(sQSO,5<}O#(sQSO,5<}O5=iQSO'#MUO5>VQSO'#MUO5AyQSO'#MUO5BTQSO'#MUO!>hQSO'#M^O!>hQSO'#M^O!>hQSO'#M^O!>hQSO'#M^O5EjQSO'#KzO5F|QSO'#KzO5LaQSO,5BpO5L}QSO,5BpO6!qQSO,5BpO6!{QSO,5BpO6%aQSO'#FTO',gQSO'#FTO6%oQSO'#LPO6)vQSO'#DZ\",\n  stateData: \"6+S~O'kOS'lOSPOSQOSROS~OT]OW^OcaOk_OlbOm`O!hbO!ybO#rbO#siO#xbO$PbO$TfO$UgO%fbO%gbO%hbO%ibO%jbO%kbO%lbO%mbO%nbO%obO%pbO%qbO&ThO&WcO&XdO~O'c'mP~PcO'c'mX~PcOTbOW^OcaOk_OlbOm`O!hbO!ybO#rbO#siO#xbO$PbO$TfO$UgO%fbO%gbO%hbO%ibO%jbO%kbO%lbO%mbO%nbO%obO%pbO%qbO&ThO&WcO&XdO~O'c'mX~P#nOTbOcaOlbO!hbO!ybO#rbO#suO#xbO$PbO$TrO$UsO%fbO%gbO%hbO%ibO%jbO%kbO%lbO%mbO%nbO%obO%pbO%qbO&TtO&WpO&XqO~OTbOlbO!hbO!ybO#rbO#suO#xbO$PbO$TrO$UsO%fbO%gbO%hbO%ibO%jbO%kbO%lbO%mbO%nbO%obO%pbO%qbO&TtO&WpO&XqO~OTbOcaOlbOm`O!hbO!ybO#rbO#siO#xbO$PbO$TfO$UgO%fbO%gbO%hbO%ibO%jbO%kbO%lbO%mbO%nbO%obO%pbO%qbO&ThO&WcO&XdO~O'c'mX~P)VOUxOT+TXl+TX!h+TX!y+TX#r+TX#s+TX#x+TX$P+TX$T+TX$U+TX%f+TX%g+TX%h+TX%i+TX%j+TX%k+TX%l+TX%m+TX%n+TX%o+TX%p+TX%q+TX&T+TX&W+TX&X+TX~Ol}O'oyO~OW!OO~O'o!RO~O$U!XO'oyO~O^!`O'oyO'u!^O~O'c'ma~P#nO'c'ma~P)VOTbOlbO!hbO!ybO#rbO#s!jO#xbO$PbO$T!gO$U!hO%fbO%gbO%hbO%ibO%jbO%kbO%lbO%mbO%nbO%obO%pbO%qbO&T!iO&W!eO&X!fO~O$U!lO'oyO~O'o!rO~OY!xOZ!wOh!sOj!tOV'qX~Oh!sOV'qX^'qXa'qXd'qXc'qXe'qXf'qXo'qX$S'qXr'qX#p'qX~OV!yO~Ol!xO'oyO~Oh!{OT'}XV'}Xc'}Xl'}Xm'}Xo'}X!h'}X!y'}X#r'}X#s'}X#x'}X$P'}X$T'}X$U'}X%f'}X%g'}X%h'}X%i'}X%j'}X%k'}X%l'}X%m'}X%n'}X%o'}X%p'}X%q'}X&T'}X&W'}X&X'}X'c'}Xn'}X~OV#OOo!}OT'|ac'|al'|am'|a!h'|a!y'|a#r'|a#s'|a#x'|a$P'|a$T'|a$U'|a%f'|a%g'|a%h'|a%i'|a%j'|a%k'|a%l'|a%m'|a%n'|a%o'|a%p'|a%q'|a&T'|a&W'|a&X'|a'c'|an'|a~Or#QOZXX^XXaXXdXXhXXjXX~OZ!wOj!tO~P0]Oa#ROd(QX~O^#TOa(RXd(RX~Oa#WOd#VO~OZ#bO^#XOo#[Or#^O$S#]O~OV#_O~P6yOo#fOr#eO~OZ#bOo#[Or#lO$S#]O~OZ#bOo#oOr#qO$S#]O~OZ#uOo#tOr#wO$S#]O~Oc#yOe#|Of$OO~OUxO~O'c'mi~P)VO$U$UO'oyO~OV$]O~P6yOZ#bOo#[Or$fO$S#]O~OZ#bOo#oOr$jO$S#]O~OZ#uOo#tOr$nO$S#]O~OV$qO~Oh!sOV'qa^'qaa'qad'qac'qae'qaf'qao'qa$S'qar'qa#p'qa~OV$xO~Oh!{OT'}aV'}ac'}al'}am'}ao'}a!h'}a!y'}a#r'}a#s'}a#x'}a$P'}a$T'}a$U'}a%f'}a%g'}a%h'}a%i'}a%j'}a%k'}a%l'}a%m'}a%n'}a%o'}a%p'}a%q'}a&T'}a&W'}a&X'}a'c'}an'}a~On$}O~PcOV%POT'|ic'|il'|im'|i!h'|i!y'|i#r'|i#s'|i#x'|i$P'|i$T'|i$U'|i%f'|i%g'|i%h'|i%i'|i%j'|i%k'|i%l'|i%m'|i%n'|i%o'|i%p'|i%q'|i&T'|i&W'|i&X'|i'c'|in'|i~Oa#ROd(Qa~O^%ZOe%[Ol%zOv%YOw%YOx%YOy%YO|%bO!O%[O!P%[O!Q%[O!R%[O!S%[O!T%[O!U%tO!V%tO!Y%[O!Z%uO!j%cO!k%cO!v%eO!w%wO!y&PO#R&RO#T&SO#V&TO#X&TO#Y%}O#Z&UO#n%iO#r%yO#s&QO$q%xO%X%{O'o%TO'u!^O(X%WO(Y%XO~O]%qO~P?rOd&VO~O^!`OcaO!h&^O!q&^O!r&^O!s&aO!v&_O$R&`O'oyO'u!^O~O]&ZO~PBhOV$]O^#XOo#[Or#^O$S#]O~OTbO^!`OcaOlbO!R&gO!hbO!ybO#rbO#siO#xbO#|&lO$PbO$TfO$UgO%fbO%gbO%hbO%ibO%jbO%kbO%lbO%mbO%nbO%obO%pbO%qbO%x&nO&ThO&WcO&XdO'oyO'u!^O~On&kO~PCrOV$]Oo#[O~OcaO'oyO~OV$]OT,]ic,]il,]im,]i!h,]i!y,]i#r,]i#s,]i#x,]i$P,]i$T,]i$U,]i%f,]i%g,]i%h,]i%i,]i%j,]i%k,]i%l,]i%m,]i%n,]i%o,]i%p,]i%q,]i&T,]i&W,]i&X,]i'c,]in,]i^,]i!R,]i#|,]i%x,]i'o,]i'u,]i$n,]i~OV$]Oo#[Or#^O~OcaO'o&wOa,dP~Oo#fO~Oo#[O$S#]O~OV&}OT(Pic(Pil(Pim(Pi!h(Pi!y(Pi#r(Pi#s(Pi#x(Pi$P(Pi$T(Pi$U(Pi%f(Pi%g(Pi%h(Pi%i(Pi%j(Pi%k(Pi%l(Pi%m(Pi%n(Pi%o(Pi%p(Pi%q(Pi&T(Pi&W(Pi&X(Pi'c(Pin(Pi^(Pi!R(Pi#|(Pi%x(Pi'o(Pi'u(Pi$n(Pi~Oo#oO$S#]O~OTbO^!`OcaOlbO!hbO!ybO#rbO#siO#xbO#|&lO$PbO$TfO$UgO$n'WO%fbO%gbO%hbO%ibO%jbO%kbO%lbO%mbO%nbO%obO%pbO%qbO%x&nO&ThO&WcO&XdO'oyO'u!^O~On'VO~PLYOV'XOT+|ic+|il+|im+|i!h+|i!y+|i#r+|i#s+|i#x+|i$P+|i$T+|i$U+|i%f+|i%g+|i%h+|i%i+|i%j+|i%k+|i%l+|i%m+|i%n+|i%o+|i%p+|i%q+|i&T+|i&W+|i&X+|i'c+|in+|i^+|i!R+|i#|+|i%x+|i'o+|i'u+|i$n+|i~Oo#tO$S#]O~O^!`OcaO!y'bO%x'aO'oyO'u!^O~On'_O~P!#UOcaO!q'eO!r'eO'oyO~OV'iOT,Qic,Qil,Qim,Qi!h,Qi!y,Qi#r,Qi#s,Qi#x,Qi$P,Qi$T,Qi$U,Qi%f,Qi%g,Qi%h,Qi%i,Qi%j,Qi%k,Qi%l,Qi%m,Qi%n,Qi%o,Qi%p,Qi%q,Qi&T,Qi&W,Qi&X,Qi'c,Qin,Qi^,Qi!R,Qi#|,Qi%x,Qi'o,Qi'u,Qi$n,Qi~Oa'kOd'mO~Oc#yO'o'taa'tag'ta^'ta!v'ta]'tao'ta~Oe#|Of$OO%}'ta#_'ta~P!&nOe#|O'o'yXa'yXg'yX^'yX!v'yX]'yXc'yXo'yX%}'yX#_'yX~Oa'sO'o'qO~O]'tO~OZ#uO^#XO~OV'xO~P6yOZ#bOo#[Or(SO$S#]O~OZ#bOo#oOr(WO$S#]O~OZ#uOo#tOr([O$S#]O~OV'xO^#XOo#[Or#^O$S#]O~OV'xOo#[O~OV'xOT,]qc,]ql,]qm,]q!h,]q!y,]q#r,]q#s,]q#x,]q$P,]q$T,]q$U,]q%f,]q%g,]q%h,]q%i,]q%j,]q%k,]q%l,]q%m,]q%n,]q%o,]q%p,]q%q,]q&T,]q&W,]q&X,]q'c,]qn,]q^,]q!R,]q#|,]q%x,]q'o,]q'u,]q$n,]q~OV'xOo#[Or#^O~OV(_OT(Pqc(Pql(Pqm(Pq!h(Pq!y(Pq#r(Pq#s(Pq#x(Pq$P(Pq$T(Pq$U(Pq%f(Pq%g(Pq%h(Pq%i(Pq%j(Pq%k(Pq%l(Pq%m(Pq%n(Pq%o(Pq%p(Pq%q(Pq&T(Pq&W(Pq&X(Pq'c(Pqn(Pq^(Pq!R(Pq#|(Pq%x(Pq'o(Pq'u(Pq$n(Pq~OV(aOT+|qc+|ql+|qm+|q!h+|q!y+|q#r+|q#s+|q#x+|q$P+|q$T+|q$U+|q%f+|q%g+|q%h+|q%i+|q%j+|q%k+|q%l+|q%m+|q%n+|q%o+|q%p+|q%q+|q&T+|q&W+|q&X+|q'c+|qn+|q^+|q!R+|q#|+|q%x+|q'o+|q'u+|q$n+|q~OV(cOT,Qqc,Qql,Qqm,Qq!h,Qq!y,Qq#r,Qq#s,Qq#x,Qq$P,Qq$T,Qq$U,Qq%f,Qq%g,Qq%h,Qq%i,Qq%j,Qq%k,Qq%l,Qq%m,Qq%n,Qq%o,Qq%p,Qq%q,Qq&T,Qq&W,Qq&X,Qq'c,Qqn,Qq^,Qq!R,Qq#|,Qq%x,Qq'o,Qq'u,Qq$n,Qq~OZ!wOh!sOV'za^'zaa'zad'zac'zae'zaf'zao'za$S'zar'za#p'za~OZ!wOViihii^iiaiidiiciieiifiioii$Sii]iirii#pii~Oa(jOg'sX]'sX~Og(lO~OV(mO~On(oO~PcOn(oO~P#nOn(oO~P)VOa(rOd(qO~Or(sOY!lXZXXZ!lXZ!oX]!lX^!lX^!oXa!lXcXXc!lXeXXe!lXfXXf!lXg!lXhXXh!lXjXX!O!lX!P!lX!Q!lX!S!lX!T!lX!U!lX!V!lX![!lX!]!lX!^!lX!_!lX!`!lX!a!lX!b!lX!c!lX!d!lX!e!lX!g!lX#]!lX#e!lX#n!lX#p#uX#q!lX$p!lX$x!lX$y!lX$z!lX$|!lX$}!lX%O!lX%P!lX%Q!lX%R!lX%S!lX%T!lX~OY%eX~P!7bOc#yOe#|Of$OOh(tO~Oh(vOc'qXe'qXf'qX~O^%ZOe%[Ol%zOv%YOw%YOx%YOy%YO|%bO!O%[O!P%[O!Q%[O!R%[O!S%[O!T%[O!U%tO!V%tO!Y%[O!Z%uO!j%cO!k%cO!v%eO!w%wO!y&PO#R&RO#T&SO#V&TO#X&TO#Y%}O#Z&UO#n%iO#r%yO#s&QO$q%xO%X%{O'u!^O(X%WO(Y%XO~O!h)PO!r)PO'o(wO])eP~P!;qO'o)SO~P!;qOY)VOZ!wO^)XOf)YOg)UOh(tO!Q)^O!U)^O!V)^O![)VO!])VO!^)VO!_)VO!`)VO!a)VO!b)VO!c)VO!d)VO!g)VO#])[O#q)]O$p)ZOa(TXe(TX!O(TX!P(TX!S(TX!T(TX!e(TX#e(TX#n(TX$x(TX$y(TX$z(TX$|(TX$}(TX%O(TX%P(TX%Q(TX%R(TX%S(TX%T(TXn(TX%^(TXV(TX~O](TXr(TXd(TX%d(TX%`(TX%a(TX%[(TX%](TX~P!>oOY)VOg)UO![)VO!])VO!^)VO!_)VO!`)VO!a)VO!b)VO!c)VO!d)VO!g)VOZ(TXa(TXe(TXf(TX!O(TX!P(TX!S(TX!T(TX!e(TX#e(TX#n(TX$x(TX$y(TX$z(TX$|(TX$}(TX%O(TX%P(TX%Q(TX%R(TX%S(TX%T(TXn(TX%^(TXV(TX~O](TXr(TXd(TX%d(TX%`(TX%a(TX%[(TX%](TX~P!B[OZ(]Xe(]Xf(]Xg(]X!O(]X!P(]X!S(]X!T(]X!e(]X#e(]X#n(]X$x(]X$y(]X$z(]X$|(]X$}(]X%O(]X%P(]X%Q(]X%R(]X%S(]X%T(]X~Oa)aO](SX~P!E_O'd)bO'e)cO'f)fO~O'g)gO'h)hO'i)kO~Oc)mOf)lOY(UXZ(UX](UX^(UXa(UXe(UXg(UXh(UX!O(UX!P(UX!Q(UX!S(UX!T(UX!U(UX!V(UX![(UX!](UX!^(UX!_(UX!`(UX!a(UX!b(UX!c(UX!d(UX!e(UX!g(UX#](UX#e(UX#n(UX#q(UX$p(UX$x(UX$y(UX$z(UX$|(UX$}(UX%O(UX%P(UX%Q(UX%R(UX%S(UX%T(UXn(UXr(UXd(UX%d(UX$S(UX%X(UX%Y(UX%Z(UX%_(UX%b(UX%c(UX%`(UX%a(UX%^(UXV(UX%[(UXT(UXl(UX!R(UX!h(UX!y(UX#r(UX#s(UX#x(UX#|(UX$P(UX$T(UX$U(UX%f(UX%g(UX%h(UX%i(UX%j(UX%k(UX%l(UX%m(UX%n(UX%o(UX%p(UX%q(UX%x(UX&T(UX&W(UX&X(UX'o(UX'u(UX$n(UX#p(UXW(UXo(UXv(UXw(UXx(UXy(UX|(UX!Y(UX!Z(UX!j(UX!k(UX!s(UX!t(UX!v(UX!w(UX#R(UX#T(UX#V(UX#X(UX#Y(UX#Z(UX$X(UX$](UX$^(UX$_(UX$a(UX$c(UX$d(UX$e(UX$f(UX$g(UX$k(UX$m(UX$q(UX(X(UX(Y(UX%](UX$[(UX~OZ)rOe)oOf)zOg)nO!O)pO!P)pO!S)tO!T)uO!e)rO#e)rO#n){O$x)oO$y)oO$z)qO$|)|O$})}O%O)sO%P)sO%Q)vO%R)wO%S)xO%T)yO~O^%ZOv%YOw%YOx%YOy%YO|%bO!U%tO!V%tO!j%cO!k%cO!v%eO!w%wO!y&PO#R&RO#T&SO#V&TO#X&TO#Y%}O#Z&UO#s&QO$q%xO'o)SO'u!^O(X%WO(Y%XOZ%UXf%UXg%UX!e%UX#e%UX#n%UX$x%UX$y%UX$z%UX$|%UX$}%UX%O%UX%P%UX%Q%UX%R%UX%S%UX%T%UXY%UX![%UX!]%UX!^%UX!_%UX!`%UX!a%UX!b%UX!c%UX!d%UX!g%UX%^%UX~Oe%[Ol%zO!O%[O!P%[O!Q%[O!R%[O!S%[O!T%[O!Y%[O!Z%uO#r%yO%X%{O]%UXa%UXn%UXr%UXd%UX%d%UX%`%UX%a%UXV%UX%[%UX%]%UX~P##gO#p*PO~O^*RO'o*QO~OY*UO~O]*VO~O^*]Ov%YOw%YOx%YOy%YO|%bO!j%cO!k%cO!v%eO!w%wO!y&PO#R&RO#T&SO#V&TO#X&TO#Y&SO#Z&UO#r*^O#s&QO$q%xO'o*XO'u!^O(X%WO(Y%XO~Oc)mOh*`O~O^!`Oc*cO'oyO'u!^O~O^*gO#s*iO'o*fO'u!^O~O^*gO'o*fO'u!^O~O^!`O'o*jO'u!^O~O$S*uO%X%{O%Y*qO%Z*rO%_*vO%b*wO%c*sO~O^*xOZ(TXa(TXe(TXf(TXg(TX!O(TX!P(TX!S(TX!T(TX!e(TX#e(TX#n(TX$x(TX$y(TX$z(TX$|(TX$}(TX%O(TX%P(TX%Q(TX%R(TX%S(TX%T(TXY(TX![(TX!](TX!^(TX!_(TX!`(TX!a(TX!b(TX!c(TX!d(TX!g(TXn(TX%^(TXV(TX~O](TXr(TXd(TX%d(TX$S(TX%X(TX%Y(TX%Z(TX%_(TX%b(TX%c(TX%`(TX%a(TX%[(TX#p(TX%](TX~P#,hOZ!wO^)XO~O^*yOc#yOo*zO'oyO'u!^O~O^+POo+QO~O^+TO~O^*xO~O^+UO~O^+VO~O]+YO~O^!`OcaO!h&^O!q&^O!r&^O!s&aO!v&_O'oyO'u!^O~O$R+[O~P#1dO!h&^O!q&^O!r&^O^)yX'o)yX'u)yX~O!s+^O~P#2YOZ!wO^#XOh!sOj!tOc'qXe'qXf'qX~O^!`O!R+fO#|+bO%x+dO'oyO'u!^O~P%rO^!`O!R+fO#|+bO%x+dO&Q+lO&R+lO'oyO'u!^O~P'fOo+mO#p+nO~On+sO~PCrO!v,OO'o+uO~OV,UOo+QO#p,TO$S#]O~OV,XOo+QO#p,WO~Or,ZO~O^)XOa,]OV,^ao,^a~Oa,aOg)wX~Og,bO~OcaO'o&wO~OY,dOa,cXn,cX~Oa,eOn,bX~Oa,gO~On,hOa,dX~Oa,jOo+UX$S+UX~O^!`O#|+bO$n,lO%x+dO'oyO'u!^O~P%rO^!`O#|+bO$n,lO%x+dO&Q+lO&R+lO'oyO'u!^O~P'fOn,nO~PLYO^!`OcaO!y,rO%x,qO'oyO'u!^O~On,tO~P!#UO!v,wO'o,uO~O^!`O%x,qO'oyO'u!^O~Oa,|Og,SX~Og-OO~Oa'kOd-QO~Oa-RO]'wa~OV-VO$S#]O~OV-WO^#XOo#[Or#^O$S#]O~OV-WOo#[O~OV-WOT,]yc,]yl,]ym,]y!h,]y!y,]y#r,]y#s,]y#x,]y$P,]y$T,]y$U,]y%f,]y%g,]y%h,]y%i,]y%j,]y%k,]y%l,]y%m,]y%n,]y%o,]y%p,]y%q,]y&T,]y&W,]y&X,]y'c,]yn,]y^,]y!R,]y#|,]y%x,]y'o,]y'u,]y$n,]y~OV-WOo#[Or#^O~OV-WO~P6yOV-`OT(Pyc(Pyl(Pym(Py!h(Py!y(Py#r(Py#s(Py#x(Py$P(Py$T(Py$U(Py%f(Py%g(Py%h(Py%i(Py%j(Py%k(Py%l(Py%m(Py%n(Py%o(Py%p(Py%q(Py&T(Py&W(Py&X(Py'c(Pyn(Py^(Py!R(Py#|(Py%x(Py'o(Py'u(Py$n(Py~Oo#[Or-cO$S#]O~OV-eOT+|yc+|yl+|ym+|y!h+|y!y+|y#r+|y#s+|y#x+|y$P+|y$T+|y$U+|y%f+|y%g+|y%h+|y%i+|y%j+|y%k+|y%l+|y%m+|y%n+|y%o+|y%p+|y%q+|y&T+|y&W+|y&X+|y'c+|yn+|y^+|y!R+|y#|+|y%x+|y'o+|y'u+|y$n+|y~Oo#oOr-hO$S#]O~OV-jOT,Qyc,Qyl,Qym,Qy!h,Qy!y,Qy#r,Qy#s,Qy#x,Qy$P,Qy$T,Qy$U,Qy%f,Qy%g,Qy%h,Qy%i,Qy%j,Qy%k,Qy%l,Qy%m,Qy%n,Qy%o,Qy%p,Qy%q,Qy&T,Qy&W,Qy&X,Qy'c,Qyn,Qy^,Qy!R,Qy#|,Qy%x,Qy'o,Qy'u,Qy$n,Qy~Oo#tOr-mO$S#]O~OV-qO$S#]O~Oh!sOV'zi^'zia'zid'zic'zie'zif'zio'zi$S'zir'zi#p'zi~Oa(jOg'sa]'sa~On-uO~P#nOn-uO~P)VOd-wO~O'o-xO~O'o-{O~O]#uXa#uX~P!7bO]-}O^*ROa'sO'o-|O~Oa.PO](aX~P#!POa.SO])fX~O].UO~Oa.VO]*uX#p*tX~O].XO~O].ZO~OY!lXZ!lXZ!oX]!lX^!lX^!oXa!lXc!lXe!lXf!lXg!lXh!lXjXX!O!lX!P!lX!Q!lX!S!lX!T!lX!U!lX!V!lX![!lX!]!lX!^!lX!_!lX!`!lX!a!lX!b!lX!c!lX!d!lX!e!lX!g!lX#]!lX#e!lX#n!lX#q!lX$p!lX$x!lX$y!lX$z!lX$|!lX$}!lX%O!lX%P!lX%Q!lX%R!lX%S!lX%T!lXn!lXr!lXd!lX%d!lX$S!lX%X!lX%Y!lX%Z!lX%_!lX%b!lX%c!lX%`!lX%a!lX%^!lXV!lX%[!lXT!lXl!lX!R!lX!h!lX!y!lX#r!lX#s!lX#x!lX#|!lX$P!lX$T!lX$U!lX%f!lX%g!lX%h!lX%i!lX%j!lX%k!lX%l!lX%m!lX%n!lX%o!lX%p!lX%q!lX%x!lX&T!lX&W!lX&X!lX'o!lX'u!lX$n!lXW!lXo!lXv!lXw!lXx!lXy!lX|!lX!Y!lX!Z!lX!j!lX!k!lX!s!lX!t!lX!v!lX!w!lX#R!lX#T!lX#V!lX#X!lX#Y!lX#Z!lX$X!lX$]!lX$^!lX$_!lX$a!lX$c!lX$d!lX$e!lX$f!lX$g!lX$k!lX$m!lX$q!lX(X!lX(Y!lX%]!lX$[!lX~OZXXcXXeXXfXXhXX#p#uX~P#IWO!e.[O~O!h.^O'o)SO~P!;qO].cO!h.dO!q.dO!r.eO'oFuO~P!;qOh.gO~O'o.iO~Oo.kO~Oo.mO~O'd)bO'e)cO'f.tO~O'g)gO'h)hO'i.wO~Oc)mO~Og.zO'o)SO~P!;qO^%ZOv%YOw%YOx%YOy%YO|%bO!U%tO!V%tO!j%cO!k%cO!v%eO!w%wO!y&PO#R&RO#T&SO#V&TO#X&TO#Y%}O#Z&UO#s&QO$q%xO'o)SO'u!^O(X%WO(Y%XOZ%Uaf%Uag%Ua!e%Ua#e%Ua#n%Ua$x%Ua$y%Ua$z%Ua$|%Ua$}%Ua%O%Ua%P%Ua%Q%Ua%R%Ua%S%Ua%T%UaY%Ua![%Ua!]%Ua!^%Ua!_%Ua!`%Ua!a%Ua!b%Ua!c%Ua!d%Ua!g%Ua%^%Ua~Oe%[Ol%zO!O%[O!P%[O!Q%[O!R%[O!S%[O!T%[O!Y%[O!Z%uO#r%yO%X%{O]%Uaa%Uan%Uar%Uad%Ua%d%Ua%`%Ua%a%UaV%Ua%[%Ua%]%Ua~P$&]OZ/`O^/dOc/bOg/`Oo/^Ov%YOw%YOx%YOy%YO!e/`O!t/fO#_/cO#e/`O#g/gO'o/ZO'u!^O(X%WO(Y%XO~Oo+QO'o)SO~P!;qO^!`O!h)PO!r)PO'o*fO'u!^O])eP~O#p/pO~Oa/qO](Sa~P!E_O#p!lX~P#IWOj!tO~OZ!wO^)XOf)YOh(tO#q)]O$p)ZOY}aa}ae}ag}a!O}a!P}a!S}a!T}a![}a!]}a!^}a!_}a!`}a!a}a!b}a!c}a!d}a!e}a!g}a#e}a#n}a$x}a$y}a$z}a$|}a$}}a%O}a%P}a%Q}a%R}a%S}a%T}an}a%^}aV}aT}al}a!R}a!h}a!y}a#r}a#s}a#x}a#|}a$P}a'o}a'u}a$n}a~O!Q)^O!U)^O!V)^O#])[O]}ar}ad}a%d}a$S}a%X}a%Y}a%Z}a%_}a%b}a%c}a%`}a%a}a%[}ac}a$T}a$U}a%f}a%g}a%h}a%i}a%j}a%k}a%l}a%m}a%n}a%o}a%p}a%q}a%x}a&T}a&W}a&X}a#p}a%]}a~P$-yO#s*iO~OY}a]}aa}a![}a!]}a!^}a!_}a!`}a!a}a!b}a!c}a!d}a!g}an}ar}ad}a%d}a%`}a%a}a%^}aV}a%[}a%]}a~P#!POe#|Of$OOc(nX^(nXo(nX~Od/uO'o)SO~P!;qOc/wO~Oo/yO~OZXXcXXeXXfXXhXXjXX#p#uX~O]#uXa#uX~P$6kOZXXcXXeXXfXXhXXjXX~O!q0OO~P$7^O'o0PO~OZ*xXa*xXe*xXf*xXg*xX!O*xX!P*xX!S*xX!T*xX!e*xX#e*xX#n*xX$x*xX$y*xX$z*xX$|*xX$}*xX%O*xX%P*xX%Q*xX%R*xX%S*xX%T*xXY*xX![*xX!]*xX!^*xX!_*xX!`*xX!a*xX!b*xX!c*xX!d*xX!g*xXn*xXV*xX~O%^0TO]*xXr*xXd*xX%d*xX%`*xX%a*xX%[*xX%]*xX~P$8OO'o0UO~O^!`O'o0VO'u!^O~O^%ZOeFqOlLqOv%YOw%YOx%YOy%YO|%bO!OFqO!PFqO!QFqO!RFqO!SFqO!TFqO!U%tO!V%tO!YFqO!ZFmO!j%cO!k%cO!v%eO!w%wO!y&PO#R&RO#T&SO#V&TO#X&TO#Y%}O#Z&UO#nFfO#rLmO#s&QO$q%xO%X%{O'o)SO'u!^O(X%WO(Y%XO~O^*]Ov%YOw%YOx%YOy%YO|%bO!j%cO!k%cO!v%eO!w%wO!y&PO#R&RO#T&SO#V&TO#X&TO#Y&SO#Z&UO#r*^O#s&QO$q%xO'o0`O'u!^O(X%WO(Y%XO~On(yP~P$={Oo0gOY!xaZ!xa]!xa^!xaa!xac!xae!xaf!xag!xah!xa!O!xa!P!xa!Q!xa!S!xa!T!xa!U!xa!V!xa![!xa!]!xa!^!xa!_!xa!`!xa!a!xa!b!xa!c!xa!d!xa!e!xa!g!xa#]!xa#e!xa#n!xa#q!xa$p!xa$x!xa$y!xa$z!xa$|!xa$}!xa%O!xa%P!xa%Q!xa%R!xa%S!xa%T!xan!xar!xad!xa%d!xa$S!xa%X!xa%Y!xa%Z!xa%_!xa%b!xa%c!xa%`!xa%a!xa%^!xaV!xa%[!xaT!xal!xa!R!xa!h!xa!y!xa#r!xa#s!xa#x!xa#|!xa$P!xa$T!xa$U!xa%f!xa%g!xa%h!xa%i!xa%j!xa%k!xa%l!xa%m!xa%n!xa%o!xa%p!xa%q!xa%x!xa&T!xa&W!xa&X!xa'o!xa'u!xa$n!xa#p!xa%]!xa~O^)XOc0jOo0gO~Oo0nO~O^!`O!h)PO!r)PO'oyO'u!^O~O])eP~P$FYOT1[OV1OOW1fO^0rOeFeOl1[Oo+QOv%YOw%YOx%YOy%YO|%bO!OFeO!PFeO!QFeO!RFeO!SFeO!TFeO!U1TO!V1TO!Y1bO!Z1UO!h1lO!j%cO!k%cO!s1mO!t1WO!v%eO!w%wO!y&PO#R&RO#T&SO#V1qO#X1qO#Y&SO#Z&UO#]1nO#r1ZO#s&QO#x1kO#|1YO$P1[O$X1]O$]1^O$^1_O$_1`O$a1aO$c1oO$d1oO$e1cO$f1dO$g1pO$k1eO$m1gO$n1hO$q%xO'o0qO'u!^O(X%WO(Y%XO~On1SO~P$FrO!v1vO!w1vO'o1uO'u!^O~OY1zOa1yO])xad)xa~O!h&^O!q&^O!r&^O^)ya'o)ya'u)ya~Oc#yO~Or2QO~O^!`O!R2XO#|2SO%x2UO&Q+lO&R+lO'oyO'u!^O~P-|OV,UOo+QO#p,TO~O!v,OO%}2fO'o+uO~O%}2gO~OcaO%g2lO%h2mO%i2mO%v2pO%w2pO~O%u2nO~P$M^O!h2rO'o)SO~P!;qO^2sO~OV`XY`XZXXZ!oX^!oXa`XhXX~OjXXo%sX#p%sX~P$NYOZ!wOh2wOj!tO~OY2|OV)oXa)oX])oX~Oa2}OV)nX])nX~Oh2wO~OZ#bO^+[X~OV3PO~Oo+mO#p3QO~Oc3TO~O'o3WO~O!h3^O'o)SO~P!;qO#Y3cO$T3bO$U3cO$V3cO$W3cO'oyO~O!y3fO~P%!tOa,]OV,^io,^i~Oa,aOg)wa~OY3nOa,can,ca~Oa,eOn,ba~On3rO~Oa,jOo+Ua$S+Ua~O^!`O#|2SO$n3uO%x2UO&Q+lO&R+lO'oyO'u!^O~P-|O'o3xO~O!v3zO'o,uO~O^!`O%x4OO'oyO'u!^O~OZ!oX^!oXo%sX~Oo4PO~OZ#bO^#XO~O'o4UO~Oa,|Og,Sa~Oa-RO]'wi~O]4]O~OV4^Oo#[O~OV4^OT,]!Rc,]!Rl,]!Rm,]!R!h,]!R!y,]!R#r,]!R#s,]!R#x,]!R$P,]!R$T,]!R$U,]!R%f,]!R%g,]!R%h,]!R%i,]!R%j,]!R%k,]!R%l,]!R%m,]!R%n,]!R%o,]!R%p,]!R%q,]!R&T,]!R&W,]!R&X,]!R'c,]!Rn,]!R^,]!R!R,]!R#|,]!R%x,]!R'o,]!R'u,]!R$n,]!R~OV4^Oo#[Or#^O~OV4^O^#XOo#[Or#^O$S#]O~OV4cOT(P!Rc(P!Rl(P!Rm(P!R!h(P!R!y(P!R#r(P!R#s(P!R#x(P!R$P(P!R$T(P!R$U(P!R%f(P!R%g(P!R%h(P!R%i(P!R%j(P!R%k(P!R%l(P!R%m(P!R%n(P!R%o(P!R%p(P!R%q(P!R&T(P!R&W(P!R&X(P!R'c(P!Rn(P!R^(P!R!R(P!R#|(P!R%x(P!R'o(P!R'u(P!R$n(P!R~OV4gOT+|!Rc+|!Rl+|!Rm+|!R!h+|!R!y+|!R#r+|!R#s+|!R#x+|!R$P+|!R$T+|!R$U+|!R%f+|!R%g+|!R%h+|!R%i+|!R%j+|!R%k+|!R%l+|!R%m+|!R%n+|!R%o+|!R%p+|!R%q+|!R&T+|!R&W+|!R&X+|!R'c+|!Rn+|!R^+|!R!R+|!R#|+|!R%x+|!R'o+|!R'u+|!R$n+|!R~OV4kOT,Q!Rc,Q!Rl,Q!Rm,Q!R!h,Q!R!y,Q!R#r,Q!R#s,Q!R#x,Q!R$P,Q!R$T,Q!R$U,Q!R%f,Q!R%g,Q!R%h,Q!R%i,Q!R%j,Q!R%k,Q!R%l,Q!R%m,Q!R%n,Q!R%o,Q!R%p,Q!R%q,Q!R&T,Q!R&W,Q!R&X,Q!R'c,Q!Rn,Q!R^,Q!R!R,Q!R#|,Q!R%x,Q!R'o,Q!R'u,Q!R$n,Q!R~OV4pO$S#]O~On4rO~P)VOY`XZ`XZ!oX]`X^`X^!oXa`Xc`Xe`Xf`Xg`Xh`X!O`X!P`X!Q`X!S`X!T`X!U`X!V`X![`X!]`X!^`X!_`X!``X!a`X!b`X!c`X!d`X!e`X!g`X#]`X#e`X#n`X#q`X$p`X$x`X$y`X$z`X$|`X$}`X%O`X%P`X%Q`X%R`X%S`X%T`Xn`Xr`Xd`X%d`X$S`X%X`X%Y`X%Z`X%_`X%b`X%c`X%``X%a`X%^`XV`X%[`XT`Xl`X!R`X!h`X!y`X#r`X#s`X#x`X#|`X$P`X$T`X$U`X%f`X%g`X%h`X%i`X%j`X%k`X%l`X%m`X%n`X%o`X%p`X%q`X%x`X&T`X&W`X&X`X'o`X'u`X$n`X#p`XW`Xo`Xv`Xw`Xx`Xy`X|`X!Y`X!Z`X!j`X!k`X!s`X!t`X!v`X!w`X#R`X#T`X#V`X#X`X#Y`X#Z`X$X`X$]`X$^`X$_`X$a`X$c`X$d`X$e`X$f`X$g`X$k`X$m`X$q`X(X`X(Y`X%]`X$[`X~OZXXcXXeXXfXXhXX~P%1sO]`X]#uXa`Xa#uX#p#uX~O])gaa)ga#p*tX~Oa.PO](aa~Oa.PO](aa~P#!POa.SO])fa~Oa.VO]*ua~O](^ia(^iY(^i![(^i!](^i!^(^i!_(^i!`(^i!a(^i!b(^i!c(^i!d(^i!g(^in(^ir(^id(^i%d(^i%`(^i%a(^i%^(^iV(^i%[(^i%](^i~P#!PO](fXa(fXd(fX~P#!PO!h.dO!q.dO!r.eO'o)SO~P!;qOa5QO](dXd(dX~O^!`O!s5XO!t5UO'o5TO'u!^O~O]5YO~OZ!wOY(hi](hi^(hia(hic(hie(hif(hig(hih(hi!O(hi!P(hi!Q(hi!S(hi!T(hi!U(hi!V(hi![(hi!](hi!^(hi!_(hi!`(hi!a(hi!b(hi!c(hi!d(hi!e(hi!g(hi#](hi#e(hi#n(hi#q(hi$p(hi$x(hi$y(hi$z(hi$|(hi$}(hi%O(hi%P(hi%Q(hi%R(hi%S(hi%T(hin(hir(hid(hi%d(hi$S(hi%X(hi%Y(hi%Z(hi%_(hi%b(hi%c(hi%`(hi%a(hi%^(hiV(hi%[(hiT(hil(hi!R(hi!h(hi!y(hi#r(hi#s(hi#x(hi#|(hi$P(hi$T(hi$U(hi%f(hi%g(hi%h(hi%i(hi%j(hi%k(hi%l(hi%m(hi%n(hi%o(hi%p(hi%q(hi%x(hi&T(hi&W(hi&X(hi'o(hi'u(hi$n(hi#p(hiW(hio(hiv(hiw(hix(hiy(hi|(hi!Y(hi!Z(hi!j(hi!k(hi!s(hi!t(hi!v(hi!w(hi#R(hi#T(hi#V(hi#X(hi#Y(hi#Z(hi$X(hi$](hi$^(hi$_(hi$a(hi$c(hi$d(hi$e(hi$f(hi$g(hi$k(hi$m(hi$q(hi(X(hi(Y(hi%](hi$[(hi~OZ!wOY(mX](mX^(mXa(mXc(mXe(mXf(mXg(mXh(mX!O(mX!P(mX!Q(mX!S(mX!T(mX!U(mX!V(mX![(mX!](mX!^(mX!_(mX!`(mX!a(mX!b(mX!c(mX!d(mX!e(mX!g(mX#](mX#e(mX#n(mX#q(mX$p(mX$x(mX$y(mX$z(mX$|(mX$}(mX%O(mX%P(mX%Q(mX%R(mX%S(mX%T(mXn(mXr(mXd(mX%d(mX$S(mX%X(mX%Y(mX%Z(mX%_(mX%b(mX%c(mX%`(mX%a(mX%^(mXV(mX%[(mXT(mXl(mX!R(mX!h(mX!y(mX#r(mX#s(mX#x(mX#|(mX$P(mX$T(mX$U(mX%f(mX%g(mX%h(mX%i(mX%j(mX%k(mX%l(mX%m(mX%n(mX%o(mX%p(mX%q(mX%x(mX&T(mX&W(mX&X(mX'o(mX'u(mX$n(mX#p(mXW(mXo(mXv(mXw(mXx(mXy(mX|(mX!Y(mX!Z(mX!j(mX!k(mX!s(mX!t(mX!v(mX!w(mX#R(mX#T(mX#V(mX#X(mX#Y(mX#Z(mX$X(mX$](mX$^(mX$_(mX$a(mX$c(mX$d(mX$e(mX$f(mX$g(mX$k(mX$m(mX$q(mX(X(mX(Y(mX%](mX$[(mX~OZIoO^/dOc/bOgIoOo/^Ov%YOw%YOx%YOy%YO!eIoO!t/fO#_/cO#eIoO#gIrO'oIlO'u!^O(X%WO(Y%XO~Oa)RPn)RP~P&!VOc)mO'o5fOa(tP~Oa5mOn5kOr5lO~P#!POa5pOn5nOr5oO~P#!POZ!wOh5[OY(ki](ki^(kia(kic(kie(kif(kig(ki!O(ki!P(ki!Q(ki!S(ki!T(ki!U(ki!V(ki![(ki!](ki!^(ki!_(ki!`(ki!a(ki!b(ki!c(ki!d(ki!e(ki!g(ki#](ki#e(ki#n(ki#q(ki$p(ki$x(ki$y(ki$z(ki$|(ki$}(ki%O(ki%P(ki%Q(ki%R(ki%S(ki%T(kin(kir(kid(ki%d(ki$S(ki%X(ki%Y(ki%Z(ki%_(ki%b(ki%c(ki%`(ki%a(ki%^(kiV(ki%[(kiT(kil(ki!R(ki!h(ki!y(ki#r(ki#s(ki#x(ki#|(ki$P(ki$T(ki$U(ki%f(ki%g(ki%h(ki%i(ki%j(ki%k(ki%l(ki%m(ki%n(ki%o(ki%p(ki%q(ki%x(ki&T(ki&W(ki&X(ki'o(ki'u(ki$n(ki#p(kiW(kio(kiv(kiw(kix(kiy(ki|(ki!Y(ki!Z(ki!j(ki!k(ki!s(ki!t(ki!v(ki!w(ki#R(ki#T(ki#V(ki#X(ki#Y(ki#Z(ki$X(ki$](ki$^(ki$_(ki$a(ki$c(ki$d(ki$e(ki$f(ki$g(ki$k(ki$m(ki$q(ki(X(ki(Y(ki%](ki$[(ki~Od5rO~Oe)oO!O)pO!P)pO#n){O$x)oO$y)oOZ$wi]$wia$wif$wi!S$wi!T$wi!e$wi#e$wi$|$wi$}$wi%O$wi%P$wi%Q$wi%R$wi%S$wi%T$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$win$wir$wid$wi%d$wi%`$wi%a$wi%^$wiV$wi%[$wi%]$wi~Og)nO$z)qO~P&-POZ$wi]$wia$wie$wif$wig$wi!O$wi!P$wi!S$wi!T$wi!e$wi#e$wi$x$wi$y$wi$z$wi$|$wi$}$wi%O$wi%P$wi%Q$wi%R$wi%S$wi%T$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$win$wir$wid$wi%d$wi%`$wi%a$wi%^$wiV$wi%[$wi%]$wi~O#n){O~P&0SOe)oO#n){O$x)oO$y)oOZ$wi]$wia$wif$wig$wi!S$wi!T$wi!e$wi#e$wi$z$wi$|$wi$}$wi%O$wi%P$wi%Q$wi%R$wi%S$wi%T$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$win$wir$wid$wi%d$wi%`$wi%a$wi%^$wiV$wi%[$wi%]$wi~O!O$wi!P$wi~P&3VOg$wi$z$wi~P&-POZ)rOe)oOg)nO!O)pO!P)pO!e)rO#e)rO#n){O$x)oO$y)oO$z)qO$|)|O$})}O]$wia$wif$wi!S$wi!T$wi%Q$wi%R$wi%S$wi%T$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$win$wir$wid$wi%d$wi%`$wi%a$wi%^$wiV$wi%[$wi%]$wi~O%O$wi%P$wi~P&6dO%O)sO%P)sO~P&6dOZ)rOe)oOg)nO!O)pO!P)pO!S)tO!e)rO#e)rO#n){O$x)oO$y)oO$z)qO$|)|O$})}O%O)sO%P)sO]$wia$wif$wi%Q$wi%R$wi%S$wi%T$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$win$wir$wid$wi%d$wi%`$wi%a$wi%^$wiV$wi%[$wi%]$wi~O!T$wi~P&9qO!T)uO~P&9qOZ)rOe)oOg)nO!O)pO!P)pO!S)tO!T)uO!e)rO#e)rO#n){O$x)oO$y)oO$z)qO$|)|O$})}O%O)sO%P)sO%Q)vO]$wia$wif$wi%S$wi%T$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$win$wir$wid$wi%d$wi%`$wi%a$wi%^$wiV$wi%[$wi%]$wi~O%R$wi~P&<{O%R)wO~P&<{O]$wia$wif$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$win$wir$wid$wi%d$wi%`$wi%a$wi%^$wiV$wi%[$wi%]$wi~OZ)rOe)oOg)nO!O)pO!P)pO!S)tO!T)uO!e)rO#e)rO#n){O$x)oO$y)oO$z)qO$|)|O$})}O%O)sO%P)sO%Q)vO%R)wO%S)xO%T)yO~P&@VOr5sO~P#!POZ!lX]!lX^XXa!lXe!lXf!lXg!lXh!lX!O!lX!P!lX!S!lX!T!lX!e!lX#e!lX#h!lX#i!lX#n!lX$x!lX$y!lX$z!lX$|!lX$}!lX%O!lX%P!lX%Q!lX%R!lX%S!lX%T!lXY!lX![!lX!]!lX!^!lX!_!lX!`!lX!a!lX!b!lX!c!lX!d!lX!g!lXn!lXr!lXd!lX%d!lX$S!lX%X!lX%Y!lX%Z!lX%_!lX%b!lX%c!lX%`!lX%a!lX%^!lXV!lX%[!lX#p!lX%]!lX~P$7^O^5tOc#yOe#|Of$OO~Oh5vOZ)VX])VXa)VXe)VXf)VXg)VX!O)VX!P)VX!S)VX!T)VX!e)VX#e)VX#h)VX#i)VX#n)VX$x)VX$y)VX$z)VX$|)VX$})VX%O)VX%P)VX%Q)VX%R)VX%S)VX%T)VXY)VX![)VX!])VX!^)VX!_)VX!`)VX!a)VX!b)VX!c)VX!d)VX!g)VX#o)VX#p)VXd)VXn)VXr)VX%d)VX$S)VX%X)VX%Y)VX%Z)VX%_)VX%b)VX%c)VX%`)VX%a)VX%^)VXV)VX%[)VXT)VX^)VXc)VXl)VX!R)VX!h)VX!y)VX#r)VX#s)VX#x)VX#|)VX$P)VX$T)VX$U)VX%f)VX%g)VX%h)VX%i)VX%j)VX%k)VX%l)VX%m)VX%n)VX%o)VX%p)VX%q)VX%x)VX&T)VX&W)VX&X)VX'o)VX'u)VX$n)VXW)VXo)VXv)VXw)VXx)VXy)VX|)VX!Q)VX!U)VX!V)VX!Y)VX!Z)VX!j)VX!k)VX!s)VX!t)VX!v)VX!w)VX#R)VX#T)VX#V)VX#X)VX#Y)VX#Z)VX#])VX$X)VX$])VX$^)VX$_)VX$a)VX$c)VX$d)VX$e)VX$f)VX$g)VX$k)VX$m)VX$q)VX(X)VX(Y)VX%])VX$[)VX~On5{O'o'qO~Oo/^O#_5}O'o'qO~O#_5}O'o'qOZ#jX]#jXa#jXe#jXf#jXg#jX!O#jX!P#jX!S#jX!T#jX!e#jX#e#jX#h#jX#i#jX#n#jX$x#jX$y#jX$z#jX$|#jX$}#jX%O#jX%P#jX%Q#jX%R#jX%S#jX%T#jXY#jX![#jX!]#jX!^#jX!_#jX!`#jX!a#jX!b#jX!c#jX!d#jX!g#jX#o#jX#p#jXd#jXn#jXr#jX%d#jX$S#jX%X#jX%Y#jX%Z#jX%_#jX%b#jX%c#jX%`#jX%a#jX%^#jXV#jX%[#jXT#jX^#jXc#jXl#jX!R#jX!h#jX!y#jX#r#jX#s#jX#x#jX#|#jX$P#jX$T#jX$U#jX%f#jX%g#jX%h#jX%i#jX%j#jX%k#jX%l#jX%m#jX%n#jX%o#jX%p#jX%q#jX%x#jX&T#jX&W#jX&X#jX'u#jX$n#jXW#jXo#jXv#jXw#jXx#jXy#jX|#jX!Q#jX!U#jX!V#jX!Y#jX!Z#jX!j#jX!k#jX!s#jX!t#jX!v#jX!w#jX#R#jX#T#jX#V#jX#X#jX#Y#jX#Z#jX#]#jX$X#jX$]#jX$^#jX$_#jX$a#jX$c#jX$d#jX$e#jX$f#jX$g#jX$k#jX$m#jX$q#jX(X#jX(Y#jX%]#jX$[#jX~Od6VO#n6SO~P&!VOZIoO^/dOc/bOgIoOo/^Ov%YOw%YOx%YOy%YO!eIoO!t/fO#_/cO#eIoO#gIrO'o6XO'u!^O(X%WO(Y%XO~O^6^O#_5}O'o'qO~O#h6aO#i6bO#n$wi$S$wi%X$wi%Y$wi%Z$wi%_$wi%b$wi%c$wi#p$wi~P&0SOo/^O#_5}O'o'qOZ)_X])_Xa)_Xe)_Xf)_Xg)_X!O)_X!P)_X!S)_X!T)_X!e)_X#e)_X#h)_X#i)_X#n)_X$x)_X$y)_X$z)_X$|)_X$})_X%O)_X%P)_X%Q)_X%R)_X%S)_X%T)_XY)_X![)_X!])_X!^)_X!_)_X!`)_X!a)_X!b)_X!c)_X!d)_X!g)_X#o)_X#p)_Xd)_Xn)_Xr)_X%d)_X$S)_X%X)_X%Y)_X%Z)_X%_)_X%b)_X%c)_X%`)_X%a)_X%^)_XV)_X%[)_XT)_X^)_Xc)_Xl)_X!R)_X!h)_X!y)_X#r)_X#s)_X#x)_X#|)_X$P)_X$T)_X$U)_X%f)_X%g)_X%h)_X%i)_X%j)_X%k)_X%l)_X%m)_X%n)_X%o)_X%p)_X%q)_X%x)_X&T)_X&W)_X&X)_X'u)_X$n)_XW)_Xv)_Xw)_Xx)_Xy)_X|)_X!Q)_X!U)_X!V)_X!Y)_X!Z)_X!j)_X!k)_X!s)_X!t)_X!v)_X!w)_X#R)_X#T)_X#V)_X#X)_X#Y)_X#Z)_X#])_X$X)_X$])_X$^)_X$_)_X$a)_X$c)_X$d)_X$e)_X$f)_X$g)_X$k)_X$m)_X$q)_X(X)_X(Y)_X%])_X$[)_X~O#_5}O'o'qOZ#lX]#lXa#lXe#lXf#lXg#lX!O#lX!P#lX!S#lX!T#lX!e#lX#e#lX#h#lX#i#lX#n#lX$x#lX$y#lX$z#lX$|#lX$}#lX%O#lX%P#lX%Q#lX%R#lX%S#lX%T#lXY#lX![#lX!]#lX!^#lX!_#lX!`#lX!a#lX!b#lX!c#lX!d#lX!g#lX#o#lX#p#lXd#lXn#lXr#lX%d#lX$S#lX%X#lX%Y#lX%Z#lX%_#lX%b#lX%c#lX%`#lX%a#lX%^#lXV#lX%[#lXT#lX^#lXc#lXl#lX!R#lX!h#lX!y#lX#r#lX#s#lX#x#lX#|#lX$P#lX$T#lX$U#lX%f#lX%g#lX%h#lX%i#lX%j#lX%k#lX%l#lX%m#lX%n#lX%o#lX%p#lX%q#lX%x#lX&T#lX&W#lX&X#lX'u#lX$n#lXW#lXo#lXv#lXw#lXx#lXy#lX|#lX!Q#lX!U#lX!V#lX!Y#lX!Z#lX!j#lX!k#lX!s#lX!t#lX!v#lX!w#lX#R#lX#T#lX#V#lX#X#lX#Y#lX#Z#lX#]#lX$X#lX$]#lX$^#lX$_#lX$a#lX$c#lX$d#lX$e#lX$f#lX$g#lX$k#lX$m#lX$q#lX(X#lX(Y#lX%]#lX$[#lX~O]*vXa*vXY*vX![*vX!]*vX!^*vX!_*vX!`*vX!a*vX!b*vX!c*vX!d*vX!g*vXn*vXr*vXd*vX%d*vX%`*vX%a*vX%^*vXV*vX%[*vX%]*vX~P#!POa.VO]*uX~Oa6iO~P!E_Od6jO~P#!PO#p6nO~O!q6qO~OZ*xaa*xae*xaf*xag*xa!O*xa!P*xa!S*xa!T*xa!e*xa#e*xa#n*xa$x*xa$y*xa$z*xa$|*xa$}*xa%O*xa%P*xa%Q*xa%R*xa%S*xa%T*xaY*xa![*xa!]*xa!^*xa!_*xa!`*xa!a*xa!b*xa!c*xa!d*xa!g*xan*xaV*xa~O%^0TO]*xar*xad*xa%d*xa%`*xa%a*xa%[*xa%]*xa~P'AOO'o6sO~OY6tO~O!q6uO~P$7^O'o6vO~O%d6wO~P#!POZG]OeGPOfLvOgF{O!OGTO!PGTO!SGeO!TGiO!eG]O#eG]O#nG}O$xGPO$yGPO$zGXO$|)|O$})}O%OGaO%PGaO%QGmO%RGqO%SGuO%TGyO~O$S*za%X*za%Y*za%Z*za%_*za%b*za%c*za~P'DpO%`6xO%a6xO~P#!PO]+Paa+Pa%^+PaY+Pa![+Pa!]+Pa!^+Pa!_+Pa!`+Pa!a+Pa!b+Pa!c+Pa!d+Pa!g+Pan+Par+Pad+Pa%d+Pa%`+Pa%a+PaV+Pa%[+Pa%]+Pa~P#!PO]6zO~O^*ROa'sO'oHeO~O^!lX^!oXc!lXf!lXh!lXjXX!Q!lX!U!lX!V!lX#]!lX#q!lX$p!lX~OY6{OZ!wOa(mXn(mX~P'HxOZ!wO^)XOh(tO!Q)^O!U)^O!V)^O#])[O#q)]O$p)ZO~Of6|O~P'JQOZ(VX^(VXc(VXf(VXh(VX!Q(VX!U(VX!V(VX#](VX#q(VX$p(VX~Oa({Xn({X~P'JvOa6}On(zX~On7PO~Oa7QOn(yX~Oc)mOo7UO!h7XO'o7ROa(tP~P!;qOa'kOd'mO'o)SO~P!;qOc#yOo0nO~Oo0gOY!xiZ!xi]!xi^!xia!xic!xie!xif!xig!xih!xi!O!xi!P!xi!Q!xi!S!xi!T!xi!U!xi!V!xi![!xi!]!xi!^!xi!_!xi!`!xi!a!xi!b!xi!c!xi!d!xi!e!xi!g!xi#]!xi#e!xi#n!xi#q!xi$p!xi$x!xi$y!xi$z!xi$|!xi$}!xi%O!xi%P!xi%Q!xi%R!xi%S!xi%T!xin!xir!xid!xi%d!xi$S!xi%X!xi%Y!xi%Z!xi%_!xi%b!xi%c!xi%`!xi%a!xi%^!xiV!xi%[!xiT!xil!xi!R!xi!h!xi!y!xi#r!xi#s!xi#x!xi#|!xi$P!xi$T!xi$U!xi%f!xi%g!xi%h!xi%i!xi%j!xi%k!xi%l!xi%m!xi%n!xi%o!xi%p!xi%q!xi%x!xi&T!xi&W!xi&X!xi'o!xi'u!xi$n!xi#p!xi%]!xi~Oc#yOY$uiZ$ui^$uia$uie$uif$uig$uih$ui!O$ui!P$ui!Q$ui!S$ui!T$ui!U$ui!V$ui![$ui!]$ui!^$ui!_$ui!`$ui!a$ui!b$ui!c$ui!d$ui!e$ui!g$ui#]$ui#e$ui#n$ui#q$ui$p$ui$x$ui$y$ui$z$ui$|$ui$}$ui%O$ui%P$ui%Q$ui%R$ui%S$ui%T$uin$ui%^$uiV$ui~Oo0nO]$uir$uid$ui%d$ui$S$ui%X$ui%Y$ui%Z$ui%_$ui%b$ui%c$ui%`$ui%a$ui%[$ui#p$ui%]$ui~P(%^On7`Oo0nO'o)SO~P!;qOr7bOY!lXZXXZ!lXZ!oXcXXeXXfXXg!lXhXX![!lX!]!lX!^!lX!_!lX!`!lX!a!lX!b!lX!c!lX!d!lX!g!lX~P'HxOY)VOZ!wO^)XOf)YOg)UOh(tO!Q)^O![)VO!])VO!^)VO!_)VO!`)VO!a)VO!b)VO!c)VO!d)VO!g)VO#])[O#q)]O$p)ZO~O!U7fO!V7fO~P(+YOY)VOg)UO![)VO!])VO!^)VO!_)VO!`)VO!a)VO!b)VO!c)VO!d)VO!g)VO~OT1[O^!`Ol1[O!h7kO#r1[O$P1[O'oyO'u!^O~Oo+QO#p7lO~OV*SXY(VXg(VX![(VX!](VX!^(VX!_(VX!`(VX!a(VX!b(VX!c(VX!d(VX!g(VXa*SX]*SX~P'JvOn7pO~P$FrOV7tO'o)SO~P!;qO^!`O!t7uO'oyO'u!^O~O'oHcO~O#s*iOT&}X^&}Xl&}X!h&}X#r&}X$P&}X'o&}X'u&}X~OV1OOW1fO^8OOeFeOo+QOv%YOw%YOx%YOy%YO|%bO!OFeO!PFeO!QFeO!RFeO!SFeO!TFeO!U1TO!V1TO!Y1bO!Z1UO!j%cO!k%cO!v%eO!w%wO!y&PO#R&RO#T&SO#V1qO#X1qO#Y&SO#Z&UO#]1nO#r*^O#s&QO$P8QO$X1]O$]1^O$^1_O$_1`O$a1aO$c1oO$d1oO$e1cO$f1dO$g1pO$k1eO$m1gO$n1hO$q%xO'o*XO'u!^O(X%WO(Y%XO~O^8RO~O^8TO~O$a8WO'o)SO~P!;qO#Y8XO$[8YO'o8XO~OV8[O!h8]O'o)SO~P!;qO^8_O~O$c8bO$f8aO~O^8cO~OV7{O~O!h8eO~O#x8fO^)mX!t)mX'o)mX'u)mX~O^!`O'oyO'u!^O~P(5yO!h8gO#x1kO^)lX!t)lX'o)lX'u)lX~OV8jO~OZ8nOh8lOj8mOc'qXe'qXf'qX~O]8qO~O]8rO~P#!POZ!wO](mXh(mXjXX~Oh8sO])OX~O]8uO~OY8yOa8xO])xid)xi~Oc#yO'o*QO~O!v8|O!w8|O~OV9YO~O^9^O~OZ9bOe9bOg9_O!O9`O!P9`O!Q9aO!R9aO!S9bO!T9bO!U9aO!V9aO!e9bO#e9bO$x9bO$y9bO$z9bO%O9bO%P9bO%Q9bO(X%WO~OcaO%g2lO%h2mO%i2mO%v9fO%w9fO~O%u9dO~P(:kOn+bX~P$M^OcaO%g2lO%h2mO%i2mO%u2nOn+bX~On9lO~O%h9mO%i9mO%u+dX%v+dX%w+dX~O%g9mO%u+dX%v+dX%w+dX~O%u9dO%v9fO%w9fO~OV9pO~P#!PO]9rO~OY9sO~Oa9tOV)sX~OV9vO~O!v9{O'o9wO~Oo0nO!h:SO'o)SO~P!;qOa2}OV)na])na~O!h:WO'o)SO~P!;qOY:XOT+aX^+aXc+aXl+aXn+aX!R+aX!h+aX!y+aX#r+aX#s+aX#x+aX#|+aX$P+aX$T+aX$U+aX%f+aX%g+aX%h+aX%i+aX%j+aX%k+aX%l+aX%m+aX%n+aX%o+aX%p+aX%q+aX%x+aX&T+aX&W+aX&X+aX'o+aX'u+aX$n+aX~OT`XY`X^`Xa`Xl`Xn`X!R`X!h`X!y`X#r`X#s`X#x`X#|`X$P`X'o`X'u`X$n`X~OZXXc`XhXXjXXo%sX$T`X$U`X%f`X%g`X%h`X%i`X%j`X%k`X%l`X%m`X%n`X%o`X%p`X%q`X%x`X&T`X&W`X&X`X~P(@oOZ!wOh:[Oj!tO~Oh:[O~Oo:^O~OV:_O~P#!POV:aO~P#!POa:bOV)}X^)}Xo)}Xr)}X$S)}X#p)}X~Of:dOV*OX^*OXa*OXo*OXr*OX$S*OX#p*OX~Oa:eOV)|X^)|Xo)|Xr)|X$S)|X#p)|X~O^:fO~Oa,]OV,^qo,^q~Oa,aOg)wi~Oa,cin,ci~P#!POV:kO~O!v:tO'o,uO~OcaO%u:xO%v:yO~OV:|O$S#]O~OV:}O~OV;POT,]!Zc,]!Zl,]!Zm,]!Z!h,]!Z!y,]!Z#r,]!Z#s,]!Z#x,]!Z$P,]!Z$T,]!Z$U,]!Z%f,]!Z%g,]!Z%h,]!Z%i,]!Z%j,]!Z%k,]!Z%l,]!Z%m,]!Z%n,]!Z%o,]!Z%p,]!Z%q,]!Z&T,]!Z&W,]!Z&X,]!Z'c,]!Zn,]!Z^,]!Z!R,]!Z#|,]!Z%x,]!Z'o,]!Z'u,]!Z$n,]!Z~OV;POo#[O~OV;POo#[Or#^O~OV;PO^#XOo#[Or#^O$S#]O~OV;UOT(P!Zc(P!Zl(P!Zm(P!Z!h(P!Z!y(P!Z#r(P!Z#s(P!Z#x(P!Z$P(P!Z$T(P!Z$U(P!Z%f(P!Z%g(P!Z%h(P!Z%i(P!Z%j(P!Z%k(P!Z%l(P!Z%m(P!Z%n(P!Z%o(P!Z%p(P!Z%q(P!Z&T(P!Z&W(P!Z&X(P!Z'c(P!Zn(P!Z^(P!Z!R(P!Z#|(P!Z%x(P!Z'o(P!Z'u(P!Z$n(P!Z~OV;XOT+|!Zc+|!Zl+|!Zm+|!Z!h+|!Z!y+|!Z#r+|!Z#s+|!Z#x+|!Z$P+|!Z$T+|!Z$U+|!Z%f+|!Z%g+|!Z%h+|!Z%i+|!Z%j+|!Z%k+|!Z%l+|!Z%m+|!Z%n+|!Z%o+|!Z%p+|!Z%q+|!Z&T+|!Z&W+|!Z&X+|!Z'c+|!Zn+|!Z^+|!Z!R+|!Z#|+|!Z%x+|!Z'o+|!Z'u+|!Z$n+|!Z~OV;[OT,Q!Zc,Q!Zl,Q!Zm,Q!Z!h,Q!Z!y,Q!Z#r,Q!Z#s,Q!Z#x,Q!Z$P,Q!Z$T,Q!Z$U,Q!Z%f,Q!Z%g,Q!Z%h,Q!Z%i,Q!Z%j,Q!Z%k,Q!Z%l,Q!Z%m,Q!Z%n,Q!Z%o,Q!Z%p,Q!Z%q,Q!Z&T,Q!Z&W,Q!Z&X,Q!Z'c,Q!Zn,Q!Z^,Q!Z!R,Q!Z#|,Q!Z%x,Q!Z'o,Q!Z'u,Q!Z$n,Q!Z~OV;^O$S#]O~O]&iaa&ia~P#!POa.PO](ai~O](^qa(^qY(^q![(^q!](^q!^(^q!_(^q!`(^q!a(^q!b(^q!c(^q!d(^q!g(^qn(^qr(^qd(^q%d(^q%`(^q%a(^q%^(^qV(^q%[(^q%](^q~P#!POa5QO](dad(da~O](faa(fad(fa~P#!PO]`Xa`Xd`X~P$7^O^!`O!t5UO'oyO'u!^O~OZ!wOY(hq](hq^(hqa(hqc(hqe(hqf(hqg(hqh(hq!O(hq!P(hq!Q(hq!S(hq!T(hq!U(hq!V(hq![(hq!](hq!^(hq!_(hq!`(hq!a(hq!b(hq!c(hq!d(hq!e(hq!g(hq#](hq#e(hq#n(hq#q(hq$p(hq$x(hq$y(hq$z(hq$|(hq$}(hq%O(hq%P(hq%Q(hq%R(hq%S(hq%T(hqn(hqr(hqd(hq%d(hq$S(hq%X(hq%Y(hq%Z(hq%_(hq%b(hq%c(hq%`(hq%a(hq%^(hqV(hq%[(hqT(hql(hq!R(hq!h(hq!y(hq#r(hq#s(hq#x(hq#|(hq$P(hq$T(hq$U(hq%f(hq%g(hq%h(hq%i(hq%j(hq%k(hq%l(hq%m(hq%n(hq%o(hq%p(hq%q(hq%x(hq&T(hq&W(hq&X(hq'o(hq'u(hq$n(hq#p(hqW(hqo(hqv(hqw(hqx(hqy(hq|(hq!Y(hq!Z(hq!j(hq!k(hq!s(hq!t(hq!v(hq!w(hq#R(hq#T(hq#V(hq#X(hq#Y(hq#Z(hq$X(hq$](hq$^(hq$_(hq$a(hq$c(hq$d(hq$e(hq$f(hq$g(hq$k(hq$m(hq$q(hq(X(hq(Y(hq%](hq$[(hq~O#hJ_O#iJbO#o;jO#p;iO~Oa;kOn)SX~Oa;nOn;mO~OY;oO~Oa;pOn(qX~Oa;rO~On;sOa(tX~O'o;tO~Ov%YOw%YOx%YOy%YO(X%WO(Y%XO~OZ!wOh5[OY(kq](kq^(kqa(kqc(kqe(kqf(kqg(kq!O(kq!P(kq!Q(kq!S(kq!T(kq!U(kq!V(kq![(kq!](kq!^(kq!_(kq!`(kq!a(kq!b(kq!c(kq!d(kq!e(kq!g(kq#](kq#e(kq#n(kq#q(kq$p(kq$x(kq$y(kq$z(kq$|(kq$}(kq%O(kq%P(kq%Q(kq%R(kq%S(kq%T(kqn(kqr(kqd(kq%d(kq$S(kq%X(kq%Y(kq%Z(kq%_(kq%b(kq%c(kq%`(kq%a(kq%^(kqV(kq%[(kqT(kql(kq!R(kq!h(kq!y(kq#r(kq#s(kq#x(kq#|(kq$P(kq$T(kq$U(kq%f(kq%g(kq%h(kq%i(kq%j(kq%k(kq%l(kq%m(kq%n(kq%o(kq%p(kq%q(kq%x(kq&T(kq&W(kq&X(kq'o(kq'u(kq$n(kq#p(kqW(kqo(kqv(kqw(kqx(kqy(kq|(kq!Y(kq!Z(kq!j(kq!k(kq!s(kq!t(kq!v(kq!w(kq#R(kq#T(kq#V(kq#X(kq#Y(kq#Z(kq$X(kq$](kq$^(kq$_(kq$a(kq$c(kq$d(kq$e(kq$f(kq$g(kq$k(kq$m(kq$q(kq(X(kq(Y(kq%](kq$[(kq~O#_5}O'o'qOZ)_a])_aa)_ae)_af)_ag)_a!O)_a!P)_a!S)_a!T)_a!e)_a#e)_a#h)_a#i)_a#n)_a$x)_a$y)_a$z)_a$|)_a$})_a%O)_a%P)_a%Q)_a%R)_a%S)_a%T)_aY)_a![)_a!])_a!^)_a!_)_a!`)_a!a)_a!b)_a!c)_a!d)_a!g)_a#o)_a#p)_ad)_an)_ar)_a%d)_a$S)_a%X)_a%Y)_a%Z)_a%_)_a%b)_a%c)_a%`)_a%a)_a%^)_aV)_a%[)_aT)_a^)_ac)_al)_a!R)_a!h)_a!y)_a#r)_a#s)_a#x)_a#|)_a$P)_a$T)_a$U)_a%f)_a%g)_a%h)_a%i)_a%j)_a%k)_a%l)_a%m)_a%n)_a%o)_a%p)_a%q)_a%x)_a&T)_a&W)_a&X)_a'u)_a$n)_aW)_av)_aw)_ax)_ay)_a|)_a!Q)_a!U)_a!V)_a!Y)_a!Z)_a!j)_a!k)_a!s)_a!t)_a!v)_a!w)_a#R)_a#T)_a#V)_a#X)_a#Y)_a#Z)_a#])_a$X)_a$])_a$^)_a$_)_a$a)_a$c)_a$d)_a$e)_a$f)_a$g)_a$k)_a$m)_a$q)_a(X)_a(Y)_a%])_a$[)_a~Oo/^O~P)9|O'o;|O~Oh5vOZ)Va])Vaa)Vae)Vaf)Vag)Va!O)Va!P)Va!S)Va!T)Va!e)Va#e)Va#h)Va#i)Va#n)Va$x)Va$y)Va$z)Va$|)Va$})Va%O)Va%P)Va%Q)Va%R)Va%S)Va%T)VaY)Va![)Va!])Va!^)Va!_)Va!`)Va!a)Va!b)Va!c)Va!d)Va!g)Va#o)Va#p)Vad)Van)Var)Va%d)Va$S)Va%X)Va%Y)Va%Z)Va%_)Va%b)Va%c)Va%`)Va%a)Va%^)VaV)Va%[)VaT)Va^)Vac)Val)Va!R)Va!h)Va!y)Va#r)Va#s)Va#x)Va#|)Va$P)Va$T)Va$U)Va%f)Va%g)Va%h)Va%i)Va%j)Va%k)Va%l)Va%m)Va%n)Va%o)Va%p)Va%q)Va%x)Va&T)Va&W)Va&X)Va'o)Va'u)Va$n)VaW)Vao)Vav)Vaw)Vax)Vay)Va|)Va!Q)Va!U)Va!V)Va!Y)Va!Z)Va!j)Va!k)Va!s)Va!t)Va!v)Va!w)Va#R)Va#T)Va#V)Va#X)Va#Y)Va#Z)Va#])Va$X)Va$])Va$^)Va$_)Va$a)Va$c)Va$d)Va$e)Va$f)Va$g)Va$k)Va$m)Va$q)Va(X)Va(Y)Va%])Va$[)Va~Oh<POr)^X~Or<RO~Oa<SOn)]X~Oa<VOn<UO~Oa)bXd)bX~P&!VOa<YOd)aX~Oa<YO#hJ_O#iJbOd)aX~Oa<]Od<[O~Or(sO]!lX^XXa!lXh!lX#h!lX#i!lX~P$7^Oa'sOo/^O#_5}O'o'qO~Oa<^O#hJ_O#iJbO])`X~O]<aO~O^6^O#_5}O'o'qO])ZP~Oo)_a~P)9|O'o<gO~Od<jO~P#!POa<kOn*rXd*rX~P#!POn<mO~O$S*wq%X*wq%Y*wq%Z*wq%_*wq%b*wq%c*wq~P'DpO!q<sO~Oa<vO$S*}a%X*}a%Y*}a%Z*}a%_*}a%b*}a%c*}a~O!h<xO'o)SO~P!;qOh<yO~Oa6}On(za~On<|O~OY!lXY!{XZXXZ!lXZ!oXa!lXcXXeXXe!lXfXXg!lXhXXn!lX!O!lX!P!lX!S!lX!T!lX![!lX!]!lX!^!lX!_!lX!`!lX!a!lX!b!lX!c!lX!d!lX!e!lX!g!lX#e!lX#n!lX#p#uX$x!lX$y!lX$z!lX$|!lX$}!lX%O!lX%P!lX%Q!lX%R!lX%S!lX%T!lX~P'HxOa(vXn(vX~P!E_Oa<}On(uX~O!h=RO'o)SO~P!;qOa=TOn=SO~Od=VO~Oc#yOY$uqZ$uq^$uqa$uqe$uqf$uqg$uqh$uq!O$uq!P$uq!Q$uq!S$uq!T$uq!U$uq!V$uq![$uq!]$uq!^$uq!_$uq!`$uq!a$uq!b$uq!c$uq!d$uq!e$uq!g$uq#]$uq#e$uq#n$uq#q$uq$p$uq$x$uq$y$uq$z$uq$|$uq$}$uq%O$uq%P$uq%Q$uq%R$uq%S$uq%T$uqn$uq%^$uqV$uq~Oo0nO]$uqr$uqd$uq%d$uq$S$uq%X$uq%Y$uq%Z$uq%_$uq%b$uq%c$uq%`$uq%a$uq%[$uq#p$uq%]$uq~P*&rOa=XOn)rX~P#!POa=XOn)rX~Oa=[On=ZO~O]-}O^*ROa'sO'oHeO~OZ)rOe)oOf)zO!O)pO!P)pO!S)tO!T)uO!e)rO#e)rO#n){O$x)oO$y)oO$z)qO$|)|O$})}O%O)sO%P)sO%Q)vO%R)wO%S)xO%T)yOY}ag}a![}a!]}a!^}a!_}a!`}a!a}a!b}a!c}a!d}a!g}a~OV*TaY(baZ(ba^(bac(baf(bag(bah(ba!Q(ba!U(ba!V(ba![(ba!](ba!^(ba!_(ba!`(ba!a(ba!b(ba!c(ba!d(ba!g(ba#](ba#q(ba$p(baa*Ta]*Ta~OV*SaY(VaZ(Va^(Vac(Vaf(Vag(Vah(Va!Q(Va!U(Va!V(Va![(Va!](Va!^(Va!_(Va!`(Va!a(Va!b(Va!c(Va!d(Va!g(Va#](Va#q(Va$p(Vaa*Sa]*Sa~OV*TaY(jaZ(ja^(jac(jaf(jag(jah(ja!Q(ja!U(ja!V(ja![(ja!](ja!^(ja!_(ja!`(ja!a(ja!b(ja!c(ja!d(ja!g(ja#](ja#q(ja$p(jaa*Ta]*Ta~O!h=bO'o)SO~P!;qOZ)rOe)oOf)zO!O)pO!P)pO!S)tO!T)uO!e)rO#e)rO#n){O$x)oO$y)oO$z)qO$|)|O$})}O%O)sO%P)sO%Q)vO%R)wO%S)xO%T)yO~OY!Wag!Wa![!Wa!]!Wa!^!Wa!_!Wa!`!Wa!a!Wa!b!Wa!c!Wa!d!Wa!g!Wa~P*3fOf)YOV*SaY}ag}a![}a!]}a!^}a!_}a!`}a!a}a!b}a!c}a!d}a!g}aa*Sa]*Sa~P'JQOV=cOY}a![}a!]}a!^}a!_}a!`}a!a}a!b}a!c}a!d}a!g}a~P#!POT)oXV)oXW)oX^)oXa)oXe)oXl)oXn)oXo)oXv)oXw)oXx)oXy)oX|)oX!O)oX!P)oX!Q)oX!R)oX!S)oX!T)oX!U)oX!V)oX!Y)oX!Z)oX!h)oX!j)oX!k)oX!s)oX!t)oX!v)oX!w)oX!y)oX#R)oX#T)oX#V)oX#X)oX#Y)oX#Z)oX#])oX#r)oX#s)oX#x)oX#|)oX$P)oX$X)oX$])oX$^)oX$_)oX$a)oX$c)oX$d)oX$e)oX$f)oX$g)oX$k)oX$m)oX$n)oX$q)oX'o)oX'u)oX(X)oX(Y)oX$[)oX~OY)YX])oX~P*7sOY=eO~O$]=lO~OV=oO^0rOeFeO|%bO!OFeO!PFeO!QFeO!RFeO!SFeO!TFeO!U1TO!V1TO!Y=rO!Z%uO!h8gO!j%cO!k%cO!s1mO!tM_O!v%eO!w%wO!y&PO#R&RO#T&SO#V&TO#X&TO#Y&SO#Z&UO#r*^O#s&QO#x1kO$q%xO'oHWO'u!^O~P)1OO^!`O!s=uO!t5UO'oyO'u!^O~OV*Saa*Sa]*Sa~P*+wOV=xO~OV=zO~P#!PO!h8gO!s1mO!tM_O#x1kO'o)SO~P!;qOV>TO~O#x>WO^)ma!t)ma'o)ma'u)ma~Oo>XO~O$h>]O$j>_O~O^!`Oa'kOg>cO'oyO'u!^O~OZ>dOh>eOj>eO](|X~O]>gO~Oh8sO])Oa~Oa>jO])xqd)xq~P#!POY>mOa>jO])xqd)xq~OV>pO~O^>tO~OV>vO~O]>wO~O^>xOg.zO~O^>zO~O^>|O~O^>xO~O%u?PO%v?QO%w?QO~OcaO%g2lO%h2mO%i2mO%u9dO~OV?UO~P#!POa9tOV)sa~OZXXZ!oX^!oXhXXo%sX#p%sX~OZ!wOh2wO~OZ#bO^+]a~OV)pXa)pX])pX~P#!POV?`O~P#!POd?cO~O'o?dO~OcaO%z?jO%{?kO~OV?lO~P#!POa:bOV)}a^)}ao)}ar)}a$S)}a#p)}a~O!y3fO~O]?pO~Oa,cqn,cq~P#!POV?rO~Oa?tOV,Pa~OV?wO$S#]O~OV?yO~OcaO%u@OO%v@PO~On@QO~OV@RO~OV@SO~OV@TOT,]!cc,]!cl,]!cm,]!c!h,]!c!y,]!c#r,]!c#s,]!c#x,]!c$P,]!c$T,]!c$U,]!c%f,]!c%g,]!c%h,]!c%i,]!c%j,]!c%k,]!c%l,]!c%m,]!c%n,]!c%o,]!c%p,]!c%q,]!c&T,]!c&W,]!c&X,]!c'c,]!cn,]!c^,]!c!R,]!c#|,]!c%x,]!c'o,]!c'u,]!c$n,]!c~OV@TOo#[O~OV@TOo#[Or#^O~OV@WOT(P!cc(P!cl(P!cm(P!c!h(P!c!y(P!c#r(P!c#s(P!c#x(P!c$P(P!c$T(P!c$U(P!c%f(P!c%g(P!c%h(P!c%i(P!c%j(P!c%k(P!c%l(P!c%m(P!c%n(P!c%o(P!c%p(P!c%q(P!c&T(P!c&W(P!c&X(P!c'c(P!cn(P!c^(P!c!R(P!c#|(P!c%x(P!c'o(P!c'u(P!c$n(P!c~OV@YOT+|!cc+|!cl+|!cm+|!c!h+|!c!y+|!c#r+|!c#s+|!c#x+|!c$P+|!c$T+|!c$U+|!c%f+|!c%g+|!c%h+|!c%i+|!c%j+|!c%k+|!c%l+|!c%m+|!c%n+|!c%o+|!c%p+|!c%q+|!c&T+|!c&W+|!c&X+|!c'c+|!cn+|!c^+|!c!R+|!c#|+|!c%x+|!c'o+|!c'u+|!c$n+|!c~OV@[OT,Q!cc,Q!cl,Q!cm,Q!c!h,Q!c!y,Q!c#r,Q!c#s,Q!c#x,Q!c$P,Q!c$T,Q!c$U,Q!c%f,Q!c%g,Q!c%h,Q!c%i,Q!c%j,Q!c%k,Q!c%l,Q!c%m,Q!c%n,Q!c%o,Q!c%p,Q!c%q,Q!c&T,Q!c&W,Q!c&X,Q!c'c,Q!cn,Q!c^,Q!c!R,Q!c#|,Q!c%x,Q!c'o,Q!c'u,Q!c$n,Q!c~OV@^O$S#]O~O]&iia&ii~P#!POZ!wOY(hy](hy^(hya(hyc(hye(hyf(hyg(hyh(hy!O(hy!P(hy!Q(hy!S(hy!T(hy!U(hy!V(hy![(hy!](hy!^(hy!_(hy!`(hy!a(hy!b(hy!c(hy!d(hy!e(hy!g(hy#](hy#e(hy#n(hy#q(hy$p(hy$x(hy$y(hy$z(hy$|(hy$}(hy%O(hy%P(hy%Q(hy%R(hy%S(hy%T(hyn(hyr(hyd(hy%d(hy$S(hy%X(hy%Y(hy%Z(hy%_(hy%b(hy%c(hy%`(hy%a(hy%^(hyV(hy%[(hyT(hyl(hy!R(hy!h(hy!y(hy#r(hy#s(hy#x(hy#|(hy$P(hy$T(hy$U(hy%f(hy%g(hy%h(hy%i(hy%j(hy%k(hy%l(hy%m(hy%n(hy%o(hy%p(hy%q(hy%x(hy&T(hy&W(hy&X(hy'o(hy'u(hy$n(hy#p(hyW(hyo(hyv(hyw(hyx(hyy(hy|(hy!Y(hy!Z(hy!j(hy!k(hy!s(hy!t(hy!v(hy!w(hy#R(hy#T(hy#V(hy#X(hy#Y(hy#Z(hy$X(hy$](hy$^(hy$_(hy$a(hy$c(hy$d(hy$e(hy$f(hy$g(hy$k(hy$m(hy$q(hy(X(hy(Y(hy%](hy$[(hy~O^%ZOeKWOlLsO|%bO!OKWO!PKWO!QKWO!RKWO!SKWO!TKWO!U%tO!V%tO!YKWO!ZKhO!j%cO!k%cO!v%eO!w%wO!y&PO#R&RO#T&SO#V&TO#X&TO#Y%}O#Z&UO#nKaO#rLoO#s&QO$q%xO%X%{O'oFvO'u!^O~P)1OOa;kOn)Sa~On@dO~Oo0gO!h@hO'o)SO~P!;qOc)mO'o5fO~Oa;pOn(qa~On@kO~On@mO'o;tO~On@mOr@nO~On@oO'o;tO~On@oOr@pO~O]$wya$wyY$wy![$wy!]$wy!^$wy!_$wy!`$wy!a$wy!b$wy!c$wy!d$wy!g$wyn$wyr$wyd$wy%d$wy%`$wy%a$wy%^$wyV$wy%[$wy%]$wy~P#!PO#_5}O'o'qOZ)_i])_ia)_ie)_if)_ig)_i!O)_i!P)_i!S)_i!T)_i!e)_i#e)_i#h)_i#i)_i#n)_i$x)_i$y)_i$z)_i$|)_i$})_i%O)_i%P)_i%Q)_i%R)_i%S)_i%T)_iY)_i![)_i!])_i!^)_i!_)_i!`)_i!a)_i!b)_i!c)_i!d)_i!g)_i#o)_i#p)_id)_in)_ir)_i%d)_i$S)_i%X)_i%Y)_i%Z)_i%_)_i%b)_i%c)_i%`)_i%a)_i%^)_iV)_i%[)_iT)_i^)_ic)_il)_i!R)_i!h)_i!y)_i#r)_i#s)_i#x)_i#|)_i$P)_i$T)_i$U)_i%f)_i%g)_i%h)_i%i)_i%j)_i%k)_i%l)_i%m)_i%n)_i%o)_i%p)_i%q)_i%x)_i&T)_i&W)_i&X)_i'u)_i$n)_iW)_io)_iv)_iw)_ix)_iy)_i|)_i!Q)_i!U)_i!V)_i!Y)_i!Z)_i!j)_i!k)_i!s)_i!t)_i!v)_i!w)_i#R)_i#T)_i#V)_i#X)_i#Y)_i#Z)_i#])_i$X)_i$])_i$^)_i$_)_i$a)_i$c)_i$d)_i$e)_i$f)_i$g)_i$k)_i$m)_i$q)_i(X)_i(Y)_i%])_i$[)_i~Oh<POr)^a~Oa<SOn)]a~On@wO~O#hJ_O#iJbOa)bad)ba~Oa<YOd)aa~Od@{O~Oa<^O])`a~Oa<^O#hJ_O#iJbO])`a~OaAQO])[X~O]ASO~OZ#fia#fie#fif#fig#fi!O#fi!P#fi!S#fi!T#fi!e#fi#e#fi#i#fi#n#fi$x#fi$y#fi$z#fi$|#fi$}#fi%O#fi%P#fi%Q#fi%R#fi%S#fi%T#fiY#fi![#fi!]#fi!^#fi!_#fi!`#fi!a#fi!b#fi!c#fi!d#fi!g#fin#fi%^#fiV#fi~O#h6aO]#fir#fid#fi%d#fi$S#fi%X#fi%Y#fi%Z#fi%_#fi%b#fi%c#fi%`#fi%a#fi%[#fi#p#fi%]#fi~P+=ROYATO~Oa<kOn*rad*ra~O$S*wy%X*wy%Y*wy%Z*wy%_*wy%b*wy%c*wy~P'DpO$S*{q%X*{q%Y*{q%Z*{q%_*{q%b*{q%c*{q~P'DpO%[AWO~P#!PO]+Qqa+Qq%^+QqY+Qq![+Qq!]+Qq!^+Qq!_+Qq!`+Qq!a+Qq!b+Qq!c+Qq!d+Qq!g+Qqn+Qqr+Qqd+Qq%d+Qq%`+Qq%a+QqV+Qq%[+Qq%]+Qq~P#!POa<vO$S*}i%X*}i%Y*}i%Z*}i%_*}i%b*}i%c*}i~Oa({in({i~P#!PO'oA]O~Oo7UO!h7XO'o)SO~P!;qOa<}On(ua~OaAaOn(wX~P#!POnAcO~OnAeO~Oa(van(va~P!E_Oa=XOn)ra~OnAiO~OV*TiY(jiZ(ji^(jic(jif(jig(jih(ji!Q(ji!U(ji!V(ji![(ji!](ji!^(ji!_(ji!`(ji!a(ji!b(ji!c(ji!d(ji!g(ji#](ji#q(ji$p(jia*Ti]*Ti~OVAmO~P#!PO^%ZOeFrOlLrO|%bO!OFrO!PFrO!QFrO!RFrO!SFrO!TFrO!UKgO!VKgO!YFrO!ZFnO!j%cO!k%cO!v%eO!w%wO!yFtO#R&RO#T&SO#V&TO#X&TO#YFpO#Z&UO#nFgO#rLnO#s&QO$q%xO%X%{O'o)SO'u!^O~P)1OO$S#]Oo)ui#p)ui~O$YAqOT*ViV*ViW*Vi^*Vie*Vil*Vin*Vio*Viv*Viw*Vix*Viy*Vi|*Vi!O*Vi!P*Vi!Q*Vi!R*Vi!S*Vi!T*Vi!U*Vi!V*Vi!Y*Vi!Z*Vi!h*Vi!j*Vi!k*Vi!s*Vi!t*Vi!v*Vi!w*Vi!y*Vi#R*Vi#T*Vi#V*Vi#X*Vi#Y*Vi#Z*Vi#]*Vi#r*Vi#s*Vi#x*Vi#|*Vi$P*Vi$X*Vi$]*Vi$^*Vi$_*Vi$a*Vi$c*Vi$d*Vi$e*Vi$f*Vi$g*Vi$k*Vi$m*Vi$n*Vi$q*Vi'o*Vi'u*Vi(X*Vi(Y*Vi$[*Vi~O]-}O^*RO'o*QO~OaAsOV*`X]*`X~OVAuO'o)SO~P!;qOVAwO~OVA{O~P#!POVA|O~P#!PO]*kX~P#!PO]A}O~O^*RO'oHeO~OVBOO~P#!PO'oBPO~OnBSO#YBVO$[BUO~O$hBXOT*gXV*gXW*gX^*gXe*gXl*gXn*gXo*gXv*gXw*gXx*gXy*gX|*gX!O*gX!P*gX!Q*gX!R*gX!S*gX!T*gX!U*gX!V*gX!Y*gX!Z*gX!h*gX!j*gX!k*gX!s*gX!t*gX!v*gX!w*gX!y*gX#R*gX#T*gX#V*gX#X*gX#Y*gX#Z*gX#]*gX#r*gX#s*gX#x*gX#|*gX$P*gX$X*gX$]*gX$^*gX$_*gX$a*gX$c*gX$d*gX$e*gX$f*gX$g*gX$j*gX$k*gX$m*gX$n*gX$q*gX'o*gX'u*gX(X*gX(Y*gX$Y*gX$[*gX~O^BYO#oB[O~O$jB^OT*fiV*fiW*fi^*fie*fil*fin*fio*fiv*fiw*fix*fiy*fi|*fi!O*fi!P*fi!Q*fi!R*fi!S*fi!T*fi!U*fi!V*fi!Y*fi!Z*fi!h*fi!j*fi!k*fi!s*fi!t*fi!v*fi!w*fi!y*fi#R*fi#T*fi#V*fi#X*fi#Y*fi#Z*fi#]*fi#r*fi#s*fi#x*fi#|*fi$P*fi$X*fi$]*fi$^*fi$_*fi$a*fi$c*fi$d*fi$e*fi$f*fi$g*fi$k*fi$m*fi$n*fi$q*fi'o*fi'u*fi(X*fi(Y*fi$Y*fi$[*fi~OZ8nOh8lOj>eOc'zae'zaf'za~OZ8nOj>eOciieiifiihii~Oa'kOgBaO~Oa'kOg>cO~OaBdO])xyd)xy~P#!POVBfO~O]BhO~O%u?PO~OV)tia)ti~P#!POVBuO~P#!POVBvO~OZXXhXXo%sX~OZ!wOh:[O~OcaO%zBxO%{ByO~OcaO%{?kO~OcaO%z?jO~OnB}O~OVCQO~Oa?tOV,Pi~O'oCSO~OVCTO$S#]O~OVCXO~OVCYO~OVCZO~OcaO%vC]On,Ya~OcaO%uC]On,Ya~OVC_OT,]!kc,]!kl,]!km,]!k!h,]!k!y,]!k#r,]!k#s,]!k#x,]!k$P,]!k$T,]!k$U,]!k%f,]!k%g,]!k%h,]!k%i,]!k%j,]!k%k,]!k%l,]!k%m,]!k%n,]!k%o,]!k%p,]!k%q,]!k&T,]!k&W,]!k&X,]!k'c,]!kn,]!k^,]!k!R,]!k#|,]!k%x,]!k'o,]!k'u,]!k$n,]!k~OVC_Oo#[O~OVCaOT(P!kc(P!kl(P!km(P!k!h(P!k!y(P!k#r(P!k#s(P!k#x(P!k$P(P!k$T(P!k$U(P!k%f(P!k%g(P!k%h(P!k%i(P!k%j(P!k%k(P!k%l(P!k%m(P!k%n(P!k%o(P!k%p(P!k%q(P!k&T(P!k&W(P!k&X(P!k'c(P!kn(P!k^(P!k!R(P!k#|(P!k%x(P!k'o(P!k'u(P!k$n(P!k~OVCbOT+|!kc+|!kl+|!km+|!k!h+|!k!y+|!k#r+|!k#s+|!k#x+|!k$P+|!k$T+|!k$U+|!k%f+|!k%g+|!k%h+|!k%i+|!k%j+|!k%k+|!k%l+|!k%m+|!k%n+|!k%o+|!k%p+|!k%q+|!k&T+|!k&W+|!k&X+|!k'c+|!kn+|!k^+|!k!R+|!k#|+|!k%x+|!k'o+|!k'u+|!k$n+|!k~OVCcOT,Q!kc,Q!kl,Q!km,Q!k!h,Q!k!y,Q!k#r,Q!k#s,Q!k#x,Q!k$P,Q!k$T,Q!k$U,Q!k%f,Q!k%g,Q!k%h,Q!k%i,Q!k%j,Q!k%k,Q!k%l,Q!k%m,Q!k%n,Q!k%o,Q!k%p,Q!k%q,Q!k&T,Q!k&W,Q!k&X,Q!k'c,Q!kn,Q!k^,Q!k!R,Q!k#|,Q!k%x,Q!k'o,Q!k'u,Q!k$n,Q!k~Oa)Tin)Ti~P#!POZG_OeGROfLxOgF}O!OGVO!PGVO!SGgO!TGkO!eG_O#eG_O#nHPO$xGRO$yGRO$zGZO$|)|O$})}O%OGcO%PGcO%QGoO%RGsO%SGwO%TG{O~O#pCdO~P,:cOa(sXn(sX~P!E_Oo0gO'o)SO~P!;qO#hJ_O#iJbOa#cin#ci~O#hJ_O#iJbOa&vad&va~O#hJ_O#iJbO]&uaa&ua~Oa<^O])`i~OaAQO])[a~Oa'Uan'Uad'Ua~P#!PO%[CmO~P#!POa({qn({q~P#!PO^`X^!oXc`Xf`Xh`X!Q`X!U`X!V`X#]`X#q`X$p`X~OZ!wOa(mXn(mX~P,>bO!hCpO'o)SO~P!;qOaAaOn(wa~OaAaOn(wa~P#!POa&zan&za~P#!PO$S#]Oo)uq#p)uq~OVCvO~P#!POZG^OeGQOfLwOgF|O!OGUO!PGUO!SGfO!TGjO!eG^O#eG^O#nHOO$xGQO$yGQO$zGYO$|)|O$}KoO%OGbO%PGbO%QGnO%RGrO%SGvO%TGzO~OT#wqV#wqW#wq^#wql#wqn#wqo#wqv#wqw#wqx#wqy#wq|#wq!Q#wq!R#wq!U#wq!V#wq!Y#wq!Z#wq!h#wq!j#wq!k#wq!s#wq!t#wq!v#wq!w#wq!y#wq#R#wq#T#wq#V#wq#X#wq#Y#wq#Z#wq#]#wq#r#wq#s#wq#x#wq#|#wq$P#wq$X#wq$]#wq$^#wq$_#wq$a#wq$c#wq$d#wq$e#wq$f#wq$g#wq$k#wq$m#wq$n#wq$q#wq'o#wq'u#wq(X#wq(Y#wq$[#wq~P,@nOVCyO~O^8OOeFeO|%bO!OFeO!PFeO!QFeO!RFeO!SFeO!TFeO!U1TO!V1TO!Y=rO!Z%uO!j%cO!k%cO!v%eO!w%wO!y&PO#R&RO#T&SO#V&TO#X&TO#Y&SO#Z&UO#r*^O#s&QO$q%xO'o*XO'u!^O~P)1OOaAsOV*`a]*`a~O]C|O^8OOeFeO|%bO!OFeO!PFeO!QFeO!RFeO!SFeO!TFeO!U1TO!V1TO!Y=rO!Z%uO!j%cO!k%cO!v%eO!w%wO!y&PO#R&RO#T&SO#V&TO#X&TO#Y&SO#Z&UO#r*^O#s&QO$q%xO'o*XO'u!^O~P)1OOVDOO~P#!POVDOO'o)SO~P!;qO!qDQO~OYDSO~OaDTO]*nX~O]DVO~OnDWO~OrDYO~Oo+QO#oD_O~OZ>dOh>eOj>eO~OaDcO])x!Rd)x!R~P#!POaDhO~O]DiOaDhO~O]DiO~OcaO%{ByO~OcaO%zBxO~OVDmO$S#]O~OcaO%vDpOn,Yi~OcaO%uDpOn,Yi~OcaO%vDpO~OVDrO~OcaO%uDpO~OVDsOT,]!sc,]!sl,]!sm,]!s!h,]!s!y,]!s#r,]!s#s,]!s#x,]!s$P,]!s$T,]!s$U,]!s%f,]!s%g,]!s%h,]!s%i,]!s%j,]!s%k,]!s%l,]!s%m,]!s%n,]!s%o,]!s%p,]!s%q,]!s&T,]!s&W,]!s&X,]!s'c,]!sn,]!s^,]!s!R,]!s#|,]!s%x,]!s'o,]!s'u,]!s$n,]!s~OnDuO'o;tO~OnDvO'o;tO~O#hJ_O#iJbO]&uia&ui~OaDwO~P!E_O%]DxO~P#!POa&man&ma~P#!POaAaOn(wi~O$S#]Oo)uy#p)uy~O]D}O~O]D}O^8OOeFeO|%bO!OFeO!PFeO!QFeO!RFeO!SFeO!TFeO!U1TO!V1TO!Y=rO!Z%uO!j%cO!k%cO!v%eO!w%wO!y&PO#R&RO#T&SO#V&TO#X&TO#Y&SO#Z&UO#r*^O#s&QO$q%xO'o*XO'u!^O~P)1OOVEPO~P#!PO!qERO~OaDTO]*na~OrEVO#hJ_O#iJbO#oEWO~OT1[OV1OOW1fO^0rOeFeOl1[Oo+QO|%bO!OFeO!PFeO!QFeO!RFeO!SFeO!TFeO!U1TO!V1TO!Y1bO!Z1UO!h1lO!j%cO!k%cO!s1mO!t1WO!v%eO!w%wO!y&PO#R&RO#T&SO#V1qO#X1qO#YEZO#Z&UO#]1nO#r1ZO#s&QO#x1kO#|1YO$P1[O$X1]O$[EYO$]1^O$^1_O$_1`O$a1aO$c1oO$d1oO$e1cO$f1dO$g1pO$k1eO$m1gO$n1hO$q%xO'o0qO'u!^On*Xa~P)1OO]E]O'o'qO~OYEdOa+sa]+sa~OVEfO$S#]O~OcaO%vEgO~OVEhO~OcaO%uEgO~Oa)Tyn)Ty~P#!PO%]EkO~P#!POa&min&mi~P#!PO$S#]Oo)u!R#p)u!R~O]EmO~O]EmO^8OOeFeO|%bO!OFeO!PFeO!QFeO!RFeO!SFeO!TFeO!U1TO!V1TO!Y=rO!Z%uO!j%cO!k%cO!v%eO!w%wO!y&PO#R&RO#T&SO#V&TO#X&TO#Y&SO#Z&UO#r*^O#s&QO$q%xO'o*XO'u!^O~P)1OO]EoO~P#!PO]*oia*oi~P#!POT1[OV1OOW1fO^0rOeFeOl1[Oo+QO|%bO!OFeO!PFeO!QFeO!RFeO!SFeO!TFeO!U1TO!V1TO!Y1bO!Z1UO!h1lO!j%cO!k%cO!s1mO!t1WO!v%eO!w%wO!y&PO#R&RO#T&SO#V1qO#X1qO#YEZO#Z&UO#]1nO#r1ZO#s&QO#x1kO#|1YO$P1[O$X1]O$[EYO$]1^O$^1_O$_1`O$a1aO$c1oO$d1oO$e1cO$f1dO$g1pO$k1eO$m1gO$n1hO$q%xO'o0qO'u!^On*Xi~P)1OOT1[OV1OOW1fO^0rOeFeOl1[Oo+QO|%bO!OFeO!PFeO!QFeO!RFeO!SFeO!TFeO!U1TO!V1TO!Y1bO!Z1UO!h1lO!j%cO!k%cO!s1mO!t1WO!v%eO!w%wO!y&PO#R&RO#T&SO#V1qO#X1qO#YEZO#Z&UO#]1nO#r1ZO#s&QO#x1kO#|1YO$P1[O$X1]O$[EYO$]1^O$^1_O$_1`O$a1aO$c1oO$d1oO$e1cO$f1dO$g1pO$k1eO$m1gO$n1hO$q%xO'o0qO'u!^On*YX~P)1OO^*xOrEuO~O]EvO~OYExOa+si]+si~O]E{O~OVE|O~O%^E}O$S*|!c%X*|!c%Y*|!c%Z*|!c%_*|!c%b*|!c%c*|!c~P'DpO$S#]Oo)u!Z#p)u!Z~O]FPO~O]FQO~P#!POrFRO~P#!POrFSO#hJ_O#iJbO#oFTO~On*Ya~P$FrOYFWOa+sq]+sq~Oa+sq]+sq~P#!PO'oFXO~O%^FYO$S*|!k%X*|!k%Y*|!k%Z*|!k%_*|!k%b*|!k%c*|!k~P'DpOT1[OV1OOW1fO^0rOeFeOl1[Oo+QO|%bO!OFeO!PFeO!QFeO!RFeO!SFeO!TFeO!U1TO!V1TO!Y1bO!Z1UO!h1lO!j%cO!k%cO!s1mO!t1WO!v%eO!w%wO!y&PO#R&RO#T&SO#V1qO#X1qO#YEZO#Z&UO#]1nO#r1ZO#s&QO#x1kO#|1YO$P1[O$X1]O$[EYO$]1^O$^1_O$_1`O$a1aO$c1oO$d1oO$e1cO$f1dO$g1pO$k1eO$m1gO$n1hO$q%xO'o0qO'u!^On*Xy~P)1OOT1[OV1OOW1fO^0rOeFeOl1[Oo+QO|%bO!OFeO!PFeO!QFeO!RFeO!SFeO!TFeO!U1TO!V1TO!Y1bO!Z1UO!h1lO!j%cO!k%cO!s1mO!t1WO!v%eO!w%wO!y&PO#R&RO#T&SO#V1qO#X1qO#YEZO#Z&UO#]1nO#r1ZO#s&QO#x1kO#|1YO$P1[O$X1]O$[EYO$]1^O$^1_O$_1`O$a1aO$c1oO$d1oO$e1cO$f1dO$g1pO$k1eO$m1gO$n1hO$q%xO'o0qO'u!^On*Yi~P)1OOn*Yi~P$FrOa+sy]+sy~P#!PO'oF_O~OrF`O~P#!POa+s!R]+s!R~P#!POT1[OV1OOW1fO^0rOeFeOl1[Oo+QO|%bO!OFeO!PFeO!QFeO!RFeO!SFeO!TFeO!U1TO!V1TO!Y1bO!Z1UO!h1lO!j%cO!k%cO!s1mO!t1WO!v%eO!w%wO!y&PO#R&RO#T&SO#V1qO#X1qO#YEZO#Z&UO#]1nO#r1ZO#s&QO#x1kO#|1YO$P1[O$X1]O$[EYO$]1^O$^1_O$_1`O$a1aO$c1oO$d1oO$e1cO$f1dO$g1pO$k1eO$m1gO$n1hO$q%xO'o0qO'u!^On*Yy~P)1OOZ'tae'taf'ta!O'ta!P'ta!S'ta!T'ta!e'ta#e'ta#n'ta$x'ta$y'ta$z'ta$|'ta$}'ta%O'ta%P'ta%Q'ta%R'ta%S'ta%T'taY'ta!['ta!]'ta!^'ta!_'ta!`'ta!a'ta!b'ta!c'ta!d'ta!g'tan'tar'tad'ta%d'ta$S'ta%X'ta%Y'ta%Z'ta%_'ta%b'ta%c'ta%`'ta%a'ta%^'taV'ta%['ta#p'taT'taW'tal'tav'taw'tax'tay'ta|'ta!Q'ta!R'ta!U'ta!V'ta!Y'ta!Z'ta!h'ta!j'ta!k'ta!s'ta!t'ta!w'ta!y'ta#R'ta#T'ta#V'ta#X'ta#Y'ta#Z'ta#]'ta#r'ta#s'ta#x'ta#|'ta$P'ta$X'ta$]'ta$^'ta$_'ta$a'ta$c'ta$d'ta$e'ta$f'ta$g'ta$k'ta$m'ta$n'ta$q'ta'u'ta(X'ta(Y'ta%]'ta$['ta~P!&nOeFqOlLqO!OFqO!PFqO!QFqO!RFqO!SFqO!TFqO!YFqO!ZFmO#rLmO$S%UX%X%UX%Y%UX%Z%UX%_%UX%b%UX%c%UX~P##gO%X%{OT%UXZ%UX^%UXa%UXf%UXg%UXl%UXn%UX!e%UX!h%UX#e%UX#n%UX#r%UX#s%UX#x%UX#|%UX$P%UX$n%UX$x%UX$y%UX$z%UX$|%UX$}%UX%O%UX%P%UX%Q%UX%R%UX%S%UX%T%UX'o%UX'u%UXY%UX![%UX!]%UX!^%UX!_%UX!`%UX!a%UX!b%UX!c%UX!d%UX!g%UX%^%UX~OeFrO!OFrO!PFrO!QFrO!RFrO!SFrO!TFrO!UKgO!VKgO!YFrO!yFtOV%UXW%UXo%UXv%UXw%UXx%UXy%UX|%UX!Z%UX!j%UX!k%UX!s%UX!t%UX!v%UX!w%UX#R%UX#T%UX#V%UX#X%UX#Y%UX#Z%UX#]%UX$X%UX$]%UX$^%UX$_%UX$a%UX$c%UX$d%UX$e%UX$f%UX$g%UX$k%UX$m%UX$q%UX(X%UX(Y%UX$[%UX~P-NTOeFsOv%YOw%YOx%YOy%YO|%bO!OFsO!PFsO!QFsO!RFsO!SFsO!TFsO!UMaO!VMaO!YFsO!ZFoO!j%cO!k%cO!v%eO!w%wO!yLuO#R&RO#T&SO#V&TO#X&TO#YFpO#Z&UO$q%xO(X%WO(Y%XOc%UX$T%UX$U%UX%f%UX%g%UX%h%UX%i%UX%j%UX%k%UX%l%UX%m%UX%n%UX%o%UX%p%UX%q%UX%x%UX&T%UX&W%UX&X%UX~P-NTO^%ZOeFsOlLtO|%bO!OFsO!PFsO!QFsO!RFsO!SFsO!TFsO!UMaO!VMaO!YFsO!ZFoO!j%cO!k%cO!v%eO!w%wO!yLuO#R&RO#T&SO#V&TO#X&TO#YFpO#Z&UO#nFhO#rLpO#s&QO$q%xO%X%{O'o)SO'u!^O~P)1OOT(TX^(TXc(TXl(TX!R(TX!h(TX!y(TX#r(TX#s(TX#x(TX#|(TX$P(TX$T(TX$U(TX%f(TX%g(TX%h(TX%i(TX%j(TX%k(TX%l(TX%m(TX%n(TX%o(TX%p(TX%q(TX%x(TX&T(TX&W(TX&X(TX'o(TX'u(TX$n(TXW(TXo(TXv(TXw(TXx(TXy(TX|(TX!Q(TX!U(TX!V(TX!Y(TX!Z(TX!j(TX!k(TX!s(TX!t(TX!v(TX!w(TX#R(TX#T(TX#V(TX#X(TX#Y(TX#Z(TX#](TX$X(TX$](TX$^(TX$_(TX$a(TX$c(TX$d(TX$e(TX$f(TX$g(TX$k(TX$m(TX$q(TX(X(TX(Y(TX$[(TX~P#,hOd!lX~P!7bOY!lXZXXZ!lXZ!oXcXXeXXe!lXfXXg!lXhXX!O!lX!P!lX!S!lX!T!lX![!lX!]!lX!^!lX!_!lX!`!lX!a!lX!b!lX!c!lX!d!lX!e!lX!g!lX#e!lX#n!lX#p!lX#p#uX$x!lX$y!lX$z!lX$|!lX$}!lX%O!lX%P!lX%Q!lX%R!lX%S!lX%T!lX%^!lX~P'HxO!hHjO~P$;cO^%ZOeFrOlLrO|%bO!OFrO!PFrO!QFrO!RFrO!SFrO!TFrO!UKgO!VKgO!YFrO!ZFnO!hHkO!j%cO!k%cO!v%eO!w%wO!yFtO#R&RO#T&SO#V&TO#X&TO#YFpO#Z&UO#nFgO#rLnO#s&QO$q%xO%X%{O'o)SO'u!^O~P)1OO^%ZOeKWOlLsO|%bO!OKWO!PKWO!QKWO!RKWO!SKWO!TKWO!U%tO!V%tO!YKWO!ZKhO!hHlO!j%cO!k%cO!v%eO!w%wO!y&PO#R&RO#T&SO#V&TO#X&TO#Y%}O#Z&UO#nKaO#rLoO#s&QO$q%xO%X%{O'oFvO'u!^O~P)1OO^%ZOeFsOlLtO|%bO!OFsO!PFsO!QFsO!RFsO!SFsO!TFsO!UMaO!VMaO!YFsO!ZFoO!hHmO!j%cO!k%cO!v%eO!w%wO!yLuO#R&RO#T&SO#V&TO#X&TO#YFpO#Z&UO#nFhO#rLpO#s&QO$q%xO%X%{O'o)SO'u!^O~P)1OOg.zO~P$;cO^%ZOeFrOg.zOlLrO|%bO!OFrO!PFrO!QFrO!RFrO!SFrO!TFrO!UKgO!VKgO!YFrO!ZFnO!j%cO!k%cO!v%eO!w%wO!yFtO#R&RO#T&SO#V&TO#X&TO#YFpO#Z&UO#nFgO#rLnO#s&QO$q%xO%X%{O'o)SO'u!^O~P)1OO^%ZOeKWOg.zOlLsO|%bO!OKWO!PKWO!QKWO!RKWO!SKWO!TKWO!U%tO!V%tO!YKWO!ZKhO!j%cO!k%cO!v%eO!w%wO!y&PO#R&RO#T&SO#V&TO#X&TO#Y%}O#Z&UO#nKaO#rLoO#s&QO$q%xO%X%{O'oFvO'u!^O~P)1OO^%ZOeFsOg.zOlLtO|%bO!OFsO!PFsO!QFsO!RFsO!SFsO!TFsO!UMaO!VMaO!YFsO!ZFoO!j%cO!k%cO!v%eO!w%wO!yLuO#R&RO#T&SO#V&TO#X&TO#YFpO#Z&UO#nFhO#rLpO#s&QO$q%xO%X%{O'o)SO'u!^O~P)1OOeFqOlLqO!OFqO!PFqO!QFqO!RFqO!SFqO!TFqO!YFqO!ZFmO#rLmO$S%Ua%X%Ua%Y%Ua%Z%Ua%_%Ua%b%Ua%c%Ua~P$&]O%X%{OT%UaZ%Ua^%Uaa%Uaf%Uag%Ual%Uan%Ua!e%Ua!h%Ua#e%Ua#n%Ua#r%Ua#s%Ua#x%Ua#|%Ua$P%Ua$n%Ua$x%Ua$y%Ua$z%Ua$|%Ua$}%Ua%O%Ua%P%Ua%Q%Ua%R%Ua%S%Ua%T%Ua'o%Ua'u%UaY%Ua![%Ua!]%Ua!^%Ua!_%Ua!`%Ua!a%Ua!b%Ua!c%Ua!d%Ua!g%Ua%^%Ua~OeFrO!OFrO!PFrO!QFrO!RFrO!SFrO!TFrO!UKgO!VKgO!YFrO!yFtOV%UaW%Uao%Uav%Uaw%Uax%Uay%Ua|%Ua!Z%Ua!j%Ua!k%Ua!s%Ua!t%Ua!v%Ua!w%Ua#R%Ua#T%Ua#V%Ua#X%Ua#Y%Ua#Z%Ua#]%Ua$X%Ua$]%Ua$^%Ua$_%Ua$a%Ua$c%Ua$d%Ua$e%Ua$f%Ua$g%Ua$k%Ua$m%Ua$q%Ua(X%Ua(Y%Ua$[%Ua~P.BkO^%ZOeKWOlLsO|%bO!OKWO!PKWO!QKWO!RKWO!SKWO!TKWO!U%tO!V%tO!YKWO!ZKhO!j%cO!k%cO!v%eO!w%wO!y&PO#R&RO#T&SO#V&TO#X&TO#Y%}O#Z&UO#rLoO#s&QO$q%xO%X%{O'oFvO'u!^OZ%Uaf%Uag%Ua!e%Ua#e%Ua#n%Ua#p%Ua$x%Ua$y%Ua$z%Ua$|%Ua$}%Ua%O%Ua%P%Ua%Q%Ua%R%Ua%S%Ua%T%UaY%Ua![%Ua!]%Ua!^%Ua!_%Ua!`%Ua!a%Ua!b%Ua!c%Ua!d%Ua!g%Ua%^%Ua~P)1OOeFsOv%YOw%YOx%YOy%YO|%bO!OFsO!PFsO!QFsO!RFsO!SFsO!TFsO!UMaO!VMaO!YFsO!ZFoO!j%cO!k%cO!v%eO!w%wO!yLuO#R&RO#T&SO#V&TO#X&TO#YFpO#Z&UO$q%xO(X%WO(Y%XOc%Ua$T%Ua$U%Ua%f%Ua%g%Ua%h%Ua%i%Ua%j%Ua%k%Ua%l%Ua%m%Ua%n%Ua%o%Ua%p%Ua%q%Ua%x%Ua&T%Ua&W%Ua&X%Ua~P.BkOo+QO~P$;cO^%ZOeFrOlLrOo+QO|%bO!OFrO!PFrO!QFrO!RFrO!SFrO!TFrO!UKgO!VKgO!YFrO!ZFnO!j%cO!k%cO!v%eO!w%wO!yFtO#R&RO#T&SO#V&TO#X&TO#YFpO#Z&UO#nFgO#rLnO#s&QO$q%xO%X%{O'o)SO'u!^O~P)1OO^%ZOeKWOlLsOo+QO|%bO!OKWO!PKWO!QKWO!RKWO!SKWO!TKWO!U%tO!V%tO!YKWO!ZKhO!j%cO!k%cO!v%eO!w%wO!y&PO#R&RO#T&SO#V&TO#X&TO#Y%}O#Z&UO#nKaO#rLoO#s&QO$q%xO%X%{O'oFvO'u!^O~P)1OO^%ZOeFsOlLtOo+QO|%bO!OFsO!PFsO!QFsO!RFsO!SFsO!TFsO!UMaO!VMaO!YFsO!ZFoO!j%cO!k%cO!v%eO!w%wO!yLuO#R&RO#T&SO#V&TO#X&TO#YFpO#Z&UO#nFhO#rLpO#s&QO$q%xO%X%{O'o)SO'u!^O~P)1OOW}ao}av}aw}ax}ay}a|}a!Q}a!U}a!V}a!Y}a!Z}a!j}a!k}a!s}a!t}a!v}a!w}a#R}a#T}a#V}a#X}a#Y}a#Z}a#]}a$X}a$]}a$^}a$_}a$a}a$c}a$d}a$e}a$f}a$g}a$k}a$m}a$q}a(X}a(Y}a$[}a~P$-yOY}a![}a!]}a!^}a!_}a!`}a!a}a!b}a!c}a!d}a!g}a$S}a%X}a%Y}a%Z}a%_}a%b}a%c}a%^}a~P'DpOT}aV}aW}aY}a^}aa}al}an}ao}av}aw}ax}ay}a|}a!Q}a!R}a!U}a!V}a!Y}a!Z}a![}a!]}a!^}a!_}a!`}a!a}a!b}a!c}a!d}a!g}a!h}a!j}a!k}a!s}a!t}a!v}a!w}a!y}a#R}a#T}a#V}a#X}a#Y}a#Z}a#]}a#r}a#s}a#x}a#|}a$P}a$X}a$]}a$^}a$_}a$a}a$c}a$d}a$e}a$f}a$g}a$k}a$m}a$n}a$q}a'o}a'u}a(X}a(Y}a%^}a$[}a~P,@nOY}a![}a!]}a!^}a!_}a!`}a!a}a!b}a!c}a!d}a!g}a#p}a%^}a~P,:cOZG`OeGSOfLyOgGOO!OGWO!PGWO!SGhO!TGlO!eG`O#eG`O#nHQO$xGSO$yGSO$zG[O$|HRO$}KnO%OGdO%PGdO%QGpO%RGtO%SGxO%TG|O~OT}aY}a^}aa}ac}al}an}a!R}a![}a!]}a!^}a!_}a!`}a!a}a!b}a!c}a!d}a!g}a!h}a!y}a#r}a#s}a#x}a#|}a$P}a$T}a$U}a%f}a%g}a%h}a%i}a%j}a%k}a%l}a%m}a%n}a%o}a%p}a%q}a%x}a&T}a&W}a&X}a'o}a'u}a$n}a%^}a~P/2oOV`XW`XZ!oX^!oXe`Xo`Xv`Xw`Xx`Xy`X|`X!O`X!P`X!Q`X!S`X!T`X!U`X!V`X!Y`X!Z`X!j`X!k`X!s`X!t`X!v`X!w`X#R`X#T`X#V`X#X`X#Y`X#Z`X#]`X$X`X$]`X$^`X$_`X$a`X$c`X$d`X$e`X$f`X$g`X$k`X$m`X$q`X(X`X(Y`X$[`X~P(@oOY`XZXXZ`XZ!oXcXXeXXfXXg`XhXX![`X!]`X!^`X!_`X!``X!a`X!b`X!c`X!d`X!g`X~P,>bO]`Xa`X#p#uXY`X~O$S(^i%X(^i%Y(^i%Z(^i%_(^i%b(^i%c(^iY(^i![(^i!](^i!^(^i!_(^i!`(^i!a(^i!b(^i!c(^i!d(^i!g(^i%^(^i~P'DpOT(^iV(^iW(^i^(^ia(^il(^in(^io(^iv(^iw(^ix(^iy(^i|(^i!Q(^i!R(^i!U(^i!V(^i!Y(^i!Z(^i!h(^i!j(^i!k(^i!s(^i!t(^i!v(^i!w(^i!y(^i#R(^i#T(^i#V(^i#X(^i#Y(^i#Z(^i#](^i#r(^i#s(^i#x(^i#|(^i$P(^i$X(^i$](^i$^(^i$_(^i$a(^i$c(^i$d(^i$e(^i$f(^i$g(^i$k(^i$m(^i$n(^i$q(^i'o(^i'u(^i(X(^i(Y(^iY(^i![(^i!](^i!^(^i!_(^i!`(^i!a(^i!b(^i!c(^i!d(^i!g(^i%^(^i$[(^i~P,@nO#p(^iY(^i![(^i!](^i!^(^i!_(^i!`(^i!a(^i!b(^i!c(^i!d(^i!g(^i%^(^i~P,:cOT(^i^(^ia(^ic(^il(^in(^i!R(^i!h(^i!y(^i#r(^i#s(^i#x(^i#|(^i$P(^i$T(^i$U(^i%f(^i%g(^i%h(^i%i(^i%j(^i%k(^i%l(^i%m(^i%n(^i%o(^i%p(^i%q(^i%x(^i&T(^i&W(^i&X(^i'o(^i'u(^i$n(^iY(^i![(^i!](^i!^(^i!_(^i!`(^i!a(^i!b(^i!c(^i!d(^i!g(^i%^(^i~P/2oOeGPO!OGTO!PGTO#nG}O$xGPO$yGPOZ$wif$wi!S$wi!T$wi!e$wi#e$wi$S$wi$|$wi$}$wi%O$wi%P$wi%Q$wi%R$wi%S$wi%T$wi%X$wi%Y$wi%Z$wi%_$wi%b$wi%c$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi~OgF{O$zGXO~P/F]OeGQO!OGUO!PGUO#nHOO$xGQO$yGQOT$wiV$wiW$wiZ$wi^$wia$wif$wil$win$wio$wiv$wiw$wix$wiy$wi|$wi!Q$wi!R$wi!S$wi!T$wi!U$wi!V$wi!Y$wi!Z$wi!e$wi!h$wi!j$wi!k$wi!s$wi!t$wi!v$wi!w$wi!y$wi#R$wi#T$wi#V$wi#X$wi#Y$wi#Z$wi#]$wi#e$wi#r$wi#s$wi#x$wi#|$wi$P$wi$X$wi$]$wi$^$wi$_$wi$a$wi$c$wi$d$wi$e$wi$f$wi$g$wi$k$wi$m$wi$n$wi$q$wi$|$wi$}$wi%O$wi%P$wi%Q$wi%R$wi%S$wi%T$wi'o$wi'u$wi(X$wi(Y$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi$[$wi~OgF|O$zGYO~P/ISOeGRO!OGVO!PGVO#nHPO$xGRO$yGROZ$wif$wi!S$wi!T$wi!e$wi#e$wi#p$wi$|$wi$}$wi%O$wi%P$wi%Q$wi%R$wi%S$wi%T$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi~OgF}O$zGZO~P0 YOeGSO!OGWO!PGWO#nHQO$xGSO$yGSOT$wiZ$wi^$wia$wic$wif$wil$win$wi!R$wi!S$wi!T$wi!e$wi!h$wi!y$wi#e$wi#r$wi#s$wi#x$wi#|$wi$P$wi$T$wi$U$wi$|$wi$}$wi%O$wi%P$wi%Q$wi%R$wi%S$wi%T$wi%f$wi%g$wi%h$wi%i$wi%j$wi%k$wi%l$wi%m$wi%n$wi%o$wi%p$wi%q$wi%x$wi&T$wi&W$wi&X$wi'o$wi'u$wi$n$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi~OgGOO$zG[O~P0#mO#nG}OZ$wif$wig$wi!O$wi!P$wi!S$wi!T$wi!e$wi#e$wi$S$wi$z$wi$|$wi$}$wi%O$wi%P$wi%Q$wi%R$wi%S$wi%T$wi%X$wi%Y$wi%Z$wi%_$wi%b$wi%c$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi~Oe$wi$x$wi$y$wi~P0([OT$wiV$wiW$wiZ$wi^$wia$wie$wif$wig$wil$win$wio$wiv$wiw$wix$wiy$wi|$wi!O$wi!P$wi!Q$wi!R$wi!S$wi!T$wi!U$wi!V$wi!Y$wi!Z$wi!e$wi!h$wi!j$wi!k$wi!s$wi!t$wi!v$wi!w$wi!y$wi#R$wi#T$wi#V$wi#X$wi#Y$wi#Z$wi#]$wi#e$wi#r$wi#s$wi#x$wi#|$wi$P$wi$X$wi$]$wi$^$wi$_$wi$a$wi$c$wi$d$wi$e$wi$f$wi$g$wi$k$wi$m$wi$n$wi$q$wi$x$wi$y$wi$z$wi$|$wi$}$wi%O$wi%P$wi%Q$wi%R$wi%S$wi%T$wi'o$wi'u$wi(X$wi(Y$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi$[$wi~O#nHOO~P0+ROZ$wie$wif$wig$wi!O$wi!P$wi!S$wi!T$wi!e$wi#e$wi$x$wi$y$wi$z$wi$|$wi$}$wi%O$wi%P$wi%Q$wi%R$wi%S$wi%T$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi~O#nHPO#p$wi~P01XO#nHQOT$wi^$wia$wic$wil$win$wi!R$wi!h$wi!y$wi#r$wi#s$wi#x$wi#|$wi$P$wi$T$wi$U$wi%f$wi%g$wi%h$wi%i$wi%j$wi%k$wi%l$wi%m$wi%n$wi%o$wi%p$wi%q$wi%x$wi&T$wi&W$wi&X$wi'o$wi'u$wi$n$wi~P01XOeGPO$xGPO$yGPO~P0([OeGQO#nHOO$xGQO$yGQOT$wiV$wiW$wiZ$wi^$wia$wif$wig$wil$win$wio$wiv$wiw$wix$wiy$wi|$wi!Q$wi!R$wi!S$wi!T$wi!U$wi!V$wi!Y$wi!Z$wi!e$wi!h$wi!j$wi!k$wi!s$wi!t$wi!v$wi!w$wi!y$wi#R$wi#T$wi#V$wi#X$wi#Y$wi#Z$wi#]$wi#e$wi#r$wi#s$wi#x$wi#|$wi$P$wi$X$wi$]$wi$^$wi$_$wi$a$wi$c$wi$d$wi$e$wi$f$wi$g$wi$k$wi$m$wi$n$wi$q$wi$z$wi$|$wi$}$wi%O$wi%P$wi%Q$wi%R$wi%S$wi%T$wi'o$wi'u$wi(X$wi(Y$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi$[$wi~O!O$wi!P$wi~P06_OeGRO#nHPO$xGRO$yGROZ$wif$wig$wi!S$wi!T$wi!e$wi#e$wi#p$wi$z$wi$|$wi$}$wi%O$wi%P$wi%Q$wi%R$wi%S$wi%T$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi~O!O$wi!P$wi~P0<eOeGSO#nHQO$xGSO$yGSOT$wiZ$wi^$wia$wic$wif$wig$wil$win$wi!R$wi!S$wi!T$wi!e$wi!h$wi!y$wi#e$wi#r$wi#s$wi#x$wi#|$wi$P$wi$T$wi$U$wi$z$wi$|$wi$}$wi%O$wi%P$wi%Q$wi%R$wi%S$wi%T$wi%f$wi%g$wi%h$wi%i$wi%j$wi%k$wi%l$wi%m$wi%n$wi%o$wi%p$wi%q$wi%x$wi&T$wi&W$wi&X$wi'o$wi'u$wi$n$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi~O!O$wi!P$wi~P0>xOg$wi$z$wi~P/F]Og$wi$z$wi~P/ISOg$wi$z$wi~P0 YOg$wi$z$wi~P0#mOZG]OeGPOgF{O!OGTO!PGTO!eG]O#eG]O#nG}O$xGPO$yGPO$zGXO$|)|O$})}Of$wi!S$wi!T$wi$S$wi%Q$wi%R$wi%S$wi%T$wi%X$wi%Y$wi%Z$wi%_$wi%b$wi%c$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi~O%O$wi%P$wi~P0DaOZG^OeGQOgF|O!OGUO!PGUO!eG^O#eG^O#nHOO$xGQO$yGQO$zGYO$|)|O$}KoOT$wiV$wiW$wi^$wia$wif$wil$win$wio$wiv$wiw$wix$wiy$wi|$wi!Q$wi!R$wi!S$wi!T$wi!U$wi!V$wi!Y$wi!Z$wi!h$wi!j$wi!k$wi!s$wi!t$wi!v$wi!w$wi!y$wi#R$wi#T$wi#V$wi#X$wi#Y$wi#Z$wi#]$wi#r$wi#s$wi#x$wi#|$wi$P$wi$X$wi$]$wi$^$wi$_$wi$a$wi$c$wi$d$wi$e$wi$f$wi$g$wi$k$wi$m$wi$n$wi$q$wi%Q$wi%R$wi%S$wi%T$wi'o$wi'u$wi(X$wi(Y$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi$[$wi~O%O$wi%P$wi~P0GWOZG_OeGROgF}O!OGVO!PGVO!eG_O#eG_O#nHPO$xGRO$yGRO$zGZO$|)|O$})}Of$wi!S$wi!T$wi#p$wi%Q$wi%R$wi%S$wi%T$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi~O%O$wi%P$wi~P0M^OZG`OeGSOgGOO!OGWO!PGWO!eG`O#eG`O#nHQO$xGSO$yGSO$zG[O$|HRO$}KnOT$wi^$wia$wic$wif$wil$win$wi!R$wi!S$wi!T$wi!h$wi!y$wi#r$wi#s$wi#x$wi#|$wi$P$wi$T$wi$U$wi%Q$wi%R$wi%S$wi%T$wi%f$wi%g$wi%h$wi%i$wi%j$wi%k$wi%l$wi%m$wi%n$wi%o$wi%p$wi%q$wi%x$wi&T$wi&W$wi&X$wi'o$wi'u$wi$n$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi~O%O$wi%P$wi~P1 qO%OGaO%PGaO~P0DaO%OGbO%PGbO~P0GWO%OGcO%PGcO~P0M^O%OGdO%PGdO~P1 qOZG]OeGPOgF{O!OGTO!PGTO!SGeO!eG]O#eG]O#nG}O$xGPO$yGPO$zGXO$|)|O$})}O%OGaO%PGaOf$wi$S$wi%Q$wi%R$wi%S$wi%T$wi%X$wi%Y$wi%Z$wi%_$wi%b$wi%c$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi~O!T$wi~P1'YOZG^OeGQOgF|O!OGUO!PGUO!SGfO!eG^O#eG^O#nHOO$xGQO$yGQO$zGYO$|)|O$}KoO%OGbO%PGbOT$wiV$wiW$wi^$wia$wif$wil$win$wio$wiv$wiw$wix$wiy$wi|$wi!Q$wi!R$wi!U$wi!V$wi!Y$wi!Z$wi!h$wi!j$wi!k$wi!s$wi!t$wi!v$wi!w$wi!y$wi#R$wi#T$wi#V$wi#X$wi#Y$wi#Z$wi#]$wi#r$wi#s$wi#x$wi#|$wi$P$wi$X$wi$]$wi$^$wi$_$wi$a$wi$c$wi$d$wi$e$wi$f$wi$g$wi$k$wi$m$wi$n$wi$q$wi%Q$wi%R$wi%S$wi%T$wi'o$wi'u$wi(X$wi(Y$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi$[$wi~O!T$wi~P1*POZG_OeGROgF}O!OGVO!PGVO!SGgO!eG_O#eG_O#nHPO$xGRO$yGRO$zGZO$|)|O$})}O%OGcO%PGcOf$wi#p$wi%Q$wi%R$wi%S$wi%T$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi~O!T$wi~P10VOZG`OeGSOgGOO!OGWO!PGWO!SGhO!eG`O#eG`O#nHQO$xGSO$yGSO$zG[O$|HRO$}KnO%OGdO%PGdOT$wi^$wia$wic$wif$wil$win$wi!R$wi!h$wi!y$wi#r$wi#s$wi#x$wi#|$wi$P$wi$T$wi$U$wi%Q$wi%R$wi%S$wi%T$wi%f$wi%g$wi%h$wi%i$wi%j$wi%k$wi%l$wi%m$wi%n$wi%o$wi%p$wi%q$wi%x$wi&T$wi&W$wi&X$wi'o$wi'u$wi$n$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi~O!T$wi~P12jO!TGiO~P1'YO!TGjO~P1*PO!TGkO~P10VO!TGlO~P12jOZG]OeGPOgF{O!OGTO!PGTO!SGeO!TGiO!eG]O#eG]O#nG}O$xGPO$yGPO$zGXO$|)|O$})}O%OGaO%PGaO%QGmOf$wi$S$wi%S$wi%T$wi%X$wi%Y$wi%Z$wi%_$wi%b$wi%c$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi~O%R$wi~P17uOZG^OeGQOgF|O!OGUO!PGUO!SGfO!TGjO!eG^O#eG^O#nHOO$xGQO$yGQO$zGYO$|)|O$}KoO%OGbO%PGbO%QGnOT$wiV$wiW$wi^$wia$wif$wil$win$wio$wiv$wiw$wix$wiy$wi|$wi!Q$wi!R$wi!U$wi!V$wi!Y$wi!Z$wi!h$wi!j$wi!k$wi!s$wi!t$wi!v$wi!w$wi!y$wi#R$wi#T$wi#V$wi#X$wi#Y$wi#Z$wi#]$wi#r$wi#s$wi#x$wi#|$wi$P$wi$X$wi$]$wi$^$wi$_$wi$a$wi$c$wi$d$wi$e$wi$f$wi$g$wi$k$wi$m$wi$n$wi$q$wi%S$wi%T$wi'o$wi'u$wi(X$wi(Y$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi$[$wi~O%R$wi~P1:lOZG_OeGROgF}O!OGVO!PGVO!SGgO!TGkO!eG_O#eG_O#nHPO$xGRO$yGRO$zGZO$|)|O$})}O%OGcO%PGcO%QGoOf$wi#p$wi%S$wi%T$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi~O%R$wi~P1@rOZG`OeGSOgGOO!OGWO!PGWO!SGhO!TGlO!eG`O#eG`O#nHQO$xGSO$yGSO$zG[O$|HRO$}KnO%OGdO%PGdO%QGpOT$wi^$wia$wic$wif$wil$win$wi!R$wi!h$wi!y$wi#r$wi#s$wi#x$wi#|$wi$P$wi$T$wi$U$wi%S$wi%T$wi%f$wi%g$wi%h$wi%i$wi%j$wi%k$wi%l$wi%m$wi%n$wi%o$wi%p$wi%q$wi%x$wi&T$wi&W$wi&X$wi'o$wi'u$wi$n$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi~O%R$wi~P1CVO%RGqO~P17uO%RGrO~P1:lO%RGsO~P1@rO%RGtO~P1CVOZG]OeGPOgF{O!OGTO!PGTO!SGeO!TGiO!eG]O#eG]O#nG}O$xGPO$yGPO$zGXO$|)|O$})}O%OGaO%PGaO%QGmO%RGqO%SGuO%TGyO~Of$wi$S$wi%X$wi%Y$wi%Z$wi%_$wi%b$wi%c$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi~P1HbOT$wiV$wiW$wi^$wia$wif$wil$win$wio$wiv$wiw$wix$wiy$wi|$wi!Q$wi!R$wi!U$wi!V$wi!Y$wi!Z$wi!h$wi!j$wi!k$wi!s$wi!t$wi!v$wi!w$wi!y$wi#R$wi#T$wi#V$wi#X$wi#Y$wi#Z$wi#]$wi#r$wi#s$wi#x$wi#|$wi$P$wi$X$wi$]$wi$^$wi$_$wi$a$wi$c$wi$d$wi$e$wi$f$wi$g$wi$k$wi$m$wi$n$wi$q$wi'o$wi'u$wi(X$wi(Y$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi$[$wi~OZG^OeGQOgF|O!OGUO!PGUO!SGfO!TGjO!eG^O#eG^O#nHOO$xGQO$yGQO$zGYO$|)|O$}KoO%OGbO%PGbO%QGnO%RGrO%SGvO%TGzO~P1KXOZG_OeGROgF}O!OGVO!PGVO!SGgO!TGkO!eG_O#eG_O#nHPO$xGRO$yGRO$zGZO$|)|O$})}O%OGcO%PGcO%QGoO%RGsO%SGwO%TG{O~Of$wi#p$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi~P2#_OT$wi^$wia$wic$wif$wil$win$wi!R$wi!h$wi!y$wi#r$wi#s$wi#x$wi#|$wi$P$wi$T$wi$U$wi%f$wi%g$wi%h$wi%i$wi%j$wi%k$wi%l$wi%m$wi%n$wi%o$wi%p$wi%q$wi%x$wi&T$wi&W$wi&X$wi'o$wi'u$wi$n$wiY$wi![$wi!]$wi!^$wi!_$wi!`$wi!a$wi!b$wi!c$wi!d$wi!g$wi%^$wi~OZG`OeGSOgGOO!OGWO!PGWO!SGhO!TGlO!eG`O#eG`O#nHQO$xGSO$yGSO$zG[O$|HRO$}KnO%OGdO%PGdO%QGpO%RGtO%SGxO%TG|O~P2%rO^XXh!lX#h!lX#i!lX#o!lX#p!lXa!lXd!lX]!lXn!lXr!lX~P$7^OT!lXV!lXW!lXZ!lX^XX^!lXa!lXe!lXf!lXg!lXh!lXl!lXn!lXo!lXv!lXw!lXx!lXy!lX|!lX!O!lX!P!lX!Q!lX!R!lX!S!lX!T!lX!U!lX!V!lX!Y!lX!Z!lX!e!lX!h!lX!j!lX!k!lX!s!lX!t!lX!v!lX!w!lX!y!lX#R!lX#T!lX#V!lX#X!lX#Y!lX#Z!lX#]!lX#e!lX#h!lX#i!lX#n!lX#r!lX#s!lX#x!lX#|!lX$P!lX$X!lX$]!lX$^!lX$_!lX$a!lX$c!lX$d!lX$e!lX$f!lX$g!lX$k!lX$m!lX$n!lX$q!lX$x!lX$y!lX$z!lX$|!lX$}!lX%O!lX%P!lX%Q!lX%R!lX%S!lX%T!lX'o!lX'u!lX(X!lX(Y!lXY!lX![!lX!]!lX!^!lX!_!lX!`!lX!a!lX!b!lX!c!lX!d!lX!g!lX%^!lX$[!lX~P$7^OT!lXZ!lX^XX^!lXa!lXc!lXe!lXf!lXg!lXh!lXl!lXn!lX!O!lX!P!lX!R!lX!S!lX!T!lX!e!lX!h!lX!y!lX#e!lX#h!lX#i!lX#n!lX#r!lX#s!lX#x!lX#|!lX$P!lX$T!lX$U!lX$x!lX$y!lX$z!lX$|!lX$}!lX%O!lX%P!lX%Q!lX%R!lX%S!lX%T!lX%f!lX%g!lX%h!lX%i!lX%j!lX%k!lX%l!lX%m!lX%n!lX%o!lX%p!lX%q!lX%x!lX&T!lX&W!lX&X!lX'o!lX'u!lX$n!lXY!lX![!lX!]!lX!^!lX!_!lX!`!lX!a!lX!b!lX!c!lX!d!lX!g!lX%^!lX~P$7^OZIpO^/dOc/bOgIpOo/^O!eIpO!t/fO#_/cO#eIpO#gIsO'oImO'u!^O~P)1OOZIqO^/dOc/bOgIqOo/^O!eIqO!t/fO#_/cO#eIqO#gItO'oInO'u!^O~P)1OO$S*vX%X*vX%Y*vX%Z*vX%_*vX%b*vX%c*vXY*vX![*vX!]*vX!^*vX!_*vX!`*vX!a*vX!b*vX!c*vX!d*vX!g*vX%^*vX~P'DpOT*vXV*vXW*vX^*vXa*vXl*vXn*vXo*vXv*vXw*vXx*vXy*vX|*vX!Q*vX!R*vX!U*vX!V*vX!Y*vX!Z*vX!h*vX!j*vX!k*vX!s*vX!t*vX!v*vX!w*vX!y*vX#R*vX#T*vX#V*vX#X*vX#Y*vX#Z*vX#]*vX#r*vX#s*vX#x*vX#|*vX$P*vX$X*vX$]*vX$^*vX$_*vX$a*vX$c*vX$d*vX$e*vX$f*vX$g*vX$k*vX$m*vX$n*vX$q*vX'o*vX'u*vX(X*vX(Y*vXY*vX![*vX!]*vX!^*vX!_*vX!`*vX!a*vX!b*vX!c*vX!d*vX!g*vX%^*vX$[*vX~P,@nO#p*vXY*vX![*vX!]*vX!^*vX!_*vX!`*vX!a*vX!b*vX!c*vX!d*vX!g*vX%^*vX~P,:cOT*vX^*vXa*vXc*vXl*vXn*vX!R*vX!h*vX!y*vX#r*vX#s*vX#x*vX#|*vX$P*vX$T*vX$U*vX%f*vX%g*vX%h*vX%i*vX%j*vX%k*vX%l*vX%m*vX%n*vX%o*vX%p*vX%q*vX%x*vX&T*vX&W*vX&X*vX'o*vX'u*vX$n*vXY*vX![*vX!]*vX!^*vX!_*vX!`*vX!a*vX!b*vX!c*vX!d*vX!g*vX%^*vX~P/2oO$S+Pa%X+Pa%Y+Pa%Z+Pa%^+Pa%_+Pa%b+Pa%c+PaY+Pa![+Pa!]+Pa!^+Pa!_+Pa!`+Pa!a+Pa!b+Pa!c+Pa!d+Pa!g+Pa~P'DpOT+PaV+PaW+Pa^+Paa+Pal+Pan+Pao+Pav+Paw+Pax+Pay+Pa|+Pa!Q+Pa!R+Pa!U+Pa!V+Pa!Y+Pa!Z+Pa!h+Pa!j+Pa!k+Pa!s+Pa!t+Pa!v+Pa!w+Pa!y+Pa#R+Pa#T+Pa#V+Pa#X+Pa#Y+Pa#Z+Pa#]+Pa#r+Pa#s+Pa#x+Pa#|+Pa$P+Pa$X+Pa$]+Pa$^+Pa$_+Pa$a+Pa$c+Pa$d+Pa$e+Pa$f+Pa$g+Pa$k+Pa$m+Pa$n+Pa$q+Pa%^+Pa'o+Pa'u+Pa(X+Pa(Y+PaY+Pa![+Pa!]+Pa!^+Pa!_+Pa!`+Pa!a+Pa!b+Pa!c+Pa!d+Pa!g+Pa$[+Pa~P,@nOT+Pa^+Paa+Pac+Pal+Pan+Pa!R+Pa!h+Pa!y+Pa#r+Pa#s+Pa#x+Pa#|+Pa$P+Pa$T+Pa$U+Pa%^+Pa%f+Pa%g+Pa%h+Pa%i+Pa%j+Pa%k+Pa%l+Pa%m+Pa%n+Pa%o+Pa%p+Pa%q+Pa%x+Pa&T+Pa&W+Pa&X+Pa'o+Pa'u+Pa$n+PaY+Pa![+Pa!]+Pa!^+Pa!_+Pa!`+Pa!a+Pa!b+Pa!c+Pa!d+Pa!g+Pa~P/2oO#p+Pa%^+PaY+Pa![+Pa!]+Pa!^+Pa!_+Pa!`+Pa!a+Pa!b+Pa!c+Pa!d+Pa!g+Pa~P,:cOT$uiY$uiZ$ui^$uia$uie$uif$uig$uih$uil$uin$ui!O$ui!P$ui!Q$ui!R$ui!S$ui!T$ui!U$ui!V$ui![$ui!]$ui!^$ui!_$ui!`$ui!a$ui!b$ui!c$ui!d$ui!e$ui!g$ui!h$ui!y$ui#]$ui#e$ui#n$ui#q$ui#r$ui#s$ui#x$ui#|$ui$P$ui$p$ui$x$ui$y$ui$z$ui$|$ui$}$ui%O$ui%P$ui%Q$ui%R$ui%S$ui%T$ui'o$ui'u$ui$n$ui%^$ui~Oo0nOc$ui$T$ui$U$ui%f$ui%g$ui%h$ui%i$ui%j$ui%k$ui%l$ui%m$ui%n$ui%o$ui%p$ui%q$ui%x$ui&T$ui&W$ui&X$ui~P2LZOc#yOV$uiW$uio$uiv$uiw$uix$uiy$ui|$ui!Y$ui!Z$ui!j$ui!k$ui!s$ui!t$ui!v$ui!w$ui#R$ui#T$ui#V$ui#X$ui#Y$ui#Z$ui$X$ui$]$ui$^$ui$_$ui$a$ui$c$ui$d$ui$e$ui$f$ui$g$ui$k$ui$m$ui$q$ui(X$ui(Y$ui$[$ui~P2LZO^%ZOeFsOlLtOo0nO|%bO!OFsO!PFsO!QFsO!RFsO!SFsO!TFsO!UMaO!VMaO!YFsO!ZFoO!hJvO!j%cO!k%cO!v%eO!w%wO!yLuO#R&RO#T&SO#V&TO#X&TO#YFpO#Z&UO#nFhO#rLpO#s&QO$q%xO%X%{O'o)SO'u!^O~P)1OO^%ZOeFrOlLrOo0nO|%bO!OFrO!PFrO!QFrO!RFrO!SFrO!TFrO!UKgO!VKgO!YFrO!ZFnO!hJwO!j%cO!k%cO!v%eO!w%wO!yFtO#R&RO#T&SO#V&TO#X&TO#YFpO#Z&UO#nFgO#rLnO#s&QO$q%xO%X%{O'o)SO'u!^O~P)1OO$S(^q%X(^q%Y(^q%Z(^q%_(^q%b(^q%c(^qY(^q![(^q!](^q!^(^q!_(^q!`(^q!a(^q!b(^q!c(^q!d(^q!g(^q%^(^q~P'DpOT(^qV(^qW(^q^(^qa(^ql(^qn(^qo(^qv(^qw(^qx(^qy(^q|(^q!Q(^q!R(^q!U(^q!V(^q!Y(^q!Z(^q!h(^q!j(^q!k(^q!s(^q!t(^q!v(^q!w(^q!y(^q#R(^q#T(^q#V(^q#X(^q#Y(^q#Z(^q#](^q#r(^q#s(^q#x(^q#|(^q$P(^q$X(^q$](^q$^(^q$_(^q$a(^q$c(^q$d(^q$e(^q$f(^q$g(^q$k(^q$m(^q$n(^q$q(^q'o(^q'u(^q(X(^q(Y(^qY(^q![(^q!](^q!^(^q!_(^q!`(^q!a(^q!b(^q!c(^q!d(^q!g(^q%^(^q$[(^q~P,@nO#p(^qY(^q![(^q!](^q!^(^q!_(^q!`(^q!a(^q!b(^q!c(^q!d(^q!g(^q%^(^q~P,:cOT(^q^(^qa(^qc(^ql(^qn(^q!R(^q!h(^q!y(^q#r(^q#s(^q#x(^q#|(^q$P(^q$T(^q$U(^q%f(^q%g(^q%h(^q%i(^q%j(^q%k(^q%l(^q%m(^q%n(^q%o(^q%p(^q%q(^q%x(^q&T(^q&W(^q&X(^q'o(^q'u(^q$n(^qY(^q![(^q!](^q!^(^q!_(^q!`(^q!a(^q!b(^q!c(^q!d(^q!g(^q%^(^q~P/2oO$S*uO%X%{O%Y*qO%Z*rO%_*vO%bH^O%cMSO~O$S*uO%X%{O%Y*qO%Z*rO%_*vO%bH_O%cMTO~O$S*uO%X%{O%Y*qO%Z*rO%_*vO%bHaO%cMVO~O$S*uO%X%{O%Y*qO%Z*rO%_*vO%bH`O%cMUO~OT$uqY$uqZ$uq^$uqa$uqe$uqf$uqg$uqh$uql$uqn$uq!O$uq!P$uq!Q$uq!R$uq!S$uq!T$uq!U$uq!V$uq![$uq!]$uq!^$uq!_$uq!`$uq!a$uq!b$uq!c$uq!d$uq!e$uq!g$uq!h$uq!y$uq#]$uq#e$uq#n$uq#q$uq#r$uq#s$uq#x$uq#|$uq$P$uq$p$uq$x$uq$y$uq$z$uq$|$uq$}$uq%O$uq%P$uq%Q$uq%R$uq%S$uq%T$uq'o$uq'u$uq$n$uq%^$uq~Oo0nOc$uq$T$uq$U$uq%f$uq%g$uq%h$uq%i$uq%j$uq%k$uq%l$uq%m$uq%n$uq%o$uq%p$uq%q$uq%x$uq&T$uq&W$uq&X$uq~P36pOc#yOV$uqW$uqo$uqv$uqw$uqx$uqy$uq|$uq!Y$uq!Z$uq!j$uq!k$uq!s$uq!t$uq!v$uq!w$uq#R$uq#T$uq#V$uq#X$uq#Y$uq#Z$uq$X$uq$]$uq$^$uq$_$uq$a$uq$c$uq$d$uq$e$uq$f$uq$g$uq$k$uq$m$uq$q$uq(X$uq(Y$uq$[$uq~P36pOT)pX^)pXa)pXc)pXl)pXn)pX!R)pX!h)pX!y)pX#r)pX#s)pX#x)pX#|)pX$P)pX$T)pX$U)pX%f)pX%g)pX%h)pX%i)pX%j)pX%k)pX%l)pX%m)pX%n)pX%o)pX%p)pX%q)pX%x)pX&T)pX&W)pX&X)pX'o)pX'u)pX$n)pX~P/2oOT)pXV)pXW)pX^)pXa)pXl)pXn)pXo)pXv)pXw)pXx)pXy)pX|)pX!Q)pX!R)pX!U)pX!V)pX!Y)pX!Z)pX!h)pX!j)pX!k)pX!s)pX!t)pX!v)pX!w)pX!y)pX#R)pX#T)pX#V)pX#X)pX#Y)pX#Z)pX#])pX#r)pX#s)pX#x)pX#|)pX$P)pX$X)pX$])pX$^)pX$_)pX$a)pX$c)pX$d)pX$e)pX$f)pX$g)pX$k)pX$m)pX$n)pX$q)pX'o)pX'u)pX(X)pX(Y)pX$[)pX~P,@nO^%ZOeFsOlLtOo0nO|%bO!OFsO!PFsO!QFsO!RFsO!SFsO!TFsO!UMaO!VMaO!YFsO!ZFoO!j%cO!k%cO!v%eO!w%wO!yLuO#R&RO#T&SO#V&TO#X&TO#YFpO#Z&UO#nFhO#rLpO#s&QO$q%xO%X%{O'o)SO'u!^O~P)1OO^%ZOeFrOlLrOo0nO|%bO!OFrO!PFrO!QFrO!RFrO!SFrO!TFrO!UKgO!VKgO!YFrO!ZFnO!j%cO!k%cO!v%eO!w%wO!yFtO#R&RO#T&SO#V&TO#X&TO#YFpO#Z&UO#nFgO#rLnO#s&QO$q%xO%X%{O'o)SO'u!^O~P)1OO$S$wy%X$wy%Y$wy%Z$wy%_$wy%b$wy%c$wyY$wy![$wy!]$wy!^$wy!_$wy!`$wy!a$wy!b$wy!c$wy!d$wy!g$wy%^$wy~P'DpOT$wyV$wyW$wy^$wya$wyl$wyn$wyo$wyv$wyw$wyx$wyy$wy|$wy!Q$wy!R$wy!U$wy!V$wy!Y$wy!Z$wy!h$wy!j$wy!k$wy!s$wy!t$wy!v$wy!w$wy!y$wy#R$wy#T$wy#V$wy#X$wy#Y$wy#Z$wy#]$wy#r$wy#s$wy#x$wy#|$wy$P$wy$X$wy$]$wy$^$wy$_$wy$a$wy$c$wy$d$wy$e$wy$f$wy$g$wy$k$wy$m$wy$n$wy$q$wy'o$wy'u$wy(X$wy(Y$wyY$wy![$wy!]$wy!^$wy!_$wy!`$wy!a$wy!b$wy!c$wy!d$wy!g$wy%^$wy$[$wy~P,@nO#p$wyY$wy![$wy!]$wy!^$wy!_$wy!`$wy!a$wy!b$wy!c$wy!d$wy!g$wy%^$wy~P,:cOT$wy^$wya$wyc$wyl$wyn$wy!R$wy!h$wy!y$wy#r$wy#s$wy#x$wy#|$wy$P$wy$T$wy$U$wy%f$wy%g$wy%h$wy%i$wy%j$wy%k$wy%l$wy%m$wy%n$wy%o$wy%p$wy%q$wy%x$wy&T$wy&W$wy&X$wy'o$wy'u$wy$n$wyY$wy![$wy!]$wy!^$wy!_$wy!`$wy!a$wy!b$wy!c$wy!d$wy!g$wy%^$wy~P/2oO#hJ_O#i#fi#o#fi#p#fia#fid#fi]#fin#fir#fi~O#hJ`OT#fiW#fi^#fil#fio#fiv#fiw#fix#fiy#fi|#fi!Q#fi!R#fi!U#fi!V#fi!Y#fi!Z#fi!h#fi!j#fi!k#fi!s#fi!t#fi!v#fi!w#fi!y#fi#R#fi#T#fi#V#fi#X#fi#Y#fi#Z#fi#]#fi#r#fi#s#fi#x#fi#|#fi$P#fi$X#fi$]#fi$^#fi$_#fi$a#fi$c#fi$d#fi$e#fi$f#fi$g#fi$k#fi$m#fi$n#fi$q#fi'o#fi'u#fi(X#fi(Y#fi$[#fi~P+=RO#hJaOT#fiZ#fi^#fia#fic#fie#fif#fig#fil#fin#fi!O#fi!P#fi!R#fi!S#fi!T#fi!e#fi!h#fi!y#fi#e#fi#i#fi#n#fi#r#fi#s#fi#x#fi#|#fi$P#fi$T#fi$U#fi$x#fi$y#fi$z#fi$|#fi$}#fi%O#fi%P#fi%Q#fi%R#fi%S#fi%T#fi%f#fi%g#fi%h#fi%i#fi%j#fi%k#fi%l#fi%m#fi%n#fi%o#fi%p#fi%q#fi%x#fi&T#fi&W#fi&X#fi'o#fi'u#fi$n#fiY#fi![#fi!]#fi!^#fi!_#fi!`#fi!a#fi!b#fi!c#fi!d#fi!g#fi%^#fi~O$S+Qq%X+Qq%Y+Qq%Z+Qq%^+Qq%_+Qq%b+Qq%c+QqY+Qq![+Qq!]+Qq!^+Qq!_+Qq!`+Qq!a+Qq!b+Qq!c+Qq!d+Qq!g+Qq~P'DpOT+QqV+QqW+Qq^+Qqa+Qql+Qqn+Qqo+Qqv+Qqw+Qqx+Qqy+Qq|+Qq!Q+Qq!R+Qq!U+Qq!V+Qq!Y+Qq!Z+Qq!h+Qq!j+Qq!k+Qq!s+Qq!t+Qq!v+Qq!w+Qq!y+Qq#R+Qq#T+Qq#V+Qq#X+Qq#Y+Qq#Z+Qq#]+Qq#r+Qq#s+Qq#x+Qq#|+Qq$P+Qq$X+Qq$]+Qq$^+Qq$_+Qq$a+Qq$c+Qq$d+Qq$e+Qq$f+Qq$g+Qq$k+Qq$m+Qq$n+Qq$q+Qq%^+Qq'o+Qq'u+Qq(X+Qq(Y+QqY+Qq![+Qq!]+Qq!^+Qq!_+Qq!`+Qq!a+Qq!b+Qq!c+Qq!d+Qq!g+Qq$[+Qq~P,@nOT+Qq^+Qqa+Qqc+Qql+Qqn+Qq!R+Qq!h+Qq!y+Qq#r+Qq#s+Qq#x+Qq#|+Qq$P+Qq$T+Qq$U+Qq%^+Qq%f+Qq%g+Qq%h+Qq%i+Qq%j+Qq%k+Qq%l+Qq%m+Qq%n+Qq%o+Qq%p+Qq%q+Qq%x+Qq&T+Qq&W+Qq&X+Qq'o+Qq'u+Qq$n+QqY+Qq![+Qq!]+Qq!^+Qq!_+Qq!`+Qq!a+Qq!b+Qq!c+Qq!d+Qq!g+Qq~P/2oO#p+Qq%^+QqY+Qq![+Qq!]+Qq!^+Qq!_+Qq!`+Qq!a+Qq!b+Qq!c+Qq!d+Qq!g+Qq~P,:cOT)tiV)tiW)ti^)tia)til)tin)tio)tiv)tiw)tix)tiy)ti|)ti!Q)ti!R)ti!U)ti!V)ti!Y)ti!Z)ti!h)ti!j)ti!k)ti!s)ti!t)ti!v)ti!w)ti!y)ti#R)ti#T)ti#V)ti#X)ti#Y)ti#Z)ti#])ti#r)ti#s)ti#x)ti#|)ti$P)ti$X)ti$])ti$^)ti$_)ti$a)ti$c)ti$d)ti$e)ti$f)ti$g)ti$k)ti$m)ti$n)ti$q)ti'o)ti'u)ti(X)ti(Y)ti$[)ti~P,@nOV#wq]#wq~P#!PO!U)^O!V)^Oe(TX!O(TX!P(TX!S(TX!T(TX!e(TX#e(TX#n(TX$S(TX$x(TX$y(TX$z(TX$|(TX$}(TX%O(TX%P(TX%Q(TX%R(TX%S(TX%T(TX%X(TX%Y(TX%Z(TX%_(TX%b(TX%c(TX%^(TX~P(+YOT(TXW(TXl(TXo(TXv(TXw(TXx(TXy(TX|(TX!R(TX!Y(TX!Z(TX!h(TX!j(TX!k(TX!s(TX!t(TX!v(TX!w(TX!y(TX#R(TX#T(TX#V(TX#X(TX#Y(TX#Z(TX#r(TX#s(TX#x(TX#|(TX$P(TX$X(TX$](TX$^(TX$_(TX$a(TX$c(TX$d(TX$e(TX$f(TX$g(TX$k(TX$m(TX$n(TX$q(TX'o(TX'u(TX(X(TX(Y(TX$[(TX~P!>oO!U)^O!V)^Oe(TX!O(TX!P(TX!S(TX!T(TX!e(TX#e(TX#n(TX#p(TX$x(TX$y(TX$z(TX$|(TX$}(TX%O(TX%P(TX%Q(TX%R(TX%S(TX%T(TX%^(TX~P(+YO!U)^O!V)^OT(TXa(TXc(TXe(TXl(TXn(TX!O(TX!P(TX!R(TX!S(TX!T(TX!e(TX!h(TX!y(TX#e(TX#n(TX#r(TX#s(TX#x(TX#|(TX$P(TX$T(TX$U(TX$x(TX$y(TX$z(TX$|(TX$}(TX%O(TX%P(TX%Q(TX%R(TX%S(TX%T(TX%f(TX%g(TX%h(TX%i(TX%j(TX%k(TX%l(TX%m(TX%n(TX%o(TX%p(TX%q(TX%x(TX&T(TX&W(TX&X(TX'o(TX'u(TX$n(TX%^(TX~P(+YOZ(TXe(TXf(TX!O(TX!P(TX!S(TX!T(TX!e(TX#e(TX#n(TX$S(TX$x(TX$y(TX$z(TX$|(TX$}(TX%O(TX%P(TX%Q(TX%R(TX%S(TX%T(TX%X(TX%Y(TX%Z(TX%_(TX%b(TX%c(TX%^(TX~P(,tOT(TXW(TX^(TXl(TXo(TXv(TXw(TXx(TXy(TX|(TX!Q(TX!R(TX!U(TX!V(TX!Y(TX!Z(TX!h(TX!j(TX!k(TX!s(TX!t(TX!v(TX!w(TX!y(TX#R(TX#T(TX#V(TX#X(TX#Y(TX#Z(TX#](TX#r(TX#s(TX#x(TX#|(TX$P(TX$X(TX$](TX$^(TX$_(TX$a(TX$c(TX$d(TX$e(TX$f(TX$g(TX$k(TX$m(TX$n(TX$q(TX'o(TX'u(TX(X(TX(Y(TX$[(TX~P!B[OZ(TXe(TXf(TX!O(TX!P(TX!S(TX!T(TX!e(TX#e(TX#n(TX#p(TX$x(TX$y(TX$z(TX$|(TX$}(TX%O(TX%P(TX%Q(TX%R(TX%S(TX%T(TX%^(TX~P(,tOT(TXZ(TX^(TXa(TXc(TXe(TXf(TXl(TXn(TX!O(TX!P(TX!R(TX!S(TX!T(TX!e(TX!h(TX!y(TX#e(TX#n(TX#r(TX#s(TX#x(TX#|(TX$P(TX$T(TX$U(TX$x(TX$y(TX$z(TX$|(TX$}(TX%O(TX%P(TX%Q(TX%R(TX%S(TX%T(TX%f(TX%g(TX%h(TX%i(TX%j(TX%k(TX%l(TX%m(TX%n(TX%o(TX%p(TX%q(TX%x(TX&T(TX&W(TX&X(TX'o(TX'u(TX$n(TX%^(TX~P(,tO^%ZOeKWOlLsO|%bO!OKWO!PKWO!QKWO!RKWO!SKWO!TKWO!U%tO!V%tO!YKWO!ZKhO!j%cO!k%cO!v%eO!w%wO!y&PO#R&RO#T&SO#V&TO#X&TO#Y%}O#Z&UO#rLoO#s&QO$q%xO%X%{O'oFvO'u!^OZ%UXf%UXg%UX!e%UX#e%UX#n%UX#p%UX$x%UX$y%UX$z%UX$|%UX$}%UX%O%UX%P%UX%Q%UX%R%UX%S%UX%T%UXY%UX![%UX!]%UX!^%UX!_%UX!`%UX!a%UX!b%UX!c%UX!d%UX!g%UX%^%UX~P)1OO#pHSO~O#pHTO~O#pHUO~O#pHVO~O^*]O|%bO!j%cO!k%cO!v%eO!w%wO!yFtO#R&RO#T&SO#V&TO#X&TO#Y&SO#Z&UO#r*^O#s&QO$q%xO'o*XO'u!^O~P)1OO'oHdO~O#pIyO~O#pIzO~O#pI{O~O#pI|O~OT)oX^)oXa)oXl)oXn)oX!R)oX!h)oX!y)oX#r)oX#s)oX#x)oX#|)oX$P)oX'o)oX'u)oX$n)oX~OYJTOc)oX$T)oX$U)oX%f)oX%g)oX%h)oX%i)oX%j)oX%k)oX%l)oX%m)oX%n)oX%o)oX%p)oX%q)oX%x)oX&T)oX&W)oX&X)oX~P5*eOYJUO~P*7sOrJZO~P#!POrJ[O~P#!POrJ]O~P#!POrJ^O~P#!PO#hJaO#iJdOZ$wie$wig$wi!O$wi!P$wi!S$wi!T$wi!e$wi#e$wi#n$wi$x$wi$y$wi$z$wi$|$wi$}$wi%O$wi%P$wi%Q$wi%R$wi%S$wi%T$wi~P2%rO#hJ`O#iJcO#n$wi~P0+RO#pJeO~O#pJfO~O#pJgO~O#pJhO~O'oJiO~O'oJjO~O'oJkO~O'oJlO~O%dJmO~P#!PO%dJnO~P#!PO%dJoO~P#!PO%dJpO~P#!POYJsO~OT)na^)nal)nan)na!R)na!h)na!y)na#r)na#s)na#x)na#|)na$P)na'o)na'u)na$n)na~OaL`Oc)na$T)na$U)na%f)na%g)na%h)na%i)na%j)na%k)na%l)na%m)na%n)na%o)na%p)na%q)na%x)na&T)na&W)na&X)na~P51VOaLaOV)naW)nae)nao)nav)naw)nax)nay)na|)na!O)na!P)na!Q)na!S)na!T)na!U)na!V)na!Y)na!Z)na!j)na!k)na!s)na!t)na!v)na!w)na#R)na#T)na#V)na#X)na#Y)na#Z)na#])na$X)na$])na$^)na$_)na$a)na$c)na$d)na$e)na$f)na$g)na$k)na$m)na$q)na(X)na(Y)na$[)na~P51VOYKTO~OaLfOT)saV)saW)sa^)sae)sal)san)sao)sav)saw)sax)say)sa|)sa!O)sa!P)sa!Q)sa!R)sa!S)sa!T)sa!U)sa!V)sa!Y)sa!Z)sa!h)sa!j)sa!k)sa!s)sa!t)sa!v)sa!w)sa!y)sa#R)sa#T)sa#V)sa#X)sa#Y)sa#Z)sa#])sa#r)sa#s)sa#x)sa#|)sa$P)sa$X)sa$])sa$^)sa$_)sa$a)sa$c)sa$d)sa$e)sa$f)sa$g)sa$k)sa$m)sa$n)sa$q)sa'o)sa'u)sa(X)sa(Y)sa$[)sa~OhKmOc'qXe'qXf'qX~OZ*xXe*xXf*xXg*xX!O*xX!P*xX!S*xX!T*xX!e*xX#e*xX#n*xX$x*xX$y*xX$z*xX$|*xX$}*xX%O*xX%P*xX%Q*xX%R*xX%S*xX%T*xXY*xX![*xX!]*xX!^*xX!_*xX!`*xX!a*xX!b*xX!c*xX!d*xX!g*xX~O%^LVO$S*xX%X*xX%Y*xX%Z*xX%_*xX%b*xX%c*xX~P5;`O%^LWOT*xXW*xX^*xXl*xXo*xXv*xXw*xXx*xXy*xX|*xX!Q*xX!R*xX!U*xX!V*xX!Y*xX!Z*xX!h*xX!j*xX!k*xX!s*xX!t*xX!v*xX!w*xX!y*xX#R*xX#T*xX#V*xX#X*xX#Y*xX#Z*xX#]*xX#r*xX#s*xX#x*xX#|*xX$P*xX$X*xX$]*xX$^*xX$_*xX$a*xX$c*xX$d*xX$e*xX$f*xX$g*xX$k*xX$m*xX$n*xX$q*xX'o*xX'u*xX(X*xX(Y*xX$[*xX~P$8OO%^LXO#p*xX~P5;`O%^LYOT*xX^*xXa*xXc*xXl*xXn*xX!R*xX!h*xX!y*xX#r*xX#s*xX#x*xX#|*xX$P*xX$T*xX$U*xX%f*xX%g*xX%h*xX%i*xX%j*xX%k*xX%l*xX%m*xX%n*xX%o*xX%p*xX%q*xX%x*xX&T*xX&W*xX&X*xX'o*xX'u*xX$n*xX~P5;`OT)nX^)nXl)nXn)nX!R)nX!h)nX!y)nX#r)nX#s)nX#x)nX#|)nX$P)nX'o)nX'u)nX$n)nX~OaL`Oc)nX$T)nX$U)nX%f)nX%g)nX%h)nX%i)nX%j)nX%k)nX%l)nX%m)nX%n)nX%o)nX%p)nX%q)nX%x)nX&T)nX&W)nX&X)nX~P5DiOaLaOV)nXW)nXe)nXo)nXv)nXw)nXx)nXy)nX|)nX!O)nX!P)nX!Q)nX!S)nX!T)nX!U)nX!V)nX!Y)nX!Z)nX!j)nX!k)nX!s)nX!t)nX!v)nX!w)nX#R)nX#T)nX#V)nX#X)nX#Y)nX#Z)nX#])nX$X)nX$])nX$^)nX$_)nX$a)nX$c)nX$d)nX$e)nX$f)nX$g)nX$k)nX$m)nX$q)nX(X)nX(Y)nX$[)nX~P5DiOZ*xae*xaf*xag*xa!O*xa!P*xa!S*xa!T*xa!e*xa#e*xa#n*xa$x*xa$y*xa$z*xa$|*xa$}*xa%O*xa%P*xa%Q*xa%R*xa%S*xa%T*xaY*xa![*xa!]*xa!^*xa!_*xa!`*xa!a*xa!b*xa!c*xa!d*xa!g*xa~O%^LVO$S*xa%X*xa%Y*xa%Z*xa%_*xa%b*xa%c*xa~P5JWO%^LWOT*xaW*xa^*xal*xao*xav*xaw*xax*xay*xa|*xa!Q*xa!R*xa!U*xa!V*xa!Y*xa!Z*xa!h*xa!j*xa!k*xa!s*xa!t*xa!v*xa!w*xa!y*xa#R*xa#T*xa#V*xa#X*xa#Y*xa#Z*xa#]*xa#r*xa#s*xa#x*xa#|*xa$P*xa$X*xa$]*xa$^*xa$_*xa$a*xa$c*xa$d*xa$e*xa$f*xa$g*xa$k*xa$m*xa$n*xa$q*xa'o*xa'u*xa(X*xa(Y*xa$[*xa~P'AOO%^LXO#p*xa~P5JWO%^LYOT*xa^*xaa*xac*xal*xan*xa!R*xa!h*xa!y*xa#r*xa#s*xa#x*xa#|*xa$P*xa$T*xa$U*xa%f*xa%g*xa%h*xa%i*xa%j*xa%k*xa%l*xa%m*xa%n*xa%o*xa%p*xa%q*xa%x*xa&T*xa&W*xa&X*xa'o*xa'u*xa$n*xa~P5JWO^!`O!tLdO'oyO'u!^O~OaLfOT)sXV)sXW)sX^)sXe)sXl)sXn)sXo)sXv)sXw)sXx)sXy)sX|)sX!O)sX!P)sX!Q)sX!R)sX!S)sX!T)sX!U)sX!V)sX!Y)sX!Z)sX!h)sX!j)sX!k)sX!s)sX!t)sX!v)sX!w)sX!y)sX#R)sX#T)sX#V)sX#X)sX#Y)sX#Z)sX#])sX#r)sX#s)sX#x)sX#|)sX$P)sX$X)sX$])sX$^)sX$_)sX$a)sX$c)sX$d)sX$e)sX$f)sX$g)sX$k)sX$m)sX$n)sX$q)sX'o)sX'u)sX(X)sX(Y)sX$[)sX~O^*]O|%bO!j%cO!k%cO!v%eO!w%wO!yLuO#R&RO#T&SO#V&TO#X&TO#Y&SO#Z&UO#r*^O#s&QO$q%xO'o*XO'u!^O~P)1OO\",\n  goto: \"(=d,fPPPPPPPPP,gPP8mPPAgIiPAgPPPPPPK_PPPPPP!&t!&wP!(b!(e!)QPPPP!/n!6XP!<OPPPPPPPP!A{!GjPPPPPPPPPPPP!McPP!6XPP!Mq#&]#,Q#1u#8jPPPP#9oPP#9}P#?x#@S#?x#@X#@b#@f#@fP#@kP#@nP#@tPPP#A_P#AbP#Ae#An#Bl#Cd#CjP#CjPPP#Cj#D^#Cj#ETPPPPPP#Ew#Kk$$T$&^P$&q$&q$'SP$'a$'SP$'rPPPPPPPP$)_PPPP$)bP$)ePPPPPP$)kPP$)pPP$)sPP$)v$*P$*S$*V$0O$0XPPP$5`PPPPPPPP$0X$9S$>VPPPPPPPPPPPP$CsPPPPPPPPPPPP$C|$Eh$FOPPPP$FYPP$FcP$Fo$FvPP$F{P$Gk$HZPP$Hm$Hm$Hu$IP$Ic$Ii$J`$Jl$Jz$KQ$Kn$Kt$NZ$Na$Ns$Ny% T% Z% i% o% y%!P%!V%!]%!c%!i%!o%!u%#P%#W%#^%#d%#n%#u%$T%$_%$o%$y%(j%(p%(v%(|%)S%)Y%)a%)g%)m%*h%*n%*t%*z%+Q%+W%+^%+hPPPPPPPPPP%+n%+qP%+w%,R%5[%6i%6pP%Ah%Ip%Ix%Jd%Jq%KU%Kf%Kv%Ky%Lc%Lw%L}%MU%M_&$t&+P&0xPP&7i&=`&=d&Jc'!W'!n'!r'!x'(s')_')f')n')w'*T'/|'*T'*T'0U'5}'6b'6t'7R'7_'7c'7j'7p'7t'7w'7}'8Q'8V'8Y'8]'8c'8n'8u'8x'*T'8{'9O'9R'9X#Cj#Cj':u';[';|'<P'<S'<V#Cj'<Z'<_'<b'*T#&]'<h'<n'<t'<}'=`'=q'=q'>O'>a'>s'?c'?|'@Z'@v'@y'AV'Ac'Ap'Bx'B{'Cb'Cw'D_'F`'Fc'Ff'Fl'Fr'Fu'Gr' j'Hd'H{'H{'Id'Ig'Hd'Iy'Iy'Iy'Jb'Je'Iy'Hd'Jq'Jq'Jq'Hd'KY'K]'Hd'Hd'Ka'Hd'Hd'Kd'Kg'*T&7i'Km'Ks(#}()k()p(*V(/u(0T(0i(0|(0|(1_(1b(1h(2](2n(2|(3S(3q(4g%LZ%LZ%LZ(4k(4{(5R%LZ(5`(5s(6V(6`(6c(6i(6{(7R%LZ(7U(7X(7_%LZ(7e(7u(7{(8Y%LZ(8c(8k(8q(8k(8k(8}%LZ(9u(:V(:Y(:^%Lc(:p%L_(:t%Lc(:}(;a(;d(;j(;q(;u(;u(;y(;u(;u%Lc(;|%Lc(<o(<x(=W(=Z(=a%LcQz^Q!P`1j!Saiu}!O!`!j!w!x#Q#R#T#X#^#e#l#q#t#w$f$j$n%Z%[%i%o%s%u%x%y%z%{&P&Y&]&`&l&n'W'Z'^'a'b's(S(W([(j(z)P)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){)|)}*P*R*U*]*c*g*r*s*u*v*w*x*y+P+Q+U+Z+[+b+d+n,T,W,Z,],d,j,l,q,r-R-c-h-m.P.S.^.a.d.e.k/`/b/d/g/p/q/w/y0O0g0j0n0r0v1R1U1V1Y1b1d1l1y1z2S2U2g2r2|3Q3T3^3n3u4O4v5Q5X5s5t6S6[6a6b6n6q6t6u6w6{7U7X7b7k7l8O8R8T8Y8]8_8a8c8n8x8y9s:S:W:X:b;i;j;k;o<R<Y<^<k<s<v<x<}=R=X=b=e=o=r=u>j>m>x>z>|@h@}ATAWAaAwBUBYBdBjBlCdCmCpDQDSDYDcDfDhDxEREVEWEXEYEdEkEuExFRFSFTFUFWF`FeFfFiFjFkFlFmFnFoFqFrFsFtFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHRHSHTHUHVH^H_H`HaHjHkHlHmIoIpIqIrIsItIyIzI{I|JTJUJZJ[J]J^J_J`JaJbJcJdJeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKhKnKoLmLnLoLpLqLrLsLtLuLvLwLxLyMSMTMUMVM^Q!WcQ!YdQ!ZfQ![gQ!]hS!kp!XQ!mqQ!nrQ!osQ!ptQ$S!bS$T!e!lQ$V!fQ$W!gQ$X!hQ$Y!iQ$p!qU$r!s(vKmQ$s!tQ$y!{d&c#[#o&d&e&j'Q'R'U+a,kQ&q#]Q&t#bS'f#u,|Q'}$UQ(^$Zz*Y%t*z+V1T1_6}7|7}8S8U8^8`8d=wAqAsAuDOEPKgMaQ+q&gW+v&m+c+k2TQ,_&sS,z'c'gQ1r+TQ2a+fU3X,R2_9QQ3m,aQ4W,{Q9T2XQ9x2wQ:g3lQ>`8lQ>a8mQ?e:[RBb>e$p!_iu!`!j!w#X#[#o#t%y%z%{&Y&]&d&e&j&l&n'Q'R'U'W'Z'^'a'b's(j)P*R*g*r*x+P+T+Z+a+b+d,k,l,q,r-R.S.e0v1V1Y1l1y2S2U2g3T3u4O5X7k8T8c8n8x=u>j>x>z>|BYBdBjBlDcDfDhLmLnLoLpLqLrLsLtM^+j%U#T%Z%[%i%o%s%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*u*v*w*y+Q+U+n,T,W,d.P.^.a.d/p/q/w/y0O0g0j0n0r1R1U1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{7U7X7b7l8O8R8Y8]8_8a8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=o=r>m@hATAWAaAwCdCmCpDQDSDYDxEREVEWEXEdEkEuExFRFSFTFUFWF`FeFfFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKhLvLwLxLyMSMTMUMVQ&v#ex*[%t*z1T1_6}7|7}8S8U8^8`8d=wAqAsAuDOEPKgMa[*b%x&P&`+[FtLu!b/[)}.k/`/b/d/g5t6S6[6a6b;k<R<Y<^@}BUEYIoIpIqIrIsItJ_J`JaJbJcJdKnKoQ1v+VQFb)|RFcHR1P!aiu!`!j!w#T#X#[#o#t%Z%[%i%o%s%u%x%y%z%{&P&Y&]&`&d&e&j&l&n'Q'R'U'W'Z'^'a'b's(j(z)P)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){)|)}*P*R*U*]*c*g*r*s*u*v*w*x*y+P+Q+T+U+Z+[+a+b+d+n,T,W,d,k,l,q,r-R.P.S.^.a.d.e.k/`/b/d/g/p/q/w/y0O0g0j0n0r0v1R1U1V1Y1b1d1l1y1z2S2U2g2r2|3Q3T3^3n3u4O4v5Q5X5s5t6S6[6a6b6n6q6t6u6w6{7U7X7b7k7l8O8R8T8Y8]8_8a8c8n8x8y9s:S:W:X;i;j;k;o<R<Y<^<k<s<v<x<}=R=X=b=e=o=r=u>j>m>x>z>|@h@}ATAWAaAwBUBYBdBjBlCdCmCpDQDSDYDcDfDhDxEREVEWEXEYEdEkEuExFRFSFTFUFWF`FeFfFiFjFkFlFmFnFoFqFrFsFtFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHRHSHTHUHVH^H_H`HaHjHkHlHmIoIpIqIrIsItIyIzI{I|JTJUJZJ[J]J^J_J`JaJbJcJdJeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKhKnKoLmLnLoLpLqLrLsLtLuLvLwLxLyMSMTMUMVM^Y'r$Q(x/z0_7c`+w&m+c+k2T2}=q>QLdU-y(t(vKmQ5V.eS5Z.g<yS5x/^<Sl5}/_/a/f/i/j5u6P6Y6^6d;{=tAQAyS7v1WM_Q;O4ZQ;d5WQ;g5[Q@_;eQ@r<PQE^D]WKy,R2_9QL`VKz1X7uLa'h{^aiu}!O!`!j!w!x#Q#R#X#[#^#e#l#o#q#t#w$f$j$n%x%y%z%{&P&Y&]&`&d&e&j&l&n'Q'R'U'W'Z'^'a'b's(S(W([(j)P)|)}*R*g*r*x+P+T+Z+[+a+b+d,Z,],j,k,l,q,r-R-c-h-m.S.e.k/`/b/d/g0v1V1Y1l1y2S2U2g3T3u4O5X5t6S6[6a6b7k8T8c8n8x:b;k<R<Y<^=u>j>x>z>|@}BUBYBdBjBlDcDfDhEYFtHRIoIpIqIrIsItJ_J`JaJbJcJdKnKoLmLnLoLpLqLrLsLtLuM^+Q%V#T%Z%[%i%o%s%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*u*v*w*y+U+n,T,W,d.P.^.a.d/p/q/w/y0O0g0j0n0r1U1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{7U7X7l8O8Y8]8_8a8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=o=r>m@hATAWAaAwCdCmCpDQDSDxEREWEdEkExFTFWFeFfFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKhLvLwLxLyMSMTMUMVx*[%t*z1T1_6}7|7}8S8U8^8`8d=wAqAsAuDOEPKgMaW+y&m+c+k2TQ1v+VU3Y,R2_9QiLh+Q1R7b8RDYEVEXEuFRFSFUF`R#P!Q$PeOQSTZkl!d!}#X#[#b#f#o#t#u${$|%O&]&d&j&s&x'Q'U'Z'^'c(n(p+m,a,e,|-v1y2h2i2j3T3l4P8x9g9j:^:v>j>x>z>|?f?g?h@R@SBdBjBzB|CYCZC[C^DcDhDoDqR#U!UU%o#T)a/qW(z%Z*]0r8OW.a)X)m*y5QQ4v.PS6[/d5tR@}<^.O%Y#T%Z%[%i%o%s%t%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){)}*P*U*]*c*s*u*v*w*y*z+Q+U+n,T,W,d.P.^.a.d.k/`/b/d/g/p/q/w/y0O0g0j0n0r1R1T1U1_1b1d1z2r2|3Q3^3n4v5Q5m5p5s5t6S6[6a6b6n6q6t6u6w6{6}7U7X7b7l7|7}8O8R8S8U8Y8]8^8_8`8a8d8y9s:S:W:X;i;j;k;o<R<Y<^<k<s<v<x<}=R=X=b=e=o=r=w>m@h@}ATAWAaAqAsAuAwBUCdCmCpDODQDSDYDxEPEREVEWEXEYEdEkEuExFRFSFTFUFWF`FeFfFhFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHQHSHTHUHVH^H_H`HaHjHkHlHmIoIpIqIrIsItIyIzI{I|JTJUJZJ[J]J^J_J`JaJbJcJdJeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKgKhKnKoLvLwLxLyMSMTMUMVMaR9a2f.P%Y#T%Z%[%i%o%s%t%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){)}*P*U*]*c*s*u*v*w*y*z+Q+U+n,T,W,d.P.^.a.d.k/`/b/d/g/p/q/w/y0O0g0j0n0r1R1T1U1_1b1d1z2r2|3Q3^3n4v5Q5m5p5s5t6S6[6a6b6n6q6t6u6w6{6}7U7X7b7l7|7}8O8R8S8U8Y8]8^8_8`8a8d8y9s:S:W:X;i;j;k;o<R<Y<^<k<s<v<x<}=R=X=b=e=o=r=w>m@h@}ATAWAaAqAsAuAwBUCdCmCpDODQDSDYDxEPEREVEWEXEYEdEkEuExFRFSFTFUFWF`FeFfFhFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHQHSHTHUHVH^H_H`HaHjHkHlHmIoIpIqIrIsItIyIzI{I|JTJUJZJ[J]J^J_J`JaJbJcJdJeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKgKhKnKoLvLwLxLyMSMTMUMVMa,i%d#T%Z%[%i%o%s%t%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*u*v*w*y*z+Q+U+n,T,W,d.P.^.a.d/p/q/w/y0O0g0j0n0r1R1T1U1_1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{6}7U7X7b7l7|7}8O8R8S8U8Y8]8^8_8`8a8d8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=o=r=w>m@hATAWAaAqAsAuAwCdCmCpDODQDSDYDxEPEREVEWEXEdEkEuExFRFSFTFUFWF`FeFfFhFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHQHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKgKhLvLwLxLyMSMTMUMVMa&^%_#T%Z%[%i%o%s%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*v*w*y+U+n,T,W,d.P.^.a.d/p/q/w/y0g0j0n0r1U1b1d1z2r2|3Q3^3n4v5Q5s6n6u6w6{7U7X7l8O8Y8]8_8a8y9s:S:W:X;i;o<k<s<v<x<}=R=X=b=o=r>m@hATAWAaAwCdCmCpDQDSEREWEdExFTFWFeFkKTLvLwLxLyMSMTMUMV!U0t+Q1R1_7b7|7}8R8S8U8^8`8d=wAqAsAuDODYEPEVEXEuFRFSFUF`!`K]*u0O6q6tDxEkFfFiFmFqFwF{GPGTGXG]GaGeGiGmGqGuGyG}HSH^HjIyJZJeJm![K^=eFgFjFnFrFxF|GQGUGYG^GbGfGjGnGrGvGzHOHTH_HkIzJUJ[JfJnJsJw!UK_;jFyF}GRGVGZG_GcGgGkGoGsGwG{HPHUHaHlI{J]JgJpKWKaKfKh!XK`FhFlFoFsFzGOGSGWG[G`GdGhGlGpGtGxG|HQHVH`HmI|JTJ^JhJoJv,X%]#T%Z%[%i%o%s%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*u*v*w*y+Q+U+n,T,W,d.P.^.a.d/p/q/w/y0O0g0j0n0r1R1U1_1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{7U7X7b7l7|7}8O8R8S8U8Y8]8^8_8`8a8d8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=o=r=w>m@hATAWAaAqAsAuAwCdCmCpDODQDSDYDxEPEREVEWEXEdEkEuExFRFSFTFUFWF`FeFfFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKhLvLwLxLyMSMTMUMV&^%s#T%Z%[%i%o%s%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*v*w*y+U+n,T,W,d.P.^.a.d/p/q/w/y0g0j0n0r1U1b1d1z2r2|3Q3^3n4v5Q5s6n6u6w6{7U7X7l8O8Y8]8_8a8y9s:S:W:X;i;o<k<s<v<x<}=R=X=b=o=r>m@hATAWAaAwCdCmCpDQDSEREWEdExFTFWFeFkKTLvLwLxLyMSMTMUMV!`Fi*u0O6q6tDxEkFfFiFmFqFwF{GPGTGXG]GaGeGiGmGqGuGyG}HSH^HjIyJZJeJm!WFj=eFjFnFrFxF|GQGUGYG^GbGfGjGnGrGvGzHTH_HkIzJUJ[JfJnJsJw!UFk+Q1R1_7b7|7}8R8S8U8^8`8d=wAqAsAuDODYEPEVEXEuFRFSFUF`!SFlFlFoFsFzGOGSGWG[G`GdGhGlGpGtGxG|HVH`HmI|JTJ^JhJoJv!VKf;jFyF}GRGVGZG_GcGgGkGoGsGwG{HPHUHaHlI{J]JgJpKWKaKfKhi)V%^%_0s0tKXKYKZK[K]K^K_K`,d%e#T%Z%[%i%o%s%t%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*u*v*w*y*z+Q+U+n,T,W,d.P.^.a.d/p/q/w/y0O0g0j0n0r1R1T1U1_1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{6}7U7X7b7l7|7}8O8R8S8U8Y8]8^8_8`8a8d8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=o=r=w>m@hATAWAaAqAsAuAwCdCmCpDODQDSDYDxEPEREVEWEXEdEkEuExFRFSFTFUFWF`FeFfFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKgKhLvLwLxLyMSMTMUMVMa!b/])}.k/`/b/d/g5t6S6[6a6b;k<R<Y<^@}BUEYIoIpIqIrIsItJ_J`JaJbJcJdKnKoR;}5v,e%e#T%Z%[%i%o%s%t%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*u*v*w*y*z+Q+U+n,T,W,d.P.^.a.d/p/q/w/y0O0g0j0n0r1R1T1U1_1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{6}7U7X7b7l7|7}8O8R8S8U8Y8]8^8_8`8a8d8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=o=r=w>m@hATAWAaAqAsAuAwCdCmCpDODQDSDYDxEPEREVEWEXEdEkEuExFRFSFTFUFWF`FeFfFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKgKhLvLwLxLyMSMTMUMVMa,e%v#T%Z%[%i%o%s%t%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*u*v*w*y*z+Q+U+n,T,W,d.P.^.a.d/p/q/w/y0O0g0j0n0r1R1T1U1_1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{6}7U7X7b7l7|7}8O8R8S8U8Y8]8^8_8`8a8d8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=o=r=w>m@hATAWAaAqAsAuAwCdCmCpDODQDSDYDxEPEREVEWEXEdEkEuExFRFSFTFUFWF`FeFfFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKgKhLvLwLxLyMSMTMUMVMa+^&O#T%Z%[%i%o%s%t%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*u*v*w*y*z+U+n,T,W,d.P.^.a.d/p/q/w/y0O0g0j0n0r1T1U1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{6}7U7X7l8O8Y8]8_8a8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=o=r>m@hATAWAaAwCdCmCpDQDSDxEREWEdEkExFTFWFeFfFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKgKhLvLwLxLyMSMTMUMVMaW+z&m+c+k2TQ,x'`[-z(t(v.g5[<yKm!U1j+Q1R1_7b7|7}8R8S8U8^8`8d=wAqAsAuDODYEPEVEXEuFRFSFUF`Q3{,pQ4V,yQ7y1XQ9y2wQ:q3|Q:r3}Q=_7jQ?}:uRAl=`d)_%^&O*Z0a7rHXKXKYKZK[S*|&PLuQ,^&rQ.p)`Q0iHbS0l*}KxQ4s-zS7g0s1jQ;`4tQ;g5`Q=^7hQ>n8|RCwFtQ)^%fQ*a%wQ.x)lV5f.m0g;p+f%e#T%Z%[%i%o%s%t%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*u*v*w*y*z+U+n,T,W,d.P.^.a.d/p/q/w/y0O0g0j0n0r1T1U1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{6}7U7X7l8O8Y8]8_8a8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=o=r>m@hATAWAaAwCdCmCpDQDSDxEREWEdEkExFTFWFeFfFgFhFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HOHPHQHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKgKhLvLwLxLyMSMTMUMVMa!V0z+Q1R1_7b7|7}8R8S8U8^8`8d=wAqAsAuDODYEPEVEXEuFRFSFUF`a.n)]*|*}0l;o@hHbKxV5g.m0g;p_0h*|*}0l;o@hHbKxT7V0g<}V*{&PFtLuR)^&RX)^%}&SEZFpS)^&T1qQ7|1]Q7}1^Q8^1eQ8i1nQAr=lQD`B[RE_D_R)^&UR.l)[_6_/f1W6^=tAQAyM_!b/a)}.k/`/b/d/g5t6S6[6a6b;k<R<Y<^@}BUEYIoIpIqIrIsItJ_J`JaJbJcJdKnKoS6P/_6YQ6d/iR;{5u!k/e)}.k/_/`/b/d/g/i5t5u6S6Y6[6a6b;k<R<Y<^@}BUEYIoIpIqIrIsItJ_J`JaJbJcJdKnKoQ5z/^R@u<S!c/c)}.k/`/b/d/g5t6S6[6a6b;k<R<Y<^@}BUEYIoIpIqIrIsItJ_J`JaJbJcJdKnKo!b/i)}.k/`/b/d/g5t6S6[6a6b;k<R<Y<^@}BUEYIoIpIqIrIsItJ_J`JaJbJcJdKnKoR5u/[!c/j)}.k/`/b/d/g5t6S6[6a6b;k<R<Y<^@}BUEYIoIpIqIrIsItJ_J`JaJbJcJdKnKo,U%k#T%Z%[%i%m%o%s%u%y%z(x(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*h*s*u*v*w*y+U+n,T,W,d.P.^.a.d/p/q/w/y0O0_0g0j0n0r1U1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{7U7X7c7l8O8Y8]8_8a8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=k=o=r>Q>m@hATAWAaAwCdCmCpDQDSDxEREWEdEkExFTFWFeFfFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKhLiLjLkLlLmLnLoLpLqLrLsLtLvLwLxLyLzL{L|L}MSMTMUMVQ+S&QR/}*i,Q%j#T%[%i%m%o%s%u%y%z(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*h*s*u*v*w*y+U+n,T,W,d.P.^.a.d/p/q/w/y0O0_0g0j0n0r1U1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{7U7X7c7l8O8Y8]8_8a8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=k=o=r>Q>m@hATAWAaAwCdCmCpDQDSDxEREWEdEkExFTFWFeFfFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKhLiLjLkLlLmLnLoLpLqLrLsLtLvLwLxLyLzL{L|L}MSMTMUMVQ(}%ZQ+W&XQ.O(xS/o*R*gQ1{+XQ4{.VQ4}.YS6f/n/zQ8v2PQ8z1|Q>k8{QDgBkQEbDeREyEcQ+R&Ql,U&o+g+j,S2W2Y2b2n2p9U9d9f?P?Q[,X&p+h2Z9r>wBhn/m*P/p6nHSHTHUHVIyIzI{I|JeJfJgJhS/|*i+Sz1O+Q1R1_7b7|7}8S8U8^8`8d=wAqDYEVEXEuFRFSFUF`Q6o/}Q7n0wQ8k1pQCO?jQCP?kQD^BZQDjBxQDkByQE`D`REwE_f0x+Q1R7bDYEVEXEuFRFSFUF`Q=n8RR=}8_o0o+O0k0m0n2|7]:S:X=XJRJTJUJqJvJwg0x+Q1R7bDYEVEXEuFRFSFUF`S&y#f,eQ,c&xW2t+t2[8}9tTL_7zLfQ#d!WU$a!k#Z#aQ'u$SU'|$T$[$_S(e$p'vQ+`&cU-Z'w'z'}S-n(^(fQ3V,QQ4S,xS4a-[-]Q4q-oS:o3{4TQ;S4bQ=f7yS?x:p:rSAj=_=gQCV?zSCtAkAlRD|CuR>Y8iR8S1`Q8U1aR=w8WVBZ>]BXDZR8`1fR8d1hQ/x*dQ:l3xRDlCSR*e%xR/x*e,m%g#T%Z%[%i%o%s%t%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*u*v*w*y*z+Q+U+n,T,W,d.P.^.a.d/p/q/w/y0O0g0j0n0r1R1T1U1_1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{6}7U7X7b7l7|7}8O8R8S8U8Y8]8^8_8`8a8d8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=o=r=w>m@hATAWAaAqAsAuAwCdCmCpDODQDSDYDxEPEREVEWEXEdEkEuExFRFSFTFUFWF`FeFfFgFhFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HOHPHQHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKgKhLvLwLxLyMSMTMUMVMaQ0m*}QJRKxRJSHb+Z%n#T%Z%[%i%o%s%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*u*v*w*y+U+n,T,W,d.P.^.a.d/p/q/w/y0O0g0j0n0r1U1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{7U7X7l8O8Y8]8_8a8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=o=r>m@hATAWAaAwCdCmCpDQDSDxEREWEdEkExFTFWFeFfFgFhFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HOHPHQHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKhLvLwLxLyMSMTMUMV$v)q%h(y*_.R.]._.r.u.{/P/Q/R/S/T/U/V/W/k/v0X0Z0]1t2q3]3_3o4u5O5S6k6l7^7s8Z8w9q:P:V:`:h;a;y<r<t<w=P=a=y={>O>S>l?W?a@`AUAXAZA[AdAfAnAvBeClCoDPDtDyDzEQESEpErEzFVF]F^KVK{K|K}LOLZL[L]L^Q9b2fzGX0Y6p<o<qEjFOHYHfHnIOISIWI[I`IdIhIuI}JVJxKPtGYAoHZHgHoIPITIXI]IaIeIiIvJOJWJuJyKQKUpGZ@aH[HhHpIQIUIYI^IbIfIjIwJQJXJzKSqG[H]HiHqIRIVIZI_IcIgIkIxJPJYJtJ{KR+R%n#T%Z%[%i%o%s%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*u*v*w*y+U+n,T,W,d.P.^.a.d/p/q/w/y0O0g0j0n0r1U1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{7U7X7l8O8Y8]8_8a8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=o=r>m@hATAWAaAwCdCmCpDQDSDxEREWEdEkExFTFWFeFfFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKhLvLwLxLyMSMTMUMV,V%j#T%Z%[%i%m%o%s%u%y%z(x(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*h*s*u*v*w*y+U+n,T,W,d.P.^.a.d/p/q/w/y0O0_0g0j0n0r1U1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{7U7X7c7l8O8Y8]8_8a8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=k=o=r>Q>m@hATAWAaAwCdCmCpDQDSDxEREWEdEkExFTFWFeFfFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKhLiLjLkLlLmLnLoLpLqLrLsLtLvLwLxLyLzL{L|L}MSMTMUMVU%p#T)a/qT<h6iDwQ#c!WQ#k!ZY$`!k#Z#`#a#dU$e!n#j#mY'{$T$[$^$_$aW(R$W$d$g'PY-Y'w'y'z'|'}U-_(Q(T(`W4_-X-Z-[-]S4e-a-bU;Q4`4a4bS;T4d4fS@U;R;SQ@X;VRC`@V^+{&m+c+k,R2T2_9QQ,v'`Q3y,pS9z2w:[R:s3}U+p&f+e2VV3R+}2^9PQ9[3[Q>r9]RBg>sQ3U,PQ4R,wQ:n3zR?|:tS>{9`9aR>}9cV>y9_9`9bQ#p![U$i!o#n#rW(V$X$h$k'YU-d(U(X(bS4i-f-gS;W4h4jR@Z;YQ#v!]U$m!p#s#xW(Z$Y$l$o'jU-i(Y(](dS4m-k-lS;Z4l4nR@];]Q4Q,vQ:m3yQ:z4RQ?u:nQ?{:sRCW?|]#g!Y!m#i$V$c(PQQOSjQ${R${!}QSOQkQWmSk$|(nQ$|!}R(n${Q-S'rR4[-SU#{!_%U/[Q$PFc^'n#{0k2P7]8{FdJrU0k*}HbKxQ2P+_Q7]0mQ8{1}QFdFbRJrJSS'l#y0jS-P'l>bT>b8n>dY#}!_#{%U*b/[S$OFbFcR'p#}Q(k$uR-t(kQZOSlQS[wZl!d%O(p-vQ!dkQ%O!}S(p${$|R-v(nQ!|!PR$z!|lTOQSZkl!d!}${$|%O(n(p-vznT&]&d&s&x'Q'Z'c2h3l9g9j:v?fBjBzB|C[C^DoDq^&]#X1y3T8x>jBdDcS&d#[&jQ&s#bS&x#f,eS'Q#o'US'Z#t'^S'c#u,|Q2h+mQ3l,aQ9g2iQ9j2jQ:v4PQ?f:^WBj>x>z>|DhQBz?gQB|?hQC[@RQC^@SQDoCYRDqCZQ)e%bR.s)eQ;u5lQ;w5oW@l;u;wCfCgQCf@nRCg@pQ)j%cR.v)jQ.Q(yS4w.Q4xR4x.RQ5R.bR;c5RQ5_.hQ5q.xQ;f5ZV;h5_5q;fQ;q5hR@j;qQAb=PSCqAbCrRCrAdQ=O7TRA`=OQ7O0dR<{7OQ8t1wR>i8tQ5w/]R<O5wQAR<bRCjARQ<Q5xR@s<QQ<T5zR@v<TQ<_6ZSAO<_APRAP<`S<Z6T6UR@z<ZQ;l5cR@c;lQ.T({R4z.TQ1R+QS7o1RFURFUEuS=Y7^7_RAh=YQ3O+xU:U3OLbLcQLbMWRLcMXQ9u2uS?Y9uLgRLgM`f0v+Q1R7bDYEVEXEuFRFSFUF`R7i0vQ,`&tQ3j,_T3k,`3jQ#Z!WQ#j!ZQ#n![Q#s!]S$[!k#aS$d!n#mS$h!o#rS$l!p#x!n&b#Z#j#n#s$[$d$h$l'w(Q(U(Y,S-U-[-b-g-l-p2b4b4d4h4l4o9U:{;V;Y;];_?vApCUCsDnD{ElS'w$T$_U(Q$W$g'PU(U$X$k'YU(Y$Y$o'jQ,S&oQ-U'uS-['z'}S-b(T(`S-g(X(bS-l(](dQ-p(eQ2b+gQ4b-]Q4d-aQ4h-fQ4l-kQ4o-nQ9U2YQ:{4SQ;V4fQ;Y4jQ;]4nQ;_4qQ?v:oQAp=fQCU?xQCsAjQDnCVQD{CtRElD|Q:c3`R?n:cQAt=mRC{AtQ>[8kRBW>[QDUBQREUDUQ<l6lRAV<lS.W(}/oR4|.WQ<u6yRAY<uQ#S!TR%S#SlVOQSZkl!d!}${$|%O(n(p-vQoT[vVo&e'R+a,kS&e#[&jS'R#o'UQ+a&dR,k'QQ,i'OR3s,iQ&j#[R+r&jQ'U#oR,m'UQ?s:lRCR?sQ,}'dR4Y,}Q'^#tR,s'^Q,[&rS3g,[3iR3i,^Q,f&zR3q,fR[OXPOQ!}${aROQSk!}${$|(nQ|^U!Ua#Q#R/[!_iu!`!j!w#T#X#[#o#t%Z%[%i%o%s%u%y%z%{&Y&]&d&e&j&l&n'Q'R'U'W'Z'^'a'b's(j(z)P)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*R*U*]*c*g*r*s*u*v*w*x*y+P+Q+T+U+Z+a+b+d+n,T,W,d,k,l,q,r-R.P.S.^.a.d.e/p/q/w/y0O0g0j0n0r0v1R1U1V1Y1b1d1l1y1z2S2U2g2r2|3Q3T3^3n3u4O4v5Q5X5s6n6q6t6u6w6{7U7X7b7k7l8O8R8T8Y8]8_8a8c8n8x8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=o=r=u>j>m>x>z>|@hATAWAaAwBYBdBjBlCdCmCpDQDSDYDcDfDhDxEREVEWEXEdEkEuExFRFSFTFUFWF`FeFfFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKhLmLnLoLpLqLrLsLtLvLwLxLyMSMTMUMVM^S!z}!OQ$w!xQ&r#^Q&v#eh'O#l#q#w$f$j$n(S(W([-c-h-m[*b%x&P&`+[FtLu!b/[)}.k/`/b/d/g5t6S6[6a6b;k<R<Y<^@}BUEYIoIpIqIrIsItJ_J`JaJbJcJdKnKoS3b,Z:bQ3h,]Q3t,jQFb)|RFcHRW!vz!S&c1rS(h$r>`S(i$s>ad)`%^&O*Z0a7rHXKXKYKZK[Q2y+vQ4t-z[5`.h.x5Z5_5q;fW5a.i0`1uA]S7h0s1jQ:]3XQ?[9xRBw?eS$v!w8nR-T'sQ!biQ!quQ$Q!`Q$Z!jU$u!w's8n&S%m#T%[%i%o%s%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*v*w+U+n,T,W,d.P.^.a.d/p/q/w/y0g0j0n1U1b1d1z2r2|3Q3^3n4v5Q5s6n6u6w6{7U7X7l8Y8]8a8y9s:S:W:X;i;o<k<s<v<x<}=R=X=b=o=r>m@hATAWAaAwCdCmCpDQDSEREWEdExFTFWFeFkKTLvLwLxLyMSMTMUMV^&X#X1y3T8x>jBdDcW&m#[#o&j'US'`#t'^Q(x%ZS*h%y%zQ*k%{S+X&Y&]S+c&d'QS+k&e'RQ+t&lQ,R&nQ,o'WS,p'Z'bQ,y'aQ-s(jQ.Y)PS/Y)|HR!`/_)}.k/`/b/g5t6S6[6a6b;k<R<Y<^@}BUEYIoIpIqIrIsItJ_J`JaJbJcJdKnKoU/n*R+P.SQ/z*gQ0W*rQ0^*xQ0_*yf1X+Q1R7bDYEVEXEuFRFSFUF`Q1s+TQ1|+ZS2T+a,kQ2[+bQ2_+dQ3v,lQ3|,qQ3},rQ4Z-RW5U.e5X8T=uQ6Y/dQ7c0rS7j0v1lQ7u1VQ7z1YQ8}2SQ9Q2UQ9c2gQ:i3uQ:u4OQ=`7kQ=k8OQ=q8RQ>Q8_Q>U8cWBk>x>z>|DhQD]BYSDeBjBlQEcDfQLdM^!`Li*u0O6q6tDxEkFfFiFmFqFwF{GPGTGXG]GaGeGiGmGqGuGyG}HSH^HjIyJZJeJm!WLj=eFjFnFrFxF|GQGUGYG^GbGfGjGnGrGvGzHTH_HkIzJUJ[JfJnJsJw!ULk;jFyF}GRGVGZG_GcGgGkGoGsGwG{HPHUHaHlI{J]JgJpKWKaKfKh!SLlFlFoFsFzGOGSGWG[G`GdGhGlGpGtGxG|HVH`HmI|JTJ^JhJoJvSLzLmLqSL{LnLrSL|LoLsTL}LpLt0n!_iu!`!j!w#T#X#[#o#t%Z%[%i%o%s%u%y%z%{&Y&]&d&e&j&l&n'Q'R'U'W'Z'^'a'b's(j(z)P)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){)}*P*R*U*]*c*g*r*s*u*v*w*x*y+P+Q+T+U+Z+a+b+d+n,T,W,d,k,l,q,r-R.P.S.^.a.d.e.k/`/b/d/g/p/q/w/y0O0g0j0n0r0v1R1U1V1Y1b1d1l1y1z2S2U2g2r2|3Q3T3^3n3u4O4v5Q5X5s5t6S6[6a6b6n6q6t6u6w6{7U7X7b7k7l8O8R8T8Y8]8_8a8c8n8x8y9s:S:W:X;i;j;k;o<R<Y<^<k<s<v<x<}=R=X=b=e=o=r=u>j>m>x>z>|@h@}ATAWAaAwBUBYBdBjBlCdCmCpDQDSDYDcDfDhDxEREVEWEXEYEdEkEuExFRFSFTFUFWF`FeFfFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHSHTHUHVH^H_H`HaHjHkHlHmIoIpIqIrIsItIyIzI{I|JTJUJZJ[J]J^J_J`JaJbJcJdJeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKhKnKoLmLnLoLpLqLrLsLtLvLwLxLyMSMTMUMVM^[*b%x&P&`+[FtLuQFb)|RFcHR]$R!`%Z*g*y/d0rv#z!_#{%U*}+_/[0k0m1}2P7]8{FbFcFdHbJSJrKxV+O&PFtLuY$P!_%U/[FbFcQ'o#{R/t*b^!uz{!S%V&c1rLhQ$t!vS(g$r>`R-r(hmYOQSZkl!d!}${$|%O(n(p-vmXOQSZkl!d!}${$|%O(n(p-vR!Q`lXOQSZkl!d!}${$|%O(n(p-vS&h#[&jT'S#o'UuWOQSZkl!d!}#[#o${$|%O&j'U(n(p-vQ!VaR%Q#QS!Ta#QR%R#RQ%r#TQ.q)aR6h/qU%`#T)a/q*r%a%Z%[%i%s%u(z)W)X)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*]*c*s*u*v*w*y+U+n,T,W,d.P.^.a.d/p/w/y0O0j0n0r1U1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{7U7l8O8Y8]8_8a8y9s:S:W:X;i;j<k<s<v<x=R=X=b=e=o=r>mAWAaAwCdCmCpDQDSDxEREWEdEkExFTFWFeFfFgFhFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HOHPHQHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKhLvLwLxLyMSMTMUMVQ*T%oQ/r*US7S0g<}Q=U7XS@e;o@hRCkAT&^%^#T%Z%[%i%o%s%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*v*w*y+U+n,T,W,d.P.^.a.d/p/q/w/y0g0j0n0r1U1b1d1z2r2|3Q3^3n4v5Q5s6n6u6w6{7U7X7l8O8Y8]8_8a8y9s:S:W:X;i;o<k<s<v<x<}=R=X=b=o=r>m@hATAWAaAwCdCmCpDQDSEREWEdExFTFWFeFkKTLvLwLxLyMSMTMUMVS*Z%tMaS0a*z6}!U0s+Q1R1_7b7|7}8R8S8U8^8`8d=wAqAsAuDODYEPEVEXEuFRFSFUF`Q7r1TQHXKg!`KX*u0O6q6tDxEkFfFiFmFqFwF{GPGTGXG]GaGeGiGmGqGuGyG}HSH^HjIyJZJeJm![KY=eFgFjFnFrFxF|GQGUGYG^GbGfGjGnGrGvGzHOHTH_HkIzJUJ[JfJnJsJw!UKZ;jFyF}GRGVGZG_GcGgGkGoGsGwG{HPHUHaHlI{J]JgJpKWKaKfKh!XK[FhFlFoFsFzGOGSGWG[G`GdGhGlGpGtGxG|HQHVH`HmI|JTJ^JhJoJv,m%f#T%Z%[%i%o%s%t%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*u*v*w*y*z+Q+U+n,T,W,d.P.^.a.d/p/q/w/y0O0g0j0n0r1R1T1U1_1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{6}7U7X7b7l7|7}8O8R8S8U8Y8]8^8_8`8a8d8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=o=r=w>m@hATAWAaAqAsAuAwCdCmCpDODQDSDYDxEPEREVEWEXEdEkEuExFRFSFTFUFWF`FeFfFgFhFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HOHPHQHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKgKhLvLwLxLyMSMTMUMVMa,h%e#T%Z%[%i%o%s%t%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*u*v*w*y*z+Q+U+n,T,W,d.P.^.a.d/p/q/w/y0O0g0j0n0r1R1T1U1_1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{6}7U7X7b7l7|7}8O8R8S8U8Y8]8^8_8`8a8d8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=o=r=w>m@hATAWAaAqAsAuAwCdCmCpDODQDSDYDxEPEREVEWEXEdEkEuExFRFSFTFUFWF`FeFfFhFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHQHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKgKhLvLwLxLyMSMTMUMVMa!b/c)}.k/`/b/d/g5t6S6[6a6b;k<R<Y<^@}BUEYIoIpIqIrIsItJ_J`JaJbJcJdKnKoQ;v5mR;x5p,i%e#T%Z%[%i%o%s%t%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*u*v*w*y*z+Q+U+n,T,W,d.P.^.a.d/p/q/w/y0O0g0j0n0r1R1T1U1_1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{6}7U7X7b7l7|7}8O8R8S8U8Y8]8^8_8`8a8d8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=o=r=w>m@hATAWAaAqAsAuAwCdCmCpDODQDSDYDxEPEREVEWEXEdEkEuExFRFSFTFUFWF`FeFfFhFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHQHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKgKhLvLwLxLyMSMTMUMVMaT)d%b)ef%h#T%o)a*U/q0g7X;o<}@hATW(y%Z*]0r8OY)T%[FqFrFsKWY*O%iFfFgFhKaY*W%sFiFjFlKfQ*_%uQ.R(zQ.])WY._)X)m*y.a5QQ.r)cQ.u)hS.{)n)rQ.|)oQ.})pQ/O)qQ/P)sQ/Q)tQ/R)uQ/S)vQ/T)wQ/U)xQ/V)yQ/W)zY/X){G}HOHPHQU/k*P/p6nQ/v*cQ0X*sQ0Y*uQ0Z*vQ0]*wQ1t+UQ2q+nQ3],TQ3_,WQ3o,dQ4u.PQ5O.^Q5S.dQ6k/wS6l/y0jQ6p0OQ7^0nQ7dFeQ7qFkQ7s1US8V1b=rQ8Z1dQ8w1zQ9q2rU:P2|:S:XQ:V3QQ:`3^Q:h3nQ;a4vQ;y5sQ<o6qQ<q6tQ<r6uQ<t6wQ<w6{Q=P7UQ=a7lQ=y8YQ={8]Q>O8_Q>S8aQ>l8yQ?W9sQ?a:WQ@`;iQ@a;jQAU<kQAX<sQAZ<vQA[<xQAd=RQAf=XQAn=bQAo=eQAv=oQBe>mQClAWQCoAaQDPAwQDtCdQDyCmQDzCpQEQDQQESDSQEjDxQEpERQErEWQEzEdQFOEkQFVExQF]FTQF^FWQHYFmQHZFnQH[KhQH]FoQHfFwQHgFxQHhFyQHiFzSHnF{G]SHoF|G^SHpF}G_SHqGOG`QHrGPQHsGQQHtGRQHuGSQHvGTQHwGUQHxGVQHyGWQHzGXQH{GYQH|GZQH}G[QIOGaQIPGbQIQGcQIRGdQISGeQITGfQIUGgQIVGhQIWGiQIXGjQIYGkQIZGlQI[GmQI]GnQI^GoQI_GpQI`GqQIaGrQIbGsQIcGtQIdGuQIeGvQIfGwQIgGxQIhGyQIiGzQIjG{QIkG|UIuHSIyJeUIvHTIzJfUIwHUI{JgUIxHVI|JhQI}H^QJOH_QJPH`QJQHaQJVHjQJWHkQJXHlQJYHmSJtJTJvSJuJUJwQJxJZQJyJ[QJzJ]QJ{J^QKPJmQKQJnQKRJoQKSJpQKUJsQKVKTQK{LvQK|LwQK}LxQLOLyQLZMSQL[MTQL]MURL^MV+Y%a#T%Z%[%i%o%s%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*u*v*w*y+U+n,T,W,d.P.^.a.d/p/q/w/y0O0g0j0n0r1U1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{7U7X7l8O8Y8]8_8a8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=o=r>m@hATAWAaAwCdCmCpDQDSDxEREWEdEkExFTFWFeFfFgFhFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HOHPHQHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKhLvLwLxLyMSMTMUMV!V0y+Q1R1_7b7|7}8R8S8U8^8`8d=wAqAsAuDODYEPEVEXEuFRFSFUF`W)W%^%_0s0tSFwKXK]SFxKYK^SFyKZK_TFzK[K`T)i%c)jX)O%Z*]0r8O,h%e#T%Z%[%i%o%s%t%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*u*v*w*y+Q+U+n,T,W,d.P.^.a.d/p/q/w/y0O0g0j0n0r1R1T1U1_1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{7U7X7b7l7|7}8O8R8S8U8Y8]8^8_8`8a8d8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=o=r=w>m@hATAWAaAqAsAuAwCdCmCpDODQDSDYDxEPEREVEWEXEdEkEuExFRFSFTFUFWF`FeFfFgFhFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HOHPHQHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKgKhLvLwLxLyMSMTMUMVMaT0c*z6}j(u%U%V%^*Z*[0a7rHXKXKYKZK[LhS.h)Y6|S5].x5qR7e0sS.f)X*yR.y)mU.b)X)m*yR;b5QW.`)X)m*y5QR5P.aQ5W.eQ;e5XQ=t8TRAy=u,m%e#T%Z%[%i%o%s%t%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*u*v*w*y*z+Q+U+n,T,W,d.P.^.a.d/p/q/w/y0O0g0j0n0r1R1T1U1_1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{6}7U7X7b7l7|7}8O8R8S8U8Y8]8^8_8`8a8d8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=o=r=w>m@hATAWAaAqAsAuAwCdCmCpDODQDSDYDxEPEREVEWEXEdEkEuExFRFSFTFUFWF`FeFfFgFhFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HOHPHQHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKgKhLvLwLxLyMSMTMUMVMa]5^.h.x5Z5_5q;f,d%e#T%Z%[%i%o%s%t%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*u*v*w*y+Q+U+n,T,W,d.P.^.a.d/p/q/w/y0O0g0j0n0r1R1T1U1_1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{7U7X7b7l7|7}8O8R8S8U8Y8]8^8_8`8a8d8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=o=r=w>m@hATAWAaAqAsAuAwCdCmCpDODQDSDYDxEPEREVEWEXEdEkEuExFRFSFTFUFWF`FeFfFhFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHQHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKgKhLvLwLxLyMSMTMUMVMaT0c*z6}Q.j)ZQ/s*`S0b*z6}Q1v+VQ>h8sRA^<yQ*d%xQ*}&PQ+_&`Q1}+[QHbFtRKxLuW0i*|*}HbKxQ7[0lT@f;o@hQ.o)]_0h*|*}0l;o@hHbKxT5j.m0gS5h.m0gR@i;pQ@g;oRCe@hT5i.m0gR7W0gQ7T0gRA_<}R=Q7UV)^&PFtLuR0e*zR0f*zQ0d*zR<z6}Q8p1rQ>f8oVB`>`>aBbZ8o1r8o>`>aBbR1x+VR1w+VR5d.kR5e.kQ5c.kR@b;kQ/h)}S5b.k;kW6Q/`IoIpIqQ6U/bS6Z/d5tW6`/gIrIsItQ<X6SQ<`6[W<e6aJ_J`JaQ<f6bQ@t<RQ@y<YQ@|<^QCh@}QDXBUQEtEYQJ|JbQJ}JcQKOJdQLPKnRLQKoQ6O/fQ7w1WQ<b6^QAx=tQCiAQQDRAyRLeM_S6O/_6YQ6R/a^6_/f1W6^=tAQAyM_Q6c/iQ6e/jS;z5u6dQ<W6PR@q;{R<c6^R<d6^R5|/^T5y/^<ST6]/d5tR6W/bQ6T/bR@x<YX(|%Z*R*g+PX)Q%Z*R*g+PW({%Z*R*g+PR4y.SU7{1[1q8QQB]>]QB_>_QD[BXRDaB^W1Q+Q1REuFUQ=]7b]EXDYEVEXFRFSF`g1P+Q1R7bDYEVEXEuFRFSFUF`f1V+Q1R7bDYEVEXEuFRFSFUF`TM^8R8_j0u+Q1R7b8R8_DYEVEXEuFRFSFUF`R8h1mQ+|&mS2]+c+kQ3Z,RY7x1W1X=q>QM_Q9O2TQ9[2_S=d7uLdR>r9Q`+x&m+c+k2T=q>QLdM_U:T2}L`LaUMW,R2_9QVMX1W1X7uU:R2|JTJUU?_:SJvJwR?b:XQ0p+OU7Z0k0mJRQ7_0n^:Q2|:S:XJTJUJvJwS=W7]JqRAg=XR7a0nQ2v+tQ9X2[Q=h7zR>o8}U2u+t2[8}S?X9tLfRM`7zg0w+Q1R7bDYEVEXEuFRFSFUF`Q#a!WQ#m!ZQ#r![Q$_!kQ$g!nQ$k!oQ'z$TQ(T$WQ(X$XQ-]'}Q2x+zQ4T,xQ:p3{Q=g7yQ?Z9yQ?z:rQAk=_RCuAlR&u#bQ&[#XQ8v1yQ:Z3TQ>k8xQBc>jQDbBdREaDc^&Y#X1y3T8x>jBdDcQ+Z&]WBl>x>z>|DhRDfBjj&W#X&]1y3T8x>j>x>z>|BdBjDcDhS+]&_&aR2O+^$}#Y!W!Z![!]!k!n!o!p#Z#a#j#m#n#r#s#x$T$W$X$Y$[$_$d$g$h$k$l$o&o'P'Y'j'u'w'z'}(Q(T(U(X(Y(](`(b(d(e+g,S-U-[-]-a-b-f-g-k-l-n-p2Y2b4S4b4d4f4h4j4l4n4o4q9U:o:{;V;Y;];_=f?v?xAjApCUCVCsCtDnD{D|ElR3e,ZR3d,ZQ3`,ZR?m:bQ3a,ZR?o:eR7m0wf1P+Q1R7bDYEVEXEuFRFSFUF`Q8P1_Q=i7|Q=j7}Q=s8SQ=v8UQ=|8^Q>R8`Q>V8dQAz=wRCxAqz1i+Q1R1_7b7|7}8S8U8^8`8d=wAqDYEVEXEuFRFSFUF`W=m8RAuDOEPRCzAs{1O+Q1R1_7b7|7}8S8U8^8`8d=wAqDYEVEXEuFRFSFUF`{0{+Q1R1_7b7|7}8S8U8^8`8d=wAqDYEVEXEuFRFSFUF`RBT>XQE[DYQEqEVQEsEXQFZFRQF[FSRFaF`{0|+Q1R1_7b7|7}8S8U8^8`8d=wAqDYEVEXEuFRFSFUF`R=p8RQ=n8RQC}AuQEODOREnEP{0}+Q1R1_7b7|7}8S8U8^8`8d=wAqDYEVEXEuFRFSFUF`R>^8kT>Z8k>[R>P8_RBR>UQBQ>URETDTQ6m/yR7Y0j&^%l#T%Z%[%i%o%s%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*v*w*y+U+n,T,W,d.P.^.a.d/p/q/w/y0g0j0n0r1U1b1d1z2r2|3Q3^3n4v5Q5s6n6u6w6{7U7X7l8O8Y8]8_8a8y9s:S:W:X;i;o<k<s<v<x<}=R=X=b=o=r>m@hATAWAaAwCdCmCpDQDSEREWEdExFTFWFeFkKTLvLwLxLyMSMTMUMV`*S%m%y%z(x0_7c=k>QQ/{*h!`Kb*u0O6q6tDxEkFfFiFmFqFwF{GPGTGXG]GaGeGiGmGqGuGyG}HSH^HjIyJZJeJm!WKc=eFjFnFrFxF|GQGUGYG^GbGfGjGnGrGvGzHTH_HkIzJUJ[JfJnJsJw!UKd;jFyF}GRGVGZG_GcGgGkGoGsGwG{HPHUHaHlI{J]JgJpKWKaKfKh!SKeFlFoFsFzGOGSGWG[G`GdGhGlGpGtGxG|HVH`HmI|JTJ^JhJoJvUKpLiLmLqUKqLjLnLrUKrLkLoLsUKsLlLpLtQLRLzQLSL{QLTL|RLUL},V%k#T%Z%[%i%m%o%s%u%y%z(x(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*h*s*u*v*w*y+U+n,T,W,d.P.^.a.d/p/q/w/y0O0_0g0j0n0r1U1b1d1z2r2|3Q3^3n4v5Q5s6n6q6t6u6w6{7U7X7c7l8O8Y8]8_8a8y9s:S:W:X;i;j;o<k<s<v<x<}=R=X=b=e=k=o=r>Q>m@hATAWAaAwCdCmCpDQDSDxEREWEdEkExFTFWFeFfFiFjFkFlFmFnFoFqFrFsFwFxFyFzF{F|F}GOGPGQGRGSGTGUGVGWGXGYGZG[G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}HPHSHTHUHVH^H_H`HaHjHkHlHmIyIzI{I|JTJUJZJ[J]J^JeJfJgJhJmJnJoJpJsJvJwKTKWKaKfKhLiLjLkLlLmLnLoLpLqLrLsLtLvLwLxLyLzL{L|L}MSMTMUMVV)R%Z*R*gY/l*PHSHTHUHVY6g/pIyIzI{I|Z<n6nJeJfJgJh&^%|#T%Z%[%i%o%s%u(z)W)X)a)c)h)m)n)o)p)q)r)s)t)u)v)w)x)y)z){*P*U*]*c*s*v*w*y+U+n,T,W,d.P.^.a.d/p/q/w/y0g0j0n0r1U1b1d1z2r2|3Q3^3n4v5Q5s6n6u6w6{7U7X7l8O8Y8]8_8a8y9s:S:W:X;i;o<k<s<v<x<}=R=X=b=o=r>m@hATAWAaAwCdCmCpDQDSEREWEdExFTFWFeFkKTLvLwLxLyMSMTMUMVn*l%|*n6sJiJjJkJlKiKjKkKlKtKuKvKw![Ki*u0O6q6tDxEkFiFmFqFwF{GPGTGXG]GaGeGiGmGqGuGyHSH^HjIyJZJeJm![Kj=eFgFjFnFrFxF|GQGUGYG^GbGfGjGnGrGvGzHOHTH_HkIzJUJ[JfJnJsJw!UKk;jFyF}GRGVGZG_GcGgGkGoGsGwG{HPHUHaHlI{J]JgJpKWKaKfKh!XKlFhFlFoFsFzGOGSGWG[G`GdGhGlGpGtGxG|HQHVH`HmI|JTJ^JhJoJvY*t%|KiKjKkKlZ<p6sJiJjJkJlS*n%|6sSKtJiKiSKuJjKjSKvJkKkTKwJlKld*m%|6sJiJjJkJlKiKjKkKlZ0Q*nKtKuKvKwo*l%|*n6sJiJjJkJlKiKjKkKlKtKuKvKwR0[*vQ6y0ZRCnAZS*p%|6sQ0R*nSMOJiKiSMPJjKjSMQJkKkSMRJlKlQMYKtQMZKuQM[KvRM]Kwo*o%|*n6sJiJjJkJlKiKjKkKlKtKuKvKwY0S*pMOMPMQMRZ6r0RMYMZM[M]Q<i6iREiDw!XUOQSTVZklo!d!}#[#o${$|%O&d&e&j'Q'R'U(n(p+a,k-vQ'P#lQ'Y#qQ'j#wQ(`$fQ(b$jQ(d$nQ-a(SQ-f(WQ-k([Q4f-cQ4j-hR4n-mT&i#[&jW&o#[#o&j'UW+g&d&e'Q'RT2Y+a,kX,Q&m+c+k2TS2x+v+yQ9|2yQ?Z9xRBr?[Q+}&mS2^+c+kQ3[,RQ9P2TQ9]2_R>s9QW2z+v+y3X3YS9}2y:]S?]9x?eTBs?[BwQ3S+}Q9Z2^R>q9PR2k+mQ2i+mR9h2jQ2o+mQ9e2hQ9i2iQ9k2jQ?S9gR?T9jQ2j+mR9h2iR:Y3RR?i:^Q?g:^RB{?hQ?h:^RB{?gW&f#[#o&j'UW+e&d&e'Q'RT2V+a,kX,P&m+c+k2TS2{+v+yQ:O2yQ?^9xRBt?[Q+o&fQ2`+eR9R2VS+j&e'RT2W+a,kX+i&e'R+a,kQBm>xQBn>zQBo>|REeDhQ,V&oS2c+g,SQ2e+jQ9S2WS9V2Y2bQ9n2nQ9o2pQ>u9UQ?O9dQ?R9fQBp?PRBq?QW&p#[#o&j'UW+h&d&e'Q'RT2Z+a,kR2R+`T&h#[&jQ,Y&pQ2d+hQ9W2ZQ?V9rQBi>wRDdBhT'T#o'UQ3w,oQ:j3vR?q:iQ#x!]Q$o!pQ'v$SQ(]$YQ(f$pR-o(^R'h#uQ'd#uR4X,|S'g#u,|R,{'cT']#t'^T'[#t'^R:w4PQ#`!WW$^!k#Z#a#dW'y$T$[$_$aW-X'w'z'|'}U4`-Z-[-]S;R4a4bR@V;SQ#i!YQ$c!mR(P$VQ#h!YS$b!m#iS(O$V$cR-^(PR&|#fQ&z#fR3p,eR&{#f\",\n  nodeNames: \"⚠ LineComment BlockComment PP_Directive Program Keyword Keyword ; Keyword TypeIdentifier = < SimpleType ) ( Delim VarName , Delim [ ] Astrisk ? > . QualifiedAliasMember :: Keyword Keyword Keyword } { Delim Delim : Delim ArgumentName BooleanLiteral IntegerLiteral RealLiteral CharacterLiteral StringLiteral NullLiteral InterpolatedRegularString $\\\" UnaryExpr + - Not ~ & ^ ++ -- Cast Delim Keyword Keyword += -= *= SlashEq %= &= |= ^= <<= >= RightShiftAssignment ??= Keyword InterpolatedVerbatimString $@\\\" @$\\\" Ident ParenOrTupleExpr Delim MethodName Delim Keyword Keyword Keyword Keyword Delim Keyword Keyword ObjectCreationExpr Keyword Delim InitializerTarget Delim Delim Delim Delim Delim Keyword Delim Keyword Delim Keyword Delim Keyword Keyword Keyword Delim Keyword Delim ContextualKeyword Delim PropertyPatternFields Delim PropertyPatternField RelationalPattern <= LogicalPattern ContextualKeyword ContextualKeyword ContextualKeyword PropertyPattern Delim ListPattern Delim .. Keyword => Keyword Keyword Keyword Delim ParamName Delim LocalVarDecl Keyword Delim Delim LocalConstDecl Keyword ConstName LocalFuncDecl Keyword Delim ContextualKeyword Keyword Keyword Keyword Keyword Keyword Keyword Keyword Delim Keyword Keyword Keyword Keyword Delim Keyword Delim Keyword Keyword Keyword Keyword Keyword Keyword Delim Keyword Keyword Delim Keyword Keyword Delim -> Keyword Delim Delim Delim ArrayCreationExpr Delim BinaryExpr Slash % << RightShift Keyword Keyword == NotEq | && || ?? RangeExpr LambdaExpr Delim ContextualKeyword ContextualKeyword ContextualKeyword ContextualKeyword ContextualKeyword ContextualKeyword ContextualKeyword ContextualKeyword ContextualKeyword ContextualKeyword ContextualKeyword ContextualKeyword AttrsNamedArg Keyword Keyword Keyword Keyword Keyword Keyword Keyword Keyword Keyword Keyword Keyword ContextualKeyword Delim PropertyName Delim Keyword Keyword Keyword Keyword Delim ContextualKeyword ContextualKeyword Delim Keyword Delim Delim Keyword Keyword Delim Keyword Delim Delim Keyword Keyword Delim Delim\",\n  maxTerm: 527,\n  nodeProps: [\n    [\"openedBy\", 13,\"(\",20,\"[\",30,\"{\"],\n    [\"closedBy\", 14,\")\",19,\"]\",31,\"}\"]\n  ],\n  skippedNodes: [0,1,2,3],\n  repeatNodeCount: 53,\n  tokenData: \"!$e~R!RXY$[YZ$aZ[$[[]$[]^$fpq$[qr$nrs${st-Ttu:yuv;dvw;qwx<WxyAjyzAoz{At{|BR|}Bh}!OBm!O!PC[!P!QEy!Q!RHR!R![Ii![!]MX!]!^Mf!^!_Mk!_!`NY!`!aNo!a!bN|!b!c! c!c!}!!u!}#O!#W#P#Q!#]#Q#R!#b#R#S!!u#T#o!!u#o#p!#o#p#q!#t#q#r!$Z#r#s!$`#y#z$a$f$g$[#BY#BZ$[$IS$I_$[$I|$I}$a$I}$JO$a$JO$JP$[$KV$KW$[&FU&FV$[~$aO'l~~$fO'k~~$kP'k~YZ$a~$sP!Q~!_!`$v~${O%P~~%OZOY${Z]${^r${rs%qs#O${#O#P&U#P#y${#z$I|${$JO;'S${;'S;=`,}<%lO${~%vPy~#i#j%y~%|P!Y!Z&P~&UOy~~&X^rs${wx${!Q!R${!w!x'T#O#P${#T#U${#U#V${#Y#Z${#b#c${#f#g${#h#i${#i#j(V#j#k${#l#m)X~'WR!Q!['a!c!i'a#T#Z'a~'dR!Q!['m!c!i'm#T#Z'm~'pR!Q!['y!c!i'y#T#Z'y~'|R!Q![(V!c!i(V#T#Z(V~(YR!Q![(c!c!i(c#T#Z(c~(fR!Q![(o!c!i(o#T#Z(o~(rR!Q![({!c!i({#T#Z({~)OR!Q![${!c!i${#T#Z${~)[R!Q![)e!c!i)e#T#Z)e~)haOY${Z]${^r${rs%qs!Q${!Q![*m![!c${!c!i*m!i#O${#O#P&U#P#T${#T#Z*m#Z#y${#z$I|${$JO;'S${;'S;=`,}<%lO${~*paOY${Z]${^r${rs%qs!Q${!Q![+u![!c${!c!i+u!i#O${#O#P&U#P#T${#T#Z+u#Z#y${#z$I|${$JO;'S${;'S;=`,}<%lO${~+xaOY${Z]${^r${rs%qs!Q${!Q![${![!c${!c!i${!i#O${#O#P&U#P#T${#T#Z${#Z#y${#z$I|${$JO;'S${;'S;=`,}<%lO${~-QP;=`<%l${~-WbXY-TZ[-T[]-Tpq-T#W#X.`#X#Y1_#]#^1t#`#a8i#d#e8{#f#g6r#i#j9k#k#l:T$f$g-T#BY#BZ-T$IS$I_-T$JO$JP-T$KV$KW-T&FU&FV-T~.cP#X#Y.f~.iP#Y#Z.l~.oP#]#^.r~.uP#b#c.x~.{P#X#Y/O~/RYXY/qZ[/q[]/qpq/q$f$g/q#BY#BZ/q$IS$I_/q$JO$JP/q$KV$KW/q&FU&FV/q~/t^XY/qZ[/q[]/qpq/q!b!c0p!c!}0|#R#S0|#T#o0|$f$g/q#BY#BZ/q$IS$I_/q$JO$JP/q$KV$KW/q&FU&FV/q~0sR!c!}0|#R#S0|#T#o0|~1RSR~!Q![0|!c!}0|#R#S0|#T#o0|~1bR#`#a1k#b#c6]#f#g8V~1nQ#]#^1t#g#h6Q~1wP#Y#Z1z~1}YXY2mZ[2m[]2mpq2m$f$g2m#BY#BZ2m$IS$I_2m$JO$JP2m$KV$KW2m&FU&FV2m~2peOX4RXY4jZ[4j[]4j]p4Rpq4jq$f4R$f$g4j$g#BY4R#BY#BZ4j#BZ$IS4R$IS$I_4j$I_$JO4R$JO$JP4j$JP$KV4R$KV$KW4j$KW&FU4R&FU&FV4j&FV;'S4R;'S;=`4d<%lO4R~4WSR~OY4RZ;'S4R;'S;=`4d<%lO4R~4gP;=`<%l4R~4oeR~OX4RXY4jZ[4j[]4j]p4Rpq4jq$f4R$f$g4j$g#BY4R#BY#BZ4j#BZ$IS4R$IS$I_4j$I_$JO4R$JO$JP4j$JP$KV4R$KV$KW4j$KW&FU4R&FU&FV4j&FV;'S4R;'S;=`4d<%lO4R~6TP#X#Y6W~6]OR~~6`P#W#X6c~6fQ#]#^6l#f#g6r~6oP#Y#Z6W~6uP#X#Y6x~6{P#Z#[7O~7RP#]#^7U~7XP#c#d7[~7_P#b#c7b~7gYR~XY2mZ[2m[]2mpq2m$f$g2m#BY#BZ2m$IS$I_2m$JO$JP2m$KV$KW2m&FU&FV2m~8YP#f#g8]~8`P#c#d8c~8fP#f#g7b~8lP#]#^8o~8rP#b#c8u~8xP#X#Y1z~9OP#f#g9R~9UP#T#U9X~9[P#Z#[9_~9bP#a#b9e~9hP#T#U7b~9nP#b#c9q~9tP#W#X9w~9zP#X#Y9}~:QP#Y#Z/O~:WP#T#U:Z~:^P#f#g:a~:dP#b#c:g~:jP#]#^:m~:pP#b#c:s~:vP#Z#[7b~:|Qrs;S!b!c;X~;XO|~~;[Prs;_~;dO!j~~;iP$y~!_!`;l~;qO!`~~;vQ!S~vw;|!_!`<R~<RO%R~~<WO!a~~<ZYOY<yZ]<y^w<yx#O<y#O#P=U#P#y<y#z$I|<y$JO;'S<y;'S;=`Ad<%lO<y~<|Pwx=P~=UOx~~=X^rs<ywx<y!Q!R<y!w!x>T#O#P<y#T#U<y#U#V<y#Y#Z<y#b#c<y#f#g<y#h#i<y#i#j?V#j#k<y#l#m@X~>WR!Q![>a!c!i>a#T#Z>a~>dR!Q![>m!c!i>m#T#Z>m~>pR!Q![>y!c!i>y#T#Z>y~>|R!Q![?V!c!i?V#T#Z?V~?YR!Q![?c!c!i?c#T#Z?c~?fR!Q![?o!c!i?o#T#Z?o~?rR!Q![?{!c!i?{#T#Z?{~@OR!Q![<y!c!i<y#T#Z<y~@[R!Q![@e!c!i@e#T#Z@e~@hSwx=P!Q![@t!c!i@t#T#Z@t~@wSwx=P!Q![AT!c!iAT#T#ZAT~AWSwx=P!Q![<y!c!i<y#T#Z<y~AgP;=`<%l<y~AoO^~~AtO]~~AyPe~!_!`A|~BRO!^~~BWQ!O~{|B^!_!`Bc~BcO!U~~BhO![~~BmOa~~BrR!P~}!OB{!_!`CQ!`!aCV~CQO!V~~CVO!]~~C[O$p~~CaQh~!O!PCg!Q![Cl~ClO#n~~CqYw~!Q![Cl!f!gDa!g!hDf!h!iDa!o!pDa#R#SEp#W#XDa#X#YDf#Y#ZDa#a#bDa~DfOw~~DiR{|Dr}!ODr!Q![Dx~DuP!Q![Dx~D}Ww~!Q![Dx!f!gDa!h!iDa!o!pDa#R#SEg#W#XDa#Y#ZDa#a#bDa~EjQ!Q![Dx#R#SEg~EsQ!Q![Cl#R#SEp~FOR$x~z{FX!P!QG[!_!`G|~F^TQ~OzFXz{Fm{;'SFX;'S;=`GU<%lOFX~FpTO!PFX!P!QGP!Q;'SFX;'S;=`GU<%lOFX~GUOQ~~GXP;=`<%lFX~GaVP~OYG[Z]G[^#yG[#z$I|G[$JO;'SG[;'S;=`Gv<%lOG[~GyP;=`<%lG[~HRO!_~~HWcv~!O!PIc!Q![Ii!d!eKc!f!gDa!g!hDf!h!iDa!n!oJm!o!pDa!w!xJ}!z!{LZ#R#SKY#U#VKc#W#XDa#X#YDf#Y#ZDa#`#aJm#a#bDa#i#jJ}#l#mLZ~IfP!Q![Cl~In_v~!O!PIc!Q![Ii!f!gDa!g!hDf!h!iDa!n!oJm!o!pDa!w!xJ}#R#SKY#W#XDa#X#YDf#Y#ZDa#`#aJm#a#bDa#i#jJ}~JrQv~!w!xJx#i#jJx~J}Ov~~KSQv~!n!oJx#`#aJx~K]Q!Q![Ii#R#SKY~KfR!Q!RKo!R!SKo#R#SKc~KtVv~!Q!RKo!R!SKo!n!oJm!w!xJ}#R#SKc#`#aJm#i#jJ}~L^S!Q![Lj!c!iLj#R#SLZ#T#ZLj~LoWv~!Q![Lj!c!iLj!n!oJm!w!xJ}#R#SLZ#T#ZLj#`#aJm#i#jJ}~M^Pr~![!]Ma~MfOj~~MkOV~~MpQZ~!^!_Mv!_!`NT~M{P$z~!_!`NO~NTO!d~~NYO#e~~N_QY~!_!`Ne!`!aNj~NjO%O~~NoO#p~~NtPg~!_!`Nw~N|O!e~~! RPf~!a!b! U~! ZP%T~!_!`! ^~! cO!g~~! fTrs! utu!!j!c!}!!u#R#S!!u#T#o!!u~! xTOr! urs!!Xs;'S! u;'S;=`!!d<%lO! u~!!^Qy~rs! u#i#j%y~!!gP;=`<%l! u~!!mPrs!!p~!!uO!k~~!!zS'o~!Q![!!u!c!}!!u#R#S!!u#T#o!!u~!#]Oc~~!#bOd~~!#gP!T~!_!`!#j~!#oO!c~~!#tOo~~!#yQ%Q~!_!`!$P#p#q!$U~!$UO!b~~!$ZO%S~~!$`On~~!$eO!R~\",\n  tokenizers: [interpString, interpVString, 0],\n  topRules: {\"Program\":[0,4]},\n  dynamicPrecedences: {\"54\":1,\"75\":-1,\"89\":1,\"191\":1,\"205\":1},\n  specialized: [{term: 307, get: value => spec_identifier[value] || -1}],\n  tokenPrec: 0\n});\n\nconst parser = parser$1;\nconst csharpLanguage = /*@__PURE__*/LRLanguage.define({\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                Delim: /*@__PURE__*/continuedIndent({ except: /^\\s*(?:case\\b|default:)/ }),\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                Delim: foldInside,\n            }),\n            /*@__PURE__*/styleTags({\n                \"Keyword ContextualKeyword SimpleType\": tags.keyword,\n                \"NullLiteral BooleanLiteral\": tags.bool,\n                IntegerLiteral: tags.integer,\n                RealLiteral: tags.float,\n                'StringLiteral CharacterLiteral InterpolatedRegularString InterpolatedVerbatimString $\" @$\" $@\"': tags.string,\n                \"LineComment BlockComment\": tags.comment,\n                \". .. : Astrisk Slash % + - ++ -- Not ~ << & | ^ && || < > <= >= == NotEq = += -= *= SlashEq %= &= |= ^= ? ?? ??= =>\": tags.operator,\n                PP_Directive: tags.keyword,\n                TypeIdentifier: tags.typeName,\n                \"ArgumentName AttrsNamedArg\": tags.variableName,\n                ConstName: /*@__PURE__*/tags.constant(tags.variableName),\n                //Ident: t.name,\n                MethodName: /*@__PURE__*/tags.function(tags.variableName),\n                ParamName: [tags.emphasis, tags.variableName],\n                VarName: tags.variableName,\n                \"FieldName PropertyName\": tags.propertyName,\n                \"( )\": tags.paren,\n                \"{ }\": tags.brace,\n                \"[ ]\": tags.squareBracket,\n            }),\n        ],\n    }),\n    languageData: {\n        commentTokens: { line: \"//\", block: { open: \"/*\", close: \"*/\" } },\n        closeBrackets: { brackets: [\"(\", \"[\", \"{\", '\"', \"'\"] },\n        indentOnInput: /^\\s*((\\)|\\]|\\})$|(else|else\\s+if|catch|finally|case)\\b|default:)/,\n    },\n});\nfunction csharp() {\n    return new LanguageSupport(csharpLanguage);\n}\n\nexport { csharp, csharpLanguage, parser };\n","import { LanguageSupport, StreamLanguage } from '@codemirror/language';\nimport { Tag } from '@lezer/highlight';\n\n/**\n* Wrapper around the legacy CM5 Solidity language mode\n* See: https://github.com/alincode/codemirror-solidity\n*/\nconst keywords = {\n    pragma: true,\n    solidity: true,\n    import: true,\n    as: true,\n    from: true,\n    contract: true,\n    constructor: true,\n    is: true,\n    function: true,\n    modifier: true,\n    // modifiers\n    pure: true,\n    view: true,\n    payable: true,\n    constant: true,\n    anonymous: true,\n    indexed: true,\n    returns: true,\n    return: true,\n    event: true,\n    struct: true,\n    mapping: true,\n    interface: true,\n    using: true,\n    library: true,\n    storage: true,\n    memory: true,\n    calldata: true,\n    public: true,\n    private: true,\n    external: true,\n    internal: true,\n    emit: true,\n    assembly: true,\n    abstract: true,\n    after: true,\n    catch: true,\n    final: true,\n    in: true,\n    inline: true,\n    let: true,\n    match: true,\n    null: true,\n    of: true,\n    relocatable: true,\n    static: true,\n    try: true,\n    typeof: true,\n    var: true,\n};\nconst keywordsSpecial = {\n    pragma: true,\n    returns: true,\n    address: true,\n    contract: true,\n    function: true,\n    struct: true,\n};\nconst keywordsEtherUnit = {\n    wei: true,\n    szabo: true,\n    finney: true,\n    ether: true,\n};\nconst keywordsTimeUnit = {\n    seconds: true,\n    minutes: true,\n    hours: true,\n    days: true,\n    weeks: true,\n};\nconst keywordsBlockAndTransactionProperties = {\n    block: ['coinbase', 'difficulty', 'gaslimit', 'number', 'timestamp'],\n    msg: ['data', 'sender', 'sig', 'value'],\n    tx: ['gasprice', 'origin'],\n};\nconst keywordsMoreBlockAndTransactionProperties = {\n    now: true,\n    gasleft: true,\n    blockhash: true,\n};\nconst keywordsErrorHandling = {\n    assert: true,\n    require: true,\n    revert: true,\n    throw: true,\n};\nconst keywordsMathematicalAndCryptographicFuctions = {\n    addmod: true,\n    mulmod: true,\n    keccak256: true,\n    sha256: true,\n    ripemd160: true,\n    ecrecover: true,\n};\nconst keywordsContractRelated = {\n    this: true,\n    selfdestruct: true,\n    super: true,\n};\nconst keywordsTypeInformation = { type: true };\nconst keywordsContractList = {};\nconst keywordsControlStructures = {\n    if: true,\n    else: true,\n    while: true,\n    do: true,\n    for: true,\n    break: true,\n    continue: true,\n    switch: true,\n    case: true,\n    default: true,\n};\nconst keywordsValueTypes = {\n    bool: true,\n    byte: true,\n    string: true,\n    enum: true,\n    address: true,\n};\nconst keywordsV0505NewReserve = {\n    alias: true,\n    apply: true,\n    auto: true,\n    copyof: true,\n    define: true,\n    immutable: true,\n    implements: true,\n    macro: true,\n    mutable: true,\n    override: true,\n    partial: true,\n    promise: true,\n    reference: true,\n    sealed: true,\n    sizeof: true,\n    supports: true,\n    typedef: true,\n    unchecked: true,\n};\nconst keywordsAbiEncodeDecodeFunctions = {\n    abi: [\n        'decode',\n        'encodePacked',\n        'encodeWithSelector',\n        'encodeWithSignature',\n        'encode',\n    ],\n};\nconst keywordsMembersOfAddressType = [\n    'transfer',\n    'send',\n    'balance',\n    'call',\n    'delegatecall',\n    'staticcall',\n];\nconst natSpecTags = ['title', 'author', 'notice', 'dev', 'param', 'return'];\nconst atoms = {\n    delete: true,\n    new: true,\n    true: true,\n    false: true,\n};\nconst isOperatorChar = /[+\\-*&^%:=<>!|/~]/;\nconst isNegativeChar = /[-]/;\nlet curPunc;\nfunction tokenBase(stream, state) {\n    let ch = stream.next();\n    if (ch === '\"' || ch === \"'\" || ch === '`') {\n        state.tokenize = tokenString(ch);\n        return state.tokenize(stream, state);\n    }\n    if (isVersion(stream, state)) {\n        return 'version';\n    }\n    if (ch === '.' &&\n        keywordsMembersOfAddressType.some(function (item) {\n            return stream.match(`${item}`);\n        })) {\n        return 'addressFunction';\n    }\n    if (typeof ch === 'string' && isNumber(ch, stream)) {\n        return 'number';\n    }\n    if (typeof ch === 'string' && /[[\\]{}(),;:.]/.test(ch)) {\n        return updateGarmmer(ch, state);\n    }\n    if (ch === '/') {\n        if (stream.eat('*')) {\n            state.tokenize = tokenComment;\n            return tokenComment(stream, state);\n        }\n        if (stream.match(/\\/{2}/)) {\n            ch = stream.next();\n            while (ch) {\n                if (ch === '@') {\n                    stream.backUp(1);\n                    state.grammar = 'doc';\n                    break;\n                }\n                ch = stream.next();\n            }\n            return 'doc';\n        }\n        if (stream.eat('/')) {\n            stream.skipToEnd();\n            return 'comment';\n        }\n    }\n    if (typeof ch === 'string' && isNegativeChar.test(ch)) {\n        const peeked = stream.peek();\n        if (typeof peeked === 'string' && isNumber(peeked, stream)) {\n            return 'number';\n        }\n        return 'operator';\n    }\n    if (typeof ch === 'string' && isOperatorChar.test(ch)) {\n        stream.eatWhile(isOperatorChar);\n        return 'operator';\n    }\n    stream.eatWhile(/[\\w$_\\xa1-\\uffff]/);\n    const cur = stream.current();\n    if (state.grammar === 'doc') {\n        if (natSpecTags.some(function (item) {\n            return cur === `@${item}`;\n        })) {\n            return 'docReserve';\n        }\n        return 'doc';\n    }\n    if (cur === 'solidity' && state.lastToken === 'pragma') {\n        state.lastToken = state.lastToken + ' ' + cur;\n    }\n    if (Object.prototype.propertyIsEnumerable.call(keywords, cur)) {\n        if (cur === 'case' || cur === 'default') {\n            curPunc = 'case';\n        }\n        if (Object.prototype.propertyIsEnumerable.call(keywordsSpecial, cur)) {\n            state.lastToken = cur;\n        }\n        //if (cur === 'function' && state.para === 'parameterMode')\n        return 'keyword';\n    }\n    if (Object.prototype.propertyIsEnumerable.call(keywordsEtherUnit, cur)) {\n        return 'etherUnit';\n    }\n    if (Object.prototype.propertyIsEnumerable.call(keywordsContractRelated, cur)) {\n        return 'contractRelated';\n    }\n    if (Object.prototype.propertyIsEnumerable.call(keywordsControlStructures, cur) ||\n        Object.prototype.propertyIsEnumerable.call(keywordsTypeInformation, cur) ||\n        Object.prototype.propertyIsEnumerable.call(keywordsV0505NewReserve, cur)) {\n        return 'keyword';\n    }\n    if (Object.prototype.propertyIsEnumerable.call(keywordsValueTypes, cur) ||\n        Object.prototype.propertyIsEnumerable.call(keywordsTimeUnit, cur) ||\n        isValidInteger(cur) ||\n        isValidBytes(cur) ||\n        isValidFixed(cur)) {\n        state.lastToken += 'variable';\n        return 'keyword';\n    }\n    if (Object.prototype.propertyIsEnumerable.call(atoms, cur)) {\n        return 'atom';\n    }\n    if (Object.prototype.propertyIsEnumerable.call(keywordsErrorHandling, cur)) {\n        return 'errorHandling';\n    }\n    if (Object.prototype.propertyIsEnumerable.call(keywordsMathematicalAndCryptographicFuctions, cur)) {\n        return 'mathematicalAndCryptographic';\n    }\n    if (Object.prototype.propertyIsEnumerable.call(keywordsMoreBlockAndTransactionProperties, cur) ||\n        (Object.prototype.propertyIsEnumerable.call(keywordsBlockAndTransactionProperties, cur) &&\n            keywordsBlockAndTransactionProperties[cur].some(function (item) {\n                return stream.match(`.${item}`);\n            }))) {\n        return 'variable-2';\n    }\n    if (cur === 'abi' &&\n        keywordsAbiEncodeDecodeFunctions[cur].some(function (item) {\n            return stream.match(`.${item}`);\n        })) {\n        return 'abi';\n    }\n    const style = updateHexLiterals(cur, stream);\n    if (style != null) {\n        return style;\n    }\n    if ((state.lastToken === 'functionName(' || state.lastToken === 'returns(') &&\n        Object.prototype.propertyIsEnumerable.call(keywordsContractList, cur)) {\n        state.lastToken += 'variable';\n        return 'variable';\n    }\n    if (state.lastToken === 'function') {\n        state.lastToken = 'functionName';\n        if (state.para == null) {\n            state.grammar = 'function';\n            state.para = '';\n        }\n        //state.parasMode = isNaN(state.parasMode) ? 1 : state.functionLayerCount++;\n        state.para += 'functionName';\n        return 'functionName';\n    }\n    if (state.lastToken === 'functionName(variable') {\n        state.lastToken = 'functionName(';\n        return 'parameterValue';\n    }\n    if (state.lastToken === 'returns(variable') {\n        state.lastToken = 'returns(';\n        return 'parameterValue';\n    }\n    if (state.lastToken === 'address' && cur === 'payable') {\n        state.lastToken = 'address payable';\n    }\n    if (state.lastToken === 'contract' || state.lastToken === 'struct') {\n        keywordsContractList[cur] = true;\n        state.lastToken = null;\n    }\n    if (state.grammar === 'function') {\n        return 'parameterValue';\n    }\n    return 'variable';\n}\nfunction tokenString(quote) {\n    return function (stream, state) {\n        let escaped = false;\n        let next;\n        let end = false;\n        next = stream.next();\n        while (next != null) {\n            if (next === quote && !escaped) {\n                end = true;\n                break;\n            }\n            escaped = !escaped && quote !== '`' && next === '\\\\';\n            next = stream.next();\n        }\n        if (end || !(escaped || quote === '`')) {\n            state.tokenize = tokenBase;\n        }\n        return 'string';\n    };\n}\nfunction tokenComment(stream, state) {\n    let maybeEnd = false;\n    let ch = stream.next();\n    while (ch) {\n        if (ch === '/' && maybeEnd) {\n            state.tokenize = tokenBase;\n            break;\n        }\n        maybeEnd = ch === '*';\n        ch = stream.next();\n    }\n    return 'comment';\n}\nfunction isVersion(stream, state) {\n    if (state.lastToken === 'pragma solidity') {\n        state.lastToken = null;\n        return (!state.startOfLine &&\n            (stream.match(/[\\^{0}][0-9.]+/) ||\n                stream.match(/[>=]+?[\\s]*[0-9.]+[\\s]*[<]?[\\s]*[0-9.]+/)));\n    }\n}\nfunction isNumber(ch, stream) {\n    if (/[\\d.]/.test(ch)) {\n        if (ch === '.') {\n            stream.match(/^[0-9]+([eE][-+]?[0-9]+)?/);\n        }\n        else if (ch === '0') {\n            if (!stream.match(/^[xX][0-9a-fA-F]+/)) {\n                stream.match(/^0[0-7]+/);\n            }\n        }\n        else {\n            stream.match(/^[0-9]*\\.?[0-9]*([eE][-+]?[0-9]+)?/);\n        }\n        return true;\n    }\n}\nfunction isValidInteger(token) {\n    if (token.match(/^[u]?int/)) {\n        if (token.indexOf('t') + 1 === token.length) {\n            return true;\n        }\n        const numberPart = Number(token.substr(token.indexOf('t') + 1, token.length));\n        return numberPart % 8 === 0 && numberPart <= 256;\n    }\n}\nfunction isValidBytes(token) {\n    if (token.match(/^bytes/)) {\n        if (token.indexOf('s') + 1 === token.length) {\n            return true;\n        }\n        const bytesPart = token.substr(token.indexOf('s') + 1, token.length);\n        return Number(bytesPart) <= 32;\n    }\n}\nfunction isValidFixed(token) {\n    if (token.match(/^[u]?fixed([0-9]+x[0-9]+)?/)) {\n        if (token.indexOf('d') + 1 === token.length) {\n            return true;\n        }\n        const numberPart = token\n            .substr(token.indexOf('d') + 1, token.length)\n            .split('x')\n            .map(Number);\n        return (numberPart[0] % 8 === 0 && numberPart[0] <= 256 && numberPart[1] <= 80);\n    }\n}\nfunction updateHexLiterals(token, stream) {\n    if (token.match(/^hex/) && stream.peek() === '\"') {\n        let maybeEnd = false;\n        let ch;\n        let hexValue = '';\n        let stringAfterHex = '';\n        ch = stream.next();\n        while (ch) {\n            stringAfterHex += ch;\n            if (ch === '\"' && maybeEnd) {\n                hexValue = stringAfterHex.substring(1, stringAfterHex.length - 1);\n                if (hexValue.match(/^[0-9a-fA-F]+$/)) {\n                    return 'number';\n                }\n                stream.backUp(stringAfterHex.length);\n                break;\n            }\n            maybeEnd = maybeEnd || ch === '\"';\n            ch = stream.next();\n        }\n    }\n}\nfunction updateGarmmer(ch, state) {\n    if (ch === ',' && state.para === 'functionName(variable') {\n        state.para = 'functionName(';\n    }\n    if (state.para != null && state.para.startsWith('functionName')) {\n        if (ch === ')') {\n            if (state.para.endsWith('(')) {\n                state.para = state.para.substr(0, state.para.length - 1);\n                if (state.para === 'functionName') {\n                    state.grammar = '';\n                }\n            }\n        }\n        else if (ch === '(') {\n            state.para += ch;\n        }\n    }\n    if (ch === '(' && state.lastToken === 'functionName') {\n        state.lastToken += ch;\n    }\n    else if (ch === ')' && state.lastToken === 'functionName(') {\n        state.lastToken = null;\n    }\n    else if (ch === '(' && state.lastToken === 'returns') {\n        state.lastToken += ch;\n    }\n    else if (ch === ')' &&\n        (state.lastToken === 'returns(' || state.lastToken === 'returns(variable')) {\n        state.lastToken = null;\n    }\n    if (ch === '(' && state.lastToken === 'address') {\n        state.lastToken += ch;\n    }\n    curPunc = ch;\n    return null;\n}\nclass Context {\n    constructor(indented, column, type, align, prev) {\n        this.indented = indented;\n        this.column = column;\n        this.type = type;\n        this.align = align;\n        this.prev = prev;\n    }\n}\nfunction pushContext(state, col, type) {\n    state.context = new Context(state.indented, col, type, null, state.context);\n    return state.context;\n}\nfunction popContext(state) {\n    if (!state.context.prev) {\n        return;\n    }\n    const t = state.context.type;\n    if (t === ')' || t === ']' || t === '}') {\n        state.indented = state.context.indented;\n    }\n    return (state.context = state.context.prev);\n}\nconst parser = {\n    startState(indentUnit) {\n        return {\n            tokenize: null,\n            context: new Context(0 - indentUnit, 0, 'top', false, null),\n            indented: 0,\n            startOfLine: true,\n            grammar: null,\n            lastToken: null,\n            para: null,\n        };\n    },\n    token(stream, state) {\n        const ctx = state.context;\n        if (stream.sol()) {\n            if (ctx.align == null) {\n                ctx.align = false;\n            }\n            state.indented = stream.indentation();\n            state.startOfLine = true;\n            if (ctx.type === 'case') {\n                ctx.type = '}';\n            }\n            if (state.grammar === 'doc') {\n                state.grammar = null;\n            }\n        }\n        if (stream.eatSpace()) {\n            return null;\n        }\n        curPunc = null;\n        const style = (state.tokenize || tokenBase)(stream, state);\n        if (style === 'comment') {\n            return style;\n        }\n        if (ctx.align == null) {\n            ctx.align = true;\n        }\n        if (curPunc === '{') {\n            pushContext(state, stream.column(), '}');\n        }\n        else if (curPunc === '[') {\n            pushContext(state, stream.column(), ']');\n        }\n        else if (curPunc === '(') {\n            pushContext(state, stream.column(), ')');\n        }\n        else if (curPunc === 'case') {\n            ctx.type = 'case';\n        }\n        else if (curPunc === '}' && ctx.type === '}') {\n            popContext(state);\n        }\n        else if (curPunc === ctx.type) {\n            popContext(state);\n        }\n        state.startOfLine = false;\n        return style;\n    },\n    indent(state, textAfter, indentContext) {\n        if (state.tokenize !== tokenBase && state.tokenize != null) {\n            return null;\n        }\n        const ctx = state.context;\n        const firstChar = textAfter && textAfter.charAt(0);\n        if (ctx.type === 'case' && /^(?:case|default)\\b/.test(textAfter)) {\n            state.context.type = '}';\n            return ctx.indented;\n        }\n        const closing = firstChar === ctx.type;\n        if (ctx.align) {\n            return ctx.column + (closing ? 0 : 1);\n        }\n        return ctx.indented + (closing ? 0 : indentContext.unit);\n    },\n    // @ts-ignore not specified in new stream parser, but maybe does something\n    electricChars: '{}):',\n    closeBrackets: '()[]{}\\'\\'\"\"``',\n    fold: 'brace',\n    blockCommentStart: '/*',\n    blockCommentEnd: '*/',\n    lineComment: '//',\n    tokenTable: {\n        functionName: /*@__PURE__*/Tag.define(),\n        parameterValue: /*@__PURE__*/Tag.define(),\n        addressFunction: /*@__PURE__*/Tag.define(),\n        errorHandling: /*@__PURE__*/Tag.define(),\n        contractRelated: /*@__PURE__*/Tag.define(),\n        version: /*@__PURE__*/Tag.define(),\n        etherUnit: /*@__PURE__*/Tag.define(),\n        doc: /*@__PURE__*/Tag.define(),\n        mathematicalAndCryptographic: /*@__PURE__*/Tag.define(),\n        abi: /*@__PURE__*/Tag.define(),\n    }\n};\nconst solidity = /*@__PURE__*/new LanguageSupport(/*@__PURE__*/StreamLanguage.define(parser));\n\nexport { parser, solidity };\n","var builtInFuncs = {\n  \"+\": [\"conjugate\", \"add\"],\n  \"−\": [\"negate\", \"subtract\"],\n  \"×\": [\"signOf\", \"multiply\"],\n  \"÷\": [\"reciprocal\", \"divide\"],\n  \"⌈\": [\"ceiling\", \"greaterOf\"],\n  \"⌊\": [\"floor\", \"lesserOf\"],\n  \"∣\": [\"absolute\", \"residue\"],\n  \"⍳\": [\"indexGenerate\", \"indexOf\"],\n  \"?\": [\"roll\", \"deal\"],\n  \"⋆\": [\"exponentiate\", \"toThePowerOf\"],\n  \"⍟\": [\"naturalLog\", \"logToTheBase\"],\n  \"○\": [\"piTimes\", \"circularFuncs\"],\n  \"!\": [\"factorial\", \"binomial\"],\n  \"⌹\": [\"matrixInverse\", \"matrixDivide\"],\n  \"<\": [null, \"lessThan\"],\n  \"≤\": [null, \"lessThanOrEqual\"],\n  \"=\": [null, \"equals\"],\n  \">\": [null, \"greaterThan\"],\n  \"≥\": [null, \"greaterThanOrEqual\"],\n  \"≠\": [null, \"notEqual\"],\n  \"≡\": [\"depth\", \"match\"],\n  \"≢\": [null, \"notMatch\"],\n  \"∈\": [\"enlist\", \"membership\"],\n  \"⍷\": [null, \"find\"],\n  \"∪\": [\"unique\", \"union\"],\n  \"∩\": [null, \"intersection\"],\n  \"∼\": [\"not\", \"without\"],\n  \"∨\": [null, \"or\"],\n  \"∧\": [null, \"and\"],\n  \"⍱\": [null, \"nor\"],\n  \"⍲\": [null, \"nand\"],\n  \"⍴\": [\"shapeOf\", \"reshape\"],\n  \",\": [\"ravel\", \"catenate\"],\n  \"⍪\": [null, \"firstAxisCatenate\"],\n  \"⌽\": [\"reverse\", \"rotate\"],\n  \"⊖\": [\"axis1Reverse\", \"axis1Rotate\"],\n  \"⍉\": [\"transpose\", null],\n  \"↑\": [\"first\", \"take\"],\n  \"↓\": [null, \"drop\"],\n  \"⊂\": [\"enclose\", \"partitionWithAxis\"],\n  \"⊃\": [\"diclose\", \"pick\"],\n  \"⌷\": [null, \"index\"],\n  \"⍋\": [\"gradeUp\", null],\n  \"⍒\": [\"gradeDown\", null],\n  \"⊤\": [\"encode\", null],\n  \"⊥\": [\"decode\", null],\n  \"⍕\": [\"format\", \"formatByExample\"],\n  \"⍎\": [\"execute\", null],\n  \"⊣\": [\"stop\", \"left\"],\n  \"⊢\": [\"pass\", \"right\"]\n};\n\nvar isOperator = /[\\.\\/⌿⍀¨⍣]/;\nvar isNiladic = /⍬/;\nvar isFunction = /[\\+−×÷⌈⌊∣⍳\\?⋆⍟○!⌹<≤=>≥≠≡≢∈⍷∪∩∼∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢]/;\nvar isArrow = /←/;\nvar isComment = /[⍝#].*$/;\n\nvar stringEater = function(type) {\n  var prev;\n  prev = false;\n  return function(c) {\n    prev = c;\n    if (c === type) {\n      return prev === \"\\\\\";\n    }\n    return true;\n  };\n};\n\nexport const apl = {\n  name: \"apl\",\n  startState: function() {\n    return {\n      prev: false,\n      func: false,\n      op: false,\n      string: false,\n      escape: false\n    };\n  },\n  token: function(stream, state) {\n    var ch;\n    if (stream.eatSpace()) {\n      return null;\n    }\n    ch = stream.next();\n    if (ch === '\"' || ch === \"'\") {\n      stream.eatWhile(stringEater(ch));\n      stream.next();\n      state.prev = true;\n      return \"string\";\n    }\n    if (/[\\[{\\(]/.test(ch)) {\n      state.prev = false;\n      return null;\n    }\n    if (/[\\]}\\)]/.test(ch)) {\n      state.prev = true;\n      return null;\n    }\n    if (isNiladic.test(ch)) {\n      state.prev = false;\n      return \"atom\";\n    }\n    if (/[¯\\d]/.test(ch)) {\n      if (state.func) {\n        state.func = false;\n        state.prev = false;\n      } else {\n        state.prev = true;\n      }\n      stream.eatWhile(/[\\w\\.]/);\n      return \"number\";\n    }\n    if (isOperator.test(ch)) {\n      return \"operator\"\n    }\n    if (isArrow.test(ch)) {\n      return \"operator\";\n    }\n    if (isFunction.test(ch)) {\n      state.func = true;\n      state.prev = false;\n      return builtInFuncs[ch] ? \"variableName.function.standard\" : \"variableName.function\"\n    }\n    if (isComment.test(ch)) {\n      stream.skipToEnd();\n      return \"comment\";\n    }\n    if (ch === \"∘\" && stream.peek() === \".\") {\n      stream.next();\n      return \"variableName.function\";\n    }\n    stream.eatWhile(/[\\w\\$_]/);\n    state.prev = true;\n    return \"keyword\";\n  }\n}\n","function errorIfNotEmpty(stream) {\n  var nonWS = stream.match(/^\\s*\\S/);\n  stream.skipToEnd();\n  return nonWS ? \"error\" : null;\n}\n\nexport const asciiArmor = {\n  name: \"asciiarmor\",\n  token: function(stream, state) {\n    var m;\n    if (state.state == \"top\") {\n      if (stream.sol() && (m = stream.match(/^-----BEGIN (.*)?-----\\s*$/))) {\n        state.state = \"headers\";\n        state.type = m[1];\n        return \"tag\";\n      }\n      return errorIfNotEmpty(stream);\n    } else if (state.state == \"headers\") {\n      if (stream.sol() && stream.match(/^\\w+:/)) {\n        state.state = \"header\";\n        return \"atom\";\n      } else {\n        var result = errorIfNotEmpty(stream);\n        if (result) state.state = \"body\";\n        return result;\n      }\n    } else if (state.state == \"header\") {\n      stream.skipToEnd();\n      state.state = \"headers\";\n      return \"string\";\n    } else if (state.state == \"body\") {\n      if (stream.sol() && (m = stream.match(/^-----END (.*)?-----\\s*$/))) {\n        if (m[1] != state.type) return \"error\";\n        state.state = \"end\";\n        return \"tag\";\n      } else {\n        if (stream.eatWhile(/[A-Za-z0-9+\\/=]/)) {\n          return null;\n        } else {\n          stream.next();\n          return \"error\";\n        }\n      }\n    } else if (state.state == \"end\") {\n      return errorIfNotEmpty(stream);\n    }\n  },\n  blankLine: function(state) {\n    if (state.state == \"headers\") state.state = \"body\";\n  },\n  startState: function() {\n    return {state: \"top\", type: null};\n  }\n};\n","var atoms    = [\"exten\", \"same\", \"include\",\"ignorepat\",\"switch\"],\n    dpcmd    = [\"#include\",\"#exec\"],\n    apps     = [\n      \"addqueuemember\",\"adsiprog\",\"aelsub\",\"agentlogin\",\"agentmonitoroutgoing\",\"agi\",\n      \"alarmreceiver\",\"amd\",\"answer\",\"authenticate\",\"background\",\"backgrounddetect\",\n      \"bridge\",\"busy\",\"callcompletioncancel\",\"callcompletionrequest\",\"celgenuserevent\",\n      \"changemonitor\",\"chanisavail\",\"channelredirect\",\"chanspy\",\"clearhash\",\"confbridge\",\n      \"congestion\",\"continuewhile\",\"controlplayback\",\"dahdiacceptr2call\",\"dahdibarge\",\n      \"dahdiras\",\"dahdiscan\",\"dahdisendcallreroutingfacility\",\"dahdisendkeypadfacility\",\n      \"datetime\",\"dbdel\",\"dbdeltree\",\"deadagi\",\"dial\",\"dictate\",\"directory\",\"disa\",\n      \"dumpchan\",\"eagi\",\"echo\",\"endwhile\",\"exec\",\"execif\",\"execiftime\",\"exitwhile\",\"extenspy\",\n      \"externalivr\",\"festival\",\"flash\",\"followme\",\"forkcdr\",\"getcpeid\",\"gosub\",\"gosubif\",\n      \"goto\",\"gotoif\",\"gotoiftime\",\"hangup\",\"iax2provision\",\"ices\",\"importvar\",\"incomplete\",\n      \"ivrdemo\",\"jabberjoin\",\"jabberleave\",\"jabbersend\",\"jabbersendgroup\",\"jabberstatus\",\n      \"jack\",\"log\",\"macro\",\"macroexclusive\",\"macroexit\",\"macroif\",\"mailboxexists\",\"meetme\",\n      \"meetmeadmin\",\"meetmechanneladmin\",\"meetmecount\",\"milliwatt\",\"minivmaccmess\",\"minivmdelete\",\n      \"minivmgreet\",\"minivmmwi\",\"minivmnotify\",\"minivmrecord\",\"mixmonitor\",\"monitor\",\"morsecode\",\n      \"mp3player\",\"mset\",\"musiconhold\",\"nbscat\",\"nocdr\",\"noop\",\"odbc\",\"odbc\",\"odbcfinish\",\n      \"originate\",\"ospauth\",\"ospfinish\",\"osplookup\",\"ospnext\",\"page\",\"park\",\"parkandannounce\",\n      \"parkedcall\",\"pausemonitor\",\"pausequeuemember\",\"pickup\",\"pickupchan\",\"playback\",\"playtones\",\n      \"privacymanager\",\"proceeding\",\"progress\",\"queue\",\"queuelog\",\"raiseexception\",\"read\",\"readexten\",\n      \"readfile\",\"receivefax\",\"receivefax\",\"receivefax\",\"record\",\"removequeuemember\",\n      \"resetcdr\",\"retrydial\",\"return\",\"ringing\",\"sayalpha\",\"saycountedadj\",\"saycountednoun\",\n      \"saycountpl\",\"saydigits\",\"saynumber\",\"sayphonetic\",\"sayunixtime\",\"senddtmf\",\"sendfax\",\n      \"sendfax\",\"sendfax\",\"sendimage\",\"sendtext\",\"sendurl\",\"set\",\"setamaflags\",\n      \"setcallerpres\",\"setmusiconhold\",\"sipaddheader\",\"sipdtmfmode\",\"sipremoveheader\",\"skel\",\n      \"slastation\",\"slatrunk\",\"sms\",\"softhangup\",\"speechactivategrammar\",\"speechbackground\",\n      \"speechcreate\",\"speechdeactivategrammar\",\"speechdestroy\",\"speechloadgrammar\",\"speechprocessingsound\",\n      \"speechstart\",\"speechunloadgrammar\",\"stackpop\",\"startmusiconhold\",\"stopmixmonitor\",\"stopmonitor\",\n      \"stopmusiconhold\",\"stopplaytones\",\"system\",\"testclient\",\"testserver\",\"transfer\",\"tryexec\",\n      \"trysystem\",\"unpausemonitor\",\"unpausequeuemember\",\"userevent\",\"verbose\",\"vmauthenticate\",\n      \"vmsayname\",\"voicemail\",\"voicemailmain\",\"wait\",\"waitexten\",\"waitfornoise\",\"waitforring\",\n      \"waitforsilence\",\"waitmusiconhold\",\"waituntil\",\"while\",\"zapateller\"\n    ];\n\nfunction basicToken(stream,state){\n  var cur = '';\n  var ch = stream.next();\n  // comment\n  if (state.blockComment) {\n    if (ch == \"-\" && stream.match(\"-;\", true)) {\n      state.blockComment = false;\n    } else if (stream.skipTo(\"--;\")) {\n      stream.next();\n      stream.next();\n      stream.next();\n      state.blockComment = false;\n    } else {\n      stream.skipToEnd();\n    }\n    return \"comment\";\n  }\n  if(ch == \";\") {\n    if (stream.match(\"--\", true)) {\n      if (!stream.match(\"-\", false)) {  // Except ;--- is not a block comment\n        state.blockComment = true;\n        return \"comment\";\n      }\n    }\n    stream.skipToEnd();\n    return \"comment\";\n  }\n  // context\n  if(ch == '[') {\n    stream.skipTo(']');\n    stream.eat(']');\n    return \"header\";\n  }\n  // string\n  if(ch == '\"') {\n    stream.skipTo('\"');\n    return \"string\";\n  }\n  if(ch == \"'\") {\n    stream.skipTo(\"'\");\n    return \"string.special\";\n  }\n  // dialplan commands\n  if(ch == '#') {\n    stream.eatWhile(/\\w/);\n    cur = stream.current();\n    if(dpcmd.indexOf(cur) !== -1) {\n      stream.skipToEnd();\n      return \"strong\";\n    }\n  }\n  // application args\n  if(ch == '$'){\n    var ch1 = stream.peek();\n    if(ch1 == '{'){\n      stream.skipTo('}');\n      stream.eat('}');\n      return \"variableName.special\";\n    }\n  }\n  // extension\n  stream.eatWhile(/\\w/);\n  cur = stream.current();\n  if(atoms.indexOf(cur) !== -1) {\n    state.extenStart = true;\n    switch(cur) {\n    case 'same': state.extenSame = true; break;\n    case 'include':\n    case 'switch':\n    case 'ignorepat':\n      state.extenInclude = true;break;\n    default:break;\n    }\n    return \"atom\";\n  }\n}\n\nexport const asterisk = {\n  name: \"asterisk\",\n  startState: function() {\n    return {\n      blockComment: false,\n      extenStart: false,\n      extenSame:  false,\n      extenInclude: false,\n      extenExten: false,\n      extenPriority: false,\n      extenApplication: false\n    };\n  },\n  token: function(stream, state) {\n\n    var cur = '';\n    if(stream.eatSpace()) return null;\n    // extension started\n    if(state.extenStart){\n      stream.eatWhile(/[^\\s]/);\n      cur = stream.current();\n      if(/^=>?$/.test(cur)){\n        state.extenExten = true;\n        state.extenStart = false;\n        return \"strong\";\n      } else {\n        state.extenStart = false;\n        stream.skipToEnd();\n        return \"error\";\n      }\n    } else if(state.extenExten) {\n      // set exten and priority\n      state.extenExten = false;\n      state.extenPriority = true;\n      stream.eatWhile(/[^,]/);\n      if(state.extenInclude) {\n        stream.skipToEnd();\n        state.extenPriority = false;\n        state.extenInclude = false;\n      }\n      if(state.extenSame) {\n        state.extenPriority = false;\n        state.extenSame = false;\n        state.extenApplication = true;\n      }\n      return \"tag\";\n    } else if(state.extenPriority) {\n      state.extenPriority = false;\n      state.extenApplication = true;\n      stream.next(); // get comma\n      if(state.extenSame) return null;\n      stream.eatWhile(/[^,]/);\n      return \"number\";\n    } else if(state.extenApplication) {\n      stream.eatWhile(/,/);\n      cur = stream.current();\n      if(cur === ',') return null;\n      stream.eatWhile(/\\w/);\n      cur = stream.current().toLowerCase();\n      state.extenApplication = false;\n      if(apps.indexOf(cur) !== -1){\n        return \"def\";\n      }\n    } else{\n      return basicToken(stream,state);\n    }\n\n    return null;\n  },\n\n  languageData: {\n    commentTokens: {line: \";\", block: {open: \";--\", close: \"--;\"}}\n  }\n};\n","var reserve = \"><+-.,[]\".split(\"\");\n/*\n  comments can be either:\n  placed behind lines\n\n  +++    this is a comment\n\n  where reserved characters cannot be used\n  or in a loop\n  [\n  this is ok to use [ ] and stuff\n  ]\n  or preceded by #\n*/\nexport const brainfuck = {\n  name: \"brainfuck\",\n  startState: function() {\n    return {\n      commentLine: false,\n      left: 0,\n      right: 0,\n      commentLoop: false\n    }\n  },\n  token: function(stream, state) {\n    if (stream.eatSpace()) return null\n    if(stream.sol()){\n      state.commentLine = false;\n    }\n    var ch = stream.next().toString();\n    if(reserve.indexOf(ch) !== -1){\n      if(state.commentLine === true){\n        if(stream.eol()){\n          state.commentLine = false;\n        }\n        return \"comment\";\n      }\n      if(ch === \"]\" || ch === \"[\"){\n        if(ch === \"[\"){\n          state.left++;\n        }\n        else{\n          state.right++;\n        }\n        return \"bracket\";\n      }\n      else if(ch === \"+\" || ch === \"-\"){\n        return \"keyword\";\n      }\n      else if(ch === \"<\" || ch === \">\"){\n        return \"atom\";\n      }\n      else if(ch === \".\" || ch === \",\"){\n        return \"def\";\n      }\n    }\n    else{\n      state.commentLine = true;\n      if(stream.eol()){\n        state.commentLine = false;\n      }\n      return \"comment\";\n    }\n    if(stream.eol()){\n      state.commentLine = false;\n    }\n  }\n};\n","function Context(indented, column, type, info, align, prev) {\n  this.indented = indented;\n  this.column = column;\n  this.type = type;\n  this.info = info;\n  this.align = align;\n  this.prev = prev;\n}\nfunction pushContext(state, col, type, info) {\n  var indent = state.indented;\n  if (state.context && state.context.type == \"statement\" && type != \"statement\")\n    indent = state.context.indented;\n  return state.context = new Context(indent, col, type, info, null, state.context);\n}\nfunction popContext(state) {\n  var t = state.context.type;\n  if (t == \")\" || t == \"]\" || t == \"}\")\n    state.indented = state.context.indented;\n  return state.context = state.context.prev;\n}\n\nfunction typeBefore(stream, state, pos) {\n  if (state.prevToken == \"variable\" || state.prevToken == \"type\") return true;\n  if (/\\S(?:[^- ]>|[*\\]])\\s*$|\\*$/.test(stream.string.slice(0, pos))) return true;\n  if (state.typeAtEndOfLine && stream.column() == stream.indentation()) return true;\n}\n\nfunction isTopScope(context) {\n  for (;;) {\n    if (!context || context.type == \"top\") return true;\n    if (context.type == \"}\" && context.prev.info != \"namespace\") return false;\n    context = context.prev;\n  }\n}\n\nexport function clike(parserConfig) {\n  var statementIndentUnit = parserConfig.statementIndentUnit,\n      dontAlignCalls = parserConfig.dontAlignCalls,\n      keywords = parserConfig.keywords || {},\n      types = parserConfig.types || {},\n      builtin = parserConfig.builtin || {},\n      blockKeywords = parserConfig.blockKeywords || {},\n      defKeywords = parserConfig.defKeywords || {},\n      atoms = parserConfig.atoms || {},\n      hooks = parserConfig.hooks || {},\n      multiLineStrings = parserConfig.multiLineStrings,\n      indentStatements = parserConfig.indentStatements !== false,\n      indentSwitch = parserConfig.indentSwitch !== false,\n      namespaceSeparator = parserConfig.namespaceSeparator,\n      isPunctuationChar = parserConfig.isPunctuationChar || /[\\[\\]{}\\(\\),;\\:\\.]/,\n      numberStart = parserConfig.numberStart || /[\\d\\.]/,\n      number = parserConfig.number || /^(?:0x[a-f\\d]+|0b[01]+|(?:\\d+\\.?\\d*|\\.\\d+)(?:e[-+]?\\d+)?)(u|ll?|l|f)?/i,\n      isOperatorChar = parserConfig.isOperatorChar || /[+\\-*&%=<>!?|\\/]/,\n      isIdentifierChar = parserConfig.isIdentifierChar || /[\\w\\$_\\xa1-\\uffff]/,\n      // An optional function that takes a {string} token and returns true if it\n      // should be treated as a builtin.\n      isReservedIdentifier = parserConfig.isReservedIdentifier || false;\n\n  var curPunc, isDefKeyword;\n\n  function tokenBase(stream, state) {\n    var ch = stream.next();\n    if (hooks[ch]) {\n      var result = hooks[ch](stream, state);\n      if (result !== false) return result;\n    }\n    if (ch == '\"' || ch == \"'\") {\n      state.tokenize = tokenString(ch);\n      return state.tokenize(stream, state);\n    }\n    if (numberStart.test(ch)) {\n      stream.backUp(1)\n      if (stream.match(number)) return \"number\"\n      stream.next()\n    }\n    if (isPunctuationChar.test(ch)) {\n      curPunc = ch;\n      return null;\n    }\n    if (ch == \"/\") {\n      if (stream.eat(\"*\")) {\n        state.tokenize = tokenComment;\n        return tokenComment(stream, state);\n      }\n      if (stream.eat(\"/\")) {\n        stream.skipToEnd();\n        return \"comment\";\n      }\n    }\n    if (isOperatorChar.test(ch)) {\n      while (!stream.match(/^\\/[\\/*]/, false) && stream.eat(isOperatorChar)) {}\n      return \"operator\";\n    }\n    stream.eatWhile(isIdentifierChar);\n    if (namespaceSeparator) while (stream.match(namespaceSeparator))\n      stream.eatWhile(isIdentifierChar);\n\n    var cur = stream.current();\n    if (contains(keywords, cur)) {\n      if (contains(blockKeywords, cur)) curPunc = \"newstatement\";\n      if (contains(defKeywords, cur)) isDefKeyword = true;\n      return \"keyword\";\n    }\n    if (contains(types, cur)) return \"type\";\n    if (contains(builtin, cur)\n        || (isReservedIdentifier && isReservedIdentifier(cur))) {\n      if (contains(blockKeywords, cur)) curPunc = \"newstatement\";\n      return \"builtin\";\n    }\n    if (contains(atoms, cur)) return \"atom\";\n    return \"variable\";\n  }\n\n  function tokenString(quote) {\n    return function(stream, state) {\n      var escaped = false, next, end = false;\n      while ((next = stream.next()) != null) {\n        if (next == quote && !escaped) {end = true; break;}\n        escaped = !escaped && next == \"\\\\\";\n      }\n      if (end || !(escaped || multiLineStrings))\n        state.tokenize = null;\n      return \"string\";\n    };\n  }\n\n  function tokenComment(stream, state) {\n    var maybeEnd = false, ch;\n    while (ch = stream.next()) {\n      if (ch == \"/\" && maybeEnd) {\n        state.tokenize = null;\n        break;\n      }\n      maybeEnd = (ch == \"*\");\n    }\n    return \"comment\";\n  }\n\n  function maybeEOL(stream, state) {\n    if (parserConfig.typeFirstDefinitions && stream.eol() && isTopScope(state.context))\n      state.typeAtEndOfLine = typeBefore(stream, state, stream.pos)\n  }\n\n  // Interface\n\n  return {\n    name: parserConfig.name,\n    startState: function(indentUnit) {\n      return {\n        tokenize: null,\n        context: new Context(-indentUnit, 0, \"top\", null, false),\n        indented: 0,\n        startOfLine: true,\n        prevToken: null\n      };\n    },\n\n    token: function(stream, state) {\n      var ctx = state.context;\n      if (stream.sol()) {\n        if (ctx.align == null) ctx.align = false;\n        state.indented = stream.indentation();\n        state.startOfLine = true;\n      }\n      if (stream.eatSpace()) { maybeEOL(stream, state); return null; }\n      curPunc = isDefKeyword = null;\n      var style = (state.tokenize || tokenBase)(stream, state);\n      if (style == \"comment\" || style == \"meta\") return style;\n      if (ctx.align == null) ctx.align = true;\n\n      if (curPunc == \";\" || curPunc == \":\" || (curPunc == \",\" && stream.match(/^\\s*(?:\\/\\/.*)?$/, false)))\n        while (state.context.type == \"statement\") popContext(state);\n      else if (curPunc == \"{\") pushContext(state, stream.column(), \"}\");\n      else if (curPunc == \"[\") pushContext(state, stream.column(), \"]\");\n      else if (curPunc == \"(\") pushContext(state, stream.column(), \")\");\n      else if (curPunc == \"}\") {\n        while (ctx.type == \"statement\") ctx = popContext(state);\n        if (ctx.type == \"}\") ctx = popContext(state);\n        while (ctx.type == \"statement\") ctx = popContext(state);\n      }\n      else if (curPunc == ctx.type) popContext(state);\n      else if (indentStatements &&\n               (((ctx.type == \"}\" || ctx.type == \"top\") && curPunc != \";\") ||\n                (ctx.type == \"statement\" && curPunc == \"newstatement\"))) {\n        pushContext(state, stream.column(), \"statement\", stream.current());\n      }\n\n      if (style == \"variable\" &&\n          ((state.prevToken == \"def\" ||\n            (parserConfig.typeFirstDefinitions && typeBefore(stream, state, stream.start) &&\n             isTopScope(state.context) && stream.match(/^\\s*\\(/, false)))))\n        style = \"def\";\n\n      if (hooks.token) {\n        var result = hooks.token(stream, state, style);\n        if (result !== undefined) style = result;\n      }\n\n      if (style == \"def\" && parserConfig.styleDefs === false) style = \"variable\";\n\n      state.startOfLine = false;\n      state.prevToken = isDefKeyword ? \"def\" : style || curPunc;\n      maybeEOL(stream, state);\n      return style;\n    },\n\n    indent: function(state, textAfter, context) {\n      if (state.tokenize != tokenBase && state.tokenize != null || state.typeAtEndOfLine && isTopScope(state.context))\n        return null;\n      var ctx = state.context, firstChar = textAfter && textAfter.charAt(0);\n      var closing = firstChar == ctx.type;\n      if (ctx.type == \"statement\" && firstChar == \"}\") ctx = ctx.prev;\n      if (parserConfig.dontIndentStatements)\n        while (ctx.type == \"statement\" && parserConfig.dontIndentStatements.test(ctx.info))\n          ctx = ctx.prev\n      if (hooks.indent) {\n        var hook = hooks.indent(state, ctx, textAfter, context.unit);\n        if (typeof hook == \"number\") return hook\n      }\n      var switchBlock = ctx.prev && ctx.prev.info == \"switch\";\n      if (parserConfig.allmanIndentation && /[{(]/.test(firstChar)) {\n        while (ctx.type != \"top\" && ctx.type != \"}\") ctx = ctx.prev\n        return ctx.indented\n      }\n      if (ctx.type == \"statement\")\n        return ctx.indented + (firstChar == \"{\" ? 0 : statementIndentUnit || context.unit);\n      if (ctx.align && (!dontAlignCalls || ctx.type != \")\"))\n        return ctx.column + (closing ? 0 : 1);\n      if (ctx.type == \")\" && !closing)\n        return ctx.indented + (statementIndentUnit || context.unit);\n\n      return ctx.indented + (closing ? 0 : context.unit) +\n        (!closing && switchBlock && !/^(?:case|default)\\b/.test(textAfter) ? context.unit : 0);\n    },\n\n    languageData: {\n      indentOnInput: indentSwitch ? /^\\s*(?:case .*?:|default:|\\{\\}?|\\})$/ : /^\\s*[{}]$/,\n      commentTokens: {line: \"//\", block: {open: \"/*\", close: \"*/\"}},\n      autocomplete: Object.keys(keywords).concat(Object.keys(types)).concat(Object.keys(builtin)).concat(Object.keys(atoms)),\n      ...parserConfig.languageData\n    }\n  };\n};\n\nfunction words(str) {\n  var obj = {}, words = str.split(\" \");\n  for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n  return obj;\n}\nfunction contains(words, word) {\n  if (typeof words === \"function\") {\n    return words(word);\n  } else {\n    return words.propertyIsEnumerable(word);\n  }\n}\nvar cKeywords = \"auto if break case register continue return default do sizeof \" +\n    \"static else struct switch extern typedef union for goto while enum const \" +\n    \"volatile inline restrict asm fortran\";\n\n// Keywords from https://en.cppreference.com/w/cpp/keyword includes C++20.\nvar cppKeywords = \"alignas alignof and and_eq audit axiom bitand bitor catch \" +\n    \"class compl concept constexpr const_cast decltype delete dynamic_cast \" +\n    \"explicit export final friend import module mutable namespace new noexcept \" +\n    \"not not_eq operator or or_eq override private protected public \" +\n    \"reinterpret_cast requires static_assert static_cast template this \" +\n    \"thread_local throw try typeid typename using virtual xor xor_eq\";\n\nvar objCKeywords = \"bycopy byref in inout oneway out self super atomic nonatomic retain copy \" +\n    \"readwrite readonly strong weak assign typeof nullable nonnull null_resettable _cmd \" +\n    \"@interface @implementation @end @protocol @encode @property @synthesize @dynamic @class \" +\n    \"@public @package @private @protected @required @optional @try @catch @finally @import \" +\n    \"@selector @encode @defs @synchronized @autoreleasepool @compatibility_alias @available\";\n\nvar objCBuiltins = \"FOUNDATION_EXPORT FOUNDATION_EXTERN NS_INLINE NS_FORMAT_FUNCTION \" +\n    \" NS_RETURNS_RETAINEDNS_ERROR_ENUM NS_RETURNS_NOT_RETAINED NS_RETURNS_INNER_POINTER \" +\n    \"NS_DESIGNATED_INITIALIZER NS_ENUM NS_OPTIONS NS_REQUIRES_NIL_TERMINATION \" +\n    \"NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_SWIFT_NAME NS_REFINED_FOR_SWIFT\"\n\n// Do not use this. Use the cTypes function below. This is global just to avoid\n// excessive calls when cTypes is being called multiple times during a parse.\nvar basicCTypes = words(\"int long char short double float unsigned signed \" +\n                        \"void bool\");\n\n// Do not use this. Use the objCTypes function below. This is global just to avoid\n// excessive calls when objCTypes is being called multiple times during a parse.\nvar basicObjCTypes = words(\"SEL instancetype id Class Protocol BOOL\");\n\n// Returns true if identifier is a \"C\" type.\n// C type is defined as those that are reserved by the compiler (basicTypes),\n// and those that end in _t (Reserved by POSIX for types)\n// http://www.gnu.org/software/libc/manual/html_node/Reserved-Names.html\nfunction cTypes(identifier) {\n  return contains(basicCTypes, identifier) || /.+_t$/.test(identifier);\n}\n\n// Returns true if identifier is a \"Objective C\" type.\nfunction objCTypes(identifier) {\n  return cTypes(identifier) || contains(basicObjCTypes, identifier);\n}\n\nvar cBlockKeywords = \"case do else for if switch while struct enum union\";\nvar cDefKeywords = \"struct enum union\";\n\nfunction cppHook(stream, state) {\n  if (!state.startOfLine) return false\n  for (var ch, next = null; ch = stream.peek();) {\n    if (ch == \"\\\\\" && stream.match(/^.$/)) {\n      next = cppHook\n      break\n    } else if (ch == \"/\" && stream.match(/^\\/[\\/\\*]/, false)) {\n      break\n    }\n    stream.next()\n  }\n  state.tokenize = next\n  return \"meta\"\n}\n\nfunction pointerHook(_stream, state) {\n  if (state.prevToken == \"type\") return \"type\";\n  return false;\n}\n\n// For C and C++ (and ObjC): identifiers starting with __\n// or _ followed by a capital letter are reserved for the compiler.\nfunction cIsReservedIdentifier(token) {\n  if (!token || token.length < 2) return false;\n  if (token[0] != '_') return false;\n  return (token[1] == '_') || (token[1] !== token[1].toLowerCase());\n}\n\nfunction cpp14Literal(stream) {\n  stream.eatWhile(/[\\w\\.']/);\n  return \"number\";\n}\n\nfunction cpp11StringHook(stream, state) {\n  stream.backUp(1);\n  // Raw strings.\n  if (stream.match(/^(?:R|u8R|uR|UR|LR)/)) {\n    var match = stream.match(/^\"([^\\s\\\\()]{0,16})\\(/);\n    if (!match) {\n      return false;\n    }\n    state.cpp11RawStringDelim = match[1];\n    state.tokenize = tokenRawString;\n    return tokenRawString(stream, state);\n  }\n  // Unicode strings/chars.\n  if (stream.match(/^(?:u8|u|U|L)/)) {\n    if (stream.match(/^[\"']/, /* eat */ false)) {\n      return \"string\";\n    }\n    return false;\n  }\n  // Ignore this hook.\n  stream.next();\n  return false;\n}\n\nfunction cppLooksLikeConstructor(word) {\n  var lastTwo = /(\\w+)::~?(\\w+)$/.exec(word);\n  return lastTwo && lastTwo[1] == lastTwo[2];\n}\n\n// C#-style strings where \"\" escapes a quote.\nfunction tokenAtString(stream, state) {\n  var next;\n  while ((next = stream.next()) != null) {\n    if (next == '\"' && !stream.eat('\"')) {\n      state.tokenize = null;\n      break;\n    }\n  }\n  return \"string\";\n}\n\n// C++11 raw string literal is <prefix>\"<delim>( anything )<delim>\", where\n// <delim> can be a string up to 16 characters long.\nfunction tokenRawString(stream, state) {\n  // Escape characters that have special regex meanings.\n  var delim = state.cpp11RawStringDelim.replace(/[^\\w\\s]/g, '\\\\$&');\n  var match = stream.match(new RegExp(\".*?\\\\)\" + delim + '\"'));\n  if (match)\n    state.tokenize = null;\n  else\n    stream.skipToEnd();\n  return \"string\";\n}\n\nexport const c = clike({\n  name: \"c\",\n  keywords: words(cKeywords),\n  types: cTypes,\n  blockKeywords: words(cBlockKeywords),\n  defKeywords: words(cDefKeywords),\n  typeFirstDefinitions: true,\n  atoms: words(\"NULL true false\"),\n  isReservedIdentifier: cIsReservedIdentifier,\n  hooks: {\n    \"#\": cppHook,\n    \"*\": pointerHook,\n  }\n})\n\nexport const cpp = clike({\n  name: \"cpp\",\n  keywords: words(cKeywords + \" \" + cppKeywords),\n  types: cTypes,\n  blockKeywords: words(cBlockKeywords + \" class try catch\"),\n  defKeywords: words(cDefKeywords + \" class namespace\"),\n  typeFirstDefinitions: true,\n  atoms: words(\"true false NULL nullptr\"),\n  dontIndentStatements: /^template$/,\n  isIdentifierChar: /[\\w\\$_~\\xa1-\\uffff]/,\n  isReservedIdentifier: cIsReservedIdentifier,\n  hooks: {\n    \"#\": cppHook,\n    \"*\": pointerHook,\n    \"u\": cpp11StringHook,\n    \"U\": cpp11StringHook,\n    \"L\": cpp11StringHook,\n    \"R\": cpp11StringHook,\n    \"0\": cpp14Literal,\n    \"1\": cpp14Literal,\n    \"2\": cpp14Literal,\n    \"3\": cpp14Literal,\n    \"4\": cpp14Literal,\n    \"5\": cpp14Literal,\n    \"6\": cpp14Literal,\n    \"7\": cpp14Literal,\n    \"8\": cpp14Literal,\n    \"9\": cpp14Literal,\n    token: function(stream, state, style) {\n      if (style == \"variable\" && stream.peek() == \"(\" &&\n          (state.prevToken == \";\" || state.prevToken == null ||\n           state.prevToken == \"}\") &&\n          cppLooksLikeConstructor(stream.current()))\n        return \"def\";\n    }\n  },\n  namespaceSeparator: \"::\"\n});\n\nexport const java = clike({\n  name: \"java\",\n  keywords: words(\"abstract assert break case catch class const continue default \" +\n                  \"do else enum extends final finally for goto if implements import \" +\n                  \"instanceof interface native new package private protected public \" +\n                  \"return static strictfp super switch synchronized this throw throws transient \" +\n                  \"try volatile while @interface\"),\n  types: words(\"var byte short int long float double boolean char void Boolean Byte Character Double Float \" +\n               \"Integer Long Number Object Short String StringBuffer StringBuilder Void\"),\n  blockKeywords: words(\"catch class do else finally for if switch try while\"),\n  defKeywords: words(\"class interface enum @interface\"),\n  typeFirstDefinitions: true,\n  atoms: words(\"true false null\"),\n  number: /^(?:0x[a-f\\d_]+|0b[01_]+|(?:[\\d_]+\\.?\\d*|\\.\\d+)(?:e[-+]?[\\d_]+)?)(u|ll?|l|f)?/i,\n  hooks: {\n    \"@\": function(stream) {\n      // Don't match the @interface keyword.\n      if (stream.match('interface', false)) return false;\n\n      stream.eatWhile(/[\\w\\$_]/);\n      return \"meta\";\n    },\n    '\"': function(stream, state) {\n      if (!stream.match(/\"\"$/)) return false;\n      state.tokenize = tokenTripleString;\n      return state.tokenize(stream, state);\n    }\n  }\n})\n\nexport const csharp = clike({\n  name: \"csharp\",\n  keywords: words(\"abstract as async await base break case catch checked class const continue\" +\n                  \" default delegate do else enum event explicit extern finally fixed for\" +\n                  \" foreach goto if implicit in init interface internal is lock namespace new\" +\n                  \" operator out override params private protected public readonly record ref required return sealed\" +\n                  \" sizeof stackalloc static struct switch this throw try typeof unchecked\" +\n                  \" unsafe using virtual void volatile while add alias ascending descending dynamic from get\" +\n                  \" global group into join let orderby partial remove select set value var yield\"),\n  types: words(\"Action Boolean Byte Char DateTime DateTimeOffset Decimal Double Func\" +\n               \" Guid Int16 Int32 Int64 Object SByte Single String Task TimeSpan UInt16 UInt32\" +\n               \" UInt64 bool byte char decimal double short int long object\"  +\n               \" sbyte float string ushort uint ulong\"),\n  blockKeywords: words(\"catch class do else finally for foreach if struct switch try while\"),\n  defKeywords: words(\"class interface namespace record struct var\"),\n  typeFirstDefinitions: true,\n  atoms: words(\"true false null\"),\n  hooks: {\n    \"@\": function(stream, state) {\n      if (stream.eat('\"')) {\n        state.tokenize = tokenAtString;\n        return tokenAtString(stream, state);\n      }\n      stream.eatWhile(/[\\w\\$_]/);\n      return \"meta\";\n    }\n  }\n});\n\nfunction tokenTripleString(stream, state) {\n  var escaped = false;\n  while (!stream.eol()) {\n    if (!escaped && stream.match('\"\"\"')) {\n      state.tokenize = null;\n      break;\n    }\n    escaped = stream.next() == \"\\\\\" && !escaped;\n  }\n  return \"string\";\n}\n\nfunction tokenNestedComment(depth) {\n  return function (stream, state) {\n    var ch\n    while (ch = stream.next()) {\n      if (ch == \"*\" && stream.eat(\"/\")) {\n        if (depth == 1) {\n          state.tokenize = null\n          break\n        } else {\n          state.tokenize = tokenNestedComment(depth - 1)\n          return state.tokenize(stream, state)\n        }\n      } else if (ch == \"/\" && stream.eat(\"*\")) {\n        state.tokenize = tokenNestedComment(depth + 1)\n        return state.tokenize(stream, state)\n      }\n    }\n    return \"comment\"\n  }\n}\n\nexport const scala = clike({\n  name: \"scala\",\n  keywords: words(\n    /* scala */\n    \"abstract case catch class def do else extends final finally for forSome if \" +\n      \"implicit import lazy match new null object override package private protected return \" +\n      \"sealed super this throw trait try type val var while with yield _ \" +\n\n    /* package scala */\n    \"assert assume require print println printf readLine readBoolean readByte readShort \" +\n      \"readChar readInt readLong readFloat readDouble\"\n  ),\n  types: words(\n    \"AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either \" +\n      \"Enumeration Equiv Error Exception Fractional Function IndexedSeq Int Integral Iterable \" +\n      \"Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering \" +\n      \"Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder \" +\n      \"StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector \" +\n\n    /* package java.lang */\n    \"Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable \" +\n      \"Compiler Double Exception Float Integer Long Math Number Object Package Pair Process \" +\n      \"Runtime Runnable SecurityManager Short StackTraceElement StrictMath String \" +\n      \"StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void\"\n  ),\n  multiLineStrings: true,\n  blockKeywords: words(\"catch class enum do else finally for forSome if match switch try while\"),\n  defKeywords: words(\"class enum def object package trait type val var\"),\n  atoms: words(\"true false null\"),\n  indentStatements: false,\n  indentSwitch: false,\n  isOperatorChar: /[+\\-*&%=<>!?|\\/#:@]/,\n  hooks: {\n    \"@\": function(stream) {\n      stream.eatWhile(/[\\w\\$_]/);\n      return \"meta\";\n    },\n    '\"': function(stream, state) {\n      if (!stream.match('\"\"')) return false;\n      state.tokenize = tokenTripleString;\n      return state.tokenize(stream, state);\n    },\n    \"'\": function(stream) {\n      if (stream.match(/^(\\\\[^'\\s]+|[^\\\\'])'/)) return \"character\"\n      stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n      return \"atom\";\n    },\n    \"=\": function(stream, state) {\n      var cx = state.context\n      if (cx.type == \"}\" && cx.align && stream.eat(\">\")) {\n        state.context = new Context(cx.indented, cx.column, cx.type, cx.info, null, cx.prev)\n        return \"operator\"\n      } else {\n        return false\n      }\n    },\n\n    \"/\": function(stream, state) {\n      if (!stream.eat(\"*\")) return false\n      state.tokenize = tokenNestedComment(1)\n      return state.tokenize(stream, state)\n    }\n  },\n  languageData: {\n    closeBrackets: {brackets: [\"(\", \"[\", \"{\", \"'\", '\"', '\"\"\"']}\n  }\n});\n\nfunction tokenKotlinString(tripleString){\n  return function (stream, state) {\n    var escaped = false, next, end = false;\n    while (!stream.eol()) {\n      if (!tripleString && !escaped && stream.match('\"') ) {end = true; break;}\n      if (tripleString && stream.match('\"\"\"')) {end = true; break;}\n      next = stream.next();\n      if(!escaped && next == \"$\" && stream.match('{'))\n        stream.skipTo(\"}\");\n      escaped = !escaped && next == \"\\\\\" && !tripleString;\n    }\n    if (end || !tripleString)\n      state.tokenize = null;\n    return \"string\";\n  }\n}\n\nexport const kotlin = clike({\n  name: \"kotlin\",\n  keywords: words(\n    /*keywords*/\n    \"package as typealias class interface this super val operator \" +\n      \"var fun for is in This throw return annotation \" +\n      \"break continue object if else while do try when !in !is as? \" +\n\n    /*soft keywords*/\n    \"file import where by get set abstract enum open inner override private public internal \" +\n      \"protected catch finally out final vararg reified dynamic companion constructor init \" +\n      \"sealed field property receiver param sparam lateinit data inline noinline tailrec \" +\n      \"external annotation crossinline const operator infix suspend actual expect setparam\"\n  ),\n  types: words(\n    /* package java.lang */\n    \"Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable \" +\n      \"Compiler Double Exception Float Integer Long Math Number Object Package Pair Process \" +\n      \"Runtime Runnable SecurityManager Short StackTraceElement StrictMath String \" +\n      \"StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray \" +\n      \"ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy \" +\n      \"LazyThreadSafetyMode LongArray Nothing ShortArray Unit\"\n  ),\n  intendSwitch: false,\n  indentStatements: false,\n  multiLineStrings: true,\n  number: /^(?:0x[a-f\\d_]+|0b[01_]+|(?:[\\d_]+(\\.\\d+)?|\\.\\d+)(?:e[-+]?[\\d_]+)?)(ul?|l|f)?/i,\n  blockKeywords: words(\"catch class do else finally for if where try while enum\"),\n  defKeywords: words(\"class val var object interface fun\"),\n  atoms: words(\"true false null this\"),\n  hooks: {\n    \"@\": function(stream) {\n      stream.eatWhile(/[\\w\\$_]/);\n      return \"meta\";\n    },\n    '*': function(_stream, state) {\n      return state.prevToken == '.' ? 'variable' : 'operator';\n    },\n    '\"': function(stream, state) {\n      state.tokenize = tokenKotlinString(stream.match('\"\"'));\n      return state.tokenize(stream, state);\n    },\n    \"/\": function(stream, state) {\n      if (!stream.eat(\"*\")) return false;\n      state.tokenize = tokenNestedComment(1);\n      return state.tokenize(stream, state)\n    },\n    indent: function(state, ctx, textAfter, indentUnit) {\n      var firstChar = textAfter && textAfter.charAt(0);\n      if ((state.prevToken == \"}\" || state.prevToken == \")\") && textAfter == \"\")\n        return state.indented;\n      if ((state.prevToken == \"operator\" && textAfter != \"}\" && state.context.type != \"}\") ||\n          state.prevToken == \"variable\" && firstChar == \".\" ||\n          (state.prevToken == \"}\" || state.prevToken == \")\") && firstChar == \".\")\n        return indentUnit * 2 + ctx.indented;\n      if (ctx.align && ctx.type == \"}\")\n        return ctx.indented + (state.context.type == (textAfter || \"\").charAt(0) ? 0 : indentUnit);\n    }\n  },\n  languageData: {\n    closeBrackets: {brackets: [\"(\", \"[\", \"{\", \"'\", '\"', '\"\"\"']}\n  }\n});\n\nexport const shader = clike({\n  name: \"shader\",\n  keywords: words(\"sampler1D sampler2D sampler3D samplerCube \" +\n                  \"sampler1DShadow sampler2DShadow \" +\n                  \"const attribute uniform varying \" +\n                  \"break continue discard return \" +\n                  \"for while do if else struct \" +\n                  \"in out inout\"),\n  types: words(\"float int bool void \" +\n               \"vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 \" +\n               \"mat2 mat3 mat4\"),\n  blockKeywords: words(\"for while do if else struct\"),\n  builtin: words(\"radians degrees sin cos tan asin acos atan \" +\n                 \"pow exp log exp2 sqrt inversesqrt \" +\n                 \"abs sign floor ceil fract mod min max clamp mix step smoothstep \" +\n                 \"length distance dot cross normalize ftransform faceforward \" +\n                 \"reflect refract matrixCompMult \" +\n                 \"lessThan lessThanEqual greaterThan greaterThanEqual \" +\n                 \"equal notEqual any all not \" +\n                 \"texture1D texture1DProj texture1DLod texture1DProjLod \" +\n                 \"texture2D texture2DProj texture2DLod texture2DProjLod \" +\n                 \"texture3D texture3DProj texture3DLod texture3DProjLod \" +\n                 \"textureCube textureCubeLod \" +\n                 \"shadow1D shadow2D shadow1DProj shadow2DProj \" +\n                 \"shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod \" +\n                 \"dFdx dFdy fwidth \" +\n                 \"noise1 noise2 noise3 noise4\"),\n  atoms: words(\"true false \" +\n               \"gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex \" +\n               \"gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 \" +\n               \"gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 \" +\n               \"gl_FogCoord gl_PointCoord \" +\n               \"gl_Position gl_PointSize gl_ClipVertex \" +\n               \"gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor \" +\n               \"gl_TexCoord gl_FogFragCoord \" +\n               \"gl_FragCoord gl_FrontFacing \" +\n               \"gl_FragData gl_FragDepth \" +\n               \"gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix \" +\n               \"gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse \" +\n               \"gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse \" +\n               \"gl_TextureMatrixTranspose gl_ModelViewMatrixInverseTranspose \" +\n               \"gl_ProjectionMatrixInverseTranspose \" +\n               \"gl_ModelViewProjectionMatrixInverseTranspose \" +\n               \"gl_TextureMatrixInverseTranspose \" +\n               \"gl_NormalScale gl_DepthRange gl_ClipPlane \" +\n               \"gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel \" +\n               \"gl_FrontLightModelProduct gl_BackLightModelProduct \" +\n               \"gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ \" +\n               \"gl_FogParameters \" +\n               \"gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords \" +\n               \"gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats \" +\n               \"gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits \" +\n               \"gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits \" +\n               \"gl_MaxDrawBuffers\"),\n  indentSwitch: false,\n  hooks: {\"#\": cppHook}\n})\n\nexport const nesC = clike({\n  name: \"nesc\",\n  keywords: words(cKeywords + \" as atomic async call command component components configuration event generic \" +\n                  \"implementation includes interface module new norace nx_struct nx_union post provides \" +\n                  \"signal task uses abstract extends\"),\n  types: cTypes,\n  blockKeywords: words(cBlockKeywords),\n  atoms: words(\"null true false\"),\n  hooks: {\"#\": cppHook}\n})\n\nexport const objectiveC = clike({\n  name: \"objectivec\",\n  keywords: words(cKeywords + \" \" + objCKeywords),\n  types: objCTypes,\n  builtin: words(objCBuiltins),\n  blockKeywords: words(cBlockKeywords + \" @synthesize @try @catch @finally @autoreleasepool @synchronized\"),\n  defKeywords: words(cDefKeywords + \" @interface @implementation @protocol @class\"),\n  dontIndentStatements: /^@.*$/,\n  typeFirstDefinitions: true,\n  atoms: words(\"YES NO NULL Nil nil true false nullptr\"),\n  isReservedIdentifier: cIsReservedIdentifier,\n  hooks: {\n    \"#\": cppHook,\n    \"*\": pointerHook,\n  }\n})\n\nexport const objectiveCpp = clike({\n  name: \"objectivecpp\",\n  keywords: words(cKeywords + \" \" + objCKeywords + \" \" + cppKeywords),\n  types: objCTypes,\n  builtin: words(objCBuiltins),\n  blockKeywords: words(cBlockKeywords + \" @synthesize @try @catch @finally @autoreleasepool @synchronized class try catch\"),\n  defKeywords: words(cDefKeywords + \" @interface @implementation @protocol @class class namespace\"),\n  dontIndentStatements: /^@.*$|^template$/,\n  typeFirstDefinitions: true,\n  atoms: words(\"YES NO NULL Nil nil true false nullptr\"),\n  isReservedIdentifier: cIsReservedIdentifier,\n  hooks: {\n    \"#\": cppHook,\n    \"*\": pointerHook,\n    \"u\": cpp11StringHook,\n    \"U\": cpp11StringHook,\n    \"L\": cpp11StringHook,\n    \"R\": cpp11StringHook,\n    \"0\": cpp14Literal,\n    \"1\": cpp14Literal,\n    \"2\": cpp14Literal,\n    \"3\": cpp14Literal,\n    \"4\": cpp14Literal,\n    \"5\": cpp14Literal,\n    \"6\": cpp14Literal,\n    \"7\": cpp14Literal,\n    \"8\": cpp14Literal,\n    \"9\": cpp14Literal,\n    token: function(stream, state, style) {\n      if (style == \"variable\" && stream.peek() == \"(\" &&\n          (state.prevToken == \";\" || state.prevToken == null ||\n           state.prevToken == \"}\") &&\n          cppLooksLikeConstructor(stream.current()))\n        return \"def\";\n    }\n  },\n  namespaceSeparator: \"::\"\n})\n\nexport const squirrel = clike({\n  name: \"squirrel\",\n  keywords: words(\"base break clone continue const default delete enum extends function in class\" +\n                  \" foreach local resume return this throw typeof yield constructor instanceof static\"),\n  types: cTypes,\n  blockKeywords: words(\"case catch class else for foreach if switch try while\"),\n  defKeywords: words(\"function local class\"),\n  typeFirstDefinitions: true,\n  atoms: words(\"true false null\"),\n  hooks: {\"#\": cppHook}\n})\n\n// Ceylon Strings need to deal with interpolation\nvar stringTokenizer = null;\nfunction tokenCeylonString(type) {\n  return function(stream, state) {\n    var escaped = false, next, end = false;\n    while (!stream.eol()) {\n      if (!escaped && stream.match('\"') &&\n          (type == \"single\" || stream.match('\"\"'))) {\n        end = true;\n        break;\n      }\n      if (!escaped && stream.match('``')) {\n        stringTokenizer = tokenCeylonString(type);\n        end = true;\n        break;\n      }\n      next = stream.next();\n      escaped = type == \"single\" && !escaped && next == \"\\\\\";\n    }\n    if (end)\n      state.tokenize = null;\n    return \"string\";\n  }\n}\n\nexport const ceylon = clike({\n  name: \"ceylon\",\n  keywords: words(\"abstracts alias assembly assert assign break case catch class continue dynamic else\" +\n                  \" exists extends finally for function given if import in interface is let module new\" +\n                  \" nonempty object of out outer package return satisfies super switch then this throw\" +\n                  \" try value void while\"),\n  types: function(word) {\n    // In Ceylon all identifiers that start with an uppercase are types\n    var first = word.charAt(0);\n    return (first === first.toUpperCase() && first !== first.toLowerCase());\n  },\n  blockKeywords: words(\"case catch class dynamic else finally for function if interface module new object switch try while\"),\n  defKeywords: words(\"class dynamic function interface module object package value\"),\n  builtin: words(\"abstract actual aliased annotation by default deprecated doc final formal late license\" +\n                 \" native optional sealed see serializable shared suppressWarnings tagged throws variable\"),\n  isPunctuationChar: /[\\[\\]{}\\(\\),;\\:\\.`]/,\n  isOperatorChar: /[+\\-*&%=<>!?|^~:\\/]/,\n  numberStart: /[\\d#$]/,\n  number: /^(?:#[\\da-fA-F_]+|\\$[01_]+|[\\d_]+[kMGTPmunpf]?|[\\d_]+\\.[\\d_]+(?:[eE][-+]?\\d+|[kMGTPmunpf]|)|)/i,\n  multiLineStrings: true,\n  typeFirstDefinitions: true,\n  atoms: words(\"true false null larger smaller equal empty finished\"),\n  indentSwitch: false,\n  styleDefs: false,\n  hooks: {\n    \"@\": function(stream) {\n      stream.eatWhile(/[\\w\\$_]/);\n      return \"meta\";\n    },\n    '\"': function(stream, state) {\n      state.tokenize = tokenCeylonString(stream.match('\"\"') ? \"triple\" : \"single\");\n      return state.tokenize(stream, state);\n    },\n    '`': function(stream, state) {\n      if (!stringTokenizer || !stream.match('`')) return false;\n      state.tokenize = stringTokenizer;\n      stringTokenizer = null;\n      return state.tokenize(stream, state);\n    },\n    \"'\": function(stream) {\n      if (stream.match(/^(\\\\[^'\\s]+|[^\\\\'])'/)) return \"string.special\"\n      stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n      return \"atom\";\n    },\n    token: function(_stream, state, style) {\n      if ((style == \"variable\" || style == \"type\") &&\n          state.prevToken == \".\") {\n        return \"variableName.special\";\n      }\n    }\n  },\n  languageData: {\n    closeBrackets: {brackets: [\"(\", \"[\", \"{\", \"'\", '\"', '\"\"\"']}\n  }\n})\n\nfunction pushInterpolationStack(state) {\n  (state.interpolationStack || (state.interpolationStack = [])).push(state.tokenize);\n}\n\nfunction popInterpolationStack(state) {\n  return (state.interpolationStack || (state.interpolationStack = [])).pop();\n}\n\nfunction sizeInterpolationStack(state) {\n  return state.interpolationStack ? state.interpolationStack.length : 0;\n}\n\nfunction tokenDartString(quote, stream, state, raw) {\n  var tripleQuoted = false;\n  if (stream.eat(quote)) {\n    if (stream.eat(quote)) tripleQuoted = true;\n    else return \"string\"; //empty string\n  }\n  function tokenStringHelper(stream, state) {\n    var escaped = false;\n    while (!stream.eol()) {\n      if (!raw && !escaped && stream.peek() == \"$\") {\n        pushInterpolationStack(state);\n        state.tokenize = tokenInterpolation;\n        return \"string\";\n      }\n      var next = stream.next();\n      if (next == quote && !escaped && (!tripleQuoted || stream.match(quote + quote))) {\n        state.tokenize = null;\n        break;\n      }\n      escaped = !raw && !escaped && next == \"\\\\\";\n    }\n    return \"string\";\n  }\n  state.tokenize = tokenStringHelper;\n  return tokenStringHelper(stream, state);\n}\n\nfunction tokenInterpolation(stream, state) {\n  stream.eat(\"$\");\n  if (stream.eat(\"{\")) {\n    // let clike handle the content of ${...},\n    // we take over again when \"}\" appears (see hooks).\n    state.tokenize = null;\n  } else {\n    state.tokenize = tokenInterpolationIdentifier;\n  }\n  return null;\n}\n\nfunction tokenInterpolationIdentifier(stream, state) {\n  stream.eatWhile(/[\\w_]/);\n  state.tokenize = popInterpolationStack(state);\n  return \"variable\";\n}\n\nexport const dart = clike({\n  name: \"dart\",\n  keywords: words(\"this super static final const abstract class extends external factory \" +\n                  \"implements mixin get native set typedef with enum throw rethrow assert break case \" +\n                  \"continue default in return new deferred async await covariant try catch finally \" +\n                  \"do else for if switch while import library export part of show hide is as extension \" +\n                  \"on yield late required sealed base interface when inline\"),\n  blockKeywords: words(\"try catch finally do else for if switch while\"),\n  builtin: words(\"void bool num int double dynamic var String Null Never\"),\n  atoms: words(\"true false null\"),\n  // clike numbers without the suffixes, and with '_' separators.\n  number: /^(?:0x[a-f\\d_]+|(?:[\\d_]+\\.?[\\d_]*|\\.[\\d_]+)(?:e[-+]?[\\d_]+)?)/i,\n  hooks: {\n    \"@\": function(stream) {\n      stream.eatWhile(/[\\w\\$_\\.]/);\n      return \"meta\";\n    },\n\n    // custom string handling to deal with triple-quoted strings and string interpolation\n    \"'\": function(stream, state) {\n      return tokenDartString(\"'\", stream, state, false);\n    },\n    \"\\\"\": function(stream, state) {\n      return tokenDartString(\"\\\"\", stream, state, false);\n    },\n    \"r\": function(stream, state) {\n      var peek = stream.peek();\n      if (peek == \"'\" || peek == \"\\\"\") {\n        return tokenDartString(stream.next(), stream, state, true);\n      }\n      return false;\n    },\n\n    \"}\": function(_stream, state) {\n      // \"}\" is end of interpolation, if interpolation stack is non-empty\n      if (sizeInterpolationStack(state) > 0) {\n        state.tokenize = popInterpolationStack(state);\n        return null;\n      }\n      return false;\n    },\n\n    \"/\": function(stream, state) {\n      if (!stream.eat(\"*\")) return false\n      state.tokenize = tokenNestedComment(1)\n      return state.tokenize(stream, state)\n    },\n    token: function(stream, _, style) {\n      if (style == \"variable\") {\n        // Assume uppercase symbols are classes\n        var isUpper = RegExp('^[_$]*[A-Z][a-zA-Z0-9_$]*$','g');\n        if (isUpper.test(stream.current())) {\n          return 'type';\n        }\n      }\n    }\n  }\n})\n","import { LRParser } from '@lezer/lr';\nimport { NodeProp } from '@lezer/common';\n\n// TODO: naïvely restored to previoius NodeProp.flag() behaviour. Can we do any better?\nlet flag = () => new NodeProp({deserialize: str => true});\n\nconst coll = flag();\nconst prefixColl = flag();\nconst prefixEdge = flag();\nconst sameEdge = flag();\nconst prefixContainer = flag();\n\nvar props = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  coll: coll,\n  prefixColl: prefixColl,\n  prefixEdge: prefixEdge,\n  sameEdge: sameEdge,\n  prefixContainer: prefixContainer\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_Symbol = {__proto__:null,true:136, false:136, nil:138, def:147, defn:147, \"defn-\":147, defmacro:147, definline:147, defonce:147, deftest:147, defcard:147, ns:155};\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"-zQ]QPOOP!pOPOOOOQO'#C`'#C`OOQO'#Cb'#CbO]QPO'#CcO]QPO'#CeO]QPO'#CgO]QPO'#CiO]QPO'#CkO]OPO'#CtO]OPO'#CvO!uOQO'#C|OOQO'#Dm'#DmQ]QPOOO$hQPO'#CqO$oQPO'#DUO$vQPO'#DXO$}OSO'#DZO%cOPO'#D]O%hOPO'#D`O%mOPO'#DbO%uOWO'#DdO]QPO'#DgO]QPO'#DhO%zQPO'#DjOOQO'#Dq'#DqP&SQPO'#C^POOO)C?e)C?eOOQO,58},58}OOQO,59P,59POOQO,59R,59ROOQO,59T,59TOOQO,59V,59VOOQO,59`,59`OOQO,59b,59bOOQO,59h,59hO'gOPO,59hOOQO-E7k-E7kOOQO'#Cr'#CrO!}QPO'#CsOOQO'#Dv'#DvO'lQPO'#D|O'sQPO'#DuOOQO'#DO'#DOOOQO'#Dz'#DzO'sQPO'#DyOOQO'#DQ'#DQOOQO'#D}'#D}O'lQPO'#D|OOQO'#Dt'#DtO(OQPO,59]O(TQPO,59pOOQO,59p,59pO([QPO,59sOOQO,59s,59sOOQO,59u,59uOOOO,59x,59xOOQO,59y,59yOOQO,5:Q,5:QOOQO,5:T,5:TOOQO,5:V,5:VOOQO,59w,59wOOQO,59z,59zOOQO,59|,59|OOQO,5:O,5:OOOQO,5:R,5:ROOQO,5:S,5:SOOQO,5:U,5:UPOOO,58x,58xOOQO1G/S1G/SOOQO,59_,59_OOQO,59k,59kOOQO,59m,59mOOQO'#Cx'#CxO'sQPO'#CyOOQO'#Dx'#DxO(cQPO,5:aO(jQPO,5:eO(qQPO,5:hOOQO1G.w1G.wOOQO1G/[1G/[OOQO1G/_1G/_OOQO,59e,59eO(xQPO'#CzO*`QPO1G/{O]QPO1G/{OOQO'#Cz'#CzO*gQPO1G0PO*gQPO1G0PO*nQPO7+%gO*uQPO7+%kP&SQPO'#CcP&SQPO'#CeP&SQPO'#CgP&SQPO'#CiP&SQPO'#CkP*|OPO'#DbP&SQPO'#DgP&SQPO'#Dh\",\n  stateData: \"+[~O!dOSPOSRPQ~OTiOWSOYTO[UO^VO`WOaiObiOd^OiXOkYOoZOw_Oz`O|iO!OaO!TcO!VdO!XeO!fQO!gRO~ORjO~OosOqtO~OT!OOWSOYTO[UO^VO`WOaiObiOd^OiXOkYOoZOw_Oz`O|iO!OaO!TcO!VdO!XeO!fQO!gRO!kvO!o{O~Oc!pP~P!}Ov!UO~P]Oy!WO~P]Od^OoZOz`O!r!YO!t!]O!u!^O~Oz`O~OT!`O~OWSOd^O~O!s!bO~Ow_Oz`O~OTiOW!}OY#OO[#PO^#QO`#ROaiObiOd^OiXOkYOoZOw_Oz`O|iO!OaO!TcO!V#SO!XeO!fQO!gRO~Oo!gO~Oc!pX~P]OT!kOiXOkYO~Oc!qO~Ov!rO~P]Oy!sO~P]Oc!ia~P]Oc!ma~P]Oc!pa~P]OTnXWnXYnX[nX^nX`nXanXbnXc!eXdnXinXknXonXwnXznX|nX!OnX!TnX!VnX!XnX!fnX!gnX~Oc!ii~P]Oc!mi~P]Oc!iq~P]Oc!mq~P]OW!}Od^O~Oa!u!tT!t~\",\n  goto: \"/]!rPP!sP!vP!v#nP!vP!vP!vP!vPPPPP$j%i%i%mP%mP&n&n&sP&yP'x'x'|'|PP(QPP({P!vP!v)|!v!vP!vP!vP!v!v!v*t!v+nP,fPPP-^PP.j.m.pP.v.m/PP.m/VRkP!kiOSTUVWXY]^_`fgjwy!Q!T!V!n!o!p!v!w!y!z!{!|!}#O#P#Q#R#T#U!jiOSTUVWXY]^_`fgjwy!Q!T!V!n!o!p!v!w!y!z!{!|!}#O#P#Q#R#T#UT!ad#S!jiOSTUVWXY]^_`fgjwy!Q!T!V!n!o!p!v!w!y!z!{!|!}#O#P#Q#R#T#UQ![aT!ad#STx^w!UfOSTUVWXY]_`fgy!Q!T!V!n!o!p!v!w!y!z!{!|Sw^wU!lz}!la#Tj!}#O#P#Q#R#T#UV!mz}!lQ!w!nR!z!o!fiOSTUVWXY]^_`fgjwy!Q!T!V!p!v!w!y!z!{!|!}#O#P#Q#R#T#UQ!ZaQ!u!nR!x!oT|^wT!P^w!jiOSTUVWXY]^_`fgjwy!Q!T!V!n!o!p!v!w!y!z!{!|!}#O#P#Q#R#T#UR!eh!jiOSTUVWXY]^_`fgjwy!Q!T!V!n!o!p!v!w!y!z!{!|!}#O#P#Q#R#T#UQ!XaQ!_bR!eh!kbOSTUVWXY]^_`fgjwy!Q!T!V!n!o!p!v!w!y!z!{!|!}#O#P#Q#R#T#U!YgOSTUVWXY]^_`fgwy!Q!T!V!n!o!p!v!w!y!z!{!|a#Uj!}#O#P#Q#R#T#U!khOSTUVWXY]^_`fgjwy!Q!T!V!n!o!p!v!w!y!z!{!|!}#O#P#Q#R#T#UQ]Obu]y!T!V!p!v!y!{!|Qy^Q!T_Q!V`Q!p!QQ!v!nQ!y!oQ!{!wR!|!zt[O]^_`y!Q!T!V!n!o!p!v!w!y!z!{!|SlS!}SmT#OSnU#PSoV#QSpW#RQqXQrYU!cfw#TS!dg#UR!fjR!S^R!R^Qz^R!hwQ!nzQ!o}R!t!lQ}^R!iwQ!Q^R!jw\",\n  nodeNames: \"⚠ LineComment Discard #_ Boolean Symbol Nil Deref @ Quote ' SyntaxQuote ` Unquote ~ UnquoteSplice ~@ Number Keyword ) ( List DefLike Meta Metadata ^ ReaderMetadata #^ VarName Meta DocString \\\" String StringContent NS Meta Operator Meta ] [ Vector } { Map Character Set # NamespacedMap KeywordPrefix RegExp Var #' ReaderConditional #? SymbolicValue ## AnonymousFunction Meta TaggedLiteral ReaderTag ConstructorCall ConstructorPrefix Program\",\n  maxTerm: 83,\n  nodeProps: [\n    [prefixEdge, -14,3,8,10,12,14,16,25,27,46,48,51,53,55,61,\"\"],\n    [prefixColl, -13,7,9,11,13,15,24,26,45,47,49,50,52,56,\"\"],\n    [\"openedBy\", 19,\"(\",31,\"\\\"\",38,\"[\",41,\"{\"],\n    [\"closedBy\", 20,\")\",31,\"\\\"\",39,\"]\",42,\"}\"],\n    [coll, -3,21,40,43,\"\"],\n    [prefixContainer, -7,23,29,35,37,57,58,60,\"\"],\n    [sameEdge, 31,\"\"]\n  ],\n  skippedNodes: [0,1,2,3],\n  repeatNodeCount: 1,\n  tokenData: \"#6x~R![OX$wX^%n^p$wpq%nqr'grs,Tst,Ytu/Yuv'gvw'gwx6Vxy6jyz6}z{'g{|7b|}%n}!O7b!O!P9t!P!Q)v!Q!R!8[!R![!>t![!]!Cp!]!^!J]!^!_'g!_!`'g!`!a'g!a!b'g!b!c!Kr!c!}/Y!}#O!LV#O#P!Lj#P#Q#3w#Q#R#4[#R#S/Y#S#T#4o#T#o/Y#o#p#5S#p#q$w#q#r#5g#r#s#5z#s#y$w#y#z%n#z$f$w$f$g%n$g##l/Y##l#BY$w#BY#BZ%n#BZ$IS$w$IS$I_%n$I_$I|$w$I|$JO%n$JO$JT$w$JT$JU%n$JU$KV$w$KV$KW%n$KW&FU$w&FU&FV%n&FV~$wQ$|SqQOr$ws#O$w#O#P%Y#P~$wQ%_TqQOr$wrs$ws#O$w#O#P%Y#P~$wR%ujqQ!dPOX$wX^%n^p$wpq%nqr$ws|$w|}%n}#O$w#O#P%Y#P#y$w#y#z%n#z$f$w$f$g%n$g#BY$w#BY#BZ%n#BZ$IS$w$IS$I_%n$I_$I|$w$I|$JO%n$JO$JT$w$JT$JU%n$JU$KV$w$KV$KW%n$KW&FU$w&FU&FV%n&FV~$w_'rpqQ!sW!tSTPOq$wqr'gst)vtu'guv'gvw'gwx)vxz$wz{'g{|'g|}$w}!O'g!O!P)v!P!Q'g!Q!['g![!])v!]!^$w!^!_'g!_!`'g!`!a'g!a!b'g!b!c$w!c!}'g!}#O$w#O#P%Y#P#R$w#R#S'g#S#T$w#T#o'g#o$g$w$g##l'g##l~$wZ*PpqQ!sWTPOq$wqr)vst)vtu)vuv)vvw)vwx)vxz$wz{)v{|)v|}$w}!O)v!O!P)v!P!Q)v!Q![)v![!])v!]!^$w!^!_)v!_!`)v!`!a)v!a!b)v!b!c$w!c!})v!}#O$w#O#P%Y#P#R$w#R#S)v#S#T$w#T#o)v#o$g$w$g##l)v##l~$w~,YOo~R,a[!OPqQOr$wst-Vtw$wwx-jx!a$w!a!b-}!b#O$w#O#P%Y#P#Q$w#Q#R.b#R#S.u#S~$wR-^S!XPqQOr$ws#O$w#O#P%Y#P~$wR-qS!TPqQOr$ws#O$w#O#P%Y#P~$wR.US!VPqQOr$ws#O$w#O#P%Y#P~$wR.iSkPqQOr$ws#O$w#O#P%Y#P~$wR.|SRPqQOr$ws#O$w#O#P%Y#P~$w_/epqQ!sW!tSTPOq$wqr'gst)vtu/Yuv'gvw'gwx)vxz$wz{'g{|'g|}$w}!O'g!O!P1i!P!Q'g!Q![/Y![!])v!]!^$w!^!_'g!_!`'g!`!a'g!a!b'g!b!c$w!c!}/Y!}#O$w#O#P%Y#P#R$w#R#S/Y#S#T$w#T#o/Y#o$g$w$g##l/Y##l~$w_1rpqQ!sWTPOq$wqr)vst)vtu3vuv)vvw)vwx)vxz$wz{)v{|)v|}$w}!O)v!O!P)v!P!Q)v!Q![)v![!])v!]!^$w!^!_)v!_!`)v!`!a)v!a!b)v!b!c$w!c!}3v!}#O$w#O#P%Y#P#R$w#R#S3v#S#T$w#T#o3v#o$g$w$g##l3v##l~$w_4RpqQ!sW!uSTPOq$wqr)vst)vtu3vuv)vvw)vwx)vxz$wz{)v{|)v|}$w}!O)v!O!P1i!P!Q)v!Q![3v![!])v!]!^$w!^!_)v!_!`)v!`!a)v!a!b)v!b!c$w!c!}3v!}#O$w#O#P%Y#P#R$w#R#S3v#S#T$w#T#o3v#o$g$w$g##l3v##l~$wR6^SYPqQOr$ws#O$w#O#P%Y#P~$wV6qSdTqQOr$ws#O$w#O#P%Y#P~$wR7UScPqQOr$ws#O$w#O#P%Y#P~$w_7mqqQ!sW!tSTPOq$wqr'gst)vtu'guv'gvw'gwx)vxz$wz{'g{|'g|}$w}!O'g!O!P9t!P!Q'g!Q!RHO!R![!&|![!])v!]!^$w!^!_'g!_!`'g!`!a'g!a!b'g!b!c$w!c!}'g!}#O$w#O#P%Y#P#R$w#R#S'g#S#T$w#T#o'g#o$g$w$g##l'g##l~$wZ9}pqQ!sWTPOq$wqr)vst)vtu)vuv)vvw)vwx)vxz$wz{)v{|)v|}$w}!O)v!O!P)v!P!Q)v!Q![<R![!])v!]!^$w!^!_)v!_!`)v!`!a)v!a!b)v!b!c$w!c!})v!}#O$w#O#P%Y#P#R$w#R#S)v#S#T$w#T#o)v#o$g$w$g##l)v##l~$wZ<^tqQ!sWaPTPOq$wqr)vst)vtu)vuv)vvw)vwx)vxz$wz{)v{|)v|}$w}!O)v!O!P)v!P!Q)v!Q![<R![!])v!]!^$w!^!_)v!_!`)v!`!a)v!a!b)v!b!c$w!c!g)v!g!h>n!h!})v!}#O$w#O#P%Y#P#R$w#R#S)v#S#T$w#T#X)v#X#Y>n#Y#o)v#o$g$w$g##l)v##l~$wZ>wpqQ!sWTPOq$wqr)vst)vtu)vuv)vvw)vwx)vxz$wz{)v{|@{|}$w}!O@{!O!P)v!P!Q)v!Q![CY![!])v!]!^$w!^!_)v!_!`)v!`!a)v!a!b)v!b!c$w!c!})v!}#O$w#O#P%Y#P#R$w#R#S)v#S#T$w#T#o)v#o$g$w$g##l)v##l~$wZAUpqQ!sWTPOq$wqr)vst)vtu)vuv)vvw)vwx)vxz$wz{)v{|)v|}$w}!O)v!O!P)v!P!Q)v!Q![CY![!])v!]!^$w!^!_)v!_!`)v!`!a)v!a!b)v!b!c$w!c!})v!}#O$w#O#P%Y#P#R$w#R#S)v#S#T$w#T#o)v#o$g$w$g##l)v##l~$wZCerqQ!sWaPTPOq$wqr)vst)vtu)vuv)vvw)vwx)vxz$wz{)v{|)v|}$w}!O)v!O!P)v!P!Q)v!Q![CY![!])v!]!^$w!^!_)v!_!`)v!`!a)v!a!b)v!b!c$w!c!o)v!o!pEo!p!})v!}#O$w#O#P%Y#P#R$w#R#S)v#S#T$w#T#o)v#o$g$w$g##l)v##l~$wZEzpqQ!sWaPTPOq$wqr)vst)vtu)vuv)vvw)vwx)vxz$wz{)v{|)v|}$w}!O)v!O!P)v!P!Q)v!Q![)v![!])v!]!^$w!^!_)v!_!`)v!`!a)v!a!b)v!b!c$w!c!})v!}#O$w#O#P%Y#P#R$w#R#S)v#S#T$w#T#o)v#o$g$w$g##l)v##l~$w_H]yqQ!sWaP!tSTPOq$wqr'gst)vtu'guv'gvw'gwx)vxz$wz{'g{|'g|}$w}!O'g!O!PJ|!P!Q!![!Q![!&|![!])v!]!^$w!^!_'g!_!`'g!`!a'g!a!b'g!b!c$w!c!g'g!g!h!)t!h!o'g!o!p!0{!p!q!0{!q!}'g!}#O$w#O#P%Y#P#R$w#R#S'g#S#T$w#T#X'g#X#Y!)t#Y#l'g#l#m!3^#m#o'g#o$g$w$g##l'g##l~$wZKXvqQ!sWaPTPOq$wqr)vst)vtu)vuv)vvw)vwx)vxz$wz{)v{|)v|}$w}!O)v!O!P)v!P!Q)v!Q![J|![!])v!]!^$w!^!_)v!_!`)v!`!a)v!a!b)v!b!c$w!c!g)v!g!h>n!h!o)v!o!pMo!p!})v!}#O$w#O#P%Y#P#R$w#R#S)v#S#T$w#T#X)v#X#Y>n#Y#o)v#o$g$w$g##l)v##l~$wZMztqQ!sWaPTPOq$wqr)vst)vtu)vuv)vvw)vwx)vxz$wz{)v{|)v|}$w}!O)v!O!P)v!P!Q)v!Q![)v![!])v!]!^$w!^!_)v!_!`)v!`!a)v!a!b)v!b!c$w!c!g)v!g!h>n!h!})v!}#O$w#O#P%Y#P#R$w#R#S)v#S#T$w#T#X)v#X#Y>n#Y#o)v#o$g$w$g##l)v##l~$w_!!gpqQ!sW!tSTPOq$wqr'gst)vtu'guv'gvw'gwx)vxz$wz{'g{|'g|}$w}!O'g!O!P)v!P!Q'g!Q![!$k![!])v!]!^$w!^!_'g!_!`'g!`!a'g!a!b'g!b!c$w!c!}'g!}#O$w#O#P%Y#P#R$w#R#S'g#S#T$w#T#o'g#o$g$w$g##l'g##l~$w_!$xpqQ!sWaP!tSTPOq$wqr'gst)vtu'guv'gvw'gwx)vxz$wz{'g{|'g|}$w}!O'g!O!P)v!P!Q'g!Q![!$k![!])v!]!^$w!^!_'g!_!`'g!`!a'g!a!b'g!b!c$w!c!}'g!}#O$w#O#P%Y#P#R$w#R#S'g#S#T$w#T#o'g#o$g$w$g##l'g##l~$w_!'ZwqQ!sWaP!tSTPOq$wqr'gst)vtu'guv'gvw'gwx)vxz$wz{'g{|'g|}$w}!O'g!O!PJ|!P!Q!![!Q![!&|![!])v!]!^$w!^!_'g!_!`'g!`!a'g!a!b'g!b!c$w!c!g'g!g!h!)t!h!o'g!o!p!0{!p!q!0{!q!}'g!}#O$w#O#P%Y#P#R$w#R#S'g#S#T$w#T#X'g#X#Y!)t#Y#o'g#o$g$w$g##l'g##l~$w_!*PpqQ!sW!tSTPOq$wqr'gst)vtu'guv'gvw'gwx)vxz$wz{'g{|!,T|}$w}!O!,T!O!P)v!P!Q'g!Q![!.d![!])v!]!^$w!^!_'g!_!`'g!`!a'g!a!b'g!b!c$w!c!}'g!}#O$w#O#P%Y#P#R$w#R#S'g#S#T$w#T#o'g#o$g$w$g##l'g##l~$w_!,`pqQ!sW!tSTPOq$wqr'gst)vtu'guv'gvw'gwx)vxz$wz{'g{|'g|}$w}!O'g!O!P)v!P!Q'g!Q![!.d![!])v!]!^$w!^!_'g!_!`'g!`!a'g!a!b'g!b!c$w!c!}'g!}#O$w#O#P%Y#P#R$w#R#S'g#S#T$w#T#o'g#o$g$w$g##l'g##l~$w_!.qrqQ!sWaP!tSTPOq$wqr'gst)vtu'guv'gvw'gwx)vxz$wz{'g{|'g|}$w}!O'g!O!P)v!P!Q'g!Q![!.d![!])v!]!^$w!^!_'g!_!`'g!`!a'g!a!b'g!b!c$w!c!o'g!o!p!0{!p!}'g!}#O$w#O#P%Y#P#R$w#R#S'g#S#T$w#T#o'g#o$g$w$g##l'g##l~$w_!1YpqQ!sWaP!tSTPOq$wqr'gst)vtu'guv'gvw'gwx)vxz$wz{'g{|'g|}$w}!O'g!O!P)v!P!Q'g!Q!['g![!])v!]!^$w!^!_'g!_!`'g!`!a'g!a!b'g!b!c$w!c!}'g!}#O$w#O#P%Y#P#R$w#R#S'g#S#T$w#T#o'g#o$g$w$g##l'g##l~$w_!3irqQ!sW!tSTPOq$wqr'gst)vtu'guv'gvw'gwx)vxz$wz{'g{|'g|}$w}!O'g!O!P)v!P!Q'g!Q![!5s![!])v!]!^$w!^!_'g!_!`'g!`!a'g!a!b'g!b!c$w!c!i!5s!i!}'g!}#O$w#O#P%Y#P#R$w#R#S'g#S#T$w#T#Z!5s#Z#o'g#o$g$w$g##l'g##l~$w_!6QrqQ!sWaP!tSTPOq$wqr'gst)vtu'guv'gvw'gwx)vxz$wz{'g{|'g|}$w}!O'g!O!P)v!P!Q'g!Q![!5s![!])v!]!^$w!^!_'g!_!`'g!`!a'g!a!b'g!b!c$w!c!i!5s!i!}'g!}#O$w#O#P%Y#P#R$w#R#S'g#S#T$w#T#Z!5s#Z#o'g#o$g$w$g##l'g##l~$wR!8ceqQaPOr$ws!O$w!O!P!9t!P!Q!=r!Q![!>t![!g$w!g!h!:q!h!o$w!o!p!<n!p!q!<n!q#O$w#O#P%Y#P#U$w#U#V!?z#V#X$w#X#Y!:q#Y#c$w#c#d!AS#d#l$w#l#m!BU#m~$wR!9{[qQaPOr$ws!Q$w!Q![!9t![!g$w!g!h!:q!h!o$w!o!p!=R!p#O$w#O#P%Y#P#X$w#X#Y!:q#Y~$wR!:vYqQOr$ws{$w{|!;f|}$w}!O!;f!O!Q$w!Q![!;}![#O$w#O#P%Y#P~$wR!;kUqQOr$ws!Q$w!Q![!;}![#O$w#O#P%Y#P~$wR!<UWqQaPOr$ws!Q$w!Q![!;}![!o$w!o!p!<n!p#O$w#O#P%Y#P~$wR!<uSqQaPOr$ws#O$w#O#P%Y#P~$wR!=YWqQaPOr$ws!g$w!g!h!:q!h#O$w#O#P%Y#P#X$w#X#Y!:q#Y~$wR!=wUqQOr$ws!Q$w!Q![!>Z![#O$w#O#P%Y#P~$wR!>bUqQaPOr$ws!Q$w!Q![!>Z![#O$w#O#P%Y#P~$wR!>{_qQaPOr$ws!O$w!O!P!9t!P!Q!=r!Q![!>t![!g$w!g!h!:q!h!o$w!o!p!<n!p!q!<n!q#O$w#O#P%Y#P#X$w#X#Y!:q#Y~$wR!@PVqQOr$ws!Q$w!Q!R!@f!R!S!@f!S#O$w#O#P%Y#P~$wR!@mVqQaPOr$ws!Q$w!Q!R!@f!R!S!@f!S#O$w#O#P%Y#P~$wR!AXUqQOr$ws!Q$w!Q!Y!Ak!Y#O$w#O#P%Y#P~$wR!ArUqQaPOr$ws!Q$w!Q!Y!Ak!Y#O$w#O#P%Y#P~$wR!BZYqQOr$ws!Q$w!Q![!By![!c$w!c!i!By!i#O$w#O#P%Y#P#T$w#T#Z!By#Z~$wR!CQYqQaPOr$ws!Q$w!Q![!By![!c$w!c!i!By!i#O$w#O#P%Y#P#T$w#T#Z!By#Z~$wV!CyobPqQ!rSOq$wqr!Ezst$wtu!Ezuv!Ezvw!Ezwz$wz{!Ez{|!Ez|}$w}!O!Ez!O!P!Ez!P!Q!Ez!Q![$w![!]!HX!]!^$w!^!_!Ez!_!`!Ez!`!a!Ez!a!b!Ez!b!c$w!c!}!Ez!}#O$w#O#P%Y#P#R$w#R#S!Ez#S#T$w#T#o!Ez#o$g$w$g##l!Ez##l~$wV!FTpbPqQ!rSOq$wqr!Ezst!Eztu!Ezuv!Ezvw!Ezwx!Ezxz$wz{!Ez{|!Ez|}$w}!O!Ez!O!P!Ez!P!Q!Ez!Q![!Ez![!]!Ez!]!^$w!^!_!Ez!_!`!Ez!`!a!Ez!a!b!Ez!b!c$w!c!}!Ez!}#O$w#O#P%Y#P#R$w#R#S!Ez#S#T$w#T#o!Ez#o$g$w$g##l!Ez##l~$wV!HbmbPqQ!rSOq$wqr!Ezst$wtu!Ezuv!Ezvw!Ezwz$wz{!Ez{|!Ez|}$w}!O!Ez!O!P!Ez!P!Q!Ez!Q!^$w!^!_!Ez!_!`!Ez!`!a!Ez!a!b!Ez!b!c$w!c!}!Ez!}#O$w#O#P%Y#P#R$w#R#S!Ez#S#T$w#T#o!Ez#o$g$w$g##l!Ez##l~$wR!JdVPPqQOY!J]YZ$wZr!J]rs!Jys#O!J]#O#P!KU#P~!J]P!KOQPPOY!JyZ~!JyR!K]VPPqQOY!J]YZ$wZr!J]rs!J]s#O!J]#O#P!KU#P~!J]R!KySWPqQOr$ws#O$w#O#P%Y#P~$wR!L^SwPqQOr$ws#O$w#O#P%Y#P~$wR!LocqQOY!MzYZ$wZr!Mzrs!Mzs#O!Mz#O#P!N_#P#U!Mz#U#V!Nu#V#Y!Mz#Y#Z#$w#Z#b!Mz#b#c#(b#c#d#*{#d#f!Mz#f#g#,m#g#h#/W#h#i#/q#i#j#0s#j~!MzR!NRS|PqQOr$ws#O$w#O#P%Y#P~$wR!NfT|PqQOr$wrs$ws#O$w#O#P%Y#P~$wR!N|U|PqQOr$ws#O$w#O#P%Y#P#T$w#T#U# `#U~$wR# eUqQOr$ws#O$w#O#P%Y#P#V$w#V#W# w#W~$wR# |UqQOr$ws#O$w#O#P%Y#P#_$w#_#`#!`#`~$wR#!eUqQOr$ws#O$w#O#P%Y#P#g$w#g#h#!w#h~$wR#!|UqQOr$ws#O$w#O#P%Y#P#d$w#d#e##`#e~$wR##eUqQOr$ws#O$w#O#P%Y#P#T$w#T#U##w#U~$wR##|UqQOr$ws#O$w#O#P%Y#P#V$w#V#W#$`#W~$wR#$eUqQOr$ws#O$w#O#P%Y#P#X$w#X#Y!Mz#Y~$wR#%OU|PqQOr$ws#O$w#O#P%Y#P#c$w#c#d#%b#d~$wR#%gUqQOr$ws#O$w#O#P%Y#P#f$w#f#g#%y#g~$wR#&OUqQOr$ws#O$w#O#P%Y#P#a$w#a#b#&b#b~$wR#&gUqQOr$ws#O$w#O#P%Y#P#Y$w#Y#Z#&y#Z~$wR#'OUqQOr$ws#O$w#O#P%Y#P#X$w#X#Y#'b#Y~$wR#'gUqQOr$ws#O$w#O#P%Y#P#X$w#X#Y#'y#Y~$wR#(OUqQOr$ws#O$w#O#P%Y#P#W$w#W#X!Mz#X~$wR#(iU|PqQOr$ws#O$w#O#P%Y#P#X$w#X#Y#({#Y~$wR#)QUqQOr$ws#O$w#O#P%Y#P#k$w#k#l#)d#l~$wR#)iUqQOr$ws#O$w#O#P%Y#P#`$w#`#a#){#a~$wR#*QUqQOr$ws#O$w#O#P%Y#P#]$w#]#^#*d#^~$wR#*iUqQOr$ws#O$w#O#P%Y#P#b$w#b#c#$`#c~$wR#+SV|PqQOr$ws!Q$w!Q!U#+i!U!Y#,S!Y#O$w#O#P%Y#P~$wR#+pU|PqQOr$ws!Q$w!Q!Y#,S!Y#O$w#O#P%Y#P~$wR#,ZU|PqQOr$ws!Q$w!Q!Y!Mz!Y#O$w#O#P%Y#P~$wR#,tU|PqQOr$ws#O$w#O#P%Y#P#X$w#X#Y#-W#Y~$wR#-]UqQOr$ws#O$w#O#P%Y#P#h$w#h#i#-o#i~$wR#-tUqQOr$ws#O$w#O#P%Y#P#i$w#i#j#.W#j~$wR#.]UqQOr$ws#O$w#O#P%Y#P#f$w#f#g#.o#g~$wR#.tUqQOr$ws#O$w#O#P%Y#P#b$w#b#c!Mz#c~$wR#/_U|PqQOr$ws#O$w#O#P%Y#P#d$w#d#e##`#e~$wR#/xU|PqQOr$ws#O$w#O#P%Y#P#T$w#T#U#0[#U~$wR#0aUqQOr$ws#O$w#O#P%Y#P#U$w#U#V!Mz#V~$wR#0zY|PqQOr$ws!Q$w!Q![#1j![!c$w!c!i#1j!i#O$w#O#P%Y#P#T$w#T#Z#1j#Z~$wR#1oYqQOr$ws!Q$w!Q![#2_![!c$w!c!i#2_!i#O$w#O#P%Y#P#T$w#T#Z#2_#Z~$wR#2dYqQOr$ws!Q$w!Q![#3S![!c$w!c!i#3S!i#O$w#O#P%Y#P#T$w#T#Z#3S#Z~$wR#3XYqQOr$ws!Q$w!Q![!Mz![!c$w!c!i!Mz!i#O$w#O#P%Y#P#T$w#T#Z!Mz#Z~$wR#4OSvPqQOr$ws#O$w#O#P%Y#P~$wR#4cSiPqQOr$ws#O$w#O#P%Y#P~$wR#4vS[PqQOr$ws#O$w#O#P%Y#P~$wV#5ZSzTqQOr$ws#O$w#O#P%Y#P~$wR#5nSyPqQOr$ws#O$w#O#P%Y#P~$wR#6RU^PqQOr$ws!b$w!b!c#6e!c#O$w#O#P%Y#P~$wR#6lS`PqQOr$ws#O$w#O#P%Y#P~$w\",\n  tokenizers: [0, 1, 2, 3],\n  topRules: {\"Program\":[0,62]},\n  dynamicPrecedences: {\"22\":1,\"34\":2},\n  specialized: [{term: 5, get: value => spec_Symbol[value] || -1}],\n  tokenPrec: 466\n});\n\nexport { parser, props };\n","import { parser, props } from '@nextjournal/lezer-clojure';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { LRLanguage, indentNodeProp, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\n\n/**\nA language provider based on the [Lezer Clojure](https://github.com/nextjournal/lezer-clojure), extended with\nhighlighting and indentation information.\n*/\nconst { coll } = props;\n// debug\n// const nodeText = (state, node: SyntaxNode) => { return state.doc.sliceString(node.from, node.to) }\nconst clojureLanguage = /*@__PURE__*/LRLanguage.define({\n    parser: /*@__PURE__*/parser.configure({\n        props: [/*@__PURE__*/styleTags({ NS: tags.keyword,\n                DefLike: tags.keyword,\n                \"Operator/Symbol\": tags.keyword,\n                \"VarName/Symbol\": /*@__PURE__*/tags.definition(tags.variableName),\n                // Symbol: tags.keyword,\n                // \"'\": tags.keyword, // quote\n                Boolean: tags.atom,\n                \"DocString/...\": tags.emphasis,\n                \"Discard!\": tags.comment,\n                Number: tags.number,\n                StringContent: tags.string,\n                \"\\\"\\\\\\\"\\\"\": tags.string,\n                Keyword: tags.atom,\n                Nil: tags.null,\n                LineComment: tags.lineComment,\n                RegExp: tags.regexp }),\n            /*@__PURE__*/indentNodeProp.add((nodeType) => {\n                return (context) => {\n                    let { pos, unit, node, state, baseIndent, textAfter } = context;\n                    if (nodeType.prop(coll)) {\n                        // same behaviour as in clojure-mode: args after operator are always 2-units indented\n                        let parentBase = context.column(node.firstChild.to); // column at the right of parent opening-(\n                        if (\"List\" == nodeType.name && [\"NS\", \"DefLike\", \"Operator\"].includes(node.firstChild.nextSibling.type.name)) {\n                            return parentBase + 1;\n                        }\n                        else {\n                            return parentBase;\n                        }\n                    }\n                    else {\n                        return 0;\n                    }\n                };\n            }),\n            /*@__PURE__*/foldNodeProp.add({ [\"Vector Map List\"]: foldInside })]\n    }),\n    languageData: { commentTokens: { line: \";;\" } }\n});\nfunction clojure() {\n    return new LanguageSupport(clojureLanguage);\n}\n\nexport { clojure, clojureLanguage };\n","var variable_regex = /({)?[a-zA-Z0-9_]+(})?/;\n\nfunction tokenString(stream, state) {\n  var current, prev, found_var = false;\n  while (!stream.eol() && (current = stream.next()) != state.pending) {\n    if (current === '$' && prev != '\\\\' && state.pending == '\"') {\n      found_var = true;\n      break;\n    }\n    prev = current;\n  }\n  if (found_var) {\n    stream.backUp(1);\n  }\n  if (current == state.pending) {\n    state.continueString = false;\n  } else {\n    state.continueString = true;\n  }\n  return \"string\";\n}\n\nfunction tokenize(stream, state) {\n  var ch = stream.next();\n\n  // Have we found a variable?\n  if (ch === '$') {\n    if (stream.match(variable_regex)) {\n      return 'variableName.special';\n    }\n    return 'variable';\n  }\n  // Should we still be looking for the end of a string?\n  if (state.continueString) {\n    // If so, go through the loop again\n    stream.backUp(1);\n    return tokenString(stream, state);\n  }\n  // Do we just have a function on our hands?\n  // In 'cmake_minimum_required (VERSION 2.8.8)', 'cmake_minimum_required' is matched\n  if (stream.match(/(\\s+)?\\w+\\(/) || stream.match(/(\\s+)?\\w+\\ \\(/)) {\n    stream.backUp(1);\n    return 'def';\n  }\n  if (ch == \"#\") {\n    stream.skipToEnd();\n    return \"comment\";\n  }\n  // Have we found a string?\n  if (ch == \"'\" || ch == '\"') {\n    // Store the type (single or double)\n    state.pending = ch;\n    // Perform the looping function to find the end\n    return tokenString(stream, state);\n  }\n  if (ch == '(' || ch == ')') {\n    return 'bracket';\n  }\n  if (ch.match(/[0-9]/)) {\n    return 'number';\n  }\n  stream.eatWhile(/[\\w-]/);\n  return null;\n}\nexport const cmake = {\n  name: \"cmake\",\n  startState: function () {\n    var state = {};\n    state.inDefinition = false;\n    state.inInclude = false;\n    state.continueString = false;\n    state.pending = false;\n    return state;\n  },\n  token: function (stream, state) {\n    if (stream.eatSpace()) return null;\n    return tokenize(stream, state);\n  }\n};\n\n","var BUILTIN = \"builtin\", COMMENT = \"comment\", STRING = \"string\",\n    ATOM = \"atom\", NUMBER = \"number\", KEYWORD = \"keyword\", MODTAG = \"header\",\n    COBOLLINENUM = \"def\", PERIOD = \"link\";\nfunction makeKeywords(str) {\n  var obj = {}, words = str.split(\" \");\n  for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n  return obj;\n}\nvar atoms = makeKeywords(\"TRUE FALSE ZEROES ZEROS ZERO SPACES SPACE LOW-VALUE LOW-VALUES \");\nvar keywords = makeKeywords(\n  \"ACCEPT ACCESS ACQUIRE ADD ADDRESS \" +\n    \"ADVANCING AFTER ALIAS ALL ALPHABET \" +\n    \"ALPHABETIC ALPHABETIC-LOWER ALPHABETIC-UPPER ALPHANUMERIC ALPHANUMERIC-EDITED \" +\n    \"ALSO ALTER ALTERNATE AND ANY \" +\n    \"ARE AREA AREAS ARITHMETIC ASCENDING \" +\n    \"ASSIGN AT ATTRIBUTE AUTHOR AUTO \" +\n    \"AUTO-SKIP AUTOMATIC B-AND B-EXOR B-LESS \" +\n    \"B-NOT B-OR BACKGROUND-COLOR BACKGROUND-COLOUR BEEP \" +\n    \"BEFORE BELL BINARY BIT BITS \" +\n    \"BLANK BLINK BLOCK BOOLEAN BOTTOM \" +\n    \"BY CALL CANCEL CD CF \" +\n    \"CH CHARACTER CHARACTERS CLASS CLOCK-UNITS \" +\n    \"CLOSE COBOL CODE CODE-SET COL \" +\n    \"COLLATING COLUMN COMMA COMMIT COMMITMENT \" +\n    \"COMMON COMMUNICATION COMP COMP-0 COMP-1 \" +\n    \"COMP-2 COMP-3 COMP-4 COMP-5 COMP-6 \" +\n    \"COMP-7 COMP-8 COMP-9 COMPUTATIONAL COMPUTATIONAL-0 \" +\n    \"COMPUTATIONAL-1 COMPUTATIONAL-2 COMPUTATIONAL-3 COMPUTATIONAL-4 COMPUTATIONAL-5 \" +\n    \"COMPUTATIONAL-6 COMPUTATIONAL-7 COMPUTATIONAL-8 COMPUTATIONAL-9 COMPUTE \" +\n    \"CONFIGURATION CONNECT CONSOLE CONTAINED CONTAINS \" +\n    \"CONTENT CONTINUE CONTROL CONTROL-AREA CONTROLS \" +\n    \"CONVERTING COPY CORR CORRESPONDING COUNT \" +\n    \"CRT CRT-UNDER CURRENCY CURRENT CURSOR \" +\n    \"DATA DATE DATE-COMPILED DATE-WRITTEN DAY \" +\n    \"DAY-OF-WEEK DB DB-ACCESS-CONTROL-KEY DB-DATA-NAME DB-EXCEPTION \" +\n    \"DB-FORMAT-NAME DB-RECORD-NAME DB-SET-NAME DB-STATUS DBCS \" +\n    \"DBCS-EDITED DE DEBUG-CONTENTS DEBUG-ITEM DEBUG-LINE \" +\n    \"DEBUG-NAME DEBUG-SUB-1 DEBUG-SUB-2 DEBUG-SUB-3 DEBUGGING \" +\n    \"DECIMAL-POINT DECLARATIVES DEFAULT DELETE DELIMITED \" +\n    \"DELIMITER DEPENDING DESCENDING DESCRIBED DESTINATION \" +\n    \"DETAIL DISABLE DISCONNECT DISPLAY DISPLAY-1 \" +\n    \"DISPLAY-2 DISPLAY-3 DISPLAY-4 DISPLAY-5 DISPLAY-6 \" +\n    \"DISPLAY-7 DISPLAY-8 DISPLAY-9 DIVIDE DIVISION \" +\n    \"DOWN DROP DUPLICATE DUPLICATES DYNAMIC \" +\n    \"EBCDIC EGI EJECT ELSE EMI \" +\n    \"EMPTY EMPTY-CHECK ENABLE END END. END-ACCEPT END-ACCEPT. \" +\n    \"END-ADD END-CALL END-COMPUTE END-DELETE END-DISPLAY \" +\n    \"END-DIVIDE END-EVALUATE END-IF END-INVOKE END-MULTIPLY \" +\n    \"END-OF-PAGE END-PERFORM END-READ END-RECEIVE END-RETURN \" +\n    \"END-REWRITE END-SEARCH END-START END-STRING END-SUBTRACT \" +\n    \"END-UNSTRING END-WRITE END-XML ENTER ENTRY \" +\n    \"ENVIRONMENT EOP EQUAL EQUALS ERASE \" +\n    \"ERROR ESI EVALUATE EVERY EXCEEDS \" +\n    \"EXCEPTION EXCLUSIVE EXIT EXTEND EXTERNAL \" +\n    \"EXTERNALLY-DESCRIBED-KEY FD FETCH FILE FILE-CONTROL \" +\n    \"FILE-STREAM FILES FILLER FINAL FIND \" +\n    \"FINISH FIRST FOOTING FOR FOREGROUND-COLOR \" +\n    \"FOREGROUND-COLOUR FORMAT FREE FROM FULL \" +\n    \"FUNCTION GENERATE GET GIVING GLOBAL \" +\n    \"GO GOBACK GREATER GROUP HEADING \" +\n    \"HIGH-VALUE HIGH-VALUES HIGHLIGHT I-O I-O-CONTROL \" +\n    \"ID IDENTIFICATION IF IN INDEX \" +\n    \"INDEX-1 INDEX-2 INDEX-3 INDEX-4 INDEX-5 \" +\n    \"INDEX-6 INDEX-7 INDEX-8 INDEX-9 INDEXED \" +\n    \"INDIC INDICATE INDICATOR INDICATORS INITIAL \" +\n    \"INITIALIZE INITIATE INPUT INPUT-OUTPUT INSPECT \" +\n    \"INSTALLATION INTO INVALID INVOKE IS \" +\n    \"JUST JUSTIFIED KANJI KEEP KEY \" +\n    \"LABEL LAST LD LEADING LEFT \" +\n    \"LEFT-JUSTIFY LENGTH LENGTH-CHECK LESS LIBRARY \" +\n    \"LIKE LIMIT LIMITS LINAGE LINAGE-COUNTER \" +\n    \"LINE LINE-COUNTER LINES LINKAGE LOCAL-STORAGE \" +\n    \"LOCALE LOCALLY LOCK \" +\n    \"MEMBER MEMORY MERGE MESSAGE METACLASS \" +\n    \"MODE MODIFIED MODIFY MODULES MOVE \" +\n    \"MULTIPLE MULTIPLY NATIONAL NATIVE NEGATIVE \" +\n    \"NEXT NO NO-ECHO NONE NOT \" +\n    \"NULL NULL-KEY-MAP NULL-MAP NULLS NUMBER \" +\n    \"NUMERIC NUMERIC-EDITED OBJECT OBJECT-COMPUTER OCCURS \" +\n    \"OF OFF OMITTED ON ONLY \" +\n    \"OPEN OPTIONAL OR ORDER ORGANIZATION \" +\n    \"OTHER OUTPUT OVERFLOW OWNER PACKED-DECIMAL \" +\n    \"PADDING PAGE PAGE-COUNTER PARSE PERFORM \" +\n    \"PF PH PIC PICTURE PLUS \" +\n    \"POINTER POSITION POSITIVE PREFIX PRESENT \" +\n    \"PRINTING PRIOR PROCEDURE PROCEDURE-POINTER PROCEDURES \" +\n    \"PROCEED PROCESS PROCESSING PROGRAM PROGRAM-ID \" +\n    \"PROMPT PROTECTED PURGE QUEUE QUOTE \" +\n    \"QUOTES RANDOM RD READ READY \" +\n    \"REALM RECEIVE RECONNECT RECORD RECORD-NAME \" +\n    \"RECORDS RECURSIVE REDEFINES REEL REFERENCE \" +\n    \"REFERENCE-MONITOR REFERENCES RELATION RELATIVE RELEASE \" +\n    \"REMAINDER REMOVAL RENAMES REPEATED REPLACE \" +\n    \"REPLACING REPORT REPORTING REPORTS REPOSITORY \" +\n    \"REQUIRED RERUN RESERVE RESET RETAINING \" +\n    \"RETRIEVAL RETURN RETURN-CODE RETURNING REVERSE-VIDEO \" +\n    \"REVERSED REWIND REWRITE RF RH \" +\n    \"RIGHT RIGHT-JUSTIFY ROLLBACK ROLLING ROUNDED \" +\n    \"RUN SAME SCREEN SD SEARCH \" +\n    \"SECTION SECURE SECURITY SEGMENT SEGMENT-LIMIT \" +\n    \"SELECT SEND SENTENCE SEPARATE SEQUENCE \" +\n    \"SEQUENTIAL SET SHARED SIGN SIZE \" +\n    \"SKIP1 SKIP2 SKIP3 SORT SORT-MERGE \" +\n    \"SORT-RETURN SOURCE SOURCE-COMPUTER SPACE-FILL \" +\n    \"SPECIAL-NAMES STANDARD STANDARD-1 STANDARD-2 \" +\n    \"START STARTING STATUS STOP STORE \" +\n    \"STRING SUB-QUEUE-1 SUB-QUEUE-2 SUB-QUEUE-3 SUB-SCHEMA \" +\n    \"SUBFILE SUBSTITUTE SUBTRACT SUM SUPPRESS \" +\n    \"SYMBOLIC SYNC SYNCHRONIZED SYSIN SYSOUT \" +\n    \"TABLE TALLYING TAPE TENANT TERMINAL \" +\n    \"TERMINATE TEST TEXT THAN THEN \" +\n    \"THROUGH THRU TIME TIMES TITLE \" +\n    \"TO TOP TRAILING TRAILING-SIGN TRANSACTION \" +\n    \"TYPE TYPEDEF UNDERLINE UNEQUAL UNIT \" +\n    \"UNSTRING UNTIL UP UPDATE UPON \" +\n    \"USAGE USAGE-MODE USE USING VALID \" +\n    \"VALIDATE VALUE VALUES VARYING VLR \" +\n    \"WAIT WHEN WHEN-COMPILED WITH WITHIN \" +\n    \"WORDS WORKING-STORAGE WRITE XML XML-CODE \" +\n    \"XML-EVENT XML-NTEXT XML-TEXT ZERO ZERO-FILL \" );\n\nvar builtins = makeKeywords(\"- * ** / + < <= = > >= \");\nvar tests = {\n  digit: /\\d/,\n  digit_or_colon: /[\\d:]/,\n  hex: /[0-9a-f]/i,\n  sign: /[+-]/,\n  exponent: /e/i,\n  keyword_char: /[^\\s\\(\\[\\;\\)\\]]/,\n  symbol: /[\\w*+\\-]/\n};\nfunction isNumber(ch, stream){\n  // hex\n  if ( ch === '0' && stream.eat(/x/i) ) {\n    stream.eatWhile(tests.hex);\n    return true;\n  }\n  // leading sign\n  if ( ( ch == '+' || ch == '-' ) && ( tests.digit.test(stream.peek()) ) ) {\n    stream.eat(tests.sign);\n    ch = stream.next();\n  }\n  if ( tests.digit.test(ch) ) {\n    stream.eat(ch);\n    stream.eatWhile(tests.digit);\n    if ( '.' == stream.peek()) {\n      stream.eat('.');\n      stream.eatWhile(tests.digit);\n    }\n    if ( stream.eat(tests.exponent) ) {\n      stream.eat(tests.sign);\n      stream.eatWhile(tests.digit);\n    }\n    return true;\n  }\n  return false;\n}\nexport const cobol = {\n  name: \"cobol\",\n  startState: function () {\n    return {\n      indentStack: null,\n      indentation: 0,\n      mode: false\n    };\n  },\n  token: function (stream, state) {\n    if (state.indentStack == null && stream.sol()) {\n      // update indentation, but only if indentStack is empty\n      state.indentation = 6 ; //stream.indentation();\n    }\n    // skip spaces\n    if (stream.eatSpace()) {\n      return null;\n    }\n    var returnType = null;\n    switch(state.mode){\n    case \"string\": // multi-line string parsing mode\n      var next = false;\n      while ((next = stream.next()) != null) {\n        if ((next == \"\\\"\" || next == \"\\'\") && !stream.match(/['\"]/, false)) {\n          state.mode = false;\n          break;\n        }\n      }\n      returnType = STRING; // continue on in string mode\n      break;\n    default: // default parsing mode\n      var ch = stream.next();\n      var col = stream.column();\n      if (col >= 0 && col <= 5) {\n        returnType = COBOLLINENUM;\n      } else if (col >= 72 && col <= 79) {\n        stream.skipToEnd();\n        returnType = MODTAG;\n      } else if (ch == \"*\" && col == 6) { // comment\n        stream.skipToEnd(); // rest of the line is a comment\n        returnType = COMMENT;\n      } else if (ch == \"\\\"\" || ch == \"\\'\") {\n        state.mode = \"string\";\n        returnType = STRING;\n      } else if (ch == \"'\" && !( tests.digit_or_colon.test(stream.peek()) )) {\n        returnType = ATOM;\n      } else if (ch == \".\") {\n        returnType = PERIOD;\n      } else if (isNumber(ch,stream)){\n        returnType = NUMBER;\n      } else {\n        if (stream.current().match(tests.symbol)) {\n          while (col < 71) {\n            if (stream.eat(tests.symbol) === undefined) {\n              break;\n            } else {\n              col++;\n            }\n          }\n        }\n        if (keywords && keywords.propertyIsEnumerable(stream.current().toUpperCase())) {\n          returnType = KEYWORD;\n        } else if (builtins && builtins.propertyIsEnumerable(stream.current().toUpperCase())) {\n          returnType = BUILTIN;\n        } else if (atoms && atoms.propertyIsEnumerable(stream.current().toUpperCase())) {\n          returnType = ATOM;\n        } else returnType = null;\n      }\n    }\n    return returnType;\n  },\n  indent: function (state) {\n    if (state.indentStack == null) return state.indentation;\n    return state.indentStack.indent;\n  }\n};\n\n","var ERRORCLASS = \"error\";\n\nfunction wordRegexp(words) {\n  return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\");\n}\n\nvar operators = /^(?:->|=>|\\+[+=]?|-[\\-=]?|\\*[\\*=]?|\\/[\\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\\|=?|\\^=?|\\~|!|\\?|(or|and|\\|\\||&&|\\?)=)/;\nvar delimiters = /^(?:[()\\[\\]{},:`=;]|\\.\\.?\\.?)/;\nvar identifiers = /^[_A-Za-z$][_A-Za-z$0-9]*/;\nvar atProp = /^@[_A-Za-z$][_A-Za-z$0-9]*/;\n\nvar wordOperators = wordRegexp([\"and\", \"or\", \"not\",\n                                \"is\", \"isnt\", \"in\",\n                                \"instanceof\", \"typeof\"]);\nvar indentKeywords = [\"for\", \"while\", \"loop\", \"if\", \"unless\", \"else\",\n                      \"switch\", \"try\", \"catch\", \"finally\", \"class\"];\nvar commonKeywords = [\"break\", \"by\", \"continue\", \"debugger\", \"delete\",\n                      \"do\", \"in\", \"of\", \"new\", \"return\", \"then\",\n                      \"this\", \"@\", \"throw\", \"when\", \"until\", \"extends\"];\n\nvar keywords = wordRegexp(indentKeywords.concat(commonKeywords));\n\nindentKeywords = wordRegexp(indentKeywords);\n\n\nvar stringPrefixes = /^('{3}|\\\"{3}|['\\\"])/;\nvar regexPrefixes = /^(\\/{3}|\\/)/;\nvar commonConstants = [\"Infinity\", \"NaN\", \"undefined\", \"null\", \"true\", \"false\", \"on\", \"off\", \"yes\", \"no\"];\nvar constants = wordRegexp(commonConstants);\n\n// Tokenizers\nfunction tokenBase(stream, state) {\n  // Handle scope changes\n  if (stream.sol()) {\n    if (state.scope.align === null) state.scope.align = false;\n    var scopeOffset = state.scope.offset;\n    if (stream.eatSpace()) {\n      var lineOffset = stream.indentation();\n      if (lineOffset > scopeOffset && state.scope.type == \"coffee\") {\n        return \"indent\";\n      } else if (lineOffset < scopeOffset) {\n        return \"dedent\";\n      }\n      return null;\n    } else {\n      if (scopeOffset > 0) {\n        dedent(stream, state);\n      }\n    }\n  }\n  if (stream.eatSpace()) {\n    return null;\n  }\n\n  var ch = stream.peek();\n\n  // Handle docco title comment (single line)\n  if (stream.match(\"####\")) {\n    stream.skipToEnd();\n    return \"comment\";\n  }\n\n  // Handle multi line comments\n  if (stream.match(\"###\")) {\n    state.tokenize = longComment;\n    return state.tokenize(stream, state);\n  }\n\n  // Single line comment\n  if (ch === \"#\") {\n    stream.skipToEnd();\n    return \"comment\";\n  }\n\n  // Handle number literals\n  if (stream.match(/^-?[0-9\\.]/, false)) {\n    var floatLiteral = false;\n    // Floats\n    if (stream.match(/^-?\\d*\\.\\d+(e[\\+\\-]?\\d+)?/i)) {\n      floatLiteral = true;\n    }\n    if (stream.match(/^-?\\d+\\.\\d*/)) {\n      floatLiteral = true;\n    }\n    if (stream.match(/^-?\\.\\d+/)) {\n      floatLiteral = true;\n    }\n\n    if (floatLiteral) {\n      // prevent from getting extra . on 1..\n      if (stream.peek() == \".\"){\n        stream.backUp(1);\n      }\n      return \"number\";\n    }\n    // Integers\n    var intLiteral = false;\n    // Hex\n    if (stream.match(/^-?0x[0-9a-f]+/i)) {\n      intLiteral = true;\n    }\n    // Decimal\n    if (stream.match(/^-?[1-9]\\d*(e[\\+\\-]?\\d+)?/)) {\n      intLiteral = true;\n    }\n    // Zero by itself with no other piece of number.\n    if (stream.match(/^-?0(?![\\dx])/i)) {\n      intLiteral = true;\n    }\n    if (intLiteral) {\n      return \"number\";\n    }\n  }\n\n  // Handle strings\n  if (stream.match(stringPrefixes)) {\n    state.tokenize = tokenFactory(stream.current(), false, \"string\");\n    return state.tokenize(stream, state);\n  }\n  // Handle regex literals\n  if (stream.match(regexPrefixes)) {\n    if (stream.current() != \"/\" || stream.match(/^.*\\//, false)) { // prevent highlight of division\n      state.tokenize = tokenFactory(stream.current(), true, \"string.special\");\n      return state.tokenize(stream, state);\n    } else {\n      stream.backUp(1);\n    }\n  }\n\n\n\n  // Handle operators and delimiters\n  if (stream.match(operators) || stream.match(wordOperators)) {\n    return \"operator\";\n  }\n  if (stream.match(delimiters)) {\n    return \"punctuation\";\n  }\n\n  if (stream.match(constants)) {\n    return \"atom\";\n  }\n\n  if (stream.match(atProp) || state.prop && stream.match(identifiers)) {\n    return \"property\";\n  }\n\n  if (stream.match(keywords)) {\n    return \"keyword\";\n  }\n\n  if (stream.match(identifiers)) {\n    return \"variable\";\n  }\n\n  // Handle non-detected items\n  stream.next();\n  return ERRORCLASS;\n}\n\nfunction tokenFactory(delimiter, singleline, outclass) {\n  return function(stream, state) {\n    while (!stream.eol()) {\n      stream.eatWhile(/[^'\"\\/\\\\]/);\n      if (stream.eat(\"\\\\\")) {\n        stream.next();\n        if (singleline && stream.eol()) {\n          return outclass;\n        }\n      } else if (stream.match(delimiter)) {\n        state.tokenize = tokenBase;\n        return outclass;\n      } else {\n        stream.eat(/['\"\\/]/);\n      }\n    }\n    if (singleline) {\n      state.tokenize = tokenBase;\n    }\n    return outclass;\n  };\n}\n\nfunction longComment(stream, state) {\n  while (!stream.eol()) {\n    stream.eatWhile(/[^#]/);\n    if (stream.match(\"###\")) {\n      state.tokenize = tokenBase;\n      break;\n    }\n    stream.eatWhile(\"#\");\n  }\n  return \"comment\";\n}\n\nfunction indent(stream, state, type = \"coffee\") {\n  var offset = 0, align = false, alignOffset = null;\n  for (var scope = state.scope; scope; scope = scope.prev) {\n    if (scope.type === \"coffee\" || scope.type == \"}\") {\n      offset = scope.offset + stream.indentUnit;\n      break;\n    }\n  }\n  if (type !== \"coffee\") {\n    align = null;\n    alignOffset = stream.column() + stream.current().length;\n  } else if (state.scope.align) {\n    state.scope.align = false;\n  }\n  state.scope = {\n    offset: offset,\n    type: type,\n    prev: state.scope,\n    align: align,\n    alignOffset: alignOffset\n  };\n}\n\nfunction dedent(stream, state) {\n  if (!state.scope.prev) return;\n  if (state.scope.type === \"coffee\") {\n    var _indent = stream.indentation();\n    var matched = false;\n    for (var scope = state.scope; scope; scope = scope.prev) {\n      if (_indent === scope.offset) {\n        matched = true;\n        break;\n      }\n    }\n    if (!matched) {\n      return true;\n    }\n    while (state.scope.prev && state.scope.offset !== _indent) {\n      state.scope = state.scope.prev;\n    }\n    return false;\n  } else {\n    state.scope = state.scope.prev;\n    return false;\n  }\n}\n\nfunction tokenLexer(stream, state) {\n  var style = state.tokenize(stream, state);\n  var current = stream.current();\n\n  // Handle scope changes.\n  if (current === \"return\") {\n    state.dedent = true;\n  }\n  if (((current === \"->\" || current === \"=>\") && stream.eol())\n      || style === \"indent\") {\n    indent(stream, state);\n  }\n  var delimiter_index = \"[({\".indexOf(current);\n  if (delimiter_index !== -1) {\n    indent(stream, state, \"])}\".slice(delimiter_index, delimiter_index+1));\n  }\n  if (indentKeywords.exec(current)){\n    indent(stream, state);\n  }\n  if (current == \"then\"){\n    dedent(stream, state);\n  }\n\n\n  if (style === \"dedent\") {\n    if (dedent(stream, state)) {\n      return ERRORCLASS;\n    }\n  }\n  delimiter_index = \"])}\".indexOf(current);\n  if (delimiter_index !== -1) {\n    while (state.scope.type == \"coffee\" && state.scope.prev)\n      state.scope = state.scope.prev;\n    if (state.scope.type == current)\n      state.scope = state.scope.prev;\n  }\n  if (state.dedent && stream.eol()) {\n    if (state.scope.type == \"coffee\" && state.scope.prev)\n      state.scope = state.scope.prev;\n    state.dedent = false;\n  }\n\n  return style == \"indent\" || style == \"dedent\" ? null : style;\n}\n\nexport const coffeeScript = {\n  name: \"coffeescript\",\n  startState: function() {\n    return {\n      tokenize: tokenBase,\n      scope: {offset: 0, type:\"coffee\", prev: null, align: false},\n      prop: false,\n      dedent: 0\n    };\n  },\n\n  token: function(stream, state) {\n    var fillAlign = state.scope.align === null && state.scope;\n    if (fillAlign && stream.sol()) fillAlign.align = false;\n\n    var style = tokenLexer(stream, state);\n    if (style && style != \"comment\") {\n      if (fillAlign) fillAlign.align = true;\n      state.prop = style == \"punctuation\" && stream.current() == \".\"\n    }\n\n    return style;\n  },\n\n  indent: function(state, text) {\n    if (state.tokenize != tokenBase) return 0;\n    var scope = state.scope;\n    var closer = text && \"])}\".indexOf(text.charAt(0)) > -1;\n    if (closer) while (scope.type == \"coffee\" && scope.prev) scope = scope.prev;\n    var closes = closer && scope.type === text.charAt(0);\n    if (scope.align)\n      return scope.alignOffset - (closes ? 1 : 0);\n    else\n      return (closes ? scope.prev : scope).offset;\n  },\n\n  languageData: {\n    commentTokens: {line: \"#\"}\n  }\n};\n","var specialForm = /^(block|let*|return-from|catch|load-time-value|setq|eval-when|locally|symbol-macrolet|flet|macrolet|tagbody|function|multiple-value-call|the|go|multiple-value-prog1|throw|if|progn|unwind-protect|labels|progv|let|quote)$/;\nvar assumeBody = /^with|^def|^do|^prog|case$|^cond$|bind$|when$|unless$/;\nvar numLiteral = /^(?:[+\\-]?(?:\\d+|\\d*\\.\\d+)(?:[efd][+\\-]?\\d+)?|[+\\-]?\\d+(?:\\/[+\\-]?\\d+)?|#b[+\\-]?[01]+|#o[+\\-]?[0-7]+|#x[+\\-]?[\\da-f]+)/;\nvar symbol = /[^\\s'`,@()\\[\\]\";]/;\nvar type;\n\nfunction readSym(stream) {\n  var ch;\n  while (ch = stream.next()) {\n    if (ch == \"\\\\\") stream.next();\n    else if (!symbol.test(ch)) { stream.backUp(1); break; }\n  }\n  return stream.current();\n}\n\nfunction base(stream, state) {\n  if (stream.eatSpace()) {type = \"ws\"; return null;}\n  if (stream.match(numLiteral)) return \"number\";\n  var ch = stream.next();\n  if (ch == \"\\\\\") ch = stream.next();\n\n  if (ch == '\"') return (state.tokenize = inString)(stream, state);\n  else if (ch == \"(\") { type = \"open\"; return \"bracket\"; }\n  else if (ch == \")\") { type = \"close\"; return \"bracket\"; }\n  else if (ch == \";\") { stream.skipToEnd(); type = \"ws\"; return \"comment\"; }\n  else if (/['`,@]/.test(ch)) return null;\n  else if (ch == \"|\") {\n    if (stream.skipTo(\"|\")) { stream.next(); return \"variableName\"; }\n    else { stream.skipToEnd(); return \"error\"; }\n  } else if (ch == \"#\") {\n    var ch = stream.next();\n    if (ch == \"(\") { type = \"open\"; return \"bracket\"; }\n    else if (/[+\\-=\\.']/.test(ch)) return null;\n    else if (/\\d/.test(ch) && stream.match(/^\\d*#/)) return null;\n    else if (ch == \"|\") return (state.tokenize = inComment)(stream, state);\n    else if (ch == \":\") { readSym(stream); return \"meta\"; }\n    else if (ch == \"\\\\\") { stream.next(); readSym(stream); return \"string.special\" }\n    else return \"error\";\n  } else {\n    var name = readSym(stream);\n    if (name == \".\") return null;\n    type = \"symbol\";\n    if (name == \"nil\" || name == \"t\" || name.charAt(0) == \":\") return \"atom\";\n    if (state.lastType == \"open\" && (specialForm.test(name) || assumeBody.test(name))) return \"keyword\";\n    if (name.charAt(0) == \"&\") return \"variableName.special\";\n    return \"variableName\";\n  }\n}\n\nfunction inString(stream, state) {\n  var escaped = false, next;\n  while (next = stream.next()) {\n    if (next == '\"' && !escaped) { state.tokenize = base; break; }\n    escaped = !escaped && next == \"\\\\\";\n  }\n  return \"string\";\n}\n\nfunction inComment(stream, state) {\n  var next, last;\n  while (next = stream.next()) {\n    if (next == \"#\" && last == \"|\") { state.tokenize = base; break; }\n    last = next;\n  }\n  type = \"ws\";\n  return \"comment\";\n}\n\nexport const commonLisp = {\n  name: \"commonlisp\",\n  startState: function () {\n    return {ctx: {prev: null, start: 0, indentTo: 0}, lastType: null, tokenize: base};\n  },\n\n  token: function (stream, state) {\n    if (stream.sol() && typeof state.ctx.indentTo != \"number\")\n      state.ctx.indentTo = state.ctx.start + 1;\n\n    type = null;\n    var style = state.tokenize(stream, state);\n    if (type != \"ws\") {\n      if (state.ctx.indentTo == null) {\n        if (type == \"symbol\" && assumeBody.test(stream.current()))\n          state.ctx.indentTo = state.ctx.start + stream.indentUnit;\n        else\n          state.ctx.indentTo = \"next\";\n      } else if (state.ctx.indentTo == \"next\") {\n        state.ctx.indentTo = stream.column();\n      }\n      state.lastType = type;\n    }\n    if (type == \"open\") state.ctx = {prev: state.ctx, start: stream.column(), indentTo: null};\n    else if (type == \"close\") state.ctx = state.ctx.prev || state.ctx;\n    return style;\n  },\n\n  indent: function (state) {\n    var i = state.ctx.indentTo;\n    return typeof i == \"number\" ? i : state.ctx.start + 1;\n  },\n\n  languageData: {\n    commentTokens: {line: \";;\", block: {open: \"#|\", close: \"|#\"}},\n    closeBrackets: {brackets: [\"(\", \"[\", \"{\", '\"']}\n  }\n};\n\n","function wordRegExp(words, end) {\n  return new RegExp((end ? \"\" : \"^\") + \"(?:\" + words.join(\"|\") + \")\" + (end ? \"$\" : \"\\\\b\"));\n}\n\nfunction chain(tokenize, stream, state) {\n  state.tokenize.push(tokenize);\n  return tokenize(stream, state);\n}\n\nvar operators = /^(?:[-+/%|&^]|\\*\\*?|[<>]{2})/;\nvar conditionalOperators = /^(?:[=!]~|===|<=>|[<>=!]=?|[|&]{2}|~)/;\nvar indexingOperators = /^(?:\\[\\][?=]?)/;\nvar anotherOperators = /^(?:\\.(?:\\.{2})?|->|[?:])/;\nvar idents = /^[a-z_\\u009F-\\uFFFF][a-zA-Z0-9_\\u009F-\\uFFFF]*/;\nvar types = /^[A-Z_\\u009F-\\uFFFF][a-zA-Z0-9_\\u009F-\\uFFFF]*/;\nvar keywords = wordRegExp([\n  \"abstract\", \"alias\", \"as\", \"asm\", \"begin\", \"break\", \"case\", \"class\", \"def\", \"do\",\n  \"else\", \"elsif\", \"end\", \"ensure\", \"enum\", \"extend\", \"for\", \"fun\", \"if\",\n  \"include\", \"instance_sizeof\", \"lib\", \"macro\", \"module\", \"next\", \"of\", \"out\", \"pointerof\",\n  \"private\", \"protected\", \"rescue\", \"return\", \"require\", \"select\", \"sizeof\", \"struct\",\n  \"super\", \"then\", \"type\", \"typeof\", \"uninitialized\", \"union\", \"unless\", \"until\", \"when\", \"while\", \"with\",\n  \"yield\", \"__DIR__\", \"__END_LINE__\", \"__FILE__\", \"__LINE__\"\n]);\nvar atomWords = wordRegExp([\"true\", \"false\", \"nil\", \"self\"]);\nvar indentKeywordsArray = [\n  \"def\", \"fun\", \"macro\",\n  \"class\", \"module\", \"struct\", \"lib\", \"enum\", \"union\",\n  \"do\", \"for\"\n];\nvar indentKeywords = wordRegExp(indentKeywordsArray);\nvar indentExpressionKeywordsArray = [\"if\", \"unless\", \"case\", \"while\", \"until\", \"begin\", \"then\"];\nvar indentExpressionKeywords = wordRegExp(indentExpressionKeywordsArray);\nvar dedentKeywordsArray = [\"end\", \"else\", \"elsif\", \"rescue\", \"ensure\"];\nvar dedentKeywords = wordRegExp(dedentKeywordsArray);\nvar dedentPunctualsArray = [\"\\\\)\", \"\\\\}\", \"\\\\]\"];\nvar dedentPunctuals = new RegExp(\"^(?:\" + dedentPunctualsArray.join(\"|\") + \")$\");\nvar nextTokenizer = {\n  \"def\": tokenFollowIdent, \"fun\": tokenFollowIdent, \"macro\": tokenMacroDef,\n  \"class\": tokenFollowType, \"module\": tokenFollowType, \"struct\": tokenFollowType,\n  \"lib\": tokenFollowType, \"enum\": tokenFollowType, \"union\": tokenFollowType\n};\nvar matching = {\"[\": \"]\", \"{\": \"}\", \"(\": \")\", \"<\": \">\"};\n\nfunction tokenBase(stream, state) {\n  if (stream.eatSpace()) {\n    return null;\n  }\n\n  // Macros\n  if (state.lastToken != \"\\\\\" && stream.match(\"{%\", false)) {\n    return chain(tokenMacro(\"%\", \"%\"), stream, state);\n  }\n\n  if (state.lastToken != \"\\\\\" && stream.match(\"{{\", false)) {\n    return chain(tokenMacro(\"{\", \"}\"), stream, state);\n  }\n\n  // Comments\n  if (stream.peek() == \"#\") {\n    stream.skipToEnd();\n    return \"comment\";\n  }\n\n  // Variables and keywords\n  var matched;\n  if (stream.match(idents)) {\n    stream.eat(/[?!]/);\n\n    matched = stream.current();\n    if (stream.eat(\":\")) {\n      return \"atom\";\n    } else if (state.lastToken == \".\") {\n      return \"property\";\n    } else if (keywords.test(matched)) {\n      if (indentKeywords.test(matched)) {\n        if (!(matched == \"fun\" && state.blocks.indexOf(\"lib\") >= 0) && !(matched == \"def\" && state.lastToken == \"abstract\")) {\n          state.blocks.push(matched);\n          state.currentIndent += 1;\n        }\n      } else if ((state.lastStyle == \"operator\" || !state.lastStyle) && indentExpressionKeywords.test(matched)) {\n        state.blocks.push(matched);\n        state.currentIndent += 1;\n      } else if (matched == \"end\") {\n        state.blocks.pop();\n        state.currentIndent -= 1;\n      }\n\n      if (nextTokenizer.hasOwnProperty(matched)) {\n        state.tokenize.push(nextTokenizer[matched]);\n      }\n\n      return \"keyword\";\n    } else if (atomWords.test(matched)) {\n      return \"atom\";\n    }\n\n    return \"variable\";\n  }\n\n  // Class variables and instance variables\n  // or attributes\n  if (stream.eat(\"@\")) {\n    if (stream.peek() == \"[\") {\n      return chain(tokenNest(\"[\", \"]\", \"meta\"), stream, state);\n    }\n\n    stream.eat(\"@\");\n    stream.match(idents) || stream.match(types);\n    return \"propertyName\";\n  }\n\n  // Constants and types\n  if (stream.match(types)) {\n    return \"tag\";\n  }\n\n  // Symbols or ':' operator\n  if (stream.eat(\":\")) {\n    if (stream.eat(\"\\\"\")) {\n      return chain(tokenQuote(\"\\\"\", \"atom\", false), stream, state);\n    } else if (stream.match(idents) || stream.match(types) ||\n               stream.match(operators) || stream.match(conditionalOperators) || stream.match(indexingOperators)) {\n      return \"atom\";\n    }\n    stream.eat(\":\");\n    return \"operator\";\n  }\n\n  // Strings\n  if (stream.eat(\"\\\"\")) {\n    return chain(tokenQuote(\"\\\"\", \"string\", true), stream, state);\n  }\n\n  // Strings or regexps or macro variables or '%' operator\n  if (stream.peek() == \"%\") {\n    var style = \"string\";\n    var embed = true;\n    var delim;\n\n    if (stream.match(\"%r\")) {\n      // Regexps\n      style = \"string.special\";\n      delim = stream.next();\n    } else if (stream.match(\"%w\")) {\n      embed = false;\n      delim = stream.next();\n    } else if (stream.match(\"%q\")) {\n      embed = false;\n      delim = stream.next();\n    } else {\n      if(delim = stream.match(/^%([^\\w\\s=])/)) {\n        delim = delim[1];\n      } else if (stream.match(/^%[a-zA-Z_\\u009F-\\uFFFF][\\w\\u009F-\\uFFFF]*/)) {\n        // Macro variables\n        return \"meta\";\n      } else if (stream.eat('%')) {\n        // '%' operator\n        return \"operator\";\n      }\n    }\n\n    if (matching.hasOwnProperty(delim)) {\n      delim = matching[delim];\n    }\n    return chain(tokenQuote(delim, style, embed), stream, state);\n  }\n\n  // Here Docs\n  if (matched = stream.match(/^<<-('?)([A-Z]\\w*)\\1/)) {\n    return chain(tokenHereDoc(matched[2], !matched[1]), stream, state)\n  }\n\n  // Characters\n  if (stream.eat(\"'\")) {\n    stream.match(/^(?:[^']|\\\\(?:[befnrtv0'\"]|[0-7]{3}|u(?:[0-9a-fA-F]{4}|\\{[0-9a-fA-F]{1,6}\\})))/);\n    stream.eat(\"'\");\n    return \"atom\";\n  }\n\n  // Numbers\n  if (stream.eat(\"0\")) {\n    if (stream.eat(\"x\")) {\n      stream.match(/^[0-9a-fA-F_]+/);\n    } else if (stream.eat(\"o\")) {\n      stream.match(/^[0-7_]+/);\n    } else if (stream.eat(\"b\")) {\n      stream.match(/^[01_]+/);\n    }\n    return \"number\";\n  }\n\n  if (stream.eat(/^\\d/)) {\n    stream.match(/^[\\d_]*(?:\\.[\\d_]+)?(?:[eE][+-]?\\d+)?/);\n    return \"number\";\n  }\n\n  // Operators\n  if (stream.match(operators)) {\n    stream.eat(\"=\"); // Operators can follow assign symbol.\n    return \"operator\";\n  }\n\n  if (stream.match(conditionalOperators) || stream.match(anotherOperators)) {\n    return \"operator\";\n  }\n\n  // Parens and braces\n  if (matched = stream.match(/[({[]/, false)) {\n    matched = matched[0];\n    return chain(tokenNest(matched, matching[matched], null), stream, state);\n  }\n\n  // Escapes\n  if (stream.eat(\"\\\\\")) {\n    stream.next();\n    return \"meta\";\n  }\n\n  stream.next();\n  return null;\n}\n\nfunction tokenNest(begin, end, style, started) {\n  return function (stream, state) {\n    if (!started && stream.match(begin)) {\n      state.tokenize[state.tokenize.length - 1] = tokenNest(begin, end, style, true);\n      state.currentIndent += 1;\n      return style;\n    }\n\n    var nextStyle = tokenBase(stream, state);\n    if (stream.current() === end) {\n      state.tokenize.pop();\n      state.currentIndent -= 1;\n      nextStyle = style;\n    }\n\n    return nextStyle;\n  };\n}\n\nfunction tokenMacro(begin, end, started) {\n  return function (stream, state) {\n    if (!started && stream.match(\"{\" + begin)) {\n      state.currentIndent += 1;\n      state.tokenize[state.tokenize.length - 1] = tokenMacro(begin, end, true);\n      return \"meta\";\n    }\n\n    if (stream.match(end + \"}\")) {\n      state.currentIndent -= 1;\n      state.tokenize.pop();\n      return \"meta\";\n    }\n\n    return tokenBase(stream, state);\n  };\n}\n\nfunction tokenMacroDef(stream, state) {\n  if (stream.eatSpace()) {\n    return null;\n  }\n\n  var matched;\n  if (matched = stream.match(idents)) {\n    if (matched == \"def\") {\n      return \"keyword\";\n    }\n    stream.eat(/[?!]/);\n  }\n\n  state.tokenize.pop();\n  return \"def\";\n}\n\nfunction tokenFollowIdent(stream, state) {\n  if (stream.eatSpace()) {\n    return null;\n  }\n\n  if (stream.match(idents)) {\n    stream.eat(/[!?]/);\n  } else {\n    stream.match(operators) || stream.match(conditionalOperators) || stream.match(indexingOperators);\n  }\n  state.tokenize.pop();\n  return \"def\";\n}\n\nfunction tokenFollowType(stream, state) {\n  if (stream.eatSpace()) {\n    return null;\n  }\n\n  stream.match(types);\n  state.tokenize.pop();\n  return \"def\";\n}\n\nfunction tokenQuote(end, style, embed) {\n  return function (stream, state) {\n    var escaped = false;\n\n    while (stream.peek()) {\n      if (!escaped) {\n        if (stream.match(\"{%\", false)) {\n          state.tokenize.push(tokenMacro(\"%\", \"%\"));\n          return style;\n        }\n\n        if (stream.match(\"{{\", false)) {\n          state.tokenize.push(tokenMacro(\"{\", \"}\"));\n          return style;\n        }\n\n        if (embed && stream.match(\"#{\", false)) {\n          state.tokenize.push(tokenNest(\"#{\", \"}\", \"meta\"));\n          return style;\n        }\n\n        var ch = stream.next();\n\n        if (ch == end) {\n          state.tokenize.pop();\n          return style;\n        }\n\n        escaped = embed && ch == \"\\\\\";\n      } else {\n        stream.next();\n        escaped = false;\n      }\n    }\n\n    return style;\n  };\n}\n\nfunction tokenHereDoc(phrase, embed) {\n  return function (stream, state) {\n    if (stream.sol()) {\n      stream.eatSpace()\n      if (stream.match(phrase)) {\n        state.tokenize.pop();\n        return \"string\";\n      }\n    }\n\n    var escaped = false;\n    while (stream.peek()) {\n      if (!escaped) {\n        if (stream.match(\"{%\", false)) {\n          state.tokenize.push(tokenMacro(\"%\", \"%\"));\n          return \"string\";\n        }\n\n        if (stream.match(\"{{\", false)) {\n          state.tokenize.push(tokenMacro(\"{\", \"}\"));\n          return \"string\";\n        }\n\n        if (embed && stream.match(\"#{\", false)) {\n          state.tokenize.push(tokenNest(\"#{\", \"}\", \"meta\"));\n          return \"string\";\n        }\n\n        escaped = stream.next() == \"\\\\\" && embed;\n      } else {\n        stream.next();\n        escaped = false;\n      }\n    }\n\n    return \"string\";\n  }\n}\n\nexport const crystal = {\n  name: \"crystal\",\n  startState: function () {\n    return {\n      tokenize: [tokenBase],\n      currentIndent: 0,\n      lastToken: null,\n      lastStyle: null,\n      blocks: []\n    };\n  },\n\n  token: function (stream, state) {\n    var style = state.tokenize[state.tokenize.length - 1](stream, state);\n    var token = stream.current();\n\n    if (style && style != \"comment\") {\n      state.lastToken = token;\n      state.lastStyle = style;\n    }\n\n    return style;\n  },\n\n  indent: function (state, textAfter, cx) {\n    textAfter = textAfter.replace(/^\\s*(?:\\{%)?\\s*|\\s*(?:%\\})?\\s*$/g, \"\");\n\n    if (dedentKeywords.test(textAfter) || dedentPunctuals.test(textAfter)) {\n      return cx.unit * (state.currentIndent - 1);\n    }\n\n    return cx.unit * state.currentIndent;\n  },\n\n  languageData: {\n    indentOnInput: wordRegExp(dedentPunctualsArray.concat(dedentKeywordsArray), true),\n    commentTokens: {line: \"#\"}\n  }\n};\n","var wordRegexp = function(words) {\n  return new RegExp(\"^(?:\" + words.join(\"|\") + \")$\", \"i\");\n};\n\nvar tokenBase = function(stream/*, state*/) {\n  curPunc = null;\n  var ch = stream.next();\n  if (ch ==='\"') {\n    stream.match(/^.*?\"/);\n    return \"string\";\n  }\n  if (ch === \"'\") {\n    stream.match(/^.*?'/);\n    return \"string\";\n  }\n  if (/[{}\\(\\),\\.;\\[\\]]/.test(ch)) {\n    curPunc = ch;\n    return \"punctuation\";\n  } else if (ch === \"/\" && stream.eat(\"/\")) {\n    stream.skipToEnd();\n    return \"comment\";\n  } else if (operatorChars.test(ch)) {\n    stream.eatWhile(operatorChars);\n    return null;\n  } else {\n    stream.eatWhile(/[_\\w\\d]/);\n    if (stream.eat(\":\")) {\n      stream.eatWhile(/[\\w\\d_\\-]/);\n      return \"atom\";\n    }\n    var word = stream.current();\n    if (funcs.test(word)) return \"builtin\";\n    if (preds.test(word)) return \"def\";\n    if (keywords.test(word) || systemKeywords.test(word)) return \"keyword\";\n    return \"variable\";\n  }\n};\nvar pushContext = function(state, type, col) {\n  return state.context = {\n    prev: state.context,\n    indent: state.indent,\n    col: col,\n    type: type\n  };\n};\nvar popContext = function(state) {\n  state.indent = state.context.indent;\n  return state.context = state.context.prev;\n};\nvar curPunc;\nvar funcs = wordRegexp([\"abs\", \"acos\", \"allShortestPaths\", \"asin\", \"atan\", \"atan2\", \"avg\", \"ceil\", \"coalesce\", \"collect\", \"cos\", \"cot\", \"count\", \"degrees\", \"e\", \"endnode\", \"exp\", \"extract\", \"filter\", \"floor\", \"haversin\", \"head\", \"id\", \"keys\", \"labels\", \"last\", \"left\", \"length\", \"log\", \"log10\", \"lower\", \"ltrim\", \"max\", \"min\", \"node\", \"nodes\", \"percentileCont\", \"percentileDisc\", \"pi\", \"radians\", \"rand\", \"range\", \"reduce\", \"rel\", \"relationship\", \"relationships\", \"replace\", \"reverse\", \"right\", \"round\", \"rtrim\", \"shortestPath\", \"sign\", \"sin\", \"size\", \"split\", \"sqrt\", \"startnode\", \"stdev\", \"stdevp\", \"str\", \"substring\", \"sum\", \"tail\", \"tan\", \"timestamp\", \"toFloat\", \"toInt\", \"toString\", \"trim\", \"type\", \"upper\"]);\nvar preds = wordRegexp([\"all\", \"and\", \"any\", \"contains\", \"exists\", \"has\", \"in\", \"none\", \"not\", \"or\", \"single\", \"xor\"]);\nvar keywords = wordRegexp([\"as\", \"asc\", \"ascending\", \"assert\", \"by\", \"case\", \"commit\", \"constraint\", \"create\", \"csv\", \"cypher\", \"delete\", \"desc\", \"descending\", \"detach\", \"distinct\", \"drop\", \"else\", \"end\", \"ends\", \"explain\", \"false\", \"fieldterminator\", \"foreach\", \"from\", \"headers\", \"in\", \"index\", \"is\", \"join\", \"limit\", \"load\", \"match\", \"merge\", \"null\", \"on\", \"optional\", \"order\", \"periodic\", \"profile\", \"remove\", \"return\", \"scan\", \"set\", \"skip\", \"start\", \"starts\", \"then\", \"true\", \"union\", \"unique\", \"unwind\", \"using\", \"when\", \"where\", \"with\", \"call\", \"yield\"]);\nvar systemKeywords = wordRegexp([\"access\", \"active\", \"assign\", \"all\", \"alter\", \"as\", \"catalog\", \"change\", \"copy\", \"create\", \"constraint\", \"constraints\", \"current\", \"database\", \"databases\", \"dbms\", \"default\", \"deny\", \"drop\", \"element\", \"elements\", \"exists\", \"from\", \"grant\", \"graph\", \"graphs\", \"if\", \"index\", \"indexes\", \"label\", \"labels\", \"management\", \"match\", \"name\", \"names\", \"new\", \"node\", \"nodes\", \"not\", \"of\", \"on\", \"or\", \"password\", \"populated\", \"privileges\", \"property\", \"read\", \"relationship\", \"relationships\", \"remove\", \"replace\", \"required\", \"revoke\", \"role\", \"roles\", \"set\", \"show\", \"start\", \"status\", \"stop\", \"suspended\", \"to\", \"traverse\", \"type\", \"types\", \"user\", \"users\", \"with\", \"write\"]);\nvar operatorChars = /[*+\\-<>=&|~%^]/;\n\nexport const cypher = {\n  name: \"cypher\",\n  startState: function() {\n    return {\n      tokenize: tokenBase,\n      context: null,\n      indent: 0,\n      col: 0\n    };\n  },\n  token: function(stream, state) {\n    if (stream.sol()) {\n      if (state.context && (state.context.align == null)) {\n        state.context.align = false;\n      }\n      state.indent = stream.indentation();\n    }\n    if (stream.eatSpace()) {\n      return null;\n    }\n    var style = state.tokenize(stream, state);\n    if (style !== \"comment\" && state.context && (state.context.align == null) && state.context.type !== \"pattern\") {\n      state.context.align = true;\n    }\n    if (curPunc === \"(\") {\n      pushContext(state, \")\", stream.column());\n    } else if (curPunc === \"[\") {\n      pushContext(state, \"]\", stream.column());\n    } else if (curPunc === \"{\") {\n      pushContext(state, \"}\", stream.column());\n    } else if (/[\\]\\}\\)]/.test(curPunc)) {\n      while (state.context && state.context.type === \"pattern\") {\n        popContext(state);\n      }\n      if (state.context && curPunc === state.context.type) {\n        popContext(state);\n      }\n    } else if (curPunc === \".\" && state.context && state.context.type === \"pattern\") {\n      popContext(state);\n    } else if (/atom|string|variable/.test(style) && state.context) {\n      if (/[\\}\\]]/.test(state.context.type)) {\n        pushContext(state, \"pattern\", stream.column());\n      } else if (state.context.type === \"pattern\" && !state.context.align) {\n        state.context.align = true;\n        state.context.col = stream.column();\n      }\n    }\n    return style;\n  },\n  indent: function(state, textAfter, cx) {\n    var firstChar = textAfter && textAfter.charAt(0);\n    var context = state.context;\n    if (/[\\]\\}]/.test(firstChar)) {\n      while (context && context.type === \"pattern\") {\n        context = context.prev;\n      }\n    }\n    var closing = context && firstChar === context.type;\n    if (!context) return 0;\n    if (context.type === \"keywords\") return null\n    if (context.align) return context.col + (closing ? 0 : 1);\n    return context.indent + (closing ? 0 : cx.unit);\n  }\n};\n","function words(str) {\n  var obj = {}, words = str.split(\" \");\n  for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n  return obj;\n}\n\nvar blockKeywordsStr = \"body catch class do else enum for foreach foreach_reverse if in interface mixin \" +\n    \"out scope struct switch try union unittest version while with\";\n\nconst parserConfig = {\n  keywords: words(\"abstract alias align asm assert auto break case cast cdouble cent cfloat const continue \" +\n                  \"debug default delegate delete deprecated export extern final finally function goto immutable \" +\n                  \"import inout invariant is lazy macro module new nothrow override package pragma private \" +\n                  \"protected public pure ref return shared short static super synchronized template this \" +\n                  \"throw typedef typeid typeof volatile __FILE__ __LINE__ __gshared __traits __vector __parameters \" +\n                  blockKeywordsStr),\n  blockKeywords: words(blockKeywordsStr),\n  builtin: words(\"bool byte char creal dchar double float idouble ifloat int ireal long real short ubyte \" +\n                 \"ucent uint ulong ushort wchar wstring void size_t sizediff_t\"),\n  atoms: words(\"exit failure success true false null\"),\n  hooks: {\n    \"@\": function(stream, _state) {\n      stream.eatWhile(/[\\w\\$_]/);\n      return \"meta\";\n    }\n  }\n}\n\nvar statementIndentUnit = parserConfig.statementIndentUnit,\n    keywords = parserConfig.keywords,\n    builtin = parserConfig.builtin,\n    blockKeywords = parserConfig.blockKeywords,\n    atoms = parserConfig.atoms,\n    hooks = parserConfig.hooks,\n    multiLineStrings = parserConfig.multiLineStrings;\nvar isOperatorChar = /[+\\-*&%=<>!?|\\/]/;\n\nvar curPunc;\n\nfunction tokenBase(stream, state) {\n  var ch = stream.next();\n  if (hooks[ch]) {\n    var result = hooks[ch](stream, state);\n    if (result !== false) return result;\n  }\n  if (ch == '\"' || ch == \"'\" || ch == \"`\") {\n    state.tokenize = tokenString(ch);\n    return state.tokenize(stream, state);\n  }\n  if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n    curPunc = ch;\n    return null;\n  }\n  if (/\\d/.test(ch)) {\n    stream.eatWhile(/[\\w\\.]/);\n    return \"number\";\n  }\n  if (ch == \"/\") {\n    if (stream.eat(\"+\")) {\n      state.tokenize = tokenNestedComment;\n      return tokenNestedComment(stream, state);\n    }\n    if (stream.eat(\"*\")) {\n      state.tokenize = tokenComment;\n      return tokenComment(stream, state);\n    }\n    if (stream.eat(\"/\")) {\n      stream.skipToEnd();\n      return \"comment\";\n    }\n  }\n  if (isOperatorChar.test(ch)) {\n    stream.eatWhile(isOperatorChar);\n    return \"operator\";\n  }\n  stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n  var cur = stream.current();\n  if (keywords.propertyIsEnumerable(cur)) {\n    if (blockKeywords.propertyIsEnumerable(cur)) curPunc = \"newstatement\";\n    return \"keyword\";\n  }\n  if (builtin.propertyIsEnumerable(cur)) {\n    if (blockKeywords.propertyIsEnumerable(cur)) curPunc = \"newstatement\";\n    return \"builtin\";\n  }\n  if (atoms.propertyIsEnumerable(cur)) return \"atom\";\n  return \"variable\";\n}\n\nfunction tokenString(quote) {\n  return function(stream, state) {\n    var escaped = false, next, end = false;\n    while ((next = stream.next()) != null) {\n      if (next == quote && !escaped) {end = true; break;}\n      escaped = !escaped && next == \"\\\\\";\n    }\n    if (end || !(escaped || multiLineStrings))\n      state.tokenize = null;\n    return \"string\";\n  };\n}\n\nfunction tokenComment(stream, state) {\n  var maybeEnd = false, ch;\n  while (ch = stream.next()) {\n    if (ch == \"/\" && maybeEnd) {\n      state.tokenize = null;\n      break;\n    }\n    maybeEnd = (ch == \"*\");\n  }\n  return \"comment\";\n}\n\nfunction tokenNestedComment(stream, state) {\n  var maybeEnd = false, ch;\n  while (ch = stream.next()) {\n    if (ch == \"/\" && maybeEnd) {\n      state.tokenize = null;\n      break;\n    }\n    maybeEnd = (ch == \"+\");\n  }\n  return \"comment\";\n}\n\nfunction Context(indented, column, type, align, prev) {\n  this.indented = indented;\n  this.column = column;\n  this.type = type;\n  this.align = align;\n  this.prev = prev;\n}\nfunction pushContext(state, col, type) {\n  var indent = state.indented;\n  if (state.context && state.context.type == \"statement\")\n    indent = state.context.indented;\n  return state.context = new Context(indent, col, type, null, state.context);\n}\nfunction popContext(state) {\n  var t = state.context.type;\n  if (t == \")\" || t == \"]\" || t == \"}\")\n    state.indented = state.context.indented;\n  return state.context = state.context.prev;\n}\n\n// Interface\n\nexport const d = {\n  name: \"d\",\n  startState: function(indentUnit) {\n    return {\n      tokenize: null,\n      context: new Context(-indentUnit, 0, \"top\", false),\n      indented: 0,\n      startOfLine: true\n    };\n  },\n\n  token: function(stream, state) {\n    var ctx = state.context;\n    if (stream.sol()) {\n      if (ctx.align == null) ctx.align = false;\n      state.indented = stream.indentation();\n      state.startOfLine = true;\n    }\n    if (stream.eatSpace()) return null;\n    curPunc = null;\n    var style = (state.tokenize || tokenBase)(stream, state);\n    if (style == \"comment\" || style == \"meta\") return style;\n    if (ctx.align == null) ctx.align = true;\n\n    if ((curPunc == \";\" || curPunc == \":\" || curPunc == \",\") && ctx.type == \"statement\") popContext(state);\n    else if (curPunc == \"{\") pushContext(state, stream.column(), \"}\");\n    else if (curPunc == \"[\") pushContext(state, stream.column(), \"]\");\n    else if (curPunc == \"(\") pushContext(state, stream.column(), \")\");\n    else if (curPunc == \"}\") {\n      while (ctx.type == \"statement\") ctx = popContext(state);\n      if (ctx.type == \"}\") ctx = popContext(state);\n      while (ctx.type == \"statement\") ctx = popContext(state);\n    }\n    else if (curPunc == ctx.type) popContext(state);\n    else if (((ctx.type == \"}\" || ctx.type == \"top\") && curPunc != ';') || (ctx.type == \"statement\" && curPunc == \"newstatement\"))\n      pushContext(state, stream.column(), \"statement\");\n    state.startOfLine = false;\n    return style;\n  },\n\n  indent: function(state, textAfter, cx) {\n    if (state.tokenize != tokenBase && state.tokenize != null) return null;\n    var ctx = state.context, firstChar = textAfter && textAfter.charAt(0);\n    if (ctx.type == \"statement\" && firstChar == \"}\") ctx = ctx.prev;\n    var closing = firstChar == ctx.type;\n    if (ctx.type == \"statement\") return ctx.indented + (firstChar == \"{\" ? 0 : statementIndentUnit || cx.unit);\n    else if (ctx.align) return ctx.column + (closing ? 0 : 1);\n    else return ctx.indented + (closing ? 0 : cx.unit);\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*[{}]$/,\n    commentTokens: {line: \"//\", block: {open: \"/*\", close: \"*/\"}}\n  }\n};\n","var TOKEN_NAMES = {\n  '+': 'inserted',\n  '-': 'deleted',\n  '@': 'meta'\n};\n\nexport const diff = {\n  name: \"diff\",\n  token: function(stream) {\n    var tw_pos = stream.string.search(/[\\t ]+?$/);\n\n    if (!stream.sol() || tw_pos === 0) {\n      stream.skipToEnd();\n      return (\"error \" + (\n        TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, '');\n    }\n\n    var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd();\n\n    if (tw_pos === -1) {\n      stream.skipToEnd();\n    } else {\n      stream.pos = tw_pos;\n    }\n\n    return token_name;\n  }\n};\n\n","export function simpleMode(states) {\n  ensureState(states, \"start\");\n  var states_ = {}, meta = states.languageData || {}, hasIndentation = false;\n  for (var state in states) if (state != meta && states.hasOwnProperty(state)) {\n    var list = states_[state] = [], orig = states[state];\n    for (var i = 0; i < orig.length; i++) {\n      var data = orig[i];\n      list.push(new Rule(data, states));\n      if (data.indent || data.dedent) hasIndentation = true;\n    }\n  }\n  return {\n    name: meta.name,\n    startState: function() {\n      return {state: \"start\", pending: null, indent: hasIndentation ? [] : null};\n    },\n    copyState: function(state) {\n      var s = {state: state.state, pending: state.pending, indent: state.indent && state.indent.slice(0)};\n      if (state.stack)\n        s.stack = state.stack.slice(0);\n      return s;\n    },\n    token: tokenFunction(states_),\n    indent: indentFunction(states_, meta),\n    mergeTokens: meta.mergeTokens,\n    languageData: meta\n  }\n};\n\nfunction ensureState(states, name) {\n  if (!states.hasOwnProperty(name))\n    throw new Error(\"Undefined state \" + name + \" in simple mode\");\n}\n\nfunction toRegex(val, caret) {\n  if (!val) return /(?:)/;\n  var flags = \"\";\n  if (val instanceof RegExp) {\n    if (val.ignoreCase) flags = \"i\";\n    if (val.unicode) flags += \"u\";\n    val = val.source;\n  } else {\n    val = String(val);\n  }\n  return new RegExp((caret === false ? \"\" : \"^\") + \"(?:\" + val + \")\", flags);\n}\n\nfunction asToken(val) {\n  if (!val) return null;\n  if (val.apply) return val\n  if (typeof val == \"string\") return val.replace(/\\./g, \" \");\n  var result = [];\n  for (var i = 0; i < val.length; i++)\n    result.push(val[i] && val[i].replace(/\\./g, \" \"));\n  return result;\n}\n\nfunction Rule(data, states) {\n  if (data.next || data.push) ensureState(states, data.next || data.push);\n  this.regex = toRegex(data.regex);\n  this.token = asToken(data.token);\n  this.data = data;\n}\n\nfunction tokenFunction(states) {\n  return function(stream, state) {\n    if (state.pending) {\n      var pend = state.pending.shift();\n      if (state.pending.length == 0) state.pending = null;\n      stream.pos += pend.text.length;\n      return pend.token;\n    }\n\n    var curState = states[state.state];\n    for (var i = 0; i < curState.length; i++) {\n      var rule = curState[i];\n      var matches = (!rule.data.sol || stream.sol()) && stream.match(rule.regex);\n      if (matches) {\n        if (rule.data.next) {\n          state.state = rule.data.next;\n        } else if (rule.data.push) {\n          (state.stack || (state.stack = [])).push(state.state);\n          state.state = rule.data.push;\n        } else if (rule.data.pop && state.stack && state.stack.length) {\n          state.state = state.stack.pop();\n        }\n\n        if (rule.data.indent)\n          state.indent.push(stream.indentation() + stream.indentUnit);\n        if (rule.data.dedent)\n          state.indent.pop();\n        var token = rule.token\n        if (token && token.apply) token = token(matches)\n        if (matches.length > 2 && rule.token && typeof rule.token != \"string\") {\n          state.pending = [];\n          for (var j = 2; j < matches.length; j++)\n            if (matches[j])\n              state.pending.push({text: matches[j], token: rule.token[j - 1]});\n          stream.backUp(matches[0].length - (matches[1] ? matches[1].length : 0));\n          return token[0];\n        } else if (token && token.join) {\n          return token[0];\n        } else {\n          return token;\n        }\n      }\n    }\n    stream.next();\n    return null;\n  };\n}\n\nfunction indentFunction(states, meta) {\n  return function(state, textAfter) {\n    if (state.indent == null || meta.dontIndentStates && meta.dontIndentStates.indexOf(state.state) > -1)\n      return null\n\n    var pos = state.indent.length - 1, rules = states[state.state];\n    scan: for (;;) {\n      for (var i = 0; i < rules.length; i++) {\n        var rule = rules[i];\n        if (rule.data.dedent && rule.data.dedentIfLineStart !== false) {\n          var m = rule.regex.exec(textAfter);\n          if (m && m[0]) {\n            pos--;\n            if (rule.next || rule.push) rules = states[rule.next || rule.push];\n            textAfter = textAfter.slice(m[0].length);\n            continue scan;\n          }\n        }\n      }\n      break;\n    }\n    return pos < 0 ? 0 : state.indent[pos];\n  };\n}\n","import {simpleMode} from \"./simple-mode.js\"\n\nvar from = \"from\";\nvar fromRegex = new RegExp(\"^(\\\\s*)\\\\b(\" + from + \")\\\\b\", \"i\");\n\nvar shells = [\"run\", \"cmd\", \"entrypoint\", \"shell\"];\nvar shellsAsArrayRegex = new RegExp(\"^(\\\\s*)(\" + shells.join('|') + \")(\\\\s+\\\\[)\", \"i\");\n\nvar expose = \"expose\";\nvar exposeRegex = new RegExp(\"^(\\\\s*)(\" + expose + \")(\\\\s+)\", \"i\");\n\nvar others = [\n  \"arg\", \"from\", \"maintainer\", \"label\", \"env\",\n  \"add\", \"copy\", \"volume\", \"user\",\n  \"workdir\", \"onbuild\", \"stopsignal\", \"healthcheck\", \"shell\"\n];\n\n// Collect all Dockerfile directives\nvar instructions = [from, expose].concat(shells).concat(others),\n    instructionRegex = \"(\" + instructions.join('|') + \")\",\n    instructionOnlyLine = new RegExp(\"^(\\\\s*)\" + instructionRegex + \"(\\\\s*)(#.*)?$\", \"i\"),\n    instructionWithArguments = new RegExp(\"^(\\\\s*)\" + instructionRegex + \"(\\\\s+)\", \"i\");\n\nexport const dockerFile = simpleMode({\n  start: [\n    // Block comment: This is a line starting with a comment\n    {\n      regex: /^\\s*#.*$/,\n      sol: true,\n      token: \"comment\"\n    },\n    {\n      regex: fromRegex,\n      token: [null, \"keyword\"],\n      sol: true,\n      next: \"from\"\n    },\n    // Highlight an instruction without any arguments (for convenience)\n    {\n      regex: instructionOnlyLine,\n      token: [null, \"keyword\", null, \"error\"],\n      sol: true\n    },\n    {\n      regex: shellsAsArrayRegex,\n      token: [null, \"keyword\", null],\n      sol: true,\n      next: \"array\"\n    },\n    {\n      regex: exposeRegex,\n      token: [null, \"keyword\", null],\n      sol: true,\n      next: \"expose\"\n    },\n    // Highlight an instruction followed by arguments\n    {\n      regex: instructionWithArguments,\n      token: [null, \"keyword\", null],\n      sol: true,\n      next: \"arguments\"\n    },\n    {\n      regex: /./,\n      token: null\n    }\n  ],\n  from: [\n    {\n      regex: /\\s*$/,\n      token: null,\n      next: \"start\"\n    },\n    {\n      // Line comment without instruction arguments is an error\n      regex: /(\\s*)(#.*)$/,\n      token: [null, \"error\"],\n      next: \"start\"\n    },\n    {\n      regex: /(\\s*\\S+\\s+)(as)/i,\n      token: [null, \"keyword\"],\n      next: \"start\"\n    },\n    // Fail safe return to start\n    {\n      token: null,\n      next: \"start\"\n    }\n  ],\n  single: [\n    {\n      regex: /(?:[^\\\\']|\\\\.)/,\n      token: \"string\"\n    },\n    {\n      regex: /'/,\n      token: \"string\",\n      pop: true\n    }\n  ],\n  double: [\n    {\n      regex: /(?:[^\\\\\"]|\\\\.)/,\n      token: \"string\"\n    },\n    {\n      regex: /\"/,\n      token: \"string\",\n      pop: true\n    }\n  ],\n  array: [\n    {\n      regex: /\\]/,\n      token: null,\n      next: \"start\"\n    },\n    {\n      regex: /\"(?:[^\\\\\"]|\\\\.)*\"?/,\n      token: \"string\"\n    }\n  ],\n  expose: [\n    {\n      regex: /\\d+$/,\n      token: \"number\",\n      next: \"start\"\n    },\n    {\n      regex: /[^\\d]+$/,\n      token: null,\n      next: \"start\"\n    },\n    {\n      regex: /\\d+/,\n      token: \"number\"\n    },\n    {\n      regex: /[^\\d]+/,\n      token: null\n    },\n    // Fail safe return to start\n    {\n      token: null,\n      next: \"start\"\n    }\n  ],\n  arguments: [\n    {\n      regex: /^\\s*#.*$/,\n      sol: true,\n      token: \"comment\"\n    },\n    {\n      regex: /\"(?:[^\\\\\"]|\\\\.)*\"?$/,\n      token: \"string\",\n      next: \"start\"\n    },\n    {\n      regex: /\"/,\n      token: \"string\",\n      push: \"double\"\n    },\n    {\n      regex: /'(?:[^\\\\']|\\\\.)*'?$/,\n      token: \"string\",\n      next: \"start\"\n    },\n    {\n      regex: /'/,\n      token: \"string\",\n      push: \"single\"\n    },\n    {\n      regex: /[^#\"']+[\\\\`]$/,\n      token: null\n    },\n    {\n      regex: /[^#\"']+$/,\n      token: null,\n      next: \"start\"\n    },\n    {\n      regex: /[^#\"']+/,\n      token: null\n    },\n    // Fail safe return to start\n    {\n      token: null,\n      next: \"start\"\n    }\n  ],\n  languageData: {\n    commentTokens: {line: \"#\"}\n  }\n});\n\n","var type;\nfunction ret(style, tp) {type = tp; return style;}\n\nfunction tokenBase(stream, state) {\n  var ch = stream.next();\n\n  if (ch == \"<\" && stream.eat(\"!\") ) {\n    if (stream.eatWhile(/[\\-]/)) {\n      state.tokenize = tokenSGMLComment;\n      return tokenSGMLComment(stream, state);\n    } else if (stream.eatWhile(/[\\w]/)) return ret(\"keyword\", \"doindent\");\n  } else if (ch == \"<\" && stream.eat(\"?\")) { //xml declaration\n    state.tokenize = inBlock(\"meta\", \"?>\");\n    return ret(\"meta\", ch);\n  } else if (ch == \"#\" && stream.eatWhile(/[\\w]/)) return ret(\"atom\", \"tag\");\n  else if (ch == \"|\") return ret(\"keyword\", \"separator\");\n  else if (ch.match(/[\\(\\)\\[\\]\\-\\.,\\+\\?>]/)) return ret(null, ch);//if(ch === \">\") return ret(null, \"endtag\"); else\n  else if (ch.match(/[\\[\\]]/)) return ret(\"rule\", ch);\n  else if (ch == \"\\\"\" || ch == \"'\") {\n    state.tokenize = tokenString(ch);\n    return state.tokenize(stream, state);\n  } else if (stream.eatWhile(/[a-zA-Z\\?\\+\\d]/)) {\n    var sc = stream.current();\n    if( sc.substr(sc.length-1,sc.length).match(/\\?|\\+/) !== null )stream.backUp(1);\n    return ret(\"tag\", \"tag\");\n  } else if (ch == \"%\" || ch == \"*\" ) return ret(\"number\", \"number\");\n  else {\n    stream.eatWhile(/[\\w\\\\\\-_%.{,]/);\n    return ret(null, null);\n  }\n}\n\nfunction tokenSGMLComment(stream, state) {\n  var dashes = 0, ch;\n  while ((ch = stream.next()) != null) {\n    if (dashes >= 2 && ch == \">\") {\n      state.tokenize = tokenBase;\n      break;\n    }\n    dashes = (ch == \"-\") ? dashes + 1 : 0;\n  }\n  return ret(\"comment\", \"comment\");\n}\n\nfunction tokenString(quote) {\n  return function(stream, state) {\n    var escaped = false, ch;\n    while ((ch = stream.next()) != null) {\n      if (ch == quote && !escaped) {\n        state.tokenize = tokenBase;\n        break;\n      }\n      escaped = !escaped && ch == \"\\\\\";\n    }\n    return ret(\"string\", \"tag\");\n  };\n}\n\nfunction inBlock(style, terminator) {\n  return function(stream, state) {\n    while (!stream.eol()) {\n      if (stream.match(terminator)) {\n        state.tokenize = tokenBase;\n        break;\n      }\n      stream.next();\n    }\n    return style;\n  };\n}\n\nexport const dtd = {\n  name: \"dtd\",\n  startState: function() {\n    return {tokenize: tokenBase,\n            baseIndent: 0,\n            stack: []};\n  },\n\n  token: function(stream, state) {\n    if (stream.eatSpace()) return null;\n    var style = state.tokenize(stream, state);\n\n    var context = state.stack[state.stack.length-1];\n    if (stream.current() == \"[\" || type === \"doindent\" || type == \"[\") state.stack.push(\"rule\");\n    else if (type === \"endtag\") state.stack[state.stack.length-1] = \"endtag\";\n    else if (stream.current() == \"]\" || type == \"]\" || (type == \">\" && context == \"rule\")) state.stack.pop();\n    else if (type == \"[\") state.stack.push(\"[\");\n    return style;\n  },\n\n  indent: function(state, textAfter, cx) {\n    var n = state.stack.length;\n\n    if( textAfter.charAt(0) === ']' )n--;\n    else if(textAfter.substr(textAfter.length-1, textAfter.length) === \">\"){\n      if(textAfter.substr(0,1) === \"<\") {}\n      else if( type == \"doindent\" && textAfter.length > 1 ) {}\n      else if( type == \"doindent\")n--;\n      else if( type == \">\" && textAfter.length > 1) {}\n      else if( type == \"tag\" && textAfter !== \">\") {}\n      else if( type == \"tag\" && state.stack[state.stack.length-1] == \"rule\")n--;\n      else if( type == \"tag\")n++;\n      else if( textAfter === \">\" && state.stack[state.stack.length-1] == \"rule\" && type === \">\")n--;\n      else if( textAfter === \">\" && state.stack[state.stack.length-1] == \"rule\") {}\n      else if( textAfter.substr(0,1) !== \"<\" && textAfter.substr(0,1) === \">\" )n=n-1;\n      else if( textAfter === \">\") {}\n      else n=n-1;\n      //over rule them all\n      if(type == null || type == \"]\")n--;\n    }\n\n    return state.baseIndent + n * cx.unit;\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*[\\]>]$/\n  }\n};\n\n","function forEach(arr, f) {\n  for (var i = 0; i < arr.length; i++) f(arr[i], i)\n}\nfunction some(arr, f) {\n  for (var i = 0; i < arr.length; i++) if (f(arr[i], i)) return true\n  return false\n}\n\n// Words\nvar words = {\n  // Words that introduce unnamed definitions like \"define interface\"\n  unnamedDefinition: [\"interface\"],\n\n  // Words that introduce simple named definitions like \"define library\"\n  namedDefinition: [\"module\", \"library\", \"macro\",\n                    \"C-struct\", \"C-union\",\n                    \"C-function\", \"C-callable-wrapper\"\n                   ],\n\n  // Words that introduce type definitions like \"define class\".\n  // These are also parameterized like \"define method\" and are\n  // appended to otherParameterizedDefinitionWords\n  typeParameterizedDefinition: [\"class\", \"C-subtype\", \"C-mapped-subtype\"],\n\n  // Words that introduce trickier definitions like \"define method\".\n  // These require special definitions to be added to startExpressions\n  otherParameterizedDefinition: [\"method\", \"function\",\n                                 \"C-variable\", \"C-address\"\n                                ],\n\n  // Words that introduce module constant definitions.\n  // These must also be simple definitions and are\n  // appended to otherSimpleDefinitionWords\n  constantSimpleDefinition: [\"constant\"],\n\n  // Words that introduce module variable definitions.\n  // These must also be simple definitions and are\n  // appended to otherSimpleDefinitionWords\n  variableSimpleDefinition: [\"variable\"],\n\n  // Other words that introduce simple definitions\n  // (without implicit bodies).\n  otherSimpleDefinition: [\"generic\", \"domain\",\n                          \"C-pointer-type\",\n                          \"table\"\n                         ],\n\n  // Words that begin statements with implicit bodies.\n  statement: [\"if\", \"block\", \"begin\", \"method\", \"case\",\n              \"for\", \"select\", \"when\", \"unless\", \"until\",\n              \"while\", \"iterate\", \"profiling\", \"dynamic-bind\"\n             ],\n\n  // Patterns that act as separators in compound statements.\n  // This may include any general pattern that must be indented\n  // specially.\n  separator: [\"finally\", \"exception\", \"cleanup\", \"else\",\n              \"elseif\", \"afterwards\"\n             ],\n\n  // Keywords that do not require special indentation handling,\n  // but which should be highlighted\n  other: [\"above\", \"below\", \"by\", \"from\", \"handler\", \"in\",\n          \"instance\", \"let\", \"local\", \"otherwise\", \"slot\",\n          \"subclass\", \"then\", \"to\", \"keyed-by\", \"virtual\"\n         ],\n\n  // Condition signaling function calls\n  signalingCalls: [\"signal\", \"error\", \"cerror\",\n                   \"break\", \"check-type\", \"abort\"\n                  ]\n};\n\nwords[\"otherDefinition\"] =\n  words[\"unnamedDefinition\"]\n  .concat(words[\"namedDefinition\"])\n  .concat(words[\"otherParameterizedDefinition\"]);\n\nwords[\"definition\"] =\n  words[\"typeParameterizedDefinition\"]\n  .concat(words[\"otherDefinition\"]);\n\nwords[\"parameterizedDefinition\"] =\n  words[\"typeParameterizedDefinition\"]\n  .concat(words[\"otherParameterizedDefinition\"]);\n\nwords[\"simpleDefinition\"] =\n  words[\"constantSimpleDefinition\"]\n  .concat(words[\"variableSimpleDefinition\"])\n  .concat(words[\"otherSimpleDefinition\"]);\n\nwords[\"keyword\"] =\n  words[\"statement\"]\n  .concat(words[\"separator\"])\n  .concat(words[\"other\"]);\n\n// Patterns\nvar symbolPattern = \"[-_a-zA-Z?!*@<>$%]+\";\nvar symbol = new RegExp(\"^\" + symbolPattern);\nvar patterns = {\n  // Symbols with special syntax\n  symbolKeyword: symbolPattern + \":\",\n  symbolClass: \"<\" + symbolPattern + \">\",\n  symbolGlobal: \"\\\\*\" + symbolPattern + \"\\\\*\",\n  symbolConstant: \"\\\\$\" + symbolPattern\n};\nvar patternStyles = {\n  symbolKeyword: \"atom\",\n  symbolClass: \"tag\",\n  symbolGlobal: \"variableName.standard\",\n  symbolConstant: \"variableName.constant\"\n};\n\n// Compile all patterns to regular expressions\nfor (var patternName in patterns)\n  if (patterns.hasOwnProperty(patternName))\n    patterns[patternName] = new RegExp(\"^\" + patterns[patternName]);\n\n// Names beginning \"with-\" and \"without-\" are commonly\n// used as statement macro\npatterns[\"keyword\"] = [/^with(?:out)?-[-_a-zA-Z?!*@<>$%]+/];\n\nvar styles = {};\nstyles[\"keyword\"] = \"keyword\";\nstyles[\"definition\"] = \"def\";\nstyles[\"simpleDefinition\"] = \"def\";\nstyles[\"signalingCalls\"] = \"builtin\";\n\n// protected words lookup table\nvar wordLookup = {};\nvar styleLookup = {};\n\nforEach([\n  \"keyword\",\n  \"definition\",\n  \"simpleDefinition\",\n  \"signalingCalls\"\n], function(type) {\n  forEach(words[type], function(word) {\n    wordLookup[word] = type;\n    styleLookup[word] = styles[type];\n  });\n});\n\n\nfunction chain(stream, state, f) {\n  state.tokenize = f;\n  return f(stream, state);\n}\n\nfunction tokenBase(stream, state) {\n  // String\n  var ch = stream.peek();\n  if (ch == \"'\" || ch == '\"') {\n    stream.next();\n    return chain(stream, state, tokenString(ch, \"string\"));\n  }\n  // Comment\n  else if (ch == \"/\") {\n    stream.next();\n    if (stream.eat(\"*\")) {\n      return chain(stream, state, tokenComment);\n    } else if (stream.eat(\"/\")) {\n      stream.skipToEnd();\n      return \"comment\";\n    }\n    stream.backUp(1);\n  }\n  // Decimal\n  else if (/[+\\-\\d\\.]/.test(ch)) {\n    if (stream.match(/^[+-]?[0-9]*\\.[0-9]*([esdx][+-]?[0-9]+)?/i) ||\n        stream.match(/^[+-]?[0-9]+([esdx][+-]?[0-9]+)/i) ||\n        stream.match(/^[+-]?\\d+/)) {\n      return \"number\";\n    }\n  }\n  // Hash\n  else if (ch == \"#\") {\n    stream.next();\n    // Symbol with string syntax\n    ch = stream.peek();\n    if (ch == '\"') {\n      stream.next();\n      return chain(stream, state, tokenString('\"', \"string\"));\n    }\n    // Binary number\n    else if (ch == \"b\") {\n      stream.next();\n      stream.eatWhile(/[01]/);\n      return \"number\";\n    }\n    // Hex number\n    else if (ch == \"x\") {\n      stream.next();\n      stream.eatWhile(/[\\da-f]/i);\n      return \"number\";\n    }\n    // Octal number\n    else if (ch == \"o\") {\n      stream.next();\n      stream.eatWhile(/[0-7]/);\n      return \"number\";\n    }\n    // Token concatenation in macros\n    else if (ch == '#') {\n      stream.next();\n      return \"punctuation\";\n    }\n    // Sequence literals\n    else if ((ch == '[') || (ch == '(')) {\n      stream.next();\n      return \"bracket\";\n      // Hash symbol\n    } else if (stream.match(/f|t|all-keys|include|key|next|rest/i)) {\n      return \"atom\";\n    } else {\n      stream.eatWhile(/[-a-zA-Z]/);\n      return \"error\";\n    }\n  } else if (ch == \"~\") {\n    stream.next();\n    ch = stream.peek();\n    if (ch == \"=\") {\n      stream.next();\n      ch = stream.peek();\n      if (ch == \"=\") {\n        stream.next();\n        return \"operator\";\n      }\n      return \"operator\";\n    }\n    return \"operator\";\n  } else if (ch == \":\") {\n    stream.next();\n    ch = stream.peek();\n    if (ch == \"=\") {\n      stream.next();\n      return \"operator\";\n    } else if (ch == \":\") {\n      stream.next();\n      return \"punctuation\";\n    }\n  } else if (\"[](){}\".indexOf(ch) != -1) {\n    stream.next();\n    return \"bracket\";\n  } else if (\".,\".indexOf(ch) != -1) {\n    stream.next();\n    return \"punctuation\";\n  } else if (stream.match(\"end\")) {\n    return \"keyword\";\n  }\n  for (var name in patterns) {\n    if (patterns.hasOwnProperty(name)) {\n      var pattern = patterns[name];\n      if ((pattern instanceof Array && some(pattern, function(p) {\n        return stream.match(p);\n      })) || stream.match(pattern))\n        return patternStyles[name];\n    }\n  }\n  if (/[+\\-*\\/^=<>&|]/.test(ch)) {\n    stream.next();\n    return \"operator\";\n  }\n  if (stream.match(\"define\")) {\n    return \"def\";\n  } else {\n    stream.eatWhile(/[\\w\\-]/);\n    // Keyword\n    if (wordLookup.hasOwnProperty(stream.current())) {\n      return styleLookup[stream.current()];\n    } else if (stream.current().match(symbol)) {\n      return \"variable\";\n    } else {\n      stream.next();\n      return \"variableName.standard\";\n    }\n  }\n}\n\nfunction tokenComment(stream, state) {\n  var maybeEnd = false, maybeNested = false, nestedCount = 0, ch;\n  while ((ch = stream.next())) {\n    if (ch == \"/\" && maybeEnd) {\n      if (nestedCount > 0) {\n        nestedCount--;\n      } else {\n        state.tokenize = tokenBase;\n        break;\n      }\n    } else if (ch == \"*\" && maybeNested) {\n      nestedCount++;\n    }\n    maybeEnd = (ch == \"*\");\n    maybeNested = (ch == \"/\");\n  }\n  return \"comment\";\n}\n\nfunction tokenString(quote, style) {\n  return function(stream, state) {\n    var escaped = false, next, end = false;\n    while ((next = stream.next()) != null) {\n      if (next == quote && !escaped) {\n        end = true;\n        break;\n      }\n      escaped = !escaped && next == \"\\\\\";\n    }\n    if (end || !escaped) {\n      state.tokenize = tokenBase;\n    }\n    return style;\n  };\n}\n\n// Interface\nexport const dylan = {\n  name: \"dylan\",\n  startState: function() {\n    return {\n      tokenize: tokenBase,\n      currentIndent: 0\n    };\n  },\n  token: function(stream, state) {\n    if (stream.eatSpace())\n      return null;\n    var style = state.tokenize(stream, state);\n    return style;\n  },\n  languageData: {\n    commentTokens: {block: {open: \"/*\", close: \"*/\"}}\n  }\n};\n\n","var commentType = {slash: 0, parenthesis: 1};\nvar stateType = {comment: 0, _string: 1, characterClass: 2};\n\nexport const ebnf = {\n  name: \"ebnf\",\n  startState: function () {\n    return {\n      stringType: null,\n      commentType: null,\n      braced: 0,\n      lhs: true,\n      localState: null,\n      stack: [],\n      inDefinition: false\n    };\n  },\n  token: function (stream, state) {\n    if (!stream) return;\n\n    //check for state changes\n    if (state.stack.length === 0) {\n      //strings\n      if ((stream.peek() == '\"') || (stream.peek() == \"'\")) {\n        state.stringType = stream.peek();\n        stream.next(); // Skip quote\n        state.stack.unshift(stateType._string);\n      } else if (stream.match('/*')) { //comments starting with /*\n        state.stack.unshift(stateType.comment);\n        state.commentType = commentType.slash;\n      } else if (stream.match('(*')) { //comments starting with (*\n        state.stack.unshift(stateType.comment);\n        state.commentType = commentType.parenthesis;\n      }\n    }\n\n    //return state\n    //stack has\n    switch (state.stack[0]) {\n    case stateType._string:\n      while (state.stack[0] === stateType._string && !stream.eol()) {\n        if (stream.peek() === state.stringType) {\n          stream.next(); // Skip quote\n          state.stack.shift(); // Clear flag\n        } else if (stream.peek() === \"\\\\\") {\n          stream.next();\n          stream.next();\n        } else {\n          stream.match(/^.[^\\\\\\\"\\']*/);\n        }\n      }\n      return state.lhs ? \"property\" : \"string\"; // Token style\n\n    case stateType.comment:\n      while (state.stack[0] === stateType.comment && !stream.eol()) {\n        if (state.commentType === commentType.slash && stream.match('*/')) {\n          state.stack.shift(); // Clear flag\n          state.commentType = null;\n        } else if (state.commentType === commentType.parenthesis && stream.match('*)')) {\n          state.stack.shift(); // Clear flag\n          state.commentType = null;\n        } else {\n          stream.match(/^.[^\\*]*/);\n        }\n      }\n      return \"comment\";\n\n    case stateType.characterClass:\n      while (state.stack[0] === stateType.characterClass && !stream.eol()) {\n        if (!(stream.match(/^[^\\]\\\\]+/) || stream.match('.'))) {\n          state.stack.shift();\n        }\n      }\n      return \"operator\";\n    }\n\n    var peek = stream.peek();\n\n    //no stack\n    switch (peek) {\n    case \"[\":\n      stream.next();\n      state.stack.unshift(stateType.characterClass);\n      return \"bracket\";\n    case \":\":\n    case \"|\":\n    case \";\":\n      stream.next();\n      return \"operator\";\n    case \"%\":\n      if (stream.match(\"%%\")) {\n        return \"header\";\n      } else if (stream.match(/[%][A-Za-z]+/)) {\n        return \"keyword\";\n      } else if (stream.match(/[%][}]/)) {\n        return \"bracket\";\n      }\n      break;\n    case \"/\":\n      if (stream.match(/[\\/][A-Za-z]+/)) {\n        return \"keyword\";\n      }\n    case \"\\\\\":\n      if (stream.match(/[\\][a-z]+/)) {\n        return \"string.special\";\n      }\n    case \".\":\n      if (stream.match(\".\")) {\n        return \"atom\";\n      }\n    case \"*\":\n    case \"-\":\n    case \"+\":\n    case \"^\":\n      if (stream.match(peek)) {\n        return \"atom\";\n      }\n    case \"$\":\n      if (stream.match(\"$$\")) {\n        return \"builtin\";\n      } else if (stream.match(/[$][0-9]+/)) {\n        return \"variableName.special\";\n      }\n    case \"<\":\n      if (stream.match(/<<[a-zA-Z_]+>>/)) {\n        return \"builtin\";\n      }\n    }\n\n    if (stream.match('//')) {\n      stream.skipToEnd();\n      return \"comment\";\n    } else if (stream.match('return')) {\n      return \"operator\";\n    } else if (stream.match(/^[a-zA-Z_][a-zA-Z0-9_]*/)) {\n      if (stream.match(/(?=[\\(.])/)) {\n        return \"variable\";\n      } else if (stream.match(/(?=[\\s\\n]*[:=])/)) {\n        return \"def\";\n      }\n      return \"variableName.special\";\n    } else if ([\"[\", \"]\", \"(\", \")\"].indexOf(stream.peek()) != -1) {\n      stream.next();\n      return \"bracket\";\n    } else if (!stream.eatSpace()) {\n      stream.next();\n    }\n    return null;\n  }\n};\n","function words(str) {\n  var obj = {}, words = str.split(\" \");\n  for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n  return obj;\n}\n\nfunction metaHook(stream, state) {\n  if (!state.startOfLine) return false;\n  stream.skipToEnd();\n  return \"meta\";\n}\n\nvar keyword = words(\"abs acos allnodes ascii asin asstring atan atan2 ave case choose choosen choosesets clustersize combine correlation cos cosh count covariance cron dataset dedup define denormalize distribute distributed distribution ebcdic enth error evaluate event eventextra eventname exists exp failcode failmessage fetch fromunicode getisvalid global graph group hash hash32 hash64 hashcrc hashmd5 having if index intformat isvalid iterate join keyunicode length library limit ln local log loop map matched matchlength matchposition matchtext matchunicode max merge mergejoin min nolocal nonempty normalize parse pipe power preload process project pull random range rank ranked realformat recordof regexfind regexreplace regroup rejected rollup round roundup row rowdiff sample set sin sinh sizeof soapcall sort sorted sqrt stepped stored sum table tan tanh thisnode topn tounicode transfer trim truncate typeof ungroup unicodeorder variance which workunit xmldecode xmlencode xmltext xmlunicode\");\nvar variable = words(\"apply assert build buildindex evaluate fail keydiff keypatch loadxml nothor notify output parallel sequential soapcall wait\");\nvar variable_2 = words(\"__compressed__ all and any as atmost before beginc++ best between case const counter csv descend encrypt end endc++ endmacro except exclusive expire export extend false few first flat from full function group header heading hole ifblock import in interface joined keep keyed last left limit load local locale lookup macro many maxcount maxlength min skew module named nocase noroot noscan nosort not of only opt or outer overwrite packed partition penalty physicallength pipe quote record relationship repeat return right scan self separator service shared skew skip sql store terminator thor threshold token transform trim true type unicodeorder unsorted validate virtual whole wild within xml xpath\");\nvar variable_3 = words(\"ascii big_endian boolean data decimal ebcdic integer pattern qstring real record rule set of string token udecimal unicode unsigned varstring varunicode\");\nvar builtin = words(\"checkpoint deprecated failcode failmessage failure global independent onwarning persist priority recovery stored success wait when\");\nvar blockKeywords = words(\"catch class do else finally for if switch try while\");\nvar atoms = words(\"true false null\");\nvar hooks = {\"#\": metaHook};\nvar isOperatorChar = /[+\\-*&%=<>!?|\\/]/;\n\nvar curPunc;\n\nfunction tokenBase(stream, state) {\n  var ch = stream.next();\n  if (hooks[ch]) {\n    var result = hooks[ch](stream, state);\n    if (result !== false) return result;\n  }\n  if (ch == '\"' || ch == \"'\") {\n    state.tokenize = tokenString(ch);\n    return state.tokenize(stream, state);\n  }\n  if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n    curPunc = ch;\n    return null;\n  }\n  if (/\\d/.test(ch)) {\n    stream.eatWhile(/[\\w\\.]/);\n    return \"number\";\n  }\n  if (ch == \"/\") {\n    if (stream.eat(\"*\")) {\n      state.tokenize = tokenComment;\n      return tokenComment(stream, state);\n    }\n    if (stream.eat(\"/\")) {\n      stream.skipToEnd();\n      return \"comment\";\n    }\n  }\n  if (isOperatorChar.test(ch)) {\n    stream.eatWhile(isOperatorChar);\n    return \"operator\";\n  }\n  stream.eatWhile(/[\\w\\$_]/);\n  var cur = stream.current().toLowerCase();\n  if (keyword.propertyIsEnumerable(cur)) {\n    if (blockKeywords.propertyIsEnumerable(cur)) curPunc = \"newstatement\";\n    return \"keyword\";\n  } else if (variable.propertyIsEnumerable(cur)) {\n    if (blockKeywords.propertyIsEnumerable(cur)) curPunc = \"newstatement\";\n    return \"variable\";\n  } else if (variable_2.propertyIsEnumerable(cur)) {\n    if (blockKeywords.propertyIsEnumerable(cur)) curPunc = \"newstatement\";\n    return \"modifier\";\n  } else if (variable_3.propertyIsEnumerable(cur)) {\n    if (blockKeywords.propertyIsEnumerable(cur)) curPunc = \"newstatement\";\n    return \"type\";\n  } else if (builtin.propertyIsEnumerable(cur)) {\n    if (blockKeywords.propertyIsEnumerable(cur)) curPunc = \"newstatement\";\n    return \"builtin\";\n  } else { //Data types are of from KEYWORD##\n    var i = cur.length - 1;\n    while(i >= 0 && (!isNaN(cur[i]) || cur[i] == '_'))\n      --i;\n\n    if (i > 0) {\n      var cur2 = cur.substr(0, i + 1);\n      if (variable_3.propertyIsEnumerable(cur2)) {\n        if (blockKeywords.propertyIsEnumerable(cur2)) curPunc = \"newstatement\";\n        return \"type\";\n      }\n    }\n  }\n  if (atoms.propertyIsEnumerable(cur)) return \"atom\";\n  return null;\n}\n\nfunction tokenString(quote) {\n  return function(stream, state) {\n    var escaped = false, next, end = false;\n    while ((next = stream.next()) != null) {\n      if (next == quote && !escaped) {end = true; break;}\n      escaped = !escaped && next == \"\\\\\";\n    }\n    if (end || !escaped)\n      state.tokenize = tokenBase;\n    return \"string\";\n  };\n}\n\nfunction tokenComment(stream, state) {\n  var maybeEnd = false, ch;\n  while (ch = stream.next()) {\n    if (ch == \"/\" && maybeEnd) {\n      state.tokenize = tokenBase;\n      break;\n    }\n    maybeEnd = (ch == \"*\");\n  }\n  return \"comment\";\n}\n\nfunction Context(indented, column, type, align, prev) {\n  this.indented = indented;\n  this.column = column;\n  this.type = type;\n  this.align = align;\n  this.prev = prev;\n}\nfunction pushContext(state, col, type) {\n  return state.context = new Context(state.indented, col, type, null, state.context);\n}\nfunction popContext(state) {\n  var t = state.context.type;\n  if (t == \")\" || t == \"]\" || t == \"}\")\n    state.indented = state.context.indented;\n  return state.context = state.context.prev;\n}\n\n// Interface\n\nexport const ecl = {\n  name: \"ecl\",\n  startState: function(indentUnit) {\n    return {\n      tokenize: null,\n      context: new Context(-indentUnit, 0, \"top\", false),\n      indented: 0,\n      startOfLine: true\n    };\n  },\n\n  token: function(stream, state) {\n    var ctx = state.context;\n    if (stream.sol()) {\n      if (ctx.align == null) ctx.align = false;\n      state.indented = stream.indentation();\n      state.startOfLine = true;\n    }\n    if (stream.eatSpace()) return null;\n    curPunc = null;\n    var style = (state.tokenize || tokenBase)(stream, state);\n    if (style == \"comment\" || style == \"meta\") return style;\n    if (ctx.align == null) ctx.align = true;\n\n    if ((curPunc == \";\" || curPunc == \":\") && ctx.type == \"statement\") popContext(state);\n    else if (curPunc == \"{\") pushContext(state, stream.column(), \"}\");\n    else if (curPunc == \"[\") pushContext(state, stream.column(), \"]\");\n    else if (curPunc == \"(\") pushContext(state, stream.column(), \")\");\n    else if (curPunc == \"}\") {\n      while (ctx.type == \"statement\") ctx = popContext(state);\n      if (ctx.type == \"}\") ctx = popContext(state);\n      while (ctx.type == \"statement\") ctx = popContext(state);\n    }\n    else if (curPunc == ctx.type) popContext(state);\n    else if (ctx.type == \"}\" || ctx.type == \"top\" || (ctx.type == \"statement\" && curPunc == \"newstatement\"))\n      pushContext(state, stream.column(), \"statement\");\n    state.startOfLine = false;\n    return style;\n  },\n\n  indent: function(state, textAfter, cx) {\n    if (state.tokenize != tokenBase && state.tokenize != null) return 0;\n    var ctx = state.context, firstChar = textAfter && textAfter.charAt(0);\n    if (ctx.type == \"statement\" && firstChar == \"}\") ctx = ctx.prev;\n    var closing = firstChar == ctx.type;\n    if (ctx.type == \"statement\") return ctx.indented + (firstChar == \"{\" ? 0 : cx.unit);\n    else if (ctx.align) return ctx.column + (closing ? 0 : 1);\n    else return ctx.indented + (closing ? 0 : cx.unit);\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*[{}]$/\n  }\n};\n","function wordObj(words) {\n  var o = {};\n  for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true;\n  return o;\n}\nvar keywords = wordObj([\n  'note',\n  'across',\n  'when',\n  'variant',\n  'until',\n  'unique',\n  'undefine',\n  'then',\n  'strip',\n  'select',\n  'retry',\n  'rescue',\n  'require',\n  'rename',\n  'reference',\n  'redefine',\n  'prefix',\n  'once',\n  'old',\n  'obsolete',\n  'loop',\n  'local',\n  'like',\n  'is',\n  'inspect',\n  'infix',\n  'include',\n  'if',\n  'frozen',\n  'from',\n  'external',\n  'export',\n  'ensure',\n  'end',\n  'elseif',\n  'else',\n  'do',\n  'creation',\n  'create',\n  'check',\n  'alias',\n  'agent',\n  'separate',\n  'invariant',\n  'inherit',\n  'indexing',\n  'feature',\n  'expanded',\n  'deferred',\n  'class',\n  'Void',\n  'True',\n  'Result',\n  'Precursor',\n  'False',\n  'Current',\n  'create',\n  'attached',\n  'detachable',\n  'as',\n  'and',\n  'implies',\n  'not',\n  'or'\n]);\nvar operators = wordObj([\":=\", \"and then\",\"and\", \"or\",\"<<\",\">>\"]);\n\nfunction chain(newtok, stream, state) {\n  state.tokenize.push(newtok);\n  return newtok(stream, state);\n}\n\nfunction tokenBase(stream, state) {\n  if (stream.eatSpace()) return null;\n  var ch = stream.next();\n  if (ch == '\"'||ch == \"'\") {\n    return chain(readQuoted(ch, \"string\"), stream, state);\n  } else if (ch == \"-\"&&stream.eat(\"-\")) {\n    stream.skipToEnd();\n    return \"comment\";\n  } else if (ch == \":\"&&stream.eat(\"=\")) {\n    return \"operator\";\n  } else if (/[0-9]/.test(ch)) {\n    stream.eatWhile(/[xXbBCc0-9\\.]/);\n    stream.eat(/[\\?\\!]/);\n    return \"variable\";\n  } else if (/[a-zA-Z_0-9]/.test(ch)) {\n    stream.eatWhile(/[a-zA-Z_0-9]/);\n    stream.eat(/[\\?\\!]/);\n    return \"variable\";\n  } else if (/[=+\\-\\/*^%<>~]/.test(ch)) {\n    stream.eatWhile(/[=+\\-\\/*^%<>~]/);\n    return \"operator\";\n  } else {\n    return null;\n  }\n}\n\nfunction readQuoted(quote, style,  unescaped) {\n  return function(stream, state) {\n    var escaped = false, ch;\n    while ((ch = stream.next()) != null) {\n      if (ch == quote && (unescaped || !escaped)) {\n        state.tokenize.pop();\n        break;\n      }\n      escaped = !escaped && ch == \"%\";\n    }\n    return style;\n  };\n}\n\nexport const eiffel = {\n  name: \"eiffel\",\n  startState: function() {\n    return {tokenize: [tokenBase]};\n  },\n\n  token: function(stream, state) {\n    var style = state.tokenize[state.tokenize.length-1](stream, state);\n    if (style == \"variable\") {\n      var word = stream.current();\n      style = keywords.propertyIsEnumerable(stream.current()) ? \"keyword\"\n        : operators.propertyIsEnumerable(stream.current()) ? \"operator\"\n        : /^[A-Z][A-Z_0-9]*$/g.test(word) ? \"tag\"\n        : /^0[bB][0-1]+$/g.test(word) ? \"number\"\n        : /^0[cC][0-7]+$/g.test(word) ? \"number\"\n        : /^0[xX][a-fA-F0-9]+$/g.test(word) ? \"number\"\n        : /^([0-9]+\\.[0-9]*)|([0-9]*\\.[0-9]+)$/g.test(word) ? \"number\"\n        : /^[0-9]+$/g.test(word) ? \"number\"\n        : \"variable\";\n    }\n    return style;\n  },\n  languageData: {\n    commentTokens: {line: \"--\"}\n  }\n};\n\n","function switchState(source, setState, f)\n{\n  setState(f);\n  return f(source, setState);\n}\n\nvar lowerRE = /[a-z]/;\nvar upperRE = /[A-Z]/;\nvar innerRE = /[a-zA-Z0-9_]/;\n\nvar digitRE = /[0-9]/;\nvar hexRE = /[0-9A-Fa-f]/;\nvar symbolRE = /[-&*+.\\\\/<>=?^|:]/;\nvar specialRE = /[(),[\\]{}]/;\nvar spacesRE = /[ \\v\\f]/; // newlines are handled in tokenizer\n\nfunction normal()\n{\n  return function(source, setState)\n  {\n    if (source.eatWhile(spacesRE))\n    {\n      return null;\n    }\n\n    var char = source.next();\n\n    if (specialRE.test(char))\n    {\n      return (char === '{' && source.eat('-'))\n        ? switchState(source, setState, chompMultiComment(1))\n        : (char === '[' && source.match('glsl|'))\n        ? switchState(source, setState, chompGlsl)\n        : 'builtin';\n    }\n\n    if (char === '\\'')\n    {\n      return switchState(source, setState, chompChar);\n    }\n\n    if (char === '\"')\n    {\n      return source.eat('\"')\n        ? source.eat('\"')\n        ? switchState(source, setState, chompMultiString)\n        : 'string'\n      : switchState(source, setState, chompSingleString);\n    }\n\n    if (upperRE.test(char))\n    {\n      source.eatWhile(innerRE);\n      return 'type';\n    }\n\n    if (lowerRE.test(char))\n    {\n      var isDef = source.pos === 1;\n      source.eatWhile(innerRE);\n      return isDef ? \"def\" : \"variable\";\n    }\n\n    if (digitRE.test(char))\n    {\n      if (char === '0')\n      {\n        if (source.eat(/[xX]/))\n        {\n          source.eatWhile(hexRE); // should require at least 1\n          return \"number\";\n        }\n      }\n      else\n      {\n        source.eatWhile(digitRE);\n      }\n      if (source.eat('.'))\n      {\n        source.eatWhile(digitRE); // should require at least 1\n      }\n      if (source.eat(/[eE]/))\n      {\n        source.eat(/[-+]/);\n        source.eatWhile(digitRE); // should require at least 1\n      }\n      return \"number\";\n    }\n\n    if (symbolRE.test(char))\n    {\n      if (char === '-' && source.eat('-'))\n      {\n        source.skipToEnd();\n        return \"comment\";\n      }\n      source.eatWhile(symbolRE);\n      return \"keyword\";\n    }\n\n    if (char === '_')\n    {\n      return \"keyword\";\n    }\n\n    return \"error\";\n  }\n}\n\nfunction chompMultiComment(nest)\n{\n  if (nest == 0)\n  {\n    return normal();\n  }\n  return function(source, setState)\n  {\n    while (!source.eol())\n    {\n      var char = source.next();\n      if (char == '{' && source.eat('-'))\n      {\n        ++nest;\n      }\n      else if (char == '-' && source.eat('}'))\n      {\n        --nest;\n        if (nest === 0)\n        {\n          setState(normal());\n          return 'comment';\n        }\n      }\n    }\n    setState(chompMultiComment(nest));\n    return 'comment';\n  }\n}\n\nfunction chompMultiString(source, setState)\n{\n  while (!source.eol())\n  {\n    var char = source.next();\n    if (char === '\"' && source.eat('\"') && source.eat('\"'))\n    {\n      setState(normal());\n      return 'string';\n    }\n  }\n  return 'string';\n}\n\nfunction chompSingleString(source, setState)\n{\n  while (source.skipTo('\\\\\"')) { source.next(); source.next(); }\n  if (source.skipTo('\"'))\n  {\n    source.next();\n    setState(normal());\n    return 'string';\n  }\n  source.skipToEnd();\n  setState(normal());\n  return 'error';\n}\n\nfunction chompChar(source, setState)\n{\n  while (source.skipTo(\"\\\\'\")) { source.next(); source.next(); }\n  if (source.skipTo(\"'\"))\n  {\n    source.next();\n    setState(normal());\n    return 'string';\n  }\n  source.skipToEnd();\n  setState(normal());\n  return 'error';\n}\n\nfunction chompGlsl(source, setState)\n{\n  while (!source.eol())\n  {\n    var char = source.next();\n    if (char === '|' && source.eat(']'))\n    {\n      setState(normal());\n      return 'string';\n    }\n  }\n  return 'string';\n}\n\nvar wellKnownWords = {\n  case: 1,\n  of: 1,\n  as: 1,\n  if: 1,\n  then: 1,\n  else: 1,\n  let: 1,\n    in: 1,\n  type: 1,\n  alias: 1,\n  module: 1,\n  where: 1,\n  import: 1,\n  exposing: 1,\n  port: 1\n};\n\nexport const elm = {\n  name: \"elm\",\n  startState: function ()  { return { f: normal() }; },\n  copyState:  function (s) { return { f: s.f }; },\n\n  token: function(stream, state) {\n    var type = state.f(stream, function(s) { state.f = s; });\n    var word = stream.current();\n    return (wellKnownWords.hasOwnProperty(word)) ? 'keyword' : type;\n  },\n\n  languageData: {\n    commentTokens: {line: \"--\"}\n  }\n};\n","/////////////////////////////////////////////////////////////////////////////\n// constants\n\nvar typeWords = [\n  \"-type\", \"-spec\", \"-export_type\", \"-opaque\"];\n\nvar keywordWords = [\n  \"after\",\"begin\",\"catch\",\"case\",\"cond\",\"end\",\"fun\",\"if\",\n  \"let\",\"of\",\"query\",\"receive\",\"try\",\"when\"];\n\nvar separatorRE    = /[\\->,;]/;\nvar separatorWords = [\n  \"->\",\";\",\",\"];\n\nvar operatorAtomWords = [\n  \"and\",\"andalso\",\"band\",\"bnot\",\"bor\",\"bsl\",\"bsr\",\"bxor\",\n  \"div\",\"not\",\"or\",\"orelse\",\"rem\",\"xor\"];\n\nvar operatorSymbolRE    = /[\\+\\-\\*\\/<>=\\|:!]/;\nvar operatorSymbolWords = [\n  \"=\",\"+\",\"-\",\"*\",\"/\",\">\",\">=\",\"<\",\"=<\",\"=:=\",\"==\",\"=/=\",\"/=\",\"||\",\"<-\",\"!\"];\n\nvar openParenRE    = /[<\\(\\[\\{]/;\nvar openParenWords = [\n  \"<<\",\"(\",\"[\",\"{\"];\n\nvar closeParenRE    = /[>\\)\\]\\}]/;\nvar closeParenWords = [\n  \"}\",\"]\",\")\",\">>\"];\n\nvar guardWords = [\n  \"is_atom\",\"is_binary\",\"is_bitstring\",\"is_boolean\",\"is_float\",\n  \"is_function\",\"is_integer\",\"is_list\",\"is_number\",\"is_pid\",\n  \"is_port\",\"is_record\",\"is_reference\",\"is_tuple\",\n  \"atom\",\"binary\",\"bitstring\",\"boolean\",\"function\",\"integer\",\"list\",\n  \"number\",\"pid\",\"port\",\"record\",\"reference\",\"tuple\"];\n\nvar bifWords = [\n  \"abs\",\"adler32\",\"adler32_combine\",\"alive\",\"apply\",\"atom_to_binary\",\n  \"atom_to_list\",\"binary_to_atom\",\"binary_to_existing_atom\",\n  \"binary_to_list\",\"binary_to_term\",\"bit_size\",\"bitstring_to_list\",\n  \"byte_size\",\"check_process_code\",\"contact_binary\",\"crc32\",\n  \"crc32_combine\",\"date\",\"decode_packet\",\"delete_module\",\n  \"disconnect_node\",\"element\",\"erase\",\"exit\",\"float\",\"float_to_list\",\n  \"garbage_collect\",\"get\",\"get_keys\",\"group_leader\",\"halt\",\"hd\",\n  \"integer_to_list\",\"internal_bif\",\"iolist_size\",\"iolist_to_binary\",\n  \"is_alive\",\"is_atom\",\"is_binary\",\"is_bitstring\",\"is_boolean\",\n  \"is_float\",\"is_function\",\"is_integer\",\"is_list\",\"is_number\",\"is_pid\",\n  \"is_port\",\"is_process_alive\",\"is_record\",\"is_reference\",\"is_tuple\",\n  \"length\",\"link\",\"list_to_atom\",\"list_to_binary\",\"list_to_bitstring\",\n  \"list_to_existing_atom\",\"list_to_float\",\"list_to_integer\",\n  \"list_to_pid\",\"list_to_tuple\",\"load_module\",\"make_ref\",\"module_loaded\",\n  \"monitor_node\",\"node\",\"node_link\",\"node_unlink\",\"nodes\",\"notalive\",\n  \"now\",\"open_port\",\"pid_to_list\",\"port_close\",\"port_command\",\n  \"port_connect\",\"port_control\",\"pre_loaded\",\"process_flag\",\n  \"process_info\",\"processes\",\"purge_module\",\"put\",\"register\",\n  \"registered\",\"round\",\"self\",\"setelement\",\"size\",\"spawn\",\"spawn_link\",\n  \"spawn_monitor\",\"spawn_opt\",\"split_binary\",\"statistics\",\n  \"term_to_binary\",\"time\",\"throw\",\"tl\",\"trunc\",\"tuple_size\",\n  \"tuple_to_list\",\"unlink\",\"unregister\",\"whereis\"];\n\n// upper case: [A-Z] [Ø-Þ] [À-Ö]\n// lower case: [a-z] [ß-ö] [ø-ÿ]\nvar anumRE       = /[\\w@Ø-ÞÀ-Öß-öø-ÿ]/;\nvar escapesRE    =\n    /[0-7]{1,3}|[bdefnrstv\\\\\"']|\\^[a-zA-Z]|x[0-9a-zA-Z]{2}|x{[0-9a-zA-Z]+}/;\n\n/////////////////////////////////////////////////////////////////////////////\n// tokenizer\n\nfunction tokenizer(stream,state) {\n  // in multi-line string\n  if (state.in_string) {\n    state.in_string = (!doubleQuote(stream));\n    return rval(state,stream,\"string\");\n  }\n\n  // in multi-line atom\n  if (state.in_atom) {\n    state.in_atom = (!singleQuote(stream));\n    return rval(state,stream,\"atom\");\n  }\n\n  // whitespace\n  if (stream.eatSpace()) {\n    return rval(state,stream,\"whitespace\");\n  }\n\n  // attributes and type specs\n  if (!peekToken(state) &&\n      stream.match(/-\\s*[a-zß-öø-ÿ][\\wØ-ÞÀ-Öß-öø-ÿ]*/)) {\n    if (is_member(stream.current(),typeWords)) {\n      return rval(state,stream,\"type\");\n    }else{\n      return rval(state,stream,\"attribute\");\n    }\n  }\n\n  var ch = stream.next();\n\n  // comment\n  if (ch == '%') {\n    stream.skipToEnd();\n    return rval(state,stream,\"comment\");\n  }\n\n  // colon\n  if (ch == \":\") {\n    return rval(state,stream,\"colon\");\n  }\n\n  // macro\n  if (ch == '?') {\n    stream.eatSpace();\n    stream.eatWhile(anumRE);\n    return rval(state,stream,\"macro\");\n  }\n\n  // record\n  if (ch == \"#\") {\n    stream.eatSpace();\n    stream.eatWhile(anumRE);\n    return rval(state,stream,\"record\");\n  }\n\n  // dollar escape\n  if (ch == \"$\") {\n    if (stream.next() == \"\\\\\" && !stream.match(escapesRE)) {\n      return rval(state,stream,\"error\");\n    }\n    return rval(state,stream,\"number\");\n  }\n\n  // dot\n  if (ch == \".\") {\n    return rval(state,stream,\"dot\");\n  }\n\n  // quoted atom\n  if (ch == '\\'') {\n    if (!(state.in_atom = (!singleQuote(stream)))) {\n      if (stream.match(/\\s*\\/\\s*[0-9]/,false)) {\n        stream.match(/\\s*\\/\\s*[0-9]/,true);\n        return rval(state,stream,\"fun\");      // 'f'/0 style fun\n      }\n      if (stream.match(/\\s*\\(/,false) || stream.match(/\\s*:/,false)) {\n        return rval(state,stream,\"function\");\n      }\n    }\n    return rval(state,stream,\"atom\");\n  }\n\n  // string\n  if (ch == '\"') {\n    state.in_string = (!doubleQuote(stream));\n    return rval(state,stream,\"string\");\n  }\n\n  // variable\n  if (/[A-Z_Ø-ÞÀ-Ö]/.test(ch)) {\n    stream.eatWhile(anumRE);\n    return rval(state,stream,\"variable\");\n  }\n\n  // atom/keyword/BIF/function\n  if (/[a-z_ß-öø-ÿ]/.test(ch)) {\n    stream.eatWhile(anumRE);\n\n    if (stream.match(/\\s*\\/\\s*[0-9]/,false)) {\n      stream.match(/\\s*\\/\\s*[0-9]/,true);\n      return rval(state,stream,\"fun\");      // f/0 style fun\n    }\n\n    var w = stream.current();\n\n    if (is_member(w,keywordWords)) {\n      return rval(state,stream,\"keyword\");\n    }else if (is_member(w,operatorAtomWords)) {\n      return rval(state,stream,\"operator\");\n    }else if (stream.match(/\\s*\\(/,false)) {\n      // 'put' and 'erlang:put' are bifs, 'foo:put' is not\n      if (is_member(w,bifWords) &&\n          ((peekToken(state).token != \":\") ||\n           (peekToken(state,2).token == \"erlang\"))) {\n        return rval(state,stream,\"builtin\");\n      }else if (is_member(w,guardWords)) {\n        return rval(state,stream,\"guard\");\n      }else{\n        return rval(state,stream,\"function\");\n      }\n    }else if (lookahead(stream) == \":\") {\n      if (w == \"erlang\") {\n        return rval(state,stream,\"builtin\");\n      } else {\n        return rval(state,stream,\"function\");\n      }\n    }else if (is_member(w,[\"true\",\"false\"])) {\n      return rval(state,stream,\"boolean\");\n    }else{\n      return rval(state,stream,\"atom\");\n    }\n  }\n\n  // number\n  var digitRE      = /[0-9]/;\n  var radixRE      = /[0-9a-zA-Z]/;         // 36#zZ style int\n  if (digitRE.test(ch)) {\n    stream.eatWhile(digitRE);\n    if (stream.eat('#')) {                // 36#aZ  style integer\n      if (!stream.eatWhile(radixRE)) {\n        stream.backUp(1);                 //\"36#\" - syntax error\n      }\n    } else if (stream.eat('.')) {       // float\n      if (!stream.eatWhile(digitRE)) {\n        stream.backUp(1);        // \"3.\" - probably end of function\n      } else {\n        if (stream.eat(/[eE]/)) {        // float with exponent\n          if (stream.eat(/[-+]/)) {\n            if (!stream.eatWhile(digitRE)) {\n              stream.backUp(2);            // \"2e-\" - syntax error\n            }\n          } else {\n            if (!stream.eatWhile(digitRE)) {\n              stream.backUp(1);            // \"2e\" - syntax error\n            }\n          }\n        }\n      }\n    }\n    return rval(state,stream,\"number\");   // normal integer\n  }\n\n  // open parens\n  if (nongreedy(stream,openParenRE,openParenWords)) {\n    return rval(state,stream,\"open_paren\");\n  }\n\n  // close parens\n  if (nongreedy(stream,closeParenRE,closeParenWords)) {\n    return rval(state,stream,\"close_paren\");\n  }\n\n  // separators\n  if (greedy(stream,separatorRE,separatorWords)) {\n    return rval(state,stream,\"separator\");\n  }\n\n  // operators\n  if (greedy(stream,operatorSymbolRE,operatorSymbolWords)) {\n    return rval(state,stream,\"operator\");\n  }\n\n  return rval(state,stream,null);\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// utilities\nfunction nongreedy(stream,re,words) {\n  if (stream.current().length == 1 && re.test(stream.current())) {\n    stream.backUp(1);\n    while (re.test(stream.peek())) {\n      stream.next();\n      if (is_member(stream.current(),words)) {\n        return true;\n      }\n    }\n    stream.backUp(stream.current().length-1);\n  }\n  return false;\n}\n\nfunction greedy(stream,re,words) {\n  if (stream.current().length == 1 && re.test(stream.current())) {\n    while (re.test(stream.peek())) {\n      stream.next();\n    }\n    while (0 < stream.current().length) {\n      if (is_member(stream.current(),words)) {\n        return true;\n      }else{\n        stream.backUp(1);\n      }\n    }\n    stream.next();\n  }\n  return false;\n}\n\nfunction doubleQuote(stream) {\n  return quote(stream, '\"', '\\\\');\n}\n\nfunction singleQuote(stream) {\n  return quote(stream,'\\'','\\\\');\n}\n\nfunction quote(stream,quoteChar,escapeChar) {\n  while (!stream.eol()) {\n    var ch = stream.next();\n    if (ch == quoteChar) {\n      return true;\n    }else if (ch == escapeChar) {\n      stream.next();\n    }\n  }\n  return false;\n}\n\nfunction lookahead(stream) {\n  var m = stream.match(/^\\s*([^\\s%])/, false)\n  return m ? m[1] : \"\";\n}\n\nfunction is_member(element,list) {\n  return (-1 < list.indexOf(element));\n}\n\nfunction rval(state,stream,type) {\n\n  // parse stack\n  pushToken(state,realToken(type,stream));\n\n  // map erlang token type to CodeMirror style class\n  //     erlang             -> CodeMirror tag\n  switch (type) {\n  case \"atom\":        return \"atom\";\n  case \"attribute\":   return \"attribute\";\n  case \"boolean\":     return \"atom\";\n  case \"builtin\":     return \"builtin\";\n  case \"close_paren\": return null;\n  case \"colon\":       return null;\n  case \"comment\":     return \"comment\";\n  case \"dot\":         return null;\n  case \"error\":       return \"error\";\n  case \"fun\":         return \"meta\";\n  case \"function\":    return \"tag\";\n  case \"guard\":       return \"property\";\n  case \"keyword\":     return \"keyword\";\n  case \"macro\":       return \"macroName\";\n  case \"number\":      return \"number\";\n  case \"open_paren\":  return null;\n  case \"operator\":    return \"operator\";\n  case \"record\":      return \"bracket\";\n  case \"separator\":   return null;\n  case \"string\":      return \"string\";\n  case \"type\":        return \"def\";\n  case \"variable\":    return \"variable\";\n  default:            return null;\n  }\n}\n\nfunction aToken(tok,col,ind,typ) {\n  return {token:  tok,\n          column: col,\n          indent: ind,\n          type:   typ};\n}\n\nfunction realToken(type,stream) {\n  return aToken(stream.current(),\n                stream.column(),\n                stream.indentation(),\n                type);\n}\n\nfunction fakeToken(type) {\n  return aToken(type,0,0,type);\n}\n\nfunction peekToken(state,depth) {\n  var len = state.tokenStack.length;\n  var dep = (depth ? depth : 1);\n\n  if (len < dep) {\n    return false;\n  }else{\n    return state.tokenStack[len-dep];\n  }\n}\n\nfunction pushToken(state,token) {\n\n  if (!(token.type == \"comment\" || token.type == \"whitespace\")) {\n    state.tokenStack = maybe_drop_pre(state.tokenStack,token);\n    state.tokenStack = maybe_drop_post(state.tokenStack);\n  }\n}\n\nfunction maybe_drop_pre(s,token) {\n  var last = s.length-1;\n\n  if (0 < last && s[last].type === \"record\" && token.type === \"dot\") {\n    s.pop();\n  }else if (0 < last && s[last].type === \"group\") {\n    s.pop();\n    s.push(token);\n  }else{\n    s.push(token);\n  }\n  return s;\n}\n\nfunction maybe_drop_post(s) {\n  if (!s.length) return s\n  var last = s.length-1;\n\n  if (s[last].type === \"dot\") {\n    return [];\n  }\n  if (last > 1 && s[last].type === \"fun\" && s[last-1].token === \"fun\") {\n    return s.slice(0,last-1);\n  }\n  switch (s[last].token) {\n  case \"}\":    return d(s,{g:[\"{\"]});\n  case \"]\":    return d(s,{i:[\"[\"]});\n  case \")\":    return d(s,{i:[\"(\"]});\n  case \">>\":   return d(s,{i:[\"<<\"]});\n  case \"end\":  return d(s,{i:[\"begin\",\"case\",\"fun\",\"if\",\"receive\",\"try\"]});\n  case \",\":    return d(s,{e:[\"begin\",\"try\",\"when\",\"->\",\n                              \",\",\"(\",\"[\",\"{\",\"<<\"]});\n  case \"->\":   return d(s,{r:[\"when\"],\n                           m:[\"try\",\"if\",\"case\",\"receive\"]});\n  case \";\":    return d(s,{E:[\"case\",\"fun\",\"if\",\"receive\",\"try\",\"when\"]});\n  case \"catch\":return d(s,{e:[\"try\"]});\n  case \"of\":   return d(s,{e:[\"case\"]});\n  case \"after\":return d(s,{e:[\"receive\",\"try\"]});\n  default:     return s;\n  }\n}\n\nfunction d(stack,tt) {\n  // stack is a stack of Token objects.\n  // tt is an object; {type:tokens}\n  // type is a char, tokens is a list of token strings.\n  // The function returns (possibly truncated) stack.\n  // It will descend the stack, looking for a Token such that Token.token\n  //  is a member of tokens. If it does not find that, it will normally (but\n  //  see \"E\" below) return stack. If it does find a match, it will remove\n  //  all the Tokens between the top and the matched Token.\n  // If type is \"m\", that is all it does.\n  // If type is \"i\", it will also remove the matched Token and the top Token.\n  // If type is \"g\", like \"i\", but add a fake \"group\" token at the top.\n  // If type is \"r\", it will remove the matched Token, but not the top Token.\n  // If type is \"e\", it will keep the matched Token but not the top Token.\n  // If type is \"E\", it behaves as for type \"e\", except if there is no match,\n  //  in which case it will return an empty stack.\n\n  for (var type in tt) {\n    var len = stack.length-1;\n    var tokens = tt[type];\n    for (var i = len-1; -1 < i ; i--) {\n      if (is_member(stack[i].token,tokens)) {\n        var ss = stack.slice(0,i);\n        switch (type) {\n        case \"m\": return ss.concat(stack[i]).concat(stack[len]);\n        case \"r\": return ss.concat(stack[len]);\n        case \"i\": return ss;\n        case \"g\": return ss.concat(fakeToken(\"group\"));\n        case \"E\": return ss.concat(stack[i]);\n        case \"e\": return ss.concat(stack[i]);\n        }\n      }\n    }\n  }\n  return (type == \"E\" ? [] : stack);\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// indenter\n\nfunction indenter(state, textAfter, cx) {\n  var t;\n  var wordAfter = wordafter(textAfter);\n  var currT = peekToken(state,1);\n  var prevT = peekToken(state,2);\n\n  if (state.in_string || state.in_atom) {\n    return null;\n  }else if (!prevT) {\n    return 0;\n  }else if (currT.token == \"when\") {\n    return currT.column + cx.unit;\n  }else if (wordAfter === \"when\" && prevT.type === \"function\") {\n    return prevT.indent+cx.unit;\n  }else if (wordAfter === \"(\" && currT.token === \"fun\") {\n    return  currT.column+3;\n  }else if (wordAfter === \"catch\" && (t = getToken(state,[\"try\"]))) {\n    return t.column;\n  }else if (is_member(wordAfter,[\"end\",\"after\",\"of\"])) {\n    t = getToken(state,[\"begin\",\"case\",\"fun\",\"if\",\"receive\",\"try\"]);\n    return t ? t.column : null;\n  }else if (is_member(wordAfter,closeParenWords)) {\n    t = getToken(state,openParenWords);\n    return t ? t.column : null;\n  }else if (is_member(currT.token,[\",\",\"|\",\"||\"]) ||\n            is_member(wordAfter,[\",\",\"|\",\"||\"])) {\n    t = postcommaToken(state);\n    return t ? t.column+t.token.length : cx.unit;\n  }else if (currT.token == \"->\") {\n    if (is_member(prevT.token, [\"receive\",\"case\",\"if\",\"try\"])) {\n      return prevT.column+cx.unit+cx.unit;\n    }else{\n      return prevT.column+cx.unit;\n    }\n  }else if (is_member(currT.token,openParenWords)) {\n    return currT.column+currT.token.length;\n  }else{\n    t = defaultToken(state);\n    return truthy(t) ? t.column+cx.unit : 0;\n  }\n}\n\nfunction wordafter(str) {\n  var m = str.match(/,|[a-z]+|\\}|\\]|\\)|>>|\\|+|\\(/);\n\n  return truthy(m) && (m.index === 0) ? m[0] : \"\";\n}\n\nfunction postcommaToken(state) {\n  var objs = state.tokenStack.slice(0,-1);\n  var i = getTokenIndex(objs,\"type\",[\"open_paren\"]);\n\n  return truthy(objs[i]) ? objs[i] : false;\n}\n\nfunction defaultToken(state) {\n  var objs = state.tokenStack;\n  var stop = getTokenIndex(objs,\"type\",[\"open_paren\",\"separator\",\"keyword\"]);\n  var oper = getTokenIndex(objs,\"type\",[\"operator\"]);\n\n  if (truthy(stop) && truthy(oper) && stop < oper) {\n    return objs[stop+1];\n  } else if (truthy(stop)) {\n    return objs[stop];\n  } else {\n    return false;\n  }\n}\n\nfunction getToken(state,tokens) {\n  var objs = state.tokenStack;\n  var i = getTokenIndex(objs,\"token\",tokens);\n\n  return truthy(objs[i]) ? objs[i] : false;\n}\n\nfunction getTokenIndex(objs,propname,propvals) {\n\n  for (var i = objs.length-1; -1 < i ; i--) {\n    if (is_member(objs[i][propname],propvals)) {\n      return i;\n    }\n  }\n  return false;\n}\n\nfunction truthy(x) {\n  return (x !== false) && (x != null);\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// this object defines the mode\n\nexport const erlang = {\n  name: \"erlang\",\n  startState() {\n    return {tokenStack: [],\n            in_string:  false,\n            in_atom:    false};\n  },\n\n  token: tokenizer,\n\n  indent: indenter,\n\n  languageData: {\n    commentTokens: {line: \"%\"}\n  }\n};\n\n","import {simpleMode} from \"./simple-mode.js\"\n\nexport const factor = simpleMode({\n    start: [\n      // comments\n      {regex: /#?!.*/, token: \"comment\"},\n      // strings \"\"\", multiline --> state\n      {regex: /\"\"\"/, token: \"string\", next: \"string3\"},\n      {regex: /(STRING:)(\\s)/, token: [\"keyword\", null], next: \"string2\"},\n      {regex: /\\S*?\"/, token: \"string\", next: \"string\"},\n      // numbers: dec, hex, unicode, bin, fractional, complex\n      {regex: /(?:0x[\\d,a-f]+)|(?:0o[0-7]+)|(?:0b[0,1]+)|(?:\\-?\\d+.?\\d*)(?=\\s)/, token: \"number\"},\n      //{regex: /[+-]?/} //fractional\n      // definition: defining word, defined word, etc\n      {regex: /((?:GENERIC)|\\:?\\:)(\\s+)(\\S+)(\\s+)(\\()/, token: [\"keyword\", null, \"def\", null, \"bracket\"], next: \"stack\"},\n      // method definition: defining word, type, defined word, etc\n      {regex: /(M\\:)(\\s+)(\\S+)(\\s+)(\\S+)/, token: [\"keyword\", null, \"def\", null, \"tag\"]},\n      // vocabulary using --> state\n      {regex: /USING\\:/, token: \"keyword\", next: \"vocabulary\"},\n      // vocabulary definition/use\n      {regex: /(USE\\:|IN\\:)(\\s+)(\\S+)(?=\\s|$)/, token: [\"keyword\", null, \"tag\"]},\n      // definition: a defining word, defined word\n      {regex: /(\\S+\\:)(\\s+)(\\S+)(?=\\s|$)/, token: [\"keyword\", null, \"def\"]},\n      // \"keywords\", incl. ; t f . [ ] { } defining words\n      {regex: /(?:;|\\\\|t|f|if|loop|while|until|do|PRIVATE>|<PRIVATE|\\.|\\S*\\[|\\]|\\S*\\{|\\})(?=\\s|$)/, token: \"keyword\"},\n      // <constructors> and the like\n      {regex: /\\S+[\\)>\\.\\*\\?]+(?=\\s|$)/, token: \"builtin\"},\n      {regex: /[\\)><]+\\S+(?=\\s|$)/, token: \"builtin\"},\n      // operators\n      {regex: /(?:[\\+\\-\\=\\/\\*<>])(?=\\s|$)/, token: \"keyword\"},\n      // any id (?)\n      {regex: /\\S+/, token: \"variable\"},\n      {regex: /\\s+|./, token: null}\n    ],\n    vocabulary: [\n      {regex: /;/, token: \"keyword\", next: \"start\"},\n      {regex: /\\S+/, token: \"tag\"},\n      {regex: /\\s+|./, token: null}\n    ],\n    string: [\n      {regex: /(?:[^\\\\]|\\\\.)*?\"/, token: \"string\", next: \"start\"},\n      {regex: /.*/, token: \"string\"}\n    ],\n    string2: [\n      {regex: /^;/, token: \"keyword\", next: \"start\"},\n      {regex: /.*/, token: \"string\"}\n    ],\n    string3: [\n      {regex: /(?:[^\\\\]|\\\\.)*?\"\"\"/, token: \"string\", next: \"start\"},\n      {regex: /.*/, token: \"string\"}\n    ],\n    stack: [\n      {regex: /\\)/, token: \"bracket\", next: \"start\"},\n      {regex: /--/, token: \"bracket\"},\n      {regex: /\\S+/, token: \"meta\"},\n      {regex: /\\s+|./, token: null}\n    ],\n    languageData: {\n      name: \"factor\",\n      dontIndentStates: [\"start\", \"vocabulary\", \"string\", \"string3\", \"stack\"],\n      commentTokens: {line: \"!\"}\n    }\n  });\n","var keywords = {\n  \"term\": true,\n  \"method\": true, \"accu\": true,\n  \"rule\": true, \"then\": true, \"is\": true, \"and\": true, \"or\": true,\n  \"if\": true, \"default\": true\n};\n\nvar start_blocks = {\n  \"var_input\": true,\n  \"var_output\": true,\n  \"fuzzify\": true,\n  \"defuzzify\": true,\n  \"function_block\": true,\n  \"ruleblock\": true\n};\n\nvar end_blocks = {\n  \"end_ruleblock\": true,\n  \"end_defuzzify\": true,\n  \"end_function_block\": true,\n  \"end_fuzzify\": true,\n  \"end_var\": true\n};\n\nvar atoms = {\n  \"true\": true, \"false\": true, \"nan\": true,\n  \"real\": true, \"min\": true, \"max\": true, \"cog\": true, \"cogs\": true\n};\n\nvar isOperatorChar = /[+\\-*&^%:=<>!|\\/]/;\n\nfunction tokenBase(stream, state) {\n  var ch = stream.next();\n\n  if (/[\\d\\.]/.test(ch)) {\n    if (ch == \".\") {\n      stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n    } else if (ch == \"0\") {\n      stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n    } else {\n      stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n    }\n    return \"number\";\n  }\n\n  if (ch == \"/\" || ch == \"(\") {\n    if (stream.eat(\"*\")) {\n      state.tokenize = tokenComment;\n      return tokenComment(stream, state);\n    }\n    if (stream.eat(\"/\")) {\n      stream.skipToEnd();\n      return \"comment\";\n    }\n  }\n  if (isOperatorChar.test(ch)) {\n    stream.eatWhile(isOperatorChar);\n    return \"operator\";\n  }\n  stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n\n  var cur = stream.current().toLowerCase();\n  if (keywords.propertyIsEnumerable(cur) ||\n      start_blocks.propertyIsEnumerable(cur) ||\n      end_blocks.propertyIsEnumerable(cur)) {\n    return \"keyword\";\n  }\n  if (atoms.propertyIsEnumerable(cur)) return \"atom\";\n  return \"variable\";\n}\n\n\nfunction tokenComment(stream, state) {\n  var maybeEnd = false, ch;\n  while (ch = stream.next()) {\n    if ((ch == \"/\" || ch == \")\") && maybeEnd) {\n      state.tokenize = tokenBase;\n      break;\n    }\n    maybeEnd = (ch == \"*\");\n  }\n  return \"comment\";\n}\n\nfunction Context(indented, column, type, align, prev) {\n  this.indented = indented;\n  this.column = column;\n  this.type = type;\n  this.align = align;\n  this.prev = prev;\n}\n\nfunction pushContext(state, col, type) {\n  return state.context = new Context(state.indented, col, type, null, state.context);\n}\n\nfunction popContext(state) {\n  if (!state.context.prev) return;\n  var t = state.context.type;\n  if (t == \"end_block\")\n    state.indented = state.context.indented;\n  return state.context = state.context.prev;\n}\n\n// Interface\n\nexport const fcl = {\n  name: \"fcl\",\n  startState: function(indentUnit) {\n    return {\n      tokenize: null,\n      context: new Context(-indentUnit, 0, \"top\", false),\n      indented: 0,\n      startOfLine: true\n    };\n  },\n\n  token: function(stream, state) {\n    var ctx = state.context;\n    if (stream.sol()) {\n      if (ctx.align == null) ctx.align = false;\n      state.indented = stream.indentation();\n      state.startOfLine = true;\n    }\n    if (stream.eatSpace()) return null;\n\n    var style = (state.tokenize || tokenBase)(stream, state);\n    if (style == \"comment\") return style;\n    if (ctx.align == null) ctx.align = true;\n\n    var cur = stream.current().toLowerCase();\n\n    if (start_blocks.propertyIsEnumerable(cur)) pushContext(state, stream.column(), \"end_block\");\n    else if (end_blocks.propertyIsEnumerable(cur))  popContext(state);\n\n    state.startOfLine = false;\n    return style;\n  },\n\n  indent: function(state, textAfter, cx) {\n    if (state.tokenize != tokenBase && state.tokenize != null) return 0;\n    var ctx = state.context;\n\n    var closing = end_blocks.propertyIsEnumerable(textAfter);\n    if (ctx.align) return ctx.column + (closing ? 0 : 1);\n    else return ctx.indented + (closing ? 0 : cx.unit);\n  },\n\n  languageData: {\n    commentTokens: {line: \"//\", block: {open: \"(*\", close: \"*)\"}}\n  }\n};\n\n","function toWordList(words) {\n  var ret = [];\n  words.split(' ').forEach(function(e){\n    ret.push({name: e});\n  });\n  return ret;\n}\n\nvar coreWordList = toWordList(\n  'INVERT AND OR XOR\\\n 2* 2/ LSHIFT RSHIFT\\\n 0= = 0< < > U< MIN MAX\\\n 2DROP 2DUP 2OVER 2SWAP ?DUP DEPTH DROP DUP OVER ROT SWAP\\\n >R R> R@\\\n + - 1+ 1- ABS NEGATE\\\n S>D * M* UM*\\\n FM/MOD SM/REM UM/MOD */ */MOD / /MOD MOD\\\n HERE , @ ! CELL+ CELLS C, C@ C! CHARS 2@ 2!\\\n ALIGN ALIGNED +! ALLOT\\\n CHAR [CHAR] [ ] BL\\\n FIND EXECUTE IMMEDIATE COUNT LITERAL STATE\\\n ; DOES> >BODY\\\n EVALUATE\\\n SOURCE >IN\\\n <# # #S #> HOLD SIGN BASE >NUMBER HEX DECIMAL\\\n FILL MOVE\\\n . CR EMIT SPACE SPACES TYPE U. .R U.R\\\n ACCEPT\\\n TRUE FALSE\\\n <> U> 0<> 0>\\\n NIP TUCK ROLL PICK\\\n 2>R 2R@ 2R>\\\n WITHIN UNUSED MARKER\\\n I J\\\n TO\\\n COMPILE, [COMPILE]\\\n SAVE-INPUT RESTORE-INPUT\\\n PAD ERASE\\\n 2LITERAL DNEGATE\\\n D- D+ D0< D0= D2* D2/ D< D= DMAX DMIN D>S DABS\\\n M+ M*/ D. D.R 2ROT DU<\\\n CATCH THROW\\\n FREE RESIZE ALLOCATE\\\n CS-PICK CS-ROLL\\\n GET-CURRENT SET-CURRENT FORTH-WORDLIST GET-ORDER SET-ORDER\\\n PREVIOUS SEARCH-WORDLIST WORDLIST FIND ALSO ONLY FORTH DEFINITIONS ORDER\\\n -TRAILING /STRING SEARCH COMPARE CMOVE CMOVE> BLANK SLITERAL');\n\nvar immediateWordList = toWordList('IF ELSE THEN BEGIN WHILE REPEAT UNTIL RECURSE [IF] [ELSE] [THEN] ?DO DO LOOP +LOOP UNLOOP LEAVE EXIT AGAIN CASE OF ENDOF ENDCASE');\n\nfunction searchWordList (wordList, word) {\n  var i;\n  for (i = wordList.length - 1; i >= 0; i--) {\n    if (wordList[i].name === word.toUpperCase()) {\n      return wordList[i];\n    }\n  }\n  return undefined;\n}\nexport const forth = {\n  name: \"forth\",\n  startState: function() {\n    return {\n      state: '',\n      base: 10,\n      coreWordList: coreWordList,\n      immediateWordList: immediateWordList,\n      wordList: []\n    };\n  },\n  token: function (stream, stt) {\n    var mat;\n    if (stream.eatSpace()) {\n      return null;\n    }\n    if (stt.state === '') { // interpretation\n      if (stream.match(/^(\\]|:NONAME)(\\s|$)/i)) {\n        stt.state = ' compilation';\n        return 'builtin';\n      }\n      mat = stream.match(/^(\\:)\\s+(\\S+)(\\s|$)+/);\n      if (mat) {\n        stt.wordList.push({name: mat[2].toUpperCase()});\n        stt.state = ' compilation';\n        return 'def';\n      }\n      mat = stream.match(/^(VARIABLE|2VARIABLE|CONSTANT|2CONSTANT|CREATE|POSTPONE|VALUE|WORD)\\s+(\\S+)(\\s|$)+/i);\n      if (mat) {\n        stt.wordList.push({name: mat[2].toUpperCase()});\n        return 'def';\n      }\n      mat = stream.match(/^(\\'|\\[\\'\\])\\s+(\\S+)(\\s|$)+/);\n      if (mat) {\n        return 'builtin'\n      }\n    } else { // compilation\n      // ; [\n      if (stream.match(/^(\\;|\\[)(\\s)/)) {\n        stt.state = '';\n        stream.backUp(1);\n        return 'builtin';\n      }\n      if (stream.match(/^(\\;|\\[)($)/)) {\n        stt.state = '';\n        return 'builtin';\n      }\n      if (stream.match(/^(POSTPONE)\\s+\\S+(\\s|$)+/)) {\n        return 'builtin';\n      }\n    }\n\n    // dynamic wordlist\n    mat = stream.match(/^(\\S+)(\\s+|$)/);\n    if (mat) {\n      if (searchWordList(stt.wordList, mat[1]) !== undefined) {\n        return 'variable';\n      }\n\n      // comments\n      if (mat[1] === '\\\\') {\n        stream.skipToEnd();\n        return 'comment';\n      }\n\n      // core words\n      if (searchWordList(stt.coreWordList, mat[1]) !== undefined) {\n        return 'builtin';\n      }\n      if (searchWordList(stt.immediateWordList, mat[1]) !== undefined) {\n        return 'keyword';\n      }\n\n      if (mat[1] === '(') {\n        stream.eatWhile(function (s) { return s !== ')'; });\n        stream.eat(')');\n        return 'comment';\n      }\n\n      // // strings\n      if (mat[1] === '.(') {\n        stream.eatWhile(function (s) { return s !== ')'; });\n        stream.eat(')');\n        return 'string';\n      }\n      if (mat[1] === 'S\"' || mat[1] === '.\"' || mat[1] === 'C\"') {\n        stream.eatWhile(function (s) { return s !== '\"'; });\n        stream.eat('\"');\n        return 'string';\n      }\n\n      // numbers\n      if (mat[1] - 0xfffffffff) {\n        return 'number';\n      }\n      // if (mat[1].match(/^[-+]?[0-9]+\\.[0-9]*/)) {\n      //     return 'number';\n      // }\n\n      return 'atom';\n    }\n  }\n};\n","function words(array) {\n  var keys = {};\n  for (var i = 0; i < array.length; ++i) {\n    keys[array[i]] = true;\n  }\n  return keys;\n}\n\nvar keywords = words([\n  \"abstract\", \"accept\", \"allocatable\", \"allocate\",\n  \"array\", \"assign\", \"asynchronous\", \"backspace\",\n  \"bind\", \"block\", \"byte\", \"call\", \"case\",\n  \"class\", \"close\", \"common\", \"contains\",\n  \"continue\", \"cycle\", \"data\", \"deallocate\",\n  \"decode\", \"deferred\", \"dimension\", \"do\",\n  \"elemental\", \"else\", \"encode\", \"end\",\n  \"endif\", \"entry\", \"enumerator\", \"equivalence\",\n  \"exit\", \"external\", \"extrinsic\", \"final\",\n  \"forall\", \"format\", \"function\", \"generic\",\n  \"go\", \"goto\", \"if\", \"implicit\", \"import\", \"include\",\n  \"inquire\", \"intent\", \"interface\", \"intrinsic\",\n  \"module\", \"namelist\", \"non_intrinsic\",\n  \"non_overridable\", \"none\", \"nopass\",\n  \"nullify\", \"open\", \"optional\", \"options\",\n  \"parameter\", \"pass\", \"pause\", \"pointer\",\n  \"print\", \"private\", \"program\", \"protected\",\n  \"public\", \"pure\", \"read\", \"recursive\", \"result\",\n  \"return\", \"rewind\", \"save\", \"select\", \"sequence\",\n  \"stop\", \"subroutine\", \"target\", \"then\", \"to\", \"type\",\n  \"use\", \"value\", \"volatile\", \"where\", \"while\",\n  \"write\"]);\nvar builtins = words([\"abort\", \"abs\", \"access\", \"achar\", \"acos\",\n                      \"adjustl\", \"adjustr\", \"aimag\", \"aint\", \"alarm\",\n                      \"all\", \"allocated\", \"alog\", \"amax\", \"amin\",\n                      \"amod\", \"and\", \"anint\", \"any\", \"asin\",\n                      \"associated\", \"atan\", \"besj\", \"besjn\", \"besy\",\n                      \"besyn\", \"bit_size\", \"btest\", \"cabs\", \"ccos\",\n                      \"ceiling\", \"cexp\", \"char\", \"chdir\", \"chmod\",\n                      \"clog\", \"cmplx\", \"command_argument_count\",\n                      \"complex\", \"conjg\", \"cos\", \"cosh\", \"count\",\n                      \"cpu_time\", \"cshift\", \"csin\", \"csqrt\", \"ctime\",\n                      \"c_funloc\", \"c_loc\", \"c_associated\", \"c_null_ptr\",\n                      \"c_null_funptr\", \"c_f_pointer\", \"c_null_char\",\n                      \"c_alert\", \"c_backspace\", \"c_form_feed\",\n                      \"c_new_line\", \"c_carriage_return\",\n                      \"c_horizontal_tab\", \"c_vertical_tab\", \"dabs\",\n                      \"dacos\", \"dasin\", \"datan\", \"date_and_time\",\n                      \"dbesj\", \"dbesj\", \"dbesjn\", \"dbesy\", \"dbesy\",\n                      \"dbesyn\", \"dble\", \"dcos\", \"dcosh\", \"ddim\", \"derf\",\n                      \"derfc\", \"dexp\", \"digits\", \"dim\", \"dint\", \"dlog\",\n                      \"dlog\", \"dmax\", \"dmin\", \"dmod\", \"dnint\",\n                      \"dot_product\", \"dprod\", \"dsign\", \"dsinh\",\n                      \"dsin\", \"dsqrt\", \"dtanh\", \"dtan\", \"dtime\",\n                      \"eoshift\", \"epsilon\", \"erf\", \"erfc\", \"etime\",\n                      \"exit\", \"exp\", \"exponent\", \"extends_type_of\",\n                      \"fdate\", \"fget\", \"fgetc\", \"float\", \"floor\",\n                      \"flush\", \"fnum\", \"fputc\", \"fput\", \"fraction\",\n                      \"fseek\", \"fstat\", \"ftell\", \"gerror\", \"getarg\",\n                      \"get_command\", \"get_command_argument\",\n                      \"get_environment_variable\", \"getcwd\",\n                      \"getenv\", \"getgid\", \"getlog\", \"getpid\",\n                      \"getuid\", \"gmtime\", \"hostnm\", \"huge\", \"iabs\",\n                      \"iachar\", \"iand\", \"iargc\", \"ibclr\", \"ibits\",\n                      \"ibset\", \"ichar\", \"idate\", \"idim\", \"idint\",\n                      \"idnint\", \"ieor\", \"ierrno\", \"ifix\", \"imag\",\n                      \"imagpart\", \"index\", \"int\", \"ior\", \"irand\",\n                      \"isatty\", \"ishft\", \"ishftc\", \"isign\",\n                      \"iso_c_binding\", \"is_iostat_end\", \"is_iostat_eor\",\n                      \"itime\", \"kill\", \"kind\", \"lbound\", \"len\", \"len_trim\",\n                      \"lge\", \"lgt\", \"link\", \"lle\", \"llt\", \"lnblnk\", \"loc\",\n                      \"log\", \"logical\", \"long\", \"lshift\", \"lstat\", \"ltime\",\n                      \"matmul\", \"max\", \"maxexponent\", \"maxloc\", \"maxval\",\n                      \"mclock\", \"merge\", \"move_alloc\", \"min\", \"minexponent\",\n                      \"minloc\", \"minval\", \"mod\", \"modulo\", \"mvbits\",\n                      \"nearest\", \"new_line\", \"nint\", \"not\", \"or\", \"pack\",\n                      \"perror\", \"precision\", \"present\", \"product\", \"radix\",\n                      \"rand\", \"random_number\", \"random_seed\", \"range\",\n                      \"real\", \"realpart\", \"rename\", \"repeat\", \"reshape\",\n                      \"rrspacing\", \"rshift\", \"same_type_as\", \"scale\",\n                      \"scan\", \"second\", \"selected_int_kind\",\n                      \"selected_real_kind\", \"set_exponent\", \"shape\",\n                      \"short\", \"sign\", \"signal\", \"sinh\", \"sin\", \"sleep\",\n                      \"sngl\", \"spacing\", \"spread\", \"sqrt\", \"srand\", \"stat\",\n                      \"sum\", \"symlnk\", \"system\", \"system_clock\", \"tan\",\n                      \"tanh\", \"time\", \"tiny\", \"transfer\", \"transpose\",\n                      \"trim\", \"ttynam\", \"ubound\", \"umask\", \"unlink\",\n                      \"unpack\", \"verify\", \"xor\", \"zabs\", \"zcos\", \"zexp\",\n                      \"zlog\", \"zsin\", \"zsqrt\"]);\n\nvar dataTypes =  words([\"c_bool\", \"c_char\", \"c_double\", \"c_double_complex\",\n                        \"c_float\", \"c_float_complex\", \"c_funptr\", \"c_int\",\n                        \"c_int16_t\", \"c_int32_t\", \"c_int64_t\", \"c_int8_t\",\n                        \"c_int_fast16_t\", \"c_int_fast32_t\", \"c_int_fast64_t\",\n                        \"c_int_fast8_t\", \"c_int_least16_t\", \"c_int_least32_t\",\n                        \"c_int_least64_t\", \"c_int_least8_t\", \"c_intmax_t\",\n                        \"c_intptr_t\", \"c_long\", \"c_long_double\",\n                        \"c_long_double_complex\", \"c_long_long\", \"c_ptr\",\n                        \"c_short\", \"c_signed_char\", \"c_size_t\", \"character\",\n                        \"complex\", \"double\", \"integer\", \"logical\", \"real\"]);\nvar isOperatorChar = /[+\\-*&=<>\\/\\:]/;\nvar litOperator = /^\\.(and|or|eq|lt|le|gt|ge|ne|not|eqv|neqv)\\./i;\n\nfunction tokenBase(stream, state) {\n\n  if (stream.match(litOperator)){\n    return 'operator';\n  }\n\n  var ch = stream.next();\n  if (ch == \"!\") {\n    stream.skipToEnd();\n    return \"comment\";\n  }\n  if (ch == '\"' || ch == \"'\") {\n    state.tokenize = tokenString(ch);\n    return state.tokenize(stream, state);\n  }\n  if (/[\\[\\]\\(\\),]/.test(ch)) {\n    return null;\n  }\n  if (/\\d/.test(ch)) {\n    stream.eatWhile(/[\\w\\.]/);\n    return \"number\";\n  }\n  if (isOperatorChar.test(ch)) {\n    stream.eatWhile(isOperatorChar);\n    return \"operator\";\n  }\n  stream.eatWhile(/[\\w\\$_]/);\n  var word = stream.current().toLowerCase();\n\n  if (keywords.hasOwnProperty(word)){\n    return 'keyword';\n  }\n  if (builtins.hasOwnProperty(word) || dataTypes.hasOwnProperty(word)) {\n    return 'builtin';\n  }\n  return \"variable\";\n}\n\nfunction tokenString(quote) {\n  return function(stream, state) {\n    var escaped = false, next, end = false;\n    while ((next = stream.next()) != null) {\n      if (next == quote && !escaped) {\n        end = true;\n        break;\n      }\n      escaped = !escaped && next == \"\\\\\";\n    }\n    if (end || !escaped) state.tokenize = null;\n    return \"string\";\n  };\n}\n\n// Interface\n\nexport const fortran = {\n  name: \"fortran\",\n  startState: function() {\n    return {tokenize: null};\n  },\n\n  token: function(stream, state) {\n    if (stream.eatSpace()) return null;\n    var style = (state.tokenize || tokenBase)(stream, state);\n    if (style == \"comment\" || style == \"meta\") return style;\n    return style;\n  }\n};\n\n","function mkGas(arch) {\n  // If an architecture is specified, its initialization function may\n  // populate this array with custom parsing functions which will be\n  // tried in the event that the standard functions do not find a match.\n  var custom = [];\n\n  // The symbol used to start a line comment changes based on the target\n  // architecture.\n  // If no architecture is pased in \"parserConfig\" then only multiline\n  // comments will have syntax support.\n  var lineCommentStartSymbol = \"\";\n\n  // These directives are architecture independent.\n  // Machine specific directives should go in their respective\n  // architecture initialization function.\n  // Reference:\n  // http://sourceware.org/binutils/docs/as/Pseudo-Ops.html#Pseudo-Ops\n  var directives = {\n    \".abort\" : \"builtin\",\n    \".align\" : \"builtin\",\n    \".altmacro\" : \"builtin\",\n    \".ascii\" : \"builtin\",\n    \".asciz\" : \"builtin\",\n    \".balign\" : \"builtin\",\n    \".balignw\" : \"builtin\",\n    \".balignl\" : \"builtin\",\n    \".bundle_align_mode\" : \"builtin\",\n    \".bundle_lock\" : \"builtin\",\n    \".bundle_unlock\" : \"builtin\",\n    \".byte\" : \"builtin\",\n    \".cfi_startproc\" : \"builtin\",\n    \".comm\" : \"builtin\",\n    \".data\" : \"builtin\",\n    \".def\" : \"builtin\",\n    \".desc\" : \"builtin\",\n    \".dim\" : \"builtin\",\n    \".double\" : \"builtin\",\n    \".eject\" : \"builtin\",\n    \".else\" : \"builtin\",\n    \".elseif\" : \"builtin\",\n    \".end\" : \"builtin\",\n    \".endef\" : \"builtin\",\n    \".endfunc\" : \"builtin\",\n    \".endif\" : \"builtin\",\n    \".equ\" : \"builtin\",\n    \".equiv\" : \"builtin\",\n    \".eqv\" : \"builtin\",\n    \".err\" : \"builtin\",\n    \".error\" : \"builtin\",\n    \".exitm\" : \"builtin\",\n    \".extern\" : \"builtin\",\n    \".fail\" : \"builtin\",\n    \".file\" : \"builtin\",\n    \".fill\" : \"builtin\",\n    \".float\" : \"builtin\",\n    \".func\" : \"builtin\",\n    \".global\" : \"builtin\",\n    \".gnu_attribute\" : \"builtin\",\n    \".hidden\" : \"builtin\",\n    \".hword\" : \"builtin\",\n    \".ident\" : \"builtin\",\n    \".if\" : \"builtin\",\n    \".incbin\" : \"builtin\",\n    \".include\" : \"builtin\",\n    \".int\" : \"builtin\",\n    \".internal\" : \"builtin\",\n    \".irp\" : \"builtin\",\n    \".irpc\" : \"builtin\",\n    \".lcomm\" : \"builtin\",\n    \".lflags\" : \"builtin\",\n    \".line\" : \"builtin\",\n    \".linkonce\" : \"builtin\",\n    \".list\" : \"builtin\",\n    \".ln\" : \"builtin\",\n    \".loc\" : \"builtin\",\n    \".loc_mark_labels\" : \"builtin\",\n    \".local\" : \"builtin\",\n    \".long\" : \"builtin\",\n    \".macro\" : \"builtin\",\n    \".mri\" : \"builtin\",\n    \".noaltmacro\" : \"builtin\",\n    \".nolist\" : \"builtin\",\n    \".octa\" : \"builtin\",\n    \".offset\" : \"builtin\",\n    \".org\" : \"builtin\",\n    \".p2align\" : \"builtin\",\n    \".popsection\" : \"builtin\",\n    \".previous\" : \"builtin\",\n    \".print\" : \"builtin\",\n    \".protected\" : \"builtin\",\n    \".psize\" : \"builtin\",\n    \".purgem\" : \"builtin\",\n    \".pushsection\" : \"builtin\",\n    \".quad\" : \"builtin\",\n    \".reloc\" : \"builtin\",\n    \".rept\" : \"builtin\",\n    \".sbttl\" : \"builtin\",\n    \".scl\" : \"builtin\",\n    \".section\" : \"builtin\",\n    \".set\" : \"builtin\",\n    \".short\" : \"builtin\",\n    \".single\" : \"builtin\",\n    \".size\" : \"builtin\",\n    \".skip\" : \"builtin\",\n    \".sleb128\" : \"builtin\",\n    \".space\" : \"builtin\",\n    \".stab\" : \"builtin\",\n    \".string\" : \"builtin\",\n    \".struct\" : \"builtin\",\n    \".subsection\" : \"builtin\",\n    \".symver\" : \"builtin\",\n    \".tag\" : \"builtin\",\n    \".text\" : \"builtin\",\n    \".title\" : \"builtin\",\n    \".type\" : \"builtin\",\n    \".uleb128\" : \"builtin\",\n    \".val\" : \"builtin\",\n    \".version\" : \"builtin\",\n    \".vtable_entry\" : \"builtin\",\n    \".vtable_inherit\" : \"builtin\",\n    \".warning\" : \"builtin\",\n    \".weak\" : \"builtin\",\n    \".weakref\" : \"builtin\",\n    \".word\" : \"builtin\"\n  };\n\n  var registers = {};\n\n  function x86() {\n    lineCommentStartSymbol = \"#\";\n\n    registers.al  = \"variable\";\n    registers.ah  = \"variable\";\n    registers.ax  = \"variable\";\n    registers.eax = \"variableName.special\";\n    registers.rax = \"variableName.special\";\n\n    registers.bl  = \"variable\";\n    registers.bh  = \"variable\";\n    registers.bx  = \"variable\";\n    registers.ebx = \"variableName.special\";\n    registers.rbx = \"variableName.special\";\n\n    registers.cl  = \"variable\";\n    registers.ch  = \"variable\";\n    registers.cx  = \"variable\";\n    registers.ecx = \"variableName.special\";\n    registers.rcx = \"variableName.special\";\n\n    registers.dl  = \"variable\";\n    registers.dh  = \"variable\";\n    registers.dx  = \"variable\";\n    registers.edx = \"variableName.special\";\n    registers.rdx = \"variableName.special\";\n\n    registers.si  = \"variable\";\n    registers.esi = \"variableName.special\";\n    registers.rsi = \"variableName.special\";\n\n    registers.di  = \"variable\";\n    registers.edi = \"variableName.special\";\n    registers.rdi = \"variableName.special\";\n\n    registers.sp  = \"variable\";\n    registers.esp = \"variableName.special\";\n    registers.rsp = \"variableName.special\";\n\n    registers.bp  = \"variable\";\n    registers.ebp = \"variableName.special\";\n    registers.rbp = \"variableName.special\";\n\n    registers.ip  = \"variable\";\n    registers.eip = \"variableName.special\";\n    registers.rip = \"variableName.special\";\n\n    registers.cs  = \"keyword\";\n    registers.ds  = \"keyword\";\n    registers.ss  = \"keyword\";\n    registers.es  = \"keyword\";\n    registers.fs  = \"keyword\";\n    registers.gs  = \"keyword\";\n  }\n\n  function armv6() {\n    // Reference:\n    // http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf\n    // http://infocenter.arm.com/help/topic/com.arm.doc.ddi0301h/DDI0301H_arm1176jzfs_r0p7_trm.pdf\n    lineCommentStartSymbol = \"@\";\n    directives.syntax = \"builtin\";\n\n    registers.r0  = \"variable\";\n    registers.r1  = \"variable\";\n    registers.r2  = \"variable\";\n    registers.r3  = \"variable\";\n    registers.r4  = \"variable\";\n    registers.r5  = \"variable\";\n    registers.r6  = \"variable\";\n    registers.r7  = \"variable\";\n    registers.r8  = \"variable\";\n    registers.r9  = \"variable\";\n    registers.r10 = \"variable\";\n    registers.r11 = \"variable\";\n    registers.r12 = \"variable\";\n\n    registers.sp  = \"variableName.special\";\n    registers.lr  = \"variableName.special\";\n    registers.pc  = \"variableName.special\";\n    registers.r13 = registers.sp;\n    registers.r14 = registers.lr;\n    registers.r15 = registers.pc;\n\n    custom.push(function(ch, stream) {\n      if (ch === '#') {\n        stream.eatWhile(/\\w/);\n        return \"number\";\n      }\n    });\n  }\n\n  if (arch === \"x86\") {\n    x86();\n  } else if (arch === \"arm\" || arch === \"armv6\") {\n    armv6();\n  }\n\n  function nextUntilUnescaped(stream, end) {\n    var escaped = false, next;\n    while ((next = stream.next()) != null) {\n      if (next === end && !escaped) {\n        return false;\n      }\n      escaped = !escaped && next === \"\\\\\";\n    }\n    return escaped;\n  }\n\n  function clikeComment(stream, state) {\n    var maybeEnd = false, ch;\n    while ((ch = stream.next()) != null) {\n      if (ch === \"/\" && maybeEnd) {\n        state.tokenize = null;\n        break;\n      }\n      maybeEnd = (ch === \"*\");\n    }\n    return \"comment\";\n  }\n\n  return {\n    name: \"gas\",\n    startState: function() {\n      return {\n        tokenize: null\n      };\n    },\n\n    token: function(stream, state) {\n      if (state.tokenize) {\n        return state.tokenize(stream, state);\n      }\n\n      if (stream.eatSpace()) {\n        return null;\n      }\n\n      var style, cur, ch = stream.next();\n\n      if (ch === \"/\") {\n        if (stream.eat(\"*\")) {\n          state.tokenize = clikeComment;\n          return clikeComment(stream, state);\n        }\n      }\n\n      if (ch === lineCommentStartSymbol) {\n        stream.skipToEnd();\n        return \"comment\";\n      }\n\n      if (ch === '\"') {\n        nextUntilUnescaped(stream, '\"');\n        return \"string\";\n      }\n\n      if (ch === '.') {\n        stream.eatWhile(/\\w/);\n        cur = stream.current().toLowerCase();\n        style = directives[cur];\n        return style || null;\n      }\n\n      if (ch === '=') {\n        stream.eatWhile(/\\w/);\n        return \"tag\";\n      }\n\n      if (ch === '{') {\n        return \"bracket\";\n      }\n\n      if (ch === '}') {\n        return \"bracket\";\n      }\n\n      if (/\\d/.test(ch)) {\n        if (ch === \"0\" && stream.eat(\"x\")) {\n          stream.eatWhile(/[0-9a-fA-F]/);\n          return \"number\";\n        }\n        stream.eatWhile(/\\d/);\n        return \"number\";\n      }\n\n      if (/\\w/.test(ch)) {\n        stream.eatWhile(/\\w/);\n        if (stream.eat(\":\")) {\n          return 'tag';\n        }\n        cur = stream.current().toLowerCase();\n        style = registers[cur];\n        return style || null;\n      }\n\n      for (var i = 0; i < custom.length; i++) {\n        style = custom[i](ch, stream, state);\n        if (style) {\n          return style;\n        }\n      }\n    },\n\n    languageData: {\n      commentTokens: {\n        line: lineCommentStartSymbol,\n        block: {open: \"/*\", close: \"*/\"}\n      }\n    }\n  };\n};\n\nexport const gas = mkGas(\"x86\")\nexport const gasArm = mkGas(\"arm\")\n","export const gherkin = {\n  name: \"gherkin\",\n  startState: function () {\n    return {\n      lineNumber: 0,\n      tableHeaderLine: false,\n      allowFeature: true,\n      allowBackground: false,\n      allowScenario: false,\n      allowSteps: false,\n      allowPlaceholders: false,\n      allowMultilineArgument: false,\n      inMultilineString: false,\n      inMultilineTable: false,\n      inKeywordLine: false\n    };\n  },\n  token: function (stream, state) {\n    if (stream.sol()) {\n      state.lineNumber++;\n      state.inKeywordLine = false;\n      if (state.inMultilineTable) {\n        state.tableHeaderLine = false;\n        if (!stream.match(/\\s*\\|/, false)) {\n          state.allowMultilineArgument = false;\n          state.inMultilineTable = false;\n        }\n      }\n    }\n\n    stream.eatSpace();\n\n    if (state.allowMultilineArgument) {\n\n      // STRING\n      if (state.inMultilineString) {\n        if (stream.match('\"\"\"')) {\n          state.inMultilineString = false;\n          state.allowMultilineArgument = false;\n        } else {\n          stream.match(/.*/);\n        }\n        return \"string\";\n      }\n\n      // TABLE\n      if (state.inMultilineTable) {\n        if (stream.match(/\\|\\s*/)) {\n          return \"bracket\";\n        } else {\n          stream.match(/[^\\|]*/);\n          return state.tableHeaderLine ? \"header\" : \"string\";\n        }\n      }\n\n      // DETECT START\n      if (stream.match('\"\"\"')) {\n        // String\n        state.inMultilineString = true;\n        return \"string\";\n      } else if (stream.match(\"|\")) {\n        // Table\n        state.inMultilineTable = true;\n        state.tableHeaderLine = true;\n        return \"bracket\";\n      }\n\n    }\n\n    // LINE COMMENT\n    if (stream.match(/#.*/)) {\n      return \"comment\";\n\n      // TAG\n    } else if (!state.inKeywordLine && stream.match(/@\\S+/)) {\n      return \"tag\";\n\n      // FEATURE\n    } else if (!state.inKeywordLine && state.allowFeature && stream.match(/(機能|功能|フィーチャ|기능|โครงหลัก|ความสามารถ|ความต้องการทางธุรกิจ|ಹೆಚ್ಚಳ|గుణము|ਮੁਹਾਂਦਰਾ|ਨਕਸ਼ ਨੁਹਾਰ|ਖਾਸੀਅਤ|रूप लेख|وِیژگی|خاصية|תכונה|Функціонал|Функция|Функционалност|Функционал|Үзенчәлеклелек|Свойство|Особина|Мөмкинлек|Могућност|Λειτουργία|Δυνατότητα|Właściwość|Vlastnosť|Trajto|Tính năng|Savybė|Pretty much|Požiadavka|Požadavek|Potrzeba biznesowa|Özellik|Osobina|Ominaisuus|Omadus|OH HAI|Mogućnost|Mogucnost|Jellemző|Hwæt|Hwaet|Funzionalità|Funktionalitéit|Funktionalität|Funkcja|Funkcionalnost|Funkcionalitāte|Funkcia|Fungsi|Functionaliteit|Funcționalitate|Funcţionalitate|Functionalitate|Funcionalitat|Funcionalidade|Fonctionnalité|Fitur|Fīča|Feature|Eiginleiki|Egenskap|Egenskab|Característica|Caracteristica|Business Need|Aspekt|Arwedd|Ahoy matey!|Ability):/)) {\n      state.allowScenario = true;\n      state.allowBackground = true;\n      state.allowPlaceholders = false;\n      state.allowSteps = false;\n      state.allowMultilineArgument = false;\n      state.inKeywordLine = true;\n      return \"keyword\";\n\n      // BACKGROUND\n    } else if (!state.inKeywordLine && state.allowBackground && stream.match(/(背景|배경|แนวคิด|ಹಿನ್ನೆಲೆ|నేపథ్యం|ਪਿਛੋਕੜ|पृष्ठभूमि|زمینه|الخلفية|רקע|Тарих|Предыстория|Предистория|Позадина|Передумова|Основа|Контекст|Кереш|Υπόβαθρο|Założenia|Yo\\-ho\\-ho|Tausta|Taust|Situācija|Rerefons|Pozadina|Pozadie|Pozadí|Osnova|Latar Belakang|Kontext|Konteksts|Kontekstas|Kontekst|Háttér|Hannergrond|Grundlage|Geçmiş|Fundo|Fono|First off|Dis is what went down|Dasar|Contexto|Contexte|Context|Contesto|Cenário de Fundo|Cenario de Fundo|Cefndir|Bối cảnh|Bakgrunnur|Bakgrunn|Bakgrund|Baggrund|Background|B4|Antecedents|Antecedentes|Ær|Aer|Achtergrond):/)) {\n      state.allowPlaceholders = false;\n      state.allowSteps = true;\n      state.allowBackground = false;\n      state.allowMultilineArgument = false;\n      state.inKeywordLine = true;\n      return \"keyword\";\n\n      // SCENARIO OUTLINE\n    } else if (!state.inKeywordLine && state.allowScenario && stream.match(/(場景大綱|场景大纲|劇本大綱|剧本大纲|テンプレ|シナリオテンプレート|シナリオテンプレ|シナリオアウトライン|시나리오 개요|สรุปเหตุการณ์|โครงสร้างของเหตุการณ์|ವಿವರಣೆ|కథనం|ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ|ਪਟਕਥਾ ਢਾਂਚਾ|परिदृश्य रूपरेखा|سيناريو مخطط|الگوی سناریو|תבנית תרחיש|Сценарийның төзелеше|Сценарий структураси|Структура сценарію|Структура сценария|Структура сценарија|Скица|Рамка на сценарий|Концепт|Περιγραφή Σεναρίου|Wharrimean is|Template Situai|Template Senario|Template Keadaan|Tapausaihio|Szenariogrundriss|Szablon scenariusza|Swa hwær swa|Swa hwaer swa|Struktura scenarija|Structură scenariu|Structura scenariu|Skica|Skenario konsep|Shiver me timbers|Senaryo taslağı|Schema dello scenario|Scenariomall|Scenariomal|Scenario Template|Scenario Outline|Scenario Amlinellol|Scenārijs pēc parauga|Scenarijaus šablonas|Reckon it's like|Raamstsenaarium|Plang vum Szenario|Plan du Scénario|Plan du scénario|Osnova scénáře|Osnova Scenára|Náčrt Scenáru|Náčrt Scénáře|Náčrt Scenára|MISHUN SRSLY|Menggariskan Senario|Lýsing Dæma|Lýsing Atburðarásar|Konturo de la scenaro|Koncept|Khung tình huống|Khung kịch bản|Forgatókönyv vázlat|Esquema do Cenário|Esquema do Cenario|Esquema del escenario|Esquema de l'escenari|Esbozo do escenario|Delineação do Cenário|Delineacao do Cenario|All y'all|Abstrakt Scenario|Abstract Scenario):/)) {\n      state.allowPlaceholders = true;\n      state.allowSteps = true;\n      state.allowMultilineArgument = false;\n      state.inKeywordLine = true;\n      return \"keyword\";\n\n      // EXAMPLES\n    } else if (state.allowScenario && stream.match(/(例子|例|サンプル|예|ชุดของเหตุการณ์|ชุดของตัวอย่าง|ಉದಾಹರಣೆಗಳು|ఉదాహరణలు|ਉਦਾਹਰਨਾਂ|उदाहरण|نمونه ها|امثلة|דוגמאות|Үрнәкләр|Сценарији|Примеры|Примери|Приклади|Мисоллар|Мисаллар|Σενάρια|Παραδείγματα|You'll wanna|Voorbeelden|Variantai|Tapaukset|Se þe|Se the|Se ðe|Scenarios|Scenariji|Scenarijai|Przykłady|Primjeri|Primeri|Příklady|Príklady|Piemēri|Példák|Pavyzdžiai|Paraugs|Örnekler|Juhtumid|Exemplos|Exemples|Exemple|Exempel|EXAMPLZ|Examples|Esempi|Enghreifftiau|Ekzemploj|Eksempler|Ejemplos|Dữ liệu|Dead men tell no tales|Dæmi|Contoh|Cenários|Cenarios|Beispiller|Beispiele|Atburðarásir):/)) {\n      state.allowPlaceholders = false;\n      state.allowSteps = true;\n      state.allowBackground = false;\n      state.allowMultilineArgument = true;\n      return \"keyword\";\n\n      // SCENARIO\n    } else if (!state.inKeywordLine && state.allowScenario && stream.match(/(場景|场景|劇本|剧本|シナリオ|시나리오|เหตุการณ์|ಕಥಾಸಾರಾಂಶ|సన్నివేశం|ਪਟਕਥਾ|परिदृश्य|سيناريو|سناریو|תרחיש|Сценарій|Сценарио|Сценарий|Пример|Σενάριο|Tình huống|The thing of it is|Tapaus|Szenario|Swa|Stsenaarium|Skenario|Situai|Senaryo|Senario|Scenaro|Scenariusz|Scenariu|Scénario|Scenario|Scenarijus|Scenārijs|Scenarij|Scenarie|Scénář|Scenár|Primer|MISHUN|Kịch bản|Keadaan|Heave to|Forgatókönyv|Escenario|Escenari|Cenário|Cenario|Awww, look mate|Atburðarás):/)) {\n      state.allowPlaceholders = false;\n      state.allowSteps = true;\n      state.allowBackground = false;\n      state.allowMultilineArgument = false;\n      state.inKeywordLine = true;\n      return \"keyword\";\n\n      // STEPS\n    } else if (!state.inKeywordLine && state.allowSteps && stream.match(/(那麼|那么|而且|當|当|并且|同時|同时|前提|假设|假設|假定|假如|但是|但し|並且|もし|ならば|ただし|しかし|かつ|하지만|조건|먼저|만일|만약|단|그리고|그러면|และ |เมื่อ |แต่ |ดังนั้น |กำหนดให้ |ಸ್ಥಿತಿಯನ್ನು |ಮತ್ತು |ನೀಡಿದ |ನಂತರ |ಆದರೆ |మరియు |చెప్పబడినది |కాని |ఈ పరిస్థితిలో |అప్పుడు |ਪਰ |ਤਦ |ਜੇਕਰ |ਜਿਵੇਂ ਕਿ |ਜਦੋਂ |ਅਤੇ |यदि |परन्तु |पर |तब |तदा |तथा |जब |चूंकि |किन्तु |कदा |और |अगर |و |هنگامی |متى |لكن |عندما |ثم |بفرض |با فرض |اما |اذاً |آنگاه |כאשר |וגם |בהינתן |אזי |אז |אבל |Якщо |Һәм |Унда |Тоді |Тогда |То |Также |Та |Пусть |Припустимо, що |Припустимо |Онда |Но |Нехай |Нәтиҗәдә |Лекин |Ләкин |Коли |Когда |Когато |Када |Кад |К тому же |І |И |Задато |Задати |Задате |Если |Допустим |Дано |Дадено |Вә |Ва |Бирок |Әмма |Әйтик |Әгәр |Аммо |Али |Але |Агар |А також |А |Τότε |Όταν |Και |Δεδομένου |Αλλά |Þurh |Þegar |Þa þe |Þá |Þa |Zatati |Zakładając |Zadato |Zadate |Zadano |Zadani |Zadan |Za předpokladu |Za predpokladu |Youse know when youse got |Youse know like when |Yna |Yeah nah |Y'know |Y |Wun |Wtedy |When y'all |When |Wenn |WEN |wann |Ve |Và |Und |Un |ugeholl |Too right |Thurh |Thì |Then y'all |Then |Tha the |Tha |Tetapi |Tapi |Tak |Tada |Tad |Stel |Soit |Siis |Și |Şi |Si |Sed |Se |Så |Quando |Quand |Quan |Pryd |Potom |Pokud |Pokiaľ |Però |Pero |Pak |Oraz |Onda |Ond |Oletetaan |Og |Och |O zaman |Niin |Nhưng |När |Når |Mutta |Men |Mas |Maka |Majd |Mając |Mais |Maar |mä |Ma |Lorsque |Lorsqu'|Logo |Let go and haul |Kun |Kuid |Kui |Kiedy |Khi |Ketika |Kemudian |Keď |Když |Kaj |Kai |Kada |Kad |Jeżeli |Jeśli |Ja |It's just unbelievable |Ir |I CAN HAZ |I |Ha |Givun |Givet |Given y'all |Given |Gitt |Gegeven |Gegeben seien |Gegeben sei |Gdy |Gangway! |Fakat |Étant donnés |Etant donnés |Étant données |Etant données |Étant donnée |Etant donnée |Étant donné |Etant donné |Et |És |Entonces |Entón |Então |Entao |En |Eğer ki |Ef |Eeldades |E |Ðurh |Duota |Dun |Donitaĵo |Donat |Donada |Do |Diyelim ki |Diberi |Dengan |Den youse gotta |DEN |De |Dato |Dați fiind |Daţi fiind |Dati fiind |Dati |Date fiind |Date |Data |Dat fiind |Dar |Dann |dann |Dan |Dados |Dado |Dadas |Dada |Ða ðe |Ða |Cuando |Cho |Cando |Când |Cand |Cal |But y'all |But at the end of the day I reckon |BUT |But |Buh |Blimey! |Biết |Bet |Bagi |Aye |awer |Avast! |Atunci |Atesa |Atès |Apabila |Anrhegedig a |Angenommen |And y'all |And |AN |An |an |Amikor |Amennyiben |Ama |Als |Alors |Allora |Ali |Aleshores |Ale |Akkor |Ak |Adott |Ac |Aber |A zároveň |A tiež |A taktiež |A také |A |a |7 |\\* )/)) {\n      state.inStep = true;\n      state.allowPlaceholders = true;\n      state.allowMultilineArgument = true;\n      state.inKeywordLine = true;\n      return \"keyword\";\n\n      // INLINE STRING\n    } else if (stream.match(/\"[^\"]*\"?/)) {\n      return \"string\";\n\n      // PLACEHOLDER\n    } else if (state.allowPlaceholders && stream.match(/<[^>]*>?/)) {\n      return \"variable\";\n\n      // Fall through\n    } else {\n      stream.next();\n      stream.eatWhile(/[^@\"<#]/);\n      return null;\n    }\n  }\n};\n\n","var keywords = {\n  \"break\":true, \"case\":true, \"chan\":true, \"const\":true, \"continue\":true,\n  \"default\":true, \"defer\":true, \"else\":true, \"fallthrough\":true, \"for\":true,\n  \"func\":true, \"go\":true, \"goto\":true, \"if\":true, \"import\":true,\n  \"interface\":true, \"map\":true, \"package\":true, \"range\":true, \"return\":true,\n  \"select\":true, \"struct\":true, \"switch\":true, \"type\":true, \"var\":true,\n  \"bool\":true, \"byte\":true, \"complex64\":true, \"complex128\":true,\n  \"float32\":true, \"float64\":true, \"int8\":true, \"int16\":true, \"int32\":true,\n  \"int64\":true, \"string\":true, \"uint8\":true, \"uint16\":true, \"uint32\":true,\n  \"uint64\":true, \"int\":true, \"uint\":true, \"uintptr\":true, \"error\": true,\n  \"rune\":true, \"any\":true, \"comparable\":true\n};\n\nvar atoms = {\n  \"true\":true, \"false\":true, \"iota\":true, \"nil\":true, \"append\":true,\n  \"cap\":true, \"close\":true, \"complex\":true, \"copy\":true, \"delete\":true, \"imag\":true,\n  \"len\":true, \"make\":true, \"new\":true, \"panic\":true, \"print\":true,\n  \"println\":true, \"real\":true, \"recover\":true\n};\n\nvar isOperatorChar = /[+\\-*&^%:=<>!|\\/]/;\n\nvar curPunc;\n\nfunction tokenBase(stream, state) {\n  var ch = stream.next();\n  if (ch == '\"' || ch == \"'\" || ch == \"`\") {\n    state.tokenize = tokenString(ch);\n    return state.tokenize(stream, state);\n  }\n  if (/[\\d\\.]/.test(ch)) {\n    if (ch == \".\") {\n      stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n    } else if (ch == \"0\") {\n      stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n    } else {\n      stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n    }\n    return \"number\";\n  }\n  if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n    curPunc = ch;\n    return null;\n  }\n  if (ch == \"/\") {\n    if (stream.eat(\"*\")) {\n      state.tokenize = tokenComment;\n      return tokenComment(stream, state);\n    }\n    if (stream.eat(\"/\")) {\n      stream.skipToEnd();\n      return \"comment\";\n    }\n  }\n  if (isOperatorChar.test(ch)) {\n    stream.eatWhile(isOperatorChar);\n    return \"operator\";\n  }\n  stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n  var cur = stream.current();\n  if (keywords.propertyIsEnumerable(cur)) {\n    if (cur == \"case\" || cur == \"default\") curPunc = \"case\";\n    return \"keyword\";\n  }\n  if (atoms.propertyIsEnumerable(cur)) return \"atom\";\n  return \"variable\";\n}\n\nfunction tokenString(quote) {\n  return function(stream, state) {\n    var escaped = false, next, end = false;\n    while ((next = stream.next()) != null) {\n      if (next == quote && !escaped) {end = true; break;}\n      escaped = !escaped && quote != \"`\" && next == \"\\\\\";\n    }\n    if (end || !(escaped || quote == \"`\"))\n      state.tokenize = tokenBase;\n    return \"string\";\n  };\n}\n\nfunction tokenComment(stream, state) {\n  var maybeEnd = false, ch;\n  while (ch = stream.next()) {\n    if (ch == \"/\" && maybeEnd) {\n      state.tokenize = tokenBase;\n      break;\n    }\n    maybeEnd = (ch == \"*\");\n  }\n  return \"comment\";\n}\n\nfunction Context(indented, column, type, align, prev) {\n  this.indented = indented;\n  this.column = column;\n  this.type = type;\n  this.align = align;\n  this.prev = prev;\n}\nfunction pushContext(state, col, type) {\n  return state.context = new Context(state.indented, col, type, null, state.context);\n}\nfunction popContext(state) {\n  if (!state.context.prev) return;\n  var t = state.context.type;\n  if (t == \")\" || t == \"]\" || t == \"}\")\n    state.indented = state.context.indented;\n  return state.context = state.context.prev;\n}\n\n// Interface\n\nexport const go = {\n  name: \"go\",\n  startState: function(indentUnit) {\n    return {\n      tokenize: null,\n      context: new Context(-indentUnit, 0, \"top\", false),\n      indented: 0,\n      startOfLine: true\n    };\n  },\n\n  token: function(stream, state) {\n    var ctx = state.context;\n    if (stream.sol()) {\n      if (ctx.align == null) ctx.align = false;\n      state.indented = stream.indentation();\n      state.startOfLine = true;\n      if (ctx.type == \"case\") ctx.type = \"}\";\n    }\n    if (stream.eatSpace()) return null;\n    curPunc = null;\n    var style = (state.tokenize || tokenBase)(stream, state);\n    if (style == \"comment\") return style;\n    if (ctx.align == null) ctx.align = true;\n\n    if (curPunc == \"{\") pushContext(state, stream.column(), \"}\");\n    else if (curPunc == \"[\") pushContext(state, stream.column(), \"]\");\n    else if (curPunc == \"(\") pushContext(state, stream.column(), \")\");\n    else if (curPunc == \"case\") ctx.type = \"case\";\n    else if (curPunc == \"}\" && ctx.type == \"}\") popContext(state);\n    else if (curPunc == ctx.type) popContext(state);\n    state.startOfLine = false;\n    return style;\n  },\n\n  indent: function(state, textAfter, cx) {\n    if (state.tokenize != tokenBase && state.tokenize != null) return null;\n    var ctx = state.context, firstChar = textAfter && textAfter.charAt(0);\n    if (ctx.type == \"case\" && /^(?:case|default)\\b/.test(textAfter)) return ctx.indented;\n    var closing = firstChar == ctx.type;\n    if (ctx.align) return ctx.column + (closing ? 0 : 1);\n    else return ctx.indented + (closing ? 0 : cx.unit);\n  },\n\n  languageData: {\n    indentOnInput: /^\\s([{}]|case |default\\s*:)$/,\n    commentTokens: {line: \"//\", block: {open: \"/*\", close: \"*/\"}}\n  }\n};\n\n","function words(str) {\n  var obj = {}, words = str.split(\" \");\n  for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n  return obj;\n}\nvar keywords = words(\n  \"abstract as assert boolean break byte case catch char class const continue def default \" +\n    \"do double else enum extends final finally float for goto if implements import in \" +\n    \"instanceof int interface long native new package private protected public return \" +\n    \"short static strictfp super switch synchronized threadsafe throw throws trait transient \" +\n    \"try void volatile while\");\nvar blockKeywords = words(\"catch class def do else enum finally for if interface switch trait try while\");\nvar standaloneKeywords = words(\"return break continue\");\nvar atoms = words(\"null true false this\");\n\nvar curPunc;\nfunction tokenBase(stream, state) {\n  var ch = stream.next();\n  if (ch == '\"' || ch == \"'\") {\n    return startString(ch, stream, state);\n  }\n  if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n    curPunc = ch;\n    return null;\n  }\n  if (/\\d/.test(ch)) {\n    stream.eatWhile(/[\\w\\.]/);\n    if (stream.eat(/eE/)) { stream.eat(/\\+\\-/); stream.eatWhile(/\\d/); }\n    return \"number\";\n  }\n  if (ch == \"/\") {\n    if (stream.eat(\"*\")) {\n      state.tokenize.push(tokenComment);\n      return tokenComment(stream, state);\n    }\n    if (stream.eat(\"/\")) {\n      stream.skipToEnd();\n      return \"comment\";\n    }\n    if (expectExpression(state.lastToken, false)) {\n      return startString(ch, stream, state);\n    }\n  }\n  if (ch == \"-\" && stream.eat(\">\")) {\n    curPunc = \"->\";\n    return null;\n  }\n  if (/[+\\-*&%=<>!?|\\/~]/.test(ch)) {\n    stream.eatWhile(/[+\\-*&%=<>|~]/);\n    return \"operator\";\n  }\n  stream.eatWhile(/[\\w\\$_]/);\n  if (ch == \"@\") { stream.eatWhile(/[\\w\\$_\\.]/); return \"meta\"; }\n  if (state.lastToken == \".\") return \"property\";\n  if (stream.eat(\":\")) { curPunc = \"proplabel\"; return \"property\"; }\n  var cur = stream.current();\n  if (atoms.propertyIsEnumerable(cur)) { return \"atom\"; }\n  if (keywords.propertyIsEnumerable(cur)) {\n    if (blockKeywords.propertyIsEnumerable(cur)) curPunc = \"newstatement\";\n    else if (standaloneKeywords.propertyIsEnumerable(cur)) curPunc = \"standalone\";\n    return \"keyword\";\n  }\n  return \"variable\";\n}\ntokenBase.isBase = true;\n\nfunction startString(quote, stream, state) {\n  var tripleQuoted = false;\n  if (quote != \"/\" && stream.eat(quote)) {\n    if (stream.eat(quote)) tripleQuoted = true;\n    else return \"string\";\n  }\n  function t(stream, state) {\n    var escaped = false, next, end = !tripleQuoted;\n    while ((next = stream.next()) != null) {\n      if (next == quote && !escaped) {\n        if (!tripleQuoted) { break; }\n        if (stream.match(quote + quote)) { end = true; break; }\n      }\n      if (quote == '\"' && next == \"$\" && !escaped) {\n        if (stream.eat(\"{\")) {\n          state.tokenize.push(tokenBaseUntilBrace());\n          return \"string\";\n        } else if (stream.match(/^\\w/, false)) {\n          state.tokenize.push(tokenVariableDeref);\n          return \"string\";\n        }\n      }\n      escaped = !escaped && next == \"\\\\\";\n    }\n    if (end) state.tokenize.pop();\n    return \"string\";\n  }\n  state.tokenize.push(t);\n  return t(stream, state);\n}\n\nfunction tokenBaseUntilBrace() {\n  var depth = 1;\n  function t(stream, state) {\n    if (stream.peek() == \"}\") {\n      depth--;\n      if (depth == 0) {\n        state.tokenize.pop();\n        return state.tokenize[state.tokenize.length-1](stream, state);\n      }\n    } else if (stream.peek() == \"{\") {\n      depth++;\n    }\n    return tokenBase(stream, state);\n  }\n  t.isBase = true;\n  return t;\n}\n\nfunction tokenVariableDeref(stream, state) {\n  var next = stream.match(/^(\\.|[\\w\\$_]+)/)\n  if (!next || !stream.match(next[0] == \".\" ? /^[\\w$_]/ : /^\\./)) state.tokenize.pop()\n  if (!next) return state.tokenize[state.tokenize.length-1](stream, state)\n  return next[0] == \".\" ? null : \"variable\"\n}\n\nfunction tokenComment(stream, state) {\n  var maybeEnd = false, ch;\n  while (ch = stream.next()) {\n    if (ch == \"/\" && maybeEnd) {\n      state.tokenize.pop();\n      break;\n    }\n    maybeEnd = (ch == \"*\");\n  }\n  return \"comment\";\n}\n\nfunction expectExpression(last, newline) {\n  return !last || last == \"operator\" || last == \"->\" || /[\\.\\[\\{\\(,;:]/.test(last) ||\n    last == \"newstatement\" || last == \"keyword\" || last == \"proplabel\" ||\n    (last == \"standalone\" && !newline);\n}\n\nfunction Context(indented, column, type, align, prev) {\n  this.indented = indented;\n  this.column = column;\n  this.type = type;\n  this.align = align;\n  this.prev = prev;\n}\nfunction pushContext(state, col, type) {\n  return state.context = new Context(state.indented, col, type, null, state.context);\n}\nfunction popContext(state) {\n  var t = state.context.type;\n  if (t == \")\" || t == \"]\" || t == \"}\")\n    state.indented = state.context.indented;\n  return state.context = state.context.prev;\n}\n\n// Interface\n\nexport const groovy = {\n  name: \"groovy\",\n  startState: function(indentUnit) {\n    return {\n      tokenize: [tokenBase],\n      context: new Context(-indentUnit, 0, \"top\", false),\n      indented: 0,\n      startOfLine: true,\n      lastToken: null\n    };\n  },\n\n  token: function(stream, state) {\n    var ctx = state.context;\n    if (stream.sol()) {\n      if (ctx.align == null) ctx.align = false;\n      state.indented = stream.indentation();\n      state.startOfLine = true;\n      // Automatic semicolon insertion\n      if (ctx.type == \"statement\" && !expectExpression(state.lastToken, true)) {\n        popContext(state); ctx = state.context;\n      }\n    }\n    if (stream.eatSpace()) return null;\n    curPunc = null;\n    var style = state.tokenize[state.tokenize.length-1](stream, state);\n    if (style == \"comment\") return style;\n    if (ctx.align == null) ctx.align = true;\n\n    if ((curPunc == \";\" || curPunc == \":\") && ctx.type == \"statement\") popContext(state);\n    // Handle indentation for {x -> \\n ... }\n    else if (curPunc == \"->\" && ctx.type == \"statement\" && ctx.prev.type == \"}\") {\n      popContext(state);\n      state.context.align = false;\n    }\n    else if (curPunc == \"{\") pushContext(state, stream.column(), \"}\");\n    else if (curPunc == \"[\") pushContext(state, stream.column(), \"]\");\n    else if (curPunc == \"(\") pushContext(state, stream.column(), \")\");\n    else if (curPunc == \"}\") {\n      while (ctx.type == \"statement\") ctx = popContext(state);\n      if (ctx.type == \"}\") ctx = popContext(state);\n      while (ctx.type == \"statement\") ctx = popContext(state);\n    }\n    else if (curPunc == ctx.type) popContext(state);\n    else if (ctx.type == \"}\" || ctx.type == \"top\" || (ctx.type == \"statement\" && curPunc == \"newstatement\"))\n      pushContext(state, stream.column(), \"statement\");\n    state.startOfLine = false;\n    state.lastToken = curPunc || style;\n    return style;\n  },\n\n  indent: function(state, textAfter, cx) {\n    if (!state.tokenize[state.tokenize.length-1].isBase) return null;\n    var firstChar = textAfter && textAfter.charAt(0), ctx = state.context;\n    if (ctx.type == \"statement\" && !expectExpression(state.lastToken, true)) ctx = ctx.prev;\n    var closing = firstChar == ctx.type;\n    if (ctx.type == \"statement\") return ctx.indented + (firstChar == \"{\" ? 0 : cx.unit);\n    else if (ctx.align) return ctx.column + (closing ? 0 : 1);\n    else return ctx.indented + (closing ? 0 : cx.unit);\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*[{}]$/,\n    commentTokens: {line: \"//\", block: {open: \"/*\", close: \"*/\"}},\n    closeBrackets: {brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"'''\", '\"\"\"']}\n  }\n};\n","function switchState(source, setState, f) {\n  setState(f);\n  return f(source, setState);\n}\n\n// These should all be Unicode extended, as per the Haskell 2010 report\nvar smallRE = /[a-z_]/;\nvar largeRE = /[A-Z]/;\nvar digitRE = /\\d/;\nvar hexitRE = /[0-9A-Fa-f]/;\nvar octitRE = /[0-7]/;\nvar idRE = /[a-z_A-Z0-9'\\xa1-\\uffff]/;\nvar symbolRE = /[-!#$%&*+.\\/<=>?@\\\\^|~:]/;\nvar specialRE = /[(),;[\\]`{}]/;\nvar whiteCharRE = /[ \\t\\v\\f]/; // newlines are handled in tokenizer\n\nfunction normal(source, setState) {\n  if (source.eatWhile(whiteCharRE)) {\n    return null;\n  }\n\n  var ch = source.next();\n  if (specialRE.test(ch)) {\n    if (ch == '{' && source.eat('-')) {\n      var t = \"comment\";\n      if (source.eat('#')) {\n        t = \"meta\";\n      }\n      return switchState(source, setState, ncomment(t, 1));\n    }\n    return null;\n  }\n\n  if (ch == '\\'') {\n    if (source.eat('\\\\')) {\n      source.next();  // should handle other escapes here\n    }\n    else {\n      source.next();\n    }\n    if (source.eat('\\'')) {\n      return \"string\";\n    }\n    return \"error\";\n  }\n\n  if (ch == '\"') {\n    return switchState(source, setState, stringLiteral);\n  }\n\n  if (largeRE.test(ch)) {\n    source.eatWhile(idRE);\n    if (source.eat('.')) {\n      return \"qualifier\";\n    }\n    return \"type\";\n  }\n\n  if (smallRE.test(ch)) {\n    source.eatWhile(idRE);\n    return \"variable\";\n  }\n\n  if (digitRE.test(ch)) {\n    if (ch == '0') {\n      if (source.eat(/[xX]/)) {\n        source.eatWhile(hexitRE); // should require at least 1\n        return \"integer\";\n      }\n      if (source.eat(/[oO]/)) {\n        source.eatWhile(octitRE); // should require at least 1\n        return \"number\";\n      }\n    }\n    source.eatWhile(digitRE);\n    var t = \"number\";\n    if (source.match(/^\\.\\d+/)) {\n      t = \"number\";\n    }\n    if (source.eat(/[eE]/)) {\n      t = \"number\";\n      source.eat(/[-+]/);\n      source.eatWhile(digitRE); // should require at least 1\n    }\n    return t;\n  }\n\n  if (ch == \".\" && source.eat(\".\"))\n    return \"keyword\";\n\n  if (symbolRE.test(ch)) {\n    if (ch == '-' && source.eat(/-/)) {\n      source.eatWhile(/-/);\n      if (!source.eat(symbolRE)) {\n        source.skipToEnd();\n        return \"comment\";\n      }\n    }\n    source.eatWhile(symbolRE);\n    return \"variable\"\n  }\n\n  return \"error\";\n}\n\nfunction ncomment(type, nest) {\n  if (nest == 0) {\n    return normal;\n  }\n  return function(source, setState) {\n    var currNest = nest;\n    while (!source.eol()) {\n      var ch = source.next();\n      if (ch == '{' && source.eat('-')) {\n        ++currNest;\n      }\n      else if (ch == '-' && source.eat('}')) {\n        --currNest;\n        if (currNest == 0) {\n          setState(normal);\n          return type;\n        }\n      }\n    }\n    setState(ncomment(type, currNest));\n    return type;\n  };\n}\n\nfunction stringLiteral(source, setState) {\n  while (!source.eol()) {\n    var ch = source.next();\n    if (ch == '\"') {\n      setState(normal);\n      return \"string\";\n    }\n    if (ch == '\\\\') {\n      if (source.eol() || source.eat(whiteCharRE)) {\n        setState(stringGap);\n        return \"string\";\n      }\n      if (source.eat('&')) {\n      }\n      else {\n        source.next(); // should handle other escapes here\n      }\n    }\n  }\n  setState(normal);\n  return \"error\";\n}\n\nfunction stringGap(source, setState) {\n  if (source.eat('\\\\')) {\n    return switchState(source, setState, stringLiteral);\n  }\n  source.next();\n  setState(normal);\n  return \"error\";\n}\n\n\nvar wellKnownWords = (function() {\n  var wkw = {};\n  function setType(t) {\n    return function () {\n      for (var i = 0; i < arguments.length; i++)\n        wkw[arguments[i]] = t;\n    };\n  }\n\n  setType(\"keyword\")(\n    \"case\", \"class\", \"data\", \"default\", \"deriving\", \"do\", \"else\", \"foreign\",\n    \"if\", \"import\", \"in\", \"infix\", \"infixl\", \"infixr\", \"instance\", \"let\",\n    \"module\", \"newtype\", \"of\", \"then\", \"type\", \"where\", \"_\");\n\n  setType(\"keyword\")(\n    \"\\.\\.\", \":\", \"::\", \"=\", \"\\\\\", \"<-\", \"->\", \"@\", \"~\", \"=>\");\n\n  setType(\"builtin\")(\n    \"!!\", \"$!\", \"$\", \"&&\", \"+\", \"++\", \"-\", \".\", \"/\", \"/=\", \"<\", \"<*\", \"<=\",\n    \"<$>\", \"<*>\", \"=<<\", \"==\", \">\", \">=\", \">>\", \">>=\", \"^\", \"^^\", \"||\", \"*\",\n    \"*>\", \"**\");\n\n  setType(\"builtin\")(\n    \"Applicative\", \"Bool\", \"Bounded\", \"Char\", \"Double\", \"EQ\", \"Either\", \"Enum\",\n    \"Eq\", \"False\", \"FilePath\", \"Float\", \"Floating\", \"Fractional\", \"Functor\",\n    \"GT\", \"IO\", \"IOError\", \"Int\", \"Integer\", \"Integral\", \"Just\", \"LT\", \"Left\",\n    \"Maybe\", \"Monad\", \"Nothing\", \"Num\", \"Ord\", \"Ordering\", \"Rational\", \"Read\",\n    \"ReadS\", \"Real\", \"RealFloat\", \"RealFrac\", \"Right\", \"Show\", \"ShowS\",\n    \"String\", \"True\");\n\n  setType(\"builtin\")(\n    \"abs\", \"acos\", \"acosh\", \"all\", \"and\", \"any\", \"appendFile\", \"asTypeOf\",\n    \"asin\", \"asinh\", \"atan\", \"atan2\", \"atanh\", \"break\", \"catch\", \"ceiling\",\n    \"compare\", \"concat\", \"concatMap\", \"const\", \"cos\", \"cosh\", \"curry\",\n    \"cycle\", \"decodeFloat\", \"div\", \"divMod\", \"drop\", \"dropWhile\", \"either\",\n    \"elem\", \"encodeFloat\", \"enumFrom\", \"enumFromThen\", \"enumFromThenTo\",\n    \"enumFromTo\", \"error\", \"even\", \"exp\", \"exponent\", \"fail\", \"filter\",\n    \"flip\", \"floatDigits\", \"floatRadix\", \"floatRange\", \"floor\", \"fmap\",\n    \"foldl\", \"foldl1\", \"foldr\", \"foldr1\", \"fromEnum\", \"fromInteger\",\n    \"fromIntegral\", \"fromRational\", \"fst\", \"gcd\", \"getChar\", \"getContents\",\n    \"getLine\", \"head\", \"id\", \"init\", \"interact\", \"ioError\", \"isDenormalized\",\n    \"isIEEE\", \"isInfinite\", \"isNaN\", \"isNegativeZero\", \"iterate\", \"last\",\n    \"lcm\", \"length\", \"lex\", \"lines\", \"log\", \"logBase\", \"lookup\", \"map\",\n    \"mapM\", \"mapM_\", \"max\", \"maxBound\", \"maximum\", \"maybe\", \"min\", \"minBound\",\n    \"minimum\", \"mod\", \"negate\", \"not\", \"notElem\", \"null\", \"odd\", \"or\",\n    \"otherwise\", \"pi\", \"pred\", \"print\", \"product\", \"properFraction\", \"pure\",\n    \"putChar\", \"putStr\", \"putStrLn\", \"quot\", \"quotRem\", \"read\", \"readFile\",\n    \"readIO\", \"readList\", \"readLn\", \"readParen\", \"reads\", \"readsPrec\",\n    \"realToFrac\", \"recip\", \"rem\", \"repeat\", \"replicate\", \"return\", \"reverse\",\n    \"round\", \"scaleFloat\", \"scanl\", \"scanl1\", \"scanr\", \"scanr1\", \"seq\",\n    \"sequence\", \"sequence_\", \"show\", \"showChar\", \"showList\", \"showParen\",\n    \"showString\", \"shows\", \"showsPrec\", \"significand\", \"signum\", \"sin\",\n    \"sinh\", \"snd\", \"span\", \"splitAt\", \"sqrt\", \"subtract\", \"succ\", \"sum\",\n    \"tail\", \"take\", \"takeWhile\", \"tan\", \"tanh\", \"toEnum\", \"toInteger\",\n    \"toRational\", \"truncate\", \"uncurry\", \"undefined\", \"unlines\", \"until\",\n    \"unwords\", \"unzip\", \"unzip3\", \"userError\", \"words\", \"writeFile\", \"zip\",\n    \"zip3\", \"zipWith\", \"zipWith3\");\n\n  return wkw;\n})();\n\nexport const haskell = {\n  name: \"haskell\",\n  startState: function ()  { return { f: normal }; },\n  copyState:  function (s) { return { f: s.f }; },\n\n  token: function(stream, state) {\n    var t = state.f(stream, function(s) { state.f = s; });\n    var w = stream.current();\n    return wellKnownWords.hasOwnProperty(w) ? wellKnownWords[w] : t;\n  },\n\n  languageData: {\n    commentTokens: {line: \"--\", block: {open: \"{-\", close: \"-}\"}}\n  }\n};\n","// Tokenizer\n\nfunction kw(type) {return {type: type, style: \"keyword\"};}\nvar A = kw(\"keyword a\"), B = kw(\"keyword b\"), C = kw(\"keyword c\");\nvar operator = kw(\"operator\"), atom = {type: \"atom\", style: \"atom\"}, attribute = {type:\"attribute\", style: \"attribute\"};\nvar type = kw(\"typedef\");\nvar keywords = {\n  \"if\": A, \"while\": A, \"else\": B, \"do\": B, \"try\": B,\n  \"return\": C, \"break\": C, \"continue\": C, \"new\": C, \"throw\": C,\n  \"var\": kw(\"var\"), \"inline\":attribute, \"static\": attribute, \"using\":kw(\"import\"),\n  \"public\": attribute, \"private\": attribute, \"cast\": kw(\"cast\"), \"import\": kw(\"import\"), \"macro\": kw(\"macro\"),\n  \"function\": kw(\"function\"), \"catch\": kw(\"catch\"), \"untyped\": kw(\"untyped\"), \"callback\": kw(\"cb\"),\n  \"for\": kw(\"for\"), \"switch\": kw(\"switch\"), \"case\": kw(\"case\"), \"default\": kw(\"default\"),\n  \"in\": operator, \"never\": kw(\"property_access\"), \"trace\":kw(\"trace\"),\n  \"class\": type, \"abstract\":type, \"enum\":type, \"interface\":type, \"typedef\":type, \"extends\":type, \"implements\":type, \"dynamic\":type,\n  \"true\": atom, \"false\": atom, \"null\": atom\n};\n\nvar isOperatorChar = /[+\\-*&%=<>!?|]/;\n\nfunction chain(stream, state, f) {\n  state.tokenize = f;\n  return f(stream, state);\n}\n\nfunction toUnescaped(stream, end) {\n  var escaped = false, next;\n  while ((next = stream.next()) != null) {\n    if (next == end && !escaped)\n      return true;\n    escaped = !escaped && next == \"\\\\\";\n  }\n}\n\n// Used as scratch variables to communicate multiple values without\n// consing up tons of objects.\nvar type, content;\nfunction ret(tp, style, cont) {\n  type = tp; content = cont;\n  return style;\n}\n\nfunction haxeTokenBase(stream, state) {\n  var ch = stream.next();\n  if (ch == '\"' || ch == \"'\") {\n    return chain(stream, state, haxeTokenString(ch));\n  } else if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n    return ret(ch);\n  } else if (ch == \"0\" && stream.eat(/x/i)) {\n    stream.eatWhile(/[\\da-f]/i);\n    return ret(\"number\", \"number\");\n  } else if (/\\d/.test(ch) || ch == \"-\" && stream.eat(/\\d/)) {\n    stream.match(/^\\d*(?:\\.\\d*(?!\\.))?(?:[eE][+\\-]?\\d+)?/);\n    return ret(\"number\", \"number\");\n  } else if (state.reAllowed && (ch == \"~\" && stream.eat(/\\//))) {\n    toUnescaped(stream, \"/\");\n    stream.eatWhile(/[gimsu]/);\n    return ret(\"regexp\", \"string.special\");\n  } else if (ch == \"/\") {\n    if (stream.eat(\"*\")) {\n      return chain(stream, state, haxeTokenComment);\n    } else if (stream.eat(\"/\")) {\n      stream.skipToEnd();\n      return ret(\"comment\", \"comment\");\n    } else {\n      stream.eatWhile(isOperatorChar);\n      return ret(\"operator\", null, stream.current());\n    }\n  } else if (ch == \"#\") {\n    stream.skipToEnd();\n    return ret(\"conditional\", \"meta\");\n  } else if (ch == \"@\") {\n    stream.eat(/:/);\n    stream.eatWhile(/[\\w_]/);\n    return ret (\"metadata\", \"meta\");\n  } else if (isOperatorChar.test(ch)) {\n    stream.eatWhile(isOperatorChar);\n    return ret(\"operator\", null, stream.current());\n  } else {\n    var word;\n    if(/[A-Z]/.test(ch)) {\n      stream.eatWhile(/[\\w_<>]/);\n      word = stream.current();\n      return ret(\"type\", \"type\", word);\n    } else {\n      stream.eatWhile(/[\\w_]/);\n      var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word];\n      return (known && state.kwAllowed) ? ret(known.type, known.style, word) :\n        ret(\"variable\", \"variable\", word);\n    }\n  }\n}\n\nfunction haxeTokenString(quote) {\n  return function(stream, state) {\n    if (toUnescaped(stream, quote))\n      state.tokenize = haxeTokenBase;\n    return ret(\"string\", \"string\");\n  };\n}\n\nfunction haxeTokenComment(stream, state) {\n  var maybeEnd = false, ch;\n  while (ch = stream.next()) {\n    if (ch == \"/\" && maybeEnd) {\n      state.tokenize = haxeTokenBase;\n      break;\n    }\n    maybeEnd = (ch == \"*\");\n  }\n  return ret(\"comment\", \"comment\");\n}\n\n// Parser\n\nvar atomicTypes = {\"atom\": true, \"number\": true, \"variable\": true, \"string\": true, \"regexp\": true};\n\nfunction HaxeLexical(indented, column, type, align, prev, info) {\n  this.indented = indented;\n  this.column = column;\n  this.type = type;\n  this.prev = prev;\n  this.info = info;\n  if (align != null) this.align = align;\n}\n\nfunction inScope(state, varname) {\n  for (var v = state.localVars; v; v = v.next)\n    if (v.name == varname) return true;\n}\n\nfunction parseHaxe(state, style, type, content, stream) {\n  var cc = state.cc;\n  // Communicate our context to the combinators.\n  // (Less wasteful than consing up a hundred closures on every call.)\n  cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc;\n\n  if (!state.lexical.hasOwnProperty(\"align\"))\n    state.lexical.align = true;\n\n  while(true) {\n    var combinator = cc.length ? cc.pop() : statement;\n    if (combinator(type, content)) {\n      while(cc.length && cc[cc.length - 1].lex)\n        cc.pop()();\n      if (cx.marked) return cx.marked;\n      if (type == \"variable\" && inScope(state, content)) return \"variableName.local\";\n      if (type == \"variable\" && imported(state, content)) return \"variableName.special\";\n      return style;\n    }\n  }\n}\n\nfunction imported(state, typename) {\n  if (/[a-z]/.test(typename.charAt(0)))\n    return false;\n  var len = state.importedtypes.length;\n  for (var i = 0; i<len; i++)\n    if(state.importedtypes[i]==typename) return true;\n}\n\nfunction registerimport(importname) {\n  var state = cx.state;\n  for (var t = state.importedtypes; t; t = t.next)\n    if(t.name == importname) return;\n  state.importedtypes = { name: importname, next: state.importedtypes };\n}\n// Combinator utils\n\nvar cx = {state: null, column: null, marked: null, cc: null};\nfunction pass() {\n  for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);\n}\nfunction cont() {\n  pass.apply(null, arguments);\n  return true;\n}\nfunction inList(name, list) {\n  for (var v = list; v; v = v.next)\n    if (v.name == name) return true;\n  return false;\n}\nfunction register(varname) {\n  var state = cx.state;\n  if (state.context) {\n    cx.marked = \"def\";\n    if (inList(varname, state.localVars)) return;\n    state.localVars = {name: varname, next: state.localVars};\n  } else if (state.globalVars) {\n    if (inList(varname, state.globalVars)) return;\n    state.globalVars = {name: varname, next: state.globalVars};\n  }\n}\n\n// Combinators\n\nvar defaultVars = {name: \"this\", next: null};\nfunction pushcontext() {\n  if (!cx.state.context) cx.state.localVars = defaultVars;\n  cx.state.context = {prev: cx.state.context, vars: cx.state.localVars};\n}\nfunction popcontext() {\n  cx.state.localVars = cx.state.context.vars;\n  cx.state.context = cx.state.context.prev;\n}\npopcontext.lex = true;\nfunction pushlex(type, info) {\n  var result = function() {\n    var state = cx.state;\n    state.lexical = new HaxeLexical(state.indented, cx.stream.column(), type, null, state.lexical, info);\n  };\n  result.lex = true;\n  return result;\n}\nfunction poplex() {\n  var state = cx.state;\n  if (state.lexical.prev) {\n    if (state.lexical.type == \")\")\n      state.indented = state.lexical.indented;\n    state.lexical = state.lexical.prev;\n  }\n}\npoplex.lex = true;\n\nfunction expect(wanted) {\n  function f(type) {\n    if (type == wanted) return cont();\n    else if (wanted == \";\") return pass();\n    else return cont(f);\n  }\n  return f;\n}\n\nfunction statement(type) {\n  if (type == \"@\") return cont(metadef);\n  if (type == \"var\") return cont(pushlex(\"vardef\"), vardef1, expect(\";\"), poplex);\n  if (type == \"keyword a\") return cont(pushlex(\"form\"), expression, statement, poplex);\n  if (type == \"keyword b\") return cont(pushlex(\"form\"), statement, poplex);\n  if (type == \"{\") return cont(pushlex(\"}\"), pushcontext, block, poplex, popcontext);\n  if (type == \";\") return cont();\n  if (type == \"attribute\") return cont(maybeattribute);\n  if (type == \"function\") return cont(functiondef);\n  if (type == \"for\") return cont(pushlex(\"form\"), expect(\"(\"), pushlex(\")\"), forspec1, expect(\")\"),\n                                 poplex, statement, poplex);\n  if (type == \"variable\") return cont(pushlex(\"stat\"), maybelabel);\n  if (type == \"switch\") return cont(pushlex(\"form\"), expression, pushlex(\"}\", \"switch\"), expect(\"{\"),\n                                    block, poplex, poplex);\n  if (type == \"case\") return cont(expression, expect(\":\"));\n  if (type == \"default\") return cont(expect(\":\"));\n  if (type == \"catch\") return cont(pushlex(\"form\"), pushcontext, expect(\"(\"), funarg, expect(\")\"),\n                                   statement, poplex, popcontext);\n  if (type == \"import\") return cont(importdef, expect(\";\"));\n  if (type == \"typedef\") return cont(typedef);\n  return pass(pushlex(\"stat\"), expression, expect(\";\"), poplex);\n}\nfunction expression(type) {\n  if (atomicTypes.hasOwnProperty(type)) return cont(maybeoperator);\n  if (type == \"type\" ) return cont(maybeoperator);\n  if (type == \"function\") return cont(functiondef);\n  if (type == \"keyword c\") return cont(maybeexpression);\n  if (type == \"(\") return cont(pushlex(\")\"), maybeexpression, expect(\")\"), poplex, maybeoperator);\n  if (type == \"operator\") return cont(expression);\n  if (type == \"[\") return cont(pushlex(\"]\"), commasep(maybeexpression, \"]\"), poplex, maybeoperator);\n  if (type == \"{\") return cont(pushlex(\"}\"), commasep(objprop, \"}\"), poplex, maybeoperator);\n  return cont();\n}\nfunction maybeexpression(type) {\n  if (type.match(/[;\\}\\)\\],]/)) return pass();\n  return pass(expression);\n}\n\nfunction maybeoperator(type, value) {\n  if (type == \"operator\" && /\\+\\+|--/.test(value)) return cont(maybeoperator);\n  if (type == \"operator\" || type == \":\") return cont(expression);\n  if (type == \";\") return;\n  if (type == \"(\") return cont(pushlex(\")\"), commasep(expression, \")\"), poplex, maybeoperator);\n  if (type == \".\") return cont(property, maybeoperator);\n  if (type == \"[\") return cont(pushlex(\"]\"), expression, expect(\"]\"), poplex, maybeoperator);\n}\n\nfunction maybeattribute(type) {\n  if (type == \"attribute\") return cont(maybeattribute);\n  if (type == \"function\") return cont(functiondef);\n  if (type == \"var\") return cont(vardef1);\n}\n\nfunction metadef(type) {\n  if(type == \":\") return cont(metadef);\n  if(type == \"variable\") return cont(metadef);\n  if(type == \"(\") return cont(pushlex(\")\"), commasep(metaargs, \")\"), poplex, statement);\n}\nfunction metaargs(type) {\n  if(type == \"variable\") return cont();\n}\n\nfunction importdef (type, value) {\n  if(type == \"variable\" && /[A-Z]/.test(value.charAt(0))) { registerimport(value); return cont(); }\n  else if(type == \"variable\" || type == \"property\" || type == \".\" || value == \"*\") return cont(importdef);\n}\n\nfunction typedef (type, value)\n{\n  if(type == \"variable\" && /[A-Z]/.test(value.charAt(0))) { registerimport(value); return cont(); }\n  else if (type == \"type\" && /[A-Z]/.test(value.charAt(0))) { return cont(); }\n}\n\nfunction maybelabel(type) {\n  if (type == \":\") return cont(poplex, statement);\n  return pass(maybeoperator, expect(\";\"), poplex);\n}\nfunction property(type) {\n  if (type == \"variable\") {cx.marked = \"property\"; return cont();}\n}\nfunction objprop(type) {\n  if (type == \"variable\") cx.marked = \"property\";\n  if (atomicTypes.hasOwnProperty(type)) return cont(expect(\":\"), expression);\n}\nfunction commasep(what, end) {\n  function proceed(type) {\n    if (type == \",\") return cont(what, proceed);\n    if (type == end) return cont();\n    return cont(expect(end));\n  }\n  return function(type) {\n    if (type == end) return cont();\n    else return pass(what, proceed);\n  };\n}\nfunction block(type) {\n  if (type == \"}\") return cont();\n  return pass(statement, block);\n}\nfunction vardef1(type, value) {\n  if (type == \"variable\"){register(value); return cont(typeuse, vardef2);}\n  return cont();\n}\nfunction vardef2(type, value) {\n  if (value == \"=\") return cont(expression, vardef2);\n  if (type == \",\") return cont(vardef1);\n}\nfunction forspec1(type, value) {\n  if (type == \"variable\") {\n    register(value);\n    return cont(forin, expression)\n  } else {\n    return pass()\n  }\n}\nfunction forin(_type, value) {\n  if (value == \"in\") return cont();\n}\nfunction functiondef(type, value) {\n  //function names starting with upper-case letters are recognised as types, so cludging them together here.\n  if (type == \"variable\" || type == \"type\") {register(value); return cont(functiondef);}\n  if (value == \"new\") return cont(functiondef);\n  if (type == \"(\") return cont(pushlex(\")\"), pushcontext, commasep(funarg, \")\"), poplex, typeuse, statement, popcontext);\n}\nfunction typeuse(type) {\n  if(type == \":\") return cont(typestring);\n}\nfunction typestring(type) {\n  if(type == \"type\") return cont();\n  if(type == \"variable\") return cont();\n  if(type == \"{\") return cont(pushlex(\"}\"), commasep(typeprop, \"}\"), poplex);\n}\nfunction typeprop(type) {\n  if(type == \"variable\") return cont(typeuse);\n}\nfunction funarg(type, value) {\n  if (type == \"variable\") {register(value); return cont(typeuse);}\n}\n\n// Interface\nexport const haxe = {\n  name: \"haxe\",\n  startState: function(indentUnit) {\n    var defaulttypes = [\"Int\", \"Float\", \"String\", \"Void\", \"Std\", \"Bool\", \"Dynamic\", \"Array\"];\n    var state = {\n      tokenize: haxeTokenBase,\n      reAllowed: true,\n      kwAllowed: true,\n      cc: [],\n      lexical: new HaxeLexical(-indentUnit, 0, \"block\", false),\n      importedtypes: defaulttypes,\n      context: null,\n      indented: 0\n    };\n    return state;\n  },\n\n  token: function(stream, state) {\n    if (stream.sol()) {\n      if (!state.lexical.hasOwnProperty(\"align\"))\n        state.lexical.align = false;\n      state.indented = stream.indentation();\n    }\n    if (stream.eatSpace()) return null;\n    var style = state.tokenize(stream, state);\n    if (type == \"comment\") return style;\n    state.reAllowed = !!(type == \"operator\" || type == \"keyword c\" || type.match(/^[\\[{}\\(,;:]$/));\n    state.kwAllowed = type != '.';\n    return parseHaxe(state, style, type, content, stream);\n  },\n\n  indent: function(state, textAfter, cx) {\n    if (state.tokenize != haxeTokenBase) return 0;\n    var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical;\n    if (lexical.type == \"stat\" && firstChar == \"}\") lexical = lexical.prev;\n    var type = lexical.type, closing = firstChar == type;\n    if (type == \"vardef\") return lexical.indented + 4;\n    else if (type == \"form\" && firstChar == \"{\") return lexical.indented;\n    else if (type == \"stat\" || type == \"form\") return lexical.indented + cx.unit;\n    else if (lexical.info == \"switch\" && !closing)\n      return lexical.indented + (/^(?:case|default)\\b/.test(textAfter) ? cx.unit : 2 * cx.unit);\n    else if (lexical.align) return lexical.column + (closing ? 0 : 1);\n    else return lexical.indented + (closing ? 0 : cx.unit);\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*[{}]$/,\n    commentTokens: {line: \"//\", block: {open: \"/*\", close: \"*/\"}}\n  }\n};\n\nexport const hxml = {\n  name: \"hxml\",\n  startState: function () {\n    return {\n      define: false,\n      inString: false\n    };\n  },\n  token: function (stream, state) {\n    var ch = stream.peek();\n    var sol = stream.sol();\n\n    ///* comments */\n    if (ch == \"#\") {\n      stream.skipToEnd();\n      return \"comment\";\n    }\n    if (sol && ch == \"-\") {\n      var style = \"variable-2\";\n\n      stream.eat(/-/);\n\n      if (stream.peek() == \"-\") {\n        stream.eat(/-/);\n        style = \"keyword a\";\n      }\n\n      if (stream.peek() == \"D\") {\n        stream.eat(/[D]/);\n        style = \"keyword c\";\n        state.define = true;\n      }\n\n      stream.eatWhile(/[A-Z]/i);\n      return style;\n    }\n\n    var ch = stream.peek();\n\n    if (state.inString == false && ch == \"'\") {\n      state.inString = true;\n      stream.next();\n    }\n\n    if (state.inString == true) {\n      if (stream.skipTo(\"'\")) {\n\n      } else {\n        stream.skipToEnd();\n      }\n\n      if (stream.peek() == \"'\") {\n        stream.next();\n        state.inString = false;\n      }\n\n      return \"string\";\n    }\n\n    stream.next();\n    return null;\n  },\n  languageData: {\n    commentTokens: {line: \"#\"}\n  }\n}\n","function failFirstLine(stream, state) {\n  stream.skipToEnd();\n  state.cur = header;\n  return \"error\";\n}\n\nfunction start(stream, state) {\n  if (stream.match(/^HTTP\\/\\d\\.\\d/)) {\n    state.cur = responseStatusCode;\n    return \"keyword\";\n  } else if (stream.match(/^[A-Z]+/) && /[ \\t]/.test(stream.peek())) {\n    state.cur = requestPath;\n    return \"keyword\";\n  } else {\n    return failFirstLine(stream, state);\n  }\n}\n\nfunction responseStatusCode(stream, state) {\n  var code = stream.match(/^\\d+/);\n  if (!code) return failFirstLine(stream, state);\n\n  state.cur = responseStatusText;\n  var status = Number(code[0]);\n  if (status >= 100 && status < 400) {\n    return \"atom\";\n  } else {\n    return \"error\";\n  }\n}\n\nfunction responseStatusText(stream, state) {\n  stream.skipToEnd();\n  state.cur = header;\n  return null;\n}\n\nfunction requestPath(stream, state) {\n  stream.eatWhile(/\\S/);\n  state.cur = requestProtocol;\n  return \"string.special\";\n}\n\nfunction requestProtocol(stream, state) {\n  if (stream.match(/^HTTP\\/\\d\\.\\d$/)) {\n    state.cur = header;\n    return \"keyword\";\n  } else {\n    return failFirstLine(stream, state);\n  }\n}\n\nfunction header(stream) {\n  if (stream.sol() && !stream.eat(/[ \\t]/)) {\n    if (stream.match(/^.*?:/)) {\n      return \"atom\";\n    } else {\n      stream.skipToEnd();\n      return \"error\";\n    }\n  } else {\n    stream.skipToEnd();\n    return \"string\";\n  }\n}\n\nfunction body(stream) {\n  stream.skipToEnd();\n  return null;\n}\n\nexport const http = {\n  name: \"http\",\n  token: function(stream, state) {\n    var cur = state.cur;\n    if (cur != header && cur != body && stream.eatSpace()) return null;\n    return cur(stream, state);\n  },\n\n  blankLine: function(state) {\n    state.cur = body;\n  },\n\n  startState: function() {\n    return {cur: start};\n  }\n};\n","function wordRegexp(words) {\n  return new RegExp('^((' + words.join(')|(') + '))\\\\b', 'i');\n};\n\nvar builtinArray = [\n  'a_correlate', 'abs', 'acos', 'adapt_hist_equal', 'alog',\n  'alog2', 'alog10', 'amoeba', 'annotate', 'app_user_dir',\n  'app_user_dir_query', 'arg_present', 'array_equal', 'array_indices',\n  'arrow', 'ascii_template', 'asin', 'assoc', 'atan',\n  'axis', 'axis', 'bandpass_filter', 'bandreject_filter', 'barplot',\n  'bar_plot', 'beseli', 'beselj', 'beselk', 'besely',\n  'beta', 'biginteger', 'bilinear', 'bin_date', 'binary_template',\n  'bindgen', 'binomial', 'bit_ffs', 'bit_population', 'blas_axpy',\n  'blk_con', 'boolarr', 'boolean', 'boxplot', 'box_cursor',\n  'breakpoint', 'broyden', 'bubbleplot', 'butterworth', 'bytarr',\n  'byte', 'byteorder', 'bytscl', 'c_correlate', 'calendar',\n  'caldat', 'call_external', 'call_function', 'call_method',\n  'call_procedure', 'canny', 'catch', 'cd', 'cdf', 'ceil',\n  'chebyshev', 'check_math', 'chisqr_cvf', 'chisqr_pdf', 'choldc',\n  'cholsol', 'cindgen', 'cir_3pnt', 'clipboard', 'close',\n  'clust_wts', 'cluster', 'cluster_tree', 'cmyk_convert', 'code_coverage',\n  'color_convert', 'color_exchange', 'color_quan', 'color_range_map',\n  'colorbar', 'colorize_sample', 'colormap_applicable',\n  'colormap_gradient', 'colormap_rotation', 'colortable',\n  'comfit', 'command_line_args', 'common', 'compile_opt', 'complex',\n  'complexarr', 'complexround', 'compute_mesh_normals', 'cond', 'congrid',\n  'conj', 'constrained_min', 'contour', 'contour', 'convert_coord',\n  'convol', 'convol_fft', 'coord2to3', 'copy_lun', 'correlate',\n  'cos', 'cosh', 'cpu', 'cramer', 'createboxplotdata',\n  'create_cursor', 'create_struct', 'create_view', 'crossp', 'crvlength',\n  'ct_luminance', 'cti_test', 'cursor', 'curvefit', 'cv_coord',\n  'cvttobm', 'cw_animate', 'cw_animate_getp', 'cw_animate_load',\n  'cw_animate_run', 'cw_arcball', 'cw_bgroup', 'cw_clr_index',\n  'cw_colorsel', 'cw_defroi', 'cw_field', 'cw_filesel', 'cw_form',\n  'cw_fslider', 'cw_light_editor', 'cw_light_editor_get',\n  'cw_light_editor_set', 'cw_orient', 'cw_palette_editor',\n  'cw_palette_editor_get', 'cw_palette_editor_set', 'cw_pdmenu',\n  'cw_rgbslider', 'cw_tmpl', 'cw_zoom', 'db_exists',\n  'dblarr', 'dcindgen', 'dcomplex', 'dcomplexarr', 'define_key',\n  'define_msgblk', 'define_msgblk_from_file', 'defroi', 'defsysv',\n  'delvar', 'dendro_plot', 'dendrogram', 'deriv', 'derivsig',\n  'determ', 'device', 'dfpmin', 'diag_matrix', 'dialog_dbconnect',\n  'dialog_message', 'dialog_pickfile', 'dialog_printersetup',\n  'dialog_printjob', 'dialog_read_image',\n  'dialog_write_image', 'dictionary', 'digital_filter', 'dilate', 'dindgen',\n  'dissolve', 'dist', 'distance_measure', 'dlm_load', 'dlm_register',\n  'doc_library', 'double', 'draw_roi', 'edge_dog', 'efont',\n  'eigenql', 'eigenvec', 'ellipse', 'elmhes', 'emboss',\n  'empty', 'enable_sysrtn', 'eof', 'eos', 'erase',\n  'erf', 'erfc', 'erfcx', 'erode', 'errorplot',\n  'errplot', 'estimator_filter', 'execute', 'exit', 'exp',\n  'expand', 'expand_path', 'expint', 'extract', 'extract_slice',\n  'f_cvf', 'f_pdf', 'factorial', 'fft', 'file_basename',\n  'file_chmod', 'file_copy', 'file_delete', 'file_dirname',\n  'file_expand_path', 'file_gunzip', 'file_gzip', 'file_info',\n  'file_lines', 'file_link', 'file_mkdir', 'file_move',\n  'file_poll_input', 'file_readlink', 'file_same',\n  'file_search', 'file_tar', 'file_test', 'file_untar', 'file_unzip',\n  'file_which', 'file_zip', 'filepath', 'findgen', 'finite',\n  'fix', 'flick', 'float', 'floor', 'flow3',\n  'fltarr', 'flush', 'format_axis_values', 'forward_function', 'free_lun',\n  'fstat', 'fulstr', 'funct', 'function', 'fv_test',\n  'fx_root', 'fz_roots', 'gamma', 'gamma_ct', 'gauss_cvf',\n  'gauss_pdf', 'gauss_smooth', 'gauss2dfit', 'gaussfit',\n  'gaussian_function', 'gaussint', 'get_drive_list', 'get_dxf_objects',\n  'get_kbrd', 'get_login_info',\n  'get_lun', 'get_screen_size', 'getenv', 'getwindows', 'greg2jul',\n  'grib', 'grid_input', 'grid_tps', 'grid3', 'griddata',\n  'gs_iter', 'h_eq_ct', 'h_eq_int', 'hanning', 'hash',\n  'hdf', 'hdf5', 'heap_free', 'heap_gc', 'heap_nosave',\n  'heap_refcount', 'heap_save', 'help', 'hilbert', 'hist_2d',\n  'hist_equal', 'histogram', 'hls', 'hough', 'hqr',\n  'hsv', 'i18n_multibytetoutf8',\n  'i18n_multibytetowidechar', 'i18n_utf8tomultibyte',\n  'i18n_widechartomultibyte',\n  'ibeta', 'icontour', 'iconvertcoord', 'idelete', 'identity',\n  'idl_base64', 'idl_container', 'idl_validname',\n  'idlexbr_assistant', 'idlitsys_createtool',\n  'idlunit', 'iellipse', 'igamma', 'igetcurrent', 'igetdata',\n  'igetid', 'igetproperty', 'iimage', 'image', 'image_cont',\n  'image_statistics', 'image_threshold', 'imaginary', 'imap', 'indgen',\n  'int_2d', 'int_3d', 'int_tabulated', 'intarr', 'interpol',\n  'interpolate', 'interval_volume', 'invert', 'ioctl', 'iopen',\n  'ir_filter', 'iplot', 'ipolygon', 'ipolyline', 'iputdata',\n  'iregister', 'ireset', 'iresolve', 'irotate', 'isa',\n  'isave', 'iscale', 'isetcurrent', 'isetproperty', 'ishft',\n  'isocontour', 'isosurface', 'isurface', 'itext', 'itranslate',\n  'ivector', 'ivolume', 'izoom', 'journal', 'json_parse',\n  'json_serialize', 'jul2greg', 'julday', 'keyword_set', 'krig2d',\n  'kurtosis', 'kw_test', 'l64indgen', 'la_choldc', 'la_cholmprove',\n  'la_cholsol', 'la_determ', 'la_eigenproblem', 'la_eigenql', 'la_eigenvec',\n  'la_elmhes', 'la_gm_linear_model', 'la_hqr', 'la_invert',\n  'la_least_square_equality', 'la_least_squares', 'la_linear_equation',\n  'la_ludc', 'la_lumprove', 'la_lusol',\n  'la_svd', 'la_tridc', 'la_trimprove', 'la_triql', 'la_trired',\n  'la_trisol', 'label_date', 'label_region', 'ladfit', 'laguerre',\n  'lambda', 'lambdap', 'lambertw', 'laplacian', 'least_squares_filter',\n  'leefilt', 'legend', 'legendre', 'linbcg', 'lindgen',\n  'linfit', 'linkimage', 'list', 'll_arc_distance', 'lmfit',\n  'lmgr', 'lngamma', 'lnp_test', 'loadct', 'locale_get',\n  'logical_and', 'logical_or', 'logical_true', 'lon64arr', 'lonarr',\n  'long', 'long64', 'lsode', 'lu_complex', 'ludc',\n  'lumprove', 'lusol', 'm_correlate', 'machar', 'make_array',\n  'make_dll', 'make_rt', 'map', 'mapcontinents', 'mapgrid',\n  'map_2points', 'map_continents', 'map_grid', 'map_image', 'map_patch',\n  'map_proj_forward', 'map_proj_image', 'map_proj_info',\n  'map_proj_init', 'map_proj_inverse',\n  'map_set', 'matrix_multiply', 'matrix_power', 'max', 'md_test',\n  'mean', 'meanabsdev', 'mean_filter', 'median', 'memory',\n  'mesh_clip', 'mesh_decimate', 'mesh_issolid',\n  'mesh_merge', 'mesh_numtriangles',\n  'mesh_obj', 'mesh_smooth', 'mesh_surfacearea',\n  'mesh_validate', 'mesh_volume',\n  'message', 'min', 'min_curve_surf', 'mk_html_help', 'modifyct',\n  'moment', 'morph_close', 'morph_distance',\n  'morph_gradient', 'morph_hitormiss',\n  'morph_open', 'morph_thin', 'morph_tophat', 'multi', 'n_elements',\n  'n_params', 'n_tags', 'ncdf', 'newton', 'noise_hurl',\n  'noise_pick', 'noise_scatter', 'noise_slur', 'norm', 'obj_class',\n  'obj_destroy', 'obj_hasmethod', 'obj_isa', 'obj_new', 'obj_valid',\n  'objarr', 'on_error', 'on_ioerror', 'online_help', 'openr',\n  'openu', 'openw', 'oplot', 'oploterr', 'orderedhash',\n  'p_correlate', 'parse_url', 'particle_trace', 'path_cache', 'path_sep',\n  'pcomp', 'plot', 'plot3d', 'plot', 'plot_3dbox',\n  'plot_field', 'ploterr', 'plots', 'polar_contour', 'polar_surface',\n  'polyfill', 'polyshade', 'pnt_line', 'point_lun', 'polarplot',\n  'poly', 'poly_2d', 'poly_area', 'poly_fit', 'polyfillv',\n  'polygon', 'polyline', 'polywarp', 'popd', 'powell',\n  'pref_commit', 'pref_get', 'pref_set', 'prewitt', 'primes',\n  'print', 'printf', 'printd', 'pro', 'product',\n  'profile', 'profiler', 'profiles', 'project_vol', 'ps_show_fonts',\n  'psafm', 'pseudo', 'ptr_free', 'ptr_new', 'ptr_valid',\n  'ptrarr', 'pushd', 'qgrid3', 'qhull', 'qromb',\n  'qromo', 'qsimp', 'query_*', 'query_ascii', 'query_bmp',\n  'query_csv', 'query_dicom', 'query_gif', 'query_image', 'query_jpeg',\n  'query_jpeg2000', 'query_mrsid', 'query_pict', 'query_png', 'query_ppm',\n  'query_srf', 'query_tiff', 'query_video', 'query_wav', 'r_correlate',\n  'r_test', 'radon', 'randomn', 'randomu', 'ranks',\n  'rdpix', 'read', 'readf', 'read_ascii', 'read_binary',\n  'read_bmp', 'read_csv', 'read_dicom', 'read_gif', 'read_image',\n  'read_interfile', 'read_jpeg', 'read_jpeg2000', 'read_mrsid', 'read_pict',\n  'read_png', 'read_ppm', 'read_spr', 'read_srf', 'read_sylk',\n  'read_tiff', 'read_video', 'read_wav', 'read_wave', 'read_x11_bitmap',\n  'read_xwd', 'reads', 'readu', 'real_part', 'rebin',\n  'recall_commands', 'recon3', 'reduce_colors', 'reform', 'region_grow',\n  'register_cursor', 'regress', 'replicate',\n  'replicate_inplace', 'resolve_all',\n  'resolve_routine', 'restore', 'retall', 'return', 'reverse',\n  'rk4', 'roberts', 'rot', 'rotate', 'round',\n  'routine_filepath', 'routine_info', 'rs_test', 's_test', 'save',\n  'savgol', 'scale3', 'scale3d', 'scatterplot', 'scatterplot3d',\n  'scope_level', 'scope_traceback', 'scope_varfetch',\n  'scope_varname', 'search2d',\n  'search3d', 'sem_create', 'sem_delete', 'sem_lock', 'sem_release',\n  'set_plot', 'set_shading', 'setenv', 'sfit', 'shade_surf',\n  'shade_surf_irr', 'shade_volume', 'shift', 'shift_diff', 'shmdebug',\n  'shmmap', 'shmunmap', 'shmvar', 'show3', 'showfont',\n  'signum', 'simplex', 'sin', 'sindgen', 'sinh',\n  'size', 'skewness', 'skip_lun', 'slicer3', 'slide_image',\n  'smooth', 'sobel', 'socket', 'sort', 'spawn',\n  'sph_4pnt', 'sph_scat', 'spher_harm', 'spl_init', 'spl_interp',\n  'spline', 'spline_p', 'sprsab', 'sprsax', 'sprsin',\n  'sprstp', 'sqrt', 'standardize', 'stddev', 'stop',\n  'strarr', 'strcmp', 'strcompress', 'streamline', 'streamline',\n  'stregex', 'stretch', 'string', 'strjoin', 'strlen',\n  'strlowcase', 'strmatch', 'strmessage', 'strmid', 'strpos',\n  'strput', 'strsplit', 'strtrim', 'struct_assign', 'struct_hide',\n  'strupcase', 'surface', 'surface', 'surfr', 'svdc',\n  'svdfit', 'svsol', 'swap_endian', 'swap_endian_inplace', 'symbol',\n  'systime', 't_cvf', 't_pdf', 't3d', 'tag_names',\n  'tan', 'tanh', 'tek_color', 'temporary', 'terminal_size',\n  'tetra_clip', 'tetra_surface', 'tetra_volume', 'text', 'thin',\n  'thread', 'threed', 'tic', 'time_test2', 'timegen',\n  'timer', 'timestamp', 'timestamptovalues', 'tm_test', 'toc',\n  'total', 'trace', 'transpose', 'tri_surf', 'triangulate',\n  'trigrid', 'triql', 'trired', 'trisol', 'truncate_lun',\n  'ts_coef', 'ts_diff', 'ts_fcast', 'ts_smooth', 'tv',\n  'tvcrs', 'tvlct', 'tvrd', 'tvscl', 'typename',\n  'uindgen', 'uint', 'uintarr', 'ul64indgen', 'ulindgen',\n  'ulon64arr', 'ulonarr', 'ulong', 'ulong64', 'uniq',\n  'unsharp_mask', 'usersym', 'value_locate', 'variance', 'vector',\n  'vector_field', 'vel', 'velovect', 'vert_t3d', 'voigt',\n  'volume', 'voronoi', 'voxel_proj', 'wait', 'warp_tri',\n  'watershed', 'wdelete', 'wf_draw', 'where', 'widget_base',\n  'widget_button', 'widget_combobox', 'widget_control',\n  'widget_displaycontextmenu', 'widget_draw',\n  'widget_droplist', 'widget_event', 'widget_info',\n  'widget_label', 'widget_list',\n  'widget_propertysheet', 'widget_slider', 'widget_tab',\n  'widget_table', 'widget_text',\n  'widget_tree', 'widget_tree_move', 'widget_window',\n  'wiener_filter', 'window',\n  'window', 'write_bmp', 'write_csv', 'write_gif', 'write_image',\n  'write_jpeg', 'write_jpeg2000', 'write_nrif', 'write_pict', 'write_png',\n  'write_ppm', 'write_spr', 'write_srf', 'write_sylk', 'write_tiff',\n  'write_video', 'write_wav', 'write_wave', 'writeu', 'wset',\n  'wshow', 'wtn', 'wv_applet', 'wv_cwt', 'wv_cw_wavelet',\n  'wv_denoise', 'wv_dwt', 'wv_fn_coiflet',\n  'wv_fn_daubechies', 'wv_fn_gaussian',\n  'wv_fn_haar', 'wv_fn_morlet', 'wv_fn_paul',\n  'wv_fn_symlet', 'wv_import_data',\n  'wv_import_wavelet', 'wv_plot3d_wps', 'wv_plot_multires',\n  'wv_pwt', 'wv_tool_denoise',\n  'xbm_edit', 'xdisplayfile', 'xdxf', 'xfont', 'xinteranimate',\n  'xloadct', 'xmanager', 'xmng_tmpl', 'xmtool', 'xobjview',\n  'xobjview_rotate', 'xobjview_write_image',\n  'xpalette', 'xpcolor', 'xplot3d',\n  'xregistered', 'xroi', 'xsq_test', 'xsurface', 'xvaredit',\n  'xvolume', 'xvolume_rotate', 'xvolume_write_image',\n  'xyouts', 'zlib_compress', 'zlib_uncompress', 'zoom', 'zoom_24'\n];\nvar builtins = wordRegexp(builtinArray);\n\nvar keywordArray = [\n  'begin', 'end', 'endcase', 'endfor',\n  'endwhile', 'endif', 'endrep', 'endforeach',\n  'break', 'case', 'continue', 'for',\n  'foreach', 'goto', 'if', 'then', 'else',\n  'repeat', 'until', 'switch', 'while',\n  'do', 'pro', 'function'\n];\nvar keywords = wordRegexp(keywordArray);\n\nvar identifiers = new RegExp('^[_a-z\\xa1-\\uffff][_a-z0-9\\xa1-\\uffff]*', 'i');\n\nvar singleOperators = /[+\\-*&=<>\\/@#~$]/;\nvar boolOperators = new RegExp('(and|or|eq|lt|le|gt|ge|ne|not)', 'i');\n\nfunction tokenBase(stream) {\n  // whitespaces\n  if (stream.eatSpace()) return null;\n\n  // Handle one line Comments\n  if (stream.match(';')) {\n    stream.skipToEnd();\n    return 'comment';\n  }\n\n  // Handle Number Literals\n  if (stream.match(/^[0-9\\.+-]/, false)) {\n    if (stream.match(/^[+-]?0x[0-9a-fA-F]+/))\n      return 'number';\n    if (stream.match(/^[+-]?\\d*\\.\\d+([EeDd][+-]?\\d+)?/))\n      return 'number';\n    if (stream.match(/^[+-]?\\d+([EeDd][+-]?\\d+)?/))\n      return 'number';\n  }\n\n  // Handle Strings\n  if (stream.match(/^\"([^\"]|(\"\"))*\"/)) { return 'string'; }\n  if (stream.match(/^'([^']|(''))*'/)) { return 'string'; }\n\n  // Handle words\n  if (stream.match(keywords)) { return 'keyword'; }\n  if (stream.match(builtins)) { return 'builtin'; }\n  if (stream.match(identifiers)) { return 'variable'; }\n\n  if (stream.match(singleOperators) || stream.match(boolOperators)) {\n    return 'operator'; }\n\n  // Handle non-detected items\n  stream.next();\n  return null;\n};\n\nexport const idl = {\n  name: \"idl\",\n  token: function(stream) {\n    return tokenBase(stream);\n  },\n  languageData: {\n    autocomplete: builtinArray.concat(keywordArray)\n  }\n}\n","var keywords = [\"and\", \"as\", \"block\", \"endblock\", \"by\", \"cycle\", \"debug\", \"else\", \"elif\",\n                \"extends\", \"filter\", \"endfilter\", \"firstof\", \"do\", \"for\",\n                \"endfor\", \"if\", \"endif\", \"ifchanged\", \"endifchanged\",\n                \"ifequal\", \"endifequal\", \"ifnotequal\", \"set\", \"raw\", \"endraw\",\n                \"endifnotequal\", \"in\", \"include\", \"load\", \"not\", \"now\", \"or\",\n                \"parsed\", \"regroup\", \"reversed\", \"spaceless\", \"call\", \"endcall\", \"macro\",\n                \"endmacro\", \"endspaceless\", \"ssi\", \"templatetag\", \"openblock\",\n                \"closeblock\", \"openvariable\", \"closevariable\", \"without\", \"context\",\n                \"openbrace\", \"closebrace\", \"opencomment\",\n                \"closecomment\", \"widthratio\", \"url\", \"with\", \"endwith\",\n                \"get_current_language\", \"trans\", \"endtrans\", \"noop\", \"blocktrans\",\n                \"endblocktrans\", \"get_available_languages\",\n                \"get_current_language_bidi\", \"pluralize\", \"autoescape\", \"endautoescape\"],\n    operator = /^[+\\-*&%=<>!?|~^]/,\n    sign = /^[:\\[\\(\\{]/,\n    atom = [\"true\", \"false\"],\n    number = /^(\\d[+\\-\\*\\/])?\\d+(\\.\\d+)?/;\n\nkeywords = new RegExp(\"((\" + keywords.join(\")|(\") + \"))\\\\b\");\natom = new RegExp(\"((\" + atom.join(\")|(\") + \"))\\\\b\");\n\nfunction tokenBase (stream, state) {\n  var ch = stream.peek();\n\n  //Comment\n  if (state.incomment) {\n    if(!stream.skipTo(\"#}\")) {\n      stream.skipToEnd();\n    } else {\n      stream.eatWhile(/\\#|}/);\n      state.incomment = false;\n    }\n    return \"comment\";\n    //Tag\n  } else if (state.intag) {\n    //After operator\n    if(state.operator) {\n      state.operator = false;\n      if(stream.match(atom)) {\n        return \"atom\";\n      }\n      if(stream.match(number)) {\n        return \"number\";\n      }\n    }\n    //After sign\n    if(state.sign) {\n      state.sign = false;\n      if(stream.match(atom)) {\n        return \"atom\";\n      }\n      if(stream.match(number)) {\n        return \"number\";\n      }\n    }\n\n    if(state.instring) {\n      if(ch == state.instring) {\n        state.instring = false;\n      }\n      stream.next();\n      return \"string\";\n    } else if(ch == \"'\" || ch == '\"') {\n      state.instring = ch;\n      stream.next();\n      return \"string\";\n    } else if (state.inbraces > 0 && ch ==\")\") {\n      stream.next()\n      state.inbraces--;\n    }\n    else if (ch == \"(\") {\n      stream.next()\n      state.inbraces++;\n    }\n    else if (state.inbrackets > 0 && ch ==\"]\") {\n      stream.next()\n      state.inbrackets--;\n    }\n    else if (ch == \"[\") {\n      stream.next()\n      state.inbrackets++;\n    } else if (!state.lineTag && (stream.match(state.intag + \"}\") || stream.eat(\"-\") && stream.match(state.intag + \"}\"))) {\n      state.intag = false;\n      return \"tag\";\n    } else if(stream.match(operator)) {\n      state.operator = true;\n      return \"operator\";\n    } else if(stream.match(sign)) {\n      state.sign = true;\n    } else {\n      if (stream.column() == 1 && state.lineTag && stream.match(keywords)) {\n        //allow nospace after tag before the keyword\n        return \"keyword\";\n      }\n      if(stream.eat(\" \") || stream.sol()) {\n        if(stream.match(keywords)) {\n          return \"keyword\";\n        }\n        if(stream.match(atom)) {\n          return \"atom\";\n        }\n        if(stream.match(number)) {\n          return \"number\";\n        }\n        if(stream.sol()) {\n          stream.next();\n        }\n      } else {\n        stream.next();\n      }\n\n    }\n    return \"variable\";\n  } else if (stream.eat(\"{\")) {\n    if (stream.eat(\"#\")) {\n      state.incomment = true;\n      if(!stream.skipTo(\"#}\")) {\n        stream.skipToEnd();\n      } else {\n        stream.eatWhile(/\\#|}/);\n        state.incomment = false;\n      }\n      return \"comment\";\n      //Open tag\n    } else if (ch = stream.eat(/\\{|%/)) {\n      //Cache close tag\n      state.intag = ch;\n      state.inbraces = 0;\n      state.inbrackets = 0;\n      if(ch == \"{\") {\n        state.intag = \"}\";\n      }\n      stream.eat(\"-\");\n      return \"tag\";\n    }\n    //Line statements\n  } else if (stream.eat('#')) {\n    if (stream.peek() == '#') {\n      stream.skipToEnd();\n      return \"comment\"\n    }\n    else if (!stream.eol()) {\n      state.intag = true;\n      state.lineTag = true;\n      state.inbraces = 0;\n      state.inbrackets = 0;\n      return \"tag\";\n    }\n  }\n  stream.next();\n};\n\nexport const jinja2 = {\n  name: \"jinja2\",\n  startState: function () {\n    return {tokenize: tokenBase, inbrackets: 0, inbraces: 0};\n  },\n  token: function(stream, state) {\n    var style = state.tokenize(stream, state);\n    if (stream.eol() && state.lineTag && !state.instring && state.inbraces == 0 && state.inbrackets == 0) {\n      //Close line statement at the EOL\n      state.intag = false\n      state.lineTag = false\n    }\n    return style;\n  },\n  languageData: {\n    commentTokens: {block: {open: \"{#\", close: \"#}\", line: \"##\"}}\n  }\n};\n","function wordRegexp(words, end, pre) {\n  if (typeof pre === \"undefined\") pre = \"\";\n  if (typeof end === \"undefined\") { end = \"\\\\b\"; }\n  return new RegExp(\"^\" + pre + \"((\" + words.join(\")|(\") + \"))\" + end);\n}\n\nvar octChar = \"\\\\\\\\[0-7]{1,3}\";\nvar hexChar = \"\\\\\\\\x[A-Fa-f0-9]{1,2}\";\nvar sChar = \"\\\\\\\\[abefnrtv0%?'\\\"\\\\\\\\]\";\nvar uChar = \"([^\\\\u0027\\\\u005C\\\\uD800-\\\\uDFFF]|[\\\\uD800-\\\\uDFFF][\\\\uDC00-\\\\uDFFF])\";\n\nvar asciiOperatorsList = [\n  \"[<>]:\", \"[<>=]=\", \"<<=?\", \">>>?=?\", \"=>\", \"--?>\", \"<--[->]?\", \"\\\\/\\\\/\",\n  \"\\\\.{2,3}\", \"[\\\\.\\\\\\\\%*+\\\\-<>!\\\\/^|&]=?\", \"\\\\?\", \"\\\\$\", \"~\", \":\"\n];\nvar operators = wordRegexp([\n  \"[<>]:\", \"[<>=]=\", \"[!=]==\", \"<<=?\", \">>>?=?\", \"=>?\", \"--?>\", \"<--[->]?\", \"\\\\/\\\\/\",\n  \"[\\\\\\\\%*+\\\\-<>!\\\\/^|&\\\\u00F7\\\\u22BB]=?\", \"\\\\?\", \"\\\\$\", \"~\", \":\",\n  \"\\\\u00D7\", \"\\\\u2208\", \"\\\\u2209\", \"\\\\u220B\", \"\\\\u220C\", \"\\\\u2218\",\n  \"\\\\u221A\", \"\\\\u221B\", \"\\\\u2229\", \"\\\\u222A\", \"\\\\u2260\", \"\\\\u2264\",\n  \"\\\\u2265\", \"\\\\u2286\", \"\\\\u2288\", \"\\\\u228A\", \"\\\\u22C5\",\n  \"\\\\b(in|isa)\\\\b(?!\\.?\\\\()\"\n], \"\");\nvar delimiters = /^[;,()[\\]{}]/;\nvar identifiers = /^[_A-Za-z\\u00A1-\\u2217\\u2219-\\uFFFF][\\w\\u00A1-\\u2217\\u2219-\\uFFFF]*!*/;\n\nvar chars = wordRegexp([octChar, hexChar, sChar, uChar], \"'\");\n\nvar openersList = [\"begin\", \"function\", \"type\", \"struct\", \"immutable\", \"let\",\n                   \"macro\", \"for\", \"while\", \"quote\", \"if\", \"else\", \"elseif\", \"try\",\n                   \"finally\", \"catch\", \"do\"];\n\nvar closersList = [\"end\", \"else\", \"elseif\", \"catch\", \"finally\"];\n\nvar keywordsList = [\"if\", \"else\", \"elseif\", \"while\", \"for\", \"begin\", \"let\",\n                    \"end\", \"do\", \"try\", \"catch\", \"finally\", \"return\", \"break\", \"continue\",\n                    \"global\", \"local\", \"const\", \"export\", \"import\", \"importall\", \"using\",\n                    \"function\", \"where\", \"macro\", \"module\", \"baremodule\", \"struct\", \"type\",\n                    \"mutable\", \"immutable\", \"quote\", \"typealias\", \"abstract\", \"primitive\",\n                    \"bitstype\"];\n\nvar builtinsList = [\"true\", \"false\", \"nothing\", \"NaN\", \"Inf\"];\n\nvar openers = wordRegexp(openersList);\nvar closers = wordRegexp(closersList);\nvar keywords = wordRegexp(keywordsList);\nvar builtins = wordRegexp(builtinsList);\n\nvar macro = /^@[_A-Za-z\\u00A1-\\uFFFF][\\w\\u00A1-\\uFFFF]*!*/;\nvar symbol = /^:[_A-Za-z\\u00A1-\\uFFFF][\\w\\u00A1-\\uFFFF]*!*/;\nvar stringPrefixes = /^(`|([_A-Za-z\\u00A1-\\uFFFF]*\"(\"\")?))/;\n\nvar macroOperators = wordRegexp(asciiOperatorsList, \"\", \"@\");\nvar symbolOperators = wordRegexp(asciiOperatorsList, \"\", \":\");\n\nfunction inArray(state) {\n  return (state.nestedArrays > 0);\n}\n\nfunction inGenerator(state) {\n  return (state.nestedGenerators > 0);\n}\n\nfunction currentScope(state, n) {\n  if (typeof(n) === \"undefined\") { n = 0; }\n  if (state.scopes.length <= n) {\n    return null;\n  }\n  return state.scopes[state.scopes.length - (n + 1)];\n}\n\n// tokenizers\nfunction tokenBase(stream, state) {\n  // Handle multiline comments\n  if (stream.match('#=', false)) {\n    state.tokenize = tokenComment;\n    return state.tokenize(stream, state);\n  }\n\n  // Handle scope changes\n  var leavingExpr = state.leavingExpr;\n  if (stream.sol()) {\n    leavingExpr = false;\n  }\n  state.leavingExpr = false;\n\n  if (leavingExpr) {\n    if (stream.match(/^'+/)) {\n      return \"operator\";\n    }\n  }\n\n  if (stream.match(/\\.{4,}/)) {\n    return \"error\";\n  } else if (stream.match(/\\.{1,3}/)) {\n    return \"operator\";\n  }\n\n  if (stream.eatSpace()) {\n    return null;\n  }\n\n  var ch = stream.peek();\n\n  // Handle single line comments\n  if (ch === '#') {\n    stream.skipToEnd();\n    return \"comment\";\n  }\n\n  if (ch === '[') {\n    state.scopes.push('[');\n    state.nestedArrays++;\n  }\n\n  if (ch === '(') {\n    state.scopes.push('(');\n    state.nestedGenerators++;\n  }\n\n  if (inArray(state) && ch === ']') {\n    while (state.scopes.length && currentScope(state) !== \"[\") { state.scopes.pop(); }\n    state.scopes.pop();\n    state.nestedArrays--;\n    state.leavingExpr = true;\n  }\n\n  if (inGenerator(state) && ch === ')') {\n    while (state.scopes.length && currentScope(state) !== \"(\") { state.scopes.pop(); }\n    state.scopes.pop();\n    state.nestedGenerators--;\n    state.leavingExpr = true;\n  }\n\n  if (inArray(state)) {\n    if (state.lastToken == \"end\" && stream.match(':')) {\n      return \"operator\";\n    }\n    if (stream.match('end')) {\n      return \"number\";\n    }\n  }\n\n  var match;\n  if (match = stream.match(openers, false)) {\n    state.scopes.push(match[0]);\n  }\n\n  if (stream.match(closers, false)) {\n    state.scopes.pop();\n  }\n\n  // Handle type annotations\n  if (stream.match(/^::(?![:\\$])/)) {\n    state.tokenize = tokenAnnotation;\n    return state.tokenize(stream, state);\n  }\n\n  // Handle symbols\n  if (!leavingExpr && (stream.match(symbol) || stream.match(symbolOperators))) {\n    return \"builtin\";\n  }\n\n  // Handle parametric types\n  //if (stream.match(/^{[^}]*}(?=\\()/)) {\n  //  return \"builtin\";\n  //}\n\n  // Handle operators and Delimiters\n  if (stream.match(operators)) {\n    return \"operator\";\n  }\n\n  // Handle Number Literals\n  if (stream.match(/^\\.?\\d/, false)) {\n    var imMatcher = RegExp(/^im\\b/);\n    var numberLiteral = false;\n    if (stream.match(/^0x\\.[0-9a-f_]+p[\\+\\-]?[_\\d]+/i)) { numberLiteral = true; }\n    // Integers\n    if (stream.match(/^0x[0-9a-f_]+/i)) { numberLiteral = true; } // Hex\n    if (stream.match(/^0b[01_]+/i)) { numberLiteral = true; } // Binary\n    if (stream.match(/^0o[0-7_]+/i)) { numberLiteral = true; } // Octal\n    // Floats\n    if (stream.match(/^(?:(?:\\d[_\\d]*)?\\.(?!\\.)(?:\\d[_\\d]*)?|\\d[_\\d]*\\.(?!\\.)(?:\\d[_\\d]*))?([Eef][\\+\\-]?[_\\d]+)?/i)) { numberLiteral = true; }\n    if (stream.match(/^\\d[_\\d]*(e[\\+\\-]?\\d+)?/i)) { numberLiteral = true; } // Decimal\n    if (numberLiteral) {\n      // Integer literals may be \"long\"\n      stream.match(imMatcher);\n      state.leavingExpr = true;\n      return \"number\";\n    }\n  }\n\n  // Handle Chars\n  if (stream.match(\"'\")) {\n    state.tokenize = tokenChar;\n    return state.tokenize(stream, state);\n  }\n\n  // Handle Strings\n  if (stream.match(stringPrefixes)) {\n    state.tokenize = tokenStringFactory(stream.current());\n    return state.tokenize(stream, state);\n  }\n\n  if (stream.match(macro) || stream.match(macroOperators)) {\n    return \"meta\";\n  }\n\n  if (stream.match(delimiters)) {\n    return null;\n  }\n\n  if (stream.match(keywords)) {\n    return \"keyword\";\n  }\n\n  if (stream.match(builtins)) {\n    return \"builtin\";\n  }\n\n  var isDefinition = state.isDefinition || state.lastToken == \"function\" ||\n      state.lastToken == \"macro\" || state.lastToken == \"type\" ||\n      state.lastToken == \"struct\" || state.lastToken == \"immutable\";\n\n  if (stream.match(identifiers)) {\n    if (isDefinition) {\n      if (stream.peek() === '.') {\n        state.isDefinition = true;\n        return \"variable\";\n      }\n      state.isDefinition = false;\n      return \"def\";\n    }\n    state.leavingExpr = true;\n    return \"variable\";\n  }\n\n  // Handle non-detected items\n  stream.next();\n  return \"error\";\n}\n\nfunction tokenAnnotation(stream, state) {\n  stream.match(/.*?(?=[,;{}()=\\s]|$)/);\n  if (stream.match('{')) {\n    state.nestedParameters++;\n  } else if (stream.match('}') && state.nestedParameters > 0) {\n    state.nestedParameters--;\n  }\n  if (state.nestedParameters > 0) {\n    stream.match(/.*?(?={|})/) || stream.next();\n  } else if (state.nestedParameters == 0) {\n    state.tokenize = tokenBase;\n  }\n  return \"builtin\";\n}\n\nfunction tokenComment(stream, state) {\n  if (stream.match('#=')) {\n    state.nestedComments++;\n  }\n  if (!stream.match(/.*?(?=(#=|=#))/)) {\n    stream.skipToEnd();\n  }\n  if (stream.match('=#')) {\n    state.nestedComments--;\n    if (state.nestedComments == 0)\n      state.tokenize = tokenBase;\n  }\n  return \"comment\";\n}\n\nfunction tokenChar(stream, state) {\n  var isChar = false, match;\n  if (stream.match(chars)) {\n    isChar = true;\n  } else if (match = stream.match(/\\\\u([a-f0-9]{1,4})(?=')/i)) {\n    var value = parseInt(match[1], 16);\n    if (value <= 55295 || value >= 57344) { // (U+0,U+D7FF), (U+E000,U+FFFF)\n      isChar = true;\n      stream.next();\n    }\n  } else if (match = stream.match(/\\\\U([A-Fa-f0-9]{5,8})(?=')/)) {\n    var value = parseInt(match[1], 16);\n    if (value <= 1114111) { // U+10FFFF\n      isChar = true;\n      stream.next();\n    }\n  }\n  if (isChar) {\n    state.leavingExpr = true;\n    state.tokenize = tokenBase;\n    return \"string\";\n  }\n  if (!stream.match(/^[^']+(?=')/)) { stream.skipToEnd(); }\n  if (stream.match(\"'\")) { state.tokenize = tokenBase; }\n  return \"error\";\n}\n\nfunction tokenStringFactory(delimiter) {\n  if (delimiter.substr(-3) === '\"\"\"') {\n    delimiter = '\"\"\"';\n  } else if (delimiter.substr(-1) === '\"') {\n    delimiter = '\"';\n  }\n  function tokenString(stream, state) {\n    if (stream.eat('\\\\')) {\n      stream.next();\n    } else if (stream.match(delimiter)) {\n      state.tokenize = tokenBase;\n      state.leavingExpr = true;\n      return \"string\";\n    } else {\n      stream.eat(/[`\"]/);\n    }\n    stream.eatWhile(/[^\\\\`\"]/);\n    return \"string\";\n  }\n  return tokenString;\n}\n\nexport const julia = {\n  name: \"julia\",\n  startState: function() {\n    return {\n      tokenize: tokenBase,\n      scopes: [],\n      lastToken: null,\n      leavingExpr: false,\n      isDefinition: false,\n      nestedArrays: 0,\n      nestedComments: 0,\n      nestedGenerators: 0,\n      nestedParameters: 0,\n      firstParenPos: -1\n    };\n  },\n\n  token: function(stream, state) {\n    var style = state.tokenize(stream, state);\n    var current = stream.current();\n\n    if (current && style) {\n      state.lastToken = current;\n    }\n\n    return style;\n  },\n\n  indent: function(state, textAfter, cx) {\n    var delta = 0;\n    if ( textAfter === ']' || textAfter === ')' || /^end\\b/.test(textAfter) ||\n         /^else/.test(textAfter) || /^catch\\b/.test(textAfter) || /^elseif\\b/.test(textAfter) ||\n         /^finally/.test(textAfter) ) {\n      delta = -1;\n    }\n    return (state.scopes.length + delta) * cx.unit;\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*(end|else|catch|finally)\\b$/,\n    commentTokens: {line: \"#\", block: {open: \"#=\", close: \"=#\"}},\n    closeBrackets: {brackets: [\"(\", \"[\", \"{\", '\"']},\n    autocomplete: keywordsList.concat(builtinsList)\n  }\n};\n","var tokenBase = function(stream, state) {\n  var next_rule = state.next || \"start\";\n  if (next_rule) {\n    state.next = state.next;\n    var nr = Rules[next_rule];\n    if (nr.splice) {\n      for (var i$ = 0; i$ < nr.length; ++i$) {\n        var r = nr[i$];\n        if (r.regex && stream.match(r.regex)) {\n          state.next = r.next || state.next;\n          return r.token;\n        }\n      }\n      stream.next();\n      return 'error';\n    }\n    if (stream.match(r = Rules[next_rule])) {\n      if (r.regex && stream.match(r.regex)) {\n        state.next = r.next;\n        return r.token;\n      } else {\n        stream.next();\n        return 'error';\n      }\n    }\n  }\n  stream.next();\n  return 'error';\n};\n\nvar identifier = '(?![\\\\d\\\\s])[$\\\\w\\\\xAA-\\\\uFFDC](?:(?!\\\\s)[$\\\\w\\\\xAA-\\\\uFFDC]|-[A-Za-z])*';\nvar indenter = RegExp('(?:[({[=:]|[-~]>|\\\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\\\s*all)?|const|var|let|new|catch(?:\\\\s*' + identifier + ')?))\\\\s*$');\nvar keywordend = '(?![$\\\\w]|-[A-Za-z]|\\\\s*:(?![:=]))';\nvar stringfill = {\n  token: 'string',\n  regex: '.+'\n};\nvar Rules = {\n  start: [\n    {\n      token: 'docComment',\n      regex: '/\\\\*',\n      next: 'comment'\n    }, {\n      token: 'comment',\n      regex: '#.*'\n    }, {\n      token: 'keyword',\n      regex: '(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)' + keywordend\n    }, {\n      token: 'atom',\n      regex: '(?:true|false|yes|no|on|off|null|void|undefined)' + keywordend\n    }, {\n      token: 'invalid',\n      regex: '(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)' + keywordend\n    }, {\n      token: 'className.standard',\n      regex: '(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)' + keywordend\n    }, {\n      token: 'variableName.function.standard',\n      regex: '(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)' + keywordend\n    }, {\n      token: 'variableName.standard',\n      regex: '(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)' + keywordend\n    }, {\n      token: 'variableName',\n      regex: identifier + '\\\\s*:(?![:=])'\n    }, {\n      token: 'variableName',\n      regex: identifier\n    }, {\n      token: 'operatorKeyword',\n      regex: '(?:\\\\.{3}|\\\\s+\\\\?)'\n    }, {\n      token: 'keyword',\n      regex: '(?:@+|::|\\\\.\\\\.)',\n      next: 'key'\n    }, {\n      token: 'operatorKeyword',\n      regex: '\\\\.\\\\s*',\n      next: 'key'\n    }, {\n      token: 'string',\n      regex: '\\\\\\\\\\\\S[^\\\\s,;)}\\\\]]*'\n    }, {\n      token: 'docString',\n      regex: '\\'\\'\\'',\n      next: 'qdoc'\n    }, {\n      token: 'docString',\n      regex: '\"\"\"',\n      next: 'qqdoc'\n    }, {\n      token: 'string',\n      regex: '\\'',\n      next: 'qstring'\n    }, {\n      token: 'string',\n      regex: '\"',\n      next: 'qqstring'\n    }, {\n      token: 'string',\n      regex: '`',\n      next: 'js'\n    }, {\n      token: 'string',\n      regex: '<\\\\[',\n      next: 'words'\n    }, {\n      token: 'regexp',\n      regex: '//',\n      next: 'heregex'\n    }, {\n      token: 'regexp',\n      regex: '\\\\/(?:[^[\\\\/\\\\n\\\\\\\\]*(?:(?:\\\\\\\\.|\\\\[[^\\\\]\\\\n\\\\\\\\]*(?:\\\\\\\\.[^\\\\]\\\\n\\\\\\\\]*)*\\\\])[^[\\\\/\\\\n\\\\\\\\]*)*)\\\\/[gimy$]{0,4}',\n      next: 'key'\n    }, {\n      token: 'number',\n      regex: '(?:0x[\\\\da-fA-F][\\\\da-fA-F_]*|(?:[2-9]|[12]\\\\d|3[0-6])r[\\\\da-zA-Z][\\\\da-zA-Z_]*|(?:\\\\d[\\\\d_]*(?:\\\\.\\\\d[\\\\d_]*)?|\\\\.\\\\d[\\\\d_]*)(?:e[+-]?\\\\d[\\\\d_]*)?[\\\\w$]*)'\n    }, {\n      token: 'paren',\n      regex: '[({[]'\n    }, {\n      token: 'paren',\n      regex: '[)}\\\\]]',\n      next: 'key'\n    }, {\n      token: 'operatorKeyword',\n      regex: '\\\\S+'\n    }, {\n      token: 'content',\n      regex: '\\\\s+'\n    }\n  ],\n  heregex: [\n    {\n      token: 'regexp',\n      regex: '.*?//[gimy$?]{0,4}',\n      next: 'start'\n    }, {\n      token: 'regexp',\n      regex: '\\\\s*#{'\n    }, {\n      token: 'comment',\n      regex: '\\\\s+(?:#.*)?'\n    }, {\n      token: 'regexp',\n      regex: '\\\\S+'\n    }\n  ],\n  key: [\n    {\n      token: 'operatorKeyword',\n      regex: '[.?@!]+'\n    }, {\n      token: 'variableName',\n      regex: identifier,\n      next: 'start'\n    }, {\n      token: 'content',\n      regex: '',\n      next: 'start'\n    }\n  ],\n  comment: [\n    {\n      token: 'docComment',\n      regex: '.*?\\\\*/',\n      next: 'start'\n    }, {\n      token: 'docComment',\n      regex: '.+'\n    }\n  ],\n  qdoc: [\n    {\n      token: 'string',\n      regex: \".*?'''\",\n      next: 'key'\n    }, stringfill\n  ],\n  qqdoc: [\n    {\n      token: 'string',\n      regex: '.*?\"\"\"',\n      next: 'key'\n    }, stringfill\n  ],\n  qstring: [\n    {\n      token: 'string',\n      regex: '[^\\\\\\\\\\']*(?:\\\\\\\\.[^\\\\\\\\\\']*)*\\'',\n      next: 'key'\n    }, stringfill\n  ],\n  qqstring: [\n    {\n      token: 'string',\n      regex: '[^\\\\\\\\\"]*(?:\\\\\\\\.[^\\\\\\\\\"]*)*\"',\n      next: 'key'\n    }, stringfill\n  ],\n  js: [\n    {\n      token: 'string',\n      regex: '[^\\\\\\\\`]*(?:\\\\\\\\.[^\\\\\\\\`]*)*`',\n      next: 'key'\n    }, stringfill\n  ],\n  words: [\n    {\n      token: 'string',\n      regex: '.*?\\\\]>',\n      next: 'key'\n    }, stringfill\n  ]\n};\nfor (var idx in Rules) {\n  var r = Rules[idx];\n  if (r.splice) {\n    for (var i = 0, len = r.length; i < len; ++i) {\n      var rr = r[i];\n      if (typeof rr.regex === 'string') {\n        Rules[idx][i].regex = new RegExp('^' + rr.regex);\n      }\n    }\n  } else if (typeof rr.regex === 'string') {\n    Rules[idx].regex = new RegExp('^' + r.regex);\n  }\n}\n\nexport const liveScript = {\n  name: \"livescript\",\n  startState: function(){\n    return {\n      next: 'start',\n      lastToken: {style: null, indent: 0, content: \"\"}\n    };\n  },\n  token: function(stream, state){\n    while (stream.pos == stream.start)\n      var style = tokenBase(stream, state);\n    state.lastToken = {\n      style: style,\n      indent: stream.indentation(),\n      content: stream.current()\n    };\n    return style.replace(/\\./g, ' ');\n  },\n  indent: function(state){\n    var indentation = state.lastToken.indent;\n    if (state.lastToken.content.match(indenter)) {\n      indentation += 2;\n    }\n    return indentation;\n  }\n};\n","function prefixRE(words) {\n  return new RegExp(\"^(?:\" + words.join(\"|\") + \")\", \"i\");\n}\nfunction wordRE(words) {\n  return new RegExp(\"^(?:\" + words.join(\"|\") + \")$\", \"i\");\n}\n\n// long list of standard functions from lua manual\nvar builtins = wordRE([\n  \"_G\",\"_VERSION\",\"assert\",\"collectgarbage\",\"dofile\",\"error\",\"getfenv\",\"getmetatable\",\"ipairs\",\"load\",\n  \"loadfile\",\"loadstring\",\"module\",\"next\",\"pairs\",\"pcall\",\"print\",\"rawequal\",\"rawget\",\"rawset\",\"require\",\n  \"select\",\"setfenv\",\"setmetatable\",\"tonumber\",\"tostring\",\"type\",\"unpack\",\"xpcall\",\n\n  \"coroutine.create\",\"coroutine.resume\",\"coroutine.running\",\"coroutine.status\",\"coroutine.wrap\",\"coroutine.yield\",\n\n  \"debug.debug\",\"debug.getfenv\",\"debug.gethook\",\"debug.getinfo\",\"debug.getlocal\",\"debug.getmetatable\",\n  \"debug.getregistry\",\"debug.getupvalue\",\"debug.setfenv\",\"debug.sethook\",\"debug.setlocal\",\"debug.setmetatable\",\n  \"debug.setupvalue\",\"debug.traceback\",\n\n  \"close\",\"flush\",\"lines\",\"read\",\"seek\",\"setvbuf\",\"write\",\n\n  \"io.close\",\"io.flush\",\"io.input\",\"io.lines\",\"io.open\",\"io.output\",\"io.popen\",\"io.read\",\"io.stderr\",\"io.stdin\",\n  \"io.stdout\",\"io.tmpfile\",\"io.type\",\"io.write\",\n\n  \"math.abs\",\"math.acos\",\"math.asin\",\"math.atan\",\"math.atan2\",\"math.ceil\",\"math.cos\",\"math.cosh\",\"math.deg\",\n  \"math.exp\",\"math.floor\",\"math.fmod\",\"math.frexp\",\"math.huge\",\"math.ldexp\",\"math.log\",\"math.log10\",\"math.max\",\n  \"math.min\",\"math.modf\",\"math.pi\",\"math.pow\",\"math.rad\",\"math.random\",\"math.randomseed\",\"math.sin\",\"math.sinh\",\n  \"math.sqrt\",\"math.tan\",\"math.tanh\",\n\n  \"os.clock\",\"os.date\",\"os.difftime\",\"os.execute\",\"os.exit\",\"os.getenv\",\"os.remove\",\"os.rename\",\"os.setlocale\",\n  \"os.time\",\"os.tmpname\",\n\n  \"package.cpath\",\"package.loaded\",\"package.loaders\",\"package.loadlib\",\"package.path\",\"package.preload\",\n  \"package.seeall\",\n\n  \"string.byte\",\"string.char\",\"string.dump\",\"string.find\",\"string.format\",\"string.gmatch\",\"string.gsub\",\n  \"string.len\",\"string.lower\",\"string.match\",\"string.rep\",\"string.reverse\",\"string.sub\",\"string.upper\",\n\n  \"table.concat\",\"table.insert\",\"table.maxn\",\"table.remove\",\"table.sort\"\n]);\nvar keywords = wordRE([\"and\",\"break\",\"elseif\",\"false\",\"nil\",\"not\",\"or\",\"return\",\n                       \"true\",\"function\", \"end\", \"if\", \"then\", \"else\", \"do\",\n                       \"while\", \"repeat\", \"until\", \"for\", \"in\", \"local\" ]);\n\nvar indentTokens = wordRE([\"function\", \"if\",\"repeat\",\"do\", \"\\\\(\", \"{\"]);\nvar dedentTokens = wordRE([\"end\", \"until\", \"\\\\)\", \"}\"]);\nvar dedentPartial = prefixRE([\"end\", \"until\", \"\\\\)\", \"}\", \"else\", \"elseif\"]);\n\nfunction readBracket(stream) {\n  var level = 0;\n  while (stream.eat(\"=\")) ++level;\n  stream.eat(\"[\");\n  return level;\n}\n\nfunction normal(stream, state) {\n  var ch = stream.next();\n  if (ch == \"-\" && stream.eat(\"-\")) {\n    if (stream.eat(\"[\") && stream.eat(\"[\"))\n      return (state.cur = bracketed(readBracket(stream), \"comment\"))(stream, state);\n    stream.skipToEnd();\n    return \"comment\";\n  }\n  if (ch == \"\\\"\" || ch == \"'\")\n    return (state.cur = string(ch))(stream, state);\n  if (ch == \"[\" && /[\\[=]/.test(stream.peek()))\n    return (state.cur = bracketed(readBracket(stream), \"string\"))(stream, state);\n  if (/\\d/.test(ch)) {\n    stream.eatWhile(/[\\w.%]/);\n    return \"number\";\n  }\n  if (/[\\w_]/.test(ch)) {\n    stream.eatWhile(/[\\w\\\\\\-_.]/);\n    return \"variable\";\n  }\n  return null;\n}\n\nfunction bracketed(level, style) {\n  return function(stream, state) {\n    var curlev = null, ch;\n    while ((ch = stream.next()) != null) {\n      if (curlev == null) {if (ch == \"]\") curlev = 0;}\n      else if (ch == \"=\") ++curlev;\n      else if (ch == \"]\" && curlev == level) { state.cur = normal; break; }\n      else curlev = null;\n    }\n    return style;\n  };\n}\n\nfunction string(quote) {\n  return function(stream, state) {\n    var escaped = false, ch;\n    while ((ch = stream.next()) != null) {\n      if (ch == quote && !escaped) break;\n      escaped = !escaped && ch == \"\\\\\";\n    }\n    if (!escaped) state.cur = normal;\n    return \"string\";\n  };\n}\n\nexport const lua = {\n  name: \"lua\",\n\n  startState: function() {\n    return {basecol: 0, indentDepth: 0, cur: normal};\n  },\n\n  token: function(stream, state) {\n    if (stream.eatSpace()) return null;\n    var style = state.cur(stream, state);\n    var word = stream.current();\n    if (style == \"variable\") {\n      if (keywords.test(word)) style = \"keyword\";\n      else if (builtins.test(word)) style = \"builtin\";\n    }\n    if ((style != \"comment\") && (style != \"string\")){\n      if (indentTokens.test(word)) ++state.indentDepth;\n      else if (dedentTokens.test(word)) --state.indentDepth;\n    }\n    return style;\n  },\n\n  indent: function(state, textAfter, cx) {\n    var closing = dedentPartial.test(textAfter);\n    return state.basecol + cx.unit * (state.indentDepth - (closing ? 1 : 0));\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*(?:end|until|else|\\)|\\})$/,\n    commentTokens: {line: \"--\", block: {open: \"--[[\", close: \"]]--\"}}\n  }\n};\n","// used pattern building blocks\nvar Identifier = '[a-zA-Z\\\\$][a-zA-Z0-9\\\\$]*';\nvar pBase      = \"(?:\\\\d+)\";\nvar pFloat     = \"(?:\\\\.\\\\d+|\\\\d+\\\\.\\\\d*|\\\\d+)\";\nvar pFloatBase = \"(?:\\\\.\\\\w+|\\\\w+\\\\.\\\\w*|\\\\w+)\";\nvar pPrecision = \"(?:`(?:`?\"+pFloat+\")?)\";\n\n// regular expressions\nvar reBaseForm        = new RegExp('(?:'+pBase+'(?:\\\\^\\\\^'+pFloatBase+pPrecision+'?(?:\\\\*\\\\^[+-]?\\\\d+)?))');\nvar reFloatForm       = new RegExp('(?:' + pFloat + pPrecision + '?(?:\\\\*\\\\^[+-]?\\\\d+)?)');\nvar reIdInContext     = new RegExp('(?:`?)(?:' + Identifier + ')(?:`(?:' + Identifier + '))*(?:`?)');\n\nfunction tokenBase(stream, state) {\n  var ch;\n\n  // get next character\n  ch = stream.next();\n\n  // string\n  if (ch === '\"') {\n    state.tokenize = tokenString;\n    return state.tokenize(stream, state);\n  }\n\n  // comment\n  if (ch === '(') {\n    if (stream.eat('*')) {\n      state.commentLevel++;\n      state.tokenize = tokenComment;\n      return state.tokenize(stream, state);\n    }\n  }\n\n  // go back one character\n  stream.backUp(1);\n\n  // look for numbers\n  // Numbers in a baseform\n  if (stream.match(reBaseForm, true, false)) {\n    return 'number';\n  }\n\n  // Mathematica numbers. Floats (1.2, .2, 1.) can have optionally a precision (`float) or an accuracy definition\n  // (``float). Note: while 1.2` is possible 1.2`` is not. At the end an exponent (float*^+12) can follow.\n  if (stream.match(reFloatForm, true, false)) {\n    return 'number';\n  }\n\n  /* In[23] and Out[34] */\n  if (stream.match(/(?:In|Out)\\[[0-9]*\\]/, true, false)) {\n    return 'atom';\n  }\n\n  // usage\n  if (stream.match(/([a-zA-Z\\$][a-zA-Z0-9\\$]*(?:`[a-zA-Z0-9\\$]+)*::usage)/, true, false)) {\n    return 'meta';\n  }\n\n  // message\n  if (stream.match(/([a-zA-Z\\$][a-zA-Z0-9\\$]*(?:`[a-zA-Z0-9\\$]+)*::[a-zA-Z\\$][a-zA-Z0-9\\$]*):?/, true, false)) {\n    return 'string.special';\n  }\n\n  // this makes a look-ahead match for something like variable:{_Integer}\n  // the match is then forwarded to the mma-patterns tokenizer.\n  if (stream.match(/([a-zA-Z\\$][a-zA-Z0-9\\$]*\\s*:)(?:(?:[a-zA-Z\\$][a-zA-Z0-9\\$]*)|(?:[^:=>~@\\^\\&\\*\\)\\[\\]'\\?,\\|])).*/, true, false)) {\n    return 'variableName.special';\n  }\n\n  // catch variables which are used together with Blank (_), BlankSequence (__) or BlankNullSequence (___)\n  // Cannot start with a number, but can have numbers at any other position. Examples\n  // blub__Integer, a1_, b34_Integer32\n  if (stream.match(/[a-zA-Z\\$][a-zA-Z0-9\\$]*_+[a-zA-Z\\$][a-zA-Z0-9\\$]*/, true, false)) {\n    return 'variableName.special';\n  }\n  if (stream.match(/[a-zA-Z\\$][a-zA-Z0-9\\$]*_+/, true, false)) {\n    return 'variableName.special';\n  }\n  if (stream.match(/_+[a-zA-Z\\$][a-zA-Z0-9\\$]*/, true, false)) {\n    return 'variableName.special';\n  }\n\n  // Named characters in Mathematica, like \\[Gamma].\n  if (stream.match(/\\\\\\[[a-zA-Z\\$][a-zA-Z0-9\\$]*\\]/, true, false)) {\n    return 'character';\n  }\n\n  // Match all braces separately\n  if (stream.match(/(?:\\[|\\]|{|}|\\(|\\))/, true, false)) {\n    return 'bracket';\n  }\n\n  // Catch Slots (#, ##, #3, ##9 and the V10 named slots #name). I have never seen someone using more than one digit after #, so we match\n  // only one.\n  if (stream.match(/(?:#[a-zA-Z\\$][a-zA-Z0-9\\$]*|#+[0-9]?)/, true, false)) {\n    return 'variableName.constant';\n  }\n\n  // Literals like variables, keywords, functions\n  if (stream.match(reIdInContext, true, false)) {\n    return 'keyword';\n  }\n\n  // operators. Note that operators like @@ or /; are matched separately for each symbol.\n  if (stream.match(/(?:\\\\|\\+|\\-|\\*|\\/|,|;|\\.|:|@|~|=|>|<|&|\\||_|`|'|\\^|\\?|!|%)/, true, false)) {\n    return 'operator';\n  }\n\n  // everything else is an error\n  stream.next(); // advance the stream.\n  return 'error';\n}\n\nfunction tokenString(stream, state) {\n  var next, end = false, escaped = false;\n  while ((next = stream.next()) != null) {\n    if (next === '\"' && !escaped) {\n      end = true;\n      break;\n    }\n    escaped = !escaped && next === '\\\\';\n  }\n  if (end && !escaped) {\n    state.tokenize = tokenBase;\n  }\n  return 'string';\n};\n\nfunction tokenComment(stream, state) {\n  var prev, next;\n  while(state.commentLevel > 0 && (next = stream.next()) != null) {\n    if (prev === '(' && next === '*') state.commentLevel++;\n    if (prev === '*' && next === ')') state.commentLevel--;\n    prev = next;\n  }\n  if (state.commentLevel <= 0) {\n    state.tokenize = tokenBase;\n  }\n  return 'comment';\n}\n\nexport const mathematica = {\n  name: \"mathematica\",\n  startState: function() {return {tokenize: tokenBase, commentLevel: 0};},\n  token: function(stream, state) {\n    if (stream.eatSpace()) return null;\n    return state.tokenize(stream, state);\n  },\n  languageData: {\n    commentTokens: {block: {open: \"(*\", close: \"*)\"}}\n  }\n}\n\n","var rfc2822 = [\n  \"From\", \"Sender\", \"Reply-To\", \"To\", \"Cc\", \"Bcc\", \"Message-ID\",\n  \"In-Reply-To\", \"References\", \"Resent-From\", \"Resent-Sender\", \"Resent-To\",\n  \"Resent-Cc\", \"Resent-Bcc\", \"Resent-Message-ID\", \"Return-Path\", \"Received\"\n];\nvar rfc2822NoEmail = [\n  \"Date\", \"Subject\", \"Comments\", \"Keywords\", \"Resent-Date\"\n];\n\nvar whitespace = /^[ \\t]/;\nvar separator = /^From /; // See RFC 4155\nvar rfc2822Header = new RegExp(\"^(\" + rfc2822.join(\"|\") + \"): \");\nvar rfc2822HeaderNoEmail = new RegExp(\"^(\" + rfc2822NoEmail.join(\"|\") + \"): \");\nvar header = /^[^:]+:/; // Optional fields defined in RFC 2822\nvar email = /^[^ ]+@[^ ]+/;\nvar untilEmail = /^.*?(?=[^ ]+?@[^ ]+)/;\nvar bracketedEmail = /^<.*?>/;\nvar untilBracketedEmail = /^.*?(?=<.*>)/;\n\nfunction styleForHeader(header) {\n  if (header === \"Subject\") return \"header\";\n  return \"string\";\n}\n\nfunction readToken(stream, state) {\n  if (stream.sol()) {\n    // From last line\n    state.inSeparator = false;\n    if (state.inHeader && stream.match(whitespace)) {\n      // Header folding\n      return null;\n    } else {\n      state.inHeader = false;\n      state.header = null;\n    }\n\n    if (stream.match(separator)) {\n      state.inHeaders = true;\n      state.inSeparator = true;\n      return \"atom\";\n    }\n\n    var match;\n    var emailPermitted = false;\n    if ((match = stream.match(rfc2822HeaderNoEmail)) ||\n        (emailPermitted = true) && (match = stream.match(rfc2822Header))) {\n      state.inHeaders = true;\n      state.inHeader = true;\n      state.emailPermitted = emailPermitted;\n      state.header = match[1];\n      return \"atom\";\n    }\n\n    // Use vim's heuristics: recognize custom headers only if the line is in a\n    // block of legitimate headers.\n    if (state.inHeaders && (match = stream.match(header))) {\n      state.inHeader = true;\n      state.emailPermitted = true;\n      state.header = match[1];\n      return \"atom\";\n    }\n\n    state.inHeaders = false;\n    stream.skipToEnd();\n    return null;\n  }\n\n  if (state.inSeparator) {\n    if (stream.match(email)) return \"link\";\n    if (stream.match(untilEmail)) return \"atom\";\n    stream.skipToEnd();\n    return \"atom\";\n  }\n\n  if (state.inHeader) {\n    var style = styleForHeader(state.header);\n\n    if (state.emailPermitted) {\n      if (stream.match(bracketedEmail)) return style + \" link\";\n      if (stream.match(untilBracketedEmail)) return style;\n    }\n    stream.skipToEnd();\n    return style;\n  }\n\n  stream.skipToEnd();\n  return null;\n};\n\nexport const mbox = {\n  name: \"mbox\",\n  startState: function() {\n    return {\n      // Is in a mbox separator\n      inSeparator: false,\n      // Is in a mail header\n      inHeader: false,\n      // If bracketed email is permitted. Only applicable when inHeader\n      emailPermitted: false,\n      // Name of current header\n      header: null,\n      // Is in a region of mail headers\n      inHeaders: false\n    };\n  },\n  token: readToken,\n  blankLine: function(state) {\n    state.inHeaders = state.inSeparator = state.inHeader = false;\n  },\n  languageData: {\n    autocomplete: rfc2822.concat(rfc2822NoEmail)\n  }\n}\n\n","function parseWords(str) {\n  var obj = {}, words = str.split(\" \");\n  for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n  return obj;\n}\nvar specials = parseWords(\"$! $$ $& $? $+ $abook $abs $active $activecid \" +\n                          \"$activewid $address $addtok $agent $agentname $agentstat $agentver \" +\n                          \"$alias $and $anick $ansi2mirc $aop $appactive $appstate $asc $asctime \" +\n                          \"$asin $atan $avoice $away $awaymsg $awaytime $banmask $base $bfind \" +\n                          \"$binoff $biton $bnick $bvar $bytes $calc $cb $cd $ceil $chan $chanmodes \" +\n                          \"$chantypes $chat $chr $cid $clevel $click $cmdbox $cmdline $cnick $color \" +\n                          \"$com $comcall $comchan $comerr $compact $compress $comval $cos $count \" +\n                          \"$cr $crc $creq $crlf $ctime $ctimer $ctrlenter $date $day $daylight \" +\n                          \"$dbuh $dbuw $dccignore $dccport $dde $ddename $debug $decode $decompress \" +\n                          \"$deltok $devent $dialog $did $didreg $didtok $didwm $disk $dlevel $dll \" +\n                          \"$dllcall $dname $dns $duration $ebeeps $editbox $emailaddr $encode $error \" +\n                          \"$eval $event $exist $feof $ferr $fgetc $file $filename $filtered $finddir \" +\n                          \"$finddirn $findfile $findfilen $findtok $fline $floor $fopen $fread $fserve \" +\n                          \"$fulladdress $fulldate $fullname $fullscreen $get $getdir $getdot $gettok $gmt \" +\n                          \"$group $halted $hash $height $hfind $hget $highlight $hnick $hotline \" +\n                          \"$hotlinepos $ial $ialchan $ibl $idle $iel $ifmatch $ignore $iif $iil \" +\n                          \"$inelipse $ini $inmidi $inpaste $inpoly $input $inrect $inroundrect \" +\n                          \"$insong $instok $int $inwave $ip $isalias $isbit $isdde $isdir $isfile \" +\n                          \"$isid $islower $istok $isupper $keychar $keyrpt $keyval $knick $lactive \" +\n                          \"$lactivecid $lactivewid $left $len $level $lf $line $lines $link $lock \" +\n                          \"$lock $locked $log $logstamp $logstampfmt $longfn $longip $lower $ltimer \" +\n                          \"$maddress $mask $matchkey $matchtok $md5 $me $menu $menubar $menucontext \" +\n                          \"$menutype $mid $middir $mircdir $mircexe $mircini $mklogfn $mnick $mode \" +\n                          \"$modefirst $modelast $modespl $mouse $msfile $network $newnick $nick $nofile \" +\n                          \"$nopath $noqt $not $notags $notify $null $numeric $numok $oline $onpoly \" +\n                          \"$opnick $or $ord $os $passivedcc $pic $play $pnick $port $portable $portfree \" +\n                          \"$pos $prefix $prop $protect $puttok $qt $query $rand $r $rawmsg $read $readomo \" +\n                          \"$readn $regex $regml $regsub $regsubex $remove $remtok $replace $replacex \" +\n                          \"$reptok $result $rgb $right $round $scid $scon $script $scriptdir $scriptline \" +\n                          \"$sdir $send $server $serverip $sfile $sha1 $shortfn $show $signal $sin \" +\n                          \"$site $sline $snick $snicks $snotify $sock $sockbr $sockerr $sockname \" +\n                          \"$sorttok $sound $sqrt $ssl $sreq $sslready $status $strip $str $stripped \" +\n                          \"$syle $submenu $switchbar $tan $target $ticks $time $timer $timestamp \" +\n                          \"$timestampfmt $timezone $tip $titlebar $toolbar $treebar $trust $ulevel \" +\n                          \"$ulist $upper $uptime $url $usermode $v1 $v2 $var $vcmd $vcmdstat $vcmdver \" +\n                          \"$version $vnick $vol $wid $width $wildsite $wildtok $window $wrap $xor\");\nvar keywords = parseWords(\"abook ajinvite alias aline ame amsg anick aop auser autojoin avoice \" +\n                          \"away background ban bcopy beep bread break breplace bset btrunc bunset bwrite \" +\n                          \"channel clear clearall cline clipboard close cnick color comclose comopen \" +\n                          \"comreg continue copy creq ctcpreply ctcps dcc dccserver dde ddeserver \" +\n                          \"debug dec describe dialog did didtok disable disconnect dlevel dline dll \" +\n                          \"dns dqwindow drawcopy drawdot drawfill drawline drawpic drawrect drawreplace \" +\n                          \"drawrot drawsave drawscroll drawtext ebeeps echo editbox emailaddr enable \" +\n                          \"events exit fclose filter findtext finger firewall flash flist flood flush \" +\n                          \"flushini font fopen fseek fsend fserve fullname fwrite ghide gload gmove \" +\n                          \"gopts goto gplay gpoint gqreq groups gshow gsize gstop gtalk gunload hadd \" +\n                          \"halt haltdef hdec hdel help hfree hinc hload hmake hop hsave ial ialclear \" +\n                          \"ialmark identd if ignore iline inc invite iuser join kick linesep links list \" +\n                          \"load loadbuf localinfo log mdi me menubar mkdir mnick mode msg nick noop notice \" +\n                          \"notify omsg onotice part partall pdcc perform play playctrl pop protect pvoice \" +\n                          \"qme qmsg query queryn quit raw reload remini remote remove rename renwin \" +\n                          \"reseterror resetidle return rlevel rline rmdir run ruser save savebuf saveini \" +\n                          \"say scid scon server set showmirc signam sline sockaccept sockclose socklist \" +\n                          \"socklisten sockmark sockopen sockpause sockread sockrename sockudp sockwrite \" +\n                          \"sound speak splay sreq strip switchbar timer timestamp titlebar tnick tokenize \" +\n                          \"toolbar topic tray treebar ulist unload unset unsetall updatenl url uwho \" +\n                          \"var vcadd vcmd vcrem vol while whois window winhelp write writeint if isalnum \" +\n                          \"isalpha isaop isavoice isban ischan ishop isignore isin isincs isletter islower \" +\n                          \"isnotify isnum ison isop isprotect isreg isupper isvoice iswm iswmcs \" +\n                          \"elseif else goto menu nicklist status title icon size option text edit \" +\n                          \"button check radio box scroll list combo link tab item\");\nvar functions = parseWords(\"if elseif else and not or eq ne in ni for foreach while switch\");\nvar isOperatorChar = /[+\\-*&%=<>!?^\\/\\|]/;\nfunction chain(stream, state, f) {\n  state.tokenize = f;\n  return f(stream, state);\n}\nfunction tokenBase(stream, state) {\n  var beforeParams = state.beforeParams;\n  state.beforeParams = false;\n  var ch = stream.next();\n  if (/[\\[\\]{}\\(\\),\\.]/.test(ch)) {\n    if (ch == \"(\" && beforeParams) state.inParams = true;\n    else if (ch == \")\") state.inParams = false;\n    return null;\n  }\n  else if (/\\d/.test(ch)) {\n    stream.eatWhile(/[\\w\\.]/);\n    return \"number\";\n  }\n  else if (ch == \"\\\\\") {\n    stream.eat(\"\\\\\");\n    stream.eat(/./);\n    return \"number\";\n  }\n  else if (ch == \"/\" && stream.eat(\"*\")) {\n    return chain(stream, state, tokenComment);\n  }\n  else if (ch == \";\" && stream.match(/ *\\( *\\(/)) {\n    return chain(stream, state, tokenUnparsed);\n  }\n  else if (ch == \";\" && !state.inParams) {\n    stream.skipToEnd();\n    return \"comment\";\n  }\n  else if (ch == '\"') {\n    stream.eat(/\"/);\n    return \"keyword\";\n  }\n  else if (ch == \"$\") {\n    stream.eatWhile(/[$_a-z0-9A-Z\\.:]/);\n    if (specials && specials.propertyIsEnumerable(stream.current().toLowerCase())) {\n      return \"keyword\";\n    }\n    else {\n      state.beforeParams = true;\n      return \"builtin\";\n    }\n  }\n  else if (ch == \"%\") {\n    stream.eatWhile(/[^,\\s()]/);\n    state.beforeParams = true;\n    return \"string\";\n  }\n  else if (isOperatorChar.test(ch)) {\n    stream.eatWhile(isOperatorChar);\n    return \"operator\";\n  }\n  else {\n    stream.eatWhile(/[\\w\\$_{}]/);\n    var word = stream.current().toLowerCase();\n    if (keywords && keywords.propertyIsEnumerable(word))\n      return \"keyword\";\n    if (functions && functions.propertyIsEnumerable(word)) {\n      state.beforeParams = true;\n      return \"keyword\";\n    }\n    return null;\n  }\n}\nfunction tokenComment(stream, state) {\n  var maybeEnd = false, ch;\n  while (ch = stream.next()) {\n    if (ch == \"/\" && maybeEnd) {\n      state.tokenize = tokenBase;\n      break;\n    }\n    maybeEnd = (ch == \"*\");\n  }\n  return \"comment\";\n}\nfunction tokenUnparsed(stream, state) {\n  var maybeEnd = 0, ch;\n  while (ch = stream.next()) {\n    if (ch == \";\" && maybeEnd == 2) {\n      state.tokenize = tokenBase;\n      break;\n    }\n    if (ch == \")\")\n      maybeEnd++;\n    else if (ch != \" \")\n      maybeEnd = 0;\n  }\n  return \"meta\";\n}\nexport const mirc = {\n  name: \"mirc\",\n  startState: function() {\n    return {\n      tokenize: tokenBase,\n      beforeParams: false,\n      inParams: false\n    };\n  },\n  token: function(stream, state) {\n    if (stream.eatSpace()) return null;\n    return state.tokenize(stream, state);\n  }\n};\n","function words(str) {\n  var obj = {}, words = str.split(\" \");\n  for (var i=0; i<words.length; ++i)\n    obj[words[i]] = true;\n  return obj;\n}\n\nvar keywords = words(\"algorithm and annotation assert block break class connect connector constant constrainedby der discrete each else elseif elsewhen encapsulated end enumeration equation expandable extends external false final flow for function if import impure in initial inner input loop model not operator or outer output package parameter partial protected public pure record redeclare replaceable return stream then true type when while within\")\nvar builtin = words(\"abs acos actualStream asin atan atan2 cardinality ceil cos cosh delay div edge exp floor getInstanceName homotopy inStream integer log log10 mod pre reinit rem semiLinear sign sin sinh spatialDistribution sqrt tan tanh\")\nvar atoms = words(\"Real Boolean Integer String\")\n\nvar completions = [].concat(Object.keys(keywords), Object.keys(builtin), Object.keys(atoms))\n\nvar isSingleOperatorChar = /[;=\\(:\\),{}.*<>+\\-\\/^\\[\\]]/;\nvar isDoubleOperatorChar = /(:=|<=|>=|==|<>|\\.\\+|\\.\\-|\\.\\*|\\.\\/|\\.\\^)/;\nvar isDigit = /[0-9]/;\nvar isNonDigit = /[_a-zA-Z]/;\n\nfunction tokenLineComment(stream, state) {\n  stream.skipToEnd();\n  state.tokenize = null;\n  return \"comment\";\n}\n\nfunction tokenBlockComment(stream, state) {\n  var maybeEnd = false, ch;\n  while (ch = stream.next()) {\n    if (maybeEnd && ch == \"/\") {\n      state.tokenize = null;\n      break;\n    }\n    maybeEnd = (ch == \"*\");\n  }\n  return \"comment\";\n}\n\nfunction tokenString(stream, state) {\n  var escaped = false, ch;\n  while ((ch = stream.next()) != null) {\n    if (ch == '\"' && !escaped) {\n      state.tokenize = null;\n      state.sol = false;\n      break;\n    }\n    escaped = !escaped && ch == \"\\\\\";\n  }\n\n  return \"string\";\n}\n\nfunction tokenIdent(stream, state) {\n  stream.eatWhile(isDigit);\n  while (stream.eat(isDigit) || stream.eat(isNonDigit)) { }\n\n\n  var cur = stream.current();\n\n  if(state.sol && (cur == \"package\" || cur == \"model\" || cur == \"when\" || cur == \"connector\")) state.level++;\n  else if(state.sol && cur == \"end\" && state.level > 0) state.level--;\n\n  state.tokenize = null;\n  state.sol = false;\n\n  if (keywords.propertyIsEnumerable(cur)) return \"keyword\";\n  else if (builtin.propertyIsEnumerable(cur)) return \"builtin\";\n  else if (atoms.propertyIsEnumerable(cur)) return \"atom\";\n  else return \"variable\";\n}\n\nfunction tokenQIdent(stream, state) {\n  while (stream.eat(/[^']/)) { }\n\n  state.tokenize = null;\n  state.sol = false;\n\n  if(stream.eat(\"'\"))\n    return \"variable\";\n  else\n    return \"error\";\n}\n\nfunction tokenUnsignedNumber(stream, state) {\n  stream.eatWhile(isDigit);\n  if (stream.eat('.')) {\n    stream.eatWhile(isDigit);\n  }\n  if (stream.eat('e') || stream.eat('E')) {\n    if (!stream.eat('-'))\n      stream.eat('+');\n    stream.eatWhile(isDigit);\n  }\n\n  state.tokenize = null;\n  state.sol = false;\n  return \"number\";\n}\n\n// Interface\nexport const modelica = {\n  name: \"modelica\",\n  startState: function() {\n    return {\n      tokenize: null,\n      level: 0,\n      sol: true\n    };\n  },\n\n  token: function(stream, state) {\n    if(state.tokenize != null) {\n      return state.tokenize(stream, state);\n    }\n\n    if(stream.sol()) {\n      state.sol = true;\n    }\n\n    // WHITESPACE\n    if(stream.eatSpace()) {\n      state.tokenize = null;\n      return null;\n    }\n\n    var ch = stream.next();\n\n    // LINECOMMENT\n    if(ch == '/' && stream.eat('/')) {\n      state.tokenize = tokenLineComment;\n    }\n    // BLOCKCOMMENT\n    else if(ch == '/' && stream.eat('*')) {\n      state.tokenize = tokenBlockComment;\n    }\n    // TWO SYMBOL TOKENS\n    else if(isDoubleOperatorChar.test(ch+stream.peek())) {\n      stream.next();\n      state.tokenize = null;\n      return \"operator\";\n    }\n    // SINGLE SYMBOL TOKENS\n    else if(isSingleOperatorChar.test(ch)) {\n      state.tokenize = null;\n      return \"operator\";\n    }\n    // IDENT\n    else if(isNonDigit.test(ch)) {\n      state.tokenize = tokenIdent;\n    }\n    // Q-IDENT\n    else if(ch == \"'\" && stream.peek() && stream.peek() != \"'\") {\n      state.tokenize = tokenQIdent;\n    }\n    // STRING\n    else if(ch == '\"') {\n      state.tokenize = tokenString;\n    }\n    // UNSIGNED_NUMBER\n    else if(isDigit.test(ch)) {\n      state.tokenize = tokenUnsignedNumber;\n    }\n    // ERROR\n    else {\n      state.tokenize = null;\n      return \"error\";\n    }\n\n    return state.tokenize(stream, state);\n  },\n\n  indent: function(state, textAfter, cx) {\n    if (state.tokenize != null) return null;\n\n    var level = state.level;\n    if(/(algorithm)/.test(textAfter)) level--;\n    if(/(equation)/.test(textAfter)) level--;\n    if(/(initial algorithm)/.test(textAfter)) level--;\n    if(/(initial equation)/.test(textAfter)) level--;\n    if(/(end)/.test(textAfter)) level--;\n\n    if(level > 0)\n      return cx.unit*level;\n    else\n      return 0;\n  },\n\n  languageData: {\n    commentTokens: {line: \"//\", block: {open: \"/*\", close: \"*/\"}},\n    autocomplete: completions\n  }\n};\n","function mkParser(lang) {\n  return {\n    name: \"mscgen\",\n    startState: startStateFn,\n    copyState: copyStateFn,\n    token: produceTokenFunction(lang),\n    languageData: {\n      commentTokens: {line: \"#\", block: {open: \"/*\", close: \"*/\"}}\n    }\n  }\n}\n\nexport const mscgen = mkParser({\n  \"keywords\" : [\"msc\"],\n  \"options\" : [\"hscale\", \"width\", \"arcgradient\", \"wordwraparcs\"],\n  \"constants\" : [\"true\", \"false\", \"on\", \"off\"],\n  \"attributes\" : [\"label\", \"idurl\", \"id\", \"url\", \"linecolor\", \"linecolour\", \"textcolor\", \"textcolour\", \"textbgcolor\", \"textbgcolour\", \"arclinecolor\", \"arclinecolour\", \"arctextcolor\", \"arctextcolour\", \"arctextbgcolor\", \"arctextbgcolour\", \"arcskip\"],\n  \"brackets\" : [\"\\\\{\", \"\\\\}\"], // [ and  ] are brackets too, but these get handled in with lists\n  \"arcsWords\" : [\"note\", \"abox\", \"rbox\", \"box\"],\n  \"arcsOthers\" : [\"\\\\|\\\\|\\\\|\", \"\\\\.\\\\.\\\\.\", \"---\", \"--\", \"<->\", \"==\", \"<<=>>\", \"<=>\", \"\\\\.\\\\.\", \"<<>>\", \"::\", \"<:>\", \"->\", \"=>>\", \"=>\", \">>\", \":>\", \"<-\", \"<<=\", \"<=\", \"<<\", \"<:\", \"x-\", \"-x\"],\n  \"singlecomment\" : [\"//\", \"#\"],\n  \"operators\" : [\"=\"]\n})\n\nexport const msgenny = mkParser({\n  \"keywords\" : null,\n  \"options\" : [\"hscale\", \"width\", \"arcgradient\", \"wordwraparcs\", \"wordwrapentities\", \"watermark\"],\n  \"constants\" : [\"true\", \"false\", \"on\", \"off\", \"auto\"],\n  \"attributes\" : null,\n  \"brackets\" : [\"\\\\{\", \"\\\\}\"],\n  \"arcsWords\" : [\"note\", \"abox\", \"rbox\", \"box\", \"alt\", \"else\", \"opt\", \"break\", \"par\", \"seq\", \"strict\", \"neg\", \"critical\", \"ignore\", \"consider\", \"assert\", \"loop\", \"ref\", \"exc\"],\n  \"arcsOthers\" : [\"\\\\|\\\\|\\\\|\", \"\\\\.\\\\.\\\\.\", \"---\", \"--\", \"<->\", \"==\", \"<<=>>\", \"<=>\", \"\\\\.\\\\.\", \"<<>>\", \"::\", \"<:>\", \"->\", \"=>>\", \"=>\", \">>\", \":>\", \"<-\", \"<<=\", \"<=\", \"<<\", \"<:\", \"x-\", \"-x\"],\n  \"singlecomment\" : [\"//\", \"#\"],\n  \"operators\" : [\"=\"]\n})\n\nexport const xu = mkParser({\n  \"keywords\" : [\"msc\", \"xu\"],\n  \"options\" : [\"hscale\", \"width\", \"arcgradient\", \"wordwraparcs\", \"wordwrapentities\", \"watermark\"],\n  \"constants\" : [\"true\", \"false\", \"on\", \"off\", \"auto\"],\n  \"attributes\" : [\"label\", \"idurl\", \"id\", \"url\", \"linecolor\", \"linecolour\", \"textcolor\", \"textcolour\", \"textbgcolor\", \"textbgcolour\", \"arclinecolor\", \"arclinecolour\", \"arctextcolor\", \"arctextcolour\", \"arctextbgcolor\", \"arctextbgcolour\", \"arcskip\", \"title\", \"deactivate\", \"activate\", \"activation\"],\n  \"brackets\" : [\"\\\\{\", \"\\\\}\"],  // [ and  ] are brackets too, but these get handled in with lists\n  \"arcsWords\" : [\"note\", \"abox\", \"rbox\", \"box\", \"alt\", \"else\", \"opt\", \"break\", \"par\", \"seq\", \"strict\", \"neg\", \"critical\", \"ignore\", \"consider\", \"assert\", \"loop\", \"ref\", \"exc\"],\n  \"arcsOthers\" : [\"\\\\|\\\\|\\\\|\", \"\\\\.\\\\.\\\\.\", \"---\", \"--\", \"<->\", \"==\", \"<<=>>\", \"<=>\", \"\\\\.\\\\.\", \"<<>>\", \"::\", \"<:>\", \"->\", \"=>>\", \"=>\", \">>\", \":>\", \"<-\", \"<<=\", \"<=\", \"<<\", \"<:\", \"x-\", \"-x\"],\n  \"singlecomment\" : [\"//\", \"#\"],\n  \"operators\" : [\"=\"]\n})\n\nfunction wordRegexpBoundary(pWords) {\n  return new RegExp(\"^\\\\b(\" + pWords.join(\"|\") + \")\\\\b\", \"i\");\n}\n\nfunction wordRegexp(pWords) {\n  return new RegExp(\"^(?:\" + pWords.join(\"|\") + \")\", \"i\");\n}\n\nfunction startStateFn() {\n  return {\n    inComment : false,\n    inString : false,\n    inAttributeList : false,\n    inScript : false\n  };\n}\n\nfunction copyStateFn(pState) {\n  return {\n    inComment : pState.inComment,\n    inString : pState.inString,\n    inAttributeList : pState.inAttributeList,\n    inScript : pState.inScript\n  };\n}\n\nfunction produceTokenFunction(pConfig) {\n  return function(pStream, pState) {\n    if (pStream.match(wordRegexp(pConfig.brackets), true, true)) {\n      return \"bracket\";\n    }\n    /* comments */\n    if (!pState.inComment) {\n      if (pStream.match(/\\/\\*[^\\*\\/]*/, true, true)) {\n        pState.inComment = true;\n        return \"comment\";\n      }\n      if (pStream.match(wordRegexp(pConfig.singlecomment), true, true)) {\n        pStream.skipToEnd();\n        return \"comment\";\n      }\n    }\n    if (pState.inComment) {\n      if (pStream.match(/[^\\*\\/]*\\*\\//, true, true))\n        pState.inComment = false;\n      else\n        pStream.skipToEnd();\n      return \"comment\";\n    }\n    /* strings */\n    if (!pState.inString && pStream.match(/\\\"(\\\\\\\"|[^\\\"])*/, true, true)) {\n      pState.inString = true;\n      return \"string\";\n    }\n    if (pState.inString) {\n      if (pStream.match(/[^\\\"]*\\\"/, true, true))\n        pState.inString = false;\n      else\n        pStream.skipToEnd();\n      return \"string\";\n    }\n    /* keywords & operators */\n    if (!!pConfig.keywords && pStream.match(wordRegexpBoundary(pConfig.keywords), true, true))\n      return \"keyword\";\n\n    if (pStream.match(wordRegexpBoundary(pConfig.options), true, true))\n      return \"keyword\";\n\n    if (pStream.match(wordRegexpBoundary(pConfig.arcsWords), true, true))\n      return \"keyword\";\n\n    if (pStream.match(wordRegexp(pConfig.arcsOthers), true, true))\n      return \"keyword\";\n\n    if (!!pConfig.operators && pStream.match(wordRegexp(pConfig.operators), true, true))\n      return \"operator\";\n\n    if (!!pConfig.constants && pStream.match(wordRegexp(pConfig.constants), true, true))\n      return \"variable\";\n\n    /* attribute lists */\n    if (!pConfig.inAttributeList && !!pConfig.attributes && pStream.match('[', true, true)) {\n      pConfig.inAttributeList = true;\n      return \"bracket\";\n    }\n    if (pConfig.inAttributeList) {\n      if (pConfig.attributes !== null && pStream.match(wordRegexpBoundary(pConfig.attributes), true, true)) {\n        return \"attribute\";\n      }\n      if (pStream.match(']', true, true)) {\n        pConfig.inAttributeList = false;\n        return \"bracket\";\n      }\n    }\n\n    pStream.next();\n    return null\n  };\n}\n","function wordRegexp(words) {\n  return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\", \"i\");\n}\n\nvar singleOperators = new RegExp(\"^[\\\\+\\\\-\\\\*/&#!_?\\\\\\\\<>=\\\\'\\\\[\\\\]]\");\nvar doubleOperators = new RegExp(\"^(('=)|(<=)|(>=)|('>)|('<)|([[)|(]])|(^$))\");\nvar singleDelimiters = new RegExp(\"^[\\\\.,:]\");\nvar brackets = new RegExp(\"[()]\");\nvar identifiers = new RegExp(\"^[%A-Za-z][A-Za-z0-9]*\");\nvar commandKeywords = [\"break\",\"close\",\"do\",\"else\",\"for\",\"goto\", \"halt\", \"hang\", \"if\", \"job\",\"kill\",\"lock\",\"merge\",\"new\",\"open\", \"quit\", \"read\", \"set\", \"tcommit\", \"trollback\", \"tstart\", \"use\", \"view\", \"write\", \"xecute\", \"b\",\"c\",\"d\",\"e\",\"f\",\"g\", \"h\", \"i\", \"j\",\"k\",\"l\",\"m\",\"n\",\"o\", \"q\", \"r\", \"s\", \"tc\", \"tro\", \"ts\", \"u\", \"v\", \"w\", \"x\"];\n// The following list includes intrinsic functions _and_ special variables\nvar intrinsicFuncsWords = [\"\\\\$ascii\", \"\\\\$char\", \"\\\\$data\", \"\\\\$ecode\", \"\\\\$estack\", \"\\\\$etrap\", \"\\\\$extract\", \"\\\\$find\", \"\\\\$fnumber\", \"\\\\$get\", \"\\\\$horolog\", \"\\\\$io\", \"\\\\$increment\", \"\\\\$job\", \"\\\\$justify\", \"\\\\$length\", \"\\\\$name\", \"\\\\$next\", \"\\\\$order\", \"\\\\$piece\", \"\\\\$qlength\", \"\\\\$qsubscript\", \"\\\\$query\", \"\\\\$quit\", \"\\\\$random\", \"\\\\$reverse\", \"\\\\$select\", \"\\\\$stack\", \"\\\\$test\", \"\\\\$text\", \"\\\\$translate\", \"\\\\$view\", \"\\\\$x\", \"\\\\$y\", \"\\\\$a\", \"\\\\$c\", \"\\\\$d\", \"\\\\$e\", \"\\\\$ec\", \"\\\\$es\", \"\\\\$et\", \"\\\\$f\", \"\\\\$fn\", \"\\\\$g\", \"\\\\$h\", \"\\\\$i\", \"\\\\$j\", \"\\\\$l\", \"\\\\$n\", \"\\\\$na\", \"\\\\$o\", \"\\\\$p\", \"\\\\$q\", \"\\\\$ql\", \"\\\\$qs\", \"\\\\$r\", \"\\\\$re\", \"\\\\$s\", \"\\\\$st\", \"\\\\$t\", \"\\\\$tr\", \"\\\\$v\", \"\\\\$z\"];\nvar intrinsicFuncs = wordRegexp(intrinsicFuncsWords);\nvar command = wordRegexp(commandKeywords);\n\nfunction tokenBase(stream, state) {\n  if (stream.sol()) {\n    state.label = true;\n    state.commandMode = 0;\n  }\n\n  // The <space> character has meaning in MUMPS. Ignoring consecutive\n  // spaces would interfere with interpreting whether the next non-space\n  // character belongs to the command or argument context.\n\n  // Examine each character and update a mode variable whose interpretation is:\n  //   >0 => command    0 => argument    <0 => command post-conditional\n  var ch = stream.peek();\n\n  if (ch == \" \" || ch == \"\\t\") { // Pre-process <space>\n    state.label = false;\n    if (state.commandMode == 0)\n      state.commandMode = 1;\n    else if ((state.commandMode < 0) || (state.commandMode == 2))\n      state.commandMode = 0;\n  } else if ((ch != \".\") && (state.commandMode > 0)) {\n    if (ch == \":\")\n      state.commandMode = -1;   // SIS - Command post-conditional\n    else\n      state.commandMode = 2;\n  }\n\n  // Do not color parameter list as line tag\n  if ((ch === \"(\") || (ch === \"\\u0009\"))\n    state.label = false;\n\n  // MUMPS comment starts with \";\"\n  if (ch === \";\") {\n    stream.skipToEnd();\n    return \"comment\";\n  }\n\n  // Number Literals // SIS/RLM - MUMPS permits canonic number followed by concatenate operator\n  if (stream.match(/^[-+]?\\d+(\\.\\d+)?([eE][-+]?\\d+)?/))\n    return \"number\";\n\n  // Handle Strings\n  if (ch == '\"') {\n    if (stream.skipTo('\"')) {\n      stream.next();\n      return \"string\";\n    } else {\n      stream.skipToEnd();\n      return \"error\";\n    }\n  }\n\n  // Handle operators and Delimiters\n  if (stream.match(doubleOperators) || stream.match(singleOperators))\n    return \"operator\";\n\n  // Prevents leading \".\" in DO block from falling through to error\n  if (stream.match(singleDelimiters))\n    return null;\n\n  if (brackets.test(ch)) {\n    stream.next();\n    return \"bracket\";\n  }\n\n  if (state.commandMode > 0 && stream.match(command))\n    return \"controlKeyword\";\n\n  if (stream.match(intrinsicFuncs))\n    return \"builtin\";\n\n  if (stream.match(identifiers))\n    return \"variable\";\n\n  // Detect dollar-sign when not a documented intrinsic function\n  // \"^\" may introduce a GVN or SSVN - Color same as function\n  if (ch === \"$\" || ch === \"^\") {\n    stream.next();\n    return \"builtin\";\n  }\n\n  // MUMPS Indirection\n  if (ch === \"@\") {\n    stream.next();\n    return \"string.special\";\n  }\n\n  if (/[\\w%]/.test(ch)) {\n    stream.eatWhile(/[\\w%]/);\n    return \"variable\";\n  }\n\n  // Handle non-detected items\n  stream.next();\n  return \"error\";\n}\n\nexport const mumps = {\n  name: \"mumps\",\n  startState: function() {\n    return {\n      label: false,\n      commandMode: 0\n    };\n  },\n\n  token: function(stream, state) {\n    var style = tokenBase(stream, state);\n    if (state.label) return \"tag\";\n    return style;\n  }\n};\n","function words(str) {\n  var obj = {}, words = str.split(\" \");\n  for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n  return obj;\n}\n\nvar keywords = words(\n  /* ngxDirectiveControl */ \"break return rewrite set\" +\n    /* ngxDirective */ \" accept_mutex accept_mutex_delay access_log add_after_body add_before_body add_header addition_types aio alias allow ancient_browser ancient_browser_value auth_basic auth_basic_user_file auth_http auth_http_header auth_http_timeout autoindex autoindex_exact_size autoindex_localtime charset charset_types client_body_buffer_size client_body_in_file_only client_body_in_single_buffer client_body_temp_path client_body_timeout client_header_buffer_size client_header_timeout client_max_body_size connection_pool_size create_full_put_path daemon dav_access dav_methods debug_connection debug_points default_type degradation degrade deny devpoll_changes devpoll_events directio directio_alignment empty_gif env epoll_events error_log eventport_events expires fastcgi_bind fastcgi_buffer_size fastcgi_buffers fastcgi_busy_buffers_size fastcgi_cache fastcgi_cache_key fastcgi_cache_methods fastcgi_cache_min_uses fastcgi_cache_path fastcgi_cache_use_stale fastcgi_cache_valid fastcgi_catch_stderr fastcgi_connect_timeout fastcgi_hide_header fastcgi_ignore_client_abort fastcgi_ignore_headers fastcgi_index fastcgi_intercept_errors fastcgi_max_temp_file_size fastcgi_next_upstream fastcgi_param fastcgi_pass_header fastcgi_pass_request_body fastcgi_pass_request_headers fastcgi_read_timeout fastcgi_send_lowat fastcgi_send_timeout fastcgi_split_path_info fastcgi_store fastcgi_store_access fastcgi_temp_file_write_size fastcgi_temp_path fastcgi_upstream_fail_timeout fastcgi_upstream_max_fails flv geoip_city geoip_country google_perftools_profiles gzip gzip_buffers gzip_comp_level gzip_disable gzip_hash gzip_http_version gzip_min_length gzip_no_buffer gzip_proxied gzip_static gzip_types gzip_vary gzip_window if_modified_since ignore_invalid_headers image_filter image_filter_buffer image_filter_jpeg_quality image_filter_transparency imap_auth imap_capabilities imap_client_buffer index ip_hash keepalive_requests keepalive_timeout kqueue_changes kqueue_events large_client_header_buffers limit_conn limit_conn_log_level limit_rate limit_rate_after limit_req limit_req_log_level limit_req_zone limit_zone lingering_time lingering_timeout lock_file log_format log_not_found log_subrequest map_hash_bucket_size map_hash_max_size master_process memcached_bind memcached_buffer_size memcached_connect_timeout memcached_next_upstream memcached_read_timeout memcached_send_timeout memcached_upstream_fail_timeout memcached_upstream_max_fails merge_slashes min_delete_depth modern_browser modern_browser_value msie_padding msie_refresh multi_accept open_file_cache open_file_cache_errors open_file_cache_events open_file_cache_min_uses open_file_cache_valid open_log_file_cache output_buffers override_charset perl perl_modules perl_require perl_set pid pop3_auth pop3_capabilities port_in_redirect postpone_gzipping postpone_output protocol proxy proxy_bind proxy_buffer proxy_buffer_size proxy_buffering proxy_buffers proxy_busy_buffers_size proxy_cache proxy_cache_key proxy_cache_methods proxy_cache_min_uses proxy_cache_path proxy_cache_use_stale proxy_cache_valid proxy_connect_timeout proxy_headers_hash_bucket_size proxy_headers_hash_max_size proxy_hide_header proxy_ignore_client_abort proxy_ignore_headers proxy_intercept_errors proxy_max_temp_file_size proxy_method proxy_next_upstream proxy_pass_error_message proxy_pass_header proxy_pass_request_body proxy_pass_request_headers proxy_read_timeout proxy_redirect proxy_send_lowat proxy_send_timeout proxy_set_body proxy_set_header proxy_ssl_session_reuse proxy_store proxy_store_access proxy_temp_file_write_size proxy_temp_path proxy_timeout proxy_upstream_fail_timeout proxy_upstream_max_fails random_index read_ahead real_ip_header recursive_error_pages request_pool_size reset_timedout_connection resolver resolver_timeout rewrite_log rtsig_overflow_events rtsig_overflow_test rtsig_overflow_threshold rtsig_signo satisfy secure_link_secret send_lowat send_timeout sendfile sendfile_max_chunk server_name_in_redirect server_names_hash_bucket_size server_names_hash_max_size server_tokens set_real_ip_from smtp_auth smtp_capabilities smtp_client_buffer smtp_greeting_delay so_keepalive source_charset ssi ssi_ignore_recycled_buffers ssi_min_file_chunk ssi_silent_errors ssi_types ssi_value_length ssl ssl_certificate ssl_certificate_key ssl_ciphers ssl_client_certificate ssl_crl ssl_dhparam ssl_engine ssl_prefer_server_ciphers ssl_protocols ssl_session_cache ssl_session_timeout ssl_verify_client ssl_verify_depth starttls stub_status sub_filter sub_filter_once sub_filter_types tcp_nodelay tcp_nopush thread_stack_size timeout timer_resolution types_hash_bucket_size types_hash_max_size underscores_in_headers uninitialized_variable_warn use user userid userid_domain userid_expires userid_mark userid_name userid_p3p userid_path userid_service valid_referers variables_hash_bucket_size variables_hash_max_size worker_connections worker_cpu_affinity worker_priority worker_processes worker_rlimit_core worker_rlimit_nofile worker_rlimit_sigpending worker_threads working_directory xclient xml_entities xslt_stylesheet xslt_typesdrew@li229-23\"\n);\n\nvar keywords_block = words(\n  /* ngxDirectiveBlock */ \"http mail events server types location upstream charset_map limit_except if geo map\"\n);\n\nvar keywords_important = words(\n  /* ngxDirectiveImportant */ \"include root server server_name listen internal proxy_pass memcached_pass fastcgi_pass try_files\"\n);\n\nvar type;\nfunction ret(style, tp) {type = tp; return style;}\n\nfunction tokenBase(stream, state) {\n\n\n  stream.eatWhile(/[\\w\\$_]/);\n\n  var cur = stream.current();\n\n\n  if (keywords.propertyIsEnumerable(cur)) {\n    return \"keyword\";\n  }\n  else if (keywords_block.propertyIsEnumerable(cur)) {\n    return \"controlKeyword\";\n  }\n  else if (keywords_important.propertyIsEnumerable(cur)) {\n    return \"controlKeyword\";\n  }\n  /**/\n\n  var ch = stream.next();\n  if (ch == \"@\") {stream.eatWhile(/[\\w\\\\\\-]/); return ret(\"meta\", stream.current());}\n  else if (ch == \"/\" && stream.eat(\"*\")) {\n    state.tokenize = tokenCComment;\n    return tokenCComment(stream, state);\n  }\n  else if (ch == \"<\" && stream.eat(\"!\")) {\n    state.tokenize = tokenSGMLComment;\n    return tokenSGMLComment(stream, state);\n  }\n  else if (ch == \"=\") ret(null, \"compare\");\n  else if ((ch == \"~\" || ch == \"|\") && stream.eat(\"=\")) return ret(null, \"compare\");\n  else if (ch == \"\\\"\" || ch == \"'\") {\n    state.tokenize = tokenString(ch);\n    return state.tokenize(stream, state);\n  }\n  else if (ch == \"#\") {\n    stream.skipToEnd();\n    return ret(\"comment\", \"comment\");\n  }\n  else if (ch == \"!\") {\n    stream.match(/^\\s*\\w*/);\n    return ret(\"keyword\", \"important\");\n  }\n  else if (/\\d/.test(ch)) {\n    stream.eatWhile(/[\\w.%]/);\n    return ret(\"number\", \"unit\");\n  }\n  else if (/[,.+>*\\/]/.test(ch)) {\n    return ret(null, \"select-op\");\n  }\n  else if (/[;{}:\\[\\]]/.test(ch)) {\n    return ret(null, ch);\n  }\n  else {\n    stream.eatWhile(/[\\w\\\\\\-]/);\n    return ret(\"variable\", \"variable\");\n  }\n}\n\nfunction tokenCComment(stream, state) {\n  var maybeEnd = false, ch;\n  while ((ch = stream.next()) != null) {\n    if (maybeEnd && ch == \"/\") {\n      state.tokenize = tokenBase;\n      break;\n    }\n    maybeEnd = (ch == \"*\");\n  }\n  return ret(\"comment\", \"comment\");\n}\n\nfunction tokenSGMLComment(stream, state) {\n  var dashes = 0, ch;\n  while ((ch = stream.next()) != null) {\n    if (dashes >= 2 && ch == \">\") {\n      state.tokenize = tokenBase;\n      break;\n    }\n    dashes = (ch == \"-\") ? dashes + 1 : 0;\n  }\n  return ret(\"comment\", \"comment\");\n}\n\nfunction tokenString(quote) {\n  return function(stream, state) {\n    var escaped = false, ch;\n    while ((ch = stream.next()) != null) {\n      if (ch == quote && !escaped)\n        break;\n      escaped = !escaped && ch == \"\\\\\";\n    }\n    if (!escaped) state.tokenize = tokenBase;\n    return ret(\"string\", \"string\");\n  };\n}\n\nexport const nginx = {\n  name: \"nginx\",\n  startState: function() {\n    return {tokenize: tokenBase,\n            baseIndent: 0,\n            stack: []};\n  },\n\n  token: function(stream, state) {\n    if (stream.eatSpace()) return null;\n    type = null;\n    var style = state.tokenize(stream, state);\n\n    var context = state.stack[state.stack.length-1];\n    if (type == \"hash\" && context == \"rule\") style = \"atom\";\n    else if (style == \"variable\") {\n      if (context == \"rule\") style = \"number\";\n      else if (!context || context == \"@media{\") style = \"tag\";\n    }\n\n    if (context == \"rule\" && /^[\\{\\};]$/.test(type))\n      state.stack.pop();\n    if (type == \"{\") {\n      if (context == \"@media\") state.stack[state.stack.length-1] = \"@media{\";\n      else state.stack.push(\"{\");\n    }\n    else if (type == \"}\") state.stack.pop();\n    else if (type == \"@media\") state.stack.push(\"@media\");\n    else if (context == \"{\" && type != \"comment\") state.stack.push(\"rule\");\n    return style;\n  },\n\n  indent: function(state, textAfter, cx) {\n    var n = state.stack.length;\n    if (/^\\}/.test(textAfter))\n      n -= state.stack[state.stack.length-1] == \"rule\" ? 2 : 1;\n    return state.baseIndent + n * cx.unit;\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*\\}$/\n  }\n};\n","import {simpleMode} from \"./simple-mode.js\"\nexport const nsis = simpleMode({\n  start:[\n    // Numbers\n    {regex: /(?:[+-]?)(?:0x[\\d,a-f]+)|(?:0o[0-7]+)|(?:0b[0,1]+)|(?:\\d+.?\\d*)/, token: \"number\"},\n\n    // Strings\n    { regex: /\"(?:[^\\\\\"]|\\\\.)*\"?/, token: \"string\" },\n    { regex: /'(?:[^\\\\']|\\\\.)*'?/, token: \"string\" },\n    { regex: /`(?:[^\\\\`]|\\\\.)*`?/, token: \"string\" },\n\n    // Compile Time Commands\n    {regex: /^\\s*(?:\\!(addincludedir|addplugindir|appendfile|assert|cd|define|delfile|echo|error|execute|finalize|getdllversion|gettlbversion|include|insertmacro|macro|macroend|makensis|packhdr|pragma|searchparse|searchreplace|system|tempfile|undef|uninstfinalize|verbose|warning))\\b/i, token: \"keyword\"},\n\n    // Conditional Compilation\n    {regex: /^\\s*(?:\\!(if(?:n?def)?|ifmacron?def|macro))\\b/i, token: \"keyword\", indent: true},\n    {regex: /^\\s*(?:\\!(else|endif|macroend))\\b/i, token: \"keyword\", dedent: true},\n\n    // Runtime Commands\n    {regex: /^\\s*(?:Abort|AddBrandingImage|AddSize|AllowRootDirInstall|AllowSkipFiles|AutoCloseWindow|BGFont|BGGradient|BrandingText|BringToFront|Call|CallInstDLL|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|CRCCheck|CreateDirectory|CreateFont|CreateShortCut|Delete|DeleteINISec|DeleteINIStr|DeleteRegKey|DeleteRegValue|DetailPrint|DetailsButtonText|DirText|DirVar|DirVerify|EnableWindow|EnumRegKey|EnumRegValue|Exch|Exec|ExecShell|ExecShellWait|ExecWait|ExpandEnvStrings|File|FileBufSize|FileClose|FileErrorText|FileOpen|FileRead|FileReadByte|FileReadUTF16LE|FileReadWord|FileWriteUTF16LE|FileSeek|FileWrite|FileWriteByte|FileWriteWord|FindClose|FindFirst|FindNext|FindWindow|FlushINI|GetCurInstType|GetCurrentAddress|GetDlgItem|GetDLLVersion|GetDLLVersionLocal|GetErrorLevel|GetFileTime|GetFileTimeLocal|GetFullPathName|GetFunctionAddress|GetInstDirError|GetKnownFolderPath|GetLabelAddress|GetTempFileName|GetWinVer|Goto|HideWindow|Icon|IfAbort|IfErrors|IfFileExists|IfRebootFlag|IfRtlLanguage|IfShellVarContextAll|IfSilent|InitPluginsDir|InstallButtonText|InstallColors|InstallDir|InstallDirRegKey|InstProgressFlags|InstType|InstTypeGetText|InstTypeSetText|Int64Cmp|Int64CmpU|Int64Fmt|IntCmp|IntCmpU|IntFmt|IntOp|IntPtrCmp|IntPtrCmpU|IntPtrOp|IsWindow|LangString|LicenseBkColor|LicenseData|LicenseForceSelection|LicenseLangString|LicenseText|LoadAndSetImage|LoadLanguageFile|LockWindow|LogSet|LogText|ManifestDPIAware|ManifestLongPathAware|ManifestMaxVersionTested|ManifestSupportedOS|MessageBox|MiscButtonText|Name|Nop|OutFile|Page|PageCallbacks|PEAddResource|PEDllCharacteristics|PERemoveResource|PESubsysVer|Pop|Push|Quit|ReadEnvStr|ReadINIStr|ReadRegDWORD|ReadRegStr|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|RMDir|SearchPath|SectionGetFlags|SectionGetInstTypes|SectionGetSize|SectionGetText|SectionIn|SectionSetFlags|SectionSetInstTypes|SectionSetSize|SectionSetText|SendMessage|SetAutoClose|SetBrandingImage|SetCompress|SetCompressor|SetCompressorDictSize|SetCtlColors|SetCurInstType|SetDatablockOptimize|SetDateSave|SetDetailsPrint|SetDetailsView|SetErrorLevel|SetErrors|SetFileAttributes|SetFont|SetOutPath|SetOverwrite|SetRebootFlag|SetRegView|SetShellVarContext|SetSilent|ShowInstDetails|ShowUninstDetails|ShowWindow|SilentInstall|SilentUnInstall|Sleep|SpaceTexts|StrCmp|StrCmpS|StrCpy|StrLen|SubCaption|Target|Unicode|UninstallButtonText|UninstallCaption|UninstallIcon|UninstallSubCaption|UninstallText|UninstPage|UnRegDLL|Var|VIAddVersionKey|VIFileVersion|VIProductVersion|WindowIcon|WriteINIStr|WriteRegBin|WriteRegDWORD|WriteRegExpandStr|WriteRegMultiStr|WriteRegNone|WriteRegStr|WriteUninstaller|XPStyle)\\b/i, token: \"keyword\"},\n    {regex: /^\\s*(?:Function|PageEx|Section(?:Group)?)\\b/i, token: \"keyword\", indent: true},\n    {regex: /^\\s*(?:(Function|PageEx|Section(?:Group)?)End)\\b/i, token: \"keyword\", dedent: true},\n\n    // Command Options\n    {regex: /\\b(?:ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HIDDEN|HKCC|HKCR(32|64)?|HKCU(32|64)?|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM(32|64)?|HKPD|HKU|IDABORT|IDCANCEL|IDD_DIR|IDD_INST|IDD_INSTFILES|IDD_LICENSE|IDD_SELCOM|IDD_UNINST|IDD_VERIFY|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|MB_YESNOCANCEL|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SW_HIDE|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWNORMAL|SYSTEM|TEMPORARY)\\b/i, token: \"atom\"},\n    {regex: /\\b(?:admin|all|amd64-unicode|auto|both|bottom|bzip2|components|current|custom|directory|false|force|hide|highest|ifdiff|ifnewer|instfiles|lastused|leave|left|license|listonly|lzma|nevershow|none|normal|notset|off|on|right|show|silent|silentlog|textonly|top|true|try|un\\.components|un\\.custom|un\\.directory|un\\.instfiles|un\\.license|uninstConfirm|user|Win10|Win7|Win8|WinVista|x-86-(ansi|unicode)|zlib)\\b/i, token: \"builtin\"},\n\n    // LogicLib.nsh\n    {regex: /\\$\\{(?:And(?:If(?:Not)?|Unless)|Break|Case(?:2|3|4|5|Else)?|Continue|Default|Do(?:Until|While)?|Else(?:If(?:Not)?|Unless)?|End(?:If|Select|Switch)|Exit(?:Do|For|While)|For(?:Each)?|If(?:Cmd|Not(?:Then)?|Then)?|Loop(?:Until|While)?|Or(?:If(?:Not)?|Unless)|Select|Switch|Unless|While)\\}/i, token: \"variable-2\", indent: true},\n\n    // FileFunc.nsh\n    {regex: /\\$\\{(?:BannerTrimPath|DirState|DriveSpace|Get(BaseName|Drives|ExeName|ExePath|FileAttributes|FileExt|FileName|FileVersion|Options|OptionsS|Parameters|Parent|Root|Size|Time)|Locate|RefreshShellIcons)\\}/i, token: \"variable-2\", dedent: true},\n\n    // Memento.nsh\n    {regex: /\\$\\{(?:Memento(?:Section(?:Done|End|Restore|Save)?|UnselectedSection))\\}/i, token: \"variable-2\", dedent: true},\n\n    // TextFunc.nsh\n    {regex: /\\$\\{(?:Config(?:Read|ReadS|Write|WriteS)|File(?:Join|ReadFromEnd|Recode)|Line(?:Find|Read|Sum)|Text(?:Compare|CompareS)|TrimNewLines)\\}/i, token: \"variable-2\", dedent: true},\n\n    // WinVer.nsh\n    {regex: /\\$\\{(?:(?:At(?:Least|Most)|Is)(?:ServicePack|Win(?:7|8|10|95|98|200(?:0|3|8(?:R2)?)|ME|NT4|Vista|XP))|Is(?:NT|Server))\\}/i, token: \"variable\", dedent: true},\n\n    // WordFunc.nsh\n    {regex: /\\$\\{(?:StrFilterS?|Version(?:Compare|Convert)|Word(?:AddS?|Find(?:(?:2|3)X)?S?|InsertS?|ReplaceS?))\\}/i, token: \"keyword\", dedent: true},\n\n    // x64.nsh\n    {regex: /\\$\\{(?:RunningX64)\\}/i, token: \"variable\", dedent: true},\n    {regex: /\\$\\{(?:Disable|Enable)X64FSRedirection\\}/i, token: \"keyword\", dedent: true},\n\n    // Line Comment\n    {regex: /(#|;).*/, token: \"comment\"},\n\n    // Block Comment\n    {regex: /\\/\\*/, token: \"comment\", next: \"comment\"},\n\n    // Operator\n    {regex: /[-+\\/*=<>!]+/, token: \"operator\"},\n\n    // Variable\n    {regex: /\\$\\w[\\w\\.]*/, token: \"variable\"},\n\n    // Constant\n    {regex: /\\${[\\!\\w\\.:-]+}/, token: \"variableName.constant\"},\n\n    // Language String\n    {regex: /\\$\\([\\!\\w\\.:-]+\\)/, token: \"atom\"}\n  ],\n  comment: [\n    {regex: /.*?\\*\\//, token: \"comment\", next: \"start\"},\n    {regex: /.*/, token: \"comment\"}\n  ],\n  languageData: {\n    name: \"nsis\",\n    indentOnInput: /^\\s*((Function|PageEx|Section|Section(Group)?)End|(\\!(endif|macroend))|\\$\\{(End(If|Unless|While)|Loop(Until)|Next)\\})$/i,\n    commentTokens: {line: \"#\", block: {open: \"/*\", close: \"*/\"}}\n  }\n});\n\n","var Location = {\n  PRE_SUBJECT         : 0,\n  WRITING_SUB_URI     : 1,\n  WRITING_BNODE_URI   : 2,\n  PRE_PRED            : 3,\n  WRITING_PRED_URI    : 4,\n  PRE_OBJ             : 5,\n  WRITING_OBJ_URI     : 6,\n  WRITING_OBJ_BNODE   : 7,\n  WRITING_OBJ_LITERAL : 8,\n  WRITING_LIT_LANG    : 9,\n  WRITING_LIT_TYPE    : 10,\n  POST_OBJ            : 11,\n  ERROR               : 12\n};\nfunction transitState(currState, c) {\n  var currLocation = currState.location;\n  var ret;\n\n  // Opening.\n  if     (currLocation == Location.PRE_SUBJECT && c == '<') ret = Location.WRITING_SUB_URI;\n  else if(currLocation == Location.PRE_SUBJECT && c == '_') ret = Location.WRITING_BNODE_URI;\n  else if(currLocation == Location.PRE_PRED    && c == '<') ret = Location.WRITING_PRED_URI;\n  else if(currLocation == Location.PRE_OBJ     && c == '<') ret = Location.WRITING_OBJ_URI;\n  else if(currLocation == Location.PRE_OBJ     && c == '_') ret = Location.WRITING_OBJ_BNODE;\n  else if(currLocation == Location.PRE_OBJ     && c == '\"') ret = Location.WRITING_OBJ_LITERAL;\n\n  // Closing.\n  else if(currLocation == Location.WRITING_SUB_URI     && c == '>') ret = Location.PRE_PRED;\n  else if(currLocation == Location.WRITING_BNODE_URI   && c == ' ') ret = Location.PRE_PRED;\n  else if(currLocation == Location.WRITING_PRED_URI    && c == '>') ret = Location.PRE_OBJ;\n  else if(currLocation == Location.WRITING_OBJ_URI     && c == '>') ret = Location.POST_OBJ;\n  else if(currLocation == Location.WRITING_OBJ_BNODE   && c == ' ') ret = Location.POST_OBJ;\n  else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '\"') ret = Location.POST_OBJ;\n  else if(currLocation == Location.WRITING_LIT_LANG && c == ' ') ret = Location.POST_OBJ;\n  else if(currLocation == Location.WRITING_LIT_TYPE && c == '>') ret = Location.POST_OBJ;\n\n  // Closing typed and language literal.\n  else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '@') ret = Location.WRITING_LIT_LANG;\n  else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '^') ret = Location.WRITING_LIT_TYPE;\n\n  // Spaces.\n  else if( c == ' ' &&\n           (\n             currLocation == Location.PRE_SUBJECT ||\n               currLocation == Location.PRE_PRED    ||\n               currLocation == Location.PRE_OBJ     ||\n               currLocation == Location.POST_OBJ\n           )\n         ) ret = currLocation;\n\n  // Reset.\n  else if(currLocation == Location.POST_OBJ && c == '.') ret = Location.PRE_SUBJECT;\n\n  // Error\n  else ret = Location.ERROR;\n\n  currState.location=ret;\n}\n\nexport const ntriples = {\n  name: \"ntriples\",\n  startState: function() {\n    return {\n      location : Location.PRE_SUBJECT,\n      uris     : [],\n      anchors  : [],\n      bnodes   : [],\n      langs    : [],\n      types    : []\n    };\n  },\n  token: function(stream, state) {\n    var ch = stream.next();\n    if(ch == '<') {\n      transitState(state, ch);\n      var parsedURI = '';\n      stream.eatWhile( function(c) { if( c != '#' && c != '>' ) { parsedURI += c; return true; } return false;} );\n      state.uris.push(parsedURI);\n      if( stream.match('#', false) ) return 'variable';\n      stream.next();\n      transitState(state, '>');\n      return 'variable';\n    }\n    if(ch == '#') {\n      var parsedAnchor = '';\n      stream.eatWhile(function(c) { if(c != '>' && c != ' ') { parsedAnchor+= c; return true; } return false;});\n      state.anchors.push(parsedAnchor);\n      return 'url';\n    }\n    if(ch == '>') {\n      transitState(state, '>');\n      return 'variable';\n    }\n    if(ch == '_') {\n      transitState(state, ch);\n      var parsedBNode = '';\n      stream.eatWhile(function(c) { if( c != ' ' ) { parsedBNode += c; return true; } return false;});\n      state.bnodes.push(parsedBNode);\n      stream.next();\n      transitState(state, ' ');\n      return 'builtin';\n    }\n    if(ch == '\"') {\n      transitState(state, ch);\n      stream.eatWhile( function(c) { return c != '\"'; } );\n      stream.next();\n      if( stream.peek() != '@' && stream.peek() != '^' ) {\n        transitState(state, '\"');\n      }\n      return 'string';\n    }\n    if( ch == '@' ) {\n      transitState(state, '@');\n      var parsedLang = '';\n      stream.eatWhile(function(c) { if( c != ' ' ) { parsedLang += c; return true; } return false;});\n      state.langs.push(parsedLang);\n      stream.next();\n      transitState(state, ' ');\n      return 'string.special';\n    }\n    if( ch == '^' ) {\n      stream.next();\n      transitState(state, '^');\n      var parsedType = '';\n      stream.eatWhile(function(c) { if( c != '>' ) { parsedType += c; return true; } return false;} );\n      state.types.push(parsedType);\n      stream.next();\n      transitState(state, '>');\n      return 'variable';\n    }\n    if( ch == ' ' ) {\n      transitState(state, ch);\n    }\n    if( ch == '.' ) {\n      transitState(state, ch);\n    }\n  }\n};\n","function wordRegexp(words) {\n  return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\");\n}\n\nvar singleOperators = new RegExp(\"^[\\\\+\\\\-\\\\*/&|\\\\^~<>!@'\\\\\\\\]\");\nvar singleDelimiters = new RegExp('^[\\\\(\\\\[\\\\{\\\\},:=;\\\\.]');\nvar doubleOperators = new RegExp(\"^((==)|(~=)|(<=)|(>=)|(<<)|(>>)|(\\\\.[\\\\+\\\\-\\\\*/\\\\^\\\\\\\\]))\");\nvar doubleDelimiters = new RegExp(\"^((!=)|(\\\\+=)|(\\\\-=)|(\\\\*=)|(/=)|(&=)|(\\\\|=)|(\\\\^=))\");\nvar tripleDelimiters = new RegExp(\"^((>>=)|(<<=))\");\nvar expressionEnd = new RegExp(\"^[\\\\]\\\\)]\");\nvar identifiers = new RegExp(\"^[_A-Za-z\\xa1-\\uffff][_A-Za-z0-9\\xa1-\\uffff]*\");\n\nvar builtins = wordRegexp([\n  'error', 'eval', 'function', 'abs', 'acos', 'atan', 'asin', 'cos',\n  'cosh', 'exp', 'log', 'prod', 'sum', 'log10', 'max', 'min', 'sign', 'sin', 'sinh',\n  'sqrt', 'tan', 'reshape', 'break', 'zeros', 'default', 'margin', 'round', 'ones',\n  'rand', 'syn', 'ceil', 'floor', 'size', 'clear', 'zeros', 'eye', 'mean', 'std', 'cov',\n  'det', 'eig', 'inv', 'norm', 'rank', 'trace', 'expm', 'logm', 'sqrtm', 'linspace', 'plot',\n  'title', 'xlabel', 'ylabel', 'legend', 'text', 'grid', 'meshgrid', 'mesh', 'num2str',\n  'fft', 'ifft', 'arrayfun', 'cellfun', 'input', 'fliplr', 'flipud', 'ismember'\n]);\n\nvar keywords = wordRegexp([\n  'return', 'case', 'switch', 'else', 'elseif', 'end', 'endif', 'endfunction',\n  'if', 'otherwise', 'do', 'for', 'while', 'try', 'catch', 'classdef', 'properties', 'events',\n  'methods', 'global', 'persistent', 'endfor', 'endwhile', 'printf', 'sprintf', 'disp', 'until',\n  'continue', 'pkg'\n]);\n\n\n// tokenizers\nfunction tokenTranspose(stream, state) {\n  if (!stream.sol() && stream.peek() === '\\'') {\n    stream.next();\n    state.tokenize = tokenBase;\n    return 'operator';\n  }\n  state.tokenize = tokenBase;\n  return tokenBase(stream, state);\n}\n\n\nfunction tokenComment(stream, state) {\n  if (stream.match(/^.*%}/)) {\n    state.tokenize = tokenBase;\n    return 'comment';\n  };\n  stream.skipToEnd();\n  return 'comment';\n}\n\nfunction tokenBase(stream, state) {\n  // whitespaces\n  if (stream.eatSpace()) return null;\n\n  // Handle one line Comments\n  if (stream.match('%{')){\n    state.tokenize = tokenComment;\n    stream.skipToEnd();\n    return 'comment';\n  }\n\n  if (stream.match(/^[%#]/)){\n    stream.skipToEnd();\n    return 'comment';\n  }\n\n  // Handle Number Literals\n  if (stream.match(/^[0-9\\.+-]/, false)) {\n    if (stream.match(/^[+-]?0x[0-9a-fA-F]+[ij]?/)) {\n      stream.tokenize = tokenBase;\n      return 'number'; };\n    if (stream.match(/^[+-]?\\d*\\.\\d+([EeDd][+-]?\\d+)?[ij]?/)) { return 'number'; };\n    if (stream.match(/^[+-]?\\d+([EeDd][+-]?\\d+)?[ij]?/)) { return 'number'; };\n  }\n  if (stream.match(wordRegexp(['nan','NaN','inf','Inf']))) { return 'number'; };\n\n  // Handle Strings\n  var m = stream.match(/^\"(?:[^\"]|\"\")*(\"|$)/) || stream.match(/^'(?:[^']|'')*('|$)/)\n  if (m) { return m[1] ? 'string' : \"error\"; }\n\n  // Handle words\n  if (stream.match(keywords)) { return 'keyword'; } ;\n  if (stream.match(builtins)) { return 'builtin'; } ;\n  if (stream.match(identifiers)) { return 'variable'; } ;\n\n  if (stream.match(singleOperators) || stream.match(doubleOperators)) { return 'operator'; };\n  if (stream.match(singleDelimiters) || stream.match(doubleDelimiters) || stream.match(tripleDelimiters)) { return null; };\n\n  if (stream.match(expressionEnd)) {\n    state.tokenize = tokenTranspose;\n    return null;\n  };\n\n\n  // Handle non-detected items\n  stream.next();\n  return 'error';\n};\n\n\nexport const octave = {\n  name: \"octave\",\n\n  startState: function() {\n    return {\n      tokenize: tokenBase\n    };\n  },\n\n  token: function(stream, state) {\n    var style = state.tokenize(stream, state);\n    if (style === 'number' || style === 'variable'){\n      state.tokenize = tokenTranspose;\n    }\n    return style;\n  },\n\n  languageData: {\n    commentTokens: {line: \"%\"}\n  }\n};\n\n","function wordRegexp(words) {\n  return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\");\n}\n\nvar singleOperators = /[\\^@!\\|<>#~\\.\\*\\-\\+\\\\/,=]/;\nvar doubleOperators = /(<-)|(:=)|(=<)|(>=)|(<=)|(<:)|(>:)|(=:)|(\\\\=)|(\\\\=:)|(!!)|(==)|(::)/;\nvar tripleOperators = /(:::)|(\\.\\.\\.)|(=<:)|(>=:)/;\n\nvar middle = [\"in\", \"then\", \"else\", \"of\", \"elseof\", \"elsecase\", \"elseif\", \"catch\",\n              \"finally\", \"with\", \"require\", \"prepare\", \"import\", \"export\", \"define\", \"do\"];\nvar end = [\"end\"];\n\nvar atoms = wordRegexp([\"true\", \"false\", \"nil\", \"unit\"]);\nvar commonKeywords = wordRegexp([\"andthen\", \"at\", \"attr\", \"declare\", \"feat\", \"from\", \"lex\",\n                                 \"mod\", \"div\", \"mode\", \"orelse\", \"parser\", \"prod\", \"prop\", \"scanner\", \"self\", \"syn\", \"token\"]);\nvar openingKeywords = wordRegexp([\"local\", \"proc\", \"fun\", \"case\", \"class\", \"if\", \"cond\", \"or\", \"dis\",\n                                  \"choice\", \"not\", \"thread\", \"try\", \"raise\", \"lock\", \"for\", \"suchthat\", \"meth\", \"functor\"]);\nvar middleKeywords = wordRegexp(middle);\nvar endKeywords = wordRegexp(end);\n\n// Tokenizers\nfunction tokenBase(stream, state) {\n  if (stream.eatSpace()) {\n    return null;\n  }\n\n  // Brackets\n  if(stream.match(/[{}]/)) {\n    return \"bracket\";\n  }\n\n  // Special [] keyword\n  if (stream.match('[]')) {\n    return \"keyword\"\n  }\n\n  // Operators\n  if (stream.match(tripleOperators) || stream.match(doubleOperators)) {\n    return \"operator\";\n  }\n\n  // Atoms\n  if(stream.match(atoms)) {\n    return 'atom';\n  }\n\n  // Opening keywords\n  var matched = stream.match(openingKeywords);\n  if (matched) {\n    if (!state.doInCurrentLine)\n      state.currentIndent++;\n    else\n      state.doInCurrentLine = false;\n\n    // Special matching for signatures\n    if(matched[0] == \"proc\" || matched[0] == \"fun\")\n      state.tokenize = tokenFunProc;\n    else if(matched[0] == \"class\")\n      state.tokenize = tokenClass;\n    else if(matched[0] == \"meth\")\n      state.tokenize = tokenMeth;\n\n    return 'keyword';\n  }\n\n  // Middle and other keywords\n  if (stream.match(middleKeywords) || stream.match(commonKeywords)) {\n    return \"keyword\"\n  }\n\n  // End keywords\n  if (stream.match(endKeywords)) {\n    state.currentIndent--;\n    return 'keyword';\n  }\n\n  // Eat the next char for next comparisons\n  var ch = stream.next();\n\n  // Strings\n  if (ch == '\"' || ch == \"'\") {\n    state.tokenize = tokenString(ch);\n    return state.tokenize(stream, state);\n  }\n\n  // Numbers\n  if (/[~\\d]/.test(ch)) {\n    if (ch == \"~\") {\n      if(! /^[0-9]/.test(stream.peek()))\n        return null;\n      else if (( stream.next() == \"0\" && stream.match(/^[xX][0-9a-fA-F]+/)) || stream.match(/^[0-9]*(\\.[0-9]+)?([eE][~+]?[0-9]+)?/))\n        return \"number\";\n    }\n\n    if ((ch == \"0\" && stream.match(/^[xX][0-9a-fA-F]+/)) || stream.match(/^[0-9]*(\\.[0-9]+)?([eE][~+]?[0-9]+)?/))\n      return \"number\";\n\n    return null;\n  }\n\n  // Comments\n  if (ch == \"%\") {\n    stream.skipToEnd();\n    return 'comment';\n  }\n  else if (ch == \"/\") {\n    if (stream.eat(\"*\")) {\n      state.tokenize = tokenComment;\n      return tokenComment(stream, state);\n    }\n  }\n\n  // Single operators\n  if(singleOperators.test(ch)) {\n    return \"operator\";\n  }\n\n  // If nothing match, we skip the entire alphanumerical block\n  stream.eatWhile(/\\w/);\n\n  return \"variable\";\n}\n\nfunction tokenClass(stream, state) {\n  if (stream.eatSpace()) {\n    return null;\n  }\n  stream.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)/);\n  state.tokenize = tokenBase;\n  return \"type\"\n}\n\nfunction tokenMeth(stream, state) {\n  if (stream.eatSpace()) {\n    return null;\n  }\n  stream.match(/([a-zA-Z][A-Za-z0-9_]*)|(`.+`)/);\n  state.tokenize = tokenBase;\n  return \"def\"\n}\n\nfunction tokenFunProc(stream, state) {\n  if (stream.eatSpace()) {\n    return null;\n  }\n\n  if(!state.hasPassedFirstStage && stream.eat(\"{\")) {\n    state.hasPassedFirstStage = true;\n    return \"bracket\";\n  }\n  else if(state.hasPassedFirstStage) {\n    stream.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)|\\$/);\n    state.hasPassedFirstStage = false;\n    state.tokenize = tokenBase;\n    return \"def\"\n  }\n  else {\n    state.tokenize = tokenBase;\n    return null;\n  }\n}\n\nfunction tokenComment(stream, state) {\n  var maybeEnd = false, ch;\n  while (ch = stream.next()) {\n    if (ch == \"/\" && maybeEnd) {\n      state.tokenize = tokenBase;\n      break;\n    }\n    maybeEnd = (ch == \"*\");\n  }\n  return \"comment\";\n}\n\nfunction tokenString(quote) {\n  return function (stream, state) {\n    var escaped = false, next, end = false;\n    while ((next = stream.next()) != null) {\n      if (next == quote && !escaped) {\n        end = true;\n        break;\n      }\n      escaped = !escaped && next == \"\\\\\";\n    }\n    if (end || !escaped)\n      state.tokenize = tokenBase;\n    return \"string\";\n  };\n}\n\nfunction buildElectricInputRegEx() {\n  // Reindentation should occur on [] or on a match of any of\n  // the block closing keywords, at the end of a line.\n  var allClosings = middle.concat(end);\n  return new RegExp(\"[\\\\[\\\\]]|(\" + allClosings.join(\"|\") + \")$\");\n}\n\nexport const oz = {\n  name: \"oz\",\n\n  startState: function () {\n    return {\n      tokenize: tokenBase,\n      currentIndent: 0,\n      doInCurrentLine: false,\n      hasPassedFirstStage: false\n    };\n  },\n\n  token: function (stream, state) {\n    if (stream.sol())\n      state.doInCurrentLine = 0;\n\n    return state.tokenize(stream, state);\n  },\n\n  indent: function (state, textAfter, cx) {\n    var trueText = textAfter.replace(/^\\s+|\\s+$/g, '');\n\n    if (trueText.match(endKeywords) || trueText.match(middleKeywords) || trueText.match(/(\\[])/))\n      return cx.unit * (state.currentIndent - 1);\n\n    if (state.currentIndent < 0)\n      return 0;\n\n    return state.currentIndent * cx.unit\n  },\n\n  languageData: {\n    indentOnInut: buildElectricInputRegEx(),\n    commentTokens: {line: \"%\", block: {open: \"/*\", close: \"*/\"}}\n  }\n};\n","function words(str) {\n  var obj = {}, words = str.split(\" \");\n  for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n  return obj;\n}\nvar keywords = words(\n  \"absolute and array asm begin case const constructor destructor div do \" +\n    \"downto else end file for function goto if implementation in inherited \" +\n    \"inline interface label mod nil not object of operator or packed procedure \" +\n    \"program record reintroduce repeat self set shl shr string then to type \" +\n    \"unit until uses var while with xor as class dispinterface except exports \" +\n    \"finalization finally initialization inline is library on out packed \" +\n    \"property raise resourcestring threadvar try absolute abstract alias \" +\n    \"assembler bitpacked break cdecl continue cppdecl cvar default deprecated \" +\n    \"dynamic enumerator experimental export external far far16 forward generic \" +\n    \"helper implements index interrupt iocheck local message name near \" +\n    \"nodefault noreturn nostackframe oldfpccall otherwise overload override \" +\n    \"pascal platform private protected public published read register \" +\n    \"reintroduce result safecall saveregisters softfloat specialize static \" +\n    \"stdcall stored strict unaligned unimplemented varargs virtual write\");\nvar atoms = {\"null\": true};\n\nvar isOperatorChar = /[+\\-*&%=<>!?|\\/]/;\n\nfunction tokenBase(stream, state) {\n  var ch = stream.next();\n  if (ch == \"#\" && state.startOfLine) {\n    stream.skipToEnd();\n    return \"meta\";\n  }\n  if (ch == '\"' || ch == \"'\") {\n    state.tokenize = tokenString(ch);\n    return state.tokenize(stream, state);\n  }\n  if (ch == \"(\" && stream.eat(\"*\")) {\n    state.tokenize = tokenComment;\n    return tokenComment(stream, state);\n  }\n  if (ch == \"{\") {\n    state.tokenize = tokenCommentBraces;\n    return tokenCommentBraces(stream, state);\n  }\n  if (/[\\[\\]\\(\\),;\\:\\.]/.test(ch)) {\n    return null;\n  }\n  if (/\\d/.test(ch)) {\n    stream.eatWhile(/[\\w\\.]/);\n    return \"number\";\n  }\n  if (ch == \"/\") {\n    if (stream.eat(\"/\")) {\n      stream.skipToEnd();\n      return \"comment\";\n    }\n  }\n  if (isOperatorChar.test(ch)) {\n    stream.eatWhile(isOperatorChar);\n    return \"operator\";\n  }\n  stream.eatWhile(/[\\w\\$_]/);\n  var cur = stream.current().toLowerCase();\n  if (keywords.propertyIsEnumerable(cur)) return \"keyword\";\n  if (atoms.propertyIsEnumerable(cur)) return \"atom\";\n  return \"variable\";\n}\n\nfunction tokenString(quote) {\n  return function(stream, state) {\n    var escaped = false, next, end = false;\n    while ((next = stream.next()) != null) {\n      if (next == quote && !escaped) {end = true; break;}\n      escaped = !escaped && next == \"\\\\\";\n    }\n    if (end || !escaped) state.tokenize = null;\n    return \"string\";\n  };\n}\n\nfunction tokenComment(stream, state) {\n  var maybeEnd = false, ch;\n  while (ch = stream.next()) {\n    if (ch == \")\" && maybeEnd) {\n      state.tokenize = null;\n      break;\n    }\n    maybeEnd = (ch == \"*\");\n  }\n  return \"comment\";\n}\n\nfunction tokenCommentBraces(stream, state) {\n  var ch;\n  while (ch = stream.next()) {\n    if (ch == \"}\") {\n      state.tokenize = null;\n      break;\n    }\n  }\n  return \"comment\";\n}\n\n// Interface\n\nexport const pascal = {\n  name: \"pascal\",\n\n  startState: function() {\n    return {tokenize: null};\n  },\n\n  token: function(stream, state) {\n    if (stream.eatSpace()) return null;\n    var style = (state.tokenize || tokenBase)(stream, state);\n    if (style == \"comment\" || style == \"meta\") return style;\n    return style;\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*[{}]$/,\n    commentTokens: {block: {open: \"(*\", close: \"*)\"}}\n  }\n};\n","\n// it's like \"peek\", but need for look-ahead or look-behind if index < 0\nfunction look(stream, c){\n  return stream.string.charAt(stream.pos+(c||0));\n}\n\n// return a part of prefix of current stream from current position\nfunction prefix(stream, c){\n  if(c){\n    var x=stream.pos-c;\n    return stream.string.substr((x>=0?x:0),c);}\n  else{\n    return stream.string.substr(0,stream.pos-1);\n  }\n}\n\n// return a part of suffix of current stream from current position\nfunction suffix(stream, c){\n  var y=stream.string.length;\n  var x=y-stream.pos+1;\n  return stream.string.substr(stream.pos,(c&&c<y?c:x));\n}\n\n// eating and vomiting a part of stream from current position\nfunction eatSuffix(stream, c){\n  var x=stream.pos+c;\n  var y;\n  if(x<=0)\n    stream.pos=0;\n  else if(x>=(y=stream.string.length-1))\n    stream.pos=y;\n  else\n    stream.pos=x;\n}\n\n// http://perldoc.perl.org\nvar PERL={                                      //   null - magic touch\n  //   1 - keyword\n  //   2 - def\n  //   3 - atom\n  //   4 - operator\n  //   5 - builtin (predefined)\n  //   [x,y] - x=1,2,3; y=must be defined if x{...}\n  //      PERL operators\n  '->':   4,\n  '++':   4,\n  '--':   4,\n  '**':   4,\n  //   ! ~ \\ and unary + and -\n  '=~':   4,\n  '!~':   4,\n  '*':   4,\n  '/':   4,\n  '%':   4,\n  'x':   4,\n  '+':   4,\n  '-':   4,\n  '.':   4,\n  '<<':   4,\n  '>>':   4,\n  //   named unary operators\n  '<':   4,\n  '>':   4,\n  '<=':   4,\n  '>=':   4,\n  'lt':   4,\n  'gt':   4,\n  'le':   4,\n  'ge':   4,\n  '==':   4,\n  '!=':   4,\n  '<=>':   4,\n  'eq':   4,\n  'ne':   4,\n  'cmp':   4,\n  '~~':   4,\n  '&':   4,\n  '|':   4,\n  '^':   4,\n  '&&':   4,\n  '||':   4,\n  '//':   4,\n  '..':   4,\n  '...':   4,\n  '?':   4,\n  ':':   4,\n  '=':   4,\n  '+=':   4,\n  '-=':   4,\n  '*=':   4,  //   etc. ???\n  ',':   4,\n  '=>':   4,\n  '::':   4,\n  //   list operators (rightward)\n  'not':   4,\n  'and':   4,\n  'or':   4,\n  'xor':   4,\n  //      PERL predefined variables (I know, what this is a paranoid idea, but may be needed for people, who learn PERL, and for me as well, ...and may be for you?;)\n  'BEGIN':   [5,1],\n  'END':   [5,1],\n  'PRINT':   [5,1],\n  'PRINTF':   [5,1],\n  'GETC':   [5,1],\n  'READ':   [5,1],\n  'READLINE':   [5,1],\n  'DESTROY':   [5,1],\n  'TIE':   [5,1],\n  'TIEHANDLE':   [5,1],\n  'UNTIE':   [5,1],\n  'STDIN':    5,\n  'STDIN_TOP':    5,\n  'STDOUT':    5,\n  'STDOUT_TOP':    5,\n  'STDERR':    5,\n  'STDERR_TOP':    5,\n  '$ARG':    5,\n  '$_':    5,\n  '@ARG':    5,\n  '@_':    5,\n  '$LIST_SEPARATOR':    5,\n  '$\"':    5,\n  '$PROCESS_ID':    5,\n  '$PID':    5,\n  '$$':    5,\n  '$REAL_GROUP_ID':    5,\n  '$GID':    5,\n  '$(':    5,\n  '$EFFECTIVE_GROUP_ID':    5,\n  '$EGID':    5,\n  '$)':    5,\n  '$PROGRAM_NAME':    5,\n  '$0':    5,\n  '$SUBSCRIPT_SEPARATOR':    5,\n  '$SUBSEP':    5,\n  '$;':    5,\n  '$REAL_USER_ID':    5,\n  '$UID':    5,\n  '$<':    5,\n  '$EFFECTIVE_USER_ID':    5,\n  '$EUID':    5,\n  '$>':    5,\n  '$a':    5,\n  '$b':    5,\n  '$COMPILING':    5,\n  '$^C':    5,\n  '$DEBUGGING':    5,\n  '$^D':    5,\n  '${^ENCODING}':    5,\n  '$ENV':    5,\n  '%ENV':    5,\n  '$SYSTEM_FD_MAX':    5,\n  '$^F':    5,\n  '@F':    5,\n  '${^GLOBAL_PHASE}':    5,\n  '$^H':    5,\n  '%^H':    5,\n  '@INC':    5,\n  '%INC':    5,\n  '$INPLACE_EDIT':    5,\n  '$^I':    5,\n  '$^M':    5,\n  '$OSNAME':    5,\n  '$^O':    5,\n  '${^OPEN}':    5,\n  '$PERLDB':    5,\n  '$^P':    5,\n  '$SIG':    5,\n  '%SIG':    5,\n  '$BASETIME':    5,\n  '$^T':    5,\n  '${^TAINT}':    5,\n  '${^UNICODE}':    5,\n  '${^UTF8CACHE}':    5,\n  '${^UTF8LOCALE}':    5,\n  '$PERL_VERSION':    5,\n  '$^V':    5,\n  '${^WIN32_SLOPPY_STAT}':    5,\n  '$EXECUTABLE_NAME':    5,\n  '$^X':    5,\n  '$1':    5, // - regexp $1, $2...\n  '$MATCH':    5,\n  '$&':    5,\n  '${^MATCH}':    5,\n  '$PREMATCH':    5,\n  '$`':    5,\n  '${^PREMATCH}':    5,\n  '$POSTMATCH':    5,\n  \"$'\":    5,\n  '${^POSTMATCH}':    5,\n  '$LAST_PAREN_MATCH':    5,\n  '$+':    5,\n  '$LAST_SUBMATCH_RESULT':    5,\n  '$^N':    5,\n  '@LAST_MATCH_END':    5,\n  '@+':    5,\n  '%LAST_PAREN_MATCH':    5,\n  '%+':    5,\n  '@LAST_MATCH_START':    5,\n  '@-':    5,\n  '%LAST_MATCH_START':    5,\n  '%-':    5,\n  '$LAST_REGEXP_CODE_RESULT':    5,\n  '$^R':    5,\n  '${^RE_DEBUG_FLAGS}':    5,\n  '${^RE_TRIE_MAXBUF}':    5,\n  '$ARGV':    5,\n  '@ARGV':    5,\n  'ARGV':    5,\n  'ARGVOUT':    5,\n  '$OUTPUT_FIELD_SEPARATOR':    5,\n  '$OFS':    5,\n  '$,':    5,\n  '$INPUT_LINE_NUMBER':    5,\n  '$NR':    5,\n  '$.':    5,\n  '$INPUT_RECORD_SEPARATOR':    5,\n  '$RS':    5,\n  '$/':    5,\n  '$OUTPUT_RECORD_SEPARATOR':    5,\n  '$ORS':    5,\n  '$\\\\':    5,\n  '$OUTPUT_AUTOFLUSH':    5,\n  '$|':    5,\n  '$ACCUMULATOR':    5,\n  '$^A':    5,\n  '$FORMAT_FORMFEED':    5,\n  '$^L':    5,\n  '$FORMAT_PAGE_NUMBER':    5,\n  '$%':    5,\n  '$FORMAT_LINES_LEFT':    5,\n  '$-':    5,\n  '$FORMAT_LINE_BREAK_CHARACTERS':    5,\n  '$:':    5,\n  '$FORMAT_LINES_PER_PAGE':    5,\n  '$=':    5,\n  '$FORMAT_TOP_NAME':    5,\n  '$^':    5,\n  '$FORMAT_NAME':    5,\n  '$~':    5,\n  '${^CHILD_ERROR_NATIVE}':    5,\n  '$EXTENDED_OS_ERROR':    5,\n  '$^E':    5,\n  '$EXCEPTIONS_BEING_CAUGHT':    5,\n  '$^S':    5,\n  '$WARNING':    5,\n  '$^W':    5,\n  '${^WARNING_BITS}':    5,\n  '$OS_ERROR':    5,\n  '$ERRNO':    5,\n  '$!':    5,\n  '%OS_ERROR':    5,\n  '%ERRNO':    5,\n  '%!':    5,\n  '$CHILD_ERROR':    5,\n  '$?':    5,\n  '$EVAL_ERROR':    5,\n  '$@':    5,\n  '$OFMT':    5,\n  '$#':    5,\n  '$*':    5,\n  '$ARRAY_BASE':    5,\n  '$[':    5,\n  '$OLD_PERL_VERSION':    5,\n  '$]':    5,\n  //      PERL blocks\n  'if':[1,1],\n  elsif:[1,1],\n  'else':[1,1],\n  'while':[1,1],\n  unless:[1,1],\n  'for':[1,1],\n  foreach:[1,1],\n  //      PERL functions\n  'abs':1,     // - absolute value function\n  accept:1,     // - accept an incoming socket connect\n  alarm:1,     // - schedule a SIGALRM\n  'atan2':1,     // - arctangent of Y/X in the range -PI to PI\n  bind:1,     // - binds an address to a socket\n  binmode:1,     // - prepare binary files for I/O\n  bless:1,     // - create an object\n  bootstrap:1,     //\n  'break':1,     // - break out of a \"given\" block\n  caller:1,     // - get context of the current subroutine call\n  chdir:1,     // - change your current working directory\n  chmod:1,     // - changes the permissions on a list of files\n  chomp:1,     // - remove a trailing record separator from a string\n  chop:1,     // - remove the last character from a string\n  chown:1,     // - change the ownership on a list of files\n  chr:1,     // - get character this number represents\n  chroot:1,     // - make directory new root for path lookups\n  close:1,     // - close file (or pipe or socket) handle\n  closedir:1,     // - close directory handle\n  connect:1,     // - connect to a remote socket\n  'continue':[1,1], // - optional trailing block in a while or foreach\n  'cos':1,     // - cosine function\n  crypt:1,     // - one-way passwd-style encryption\n  dbmclose:1,     // - breaks binding on a tied dbm file\n  dbmopen:1,     // - create binding on a tied dbm file\n  'default':1,     //\n  defined:1,     // - test whether a value, variable, or function is defined\n  'delete':1,     // - deletes a value from a hash\n  die:1,     // - raise an exception or bail out\n  'do':1,     // - turn a BLOCK into a TERM\n  dump:1,     // - create an immediate core dump\n  each:1,     // - retrieve the next key/value pair from a hash\n  endgrent:1,     // - be done using group file\n  endhostent:1,     // - be done using hosts file\n  endnetent:1,     // - be done using networks file\n  endprotoent:1,     // - be done using protocols file\n  endpwent:1,     // - be done using passwd file\n  endservent:1,     // - be done using services file\n  eof:1,     // - test a filehandle for its end\n  'eval':1,     // - catch exceptions or compile and run code\n  'exec':1,     // - abandon this program to run another\n  exists:1,     // - test whether a hash key is present\n  exit:1,     // - terminate this program\n  'exp':1,     // - raise I to a power\n  fcntl:1,     // - file control system call\n  fileno:1,     // - return file descriptor from filehandle\n  flock:1,     // - lock an entire file with an advisory lock\n  fork:1,     // - create a new process just like this one\n  format:1,     // - declare a picture format with use by the write() function\n  formline:1,     // - internal function used for formats\n  getc:1,     // - get the next character from the filehandle\n  getgrent:1,     // - get next group record\n  getgrgid:1,     // - get group record given group user ID\n  getgrnam:1,     // - get group record given group name\n  gethostbyaddr:1,     // - get host record given its address\n  gethostbyname:1,     // - get host record given name\n  gethostent:1,     // - get next hosts record\n  getlogin:1,     // - return who logged in at this tty\n  getnetbyaddr:1,     // - get network record given its address\n  getnetbyname:1,     // - get networks record given name\n  getnetent:1,     // - get next networks record\n  getpeername:1,     // - find the other end of a socket connection\n  getpgrp:1,     // - get process group\n  getppid:1,     // - get parent process ID\n  getpriority:1,     // - get current nice value\n  getprotobyname:1,     // - get protocol record given name\n  getprotobynumber:1,     // - get protocol record numeric protocol\n  getprotoent:1,     // - get next protocols record\n  getpwent:1,     // - get next passwd record\n  getpwnam:1,     // - get passwd record given user login name\n  getpwuid:1,     // - get passwd record given user ID\n  getservbyname:1,     // - get services record given its name\n  getservbyport:1,     // - get services record given numeric port\n  getservent:1,     // - get next services record\n  getsockname:1,     // - retrieve the sockaddr for a given socket\n  getsockopt:1,     // - get socket options on a given socket\n  given:1,     //\n  glob:1,     // - expand filenames using wildcards\n  gmtime:1,     // - convert UNIX time into record or string using Greenwich time\n  'goto':1,     // - create spaghetti code\n  grep:1,     // - locate elements in a list test true against a given criterion\n  hex:1,     // - convert a string to a hexadecimal number\n  'import':1,     // - patch a module's namespace into your own\n  index:1,     // - find a substring within a string\n  'int':1,     // - get the integer portion of a number\n  ioctl:1,     // - system-dependent device control system call\n  'join':1,     // - join a list into a string using a separator\n  keys:1,     // - retrieve list of indices from a hash\n  kill:1,     // - send a signal to a process or process group\n  last:1,     // - exit a block prematurely\n  lc:1,     // - return lower-case version of a string\n  lcfirst:1,     // - return a string with just the next letter in lower case\n  length:1,     // - return the number of bytes in a string\n  'link':1,     // - create a hard link in the filesystem\n  listen:1,     // - register your socket as a server\n  local: 2,    // - create a temporary value for a global variable (dynamic scoping)\n  localtime:1,     // - convert UNIX time into record or string using local time\n  lock:1,     // - get a thread lock on a variable, subroutine, or method\n  'log':1,     // - retrieve the natural logarithm for a number\n  lstat:1,     // - stat a symbolic link\n  m:null,  // - match a string with a regular expression pattern\n  map:1,     // - apply a change to a list to get back a new list with the changes\n  mkdir:1,     // - create a directory\n  msgctl:1,     // - SysV IPC message control operations\n  msgget:1,     // - get SysV IPC message queue\n  msgrcv:1,     // - receive a SysV IPC message from a message queue\n  msgsnd:1,     // - send a SysV IPC message to a message queue\n  my: 2,    // - declare and assign a local variable (lexical scoping)\n  'new':1,     //\n  next:1,     // - iterate a block prematurely\n  no:1,     // - unimport some module symbols or semantics at compile time\n  oct:1,     // - convert a string to an octal number\n  open:1,     // - open a file, pipe, or descriptor\n  opendir:1,     // - open a directory\n  ord:1,     // - find a character's numeric representation\n  our: 2,    // - declare and assign a package variable (lexical scoping)\n  pack:1,     // - convert a list into a binary representation\n  'package':1,     // - declare a separate global namespace\n  pipe:1,     // - open a pair of connected filehandles\n  pop:1,     // - remove the last element from an array and return it\n  pos:1,     // - find or set the offset for the last/next m//g search\n  print:1,     // - output a list to a filehandle\n  printf:1,     // - output a formatted list to a filehandle\n  prototype:1,     // - get the prototype (if any) of a subroutine\n  push:1,     // - append one or more elements to an array\n  q:null,  // - singly quote a string\n  qq:null,  // - doubly quote a string\n  qr:null,  // - Compile pattern\n  quotemeta:null,  // - quote regular expression magic characters\n  qw:null,  // - quote a list of words\n  qx:null,  // - backquote quote a string\n  rand:1,     // - retrieve the next pseudorandom number\n  read:1,     // - fixed-length buffered input from a filehandle\n  readdir:1,     // - get a directory from a directory handle\n  readline:1,     // - fetch a record from a file\n  readlink:1,     // - determine where a symbolic link is pointing\n  readpipe:1,     // - execute a system command and collect standard output\n  recv:1,     // - receive a message over a Socket\n  redo:1,     // - start this loop iteration over again\n  ref:1,     // - find out the type of thing being referenced\n  rename:1,     // - change a filename\n  require:1,     // - load in external functions from a library at runtime\n  reset:1,     // - clear all variables of a given name\n  'return':1,     // - get out of a function early\n  reverse:1,     // - flip a string or a list\n  rewinddir:1,     // - reset directory handle\n  rindex:1,     // - right-to-left substring search\n  rmdir:1,     // - remove a directory\n  s:null,  // - replace a pattern with a string\n  say:1,     // - print with newline\n  scalar:1,     // - force a scalar context\n  seek:1,     // - reposition file pointer for random-access I/O\n  seekdir:1,     // - reposition directory pointer\n  select:1,     // - reset default output or do I/O multiplexing\n  semctl:1,     // - SysV semaphore control operations\n  semget:1,     // - get set of SysV semaphores\n  semop:1,     // - SysV semaphore operations\n  send:1,     // - send a message over a socket\n  setgrent:1,     // - prepare group file for use\n  sethostent:1,     // - prepare hosts file for use\n  setnetent:1,     // - prepare networks file for use\n  setpgrp:1,     // - set the process group of a process\n  setpriority:1,     // - set a process's nice value\n  setprotoent:1,     // - prepare protocols file for use\n  setpwent:1,     // - prepare passwd file for use\n  setservent:1,     // - prepare services file for use\n  setsockopt:1,     // - set some socket options\n  shift:1,     // - remove the first element of an array, and return it\n  shmctl:1,     // - SysV shared memory operations\n  shmget:1,     // - get SysV shared memory segment identifier\n  shmread:1,     // - read SysV shared memory\n  shmwrite:1,     // - write SysV shared memory\n  shutdown:1,     // - close down just half of a socket connection\n  'sin':1,     // - return the sine of a number\n  sleep:1,     // - block for some number of seconds\n  socket:1,     // - create a socket\n  socketpair:1,     // - create a pair of sockets\n  'sort':1,     // - sort a list of values\n  splice:1,     // - add or remove elements anywhere in an array\n  'split':1,     // - split up a string using a regexp delimiter\n  sprintf:1,     // - formatted print into a string\n  'sqrt':1,     // - square root function\n  srand:1,     // - seed the random number generator\n  stat:1,     // - get a file's status information\n  state:1,     // - declare and assign a state variable (persistent lexical scoping)\n  study:1,     // - optimize input data for repeated searches\n  'sub':1,     // - declare a subroutine, possibly anonymously\n  'substr':1,     // - get or alter a portion of a string\n  symlink:1,     // - create a symbolic link to a file\n  syscall:1,     // - execute an arbitrary system call\n  sysopen:1,     // - open a file, pipe, or descriptor\n  sysread:1,     // - fixed-length unbuffered input from a filehandle\n  sysseek:1,     // - position I/O pointer on handle used with sysread and syswrite\n  system:1,     // - run a separate program\n  syswrite:1,     // - fixed-length unbuffered output to a filehandle\n  tell:1,     // - get current seekpointer on a filehandle\n  telldir:1,     // - get current seekpointer on a directory handle\n  tie:1,     // - bind a variable to an object class\n  tied:1,     // - get a reference to the object underlying a tied variable\n  time:1,     // - return number of seconds since 1970\n  times:1,     // - return elapsed time for self and child processes\n  tr:null,  // - transliterate a string\n  truncate:1,     // - shorten a file\n  uc:1,     // - return upper-case version of a string\n  ucfirst:1,     // - return a string with just the next letter in upper case\n  umask:1,     // - set file creation mode mask\n  undef:1,     // - remove a variable or function definition\n  unlink:1,     // - remove one link to a file\n  unpack:1,     // - convert binary structure into normal perl variables\n  unshift:1,     // - prepend more elements to the beginning of a list\n  untie:1,     // - break a tie binding to a variable\n  use:1,     // - load in a module at compile time\n  utime:1,     // - set a file's last access and modify times\n  values:1,     // - return a list of the values in a hash\n  vec:1,     // - test or set particular bits in a string\n  wait:1,     // - wait for any child process to die\n  waitpid:1,     // - wait for a particular child process to die\n  wantarray:1,     // - get void vs scalar vs list context of current subroutine call\n  warn:1,     // - print debugging info\n  when:1,     //\n  write:1,     // - print a picture record\n  y:null}; // - transliterate a string\n\nvar RXstyle=\"string.special\";\nvar RXmodifiers=/[goseximacplud]/;              // NOTE: \"m\", \"s\", \"y\" and \"tr\" need to correct real modifiers for each regexp type\n\nfunction tokenChain(stream,state,chain,style,tail){     // NOTE: chain.length > 2 is not working now (it's for s[...][...]geos;)\n  state.chain=null;                               //                                                          12   3tail\n  state.style=null;\n  state.tail=null;\n  state.tokenize=function(stream,state){\n    var e=false,c,i=0;\n    while(c=stream.next()){\n      if(c===chain[i]&&!e){\n        if(chain[++i]!==undefined){\n          state.chain=chain[i];\n          state.style=style;\n          state.tail=tail;}\n        else if(tail)\n          stream.eatWhile(tail);\n        state.tokenize=tokenPerl;\n        return style;}\n      e=!e&&c==\"\\\\\";}\n    return style;};\n  return state.tokenize(stream,state);}\n\nfunction tokenSOMETHING(stream,state,string){\n  state.tokenize=function(stream,state){\n    if(stream.string==string)\n      state.tokenize=tokenPerl;\n    stream.skipToEnd();\n    return \"string\";};\n  return state.tokenize(stream,state);}\n\nfunction tokenPerl(stream,state){\n  if(stream.eatSpace())\n    return null;\n  if(state.chain)\n    return tokenChain(stream,state,state.chain,state.style,state.tail);\n  if(stream.match(/^(\\-?((\\d[\\d_]*)?\\.\\d+(e[+-]?\\d+)?|\\d+\\.\\d*)|0x[\\da-fA-F_]+|0b[01_]+|\\d[\\d_]*(e[+-]?\\d+)?)/))\n    return 'number';\n  if(stream.match(/^<<(?=[_a-zA-Z])/)){                  // NOTE: <<SOMETHING\\n...\\nSOMETHING\\n\n    stream.eatWhile(/\\w/);\n    return tokenSOMETHING(stream,state,stream.current().substr(2));}\n  if(stream.sol()&&stream.match(/^\\=item(?!\\w)/)){// NOTE: \\n=item...\\n=cut\\n\n    return tokenSOMETHING(stream,state,'=cut');}\n  var ch=stream.next();\n  if(ch=='\"'||ch==\"'\"){                           // NOTE: ' or \" or <<'SOMETHING'\\n...\\nSOMETHING\\n or <<\"SOMETHING\"\\n...\\nSOMETHING\\n\n    if(prefix(stream, 3)==\"<<\"+ch){\n      var p=stream.pos;\n      stream.eatWhile(/\\w/);\n      var n=stream.current().substr(1);\n      if(n&&stream.eat(ch))\n        return tokenSOMETHING(stream,state,n);\n      stream.pos=p;}\n    return tokenChain(stream,state,[ch],\"string\");}\n  if(ch==\"q\"){\n    var c=look(stream, -2);\n    if(!(c&&/\\w/.test(c))){\n      c=look(stream, 0);\n      if(c==\"x\"){\n        c=look(stream, 1);\n        if(c==\"(\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\")\"],RXstyle,RXmodifiers);}\n        if(c==\"[\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\"]\"],RXstyle,RXmodifiers);}\n        if(c==\"{\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\"}\"],RXstyle,RXmodifiers);}\n        if(c==\"<\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\">\"],RXstyle,RXmodifiers);}\n        if(/[\\^'\"!~\\/]/.test(c)){\n          eatSuffix(stream, 1);\n          return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}}\n      else if(c==\"q\"){\n        c=look(stream, 1);\n        if(c==\"(\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\")\"],\"string\");}\n        if(c==\"[\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\"]\"],\"string\");}\n        if(c==\"{\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\"}\"],\"string\");}\n        if(c==\"<\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\">\"],\"string\");}\n        if(/[\\^'\"!~\\/]/.test(c)){\n          eatSuffix(stream, 1);\n          return tokenChain(stream,state,[stream.eat(c)],\"string\");}}\n      else if(c==\"w\"){\n        c=look(stream, 1);\n        if(c==\"(\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\")\"],\"bracket\");}\n        if(c==\"[\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\"]\"],\"bracket\");}\n        if(c==\"{\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\"}\"],\"bracket\");}\n        if(c==\"<\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\">\"],\"bracket\");}\n        if(/[\\^'\"!~\\/]/.test(c)){\n          eatSuffix(stream, 1);\n          return tokenChain(stream,state,[stream.eat(c)],\"bracket\");}}\n      else if(c==\"r\"){\n        c=look(stream, 1);\n        if(c==\"(\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\")\"],RXstyle,RXmodifiers);}\n        if(c==\"[\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\"]\"],RXstyle,RXmodifiers);}\n        if(c==\"{\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\"}\"],RXstyle,RXmodifiers);}\n        if(c==\"<\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\">\"],RXstyle,RXmodifiers);}\n        if(/[\\^'\"!~\\/]/.test(c)){\n          eatSuffix(stream, 1);\n          return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}}\n      else if(/[\\^'\"!~\\/(\\[{<]/.test(c)){\n        if(c==\"(\"){\n          eatSuffix(stream, 1);\n          return tokenChain(stream,state,[\")\"],\"string\");}\n        if(c==\"[\"){\n          eatSuffix(stream, 1);\n          return tokenChain(stream,state,[\"]\"],\"string\");}\n        if(c==\"{\"){\n          eatSuffix(stream, 1);\n          return tokenChain(stream,state,[\"}\"],\"string\");}\n        if(c==\"<\"){\n          eatSuffix(stream, 1);\n          return tokenChain(stream,state,[\">\"],\"string\");}\n        if(/[\\^'\"!~\\/]/.test(c)){\n          return tokenChain(stream,state,[stream.eat(c)],\"string\");}}}}\n  if(ch==\"m\"){\n    var c=look(stream, -2);\n    if(!(c&&/\\w/.test(c))){\n      c=stream.eat(/[(\\[{<\\^'\"!~\\/]/);\n      if(c){\n        if(/[\\^'\"!~\\/]/.test(c)){\n          return tokenChain(stream,state,[c],RXstyle,RXmodifiers);}\n        if(c==\"(\"){\n          return tokenChain(stream,state,[\")\"],RXstyle,RXmodifiers);}\n        if(c==\"[\"){\n          return tokenChain(stream,state,[\"]\"],RXstyle,RXmodifiers);}\n        if(c==\"{\"){\n          return tokenChain(stream,state,[\"}\"],RXstyle,RXmodifiers);}\n        if(c==\"<\"){\n          return tokenChain(stream,state,[\">\"],RXstyle,RXmodifiers);}}}}\n  if(ch==\"s\"){\n    var c=/[\\/>\\]})\\w]/.test(look(stream, -2));\n    if(!c){\n      c=stream.eat(/[(\\[{<\\^'\"!~\\/]/);\n      if(c){\n        if(c==\"[\")\n          return tokenChain(stream,state,[\"]\",\"]\"],RXstyle,RXmodifiers);\n        if(c==\"{\")\n          return tokenChain(stream,state,[\"}\",\"}\"],RXstyle,RXmodifiers);\n        if(c==\"<\")\n          return tokenChain(stream,state,[\">\",\">\"],RXstyle,RXmodifiers);\n        if(c==\"(\")\n          return tokenChain(stream,state,[\")\",\")\"],RXstyle,RXmodifiers);\n        return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}}\n  if(ch==\"y\"){\n    var c=/[\\/>\\]})\\w]/.test(look(stream, -2));\n    if(!c){\n      c=stream.eat(/[(\\[{<\\^'\"!~\\/]/);\n      if(c){\n        if(c==\"[\")\n          return tokenChain(stream,state,[\"]\",\"]\"],RXstyle,RXmodifiers);\n        if(c==\"{\")\n          return tokenChain(stream,state,[\"}\",\"}\"],RXstyle,RXmodifiers);\n        if(c==\"<\")\n          return tokenChain(stream,state,[\">\",\">\"],RXstyle,RXmodifiers);\n        if(c==\"(\")\n          return tokenChain(stream,state,[\")\",\")\"],RXstyle,RXmodifiers);\n        return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}}\n  if(ch==\"t\"){\n    var c=/[\\/>\\]})\\w]/.test(look(stream, -2));\n    if(!c){\n      c=stream.eat(\"r\");if(c){\n        c=stream.eat(/[(\\[{<\\^'\"!~\\/]/);\n        if(c){\n          if(c==\"[\")\n            return tokenChain(stream,state,[\"]\",\"]\"],RXstyle,RXmodifiers);\n          if(c==\"{\")\n            return tokenChain(stream,state,[\"}\",\"}\"],RXstyle,RXmodifiers);\n          if(c==\"<\")\n            return tokenChain(stream,state,[\">\",\">\"],RXstyle,RXmodifiers);\n          if(c==\"(\")\n            return tokenChain(stream,state,[\")\",\")\"],RXstyle,RXmodifiers);\n          return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}}}\n  if(ch==\"`\"){\n    return tokenChain(stream,state,[ch],\"builtin\");}\n  if(ch==\"/\"){\n    if(!/~\\s*$/.test(prefix(stream)))\n      return \"operator\";\n    else\n      return tokenChain(stream,state,[ch],RXstyle,RXmodifiers);}\n  if(ch==\"$\"){\n    var p=stream.pos;\n    if(stream.eatWhile(/\\d/)||stream.eat(\"{\")&&stream.eatWhile(/\\d/)&&stream.eat(\"}\"))\n      return \"builtin\";\n    else\n      stream.pos=p;}\n  if(/[$@%]/.test(ch)){\n    var p=stream.pos;\n    if(stream.eat(\"^\")&&stream.eat(/[A-Z]/)||!/[@$%&]/.test(look(stream, -2))&&stream.eat(/[=|\\\\\\-#?@;:&`~\\^!\\[\\]*'\"$+.,\\/<>()]/)){\n      var c=stream.current();\n      if(PERL[c])\n        return \"builtin\";}\n    stream.pos=p;}\n  if(/[$@%&]/.test(ch)){\n    if(stream.eatWhile(/[\\w$]/)||stream.eat(\"{\")&&stream.eatWhile(/[\\w$]/)&&stream.eat(\"}\")){\n      var c=stream.current();\n      if(PERL[c])\n        return \"builtin\";\n      else\n        return \"variable\";}}\n  if(ch==\"#\"){\n    if(look(stream, -2)!=\"$\"){\n      stream.skipToEnd();\n      return \"comment\";}}\n  if(/[:+\\-\\^*$&%@=<>!?|\\/~\\.]/.test(ch)){\n    var p=stream.pos;\n    stream.eatWhile(/[:+\\-\\^*$&%@=<>!?|\\/~\\.]/);\n    if(PERL[stream.current()])\n      return \"operator\";\n    else\n      stream.pos=p;}\n  if(ch==\"_\"){\n    if(stream.pos==1){\n      if(suffix(stream, 6)==\"_END__\"){\n        return tokenChain(stream,state,['\\0'],\"comment\");}\n      else if(suffix(stream, 7)==\"_DATA__\"){\n        return tokenChain(stream,state,['\\0'],\"builtin\");}\n      else if(suffix(stream, 7)==\"_C__\"){\n        return tokenChain(stream,state,['\\0'],\"string\");}}}\n  if(/\\w/.test(ch)){\n    var p=stream.pos;\n    if(look(stream, -2)==\"{\"&&(look(stream, 0)==\"}\"||stream.eatWhile(/\\w/)&&look(stream, 0)==\"}\"))\n      return \"string\";\n    else\n      stream.pos=p;}\n  if(/[A-Z]/.test(ch)){\n    var l=look(stream, -2);\n    var p=stream.pos;\n    stream.eatWhile(/[A-Z_]/);\n    if(/[\\da-z]/.test(look(stream, 0))){\n      stream.pos=p;}\n    else{\n      var c=PERL[stream.current()];\n      if(!c)\n        return \"meta\";\n      if(c[1])\n        c=c[0];\n      if(l!=\":\"){\n        if(c==1)\n          return \"keyword\";\n        else if(c==2)\n          return \"def\";\n        else if(c==3)\n          return \"atom\";\n        else if(c==4)\n          return \"operator\";\n        else if(c==5)\n          return \"builtin\";\n        else\n          return \"meta\";}\n      else\n        return \"meta\";}}\n  if(/[a-zA-Z_]/.test(ch)){\n    var l=look(stream, -2);\n    stream.eatWhile(/\\w/);\n    var c=PERL[stream.current()];\n    if(!c)\n      return \"meta\";\n    if(c[1])\n      c=c[0];\n    if(l!=\":\"){\n      if(c==1)\n        return \"keyword\";\n      else if(c==2)\n        return \"def\";\n      else if(c==3)\n        return \"atom\";\n      else if(c==4)\n        return \"operator\";\n      else if(c==5)\n        return \"builtin\";\n      else\n        return \"meta\";}\n    else\n      return \"meta\";}\n  return null;}\n\nexport const perl = {\n  name: \"perl\",\n\n  startState: function() {\n    return {\n      tokenize: tokenPerl,\n      chain: null,\n      style: null,\n      tail: null\n    };\n  },\n  token: function(stream, state) {\n    return (state.tokenize || tokenPerl)(stream, state);\n  },\n  languageData: {\n    commentTokens: {line: \"#\"},\n    wordChars: \"$\"\n  }\n};\n","function words(str) {\n  var obj = {}, words = str.split(\" \");\n  for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n  return obj;\n}\n\n// builtin funcs taken from trunk revision 1303237\nvar pBuiltins = \"ABS ACOS ARITY ASIN ATAN AVG BAGSIZE BINSTORAGE BLOOM BUILDBLOOM CBRT CEIL \"\n    + \"CONCAT COR COS COSH COUNT COUNT_STAR COV CONSTANTSIZE CUBEDIMENSIONS DIFF DISTINCT DOUBLEABS \"\n    + \"DOUBLEAVG DOUBLEBASE DOUBLEMAX DOUBLEMIN DOUBLEROUND DOUBLESUM EXP FLOOR FLOATABS FLOATAVG \"\n    + \"FLOATMAX FLOATMIN FLOATROUND FLOATSUM GENERICINVOKER INDEXOF INTABS INTAVG INTMAX INTMIN \"\n    + \"INTSUM INVOKEFORDOUBLE INVOKEFORFLOAT INVOKEFORINT INVOKEFORLONG INVOKEFORSTRING INVOKER \"\n    + \"ISEMPTY JSONLOADER JSONMETADATA JSONSTORAGE LAST_INDEX_OF LCFIRST LOG LOG10 LOWER LONGABS \"\n    + \"LONGAVG LONGMAX LONGMIN LONGSUM MAX MIN MAPSIZE MONITOREDUDF NONDETERMINISTIC OUTPUTSCHEMA  \"\n    + \"PIGSTORAGE PIGSTREAMING RANDOM REGEX_EXTRACT REGEX_EXTRACT_ALL REPLACE ROUND SIN SINH SIZE \"\n    + \"SQRT STRSPLIT SUBSTRING SUM STRINGCONCAT STRINGMAX STRINGMIN STRINGSIZE TAN TANH TOBAG \"\n    + \"TOKENIZE TOMAP TOP TOTUPLE TRIM TEXTLOADER TUPLESIZE UCFIRST UPPER UTF8STORAGECONVERTER \";\n\n// taken from QueryLexer.g\nvar pKeywords = \"VOID IMPORT RETURNS DEFINE LOAD FILTER FOREACH ORDER CUBE DISTINCT COGROUP \"\n    + \"JOIN CROSS UNION SPLIT INTO IF OTHERWISE ALL AS BY USING INNER OUTER ONSCHEMA PARALLEL \"\n    + \"PARTITION GROUP AND OR NOT GENERATE FLATTEN ASC DESC IS STREAM THROUGH STORE MAPREDUCE \"\n    + \"SHIP CACHE INPUT OUTPUT STDERROR STDIN STDOUT LIMIT SAMPLE LEFT RIGHT FULL EQ GT LT GTE LTE \"\n    + \"NEQ MATCHES TRUE FALSE DUMP\";\n\n// data types\nvar pTypes = \"BOOLEAN INT LONG FLOAT DOUBLE CHARARRAY BYTEARRAY BAG TUPLE MAP \";\n\nvar builtins = words(pBuiltins), keywords = words(pKeywords), types = words(pTypes)\n\nvar isOperatorChar = /[*+\\-%<>=&?:\\/!|]/;\n\nfunction chain(stream, state, f) {\n  state.tokenize = f;\n  return f(stream, state);\n}\n\nfunction tokenComment(stream, state) {\n  var isEnd = false;\n  var ch;\n  while(ch = stream.next()) {\n    if(ch == \"/\" && isEnd) {\n      state.tokenize = tokenBase;\n      break;\n    }\n    isEnd = (ch == \"*\");\n  }\n  return \"comment\";\n}\n\nfunction tokenString(quote) {\n  return function(stream, state) {\n    var escaped = false, next, end = false;\n    while((next = stream.next()) != null) {\n      if (next == quote && !escaped) {\n        end = true; break;\n      }\n      escaped = !escaped && next == \"\\\\\";\n    }\n    if (end || !escaped)\n      state.tokenize = tokenBase;\n    return \"error\";\n  };\n}\n\n\nfunction tokenBase(stream, state) {\n  var ch = stream.next();\n\n  // is a start of string?\n  if (ch == '\"' || ch == \"'\")\n    return chain(stream, state, tokenString(ch));\n  // is it one of the special chars\n  else if(/[\\[\\]{}\\(\\),;\\.]/.test(ch))\n    return null;\n  // is it a number?\n  else if(/\\d/.test(ch)) {\n    stream.eatWhile(/[\\w\\.]/);\n    return \"number\";\n  }\n  // multi line comment or operator\n  else if (ch == \"/\") {\n    if (stream.eat(\"*\")) {\n      return chain(stream, state, tokenComment);\n    }\n    else {\n      stream.eatWhile(isOperatorChar);\n      return \"operator\";\n    }\n  }\n  // single line comment or operator\n  else if (ch==\"-\") {\n    if(stream.eat(\"-\")){\n      stream.skipToEnd();\n      return \"comment\";\n    }\n    else {\n      stream.eatWhile(isOperatorChar);\n      return \"operator\";\n    }\n  }\n  // is it an operator\n  else if (isOperatorChar.test(ch)) {\n    stream.eatWhile(isOperatorChar);\n    return \"operator\";\n  }\n  else {\n    // get the while word\n    stream.eatWhile(/[\\w\\$_]/);\n    // is it one of the listed keywords?\n    if (keywords && keywords.propertyIsEnumerable(stream.current().toUpperCase())) {\n      //keywords can be used as variables like flatten(group), group.$0 etc..\n      if (!stream.eat(\")\") && !stream.eat(\".\"))\n        return \"keyword\";\n    }\n    // is it one of the builtin functions?\n    if (builtins && builtins.propertyIsEnumerable(stream.current().toUpperCase()))\n      return \"builtin\";\n    // is it one of the listed types?\n    if (types && types.propertyIsEnumerable(stream.current().toUpperCase()))\n      return \"type\";\n    // default is a 'variable'\n    return \"variable\";\n  }\n}\n\n// Interface\nexport const pig = {\n  name: \"pig\",\n\n  startState: function() {\n    return {\n      tokenize: tokenBase,\n      startOfLine: true\n    };\n  },\n\n  token: function(stream, state) {\n    if(stream.eatSpace()) return null;\n    var style = state.tokenize(stream, state);\n    return style;\n  },\n\n  languageData: {\n    autocomplete: (pBuiltins + pTypes + pKeywords).split(\" \")\n  }\n};\n","function buildRegexp(patterns, options) {\n  options = options || {};\n  var prefix = options.prefix !== undefined ? options.prefix : '^';\n  var suffix = options.suffix !== undefined ? options.suffix : '\\\\b';\n\n  for (var i = 0; i < patterns.length; i++) {\n    if (patterns[i] instanceof RegExp) {\n      patterns[i] = patterns[i].source;\n    }\n    else {\n      patterns[i] = patterns[i].replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n  }\n\n  return new RegExp(prefix + '(' + patterns.join('|') + ')' + suffix, 'i');\n}\n\nvar notCharacterOrDash = '(?=[^A-Za-z\\\\d\\\\-_]|$)';\nvar varNames = /[\\w\\-:]/\nvar keywords = buildRegexp([\n  /begin|break|catch|continue|data|default|do|dynamicparam/,\n  /else|elseif|end|exit|filter|finally|for|foreach|from|function|if|in/,\n  /param|process|return|switch|throw|trap|try|until|where|while/\n], { suffix: notCharacterOrDash });\n\nvar punctuation = /[\\[\\]{},;`\\\\\\.]|@[({]/;\nvar wordOperators = buildRegexp([\n  'f',\n  /b?not/,\n  /[ic]?split/, 'join',\n  /is(not)?/, 'as',\n  /[ic]?(eq|ne|[gl][te])/,\n  /[ic]?(not)?(like|match|contains)/,\n  /[ic]?replace/,\n  /b?(and|or|xor)/\n], { prefix: '-' });\nvar symbolOperators = /[+\\-*\\/%]=|\\+\\+|--|\\.\\.|[+\\-*&^%:=!|\\/]|<(?!#)|(?!#)>/;\nvar operators = buildRegexp([wordOperators, symbolOperators], { suffix: '' });\n\nvar numbers = /^((0x[\\da-f]+)|((\\d+\\.\\d+|\\d\\.|\\.\\d+|\\d+)(e[\\+\\-]?\\d+)?))[ld]?([kmgtp]b)?/i;\n\nvar identifiers = /^[A-Za-z\\_][A-Za-z\\-\\_\\d]*\\b/;\n\nvar symbolBuiltins = /[A-Z]:|%|\\?/i;\nvar namedBuiltins = buildRegexp([\n  /Add-(Computer|Content|History|Member|PSSnapin|Type)/,\n  /Checkpoint-Computer/,\n  /Clear-(Content|EventLog|History|Host|Item(Property)?|Variable)/,\n  /Compare-Object/,\n  /Complete-Transaction/,\n  /Connect-PSSession/,\n  /ConvertFrom-(Csv|Json|SecureString|StringData)/,\n  /Convert-Path/,\n  /ConvertTo-(Csv|Html|Json|SecureString|Xml)/,\n  /Copy-Item(Property)?/,\n  /Debug-Process/,\n  /Disable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)/,\n  /Disconnect-PSSession/,\n  /Enable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)/,\n  /(Enter|Exit)-PSSession/,\n  /Export-(Alias|Clixml|Console|Counter|Csv|FormatData|ModuleMember|PSSession)/,\n  /ForEach-Object/,\n  /Format-(Custom|List|Table|Wide)/,\n  new RegExp('Get-(Acl|Alias|AuthenticodeSignature|ChildItem|Command|ComputerRestorePoint|Content|ControlPanelItem|Counter|Credential'\n             + '|Culture|Date|Event|EventLog|EventSubscriber|ExecutionPolicy|FormatData|Help|History|Host|HotFix|Item|ItemProperty|Job'\n             + '|Location|Member|Module|PfxCertificate|Process|PSBreakpoint|PSCallStack|PSDrive|PSProvider|PSSession|PSSessionConfiguration'\n             + '|PSSnapin|Random|Service|TraceSource|Transaction|TypeData|UICulture|Unique|Variable|Verb|WinEvent|WmiObject)'),\n  /Group-Object/,\n  /Import-(Alias|Clixml|Counter|Csv|LocalizedData|Module|PSSession)/,\n  /ImportSystemModules/,\n  /Invoke-(Command|Expression|History|Item|RestMethod|WebRequest|WmiMethod)/,\n  /Join-Path/,\n  /Limit-EventLog/,\n  /Measure-(Command|Object)/,\n  /Move-Item(Property)?/,\n  new RegExp('New-(Alias|Event|EventLog|Item(Property)?|Module|ModuleManifest|Object|PSDrive|PSSession|PSSessionConfigurationFile'\n             + '|PSSessionOption|PSTransportOption|Service|TimeSpan|Variable|WebServiceProxy|WinEvent)'),\n  /Out-(Default|File|GridView|Host|Null|Printer|String)/,\n  /Pause/,\n  /(Pop|Push)-Location/,\n  /Read-Host/,\n  /Receive-(Job|PSSession)/,\n  /Register-(EngineEvent|ObjectEvent|PSSessionConfiguration|WmiEvent)/,\n  /Remove-(Computer|Event|EventLog|Item(Property)?|Job|Module|PSBreakpoint|PSDrive|PSSession|PSSnapin|TypeData|Variable|WmiObject)/,\n  /Rename-(Computer|Item(Property)?)/,\n  /Reset-ComputerMachinePassword/,\n  /Resolve-Path/,\n  /Restart-(Computer|Service)/,\n  /Restore-Computer/,\n  /Resume-(Job|Service)/,\n  /Save-Help/,\n  /Select-(Object|String|Xml)/,\n  /Send-MailMessage/,\n  new RegExp('Set-(Acl|Alias|AuthenticodeSignature|Content|Date|ExecutionPolicy|Item(Property)?|Location|PSBreakpoint|PSDebug' +\n             '|PSSessionConfiguration|Service|StrictMode|TraceSource|Variable|WmiInstance)'),\n  /Show-(Command|ControlPanelItem|EventLog)/,\n  /Sort-Object/,\n  /Split-Path/,\n  /Start-(Job|Process|Service|Sleep|Transaction|Transcript)/,\n  /Stop-(Computer|Job|Process|Service|Transcript)/,\n  /Suspend-(Job|Service)/,\n  /TabExpansion2/,\n  /Tee-Object/,\n  /Test-(ComputerSecureChannel|Connection|ModuleManifest|Path|PSSessionConfigurationFile)/,\n  /Trace-Command/,\n  /Unblock-File/,\n  /Undo-Transaction/,\n  /Unregister-(Event|PSSessionConfiguration)/,\n  /Update-(FormatData|Help|List|TypeData)/,\n  /Use-Transaction/,\n  /Wait-(Event|Job|Process)/,\n  /Where-Object/,\n  /Write-(Debug|Error|EventLog|Host|Output|Progress|Verbose|Warning)/,\n  /cd|help|mkdir|more|oss|prompt/,\n  /ac|asnp|cat|cd|chdir|clc|clear|clhy|cli|clp|cls|clv|cnsn|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|dnsn|ebp/,\n  /echo|epal|epcsv|epsn|erase|etsn|exsn|fc|fl|foreach|ft|fw|gal|gbp|gc|gci|gcm|gcs|gdr|ghy|gi|gjb|gl|gm|gmo|gp|gps/,\n  /group|gsn|gsnp|gsv|gu|gv|gwmi|h|history|icm|iex|ihy|ii|ipal|ipcsv|ipmo|ipsn|irm|ise|iwmi|iwr|kill|lp|ls|man|md/,\n  /measure|mi|mount|move|mp|mv|nal|ndr|ni|nmo|npssc|nsn|nv|ogv|oh|popd|ps|pushd|pwd|r|rbp|rcjb|rcsn|rd|rdr|ren|ri/,\n  /rjb|rm|rmdir|rmo|rni|rnp|rp|rsn|rsnp|rujb|rv|rvpa|rwmi|sajb|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls/,\n  /sort|sp|spjb|spps|spsv|start|sujb|sv|swmi|tee|trcm|type|where|wjb|write/\n], { prefix: '', suffix: '' });\nvar variableBuiltins = buildRegexp([\n  /[$?^_]|Args|ConfirmPreference|ConsoleFileName|DebugPreference|Error|ErrorActionPreference|ErrorView|ExecutionContext/,\n  /FormatEnumerationLimit|Home|Host|Input|MaximumAliasCount|MaximumDriveCount|MaximumErrorCount|MaximumFunctionCount/,\n  /MaximumHistoryCount|MaximumVariableCount|MyInvocation|NestedPromptLevel|OutputEncoding|Pid|Profile|ProgressPreference/,\n  /PSBoundParameters|PSCommandPath|PSCulture|PSDefaultParameterValues|PSEmailServer|PSHome|PSScriptRoot|PSSessionApplicationName/,\n  /PSSessionConfigurationName|PSSessionOption|PSUICulture|PSVersionTable|Pwd|ShellId|StackTrace|VerbosePreference/,\n  /WarningPreference|WhatIfPreference/,\n\n  /Event|EventArgs|EventSubscriber|Sender/,\n  /Matches|Ofs|ForEach|LastExitCode|PSCmdlet|PSItem|PSSenderInfo|This/,\n  /true|false|null/\n], { prefix: '\\\\$', suffix: '' });\n\nvar builtins = buildRegexp([symbolBuiltins, namedBuiltins, variableBuiltins], { suffix: notCharacterOrDash });\n\nvar grammar = {\n  keyword: keywords,\n  number: numbers,\n  operator: operators,\n  builtin: builtins,\n  punctuation: punctuation,\n  variable: identifiers\n};\n\n// tokenizers\nfunction tokenBase(stream, state) {\n  // Handle Comments\n  //var ch = stream.peek();\n\n  var parent = state.returnStack[state.returnStack.length - 1];\n  if (parent && parent.shouldReturnFrom(state)) {\n    state.tokenize = parent.tokenize;\n    state.returnStack.pop();\n    return state.tokenize(stream, state);\n  }\n\n  if (stream.eatSpace()) {\n    return null;\n  }\n\n  if (stream.eat('(')) {\n    state.bracketNesting += 1;\n    return 'punctuation';\n  }\n\n  if (stream.eat(')')) {\n    state.bracketNesting -= 1;\n    return 'punctuation';\n  }\n\n  for (var key in grammar) {\n    if (stream.match(grammar[key])) {\n      return key;\n    }\n  }\n\n  var ch = stream.next();\n\n  // single-quote string\n  if (ch === \"'\") {\n    return tokenSingleQuoteString(stream, state);\n  }\n\n  if (ch === '$') {\n    return tokenVariable(stream, state);\n  }\n\n  // double-quote string\n  if (ch === '\"') {\n    return tokenDoubleQuoteString(stream, state);\n  }\n\n  if (ch === '<' && stream.eat('#')) {\n    state.tokenize = tokenComment;\n    return tokenComment(stream, state);\n  }\n\n  if (ch === '#') {\n    stream.skipToEnd();\n    return 'comment';\n  }\n\n  if (ch === '@') {\n    var quoteMatch = stream.eat(/[\"']/);\n    if (quoteMatch && stream.eol()) {\n      state.tokenize = tokenMultiString;\n      state.startQuote = quoteMatch[0];\n      return tokenMultiString(stream, state);\n    } else if (stream.eol()) {\n      return 'error';\n    } else if (stream.peek().match(/[({]/)) {\n      return 'punctuation';\n    } else if (stream.peek().match(varNames)) {\n      // splatted variable\n      return tokenVariable(stream, state);\n    }\n  }\n  return 'error';\n}\n\nfunction tokenSingleQuoteString(stream, state) {\n  var ch;\n  while ((ch = stream.peek()) != null) {\n    stream.next();\n\n    if (ch === \"'\" && !stream.eat(\"'\")) {\n      state.tokenize = tokenBase;\n      return 'string';\n    }\n  }\n\n  return 'error';\n}\n\nfunction tokenDoubleQuoteString(stream, state) {\n  var ch;\n  while ((ch = stream.peek()) != null) {\n    if (ch === '$') {\n      state.tokenize = tokenStringInterpolation;\n      return 'string';\n    }\n\n    stream.next();\n    if (ch === '`') {\n      stream.next();\n      continue;\n    }\n\n    if (ch === '\"' && !stream.eat('\"')) {\n      state.tokenize = tokenBase;\n      return 'string';\n    }\n  }\n\n  return 'error';\n}\n\nfunction tokenStringInterpolation(stream, state) {\n  return tokenInterpolation(stream, state, tokenDoubleQuoteString);\n}\n\nfunction tokenMultiStringReturn(stream, state) {\n  state.tokenize = tokenMultiString;\n  state.startQuote = '\"'\n  return tokenMultiString(stream, state);\n}\n\nfunction tokenHereStringInterpolation(stream, state) {\n  return tokenInterpolation(stream, state, tokenMultiStringReturn);\n}\n\nfunction tokenInterpolation(stream, state, parentTokenize) {\n  if (stream.match('$(')) {\n    var savedBracketNesting = state.bracketNesting;\n    state.returnStack.push({\n      /*jshint loopfunc:true */\n      shouldReturnFrom: function(state) {\n        return state.bracketNesting === savedBracketNesting;\n      },\n      tokenize: parentTokenize\n    });\n    state.tokenize = tokenBase;\n    state.bracketNesting += 1;\n    return 'punctuation';\n  } else {\n    stream.next();\n    state.returnStack.push({\n      shouldReturnFrom: function() { return true; },\n      tokenize: parentTokenize\n    });\n    state.tokenize = tokenVariable;\n    return state.tokenize(stream, state);\n  }\n}\n\nfunction tokenComment(stream, state) {\n  var maybeEnd = false, ch;\n  while ((ch = stream.next()) != null) {\n    if (maybeEnd && ch == '>') {\n      state.tokenize = tokenBase;\n      break;\n    }\n    maybeEnd = (ch === '#');\n  }\n  return 'comment';\n}\n\nfunction tokenVariable(stream, state) {\n  var ch = stream.peek();\n  if (stream.eat('{')) {\n    state.tokenize = tokenVariableWithBraces;\n    return tokenVariableWithBraces(stream, state);\n  } else if (ch != undefined && ch.match(varNames)) {\n    stream.eatWhile(varNames);\n    state.tokenize = tokenBase;\n    return 'variable';\n  } else {\n    state.tokenize = tokenBase;\n    return 'error';\n  }\n}\n\nfunction tokenVariableWithBraces(stream, state) {\n  var ch;\n  while ((ch = stream.next()) != null) {\n    if (ch === '}') {\n      state.tokenize = tokenBase;\n      break;\n    }\n  }\n  return 'variable';\n}\n\nfunction tokenMultiString(stream, state) {\n  var quote = state.startQuote;\n  if (stream.sol() && stream.match(new RegExp(quote + '@'))) {\n    state.tokenize = tokenBase;\n  }\n  else if (quote === '\"') {\n    while (!stream.eol()) {\n      var ch = stream.peek();\n      if (ch === '$') {\n        state.tokenize = tokenHereStringInterpolation;\n        return 'string';\n      }\n\n      stream.next();\n      if (ch === '`') {\n        stream.next();\n      }\n    }\n  }\n  else {\n    stream.skipToEnd();\n  }\n\n  return 'string';\n}\n\nexport const powerShell = {\n  name: \"powershell\",\n\n  startState: function() {\n    return {\n      returnStack: [],\n      bracketNesting: 0,\n      tokenize: tokenBase\n    };\n  },\n\n  token: function(stream, state) {\n    return state.tokenize(stream, state);\n  },\n\n  languageData: {\n    commentTokens: {line: \"#\", block: {open: \"<#\", close: \"#>\"}}\n  }\n};\n","export const properties = {\n  name: \"properties\",\n\n  token: function(stream, state) {\n    var sol = stream.sol() || state.afterSection;\n    var eol = stream.eol();\n\n    state.afterSection = false;\n\n    if (sol) {\n      if (state.nextMultiline) {\n        state.inMultiline = true;\n        state.nextMultiline = false;\n      } else {\n        state.position = \"def\";\n      }\n    }\n\n    if (eol && ! state.nextMultiline) {\n      state.inMultiline = false;\n      state.position = \"def\";\n    }\n\n    if (sol) {\n      while(stream.eatSpace()) {}\n    }\n\n    var ch = stream.next();\n\n    if (sol && (ch === \"#\" || ch === \"!\" || ch === \";\")) {\n      state.position = \"comment\";\n      stream.skipToEnd();\n      return \"comment\";\n    } else if (sol && ch === \"[\") {\n      state.afterSection = true;\n      stream.skipTo(\"]\"); stream.eat(\"]\");\n      return \"header\";\n    } else if (ch === \"=\" || ch === \":\") {\n      state.position = \"quote\";\n      return null;\n    } else if (ch === \"\\\\\" && state.position === \"quote\") {\n      if (stream.eol()) {  // end of line?\n        // Multiline value\n        state.nextMultiline = true;\n      }\n    }\n\n    return state.position;\n  },\n\n  startState: function() {\n    return {\n      position : \"def\",       // Current position, \"def\", \"quote\" or \"comment\"\n      nextMultiline : false,  // Is the next line multiline value\n      inMultiline : false,    // Is the current line a multiline value\n      afterSection : false    // Did we just open a section\n    };\n  }\n\n};\n","function wordRegexp(words) {\n  return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\", \"i\");\n};\n\nvar keywordArray = [\n  \"package\", \"message\", \"import\", \"syntax\",\n  \"required\", \"optional\", \"repeated\", \"reserved\", \"default\", \"extensions\", \"packed\",\n  \"bool\", \"bytes\", \"double\", \"enum\", \"float\", \"string\",\n  \"int32\", \"int64\", \"uint32\", \"uint64\", \"sint32\", \"sint64\", \"fixed32\", \"fixed64\", \"sfixed32\", \"sfixed64\",\n  \"option\", \"service\", \"rpc\", \"returns\"\n];\nvar keywords = wordRegexp(keywordArray);\n\nvar identifiers = new RegExp(\"^[_A-Za-z\\xa1-\\uffff][_A-Za-z0-9\\xa1-\\uffff]*\");\n\nfunction tokenBase(stream) {\n  // whitespaces\n  if (stream.eatSpace()) return null;\n\n  // Handle one line Comments\n  if (stream.match(\"//\")) {\n    stream.skipToEnd();\n    return \"comment\";\n  }\n\n  // Handle Number Literals\n  if (stream.match(/^[0-9\\.+-]/, false)) {\n    if (stream.match(/^[+-]?0x[0-9a-fA-F]+/))\n      return \"number\";\n    if (stream.match(/^[+-]?\\d*\\.\\d+([EeDd][+-]?\\d+)?/))\n      return \"number\";\n    if (stream.match(/^[+-]?\\d+([EeDd][+-]?\\d+)?/))\n      return \"number\";\n  }\n\n  // Handle Strings\n  if (stream.match(/^\"([^\"]|(\"\"))*\"/)) { return \"string\"; }\n  if (stream.match(/^'([^']|(''))*'/)) { return \"string\"; }\n\n  // Handle words\n  if (stream.match(keywords)) { return \"keyword\"; }\n  if (stream.match(identifiers)) { return \"variable\"; } ;\n\n  // Handle non-detected items\n  stream.next();\n  return null;\n};\n\nexport const protobuf = {\n  name: \"protobuf\",\n  token: tokenBase,\n  languageData: {\n    autocomplete: keywordArray\n  }\n}\n","// Stores the words from the define method\nvar words = {};\n// Taken, mostly, from the Puppet official variable standards regex\nvar variable_regex = /({)?([a-z][a-z0-9_]*)?((::[a-z][a-z0-9_]*)*::)?[a-zA-Z0-9_]+(})?/;\n\n// Takes a string of words separated by spaces and adds them as\n// keys with the value of the first argument 'style'\nfunction define(style, string) {\n  var split = string.split(' ');\n  for (var i = 0; i < split.length; i++) {\n    words[split[i]] = style;\n  }\n}\n\n// Takes commonly known puppet types/words and classifies them to a style\ndefine('keyword', 'class define site node include import inherits');\ndefine('keyword', 'case if else in and elsif default or');\ndefine('atom', 'false true running present absent file directory undef');\ndefine('builtin', 'action augeas burst chain computer cron destination dport exec ' +\n       'file filebucket group host icmp iniface interface jump k5login limit log_level ' +\n       'log_prefix macauthorization mailalias maillist mcx mount nagios_command ' +\n       'nagios_contact nagios_contactgroup nagios_host nagios_hostdependency ' +\n       'nagios_hostescalation nagios_hostextinfo nagios_hostgroup nagios_service ' +\n       'nagios_servicedependency nagios_serviceescalation nagios_serviceextinfo ' +\n       'nagios_servicegroup nagios_timeperiod name notify outiface package proto reject ' +\n       'resources router schedule scheduled_task selboolean selmodule service source ' +\n       'sport ssh_authorized_key sshkey stage state table tidy todest toports tosource ' +\n       'user vlan yumrepo zfs zone zpool');\n\n// After finding a start of a string ('|\") this function attempts to find the end;\n// If a variable is encountered along the way, we display it differently when it\n// is encapsulated in a double-quoted string.\nfunction tokenString(stream, state) {\n  var current, prev, found_var = false;\n  while (!stream.eol() && (current = stream.next()) != state.pending) {\n    if (current === '$' && prev != '\\\\' && state.pending == '\"') {\n      found_var = true;\n      break;\n    }\n    prev = current;\n  }\n  if (found_var) {\n    stream.backUp(1);\n  }\n  if (current == state.pending) {\n    state.continueString = false;\n  } else {\n    state.continueString = true;\n  }\n  return \"string\";\n}\n\n// Main function\nfunction tokenize(stream, state) {\n  // Matches one whole word\n  var word = stream.match(/[\\w]+/, false);\n  // Matches attributes (i.e. ensure => present ; 'ensure' would be matched)\n  var attribute = stream.match(/(\\s+)?\\w+\\s+=>.*/, false);\n  // Matches non-builtin resource declarations\n  // (i.e. \"apache::vhost {\" or \"mycustomclasss {\" would be matched)\n  var resource = stream.match(/(\\s+)?[\\w:_]+(\\s+)?{/, false);\n  // Matches virtual and exported resources (i.e. @@user { ; and the like)\n  var special_resource = stream.match(/(\\s+)?[@]{1,2}[\\w:_]+(\\s+)?{/, false);\n\n  // Finally advance the stream\n  var ch = stream.next();\n\n  // Have we found a variable?\n  if (ch === '$') {\n    if (stream.match(variable_regex)) {\n      // If so, and its in a string, assign it a different color\n      return state.continueString ? 'variableName.special' : 'variable';\n    }\n    // Otherwise return an invalid variable\n    return \"error\";\n  }\n  // Should we still be looking for the end of a string?\n  if (state.continueString) {\n    // If so, go through the loop again\n    stream.backUp(1);\n    return tokenString(stream, state);\n  }\n  // Are we in a definition (class, node, define)?\n  if (state.inDefinition) {\n    // If so, return def (i.e. for 'class myclass {' ; 'myclass' would be matched)\n    if (stream.match(/(\\s+)?[\\w:_]+(\\s+)?/)) {\n      return 'def';\n    }\n    // Match the rest it the next time around\n    stream.match(/\\s+{/);\n    state.inDefinition = false;\n  }\n  // Are we in an 'include' statement?\n  if (state.inInclude) {\n    // Match and return the included class\n    stream.match(/(\\s+)?\\S+(\\s+)?/);\n    state.inInclude = false;\n    return 'def';\n  }\n  // Do we just have a function on our hands?\n  // In 'ensure_resource(\"myclass\")', 'ensure_resource' is matched\n  if (stream.match(/(\\s+)?\\w+\\(/)) {\n    stream.backUp(1);\n    return 'def';\n  }\n  // Have we matched the prior attribute regex?\n  if (attribute) {\n    stream.match(/(\\s+)?\\w+/);\n    return 'tag';\n  }\n  // Do we have Puppet specific words?\n  if (word && words.hasOwnProperty(word)) {\n    // Negates the initial next()\n    stream.backUp(1);\n    // rs move the stream\n    stream.match(/[\\w]+/);\n    // We want to process these words differently\n    // do to the importance they have in Puppet\n    if (stream.match(/\\s+\\S+\\s+{/, false)) {\n      state.inDefinition = true;\n    }\n    if (word == 'include') {\n      state.inInclude = true;\n    }\n    // Returns their value as state in the prior define methods\n    return words[word];\n  }\n  // Is there a match on a reference?\n  if (/(^|\\s+)[A-Z][\\w:_]+/.test(word)) {\n    // Negate the next()\n    stream.backUp(1);\n    // Match the full reference\n    stream.match(/(^|\\s+)[A-Z][\\w:_]+/);\n    return 'def';\n  }\n  // Have we matched the prior resource regex?\n  if (resource) {\n    stream.match(/(\\s+)?[\\w:_]+/);\n    return 'def';\n  }\n  // Have we matched the prior special_resource regex?\n  if (special_resource) {\n    stream.match(/(\\s+)?[@]{1,2}/);\n    return 'atom';\n  }\n  // Match all the comments. All of them.\n  if (ch == \"#\") {\n    stream.skipToEnd();\n    return \"comment\";\n  }\n  // Have we found a string?\n  if (ch == \"'\" || ch == '\"') {\n    // Store the type (single or double)\n    state.pending = ch;\n    // Perform the looping function to find the end\n    return tokenString(stream, state);\n  }\n  // Match all the brackets\n  if (ch == '{' || ch == '}') {\n    return 'bracket';\n  }\n  // Match characters that we are going to assume\n  // are trying to be regex\n  if (ch == '/') {\n    stream.match(/^[^\\/]*\\//);\n    return 'string.special';\n  }\n  // Match all the numbers\n  if (ch.match(/[0-9]/)) {\n    stream.eatWhile(/[0-9]+/);\n    return 'number';\n  }\n  // Match the '=' and '=>' operators\n  if (ch == '=') {\n    if (stream.peek() == '>') {\n      stream.next();\n    }\n    return \"operator\";\n  }\n  // Keep advancing through all the rest\n  stream.eatWhile(/[\\w-]/);\n  // Return a blank line for everything else\n  return null;\n}\n// Start it all\nexport const puppet = {\n  name: \"puppet\",\n\n  startState: function () {\n    var state = {};\n    state.inDefinition = false;\n    state.inInclude = false;\n    state.continueString = false;\n    state.pending = false;\n    return state;\n  },\n  token: function (stream, state) {\n    // Strip the spaces, but regex will account for them eitherway\n    if (stream.eatSpace()) return null;\n    // Go through the main process\n    return tokenize(stream, state);\n  }\n};\n","var curPunc,\n    keywords=buildRE([\"abs\",\"acos\",\"aj\",\"aj0\",\"all\",\"and\",\"any\",\"asc\",\"asin\",\"asof\",\"atan\",\"attr\",\"avg\",\"avgs\",\"bin\",\"by\",\"ceiling\",\"cols\",\"cor\",\"cos\",\"count\",\"cov\",\"cross\",\"csv\",\"cut\",\"delete\",\"deltas\",\"desc\",\"dev\",\"differ\",\"distinct\",\"div\",\"do\",\"each\",\"ej\",\"enlist\",\"eval\",\"except\",\"exec\",\"exit\",\"exp\",\"fby\",\"fills\",\"first\",\"fkeys\",\"flip\",\"floor\",\"from\",\"get\",\"getenv\",\"group\",\"gtime\",\"hclose\",\"hcount\",\"hdel\",\"hopen\",\"hsym\",\"iasc\",\"idesc\",\"if\",\"ij\",\"in\",\"insert\",\"inter\",\"inv\",\"key\",\"keys\",\"last\",\"like\",\"list\",\"lj\",\"load\",\"log\",\"lower\",\"lsq\",\"ltime\",\"ltrim\",\"mavg\",\"max\",\"maxs\",\"mcount\",\"md5\",\"mdev\",\"med\",\"meta\",\"min\",\"mins\",\"mmax\",\"mmin\",\"mmu\",\"mod\",\"msum\",\"neg\",\"next\",\"not\",\"null\",\"or\",\"over\",\"parse\",\"peach\",\"pj\",\"plist\",\"prd\",\"prds\",\"prev\",\"prior\",\"rand\",\"rank\",\"ratios\",\"raze\",\"read0\",\"read1\",\"reciprocal\",\"reverse\",\"rload\",\"rotate\",\"rsave\",\"rtrim\",\"save\",\"scan\",\"select\",\"set\",\"setenv\",\"show\",\"signum\",\"sin\",\"sqrt\",\"ss\",\"ssr\",\"string\",\"sublist\",\"sum\",\"sums\",\"sv\",\"system\",\"tables\",\"tan\",\"til\",\"trim\",\"txf\",\"type\",\"uj\",\"ungroup\",\"union\",\"update\",\"upper\",\"upsert\",\"value\",\"var\",\"view\",\"views\",\"vs\",\"wavg\",\"where\",\"where\",\"while\",\"within\",\"wj\",\"wj1\",\"wsum\",\"xasc\",\"xbar\",\"xcol\",\"xcols\",\"xdesc\",\"xexp\",\"xgroup\",\"xkey\",\"xlog\",\"xprev\",\"xrank\"]),\n    E=/[|/&^!+:\\\\\\-*%$=~#;@><,?_\\'\\\"\\[\\(\\]\\)\\s{}]/;\nfunction buildRE(w){return new RegExp(\"^(\"+w.join(\"|\")+\")$\");}\nfunction tokenBase(stream,state){\n  var sol=stream.sol(),c=stream.next();\n  curPunc=null;\n  if(sol)\n    if(c==\"/\")\n      return(state.tokenize=tokenLineComment)(stream,state);\n  else if(c==\"\\\\\"){\n    if(stream.eol()||/\\s/.test(stream.peek()))\n      return stream.skipToEnd(),/^\\\\\\s*$/.test(stream.current())?(state.tokenize=tokenCommentToEOF)(stream):state.tokenize=tokenBase,\"comment\";\n    else\n      return state.tokenize=tokenBase,\"builtin\";\n  }\n  if(/\\s/.test(c))\n    return stream.peek()==\"/\"?(stream.skipToEnd(),\"comment\"):\"null\";\n  if(c=='\"')\n    return(state.tokenize=tokenString)(stream,state);\n  if(c=='`')\n    return stream.eatWhile(/[A-Za-z\\d_:\\/.]/),\"macroName\";\n  if((\".\"==c&&/\\d/.test(stream.peek()))||/\\d/.test(c)){\n    var t=null;\n    stream.backUp(1);\n    if(stream.match(/^\\d{4}\\.\\d{2}(m|\\.\\d{2}([DT](\\d{2}(:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?)?)?)?)/)\n       || stream.match(/^\\d+D(\\d{2}(:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?)?)/)\n       || stream.match(/^\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?/)\n       || stream.match(/^\\d+[ptuv]{1}/))\n      t=\"temporal\";\n    else if(stream.match(/^0[NwW]{1}/)\n            || stream.match(/^0x[\\da-fA-F]*/)\n            || stream.match(/^[01]+[b]{1}/)\n            || stream.match(/^\\d+[chijn]{1}/)\n            || stream.match(/-?\\d*(\\.\\d*)?(e[+\\-]?\\d+)?(e|f)?/))\n      t=\"number\";\n    return(t&&(!(c=stream.peek())||E.test(c)))?t:(stream.next(),\"error\");\n  }\n  if(/[A-Za-z]|\\./.test(c))\n    return stream.eatWhile(/[A-Za-z._\\d]/),keywords.test(stream.current())?\"keyword\":\"variable\";\n  if(/[|/&^!+:\\\\\\-*%$=~#;@><\\.,?_\\']/.test(c))\n    return null;\n  if(/[{}\\(\\[\\]\\)]/.test(c))\n    return null;\n  return\"error\";\n}\nfunction tokenLineComment(stream,state){\n  return stream.skipToEnd(),/^\\/\\s*$/.test(stream.current())?(state.tokenize=tokenBlockComment)(stream,state):(state.tokenize=tokenBase),\"comment\";\n}\nfunction tokenBlockComment(stream,state){\n  var f=stream.sol()&&stream.peek()==\"\\\\\";\n  stream.skipToEnd();\n  if(f&&/^\\\\\\s*$/.test(stream.current()))\n    state.tokenize=tokenBase;\n  return\"comment\";\n}\nfunction tokenCommentToEOF(stream){return stream.skipToEnd(),\"comment\";}\nfunction tokenString(stream,state){\n  var escaped=false,next,end=false;\n  while((next=stream.next())){\n    if(next==\"\\\"\"&&!escaped){end=true;break;}\n    escaped=!escaped&&next==\"\\\\\";\n  }\n  if(end)state.tokenize=tokenBase;\n  return\"string\";\n}\nfunction pushContext(state,type,col){state.context={prev:state.context,indent:state.indent,col:col,type:type};}\nfunction popContext(state){state.indent=state.context.indent;state.context=state.context.prev;}\nexport const q = {\n  name: \"q\",\n  startState:function(){\n    return{tokenize:tokenBase,\n           context:null,\n           indent:0,\n           col:0};\n  },\n  token:function(stream,state){\n    if(stream.sol()){\n      if(state.context&&state.context.align==null)\n        state.context.align=false;\n      state.indent=stream.indentation();\n    }\n    //if (stream.eatSpace()) return null;\n    var style=state.tokenize(stream,state);\n    if(style!=\"comment\"&&state.context&&state.context.align==null&&state.context.type!=\"pattern\"){\n      state.context.align=true;\n    }\n    if(curPunc==\"(\")pushContext(state,\")\",stream.column());\n    else if(curPunc==\"[\")pushContext(state,\"]\",stream.column());\n    else if(curPunc==\"{\")pushContext(state,\"}\",stream.column());\n    else if(/[\\]\\}\\)]/.test(curPunc)){\n      while(state.context&&state.context.type==\"pattern\")popContext(state);\n      if(state.context&&curPunc==state.context.type)popContext(state);\n    }\n    else if(curPunc==\".\"&&state.context&&state.context.type==\"pattern\")popContext(state);\n    else if(/atom|string|variable/.test(style)&&state.context){\n      if(/[\\}\\]]/.test(state.context.type))\n        pushContext(state,\"pattern\",stream.column());\n      else if(state.context.type==\"pattern\"&&!state.context.align){\n        state.context.align=true;\n        state.context.col=stream.column();\n      }\n    }\n    return style;\n  },\n  indent:function(state,textAfter,cx){\n    var firstChar=textAfter&&textAfter.charAt(0);\n    var context=state.context;\n    if(/[\\]\\}]/.test(firstChar))\n      while (context&&context.type==\"pattern\")context=context.prev;\n    var closing=context&&firstChar==context.type;\n    if(!context)\n      return 0;\n    else if(context.type==\"pattern\")\n      return context.col;\n    else if(context.align)\n      return context.col+(closing?0:1);\n    else\n      return context.indent+(closing?0:cx.unit);\n  },\n  languageData: {\n    commentTokens: { line: \"/\" },\n  },\n};\n","function wordObj(words) {\n  var res = {};\n  for (var i = 0; i < words.length; ++i) res[words[i]] = true;\n  return res;\n}\nvar commonAtoms = [\"NULL\", \"NA\", \"Inf\", \"NaN\", \"NA_integer_\", \"NA_real_\", \"NA_complex_\", \"NA_character_\", \"TRUE\", \"FALSE\"];\nvar commonBuiltins = [\"list\", \"quote\", \"bquote\", \"eval\", \"return\", \"call\", \"parse\", \"deparse\"];\nvar commonKeywords = [\"if\", \"else\", \"repeat\", \"while\", \"function\", \"for\", \"in\", \"next\", \"break\"];\nvar commonBlockKeywords = [\"if\", \"else\", \"repeat\", \"while\", \"function\", \"for\"];\n\nvar atoms = wordObj(commonAtoms);\nvar builtins = wordObj(commonBuiltins);\nvar keywords = wordObj(commonKeywords);\nvar blockkeywords = wordObj(commonBlockKeywords);\nvar opChars = /[+\\-*\\/^<>=!&|~$:]/;\nvar curPunc;\n\nfunction tokenBase(stream, state) {\n  curPunc = null;\n  var ch = stream.next();\n  if (ch == \"#\") {\n    stream.skipToEnd();\n    return \"comment\";\n  } else if (ch == \"0\" && stream.eat(\"x\")) {\n    stream.eatWhile(/[\\da-f]/i);\n    return \"number\";\n  } else if (ch == \".\" && stream.eat(/\\d/)) {\n    stream.match(/\\d*(?:e[+\\-]?\\d+)?/);\n    return \"number\";\n  } else if (/\\d/.test(ch)) {\n    stream.match(/\\d*(?:\\.\\d+)?(?:e[+\\-]\\d+)?L?/);\n    return \"number\";\n  } else if (ch == \"'\" || ch == '\"') {\n    state.tokenize = tokenString(ch);\n    return \"string\";\n  } else if (ch == \"`\") {\n    stream.match(/[^`]+`/);\n    return \"string.special\";\n  } else if (ch == \".\" && stream.match(/.(?:[.]|\\d+)/)) {\n    return \"keyword\";\n  } else if (/[a-zA-Z\\.]/.test(ch)) {\n    stream.eatWhile(/[\\w\\.]/);\n    var word = stream.current();\n    if (atoms.propertyIsEnumerable(word)) return \"atom\";\n    if (keywords.propertyIsEnumerable(word)) {\n      // Block keywords start new blocks, except 'else if', which only starts\n      // one new block for the 'if', no block for the 'else'.\n      if (blockkeywords.propertyIsEnumerable(word) &&\n          !stream.match(/\\s*if(\\s+|$)/, false))\n        curPunc = \"block\";\n      return \"keyword\";\n    }\n    if (builtins.propertyIsEnumerable(word)) return \"builtin\";\n    return \"variable\";\n  } else if (ch == \"%\") {\n    if (stream.skipTo(\"%\")) stream.next();\n    return \"variableName.special\";\n  } else if (\n    (ch == \"<\" && stream.eat(\"-\")) ||\n      (ch == \"<\" && stream.match(\"<-\")) ||\n      (ch == \"-\" && stream.match(/>>?/))\n  ) {\n    return \"operator\";\n  } else if (ch == \"=\" && state.ctx.argList) {\n    return \"operator\";\n  } else if (opChars.test(ch)) {\n    if (ch == \"$\") return \"operator\";\n    stream.eatWhile(opChars);\n    return \"operator\";\n  } else if (/[\\(\\){}\\[\\];]/.test(ch)) {\n    curPunc = ch;\n    if (ch == \";\") return \"punctuation\";\n    return null;\n  } else {\n    return null;\n  }\n}\n\nfunction tokenString(quote) {\n  return function(stream, state) {\n    if (stream.eat(\"\\\\\")) {\n      var ch = stream.next();\n      if (ch == \"x\") stream.match(/^[a-f0-9]{2}/i);\n      else if ((ch == \"u\" || ch == \"U\") && stream.eat(\"{\") && stream.skipTo(\"}\")) stream.next();\n      else if (ch == \"u\") stream.match(/^[a-f0-9]{4}/i);\n      else if (ch == \"U\") stream.match(/^[a-f0-9]{8}/i);\n      else if (/[0-7]/.test(ch)) stream.match(/^[0-7]{1,2}/);\n      return \"string.special\";\n    } else {\n      var next;\n      while ((next = stream.next()) != null) {\n        if (next == quote) { state.tokenize = tokenBase; break; }\n        if (next == \"\\\\\") { stream.backUp(1); break; }\n      }\n      return \"string\";\n    }\n  };\n}\n\nvar ALIGN_YES = 1, ALIGN_NO = 2, BRACELESS = 4\n\nfunction push(state, type, stream) {\n  state.ctx = {type: type,\n               indent: state.indent,\n               flags: 0,\n               column: stream.column(),\n               prev: state.ctx};\n}\nfunction setFlag(state, flag) {\n  var ctx = state.ctx\n  state.ctx = {type: ctx.type,\n               indent: ctx.indent,\n               flags: ctx.flags | flag,\n               column: ctx.column,\n               prev: ctx.prev}\n}\nfunction pop(state) {\n  state.indent = state.ctx.indent;\n  state.ctx = state.ctx.prev;\n}\n\nexport const r = {\n  name: \"r\",\n  startState: function(indentUnit) {\n    return {tokenize: tokenBase,\n            ctx: {type: \"top\",\n                  indent: -indentUnit,\n                  flags: ALIGN_NO},\n            indent: 0,\n            afterIdent: false};\n  },\n\n  token: function(stream, state) {\n    if (stream.sol()) {\n      if ((state.ctx.flags & 3) == 0) state.ctx.flags |= ALIGN_NO\n      if (state.ctx.flags & BRACELESS) pop(state)\n      state.indent = stream.indentation();\n    }\n    if (stream.eatSpace()) return null;\n    var style = state.tokenize(stream, state);\n    if (style != \"comment\" && (state.ctx.flags & ALIGN_NO) == 0) setFlag(state, ALIGN_YES)\n\n    if ((curPunc == \";\" || curPunc == \"{\" || curPunc == \"}\") && state.ctx.type == \"block\") pop(state);\n    if (curPunc == \"{\") push(state, \"}\", stream);\n    else if (curPunc == \"(\") {\n      push(state, \")\", stream);\n      if (state.afterIdent) state.ctx.argList = true;\n    }\n    else if (curPunc == \"[\") push(state, \"]\", stream);\n    else if (curPunc == \"block\") push(state, \"block\", stream);\n    else if (curPunc == state.ctx.type) pop(state);\n    else if (state.ctx.type == \"block\" && style != \"comment\") setFlag(state, BRACELESS)\n    state.afterIdent = style == \"variable\" || style == \"keyword\";\n    return style;\n  },\n\n  indent: function(state, textAfter, cx) {\n    if (state.tokenize != tokenBase) return 0;\n    var firstChar = textAfter && textAfter.charAt(0), ctx = state.ctx,\n        closing = firstChar == ctx.type;\n    if (ctx.flags & BRACELESS) ctx = ctx.prev\n    if (ctx.type == \"block\") return ctx.indent + (firstChar == \"{\" ? 0 : cx.unit);\n    else if (ctx.flags & ALIGN_YES) return ctx.column + (closing ? 0 : 1);\n    else return ctx.indent + (closing ? 0 : cx.unit);\n  },\n\n  languageData: {\n    wordChars: \".\",\n    commentTokens: {line: \"#\"},\n    autocomplete: commonAtoms.concat(commonBuiltins, commonKeywords)\n  }\n};\n","function wordObj(words) {\n  var o = {};\n  for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true;\n  return o;\n}\n\nvar keywordList = [\n  \"alias\", \"and\", \"BEGIN\", \"begin\", \"break\", \"case\", \"class\", \"def\", \"defined?\", \"do\", \"else\",\n  \"elsif\", \"END\", \"end\", \"ensure\", \"false\", \"for\", \"if\", \"in\", \"module\", \"next\", \"not\", \"or\",\n  \"redo\", \"rescue\", \"retry\", \"return\", \"self\", \"super\", \"then\", \"true\", \"undef\", \"unless\",\n  \"until\", \"when\", \"while\", \"yield\", \"nil\", \"raise\", \"throw\", \"catch\", \"fail\", \"loop\", \"callcc\",\n  \"caller\", \"lambda\", \"proc\", \"public\", \"protected\", \"private\", \"require\", \"load\",\n  \"require_relative\", \"extend\", \"autoload\", \"__END__\", \"__FILE__\", \"__LINE__\", \"__dir__\"\n], keywords = wordObj(keywordList);\n\nvar indentWords = wordObj([\"def\", \"class\", \"case\", \"for\", \"while\", \"until\", \"module\",\n                           \"catch\", \"loop\", \"proc\", \"begin\"]);\nvar dedentWords = wordObj([\"end\", \"until\"]);\nvar opening = {\"[\": \"]\", \"{\": \"}\", \"(\": \")\"};\nvar closing = {\"]\": \"[\", \"}\": \"{\", \")\": \"(\"};\n\nvar curPunc;\n\nfunction chain(newtok, stream, state) {\n  state.tokenize.push(newtok);\n  return newtok(stream, state);\n}\n\nfunction tokenBase(stream, state) {\n  if (stream.sol() && stream.match(\"=begin\") && stream.eol()) {\n    state.tokenize.push(readBlockComment);\n    return \"comment\";\n  }\n  if (stream.eatSpace()) return null;\n  var ch = stream.next(), m;\n  if (ch == \"`\" || ch == \"'\" || ch == '\"') {\n    return chain(readQuoted(ch, \"string\", ch == '\"' || ch == \"`\"), stream, state);\n  } else if (ch == \"/\") {\n    if (regexpAhead(stream))\n      return chain(readQuoted(ch, \"string.special\", true), stream, state);\n    else\n      return \"operator\";\n  } else if (ch == \"%\") {\n    var style = \"string\", embed = true;\n    if (stream.eat(\"s\")) style = \"atom\";\n    else if (stream.eat(/[WQ]/)) style = \"string\";\n    else if (stream.eat(/[r]/)) style = \"string.special\";\n    else if (stream.eat(/[wxq]/)) { style = \"string\"; embed = false; }\n    var delim = stream.eat(/[^\\w\\s=]/);\n    if (!delim) return \"operator\";\n    if (opening.propertyIsEnumerable(delim)) delim = opening[delim];\n    return chain(readQuoted(delim, style, embed, true), stream, state);\n  } else if (ch == \"#\") {\n    stream.skipToEnd();\n    return \"comment\";\n  } else if (ch == \"<\" && (m = stream.match(/^<([-~])[\\`\\\"\\']?([a-zA-Z_?]\\w*)[\\`\\\"\\']?(?:;|$)/))) {\n    return chain(readHereDoc(m[2], m[1]), stream, state);\n  } else if (ch == \"0\") {\n    if (stream.eat(\"x\")) stream.eatWhile(/[\\da-fA-F]/);\n    else if (stream.eat(\"b\")) stream.eatWhile(/[01]/);\n    else stream.eatWhile(/[0-7]/);\n    return \"number\";\n  } else if (/\\d/.test(ch)) {\n    stream.match(/^[\\d_]*(?:\\.[\\d_]+)?(?:[eE][+\\-]?[\\d_]+)?/);\n    return \"number\";\n  } else if (ch == \"?\") {\n    while (stream.match(/^\\\\[CM]-/)) {}\n    if (stream.eat(\"\\\\\")) stream.eatWhile(/\\w/);\n    else stream.next();\n    return \"string\";\n  } else if (ch == \":\") {\n    if (stream.eat(\"'\")) return chain(readQuoted(\"'\", \"atom\", false), stream, state);\n    if (stream.eat('\"')) return chain(readQuoted('\"', \"atom\", true), stream, state);\n\n    // :> :>> :< :<< are valid symbols\n    if (stream.eat(/[\\<\\>]/)) {\n      stream.eat(/[\\<\\>]/);\n      return \"atom\";\n    }\n\n    // :+ :- :/ :* :| :& :! are valid symbols\n    if (stream.eat(/[\\+\\-\\*\\/\\&\\|\\:\\!]/)) {\n      return \"atom\";\n    }\n\n    // Symbols can't start by a digit\n    if (stream.eat(/[a-zA-Z$@_\\xa1-\\uffff]/)) {\n      stream.eatWhile(/[\\w$\\xa1-\\uffff]/);\n      // Only one ? ! = is allowed and only as the last character\n      stream.eat(/[\\?\\!\\=]/);\n      return \"atom\";\n    }\n    return \"operator\";\n  } else if (ch == \"@\" && stream.match(/^@?[a-zA-Z_\\xa1-\\uffff]/)) {\n    stream.eat(\"@\");\n    stream.eatWhile(/[\\w\\xa1-\\uffff]/);\n    return \"propertyName\";\n  } else if (ch == \"$\") {\n    if (stream.eat(/[a-zA-Z_]/)) {\n      stream.eatWhile(/[\\w]/);\n    } else if (stream.eat(/\\d/)) {\n      stream.eat(/\\d/);\n    } else {\n      stream.next(); // Must be a special global like $: or $!\n    }\n    return \"variableName.special\";\n  } else if (/[a-zA-Z_\\xa1-\\uffff]/.test(ch)) {\n    stream.eatWhile(/[\\w\\xa1-\\uffff]/);\n    stream.eat(/[\\?\\!]/);\n    if (stream.eat(\":\")) return \"atom\";\n    return \"variable\";\n  } else if (ch == \"|\" && (state.varList || state.lastTok == \"{\" || state.lastTok == \"do\")) {\n    curPunc = \"|\";\n    return null;\n  } else if (/[\\(\\)\\[\\]{}\\\\;]/.test(ch)) {\n    curPunc = ch;\n    return null;\n  } else if (ch == \"-\" && stream.eat(\">\")) {\n    return \"operator\";\n  } else if (/[=+\\-\\/*:\\.^%<>~|]/.test(ch)) {\n    var more = stream.eatWhile(/[=+\\-\\/*:\\.^%<>~|]/);\n    if (ch == \".\" && !more) curPunc = \".\";\n    return \"operator\";\n  } else {\n    return null;\n  }\n}\n\nfunction regexpAhead(stream) {\n  var start = stream.pos, depth = 0, next, found = false, escaped = false\n  while ((next = stream.next()) != null) {\n    if (!escaped) {\n      if (\"[{(\".indexOf(next) > -1) {\n        depth++\n      } else if (\"]})\".indexOf(next) > -1) {\n        depth--\n        if (depth < 0) break\n      } else if (next == \"/\" && depth == 0) {\n        found = true\n        break\n      }\n      escaped = next == \"\\\\\"\n    } else {\n      escaped = false\n    }\n  }\n  stream.backUp(stream.pos - start)\n  return found\n}\n\nfunction tokenBaseUntilBrace(depth) {\n  if (!depth) depth = 1;\n  return function(stream, state) {\n    if (stream.peek() == \"}\") {\n      if (depth == 1) {\n        state.tokenize.pop();\n        return state.tokenize[state.tokenize.length-1](stream, state);\n      } else {\n        state.tokenize[state.tokenize.length - 1] = tokenBaseUntilBrace(depth - 1);\n      }\n    } else if (stream.peek() == \"{\") {\n      state.tokenize[state.tokenize.length - 1] = tokenBaseUntilBrace(depth + 1);\n    }\n    return tokenBase(stream, state);\n  };\n}\nfunction tokenBaseOnce() {\n  var alreadyCalled = false;\n  return function(stream, state) {\n    if (alreadyCalled) {\n      state.tokenize.pop();\n      return state.tokenize[state.tokenize.length-1](stream, state);\n    }\n    alreadyCalled = true;\n    return tokenBase(stream, state);\n  };\n}\nfunction readQuoted(quote, style, embed, unescaped) {\n  return function(stream, state) {\n    var escaped = false, ch;\n\n    if (state.context.type === 'read-quoted-paused') {\n      state.context = state.context.prev;\n      stream.eat(\"}\");\n    }\n\n    while ((ch = stream.next()) != null) {\n      if (ch == quote && (unescaped || !escaped)) {\n        state.tokenize.pop();\n        break;\n      }\n      if (embed && ch == \"#\" && !escaped) {\n        if (stream.eat(\"{\")) {\n          if (quote == \"}\") {\n            state.context = {prev: state.context, type: 'read-quoted-paused'};\n          }\n          state.tokenize.push(tokenBaseUntilBrace());\n          break;\n        } else if (/[@\\$]/.test(stream.peek())) {\n          state.tokenize.push(tokenBaseOnce());\n          break;\n        }\n      }\n      escaped = !escaped && ch == \"\\\\\";\n    }\n    return style;\n  };\n}\nfunction readHereDoc(phrase, mayIndent) {\n  return function(stream, state) {\n    if (mayIndent) stream.eatSpace()\n    if (stream.match(phrase)) state.tokenize.pop();\n    else stream.skipToEnd();\n    return \"string\";\n  };\n}\nfunction readBlockComment(stream, state) {\n  if (stream.sol() && stream.match(\"=end\") && stream.eol())\n    state.tokenize.pop();\n  stream.skipToEnd();\n  return \"comment\";\n}\n\nexport const ruby = {\n  name: \"ruby\",\n  startState: function(indentUnit) {\n    return {tokenize: [tokenBase],\n            indented: 0,\n            context: {type: \"top\", indented: -indentUnit},\n            continuedLine: false,\n            lastTok: null,\n            varList: false};\n  },\n\n  token: function(stream, state) {\n    curPunc = null;\n    if (stream.sol()) state.indented = stream.indentation();\n    var style = state.tokenize[state.tokenize.length-1](stream, state), kwtype;\n    var thisTok = curPunc;\n    if (style == \"variable\") {\n      var word = stream.current();\n      style = state.lastTok == \".\" ? \"property\"\n        : keywords.propertyIsEnumerable(stream.current()) ? \"keyword\"\n        : /^[A-Z]/.test(word) ? \"tag\"\n        : (state.lastTok == \"def\" || state.lastTok == \"class\" || state.varList) ? \"def\"\n        : \"variable\";\n      if (style == \"keyword\") {\n        thisTok = word;\n        if (indentWords.propertyIsEnumerable(word)) kwtype = \"indent\";\n        else if (dedentWords.propertyIsEnumerable(word)) kwtype = \"dedent\";\n        else if ((word == \"if\" || word == \"unless\") && stream.column() == stream.indentation())\n          kwtype = \"indent\";\n        else if (word == \"do\" && state.context.indented < state.indented)\n          kwtype = \"indent\";\n      }\n    }\n    if (curPunc || (style && style != \"comment\")) state.lastTok = thisTok;\n    if (curPunc == \"|\") state.varList = !state.varList;\n\n    if (kwtype == \"indent\" || /[\\(\\[\\{]/.test(curPunc))\n      state.context = {prev: state.context, type: curPunc || style, indented: state.indented};\n    else if ((kwtype == \"dedent\" || /[\\)\\]\\}]/.test(curPunc)) && state.context.prev)\n      state.context = state.context.prev;\n\n    if (stream.eol())\n      state.continuedLine = (curPunc == \"\\\\\" || style == \"operator\");\n    return style;\n  },\n\n  indent: function(state, textAfter, cx) {\n    if (state.tokenize[state.tokenize.length-1] != tokenBase) return null;\n    var firstChar = textAfter && textAfter.charAt(0);\n    var ct = state.context;\n    var closed = ct.type == closing[firstChar] ||\n        ct.type == \"keyword\" && /^(?:end|until|else|elsif|when|rescue)\\b/.test(textAfter);\n    return ct.indented + (closed ? 0 : cx.unit) +\n      (state.continuedLine ? cx.unit : 0);\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*(?:end|rescue|elsif|else|\\})$/,\n    commentTokens: {line: \"#\"},\n    autocomplete: keywordList\n  }\n};\n\n","var words = {};\nvar isDoubleOperatorSym = {\n  eq: 'operator',\n  lt: 'operator',\n  le: 'operator',\n  gt: 'operator',\n  ge: 'operator',\n  \"in\": 'operator',\n  ne: 'operator',\n  or: 'operator'\n};\nvar isDoubleOperatorChar = /(<=|>=|!=|<>)/;\nvar isSingleOperatorChar = /[=\\(:\\),{}.*<>+\\-\\/^\\[\\]]/;\n\n// Takes a string of words separated by spaces and adds them as\n// keys with the value of the first argument 'style'\nfunction define(style, string, context) {\n  if (context) {\n    var split = string.split(' ');\n    for (var i = 0; i < split.length; i++) {\n      words[split[i]] = {style: style, state: context};\n    }\n  }\n}\n//datastep\ndefine('def', 'stack pgm view source debug nesting nolist', ['inDataStep']);\ndefine('def', 'if while until for do do; end end; then else cancel', ['inDataStep']);\ndefine('def', 'label format _n_ _error_', ['inDataStep']);\ndefine('def', 'ALTER BUFNO BUFSIZE CNTLLEV COMPRESS DLDMGACTION ENCRYPT ENCRYPTKEY EXTENDOBSCOUNTER GENMAX GENNUM INDEX LABEL OBSBUF OUTREP PW PWREQ READ REPEMPTY REPLACE REUSE ROLE SORTEDBY SPILL TOBSNO TYPE WRITE FILECLOSE FIRSTOBS IN OBS POINTOBS WHERE WHEREUP IDXNAME IDXWHERE DROP KEEP RENAME', ['inDataStep']);\ndefine('def', 'filevar finfo finv fipname fipnamel fipstate first firstobs floor', ['inDataStep']);\ndefine('def', 'varfmt varinfmt varlabel varlen varname varnum varray varrayx vartype verify vformat vformatd vformatdx vformatn vformatnx vformatw vformatwx vformatx vinarray vinarrayx vinformat vinformatd vinformatdx vinformatn vinformatnx vinformatw vinformatwx vinformatx vlabel vlabelx vlength vlengthx vname vnamex vnferr vtype vtypex weekday', ['inDataStep']);\ndefine('def', 'zipfips zipname zipnamel zipstate', ['inDataStep']);\ndefine('def', 'put putc putn', ['inDataStep']);\ndefine('builtin', 'data run', ['inDataStep']);\n\n\n//proc\ndefine('def', 'data', ['inProc']);\n\n// flow control for macros\ndefine('def', '%if %end %end; %else %else; %do %do; %then', ['inMacro']);\n\n//everywhere\ndefine('builtin', 'proc run; quit; libname filename %macro %mend option options', ['ALL']);\n\ndefine('def', 'footnote title libname ods', ['ALL']);\ndefine('def', '%let %put %global %sysfunc %eval ', ['ALL']);\n// automatic macro variables http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a003167023.htm\ndefine('variable', '&sysbuffr &syscc &syscharwidth &syscmd &sysdate &sysdate9 &sysday &sysdevic &sysdmg &sysdsn &sysencoding &sysenv &syserr &syserrortext &sysfilrc &syshostname &sysindex &sysinfo &sysjobid &syslast &syslckrc &syslibrc &syslogapplname &sysmacroname &sysmenv &sysmsg &sysncpu &sysodspath &sysparm &syspbuff &sysprocessid &sysprocessname &sysprocname &sysrc &sysscp &sysscpl &sysscpl &syssite &sysstartid &sysstartname &systcpiphostname &systime &sysuserid &sysver &sysvlong &sysvlong4 &syswarningtext', ['ALL']);\n\n//footnote[1-9]? title[1-9]?\n\n//options statement\ndefine('def', 'source2 nosource2 page pageno pagesize', ['ALL']);\n\n//proc and datastep\ndefine('def', '_all_ _character_ _cmd_ _freq_ _i_ _infile_ _last_ _msg_ _null_ _numeric_ _temporary_ _type_ abort abs addr adjrsq airy alpha alter altlog altprint and arcos array arsin as atan attrc attrib attrn authserver autoexec awscontrol awsdef awsmenu awsmenumerge awstitle backward band base betainv between blocksize blshift bnot bor brshift bufno bufsize bxor by byerr byline byte calculated call cards cards4 catcache cbufno cdf ceil center cexist change chisq cinv class cleanup close cnonct cntllev coalesce codegen col collate collin column comamid comaux1 comaux2 comdef compbl compound compress config continue convert cos cosh cpuid create cross crosstab css curobs cv daccdb daccdbsl daccsl daccsyd dacctab dairy datalines datalines4 datejul datepart datetime day dbcslang dbcstype dclose ddfm ddm delete delimiter depdb depdbsl depsl depsyd deptab dequote descending descript design= device dflang dhms dif digamma dim dinfo display distinct dkricond dkrocond dlm dnum do dopen doptname doptnum dread drop dropnote dsname dsnferr echo else emaildlg emailid emailpw emailserver emailsys encrypt end endsas engine eof eov erf erfc error errorcheck errors exist exp fappend fclose fcol fdelete feedback fetch fetchobs fexist fget file fileclose fileexist filefmt filename fileref  fmterr fmtsearch fnonct fnote font fontalias  fopen foptname foptnum force formatted formchar formdelim formdlim forward fpoint fpos fput fread frewind frlen from fsep fuzz fwrite gaminv gamma getoption getvarc getvarn go goto group gwindow hbar hbound helpenv helploc hms honorappearance hosthelp hostprint hour hpct html hvar ibessel ibr id if index indexc indexw initcmd initstmt inner input inputc inputn inr insert int intck intnx into intrr invaliddata irr is jbessel join juldate keep kentb kurtosis label lag last lbound leave left length levels lgamma lib  library libref line linesize link list log log10 log2 logpdf logpmf logsdf lostcard lowcase lrecl ls macro macrogen maps mautosource max maxdec maxr mdy mean measures median memtype merge merror min minute missing missover mlogic mod mode model modify month mopen mort mprint mrecall msglevel msymtabmax mvarsize myy n nest netpv new news nmiss no nobatch nobs nocaps nocardimage nocenter nocharcode nocmdmac nocol nocum nodate nodbcs nodetails nodmr nodms nodmsbatch nodup nodupkey noduplicates noechoauto noequals noerrorabend noexitwindows nofullstimer noicon noimplmac noint nolist noloadlist nomiss nomlogic nomprint nomrecall nomsgcase nomstored nomultenvappl nonotes nonumber noobs noovp nopad nopercent noprint noprintinit normal norow norsasuser nosetinit  nosplash nosymbolgen note notes notitle notitles notsorted noverbose noxsync noxwait npv null number numkeys nummousekeys nway obs  on open     order ordinal otherwise out outer outp= output over ovp p(1 5 10 25 50 75 90 95 99) pad pad2  paired parm parmcards path pathdll pathname pdf peek peekc pfkey pmf point poisson poke position printer probbeta probbnml probchi probf probgam probhypr probit probnegb probnorm probsig probt procleave prt ps  pw pwreq qtr quote r ranbin rancau random ranexp rangam range ranks rannor ranpoi rantbl rantri ranuni rcorr read recfm register regr remote remove rename repeat repeated replace resolve retain return reuse reverse rewind right round rsquare rtf rtrace rtraceloc s s2 samploc sasautos sascontrol sasfrscr sasmsg sasmstore sasscript sasuser saving scan sdf second select selection separated seq serror set setcomm setot sign simple sin sinh siteinfo skewness skip sle sls sortedby sortpgm sortseq sortsize soundex  spedis splashlocation split spool sqrt start std stderr stdin stfips stimer stname stnamel stop stopover sub subgroup subpopn substr sum sumwgt symbol symbolgen symget symput sysget sysin sysleave sysmsg sysparm sysprint sysprintfont sysprod sysrc system t table tables tan tanh tapeclose tbufsize terminal test then timepart tinv  tnonct to today tol tooldef totper transformout translate trantab tranwrd trigamma trim trimn trunc truncover type unformatted uniform union until upcase update user usericon uss validate value var  weight when where while wincharset window work workinit workterm write wsum xsync xwait yearcutoff yes yyq  min max', ['inDataStep', 'inProc']);\ndefine('operator', 'and not ', ['inDataStep', 'inProc']);\n\n// Main function\nfunction tokenize(stream, state) {\n  // Finally advance the stream\n  var ch = stream.next();\n\n  // BLOCKCOMMENT\n  if (ch === '/' && stream.eat('*')) {\n    state.continueComment = true;\n    return \"comment\";\n  } else if (state.continueComment === true) { // in comment block\n    //comment ends at the beginning of the line\n    if (ch === '*' && stream.peek() === '/') {\n      stream.next();\n      state.continueComment = false;\n    } else if (stream.skipTo('*')) { //comment is potentially later in line\n      stream.skipTo('*');\n      stream.next();\n      if (stream.eat('/'))\n        state.continueComment = false;\n    } else {\n      stream.skipToEnd();\n    }\n    return \"comment\";\n  }\n\n  if (ch == \"*\" && stream.column() == stream.indentation()) {\n    stream.skipToEnd()\n    return \"comment\"\n  }\n\n  // DoubleOperator match\n  var doubleOperator = ch + stream.peek();\n\n  if ((ch === '\"' || ch === \"'\") && !state.continueString) {\n    state.continueString = ch\n    return \"string\"\n  } else if (state.continueString) {\n    if (state.continueString == ch) {\n      state.continueString = null;\n    } else if (stream.skipTo(state.continueString)) {\n      // quote found on this line\n      stream.next();\n      state.continueString = null;\n    } else {\n      stream.skipToEnd();\n    }\n    return \"string\";\n  } else if (state.continueString !== null && stream.eol()) {\n    stream.skipTo(state.continueString) || stream.skipToEnd();\n    return \"string\";\n  } else if (/[\\d\\.]/.test(ch)) { //find numbers\n    if (ch === \".\")\n      stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n    else if (ch === \"0\")\n      stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n    else\n      stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n    return \"number\";\n  } else if (isDoubleOperatorChar.test(ch + stream.peek())) { // TWO SYMBOL TOKENS\n    stream.next();\n    return \"operator\";\n  } else if (isDoubleOperatorSym.hasOwnProperty(doubleOperator)) {\n    stream.next();\n    if (stream.peek() === ' ')\n      return isDoubleOperatorSym[doubleOperator.toLowerCase()];\n  } else if (isSingleOperatorChar.test(ch)) { // SINGLE SYMBOL TOKENS\n    return \"operator\";\n  }\n\n  // Matches one whole word -- even if the word is a character\n  var word;\n  if (stream.match(/[%&;\\w]+/, false) != null) {\n    word = ch + stream.match(/[%&;\\w]+/, true);\n    if (/&/.test(word)) return 'variable'\n  } else {\n    word = ch;\n  }\n  // the word after DATA PROC or MACRO\n  if (state.nextword) {\n    stream.match(/[\\w]+/);\n    // match memname.libname\n    if (stream.peek() === '.') stream.skipTo(' ');\n    state.nextword = false;\n    return 'variableName.special';\n  }\n\n  word = word.toLowerCase()\n  // Are we in a DATA Step?\n  if (state.inDataStep) {\n    if (word === 'run;' || stream.match(/run\\s;/)) {\n      state.inDataStep = false;\n      return 'builtin';\n    }\n    // variable formats\n    if ((word) && stream.next() === '.') {\n      //either a format or libname.memname\n      if (/\\w/.test(stream.peek())) return 'variableName.special';\n      else return 'variable';\n    }\n    // do we have a DATA Step keyword\n    if (word && words.hasOwnProperty(word) &&\n        (words[word].state.indexOf(\"inDataStep\") !== -1 ||\n         words[word].state.indexOf(\"ALL\") !== -1)) {\n      //backup to the start of the word\n      if (stream.start < stream.pos)\n        stream.backUp(stream.pos - stream.start);\n      //advance the length of the word and return\n      for (var i = 0; i < word.length; ++i) stream.next();\n      return words[word].style;\n    }\n  }\n  // Are we in an Proc statement?\n  if (state.inProc) {\n    if (word === 'run;' || word === 'quit;') {\n      state.inProc = false;\n      return 'builtin';\n    }\n    // do we have a proc keyword\n    if (word && words.hasOwnProperty(word) &&\n        (words[word].state.indexOf(\"inProc\") !== -1 ||\n         words[word].state.indexOf(\"ALL\") !== -1)) {\n      stream.match(/[\\w]+/);\n      return words[word].style;\n    }\n  }\n  // Are we in a Macro statement?\n  if (state.inMacro) {\n    if (word === '%mend') {\n      if (stream.peek() === ';') stream.next();\n      state.inMacro = false;\n      return 'builtin';\n    }\n    if (word && words.hasOwnProperty(word) &&\n        (words[word].state.indexOf(\"inMacro\") !== -1 ||\n         words[word].state.indexOf(\"ALL\") !== -1)) {\n      stream.match(/[\\w]+/);\n      return words[word].style;\n    }\n\n    return 'atom';\n  }\n  // Do we have Keywords specific words?\n  if (word && words.hasOwnProperty(word)) {\n    // Negates the initial next()\n    stream.backUp(1);\n    // Actually move the stream\n    stream.match(/[\\w]+/);\n    if (word === 'data' && /=/.test(stream.peek()) === false) {\n      state.inDataStep = true;\n      state.nextword = true;\n      return 'builtin';\n    }\n    if (word === 'proc') {\n      state.inProc = true;\n      state.nextword = true;\n      return 'builtin';\n    }\n    if (word === '%macro') {\n      state.inMacro = true;\n      state.nextword = true;\n      return 'builtin';\n    }\n    if (/title[1-9]/.test(word)) return 'def';\n\n    if (word === 'footnote') {\n      stream.eat(/[1-9]/);\n      return 'def';\n    }\n\n    // Returns their value as state in the prior define methods\n    if (state.inDataStep === true && words[word].state.indexOf(\"inDataStep\") !== -1)\n      return words[word].style;\n    if (state.inProc === true && words[word].state.indexOf(\"inProc\") !== -1)\n      return words[word].style;\n    if (state.inMacro === true && words[word].state.indexOf(\"inMacro\") !== -1)\n      return words[word].style;\n    if (words[word].state.indexOf(\"ALL\") !== -1)\n      return words[word].style;\n    return null;\n  }\n  // Unrecognized syntax\n  return null;\n}\n\nexport const sas = {\n  name: \"sas\",\n  startState: function () {\n    return {\n      inDataStep: false,\n      inProc: false,\n      inMacro: false,\n      nextword: false,\n      continueString: null,\n      continueComment: false\n    };\n  },\n  token: function (stream, state) {\n    // Strip the spaces, but regex will account for them either way\n    if (stream.eatSpace()) return null;\n    // Go through the main process\n    return tokenize(stream, state);\n  },\n\n  languageData: {\n    commentTokens: {block: {open: \"/*\", close: \"*/\"}}\n  }\n};\n","var BUILTIN = \"builtin\", COMMENT = \"comment\", STRING = \"string\",\n    SYMBOL = \"symbol\", ATOM = \"atom\", NUMBER = \"number\", BRACKET = \"bracket\";\nvar INDENT_WORD_SKIP = 2;\n\nfunction makeKeywords(str) {\n  var obj = {}, words = str.split(\" \");\n  for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n  return obj;\n}\n\nvar keywords = makeKeywords(\"λ case-lambda call/cc class cond-expand define-class define-values exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax define-macro defmacro delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci<? char-ci=? char-ci>=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char<? char=? char>=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt #f floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci<? string-ci=? string-ci>=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string<? string=? string>=? string>? string? substring symbol->string symbol? #t tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?\");\nvar indentKeys = makeKeywords(\"define let letrec let* lambda define-macro defmacro let-syntax letrec-syntax let-values let*-values define-syntax syntax-rules define-values when unless\");\n\nfunction stateStack(indent, type, prev) { // represents a state stack object\n  this.indent = indent;\n  this.type = type;\n  this.prev = prev;\n}\n\nfunction pushStack(state, indent, type) {\n  state.indentStack = new stateStack(indent, type, state.indentStack);\n}\n\nfunction popStack(state) {\n  state.indentStack = state.indentStack.prev;\n}\n\nvar binaryMatcher = new RegExp(/^(?:[-+]i|[-+][01]+#*(?:\\/[01]+#*)?i|[-+]?[01]+#*(?:\\/[01]+#*)?@[-+]?[01]+#*(?:\\/[01]+#*)?|[-+]?[01]+#*(?:\\/[01]+#*)?[-+](?:[01]+#*(?:\\/[01]+#*)?)?i|[-+]?[01]+#*(?:\\/[01]+#*)?)(?=[()\\s;\"]|$)/i);\nvar octalMatcher = new RegExp(/^(?:[-+]i|[-+][0-7]+#*(?:\\/[0-7]+#*)?i|[-+]?[0-7]+#*(?:\\/[0-7]+#*)?@[-+]?[0-7]+#*(?:\\/[0-7]+#*)?|[-+]?[0-7]+#*(?:\\/[0-7]+#*)?[-+](?:[0-7]+#*(?:\\/[0-7]+#*)?)?i|[-+]?[0-7]+#*(?:\\/[0-7]+#*)?)(?=[()\\s;\"]|$)/i);\nvar hexMatcher = new RegExp(/^(?:[-+]i|[-+][\\da-f]+#*(?:\\/[\\da-f]+#*)?i|[-+]?[\\da-f]+#*(?:\\/[\\da-f]+#*)?@[-+]?[\\da-f]+#*(?:\\/[\\da-f]+#*)?|[-+]?[\\da-f]+#*(?:\\/[\\da-f]+#*)?[-+](?:[\\da-f]+#*(?:\\/[\\da-f]+#*)?)?i|[-+]?[\\da-f]+#*(?:\\/[\\da-f]+#*)?)(?=[()\\s;\"]|$)/i);\nvar decimalMatcher = new RegExp(/^(?:[-+]i|[-+](?:(?:(?:\\d+#+\\.?#*|\\d+\\.\\d*#*|\\.\\d+#*|\\d+)(?:[esfdl][-+]?\\d+)?)|\\d+#*\\/\\d+#*)i|[-+]?(?:(?:(?:\\d+#+\\.?#*|\\d+\\.\\d*#*|\\.\\d+#*|\\d+)(?:[esfdl][-+]?\\d+)?)|\\d+#*\\/\\d+#*)@[-+]?(?:(?:(?:\\d+#+\\.?#*|\\d+\\.\\d*#*|\\.\\d+#*|\\d+)(?:[esfdl][-+]?\\d+)?)|\\d+#*\\/\\d+#*)|[-+]?(?:(?:(?:\\d+#+\\.?#*|\\d+\\.\\d*#*|\\.\\d+#*|\\d+)(?:[esfdl][-+]?\\d+)?)|\\d+#*\\/\\d+#*)[-+](?:(?:(?:\\d+#+\\.?#*|\\d+\\.\\d*#*|\\.\\d+#*|\\d+)(?:[esfdl][-+]?\\d+)?)|\\d+#*\\/\\d+#*)?i|(?:(?:(?:\\d+#+\\.?#*|\\d+\\.\\d*#*|\\.\\d+#*|\\d+)(?:[esfdl][-+]?\\d+)?)|\\d+#*\\/\\d+#*))(?=[()\\s;\"]|$)/i);\n\nfunction isBinaryNumber (stream) {\n  return stream.match(binaryMatcher);\n}\n\nfunction isOctalNumber (stream) {\n  return stream.match(octalMatcher);\n}\n\nfunction isDecimalNumber (stream, backup) {\n  if (backup === true) {\n    stream.backUp(1);\n  }\n  return stream.match(decimalMatcher);\n}\n\nfunction isHexNumber (stream) {\n  return stream.match(hexMatcher);\n}\n\nfunction processEscapedSequence(stream, options) {\n  var next, escaped = false;\n  while ((next = stream.next()) != null) {\n    if (next == options.token && !escaped) {\n      options.state.mode = false;\n      break;\n    }\n    escaped = !escaped && next == \"\\\\\";\n  }\n}\n\nexport const scheme = {\n  name: \"scheme\",\n  startState: function () {\n    return {\n      indentStack: null,\n      indentation: 0,\n      mode: false,\n      sExprComment: false,\n      sExprQuote: false\n    };\n  },\n\n  token: function (stream, state) {\n    if (state.indentStack == null && stream.sol()) {\n      // update indentation, but only if indentStack is empty\n      state.indentation = stream.indentation();\n    }\n\n    // skip spaces\n    if (stream.eatSpace()) {\n      return null;\n    }\n    var returnType = null;\n\n    switch(state.mode){\n    case \"string\": // multi-line string parsing mode\n      processEscapedSequence(stream, {\n        token: \"\\\"\",\n        state: state\n      });\n      returnType = STRING; // continue on in scheme-string mode\n      break;\n    case \"symbol\": // escape symbol\n      processEscapedSequence(stream, {\n        token: \"|\",\n        state: state\n      });\n      returnType = SYMBOL; // continue on in scheme-symbol mode\n      break;\n    case \"comment\": // comment parsing mode\n      var next, maybeEnd = false;\n      while ((next = stream.next()) != null) {\n        if (next == \"#\" && maybeEnd) {\n\n          state.mode = false;\n          break;\n        }\n        maybeEnd = (next == \"|\");\n      }\n      returnType = COMMENT;\n      break;\n    case \"s-expr-comment\": // s-expr commenting mode\n      state.mode = false;\n      if(stream.peek() == \"(\" || stream.peek() == \"[\"){\n        // actually start scheme s-expr commenting mode\n        state.sExprComment = 0;\n      }else{\n        // if not we just comment the entire of the next token\n        stream.eatWhile(/[^\\s\\(\\)\\[\\]]/); // eat symbol atom\n        returnType = COMMENT;\n        break;\n      }\n    default: // default parsing mode\n      var ch = stream.next();\n\n      if (ch == \"\\\"\") {\n        state.mode = \"string\";\n        returnType = STRING;\n\n      } else if (ch == \"'\") {\n        if (stream.peek() == \"(\" || stream.peek() == \"[\"){\n          if (typeof state.sExprQuote != \"number\") {\n            state.sExprQuote = 0;\n          } // else already in a quoted expression\n          returnType = ATOM;\n        } else {\n          stream.eatWhile(/[\\w_\\-!$%&*+\\.\\/:<=>?@\\^~]/);\n          returnType = ATOM;\n        }\n      } else if (ch == '|') {\n        state.mode = \"symbol\";\n        returnType = SYMBOL;\n      } else if (ch == '#') {\n        if (stream.eat(\"|\")) {                    // Multi-line comment\n          state.mode = \"comment\"; // toggle to comment mode\n          returnType = COMMENT;\n        } else if (stream.eat(/[tf]/i)) {            // #t/#f (atom)\n          returnType = ATOM;\n        } else if (stream.eat(';')) {                // S-Expr comment\n          state.mode = \"s-expr-comment\";\n          returnType = COMMENT;\n        } else {\n          var numTest = null, hasExactness = false, hasRadix = true;\n          if (stream.eat(/[ei]/i)) {\n            hasExactness = true;\n          } else {\n            stream.backUp(1);       // must be radix specifier\n          }\n          if (stream.match(/^#b/i)) {\n            numTest = isBinaryNumber;\n          } else if (stream.match(/^#o/i)) {\n            numTest = isOctalNumber;\n          } else if (stream.match(/^#x/i)) {\n            numTest = isHexNumber;\n          } else if (stream.match(/^#d/i)) {\n            numTest = isDecimalNumber;\n          } else if (stream.match(/^[-+0-9.]/, false)) {\n            hasRadix = false;\n            numTest = isDecimalNumber;\n            // re-consume the initial # if all matches failed\n          } else if (!hasExactness) {\n            stream.eat('#');\n          }\n          if (numTest != null) {\n            if (hasRadix && !hasExactness) {\n              // consume optional exactness after radix\n              stream.match(/^#[ei]/i);\n            }\n            if (numTest(stream))\n              returnType = NUMBER;\n          }\n        }\n      } else if (/^[-+0-9.]/.test(ch) && isDecimalNumber(stream, true)) { // match non-prefixed number, must be decimal\n        returnType = NUMBER;\n      } else if (ch == \";\") { // comment\n        stream.skipToEnd(); // rest of the line is a comment\n        returnType = COMMENT;\n      } else if (ch == \"(\" || ch == \"[\") {\n        var keyWord = ''; var indentTemp = stream.column(), letter;\n        /**\n           Either\n           (indent-word ..\n           (non-indent-word ..\n           (;something else, bracket, etc.\n        */\n\n        while ((letter = stream.eat(/[^\\s\\(\\[\\;\\)\\]]/)) != null) {\n          keyWord += letter;\n        }\n\n        if (keyWord.length > 0 && indentKeys.propertyIsEnumerable(keyWord)) { // indent-word\n\n          pushStack(state, indentTemp + INDENT_WORD_SKIP, ch);\n        } else { // non-indent word\n          // we continue eating the spaces\n          stream.eatSpace();\n          if (stream.eol() || stream.peek() == \";\") {\n            // nothing significant after\n            // we restart indentation 1 space after\n            pushStack(state, indentTemp + 1, ch);\n          } else {\n            pushStack(state, indentTemp + stream.current().length, ch); // else we match\n          }\n        }\n        stream.backUp(stream.current().length - 1); // undo all the eating\n\n        if(typeof state.sExprComment == \"number\") state.sExprComment++;\n        if(typeof state.sExprQuote == \"number\") state.sExprQuote++;\n\n        returnType = BRACKET;\n      } else if (ch == \")\" || ch == \"]\") {\n        returnType = BRACKET;\n        if (state.indentStack != null && state.indentStack.type == (ch == \")\" ? \"(\" : \"[\")) {\n          popStack(state);\n\n          if(typeof state.sExprComment == \"number\"){\n            if(--state.sExprComment == 0){\n              returnType = COMMENT; // final closing bracket\n              state.sExprComment = false; // turn off s-expr commenting mode\n            }\n          }\n          if(typeof state.sExprQuote == \"number\"){\n            if(--state.sExprQuote == 0){\n              returnType = ATOM; // final closing bracket\n              state.sExprQuote = false; // turn off s-expr quote mode\n            }\n          }\n        }\n      } else {\n        stream.eatWhile(/[\\w_\\-!$%&*+\\.\\/:<=>?@\\^~]/);\n\n        if (keywords && keywords.propertyIsEnumerable(stream.current())) {\n          returnType = BUILTIN;\n        } else returnType = \"variable\";\n      }\n    }\n    return (typeof state.sExprComment == \"number\") ? COMMENT : ((typeof state.sExprQuote == \"number\") ? ATOM : returnType);\n  },\n\n  indent: function (state) {\n    if (state.indentStack == null) return state.indentation;\n    return state.indentStack.indent;\n  },\n\n  languageData: {\n    closeBrackets: {brackets: [\"(\", \"[\", \"{\", '\"']},\n    commentTokens: {line: \";;\"}\n  }\n};\n","var words = {};\nfunction define(style, dict) {\n  for(var i = 0; i < dict.length; i++) {\n    words[dict[i]] = style;\n  }\n};\n\nvar commonAtoms = [\"true\", \"false\"];\nvar commonKeywords = [\"if\", \"then\", \"do\", \"else\", \"elif\", \"while\", \"until\", \"for\", \"in\", \"esac\", \"fi\",\n                      \"fin\", \"fil\", \"done\", \"exit\", \"set\", \"unset\", \"export\", \"function\"];\nvar commonCommands = [\"ab\", \"awk\", \"bash\", \"beep\", \"cat\", \"cc\", \"cd\", \"chown\", \"chmod\", \"chroot\", \"clear\",\n                      \"cp\", \"curl\", \"cut\", \"diff\", \"echo\", \"find\", \"gawk\", \"gcc\", \"get\", \"git\", \"grep\", \"hg\", \"kill\", \"killall\",\n                      \"ln\", \"ls\", \"make\", \"mkdir\", \"openssl\", \"mv\", \"nc\", \"nl\", \"node\", \"npm\", \"ping\", \"ps\", \"restart\", \"rm\",\n                      \"rmdir\", \"sed\", \"service\", \"sh\", \"shopt\", \"shred\", \"source\", \"sort\", \"sleep\", \"ssh\", \"start\", \"stop\",\n                      \"su\", \"sudo\", \"svn\", \"tee\", \"telnet\", \"top\", \"touch\", \"vi\", \"vim\", \"wall\", \"wc\", \"wget\", \"who\", \"write\",\n                      \"yes\", \"zsh\"];\n\ndefine('atom', commonAtoms);\ndefine('keyword', commonKeywords);\ndefine('builtin', commonCommands);\n\nfunction tokenBase(stream, state) {\n  if (stream.eatSpace()) return null;\n\n  var sol = stream.sol();\n  var ch = stream.next();\n\n  if (ch === '\\\\') {\n    stream.next();\n    return null;\n  }\n  if (ch === '\\'' || ch === '\"' || ch === '`') {\n    state.tokens.unshift(tokenString(ch, ch === \"`\" ? \"quote\" : \"string\"));\n    return tokenize(stream, state);\n  }\n  if (ch === '#') {\n    if (sol && stream.eat('!')) {\n      stream.skipToEnd();\n      return 'meta'; // 'comment'?\n    }\n    stream.skipToEnd();\n    return 'comment';\n  }\n  if (ch === '$') {\n    state.tokens.unshift(tokenDollar);\n    return tokenize(stream, state);\n  }\n  if (ch === '+' || ch === '=') {\n    return 'operator';\n  }\n  if (ch === '-') {\n    stream.eat('-');\n    stream.eatWhile(/\\w/);\n    return 'attribute';\n  }\n  if (ch == \"<\") {\n    if (stream.match(\"<<\")) return \"operator\"\n    var heredoc = stream.match(/^<-?\\s*(?:['\"]([^'\"]*)['\"]|([^'\"\\s]*))/)\n    if (heredoc) {\n      state.tokens.unshift(tokenHeredoc(heredoc[1] || heredoc[2]))\n      return 'string.special'\n    }\n  }\n  if (/\\d/.test(ch)) {\n    stream.eatWhile(/\\d/);\n    if(stream.eol() || !/\\w/.test(stream.peek())) {\n      return 'number';\n    }\n  }\n  stream.eatWhile(/[\\w-]/);\n  var cur = stream.current();\n  if (stream.peek() === '=' && /\\w+/.test(cur)) return 'def';\n  return words.hasOwnProperty(cur) ? words[cur] : null;\n}\n\nfunction tokenString(quote, style) {\n  var close = quote == \"(\" ? \")\" : quote == \"{\" ? \"}\" : quote\n  return function(stream, state) {\n    var next, escaped = false;\n    while ((next = stream.next()) != null) {\n      if (next === close && !escaped) {\n        state.tokens.shift();\n        break;\n      } else if (next === '$' && !escaped && quote !== \"'\" && stream.peek() != close) {\n        escaped = true;\n        stream.backUp(1);\n        state.tokens.unshift(tokenDollar);\n        break;\n      } else if (!escaped && quote !== close && next === quote) {\n        state.tokens.unshift(tokenString(quote, style))\n        return tokenize(stream, state)\n      } else if (!escaped && /['\"]/.test(next) && !/['\"]/.test(quote)) {\n        state.tokens.unshift(tokenStringStart(next, \"string\"));\n        stream.backUp(1);\n        break;\n      }\n      escaped = !escaped && next === '\\\\';\n    }\n    return style;\n  };\n};\n\nfunction tokenStringStart(quote, style) {\n  return function(stream, state) {\n    state.tokens[0] = tokenString(quote, style)\n    stream.next()\n    return tokenize(stream, state)\n  }\n}\n\nvar tokenDollar = function(stream, state) {\n  if (state.tokens.length > 1) stream.eat('$');\n  var ch = stream.next()\n  if (/['\"({]/.test(ch)) {\n    state.tokens[0] = tokenString(ch, ch == \"(\" ? \"quote\" : ch == \"{\" ? \"def\" : \"string\");\n    return tokenize(stream, state);\n  }\n  if (!/\\d/.test(ch)) stream.eatWhile(/\\w/);\n  state.tokens.shift();\n  return 'def';\n};\n\nfunction tokenHeredoc(delim) {\n  return function(stream, state) {\n    if (stream.sol() && stream.string == delim) state.tokens.shift()\n    stream.skipToEnd()\n    return \"string.special\"\n  }\n}\n\nfunction tokenize(stream, state) {\n  return (state.tokens[0] || tokenBase) (stream, state);\n};\n\nexport const shell = {\n  name: \"shell\",\n  startState: function() {return {tokens:[]};},\n  token: function(stream, state) {\n    return tokenize(stream, state);\n  },\n  languageData: {\n    autocomplete: commonAtoms.concat(commonKeywords, commonCommands),\n    closeBrackets: {brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"`\"]},\n    commentTokens: {line: \"#\"}\n  }\n};\n","function words(str) {\n  var obj = {}, words = str.split(\" \");\n  for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n  return obj;\n}\n\nvar keywords = words(\"if elsif else stop require\");\nvar atoms = words(\"true false not\");\n\nfunction tokenBase(stream, state) {\n\n  var ch = stream.next();\n  if (ch == \"/\" && stream.eat(\"*\")) {\n    state.tokenize = tokenCComment;\n    return tokenCComment(stream, state);\n  }\n\n  if (ch === '#') {\n    stream.skipToEnd();\n    return \"comment\";\n  }\n\n  if (ch == \"\\\"\") {\n    state.tokenize = tokenString(ch);\n    return state.tokenize(stream, state);\n  }\n\n  if (ch == \"(\") {\n    state._indent.push(\"(\");\n    // add virtual angel wings so that editor behaves...\n    // ...more sane incase of broken brackets\n    state._indent.push(\"{\");\n    return null;\n  }\n\n  if (ch === \"{\") {\n    state._indent.push(\"{\");\n    return null;\n  }\n\n  if (ch == \")\")  {\n    state._indent.pop();\n    state._indent.pop();\n  }\n\n  if (ch === \"}\") {\n    state._indent.pop();\n    return null;\n  }\n\n  if (ch == \",\")\n    return null;\n\n  if (ch == \";\")\n    return null;\n\n\n  if (/[{}\\(\\),;]/.test(ch))\n    return null;\n\n  // 1*DIGIT \"K\" / \"M\" / \"G\"\n  if (/\\d/.test(ch)) {\n    stream.eatWhile(/[\\d]/);\n    stream.eat(/[KkMmGg]/);\n    return \"number\";\n  }\n\n  // \":\" (ALPHA / \"_\") *(ALPHA / DIGIT / \"_\")\n  if (ch == \":\") {\n    stream.eatWhile(/[a-zA-Z_]/);\n    stream.eatWhile(/[a-zA-Z0-9_]/);\n\n    return \"operator\";\n  }\n\n  stream.eatWhile(/\\w/);\n  var cur = stream.current();\n\n  // \"text:\" *(SP / HTAB) (hash-comment / CRLF)\n  // *(multiline-literal / multiline-dotstart)\n  // \".\" CRLF\n  if ((cur == \"text\") && stream.eat(\":\"))\n  {\n    state.tokenize = tokenMultiLineString;\n    return \"string\";\n  }\n\n  if (keywords.propertyIsEnumerable(cur))\n    return \"keyword\";\n\n  if (atoms.propertyIsEnumerable(cur))\n    return \"atom\";\n\n  return null;\n}\n\nfunction tokenMultiLineString(stream, state)\n{\n  state._multiLineString = true;\n  // the first line is special it may contain a comment\n  if (!stream.sol()) {\n    stream.eatSpace();\n\n    if (stream.peek() == \"#\") {\n      stream.skipToEnd();\n      return \"comment\";\n    }\n\n    stream.skipToEnd();\n    return \"string\";\n  }\n\n  if ((stream.next() == \".\")  && (stream.eol()))\n  {\n    state._multiLineString = false;\n    state.tokenize = tokenBase;\n  }\n\n  return \"string\";\n}\n\nfunction tokenCComment(stream, state) {\n  var maybeEnd = false, ch;\n  while ((ch = stream.next()) != null) {\n    if (maybeEnd && ch == \"/\") {\n      state.tokenize = tokenBase;\n      break;\n    }\n    maybeEnd = (ch == \"*\");\n  }\n  return \"comment\";\n}\n\nfunction tokenString(quote) {\n  return function(stream, state) {\n    var escaped = false, ch;\n    while ((ch = stream.next()) != null) {\n      if (ch == quote && !escaped)\n        break;\n      escaped = !escaped && ch == \"\\\\\";\n    }\n    if (!escaped) state.tokenize = tokenBase;\n    return \"string\";\n  };\n}\n\nexport const sieve = {\n  name: \"sieve\",\n  startState: function(base) {\n    return {tokenize: tokenBase,\n            baseIndent: base || 0,\n            _indent: []};\n  },\n\n  token: function(stream, state) {\n    if (stream.eatSpace())\n      return null;\n\n    return (state.tokenize || tokenBase)(stream, state);\n  },\n\n  indent: function(state, _textAfter, cx) {\n    var length = state._indent.length;\n    if (_textAfter && (_textAfter[0] == \"}\"))\n      length--;\n\n    if (length <0)\n      length = 0;\n\n    return length * cx.unit;\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*\\}$/\n  }\n};\n","var specialChars = /[+\\-\\/\\\\*~<>=@%|&?!.,:;^]/;\nvar keywords = /true|false|nil|self|super|thisContext/;\n\nvar Context = function(tokenizer, parent) {\n  this.next = tokenizer;\n  this.parent = parent;\n};\n\nvar Token = function(name, context, eos) {\n  this.name = name;\n  this.context = context;\n  this.eos = eos;\n};\n\nvar State = function() {\n  this.context = new Context(next, null);\n  this.expectVariable = true;\n  this.indentation = 0;\n  this.userIndentationDelta = 0;\n};\n\nState.prototype.userIndent = function(indentation, indentUnit) {\n  this.userIndentationDelta = indentation > 0 ? (indentation / indentUnit - this.indentation) : 0;\n};\n\nvar next = function(stream, context, state) {\n  var token = new Token(null, context, false);\n  var aChar = stream.next();\n\n  if (aChar === '\"') {\n    token = nextComment(stream, new Context(nextComment, context));\n\n  } else if (aChar === '\\'') {\n    token = nextString(stream, new Context(nextString, context));\n\n  } else if (aChar === '#') {\n    if (stream.peek() === '\\'') {\n      stream.next();\n      token = nextSymbol(stream, new Context(nextSymbol, context));\n    } else {\n      if (stream.eatWhile(/[^\\s.{}\\[\\]()]/))\n        token.name = 'string.special';\n      else\n        token.name = 'meta';\n    }\n\n  } else if (aChar === '$') {\n    if (stream.next() === '<') {\n      stream.eatWhile(/[^\\s>]/);\n      stream.next();\n    }\n    token.name = 'string.special';\n\n  } else if (aChar === '|' && state.expectVariable) {\n    token.context = new Context(nextTemporaries, context);\n\n  } else if (/[\\[\\]{}()]/.test(aChar)) {\n    token.name = 'bracket';\n    token.eos = /[\\[{(]/.test(aChar);\n\n    if (aChar === '[') {\n      state.indentation++;\n    } else if (aChar === ']') {\n      state.indentation = Math.max(0, state.indentation - 1);\n    }\n\n  } else if (specialChars.test(aChar)) {\n    stream.eatWhile(specialChars);\n    token.name = 'operator';\n    token.eos = aChar !== ';'; // ; cascaded message expression\n\n  } else if (/\\d/.test(aChar)) {\n    stream.eatWhile(/[\\w\\d]/);\n    token.name = 'number';\n\n  } else if (/[\\w_]/.test(aChar)) {\n    stream.eatWhile(/[\\w\\d_]/);\n    token.name = state.expectVariable ? (keywords.test(stream.current()) ? 'keyword' : 'variable') : null;\n\n  } else {\n    token.eos = state.expectVariable;\n  }\n\n  return token;\n};\n\nvar nextComment = function(stream, context) {\n  stream.eatWhile(/[^\"]/);\n  return new Token('comment', stream.eat('\"') ? context.parent : context, true);\n};\n\nvar nextString = function(stream, context) {\n  stream.eatWhile(/[^']/);\n  return new Token('string', stream.eat('\\'') ? context.parent : context, false);\n};\n\nvar nextSymbol = function(stream, context) {\n  stream.eatWhile(/[^']/);\n  return new Token('string.special', stream.eat('\\'') ? context.parent : context, false);\n};\n\nvar nextTemporaries = function(stream, context) {\n  var token = new Token(null, context, false);\n  var aChar = stream.next();\n\n  if (aChar === '|') {\n    token.context = context.parent;\n    token.eos = true;\n\n  } else {\n    stream.eatWhile(/[^|]/);\n    token.name = 'variable';\n  }\n\n  return token;\n};\n\nexport const smalltalk = {\n  name: \"smalltalk\",\n\n  startState: function() {\n    return new State;\n  },\n\n  token: function(stream, state) {\n    state.userIndent(stream.indentation(), stream.indentUnit);\n\n    if (stream.eatSpace()) {\n      return null;\n    }\n\n    var token = state.context.next(stream, state.context, state);\n    state.context = token.context;\n    state.expectVariable = token.eos;\n\n    return token.name;\n  },\n\n  blankLine: function(state, indentUnit) {\n    state.userIndent(0, indentUnit);\n  },\n\n  indent: function(state, textAfter, cx) {\n    var i = state.context.next === next && textAfter && textAfter.charAt(0) === ']' ? -1 : state.userIndentationDelta;\n    return (state.indentation + i) * cx.unit;\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*\\]$/\n  }\n}\n","var isStringChar = /[^\\s\\|\\!\\+\\-\\*\\?\\~\\^\\&\\:\\(\\)\\[\\]\\{\\}\\\"\\\\]/;\nvar isOperatorChar = /[\\|\\!\\+\\-\\*\\?\\~\\^\\&]/;\nvar isOperatorString = /^(OR|AND|NOT|TO)$/;\n\nfunction isNumber(word) {\n  return parseFloat(word).toString() === word;\n}\n\nfunction tokenString(quote) {\n  return function(stream, state) {\n    var escaped = false, next;\n    while ((next = stream.next()) != null) {\n      if (next == quote && !escaped) break;\n      escaped = !escaped && next == \"\\\\\";\n    }\n\n    if (!escaped) state.tokenize = tokenBase;\n    return \"string\";\n  };\n}\n\nfunction tokenOperator(operator) {\n  return function(stream, state) {\n    if (operator == \"|\")\n      stream.eat(/\\|/);\n    else if (operator == \"&\")\n      stream.eat(/\\&/);\n\n    state.tokenize = tokenBase;\n    return \"operator\";\n  };\n}\n\nfunction tokenWord(ch) {\n  return function(stream, state) {\n    var word = ch;\n    while ((ch = stream.peek()) && ch.match(isStringChar) != null) {\n      word += stream.next();\n    }\n\n    state.tokenize = tokenBase;\n    if (isOperatorString.test(word))\n      return \"operator\";\n    else if (isNumber(word))\n      return \"number\";\n    else if (stream.peek() == \":\")\n      return \"propertyName\";\n    else\n      return \"string\";\n  };\n}\n\nfunction tokenBase(stream, state) {\n  var ch = stream.next();\n  if (ch == '\"')\n    state.tokenize = tokenString(ch);\n  else if (isOperatorChar.test(ch))\n    state.tokenize = tokenOperator(ch);\n  else if (isStringChar.test(ch))\n    state.tokenize = tokenWord(ch);\n\n  return (state.tokenize != tokenBase) ? state.tokenize(stream, state) : null;\n}\n\nexport const solr = {\n  name: \"solr\",\n\n  startState: function() {\n    return {\n      tokenize: tokenBase\n    };\n  },\n\n  token: function(stream, state) {\n    if (stream.eatSpace()) return null;\n    return state.tokenize(stream, state);\n  }\n};\n","var curPunc;\n\nfunction wordRegexp(words) {\n  return new RegExp(\"^(?:\" + words.join(\"|\") + \")$\", \"i\");\n}\nvar ops = wordRegexp([\"str\", \"lang\", \"langmatches\", \"datatype\", \"bound\", \"sameterm\", \"isiri\", \"isuri\",\n                      \"iri\", \"uri\", \"bnode\", \"count\", \"sum\", \"min\", \"max\", \"avg\", \"sample\",\n                      \"group_concat\", \"rand\", \"abs\", \"ceil\", \"floor\", \"round\", \"concat\", \"substr\", \"strlen\",\n                      \"replace\", \"ucase\", \"lcase\", \"encode_for_uri\", \"contains\", \"strstarts\", \"strends\",\n                      \"strbefore\", \"strafter\", \"year\", \"month\", \"day\", \"hours\", \"minutes\", \"seconds\",\n                      \"timezone\", \"tz\", \"now\", \"uuid\", \"struuid\", \"md5\", \"sha1\", \"sha256\", \"sha384\",\n                      \"sha512\", \"coalesce\", \"if\", \"strlang\", \"strdt\", \"isnumeric\", \"regex\", \"exists\",\n                      \"isblank\", \"isliteral\", \"a\", \"bind\"]);\nvar keywords = wordRegexp([\"base\", \"prefix\", \"select\", \"distinct\", \"reduced\", \"construct\", \"describe\",\n                           \"ask\", \"from\", \"named\", \"where\", \"order\", \"limit\", \"offset\", \"filter\", \"optional\",\n                           \"graph\", \"by\", \"asc\", \"desc\", \"as\", \"having\", \"undef\", \"values\", \"group\",\n                           \"minus\", \"in\", \"not\", \"service\", \"silent\", \"using\", \"insert\", \"delete\", \"union\",\n                           \"true\", \"false\", \"with\",\n                           \"data\", \"copy\", \"to\", \"move\", \"add\", \"create\", \"drop\", \"clear\", \"load\", \"into\"]);\nvar operatorChars = /[*+\\-<>=&|\\^\\/!\\?]/;\nvar PN_CHARS = \"[A-Za-z_\\\\-0-9]\";\nvar PREFIX_START = new RegExp(\"[A-Za-z]\");\nvar PREFIX_REMAINDER = new RegExp(\"((\" + PN_CHARS + \"|\\\\.)*(\" + PN_CHARS + \"))?:\");\n\nfunction tokenBase(stream, state) {\n  var ch = stream.next();\n  curPunc = null;\n  if (ch == \"$\" || ch == \"?\") {\n    if(ch == \"?\" && stream.match(/\\s/, false)){\n      return \"operator\";\n    }\n    stream.match(/^[A-Za-z0-9_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][A-Za-z0-9_\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]*/);\n    return \"variableName.local\";\n  }\n  else if (ch == \"<\" && !stream.match(/^[\\s\\u00a0=]/, false)) {\n    stream.match(/^[^\\s\\u00a0>]*>?/);\n    return \"atom\";\n  }\n  else if (ch == \"\\\"\" || ch == \"'\") {\n    state.tokenize = tokenLiteral(ch);\n    return state.tokenize(stream, state);\n  }\n  else if (/[{}\\(\\),\\.;\\[\\]]/.test(ch)) {\n    curPunc = ch;\n    return \"bracket\";\n  }\n  else if (ch == \"#\") {\n    stream.skipToEnd();\n    return \"comment\";\n  }\n  else if (operatorChars.test(ch)) {\n    return \"operator\";\n  }\n  else if (ch == \":\") {\n    eatPnLocal(stream);\n    return \"atom\";\n  }\n  else if (ch == \"@\") {\n    stream.eatWhile(/[a-z\\d\\-]/i);\n    return \"meta\";\n  }\n  else if (PREFIX_START.test(ch) && stream.match(PREFIX_REMAINDER)) {\n    eatPnLocal(stream);\n    return \"atom\";\n  }\n  stream.eatWhile(/[_\\w\\d]/);\n  var word = stream.current();\n  if (ops.test(word))\n    return \"builtin\";\n  else if (keywords.test(word))\n    return \"keyword\";\n  else\n    return \"variable\";\n}\n\nfunction eatPnLocal(stream) {\n  stream.match(/(\\.(?=[\\w_\\-\\\\%])|[:\\w_-]|\\\\[-\\\\_~.!$&'()*+,;=/?#@%]|%[a-f\\d][a-f\\d])+/i);\n}\n\nfunction tokenLiteral(quote) {\n  return function(stream, state) {\n    var escaped = false, ch;\n    while ((ch = stream.next()) != null) {\n      if (ch == quote && !escaped) {\n        state.tokenize = tokenBase;\n        break;\n      }\n      escaped = !escaped && ch == \"\\\\\";\n    }\n    return \"string\";\n  };\n}\n\nfunction pushContext(state, type, col) {\n  state.context = {prev: state.context, indent: state.indent, col: col, type: type};\n}\nfunction popContext(state) {\n  state.indent = state.context.indent;\n  state.context = state.context.prev;\n}\n\nexport const sparql = {\n  name: \"sparql\",\n\n  startState: function() {\n    return {tokenize: tokenBase,\n            context: null,\n            indent: 0,\n            col: 0};\n  },\n\n  token: function(stream, state) {\n    if (stream.sol()) {\n      if (state.context && state.context.align == null) state.context.align = false;\n      state.indent = stream.indentation();\n    }\n    if (stream.eatSpace()) return null;\n    var style = state.tokenize(stream, state);\n\n    if (style != \"comment\" && state.context && state.context.align == null && state.context.type != \"pattern\") {\n      state.context.align = true;\n    }\n\n    if (curPunc == \"(\") pushContext(state, \")\", stream.column());\n    else if (curPunc == \"[\") pushContext(state, \"]\", stream.column());\n    else if (curPunc == \"{\") pushContext(state, \"}\", stream.column());\n    else if (/[\\]\\}\\)]/.test(curPunc)) {\n      while (state.context && state.context.type == \"pattern\") popContext(state);\n      if (state.context && curPunc == state.context.type) {\n        popContext(state);\n        if (curPunc == \"}\" && state.context && state.context.type == \"pattern\")\n          popContext(state);\n      }\n    }\n    else if (curPunc == \".\" && state.context && state.context.type == \"pattern\") popContext(state);\n    else if (/atom|string|variable/.test(style) && state.context) {\n      if (/[\\}\\]]/.test(state.context.type))\n        pushContext(state, \"pattern\", stream.column());\n      else if (state.context.type == \"pattern\" && !state.context.align) {\n        state.context.align = true;\n        state.context.col = stream.column();\n      }\n    }\n\n    return style;\n  },\n\n  indent: function(state, textAfter, cx) {\n    var firstChar = textAfter && textAfter.charAt(0);\n    var context = state.context;\n    if (/[\\]\\}]/.test(firstChar))\n      while (context && context.type == \"pattern\") context = context.prev;\n\n    var closing = context && firstChar == context.type;\n    if (!context)\n      return 0;\n    else if (context.type == \"pattern\")\n      return context.col;\n    else if (context.align)\n      return context.col + (closing ? 0 : 1);\n    else\n      return context.indent + (closing ? 0 : cx.unit);\n  },\n\n  languageData: {\n    commentTokens: {line: \"#\"}\n  }\n};\n\n","export const spreadsheet = {\n  name: \"spreadsheet\",\n\n  startState: function () {\n    return {\n      stringType: null,\n      stack: []\n    };\n  },\n  token: function (stream, state) {\n    if (!stream) return;\n\n    //check for state changes\n    if (state.stack.length === 0) {\n      //strings\n      if ((stream.peek() == '\"') || (stream.peek() == \"'\")) {\n        state.stringType = stream.peek();\n        stream.next(); // Skip quote\n        state.stack.unshift(\"string\");\n      }\n    }\n\n    //return state\n    //stack has\n    switch (state.stack[0]) {\n    case \"string\":\n      while (state.stack[0] === \"string\" && !stream.eol()) {\n        if (stream.peek() === state.stringType) {\n          stream.next(); // Skip quote\n          state.stack.shift(); // Clear flag\n        } else if (stream.peek() === \"\\\\\") {\n          stream.next();\n          stream.next();\n        } else {\n          stream.match(/^.[^\\\\\\\"\\']*/);\n        }\n      }\n      return \"string\";\n\n    case \"characterClass\":\n      while (state.stack[0] === \"characterClass\" && !stream.eol()) {\n        if (!(stream.match(/^[^\\]\\\\]+/) || stream.match(/^\\\\./)))\n          state.stack.shift();\n      }\n      return \"operator\";\n    }\n\n    var peek = stream.peek();\n\n    //no stack\n    switch (peek) {\n    case \"[\":\n      stream.next();\n      state.stack.unshift(\"characterClass\");\n      return \"bracket\";\n    case \":\":\n      stream.next();\n      return \"operator\";\n    case \"\\\\\":\n      if (stream.match(/\\\\[a-z]+/)) return \"string.special\";\n      else {\n        stream.next();\n        return \"atom\";\n      }\n    case \".\":\n    case \",\":\n    case \";\":\n    case \"*\":\n    case \"-\":\n    case \"+\":\n    case \"^\":\n    case \"<\":\n    case \"/\":\n    case \"=\":\n      stream.next();\n      return \"atom\";\n    case \"$\":\n      stream.next();\n      return \"builtin\";\n    }\n\n    if (stream.match(/\\d+/)) {\n      if (stream.match(/^\\w+/)) return \"error\";\n      return \"number\";\n    } else if (stream.match(/^[a-zA-Z_]\\w*/)) {\n      if (stream.match(/(?=[\\(.])/, false)) return \"keyword\";\n      return \"variable\";\n    } else if ([\"[\", \"]\", \"(\", \")\", \"{\", \"}\"].indexOf(peek) != -1) {\n      stream.next();\n      return \"bracket\";\n    } else if (!stream.eatSpace()) {\n      stream.next();\n    }\n    return null;\n  }\n};\n","function mkStex(mathMode) {\n  function pushCommand(state, command) {\n    state.cmdState.push(command);\n  }\n\n  function peekCommand(state) {\n    if (state.cmdState.length > 0) {\n      return state.cmdState[state.cmdState.length - 1];\n    } else {\n      return null;\n    }\n  }\n\n  function popCommand(state) {\n    var plug = state.cmdState.pop();\n    if (plug) {\n      plug.closeBracket();\n    }\n  }\n\n  // returns the non-default plugin closest to the end of the list\n  function getMostPowerful(state) {\n    var context = state.cmdState;\n    for (var i = context.length - 1; i >= 0; i--) {\n      var plug = context[i];\n      if (plug.name == \"DEFAULT\") {\n        continue;\n      }\n      return plug;\n    }\n    return { styleIdentifier: function() { return null; } };\n  }\n\n  function addPluginPattern(pluginName, cmdStyle, styles) {\n    return function () {\n      this.name = pluginName;\n      this.bracketNo = 0;\n      this.style = cmdStyle;\n      this.styles = styles;\n      this.argument = null;   // \\begin and \\end have arguments that follow. These are stored in the plugin\n\n      this.styleIdentifier = function() {\n        return this.styles[this.bracketNo - 1] || null;\n      };\n      this.openBracket = function() {\n        this.bracketNo++;\n        return \"bracket\";\n      };\n      this.closeBracket = function() {};\n    };\n  }\n\n  var plugins = {};\n\n  plugins[\"importmodule\"] = addPluginPattern(\"importmodule\", \"tag\", [\"string\", \"builtin\"]);\n  plugins[\"documentclass\"] = addPluginPattern(\"documentclass\", \"tag\", [\"\", \"atom\"]);\n  plugins[\"usepackage\"] = addPluginPattern(\"usepackage\", \"tag\", [\"atom\"]);\n  plugins[\"begin\"] = addPluginPattern(\"begin\", \"tag\", [\"atom\"]);\n  plugins[\"end\"] = addPluginPattern(\"end\", \"tag\", [\"atom\"]);\n\n  plugins[\"label\"    ] = addPluginPattern(\"label\"    , \"tag\", [\"atom\"]);\n  plugins[\"ref\"      ] = addPluginPattern(\"ref\"      , \"tag\", [\"atom\"]);\n  plugins[\"eqref\"    ] = addPluginPattern(\"eqref\"    , \"tag\", [\"atom\"]);\n  plugins[\"cite\"     ] = addPluginPattern(\"cite\"     , \"tag\", [\"atom\"]);\n  plugins[\"bibitem\"  ] = addPluginPattern(\"bibitem\"  , \"tag\", [\"atom\"]);\n  plugins[\"Bibitem\"  ] = addPluginPattern(\"Bibitem\"  , \"tag\", [\"atom\"]);\n  plugins[\"RBibitem\" ] = addPluginPattern(\"RBibitem\" , \"tag\", [\"atom\"]);\n\n  plugins[\"DEFAULT\"] = function () {\n    this.name = \"DEFAULT\";\n    this.style = \"tag\";\n\n    this.styleIdentifier = this.openBracket = this.closeBracket = function() {};\n  };\n\n  function setState(state, f) {\n    state.f = f;\n  }\n\n  // called when in a normal (no environment) context\n  function normal(source, state) {\n    var plug;\n    // Do we look like '\\command' ?  If so, attempt to apply the plugin 'command'\n    if (source.match(/^\\\\[a-zA-Z@\\xc0-\\u1fff\\u2060-\\uffff]+/)) {\n      var cmdName = source.current().slice(1);\n      plug = plugins.hasOwnProperty(cmdName) ? plugins[cmdName] : plugins[\"DEFAULT\"];\n      plug = new plug();\n      pushCommand(state, plug);\n      setState(state, beginParams);\n      return plug.style;\n    }\n\n    // escape characters\n    if (source.match(/^\\\\[$&%#{}_]/)) {\n      return \"tag\";\n    }\n\n    // white space control characters\n    if (source.match(/^\\\\[,;!\\/\\\\]/)) {\n      return \"tag\";\n    }\n\n    // find if we're starting various math modes\n    if (source.match(\"\\\\[\")) {\n      setState(state, function(source, state){ return inMathMode(source, state, \"\\\\]\"); });\n      return \"keyword\";\n    }\n    if (source.match(\"\\\\(\")) {\n      setState(state, function(source, state){ return inMathMode(source, state, \"\\\\)\"); });\n      return \"keyword\";\n    }\n    if (source.match(\"$$\")) {\n      setState(state, function(source, state){ return inMathMode(source, state, \"$$\"); });\n      return \"keyword\";\n    }\n    if (source.match(\"$\")) {\n      setState(state, function(source, state){ return inMathMode(source, state, \"$\"); });\n      return \"keyword\";\n    }\n\n    var ch = source.next();\n    if (ch == \"%\") {\n      source.skipToEnd();\n      return \"comment\";\n    } else if (ch == '}' || ch == ']') {\n      plug = peekCommand(state);\n      if (plug) {\n        plug.closeBracket(ch);\n        setState(state, beginParams);\n      } else {\n        return \"error\";\n      }\n      return \"bracket\";\n    } else if (ch == '{' || ch == '[') {\n      plug = plugins[\"DEFAULT\"];\n      plug = new plug();\n      pushCommand(state, plug);\n      return \"bracket\";\n    } else if (/\\d/.test(ch)) {\n      source.eatWhile(/[\\w.%]/);\n      return \"atom\";\n    } else {\n      source.eatWhile(/[\\w\\-_]/);\n      plug = getMostPowerful(state);\n      if (plug.name == 'begin') {\n        plug.argument = source.current();\n      }\n      return plug.styleIdentifier();\n    }\n  }\n\n  function inMathMode(source, state, endModeSeq) {\n    if (source.eatSpace()) {\n      return null;\n    }\n    if (endModeSeq && source.match(endModeSeq)) {\n      setState(state, normal);\n      return \"keyword\";\n    }\n    if (source.match(/^\\\\[a-zA-Z@]+/)) {\n      return \"tag\";\n    }\n    if (source.match(/^[a-zA-Z]+/)) {\n      return \"variableName.special\";\n    }\n    // escape characters\n    if (source.match(/^\\\\[$&%#{}_]/)) {\n      return \"tag\";\n    }\n    // white space control characters\n    if (source.match(/^\\\\[,;!\\/]/)) {\n      return \"tag\";\n    }\n    // special math-mode characters\n    if (source.match(/^[\\^_&]/)) {\n      return \"tag\";\n    }\n    // non-special characters\n    if (source.match(/^[+\\-<>|=,\\/@!*:;'\"`~#?]/)) {\n      return null;\n    }\n    if (source.match(/^(\\d+\\.\\d*|\\d*\\.\\d+|\\d+)/)) {\n      return \"number\";\n    }\n    var ch = source.next();\n    if (ch == \"{\" || ch == \"}\" || ch == \"[\" || ch == \"]\" || ch == \"(\" || ch == \")\") {\n      return \"bracket\";\n    }\n\n    if (ch == \"%\") {\n      source.skipToEnd();\n      return \"comment\";\n    }\n    return \"error\";\n  }\n\n  function beginParams(source, state) {\n    var ch = source.peek(), lastPlug;\n    if (ch == '{' || ch == '[') {\n      lastPlug = peekCommand(state);\n      lastPlug.openBracket(ch);\n      source.eat(ch);\n      setState(state, normal);\n      return \"bracket\";\n    }\n    if (/[ \\t\\r]/.test(ch)) {\n      source.eat(ch);\n      return null;\n    }\n    setState(state, normal);\n    popCommand(state);\n\n    return normal(source, state);\n  }\n\n  return {\n    name: \"stex\",\n    startState: function() {\n      var f = mathMode ? function(source, state){ return inMathMode(source, state); } : normal;\n      return {\n        cmdState: [],\n        f: f\n      };\n    },\n    copyState: function(s) {\n      return {\n        cmdState: s.cmdState.slice(),\n        f: s.f\n      };\n    },\n    token: function(stream, state) {\n      return state.f(stream, state);\n    },\n    blankLine: function(state) {\n      state.f = normal;\n      state.cmdState.length = 0;\n    },\n    languageData: {\n      commentTokens: {line: \"%\"}\n    }\n  };\n};\n\nexport const stex = mkStex(false)\nexport const stexMath = mkStex(true)\n","// developer.mozilla.org/en-US/docs/Web/HTML/Element\nvar tagKeywords_ = [\"a\",\"abbr\",\"address\",\"area\",\"article\",\"aside\",\"audio\", \"b\", \"base\",\"bdi\", \"bdo\",\"bgsound\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"cite\", \"code\",\"col\",\"colgroup\",\"data\",\"datalist\",\"dd\",\"del\",\"details\",\"dfn\",\"div\", \"dl\",\"dt\",\"em\",\"embed\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\", \"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hgroup\",\"hr\",\"html\",\"i\",\"iframe\", \"img\",\"input\",\"ins\",\"kbd\",\"keygen\",\"label\",\"legend\",\"li\",\"link\",\"main\",\"map\", \"mark\",\"marquee\",\"menu\",\"menuitem\",\"meta\",\"meter\",\"nav\",\"nobr\",\"noframes\", \"noscript\",\"object\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"param\",\"pre\", \"progress\",\"q\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"script\",\"section\",\"select\", \"small\",\"source\",\"span\",\"strong\",\"style\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"track\", \"u\",\"ul\",\"var\",\"video\"];\n\n// github.com/codemirror/CodeMirror/blob/master/mode/css/css.js\n// Note, \"url-prefix\" should precede \"url\" in order to match correctly in documentTypesRegexp\nvar documentTypes_ = [\"domain\", \"regexp\", \"url-prefix\", \"url\"];\nvar mediaTypes_ = [\"all\",\"aural\",\"braille\",\"handheld\",\"print\",\"projection\",\"screen\",\"tty\",\"tv\",\"embossed\"];\nvar mediaFeatures_ = [\"width\",\"min-width\",\"max-width\",\"height\",\"min-height\",\"max-height\",\"device-width\",\"min-device-width\",\"max-device-width\",\"device-height\",\"min-device-height\",\"max-device-height\",\"aspect-ratio\",\"min-aspect-ratio\",\"max-aspect-ratio\",\"device-aspect-ratio\",\"min-device-aspect-ratio\",\"max-device-aspect-ratio\",\"color\",\"min-color\",\"max-color\",\"color-index\",\"min-color-index\",\"max-color-index\",\"monochrome\",\"min-monochrome\",\"max-monochrome\",\"resolution\",\"min-resolution\",\"max-resolution\",\"scan\",\"grid\",\"dynamic-range\",\"video-dynamic-range\"];\nvar propertyKeywords_ = [\"align-content\",\"align-items\",\"align-self\",\"alignment-adjust\",\"alignment-baseline\",\"anchor-point\",\"animation\",\"animation-delay\",\"animation-direction\",\"animation-duration\",\"animation-fill-mode\",\"animation-iteration-count\",\"animation-name\",\"animation-play-state\",\"animation-timing-function\",\"appearance\",\"azimuth\",\"backface-visibility\",\"background\",\"background-attachment\",\"background-clip\",\"background-color\",\"background-image\",\"background-origin\",\"background-position\",\"background-repeat\",\"background-size\",\"baseline-shift\",\"binding\",\"bleed\",\"bookmark-label\",\"bookmark-level\",\"bookmark-state\",\"bookmark-target\",\"border\",\"border-bottom\",\"border-bottom-color\",\"border-bottom-left-radius\",\"border-bottom-right-radius\",\"border-bottom-style\",\"border-bottom-width\",\"border-collapse\",\"border-color\",\"border-image\",\"border-image-outset\",\"border-image-repeat\",\"border-image-slice\",\"border-image-source\",\"border-image-width\",\"border-left\",\"border-left-color\",\"border-left-style\",\"border-left-width\",\"border-radius\",\"border-right\",\"border-right-color\",\"border-right-style\",\"border-right-width\",\"border-spacing\",\"border-style\",\"border-top\",\"border-top-color\",\"border-top-left-radius\",\"border-top-right-radius\",\"border-top-style\",\"border-top-width\",\"border-width\",\"bottom\",\"box-decoration-break\",\"box-shadow\",\"box-sizing\",\"break-after\",\"break-before\",\"break-inside\",\"caption-side\",\"clear\",\"clip\",\"color\",\"color-profile\",\"column-count\",\"column-fill\",\"column-gap\",\"column-rule\",\"column-rule-color\",\"column-rule-style\",\"column-rule-width\",\"column-span\",\"column-width\",\"columns\",\"content\",\"counter-increment\",\"counter-reset\",\"crop\",\"cue\",\"cue-after\",\"cue-before\",\"cursor\",\"direction\",\"display\",\"dominant-baseline\",\"drop-initial-after-adjust\",\"drop-initial-after-align\",\"drop-initial-before-adjust\",\"drop-initial-before-align\",\"drop-initial-size\",\"drop-initial-value\",\"elevation\",\"empty-cells\",\"fit\",\"fit-position\",\"flex\",\"flex-basis\",\"flex-direction\",\"flex-flow\",\"flex-grow\",\"flex-shrink\",\"flex-wrap\",\"float\",\"float-offset\",\"flow-from\",\"flow-into\",\"font\",\"font-feature-settings\",\"font-family\",\"font-kerning\",\"font-language-override\",\"font-size\",\"font-size-adjust\",\"font-stretch\",\"font-style\",\"font-synthesis\",\"font-variant\",\"font-variant-alternates\",\"font-variant-caps\",\"font-variant-east-asian\",\"font-variant-ligatures\",\"font-variant-numeric\",\"font-variant-position\",\"font-weight\",\"grid\",\"grid-area\",\"grid-auto-columns\",\"grid-auto-flow\",\"grid-auto-position\",\"grid-auto-rows\",\"grid-column\",\"grid-column-end\",\"grid-column-start\",\"grid-row\",\"grid-row-end\",\"grid-row-start\",\"grid-template\",\"grid-template-areas\",\"grid-template-columns\",\"grid-template-rows\",\"hanging-punctuation\",\"height\",\"hyphens\",\"icon\",\"image-orientation\",\"image-rendering\",\"image-resolution\",\"inline-box-align\",\"justify-content\",\"left\",\"letter-spacing\",\"line-break\",\"line-height\",\"line-stacking\",\"line-stacking-ruby\",\"line-stacking-shift\",\"line-stacking-strategy\",\"list-style\",\"list-style-image\",\"list-style-position\",\"list-style-type\",\"margin\",\"margin-bottom\",\"margin-left\",\"margin-right\",\"margin-top\",\"marker-offset\",\"marks\",\"marquee-direction\",\"marquee-loop\",\"marquee-play-count\",\"marquee-speed\",\"marquee-style\",\"max-height\",\"max-width\",\"min-height\",\"min-width\",\"move-to\",\"nav-down\",\"nav-index\",\"nav-left\",\"nav-right\",\"nav-up\",\"object-fit\",\"object-position\",\"opacity\",\"order\",\"orphans\",\"outline\",\"outline-color\",\"outline-offset\",\"outline-style\",\"outline-width\",\"overflow\",\"overflow-style\",\"overflow-wrap\",\"overflow-x\",\"overflow-y\",\"padding\",\"padding-bottom\",\"padding-left\",\"padding-right\",\"padding-top\",\"page\",\"page-break-after\",\"page-break-before\",\"page-break-inside\",\"page-policy\",\"pause\",\"pause-after\",\"pause-before\",\"perspective\",\"perspective-origin\",\"pitch\",\"pitch-range\",\"play-during\",\"position\",\"presentation-level\",\"punctuation-trim\",\"quotes\",\"region-break-after\",\"region-break-before\",\"region-break-inside\",\"region-fragment\",\"rendering-intent\",\"resize\",\"rest\",\"rest-after\",\"rest-before\",\"richness\",\"right\",\"rotation\",\"rotation-point\",\"ruby-align\",\"ruby-overhang\",\"ruby-position\",\"ruby-span\",\"shape-image-threshold\",\"shape-inside\",\"shape-margin\",\"shape-outside\",\"size\",\"speak\",\"speak-as\",\"speak-header\",\"speak-numeral\",\"speak-punctuation\",\"speech-rate\",\"stress\",\"string-set\",\"tab-size\",\"table-layout\",\"target\",\"target-name\",\"target-new\",\"target-position\",\"text-align\",\"text-align-last\",\"text-decoration\",\"text-decoration-color\",\"text-decoration-line\",\"text-decoration-skip\",\"text-decoration-style\",\"text-emphasis\",\"text-emphasis-color\",\"text-emphasis-position\",\"text-emphasis-style\",\"text-height\",\"text-indent\",\"text-justify\",\"text-outline\",\"text-overflow\",\"text-shadow\",\"text-size-adjust\",\"text-space-collapse\",\"text-transform\",\"text-underline-position\",\"text-wrap\",\"top\",\"transform\",\"transform-origin\",\"transform-style\",\"transition\",\"transition-delay\",\"transition-duration\",\"transition-property\",\"transition-timing-function\",\"unicode-bidi\",\"vertical-align\",\"visibility\",\"voice-balance\",\"voice-duration\",\"voice-family\",\"voice-pitch\",\"voice-range\",\"voice-rate\",\"voice-stress\",\"voice-volume\",\"volume\",\"white-space\",\"widows\",\"width\",\"will-change\",\"word-break\",\"word-spacing\",\"word-wrap\",\"z-index\",\"clip-path\",\"clip-rule\",\"mask\",\"enable-background\",\"filter\",\"flood-color\",\"flood-opacity\",\"lighting-color\",\"stop-color\",\"stop-opacity\",\"pointer-events\",\"color-interpolation\",\"color-interpolation-filters\",\"color-rendering\",\"fill\",\"fill-opacity\",\"fill-rule\",\"image-rendering\",\"marker\",\"marker-end\",\"marker-mid\",\"marker-start\",\"shape-rendering\",\"stroke\",\"stroke-dasharray\",\"stroke-dashoffset\",\"stroke-linecap\",\"stroke-linejoin\",\"stroke-miterlimit\",\"stroke-opacity\",\"stroke-width\",\"text-rendering\",\"baseline-shift\",\"dominant-baseline\",\"glyph-orientation-horizontal\",\"glyph-orientation-vertical\",\"text-anchor\",\"writing-mode\",\"font-smoothing\",\"osx-font-smoothing\"];\nvar nonStandardPropertyKeywords_ = [\"scrollbar-arrow-color\",\"scrollbar-base-color\",\"scrollbar-dark-shadow-color\",\"scrollbar-face-color\",\"scrollbar-highlight-color\",\"scrollbar-shadow-color\",\"scrollbar-3d-light-color\",\"scrollbar-track-color\",\"shape-inside\",\"searchfield-cancel-button\",\"searchfield-decoration\",\"searchfield-results-button\",\"searchfield-results-decoration\",\"zoom\"];\nvar fontProperties_ = [\"font-family\",\"src\",\"unicode-range\",\"font-variant\",\"font-feature-settings\",\"font-stretch\",\"font-weight\",\"font-style\"];\nvar colorKeywords_ = [\"aliceblue\",\"antiquewhite\",\"aqua\",\"aquamarine\",\"azure\",\"beige\",\"bisque\",\"black\",\"blanchedalmond\",\"blue\",\"blueviolet\",\"brown\",\"burlywood\",\"cadetblue\",\"chartreuse\",\"chocolate\",\"coral\",\"cornflowerblue\",\"cornsilk\",\"crimson\",\"cyan\",\"darkblue\",\"darkcyan\",\"darkgoldenrod\",\"darkgray\",\"darkgreen\",\"darkkhaki\",\"darkmagenta\",\"darkolivegreen\",\"darkorange\",\"darkorchid\",\"darkred\",\"darksalmon\",\"darkseagreen\",\"darkslateblue\",\"darkslategray\",\"darkturquoise\",\"darkviolet\",\"deeppink\",\"deepskyblue\",\"dimgray\",\"dodgerblue\",\"firebrick\",\"floralwhite\",\"forestgreen\",\"fuchsia\",\"gainsboro\",\"ghostwhite\",\"gold\",\"goldenrod\",\"gray\",\"grey\",\"green\",\"greenyellow\",\"honeydew\",\"hotpink\",\"indianred\",\"indigo\",\"ivory\",\"khaki\",\"lavender\",\"lavenderblush\",\"lawngreen\",\"lemonchiffon\",\"lightblue\",\"lightcoral\",\"lightcyan\",\"lightgoldenrodyellow\",\"lightgray\",\"lightgreen\",\"lightpink\",\"lightsalmon\",\"lightseagreen\",\"lightskyblue\",\"lightslategray\",\"lightsteelblue\",\"lightyellow\",\"lime\",\"limegreen\",\"linen\",\"magenta\",\"maroon\",\"mediumaquamarine\",\"mediumblue\",\"mediumorchid\",\"mediumpurple\",\"mediumseagreen\",\"mediumslateblue\",\"mediumspringgreen\",\"mediumturquoise\",\"mediumvioletred\",\"midnightblue\",\"mintcream\",\"mistyrose\",\"moccasin\",\"navajowhite\",\"navy\",\"oldlace\",\"olive\",\"olivedrab\",\"orange\",\"orangered\",\"orchid\",\"palegoldenrod\",\"palegreen\",\"paleturquoise\",\"palevioletred\",\"papayawhip\",\"peachpuff\",\"peru\",\"pink\",\"plum\",\"powderblue\",\"purple\",\"rebeccapurple\",\"red\",\"rosybrown\",\"royalblue\",\"saddlebrown\",\"salmon\",\"sandybrown\",\"seagreen\",\"seashell\",\"sienna\",\"silver\",\"skyblue\",\"slateblue\",\"slategray\",\"snow\",\"springgreen\",\"steelblue\",\"tan\",\"teal\",\"thistle\",\"tomato\",\"turquoise\",\"violet\",\"wheat\",\"white\",\"whitesmoke\",\"yellow\",\"yellowgreen\"];\nvar valueKeywords_ = [\"above\",\"absolute\",\"activeborder\",\"additive\",\"activecaption\",\"afar\",\"after-white-space\",\"ahead\",\"alias\",\"all\",\"all-scroll\",\"alphabetic\",\"alternate\",\"always\",\"amharic\",\"amharic-abegede\",\"antialiased\",\"appworkspace\",\"arabic-indic\",\"armenian\",\"asterisks\",\"attr\",\"auto\",\"avoid\",\"avoid-column\",\"avoid-page\",\"avoid-region\",\"background\",\"backwards\",\"baseline\",\"below\",\"bidi-override\",\"binary\",\"bengali\",\"blink\",\"block\",\"block-axis\",\"bold\",\"bolder\",\"border\",\"border-box\",\"both\",\"bottom\",\"break\",\"break-all\",\"break-word\",\"bullets\",\"button\",\"buttonface\",\"buttonhighlight\",\"buttonshadow\",\"buttontext\",\"calc\",\"cambodian\",\"capitalize\",\"caps-lock-indicator\",\"caption\",\"captiontext\",\"caret\",\"cell\",\"center\",\"checkbox\",\"circle\",\"cjk-decimal\",\"cjk-earthly-branch\",\"cjk-heavenly-stem\",\"cjk-ideographic\",\"clear\",\"clip\",\"close-quote\",\"col-resize\",\"collapse\",\"column\",\"compact\",\"condensed\",\"conic-gradient\",\"contain\",\"content\",\"contents\",\"content-box\",\"context-menu\",\"continuous\",\"copy\",\"counter\",\"counters\",\"cover\",\"crop\",\"cross\",\"crosshair\",\"currentcolor\",\"cursive\",\"cyclic\",\"dashed\",\"decimal\",\"decimal-leading-zero\",\"default\",\"default-button\",\"destination-atop\",\"destination-in\",\"destination-out\",\"destination-over\",\"devanagari\",\"disc\",\"discard\",\"disclosure-closed\",\"disclosure-open\",\"document\",\"dot-dash\",\"dot-dot-dash\",\"dotted\",\"double\",\"down\",\"e-resize\",\"ease\",\"ease-in\",\"ease-in-out\",\"ease-out\",\"element\",\"ellipse\",\"ellipsis\",\"embed\",\"end\",\"ethiopic\",\"ethiopic-abegede\",\"ethiopic-abegede-am-et\",\"ethiopic-abegede-gez\",\"ethiopic-abegede-ti-er\",\"ethiopic-abegede-ti-et\",\"ethiopic-halehame-aa-er\",\"ethiopic-halehame-aa-et\",\"ethiopic-halehame-am-et\",\"ethiopic-halehame-gez\",\"ethiopic-halehame-om-et\",\"ethiopic-halehame-sid-et\",\"ethiopic-halehame-so-et\",\"ethiopic-halehame-ti-er\",\"ethiopic-halehame-ti-et\",\"ethiopic-halehame-tig\",\"ethiopic-numeric\",\"ew-resize\",\"expanded\",\"extends\",\"extra-condensed\",\"extra-expanded\",\"fantasy\",\"fast\",\"fill\",\"fixed\",\"flat\",\"flex\",\"footnotes\",\"forwards\",\"from\",\"geometricPrecision\",\"georgian\",\"graytext\",\"groove\",\"gujarati\",\"gurmukhi\",\"hand\",\"hangul\",\"hangul-consonant\",\"hebrew\",\"help\",\"hidden\",\"hide\",\"high\",\"higher\",\"highlight\",\"highlighttext\",\"hiragana\",\"hiragana-iroha\",\"horizontal\",\"hsl\",\"hsla\",\"icon\",\"ignore\",\"inactiveborder\",\"inactivecaption\",\"inactivecaptiontext\",\"infinite\",\"infobackground\",\"infotext\",\"inherit\",\"initial\",\"inline\",\"inline-axis\",\"inline-block\",\"inline-flex\",\"inline-table\",\"inset\",\"inside\",\"intrinsic\",\"invert\",\"italic\",\"japanese-formal\",\"japanese-informal\",\"justify\",\"kannada\",\"katakana\",\"katakana-iroha\",\"keep-all\",\"khmer\",\"korean-hangul-formal\",\"korean-hanja-formal\",\"korean-hanja-informal\",\"landscape\",\"lao\",\"large\",\"larger\",\"left\",\"level\",\"lighter\",\"line-through\",\"linear\",\"linear-gradient\",\"lines\",\"list-item\",\"listbox\",\"listitem\",\"local\",\"logical\",\"loud\",\"lower\",\"lower-alpha\",\"lower-armenian\",\"lower-greek\",\"lower-hexadecimal\",\"lower-latin\",\"lower-norwegian\",\"lower-roman\",\"lowercase\",\"ltr\",\"malayalam\",\"match\",\"matrix\",\"matrix3d\",\"media-play-button\",\"media-slider\",\"media-sliderthumb\",\"media-volume-slider\",\"media-volume-sliderthumb\",\"medium\",\"menu\",\"menulist\",\"menulist-button\",\"menutext\",\"message-box\",\"middle\",\"min-intrinsic\",\"mix\",\"mongolian\",\"monospace\",\"move\",\"multiple\",\"myanmar\",\"n-resize\",\"narrower\",\"ne-resize\",\"nesw-resize\",\"no-close-quote\",\"no-drop\",\"no-open-quote\",\"no-repeat\",\"none\",\"normal\",\"not-allowed\",\"nowrap\",\"ns-resize\",\"numbers\",\"numeric\",\"nw-resize\",\"nwse-resize\",\"oblique\",\"octal\",\"open-quote\",\"optimizeLegibility\",\"optimizeSpeed\",\"oriya\",\"oromo\",\"outset\",\"outside\",\"outside-shape\",\"overlay\",\"overline\",\"padding\",\"padding-box\",\"painted\",\"page\",\"paused\",\"persian\",\"perspective\",\"plus-darker\",\"plus-lighter\",\"pointer\",\"polygon\",\"portrait\",\"pre\",\"pre-line\",\"pre-wrap\",\"preserve-3d\",\"progress\",\"push-button\",\"radial-gradient\",\"radio\",\"read-only\",\"read-write\",\"read-write-plaintext-only\",\"rectangle\",\"region\",\"relative\",\"repeat\",\"repeating-linear-gradient\",\"repeating-radial-gradient\",\"repeating-conic-gradient\",\"repeat-x\",\"repeat-y\",\"reset\",\"reverse\",\"rgb\",\"rgba\",\"ridge\",\"right\",\"rotate\",\"rotate3d\",\"rotateX\",\"rotateY\",\"rotateZ\",\"round\",\"row-resize\",\"rtl\",\"run-in\",\"running\",\"s-resize\",\"sans-serif\",\"scale\",\"scale3d\",\"scaleX\",\"scaleY\",\"scaleZ\",\"scroll\",\"scrollbar\",\"scroll-position\",\"se-resize\",\"searchfield\",\"searchfield-cancel-button\",\"searchfield-decoration\",\"searchfield-results-button\",\"searchfield-results-decoration\",\"semi-condensed\",\"semi-expanded\",\"separate\",\"serif\",\"show\",\"sidama\",\"simp-chinese-formal\",\"simp-chinese-informal\",\"single\",\"skew\",\"skewX\",\"skewY\",\"skip-white-space\",\"slide\",\"slider-horizontal\",\"slider-vertical\",\"sliderthumb-horizontal\",\"sliderthumb-vertical\",\"slow\",\"small\",\"small-caps\",\"small-caption\",\"smaller\",\"solid\",\"somali\",\"source-atop\",\"source-in\",\"source-out\",\"source-over\",\"space\",\"spell-out\",\"square\",\"square-button\",\"standard\",\"start\",\"static\",\"status-bar\",\"stretch\",\"stroke\",\"sub\",\"subpixel-antialiased\",\"super\",\"sw-resize\",\"symbolic\",\"symbols\",\"table\",\"table-caption\",\"table-cell\",\"table-column\",\"table-column-group\",\"table-footer-group\",\"table-header-group\",\"table-row\",\"table-row-group\",\"tamil\",\"telugu\",\"text\",\"text-bottom\",\"text-top\",\"textarea\",\"textfield\",\"thai\",\"thick\",\"thin\",\"threeddarkshadow\",\"threedface\",\"threedhighlight\",\"threedlightshadow\",\"threedshadow\",\"tibetan\",\"tigre\",\"tigrinya-er\",\"tigrinya-er-abegede\",\"tigrinya-et\",\"tigrinya-et-abegede\",\"to\",\"top\",\"trad-chinese-formal\",\"trad-chinese-informal\",\"translate\",\"translate3d\",\"translateX\",\"translateY\",\"translateZ\",\"transparent\",\"ultra-condensed\",\"ultra-expanded\",\"underline\",\"up\",\"upper-alpha\",\"upper-armenian\",\"upper-greek\",\"upper-hexadecimal\",\"upper-latin\",\"upper-norwegian\",\"upper-roman\",\"uppercase\",\"urdu\",\"url\",\"var\",\"vertical\",\"vertical-text\",\"visible\",\"visibleFill\",\"visiblePainted\",\"visibleStroke\",\"visual\",\"w-resize\",\"wait\",\"wave\",\"wider\",\"window\",\"windowframe\",\"windowtext\",\"words\",\"x-large\",\"x-small\",\"xor\",\"xx-large\",\"xx-small\",\"bicubic\",\"optimizespeed\",\"grayscale\",\"row\",\"row-reverse\",\"wrap\",\"wrap-reverse\",\"column-reverse\",\"flex-start\",\"flex-end\",\"space-between\",\"space-around\", \"unset\"];\n\nvar wordOperatorKeywords_ = [\"in\",\"and\",\"or\",\"not\",\"is not\",\"is a\",\"is\",\"isnt\",\"defined\",\"if unless\"],\n    blockKeywords_ = [\"for\",\"if\",\"else\",\"unless\", \"from\", \"to\"],\n    commonAtoms_ = [\"null\",\"true\",\"false\",\"href\",\"title\",\"type\",\"not-allowed\",\"readonly\",\"disabled\"],\n    commonDef_ = [\"@font-face\", \"@keyframes\", \"@media\", \"@viewport\", \"@page\", \"@host\", \"@supports\", \"@block\", \"@css\"];\n\nvar hintWords = tagKeywords_.concat(documentTypes_,mediaTypes_,mediaFeatures_,\n                                    propertyKeywords_,nonStandardPropertyKeywords_,\n                                    colorKeywords_,valueKeywords_,fontProperties_,\n                                    wordOperatorKeywords_,blockKeywords_,\n                                    commonAtoms_,commonDef_);\n\nfunction wordRegexp(words) {\n  words = words.sort(function(a,b){return b > a;});\n  return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\");\n}\n\nfunction keySet(array) {\n  var keys = {};\n  for (var i = 0; i < array.length; ++i) keys[array[i]] = true;\n  return keys;\n}\n\nfunction escapeRegExp(text) {\n  return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\nvar tagKeywords = keySet(tagKeywords_),\n    tagVariablesRegexp = /^(a|b|i|s|col|em)$/i,\n    propertyKeywords = keySet(propertyKeywords_),\n    nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_),\n    valueKeywords = keySet(valueKeywords_),\n    colorKeywords = keySet(colorKeywords_),\n    documentTypes = keySet(documentTypes_),\n    documentTypesRegexp = wordRegexp(documentTypes_),\n    mediaFeatures = keySet(mediaFeatures_),\n    mediaTypes = keySet(mediaTypes_),\n    fontProperties = keySet(fontProperties_),\n    operatorsRegexp = /^\\s*([.]{2,3}|&&|\\|\\||\\*\\*|[?!=:]?=|[-+*\\/%<>]=?|\\?:|\\~)/,\n    wordOperatorKeywordsRegexp = wordRegexp(wordOperatorKeywords_),\n    blockKeywords = keySet(blockKeywords_),\n    vendorPrefixesRegexp = new RegExp(/^\\-(moz|ms|o|webkit)-/i),\n    commonAtoms = keySet(commonAtoms_),\n    firstWordMatch = \"\",\n    states = {},\n    ch,\n    style,\n    type,\n    override;\n\n/**\n * Tokenizers\n */\nfunction tokenBase(stream, state) {\n  firstWordMatch = stream.string.match(/(^[\\w-]+\\s*=\\s*$)|(^\\s*[\\w-]+\\s*=\\s*[\\w-])|(^\\s*(\\.|#|@|\\$|\\&|\\[|\\d|\\+|::?|\\{|\\>|~|\\/)?\\s*[\\w-]*([a-z0-9-]|\\*|\\/\\*)(\\(|,)?)/);\n  state.context.line.firstWord = firstWordMatch ? firstWordMatch[0].replace(/^\\s*/, \"\") : \"\";\n  state.context.line.indent = stream.indentation();\n  ch = stream.peek();\n\n  // Line comment\n  if (stream.match(\"//\")) {\n    stream.skipToEnd();\n    return [\"comment\", \"comment\"];\n  }\n  // Block comment\n  if (stream.match(\"/*\")) {\n    state.tokenize = tokenCComment;\n    return tokenCComment(stream, state);\n  }\n  // String\n  if (ch == \"\\\"\" || ch == \"'\") {\n    stream.next();\n    state.tokenize = tokenString(ch);\n    return state.tokenize(stream, state);\n  }\n  // Def\n  if (ch == \"@\") {\n    stream.next();\n    stream.eatWhile(/[\\w\\\\-]/);\n    return [\"def\", stream.current()];\n  }\n  // ID selector or Hex color\n  if (ch == \"#\") {\n    stream.next();\n    // Hex color\n    if (stream.match(/^[0-9a-f]{3}([0-9a-f]([0-9a-f]{2}){0,2})?\\b(?!-)/i)) {\n      return [\"atom\", \"atom\"];\n    }\n    // ID selector\n    if (stream.match(/^[a-z][\\w-]*/i)) {\n      return [\"builtin\", \"hash\"];\n    }\n  }\n  // Vendor prefixes\n  if (stream.match(vendorPrefixesRegexp)) {\n    return [\"meta\", \"vendor-prefixes\"];\n  }\n  // Numbers\n  if (stream.match(/^-?[0-9]?\\.?[0-9]/)) {\n    stream.eatWhile(/[a-z%]/i);\n    return [\"number\", \"unit\"];\n  }\n  // !important|optional\n  if (ch == \"!\") {\n    stream.next();\n    return [stream.match(/^(important|optional)/i) ? \"keyword\": \"operator\", \"important\"];\n  }\n  // Class\n  if (ch == \".\" && stream.match(/^\\.[a-z][\\w-]*/i)) {\n    return [\"qualifier\", \"qualifier\"];\n  }\n  // url url-prefix domain regexp\n  if (stream.match(documentTypesRegexp)) {\n    if (stream.peek() == \"(\") state.tokenize = tokenParenthesized;\n    return [\"property\", \"word\"];\n  }\n  // Mixins / Functions\n  if (stream.match(/^[a-z][\\w-]*\\(/i)) {\n    stream.backUp(1);\n    return [\"keyword\", \"mixin\"];\n  }\n  // Block mixins\n  if (stream.match(/^(\\+|-)[a-z][\\w-]*\\(/i)) {\n    stream.backUp(1);\n    return [\"keyword\", \"block-mixin\"];\n  }\n  // Parent Reference BEM naming\n  if (stream.string.match(/^\\s*&/) && stream.match(/^[-_]+[a-z][\\w-]*/)) {\n    return [\"qualifier\", \"qualifier\"];\n  }\n  // / Root Reference & Parent Reference\n  if (stream.match(/^(\\/|&)(-|_|:|\\.|#|[a-z])/)) {\n    stream.backUp(1);\n    return [\"variableName.special\", \"reference\"];\n  }\n  if (stream.match(/^&{1}\\s*$/)) {\n    return [\"variableName.special\", \"reference\"];\n  }\n  // Word operator\n  if (stream.match(wordOperatorKeywordsRegexp)) {\n    return [\"operator\", \"operator\"];\n  }\n  // Word\n  if (stream.match(/^\\$?[-_]*[a-z0-9]+[\\w-]*/i)) {\n    // Variable\n    if (stream.match(/^(\\.|\\[)[\\w-\\'\\\"\\]]+/i, false)) {\n      if (!wordIsTag(stream.current())) {\n        stream.match('.');\n        return [\"variable\", \"variable-name\"];\n      }\n    }\n    return [\"variable\", \"word\"];\n  }\n  // Operators\n  if (stream.match(operatorsRegexp)) {\n    return [\"operator\", stream.current()];\n  }\n  // Delimiters\n  if (/[:;,{}\\[\\]\\(\\)]/.test(ch)) {\n    stream.next();\n    return [null, ch];\n  }\n  // Non-detected items\n  stream.next();\n  return [null, null];\n}\n\n/**\n * Token comment\n */\nfunction tokenCComment(stream, state) {\n  var maybeEnd = false, ch;\n  while ((ch = stream.next()) != null) {\n    if (maybeEnd && ch == \"/\") {\n      state.tokenize = null;\n      break;\n    }\n    maybeEnd = (ch == \"*\");\n  }\n  return [\"comment\", \"comment\"];\n}\n\n/**\n * Token string\n */\nfunction tokenString(quote) {\n  return function(stream, state) {\n    var escaped = false, ch;\n    while ((ch = stream.next()) != null) {\n      if (ch == quote && !escaped) {\n        if (quote == \")\") stream.backUp(1);\n        break;\n      }\n      escaped = !escaped && ch == \"\\\\\";\n    }\n    if (ch == quote || !escaped && quote != \")\") state.tokenize = null;\n    return [\"string\", \"string\"];\n  };\n}\n\n/**\n * Token parenthesized\n */\nfunction tokenParenthesized(stream, state) {\n  stream.next(); // Must be \"(\"\n  if (!stream.match(/\\s*[\\\"\\')]/, false))\n    state.tokenize = tokenString(\")\");\n  else\n    state.tokenize = null;\n  return [null, \"(\"];\n}\n\n/**\n * Context management\n */\nfunction Context(type, indent, prev, line) {\n  this.type = type;\n  this.indent = indent;\n  this.prev = prev;\n  this.line = line || {firstWord: \"\", indent: 0};\n}\n\nfunction pushContext(state, stream, type, indent) {\n  indent = indent >= 0 ? indent : stream.indentUnit;\n  state.context = new Context(type, stream.indentation() + indent, state.context);\n  return type;\n}\n\nfunction popContext(state, stream, currentIndent) {\n  var contextIndent = state.context.indent - stream.indentUnit;\n  currentIndent = currentIndent || false;\n  state.context = state.context.prev;\n  if (currentIndent) state.context.indent = contextIndent;\n  return state.context.type;\n}\n\nfunction pass(type, stream, state) {\n  return states[state.context.type](type, stream, state);\n}\n\nfunction popAndPass(type, stream, state, n) {\n  for (var i = n || 1; i > 0; i--)\n    state.context = state.context.prev;\n  return pass(type, stream, state);\n}\n\n\n/**\n * Parser\n */\nfunction wordIsTag(word) {\n  return word.toLowerCase() in tagKeywords;\n}\n\nfunction wordIsProperty(word) {\n  word = word.toLowerCase();\n  return word in propertyKeywords || word in fontProperties;\n}\n\nfunction wordIsBlock(word) {\n  return word.toLowerCase() in blockKeywords;\n}\n\nfunction wordIsVendorPrefix(word) {\n  return word.toLowerCase().match(vendorPrefixesRegexp);\n}\n\nfunction wordAsValue(word) {\n  var wordLC = word.toLowerCase();\n  var override = \"variable\";\n  if (wordIsTag(word)) override = \"tag\";\n  else if (wordIsBlock(word)) override = \"block-keyword\";\n  else if (wordIsProperty(word)) override = \"property\";\n  else if (wordLC in valueKeywords || wordLC in commonAtoms) override = \"atom\";\n  else if (wordLC == \"return\" || wordLC in colorKeywords) override = \"keyword\";\n\n  // Font family\n  else if (word.match(/^[A-Z]/)) override = \"string\";\n  return override;\n}\n\nfunction typeIsBlock(type, stream) {\n  return ((endOfLine(stream) && (type == \"{\" || type == \"]\" || type == \"hash\" || type == \"qualifier\")) || type == \"block-mixin\");\n}\n\nfunction typeIsInterpolation(type, stream) {\n  return type == \"{\" && stream.match(/^\\s*\\$?[\\w-]+/i, false);\n}\n\nfunction typeIsPseudo(type, stream) {\n  return type == \":\" && stream.match(/^[a-z-]+/, false);\n}\n\nfunction startOfLine(stream) {\n  return stream.sol() || stream.string.match(new RegExp(\"^\\\\s*\" + escapeRegExp(stream.current())));\n}\n\nfunction endOfLine(stream) {\n  return stream.eol() || stream.match(/^\\s*$/, false);\n}\n\nfunction firstWordOfLine(line) {\n  var re = /^\\s*[-_]*[a-z0-9]+[\\w-]*/i;\n  var result = typeof line == \"string\" ? line.match(re) : line.string.match(re);\n  return result ? result[0].replace(/^\\s*/, \"\") : \"\";\n}\n\n\n/**\n * Block\n */\nstates.block = function(type, stream, state) {\n  if ((type == \"comment\" && startOfLine(stream)) ||\n      (type == \",\" && endOfLine(stream)) ||\n      type == \"mixin\") {\n    return pushContext(state, stream, \"block\", 0);\n  }\n  if (typeIsInterpolation(type, stream)) {\n    return pushContext(state, stream, \"interpolation\");\n  }\n  if (endOfLine(stream) && type == \"]\") {\n    if (!/^\\s*(\\.|#|:|\\[|\\*|&)/.test(stream.string) && !wordIsTag(firstWordOfLine(stream))) {\n      return pushContext(state, stream, \"block\", 0);\n    }\n  }\n  if (typeIsBlock(type, stream)) {\n    return pushContext(state, stream, \"block\");\n  }\n  if (type == \"}\" && endOfLine(stream)) {\n    return pushContext(state, stream, \"block\", 0);\n  }\n  if (type == \"variable-name\") {\n    if (stream.string.match(/^\\s?\\$[\\w-\\.\\[\\]\\'\\\"]+$/) || wordIsBlock(firstWordOfLine(stream))) {\n      return pushContext(state, stream, \"variableName\");\n    }\n    else {\n      return pushContext(state, stream, \"variableName\", 0);\n    }\n  }\n  if (type == \"=\") {\n    if (!endOfLine(stream) && !wordIsBlock(firstWordOfLine(stream))) {\n      return pushContext(state, stream, \"block\", 0);\n    }\n    return pushContext(state, stream, \"block\");\n  }\n  if (type == \"*\") {\n    if (endOfLine(stream) || stream.match(/\\s*(,|\\.|#|\\[|:|{)/,false)) {\n      override = \"tag\";\n      return pushContext(state, stream, \"block\");\n    }\n  }\n  if (typeIsPseudo(type, stream)) {\n    return pushContext(state, stream, \"pseudo\");\n  }\n  if (/@(font-face|media|supports|(-moz-)?document)/.test(type)) {\n    return pushContext(state, stream, endOfLine(stream) ? \"block\" : \"atBlock\");\n  }\n  if (/@(-(moz|ms|o|webkit)-)?keyframes$/.test(type)) {\n    return pushContext(state, stream, \"keyframes\");\n  }\n  if (/@extends?/.test(type)) {\n    return pushContext(state, stream, \"extend\", 0);\n  }\n  if (type && type.charAt(0) == \"@\") {\n\n    // Property Lookup\n    if (stream.indentation() > 0 && wordIsProperty(stream.current().slice(1))) {\n      override = \"variable\";\n      return \"block\";\n    }\n    if (/(@import|@require|@charset)/.test(type)) {\n      return pushContext(state, stream, \"block\", 0);\n    }\n    return pushContext(state, stream, \"block\");\n  }\n  if (type == \"reference\" && endOfLine(stream)) {\n    return pushContext(state, stream, \"block\");\n  }\n  if (type == \"(\") {\n    return pushContext(state, stream, \"parens\");\n  }\n\n  if (type == \"vendor-prefixes\") {\n    return pushContext(state, stream, \"vendorPrefixes\");\n  }\n  if (type == \"word\") {\n    var word = stream.current();\n    override = wordAsValue(word);\n\n    if (override == \"property\") {\n      if (startOfLine(stream)) {\n        return pushContext(state, stream, \"block\", 0);\n      } else {\n        override = \"atom\";\n        return \"block\";\n      }\n    }\n\n    if (override == \"tag\") {\n\n      // tag is a css value\n      if (/embed|menu|pre|progress|sub|table/.test(word)) {\n        if (wordIsProperty(firstWordOfLine(stream))) {\n          override = \"atom\";\n          return \"block\";\n        }\n      }\n\n      // tag is an attribute\n      if (stream.string.match(new RegExp(\"\\\\[\\\\s*\" + word + \"|\" + word +\"\\\\s*\\\\]\"))) {\n        override = \"atom\";\n        return \"block\";\n      }\n\n      // tag is a variable\n      if (tagVariablesRegexp.test(word)) {\n        if ((startOfLine(stream) && stream.string.match(/=/)) ||\n            (!startOfLine(stream) &&\n             !stream.string.match(/^(\\s*\\.|#|\\&|\\[|\\/|>|\\*)/) &&\n             !wordIsTag(firstWordOfLine(stream)))) {\n          override = \"variable\";\n          if (wordIsBlock(firstWordOfLine(stream)))  return \"block\";\n          return pushContext(state, stream, \"block\", 0);\n        }\n      }\n\n      if (endOfLine(stream)) return pushContext(state, stream, \"block\");\n    }\n    if (override == \"block-keyword\") {\n      override = \"keyword\";\n\n      // Postfix conditionals\n      if (stream.current(/(if|unless)/) && !startOfLine(stream)) {\n        return \"block\";\n      }\n      return pushContext(state, stream, \"block\");\n    }\n    if (word == \"return\") return pushContext(state, stream, \"block\", 0);\n\n    // Placeholder selector\n    if (override == \"variable\" && stream.string.match(/^\\s?\\$[\\w-\\.\\[\\]\\'\\\"]+$/)) {\n      return pushContext(state, stream, \"block\");\n    }\n  }\n  return state.context.type;\n};\n\n\n/**\n * Parens\n */\nstates.parens = function(type, stream, state) {\n  if (type == \"(\") return pushContext(state, stream, \"parens\");\n  if (type == \")\") {\n    if (state.context.prev.type == \"parens\") {\n      return popContext(state, stream);\n    }\n    if ((stream.string.match(/^[a-z][\\w-]*\\(/i) && endOfLine(stream)) ||\n        wordIsBlock(firstWordOfLine(stream)) ||\n        /(\\.|#|:|\\[|\\*|&|>|~|\\+|\\/)/.test(firstWordOfLine(stream)) ||\n        (!stream.string.match(/^-?[a-z][\\w-\\.\\[\\]\\'\\\"]*\\s*=/) &&\n         wordIsTag(firstWordOfLine(stream)))) {\n      return pushContext(state, stream, \"block\");\n    }\n    if (stream.string.match(/^[\\$-]?[a-z][\\w-\\.\\[\\]\\'\\\"]*\\s*=/) ||\n        stream.string.match(/^\\s*(\\(|\\)|[0-9])/) ||\n        stream.string.match(/^\\s+[a-z][\\w-]*\\(/i) ||\n        stream.string.match(/^\\s+[\\$-]?[a-z]/i)) {\n      return pushContext(state, stream, \"block\", 0);\n    }\n    if (endOfLine(stream)) return pushContext(state, stream, \"block\");\n    else return pushContext(state, stream, \"block\", 0);\n  }\n  if (type && type.charAt(0) == \"@\" && wordIsProperty(stream.current().slice(1))) {\n    override = \"variable\";\n  }\n  if (type == \"word\") {\n    var word = stream.current();\n    override = wordAsValue(word);\n    if (override == \"tag\" && tagVariablesRegexp.test(word)) {\n      override = \"variable\";\n    }\n    if (override == \"property\" || word == \"to\") override = \"atom\";\n  }\n  if (type == \"variable-name\") {\n    return pushContext(state, stream, \"variableName\");\n  }\n  if (typeIsPseudo(type, stream)) {\n    return pushContext(state, stream, \"pseudo\");\n  }\n  return state.context.type;\n};\n\n\n/**\n * Vendor prefixes\n */\nstates.vendorPrefixes = function(type, stream, state) {\n  if (type == \"word\") {\n    override = \"property\";\n    return pushContext(state, stream, \"block\", 0);\n  }\n  return popContext(state, stream);\n};\n\n\n/**\n * Pseudo\n */\nstates.pseudo = function(type, stream, state) {\n  if (!wordIsProperty(firstWordOfLine(stream.string))) {\n    stream.match(/^[a-z-]+/);\n    override = \"variableName.special\";\n    if (endOfLine(stream)) return pushContext(state, stream, \"block\");\n    return popContext(state, stream);\n  }\n  return popAndPass(type, stream, state);\n};\n\n\n/**\n * atBlock\n */\nstates.atBlock = function(type, stream, state) {\n  if (type == \"(\") return pushContext(state, stream, \"atBlock_parens\");\n  if (typeIsBlock(type, stream)) {\n    return pushContext(state, stream, \"block\");\n  }\n  if (typeIsInterpolation(type, stream)) {\n    return pushContext(state, stream, \"interpolation\");\n  }\n  if (type == \"word\") {\n    var word = stream.current().toLowerCase();\n    if (/^(only|not|and|or)$/.test(word))\n      override = \"keyword\";\n    else if (documentTypes.hasOwnProperty(word))\n      override = \"tag\";\n    else if (mediaTypes.hasOwnProperty(word))\n      override = \"attribute\";\n    else if (mediaFeatures.hasOwnProperty(word))\n      override = \"property\";\n    else if (nonStandardPropertyKeywords.hasOwnProperty(word))\n      override = \"string.special\";\n    else override = wordAsValue(stream.current());\n    if (override == \"tag\" && endOfLine(stream)) {\n      return pushContext(state, stream, \"block\");\n    }\n  }\n  if (type == \"operator\" && /^(not|and|or)$/.test(stream.current())) {\n    override = \"keyword\";\n  }\n  return state.context.type;\n};\n\nstates.atBlock_parens = function(type, stream, state) {\n  if (type == \"{\" || type == \"}\") return state.context.type;\n  if (type == \")\") {\n    if (endOfLine(stream)) return pushContext(state, stream, \"block\");\n    else return pushContext(state, stream, \"atBlock\");\n  }\n  if (type == \"word\") {\n    var word = stream.current().toLowerCase();\n    override = wordAsValue(word);\n    if (/^(max|min)/.test(word)) override = \"property\";\n    if (override == \"tag\") {\n      tagVariablesRegexp.test(word) ? override = \"variable\" : override = \"atom\";\n    }\n    return state.context.type;\n  }\n  return states.atBlock(type, stream, state);\n};\n\n\n/**\n * Keyframes\n */\nstates.keyframes = function(type, stream, state) {\n  if (stream.indentation() == \"0\" && ((type == \"}\" && startOfLine(stream)) || type == \"]\" || type == \"hash\"\n                                      || type == \"qualifier\" || wordIsTag(stream.current()))) {\n    return popAndPass(type, stream, state);\n  }\n  if (type == \"{\") return pushContext(state, stream, \"keyframes\");\n  if (type == \"}\") {\n    if (startOfLine(stream)) return popContext(state, stream, true);\n    else return pushContext(state, stream, \"keyframes\");\n  }\n  if (type == \"unit\" && /^[0-9]+\\%$/.test(stream.current())) {\n    return pushContext(state, stream, \"keyframes\");\n  }\n  if (type == \"word\") {\n    override = wordAsValue(stream.current());\n    if (override == \"block-keyword\") {\n      override = \"keyword\";\n      return pushContext(state, stream, \"keyframes\");\n    }\n  }\n  if (/@(font-face|media|supports|(-moz-)?document)/.test(type)) {\n    return pushContext(state, stream, endOfLine(stream) ? \"block\" : \"atBlock\");\n  }\n  if (type == \"mixin\") {\n    return pushContext(state, stream, \"block\", 0);\n  }\n  return state.context.type;\n};\n\n\n/**\n * Interpolation\n */\nstates.interpolation = function(type, stream, state) {\n  if (type == \"{\") popContext(state, stream) && pushContext(state, stream, \"block\");\n  if (type == \"}\") {\n    if (stream.string.match(/^\\s*(\\.|#|:|\\[|\\*|&|>|~|\\+|\\/)/i) ||\n        (stream.string.match(/^\\s*[a-z]/i) && wordIsTag(firstWordOfLine(stream)))) {\n      return pushContext(state, stream, \"block\");\n    }\n    if (!stream.string.match(/^(\\{|\\s*\\&)/) ||\n        stream.match(/\\s*[\\w-]/,false)) {\n      return pushContext(state, stream, \"block\", 0);\n    }\n    return pushContext(state, stream, \"block\");\n  }\n  if (type == \"variable-name\") {\n    return pushContext(state, stream, \"variableName\", 0);\n  }\n  if (type == \"word\") {\n    override = wordAsValue(stream.current());\n    if (override == \"tag\") override = \"atom\";\n  }\n  return state.context.type;\n};\n\n\n/**\n * Extend/s\n */\nstates.extend = function(type, stream, state) {\n  if (type == \"[\" || type == \"=\") return \"extend\";\n  if (type == \"]\") return popContext(state, stream);\n  if (type == \"word\") {\n    override = wordAsValue(stream.current());\n    return \"extend\";\n  }\n  return popContext(state, stream);\n};\n\n\n/**\n * Variable name\n */\nstates.variableName = function(type, stream, state) {\n  if (type == \"string\" || type == \"[\" || type == \"]\" || stream.current().match(/^(\\.|\\$)/)) {\n    if (stream.current().match(/^\\.[\\w-]+/i)) override = \"variable\";\n    return \"variableName\";\n  }\n  return popAndPass(type, stream, state);\n};\n\nexport const stylus = {\n  name: \"stylus\",\n  startState: function() {\n    return {\n      tokenize: null,\n      state: \"block\",\n      context: new Context(\"block\", 0, null)\n    };\n  },\n  token: function(stream, state) {\n    if (!state.tokenize && stream.eatSpace()) return null;\n    style = (state.tokenize || tokenBase)(stream, state);\n    if (style && typeof style == \"object\") {\n      type = style[1];\n      style = style[0];\n    }\n    override = style;\n    state.state = states[state.state](type, stream, state);\n    return override;\n  },\n  indent: function(state, textAfter, iCx) {\n    var cx = state.context,\n        ch = textAfter && textAfter.charAt(0),\n        indent = cx.indent,\n        lineFirstWord = firstWordOfLine(textAfter),\n        lineIndent = cx.line.indent,\n        prevLineFirstWord = state.context.prev ? state.context.prev.line.firstWord : \"\",\n        prevLineIndent = state.context.prev ? state.context.prev.line.indent : lineIndent;\n\n    if (cx.prev &&\n        (ch == \"}\" && (cx.type == \"block\" || cx.type == \"atBlock\" || cx.type == \"keyframes\") ||\n         ch == \")\" && (cx.type == \"parens\" || cx.type == \"atBlock_parens\") ||\n         ch == \"{\" && (cx.type == \"at\"))) {\n      indent = cx.indent - iCx.unit;\n    } else if (!(/(\\})/.test(ch))) {\n      if (/@|\\$|\\d/.test(ch) ||\n          /^\\{/.test(textAfter) ||\n/^\\s*\\/(\\/|\\*)/.test(textAfter) ||\n          /^\\s*\\/\\*/.test(prevLineFirstWord) ||\n          /^\\s*[\\w-\\.\\[\\]\\'\\\"]+\\s*(\\?|:|\\+)?=/i.test(textAfter) ||\n          /^(\\+|-)?[a-z][\\w-]*\\(/i.test(textAfter) ||\n          /^return/.test(textAfter) ||\n          wordIsBlock(lineFirstWord)) {\n        indent = lineIndent;\n      } else if (/(\\.|#|:|\\[|\\*|&|>|~|\\+|\\/)/.test(ch) || wordIsTag(lineFirstWord)) {\n        if (/\\,\\s*$/.test(prevLineFirstWord)) {\n          indent = prevLineIndent;\n        } else if (/(\\.|#|:|\\[|\\*|&|>|~|\\+|\\/)/.test(prevLineFirstWord) || wordIsTag(prevLineFirstWord)) {\n          indent = lineIndent <= prevLineIndent ? prevLineIndent : prevLineIndent + iCx.unit;\n        } else {\n          indent = lineIndent;\n        }\n      } else if (!/,\\s*$/.test(textAfter) && (wordIsVendorPrefix(lineFirstWord) || wordIsProperty(lineFirstWord))) {\n        if (wordIsBlock(prevLineFirstWord)) {\n          indent = lineIndent <= prevLineIndent ? prevLineIndent : prevLineIndent + iCx.unit;\n        } else if (/^\\{/.test(prevLineFirstWord)) {\n          indent = lineIndent <= prevLineIndent ? lineIndent : prevLineIndent + iCx.unit;\n        } else if (wordIsVendorPrefix(prevLineFirstWord) || wordIsProperty(prevLineFirstWord)) {\n          indent = lineIndent >= prevLineIndent ? prevLineIndent : lineIndent;\n        } else if (/^(\\.|#|:|\\[|\\*|&|@|\\+|\\-|>|~|\\/)/.test(prevLineFirstWord) ||\n                   /=\\s*$/.test(prevLineFirstWord) ||\n                   wordIsTag(prevLineFirstWord) ||\n                   /^\\$[\\w-\\.\\[\\]\\'\\\"]/.test(prevLineFirstWord)) {\n          indent = prevLineIndent + iCx.unit;\n        } else {\n          indent = lineIndent;\n        }\n      }\n    }\n    return indent;\n  },\n  languageData: {\n    indentOnInput: /^\\s*\\}$/,\n    commentTokens: {line: \"//\", block: {open: \"/*\", close: \"*/\"}},\n    autocomplete: hintWords\n  }\n};\n","function wordSet(words) {\n  var set = {}\n  for (var i = 0; i < words.length; i++) set[words[i]] = true\n  return set\n}\n\nvar keywords = wordSet([\"_\",\"var\",\"let\",\"actor\",\"class\",\"enum\",\"extension\",\"import\",\"protocol\",\"struct\",\"func\",\"typealias\",\"associatedtype\",\n                        \"open\",\"public\",\"internal\",\"fileprivate\",\"private\",\"deinit\",\"init\",\"new\",\"override\",\"self\",\"subscript\",\"super\",\n                        \"convenience\",\"dynamic\",\"final\",\"indirect\",\"lazy\",\"required\",\"static\",\"unowned\",\"unowned(safe)\",\"unowned(unsafe)\",\"weak\",\"as\",\"is\",\n                        \"break\",\"case\",\"continue\",\"default\",\"else\",\"fallthrough\",\"for\",\"guard\",\"if\",\"in\",\"repeat\",\"switch\",\"where\",\"while\",\n                        \"defer\",\"return\",\"inout\",\"mutating\",\"nonmutating\",\"isolated\",\"nonisolated\",\"catch\",\"do\",\"rethrows\",\"throw\",\"throws\",\"async\",\"await\",\"try\",\"didSet\",\"get\",\"set\",\"willSet\",\n                        \"assignment\",\"associativity\",\"infix\",\"left\",\"none\",\"operator\",\"postfix\",\"precedence\",\"precedencegroup\",\"prefix\",\"right\",\n                        \"Any\",\"AnyObject\",\"Type\",\"dynamicType\",\"Self\",\"Protocol\",\"__COLUMN__\",\"__FILE__\",\"__FUNCTION__\",\"__LINE__\"])\nvar definingKeywords = wordSet([\"var\",\"let\",\"actor\",\"class\",\"enum\",\"extension\",\"import\",\"protocol\",\"struct\",\"func\",\"typealias\",\"associatedtype\",\"for\"])\nvar atoms = wordSet([\"true\",\"false\",\"nil\",\"self\",\"super\",\"_\"])\nvar types = wordSet([\"Array\",\"Bool\",\"Character\",\"Dictionary\",\"Double\",\"Float\",\"Int\",\"Int8\",\"Int16\",\"Int32\",\"Int64\",\"Never\",\"Optional\",\"Set\",\"String\",\n                     \"UInt8\",\"UInt16\",\"UInt32\",\"UInt64\",\"Void\"])\nvar operators = \"+-/*%=|&<>~^?!\"\nvar punc = \":;,.(){}[]\"\nvar binary = /^\\-?0b[01][01_]*/\nvar octal = /^\\-?0o[0-7][0-7_]*/\nvar hexadecimal = /^\\-?0x[\\dA-Fa-f][\\dA-Fa-f_]*(?:(?:\\.[\\dA-Fa-f][\\dA-Fa-f_]*)?[Pp]\\-?\\d[\\d_]*)?/\nvar decimal = /^\\-?\\d[\\d_]*(?:\\.\\d[\\d_]*)?(?:[Ee]\\-?\\d[\\d_]*)?/\nvar identifier = /^\\$\\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\\1/\nvar property = /^\\.(?:\\$\\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\\1)/\nvar instruction = /^\\#[A-Za-z]+/\nvar attribute = /^@(?:\\$\\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\\1)/\n//var regexp = /^\\/(?!\\s)(?:\\/\\/)?(?:\\\\.|[^\\/])+\\//\n\nfunction tokenBase(stream, state, prev) {\n  if (stream.sol()) state.indented = stream.indentation()\n  if (stream.eatSpace()) return null\n\n  var ch = stream.peek()\n  if (ch == \"/\") {\n    if (stream.match(\"//\")) {\n      stream.skipToEnd()\n      return \"comment\"\n    }\n    if (stream.match(\"/*\")) {\n      state.tokenize.push(tokenComment)\n      return tokenComment(stream, state)\n    }\n  }\n  if (stream.match(instruction)) return \"builtin\"\n  if (stream.match(attribute)) return \"attribute\"\n  if (stream.match(binary)) return \"number\"\n  if (stream.match(octal)) return \"number\"\n  if (stream.match(hexadecimal)) return \"number\"\n  if (stream.match(decimal)) return \"number\"\n  if (stream.match(property)) return \"property\"\n  if (operators.indexOf(ch) > -1) {\n    stream.next()\n    return \"operator\"\n  }\n  if (punc.indexOf(ch) > -1) {\n    stream.next()\n    stream.match(\"..\")\n    return \"punctuation\"\n  }\n  var stringMatch\n  if (stringMatch = stream.match(/(\"\"\"|\"|')/)) {\n    var tokenize = tokenString.bind(null, stringMatch[0])\n    state.tokenize.push(tokenize)\n    return tokenize(stream, state)\n  }\n\n  if (stream.match(identifier)) {\n    var ident = stream.current()\n    if (types.hasOwnProperty(ident)) return \"type\"\n    if (atoms.hasOwnProperty(ident)) return \"atom\"\n    if (keywords.hasOwnProperty(ident)) {\n      if (definingKeywords.hasOwnProperty(ident))\n        state.prev = \"define\"\n      return \"keyword\"\n    }\n    if (prev == \"define\") return \"def\"\n    return \"variable\"\n  }\n\n  stream.next()\n  return null\n}\n\nfunction tokenUntilClosingParen() {\n  var depth = 0\n  return function(stream, state, prev) {\n    var inner = tokenBase(stream, state, prev)\n    if (inner == \"punctuation\") {\n      if (stream.current() == \"(\") ++depth\n      else if (stream.current() == \")\") {\n        if (depth == 0) {\n          stream.backUp(1)\n          state.tokenize.pop()\n          return state.tokenize[state.tokenize.length - 1](stream, state)\n        }\n        else --depth\n      }\n    }\n    return inner\n  }\n}\n\nfunction tokenString(openQuote, stream, state) {\n  var singleLine = openQuote.length == 1\n  var ch, escaped = false\n  while (ch = stream.peek()) {\n    if (escaped) {\n      stream.next()\n      if (ch == \"(\") {\n        state.tokenize.push(tokenUntilClosingParen())\n        return \"string\"\n      }\n      escaped = false\n    } else if (stream.match(openQuote)) {\n      state.tokenize.pop()\n      return \"string\"\n    } else {\n      stream.next()\n      escaped = ch == \"\\\\\"\n    }\n  }\n  if (singleLine) {\n    state.tokenize.pop()\n  }\n  return \"string\"\n}\n\nfunction tokenComment(stream, state) {\n  var ch\n  while (ch = stream.next()) {\n    if (ch === \"/\" && stream.eat(\"*\")) {\n      state.tokenize.push(tokenComment)\n    } else if (ch === \"*\" && stream.eat(\"/\")) {\n      state.tokenize.pop()\n      break\n    }\n  }\n  return \"comment\"\n}\n\nfunction Context(prev, align, indented) {\n  this.prev = prev\n  this.align = align\n  this.indented = indented\n}\n\nfunction pushContext(state, stream) {\n  var align = stream.match(/^\\s*($|\\/[\\/\\*]|[)}\\]])/, false) ? null : stream.column() + 1\n  state.context = new Context(state.context, align, state.indented)\n}\n\nfunction popContext(state) {\n  if (state.context) {\n    state.indented = state.context.indented\n    state.context = state.context.prev\n  }\n}\n\nexport const swift = {\n  name: \"swift\",\n  startState: function() {\n    return {\n      prev: null,\n      context: null,\n      indented: 0,\n      tokenize: []\n    }\n  },\n\n  token: function(stream, state) {\n    var prev = state.prev\n    state.prev = null\n    var tokenize = state.tokenize[state.tokenize.length - 1] || tokenBase\n    var style = tokenize(stream, state, prev)\n    if (!style || style == \"comment\") state.prev = prev\n    else if (!state.prev) state.prev = style\n\n    if (style == \"punctuation\") {\n      var bracket = /[\\(\\[\\{]|([\\]\\)\\}])/.exec(stream.current())\n      if (bracket) (bracket[1] ? popContext : pushContext)(state, stream)\n    }\n\n    return style\n  },\n\n  indent: function(state, textAfter, iCx) {\n    var cx = state.context\n    if (!cx) return 0\n    var closing = /^[\\]\\}\\)]/.test(textAfter)\n    if (cx.align != null) return cx.align - (closing ? 1 : 0)\n    return cx.indented + (closing ? 0 : iCx.unit)\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*[\\)\\}\\]]$/,\n    commentTokens: {line: \"//\", block: {open: \"/*\", close: \"*/\"}},\n    closeBrackets: {brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"`\"]}\n  }\n}\n","function parseWords(str) {\n  var obj = {}, words = str.split(\" \");\n  for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n  return obj;\n}\nvar keywords = parseWords(\"Tcl safe after append array auto_execok auto_import auto_load \" +\n                          \"auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror \" +\n                          \"binary break catch cd close concat continue dde eof encoding error \" +\n                          \"eval exec exit expr fblocked fconfigure fcopy file fileevent filename \" +\n                          \"filename flush for foreach format gets glob global history http if \" +\n                          \"incr info interp join lappend lindex linsert list llength load lrange \" +\n                          \"lreplace lsearch lset lsort memory msgcat namespace open package parray \" +\n                          \"pid pkg::create pkg_mkIndex proc puts pwd re_syntax read regex regexp \" +\n                          \"registry regsub rename resource return scan seek set socket source split \" +\n                          \"string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord \" +\n                          \"tcl_wordBreakAfter tcl_startOfPreviousWord tcl_wordBreakBefore tcltest \" +\n                          \"tclvars tell time trace unknown unset update uplevel upvar variable \" +\n                          \"vwait\");\nvar functions = parseWords(\"if elseif else and not or eq ne in ni for foreach while switch\");\nvar isOperatorChar = /[+\\-*&%=<>!?^\\/\\|]/;\nfunction chain(stream, state, f) {\n  state.tokenize = f;\n  return f(stream, state);\n}\nfunction tokenBase(stream, state) {\n  var beforeParams = state.beforeParams;\n  state.beforeParams = false;\n  var ch = stream.next();\n  if ((ch == '\"' || ch == \"'\") && state.inParams) {\n    return chain(stream, state, tokenString(ch));\n  } else if (/[\\[\\]{}\\(\\),;\\.]/.test(ch)) {\n    if (ch == \"(\" && beforeParams) state.inParams = true;\n    else if (ch == \")\") state.inParams = false;\n    return null;\n  } else if (/\\d/.test(ch)) {\n    stream.eatWhile(/[\\w\\.]/);\n    return \"number\";\n  } else if (ch == \"#\") {\n    if (stream.eat(\"*\"))\n      return chain(stream, state, tokenComment);\n    if (ch == \"#\" && stream.match(/ *\\[ *\\[/))\n      return chain(stream, state, tokenUnparsed);\n    stream.skipToEnd();\n    return \"comment\";\n  } else if (ch == '\"') {\n    stream.skipTo(/\"/);\n    return \"comment\";\n  } else if (ch == \"$\") {\n    stream.eatWhile(/[$_a-z0-9A-Z\\.{:]/);\n    stream.eatWhile(/}/);\n    state.beforeParams = true;\n    return \"builtin\";\n  } else if (isOperatorChar.test(ch)) {\n    stream.eatWhile(isOperatorChar);\n    return \"comment\";\n  } else {\n    stream.eatWhile(/[\\w\\$_{}\\xa1-\\uffff]/);\n    var word = stream.current().toLowerCase();\n    if (keywords && keywords.propertyIsEnumerable(word))\n      return \"keyword\";\n    if (functions && functions.propertyIsEnumerable(word)) {\n      state.beforeParams = true;\n      return \"keyword\";\n    }\n    return null;\n  }\n}\nfunction tokenString(quote) {\n  return function(stream, state) {\n    var escaped = false, next, end = false;\n    while ((next = stream.next()) != null) {\n      if (next == quote && !escaped) {\n        end = true;\n        break;\n      }\n      escaped = !escaped && next == \"\\\\\";\n    }\n    if (end) state.tokenize = tokenBase;\n    return \"string\";\n  };\n}\nfunction tokenComment(stream, state) {\n  var maybeEnd = false, ch;\n  while (ch = stream.next()) {\n    if (ch == \"#\" && maybeEnd) {\n      state.tokenize = tokenBase;\n      break;\n    }\n    maybeEnd = (ch == \"*\");\n  }\n  return \"comment\";\n}\nfunction tokenUnparsed(stream, state) {\n  var maybeEnd = 0, ch;\n  while (ch = stream.next()) {\n    if (ch == \"#\" && maybeEnd == 2) {\n      state.tokenize = tokenBase;\n      break;\n    }\n    if (ch == \"]\")\n      maybeEnd++;\n    else if (ch != \" \")\n      maybeEnd = 0;\n  }\n  return \"meta\";\n}\nexport const tcl = {\n  name: \"tcl\",\n  startState: function() {\n    return {\n      tokenize: tokenBase,\n      beforeParams: false,\n      inParams: false\n    };\n  },\n  token: function(stream, state) {\n    if (stream.eatSpace()) return null;\n    return state.tokenize(stream, state);\n  },\n  languageData: {\n    commentTokens: {line: \"#\"}\n  }\n};\n","var TOKEN_STYLES = {\n  addition: \"inserted\",\n  attributes: \"propertyName\",\n  bold: \"strong\",\n  cite: \"keyword\",\n  code: \"monospace\",\n  definitionList: \"list\",\n  deletion: \"deleted\",\n  div: \"punctuation\",\n  em: \"emphasis\",\n  footnote: \"variable\",\n  footCite: \"qualifier\",\n  header: \"heading\",\n  html: \"comment\",\n  image: \"atom\",\n  italic: \"emphasis\",\n  link: \"link\",\n  linkDefinition: \"link\",\n  list1: \"list\",\n  list2: \"list.special\",\n  list3: \"list\",\n  notextile: \"string.special\",\n  pre: \"operator\",\n  p: \"content\",\n  quote: \"bracket\",\n  span: \"quote\",\n  specialChar: \"character\",\n  strong: \"strong\",\n  sub: \"content.special\",\n  sup: \"content.special\",\n  table: \"variableName.special\",\n  tableHeading: \"operator\"\n};\n\nfunction startNewLine(stream, state) {\n  state.mode = Modes.newLayout;\n  state.tableHeading = false;\n\n  if (state.layoutType === \"definitionList\" && state.spanningLayout &&\n      stream.match(RE(\"definitionListEnd\"), false))\n    state.spanningLayout = false;\n}\n\nfunction handlePhraseModifier(stream, state, ch) {\n  if (ch === \"_\") {\n    if (stream.eat(\"_\"))\n      return togglePhraseModifier(stream, state, \"italic\", /__/, 2);\n    else\n      return togglePhraseModifier(stream, state, \"em\", /_/, 1);\n  }\n\n  if (ch === \"*\") {\n    if (stream.eat(\"*\")) {\n      return togglePhraseModifier(stream, state, \"bold\", /\\*\\*/, 2);\n    }\n    return togglePhraseModifier(stream, state, \"strong\", /\\*/, 1);\n  }\n\n  if (ch === \"[\") {\n    if (stream.match(/\\d+\\]/)) state.footCite = true;\n    return tokenStyles(state);\n  }\n\n  if (ch === \"(\") {\n    var spec = stream.match(/^(r|tm|c)\\)/);\n    if (spec)\n      return TOKEN_STYLES.specialChar\n  }\n\n  if (ch === \"<\" && stream.match(/(\\w+)[^>]+>[^<]+<\\/\\1>/))\n    return TOKEN_STYLES.html\n\n  if (ch === \"?\" && stream.eat(\"?\"))\n    return togglePhraseModifier(stream, state, \"cite\", /\\?\\?/, 2);\n\n  if (ch === \"=\" && stream.eat(\"=\"))\n    return togglePhraseModifier(stream, state, \"notextile\", /==/, 2);\n\n  if (ch === \"-\" && !stream.eat(\"-\"))\n    return togglePhraseModifier(stream, state, \"deletion\", /-/, 1);\n\n  if (ch === \"+\")\n    return togglePhraseModifier(stream, state, \"addition\", /\\+/, 1);\n\n  if (ch === \"~\")\n    return togglePhraseModifier(stream, state, \"sub\", /~/, 1);\n\n  if (ch === \"^\")\n    return togglePhraseModifier(stream, state, \"sup\", /\\^/, 1);\n\n  if (ch === \"%\")\n    return togglePhraseModifier(stream, state, \"span\", /%/, 1);\n\n  if (ch === \"@\")\n    return togglePhraseModifier(stream, state, \"code\", /@/, 1);\n\n  if (ch === \"!\") {\n    var type = togglePhraseModifier(stream, state, \"image\", /(?:\\([^\\)]+\\))?!/, 1);\n    stream.match(/^:\\S+/); // optional Url portion\n    return type;\n  }\n  return tokenStyles(state);\n}\n\nfunction togglePhraseModifier(stream, state, phraseModifier, closeRE, openSize) {\n  var charBefore = stream.pos > openSize ? stream.string.charAt(stream.pos - openSize - 1) : null;\n  var charAfter = stream.peek();\n  if (state[phraseModifier]) {\n    if ((!charAfter || /\\W/.test(charAfter)) && charBefore && /\\S/.test(charBefore)) {\n      var type = tokenStyles(state);\n      state[phraseModifier] = false;\n      return type;\n    }\n  } else if ((!charBefore || /\\W/.test(charBefore)) && charAfter && /\\S/.test(charAfter) &&\n             stream.match(new RegExp(\"^.*\\\\S\" + closeRE.source + \"(?:\\\\W|$)\"), false)) {\n    state[phraseModifier] = true;\n    state.mode = Modes.attributes;\n  }\n  return tokenStyles(state);\n};\n\nfunction tokenStyles(state) {\n  var disabled = textileDisabled(state);\n  if (disabled) return disabled;\n\n  var styles = [];\n  if (state.layoutType) styles.push(TOKEN_STYLES[state.layoutType]);\n\n  styles = styles.concat(activeStyles(\n    state, \"addition\", \"bold\", \"cite\", \"code\", \"deletion\", \"em\", \"footCite\",\n    \"image\", \"italic\", \"link\", \"span\", \"strong\", \"sub\", \"sup\", \"table\", \"tableHeading\"));\n\n  if (state.layoutType === \"header\")\n    styles.push(TOKEN_STYLES.header + \"-\" + state.header);\n\n  return styles.length ? styles.join(\" \") : null;\n}\n\nfunction textileDisabled(state) {\n  var type = state.layoutType;\n\n  switch(type) {\n  case \"notextile\":\n  case \"code\":\n  case \"pre\":\n    return TOKEN_STYLES[type];\n  default:\n    if (state.notextile)\n      return TOKEN_STYLES.notextile + (type ? (\" \" + TOKEN_STYLES[type]) : \"\");\n    return null;\n  }\n}\n\nfunction activeStyles(state) {\n  var styles = [];\n  for (var i = 1; i < arguments.length; ++i) {\n    if (state[arguments[i]])\n      styles.push(TOKEN_STYLES[arguments[i]]);\n  }\n  return styles;\n}\n\nfunction blankLine(state) {\n  var spanningLayout = state.spanningLayout, type = state.layoutType;\n\n  for (var key in state) if (state.hasOwnProperty(key))\n    delete state[key];\n\n  state.mode = Modes.newLayout;\n  if (spanningLayout) {\n    state.layoutType = type;\n    state.spanningLayout = true;\n  }\n}\n\nvar REs = {\n  cache: {},\n  single: {\n    bc: \"bc\",\n    bq: \"bq\",\n    definitionList: /- .*?:=+/,\n    definitionListEnd: /.*=:\\s*$/,\n    div: \"div\",\n    drawTable: /\\|.*\\|/,\n    foot: /fn\\d+/,\n    header: /h[1-6]/,\n    html: /\\s*<(?:\\/)?(\\w+)(?:[^>]+)?>(?:[^<]+<\\/\\1>)?/,\n    link: /[^\"]+\":\\S/,\n    linkDefinition: /\\[[^\\s\\]]+\\]\\S+/,\n    list: /(?:#+|\\*+)/,\n    notextile: \"notextile\",\n    para: \"p\",\n    pre: \"pre\",\n    table: \"table\",\n    tableCellAttributes: /[\\/\\\\]\\d+/,\n    tableHeading: /\\|_\\./,\n    tableText: /[^\"_\\*\\[\\(\\?\\+~\\^%@|-]+/,\n    text: /[^!\"_=\\*\\[\\(<\\?\\+~\\^%@-]+/\n  },\n  attributes: {\n    align: /(?:<>|<|>|=)/,\n    selector: /\\([^\\(][^\\)]+\\)/,\n    lang: /\\[[^\\[\\]]+\\]/,\n    pad: /(?:\\(+|\\)+){1,2}/,\n    css: /\\{[^\\}]+\\}/\n  },\n  createRe: function(name) {\n    switch (name) {\n    case \"drawTable\":\n      return REs.makeRe(\"^\", REs.single.drawTable, \"$\");\n    case \"html\":\n      return REs.makeRe(\"^\", REs.single.html, \"(?:\", REs.single.html, \")*\", \"$\");\n    case \"linkDefinition\":\n      return REs.makeRe(\"^\", REs.single.linkDefinition, \"$\");\n    case \"listLayout\":\n      return REs.makeRe(\"^\", REs.single.list, RE(\"allAttributes\"), \"*\\\\s+\");\n    case \"tableCellAttributes\":\n      return REs.makeRe(\"^\", REs.choiceRe(REs.single.tableCellAttributes,\n                                          RE(\"allAttributes\")), \"+\\\\.\");\n    case \"type\":\n      return REs.makeRe(\"^\", RE(\"allTypes\"));\n    case \"typeLayout\":\n      return REs.makeRe(\"^\", RE(\"allTypes\"), RE(\"allAttributes\"),\n                        \"*\\\\.\\\\.?\", \"(\\\\s+|$)\");\n    case \"attributes\":\n      return REs.makeRe(\"^\", RE(\"allAttributes\"), \"+\");\n\n    case \"allTypes\":\n      return REs.choiceRe(REs.single.div, REs.single.foot,\n                          REs.single.header, REs.single.bc, REs.single.bq,\n                          REs.single.notextile, REs.single.pre, REs.single.table,\n                          REs.single.para);\n\n    case \"allAttributes\":\n      return REs.choiceRe(REs.attributes.selector, REs.attributes.css,\n                          REs.attributes.lang, REs.attributes.align, REs.attributes.pad);\n\n    default:\n      return REs.makeRe(\"^\", REs.single[name]);\n    }\n  },\n  makeRe: function() {\n    var pattern = \"\";\n    for (var i = 0; i < arguments.length; ++i) {\n      var arg = arguments[i];\n      pattern += (typeof arg === \"string\") ? arg : arg.source;\n    }\n    return new RegExp(pattern);\n  },\n  choiceRe: function() {\n    var parts = [arguments[0]];\n    for (var i = 1; i < arguments.length; ++i) {\n      parts[i * 2 - 1] = \"|\";\n      parts[i * 2] = arguments[i];\n    }\n\n    parts.unshift(\"(?:\");\n    parts.push(\")\");\n    return REs.makeRe.apply(null, parts);\n  }\n};\n\nfunction RE(name) {\n  return (REs.cache[name] || (REs.cache[name] = REs.createRe(name)));\n}\n\nvar Modes = {\n  newLayout: function(stream, state) {\n    if (stream.match(RE(\"typeLayout\"), false)) {\n      state.spanningLayout = false;\n      return (state.mode = Modes.blockType)(stream, state);\n    }\n    var newMode;\n    if (!textileDisabled(state)) {\n      if (stream.match(RE(\"listLayout\"), false))\n        newMode = Modes.list;\n      else if (stream.match(RE(\"drawTable\"), false))\n        newMode = Modes.table;\n      else if (stream.match(RE(\"linkDefinition\"), false))\n        newMode = Modes.linkDefinition;\n      else if (stream.match(RE(\"definitionList\")))\n        newMode = Modes.definitionList;\n      else if (stream.match(RE(\"html\"), false))\n        newMode = Modes.html;\n    }\n    return (state.mode = (newMode || Modes.text))(stream, state);\n  },\n\n  blockType: function(stream, state) {\n    var match, type;\n    state.layoutType = null;\n\n    if (match = stream.match(RE(\"type\")))\n      type = match[0];\n    else\n      return (state.mode = Modes.text)(stream, state);\n\n    if (match = type.match(RE(\"header\"))) {\n      state.layoutType = \"header\";\n      state.header = parseInt(match[0][1]);\n    } else if (type.match(RE(\"bq\"))) {\n      state.layoutType = \"quote\";\n    } else if (type.match(RE(\"bc\"))) {\n      state.layoutType = \"code\";\n    } else if (type.match(RE(\"foot\"))) {\n      state.layoutType = \"footnote\";\n    } else if (type.match(RE(\"notextile\"))) {\n      state.layoutType = \"notextile\";\n    } else if (type.match(RE(\"pre\"))) {\n      state.layoutType = \"pre\";\n    } else if (type.match(RE(\"div\"))) {\n      state.layoutType = \"div\";\n    } else if (type.match(RE(\"table\"))) {\n      state.layoutType = \"table\";\n    }\n\n    state.mode = Modes.attributes;\n    return tokenStyles(state);\n  },\n\n  text: function(stream, state) {\n    if (stream.match(RE(\"text\"))) return tokenStyles(state);\n\n    var ch = stream.next();\n    if (ch === '\"')\n      return (state.mode = Modes.link)(stream, state);\n    return handlePhraseModifier(stream, state, ch);\n  },\n\n  attributes: function(stream, state) {\n    state.mode = Modes.layoutLength;\n\n    if (stream.match(RE(\"attributes\")))\n      return TOKEN_STYLES.attributes\n    else\n      return tokenStyles(state);\n  },\n\n  layoutLength: function(stream, state) {\n    if (stream.eat(\".\") && stream.eat(\".\"))\n      state.spanningLayout = true;\n\n    state.mode = Modes.text;\n    return tokenStyles(state);\n  },\n\n  list: function(stream, state) {\n    var match = stream.match(RE(\"list\"));\n    state.listDepth = match[0].length;\n    var listMod = (state.listDepth - 1) % 3;\n    if (!listMod)\n      state.layoutType = \"list1\";\n    else if (listMod === 1)\n      state.layoutType = \"list2\";\n    else\n      state.layoutType = \"list3\";\n\n    state.mode = Modes.attributes;\n    return tokenStyles(state);\n  },\n\n  link: function(stream, state) {\n    state.mode = Modes.text;\n    if (stream.match(RE(\"link\"))) {\n      stream.match(/\\S+/);\n      return TOKEN_STYLES.link\n    }\n    return tokenStyles(state);\n  },\n\n  linkDefinition: function(stream) {\n    stream.skipToEnd();\n    return TOKEN_STYLES.linkDefinition\n  },\n\n  definitionList: function(stream, state) {\n    stream.match(RE(\"definitionList\"));\n\n    state.layoutType = \"definitionList\";\n\n    if (stream.match(/\\s*$/))\n      state.spanningLayout = true;\n    else\n      state.mode = Modes.attributes;\n\n    return tokenStyles(state);\n  },\n\n  html: function(stream) {\n    stream.skipToEnd();\n    return TOKEN_STYLES.html\n  },\n\n  table: function(stream, state) {\n    state.layoutType = \"table\";\n    return (state.mode = Modes.tableCell)(stream, state);\n  },\n\n  tableCell: function(stream, state) {\n    if (stream.match(RE(\"tableHeading\")))\n      state.tableHeading = true;\n    else\n      stream.eat(\"|\");\n\n    state.mode = Modes.tableCellAttributes;\n    return tokenStyles(state);\n  },\n\n  tableCellAttributes: function(stream, state) {\n    state.mode = Modes.tableText;\n\n    if (stream.match(RE(\"tableCellAttributes\")))\n      return TOKEN_STYLES.attributes\n    else\n      return tokenStyles(state);\n  },\n\n  tableText: function(stream, state) {\n    if (stream.match(RE(\"tableText\")))\n      return tokenStyles(state);\n\n    if (stream.peek() === \"|\") { // end of cell\n      state.mode = Modes.tableCell;\n      return tokenStyles(state);\n    }\n    return handlePhraseModifier(stream, state, stream.next());\n  }\n};\n\nexport const textile = {\n  name: \"textile\",\n  startState: function() {\n    return { mode: Modes.newLayout };\n  },\n  token: function(stream, state) {\n    if (stream.sol()) startNewLine(stream, state);\n    return state.mode(stream, state);\n  },\n  blankLine: blankLine\n};\n","// Tokenizer\nvar textwords = {};\n\nvar keywords = {\n  \"allTags\": true, \"closeAll\": true, \"list\": true,\n  \"newJournal\": true, \"newTiddler\": true,\n  \"permaview\": true, \"saveChanges\": true,\n  \"search\": true, \"slider\": true, \"tabs\": true,\n  \"tag\": true, \"tagging\": true, \"tags\": true,\n  \"tiddler\": true, \"timeline\": true,\n  \"today\": true, \"version\": true, \"option\": true,\n  \"with\": true, \"filter\": true\n};\n\nvar isSpaceName = /[\\w_\\-]/i,\n    reHR = /^\\-\\-\\-\\-+$/,                                 // <hr>\n    reWikiCommentStart = /^\\/\\*\\*\\*$/,            // /***\n    reWikiCommentStop = /^\\*\\*\\*\\/$/,             // ***/\n    reBlockQuote = /^<<<$/,\n\n    reJsCodeStart = /^\\/\\/\\{\\{\\{$/,                       // //{{{ js block start\n    reJsCodeStop = /^\\/\\/\\}\\}\\}$/,                        // //}}} js stop\n    reXmlCodeStart = /^<!--\\{\\{\\{-->$/,           // xml block start\n    reXmlCodeStop = /^<!--\\}\\}\\}-->$/,            // xml stop\n\n    reCodeBlockStart = /^\\{\\{\\{$/,                        // {{{ TW text div block start\n    reCodeBlockStop = /^\\}\\}\\}$/,                 // }}} TW text stop\n\n    reUntilCodeStop = /.*?\\}\\}\\}/;\n\nfunction chain(stream, state, f) {\n  state.tokenize = f;\n  return f(stream, state);\n}\n\nfunction tokenBase(stream, state) {\n  var sol = stream.sol(), ch = stream.peek();\n\n  state.block = false;        // indicates the start of a code block.\n\n  // check start of  blocks\n  if (sol && /[<\\/\\*{}\\-]/.test(ch)) {\n    if (stream.match(reCodeBlockStart)) {\n      state.block = true;\n      return chain(stream, state, twTokenCode);\n    }\n    if (stream.match(reBlockQuote))\n      return 'quote';\n    if (stream.match(reWikiCommentStart) || stream.match(reWikiCommentStop))\n      return 'comment';\n    if (stream.match(reJsCodeStart) || stream.match(reJsCodeStop) || stream.match(reXmlCodeStart) || stream.match(reXmlCodeStop))\n      return 'comment';\n    if (stream.match(reHR))\n      return 'contentSeparator';\n  }\n\n  stream.next();\n  if (sol && /[\\/\\*!#;:>|]/.test(ch)) {\n    if (ch == \"!\") { // tw header\n      stream.skipToEnd();\n      return \"header\";\n    }\n    if (ch == \"*\") { // tw list\n      stream.eatWhile('*');\n      return \"comment\";\n    }\n    if (ch == \"#\") { // tw numbered list\n      stream.eatWhile('#');\n      return \"comment\";\n    }\n    if (ch == \";\") { // definition list, term\n      stream.eatWhile(';');\n      return \"comment\";\n    }\n    if (ch == \":\") { // definition list, description\n      stream.eatWhile(':');\n      return \"comment\";\n    }\n    if (ch == \">\") { // single line quote\n      stream.eatWhile(\">\");\n      return \"quote\";\n    }\n    if (ch == '|')\n      return 'header';\n  }\n\n  if (ch == '{' && stream.match('{{'))\n    return chain(stream, state, twTokenCode);\n\n  // rudimentary html:// file:// link matching. TW knows much more ...\n  if (/[hf]/i.test(ch) &&\n      /[ti]/i.test(stream.peek()) &&\n      stream.match(/\\b(ttps?|tp|ile):\\/\\/[\\-A-Z0-9+&@#\\/%?=~_|$!:,.;]*[A-Z0-9+&@#\\/%=~_|$]/i))\n    return \"link\";\n\n  // just a little string indicator, don't want to have the whole string covered\n  if (ch == '\"')\n    return 'string';\n\n  if (ch == '~')    // _no_ CamelCase indicator should be bold\n    return 'brace';\n\n  if (/[\\[\\]]/.test(ch) && stream.match(ch)) // check for [[..]]\n    return 'brace';\n\n  if (ch == \"@\") {    // check for space link. TODO fix @@...@@ highlighting\n    stream.eatWhile(isSpaceName);\n    return \"link\";\n  }\n\n  if (/\\d/.test(ch)) {        // numbers\n    stream.eatWhile(/\\d/);\n    return \"number\";\n  }\n\n  if (ch == \"/\") { // tw invisible comment\n    if (stream.eat(\"%\")) {\n      return chain(stream, state, twTokenComment);\n    } else if (stream.eat(\"/\")) { //\n      return chain(stream, state, twTokenEm);\n    }\n  }\n\n  if (ch == \"_\" && stream.eat(\"_\")) // tw underline\n    return chain(stream, state, twTokenUnderline);\n\n  // strikethrough and mdash handling\n  if (ch == \"-\" && stream.eat(\"-\")) {\n    // if strikethrough looks ugly, change CSS.\n    if (stream.peek() != ' ')\n      return chain(stream, state, twTokenStrike);\n    // mdash\n    if (stream.peek() == ' ')\n      return 'brace';\n  }\n\n  if (ch == \"'\" && stream.eat(\"'\")) // tw bold\n    return chain(stream, state, twTokenStrong);\n\n  if (ch == \"<\" && stream.eat(\"<\")) // tw macro\n    return chain(stream, state, twTokenMacro);\n\n  // core macro handling\n  stream.eatWhile(/[\\w\\$_]/);\n  return textwords.propertyIsEnumerable(stream.current()) ? \"keyword\" : null\n}\n\n// tw invisible comment\nfunction twTokenComment(stream, state) {\n  var maybeEnd = false, ch;\n  while (ch = stream.next()) {\n    if (ch == \"/\" && maybeEnd) {\n      state.tokenize = tokenBase;\n      break;\n    }\n    maybeEnd = (ch == \"%\");\n  }\n  return \"comment\";\n}\n\n// tw strong / bold\nfunction twTokenStrong(stream, state) {\n  var maybeEnd = false,\n      ch;\n  while (ch = stream.next()) {\n    if (ch == \"'\" && maybeEnd) {\n      state.tokenize = tokenBase;\n      break;\n    }\n    maybeEnd = (ch == \"'\");\n  }\n  return \"strong\";\n}\n\n// tw code\nfunction twTokenCode(stream, state) {\n  var sb = state.block;\n\n  if (sb && stream.current()) {\n    return \"comment\";\n  }\n\n  if (!sb && stream.match(reUntilCodeStop)) {\n    state.tokenize = tokenBase;\n    return \"comment\";\n  }\n\n  if (sb && stream.sol() && stream.match(reCodeBlockStop)) {\n    state.tokenize = tokenBase;\n    return \"comment\";\n  }\n\n  stream.next();\n  return \"comment\";\n}\n\n// tw em / italic\nfunction twTokenEm(stream, state) {\n  var maybeEnd = false,\n      ch;\n  while (ch = stream.next()) {\n    if (ch == \"/\" && maybeEnd) {\n      state.tokenize = tokenBase;\n      break;\n    }\n    maybeEnd = (ch == \"/\");\n  }\n  return \"emphasis\";\n}\n\n// tw underlined text\nfunction twTokenUnderline(stream, state) {\n  var maybeEnd = false,\n      ch;\n  while (ch = stream.next()) {\n    if (ch == \"_\" && maybeEnd) {\n      state.tokenize = tokenBase;\n      break;\n    }\n    maybeEnd = (ch == \"_\");\n  }\n  return \"link\";\n}\n\n// tw strike through text looks ugly\n// change CSS if needed\nfunction twTokenStrike(stream, state) {\n  var maybeEnd = false, ch;\n\n  while (ch = stream.next()) {\n    if (ch == \"-\" && maybeEnd) {\n      state.tokenize = tokenBase;\n      break;\n    }\n    maybeEnd = (ch == \"-\");\n  }\n  return \"deleted\";\n}\n\n// macro\nfunction twTokenMacro(stream, state) {\n  if (stream.current() == '<<') {\n    return 'meta';\n  }\n\n  var ch = stream.next();\n  if (!ch) {\n    state.tokenize = tokenBase;\n    return null;\n  }\n  if (ch == \">\") {\n    if (stream.peek() == '>') {\n      stream.next();\n      state.tokenize = tokenBase;\n      return \"meta\";\n    }\n  }\n\n  stream.eatWhile(/[\\w\\$_]/);\n  return keywords.propertyIsEnumerable(stream.current()) ? \"keyword\" : null\n}\n\n// Interface\nexport const tiddlyWiki = {\n  name: \"tiddlywiki\",\n\n  startState: function () {\n    return {tokenize: tokenBase};\n  },\n\n  token: function (stream, state) {\n    if (stream.eatSpace()) return null;\n    var style = state.tokenize(stream, state);\n    return style;\n  }\n};\n\n","function inBlock(style, terminator, returnTokenizer) {\n  return function(stream, state) {\n    while (!stream.eol()) {\n      if (stream.match(terminator)) {\n        state.tokenize = inText;\n        break;\n      }\n      stream.next();\n    }\n\n    if (returnTokenizer) state.tokenize = returnTokenizer;\n\n    return style;\n  };\n}\n\nfunction inLine(style) {\n  return function(stream, state) {\n    while(!stream.eol()) {\n      stream.next();\n    }\n    state.tokenize = inText;\n    return style;\n  };\n}\n\nfunction inText(stream, state) {\n  function chain(parser) {\n    state.tokenize = parser;\n    return parser(stream, state);\n  }\n\n  var sol = stream.sol();\n  var ch = stream.next();\n\n  //non start of line\n  switch (ch) { //switch is generally much faster than if, so it is used here\n  case \"{\": //plugin\n    stream.eat(\"/\");\n    stream.eatSpace();\n    stream.eatWhile(/[^\\s\\u00a0=\\\"\\'\\/?(}]/);\n    state.tokenize = inPlugin;\n    return \"tag\";\n  case \"_\": //bold\n    if (stream.eat(\"_\"))\n      return chain(inBlock(\"strong\", \"__\", inText));\n    break;\n  case \"'\": //italics\n    if (stream.eat(\"'\"))\n      return chain(inBlock(\"em\", \"''\", inText));\n    break;\n  case \"(\":// Wiki Link\n    if (stream.eat(\"(\"))\n      return chain(inBlock(\"link\", \"))\", inText));\n    break;\n  case \"[\":// Weblink\n    return chain(inBlock(\"url\", \"]\", inText));\n    break;\n  case \"|\": //table\n    if (stream.eat(\"|\"))\n      return chain(inBlock(\"comment\", \"||\"));\n    break;\n  case \"-\":\n    if (stream.eat(\"=\")) {//titleBar\n      return chain(inBlock(\"header string\", \"=-\", inText));\n    } else if (stream.eat(\"-\")) {//deleted\n      return chain(inBlock(\"error tw-deleted\", \"--\", inText));\n    }\n    break;\n  case \"=\": //underline\n    if (stream.match(\"==\"))\n      return chain(inBlock(\"tw-underline\", \"===\", inText));\n    break;\n  case \":\":\n    if (stream.eat(\":\"))\n      return chain(inBlock(\"comment\", \"::\"));\n    break;\n  case \"^\": //box\n    return chain(inBlock(\"tw-box\", \"^\"));\n    break;\n  case \"~\": //np\n    if (stream.match(\"np~\"))\n      return chain(inBlock(\"meta\", \"~/np~\"));\n    break;\n  }\n\n  //start of line types\n  if (sol) {\n    switch (ch) {\n    case \"!\": //header at start of line\n      if (stream.match('!!!!!')) {\n        return chain(inLine(\"header string\"));\n      } else if (stream.match('!!!!')) {\n        return chain(inLine(\"header string\"));\n      } else if (stream.match('!!!')) {\n        return chain(inLine(\"header string\"));\n      } else if (stream.match('!!')) {\n        return chain(inLine(\"header string\"));\n      } else {\n        return chain(inLine(\"header string\"));\n      }\n      break;\n    case \"*\": //unordered list line item, or <li /> at start of line\n    case \"#\": //ordered list line item, or <li /> at start of line\n    case \"+\": //ordered list line item, or <li /> at start of line\n      return chain(inLine(\"tw-listitem bracket\"));\n      break;\n    }\n  }\n\n  //stream.eatWhile(/[&{]/); was eating up plugins, turned off to act less like html and more like tiki\n  return null;\n}\n\n// Return variables for tokenizers\nvar pluginName, type;\nfunction inPlugin(stream, state) {\n  var ch = stream.next();\n  var peek = stream.peek();\n\n  if (ch == \"}\") {\n    state.tokenize = inText;\n    //type = ch == \")\" ? \"endPlugin\" : \"selfclosePlugin\"; inPlugin\n    return \"tag\";\n  } else if (ch == \"(\" || ch == \")\") {\n    return \"bracket\";\n  } else if (ch == \"=\") {\n    type = \"equals\";\n\n    if (peek == \">\") {\n      stream.next();\n      peek = stream.peek();\n    }\n\n    //here we detect values directly after equal character with no quotes\n    if (!/[\\'\\\"]/.test(peek)) {\n      state.tokenize = inAttributeNoQuote();\n    }\n    //end detect values\n\n    return \"operator\";\n  } else if (/[\\'\\\"]/.test(ch)) {\n    state.tokenize = inAttribute(ch);\n    return state.tokenize(stream, state);\n  } else {\n    stream.eatWhile(/[^\\s\\u00a0=\\\"\\'\\/?]/);\n    return \"keyword\";\n  }\n}\n\nfunction inAttribute(quote) {\n  return function(stream, state) {\n    while (!stream.eol()) {\n      if (stream.next() == quote) {\n        state.tokenize = inPlugin;\n        break;\n      }\n    }\n    return \"string\";\n  };\n}\n\nfunction inAttributeNoQuote() {\n  return function(stream, state) {\n    while (!stream.eol()) {\n      var ch = stream.next();\n      var peek = stream.peek();\n      if (ch == \" \" || ch == \",\" || /[ )}]/.test(peek)) {\n        state.tokenize = inPlugin;\n        break;\n      }\n    }\n    return \"string\";\n  };\n}\n\nvar curState, setStyle;\nfunction pass() {\n  for (var i = arguments.length - 1; i >= 0; i--) curState.cc.push(arguments[i]);\n}\n\nfunction cont() {\n  pass.apply(null, arguments);\n  return true;\n}\n\nfunction pushContext(pluginName, startOfLine) {\n  var noIndent = curState.context && curState.context.noIndent;\n  curState.context = {\n    prev: curState.context,\n    pluginName: pluginName,\n    indent: curState.indented,\n    startOfLine: startOfLine,\n    noIndent: noIndent\n  };\n}\n\nfunction popContext() {\n  if (curState.context) curState.context = curState.context.prev;\n}\n\nfunction element(type) {\n  if (type == \"openPlugin\") {curState.pluginName = pluginName; return cont(attributes, endplugin(curState.startOfLine));}\n  else if (type == \"closePlugin\") {\n    var err = false;\n    if (curState.context) {\n      err = curState.context.pluginName != pluginName;\n      popContext();\n    } else {\n      err = true;\n    }\n    if (err) setStyle = \"error\";\n    return cont(endcloseplugin(err));\n  }\n  else if (type == \"string\") {\n    if (!curState.context || curState.context.name != \"!cdata\") pushContext(\"!cdata\");\n    if (curState.tokenize == inText) popContext();\n    return cont();\n  }\n  else return cont();\n}\n\nfunction endplugin(startOfLine) {\n  return function(type) {\n    if (\n      type == \"selfclosePlugin\" ||\n        type == \"endPlugin\"\n    )\n      return cont();\n    if (type == \"endPlugin\") {pushContext(curState.pluginName, startOfLine); return cont();}\n    return cont();\n  };\n}\n\nfunction endcloseplugin(err) {\n  return function(type) {\n    if (err) setStyle = \"error\";\n    if (type == \"endPlugin\") return cont();\n    return pass();\n  };\n}\n\nfunction attributes(type) {\n  if (type == \"keyword\") {setStyle = \"attribute\"; return cont(attributes);}\n  if (type == \"equals\") return cont(attvalue, attributes);\n  return pass();\n}\nfunction attvalue(type) {\n  if (type == \"keyword\") {setStyle = \"string\"; return cont();}\n  if (type == \"string\") return cont(attvaluemaybe);\n  return pass();\n}\nfunction attvaluemaybe(type) {\n  if (type == \"string\") return cont(attvaluemaybe);\n  else return pass();\n}\nexport const tiki = {\n  name: \"tiki\",\n  startState: function() {\n    return {tokenize: inText, cc: [], indented: 0, startOfLine: true, pluginName: null, context: null};\n  },\n  token: function(stream, state) {\n    if (stream.sol()) {\n      state.startOfLine = true;\n      state.indented = stream.indentation();\n    }\n    if (stream.eatSpace()) return null;\n\n    setStyle = type = pluginName = null;\n    var style = state.tokenize(stream, state);\n    if ((style || type) && style != \"comment\") {\n      curState = state;\n      while (true) {\n        var comb = state.cc.pop() || element;\n        if (comb(type || style)) break;\n      }\n    }\n    state.startOfLine = false;\n    return setStyle || style;\n  },\n  indent: function(state, textAfter, cx) {\n    var context = state.context;\n    if (context && context.noIndent) return 0;\n    if (context && /^{\\//.test(textAfter))\n      context = context.prev;\n    while (context && !context.startOfLine)\n      context = context.prev;\n    if (context) return context.indent + cx.unit;\n    else return 0;\n  }\n};\n","export const toml = {\n  name: \"toml\",\n  startState: function () {\n    return {\n      inString: false,\n      stringType: \"\",\n      lhs: true,\n      inArray: 0\n    };\n  },\n  token: function (stream, state) {\n    //check for state changes\n    let quote\n    if (!state.inString && (quote = stream.match(/^('''|\"\"\"|'|\")/))) {\n      state.stringType = quote[0]\n      state.inString = true; // Update state\n    }\n    if (stream.sol() && !state.inString && state.inArray === 0) {\n      state.lhs = true;\n    }\n    //return state\n    if (state.inString) {\n      while (state.inString) {\n        if (stream.match(state.stringType)) {\n          state.inString = false; // Clear flag\n        } else if (stream.peek() === '\\\\') {\n          stream.next();\n          stream.next();\n        } else if (stream.eol()) {\n          break\n        } else {\n          stream.match(/^.[^\\\\\\\"\\']*/);\n        }\n      }\n      return state.lhs ? \"property\" : \"string\"; // Token style\n    } else if (state.inArray && stream.peek() === ']') {\n      stream.next();\n      state.inArray--;\n      return 'bracket';\n    } else if (state.lhs && stream.peek() === '[' && stream.skipTo(']')) {\n      stream.next();//skip closing ]\n      // array of objects has an extra open & close []\n      if (stream.peek() === ']') stream.next();\n      return \"atom\";\n    } else if (stream.peek() === \"#\") {\n      stream.skipToEnd();\n      return \"comment\";\n    } else if (stream.eatSpace()) {\n      return null;\n    } else if (state.lhs && stream.eatWhile(function (c) { return c != '=' && c != ' '; })) {\n      return \"property\";\n    } else if (state.lhs && stream.peek() === \"=\") {\n      stream.next();\n      state.lhs = false;\n      return null;\n    } else if (!state.lhs && stream.match(/^\\d\\d\\d\\d[\\d\\-\\:\\.T]*Z/)) {\n      return 'atom'; //date\n    } else if (!state.lhs && (stream.match('true') || stream.match('false'))) {\n      return 'atom';\n    } else if (!state.lhs && stream.peek() === '[') {\n      state.inArray++;\n      stream.next();\n      return 'bracket';\n    } else if (!state.lhs && stream.match(/^\\-?\\d+(?:\\.\\d+)?/)) {\n      return 'number';\n    } else if (!stream.eatSpace()) {\n      stream.next();\n    }\n    return null;\n  },\n  languageData: {\n    commentTokens: { line: '#' },\n  },\n};\n","var words = {};\n\nfunction tokenBase(stream) {\n  if (stream.eatSpace()) return null;\n\n  var sol = stream.sol();\n  var ch = stream.next();\n\n  if (ch === '\\\\') {\n    if (stream.match('fB') || stream.match('fR') || stream.match('fI') ||\n        stream.match('u')  || stream.match('d')  ||\n        stream.match('%')  || stream.match('&')) {\n      return 'string';\n    }\n    if (stream.match('m[')) {\n      stream.skipTo(']');\n      stream.next();\n      return 'string';\n    }\n    if (stream.match('s+') || stream.match('s-')) {\n      stream.eatWhile(/[\\d-]/);\n      return 'string';\n    }\n    if (stream.match('\\(') || stream.match('*\\(')) {\n      stream.eatWhile(/[\\w-]/);\n      return 'string';\n    }\n    return 'string';\n  }\n  if (sol && (ch === '.' || ch === '\\'')) {\n    if (stream.eat('\\\\') && stream.eat('\\\"')) {\n      stream.skipToEnd();\n      return 'comment';\n    }\n  }\n  if (sol && ch === '.') {\n    if (stream.match('B ') || stream.match('I ') || stream.match('R ')) {\n      return 'attribute';\n    }\n    if (stream.match('TH ') || stream.match('SH ') || stream.match('SS ') || stream.match('HP ')) {\n      stream.skipToEnd();\n      return 'quote';\n    }\n    if ((stream.match(/[A-Z]/) && stream.match(/[A-Z]/)) || (stream.match(/[a-z]/) && stream.match(/[a-z]/))) {\n      return 'attribute';\n    }\n  }\n  stream.eatWhile(/[\\w-]/);\n  var cur = stream.current();\n  return words.hasOwnProperty(cur) ? words[cur] : null;\n}\n\nfunction tokenize(stream, state) {\n  return (state.tokens[0] || tokenBase) (stream, state);\n};\n\nexport const troff = {\n  name: \"troff\",\n  startState: function() {return {tokens:[]};},\n  token: function(stream, state) {\n    return tokenize(stream, state);\n  }\n};\n","function words(str) {\n  var obj = {}, words = str.split(\" \");\n  for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n  return obj;\n}\n\nconst parserConfig = {\n  name: \"ttcn\",\n  keywords: words(\"activate address alive all alt altstep and and4b any\" +\n                  \" break case component const continue control deactivate\" +\n                  \" display do else encode enumerated except exception\" +\n                  \" execute extends extension external for from function\" +\n                  \" goto group if import in infinity inout interleave\" +\n                  \" label language length log match message mixed mod\" +\n                  \" modifies module modulepar mtc noblock not not4b nowait\" +\n                  \" of on optional or or4b out override param pattern port\" +\n                  \" procedure record recursive rem repeat return runs select\" +\n                  \" self sender set signature system template testcase to\" +\n                  \" type union value valueof var variant while with xor xor4b\"),\n  builtin: words(\"bit2hex bit2int bit2oct bit2str char2int char2oct encvalue\" +\n                 \" decomp decvalue float2int float2str hex2bit hex2int\" +\n                 \" hex2oct hex2str int2bit int2char int2float int2hex\" +\n                 \" int2oct int2str int2unichar isbound ischosen ispresent\" +\n                 \" isvalue lengthof log2str oct2bit oct2char oct2hex oct2int\" +\n                 \" oct2str regexp replace rnd sizeof str2bit str2float\" +\n                 \" str2hex str2int str2oct substr unichar2int unichar2char\" +\n                 \" enum2int\"),\n  types: words(\"anytype bitstring boolean char charstring default float\" +\n               \" hexstring integer objid octetstring universal verdicttype timer\"),\n  timerOps: words(\"read running start stop timeout\"),\n  portOps: words(\"call catch check clear getcall getreply halt raise receive\" +\n                 \" reply send trigger\"),\n  configOps: words(\"create connect disconnect done kill killed map unmap\"),\n  verdictOps: words(\"getverdict setverdict\"),\n  sutOps: words(\"action\"),\n  functionOps: words(\"apply derefers refers\"),\n\n  verdictConsts: words(\"error fail inconc none pass\"),\n  booleanConsts: words(\"true false\"),\n  otherConsts: words(\"null NULL omit\"),\n\n  visibilityModifiers: words(\"private public friend\"),\n  templateMatch: words(\"complement ifpresent subset superset permutation\"),\n  multiLineStrings: true\n}\n\nvar wordList = []\nfunction add(obj) {\n  if (obj) for (var prop in obj) if (obj.hasOwnProperty(prop))\n    wordList.push(prop);\n}\nadd(parserConfig.keywords);\nadd(parserConfig.builtin);\nadd(parserConfig.timerOps);\nadd(parserConfig.portOps);\n\nvar keywords = parserConfig.keywords || {},\n    builtin = parserConfig.builtin || {},\n    timerOps = parserConfig.timerOps || {},\n    portOps  = parserConfig.portOps || {},\n    configOps = parserConfig.configOps || {},\n    verdictOps = parserConfig.verdictOps || {},\n    sutOps = parserConfig.sutOps || {},\n    functionOps = parserConfig.functionOps || {},\n\n    verdictConsts = parserConfig.verdictConsts || {},\n    booleanConsts = parserConfig.booleanConsts || {},\n    otherConsts   = parserConfig.otherConsts || {},\n\n    types = parserConfig.types || {},\n    visibilityModifiers = parserConfig.visibilityModifiers || {},\n    templateMatch = parserConfig.templateMatch || {},\n    multiLineStrings = parserConfig.multiLineStrings,\n    indentStatements = parserConfig.indentStatements !== false;\nvar isOperatorChar = /[+\\-*&@=<>!\\/]/;\nvar curPunc;\n\nfunction tokenBase(stream, state) {\n  var ch = stream.next();\n\n  if (ch == '\"' || ch == \"'\") {\n    state.tokenize = tokenString(ch);\n    return state.tokenize(stream, state);\n  }\n  if (/[\\[\\]{}\\(\\),;\\\\:\\?\\.]/.test(ch)) {\n    curPunc = ch;\n    return \"punctuation\";\n  }\n  if (ch == \"#\"){\n    stream.skipToEnd();\n    return \"atom\";\n  }\n  if (ch == \"%\"){\n    stream.eatWhile(/\\b/);\n    return \"atom\";\n  }\n  if (/\\d/.test(ch)) {\n    stream.eatWhile(/[\\w\\.]/);\n    return \"number\";\n  }\n  if (ch == \"/\") {\n    if (stream.eat(\"*\")) {\n      state.tokenize = tokenComment;\n      return tokenComment(stream, state);\n    }\n    if (stream.eat(\"/\")) {\n      stream.skipToEnd();\n      return \"comment\";\n    }\n  }\n  if (isOperatorChar.test(ch)) {\n    if(ch == \"@\"){\n      if(stream.match(\"try\") || stream.match(\"catch\")\n         || stream.match(\"lazy\")){\n        return \"keyword\";\n      }\n    }\n    stream.eatWhile(isOperatorChar);\n    return \"operator\";\n  }\n  stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n  var cur = stream.current();\n\n  if (keywords.propertyIsEnumerable(cur)) return \"keyword\";\n  if (builtin.propertyIsEnumerable(cur)) return \"builtin\";\n\n  if (timerOps.propertyIsEnumerable(cur)) return \"def\";\n  if (configOps.propertyIsEnumerable(cur)) return \"def\";\n  if (verdictOps.propertyIsEnumerable(cur)) return \"def\";\n  if (portOps.propertyIsEnumerable(cur)) return \"def\";\n  if (sutOps.propertyIsEnumerable(cur)) return \"def\";\n  if (functionOps.propertyIsEnumerable(cur)) return \"def\";\n\n  if (verdictConsts.propertyIsEnumerable(cur)) return \"string\";\n  if (booleanConsts.propertyIsEnumerable(cur)) return \"string\";\n  if (otherConsts.propertyIsEnumerable(cur)) return \"string\";\n\n  if (types.propertyIsEnumerable(cur)) return \"typeName.standard\";\n  if (visibilityModifiers.propertyIsEnumerable(cur))\n    return \"modifier\";\n  if (templateMatch.propertyIsEnumerable(cur)) return \"atom\";\n\n  return \"variable\";\n}\n\nfunction tokenString(quote) {\n  return function(stream, state) {\n    var escaped = false, next, end = false;\n    while ((next = stream.next()) != null) {\n      if (next == quote && !escaped){\n        var afterQuote = stream.peek();\n        //look if the character after the quote is like the B in '10100010'B\n        if (afterQuote){\n          afterQuote = afterQuote.toLowerCase();\n          if(afterQuote == \"b\" || afterQuote == \"h\" || afterQuote == \"o\")\n            stream.next();\n        }\n        end = true; break;\n      }\n      escaped = !escaped && next == \"\\\\\";\n    }\n    if (end || !(escaped || multiLineStrings))\n      state.tokenize = null;\n    return \"string\";\n  };\n}\n\nfunction tokenComment(stream, state) {\n  var maybeEnd = false, ch;\n  while (ch = stream.next()) {\n    if (ch == \"/\" && maybeEnd) {\n      state.tokenize = null;\n      break;\n    }\n    maybeEnd = (ch == \"*\");\n  }\n  return \"comment\";\n}\n\nfunction Context(indented, column, type, align, prev) {\n  this.indented = indented;\n  this.column = column;\n  this.type = type;\n  this.align = align;\n  this.prev = prev;\n}\n\nfunction pushContext(state, col, type) {\n  var indent = state.indented;\n  if (state.context && state.context.type == \"statement\")\n    indent = state.context.indented;\n  return state.context = new Context(indent, col, type, null, state.context);\n}\n\nfunction popContext(state) {\n  var t = state.context.type;\n  if (t == \")\" || t == \"]\" || t == \"}\")\n    state.indented = state.context.indented;\n  return state.context = state.context.prev;\n}\n\n//Interface\nexport const ttcn = {\n  name: \"ttcn\",\n  startState: function() {\n    return {\n      tokenize: null,\n      context: new Context(0, 0, \"top\", false),\n      indented: 0,\n      startOfLine: true\n    };\n  },\n\n  token: function(stream, state) {\n    var ctx = state.context;\n    if (stream.sol()) {\n      if (ctx.align == null) ctx.align = false;\n      state.indented = stream.indentation();\n      state.startOfLine = true;\n    }\n    if (stream.eatSpace()) return null;\n    curPunc = null;\n    var style = (state.tokenize || tokenBase)(stream, state);\n    if (style == \"comment\") return style;\n    if (ctx.align == null) ctx.align = true;\n\n    if ((curPunc == \";\" || curPunc == \":\" || curPunc == \",\")\n        && ctx.type == \"statement\"){\n      popContext(state);\n    }\n    else if (curPunc == \"{\") pushContext(state, stream.column(), \"}\");\n    else if (curPunc == \"[\") pushContext(state, stream.column(), \"]\");\n    else if (curPunc == \"(\") pushContext(state, stream.column(), \")\");\n    else if (curPunc == \"}\") {\n      while (ctx.type == \"statement\") ctx = popContext(state);\n      if (ctx.type == \"}\") ctx = popContext(state);\n      while (ctx.type == \"statement\") ctx = popContext(state);\n    }\n    else if (curPunc == ctx.type) popContext(state);\n    else if (indentStatements &&\n             (((ctx.type == \"}\" || ctx.type == \"top\") && curPunc != ';') ||\n              (ctx.type == \"statement\" && curPunc == \"newstatement\")))\n      pushContext(state, stream.column(), \"statement\");\n\n    state.startOfLine = false;\n\n    return style;\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*[{}]$/,\n    commentTokens: {line: \"//\", block: {open: \"/*\", close: \"*/\"}},\n    autocomplete: wordList\n  }\n};\n","var curPunc;\n\nfunction wordRegexp(words) {\n  return new RegExp(\"^(?:\" + words.join(\"|\") + \")$\", \"i\");\n}\nvar ops = wordRegexp([]);\nvar keywords = wordRegexp([\"@prefix\", \"@base\", \"a\"]);\nvar operatorChars = /[*+\\-<>=&|]/;\n\nfunction tokenBase(stream, state) {\n  var ch = stream.next();\n  curPunc = null;\n  if (ch == \"<\" && !stream.match(/^[\\s\\u00a0=]/, false)) {\n    stream.match(/^[^\\s\\u00a0>]*>?/);\n    return \"atom\";\n  }\n  else if (ch == \"\\\"\" || ch == \"'\") {\n    state.tokenize = tokenLiteral(ch);\n    return state.tokenize(stream, state);\n  }\n  else if (/[{}\\(\\),\\.;\\[\\]]/.test(ch)) {\n    curPunc = ch;\n    return null;\n  }\n  else if (ch == \"#\") {\n    stream.skipToEnd();\n    return \"comment\";\n  }\n  else if (operatorChars.test(ch)) {\n    stream.eatWhile(operatorChars);\n    return null;\n  }\n  else if (ch == \":\") {\n    return \"operator\";\n  } else {\n    stream.eatWhile(/[_\\w\\d]/);\n    if(stream.peek() == \":\") {\n      return \"variableName.special\";\n    } else {\n      var word = stream.current();\n\n      if(keywords.test(word)) {\n        return \"meta\";\n      }\n\n      if(ch >= \"A\" && ch <= \"Z\") {\n        return \"comment\";\n      } else {\n        return \"keyword\";\n      }\n    }\n    var word = stream.current();\n    if (ops.test(word))\n      return null;\n    else if (keywords.test(word))\n      return \"meta\";\n    else\n      return \"variable\";\n  }\n}\n\nfunction tokenLiteral(quote) {\n  return function(stream, state) {\n    var escaped = false, ch;\n    while ((ch = stream.next()) != null) {\n      if (ch == quote && !escaped) {\n        state.tokenize = tokenBase;\n        break;\n      }\n      escaped = !escaped && ch == \"\\\\\";\n    }\n    return \"string\";\n  };\n}\n\nfunction pushContext(state, type, col) {\n  state.context = {prev: state.context, indent: state.indent, col: col, type: type};\n}\nfunction popContext(state) {\n  state.indent = state.context.indent;\n  state.context = state.context.prev;\n}\n\nexport const turtle = {\n  name: \"turtle\",\n  startState: function() {\n    return {tokenize: tokenBase,\n            context: null,\n            indent: 0,\n            col: 0};\n  },\n\n  token: function(stream, state) {\n    if (stream.sol()) {\n      if (state.context && state.context.align == null) state.context.align = false;\n      state.indent = stream.indentation();\n    }\n    if (stream.eatSpace()) return null;\n    var style = state.tokenize(stream, state);\n\n    if (style != \"comment\" && state.context && state.context.align == null && state.context.type != \"pattern\") {\n      state.context.align = true;\n    }\n\n    if (curPunc == \"(\") pushContext(state, \")\", stream.column());\n    else if (curPunc == \"[\") pushContext(state, \"]\", stream.column());\n    else if (curPunc == \"{\") pushContext(state, \"}\", stream.column());\n    else if (/[\\]\\}\\)]/.test(curPunc)) {\n      while (state.context && state.context.type == \"pattern\") popContext(state);\n      if (state.context && curPunc == state.context.type) popContext(state);\n    }\n    else if (curPunc == \".\" && state.context && state.context.type == \"pattern\") popContext(state);\n    else if (/atom|string|variable/.test(style) && state.context) {\n      if (/[\\}\\]]/.test(state.context.type))\n        pushContext(state, \"pattern\", stream.column());\n      else if (state.context.type == \"pattern\" && !state.context.align) {\n        state.context.align = true;\n        state.context.col = stream.column();\n      }\n    }\n\n    return style;\n  },\n\n  indent: function(state, textAfter, cx) {\n    var firstChar = textAfter && textAfter.charAt(0);\n    var context = state.context;\n    if (/[\\]\\}]/.test(firstChar))\n      while (context && context.type == \"pattern\") context = context.prev;\n\n    var closing = context && firstChar == context.type;\n    if (!context)\n      return 0;\n    else if (context.type == \"pattern\")\n      return context.col;\n    else if (context.align)\n      return context.col + (closing ? 0 : 1);\n    else\n      return context.indent + (closing ? 0 : cx.unit);\n  },\n\n  languageData: {\n    commentTokens: {line: \"#\"}\n  }\n};\n","var ERRORCLASS = 'error';\n\nfunction wordRegexp(words) {\n  return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\", \"i\");\n}\n\nvar singleOperators = new RegExp(\"^[\\\\+\\\\-\\\\*/%&\\\\\\\\|\\\\^~<>!]\");\nvar singleDelimiters = new RegExp('^[\\\\(\\\\)\\\\[\\\\]\\\\{\\\\}@,:`=;\\\\.]');\nvar doubleOperators = new RegExp(\"^((==)|(<>)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\\\*\\\\*))\");\nvar doubleDelimiters = new RegExp(\"^((\\\\+=)|(\\\\-=)|(\\\\*=)|(%=)|(/=)|(&=)|(\\\\|=)|(\\\\^=))\");\nvar tripleDelimiters = new RegExp(\"^((//=)|(>>=)|(<<=)|(\\\\*\\\\*=))\");\nvar identifiers = new RegExp(\"^[_A-Za-z][_A-Za-z0-9]*\");\n\nvar openingKeywords = ['class','module', 'sub','enum','select','while','if','function', 'get','set','property', 'try', 'structure', 'synclock', 'using', 'with'];\nvar middleKeywords = ['else','elseif','case', 'catch', 'finally'];\nvar endKeywords = ['next','loop'];\n\nvar operatorKeywords = ['and', \"andalso\", 'or', 'orelse', 'xor', 'in', 'not', 'is', 'isnot', 'like'];\nvar wordOperators = wordRegexp(operatorKeywords);\n\nvar commonKeywords = [\"#const\", \"#else\", \"#elseif\", \"#end\", \"#if\", \"#region\", \"addhandler\", \"addressof\", \"alias\", \"as\", \"byref\", \"byval\", \"cbool\", \"cbyte\", \"cchar\", \"cdate\", \"cdbl\", \"cdec\", \"cint\", \"clng\", \"cobj\", \"compare\", \"const\", \"continue\", \"csbyte\", \"cshort\", \"csng\", \"cstr\", \"cuint\", \"culng\", \"cushort\", \"declare\", \"default\", \"delegate\", \"dim\", \"directcast\", \"each\", \"erase\", \"error\", \"event\", \"exit\", \"explicit\", \"false\", \"for\", \"friend\", \"gettype\", \"goto\", \"handles\", \"implements\", \"imports\", \"infer\", \"inherits\", \"interface\", \"isfalse\", \"istrue\", \"lib\", \"me\", \"mod\", \"mustinherit\", \"mustoverride\", \"my\", \"mybase\", \"myclass\", \"namespace\", \"narrowing\", \"new\", \"nothing\", \"notinheritable\", \"notoverridable\", \"of\", \"off\", \"on\", \"operator\", \"option\", \"optional\", \"out\", \"overloads\", \"overridable\", \"overrides\", \"paramarray\", \"partial\", \"private\", \"protected\", \"public\", \"raiseevent\", \"readonly\", \"redim\", \"removehandler\", \"resume\", \"return\", \"shadows\", \"shared\", \"static\", \"step\", \"stop\", \"strict\", \"then\", \"throw\", \"to\", \"true\", \"trycast\", \"typeof\", \"until\", \"until\", \"when\", \"widening\", \"withevents\", \"writeonly\"];\n\nvar commontypes = ['object', 'boolean', 'char', 'string', 'byte', 'sbyte', 'short', 'ushort', 'int16', 'uint16', 'integer', 'uinteger', 'int32', 'uint32', 'long', 'ulong', 'int64', 'uint64', 'decimal', 'single', 'double', 'float', 'date', 'datetime', 'intptr', 'uintptr'];\n\nvar keywords = wordRegexp(commonKeywords);\nvar types = wordRegexp(commontypes);\nvar stringPrefixes = '\"';\n\nvar opening = wordRegexp(openingKeywords);\nvar middle = wordRegexp(middleKeywords);\nvar closing = wordRegexp(endKeywords);\nvar doubleClosing = wordRegexp(['end']);\nvar doOpening = wordRegexp(['do']);\n\nvar indentInfo = null;\n\nfunction indent(_stream, state) {\n  state.currentIndent++;\n}\n\nfunction dedent(_stream, state) {\n  state.currentIndent--;\n}\n// tokenizers\nfunction tokenBase(stream, state) {\n  if (stream.eatSpace()) {\n    return null;\n  }\n\n  var ch = stream.peek();\n\n  // Handle Comments\n  if (ch === \"'\") {\n    stream.skipToEnd();\n    return 'comment';\n  }\n\n\n  // Handle Number Literals\n  if (stream.match(/^((&H)|(&O))?[0-9\\.a-f]/i, false)) {\n    var floatLiteral = false;\n    // Floats\n    if (stream.match(/^\\d*\\.\\d+F?/i)) { floatLiteral = true; }\n    else if (stream.match(/^\\d+\\.\\d*F?/)) { floatLiteral = true; }\n    else if (stream.match(/^\\.\\d+F?/)) { floatLiteral = true; }\n\n    if (floatLiteral) {\n      // Float literals may be \"imaginary\"\n      stream.eat(/J/i);\n      return 'number';\n    }\n    // Integers\n    var intLiteral = false;\n    // Hex\n    if (stream.match(/^&H[0-9a-f]+/i)) { intLiteral = true; }\n    // Octal\n    else if (stream.match(/^&O[0-7]+/i)) { intLiteral = true; }\n    // Decimal\n    else if (stream.match(/^[1-9]\\d*F?/)) {\n      // Decimal literals may be \"imaginary\"\n      stream.eat(/J/i);\n      // TODO - Can you have imaginary longs?\n      intLiteral = true;\n    }\n    // Zero by itself with no other piece of number.\n    else if (stream.match(/^0(?![\\dx])/i)) { intLiteral = true; }\n    if (intLiteral) {\n      // Integer literals may be \"long\"\n      stream.eat(/L/i);\n      return 'number';\n    }\n  }\n\n  // Handle Strings\n  if (stream.match(stringPrefixes)) {\n    state.tokenize = tokenStringFactory(stream.current());\n    return state.tokenize(stream, state);\n  }\n\n  // Handle operators and Delimiters\n  if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) {\n    return null;\n  }\n  if (stream.match(doubleOperators)\n      || stream.match(singleOperators)\n      || stream.match(wordOperators)) {\n    return 'operator';\n  }\n  if (stream.match(singleDelimiters)) {\n    return null;\n  }\n  if (stream.match(doOpening)) {\n    indent(stream,state);\n    state.doInCurrentLine = true;\n    return 'keyword';\n  }\n  if (stream.match(opening)) {\n    if (! state.doInCurrentLine)\n      indent(stream,state);\n    else\n      state.doInCurrentLine = false;\n    return 'keyword';\n  }\n  if (stream.match(middle)) {\n    return 'keyword';\n  }\n\n  if (stream.match(doubleClosing)) {\n    dedent(stream,state);\n    dedent(stream,state);\n    return 'keyword';\n  }\n  if (stream.match(closing)) {\n    dedent(stream,state);\n    return 'keyword';\n  }\n\n  if (stream.match(types)) {\n    return 'keyword';\n  }\n\n  if (stream.match(keywords)) {\n    return 'keyword';\n  }\n\n  if (stream.match(identifiers)) {\n    return 'variable';\n  }\n\n  // Handle non-detected items\n  stream.next();\n  return ERRORCLASS;\n}\n\nfunction tokenStringFactory(delimiter) {\n  var singleline = delimiter.length == 1;\n  var OUTCLASS = 'string';\n\n  return function(stream, state) {\n    while (!stream.eol()) {\n      stream.eatWhile(/[^'\"]/);\n      if (stream.match(delimiter)) {\n        state.tokenize = tokenBase;\n        return OUTCLASS;\n      } else {\n        stream.eat(/['\"]/);\n      }\n    }\n    if (singleline) {\n      state.tokenize = tokenBase;\n    }\n    return OUTCLASS;\n  };\n}\n\n\nfunction tokenLexer(stream, state) {\n  var style = state.tokenize(stream, state);\n  var current = stream.current();\n\n  // Handle '.' connected identifiers\n  if (current === '.') {\n    style = state.tokenize(stream, state);\n    if (style === 'variable') {\n      return 'variable';\n    } else {\n      return ERRORCLASS;\n    }\n  }\n\n\n  var delimiter_index = '[({'.indexOf(current);\n  if (delimiter_index !== -1) {\n    indent(stream, state );\n  }\n  if (indentInfo === 'dedent') {\n    if (dedent(stream, state)) {\n      return ERRORCLASS;\n    }\n  }\n  delimiter_index = '])}'.indexOf(current);\n  if (delimiter_index !== -1) {\n    if (dedent(stream, state)) {\n      return ERRORCLASS;\n    }\n  }\n\n  return style;\n}\n\nexport const vb = {\n  name: \"vb\",\n\n  startState: function() {\n    return {\n      tokenize: tokenBase,\n      lastToken: null,\n      currentIndent: 0,\n      nextLineIndent: 0,\n      doInCurrentLine: false\n\n\n    };\n  },\n\n  token: function(stream, state) {\n    if (stream.sol()) {\n      state.currentIndent += state.nextLineIndent;\n      state.nextLineIndent = 0;\n      state.doInCurrentLine = 0;\n    }\n    var style = tokenLexer(stream, state);\n\n    state.lastToken = {style:style, content: stream.current()};\n\n\n\n    return style;\n  },\n\n  indent: function(state, textAfter, cx) {\n    var trueText = textAfter.replace(/^\\s+|\\s+$/g, '') ;\n    if (trueText.match(closing) || trueText.match(doubleClosing) || trueText.match(middle)) return cx.unit*(state.currentIndent-1);\n    if(state.currentIndent < 0) return 0;\n    return state.currentIndent * cx.unit;\n  },\n\n  languageData: {\n    closeBrackets: {brackets: [\"(\", \"[\", \"{\", '\"']},\n    commentTokens: {line: \"'\"},\n    autocomplete: openingKeywords.concat(middleKeywords).concat(endKeywords)\n      .concat(operatorKeywords).concat(commonKeywords).concat(commontypes)\n  }\n};\n","function mkVBScript(parserConf) {\n    var ERRORCLASS = 'error';\n\n    function wordRegexp(words) {\n        return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\", \"i\");\n    }\n\n    var singleOperators = new RegExp(\"^[\\\\+\\\\-\\\\*/&\\\\\\\\\\\\^<>=]\");\n    var doubleOperators = new RegExp(\"^((<>)|(<=)|(>=))\");\n    var singleDelimiters = new RegExp('^[\\\\.,]');\n    var brackets = new RegExp('^[\\\\(\\\\)]');\n    var identifiers = new RegExp(\"^[A-Za-z][_A-Za-z0-9]*\");\n\n    var openingKeywords = ['class','sub','select','while','if','function', 'property', 'with', 'for'];\n    var middleKeywords = ['else','elseif','case'];\n    var endKeywords = ['next','loop','wend'];\n\n    var wordOperators = wordRegexp(['and', 'or', 'not', 'xor', 'is', 'mod', 'eqv', 'imp']);\n    var commonkeywords = ['dim', 'redim', 'then',  'until', 'randomize',\n                          'byval','byref','new','property', 'exit', 'in',\n                          'const','private', 'public',\n                          'get','set','let', 'stop', 'on error resume next', 'on error goto 0', 'option explicit', 'call', 'me'];\n\n    //This list was from: http://msdn.microsoft.com/en-us/library/f8tbc79x(v=vs.84).aspx\n    var atomWords = ['true', 'false', 'nothing', 'empty', 'null'];\n    //This list was from: http://msdn.microsoft.com/en-us/library/3ca8tfek(v=vs.84).aspx\n    var builtinFuncsWords = ['abs', 'array', 'asc', 'atn', 'cbool', 'cbyte', 'ccur', 'cdate', 'cdbl', 'chr', 'cint', 'clng', 'cos', 'csng', 'cstr', 'date', 'dateadd', 'datediff', 'datepart',\n                        'dateserial', 'datevalue', 'day', 'escape', 'eval', 'execute', 'exp', 'filter', 'formatcurrency', 'formatdatetime', 'formatnumber', 'formatpercent', 'getlocale', 'getobject',\n                        'getref', 'hex', 'hour', 'inputbox', 'instr', 'instrrev', 'int', 'fix', 'isarray', 'isdate', 'isempty', 'isnull', 'isnumeric', 'isobject', 'join', 'lbound', 'lcase', 'left',\n                        'len', 'loadpicture', 'log', 'ltrim', 'rtrim', 'trim', 'maths', 'mid', 'minute', 'month', 'monthname', 'msgbox', 'now', 'oct', 'replace', 'rgb', 'right', 'rnd', 'round',\n                        'scriptengine', 'scriptenginebuildversion', 'scriptenginemajorversion', 'scriptengineminorversion', 'second', 'setlocale', 'sgn', 'sin', 'space', 'split', 'sqr', 'strcomp',\n                        'string', 'strreverse', 'tan', 'time', 'timer', 'timeserial', 'timevalue', 'typename', 'ubound', 'ucase', 'unescape', 'vartype', 'weekday', 'weekdayname', 'year'];\n\n    //This list was from: http://msdn.microsoft.com/en-us/library/ydz4cfk3(v=vs.84).aspx\n    var builtinConsts = ['vbBlack', 'vbRed', 'vbGreen', 'vbYellow', 'vbBlue', 'vbMagenta', 'vbCyan', 'vbWhite', 'vbBinaryCompare', 'vbTextCompare',\n                         'vbSunday', 'vbMonday', 'vbTuesday', 'vbWednesday', 'vbThursday', 'vbFriday', 'vbSaturday', 'vbUseSystemDayOfWeek', 'vbFirstJan1', 'vbFirstFourDays', 'vbFirstFullWeek',\n                         'vbGeneralDate', 'vbLongDate', 'vbShortDate', 'vbLongTime', 'vbShortTime', 'vbObjectError',\n                         'vbOKOnly', 'vbOKCancel', 'vbAbortRetryIgnore', 'vbYesNoCancel', 'vbYesNo', 'vbRetryCancel', 'vbCritical', 'vbQuestion', 'vbExclamation', 'vbInformation', 'vbDefaultButton1', 'vbDefaultButton2',\n                         'vbDefaultButton3', 'vbDefaultButton4', 'vbApplicationModal', 'vbSystemModal', 'vbOK', 'vbCancel', 'vbAbort', 'vbRetry', 'vbIgnore', 'vbYes', 'vbNo',\n                         'vbCr', 'VbCrLf', 'vbFormFeed', 'vbLf', 'vbNewLine', 'vbNullChar', 'vbNullString', 'vbTab', 'vbVerticalTab', 'vbUseDefault', 'vbTrue', 'vbFalse',\n                         'vbEmpty', 'vbNull', 'vbInteger', 'vbLong', 'vbSingle', 'vbDouble', 'vbCurrency', 'vbDate', 'vbString', 'vbObject', 'vbError', 'vbBoolean', 'vbVariant', 'vbDataObject', 'vbDecimal', 'vbByte', 'vbArray'];\n    //This list was from: http://msdn.microsoft.com/en-us/library/hkc375ea(v=vs.84).aspx\n    var builtinObjsWords = ['WScript', 'err', 'debug', 'RegExp'];\n    var knownProperties = ['description', 'firstindex', 'global', 'helpcontext', 'helpfile', 'ignorecase', 'length', 'number', 'pattern', 'source', 'value', 'count'];\n    var knownMethods = ['clear', 'execute', 'raise', 'replace', 'test', 'write', 'writeline', 'close', 'open', 'state', 'eof', 'update', 'addnew', 'end', 'createobject', 'quit'];\n\n    var aspBuiltinObjsWords = ['server', 'response', 'request', 'session', 'application'];\n    var aspKnownProperties = ['buffer', 'cachecontrol', 'charset', 'contenttype', 'expires', 'expiresabsolute', 'isclientconnected', 'pics', 'status', //response\n                              'clientcertificate', 'cookies', 'form', 'querystring', 'servervariables', 'totalbytes', //request\n                              'contents', 'staticobjects', //application\n                              'codepage', 'lcid', 'sessionid', 'timeout', //session\n                              'scripttimeout']; //server\n    var aspKnownMethods = ['addheader', 'appendtolog', 'binarywrite', 'end', 'flush', 'redirect', //response\n                           'binaryread', //request\n                           'remove', 'removeall', 'lock', 'unlock', //application\n                           'abandon', //session\n                           'getlasterror', 'htmlencode', 'mappath', 'transfer', 'urlencode']; //server\n\n    var knownWords = knownMethods.concat(knownProperties);\n\n    builtinObjsWords = builtinObjsWords.concat(builtinConsts);\n\n    if (parserConf.isASP){\n        builtinObjsWords = builtinObjsWords.concat(aspBuiltinObjsWords);\n        knownWords = knownWords.concat(aspKnownMethods, aspKnownProperties);\n    };\n\n    var keywords = wordRegexp(commonkeywords);\n    var atoms = wordRegexp(atomWords);\n    var builtinFuncs = wordRegexp(builtinFuncsWords);\n    var builtinObjs = wordRegexp(builtinObjsWords);\n    var known = wordRegexp(knownWords);\n    var stringPrefixes = '\"';\n\n    var opening = wordRegexp(openingKeywords);\n    var middle = wordRegexp(middleKeywords);\n    var closing = wordRegexp(endKeywords);\n    var doubleClosing = wordRegexp(['end']);\n    var doOpening = wordRegexp(['do']);\n    var noIndentWords = wordRegexp(['on error resume next', 'exit']);\n    var comment = wordRegexp(['rem']);\n\n\n    function indent(_stream, state) {\n      state.currentIndent++;\n    }\n\n    function dedent(_stream, state) {\n      state.currentIndent--;\n    }\n    // tokenizers\n    function tokenBase(stream, state) {\n        if (stream.eatSpace()) {\n            return null\n            //return null;\n        }\n\n        var ch = stream.peek();\n\n        // Handle Comments\n        if (ch === \"'\") {\n            stream.skipToEnd();\n            return 'comment';\n        }\n        if (stream.match(comment)){\n            stream.skipToEnd();\n            return 'comment';\n        }\n\n\n        // Handle Number Literals\n        if (stream.match(/^((&H)|(&O))?[0-9\\.]/i, false) && !stream.match(/^((&H)|(&O))?[0-9\\.]+[a-z_]/i, false)) {\n            var floatLiteral = false;\n            // Floats\n            if (stream.match(/^\\d*\\.\\d+/i)) { floatLiteral = true; }\n            else if (stream.match(/^\\d+\\.\\d*/)) { floatLiteral = true; }\n            else if (stream.match(/^\\.\\d+/)) { floatLiteral = true; }\n\n            if (floatLiteral) {\n                // Float literals may be \"imaginary\"\n                stream.eat(/J/i);\n                return 'number';\n            }\n            // Integers\n            var intLiteral = false;\n            // Hex\n            if (stream.match(/^&H[0-9a-f]+/i)) { intLiteral = true; }\n            // Octal\n            else if (stream.match(/^&O[0-7]+/i)) { intLiteral = true; }\n            // Decimal\n            else if (stream.match(/^[1-9]\\d*F?/)) {\n                // Decimal literals may be \"imaginary\"\n                stream.eat(/J/i);\n                // TODO - Can you have imaginary longs?\n                intLiteral = true;\n            }\n            // Zero by itself with no other piece of number.\n            else if (stream.match(/^0(?![\\dx])/i)) { intLiteral = true; }\n            if (intLiteral) {\n                // Integer literals may be \"long\"\n                stream.eat(/L/i);\n                return 'number';\n            }\n        }\n\n        // Handle Strings\n        if (stream.match(stringPrefixes)) {\n            state.tokenize = tokenStringFactory(stream.current());\n            return state.tokenize(stream, state);\n        }\n\n        // Handle operators and Delimiters\n        if (stream.match(doubleOperators)\n            || stream.match(singleOperators)\n            || stream.match(wordOperators)) {\n            return 'operator';\n        }\n        if (stream.match(singleDelimiters)) {\n            return null;\n        }\n\n        if (stream.match(brackets)) {\n            return \"bracket\";\n        }\n\n        if (stream.match(noIndentWords)) {\n            state.doInCurrentLine = true;\n\n            return 'keyword';\n        }\n\n        if (stream.match(doOpening)) {\n            indent(stream,state);\n            state.doInCurrentLine = true;\n\n            return 'keyword';\n        }\n        if (stream.match(opening)) {\n            if (! state.doInCurrentLine)\n              indent(stream,state);\n            else\n              state.doInCurrentLine = false;\n\n            return 'keyword';\n        }\n        if (stream.match(middle)) {\n            return 'keyword';\n        }\n\n\n        if (stream.match(doubleClosing)) {\n            dedent(stream,state);\n            dedent(stream,state);\n\n            return 'keyword';\n        }\n        if (stream.match(closing)) {\n            if (! state.doInCurrentLine)\n              dedent(stream,state);\n            else\n              state.doInCurrentLine = false;\n\n            return 'keyword';\n        }\n\n        if (stream.match(keywords)) {\n            return 'keyword';\n        }\n\n        if (stream.match(atoms)) {\n            return 'atom';\n        }\n\n        if (stream.match(known)) {\n            return 'variableName.special';\n        }\n\n        if (stream.match(builtinFuncs)) {\n            return 'builtin';\n        }\n\n        if (stream.match(builtinObjs)){\n            return 'builtin';\n        }\n\n        if (stream.match(identifiers)) {\n            return 'variable';\n        }\n\n        // Handle non-detected items\n        stream.next();\n        return ERRORCLASS;\n    }\n\n    function tokenStringFactory(delimiter) {\n        var singleline = delimiter.length == 1;\n        var OUTCLASS = 'string';\n\n        return function(stream, state) {\n            while (!stream.eol()) {\n                stream.eatWhile(/[^'\"]/);\n                if (stream.match(delimiter)) {\n                    state.tokenize = tokenBase;\n                    return OUTCLASS;\n                } else {\n                    stream.eat(/['\"]/);\n                }\n            }\n            if (singleline) {\n              state.tokenize = tokenBase;\n            }\n            return OUTCLASS;\n        };\n    }\n\n\n    function tokenLexer(stream, state) {\n        var style = state.tokenize(stream, state);\n        var current = stream.current();\n\n        // Handle '.' connected identifiers\n        if (current === '.') {\n            style = state.tokenize(stream, state);\n\n            current = stream.current();\n            if (style && (style.substr(0, 8) === 'variable' || style==='builtin' || style==='keyword')){//|| knownWords.indexOf(current.substring(1)) > -1) {\n                if (style === 'builtin' || style === 'keyword') style='variable';\n                if (knownWords.indexOf(current.substr(1)) > -1) style='keyword';\n\n                return style;\n            } else {\n                return ERRORCLASS;\n            }\n        }\n\n        return style;\n    }\n\n    return {\n        name: \"vbscript\",\n        startState: function() {\n            return {\n              tokenize: tokenBase,\n              lastToken: null,\n              currentIndent: 0,\n              nextLineIndent: 0,\n              doInCurrentLine: false,\n              ignoreKeyword: false\n\n\n          };\n        },\n\n        token: function(stream, state) {\n            if (stream.sol()) {\n              state.currentIndent += state.nextLineIndent;\n              state.nextLineIndent = 0;\n              state.doInCurrentLine = 0;\n            }\n            var style = tokenLexer(stream, state);\n\n            state.lastToken = {style:style, content: stream.current()};\n\n            if (style===null) style=null;\n\n            return style;\n        },\n\n        indent: function(state, textAfter, cx) {\n            var trueText = textAfter.replace(/^\\s+|\\s+$/g, '') ;\n            if (trueText.match(closing) || trueText.match(doubleClosing) || trueText.match(middle)) return cx.unit*(state.currentIndent-1);\n            if(state.currentIndent < 0) return 0;\n            return state.currentIndent * cx.unit\n        }\n\n    };\n};\n\nexport const vbScript = mkVBScript({})\nexport const vbScriptASP = mkVBScript({isASP: true})\n","function parseWords(str) {\n  var obj = {}, words = str.split(\" \");\n  for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n  return obj;\n}\n\nvar keywords = parseWords(\"#end #else #break #stop #[[ #]] \" +\n                          \"#{end} #{else} #{break} #{stop}\");\nvar functions = parseWords(\"#if #elseif #foreach #set #include #parse #macro #define #evaluate \" +\n                           \"#{if} #{elseif} #{foreach} #{set} #{include} #{parse} #{macro} #{define} #{evaluate}\");\nvar specials = parseWords(\"$foreach.count $foreach.hasNext $foreach.first $foreach.last $foreach.topmost $foreach.parent.count $foreach.parent.hasNext $foreach.parent.first $foreach.parent.last $foreach.parent $velocityCount $!bodyContent $bodyContent\");\nvar isOperatorChar = /[+\\-*&%=<>!?:\\/|]/;\n\nfunction chain(stream, state, f) {\n  state.tokenize = f;\n  return f(stream, state);\n}\nfunction tokenBase(stream, state) {\n  var beforeParams = state.beforeParams;\n  state.beforeParams = false;\n  var ch = stream.next();\n  // start of unparsed string?\n  if ((ch == \"'\") && !state.inString && state.inParams) {\n    state.lastTokenWasBuiltin = false;\n    return chain(stream, state, tokenString(ch));\n  }\n  // start of parsed string?\n  else if ((ch == '\"')) {\n    state.lastTokenWasBuiltin = false;\n    if (state.inString) {\n      state.inString = false;\n      return \"string\";\n    }\n    else if (state.inParams)\n      return chain(stream, state, tokenString(ch));\n  }\n  // is it one of the special signs []{}().,;? Separator?\n  else if (/[\\[\\]{}\\(\\),;\\.]/.test(ch)) {\n    if (ch == \"(\" && beforeParams)\n      state.inParams = true;\n    else if (ch == \")\") {\n      state.inParams = false;\n      state.lastTokenWasBuiltin = true;\n    }\n    return null;\n  }\n  // start of a number value?\n  else if (/\\d/.test(ch)) {\n    state.lastTokenWasBuiltin = false;\n    stream.eatWhile(/[\\w\\.]/);\n    return \"number\";\n  }\n  // multi line comment?\n  else if (ch == \"#\" && stream.eat(\"*\")) {\n    state.lastTokenWasBuiltin = false;\n    return chain(stream, state, tokenComment);\n  }\n  // unparsed content?\n  else if (ch == \"#\" && stream.match(/ *\\[ *\\[/)) {\n    state.lastTokenWasBuiltin = false;\n    return chain(stream, state, tokenUnparsed);\n  }\n  // single line comment?\n  else if (ch == \"#\" && stream.eat(\"#\")) {\n    state.lastTokenWasBuiltin = false;\n    stream.skipToEnd();\n    return \"comment\";\n  }\n  // variable?\n  else if (ch == \"$\") {\n    stream.eat(\"!\");\n    stream.eatWhile(/[\\w\\d\\$_\\.{}-]/);\n    // is it one of the specials?\n    if (specials && specials.propertyIsEnumerable(stream.current())) {\n      return \"keyword\";\n    }\n    else {\n      state.lastTokenWasBuiltin = true;\n      state.beforeParams = true;\n      return \"builtin\";\n    }\n  }\n  // is it a operator?\n  else if (isOperatorChar.test(ch)) {\n    state.lastTokenWasBuiltin = false;\n    stream.eatWhile(isOperatorChar);\n    return \"operator\";\n  }\n  else {\n    // get the whole word\n    stream.eatWhile(/[\\w\\$_{}@]/);\n    var word = stream.current();\n    // is it one of the listed keywords?\n    if (keywords && keywords.propertyIsEnumerable(word))\n      return \"keyword\";\n    // is it one of the listed functions?\n    if (functions && functions.propertyIsEnumerable(word) ||\n        (stream.current().match(/^#@?[a-z0-9_]+ *$/i) && stream.peek()==\"(\") &&\n        !(functions && functions.propertyIsEnumerable(word.toLowerCase()))) {\n      state.beforeParams = true;\n      state.lastTokenWasBuiltin = false;\n      return \"keyword\";\n    }\n    if (state.inString) {\n      state.lastTokenWasBuiltin = false;\n      return \"string\";\n    }\n    if (stream.pos > word.length && stream.string.charAt(stream.pos-word.length-1)==\".\" && state.lastTokenWasBuiltin)\n      return \"builtin\";\n    // default: just a \"word\"\n    state.lastTokenWasBuiltin = false;\n    return null;\n  }\n}\n\nfunction tokenString(quote) {\n  return function(stream, state) {\n    var escaped = false, next, end = false;\n    while ((next = stream.next()) != null) {\n      if ((next == quote) && !escaped) {\n        end = true;\n        break;\n      }\n      if (quote=='\"' && stream.peek() == '$' && !escaped) {\n        state.inString = true;\n        end = true;\n        break;\n      }\n      escaped = !escaped && next == \"\\\\\";\n    }\n    if (end) state.tokenize = tokenBase;\n    return \"string\";\n  };\n}\n\nfunction tokenComment(stream, state) {\n  var maybeEnd = false, ch;\n  while (ch = stream.next()) {\n    if (ch == \"#\" && maybeEnd) {\n      state.tokenize = tokenBase;\n      break;\n    }\n    maybeEnd = (ch == \"*\");\n  }\n  return \"comment\";\n}\n\nfunction tokenUnparsed(stream, state) {\n  var maybeEnd = 0, ch;\n  while (ch = stream.next()) {\n    if (ch == \"#\" && maybeEnd == 2) {\n      state.tokenize = tokenBase;\n      break;\n    }\n    if (ch == \"]\")\n      maybeEnd++;\n    else if (ch != \" \")\n      maybeEnd = 0;\n  }\n  return \"meta\";\n}\n// Interface\n\nexport const velocity = {\n  name: \"velocity\",\n\n  startState: function() {\n    return {\n      tokenize: tokenBase,\n      beforeParams: false,\n      inParams: false,\n      inString: false,\n      lastTokenWasBuiltin: false\n    };\n  },\n\n  token: function(stream, state) {\n    if (stream.eatSpace()) return null;\n    return state.tokenize(stream, state);\n  },\n  languageData: {\n    commentTokens: {line: \"##\", block: {open: \"#*\", close: \"*#\"}}\n  }\n};\n","function mkVerilog(parserConfig) {\n\n  var statementIndentUnit = parserConfig.statementIndentUnit,\n      dontAlignCalls = parserConfig.dontAlignCalls,\n      noIndentKeywords = parserConfig.noIndentKeywords || [],\n      multiLineStrings = parserConfig.multiLineStrings,\n      hooks = parserConfig.hooks || {};\n\n  function words(str) {\n    var obj = {}, words = str.split(\" \");\n    for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n    return obj;\n  }\n\n  /**\n   * Keywords from IEEE 1800-2012\n   */\n  var keywords = words(\n    \"accept_on alias always always_comb always_ff always_latch and assert assign assume automatic before begin bind \" +\n      \"bins binsof bit break buf bufif0 bufif1 byte case casex casez cell chandle checker class clocking cmos config \" +\n      \"const constraint context continue cover covergroup coverpoint cross deassign default defparam design disable \" +\n      \"dist do edge else end endcase endchecker endclass endclocking endconfig endfunction endgenerate endgroup \" +\n      \"endinterface endmodule endpackage endprimitive endprogram endproperty endspecify endsequence endtable endtask \" +\n      \"enum event eventually expect export extends extern final first_match for force foreach forever fork forkjoin \" +\n      \"function generate genvar global highz0 highz1 if iff ifnone ignore_bins illegal_bins implements implies import \" +\n      \"incdir include initial inout input inside instance int integer interconnect interface intersect join join_any \" +\n      \"join_none large let liblist library local localparam logic longint macromodule matches medium modport module \" +\n      \"nand negedge nettype new nexttime nmos nor noshowcancelled not notif0 notif1 null or output package packed \" +\n      \"parameter pmos posedge primitive priority program property protected pull0 pull1 pulldown pullup \" +\n      \"pulsestyle_ondetect pulsestyle_onevent pure rand randc randcase randsequence rcmos real realtime ref reg \" +\n      \"reject_on release repeat restrict return rnmos rpmos rtran rtranif0 rtranif1 s_always s_eventually s_nexttime \" +\n      \"s_until s_until_with scalared sequence shortint shortreal showcancelled signed small soft solve specify \" +\n      \"specparam static string strong strong0 strong1 struct super supply0 supply1 sync_accept_on sync_reject_on \" +\n      \"table tagged task this throughout time timeprecision timeunit tran tranif0 tranif1 tri tri0 tri1 triand trior \" +\n      \"trireg type typedef union unique unique0 unsigned until until_with untyped use uwire var vectored virtual void \" +\n      \"wait wait_order wand weak weak0 weak1 while wildcard wire with within wor xnor xor\");\n\n  /** Operators from IEEE 1800-2012\n      unary_operator ::=\n      + | - | ! | ~ | & | ~& | | | ~| | ^ | ~^ | ^~\n      binary_operator ::=\n      + | - | * | / | % | == | != | === | !== | ==? | !=? | && | || | **\n      | < | <= | > | >= | & | | | ^ | ^~ | ~^ | >> | << | >>> | <<<\n      | -> | <->\n      inc_or_dec_operator ::= ++ | --\n      unary_module_path_operator ::=\n      ! | ~ | & | ~& | | | ~| | ^ | ~^ | ^~\n      binary_module_path_operator ::=\n      == | != | && | || | & | | | ^ | ^~ | ~^\n  */\n  var isOperatorChar = /[\\+\\-\\*\\/!~&|^%=?:]/;\n  var isBracketChar = /[\\[\\]{}()]/;\n\n  var unsignedNumber = /\\d[0-9_]*/;\n  var decimalLiteral = /\\d*\\s*'s?d\\s*\\d[0-9_]*/i;\n  var binaryLiteral = /\\d*\\s*'s?b\\s*[xz01][xz01_]*/i;\n  var octLiteral = /\\d*\\s*'s?o\\s*[xz0-7][xz0-7_]*/i;\n  var hexLiteral = /\\d*\\s*'s?h\\s*[0-9a-fxz?][0-9a-fxz?_]*/i;\n  var realLiteral = /(\\d[\\d_]*(\\.\\d[\\d_]*)?E-?[\\d_]+)|(\\d[\\d_]*\\.\\d[\\d_]*)/i;\n\n  var closingBracketOrWord = /^((\\w+)|[)}\\]])/;\n  var closingBracket = /[)}\\]]/;\n\n  var curPunc;\n  var curKeyword;\n\n  // Block openings which are closed by a matching keyword in the form of (\"end\" + keyword)\n  // E.g. \"task\" => \"endtask\"\n  var blockKeywords = words(\n    \"case checker class clocking config function generate interface module package \" +\n      \"primitive program property specify sequence table task\"\n  );\n\n  // Opening/closing pairs\n  var openClose = {};\n  for (var keyword in blockKeywords) {\n    openClose[keyword] = \"end\" + keyword;\n  }\n  openClose[\"begin\"] = \"end\";\n  openClose[\"casex\"] = \"endcase\";\n  openClose[\"casez\"] = \"endcase\";\n  openClose[\"do\"   ] = \"while\";\n  openClose[\"fork\" ] = \"join;join_any;join_none\";\n  openClose[\"covergroup\"] = \"endgroup\";\n\n  for (var i in noIndentKeywords) {\n    var keyword = noIndentKeywords[i];\n    if (openClose[keyword]) {\n      openClose[keyword] = undefined;\n    }\n  }\n\n  // Keywords which open statements that are ended with a semi-colon\n  var statementKeywords = words(\"always always_comb always_ff always_latch assert assign assume else export for foreach forever if import initial repeat while\");\n\n  function tokenBase(stream, state) {\n    var ch = stream.peek(), style;\n    if (hooks[ch] && (style = hooks[ch](stream, state)) != false) return style;\n    if (hooks.tokenBase && (style = hooks.tokenBase(stream, state)) != false)\n      return style;\n\n    if (/[,;:\\.]/.test(ch)) {\n      curPunc = stream.next();\n      return null;\n    }\n    if (isBracketChar.test(ch)) {\n      curPunc = stream.next();\n      return \"bracket\";\n    }\n    // Macros (tick-defines)\n    if (ch == '`') {\n      stream.next();\n      if (stream.eatWhile(/[\\w\\$_]/)) {\n        return \"def\";\n      } else {\n        return null;\n      }\n    }\n    // System calls\n    if (ch == '$') {\n      stream.next();\n      if (stream.eatWhile(/[\\w\\$_]/)) {\n        return \"meta\";\n      } else {\n        return null;\n      }\n    }\n    // Time literals\n    if (ch == '#') {\n      stream.next();\n      stream.eatWhile(/[\\d_.]/);\n      return \"def\";\n    }\n    // Strings\n    if (ch == '\"') {\n      stream.next();\n      state.tokenize = tokenString(ch);\n      return state.tokenize(stream, state);\n    }\n    // Comments\n    if (ch == \"/\") {\n      stream.next();\n      if (stream.eat(\"*\")) {\n        state.tokenize = tokenComment;\n        return tokenComment(stream, state);\n      }\n      if (stream.eat(\"/\")) {\n        stream.skipToEnd();\n        return \"comment\";\n      }\n      stream.backUp(1);\n    }\n\n    // Numeric literals\n    if (stream.match(realLiteral) ||\n        stream.match(decimalLiteral) ||\n        stream.match(binaryLiteral) ||\n        stream.match(octLiteral) ||\n        stream.match(hexLiteral) ||\n        stream.match(unsignedNumber) ||\n        stream.match(realLiteral)) {\n      return \"number\";\n    }\n\n    // Operators\n    if (stream.eatWhile(isOperatorChar)) {\n      return \"meta\";\n    }\n\n    // Keywords / plain variables\n    if (stream.eatWhile(/[\\w\\$_]/)) {\n      var cur = stream.current();\n      if (keywords[cur]) {\n        if (openClose[cur]) {\n          curPunc = \"newblock\";\n        }\n        if (statementKeywords[cur]) {\n          curPunc = \"newstatement\";\n        }\n        curKeyword = cur;\n        return \"keyword\";\n      }\n      return \"variable\";\n    }\n\n    stream.next();\n    return null;\n  }\n\n  function tokenString(quote) {\n    return function(stream, state) {\n      var escaped = false, next, end = false;\n      while ((next = stream.next()) != null) {\n        if (next == quote && !escaped) {end = true; break;}\n        escaped = !escaped && next == \"\\\\\";\n      }\n      if (end || !(escaped || multiLineStrings))\n        state.tokenize = tokenBase;\n      return \"string\";\n    };\n  }\n\n  function tokenComment(stream, state) {\n    var maybeEnd = false, ch;\n    while (ch = stream.next()) {\n      if (ch == \"/\" && maybeEnd) {\n        state.tokenize = tokenBase;\n        break;\n      }\n      maybeEnd = (ch == \"*\");\n    }\n    return \"comment\";\n  }\n\n  function Context(indented, column, type, align, prev) {\n    this.indented = indented;\n    this.column = column;\n    this.type = type;\n    this.align = align;\n    this.prev = prev;\n  }\n  function pushContext(state, col, type) {\n    var indent = state.indented;\n    var c = new Context(indent, col, type, null, state.context);\n    return state.context = c;\n  }\n  function popContext(state) {\n    var t = state.context.type;\n    if (t == \")\" || t == \"]\" || t == \"}\") {\n      state.indented = state.context.indented;\n    }\n    return state.context = state.context.prev;\n  }\n\n  function isClosing(text, contextClosing) {\n    if (text == contextClosing) {\n      return true;\n    } else {\n      // contextClosing may be multiple keywords separated by ;\n      var closingKeywords = contextClosing.split(\";\");\n      for (var i in closingKeywords) {\n        if (text == closingKeywords[i]) {\n          return true;\n        }\n      }\n      return false;\n    }\n  }\n\n  function buildElectricInputRegEx() {\n    // Reindentation should occur on any bracket char: {}()[]\n    // or on a match of any of the block closing keywords, at\n    // the end of a line\n    var allClosings = [];\n    for (var i in openClose) {\n      if (openClose[i]) {\n        var closings = openClose[i].split(\";\");\n        for (var j in closings) {\n          allClosings.push(closings[j]);\n        }\n      }\n    }\n    var re = new RegExp(\"[{}()\\\\[\\\\]]|(\" + allClosings.join(\"|\") + \")$\");\n    return re;\n  }\n\n  // Interface\n  return {\n    name: \"verilog\",\n\n    startState: function(indentUnit) {\n      var state = {\n        tokenize: null,\n        context: new Context(-indentUnit, 0, \"top\", false),\n        indented: 0,\n        startOfLine: true\n      };\n      if (hooks.startState) hooks.startState(state);\n      return state;\n    },\n\n    token: function(stream, state) {\n      var ctx = state.context;\n      if (stream.sol()) {\n        if (ctx.align == null) ctx.align = false;\n        state.indented = stream.indentation();\n        state.startOfLine = true;\n      }\n      if (hooks.token) {\n        // Call hook, with an optional return value of a style to override verilog styling.\n        var style = hooks.token(stream, state);\n        if (style !== undefined) {\n          return style;\n        }\n      }\n      if (stream.eatSpace()) return null;\n      curPunc = null;\n      curKeyword = null;\n      var style = (state.tokenize || tokenBase)(stream, state);\n      if (style == \"comment\" || style == \"meta\" || style == \"variable\") return style;\n      if (ctx.align == null) ctx.align = true;\n\n      if (curPunc == ctx.type) {\n        popContext(state);\n      } else if ((curPunc == \";\" && ctx.type == \"statement\") ||\n                 (ctx.type && isClosing(curKeyword, ctx.type))) {\n        ctx = popContext(state);\n        while (ctx && ctx.type == \"statement\") ctx = popContext(state);\n      } else if (curPunc == \"{\") {\n        pushContext(state, stream.column(), \"}\");\n      } else if (curPunc == \"[\") {\n        pushContext(state, stream.column(), \"]\");\n      } else if (curPunc == \"(\") {\n        pushContext(state, stream.column(), \")\");\n      } else if (ctx && ctx.type == \"endcase\" && curPunc == \":\") {\n        pushContext(state, stream.column(), \"statement\");\n      } else if (curPunc == \"newstatement\") {\n        pushContext(state, stream.column(), \"statement\");\n      } else if (curPunc == \"newblock\") {\n        if (curKeyword == \"function\" && ctx && (ctx.type == \"statement\" || ctx.type == \"endgroup\")) {\n          // The 'function' keyword can appear in some other contexts where it actually does not\n          // indicate a function (import/export DPI and covergroup definitions).\n          // Do nothing in this case\n        } else if (curKeyword == \"task\" && ctx && ctx.type == \"statement\") {\n          // Same thing for task\n        } else {\n          var close = openClose[curKeyword];\n          pushContext(state, stream.column(), close);\n        }\n      }\n\n      state.startOfLine = false;\n      return style;\n    },\n\n    indent: function(state, textAfter, cx) {\n      if (state.tokenize != tokenBase && state.tokenize != null) return null;\n      if (hooks.indent) {\n        var fromHook = hooks.indent(state);\n        if (fromHook >= 0) return fromHook;\n      }\n      var ctx = state.context, firstChar = textAfter && textAfter.charAt(0);\n      if (ctx.type == \"statement\" && firstChar == \"}\") ctx = ctx.prev;\n      var closing = false;\n      var possibleClosing = textAfter.match(closingBracketOrWord);\n      if (possibleClosing)\n        closing = isClosing(possibleClosing[0], ctx.type);\n      if (ctx.type == \"statement\") return ctx.indented + (firstChar == \"{\" ? 0 : statementIndentUnit || cx.unit);\n      else if (closingBracket.test(ctx.type) && ctx.align && !dontAlignCalls) return ctx.column + (closing ? 0 : 1);\n      else if (ctx.type == \")\" && !closing) return ctx.indented + (statementIndentUnit || cx.unit);\n      else return ctx.indented + (closing ? 0 : cx.unit);\n    },\n\n    languageData: {\n      indentOnInput: buildElectricInputRegEx(),\n      commentTokens: {line: \"//\", block: {open: \"/*\", close: \"*/\"}}\n    }\n  };\n};\n\nexport const verilog = mkVerilog({})\n\n// TL-Verilog mode.\n// See tl-x.org for language spec.\n// See the mode in action at makerchip.com.\n// Contact: steve.hoover@redwoodeda.com\n\n// TLV Identifier prefixes.\n// Note that sign is not treated separately, so \"+/-\" versions of numeric identifiers\n// are included.\nvar tlvIdentifierStyle = {\n  \"|\": \"link\",\n  \">\": \"property\",  // Should condition this off for > TLV 1c.\n  \"$\": \"variable\",\n  \"$$\": \"variable\",\n  \"?$\": \"qualifier\",\n  \"?*\": \"qualifier\",\n  \"-\": \"contentSeparator\",\n  \"/\": \"property\",\n  \"/-\": \"property\",\n  \"@\": \"variableName.special\",\n  \"@-\": \"variableName.special\",\n  \"@++\": \"variableName.special\",\n  \"@+=\": \"variableName.special\",\n  \"@+=-\": \"variableName.special\",\n  \"@--\": \"variableName.special\",\n  \"@-=\": \"variableName.special\",\n  \"%+\": \"tag\",\n  \"%-\": \"tag\",\n  \"%\": \"tag\",\n  \">>\": \"tag\",\n  \"<<\": \"tag\",\n  \"<>\": \"tag\",\n  \"#\": \"tag\",  // Need to choose a style for this.\n  \"^\": \"attribute\",\n  \"^^\": \"attribute\",\n  \"^!\": \"attribute\",\n  \"*\": \"variable\",\n  \"**\": \"variable\",\n  \"\\\\\": \"keyword\",\n  \"\\\"\": \"comment\"\n};\n\n// Lines starting with these characters define scope (result in indentation).\nvar tlvScopePrefixChars = {\n  \"/\": \"beh-hier\",\n  \">\": \"beh-hier\",\n  \"-\": \"phys-hier\",\n  \"|\": \"pipe\",\n  \"?\": \"when\",\n  \"@\": \"stage\",\n  \"\\\\\": \"keyword\"\n};\nvar tlvIndentUnit = 3;\nvar tlvTrackStatements = false;\nvar tlvIdentMatch = /^([~!@#\\$%\\^&\\*-\\+=\\?\\/\\\\\\|'\"<>]+)([\\d\\w_]*)/;  // Matches an identifier.\n// Note that ':' is excluded, because of it's use in [:].\nvar tlvLineIndentationMatch = /^[! ] */;\nvar tlvCommentMatch = /^\\/[\\/\\*]/;\n\nexport const tlv = mkVerilog({\n  hooks: {\n    electricInput: false,\n\n    // Return undefined for verilog tokenizing, or style for TLV token (null not used).\n    // Standard CM styles are used for most formatting, but some TL-Verilog-specific highlighting\n    // can be enabled with the definition of cm-tlv-* styles, including highlighting for:\n    //   - M4 tokens\n    //   - TLV scope indentation\n    //   - Statement delimitation (enabled by tlvTrackStatements)\n    token: function(stream, state) {\n      var style = undefined;\n      var match;  // Return value of pattern matches.\n\n      // Set highlighting mode based on code region (TLV or SV).\n      if (stream.sol() && ! state.tlvInBlockComment) {\n        // Process region.\n        if (stream.peek() == '\\\\') {\n          style = \"def\";\n          stream.skipToEnd();\n          if (stream.string.match(/\\\\SV/)) {\n            state.tlvCodeActive = false;\n          } else if (stream.string.match(/\\\\TLV/)){\n            state.tlvCodeActive = true;\n          }\n        }\n        // Correct indentation in the face of a line prefix char.\n        if (state.tlvCodeActive && stream.pos == 0 &&\n            (state.indented == 0) && (match = stream.match(tlvLineIndentationMatch, false))) {\n          state.indented = match[0].length;\n        }\n\n        // Compute indentation state:\n        //   o Auto indentation on next line\n        //   o Indentation scope styles\n        var indented = state.indented;\n        var depth = indented / tlvIndentUnit;\n        if (depth <= state.tlvIndentationStyle.length) {\n          // not deeper than current scope\n\n          var blankline = stream.string.length == indented;\n          var chPos = depth * tlvIndentUnit;\n          if (chPos < stream.string.length) {\n            var bodyString = stream.string.slice(chPos);\n            var ch = bodyString[0];\n            if (tlvScopePrefixChars[ch] && ((match = bodyString.match(tlvIdentMatch)) &&\n                                            tlvIdentifierStyle[match[1]])) {\n              // This line begins scope.\n              // Next line gets indented one level.\n              indented += tlvIndentUnit;\n              // Style the next level of indentation (except non-region keyword identifiers,\n              //   which are statements themselves)\n              if (!(ch == \"\\\\\" && chPos > 0)) {\n                state.tlvIndentationStyle[depth] = tlvScopePrefixChars[ch];\n                if (tlvTrackStatements) {state.statementComment = false;}\n                depth++;\n              }\n            }\n          }\n          // Clear out deeper indentation levels unless line is blank.\n          if (!blankline) {\n            while (state.tlvIndentationStyle.length > depth) {\n              state.tlvIndentationStyle.pop();\n            }\n          }\n        }\n        // Set next level of indentation.\n        state.tlvNextIndent = indented;\n      }\n\n      if (state.tlvCodeActive) {\n        // Highlight as TLV.\n\n        var beginStatement = false;\n        if (tlvTrackStatements) {\n          // This starts a statement if the position is at the scope level\n          // and we're not within a statement leading comment.\n          beginStatement =\n            (stream.peek() != \" \") &&   // not a space\n            (style === undefined) &&    // not a region identifier\n            !state.tlvInBlockComment && // not in block comment\n            //!stream.match(tlvCommentMatch, false) && // not comment start\n          (stream.column() == state.tlvIndentationStyle.length * tlvIndentUnit);  // at scope level\n          if (beginStatement) {\n            if (state.statementComment) {\n              // statement already started by comment\n              beginStatement = false;\n            }\n            state.statementComment =\n              stream.match(tlvCommentMatch, false); // comment start\n          }\n        }\n\n        var match;\n        if (style !== undefined) {\n        } else if (state.tlvInBlockComment) {\n          // In a block comment.\n          if (stream.match(/^.*?\\*\\//)) {\n            // Exit block comment.\n            state.tlvInBlockComment = false;\n            if (tlvTrackStatements && !stream.eol()) {\n              // Anything after comment is assumed to be real statement content.\n              state.statementComment = false;\n            }\n          } else {\n            stream.skipToEnd();\n          }\n          style = \"comment\";\n        } else if ((match = stream.match(tlvCommentMatch)) && !state.tlvInBlockComment) {\n          // Start comment.\n          if (match[0] == \"//\") {\n            // Line comment.\n            stream.skipToEnd();\n          } else {\n            // Block comment.\n            state.tlvInBlockComment = true;\n          }\n          style = \"comment\";\n        } else if (match = stream.match(tlvIdentMatch)) {\n          // looks like an identifier (or identifier prefix)\n          var prefix = match[1];\n          var mnemonic = match[2];\n          if (// is identifier prefix\n            tlvIdentifierStyle.hasOwnProperty(prefix) &&\n              // has mnemonic or we're at the end of the line (maybe it hasn't been typed yet)\n            (mnemonic.length > 0 || stream.eol())) {\n            style = tlvIdentifierStyle[prefix];\n          } else {\n            // Just swallow one character and try again.\n            // This enables subsequent identifier match with preceding symbol character, which\n            //   is legal within a statement.  (Eg, !$reset).  It also enables detection of\n            //   comment start with preceding symbols.\n            stream.backUp(stream.current().length - 1);\n          }\n        } else if (stream.match(/^\\t+/)) {\n          // Highlight tabs, which are illegal.\n          style = \"invalid\";\n        } else if (stream.match(/^[\\[\\]{}\\(\\);\\:]+/)) {\n          // [:], (), {}, ;.\n          style = \"meta\";\n        } else if (match = stream.match(/^[mM]4([\\+_])?[\\w\\d_]*/)) {\n          // m4 pre proc\n          style = (match[1] == \"+\") ? \"keyword.special\" : \"keyword\";\n        } else if (stream.match(/^ +/)){\n          // Skip over spaces.\n          if (stream.eol()) {\n            // Trailing spaces.\n            style = \"error\";\n          }\n        } else if (stream.match(/^[\\w\\d_]+/)) {\n          // alpha-numeric token.\n          style = \"number\";\n        } else {\n          // Eat the next char w/ no formatting.\n          stream.next();\n        }\n      } else {\n        if (stream.match(/^[mM]4([\\w\\d_]*)/)) {\n          // m4 pre proc\n          style = \"keyword\";\n        }\n      }\n      return style;\n    },\n\n    indent: function(state) {\n      return (state.tlvCodeActive == true) ? state.tlvNextIndent : -1;\n    },\n\n    startState: function(state) {\n      state.tlvIndentationStyle = [];  // Styles to use for each level of indentation.\n      state.tlvCodeActive = true;  // True when we're in a TLV region (and at beginning of file).\n      state.tlvNextIndent = -1;    // The number of spaces to autoindent the next line if tlvCodeActive.\n      state.tlvInBlockComment = false;  // True inside /**/ comment.\n      if (tlvTrackStatements) {\n        state.statementComment = false;  // True inside a statement's header comment.\n      }\n    }\n\n  }\n});\n","function words(str) {\n  var obj = {}, words = str.split(\",\");\n  for (var i = 0; i < words.length; ++i) {\n    var allCaps = words[i].toUpperCase();\n    var firstCap = words[i].charAt(0).toUpperCase() + words[i].slice(1);\n    obj[words[i]] = true;\n    obj[allCaps] = true;\n    obj[firstCap] = true;\n  }\n  return obj;\n}\n\nfunction metaHook(stream) {\n  stream.eatWhile(/[\\w\\$_]/);\n  return \"meta\";\n}\n\nvar atoms = words(\"null\"),\n    hooks = {\"`\": metaHook, \"$\": metaHook},\n    multiLineStrings = false;\n\nvar keywords = words(\"abs,access,after,alias,all,and,architecture,array,assert,attribute,begin,block,\" +\n                     \"body,buffer,bus,case,component,configuration,constant,disconnect,downto,else,elsif,end,end block,end case,\" +\n                     \"end component,end for,end generate,end if,end loop,end process,end record,end units,entity,exit,file,for,\" +\n                     \"function,generate,generic,generic map,group,guarded,if,impure,in,inertial,inout,is,label,library,linkage,\" +\n                     \"literal,loop,map,mod,nand,new,next,nor,null,of,on,open,or,others,out,package,package body,port,port map,\" +\n                     \"postponed,procedure,process,pure,range,record,register,reject,rem,report,return,rol,ror,select,severity,signal,\" +\n                     \"sla,sll,sra,srl,subtype,then,to,transport,type,unaffected,units,until,use,variable,wait,when,while,with,xnor,xor\");\n\nvar blockKeywords = words(\"architecture,entity,begin,case,port,else,elsif,end,for,function,if\");\n\nvar isOperatorChar = /[&|~><!\\)\\(*#%@+\\/=?\\:;}{,\\.\\^\\-\\[\\]]/;\nvar curPunc;\n\nfunction tokenBase(stream, state) {\n  var ch = stream.next();\n  if (hooks[ch]) {\n    var result = hooks[ch](stream, state);\n    if (result !== false) return result;\n  }\n  if (ch == '\"') {\n    state.tokenize = tokenString2(ch);\n    return state.tokenize(stream, state);\n  }\n  if (ch == \"'\") {\n    state.tokenize = tokenString(ch);\n    return state.tokenize(stream, state);\n  }\n  if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n    curPunc = ch;\n    return null;\n  }\n  if (/[\\d']/.test(ch)) {\n    stream.eatWhile(/[\\w\\.']/);\n    return \"number\";\n  }\n  if (ch == \"-\") {\n    if (stream.eat(\"-\")) {\n      stream.skipToEnd();\n      return \"comment\";\n    }\n  }\n  if (isOperatorChar.test(ch)) {\n    stream.eatWhile(isOperatorChar);\n    return \"operator\";\n  }\n  stream.eatWhile(/[\\w\\$_]/);\n  var cur = stream.current();\n  if (keywords.propertyIsEnumerable(cur.toLowerCase())) {\n    if (blockKeywords.propertyIsEnumerable(cur)) curPunc = \"newstatement\";\n    return \"keyword\";\n  }\n  if (atoms.propertyIsEnumerable(cur)) return \"atom\";\n  return \"variable\";\n}\n\nfunction tokenString(quote) {\n  return function(stream, state) {\n    var escaped = false, next, end = false;\n    while ((next = stream.next()) != null) {\n      if (next == quote && !escaped) {end = true; break;}\n      escaped = !escaped && next == \"--\";\n    }\n    if (end || !(escaped || multiLineStrings))\n      state.tokenize = tokenBase;\n    return \"string\";\n  };\n}\nfunction tokenString2(quote) {\n  return function(stream, state) {\n    var escaped = false, next, end = false;\n    while ((next = stream.next()) != null) {\n      if (next == quote && !escaped) {end = true; break;}\n      escaped = !escaped && next == \"--\";\n    }\n    if (end || !(escaped || multiLineStrings))\n      state.tokenize = tokenBase;\n    return \"string.special\";\n  };\n}\n\nfunction Context(indented, column, type, align, prev) {\n  this.indented = indented;\n  this.column = column;\n  this.type = type;\n  this.align = align;\n  this.prev = prev;\n}\nfunction pushContext(state, col, type) {\n  return state.context = new Context(state.indented, col, type, null, state.context);\n}\nfunction popContext(state) {\n  var t = state.context.type;\n  if (t == \")\" || t == \"]\" || t == \"}\")\n    state.indented = state.context.indented;\n  return state.context = state.context.prev;\n}\n\n// Interface\nexport const vhdl = {\n  name: \"vhdl\",\n  startState: function(indentUnit) {\n    return {\n      tokenize: null,\n      context: new Context(-indentUnit, 0, \"top\", false),\n      indented: 0,\n      startOfLine: true\n    };\n  },\n\n  token: function(stream, state) {\n    var ctx = state.context;\n    if (stream.sol()) {\n      if (ctx.align == null) ctx.align = false;\n      state.indented = stream.indentation();\n      state.startOfLine = true;\n    }\n    if (stream.eatSpace()) return null;\n    curPunc = null;\n    var style = (state.tokenize || tokenBase)(stream, state);\n    if (style == \"comment\" || style == \"meta\") return style;\n    if (ctx.align == null) ctx.align = true;\n\n    if ((curPunc == \";\" || curPunc == \":\") && ctx.type == \"statement\") popContext(state);\n    else if (curPunc == \"{\") pushContext(state, stream.column(), \"}\");\n    else if (curPunc == \"[\") pushContext(state, stream.column(), \"]\");\n    else if (curPunc == \"(\") pushContext(state, stream.column(), \")\");\n    else if (curPunc == \"}\") {\n      while (ctx.type == \"statement\") ctx = popContext(state);\n      if (ctx.type == \"}\") ctx = popContext(state);\n      while (ctx.type == \"statement\") ctx = popContext(state);\n    }\n    else if (curPunc == ctx.type) popContext(state);\n    else if (ctx.type == \"}\" || ctx.type == \"top\" || (ctx.type == \"statement\" && curPunc == \"newstatement\"))\n      pushContext(state, stream.column(), \"statement\");\n    state.startOfLine = false;\n    return style;\n  },\n\n  indent: function(state, textAfter, cx) {\n    if (state.tokenize != tokenBase && state.tokenize != null) return 0;\n    var firstChar = textAfter && textAfter.charAt(0), ctx = state.context, closing = firstChar == ctx.type;\n    if (ctx.type == \"statement\") return ctx.indented + (firstChar == \"{\" ? 0 : cx.unit);\n    else if (ctx.align) return ctx.column + (closing ? 0 : 1);\n    else return ctx.indented + (closing ? 0 : cx.unit);\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*[{}]$/,\n    commentTokens: {line: \"--\"}\n  }\n}\n","function wordRegexp(words) {\n  return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\");\n};\n\nvar builtinArray = [\n  \"Clamp\",\n  \"Constructor\",\n  \"EnforceRange\",\n  \"Exposed\",\n  \"ImplicitThis\",\n  \"Global\", \"PrimaryGlobal\",\n  \"LegacyArrayClass\",\n  \"LegacyUnenumerableNamedProperties\",\n  \"LenientThis\",\n  \"NamedConstructor\",\n  \"NewObject\",\n  \"NoInterfaceObject\",\n  \"OverrideBuiltins\",\n  \"PutForwards\",\n  \"Replaceable\",\n  \"SameObject\",\n  \"TreatNonObjectAsNull\",\n  \"TreatNullAs\",\n    \"EmptyString\",\n  \"Unforgeable\",\n  \"Unscopeable\"\n];\nvar builtins = wordRegexp(builtinArray);\n\nvar typeArray = [\n  \"unsigned\", \"short\", \"long\",                  // UnsignedIntegerType\n  \"unrestricted\", \"float\", \"double\",            // UnrestrictedFloatType\n  \"boolean\", \"byte\", \"octet\",                   // Rest of PrimitiveType\n  \"Promise\",                                    // PromiseType\n  \"ArrayBuffer\", \"DataView\", \"Int8Array\", \"Int16Array\", \"Int32Array\",\n  \"Uint8Array\", \"Uint16Array\", \"Uint32Array\", \"Uint8ClampedArray\",\n  \"Float32Array\", \"Float64Array\",               // BufferRelatedType\n  \"ByteString\", \"DOMString\", \"USVString\", \"sequence\", \"object\", \"RegExp\",\n  \"Error\", \"DOMException\", \"FrozenArray\",       // Rest of NonAnyType\n  \"any\",                                        // Rest of SingleType\n  \"void\"                                        // Rest of ReturnType\n];\nvar types = wordRegexp(typeArray);\n\nvar keywordArray = [\n  \"attribute\", \"callback\", \"const\", \"deleter\", \"dictionary\", \"enum\", \"getter\",\n  \"implements\", \"inherit\", \"interface\", \"iterable\", \"legacycaller\", \"maplike\",\n  \"partial\", \"required\", \"serializer\", \"setlike\", \"setter\", \"static\",\n  \"stringifier\", \"typedef\",                     // ArgumentNameKeyword except\n                                                // \"unrestricted\"\n  \"optional\", \"readonly\", \"or\"\n];\nvar keywords = wordRegexp(keywordArray);\n\nvar atomArray = [\n  \"true\", \"false\",                              // BooleanLiteral\n  \"Infinity\", \"NaN\",                            // FloatLiteral\n  \"null\"                                        // Rest of ConstValue\n];\nvar atoms = wordRegexp(atomArray);\n\nvar startDefArray = [\"callback\", \"dictionary\", \"enum\", \"interface\"];\nvar startDefs = wordRegexp(startDefArray);\n\nvar endDefArray = [\"typedef\"];\nvar endDefs = wordRegexp(endDefArray);\n\nvar singleOperators = /^[:<=>?]/;\nvar integers = /^-?([1-9][0-9]*|0[Xx][0-9A-Fa-f]+|0[0-7]*)/;\nvar floats = /^-?(([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+)([Ee][+-]?[0-9]+)?|[0-9]+[Ee][+-]?[0-9]+)/;\nvar identifiers = /^_?[A-Za-z][0-9A-Z_a-z-]*/;\nvar identifiersEnd = /^_?[A-Za-z][0-9A-Z_a-z-]*(?=\\s*;)/;\nvar strings = /^\"[^\"]*\"/;\nvar multilineComments = /^\\/\\*.*?\\*\\//;\nvar multilineCommentsStart = /^\\/\\*.*/;\nvar multilineCommentsEnd = /^.*?\\*\\//;\n\nfunction readToken(stream, state) {\n  // whitespace\n  if (stream.eatSpace()) return null;\n\n  // comment\n  if (state.inComment) {\n    if (stream.match(multilineCommentsEnd)) {\n      state.inComment = false;\n      return \"comment\";\n    }\n    stream.skipToEnd();\n    return \"comment\";\n  }\n  if (stream.match(\"//\")) {\n    stream.skipToEnd();\n    return \"comment\";\n  }\n  if (stream.match(multilineComments)) return \"comment\";\n  if (stream.match(multilineCommentsStart)) {\n    state.inComment = true;\n    return \"comment\";\n  }\n\n  // integer and float\n  if (stream.match(/^-?[0-9\\.]/, false)) {\n    if (stream.match(integers) || stream.match(floats)) return \"number\";\n  }\n\n  // string\n  if (stream.match(strings)) return \"string\";\n\n  // identifier\n  if (state.startDef && stream.match(identifiers)) return \"def\";\n\n  if (state.endDef && stream.match(identifiersEnd)) {\n    state.endDef = false;\n    return \"def\";\n  }\n\n  if (stream.match(keywords)) return \"keyword\";\n\n  if (stream.match(types)) {\n    var lastToken = state.lastToken;\n    var nextToken = (stream.match(/^\\s*(.+?)\\b/, false) || [])[1];\n\n    if (lastToken === \":\" || lastToken === \"implements\" ||\n        nextToken === \"implements\" || nextToken === \"=\") {\n      // Used as identifier\n      return \"builtin\";\n    } else {\n      // Used as type\n      return \"type\";\n    }\n  }\n\n  if (stream.match(builtins)) return \"builtin\";\n  if (stream.match(atoms)) return \"atom\";\n  if (stream.match(identifiers)) return \"variable\";\n\n  // other\n  if (stream.match(singleOperators)) return \"operator\";\n\n  // unrecognized\n  stream.next();\n  return null;\n};\n\nexport const webIDL = {\n  name: \"webidl\",\n  startState: function() {\n    return {\n      // Is in multiline comment\n      inComment: false,\n      // Last non-whitespace, matched token\n      lastToken: \"\",\n      // Next token is a definition\n      startDef: false,\n      // Last token of the statement is a definition\n      endDef: false\n    };\n  },\n  token: function(stream, state) {\n    var style = readToken(stream, state);\n\n    if (style) {\n      var cur = stream.current();\n      state.lastToken = cur;\n      if (style === \"keyword\") {\n        state.startDef = startDefs.test(cur);\n        state.endDef = state.endDef || endDefs.test(cur);\n      } else {\n        state.startDef = false;\n      }\n    }\n\n    return style;\n  },\n\n  languageData: {\n    autocomplete: builtinArray.concat(typeArray).concat(keywordArray).concat(atomArray)\n  }\n};\n","// The keywords object is set to the result of this self executing\n// function. Each keyword is a property of the keywords object whose\n// value is {type: atype, style: astyle}\nvar keywords = function(){\n  // convenience functions used to build keywords object\n  function kw(type) {return {type: type, style: \"keyword\"};}\n  var operator = kw(\"operator\")\n  , atom = {type: \"atom\", style: \"atom\"}\n  , punctuation = {type: \"punctuation\", style: null}\n  , qualifier = {type: \"axis_specifier\", style: \"qualifier\"};\n\n  // kwObj is what is return from this function at the end\n  var kwObj = {\n    ',': punctuation\n  };\n\n  // a list of 'basic' keywords. For each add a property to kwObj with the value of\n  // {type: basic[i], style: \"keyword\"} e.g. 'after' --> {type: \"after\", style: \"keyword\"}\n  var basic = ['after', 'all', 'allowing', 'ancestor', 'ancestor-or-self', 'any', 'array', 'as',\n               'ascending', 'at', 'attribute', 'base-uri', 'before', 'boundary-space', 'by', 'case', 'cast',\n               'castable', 'catch', 'child', 'collation', 'comment', 'construction', 'contains', 'content',\n               'context', 'copy', 'copy-namespaces', 'count', 'decimal-format', 'declare', 'default', 'delete',\n               'descendant', 'descendant-or-self', 'descending', 'diacritics', 'different', 'distance',\n               'document', 'document-node', 'element', 'else', 'empty', 'empty-sequence', 'encoding', 'end',\n               'entire', 'every', 'exactly', 'except', 'external', 'first', 'following', 'following-sibling',\n               'for', 'from', 'ftand', 'ftnot', 'ft-option', 'ftor', 'function', 'fuzzy', 'greatest', 'group',\n               'if', 'import', 'in', 'inherit', 'insensitive', 'insert', 'instance', 'intersect', 'into',\n               'invoke', 'is', 'item', 'language', 'last', 'lax', 'least', 'let', 'levels', 'lowercase', 'map',\n               'modify', 'module', 'most', 'namespace', 'next', 'no', 'node', 'nodes', 'no-inherit',\n               'no-preserve', 'not', 'occurs', 'of', 'only', 'option', 'order', 'ordered', 'ordering',\n               'paragraph', 'paragraphs', 'parent', 'phrase', 'preceding', 'preceding-sibling', 'preserve',\n               'previous', 'processing-instruction', 'relationship', 'rename', 'replace', 'return',\n               'revalidation', 'same', 'satisfies', 'schema', 'schema-attribute', 'schema-element', 'score',\n               'self', 'sensitive', 'sentence', 'sentences', 'sequence', 'skip', 'sliding', 'some', 'stable',\n               'start', 'stemming', 'stop', 'strict', 'strip', 'switch', 'text', 'then', 'thesaurus', 'times',\n               'to', 'transform', 'treat', 'try', 'tumbling', 'type', 'typeswitch', 'union', 'unordered',\n               'update', 'updating', 'uppercase', 'using', 'validate', 'value', 'variable', 'version',\n               'weight', 'when', 'where', 'wildcards', 'window', 'with', 'without', 'word', 'words', 'xquery'];\n  for(var i=0, l=basic.length; i < l; i++) { kwObj[basic[i]] = kw(basic[i]);};\n\n  // a list of types. For each add a property to kwObj with the value of\n  // {type: \"atom\", style: \"atom\"}\n  var types = ['xs:anyAtomicType', 'xs:anySimpleType', 'xs:anyType', 'xs:anyURI',\n               'xs:base64Binary', 'xs:boolean', 'xs:byte', 'xs:date', 'xs:dateTime', 'xs:dateTimeStamp',\n               'xs:dayTimeDuration', 'xs:decimal', 'xs:double', 'xs:duration', 'xs:ENTITIES', 'xs:ENTITY',\n               'xs:float', 'xs:gDay', 'xs:gMonth', 'xs:gMonthDay', 'xs:gYear', 'xs:gYearMonth', 'xs:hexBinary',\n               'xs:ID', 'xs:IDREF', 'xs:IDREFS', 'xs:int', 'xs:integer', 'xs:item', 'xs:java', 'xs:language',\n               'xs:long', 'xs:Name', 'xs:NCName', 'xs:negativeInteger', 'xs:NMTOKEN', 'xs:NMTOKENS',\n               'xs:nonNegativeInteger', 'xs:nonPositiveInteger', 'xs:normalizedString', 'xs:NOTATION',\n               'xs:numeric', 'xs:positiveInteger', 'xs:precisionDecimal', 'xs:QName', 'xs:short', 'xs:string',\n               'xs:time', 'xs:token', 'xs:unsignedByte', 'xs:unsignedInt', 'xs:unsignedLong',\n               'xs:unsignedShort', 'xs:untyped', 'xs:untypedAtomic', 'xs:yearMonthDuration'];\n  for(var i=0, l=types.length; i < l; i++) { kwObj[types[i]] = atom;};\n\n  // each operator will add a property to kwObj with value of {type: \"operator\", style: \"keyword\"}\n  var operators = ['eq', 'ne', 'lt', 'le', 'gt', 'ge', ':=', '=', '>', '>=', '<', '<=', '.', '|', '?', 'and', 'or', 'div', 'idiv', 'mod', '*', '/', '+', '-'];\n  for(var i=0, l=operators.length; i < l; i++) { kwObj[operators[i]] = operator;};\n\n  // each axis_specifiers will add a property to kwObj with value of {type: \"axis_specifier\", style: \"qualifier\"}\n  var axis_specifiers = [\"self::\", \"attribute::\", \"child::\", \"descendant::\", \"descendant-or-self::\", \"parent::\",\n                         \"ancestor::\", \"ancestor-or-self::\", \"following::\", \"preceding::\", \"following-sibling::\", \"preceding-sibling::\"];\n  for(var i=0, l=axis_specifiers.length; i < l; i++) { kwObj[axis_specifiers[i]] = qualifier; };\n\n  return kwObj;\n}();\n\nfunction chain(stream, state, f) {\n  state.tokenize = f;\n  return f(stream, state);\n}\n\n// the primary mode tokenizer\nfunction tokenBase(stream, state) {\n  var ch = stream.next(),\n      mightBeFunction = false,\n      isEQName = isEQNameAhead(stream);\n\n  // an XML tag (if not in some sub, chained tokenizer)\n  if (ch == \"<\") {\n    if(stream.match(\"!--\", true))\n      return chain(stream, state, tokenXMLComment);\n\n    if(stream.match(\"![CDATA\", false)) {\n      state.tokenize = tokenCDATA;\n      return \"tag\";\n    }\n\n    if(stream.match(\"?\", false)) {\n      return chain(stream, state, tokenPreProcessing);\n    }\n\n    var isclose = stream.eat(\"/\");\n    stream.eatSpace();\n    var tagName = \"\", c;\n    while ((c = stream.eat(/[^\\s\\u00a0=<>\\\"\\'\\/?]/))) tagName += c;\n\n    return chain(stream, state, tokenTag(tagName, isclose));\n  }\n  // start code block\n  else if(ch == \"{\") {\n    pushStateStack(state, { type: \"codeblock\"});\n    return null;\n  }\n  // end code block\n  else if(ch == \"}\") {\n    popStateStack(state);\n    return null;\n  }\n  // if we're in an XML block\n  else if(isInXmlBlock(state)) {\n    if(ch == \">\")\n      return \"tag\";\n    else if(ch == \"/\" && stream.eat(\">\")) {\n      popStateStack(state);\n      return \"tag\";\n    }\n    else\n      return \"variable\";\n  }\n  // if a number\n  else if (/\\d/.test(ch)) {\n    stream.match(/^\\d*(?:\\.\\d*)?(?:E[+\\-]?\\d+)?/);\n    return \"atom\";\n  }\n  // comment start\n  else if (ch === \"(\" && stream.eat(\":\")) {\n    pushStateStack(state, { type: \"comment\"});\n    return chain(stream, state, tokenComment);\n  }\n  // quoted string\n  else if (!isEQName && (ch === '\"' || ch === \"'\"))\n    return startString(stream, state, ch);\n  // variable\n  else if(ch === \"$\") {\n    return chain(stream, state, tokenVariable);\n  }\n  // assignment\n  else if(ch ===\":\" && stream.eat(\"=\")) {\n    return \"keyword\";\n  }\n  // open paren\n  else if(ch === \"(\") {\n    pushStateStack(state, { type: \"paren\"});\n    return null;\n  }\n  // close paren\n  else if(ch === \")\") {\n    popStateStack(state);\n    return null;\n  }\n  // open paren\n  else if(ch === \"[\") {\n    pushStateStack(state, { type: \"bracket\"});\n    return null;\n  }\n  // close paren\n  else if(ch === \"]\") {\n    popStateStack(state);\n    return null;\n  }\n  else {\n    var known = keywords.propertyIsEnumerable(ch) && keywords[ch];\n\n    // if there's a EQName ahead, consume the rest of the string portion, it's likely a function\n    if(isEQName && ch === '\\\"') while(stream.next() !== '\"'){}\n    if(isEQName && ch === '\\'') while(stream.next() !== '\\''){}\n\n    // gobble up a word if the character is not known\n    if(!known) stream.eatWhile(/[\\w\\$_-]/);\n\n    // gobble a colon in the case that is a lib func type call fn:doc\n    var foundColon = stream.eat(\":\");\n\n    // if there's not a second colon, gobble another word. Otherwise, it's probably an axis specifier\n    // which should get matched as a keyword\n    if(!stream.eat(\":\") && foundColon) {\n      stream.eatWhile(/[\\w\\$_-]/);\n    }\n    // if the next non whitespace character is an open paren, this is probably a function (if not a keyword of other sort)\n    if(stream.match(/^[ \\t]*\\(/, false)) {\n      mightBeFunction = true;\n    }\n    // is the word a keyword?\n    var word = stream.current();\n    known = keywords.propertyIsEnumerable(word) && keywords[word];\n\n    // if we think it's a function call but not yet known,\n    // set style to variable for now for lack of something better\n    if(mightBeFunction && !known) known = {type: \"function_call\", style: \"def\"};\n\n    // if the previous word was element, attribute, axis specifier, this word should be the name of that\n    if(isInXmlConstructor(state)) {\n      popStateStack(state);\n      return \"variable\";\n    }\n    // as previously checked, if the word is element,attribute, axis specifier, call it an \"xmlconstructor\" and\n    // push the stack so we know to look for it on the next word\n    if(word == \"element\" || word == \"attribute\" || known.type == \"axis_specifier\") pushStateStack(state, {type: \"xmlconstructor\"});\n\n    // if the word is known, return the details of that else just call this a generic 'word'\n    return known ? known.style : \"variable\";\n  }\n}\n\n// handle comments, including nested\nfunction tokenComment(stream, state) {\n  var maybeEnd = false, maybeNested = false, nestedCount = 0, ch;\n  while (ch = stream.next()) {\n    if (ch == \")\" && maybeEnd) {\n      if(nestedCount > 0)\n        nestedCount--;\n      else {\n        popStateStack(state);\n        break;\n      }\n    }\n    else if(ch == \":\" && maybeNested) {\n      nestedCount++;\n    }\n    maybeEnd = (ch == \":\");\n    maybeNested = (ch == \"(\");\n  }\n\n  return \"comment\";\n}\n\n// tokenizer for string literals\n// optionally pass a tokenizer function to set state.tokenize back to when finished\nfunction tokenString(quote, f) {\n  return function(stream, state) {\n    var ch;\n    while (ch = stream.next()) {\n      if (ch == quote) {\n        popStateStack(state);\n        if (f) state.tokenize = f;\n        break;\n      } else if (stream.match(\"{\", false) && isInXmlAttributeBlock(state)) {\n        // if we're in a string and in an XML block, allow an embedded code block in an attribute\n        pushStateStack(state, { type: \"codeblock\"});\n        state.tokenize = tokenBase;\n        return \"string\";\n      }\n    }\n\n    return \"string\";\n  };\n}\n\nfunction startString(stream, state, quote, f) {\n  let tokenize = tokenString(quote, f);\n  pushStateStack(state, { type: \"string\", name: quote, tokenize });\n  return chain(stream, state, tokenize);\n}\n\n// tokenizer for variables\nfunction tokenVariable(stream, state) {\n  var isVariableChar = /[\\w\\$_-]/;\n\n  // a variable may start with a quoted EQName so if the next character is quote, consume to the next quote\n  if(stream.eat(\"\\\"\")) {\n    while(stream.next() !== '\\\"'){};\n    stream.eat(\":\");\n  } else {\n    stream.eatWhile(isVariableChar);\n    if(!stream.match(\":=\", false)) stream.eat(\":\");\n  }\n  stream.eatWhile(isVariableChar);\n  state.tokenize = tokenBase;\n  return \"variable\";\n}\n\n// tokenizer for XML tags\nfunction tokenTag(name, isclose) {\n  return function(stream, state) {\n    stream.eatSpace();\n    if(isclose && stream.eat(\">\")) {\n      popStateStack(state);\n      state.tokenize = tokenBase;\n      return \"tag\";\n    }\n    // self closing tag without attributes?\n    if(!stream.eat(\"/\"))\n      pushStateStack(state, { type: \"tag\", name: name, tokenize: tokenBase});\n    if(!stream.eat(\">\")) {\n      state.tokenize = tokenAttribute;\n      return \"tag\";\n    }\n    else {\n      state.tokenize = tokenBase;\n    }\n    return \"tag\";\n  };\n}\n\n// tokenizer for XML attributes\nfunction tokenAttribute(stream, state) {\n  var ch = stream.next();\n\n  if(ch == \"/\" && stream.eat(\">\")) {\n    if(isInXmlAttributeBlock(state)) popStateStack(state);\n    if(isInXmlBlock(state)) popStateStack(state);\n    return \"tag\";\n  }\n  if(ch == \">\") {\n    if(isInXmlAttributeBlock(state)) popStateStack(state);\n    return \"tag\";\n  }\n  if(ch == \"=\")\n    return null;\n  // quoted string\n  if (ch == '\"' || ch == \"'\")\n    return startString(stream, state, ch, tokenAttribute);\n\n  if(!isInXmlAttributeBlock(state))\n    pushStateStack(state, { type: \"attribute\", tokenize: tokenAttribute});\n\n  stream.eat(/[a-zA-Z_:]/);\n  stream.eatWhile(/[-a-zA-Z0-9_:.]/);\n  stream.eatSpace();\n\n  // the case where the attribute has not value and the tag was closed\n  if(stream.match(\">\", false) || stream.match(\"/\", false)) {\n    popStateStack(state);\n    state.tokenize = tokenBase;\n  }\n\n  return \"attribute\";\n}\n\n// handle comments, including nested\nfunction tokenXMLComment(stream, state) {\n  var ch;\n  while (ch = stream.next()) {\n    if (ch == \"-\" && stream.match(\"->\", true)) {\n      state.tokenize = tokenBase;\n      return \"comment\";\n    }\n  }\n}\n\n\n// handle CDATA\nfunction tokenCDATA(stream, state) {\n  var ch;\n  while (ch = stream.next()) {\n    if (ch == \"]\" && stream.match(\"]\", true)) {\n      state.tokenize = tokenBase;\n      return \"comment\";\n    }\n  }\n}\n\n// handle preprocessing instructions\nfunction tokenPreProcessing(stream, state) {\n  var ch;\n  while (ch = stream.next()) {\n    if (ch == \"?\" && stream.match(\">\", true)) {\n      state.tokenize = tokenBase;\n      return \"processingInstruction\";\n    }\n  }\n}\n\n\n// functions to test the current context of the state\nfunction isInXmlBlock(state) { return isIn(state, \"tag\"); }\nfunction isInXmlAttributeBlock(state) { return isIn(state, \"attribute\"); }\nfunction isInXmlConstructor(state) { return isIn(state, \"xmlconstructor\"); }\nfunction isInString(state) { return isIn(state, \"string\"); }\n\nfunction isEQNameAhead(stream) {\n  // assume we've already eaten a quote (\")\n  if(stream.current() === '\"')\n    return stream.match(/^[^\\\"]+\\\"\\:/, false);\n  else if(stream.current() === '\\'')\n    return stream.match(/^[^\\\"]+\\'\\:/, false);\n  else\n    return false;\n}\n\nfunction isIn(state, type) {\n  return (state.stack.length && state.stack[state.stack.length - 1].type == type);\n}\n\nfunction pushStateStack(state, newState) {\n  state.stack.push(newState);\n}\n\nfunction popStateStack(state) {\n  state.stack.pop();\n  var reinstateTokenize = state.stack.length && state.stack[state.stack.length-1].tokenize;\n  state.tokenize = reinstateTokenize || tokenBase;\n}\n\n// the interface for the mode API\nexport const xQuery = {\n  name: \"xquery\",\n  startState: function() {\n    return {\n      tokenize: tokenBase,\n      cc: [],\n      stack: []\n    };\n  },\n\n  token: function(stream, state) {\n    if (stream.eatSpace()) return null;\n    var style = state.tokenize(stream, state);\n    return style;\n  },\n\n  languageData: {\n    commentTokens: {block: {open: \"(:\", close: \":)\"}}\n  }\n};\n","function words(str) {\n  var obj = {}, words = str.split(\" \");\n  for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n  return obj;\n}\n\nvar bodiedOps = words(\"Assert BackQuote D Defun Deriv For ForEach FromFile \" +\n                      \"FromString Function Integrate InverseTaylor Limit \" +\n                      \"LocalSymbols Macro MacroRule MacroRulePattern \" +\n                      \"NIntegrate Rule RulePattern Subst TD TExplicitSum \" +\n                      \"TSum Taylor Taylor1 Taylor2 Taylor3 ToFile \" +\n                      \"ToStdout ToString TraceRule Until While\");\n\n// patterns\nvar pFloatForm  = \"(?:(?:\\\\.\\\\d+|\\\\d+\\\\.\\\\d*|\\\\d+)(?:[eE][+-]?\\\\d+)?)\";\nvar pIdentifier = \"(?:[a-zA-Z\\\\$'][a-zA-Z0-9\\\\$']*)\";\n\n// regular expressions\nvar reFloatForm    = new RegExp(pFloatForm);\nvar reIdentifier   = new RegExp(pIdentifier);\nvar rePattern      = new RegExp(pIdentifier + \"?_\" + pIdentifier);\nvar reFunctionLike = new RegExp(pIdentifier + \"\\\\s*\\\\(\");\n\nfunction tokenBase(stream, state) {\n  var ch;\n\n  // get next character\n  ch = stream.next();\n\n  // string\n  if (ch === '\"') {\n    state.tokenize = tokenString;\n    return state.tokenize(stream, state);\n  }\n\n  // comment\n  if (ch === '/') {\n    if (stream.eat('*')) {\n      state.tokenize = tokenComment;\n      return state.tokenize(stream, state);\n    }\n    if (stream.eat(\"/\")) {\n      stream.skipToEnd();\n      return \"comment\";\n    }\n  }\n\n  // go back one character\n  stream.backUp(1);\n\n  // update scope info\n  var m = stream.match(/^(\\w+)\\s*\\(/, false);\n  if (m !== null && bodiedOps.hasOwnProperty(m[1]))\n    state.scopes.push('bodied');\n\n  var scope = currentScope(state);\n\n  if (scope === 'bodied' && ch === '[')\n    state.scopes.pop();\n\n  if (ch === '[' || ch === '{' || ch === '(')\n    state.scopes.push(ch);\n\n  scope = currentScope(state);\n\n  if (scope === '[' && ch === ']' ||\n      scope === '{' && ch === '}' ||\n      scope === '(' && ch === ')')\n    state.scopes.pop();\n\n  if (ch === ';') {\n    while (scope === 'bodied') {\n      state.scopes.pop();\n      scope = currentScope(state);\n    }\n  }\n\n  // look for ordered rules\n  if (stream.match(/\\d+ *#/, true, false)) {\n    return 'qualifier';\n  }\n\n  // look for numbers\n  if (stream.match(reFloatForm, true, false)) {\n    return 'number';\n  }\n\n  // look for placeholders\n  if (stream.match(rePattern, true, false)) {\n    return 'variableName.special';\n  }\n\n  // match all braces separately\n  if (stream.match(/(?:\\[|\\]|{|}|\\(|\\))/, true, false)) {\n    return 'bracket';\n  }\n\n  // literals looking like function calls\n  if (stream.match(reFunctionLike, true, false)) {\n    stream.backUp(1);\n    return 'variableName.function';\n  }\n\n  // all other identifiers\n  if (stream.match(reIdentifier, true, false)) {\n    return 'variable';\n  }\n\n  // operators; note that operators like @@ or /; are matched separately for each symbol.\n  if (stream.match(/(?:\\\\|\\+|\\-|\\*|\\/|,|;|\\.|:|@|~|=|>|<|&|\\||_|`|'|\\^|\\?|!|%|#)/, true, false)) {\n    return 'operator';\n  }\n\n  // everything else is an error\n  return 'error';\n}\n\nfunction tokenString(stream, state) {\n  var next, end = false, escaped = false;\n  while ((next = stream.next()) != null) {\n    if (next === '\"' && !escaped) {\n      end = true;\n      break;\n    }\n    escaped = !escaped && next === '\\\\';\n  }\n  if (end && !escaped) {\n    state.tokenize = tokenBase;\n  }\n  return 'string';\n};\n\nfunction tokenComment(stream, state) {\n  var prev, next;\n  while((next = stream.next()) != null) {\n    if (prev === '*' && next === '/') {\n      state.tokenize = tokenBase;\n      break;\n    }\n    prev = next;\n  }\n  return 'comment';\n}\n\nfunction currentScope(state) {\n  var scope = null;\n  if (state.scopes.length > 0)\n    scope = state.scopes[state.scopes.length - 1];\n  return scope;\n}\n\nexport const yacas = {\n  name: \"yacas\",\n  startState: function() {\n    return {\n      tokenize: tokenBase,\n      scopes: []\n    };\n  },\n  token: function(stream, state) {\n    if (stream.eatSpace()) return null;\n    return state.tokenize(stream, state);\n  },\n  indent: function(state, textAfter, cx) {\n    if (state.tokenize !== tokenBase && state.tokenize !== null)\n      return null;\n\n    var delta = 0;\n    if (textAfter === ']' || textAfter === '];' ||\n        textAfter === '}' || textAfter === '};' ||\n        textAfter === ');')\n      delta = -1;\n\n    return (state.scopes.length + delta) * cx.unit;\n  },\n\n  languageData: {\n    electricInput: /[{}\\[\\]()\\;]/,\n    commentTokens: {line: \"//\", block: {open: \"/*\", close: \"*/\"}}\n  }\n};\n","var cons = ['true', 'false', 'on', 'off', 'yes', 'no'];\nvar keywordRegex = new RegExp(\"\\\\b((\"+cons.join(\")|(\")+\"))$\", 'i');\n\nexport const yaml = {\n  name: \"yaml\",\n  token: function(stream, state) {\n    var ch = stream.peek();\n    var esc = state.escaped;\n    state.escaped = false;\n    /* comments */\n    if (ch == \"#\" && (stream.pos == 0 || /\\s/.test(stream.string.charAt(stream.pos - 1)))) {\n      stream.skipToEnd();\n      return \"comment\";\n    }\n\n    if (stream.match(/^('([^']|\\\\.)*'?|\"([^\"]|\\\\.)*\"?)/))\n      return \"string\";\n\n    if (state.literal && stream.indentation() > state.keyCol) {\n      stream.skipToEnd(); return \"string\";\n    } else if (state.literal) { state.literal = false; }\n    if (stream.sol()) {\n      state.keyCol = 0;\n      state.pair = false;\n      state.pairStart = false;\n      /* document start */\n      if(stream.match('---')) { return \"def\"; }\n      /* document end */\n      if (stream.match('...')) { return \"def\"; }\n      /* array list item */\n      if (stream.match(/^\\s*-\\s+/)) { return 'meta'; }\n    }\n    /* inline pairs/lists */\n    if (stream.match(/^(\\{|\\}|\\[|\\])/)) {\n      if (ch == '{')\n        state.inlinePairs++;\n      else if (ch == '}')\n        state.inlinePairs--;\n      else if (ch == '[')\n        state.inlineList++;\n      else\n        state.inlineList--;\n      return 'meta';\n    }\n\n    /* list separator */\n    if (state.inlineList > 0 && !esc && ch == ',') {\n      stream.next();\n      return 'meta';\n    }\n    /* pairs separator */\n    if (state.inlinePairs > 0 && !esc && ch == ',') {\n      state.keyCol = 0;\n      state.pair = false;\n      state.pairStart = false;\n      stream.next();\n      return 'meta';\n    }\n\n    /* start of value of a pair */\n    if (state.pairStart) {\n      /* block literals */\n      if (stream.match(/^\\s*(\\||\\>)\\s*/)) { state.literal = true; return 'meta'; };\n      /* references */\n      if (stream.match(/^\\s*(\\&|\\*)[a-z0-9\\._-]+\\b/i)) { return 'variable'; }\n      /* numbers */\n      if (state.inlinePairs == 0 && stream.match(/^\\s*-?[0-9\\.\\,]+\\s?$/)) { return 'number'; }\n      if (state.inlinePairs > 0 && stream.match(/^\\s*-?[0-9\\.\\,]+\\s?(?=(,|}))/)) { return 'number'; }\n      /* keywords */\n      if (stream.match(keywordRegex)) { return 'keyword'; }\n    }\n\n    /* pairs (associative arrays) -> key */\n    if (!state.pair && stream.match(/^\\s*(?:[,\\[\\]{}&*!|>'\"%@`][^\\s'\":]|[^,\\[\\]{}#&*!|>'\"%@`])[^#]*?(?=\\s*:($|\\s))/)) {\n      state.pair = true;\n      state.keyCol = stream.indentation();\n      return \"atom\";\n    }\n    if (state.pair && stream.match(/^:\\s*/)) { state.pairStart = true; return 'meta'; }\n\n    /* nothing found, continue */\n    state.pairStart = false;\n    state.escaped = (ch == '\\\\');\n    stream.next();\n    return null;\n  },\n  startState: function() {\n    return {\n      pair: false,\n      pairStart: false,\n      keyCol: 0,\n      inlinePairs: 0,\n      inlineList: 0,\n      literal: false,\n      escaped: false\n    };\n  },\n  languageData: {\n    commentTokens: {line: \"#\"}\n  }\n};\n","function mkZ80(ez80) {\n  var keywords1, keywords2;\n  if (ez80) {\n    keywords1 = /^(exx?|(ld|cp)([di]r?)?|[lp]ea|pop|push|ad[cd]|cpl|daa|dec|inc|neg|sbc|sub|and|bit|[cs]cf|x?or|res|set|r[lr]c?a?|r[lr]d|s[lr]a|srl|djnz|nop|[de]i|halt|im|in([di]mr?|ir?|irx|2r?)|ot(dmr?|[id]rx|imr?)|out(0?|[di]r?|[di]2r?)|tst(io)?|slp)(\\.([sl]?i)?[sl])?\\b/i;\n    keywords2 = /^(((call|j[pr]|rst|ret[in]?)(\\.([sl]?i)?[sl])?)|(rs|st)mix)\\b/i;\n  } else {\n    keywords1 = /^(exx?|(ld|cp|in)([di]r?)?|pop|push|ad[cd]|cpl|daa|dec|inc|neg|sbc|sub|and|bit|[cs]cf|x?or|res|set|r[lr]c?a?|r[lr]d|s[lr]a|srl|djnz|nop|rst|[de]i|halt|im|ot[di]r|out[di]?)\\b/i;\n    keywords2 = /^(call|j[pr]|ret[in]?|b_?(call|jump))\\b/i;\n  }\n\n  var variables1 = /^(af?|bc?|c|de?|e|hl?|l|i[xy]?|r|sp)\\b/i;\n  var variables2 = /^(n?[zc]|p[oe]?|m)\\b/i;\n  var errors = /^([hl][xy]|i[xy][hl]|slia|sll)\\b/i;\n  var numbers = /^([\\da-f]+h|[0-7]+o|[01]+b|\\d+d?)\\b/i;\n\n  return {\n    name: \"z80\",\n    startState: function() {\n      return {\n        context: 0\n      };\n    },\n    token: function(stream, state) {\n      if (!stream.column())\n        state.context = 0;\n\n      if (stream.eatSpace())\n        return null;\n\n      var w;\n\n      if (stream.eatWhile(/\\w/)) {\n        if (ez80 && stream.eat('.')) {\n          stream.eatWhile(/\\w/);\n        }\n        w = stream.current();\n\n        if (stream.indentation()) {\n          if ((state.context == 1 || state.context == 4) && variables1.test(w)) {\n            state.context = 4;\n            return 'variable';\n          }\n\n          if (state.context == 2 && variables2.test(w)) {\n            state.context = 4;\n            return 'variableName.special';\n          }\n\n          if (keywords1.test(w)) {\n            state.context = 1;\n            return 'keyword';\n          } else if (keywords2.test(w)) {\n            state.context = 2;\n            return 'keyword';\n          } else if (state.context == 4 && numbers.test(w)) {\n            return 'number';\n          }\n\n          if (errors.test(w))\n            return 'error';\n        } else if (stream.match(numbers)) {\n          return 'number';\n        } else {\n          return null;\n        }\n      } else if (stream.eat(';')) {\n        stream.skipToEnd();\n        return 'comment';\n      } else if (stream.eat('\"')) {\n        while (w = stream.next()) {\n          if (w == '\"')\n            break;\n\n          if (w == '\\\\')\n            stream.next();\n        }\n        return 'string';\n      } else if (stream.eat('\\'')) {\n        if (stream.match(/\\\\?.'/))\n          return 'number';\n      } else if (stream.eat('.') || stream.sol() && stream.eat('#')) {\n        state.context = 5;\n\n        if (stream.eatWhile(/\\w/))\n          return 'def';\n      } else if (stream.eat('$')) {\n        if (stream.eatWhile(/[\\da-f]/i))\n          return 'number';\n      } else if (stream.eat('%')) {\n        if (stream.eatWhile(/[01]/))\n          return 'number';\n      } else {\n        stream.next();\n      }\n      return null;\n    }\n  };\n};\n\nexport const z80 = mkZ80(false)\nexport const ez80 = mkZ80(true)\n","import { languages } from '@codemirror/language-data';\nimport { StreamLanguage } from '@codemirror/language';\nimport { markdown as _markdown, markdownLanguage } from '@codemirror/lang-markdown';\nimport { javascript } from '@codemirror/lang-javascript';\nimport { html } from '@codemirror/lang-html';\nimport { css } from '@codemirror/lang-css';\nimport { less as _less } from '@codemirror/lang-less';\nimport { sass as _sass } from '@codemirror/lang-sass';\nimport { json } from '@codemirror/lang-json';\nimport { mermaid as _mermaid } from 'codemirror-lang-mermaid';\nimport { python } from '@codemirror/lang-python';\nimport { xml } from '@codemirror/lang-xml';\nimport { sql, MySQL, PostgreSQL } from '@codemirror/lang-sql';\nimport { java } from '@codemirror/lang-java';\nimport { rust } from '@codemirror/lang-rust';\nimport { cpp } from '@codemirror/lang-cpp';\nimport { lezer } from '@codemirror/lang-lezer';\nimport { php } from '@codemirror/lang-php';\nimport { wast } from '@codemirror/lang-wast';\nimport { vue as _vue } from '@codemirror/lang-vue';\nimport { angular as _angular } from '@codemirror/lang-angular';\nimport { nix as _nix } from '@replit/codemirror-lang-nix';\nimport { svelte as _svelte } from '@replit/codemirror-lang-svelte';\nimport { csharp as _csharp } from '@replit/codemirror-lang-csharp';\nimport { solidity as _solidity } from '@replit/codemirror-lang-solidity';\nimport { apl as _apl } from '@codemirror/legacy-modes/mode/apl';\nimport { asciiArmor as _asciiArmor } from '@codemirror/legacy-modes/mode/asciiarmor';\n// import { asn1 } from '@codemirror/legacy-modes/mode/asn1';\nimport { asterisk as _asterisk } from '@codemirror/legacy-modes/mode/asterisk';\nimport { brainfuck as _brainfuck } from '@codemirror/legacy-modes/mode/brainfuck';\nimport { c as _c, scala as _scala, kotlin as _kotlin, shader as _shader, nesC as _nesC, objectiveC as _objectiveC, objectiveCpp as _objectiveCpp, squirrel as _squirrel, ceylon as _ceylon, dart as _dart } from '@codemirror/legacy-modes/mode/clike';\nimport { clojure as _clojure } from '@nextjournal/lang-clojure';\nimport { cmake as _cmake } from '@codemirror/legacy-modes/mode/cmake';\nimport { cobol as _cobol } from '@codemirror/legacy-modes/mode/cobol';\nimport { coffeeScript } from '@codemirror/legacy-modes/mode/coffeescript';\nimport { commonLisp as _commonLisp } from '@codemirror/legacy-modes/mode/commonlisp';\nimport { crystal as _crystal } from '@codemirror/legacy-modes/mode/crystal';\nimport { cypher as _cypher } from '@codemirror/legacy-modes/mode/cypher';\nimport { d as _d } from '@codemirror/legacy-modes/mode/d';\nimport { diff as _diff } from '@codemirror/legacy-modes/mode/diff';\nimport { dockerFile } from '@codemirror/legacy-modes/mode/dockerfile';\nimport { dtd as _dtd } from '@codemirror/legacy-modes/mode/dtd';\nimport { dylan as _dylan } from '@codemirror/legacy-modes/mode/dylan';\nimport { ebnf as _ebnf } from '@codemirror/legacy-modes/mode/ebnf';\nimport { ecl as _ecl } from '@codemirror/legacy-modes/mode/ecl';\nimport { eiffel as _eiffel } from '@codemirror/legacy-modes/mode/eiffel';\nimport { elm as _elm } from '@codemirror/legacy-modes/mode/elm';\nimport { erlang as _erlang } from '@codemirror/legacy-modes/mode/erlang';\nimport { factor as _factor } from '@codemirror/legacy-modes/mode/factor';\nimport { fcl as _fcl } from '@codemirror/legacy-modes/mode/fcl';\nimport { forth as _forth } from '@codemirror/legacy-modes/mode/forth';\nimport { fortran as _fortran } from '@codemirror/legacy-modes/mode/fortran';\nimport { gas as _gas } from '@codemirror/legacy-modes/mode/gas';\nimport { gherkin as _gherkin } from '@codemirror/legacy-modes/mode/gherkin';\nimport { go as _go } from '@codemirror/legacy-modes/mode/go';\nimport { groovy as _groovy } from '@codemirror/legacy-modes/mode/groovy';\nimport { haskell as _haskell } from '@codemirror/legacy-modes/mode/haskell';\nimport { haxe as _haxe } from '@codemirror/legacy-modes/mode/haxe';\nimport { http as _http } from '@codemirror/legacy-modes/mode/http';\nimport { idl as _idl } from '@codemirror/legacy-modes/mode/idl';\nimport { jinja2 as _jinja } from '@codemirror/legacy-modes/mode/jinja2';\nimport { julia as _julia } from '@codemirror/legacy-modes/mode/julia';\nimport { liveScript } from '@codemirror/legacy-modes/mode/livescript';\nimport { lua as _lua } from '@codemirror/legacy-modes/mode/lua';\nimport { mathematica as _mathematica } from '@codemirror/legacy-modes/mode/mathematica';\nimport { mbox as _mbox } from '@codemirror/legacy-modes/mode/mbox';\nimport { mirc as _mirc } from '@codemirror/legacy-modes/mode/mirc';\n// import { mllike } from '@codemirror/legacy-modes/mode/mllike';\nimport { modelica as _modelica } from '@codemirror/legacy-modes/mode/modelica';\nimport { mscgen as _mscgen } from '@codemirror/legacy-modes/mode/mscgen';\nimport { mumps as _mumps } from '@codemirror/legacy-modes/mode/mumps';\nimport { nginx as _nginx } from '@codemirror/legacy-modes/mode/nginx';\nimport { nsis as _nsis } from '@codemirror/legacy-modes/mode/nsis';\nimport { ntriples as _ntriples } from '@codemirror/legacy-modes/mode/ntriples';\nimport { octave as _octave } from '@codemirror/legacy-modes/mode/octave';\nimport { oz as _oz } from '@codemirror/legacy-modes/mode/oz';\nimport { pascal as _pascal } from '@codemirror/legacy-modes/mode/pascal';\nimport { perl as _perl } from '@codemirror/legacy-modes/mode/perl';\nimport { pig as _pig } from '@codemirror/legacy-modes/mode/pig';\nimport { powerShell } from '@codemirror/legacy-modes/mode/powershell';\nimport { properties as _properties } from '@codemirror/legacy-modes/mode/properties';\nimport { protobuf as _protobuf } from '@codemirror/legacy-modes/mode/protobuf';\nimport { puppet as _puppet } from '@codemirror/legacy-modes/mode/puppet';\nimport { q as _q } from '@codemirror/legacy-modes/mode/q';\nimport { r as _r } from '@codemirror/legacy-modes/mode/r';\n// import { rpm } from '@codemirror/legacy-modes/mode/rpm';\nimport { ruby as _ruby } from '@codemirror/legacy-modes/mode/ruby';\nimport { sas as _sas } from '@codemirror/legacy-modes/mode/sas';\nimport { scheme as _scheme } from '@codemirror/legacy-modes/mode/scheme';\nimport { shell as _shell } from '@codemirror/legacy-modes/mode/shell';\nimport { sieve as _sieve } from '@codemirror/legacy-modes/mode/sieve';\n// import { mode } from '@codemirror/legacy-modes/mode/simple-mode';\nimport { smalltalk as _smalltalk } from '@codemirror/legacy-modes/mode/smalltalk';\nimport { solr as _solr } from '@codemirror/legacy-modes/mode/solr';\nimport { sparql as _sparql } from '@codemirror/legacy-modes/mode/sparql';\nimport { spreadsheet as _spreadsheet } from '@codemirror/legacy-modes/mode/spreadsheet';\nimport { stex as _stex } from '@codemirror/legacy-modes/mode/stex';\nimport { stylus as _stylus } from '@codemirror/legacy-modes/mode/stylus';\nimport { swift as _swift } from '@codemirror/legacy-modes/mode/swift';\nimport { tcl as _tcl } from '@codemirror/legacy-modes/mode/tcl';\nimport { textile as _textile } from '@codemirror/legacy-modes/mode/textile';\nimport { tiddlyWiki as _tiddlyWiki } from '@codemirror/legacy-modes/mode/tiddlywiki';\nimport { tiki as _tiki } from '@codemirror/legacy-modes/mode/tiki';\nimport { toml as _toml } from '@codemirror/legacy-modes/mode/toml';\nimport { troff as _troff } from '@codemirror/legacy-modes/mode/troff';\n// import { cfg } from '@codemirror/legacy-modes/mode/ttcn-cfg';\nimport { ttcn as _ttcn } from '@codemirror/legacy-modes/mode/ttcn';\nimport { turtle as _turtle } from '@codemirror/legacy-modes/mode/turtle';\nimport { vb as _vb } from '@codemirror/legacy-modes/mode/vb';\nimport { vbScript } from '@codemirror/legacy-modes/mode/vbscript';\nimport { velocity as _velocity } from '@codemirror/legacy-modes/mode/velocity';\nimport { verilog as _verilog } from '@codemirror/legacy-modes/mode/verilog';\nimport { vhdl as _vhdl } from '@codemirror/legacy-modes/mode/vhdl';\nimport { webIDL as _webIDL } from '@codemirror/legacy-modes/mode/webidl';\nimport { xQuery as _xQuery } from '@codemirror/legacy-modes/mode/xquery';\nimport { yacas as _yacas } from '@codemirror/legacy-modes/mode/yacas';\nimport { yaml as _yaml } from '@codemirror/legacy-modes/mode/yaml';\nimport { z80 as _z } from '@codemirror/legacy-modes/mode/z80';\nexport var langs = {\n  apl: () => StreamLanguage.define(_apl),\n  asciiArmor: () => StreamLanguage.define(_asciiArmor),\n  // asn1: () => StreamLanguage.define(asn1),\n  asterisk: () => StreamLanguage.define(_asterisk),\n  // clike: () => StreamLanguage.define(clike),\n  c: () => StreamLanguage.define(_c),\n  csharp: () => _csharp(),\n  scala: () => StreamLanguage.define(_scala),\n  solidity: () => _solidity,\n  kotlin: () => StreamLanguage.define(_kotlin),\n  shader: () => StreamLanguage.define(_shader),\n  nesC: () => StreamLanguage.define(_nesC),\n  objectiveC: () => StreamLanguage.define(_objectiveC),\n  objectiveCpp: () => StreamLanguage.define(_objectiveCpp),\n  squirrel: () => StreamLanguage.define(_squirrel),\n  ceylon: () => StreamLanguage.define(_ceylon),\n  dart: () => StreamLanguage.define(_dart),\n  cmake: () => StreamLanguage.define(_cmake),\n  cobol: () => StreamLanguage.define(_cobol),\n  commonLisp: () => StreamLanguage.define(_commonLisp),\n  crystal: () => StreamLanguage.define(_crystal),\n  cypher: () => StreamLanguage.define(_cypher),\n  d: () => StreamLanguage.define(_d),\n  diff: () => StreamLanguage.define(_diff),\n  dtd: () => StreamLanguage.define(_dtd),\n  dylan: () => StreamLanguage.define(_dylan),\n  ebnf: () => StreamLanguage.define(_ebnf),\n  ecl: () => StreamLanguage.define(_ecl),\n  eiffel: () => StreamLanguage.define(_eiffel),\n  elm: () => StreamLanguage.define(_elm),\n  factor: () => StreamLanguage.define(_factor),\n  fcl: () => StreamLanguage.define(_fcl),\n  forth: () => StreamLanguage.define(_forth),\n  fortran: () => StreamLanguage.define(_fortran),\n  gas: () => StreamLanguage.define(_gas),\n  gherkin: () => StreamLanguage.define(_gherkin),\n  groovy: () => StreamLanguage.define(_groovy),\n  haskell: () => StreamLanguage.define(_haskell),\n  haxe: () => StreamLanguage.define(_haxe),\n  http: () => StreamLanguage.define(_http),\n  idl: () => StreamLanguage.define(_idl),\n  jinja2: () => StreamLanguage.define(_jinja),\n  mathematica: () => StreamLanguage.define(_mathematica),\n  mbox: () => StreamLanguage.define(_mbox),\n  mirc: () => StreamLanguage.define(_mirc),\n  modelica: () => StreamLanguage.define(_modelica),\n  mscgen: () => StreamLanguage.define(_mscgen),\n  mumps: () => StreamLanguage.define(_mumps),\n  nsis: () => StreamLanguage.define(_nsis),\n  ntriples: () => StreamLanguage.define(_ntriples),\n  octave: () => StreamLanguage.define(_octave),\n  oz: () => StreamLanguage.define(_oz),\n  pig: () => StreamLanguage.define(_pig),\n  properties: () => StreamLanguage.define(_properties),\n  protobuf: () => StreamLanguage.define(_protobuf),\n  puppet: () => StreamLanguage.define(_puppet),\n  q: () => StreamLanguage.define(_q),\n  sas: () => StreamLanguage.define(_sas),\n  sass: () => _sass(),\n  mermaid: () => _mermaid(),\n  nix: () => _nix(),\n  svelte: () => _svelte(),\n  sieve: () => StreamLanguage.define(_sieve),\n  smalltalk: () => StreamLanguage.define(_smalltalk),\n  solr: () => StreamLanguage.define(_solr),\n  sparql: () => StreamLanguage.define(_sparql),\n  spreadsheet: () => StreamLanguage.define(_spreadsheet),\n  stex: () => StreamLanguage.define(_stex),\n  textile: () => StreamLanguage.define(_textile),\n  tiddlyWiki: () => StreamLanguage.define(_tiddlyWiki),\n  tiki: () => StreamLanguage.define(_tiki),\n  troff: () => StreamLanguage.define(_troff),\n  ttcn: () => StreamLanguage.define(_ttcn),\n  turtle: () => StreamLanguage.define(_turtle),\n  velocity: () => StreamLanguage.define(_velocity),\n  verilog: () => StreamLanguage.define(_verilog),\n  vhdl: () => StreamLanguage.define(_vhdl),\n  webIDL: () => StreamLanguage.define(_webIDL),\n  xQuery: () => StreamLanguage.define(_xQuery),\n  yacas: () => StreamLanguage.define(_yacas),\n  z80: () => StreamLanguage.define(_z),\n  wast,\n  javascript,\n  jsx: () => javascript({\n    jsx: true\n  }),\n  typescript: () => javascript({\n    typescript: true\n  }),\n  tsx: () => javascript({\n    jsx: true,\n    typescript: true\n  }),\n  vue: () => _vue(),\n  angular: () => _angular(),\n  json,\n  html,\n  css,\n  python,\n  markdown: () => _markdown({\n    base: markdownLanguage,\n    codeLanguages: languages\n  }),\n  xml,\n  sql,\n  mysql: () => sql({\n    dialect: MySQL\n  }),\n  pgsql: () => sql({\n    dialect: PostgreSQL\n  }),\n  java,\n  rust,\n  cpp,\n  // clike: () => StreamLanguage.define(clike),\n  // clike: () => clike({ }),\n  lezer,\n  php,\n  go: () => StreamLanguage.define(_go),\n  shell: () => StreamLanguage.define(_shell),\n  lua: () => StreamLanguage.define(_lua),\n  swift: () => StreamLanguage.define(_swift),\n  tcl: () => StreamLanguage.define(_tcl),\n  yaml: () => StreamLanguage.define(_yaml),\n  vb: () => StreamLanguage.define(_vb),\n  powershell: () => StreamLanguage.define(powerShell),\n  brainfuck: () => StreamLanguage.define(_brainfuck),\n  stylus: () => StreamLanguage.define(_stylus),\n  erlang: () => StreamLanguage.define(_erlang),\n  nginx: () => StreamLanguage.define(_nginx),\n  perl: () => StreamLanguage.define(_perl),\n  ruby: () => StreamLanguage.define(_ruby),\n  pascal: () => StreamLanguage.define(_pascal),\n  livescript: () => StreamLanguage.define(liveScript),\n  less: () => _less(),\n  scheme: () => StreamLanguage.define(_scheme),\n  toml: () => StreamLanguage.define(_toml),\n  vbscript: () => StreamLanguage.define(vbScript),\n  clojure: () => _clojure(),\n  coffeescript: () => StreamLanguage.define(coffeeScript),\n  julia: () => StreamLanguage.define(_julia),\n  dockerfile: () => StreamLanguage.define(dockerFile),\n  r: () => StreamLanguage.define(_r)\n};\n\n/** Language list */\nexport var langNames = Object.keys(langs);\nexport function loadLanguage(name) {\n  return langs[name] ? langs[name]() : null;\n}","import { useContext, useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\nimport DJClientContext from '../../providers/djclient';\nimport { ErrorMessage, Field, Form, Formik } from 'formik';\nimport { FormikSelect } from '../AddEditNodePage/FormikSelect';\nimport AddItemIcon from '../../icons/AddItemIcon';\nimport { displayMessageAfterSubmit } from '../../../utils/form';\nimport LoadingIcon from '../../icons/LoadingIcon';\nimport CodeMirror from '@uiw/react-codemirror';\nimport { langs } from '@uiw/codemirror-extensions-langs';\n\nexport default function AddComplexDimensionLinkPopover({\n  node,\n  dimensions,\n  existingLink = null,\n  isEditMode = false,\n  onSubmit,\n}) {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const [popoverAnchor, setPopoverAnchor] = useState(false);\n  const ref = useRef(null);\n\n  useEffect(() => {\n    const handleClickOutside = event => {\n      if (ref.current && !ref.current.contains(event.target)) {\n        setPopoverAnchor(false);\n      }\n    };\n    document.addEventListener('click', handleClickOutside, true);\n    return () => {\n      document.removeEventListener('click', handleClickOutside, true);\n    };\n  }, [setPopoverAnchor]);\n\n  const joinTypeOptions = [\n    { value: 'left', label: 'LEFT' },\n    { value: 'right', label: 'RIGHT' },\n    { value: 'inner', label: 'INNER' },\n    { value: 'full', label: 'FULL' },\n    { value: 'cross', label: 'CROSS' },\n  ];\n\n  const joinCardinalityOptions = [\n    { value: 'one_to_one', label: 'ONE TO ONE' },\n    { value: 'one_to_many', label: 'ONE TO MANY' },\n    { value: 'many_to_one', label: 'MANY TO ONE' },\n    { value: 'many_to_many', label: 'MANY TO MANY' },\n  ];\n\n  const handleSubmit = async (values, { setSubmitting, setStatus }) => {\n    try {\n      // If editing, remove the old link first\n      if (isEditMode && existingLink) {\n        await djClient.removeComplexDimensionLink(\n          node.name,\n          existingLink.dimension.name,\n          existingLink.role,\n        );\n      }\n\n      // Add the new/updated link\n      const response = await djClient.addComplexDimensionLink(\n        node.name,\n        values.dimensionNode,\n        values.joinOn.trim(),\n        values.joinType || 'left',\n        values.joinCardinality || 'many_to_one',\n        values.role?.trim() || null,\n        values.defaultValue?.trim() || null,\n      );\n\n      if (response.status === 200 || response.status === 201) {\n        setStatus({\n          success: `Complex dimension link ${\n            isEditMode ? 'updated' : 'added'\n          } successfully!`,\n        });\n        setTimeout(() => {\n          setPopoverAnchor(false);\n          window.location.reload();\n        }, 1000);\n      } else {\n        setStatus({\n          failure:\n            response.json?.message ||\n            `Failed to ${isEditMode ? 'update' : 'add'} link`,\n        });\n      }\n    } catch (error) {\n      setStatus({ failure: error.message });\n    } finally {\n      setSubmitting(false);\n    }\n  };\n\n  return (\n    <>\n      {isEditMode ? (\n        <button\n          onClick={() => setPopoverAnchor(!popoverAnchor)}\n          style={{\n            padding: '0.25rem 0.5rem',\n            fontSize: '0.75rem',\n            background: '#007bff',\n            color: 'white',\n            border: 'none',\n            borderRadius: '4px',\n            cursor: 'pointer',\n            marginRight: '0.5rem',\n          }}\n        >\n          Edit\n        </button>\n      ) : (\n        <button\n          className=\"edit_button\"\n          aria-label=\"AddComplexDimensionLinkTogglePopover\"\n          tabIndex=\"0\"\n          onClick={() => setPopoverAnchor(!popoverAnchor)}\n          title=\"Add complex dimension link with custom SQL\"\n          style={{\n            marginLeft: '0.5rem',\n            padding: '0.25rem 0.5rem',\n            fontSize: '0.875rem',\n          }}\n        >\n          <AddItemIcon />\n        </button>\n      )}\n      {popoverAnchor && (\n        <>\n          {/* Backdrop overlay */}\n          <div\n            style={{\n              position: 'fixed',\n              top: 0,\n              left: 0,\n              right: 0,\n              bottom: 0,\n              backgroundColor: 'rgba(0, 0, 0, 0.5)',\n              zIndex: 1000,\n              display: 'flex',\n              alignItems: 'center',\n              justifyContent: 'center',\n              padding: '2rem',\n            }}\n            onClick={() => setPopoverAnchor(false)}\n          >\n            {/* Modal */}\n            <div\n              role=\"dialog\"\n              aria-label=\"AddComplexDimensionLinkPopover\"\n              ref={ref}\n              onClick={e => e.stopPropagation()}\n              style={{\n                backgroundColor: 'white',\n                borderRadius: '8px',\n                boxShadow: '0 4px 20px rgba(0, 0, 0, 0.15)',\n                width: '65%',\n                maxWidth: '100%',\n                maxHeight: '100%',\n                overflow: 'visible',\n                padding: '1.5rem',\n                textTransform: 'none',\n                fontWeight: 'normal',\n                position: 'relative',\n                zIndex: 1000,\n              }}\n            >\n              <div\n                style={{ maxHeight: 'calc(85vh - 4rem)', overflowY: 'auto' }}\n              >\n                <Formik\n                  initialValues={{\n                    dimensionNode: existingLink?.dimension.name || '',\n                    joinType: existingLink?.join_type || 'left',\n                    joinOn: existingLink?.join_sql || '',\n                    joinCardinality:\n                      existingLink?.join_cardinality || 'many_to_one',\n                    role: existingLink?.role || '',\n                    defaultValue: existingLink?.default_value || '',\n                  }}\n                  onSubmit={handleSubmit}\n                  validate={values => {\n                    const errors = {};\n                    if (!values.dimensionNode) {\n                      errors.dimensionNode = 'Required';\n                    }\n                    if (!values.joinOn) {\n                      errors.joinOn = 'Required';\n                    }\n                    return errors;\n                  }}\n                >\n                  {function Render({ isSubmitting, status, values }) {\n                    return (\n                      <Form>\n                        <h3\n                          style={{\n                            margin: '0 0 1rem 0',\n                            fontSize: '1.25rem',\n                            fontWeight: '600',\n                          }}\n                        >\n                          {isEditMode ? 'Edit' : 'Add'} Complex Dimension Link\n                        </h3>\n                        {displayMessageAfterSubmit(status)}\n\n                        <div style={{ marginBottom: '1rem' }}>\n                          <ErrorMessage name=\"dimensionNode\" component=\"span\" />\n                          <label htmlFor=\"dimensionNode\">\n                            Dimension Node *\n                          </label>\n                          {isEditMode ? (\n                            <div\n                              style={{\n                                padding: '0.5rem',\n                                backgroundColor: '#f5f5f5',\n                                borderRadius: '4px',\n                                color: '#666',\n                              }}\n                            >\n                              {existingLink?.dimension.name}\n                              <small\n                                style={{\n                                  display: 'block',\n                                  marginTop: '0.25rem',\n                                  fontSize: '0.75rem',\n                                  color: '#999',\n                                }}\n                              >\n                                To link a different dimension node, remove this\n                                link and create a new one\n                              </small>\n                            </div>\n                          ) : (\n                            <FormikSelect\n                              selectOptions={dimensions}\n                              formikFieldName=\"dimensionNode\"\n                              placeholder=\"Select dimension\"\n                            />\n                          )}\n                        </div>\n\n                        <div\n                          style={{\n                            display: 'flex',\n                            gap: '1rem',\n                            marginBottom: '1rem',\n                          }}\n                        >\n                          <div style={{ flex: 1 }}>\n                            <label htmlFor=\"joinType\">Join Type</label>\n                            <FormikSelect\n                              selectOptions={joinTypeOptions}\n                              formikFieldName=\"joinType\"\n                              placeholder=\"Select join type\"\n                              defaultValue={\n                                values.joinType\n                                  ? joinTypeOptions.find(\n                                      opt => opt.value === values.joinType,\n                                    )\n                                  : null\n                              }\n                            />\n                          </div>\n                          <div style={{ flex: 1 }}>\n                            <label htmlFor=\"joinCardinality\">\n                              Join Cardinality\n                            </label>\n                            <FormikSelect\n                              selectOptions={joinCardinalityOptions}\n                              formikFieldName=\"joinCardinality\"\n                              placeholder=\"Select join cardinality\"\n                              defaultValue={\n                                values.joinCardinality\n                                  ? joinCardinalityOptions.find(\n                                      opt =>\n                                        opt.value === values.joinCardinality,\n                                    )\n                                  : null\n                              }\n                            />\n                          </div>\n                        </div>\n\n                        <div style={{ marginBottom: '1rem' }}>\n                          <ErrorMessage name=\"joinOn\" component=\"span\" />\n                          <label htmlFor=\"joinOn\">Join SQL *</label>\n                          <small\n                            style={{ color: '#6c757d', fontSize: '0.75rem' }}\n                          >\n                            Specify the join condition\n                          </small>\n                          <Field name=\"joinOn\">\n                            {({ field, form }) => (\n                              <div\n                                role=\"button\"\n                                tabIndex={0}\n                                className=\"relative flex bg-[#282a36]\"\n                              >\n                                <CodeMirror\n                                  id=\"joinOn\"\n                                  name=\"joinOn\"\n                                  extensions={[langs.sql()]}\n                                  value={field.value?.trim()}\n                                  placeholder=\"e.g., node_table.dimension_id = dimension_table.id\"\n                                  width=\"100%\"\n                                  height=\"150px\"\n                                  style={{\n                                    fontSize: '14px',\n                                    textAlign: 'left',\n                                  }}\n                                  onChange={value => {\n                                    form.setFieldValue('joinOn', value);\n                                  }}\n                                />\n                              </div>\n                            )}\n                          </Field>\n                        </div>\n\n                        <div style={{ marginBottom: '1rem' }}>\n                          <label htmlFor=\"role\">Role (Optional)</label>\n                          <Field\n                            type=\"text\"\n                            name=\"role\"\n                            id=\"role\"\n                            placeholder=\"e.g., birth_date, registration_date\"\n                            style={{\n                              width: '100%',\n                              padding: '0.5rem',\n                            }}\n                          />\n                          <small\n                            style={{ color: '#6c757d', fontSize: '0.75rem' }}\n                          >\n                            Optional role if linking the same dimension multiple\n                            times\n                          </small>\n                        </div>\n\n                        <div style={{ marginBottom: '1rem' }}>\n                          <label htmlFor=\"defaultValue\">\n                            Default Value (Optional)\n                          </label>\n                          <Field\n                            type=\"text\"\n                            name=\"defaultValue\"\n                            id=\"defaultValue\"\n                            placeholder=\"e.g., Unknown, N/A\"\n                            style={{\n                              width: '100%',\n                              padding: '0.5rem',\n                            }}\n                          />\n                          <small\n                            style={{ color: '#6c757d', fontSize: '0.75rem' }}\n                          >\n                            Value to use when LEFT or RIGHT JOIN produces NULL\n                            (wraps dimension column in COALESCE)\n                          </small>\n                        </div>\n\n                        <button\n                          className=\"add_node\"\n                          type=\"submit\"\n                          aria-label=\"SaveComplexDimensionLink\"\n                          disabled={isSubmitting}\n                          style={{ marginTop: '1rem' }}\n                        >\n                          {isSubmitting ? (\n                            <LoadingIcon />\n                          ) : isEditMode ? (\n                            'Save Changes'\n                          ) : (\n                            'Add Link'\n                          )}\n                        </button>\n                      </Form>\n                    );\n                  }}\n                </Formik>\n              </div>\n            </div>\n          </div>\n        </>\n      )}\n    </>\n  );\n}\n","import { useContext, useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\nimport DJClientContext from '../../providers/djclient';\nimport { Field, Form, Formik } from 'formik';\nimport EditIcon from '../../icons/EditIcon';\nimport { displayMessageAfterSubmit } from '../../../utils/form';\n\nexport default function PartitionColumnPopover({ column, node, onSubmit }) {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const [popoverAnchor, setPopoverAnchor] = useState(false);\n  const ref = useRef(null);\n\n  useEffect(() => {\n    const handleClickOutside = event => {\n      if (ref.current && !ref.current.contains(event.target)) {\n        setPopoverAnchor(false);\n      }\n    };\n    document.addEventListener('click', handleClickOutside, true);\n    return () => {\n      document.removeEventListener('click', handleClickOutside, true);\n    };\n  }, [setPopoverAnchor]);\n\n  const savePartition = async (\n    { node, column, partition_type, format, granularity },\n    { setSubmitting, setStatus },\n  ) => {\n    setSubmitting(false);\n    const response = await djClient.setPartition(\n      node,\n      column,\n      partition_type,\n      format,\n      granularity,\n    );\n    if (response.status === 200 || response.status === 201) {\n      setStatus({ success: 'Saved!' });\n    } else {\n      setStatus({\n        failure: `${response.json.message}`,\n      });\n    }\n    onSubmit();\n  };\n\n  const removePartition = async setStatus => {\n    const response = await djClient.removePartition(node.name, column.name);\n    if (response.status === 200 || response.status === 201) {\n      setStatus({ success: 'Partition removed' });\n      onSubmit();\n      setPopoverAnchor(false);\n    } else {\n      setStatus({ failure: `${response.json.message}` });\n    }\n  };\n\n  return (\n    <>\n      <button\n        className=\"edit_button\"\n        aria-label=\"PartitionColumn\"\n        tabIndex=\"0\"\n        onClick={() => {\n          setPopoverAnchor(!popoverAnchor);\n        }}\n      >\n        <EditIcon />\n      </button>\n      <div\n        className=\"popover partition-popover\"\n        role=\"dialog\"\n        aria-label=\"client-code\"\n        style={{ display: popoverAnchor === false ? 'none' : 'block' }}\n        ref={ref}\n      >\n        <Formik\n          initialValues={{\n            column: column.name,\n            node: node.name,\n            partition_type: column.partition?.type_ ?? '',\n            format: column.partition?.format ?? 'yyyyMMdd',\n            granularity: column.partition?.granularity ?? 'day',\n          }}\n          onSubmit={savePartition}\n        >\n          {function Render({ values, isSubmitting, status, setStatus }) {\n            return (\n              <Form>\n                <div className=\"popover-header\">\n                  <div className=\"popover-title\">Partition column</div>\n                  <div className=\"popover-subtitle\">\n                    {popoverAnchor ? column.name : null}\n                  </div>\n                </div>\n                {displayMessageAfterSubmit(status)}\n                <div className=\"field-group\" data-testid=\"edit-partition\">\n                  <label htmlFor=\"partitionType\">Partition Type</label>\n                  <Field\n                    as=\"select\"\n                    name=\"partition_type\"\n                    id=\"partitionType\"\n                    placeholder=\"Partition Type\"\n                  >\n                    <option value=\"\"></option>\n                    <option value=\"temporal\">Temporal</option>\n                    <option value=\"categorical\">Categorical</option>\n                  </Field>\n                </div>\n                <input\n                  hidden={true}\n                  name=\"column\"\n                  value={column.name}\n                  readOnly={true}\n                />\n                <input\n                  hidden={true}\n                  name=\"node\"\n                  value={node.name}\n                  readOnly={true}\n                />\n                {values.partition_type === 'temporal' ? (\n                  <>\n                    <div className=\"field-group\">\n                      <label htmlFor=\"partitionFormat\">Partition Format</label>\n                      <Field\n                        type=\"text\"\n                        name=\"format\"\n                        id=\"partitionFormat\"\n                        placeholder=\"e.g. yyyyMMdd\"\n                      />\n                    </div>\n                    <div className=\"field-group\">\n                      <label htmlFor=\"partitionGranularity\">\n                        Partition Granularity\n                      </label>\n                      <Field\n                        as=\"select\"\n                        name=\"granularity\"\n                        id=\"partitionGranularity\"\n                        placeholder=\"Granularity\"\n                      >\n                        <option value=\"day\">Day</option>\n                        <option value=\"hour\">Hour</option>\n                      </Field>\n                    </div>\n                  </>\n                ) : null}\n                <div\n                  className=\"button-row\"\n                  style={{\n                    justifyContent: column.partition\n                      ? 'space-between'\n                      : 'flex-end',\n                  }}\n                >\n                  {column.partition ? (\n                    <button\n                      className=\"remove-link\"\n                      type=\"button\"\n                      aria-label=\"RemovePartition\"\n                      onClick={() => removePartition(setStatus)}\n                    >\n                      Remove partition\n                    </button>\n                  ) : null}\n                  <button\n                    className=\"add_node\"\n                    type=\"submit\"\n                    aria-label=\"SaveEditColumn\"\n                    aria-hidden=\"false\"\n                  >\n                    Save\n                  </button>\n                </div>\n              </Form>\n            );\n          }}\n        </Formik>\n      </div>\n    </>\n  );\n}\n","import { useEffect, useState } from 'react';\nimport * as React from 'react';\nimport EditColumnPopover from './EditColumnPopover';\nimport EditColumnDescriptionPopover from './EditColumnDescriptionPopover';\nimport ManageDimensionLinksDialog from './ManageDimensionLinksDialog';\nimport AddComplexDimensionLinkPopover from './AddComplexDimensionLinkPopover';\nimport { labelize } from '../../../utils/form';\nimport PartitionColumnPopover from './PartitionColumnPopover';\nimport { Light as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport foundation from 'react-syntax-highlighter/dist/esm/styles/hljs/foundation';\n\nexport default function NodeColumnTab({ node, djClient, readOnly = false }) {\n  const [attributes, setAttributes] = useState([]);\n  const [dimensions, setDimensions] = useState([]);\n  const [columns, setColumns] = useState([]);\n  const [links, setLinks] = useState([]);\n\n  useEffect(() => {\n    const fetchData = async () => {\n      if (node) {\n        setColumns(await djClient.columns(node));\n      }\n    };\n    fetchData().catch(console.error);\n  }, [djClient, node]);\n\n  useEffect(() => {\n    const fetchData = async () => {\n      const attributes = await djClient.attributes();\n      const options = attributes.map(attr => {\n        return { value: attr.name, label: labelize(attr.name) };\n      });\n      setAttributes(options);\n    };\n    fetchData().catch(console.error);\n  }, [djClient]);\n\n  useEffect(() => {\n    const fetchData = async () => {\n      const dimensions = await djClient.dimensions();\n      const options = dimensions.map(dim => {\n        return {\n          value: dim.name,\n          label: `${dim.name} (${dim.indegree} links)`,\n        };\n      });\n      setDimensions(options);\n    };\n    fetchData().catch(console.error);\n  }, [djClient]);\n\n  const showColumnAttributes = col => {\n    return col.attributes.map((attr, idx) => (\n      <span\n        className=\"node_type__dimension badge node_type\"\n        key={`col-attr-${col.name}-${idx}`}\n      >\n        {attr.attribute_type.name.replace(/_/, ' ')}\n      </span>\n    ));\n  };\n\n  const showColumnPartition = col => {\n    if (!col.partition) return '';\n    const isTemporal = col.partition.type_ === 'temporal';\n    const typeLabel =\n      col.partition.type_.charAt(0).toUpperCase() +\n      col.partition.type_.slice(1);\n    const details = [];\n    if (isTemporal) {\n      if (col.partition.granularity) details.push(col.partition.granularity);\n      if (col.partition.format) details.push(col.partition.format);\n    }\n    const icon = isTemporal ? (\n      <svg\n        className=\"partition-cell__icon\"\n        viewBox=\"0 0 24 24\"\n        width=\"14\"\n        height=\"14\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        aria-hidden=\"true\"\n      >\n        <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n        <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n        <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n        <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n      </svg>\n    ) : (\n      <svg\n        className=\"partition-cell__icon\"\n        viewBox=\"0 0 24 24\"\n        width=\"14\"\n        height=\"14\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        aria-hidden=\"true\"\n      >\n        <line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\" />\n        <line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\" />\n        <line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\" />\n        <line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\" />\n        <line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\" />\n        <line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\" />\n      </svg>\n    );\n    return (\n      <div className=\"partition-cell\">\n        {icon}\n        <span className=\"partition-cell__type\">{typeLabel}</span>\n        {details.length > 0 ? (\n          <>\n            <span className=\"partition-cell__dash\">—</span>\n            <span className=\"partition-cell__details\">\n              {details.map((d, i) => (\n                <React.Fragment key={i}>\n                  {i > 0 ? ', ' : ''}\n                  <code>{d}</code>\n                </React.Fragment>\n              ))}\n            </span>\n          </>\n        ) : null}\n      </div>\n    );\n  };\n\n  const columnList = columns => {\n    return columns?.map(col => {\n      // FK Links: Only show links that specifically reference THIS column's foreign keys\n      // Filter out complex dimension links that may join on multiple columns\n      const fkLinksForColumn = (\n        links.length > 0 ? links : node?.dimension_links\n      )\n        .filter(link => {\n          // Check if this link has a foreign key entry for this specific column\n          const foreignKeys = Object.keys(link.foreign_keys || {});\n          const columnKey = `${node.name}.${col.name}`;\n          return foreignKeys.includes(columnKey);\n        })\n        .map(link => link.dimension.name);\n\n      // Check if this column has a reference dimension link\n      const referenceLink = col.dimension\n        ? {\n            dimension: col.dimension.name,\n            dimension_column: col.dimension_column,\n            role: col.dimension.role,\n          }\n        : null;\n      return (\n        <tr key={col.name} className=\"column-row\">\n          <td\n            className=\"text-start\"\n            role=\"columnheader\"\n            aria-label=\"ColumnName\"\n            aria-hidden=\"false\"\n          >\n            {col.name}\n          </td>\n          <td>\n            <span\n              className=\"\"\n              role=\"columnheader\"\n              aria-label=\"ColumnDisplayName\"\n              aria-hidden=\"false\"\n            >\n              {col.display_name}\n            </span>\n          </td>\n          <td>\n            <span\n              className=\"\"\n              role=\"columnheader\"\n              aria-label=\"ColumnDescription\"\n              aria-hidden=\"false\"\n            >\n              {col.description || ''}\n              {!readOnly && (\n                <EditColumnDescriptionPopover\n                  column={col}\n                  node={node}\n                  onSubmit={async () => {\n                    const res = await djClient.node(node.name);\n                    setColumns(res.columns);\n                  }}\n                />\n              )}\n            </span>\n          </td>\n          <td>\n            <span\n              className={`node_type__${\n                node.type === 'cube' ? col.type : 'transform'\n              } badge node_type`}\n              role=\"columnheader\"\n              aria-label=\"ColumnType\"\n              aria-hidden=\"false\"\n            >\n              {col.type}\n            </span>\n          </td>\n          {node.type !== 'cube' ? (\n            <td className=\"dimension-links-cell\">\n              <div\n                style={{\n                  display: 'flex',\n                  alignItems: 'center',\n                  flexWrap: 'wrap',\n                  gap: '0.25rem',\n                  position: 'relative',\n                }}\n              >\n                {fkLinksForColumn.length > 0 && (\n                  <div\n                    style={{\n                      display: 'flex',\n                      flexWrap: 'wrap',\n                      gap: '0.25rem',\n                    }}\n                  >\n                    {fkLinksForColumn.map(dimName => (\n                      <span\n                        className=\"rounded-pill badge bg-secondary-soft dimension-badge\"\n                        style={{ fontSize: '14px', position: 'relative' }}\n                        key={dimName}\n                        title=\"FK Link (via primary key)\"\n                      >\n                        <a href={`/nodes/${dimName}`}>{dimName}</a>\n                      </span>\n                    ))}\n                  </div>\n                )}\n                {referenceLink && (\n                  <span\n                    className=\"rounded-pill badge bg-info dimension-badge\"\n                    style={{ fontSize: '14px', position: 'relative' }}\n                    title={`Reference Link: ${referenceLink.dimension}.${referenceLink.dimension_column}`}\n                  >\n                    <a href={`/nodes/${referenceLink.dimension}`}>\n                      {referenceLink.dimension}.{referenceLink.dimension_column}\n                    </a>\n                  </span>\n                )}\n                {!readOnly && (\n                  <ManageDimensionLinksDialog\n                    column={col}\n                    node={node}\n                    dimensions={dimensions}\n                    fkLinks={fkLinksForColumn}\n                    referenceLink={referenceLink}\n                    onSubmit={async () => {\n                      const res = await djClient.node(node.name);\n                      setLinks(res.dimension_links);\n                      setColumns(res.columns);\n                    }}\n                  />\n                )}\n              </div>\n            </td>\n          ) : (\n            ''\n          )}\n          {node.type !== 'cube' ? (\n            <td>\n              {showColumnAttributes(col)}\n              {!readOnly && (\n                <EditColumnPopover\n                  column={col}\n                  node={node}\n                  options={attributes}\n                  onSubmit={async () => {\n                    const res = await djClient.node(node.name);\n                    setColumns(res.columns);\n                  }}\n                />\n              )}\n            </td>\n          ) : (\n            ''\n          )}\n          <td>\n            {showColumnPartition(col)}\n            {!readOnly && (\n              <PartitionColumnPopover\n                column={col}\n                node={node}\n                onSubmit={async () => {\n                  const res = await djClient.node(node.name);\n                  setColumns(res.columns);\n                }}\n              />\n            )}\n          </td>\n        </tr>\n      );\n    });\n  };\n\n  return (\n    <>\n      <style>\n        {`\n          .dimension-link-edit:hover {\n            opacity: 1 !important;\n            color: #007bff !important;\n          }\n          .dimension-badge a {\n            max-width: 300px;\n            display: inline-block;\n            overflow: hidden;\n            text-overflow: ellipsis;\n            white-space: nowrap;\n            vertical-align: bottom;\n            direction: rtl;\n            text-align: left;\n          }\n        `}\n      </style>\n      <div className=\"table-responsive\">\n        <table className=\"card-inner-table table\">\n          <thead className=\"fs-7 fw-bold text-gray-400 border-bottom-0\">\n            <tr>\n              <th className=\"text-start\">Column</th>\n              <th>Display Name</th>\n              <th>Description</th>\n              <th>Type</th>\n              {node?.type !== 'cube' ? (\n                <>\n                  <th>Dimension Links</th>\n                  <th>Attributes</th>\n                </>\n              ) : (\n                ''\n              )}\n              <th>Partition</th>\n            </tr>\n          </thead>\n          <tbody>{columnList(columns)}</tbody>\n        </table>\n      </div>\n      <div>\n        <div\n          style={{\n            display: 'flex',\n            alignItems: 'center',\n            justifyContent: 'space-between',\n            marginBottom: '1rem',\n          }}\n        >\n          <h3 style={{ margin: 0 }}>\n            Complex Dimension Links (Custom Join SQL)\n          </h3>\n          <AddComplexDimensionLinkPopover\n            node={node}\n            dimensions={dimensions}\n            onSubmit={async () => {\n              const res = await djClient.node(node.name);\n              setLinks(res.dimension_links);\n            }}\n          />\n        </div>\n        <table className=\"card-inner-table table\">\n          <thead className=\"fs-7 fw-bold text-gray-400 border-bottom-0\">\n            <tr>\n              <th className=\"text-start\">Dimension Node</th>\n              <th>Join Type</th>\n              <th>Join SQL</th>\n              <th>Join Cardinality</th>\n              <th>Role</th>\n              <th>Actions</th>\n            </tr>\n          </thead>\n          <tbody>\n            {node?.dimension_links && node.dimension_links.length > 0 ? (\n              node.dimension_links.map((link, idx) => {\n                return (\n                  <tr key={`${link.dimension.name}-${link.role || idx}`}>\n                    <td>\n                      <a href={'/nodes/' + link.dimension.name}>\n                        {link.dimension.name}\n                      </a>\n                    </td>\n                    <td>{link.join_type.toUpperCase()}</td>\n                    <td style={{ maxWidth: '400px' }}>\n                      <SyntaxHighlighter\n                        language=\"sql\"\n                        style={foundation}\n                        wrapLongLines={true}\n                      >\n                        {link.join_sql?.trim()}\n                      </SyntaxHighlighter>\n                    </td>\n                    <td>\n                      {link.join_cardinality\n                        ? link.join_cardinality.replace(/_/g, ' ').toUpperCase()\n                        : 'N/A'}\n                    </td>\n                    <td>{link.role || '-'}</td>\n                    <td>\n                      <div style={{ display: 'flex', gap: '0.5rem' }}>\n                        <AddComplexDimensionLinkPopover\n                          node={node}\n                          dimensions={dimensions}\n                          existingLink={link}\n                          isEditMode={true}\n                          onSubmit={async () => {\n                            const res = await djClient.node(node.name);\n                            setLinks(res.dimension_links);\n                          }}\n                        />\n                        <button\n                          onClick={async () => {\n                            if (\n                              window.confirm(\n                                `Remove link to ${link.dimension.name}?`,\n                              )\n                            ) {\n                              try {\n                                const response =\n                                  await djClient.removeComplexDimensionLink(\n                                    node.name,\n                                    link.dimension.name,\n                                    link.role || null,\n                                  );\n                                if (\n                                  response.status === 200 ||\n                                  response.status === 201 ||\n                                  response.status === 204\n                                ) {\n                                  alert(\n                                    'Complex dimension link removed successfully!',\n                                  );\n                                  window.location.reload();\n                                } else {\n                                  console.error('Remove link error:', response);\n                                  alert(\n                                    response.json?.message ||\n                                      `Failed to remove link (status: ${response.status})`,\n                                  );\n                                }\n                              } catch (error) {\n                                console.error('Remove link exception:', error);\n                                alert(`Error removing link: ${error.message}`);\n                              }\n                            }\n                          }}\n                          style={{\n                            padding: '0.25rem 0.5rem',\n                            fontSize: '0.75rem',\n                            background: '#dc3545',\n                            color: 'white',\n                            border: 'none',\n                            borderRadius: '4px',\n                            cursor: 'pointer',\n                          }}\n                        >\n                          Remove\n                        </button>\n                      </div>\n                    </td>\n                  </tr>\n                );\n              })\n            ) : (\n              <tr>\n                <td\n                  colSpan=\"6\"\n                  style={{\n                    textAlign: 'center',\n                    padding: '2rem',\n                    color: '#6c757d',\n                  }}\n                >\n                  No complex dimension links. Click the + button above to add\n                  one.\n                </td>\n              </tr>\n            )}\n          </tbody>\n        </table>\n      </div>\n    </>\n  );\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction isUnsafeProperty(key) {\n    return key === '__proto__';\n}\n\nexports.isUnsafeProperty = isUnsafeProperty;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction isDeepKey(key) {\n    switch (typeof key) {\n        case 'number':\n        case 'symbol': {\n            return false;\n        }\n        case 'string': {\n            return key.includes('.') || key.includes('[') || key.includes(']');\n        }\n    }\n}\n\nexports.isDeepKey = isDeepKey;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction toKey(value) {\n    if (typeof value === 'string' || typeof value === 'symbol') {\n        return value;\n    }\n    if (Object.is(value?.valueOf?.(), -0)) {\n        return '-0';\n    }\n    return String(value);\n}\n\nexports.toKey = toKey;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction toString(value) {\n    if (value == null) {\n        return '';\n    }\n    if (typeof value === 'string') {\n        return value;\n    }\n    if (Array.isArray(value)) {\n        return value.map(toString).join(',');\n    }\n    const result = String(value);\n    if (result === '0' && Object.is(Number(value), -0)) {\n        return '-0';\n    }\n    return result;\n}\n\nexports.toString = toString;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst toString = require('./toString.js');\nconst toKey = require('../_internal/toKey.js');\n\nfunction toPath(deepKey) {\n    if (Array.isArray(deepKey)) {\n        return deepKey.map(toKey.toKey);\n    }\n    if (typeof deepKey === 'symbol') {\n        return [deepKey];\n    }\n    deepKey = toString.toString(deepKey);\n    const result = [];\n    const length = deepKey.length;\n    if (length === 0) {\n        return result;\n    }\n    let index = 0;\n    let key = '';\n    let quoteChar = '';\n    let bracket = false;\n    if (deepKey.charCodeAt(0) === 46) {\n        result.push('');\n        index++;\n    }\n    while (index < length) {\n        const char = deepKey[index];\n        if (quoteChar) {\n            if (char === '\\\\' && index + 1 < length) {\n                index++;\n                key += deepKey[index];\n            }\n            else if (char === quoteChar) {\n                quoteChar = '';\n            }\n            else {\n                key += char;\n            }\n        }\n        else if (bracket) {\n            if (char === '\"' || char === \"'\") {\n                quoteChar = char;\n            }\n            else if (char === ']') {\n                bracket = false;\n                result.push(key);\n                key = '';\n            }\n            else {\n                key += char;\n            }\n        }\n        else {\n            if (char === '[') {\n                bracket = true;\n                if (key) {\n                    result.push(key);\n                    key = '';\n                }\n            }\n            else if (char === '.') {\n                if (key) {\n                    result.push(key);\n                    key = '';\n                }\n            }\n            else {\n                key += char;\n            }\n        }\n        index++;\n    }\n    if (key) {\n        result.push(key);\n    }\n    return result;\n}\n\nexports.toPath = toPath;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isUnsafeProperty = require('../../_internal/isUnsafeProperty.js');\nconst isDeepKey = require('../_internal/isDeepKey.js');\nconst toKey = require('../_internal/toKey.js');\nconst toPath = require('../util/toPath.js');\n\nfunction get(object, path, defaultValue) {\n    if (object == null) {\n        return defaultValue;\n    }\n    switch (typeof path) {\n        case 'string': {\n            if (isUnsafeProperty.isUnsafeProperty(path)) {\n                return defaultValue;\n            }\n            const result = object[path];\n            if (result === undefined) {\n                if (isDeepKey.isDeepKey(path)) {\n                    return get(object, toPath.toPath(path), defaultValue);\n                }\n                else {\n                    return defaultValue;\n                }\n            }\n            return result;\n        }\n        case 'number':\n        case 'symbol': {\n            if (typeof path === 'number') {\n                path = toKey.toKey(path);\n            }\n            const result = object[path];\n            if (result === undefined) {\n                return defaultValue;\n            }\n            return result;\n        }\n        default: {\n            if (Array.isArray(path)) {\n                return getWithPath(object, path, defaultValue);\n            }\n            if (Object.is(path?.valueOf(), -0)) {\n                path = '-0';\n            }\n            else {\n                path = String(path);\n            }\n            if (isUnsafeProperty.isUnsafeProperty(path)) {\n                return defaultValue;\n            }\n            const result = object[path];\n            if (result === undefined) {\n                return defaultValue;\n            }\n            return result;\n        }\n    }\n}\nfunction getWithPath(object, path, defaultValue) {\n    if (path.length === 0) {\n        return defaultValue;\n    }\n    let current = object;\n    for (let index = 0; index < path.length; index++) {\n        if (current == null) {\n            return defaultValue;\n        }\n        if (isUnsafeProperty.isUnsafeProperty(path[index])) {\n            return defaultValue;\n        }\n        current = current[path[index]];\n    }\n    if (current === undefined) {\n        return defaultValue;\n    }\n    return current;\n}\n\nexports.get = get;\n","module.exports = require('../dist/compat/object/get.js').get;\n","/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","import get from 'es-toolkit/compat/get';\nexport var mathSign = value => {\n  if (value === 0) {\n    return 0;\n  }\n  if (value > 0) {\n    return 1;\n  }\n  return -1;\n};\nexport var isNan = value => {\n  // eslint-disable-next-line eqeqeq\n  return typeof value == 'number' && value != +value;\n};\nexport var isPercent = value => typeof value === 'string' && value.indexOf('%') === value.length - 1;\nexport var isNumber = value => (typeof value === 'number' || value instanceof Number) && !isNan(value);\nexport var isNumOrStr = value => isNumber(value) || typeof value === 'string';\nvar idCounter = 0;\nexport var uniqueId = prefix => {\n  var id = ++idCounter;\n  return \"\".concat(prefix || '').concat(id);\n};\n\n/**\n * Get percent value of a total value\n * @param {number|string} percent A percent\n * @param {number} totalValue     Total value\n * @param {number} defaultValue   The value returned when percent is undefined or invalid\n * @param {boolean} validate      If set to be true, the result will be validated\n * @return {number} value\n */\nexport var getPercentValue = function getPercentValue(percent, totalValue) {\n  var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n  var validate = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n  if (!isNumber(percent) && typeof percent !== 'string') {\n    return defaultValue;\n  }\n  var value;\n  if (isPercent(percent)) {\n    if (totalValue == null) {\n      return defaultValue;\n    }\n    var index = percent.indexOf('%');\n    value = totalValue * parseFloat(percent.slice(0, index)) / 100;\n  } else {\n    value = +percent;\n  }\n  if (isNan(value)) {\n    value = defaultValue;\n  }\n  if (validate && totalValue != null && value > totalValue) {\n    value = totalValue;\n  }\n  return value;\n};\nexport var hasDuplicate = ary => {\n  if (!Array.isArray(ary)) {\n    return false;\n  }\n  var len = ary.length;\n  var cache = {};\n  for (var i = 0; i < len; i++) {\n    if (!cache[ary[i]]) {\n      cache[ary[i]] = true;\n    } else {\n      return true;\n    }\n  }\n  return false;\n};\n\n/**\n * @deprecated instead use {@link interpolate}\n *  this function returns a function that is called immediately in all use-cases.\n *  Instead, use interpolate which returns a number and skips the anonymous function step.\n *  @param numberA The first number\n *  @param numberB The second number\n *  @return A function that returns the interpolated number\n */\nexport var interpolateNumber = (numberA, numberB) => {\n  if (isNumber(numberA) && isNumber(numberB)) {\n    return t => numberA + t * (numberB - numberA);\n  }\n  return () => numberB;\n};\nexport function interpolate(start, end, t) {\n  if (isNumber(start) && isNumber(end)) {\n    return start + t * (end - start);\n  }\n  return end;\n}\nexport function findEntryInArray(ary, specifiedKey, specifiedValue) {\n  if (!ary || !ary.length) {\n    return undefined;\n  }\n  return ary.find(entry => entry && (typeof specifiedKey === 'function' ? specifiedKey(entry) : get(entry, specifiedKey)) === specifiedValue);\n}\n\n/**\n * The least square linear regression\n * @param {Array} data The array of points\n * @returns {Object} The domain of x, and the parameter of linear function\n */\nexport var getLinearRegression = data => {\n  if (!data || !data.length) {\n    return null;\n  }\n  var len = data.length;\n  var xsum = 0;\n  var ysum = 0;\n  var xysum = 0;\n  var xxsum = 0;\n  var xmin = Infinity;\n  var xmax = -Infinity;\n  var xcurrent = 0;\n  var ycurrent = 0;\n  for (var i = 0; i < len; i++) {\n    xcurrent = data[i].cx || 0;\n    ycurrent = data[i].cy || 0;\n    xsum += xcurrent;\n    ysum += ycurrent;\n    xysum += xcurrent * ycurrent;\n    xxsum += xcurrent * xcurrent;\n    xmin = Math.min(xmin, xcurrent);\n    xmax = Math.max(xmax, xcurrent);\n  }\n  var a = len * xxsum !== xsum * xsum ? (len * xysum - xsum * ysum) / (len * xxsum - xsum * xsum) : 0;\n  return {\n    xmin,\n    xmax,\n    a,\n    b: (ysum - a * xsum) / len\n  };\n};\n/**\n * Checks if the value is null or undefined\n * @param value The value to check\n * @returns true if the value is null or undefined\n */\nexport var isNullish = value => {\n  return value === null || typeof value === 'undefined';\n};\n\n/**\n *Uppercase the first letter of a string\n * @param {string} value The string to uppercase\n * @returns {string} The uppercased string\n */\nexport var upperFirst = value => {\n  if (isNullish(value)) {\n    return value;\n  }\n  return \"\".concat(value.charAt(0).toUpperCase()).concat(value.slice(1));\n};","import { isValidElement } from 'react';\n\n/**\n * Determines how values are stacked:\n *\n * - `none` is the default, it adds values on top of each other. No smarts. Negative values will overlap.\n * - `expand` make it so that the values always add up to 1 - so the chart will look like a rectangle.\n * - `wiggle` and `silhouette` tries to keep the chart centered.\n * - `sign` stacks positive values above zero and negative values below zero. Similar to `none` but handles negatives.\n * - `positive` ignores all negative values, and then behaves like \\`none\\`.\n *\n * Also see https://d3js.org/d3-shape/stack#stack-offsets\n * (note that the `diverging` offset in d3 is named `sign` in recharts)\n */\n\n/**\n * @deprecated use either `CartesianLayout` or `PolarLayout` instead.\n * Mixing both charts families leads to ambiguity in the type system.\n * These two layouts share very few properties, so it is best to keep them separate.\n */\n\n//\n// Event Handler Types -- Copied from @types/react/index.d.ts and adapted for Props.\n//\n\nvar SVGContainerPropKeys = ['viewBox', 'children'];\nexport var SVGElementPropKeys = ['aria-activedescendant', 'aria-atomic', 'aria-autocomplete', 'aria-busy', 'aria-checked', 'aria-colcount', 'aria-colindex', 'aria-colspan', 'aria-controls', 'aria-current', 'aria-describedby', 'aria-details', 'aria-disabled', 'aria-errormessage', 'aria-expanded', 'aria-flowto', 'aria-haspopup', 'aria-hidden', 'aria-invalid', 'aria-keyshortcuts', 'aria-label', 'aria-labelledby', 'aria-level', 'aria-live', 'aria-modal', 'aria-multiline', 'aria-multiselectable', 'aria-orientation', 'aria-owns', 'aria-placeholder', 'aria-posinset', 'aria-pressed', 'aria-readonly', 'aria-relevant', 'aria-required', 'aria-roledescription', 'aria-rowcount', 'aria-rowindex', 'aria-rowspan', 'aria-selected', 'aria-setsize', 'aria-sort', 'aria-valuemax', 'aria-valuemin', 'aria-valuenow', 'aria-valuetext', 'className', 'color', 'height', 'id', 'lang', 'max', 'media', 'method', 'min', 'name', 'style',\n/*\n * removed 'type' SVGElementPropKey because we do not currently use any SVG elements\n * that can use it, and it conflicts with the recharts prop 'type'\n * https://github.com/recharts/recharts/pull/3327\n * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/type\n */\n// 'type',\n'target', 'width', 'role', 'tabIndex', 'accentHeight', 'accumulate', 'additive', 'alignmentBaseline', 'allowReorder', 'alphabetic', 'amplitude', 'arabicForm', 'ascent', 'attributeName', 'attributeType', 'autoReverse', 'azimuth', 'baseFrequency', 'baselineShift', 'baseProfile', 'bbox', 'begin', 'bias', 'by', 'calcMode', 'capHeight', 'clip', 'clipPath', 'clipPathUnits', 'clipRule', 'colorInterpolation', 'colorInterpolationFilters', 'colorProfile', 'colorRendering', 'contentScriptType', 'contentStyleType', 'cursor', 'cx', 'cy', 'd', 'decelerate', 'descent', 'diffuseConstant', 'direction', 'display', 'divisor', 'dominantBaseline', 'dur', 'dx', 'dy', 'edgeMode', 'elevation', 'enableBackground', 'end', 'exponent', 'externalResourcesRequired', 'fill', 'fillOpacity', 'fillRule', 'filter', 'filterRes', 'filterUnits', 'floodColor', 'floodOpacity', 'focusable', 'fontFamily', 'fontSize', 'fontSizeAdjust', 'fontStretch', 'fontStyle', 'fontVariant', 'fontWeight', 'format', 'from', 'fx', 'fy', 'g1', 'g2', 'glyphName', 'glyphOrientationHorizontal', 'glyphOrientationVertical', 'glyphRef', 'gradientTransform', 'gradientUnits', 'hanging', 'horizAdvX', 'horizOriginX', 'href', 'ideographic', 'imageRendering', 'in2', 'in', 'intercept', 'k1', 'k2', 'k3', 'k4', 'k', 'kernelMatrix', 'kernelUnitLength', 'kerning', 'keyPoints', 'keySplines', 'keyTimes', 'lengthAdjust', 'letterSpacing', 'lightingColor', 'limitingConeAngle', 'local', 'markerEnd', 'markerHeight', 'markerMid', 'markerStart', 'markerUnits', 'markerWidth', 'mask', 'maskContentUnits', 'maskUnits', 'mathematical', 'mode', 'numOctaves', 'offset', 'opacity', 'operator', 'order', 'orient', 'orientation', 'origin', 'overflow', 'overlinePosition', 'overlineThickness', 'paintOrder', 'panose1', 'pathLength', 'patternContentUnits', 'patternTransform', 'patternUnits', 'pointerEvents', 'pointsAtX', 'pointsAtY', 'pointsAtZ', 'preserveAlpha', 'preserveAspectRatio', 'primitiveUnits', 'r', 'radius', 'refX', 'refY', 'renderingIntent', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'result', 'rotate', 'rx', 'ry', 'seed', 'shapeRendering', 'slope', 'spacing', 'specularConstant', 'specularExponent', 'speed', 'spreadMethod', 'startOffset', 'stdDeviation', 'stemh', 'stemv', 'stitchTiles', 'stopColor', 'stopOpacity', 'strikethroughPosition', 'strikethroughThickness', 'string', 'stroke', 'strokeDasharray', 'strokeDashoffset', 'strokeLinecap', 'strokeLinejoin', 'strokeMiterlimit', 'strokeOpacity', 'strokeWidth', 'surfaceScale', 'systemLanguage', 'tableValues', 'targetX', 'targetY', 'textAnchor', 'textDecoration', 'textLength', 'textRendering', 'to', 'transform', 'u1', 'u2', 'underlinePosition', 'underlineThickness', 'unicode', 'unicodeBidi', 'unicodeRange', 'unitsPerEm', 'vAlphabetic', 'values', 'vectorEffect', 'version', 'vertAdvY', 'vertOriginX', 'vertOriginY', 'vHanging', 'vIdeographic', 'viewTarget', 'visibility', 'vMathematical', 'widths', 'wordSpacing', 'writingMode', 'x1', 'x2', 'x', 'xChannelSelector', 'xHeight', 'xlinkActuate', 'xlinkArcrole', 'xlinkHref', 'xlinkRole', 'xlinkShow', 'xlinkTitle', 'xlinkType', 'xmlBase', 'xmlLang', 'xmlns', 'xmlnsXlink', 'xmlSpace', 'y1', 'y2', 'y', 'yChannelSelector', 'z', 'zoomAndPan', 'ref', 'key', 'angle'];\nvar PolyElementKeys = ['points', 'pathLength'];\n\n/** svg element types that have specific attribute filtration requirements */\n\n/** map of svg element types to unique svg attributes that belong to that element */\nexport var FilteredElementKeyMap = {\n  svg: SVGContainerPropKeys,\n  polygon: PolyElementKeys,\n  polyline: PolyElementKeys\n};\nexport var EventKeys = ['dangerouslySetInnerHTML', 'onCopy', 'onCopyCapture', 'onCut', 'onCutCapture', 'onPaste', 'onPasteCapture', 'onCompositionEnd', 'onCompositionEndCapture', 'onCompositionStart', 'onCompositionStartCapture', 'onCompositionUpdate', 'onCompositionUpdateCapture', 'onFocus', 'onFocusCapture', 'onBlur', 'onBlurCapture', 'onChange', 'onChangeCapture', 'onBeforeInput', 'onBeforeInputCapture', 'onInput', 'onInputCapture', 'onReset', 'onResetCapture', 'onSubmit', 'onSubmitCapture', 'onInvalid', 'onInvalidCapture', 'onLoad', 'onLoadCapture', 'onError', 'onErrorCapture', 'onKeyDown', 'onKeyDownCapture', 'onKeyPress', 'onKeyPressCapture', 'onKeyUp', 'onKeyUpCapture', 'onAbort', 'onAbortCapture', 'onCanPlay', 'onCanPlayCapture', 'onCanPlayThrough', 'onCanPlayThroughCapture', 'onDurationChange', 'onDurationChangeCapture', 'onEmptied', 'onEmptiedCapture', 'onEncrypted', 'onEncryptedCapture', 'onEnded', 'onEndedCapture', 'onLoadedData', 'onLoadedDataCapture', 'onLoadedMetadata', 'onLoadedMetadataCapture', 'onLoadStart', 'onLoadStartCapture', 'onPause', 'onPauseCapture', 'onPlay', 'onPlayCapture', 'onPlaying', 'onPlayingCapture', 'onProgress', 'onProgressCapture', 'onRateChange', 'onRateChangeCapture', 'onSeeked', 'onSeekedCapture', 'onSeeking', 'onSeekingCapture', 'onStalled', 'onStalledCapture', 'onSuspend', 'onSuspendCapture', 'onTimeUpdate', 'onTimeUpdateCapture', 'onVolumeChange', 'onVolumeChangeCapture', 'onWaiting', 'onWaitingCapture', 'onAuxClick', 'onAuxClickCapture', 'onClick', 'onClickCapture', 'onContextMenu', 'onContextMenuCapture', 'onDoubleClick', 'onDoubleClickCapture', 'onDrag', 'onDragCapture', 'onDragEnd', 'onDragEndCapture', 'onDragEnter', 'onDragEnterCapture', 'onDragExit', 'onDragExitCapture', 'onDragLeave', 'onDragLeaveCapture', 'onDragOver', 'onDragOverCapture', 'onDragStart', 'onDragStartCapture', 'onDrop', 'onDropCapture', 'onMouseDown', 'onMouseDownCapture', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseMoveCapture', 'onMouseOut', 'onMouseOutCapture', 'onMouseOver', 'onMouseOverCapture', 'onMouseUp', 'onMouseUpCapture', 'onSelect', 'onSelectCapture', 'onTouchCancel', 'onTouchCancelCapture', 'onTouchEnd', 'onTouchEndCapture', 'onTouchMove', 'onTouchMoveCapture', 'onTouchStart', 'onTouchStartCapture', 'onPointerDown', 'onPointerDownCapture', 'onPointerMove', 'onPointerMoveCapture', 'onPointerUp', 'onPointerUpCapture', 'onPointerCancel', 'onPointerCancelCapture', 'onPointerEnter', 'onPointerEnterCapture', 'onPointerLeave', 'onPointerLeaveCapture', 'onPointerOver', 'onPointerOverCapture', 'onPointerOut', 'onPointerOutCapture', 'onGotPointerCapture', 'onGotPointerCaptureCapture', 'onLostPointerCapture', 'onLostPointerCaptureCapture', 'onScroll', 'onScrollCapture', 'onWheel', 'onWheelCapture', 'onAnimationStart', 'onAnimationStartCapture', 'onAnimationEnd', 'onAnimationEndCapture', 'onAnimationIteration', 'onAnimationIterationCapture', 'onTransitionEnd', 'onTransitionEndCapture'];\n\n/** The type of easing function to use for animations */\n\n/** Specifies the duration of animation, the unit of this option is ms. */\n\n/** the offset of a chart, which define the blank space all around */\n\n/**\n * The domain of axis.\n * This is the definition\n *\n * Numeric domain is always defined by an array of exactly two values, for the min and the max of the axis.\n * Categorical domain is defined as array of all possible values.\n *\n * Can be specified in many ways:\n * - array of numbers\n * - with special strings like 'dataMin' and 'dataMax'\n * - with special string math like 'dataMin - 100'\n * - with keyword 'auto'\n * - or a function\n * - array of functions\n * - or a combination of the above\n */\n\n/**\n * NumberDomain is an evaluated {@link AxisDomain}.\n * Unlike {@link AxisDomain}, it has no variety - it's a tuple of two number.\n * This is after all the keywords and functions were evaluated and what is left is [min, max].\n *\n * Know that the min, max values are not guaranteed to be nice numbers - values like -Infinity or NaN are possible.\n *\n * There are also `category` axes that have different things than numbers in their domain.\n */\n\n/** The props definition of base axis */\n\n/** Defines how ticks are placed and whether / how tick collisions are handled.\n * 'preserveStart' keeps the left tick on collision and ensures that the first tick is always shown.\n * 'preserveEnd' keeps the right tick on collision and ensures that the last tick is always shown.\n * 'preserveStartEnd' keeps the left tick on collision and ensures that the first and last ticks always show.\n * 'equidistantPreserveStart' selects a number N such that every nTh tick will be shown without collision.\n */\n\n/**\n * Ticks can be any type when the axis is the type of category.\n *\n * Ticks must be numbers when the axis is the type of number.\n */\n\nexport var adaptEventHandlers = (props, newHandler) => {\n  if (!props || typeof props === 'function' || typeof props === 'boolean') {\n    return null;\n  }\n  var inputProps = props;\n  if (/*#__PURE__*/isValidElement(props)) {\n    inputProps = props.props;\n  }\n  if (typeof inputProps !== 'object' && typeof inputProps !== 'function') {\n    return null;\n  }\n  var out = {};\n  Object.keys(inputProps).forEach(key => {\n    if (EventKeys.includes(key)) {\n      out[key] = newHandler || (e => inputProps[key](inputProps, e));\n    }\n  });\n  return out;\n};\nvar getEventHandlerOfChild = (originalHandler, data, index) => e => {\n  originalHandler(data, index, e);\n  return null;\n};\nexport var adaptEventsOfChild = (props, data, index) => {\n  if (props === null || typeof props !== 'object' && typeof props !== 'function') {\n    return null;\n  }\n  var out = null;\n  Object.keys(props).forEach(key => {\n    var item = props[key];\n    if (EventKeys.includes(key) && typeof item === 'function') {\n      if (!out) out = {};\n      out[key] = getEventHandlerOfChild(item, data, index);\n    }\n  });\n  return out;\n};\n\n/**\n * 'axis' means that all graphical items belonging to this axis tick will be highlighted,\n * and all will be present in the tooltip.\n * Tooltip with 'axis' will display when hovering on the chart background.\n *\n * 'item' means only the one graphical item being hovered will show in the tooltip.\n * Tooltip with 'item' will display when hovering over individual graphical items.\n *\n * This is calculated internally;\n * charts have a `defaultTooltipEventType` and `validateTooltipEventTypes` options.\n *\n * Users then use <Tooltip shared={true} /> or <Tooltip shared={false} /> to control their preference,\n * and charts will then see what is allowed and what is not.\n */\n\n/**\n * These are the props we are going to pass to an `activeDot` if it is a function or a custom Component\n */\n\n/**\n * This is the type of `activeDot` prop on:\n * - Area\n * - Line\n * - Radar\n */\n\n// TODO we need two different range objects, one for polar and another for cartesian layouts\n\n/**\n * Simplified version of the MouseEvent so that we don't have to mock the whole thing in tests.\n *\n * This is meant to represent the React.MouseEvent\n * which is a wrapper on top of https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent\n */\n\n/**\n * Coordinates relative to the top-left corner of the chart.\n * Also include scale which means that a chart that's scaled will return the same coordinates as a chart that's not scaled.\n */","import get from 'es-toolkit/compat/get';\nimport { Children, isValidElement } from 'react';\nimport { isFragment } from 'react-is';\nimport { isNullish } from './DataUtils';\nimport { FilteredElementKeyMap, SVGElementPropKeys, EventKeys } from './types';\nexport var SCALE_TYPES = ['auto', 'linear', 'pow', 'sqrt', 'log', 'identity', 'time', 'band', 'point', 'ordinal', 'quantile', 'quantize', 'utc', 'sequential', 'threshold'];\n\n/**\n * @deprecated instead find another approach that does not depend on displayName.\n * Get the display name of a component\n * @param  {Object} Comp Specified Component\n * @return {String}      Display name of Component\n */\nexport var getDisplayName = Comp => {\n  if (typeof Comp === 'string') {\n    return Comp;\n  }\n  if (!Comp) {\n    return '';\n  }\n  return Comp.displayName || Comp.name || 'Component';\n};\n\n// `toArray` gets called multiple times during the render\n// so we can memoize last invocation (since reference to `children` is the same)\nvar lastChildren = null;\nvar lastResult = null;\n\n/**\n * @deprecated instead find another approach that does not require reading React Elements from DOM.\n *\n * @param children do not use\n * @return deprecated do not use\n */\nexport var toArray = children => {\n  if (children === lastChildren && Array.isArray(lastResult)) {\n    return lastResult;\n  }\n  var result = [];\n  Children.forEach(children, child => {\n    if (isNullish(child)) return;\n    if (isFragment(child)) {\n      result = result.concat(toArray(child.props.children));\n    } else {\n      // @ts-expect-error this could still be Iterable<ReactNode> and TS does not like that\n      result.push(child);\n    }\n  });\n  lastResult = result;\n  lastChildren = children;\n  return result;\n};\n\n/**\n * @deprecated instead find another approach that does not require reading React Elements from DOM.\n *\n * Find and return all matched children by type.\n * `type` must be a React.ComponentType\n *\n * @param children do not use\n * @param type do not use\n * @return deprecated do not use\n */\nexport function findAllByType(children, type) {\n  var result = [];\n  var types = [];\n  if (Array.isArray(type)) {\n    types = type.map(t => getDisplayName(t));\n  } else {\n    types = [getDisplayName(type)];\n  }\n  toArray(children).forEach(child => {\n    var childType = get(child, 'type.displayName') || get(child, 'type.name');\n    // ts-expect-error toArray and lodash.get are not compatible. Let's get rid of the whole findAllByType function\n    if (types.indexOf(childType) !== -1) {\n      result.push(child);\n    }\n  });\n  return result;\n}\nexport var isClipDot = dot => {\n  if (dot && typeof dot === 'object' && 'clipDot' in dot) {\n    return Boolean(dot.clipDot);\n  }\n  return true;\n};\n\n/**\n * Checks if the property is valid to spread onto an SVG element or onto a specific component\n * @param {unknown} property property value currently being compared\n * @param {string} key property key currently being compared\n * @param {boolean} includeEvents if events are included in spreadable props\n * @param {boolean} svgElementType checks against map of SVG element types to attributes\n * @returns {boolean} is prop valid\n */\nexport var isValidSpreadableProp = (property, key, includeEvents, svgElementType) => {\n  var _ref;\n  /**\n   * If the svg element type is explicitly included, check against the filtered element key map\n   * to determine if there are attributes that should only exist on that element type.\n   * @todo Add an internal cjs version of https://github.com/wooorm/svg-element-attributes for full coverage.\n   */\n  var matchingElementTypeKeys = (_ref = svgElementType && (FilteredElementKeyMap === null || FilteredElementKeyMap === void 0 ? void 0 : FilteredElementKeyMap[svgElementType])) !== null && _ref !== void 0 ? _ref : [];\n  return key.startsWith('data-') || typeof property !== 'function' && (svgElementType && matchingElementTypeKeys.includes(key) || SVGElementPropKeys.includes(key)) || includeEvents && EventKeys.includes(key);\n};\nexport var filterProps = (props, includeEvents, svgElementType) => {\n  if (!props || typeof props === 'function' || typeof props === 'boolean') {\n    return null;\n  }\n  var inputProps = props;\n  if (/*#__PURE__*/isValidElement(props)) {\n    inputProps = props.props;\n  }\n  if (typeof inputProps !== 'object' && typeof inputProps !== 'function') {\n    return null;\n  }\n  var out = {};\n\n  /**\n   * Props are blindly spread onto SVG elements. This loop filters out properties that we don't want to spread.\n   * Items filtered out are as follows:\n   *   - functions in properties that are SVG attributes (functions are included when includeEvents is true)\n   *   - props that are SVG attributes but don't matched the passed svgElementType\n   *   - any prop that is not in SVGElementPropKeys (or in EventKeys if includeEvents is true)\n   */\n  Object.keys(inputProps).forEach(key => {\n    var _inputProps;\n    if (isValidSpreadableProp((_inputProps = inputProps) === null || _inputProps === void 0 ? void 0 : _inputProps[key], key, includeEvents, svgElementType)) {\n      out[key] = inputProps[key];\n    }\n  });\n  return out;\n};","var _excluded = [\"children\", \"width\", \"height\", \"viewBox\", \"className\", \"style\", \"title\", \"desc\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\n/**\n * @fileOverview Surface\n */\nimport * as React from 'react';\nimport { forwardRef } from 'react';\nimport { clsx } from 'clsx';\nimport { filterProps } from '../util/ReactUtils';\nexport var Surface = /*#__PURE__*/forwardRef((props, ref) => {\n  var {\n      children,\n      width,\n      height,\n      viewBox,\n      className,\n      style,\n      title,\n      desc\n    } = props,\n    others = _objectWithoutProperties(props, _excluded);\n  var svgView = viewBox || {\n    width,\n    height,\n    x: 0,\n    y: 0\n  };\n  var layerClass = clsx('recharts-surface', className);\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({}, filterProps(others, true, 'svg'), {\n    className: layerClass,\n    width: width,\n    height: height,\n    style: style,\n    viewBox: \"\".concat(svgView.x, \" \").concat(svgView.y, \" \").concat(svgView.width, \" \").concat(svgView.height),\n    ref: ref\n  }), /*#__PURE__*/React.createElement(\"title\", null, title), /*#__PURE__*/React.createElement(\"desc\", null, desc), children);\n});","var _excluded = [\"children\", \"className\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nimport * as React from 'react';\nimport { clsx } from 'clsx';\nimport { filterProps } from '../util/ReactUtils';\nexport var Layer = /*#__PURE__*/React.forwardRef((props, ref) => {\n  var {\n      children,\n      className\n    } = props,\n    others = _objectWithoutProperties(props, _excluded);\n  var layerClass = clsx('recharts-layer', className);\n  return /*#__PURE__*/React.createElement(\"g\", _extends({\n    className: layerClass\n  }, filterProps(others, true), {\n    ref: ref\n  }), children);\n});","import { createContext, useContext } from 'react';\nexport var LegendPortalContext = /*#__PURE__*/createContext(null);\nexport var useLegendPortal = () => useContext(LegendPortalContext);","export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n","const pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n  this._ += strings[0];\n  for (let i = 1, n = strings.length; i < n; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  let d = Math.floor(digits);\n  if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  const k = 10 ** d;\n  return function(strings) {\n    this._ += strings[0];\n    for (let i = 1, n = strings.length; i < n; ++i) {\n      this._ += Math.round(arguments[i] * k) / k + strings[i];\n    }\n  };\n}\n\nexport class Path {\n  constructor(digits) {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n    this._append = digits == null ? append : appendRound(digits);\n  }\n  moveTo(x, y) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._append`Z`;\n    }\n  }\n  lineTo(x, y) {\n    this._append`L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  quadraticCurveTo(x1, y1, x, y) {\n    this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  bezierCurveTo(x1, y1, x2, y2, x, y) {\n    this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arcTo(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._append`M${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._append`L${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      let x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n      }\n\n      this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n    }\n  }\n  arc(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._append`M${x0},${y0}`;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._append`L${x0},${y0}`;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n    }\n  }\n  rect(x, y, w, h) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n  }\n  toString() {\n    return this._;\n  }\n}\n\nexport function path() {\n  return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n  return new Path(+digits);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n  let digits = 3;\n\n  shape.digits = function(_) {\n    if (!arguments.length) return digits;\n    if (_ == null) {\n      digits = null;\n    } else {\n      const d = Math.floor(_);\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n      digits = d;\n    }\n    return shape;\n  };\n\n  return () => new Path(digits);\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n  return typeof x === \"object\" && \"length\" in x\n    ? x // Array, TypedArray, NodeList, array-like\n    : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n  this._context = context;\n}\n\nLinear.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // falls through\n      default: this._context.lineTo(x, y); break;\n    }\n  }\n};\n\nexport default function(context) {\n  return new Linear(context);\n}\n","export function x(p) {\n  return p[0];\n}\n\nexport function y(p) {\n  return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n  var defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null,\n      path = withPath(line);\n\n  x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n  y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n  function line(data) {\n    var i,\n        n = (data = array(data)).length,\n        d,\n        defined0 = false,\n        buffer;\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) output.lineStart();\n        else output.lineEnd();\n      }\n      if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  line.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n  };\n\n  line.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n  };\n\n  line.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n  };\n\n  line.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n  };\n\n  line.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n  };\n\n  return line;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n  var x1 = null,\n      defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null,\n      path = withPath(area);\n\n  x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n  y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n  y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n  function area(data) {\n    var i,\n        j,\n        k,\n        n = (data = array(data)).length,\n        d,\n        defined0 = false,\n        buffer,\n        x0z = new Array(n),\n        y0z = new Array(n);\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) {\n          j = i;\n          output.areaStart();\n          output.lineStart();\n        } else {\n          output.lineEnd();\n          output.lineStart();\n          for (k = i - 1; k >= j; --k) {\n            output.point(x0z[k], y0z[k]);\n          }\n          output.lineEnd();\n          output.areaEnd();\n        }\n      }\n      if (defined0) {\n        x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n        output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n      }\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  function arealine() {\n    return line().defined(defined).curve(curve).context(context);\n  }\n\n  area.x = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n  };\n\n  area.x0 = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n  };\n\n  area.x1 = function(_) {\n    return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n  };\n\n  area.y = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n  };\n\n  area.y0 = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n  };\n\n  area.y1 = function(_) {\n    return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n  };\n\n  area.lineX0 =\n  area.lineY0 = function() {\n    return arealine().x(x0).y(y0);\n  };\n\n  area.lineY1 = function() {\n    return arealine().x(x0).y(y1);\n  };\n\n  area.lineX1 = function() {\n    return arealine().x(x1).y(y0);\n  };\n\n  area.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n  };\n\n  area.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n  };\n\n  area.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n  };\n\n  return area;\n}\n","import pointRadial from \"../pointRadial.js\";\n\nclass Bump {\n  constructor(context, x) {\n    this._context = context;\n    this._x = x;\n  }\n  areaStart() {\n    this._line = 0;\n  }\n  areaEnd() {\n    this._line = NaN;\n  }\n  lineStart() {\n    this._point = 0;\n  }\n  lineEnd() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  }\n  point(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: {\n        this._point = 1;\n        if (this._line) this._context.lineTo(x, y);\n        else this._context.moveTo(x, y);\n        break;\n      }\n      case 1: this._point = 2; // falls through\n      default: {\n        if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y);\n        else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y);\n        break;\n      }\n    }\n    this._x0 = x, this._y0 = y;\n  }\n}\n\nclass BumpRadial {\n  constructor(context) {\n    this._context = context;\n  }\n  lineStart() {\n    this._point = 0;\n  }\n  lineEnd() {}\n  point(x, y) {\n    x = +x, y = +y;\n    if (this._point === 0) {\n      this._point = 1;\n    } else {\n      const p0 = pointRadial(this._x0, this._y0);\n      const p1 = pointRadial(this._x0, this._y0 = (this._y0 + y) / 2);\n      const p2 = pointRadial(x, this._y0);\n      const p3 = pointRadial(x, y);\n      this._context.moveTo(...p0);\n      this._context.bezierCurveTo(...p1, ...p2, ...p3);\n    }\n    this._x0 = x, this._y0 = y;\n  }\n}\n\nexport function bumpX(context) {\n  return new Bump(context, true);\n}\n\nexport function bumpY(context) {\n  return new Bump(context, false);\n}\n\nexport function bumpRadial(context) {\n  return new BumpRadial(context);\n}\n","export default function() {}\n","export function point(that, x, y) {\n  that._context.bezierCurveTo(\n    (2 * that._x0 + that._x1) / 3,\n    (2 * that._y0 + that._y1) / 3,\n    (that._x0 + 2 * that._x1) / 3,\n    (that._y0 + 2 * that._y1) / 3,\n    (that._x0 + 4 * that._x1 + x) / 6,\n    (that._y0 + 4 * that._y1 + y) / 6\n  );\n}\n\nexport function Basis(context) {\n  this._context = context;\n}\n\nBasis.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 3: point(this, this._x1, this._y1); // falls through\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new Basis(context);\n}\n","import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n  this._context = context;\n}\n\nBasisClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x2, this._y2);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n        this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x2, this._y2);\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n      case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n      case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new BasisClosed(context);\n}\n","import {point} from \"./basis.js\";\n\nfunction BasisOpen(context) {\n  this._context = context;\n}\n\nBasisOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n      case 3: this._point = 4; // falls through\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new BasisOpen(context);\n}\n","import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n  this._context = context;\n}\n\nLinearClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._point) this._context.closePath();\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    if (this._point) this._context.lineTo(x, y);\n    else this._point = 1, this._context.moveTo(x, y);\n  }\n};\n\nexport default function(context) {\n  return new LinearClosed(context);\n}\n","function sign(x) {\n  return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n  var h0 = that._x1 - that._x0,\n      h1 = x2 - that._x1,\n      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n      p = (s0 * h1 + s1 * h0) / (h0 + h1);\n  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n  var h = that._x1 - that._x0;\n  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n  var x0 = that._x0,\n      y0 = that._y0,\n      x1 = that._x1,\n      y1 = that._y1,\n      dx = (x1 - x0) / 3;\n  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n  this._context = context;\n}\n\nMonotoneX.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 =\n    this._t0 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n      case 3: point(this, this._t0, slope2(this, this._t0)); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    var t1 = NaN;\n\n    x = +x, y = +y;\n    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n      default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n    }\n\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n    this._t0 = t1;\n  }\n}\n\nfunction MonotoneY(context) {\n  this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n  MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n  this._context = context;\n}\n\nReflectContext.prototype = {\n  moveTo: function(x, y) { this._context.moveTo(y, x); },\n  closePath: function() { this._context.closePath(); },\n  lineTo: function(x, y) { this._context.lineTo(y, x); },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n  return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n  return new MonotoneY(context);\n}\n","function Natural(context) {\n  this._context = context;\n}\n\nNatural.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        n = x.length;\n\n    if (n) {\n      this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n      if (n === 2) {\n        this._context.lineTo(x[1], y[1]);\n      } else {\n        var px = controlPoints(x),\n            py = controlPoints(y);\n        for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n          this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n        }\n      }\n    }\n\n    if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n    this._x = this._y = null;\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n  var i,\n      n = x.length - 1,\n      m,\n      a = new Array(n),\n      b = new Array(n),\n      r = new Array(n);\n  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n  a[n - 1] = r[n - 1] / b[n - 1];\n  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n  b[n - 1] = (x[n] + a[n - 1]) / 2;\n  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n  return [a, b];\n}\n\nexport default function(context) {\n  return new Natural(context);\n}\n","function Step(context, t) {\n  this._context = context;\n  this._t = t;\n}\n\nStep.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = this._y = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // falls through\n      default: {\n        if (this._t <= 0) {\n          this._context.lineTo(this._x, y);\n          this._context.lineTo(x, y);\n        } else {\n          var x1 = this._x * (1 - this._t) + x * this._t;\n          this._context.lineTo(x1, this._y);\n          this._context.lineTo(x1, y);\n        }\n        break;\n      }\n    }\n    this._x = x, this._y = y;\n  }\n};\n\nexport default function(context) {\n  return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n  return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n  return new Step(context, 1);\n}\n","export default function(series, order) {\n  if (!((n = series.length) > 1)) return;\n  for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n    s0 = s1, s1 = series[order[i]];\n    for (j = 0; j < m; ++j) {\n      s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n    }\n  }\n}\n","export default function(series) {\n  var n = series.length, o = new Array(n);\n  while (--n >= 0) o[n] = n;\n  return o;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport offsetNone from \"./offset/none.js\";\nimport orderNone from \"./order/none.js\";\n\nfunction stackValue(d, key) {\n  return d[key];\n}\n\nfunction stackSeries(key) {\n  const series = [];\n  series.key = key;\n  return series;\n}\n\nexport default function() {\n  var keys = constant([]),\n      order = orderNone,\n      offset = offsetNone,\n      value = stackValue;\n\n  function stack(data) {\n    var sz = Array.from(keys.apply(this, arguments), stackSeries),\n        i, n = sz.length, j = -1,\n        oz;\n\n    for (const d of data) {\n      for (i = 0, ++j; i < n; ++i) {\n        (sz[i][j] = [0, +value(d, sz[i].key, j, data)]).data = d;\n      }\n    }\n\n    for (i = 0, oz = array(order(sz)); i < n; ++i) {\n      sz[oz[i]].index = i;\n    }\n\n    offset(sz, oz);\n    return sz;\n  }\n\n  stack.keys = function(_) {\n    return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(Array.from(_)), stack) : keys;\n  };\n\n  stack.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n  };\n\n  stack.order = function(_) {\n    return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(Array.from(_)), stack) : order;\n  };\n\n  stack.offset = function(_) {\n    return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n  };\n\n  return stack;\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n    for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n    if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n  }\n  none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n    for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n    s0[j][1] += s0[j][0] = -y / 2;\n  }\n  none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n  for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n    for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n      var si = series[order[i]],\n          sij0 = si[j][1] || 0,\n          sij1 = si[j - 1][1] || 0,\n          s3 = (sij0 - sij1) / 2;\n      for (var k = 0; k < i; ++k) {\n        var sk = series[order[k]],\n            skj0 = sk[j][1] || 0,\n            skj1 = sk[j - 1][1] || 0;\n        s3 += skj0 - skj1;\n      }\n      s1 += sij0, s2 += s3 * sij0;\n    }\n    s0[j - 1][1] += s0[j - 1][0] = y;\n    if (s1) y -= s2 / s1;\n  }\n  s0[j - 1][1] += s0[j - 1][0] = y;\n  none(series, order);\n}\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction uniqBy(arr, mapper) {\n    const map = new Map();\n    for (let i = 0; i < arr.length; i++) {\n        const item = arr[i];\n        const key = mapper(item);\n        if (!map.has(key)) {\n            map.set(key, item);\n        }\n    }\n    return Array.from(map.values());\n}\n\nexports.uniqBy = uniqBy;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction identity(x) {\n    return x;\n}\n\nexports.identity = identity;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction isLength(value) {\n    return Number.isSafeInteger(value) && value >= 0;\n}\n\nexports.isLength = isLength;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isLength = require('../../predicate/isLength.js');\n\nfunction isArrayLike(value) {\n    return value != null && typeof value !== 'function' && isLength.isLength(value.length);\n}\n\nexports.isArrayLike = isArrayLike;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction isObjectLike(value) {\n    return typeof value === 'object' && value !== null;\n}\n\nexports.isObjectLike = isObjectLike;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isArrayLike = require('./isArrayLike.js');\nconst isObjectLike = require('./isObjectLike.js');\n\nfunction isArrayLikeObject(value) {\n    return isObjectLike.isObjectLike(value) && isArrayLike.isArrayLike(value);\n}\n\nexports.isArrayLikeObject = isArrayLikeObject;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst get = require('./get.js');\n\nfunction property(path) {\n    return function (object) {\n        return get.get(object, path);\n    };\n}\n\nexports.property = property;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction isObject(value) {\n    return value !== null && (typeof value === 'object' || typeof value === 'function');\n}\n\nexports.isObject = isObject;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction isPrimitive(value) {\n    return value == null || (typeof value !== 'object' && typeof value !== 'function');\n}\n\nexports.isPrimitive = isPrimitive;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction eq(value, other) {\n    return value === other || (Number.isNaN(value) && Number.isNaN(other));\n}\n\nexports.eq = eq;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isObject = require('./isObject.js');\nconst isPrimitive = require('../../predicate/isPrimitive.js');\nconst eq = require('../util/eq.js');\n\nfunction isMatchWith(target, source, compare) {\n    if (typeof compare !== 'function') {\n        return isMatchWith(target, source, () => undefined);\n    }\n    return isMatchWithInternal(target, source, function doesMatch(objValue, srcValue, key, object, source, stack) {\n        const isEqual = compare(objValue, srcValue, key, object, source, stack);\n        if (isEqual !== undefined) {\n            return Boolean(isEqual);\n        }\n        return isMatchWithInternal(objValue, srcValue, doesMatch, stack);\n    }, new Map());\n}\nfunction isMatchWithInternal(target, source, compare, stack) {\n    if (source === target) {\n        return true;\n    }\n    switch (typeof source) {\n        case 'object': {\n            return isObjectMatch(target, source, compare, stack);\n        }\n        case 'function': {\n            const sourceKeys = Object.keys(source);\n            if (sourceKeys.length > 0) {\n                return isMatchWithInternal(target, { ...source }, compare, stack);\n            }\n            return eq.eq(target, source);\n        }\n        default: {\n            if (!isObject.isObject(target)) {\n                return eq.eq(target, source);\n            }\n            if (typeof source === 'string') {\n                return source === '';\n            }\n            return true;\n        }\n    }\n}\nfunction isObjectMatch(target, source, compare, stack) {\n    if (source == null) {\n        return true;\n    }\n    if (Array.isArray(source)) {\n        return isArrayMatch(target, source, compare, stack);\n    }\n    if (source instanceof Map) {\n        return isMapMatch(target, source, compare, stack);\n    }\n    if (source instanceof Set) {\n        return isSetMatch(target, source, compare, stack);\n    }\n    const keys = Object.keys(source);\n    if (target == null || isPrimitive.isPrimitive(target)) {\n        return keys.length === 0;\n    }\n    if (keys.length === 0) {\n        return true;\n    }\n    if (stack?.has(source)) {\n        return stack.get(source) === target;\n    }\n    stack?.set(source, target);\n    try {\n        for (let i = 0; i < keys.length; i++) {\n            const key = keys[i];\n            if (!isPrimitive.isPrimitive(target) && !(key in target)) {\n                return false;\n            }\n            if (source[key] === undefined && target[key] !== undefined) {\n                return false;\n            }\n            if (source[key] === null && target[key] !== null) {\n                return false;\n            }\n            const isEqual = compare(target[key], source[key], key, target, source, stack);\n            if (!isEqual) {\n                return false;\n            }\n        }\n        return true;\n    }\n    finally {\n        stack?.delete(source);\n    }\n}\nfunction isMapMatch(target, source, compare, stack) {\n    if (source.size === 0) {\n        return true;\n    }\n    if (!(target instanceof Map)) {\n        return false;\n    }\n    for (const [key, sourceValue] of source.entries()) {\n        const targetValue = target.get(key);\n        const isEqual = compare(targetValue, sourceValue, key, target, source, stack);\n        if (isEqual === false) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction isArrayMatch(target, source, compare, stack) {\n    if (source.length === 0) {\n        return true;\n    }\n    if (!Array.isArray(target)) {\n        return false;\n    }\n    const countedIndex = new Set();\n    for (let i = 0; i < source.length; i++) {\n        const sourceItem = source[i];\n        let found = false;\n        for (let j = 0; j < target.length; j++) {\n            if (countedIndex.has(j)) {\n                continue;\n            }\n            const targetItem = target[j];\n            let matches = false;\n            const isEqual = compare(targetItem, sourceItem, i, target, source, stack);\n            if (isEqual) {\n                matches = true;\n            }\n            if (matches) {\n                countedIndex.add(j);\n                found = true;\n                break;\n            }\n        }\n        if (!found) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction isSetMatch(target, source, compare, stack) {\n    if (source.size === 0) {\n        return true;\n    }\n    if (!(target instanceof Set)) {\n        return false;\n    }\n    return isArrayMatch([...target], [...source], compare, stack);\n}\n\nexports.isMatchWith = isMatchWith;\nexports.isSetMatch = isSetMatch;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isMatchWith = require('./isMatchWith.js');\n\nfunction isMatch(target, source) {\n    return isMatchWith.isMatchWith(target, source, () => undefined);\n}\n\nexports.isMatch = isMatch;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction getSymbols(object) {\n    return Object.getOwnPropertySymbols(object).filter(symbol => Object.prototype.propertyIsEnumerable.call(object, symbol));\n}\n\nexports.getSymbols = getSymbols;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction getTag(value) {\n    if (value == null) {\n        return value === undefined ? '[object Undefined]' : '[object Null]';\n    }\n    return Object.prototype.toString.call(value);\n}\n\nexports.getTag = getTag;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst regexpTag = '[object RegExp]';\nconst stringTag = '[object String]';\nconst numberTag = '[object Number]';\nconst booleanTag = '[object Boolean]';\nconst argumentsTag = '[object Arguments]';\nconst symbolTag = '[object Symbol]';\nconst dateTag = '[object Date]';\nconst mapTag = '[object Map]';\nconst setTag = '[object Set]';\nconst arrayTag = '[object Array]';\nconst functionTag = '[object Function]';\nconst arrayBufferTag = '[object ArrayBuffer]';\nconst objectTag = '[object Object]';\nconst errorTag = '[object Error]';\nconst dataViewTag = '[object DataView]';\nconst uint8ArrayTag = '[object Uint8Array]';\nconst uint8ClampedArrayTag = '[object Uint8ClampedArray]';\nconst uint16ArrayTag = '[object Uint16Array]';\nconst uint32ArrayTag = '[object Uint32Array]';\nconst bigUint64ArrayTag = '[object BigUint64Array]';\nconst int8ArrayTag = '[object Int8Array]';\nconst int16ArrayTag = '[object Int16Array]';\nconst int32ArrayTag = '[object Int32Array]';\nconst bigInt64ArrayTag = '[object BigInt64Array]';\nconst float32ArrayTag = '[object Float32Array]';\nconst float64ArrayTag = '[object Float64Array]';\n\nexports.argumentsTag = argumentsTag;\nexports.arrayBufferTag = arrayBufferTag;\nexports.arrayTag = arrayTag;\nexports.bigInt64ArrayTag = bigInt64ArrayTag;\nexports.bigUint64ArrayTag = bigUint64ArrayTag;\nexports.booleanTag = booleanTag;\nexports.dataViewTag = dataViewTag;\nexports.dateTag = dateTag;\nexports.errorTag = errorTag;\nexports.float32ArrayTag = float32ArrayTag;\nexports.float64ArrayTag = float64ArrayTag;\nexports.functionTag = functionTag;\nexports.int16ArrayTag = int16ArrayTag;\nexports.int32ArrayTag = int32ArrayTag;\nexports.int8ArrayTag = int8ArrayTag;\nexports.mapTag = mapTag;\nexports.numberTag = numberTag;\nexports.objectTag = objectTag;\nexports.regexpTag = regexpTag;\nexports.setTag = setTag;\nexports.stringTag = stringTag;\nexports.symbolTag = symbolTag;\nexports.uint16ArrayTag = uint16ArrayTag;\nexports.uint32ArrayTag = uint32ArrayTag;\nexports.uint8ArrayTag = uint8ArrayTag;\nexports.uint8ClampedArrayTag = uint8ClampedArrayTag;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction isTypedArray(x) {\n    return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n\nexports.isTypedArray = isTypedArray;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst getSymbols = require('../compat/_internal/getSymbols.js');\nconst getTag = require('../compat/_internal/getTag.js');\nconst tags = require('../compat/_internal/tags.js');\nconst isPrimitive = require('../predicate/isPrimitive.js');\nconst isTypedArray = require('../predicate/isTypedArray.js');\n\nfunction cloneDeepWith(obj, cloneValue) {\n    return cloneDeepWithImpl(obj, undefined, obj, new Map(), cloneValue);\n}\nfunction cloneDeepWithImpl(valueToClone, keyToClone, objectToClone, stack = new Map(), cloneValue = undefined) {\n    const cloned = cloneValue?.(valueToClone, keyToClone, objectToClone, stack);\n    if (cloned !== undefined) {\n        return cloned;\n    }\n    if (isPrimitive.isPrimitive(valueToClone)) {\n        return valueToClone;\n    }\n    if (stack.has(valueToClone)) {\n        return stack.get(valueToClone);\n    }\n    if (Array.isArray(valueToClone)) {\n        const result = new Array(valueToClone.length);\n        stack.set(valueToClone, result);\n        for (let i = 0; i < valueToClone.length; i++) {\n            result[i] = cloneDeepWithImpl(valueToClone[i], i, objectToClone, stack, cloneValue);\n        }\n        if (Object.hasOwn(valueToClone, 'index')) {\n            result.index = valueToClone.index;\n        }\n        if (Object.hasOwn(valueToClone, 'input')) {\n            result.input = valueToClone.input;\n        }\n        return result;\n    }\n    if (valueToClone instanceof Date) {\n        return new Date(valueToClone.getTime());\n    }\n    if (valueToClone instanceof RegExp) {\n        const result = new RegExp(valueToClone.source, valueToClone.flags);\n        result.lastIndex = valueToClone.lastIndex;\n        return result;\n    }\n    if (valueToClone instanceof Map) {\n        const result = new Map();\n        stack.set(valueToClone, result);\n        for (const [key, value] of valueToClone) {\n            result.set(key, cloneDeepWithImpl(value, key, objectToClone, stack, cloneValue));\n        }\n        return result;\n    }\n    if (valueToClone instanceof Set) {\n        const result = new Set();\n        stack.set(valueToClone, result);\n        for (const value of valueToClone) {\n            result.add(cloneDeepWithImpl(value, undefined, objectToClone, stack, cloneValue));\n        }\n        return result;\n    }\n    if (typeof Buffer !== 'undefined' && Buffer.isBuffer(valueToClone)) {\n        return valueToClone.subarray();\n    }\n    if (isTypedArray.isTypedArray(valueToClone)) {\n        const result = new (Object.getPrototypeOf(valueToClone).constructor)(valueToClone.length);\n        stack.set(valueToClone, result);\n        for (let i = 0; i < valueToClone.length; i++) {\n            result[i] = cloneDeepWithImpl(valueToClone[i], i, objectToClone, stack, cloneValue);\n        }\n        return result;\n    }\n    if (valueToClone instanceof ArrayBuffer ||\n        (typeof SharedArrayBuffer !== 'undefined' && valueToClone instanceof SharedArrayBuffer)) {\n        return valueToClone.slice(0);\n    }\n    if (valueToClone instanceof DataView) {\n        const result = new DataView(valueToClone.buffer.slice(0), valueToClone.byteOffset, valueToClone.byteLength);\n        stack.set(valueToClone, result);\n        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n        return result;\n    }\n    if (typeof File !== 'undefined' && valueToClone instanceof File) {\n        const result = new File([valueToClone], valueToClone.name, {\n            type: valueToClone.type,\n        });\n        stack.set(valueToClone, result);\n        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n        return result;\n    }\n    if (typeof Blob !== 'undefined' && valueToClone instanceof Blob) {\n        const result = new Blob([valueToClone], { type: valueToClone.type });\n        stack.set(valueToClone, result);\n        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n        return result;\n    }\n    if (valueToClone instanceof Error) {\n        const result = new valueToClone.constructor();\n        stack.set(valueToClone, result);\n        result.message = valueToClone.message;\n        result.name = valueToClone.name;\n        result.stack = valueToClone.stack;\n        result.cause = valueToClone.cause;\n        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n        return result;\n    }\n    if (valueToClone instanceof Boolean) {\n        const result = new Boolean(valueToClone.valueOf());\n        stack.set(valueToClone, result);\n        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n        return result;\n    }\n    if (valueToClone instanceof Number) {\n        const result = new Number(valueToClone.valueOf());\n        stack.set(valueToClone, result);\n        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n        return result;\n    }\n    if (valueToClone instanceof String) {\n        const result = new String(valueToClone.valueOf());\n        stack.set(valueToClone, result);\n        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n        return result;\n    }\n    if (typeof valueToClone === 'object' && isCloneableObject(valueToClone)) {\n        const result = Object.create(Object.getPrototypeOf(valueToClone));\n        stack.set(valueToClone, result);\n        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n        return result;\n    }\n    return valueToClone;\n}\nfunction copyProperties(target, source, objectToClone = target, stack, cloneValue) {\n    const keys = [...Object.keys(source), ...getSymbols.getSymbols(source)];\n    for (let i = 0; i < keys.length; i++) {\n        const key = keys[i];\n        const descriptor = Object.getOwnPropertyDescriptor(target, key);\n        if (descriptor == null || descriptor.writable) {\n            target[key] = cloneDeepWithImpl(source[key], key, objectToClone, stack, cloneValue);\n        }\n    }\n}\nfunction isCloneableObject(object) {\n    switch (getTag.getTag(object)) {\n        case tags.argumentsTag:\n        case tags.arrayTag:\n        case tags.arrayBufferTag:\n        case tags.dataViewTag:\n        case tags.booleanTag:\n        case tags.dateTag:\n        case tags.float32ArrayTag:\n        case tags.float64ArrayTag:\n        case tags.int8ArrayTag:\n        case tags.int16ArrayTag:\n        case tags.int32ArrayTag:\n        case tags.mapTag:\n        case tags.numberTag:\n        case tags.objectTag:\n        case tags.regexpTag:\n        case tags.setTag:\n        case tags.stringTag:\n        case tags.symbolTag:\n        case tags.uint8ArrayTag:\n        case tags.uint8ClampedArrayTag:\n        case tags.uint16ArrayTag:\n        case tags.uint32ArrayTag: {\n            return true;\n        }\n        default: {\n            return false;\n        }\n    }\n}\n\nexports.cloneDeepWith = cloneDeepWith;\nexports.cloneDeepWithImpl = cloneDeepWithImpl;\nexports.copyProperties = copyProperties;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst cloneDeepWith = require('./cloneDeepWith.js');\n\nfunction cloneDeep(obj) {\n    return cloneDeepWith.cloneDeepWithImpl(obj, undefined, obj, new Map(), undefined);\n}\n\nexports.cloneDeep = cloneDeep;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isMatch = require('./isMatch.js');\nconst cloneDeep = require('../../object/cloneDeep.js');\n\nfunction matches(source) {\n    source = cloneDeep.cloneDeep(source);\n    return (target) => {\n        return isMatch.isMatch(target, source);\n    };\n}\n\nexports.matches = matches;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst cloneDeepWith$1 = require('../../object/cloneDeepWith.js');\nconst tags = require('../_internal/tags.js');\n\nfunction cloneDeepWith(obj, customizer) {\n    return cloneDeepWith$1.cloneDeepWith(obj, (value, key, object, stack) => {\n        const cloned = customizer?.(value, key, object, stack);\n        if (cloned !== undefined) {\n            return cloned;\n        }\n        if (typeof obj !== 'object') {\n            return undefined;\n        }\n        switch (Object.prototype.toString.call(obj)) {\n            case tags.numberTag:\n            case tags.stringTag:\n            case tags.booleanTag: {\n                const result = new obj.constructor(obj?.valueOf());\n                cloneDeepWith$1.copyProperties(result, obj);\n                return result;\n            }\n            case tags.argumentsTag: {\n                const result = {};\n                cloneDeepWith$1.copyProperties(result, obj);\n                result.length = obj.length;\n                result[Symbol.iterator] = obj[Symbol.iterator];\n                return result;\n            }\n            default: {\n                return undefined;\n            }\n        }\n    });\n}\n\nexports.cloneDeepWith = cloneDeepWith;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst cloneDeepWith = require('./cloneDeepWith.js');\n\nfunction cloneDeep(obj) {\n    return cloneDeepWith.cloneDeepWith(obj);\n}\n\nexports.cloneDeep = cloneDeep;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst IS_UNSIGNED_INTEGER = /^(?:0|[1-9]\\d*)$/;\nfunction isIndex(value, length = Number.MAX_SAFE_INTEGER) {\n    switch (typeof value) {\n        case 'number': {\n            return Number.isInteger(value) && value >= 0 && value < length;\n        }\n        case 'symbol': {\n            return false;\n        }\n        case 'string': {\n            return IS_UNSIGNED_INTEGER.test(value);\n        }\n    }\n}\n\nexports.isIndex = isIndex;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst getTag = require('../_internal/getTag.js');\n\nfunction isArguments(value) {\n    return value !== null && typeof value === 'object' && getTag.getTag(value) === '[object Arguments]';\n}\n\nexports.isArguments = isArguments;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isDeepKey = require('../_internal/isDeepKey.js');\nconst isIndex = require('../_internal/isIndex.js');\nconst isArguments = require('../predicate/isArguments.js');\nconst toPath = require('../util/toPath.js');\n\nfunction has(object, path) {\n    let resolvedPath;\n    if (Array.isArray(path)) {\n        resolvedPath = path;\n    }\n    else if (typeof path === 'string' && isDeepKey.isDeepKey(path) && object?.[path] == null) {\n        resolvedPath = toPath.toPath(path);\n    }\n    else {\n        resolvedPath = [path];\n    }\n    if (resolvedPath.length === 0) {\n        return false;\n    }\n    let current = object;\n    for (let i = 0; i < resolvedPath.length; i++) {\n        const key = resolvedPath[i];\n        if (current == null || !Object.hasOwn(current, key)) {\n            const isSparseIndex = (Array.isArray(current) || isArguments.isArguments(current)) && isIndex.isIndex(key) && key < current.length;\n            if (!isSparseIndex) {\n                return false;\n            }\n        }\n        current = current[key];\n    }\n    return true;\n}\n\nexports.has = has;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isMatch = require('./isMatch.js');\nconst toKey = require('../_internal/toKey.js');\nconst cloneDeep = require('../object/cloneDeep.js');\nconst get = require('../object/get.js');\nconst has = require('../object/has.js');\n\nfunction matchesProperty(property, source) {\n    switch (typeof property) {\n        case 'object': {\n            if (Object.is(property?.valueOf(), -0)) {\n                property = '-0';\n            }\n            break;\n        }\n        case 'number': {\n            property = toKey.toKey(property);\n            break;\n        }\n    }\n    source = cloneDeep.cloneDeep(source);\n    return function (target) {\n        const result = get.get(target, property);\n        if (result === undefined) {\n            return has.has(target, property);\n        }\n        if (source === undefined) {\n            return result === undefined;\n        }\n        return isMatch.isMatch(result, source);\n    };\n}\n\nexports.matchesProperty = matchesProperty;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst identity = require('../../function/identity.js');\nconst property = require('../object/property.js');\nconst matches = require('../predicate/matches.js');\nconst matchesProperty = require('../predicate/matchesProperty.js');\n\nfunction iteratee(value) {\n    if (value == null) {\n        return identity.identity;\n    }\n    switch (typeof value) {\n        case 'function': {\n            return value;\n        }\n        case 'object': {\n            if (Array.isArray(value) && value.length === 2) {\n                return matchesProperty.matchesProperty(value[0], value[1]);\n            }\n            return matches.matches(value);\n        }\n        case 'string':\n        case 'symbol':\n        case 'number': {\n            return property.property(value);\n        }\n    }\n}\n\nexports.iteratee = iteratee;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst uniqBy$1 = require('../../array/uniqBy.js');\nconst identity = require('../../function/identity.js');\nconst isArrayLikeObject = require('../predicate/isArrayLikeObject.js');\nconst iteratee = require('../util/iteratee.js');\n\nfunction uniqBy(array, iteratee$1 = identity.identity) {\n    if (!isArrayLikeObject.isArrayLikeObject(array)) {\n        return [];\n    }\n    return uniqBy$1.uniqBy(Array.from(array), iteratee.iteratee(iteratee$1));\n}\n\nexports.uniqBy = uniqBy;\n","module.exports = require('../dist/compat/array/uniqBy.js').uniqBy;\n","import uniqBy from 'es-toolkit/compat/uniqBy';\n\n/**\n * This is configuration option that decides how to filter for unique values only:\n *\n * - `false` means \"no filter\"\n * - `true` means \"use recharts default filter\"\n * - function means \"use return of this function as the default key\"\n */\n\nexport function getUniqPayload(payload, option, defaultUniqBy) {\n  if (option === true) {\n    return uniqBy(payload, defaultUniqBy);\n  }\n  if (typeof option === 'function') {\n    return uniqBy(payload, option);\n  }\n  return payload;\n}","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n  useState = React.useState,\n  useEffect = React.useEffect,\n  useLayoutEffect = React.useLayoutEffect,\n  useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n  var value = getSnapshot(),\n    _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n    inst = _useState[0].inst,\n    forceUpdate = _useState[1];\n  useLayoutEffect(\n    function () {\n      inst.value = value;\n      inst.getSnapshot = getSnapshot;\n      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n    },\n    [subscribe, value, getSnapshot]\n  );\n  useEffect(\n    function () {\n      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n      return subscribe(function () {\n        checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n      });\n    },\n    [subscribe]\n  );\n  useDebugValue(value);\n  return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  inst = inst.value;\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(inst, nextValue);\n  } catch (error) {\n    return !0;\n  }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n  return getSnapshot();\n}\nvar shim =\n  \"undefined\" === typeof window ||\n  \"undefined\" === typeof window.document ||\n  \"undefined\" === typeof window.document.createElement\n    ? useSyncExternalStore$1\n    : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n  void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n  module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\"),\n  shim = require(\"use-sync-external-store/shim\");\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n  useSyncExternalStore = shim.useSyncExternalStore,\n  useRef = React.useRef,\n  useEffect = React.useEffect,\n  useMemo = React.useMemo,\n  useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n  subscribe,\n  getSnapshot,\n  getServerSnapshot,\n  selector,\n  isEqual\n) {\n  var instRef = useRef(null);\n  if (null === instRef.current) {\n    var inst = { hasValue: !1, value: null };\n    instRef.current = inst;\n  } else inst = instRef.current;\n  instRef = useMemo(\n    function () {\n      function memoizedSelector(nextSnapshot) {\n        if (!hasMemo) {\n          hasMemo = !0;\n          memoizedSnapshot = nextSnapshot;\n          nextSnapshot = selector(nextSnapshot);\n          if (void 0 !== isEqual && inst.hasValue) {\n            var currentSelection = inst.value;\n            if (isEqual(currentSelection, nextSnapshot))\n              return (memoizedSelection = currentSelection);\n          }\n          return (memoizedSelection = nextSnapshot);\n        }\n        currentSelection = memoizedSelection;\n        if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n        var nextSelection = selector(nextSnapshot);\n        if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n          return (memoizedSnapshot = nextSnapshot), currentSelection;\n        memoizedSnapshot = nextSnapshot;\n        return (memoizedSelection = nextSelection);\n      }\n      var hasMemo = !1,\n        memoizedSnapshot,\n        memoizedSelection,\n        maybeGetServerSnapshot =\n          void 0 === getServerSnapshot ? null : getServerSnapshot;\n      return [\n        function () {\n          return memoizedSelector(getSnapshot());\n        },\n        null === maybeGetServerSnapshot\n          ? void 0\n          : function () {\n              return memoizedSelector(maybeGetServerSnapshot());\n            }\n      ];\n    },\n    [getSnapshot, getServerSnapshot, selector, isEqual]\n  );\n  var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n  useEffect(\n    function () {\n      inst.hasValue = !0;\n      inst.value = value;\n    },\n    [value]\n  );\n  useDebugValue(value);\n  return value;\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.js');\n} else {\n  module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","import { createContext } from 'react';\n\n/*\n * This is a copy of the React-Redux context type, but with our own store type.\n * We could import directly from react-redux like this:\n * import { ReactReduxContextValue } from 'react-redux/src/components/Context';\n * but that makes typescript angry with some errors I am not sure how to resolve\n * so copy it is.\n */\n\n/**\n * We need to use our own independent Redux context because we need to avoid interfering with other people's Redux stores\n * in case they decide to install and use Recharts in another Redux app which is likely to happen.\n *\n * https://react-redux.js.org/using-react-redux/accessing-store#providing-custom-context\n */\nexport var RechartsReduxContext = /*#__PURE__*/createContext(null);","import { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport { useContext } from 'react';\nimport { RechartsReduxContext } from './RechartsReduxContext';\nvar noopDispatch = a => a;\nexport var useAppDispatch = () => {\n  var context = useContext(RechartsReduxContext);\n  if (context) {\n    return context.store.dispatch;\n  }\n  return noopDispatch;\n};\nvar noop = () => {};\nvar addNestedSubNoop = () => noop;\nvar refEquality = (a, b) => a === b;\n\n/**\n * This is a recharts variant of `useSelector` from 'react-redux' package.\n *\n * The difference is that react-redux version will throw an Error when used outside of Redux context.\n *\n * This, recharts version, will return undefined instead.\n *\n * This is because we want to allow using our components outside the Chart wrapper,\n * and have people provide all props explicitly.\n *\n * If however they use the component inside a chart wrapper then those props become optional,\n * and we read them from Redux state instead.\n *\n * @param selector for pulling things out of Redux store; will not be called if the store is not accessible\n * @return whatever the selector returned; or undefined when outside of Redux store\n */\nexport function useAppSelector(selector) {\n  var context = useContext(RechartsReduxContext);\n  return useSyncExternalStoreWithSelector(context ? context.subscription.addNestedSub : addNestedSubNoop, context ? context.store.getState : noop, context ? context.store.getState : noop, context ? selector : noop, refEquality);\n}","// src/devModeChecks/identityFunctionCheck.ts\nvar runIdentityFunctionCheck = (resultFunc, inputSelectorsResults, outputSelectorResult) => {\n  if (inputSelectorsResults.length === 1 && inputSelectorsResults[0] === outputSelectorResult) {\n    let isInputSameAsOutput = false;\n    try {\n      const emptyObject = {};\n      if (resultFunc(emptyObject) === emptyObject)\n        isInputSameAsOutput = true;\n    } catch {\n    }\n    if (isInputSameAsOutput) {\n      let stack = void 0;\n      try {\n        throw new Error();\n      } catch (e) {\n        ;\n        ({ stack } = e);\n      }\n      console.warn(\n        \"The result function returned its own inputs without modification. e.g\\n`createSelector([state => state.todos], todos => todos)`\\nThis could lead to inefficient memoization and unnecessary re-renders.\\nEnsure transformation logic is in the result function, and extraction logic is in the input selectors.\",\n        { stack }\n      );\n    }\n  }\n};\n\n// src/devModeChecks/inputStabilityCheck.ts\nvar runInputStabilityCheck = (inputSelectorResultsObject, options, inputSelectorArgs) => {\n  const { memoize, memoizeOptions } = options;\n  const { inputSelectorResults, inputSelectorResultsCopy } = inputSelectorResultsObject;\n  const createAnEmptyObject = memoize(() => ({}), ...memoizeOptions);\n  const areInputSelectorResultsEqual = createAnEmptyObject.apply(null, inputSelectorResults) === createAnEmptyObject.apply(null, inputSelectorResultsCopy);\n  if (!areInputSelectorResultsEqual) {\n    let stack = void 0;\n    try {\n      throw new Error();\n    } catch (e) {\n      ;\n      ({ stack } = e);\n    }\n    console.warn(\n      \"An input selector returned a different result when passed same arguments.\\nThis means your output selector will likely run more frequently than intended.\\nAvoid returning a new reference inside your input selector, e.g.\\n`createSelector([state => state.todos.map(todo => todo.id)], todoIds => todoIds.length)`\",\n      {\n        arguments: inputSelectorArgs,\n        firstInputs: inputSelectorResults,\n        secondInputs: inputSelectorResultsCopy,\n        stack\n      }\n    );\n  }\n};\n\n// src/devModeChecks/setGlobalDevModeChecks.ts\nvar globalDevModeChecks = {\n  inputStabilityCheck: \"once\",\n  identityFunctionCheck: \"once\"\n};\nvar setGlobalDevModeChecks = (devModeChecks) => {\n  Object.assign(globalDevModeChecks, devModeChecks);\n};\n\n// src/utils.ts\nvar NOT_FOUND = /* @__PURE__ */ Symbol(\"NOT_FOUND\");\nfunction assertIsFunction(func, errorMessage = `expected a function, instead received ${typeof func}`) {\n  if (typeof func !== \"function\") {\n    throw new TypeError(errorMessage);\n  }\n}\nfunction assertIsObject(object, errorMessage = `expected an object, instead received ${typeof object}`) {\n  if (typeof object !== \"object\") {\n    throw new TypeError(errorMessage);\n  }\n}\nfunction assertIsArrayOfFunctions(array, errorMessage = `expected all items to be functions, instead received the following types: `) {\n  if (!array.every((item) => typeof item === \"function\")) {\n    const itemTypes = array.map(\n      (item) => typeof item === \"function\" ? `function ${item.name || \"unnamed\"}()` : typeof item\n    ).join(\", \");\n    throw new TypeError(`${errorMessage}[${itemTypes}]`);\n  }\n}\nvar ensureIsArray = (item) => {\n  return Array.isArray(item) ? item : [item];\n};\nfunction getDependencies(createSelectorArgs) {\n  const dependencies = Array.isArray(createSelectorArgs[0]) ? createSelectorArgs[0] : createSelectorArgs;\n  assertIsArrayOfFunctions(\n    dependencies,\n    `createSelector expects all input-selectors to be functions, but received the following types: `\n  );\n  return dependencies;\n}\nfunction collectInputSelectorResults(dependencies, inputSelectorArgs) {\n  const inputSelectorResults = [];\n  const { length } = dependencies;\n  for (let i = 0; i < length; i++) {\n    inputSelectorResults.push(dependencies[i].apply(null, inputSelectorArgs));\n  }\n  return inputSelectorResults;\n}\nvar getDevModeChecksExecutionInfo = (firstRun, devModeChecks) => {\n  const { identityFunctionCheck, inputStabilityCheck } = {\n    ...globalDevModeChecks,\n    ...devModeChecks\n  };\n  return {\n    identityFunctionCheck: {\n      shouldRun: identityFunctionCheck === \"always\" || identityFunctionCheck === \"once\" && firstRun,\n      run: runIdentityFunctionCheck\n    },\n    inputStabilityCheck: {\n      shouldRun: inputStabilityCheck === \"always\" || inputStabilityCheck === \"once\" && firstRun,\n      run: runInputStabilityCheck\n    }\n  };\n};\n\n// src/autotrackMemoize/autotracking.ts\nvar $REVISION = 0;\nvar CURRENT_TRACKER = null;\nvar Cell = class {\n  revision = $REVISION;\n  _value;\n  _lastValue;\n  _isEqual = tripleEq;\n  constructor(initialValue, isEqual = tripleEq) {\n    this._value = this._lastValue = initialValue;\n    this._isEqual = isEqual;\n  }\n  // Whenever a storage value is read, it'll add itself to the current tracker if\n  // one exists, entangling its state with that cache.\n  get value() {\n    CURRENT_TRACKER?.add(this);\n    return this._value;\n  }\n  // Whenever a storage value is updated, we bump the global revision clock,\n  // assign the revision for this storage to the new value, _and_ we schedule a\n  // rerender. This is important, and it's what makes autotracking  _pull_\n  // based. We don't actively tell the caches which depend on the storage that\n  // anything has happened. Instead, we recompute the caches when needed.\n  set value(newValue) {\n    if (this.value === newValue)\n      return;\n    this._value = newValue;\n    this.revision = ++$REVISION;\n  }\n};\nfunction tripleEq(a, b) {\n  return a === b;\n}\nvar TrackingCache = class {\n  _cachedValue;\n  _cachedRevision = -1;\n  _deps = [];\n  hits = 0;\n  fn;\n  constructor(fn) {\n    this.fn = fn;\n  }\n  clear() {\n    this._cachedValue = void 0;\n    this._cachedRevision = -1;\n    this._deps = [];\n    this.hits = 0;\n  }\n  get value() {\n    if (this.revision > this._cachedRevision) {\n      const { fn } = this;\n      const currentTracker = /* @__PURE__ */ new Set();\n      const prevTracker = CURRENT_TRACKER;\n      CURRENT_TRACKER = currentTracker;\n      this._cachedValue = fn();\n      CURRENT_TRACKER = prevTracker;\n      this.hits++;\n      this._deps = Array.from(currentTracker);\n      this._cachedRevision = this.revision;\n    }\n    CURRENT_TRACKER?.add(this);\n    return this._cachedValue;\n  }\n  get revision() {\n    return Math.max(...this._deps.map((d) => d.revision), 0);\n  }\n};\nfunction getValue(cell) {\n  if (!(cell instanceof Cell)) {\n    console.warn(\"Not a valid cell! \", cell);\n  }\n  return cell.value;\n}\nfunction setValue(storage, value) {\n  if (!(storage instanceof Cell)) {\n    throw new TypeError(\n      \"setValue must be passed a tracked store created with `createStorage`.\"\n    );\n  }\n  storage.value = storage._lastValue = value;\n}\nfunction createCell(initialValue, isEqual = tripleEq) {\n  return new Cell(initialValue, isEqual);\n}\nfunction createCache(fn) {\n  assertIsFunction(\n    fn,\n    \"the first parameter to `createCache` must be a function\"\n  );\n  return new TrackingCache(fn);\n}\n\n// src/autotrackMemoize/tracking.ts\nvar neverEq = (a, b) => false;\nfunction createTag() {\n  return createCell(null, neverEq);\n}\nfunction dirtyTag(tag, value) {\n  setValue(tag, value);\n}\nvar consumeCollection = (node) => {\n  let tag = node.collectionTag;\n  if (tag === null) {\n    tag = node.collectionTag = createTag();\n  }\n  getValue(tag);\n};\nvar dirtyCollection = (node) => {\n  const tag = node.collectionTag;\n  if (tag !== null) {\n    dirtyTag(tag, null);\n  }\n};\n\n// src/autotrackMemoize/proxy.ts\nvar REDUX_PROXY_LABEL = Symbol();\nvar nextId = 0;\nvar proto = Object.getPrototypeOf({});\nvar ObjectTreeNode = class {\n  constructor(value) {\n    this.value = value;\n    this.value = value;\n    this.tag.value = value;\n  }\n  proxy = new Proxy(this, objectProxyHandler);\n  tag = createTag();\n  tags = {};\n  children = {};\n  collectionTag = null;\n  id = nextId++;\n};\nvar objectProxyHandler = {\n  get(node, key) {\n    function calculateResult() {\n      const { value } = node;\n      const childValue = Reflect.get(value, key);\n      if (typeof key === \"symbol\") {\n        return childValue;\n      }\n      if (key in proto) {\n        return childValue;\n      }\n      if (typeof childValue === \"object\" && childValue !== null) {\n        let childNode = node.children[key];\n        if (childNode === void 0) {\n          childNode = node.children[key] = createNode(childValue);\n        }\n        if (childNode.tag) {\n          getValue(childNode.tag);\n        }\n        return childNode.proxy;\n      } else {\n        let tag = node.tags[key];\n        if (tag === void 0) {\n          tag = node.tags[key] = createTag();\n          tag.value = childValue;\n        }\n        getValue(tag);\n        return childValue;\n      }\n    }\n    const res = calculateResult();\n    return res;\n  },\n  ownKeys(node) {\n    consumeCollection(node);\n    return Reflect.ownKeys(node.value);\n  },\n  getOwnPropertyDescriptor(node, prop) {\n    return Reflect.getOwnPropertyDescriptor(node.value, prop);\n  },\n  has(node, prop) {\n    return Reflect.has(node.value, prop);\n  }\n};\nvar ArrayTreeNode = class {\n  constructor(value) {\n    this.value = value;\n    this.value = value;\n    this.tag.value = value;\n  }\n  proxy = new Proxy([this], arrayProxyHandler);\n  tag = createTag();\n  tags = {};\n  children = {};\n  collectionTag = null;\n  id = nextId++;\n};\nvar arrayProxyHandler = {\n  get([node], key) {\n    if (key === \"length\") {\n      consumeCollection(node);\n    }\n    return objectProxyHandler.get(node, key);\n  },\n  ownKeys([node]) {\n    return objectProxyHandler.ownKeys(node);\n  },\n  getOwnPropertyDescriptor([node], prop) {\n    return objectProxyHandler.getOwnPropertyDescriptor(node, prop);\n  },\n  has([node], prop) {\n    return objectProxyHandler.has(node, prop);\n  }\n};\nfunction createNode(value) {\n  if (Array.isArray(value)) {\n    return new ArrayTreeNode(value);\n  }\n  return new ObjectTreeNode(value);\n}\nfunction updateNode(node, newValue) {\n  const { value, tags, children } = node;\n  node.value = newValue;\n  if (Array.isArray(value) && Array.isArray(newValue) && value.length !== newValue.length) {\n    dirtyCollection(node);\n  } else {\n    if (value !== newValue) {\n      let oldKeysSize = 0;\n      let newKeysSize = 0;\n      let anyKeysAdded = false;\n      for (const _key in value) {\n        oldKeysSize++;\n      }\n      for (const key in newValue) {\n        newKeysSize++;\n        if (!(key in value)) {\n          anyKeysAdded = true;\n          break;\n        }\n      }\n      const isDifferent = anyKeysAdded || oldKeysSize !== newKeysSize;\n      if (isDifferent) {\n        dirtyCollection(node);\n      }\n    }\n  }\n  for (const key in tags) {\n    const childValue = value[key];\n    const newChildValue = newValue[key];\n    if (childValue !== newChildValue) {\n      dirtyCollection(node);\n      dirtyTag(tags[key], newChildValue);\n    }\n    if (typeof newChildValue === \"object\" && newChildValue !== null) {\n      delete tags[key];\n    }\n  }\n  for (const key in children) {\n    const childNode = children[key];\n    const newChildValue = newValue[key];\n    const childValue = childNode.value;\n    if (childValue === newChildValue) {\n      continue;\n    } else if (typeof newChildValue === \"object\" && newChildValue !== null) {\n      updateNode(childNode, newChildValue);\n    } else {\n      deleteNode(childNode);\n      delete children[key];\n    }\n  }\n}\nfunction deleteNode(node) {\n  if (node.tag) {\n    dirtyTag(node.tag, null);\n  }\n  dirtyCollection(node);\n  for (const key in node.tags) {\n    dirtyTag(node.tags[key], null);\n  }\n  for (const key in node.children) {\n    deleteNode(node.children[key]);\n  }\n}\n\n// src/lruMemoize.ts\nfunction createSingletonCache(equals) {\n  let entry;\n  return {\n    get(key) {\n      if (entry && equals(entry.key, key)) {\n        return entry.value;\n      }\n      return NOT_FOUND;\n    },\n    put(key, value) {\n      entry = { key, value };\n    },\n    getEntries() {\n      return entry ? [entry] : [];\n    },\n    clear() {\n      entry = void 0;\n    }\n  };\n}\nfunction createLruCache(maxSize, equals) {\n  let entries = [];\n  function get(key) {\n    const cacheIndex = entries.findIndex((entry) => equals(key, entry.key));\n    if (cacheIndex > -1) {\n      const entry = entries[cacheIndex];\n      if (cacheIndex > 0) {\n        entries.splice(cacheIndex, 1);\n        entries.unshift(entry);\n      }\n      return entry.value;\n    }\n    return NOT_FOUND;\n  }\n  function put(key, value) {\n    if (get(key) === NOT_FOUND) {\n      entries.unshift({ key, value });\n      if (entries.length > maxSize) {\n        entries.pop();\n      }\n    }\n  }\n  function getEntries() {\n    return entries;\n  }\n  function clear() {\n    entries = [];\n  }\n  return { get, put, getEntries, clear };\n}\nvar referenceEqualityCheck = (a, b) => a === b;\nfunction createCacheKeyComparator(equalityCheck) {\n  return function areArgumentsShallowlyEqual(prev, next) {\n    if (prev === null || next === null || prev.length !== next.length) {\n      return false;\n    }\n    const { length } = prev;\n    for (let i = 0; i < length; i++) {\n      if (!equalityCheck(prev[i], next[i])) {\n        return false;\n      }\n    }\n    return true;\n  };\n}\nfunction lruMemoize(func, equalityCheckOrOptions) {\n  const providedOptions = typeof equalityCheckOrOptions === \"object\" ? equalityCheckOrOptions : { equalityCheck: equalityCheckOrOptions };\n  const {\n    equalityCheck = referenceEqualityCheck,\n    maxSize = 1,\n    resultEqualityCheck\n  } = providedOptions;\n  const comparator = createCacheKeyComparator(equalityCheck);\n  let resultsCount = 0;\n  const cache = maxSize <= 1 ? createSingletonCache(comparator) : createLruCache(maxSize, comparator);\n  function memoized() {\n    let value = cache.get(arguments);\n    if (value === NOT_FOUND) {\n      value = func.apply(null, arguments);\n      resultsCount++;\n      if (resultEqualityCheck) {\n        const entries = cache.getEntries();\n        const matchingEntry = entries.find(\n          (entry) => resultEqualityCheck(entry.value, value)\n        );\n        if (matchingEntry) {\n          value = matchingEntry.value;\n          resultsCount !== 0 && resultsCount--;\n        }\n      }\n      cache.put(arguments, value);\n    }\n    return value;\n  }\n  memoized.clearCache = () => {\n    cache.clear();\n    memoized.resetResultsCount();\n  };\n  memoized.resultsCount = () => resultsCount;\n  memoized.resetResultsCount = () => {\n    resultsCount = 0;\n  };\n  return memoized;\n}\n\n// src/autotrackMemoize/autotrackMemoize.ts\nfunction autotrackMemoize(func) {\n  const node = createNode(\n    []\n  );\n  let lastArgs = null;\n  const shallowEqual = createCacheKeyComparator(referenceEqualityCheck);\n  const cache = createCache(() => {\n    const res = func.apply(null, node.proxy);\n    return res;\n  });\n  function memoized() {\n    if (!shallowEqual(lastArgs, arguments)) {\n      updateNode(node, arguments);\n      lastArgs = arguments;\n    }\n    return cache.value;\n  }\n  memoized.clearCache = () => {\n    return cache.clear();\n  };\n  return memoized;\n}\n\n// src/weakMapMemoize.ts\nvar StrongRef = class {\n  constructor(value) {\n    this.value = value;\n  }\n  deref() {\n    return this.value;\n  }\n};\nvar Ref = typeof WeakRef !== \"undefined\" ? WeakRef : StrongRef;\nvar UNTERMINATED = 0;\nvar TERMINATED = 1;\nfunction createCacheNode() {\n  return {\n    s: UNTERMINATED,\n    v: void 0,\n    o: null,\n    p: null\n  };\n}\nfunction weakMapMemoize(func, options = {}) {\n  let fnNode = createCacheNode();\n  const { resultEqualityCheck } = options;\n  let lastResult;\n  let resultsCount = 0;\n  function memoized() {\n    let cacheNode = fnNode;\n    const { length } = arguments;\n    for (let i = 0, l = length; i < l; i++) {\n      const arg = arguments[i];\n      if (typeof arg === \"function\" || typeof arg === \"object\" && arg !== null) {\n        let objectCache = cacheNode.o;\n        if (objectCache === null) {\n          cacheNode.o = objectCache = /* @__PURE__ */ new WeakMap();\n        }\n        const objectNode = objectCache.get(arg);\n        if (objectNode === void 0) {\n          cacheNode = createCacheNode();\n          objectCache.set(arg, cacheNode);\n        } else {\n          cacheNode = objectNode;\n        }\n      } else {\n        let primitiveCache = cacheNode.p;\n        if (primitiveCache === null) {\n          cacheNode.p = primitiveCache = /* @__PURE__ */ new Map();\n        }\n        const primitiveNode = primitiveCache.get(arg);\n        if (primitiveNode === void 0) {\n          cacheNode = createCacheNode();\n          primitiveCache.set(arg, cacheNode);\n        } else {\n          cacheNode = primitiveNode;\n        }\n      }\n    }\n    const terminatedNode = cacheNode;\n    let result;\n    if (cacheNode.s === TERMINATED) {\n      result = cacheNode.v;\n    } else {\n      result = func.apply(null, arguments);\n      resultsCount++;\n      if (resultEqualityCheck) {\n        const lastResultValue = lastResult?.deref?.() ?? lastResult;\n        if (lastResultValue != null && resultEqualityCheck(lastResultValue, result)) {\n          result = lastResultValue;\n          resultsCount !== 0 && resultsCount--;\n        }\n        const needsWeakRef = typeof result === \"object\" && result !== null || typeof result === \"function\";\n        lastResult = needsWeakRef ? new Ref(result) : result;\n      }\n    }\n    terminatedNode.s = TERMINATED;\n    terminatedNode.v = result;\n    return result;\n  }\n  memoized.clearCache = () => {\n    fnNode = createCacheNode();\n    memoized.resetResultsCount();\n  };\n  memoized.resultsCount = () => resultsCount;\n  memoized.resetResultsCount = () => {\n    resultsCount = 0;\n  };\n  return memoized;\n}\n\n// src/createSelectorCreator.ts\nfunction createSelectorCreator(memoizeOrOptions, ...memoizeOptionsFromArgs) {\n  const createSelectorCreatorOptions = typeof memoizeOrOptions === \"function\" ? {\n    memoize: memoizeOrOptions,\n    memoizeOptions: memoizeOptionsFromArgs\n  } : memoizeOrOptions;\n  const createSelector2 = (...createSelectorArgs) => {\n    let recomputations = 0;\n    let dependencyRecomputations = 0;\n    let lastResult;\n    let directlyPassedOptions = {};\n    let resultFunc = createSelectorArgs.pop();\n    if (typeof resultFunc === \"object\") {\n      directlyPassedOptions = resultFunc;\n      resultFunc = createSelectorArgs.pop();\n    }\n    assertIsFunction(\n      resultFunc,\n      `createSelector expects an output function after the inputs, but received: [${typeof resultFunc}]`\n    );\n    const combinedOptions = {\n      ...createSelectorCreatorOptions,\n      ...directlyPassedOptions\n    };\n    const {\n      memoize,\n      memoizeOptions = [],\n      argsMemoize = weakMapMemoize,\n      argsMemoizeOptions = [],\n      devModeChecks = {}\n    } = combinedOptions;\n    const finalMemoizeOptions = ensureIsArray(memoizeOptions);\n    const finalArgsMemoizeOptions = ensureIsArray(argsMemoizeOptions);\n    const dependencies = getDependencies(createSelectorArgs);\n    const memoizedResultFunc = memoize(function recomputationWrapper() {\n      recomputations++;\n      return resultFunc.apply(\n        null,\n        arguments\n      );\n    }, ...finalMemoizeOptions);\n    let firstRun = true;\n    const selector = argsMemoize(function dependenciesChecker() {\n      dependencyRecomputations++;\n      const inputSelectorResults = collectInputSelectorResults(\n        dependencies,\n        arguments\n      );\n      lastResult = memoizedResultFunc.apply(null, inputSelectorResults);\n      if (process.env.NODE_ENV !== \"production\") {\n        const { identityFunctionCheck, inputStabilityCheck } = getDevModeChecksExecutionInfo(firstRun, devModeChecks);\n        if (identityFunctionCheck.shouldRun) {\n          identityFunctionCheck.run(\n            resultFunc,\n            inputSelectorResults,\n            lastResult\n          );\n        }\n        if (inputStabilityCheck.shouldRun) {\n          const inputSelectorResultsCopy = collectInputSelectorResults(\n            dependencies,\n            arguments\n          );\n          inputStabilityCheck.run(\n            { inputSelectorResults, inputSelectorResultsCopy },\n            { memoize, memoizeOptions: finalMemoizeOptions },\n            arguments\n          );\n        }\n        if (firstRun)\n          firstRun = false;\n      }\n      return lastResult;\n    }, ...finalArgsMemoizeOptions);\n    return Object.assign(selector, {\n      resultFunc,\n      memoizedResultFunc,\n      dependencies,\n      dependencyRecomputations: () => dependencyRecomputations,\n      resetDependencyRecomputations: () => {\n        dependencyRecomputations = 0;\n      },\n      lastResult: () => lastResult,\n      recomputations: () => recomputations,\n      resetRecomputations: () => {\n        recomputations = 0;\n      },\n      memoize,\n      argsMemoize\n    });\n  };\n  Object.assign(createSelector2, {\n    withTypes: () => createSelector2\n  });\n  return createSelector2;\n}\nvar createSelector = /* @__PURE__ */ createSelectorCreator(weakMapMemoize);\n\n// src/createStructuredSelector.ts\nvar createStructuredSelector = Object.assign(\n  (inputSelectorsObject, selectorCreator = createSelector) => {\n    assertIsObject(\n      inputSelectorsObject,\n      `createStructuredSelector expects first argument to be an object where each property is a selector, instead received a ${typeof inputSelectorsObject}`\n    );\n    const inputSelectorKeys = Object.keys(inputSelectorsObject);\n    const dependencies = inputSelectorKeys.map(\n      (key) => inputSelectorsObject[key]\n    );\n    const structuredSelector = selectorCreator(\n      dependencies,\n      (...inputSelectorResults) => {\n        return inputSelectorResults.reduce((composition, value, index) => {\n          composition[inputSelectorKeys[index]] = value;\n          return composition;\n        }, {});\n      }\n    );\n    return structuredSelector;\n  },\n  { withTypes: () => createStructuredSelector }\n);\nexport {\n  createSelector,\n  createSelectorCreator,\n  createStructuredSelector,\n  lruMemoize,\n  referenceEqualityCheck,\n  setGlobalDevModeChecks,\n  autotrackMemoize as unstable_autotrackMemoize,\n  weakMapMemoize\n};\n//# sourceMappingURL=reselect.mjs.map","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction getPriority(a) {\n    if (typeof a === 'symbol') {\n        return 1;\n    }\n    if (a === null) {\n        return 2;\n    }\n    if (a === undefined) {\n        return 3;\n    }\n    if (a !== a) {\n        return 4;\n    }\n    return 0;\n}\nconst compareValues = (a, b, order) => {\n    if (a !== b) {\n        const aPriority = getPriority(a);\n        const bPriority = getPriority(b);\n        if (aPriority === bPriority && aPriority === 0) {\n            if (a < b) {\n                return order === 'desc' ? 1 : -1;\n            }\n            if (a > b) {\n                return order === 'desc' ? -1 : 1;\n            }\n        }\n        return order === 'desc' ? bPriority - aPriority : aPriority - bPriority;\n    }\n    return 0;\n};\n\nexports.compareValues = compareValues;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction isSymbol(value) {\n    return typeof value === 'symbol' || value instanceof Symbol;\n}\n\nexports.isSymbol = isSymbol;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isSymbol = require('../predicate/isSymbol.js');\n\nconst regexIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/;\nconst regexIsPlainProp = /^\\w*$/;\nfunction isKey(value, object) {\n    if (Array.isArray(value)) {\n        return false;\n    }\n    if (typeof value === 'number' || typeof value === 'boolean' || value == null || isSymbol.isSymbol(value)) {\n        return true;\n    }\n    return ((typeof value === 'string' && (regexIsPlainProp.test(value) || !regexIsDeepProp.test(value))) ||\n        (object != null && Object.hasOwn(object, value)));\n}\n\nexports.isKey = isKey;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst compareValues = require('../_internal/compareValues.js');\nconst isKey = require('../_internal/isKey.js');\nconst toPath = require('../util/toPath.js');\n\nfunction orderBy(collection, criteria, orders, guard) {\n    if (collection == null) {\n        return [];\n    }\n    orders = guard ? undefined : orders;\n    if (!Array.isArray(collection)) {\n        collection = Object.values(collection);\n    }\n    if (!Array.isArray(criteria)) {\n        criteria = criteria == null ? [null] : [criteria];\n    }\n    if (criteria.length === 0) {\n        criteria = [null];\n    }\n    if (!Array.isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n    }\n    orders = orders.map(order => String(order));\n    const getValueByNestedPath = (object, path) => {\n        let target = object;\n        for (let i = 0; i < path.length && target != null; ++i) {\n            target = target[path[i]];\n        }\n        return target;\n    };\n    const getValueByCriterion = (criterion, object) => {\n        if (object == null || criterion == null) {\n            return object;\n        }\n        if (typeof criterion === 'object' && 'key' in criterion) {\n            if (Object.hasOwn(object, criterion.key)) {\n                return object[criterion.key];\n            }\n            return getValueByNestedPath(object, criterion.path);\n        }\n        if (typeof criterion === 'function') {\n            return criterion(object);\n        }\n        if (Array.isArray(criterion)) {\n            return getValueByNestedPath(object, criterion);\n        }\n        if (typeof object === 'object') {\n            return object[criterion];\n        }\n        return object;\n    };\n    const preparedCriteria = criteria.map((criterion) => {\n        if (Array.isArray(criterion) && criterion.length === 1) {\n            criterion = criterion[0];\n        }\n        if (criterion == null || typeof criterion === 'function' || Array.isArray(criterion) || isKey.isKey(criterion)) {\n            return criterion;\n        }\n        return { key: criterion, path: toPath.toPath(criterion) };\n    });\n    const preparedCollection = collection.map(item => ({\n        original: item,\n        criteria: preparedCriteria.map((criterion) => getValueByCriterion(criterion, item)),\n    }));\n    return preparedCollection\n        .slice()\n        .sort((a, b) => {\n        for (let i = 0; i < preparedCriteria.length; i++) {\n            const comparedResult = compareValues.compareValues(a.criteria[i], b.criteria[i], orders[i]);\n            if (comparedResult !== 0) {\n                return comparedResult;\n            }\n        }\n        return 0;\n    })\n        .map(item => item.original);\n}\n\nexports.orderBy = orderBy;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction flatten(arr, depth = 1) {\n    const result = [];\n    const flooredDepth = Math.floor(depth);\n    const recursive = (arr, currentDepth) => {\n        for (let i = 0; i < arr.length; i++) {\n            const item = arr[i];\n            if (Array.isArray(item) && currentDepth < flooredDepth) {\n                recursive(item, currentDepth + 1);\n            }\n            else {\n                result.push(item);\n            }\n        }\n    };\n    recursive(arr, 0);\n    return result;\n}\n\nexports.flatten = flatten;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isIndex = require('./isIndex.js');\nconst isArrayLike = require('../predicate/isArrayLike.js');\nconst isObject = require('../predicate/isObject.js');\nconst eq = require('../util/eq.js');\n\nfunction isIterateeCall(value, index, object) {\n    if (!isObject.isObject(object)) {\n        return false;\n    }\n    if ((typeof index === 'number' && isArrayLike.isArrayLike(object) && isIndex.isIndex(index) && index < object.length) ||\n        (typeof index === 'string' && index in object)) {\n        return eq.eq(object[index], value);\n    }\n    return false;\n}\n\nexports.isIterateeCall = isIterateeCall;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst orderBy = require('./orderBy.js');\nconst flatten = require('../../array/flatten.js');\nconst isIterateeCall = require('../_internal/isIterateeCall.js');\n\nfunction sortBy(collection, ...criteria) {\n    const length = criteria.length;\n    if (length > 1 && isIterateeCall.isIterateeCall(collection, criteria[0], criteria[1])) {\n        criteria = [];\n    }\n    else if (length > 2 && isIterateeCall.isIterateeCall(criteria[0], criteria[1], criteria[2])) {\n        criteria = [criteria[0]];\n    }\n    return orderBy.orderBy(collection, flatten.flatten(criteria), ['asc']);\n}\n\nexports.sortBy = sortBy;\n","module.exports = require('../dist/compat/array/sortBy.js').sortBy;\n","import { createSelector } from 'reselect';\nimport sortBy from 'es-toolkit/compat/sortBy';\nexport var selectLegendSettings = state => state.legend.settings;\nexport var selectLegendSize = state => state.legend.size;\nvar selectAllLegendPayload2DArray = state => state.legend.payload;\nexport var selectLegendPayload = createSelector([selectAllLegendPayload2DArray, selectLegendSettings], (payloads, _ref) => {\n  var {\n    itemSorter\n  } = _ref;\n  var flat = payloads.flat(1);\n  return itemSorter ? sortBy(flat, itemSorter) : flat;\n});","import { useCallback, useState } from 'react';\nvar EPS = 1;\n\n/**\n * TODO this documentation does not reflect what this hook is doing, update it.\n * Stores the `offsetHeight`, `offsetLeft`, `offsetTop`, and `offsetWidth` of a DOM element.\n */\n\n/**\n * Use this to listen to element layout changes.\n *\n * Very useful for reading actual sizes of DOM elements relative to the viewport.\n *\n * @param extraDependencies use this to trigger new DOM dimensions read when any of these change. Good for things like payload and label, that will re-render something down in the children array, but you want to read the layout box of a parent.\n * @returns [lastElementOffset, updateElementOffset] most recent value, and setter. Pass the setter to a DOM element ref like this: `<div ref={updateElementOffset}>`\n */\nexport function useElementOffset() {\n  var extraDependencies = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var [lastBoundingBox, setLastBoundingBox] = useState({\n    height: 0,\n    left: 0,\n    top: 0,\n    width: 0\n  });\n  var updateBoundingBox = useCallback(node => {\n    if (node != null) {\n      var rect = node.getBoundingClientRect();\n      var box = {\n        height: rect.height,\n        left: rect.left,\n        top: rect.top,\n        width: rect.width\n      };\n      if (Math.abs(box.height - lastBoundingBox.height) > EPS || Math.abs(box.left - lastBoundingBox.left) > EPS || Math.abs(box.top - lastBoundingBox.top) > EPS || Math.abs(box.width - lastBoundingBox.width) > EPS) {\n        setLastBoundingBox({\n          height: box.height,\n          left: box.left,\n          top: box.top,\n          width: box.width\n        });\n      }\n    }\n  }, [lastBoundingBox.width, lastBoundingBox.height, lastBoundingBox.top, lastBoundingBox.left, ...extraDependencies]);\n  return [lastBoundingBox, updateBoundingBox];\n}","import { createSlice } from '@reduxjs/toolkit';\nvar initialState = {\n  layoutType: 'horizontal',\n  width: 0,\n  height: 0,\n  margin: {\n    top: 5,\n    right: 5,\n    bottom: 5,\n    left: 5\n  },\n  scale: 1\n};\nvar chartLayoutSlice = createSlice({\n  name: 'chartLayout',\n  initialState,\n  reducers: {\n    setLayout(state, action) {\n      state.layoutType = action.payload;\n    },\n    setChartSize(state, action) {\n      state.width = action.payload.width;\n      state.height = action.payload.height;\n    },\n    setMargin(state, action) {\n      state.margin.top = action.payload.top;\n      state.margin.right = action.payload.right;\n      state.margin.bottom = action.payload.bottom;\n      state.margin.left = action.payload.left;\n    },\n    setScale(state, action) {\n      state.scale = action.payload;\n    }\n  }\n});\nexport var {\n  setMargin,\n  setLayout,\n  setChartSize,\n  setScale\n} = chartLayoutSlice.actions;\nexport var chartLayoutReducer = chartLayoutSlice.reducer;","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { isValidElement } from 'react';\nexport var RADIAN = Math.PI / 180;\nexport var degreeToRadian = angle => angle * Math.PI / 180;\nexport var radianToDegree = angleInRadian => angleInRadian * 180 / Math.PI;\nexport var polarToCartesian = (cx, cy, radius, angle) => ({\n  x: cx + Math.cos(-RADIAN * angle) * radius,\n  y: cy + Math.sin(-RADIAN * angle) * radius\n});\nexport var getMaxRadius = function getMaxRadius(width, height) {\n  var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n  return Math.min(Math.abs(width - (offset.left || 0) - (offset.right || 0)), Math.abs(height - (offset.top || 0) - (offset.bottom || 0))) / 2;\n};\nexport var distanceBetweenPoints = (point, anotherPoint) => {\n  var {\n    x: x1,\n    y: y1\n  } = point;\n  var {\n    x: x2,\n    y: y2\n  } = anotherPoint;\n  return Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2);\n};\nexport var getAngleOfPoint = (_ref, _ref2) => {\n  var {\n    x,\n    y\n  } = _ref;\n  var {\n    cx,\n    cy\n  } = _ref2;\n  var radius = distanceBetweenPoints({\n    x,\n    y\n  }, {\n    x: cx,\n    y: cy\n  });\n  if (radius <= 0) {\n    return {\n      radius,\n      angle: 0\n    };\n  }\n  var cos = (x - cx) / radius;\n  var angleInRadian = Math.acos(cos);\n  if (y > cy) {\n    angleInRadian = 2 * Math.PI - angleInRadian;\n  }\n  return {\n    radius,\n    angle: radianToDegree(angleInRadian),\n    angleInRadian\n  };\n};\nexport var formatAngleOfSector = _ref3 => {\n  var {\n    startAngle,\n    endAngle\n  } = _ref3;\n  var startCnt = Math.floor(startAngle / 360);\n  var endCnt = Math.floor(endAngle / 360);\n  var min = Math.min(startCnt, endCnt);\n  return {\n    startAngle: startAngle - min * 360,\n    endAngle: endAngle - min * 360\n  };\n};\nvar reverseFormatAngleOfSector = (angle, _ref4) => {\n  var {\n    startAngle,\n    endAngle\n  } = _ref4;\n  var startCnt = Math.floor(startAngle / 360);\n  var endCnt = Math.floor(endAngle / 360);\n  var min = Math.min(startCnt, endCnt);\n  return angle + min * 360;\n};\nexport var inRangeOfSector = (_ref5, viewBox) => {\n  var {\n    x,\n    y\n  } = _ref5;\n  var {\n    radius,\n    angle\n  } = getAngleOfPoint({\n    x,\n    y\n  }, viewBox);\n  var {\n    innerRadius,\n    outerRadius\n  } = viewBox;\n  if (radius < innerRadius || radius > outerRadius) {\n    return null;\n  }\n  if (radius === 0) {\n    return null;\n  }\n  var {\n    startAngle,\n    endAngle\n  } = formatAngleOfSector(viewBox);\n  var formatAngle = angle;\n  var inRange;\n  if (startAngle <= endAngle) {\n    while (formatAngle > endAngle) {\n      formatAngle -= 360;\n    }\n    while (formatAngle < startAngle) {\n      formatAngle += 360;\n    }\n    inRange = formatAngle >= startAngle && formatAngle <= endAngle;\n  } else {\n    while (formatAngle > startAngle) {\n      formatAngle -= 360;\n    }\n    while (formatAngle < endAngle) {\n      formatAngle += 360;\n    }\n    inRange = formatAngle >= endAngle && formatAngle <= startAngle;\n  }\n  if (inRange) {\n    return _objectSpread(_objectSpread({}, viewBox), {}, {\n      radius,\n      angle: reverseFormatAngleOfSector(formatAngle, viewBox)\n    });\n  }\n  return null;\n};\nexport var getTickClassName = tick => ! /*#__PURE__*/isValidElement(tick) && typeof tick !== 'function' && typeof tick !== 'boolean' && tick != null ? tick.className : '';","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport sortBy from 'es-toolkit/compat/sortBy';\nimport get from 'es-toolkit/compat/get';\nimport { stack as shapeStack, stackOffsetExpand, stackOffsetNone, stackOffsetSilhouette, stackOffsetWiggle, stackOrderNone } from 'victory-vendor/d3-shape';\nimport { findEntryInArray, isNan, isNullish, isNumber, isNumOrStr, mathSign } from './DataUtils';\nimport { inRangeOfSector, polarToCartesian } from './PolarUtils';\nexport function getValueByDataKey(obj, dataKey, defaultValue) {\n  if (isNullish(obj) || isNullish(dataKey)) {\n    return defaultValue;\n  }\n  if (isNumOrStr(dataKey)) {\n    return get(obj, dataKey, defaultValue);\n  }\n  if (typeof dataKey === 'function') {\n    return dataKey(obj);\n  }\n  return defaultValue;\n}\nexport var calculateActiveTickIndex = (coordinate, ticks, unsortedTicks, axisType, range) => {\n  var _ticks$length;\n  var index = -1;\n  var len = (_ticks$length = ticks === null || ticks === void 0 ? void 0 : ticks.length) !== null && _ticks$length !== void 0 ? _ticks$length : 0;\n\n  // if there are 1 or fewer ticks or if there is no coordinate then the active tick is at index 0\n  if (len <= 1 || coordinate == null) {\n    return 0;\n  }\n  if (axisType === 'angleAxis' && range != null && Math.abs(Math.abs(range[1] - range[0]) - 360) <= 1e-6) {\n    // ticks are distributed in a circle\n    for (var i = 0; i < len; i++) {\n      var before = i > 0 ? unsortedTicks[i - 1].coordinate : unsortedTicks[len - 1].coordinate;\n      var cur = unsortedTicks[i].coordinate;\n      var after = i >= len - 1 ? unsortedTicks[0].coordinate : unsortedTicks[i + 1].coordinate;\n      var sameDirectionCoord = void 0;\n      if (mathSign(cur - before) !== mathSign(after - cur)) {\n        var diffInterval = [];\n        if (mathSign(after - cur) === mathSign(range[1] - range[0])) {\n          sameDirectionCoord = after;\n          var curInRange = cur + range[1] - range[0];\n          diffInterval[0] = Math.min(curInRange, (curInRange + before) / 2);\n          diffInterval[1] = Math.max(curInRange, (curInRange + before) / 2);\n        } else {\n          sameDirectionCoord = before;\n          var afterInRange = after + range[1] - range[0];\n          diffInterval[0] = Math.min(cur, (afterInRange + cur) / 2);\n          diffInterval[1] = Math.max(cur, (afterInRange + cur) / 2);\n        }\n        var sameInterval = [Math.min(cur, (sameDirectionCoord + cur) / 2), Math.max(cur, (sameDirectionCoord + cur) / 2)];\n        if (coordinate > sameInterval[0] && coordinate <= sameInterval[1] || coordinate >= diffInterval[0] && coordinate <= diffInterval[1]) {\n          ({\n            index\n          } = unsortedTicks[i]);\n          break;\n        }\n      } else {\n        var minValue = Math.min(before, after);\n        var maxValue = Math.max(before, after);\n        if (coordinate > (minValue + cur) / 2 && coordinate <= (maxValue + cur) / 2) {\n          ({\n            index\n          } = unsortedTicks[i]);\n          break;\n        }\n      }\n    }\n  } else if (ticks) {\n    // ticks are distributed in a single direction\n    for (var _i = 0; _i < len; _i++) {\n      if (_i === 0 && coordinate <= (ticks[_i].coordinate + ticks[_i + 1].coordinate) / 2 || _i > 0 && _i < len - 1 && coordinate > (ticks[_i].coordinate + ticks[_i - 1].coordinate) / 2 && coordinate <= (ticks[_i].coordinate + ticks[_i + 1].coordinate) / 2 || _i === len - 1 && coordinate > (ticks[_i].coordinate + ticks[_i - 1].coordinate) / 2) {\n        ({\n          index\n        } = ticks[_i]);\n        break;\n      }\n    }\n  }\n  return index;\n};\nexport var appendOffsetOfLegend = (offset, legendSettings, legendSize) => {\n  if (legendSettings && legendSize) {\n    var {\n      width: boxWidth,\n      height: boxHeight\n    } = legendSize;\n    var {\n      align,\n      verticalAlign,\n      layout\n    } = legendSettings;\n    if ((layout === 'vertical' || layout === 'horizontal' && verticalAlign === 'middle') && align !== 'center' && isNumber(offset[align])) {\n      return _objectSpread(_objectSpread({}, offset), {}, {\n        [align]: offset[align] + (boxWidth || 0)\n      });\n    }\n    if ((layout === 'horizontal' || layout === 'vertical' && align === 'center') && verticalAlign !== 'middle' && isNumber(offset[verticalAlign])) {\n      return _objectSpread(_objectSpread({}, offset), {}, {\n        [verticalAlign]: offset[verticalAlign] + (boxHeight || 0)\n      });\n    }\n  }\n  return offset;\n};\nexport var isCategoricalAxis = (layout, axisType) => layout === 'horizontal' && axisType === 'xAxis' || layout === 'vertical' && axisType === 'yAxis' || layout === 'centric' && axisType === 'angleAxis' || layout === 'radial' && axisType === 'radiusAxis';\n\n/**\n * Calculate the Coordinates of grid\n * @param  {Array} ticks           The ticks in axis\n * @param {Number} minValue        The minimum value of axis\n * @param {Number} maxValue        The maximum value of axis\n * @param {boolean} syncWithTicks  Synchronize grid lines with ticks or not\n * @return {Array}                 Coordinates\n */\nexport var getCoordinatesOfGrid = (ticks, minValue, maxValue, syncWithTicks) => {\n  if (syncWithTicks) {\n    return ticks.map(entry => entry.coordinate);\n  }\n  var hasMin, hasMax;\n  var values = ticks.map(entry => {\n    if (entry.coordinate === minValue) {\n      hasMin = true;\n    }\n    if (entry.coordinate === maxValue) {\n      hasMax = true;\n    }\n    return entry.coordinate;\n  });\n  if (!hasMin) {\n    values.push(minValue);\n  }\n  if (!hasMax) {\n    values.push(maxValue);\n  }\n  return values;\n};\n\n/**\n * A subset of d3-scale that Recharts is using\n */\n\n/**\n * Get the ticks of an axis\n * @param  {Object}  axis The configuration of an axis\n * @param {Boolean} isGrid Whether or not are the ticks in grid\n * @param {Boolean} isAll Return the ticks of all the points or not\n * @return {Array}  Ticks\n */\nexport var getTicksOfAxis = (axis, isGrid, isAll) => {\n  if (!axis) {\n    return null;\n  }\n  var {\n    duplicateDomain,\n    type,\n    range,\n    scale,\n    realScaleType,\n    isCategorical,\n    categoricalDomain,\n    tickCount,\n    ticks,\n    niceTicks,\n    axisType\n  } = axis;\n  if (!scale) {\n    return null;\n  }\n  var offsetForBand = realScaleType === 'scaleBand' && scale.bandwidth ? scale.bandwidth() / 2 : 2;\n  var offset = (isGrid || isAll) && type === 'category' && scale.bandwidth ? scale.bandwidth() / offsetForBand : 0;\n  offset = axisType === 'angleAxis' && range && range.length >= 2 ? mathSign(range[0] - range[1]) * 2 * offset : offset;\n\n  // The ticks set by user should only affect the ticks adjacent to axis line\n  if (isGrid && (ticks || niceTicks)) {\n    var result = (ticks || niceTicks || []).map((entry, index) => {\n      var scaleContent = duplicateDomain ? duplicateDomain.indexOf(entry) : entry;\n      return {\n        // If the scaleContent is not a number, the coordinate will be NaN.\n        // That could be the case for example with a PointScale and a string as domain.\n        coordinate: scale(scaleContent) + offset,\n        value: entry,\n        offset,\n        index\n      };\n    });\n    return result.filter(row => !isNan(row.coordinate));\n  }\n\n  // When axis is a categorical axis, but the type of axis is number or the scale of axis is not \"auto\"\n  if (isCategorical && categoricalDomain) {\n    return categoricalDomain.map((entry, index) => ({\n      coordinate: scale(entry) + offset,\n      value: entry,\n      index,\n      offset\n    }));\n  }\n  if (scale.ticks && !isAll && tickCount != null) {\n    return scale.ticks(tickCount).map((entry, index) => ({\n      coordinate: scale(entry) + offset,\n      value: entry,\n      offset,\n      index\n    }));\n  }\n\n  // When axis has duplicated text, serial numbers are used to generate scale\n  return scale.domain().map((entry, index) => ({\n    coordinate: scale(entry) + offset,\n    value: duplicateDomain ? duplicateDomain[entry] : entry,\n    index,\n    offset\n  }));\n};\nvar EPS = 1e-4;\nexport var checkDomainOfScale = scale => {\n  var domain = scale.domain();\n  if (!domain || domain.length <= 2) {\n    return;\n  }\n  var len = domain.length;\n  var range = scale.range();\n  var minValue = Math.min(range[0], range[1]) - EPS;\n  var maxValue = Math.max(range[0], range[1]) + EPS;\n  var first = scale(domain[0]);\n  var last = scale(domain[len - 1]);\n  if (first < minValue || first > maxValue || last < minValue || last > maxValue) {\n    scale.domain([domain[0], domain[len - 1]]);\n  }\n};\n\n/**\n * Both value and domain are tuples of two numbers\n * - but the type stays as array of numbers until we have better support in rest of the app\n * @param value input that will be truncated\n * @param domain boundaries\n * @returns tuple of two numbers\n */\nexport var truncateByDomain = (value, domain) => {\n  if (!domain || domain.length !== 2 || !isNumber(domain[0]) || !isNumber(domain[1])) {\n    return value;\n  }\n  var minValue = Math.min(domain[0], domain[1]);\n  var maxValue = Math.max(domain[0], domain[1]);\n  var result = [value[0], value[1]];\n  if (!isNumber(value[0]) || value[0] < minValue) {\n    result[0] = minValue;\n  }\n  if (!isNumber(value[1]) || value[1] > maxValue) {\n    result[1] = maxValue;\n  }\n  if (result[0] > maxValue) {\n    result[0] = maxValue;\n  }\n  if (result[1] < minValue) {\n    result[1] = minValue;\n  }\n  return result;\n};\n\n/**\n * Stacks all positive numbers above zero and all negative numbers below zero.\n *\n * If all values in the series are positive then this behaves the same as 'none' stacker.\n *\n * @param {Array} series from d3-shape Stack\n * @return {Array} series with applied offset\n */\nexport var offsetSign = series => {\n  var n = series.length;\n  if (n <= 0) {\n    return;\n  }\n  for (var j = 0, m = series[0].length; j < m; ++j) {\n    var positive = 0;\n    var negative = 0;\n    for (var i = 0; i < n; ++i) {\n      var value = isNan(series[i][j][1]) ? series[i][j][0] : series[i][j][1];\n\n      /* eslint-disable prefer-destructuring, no-param-reassign */\n      if (value >= 0) {\n        series[i][j][0] = positive;\n        series[i][j][1] = positive + value;\n        positive = series[i][j][1];\n      } else {\n        series[i][j][0] = negative;\n        series[i][j][1] = negative + value;\n        negative = series[i][j][1];\n      }\n      /* eslint-enable prefer-destructuring, no-param-reassign */\n    }\n  }\n};\n\n/**\n * Replaces all negative values with zero when stacking data.\n *\n * If all values in the series are positive then this behaves the same as 'none' stacker.\n *\n * @param {Array} series from d3-shape Stack\n * @return {Array} series with applied offset\n */\nexport var offsetPositive = series => {\n  var n = series.length;\n  if (n <= 0) {\n    return;\n  }\n  for (var j = 0, m = series[0].length; j < m; ++j) {\n    var positive = 0;\n    for (var i = 0; i < n; ++i) {\n      var value = isNan(series[i][j][1]) ? series[i][j][0] : series[i][j][1];\n\n      /* eslint-disable prefer-destructuring, no-param-reassign */\n      if (value >= 0) {\n        series[i][j][0] = positive;\n        series[i][j][1] = positive + value;\n        positive = series[i][j][1];\n      } else {\n        series[i][j][0] = 0;\n        series[i][j][1] = 0;\n      }\n      /* eslint-enable prefer-destructuring, no-param-reassign */\n    }\n  }\n};\n\n/**\n * Function type to compute offset for stacked data.\n *\n * d3-shape has something fishy going on with its types.\n * In @definitelytyped/d3-shape, this function (the offset accessor) is typed as Series<> => void.\n * However! When I actually open the storybook I can see that the offset accessor actually receives Array<Series<>>.\n * The same I can see in the source code itself:\n * https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/66042\n * That one unfortunately has no types but we can tell it passes three-dimensional array.\n *\n * Which leads me to believe that definitelytyped is wrong on this one.\n * There's open discussion on this topic without much attention:\n * https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/66042\n */\n\nvar STACK_OFFSET_MAP = {\n  sign: offsetSign,\n  // @ts-expect-error definitelytyped types are incorrect\n  expand: stackOffsetExpand,\n  // @ts-expect-error definitelytyped types are incorrect\n  none: stackOffsetNone,\n  // @ts-expect-error definitelytyped types are incorrect\n  silhouette: stackOffsetSilhouette,\n  // @ts-expect-error definitelytyped types are incorrect\n  wiggle: stackOffsetWiggle,\n  positive: offsetPositive\n};\nexport var getStackedData = (data, dataKeys, offsetType) => {\n  var offsetAccessor = STACK_OFFSET_MAP[offsetType];\n  var stack = shapeStack().keys(dataKeys).value((d, key) => +getValueByDataKey(d, key, 0)).order(stackOrderNone)\n  // @ts-expect-error definitelytyped types are incorrect\n  .offset(offsetAccessor);\n  return stack(data);\n};\n\n/**\n * Stack IDs in the external props allow numbers; but internally we use it as an object key\n * and object keys are always strings. Also it would be kinda confusing if stackId=8 and stackId='8' were different stacks\n * so let's just force a string.\n */\n\nexport function getNormalizedStackId(publicStackId) {\n  return publicStackId == null ? undefined : String(publicStackId);\n}\nexport function getCateCoordinateOfLine(_ref) {\n  var {\n    axis,\n    ticks,\n    bandSize,\n    entry,\n    index,\n    dataKey\n  } = _ref;\n  if (axis.type === 'category') {\n    // find coordinate of category axis by the value of category\n    // @ts-expect-error why does this use direct object access instead of getValueByDataKey?\n    if (!axis.allowDuplicatedCategory && axis.dataKey && !isNullish(entry[axis.dataKey])) {\n      // @ts-expect-error why does this use direct object access instead of getValueByDataKey?\n      var matchedTick = findEntryInArray(ticks, 'value', entry[axis.dataKey]);\n      if (matchedTick) {\n        return matchedTick.coordinate + bandSize / 2;\n      }\n    }\n    return ticks[index] ? ticks[index].coordinate + bandSize / 2 : null;\n  }\n  var value = getValueByDataKey(entry, !isNullish(dataKey) ? dataKey : axis.dataKey);\n\n  // @ts-expect-error getValueByDataKey does not validate the output type\n  return !isNullish(value) ? axis.scale(value) : null;\n}\nexport var getCateCoordinateOfBar = _ref2 => {\n  var {\n    axis,\n    ticks,\n    offset,\n    bandSize,\n    entry,\n    index\n  } = _ref2;\n  if (axis.type === 'category') {\n    return ticks[index] ? ticks[index].coordinate + offset : null;\n  }\n  var value = getValueByDataKey(entry, axis.dataKey, axis.scale.domain()[index]);\n  return !isNullish(value) ? axis.scale(value) - bandSize / 2 + offset : null;\n};\nexport var getBaseValueOfBar = _ref3 => {\n  var {\n    numericAxis\n  } = _ref3;\n  var domain = numericAxis.scale.domain();\n  if (numericAxis.type === 'number') {\n    // @ts-expect-error type number means the domain has numbers in it but this relationship is not known to typescript\n    var minValue = Math.min(domain[0], domain[1]);\n    // @ts-expect-error type number means the domain has numbers in it but this relationship is not known to typescript\n    var maxValue = Math.max(domain[0], domain[1]);\n    if (minValue <= 0 && maxValue >= 0) {\n      return 0;\n    }\n    if (maxValue < 0) {\n      return maxValue;\n    }\n    return minValue;\n  }\n  return domain[0];\n};\nvar getDomainOfSingle = data => {\n  var flat = data.flat(2).filter(isNumber);\n  return [Math.min(...flat), Math.max(...flat)];\n};\nvar makeDomainFinite = domain => {\n  return [domain[0] === Infinity ? 0 : domain[0], domain[1] === -Infinity ? 0 : domain[1]];\n};\nexport var getDomainOfStackGroups = (stackGroups, startIndex, endIndex) => {\n  if (stackGroups == null) {\n    return undefined;\n  }\n  return makeDomainFinite(Object.keys(stackGroups).reduce((result, stackId) => {\n    var group = stackGroups[stackId];\n    var {\n      stackedData\n    } = group;\n    var domain = stackedData.reduce((res, entry) => {\n      var s = getDomainOfSingle(entry.slice(startIndex, endIndex + 1));\n      return [Math.min(res[0], s[0]), Math.max(res[1], s[1])];\n    }, [Infinity, -Infinity]);\n    return [Math.min(domain[0], result[0]), Math.max(domain[1], result[1])];\n  }, [Infinity, -Infinity]));\n};\nexport var MIN_VALUE_REG = /^dataMin[\\s]*-[\\s]*([0-9]+([.]{1}[0-9]+){0,1})$/;\nexport var MAX_VALUE_REG = /^dataMax[\\s]*\\+[\\s]*([0-9]+([.]{1}[0-9]+){0,1})$/;\n\n/**\n * Calculate the size between two category\n * @param  {Object} axis  The options of axis\n * @param  {Array}  ticks The ticks of axis\n * @param  {Boolean} isBar if items in axis are bars\n * @return {Number} Size\n */\nexport var getBandSizeOfAxis = (axis, ticks, isBar) => {\n  if (axis && axis.scale && axis.scale.bandwidth) {\n    var bandWidth = axis.scale.bandwidth();\n    if (!isBar || bandWidth > 0) {\n      return bandWidth;\n    }\n  }\n  if (axis && ticks && ticks.length >= 2) {\n    var orderedTicks = sortBy(ticks, o => o.coordinate);\n    var bandSize = Infinity;\n    for (var i = 1, len = orderedTicks.length; i < len; i++) {\n      var cur = orderedTicks[i];\n      var prev = orderedTicks[i - 1];\n      bandSize = Math.min((cur.coordinate || 0) - (prev.coordinate || 0), bandSize);\n    }\n    return bandSize === Infinity ? 0 : bandSize;\n  }\n  return isBar ? undefined : 0;\n};\nexport function getTooltipEntry(_ref4) {\n  var {\n    tooltipEntrySettings,\n    dataKey,\n    payload,\n    value,\n    name\n  } = _ref4;\n  return _objectSpread(_objectSpread({}, tooltipEntrySettings), {}, {\n    dataKey,\n    payload,\n    value,\n    name\n  });\n}\nexport function getTooltipNameProp(nameFromItem, dataKey) {\n  if (nameFromItem) {\n    return String(nameFromItem);\n  }\n  if (typeof dataKey === 'string') {\n    return dataKey;\n  }\n  return undefined;\n}\nexport function inRange(x, y, layout, polarViewBox, offset) {\n  if (layout === 'horizontal' || layout === 'vertical') {\n    var isInRange = x >= offset.left && x <= offset.left + offset.width && y >= offset.top && y <= offset.top + offset.height;\n    return isInRange ? {\n      x,\n      y\n    } : null;\n  }\n  if (polarViewBox) {\n    return inRangeOfSector({\n      x,\n      y\n    }, polarViewBox);\n  }\n  return null;\n}\nexport var getActiveCoordinate = (layout, tooltipTicks, activeIndex, rangeObj) => {\n  var entry = tooltipTicks.find(tick => tick && tick.index === activeIndex);\n  if (entry) {\n    if (layout === 'horizontal') {\n      return {\n        x: entry.coordinate,\n        y: rangeObj.y\n      };\n    }\n    if (layout === 'vertical') {\n      return {\n        x: rangeObj.x,\n        y: entry.coordinate\n      };\n    }\n    if (layout === 'centric') {\n      var _angle = entry.coordinate;\n      var {\n        radius: _radius\n      } = rangeObj;\n      return _objectSpread(_objectSpread(_objectSpread({}, rangeObj), polarToCartesian(rangeObj.cx, rangeObj.cy, _radius, _angle)), {}, {\n        angle: _angle,\n        radius: _radius\n      });\n    }\n    var radius = entry.coordinate;\n    var {\n      angle\n    } = rangeObj;\n    return _objectSpread(_objectSpread(_objectSpread({}, rangeObj), polarToCartesian(rangeObj.cx, rangeObj.cy, radius, angle)), {}, {\n      angle,\n      radius\n    });\n  }\n  return {\n    x: 0,\n    y: 0\n  };\n};\nexport var calculateTooltipPos = (rangeObj, layout) => {\n  if (layout === 'horizontal') {\n    return rangeObj.x;\n  }\n  if (layout === 'vertical') {\n    return rangeObj.y;\n  }\n  if (layout === 'centric') {\n    return rangeObj.angle;\n  }\n  return rangeObj.radius;\n};","export var selectChartWidth = state => state.layout.width;\nexport var selectChartHeight = state => state.layout.height;\nexport var selectContainerScale = state => state.layout.scale;\nexport var selectMargin = state => state.layout.margin;","import { createSelector } from 'reselect';\nexport var selectAllXAxes = createSelector(state => state.cartesianAxis.xAxis, xAxisMap => {\n  return Object.values(xAxisMap);\n});\nexport var selectAllYAxes = createSelector(state => state.cartesianAxis.yAxis, yAxisMap => {\n  return Object.values(yAxisMap);\n});","export var COLOR_PANEL = ['#1890FF', '#66B5FF', '#41D9C7', '#2FC25B', '#6EDB8F', '#9AE65C', '#FACC14', '#E6965C', '#57AD71', '#223273', '#738AE6', '#7564CC', '#8543E0', '#A877ED', '#5C8EE6', '#13C2C2', '#70E0E0', '#5CA3E6', '#3436C7', '#8082FF', '#DD81E6', '#F04864', '#FA7D92', '#D598D9'];\n\n/**\n * We use this attribute to identify which element is the one that the user is touching.\n * The index is the position of the element in the data array.\n * This can be either a number (for array-based charts) or a string (for the charts that have a matrix-shaped data).\n */\nexport var DATA_ITEM_INDEX_ATTRIBUTE_NAME = 'data-recharts-item-index';\n/**\n * We use this attribute to identify which element is the one that the user is touching.\n * DataKey works here as a kind of identifier for the element. It's not a perfect identifier for ~two~ three reasons:\n *\n * 1. There can be two different elements with the same dataKey; we won't know which is it\n * 2. DataKey can be a function, and that serialized will be a `[Function: anonymous]` string\n * which means we will be able to identify that it was a function but can't tell which one.\n * This will lead to some weird bugs. A proper fix would be to either:\n * a) use a unique identifier for each element (passed from props, or generated)\n * b) figure out how to compare the dataKey or graphical item by object reference\n *\n * a) is a fuss because we don't have the unique identifier in props,\n * and b) is possible most of the time except for touchMove events which work differently from mouseEnter/mouseLeave:\n * - while mouseEnter is fired for the element that the mouse is over,\n * touchMove is fired for the element where user has started touching. As the finger moves,\n * we can identify the element that the user is touching by using the elementFromPoint method,\n * but it keeps calling the handler on the element where touchStart was fired.\n *\n * Okay and now I discovered a third reason: the dataKey can be undefined and that's still fine\n * because if dataKey is undefined then graphical elements assume the dataKey of the axes.\n * Which makes it a convenient way of using recharts to render a chart but horrible identifier.\n */\nexport var DATA_ITEM_DATAKEY_ATTRIBUTE_NAME = 'data-recharts-item-data-key';\nexport var DEFAULT_Y_AXIS_WIDTH = 60;","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { createSelector } from 'reselect';\nimport get from 'es-toolkit/compat/get';\nimport { selectLegendSettings, selectLegendSize } from './legendSelectors';\nimport { appendOffsetOfLegend } from '../../util/ChartUtils';\nimport { selectChartHeight, selectChartWidth, selectMargin } from './containerSelectors';\nimport { selectAllXAxes, selectAllYAxes } from './selectAllAxes';\nimport { DEFAULT_Y_AXIS_WIDTH } from '../../util/Constants';\nexport var selectBrushHeight = state => state.brush.height;\nexport var selectChartOffset = createSelector([selectChartWidth, selectChartHeight, selectMargin, selectBrushHeight, selectAllXAxes, selectAllYAxes, selectLegendSettings, selectLegendSize], (chartWidth, chartHeight, margin, brushHeight, xAxes, yAxes, legendSettings, legendSize) => {\n  var offsetH = yAxes.reduce((result, entry) => {\n    var {\n      orientation\n    } = entry;\n    if (!entry.mirror && !entry.hide) {\n      var width = typeof entry.width === 'number' ? entry.width : DEFAULT_Y_AXIS_WIDTH;\n      return _objectSpread(_objectSpread({}, result), {}, {\n        [orientation]: result[orientation] + width\n      });\n    }\n    return result;\n  }, {\n    left: margin.left || 0,\n    right: margin.right || 0\n  });\n  var offsetV = xAxes.reduce((result, entry) => {\n    var {\n      orientation\n    } = entry;\n    if (!entry.mirror && !entry.hide) {\n      return _objectSpread(_objectSpread({}, result), {}, {\n        [orientation]: get(result, \"\".concat(orientation)) + entry.height\n      });\n    }\n    return result;\n  }, {\n    top: margin.top || 0,\n    bottom: margin.bottom || 0\n  });\n  var offset = _objectSpread(_objectSpread({}, offsetV), offsetH);\n  var brushBottom = offset.bottom;\n  offset.bottom += brushHeight;\n  offset = appendOffsetOfLegend(offset, legendSettings, legendSize);\n  var offsetWidth = chartWidth - offset.left - offset.right;\n  var offsetHeight = chartHeight - offset.top - offset.bottom;\n  return _objectSpread(_objectSpread({\n    brushBottom\n  }, offset), {}, {\n    // never return negative values for height and width\n    width: Math.max(offsetWidth, 0),\n    height: Math.max(offsetHeight, 0)\n  });\n});\nexport var selectChartViewBox = createSelector(selectChartOffset, offset => ({\n  x: offset.left,\n  y: offset.top,\n  width: offset.width,\n  height: offset.height\n}));\nexport var selectAxisViewBox = createSelector(selectChartWidth, selectChartHeight, (width, height) => ({\n  x: 0,\n  y: 0,\n  width,\n  height\n}));","import * as React from 'react';\nimport { createContext, useContext } from 'react';\nvar PanoramaContext = /*#__PURE__*/createContext(null);\nexport var useIsPanorama = () => useContext(PanoramaContext) != null;\nexport var PanoramaContextProvider = _ref => {\n  var {\n    children\n  } = _ref;\n  return /*#__PURE__*/React.createElement(PanoramaContext.Provider, {\n    value: true\n  }, children);\n};","import { createSelector } from 'reselect';\nimport { selectChartOffset } from './selectChartOffset';\nimport { selectMargin } from './containerSelectors';\nimport { isNumber } from '../../util/DataUtils';\nexport var selectBrushSettings = state => state.brush;\nexport var selectBrushDimensions = createSelector([selectBrushSettings, selectChartOffset, selectMargin], (brushSettings, offset, margin) => ({\n  height: brushSettings.height,\n  x: isNumber(brushSettings.x) ? brushSettings.x : offset.left,\n  y: isNumber(brushSettings.y) ? brushSettings.y : offset.top + offset.height + offset.brushBottom - ((margin === null || margin === void 0 ? void 0 : margin.bottom) || 0),\n  width: isNumber(brushSettings.width) ? brushSettings.width : offset.width\n}));","import { useEffect } from 'react';\nimport { useAppDispatch, useAppSelector } from '../state/hooks';\nimport { setChartSize, setMargin } from '../state/layoutSlice';\nimport { selectChartOffset, selectChartViewBox } from '../state/selectors/selectChartOffset';\nimport { selectChartHeight, selectChartWidth } from '../state/selectors/containerSelectors';\nimport { useIsPanorama } from './PanoramaContext';\nimport { selectBrushDimensions, selectBrushSettings } from '../state/selectors/brushSelectors';\nexport var useViewBox = () => {\n  var _useAppSelector;\n  var panorama = useIsPanorama();\n  var rootViewBox = useAppSelector(selectChartViewBox);\n  var brushDimensions = useAppSelector(selectBrushDimensions);\n  var brushPadding = (_useAppSelector = useAppSelector(selectBrushSettings)) === null || _useAppSelector === void 0 ? void 0 : _useAppSelector.padding;\n  if (!panorama || !brushDimensions || !brushPadding) {\n    return rootViewBox;\n  }\n  return {\n    width: brushDimensions.width - brushPadding.left - brushPadding.right,\n    height: brushDimensions.height - brushPadding.top - brushPadding.bottom,\n    x: brushPadding.left,\n    y: brushPadding.top\n  };\n};\nvar manyComponentsThrowErrorsIfOffsetIsUndefined = {\n  top: 0,\n  bottom: 0,\n  left: 0,\n  right: 0,\n  width: 0,\n  height: 0,\n  brushBottom: 0\n};\nexport var useOffset = () => {\n  var _useAppSelector2;\n  return (_useAppSelector2 = useAppSelector(selectChartOffset)) !== null && _useAppSelector2 !== void 0 ? _useAppSelector2 : manyComponentsThrowErrorsIfOffsetIsUndefined;\n};\n\n/**\n * Returns the width of the chart in pixels.\n *\n * If you are using chart with hardcoded `width` prop, then the width returned will be the same\n * as the `width` prop on the main chart element.\n *\n * If you are using a chart with a `ResponsiveContainer`, the width will be the size of the chart\n * as the ResponsiveContainer has decided it would be.\n *\n * If the chart has any axes or legend, the `width` will be the size of the chart\n * including the axes and legend. Meaning: adding axes and legend will not change the width.\n *\n * The dimensions do not scale, meaning as user zoom in and out, the width number will not change\n * as the chart gets visually larger or smaller.\n *\n * Returns `undefined` if used outside a chart context.\n *\n * @returns {number | undefined} The width of the chart in pixels, or `undefined` if not in a chart context.\n */\nexport var useChartWidth = () => {\n  return useAppSelector(selectChartWidth);\n};\n\n/**\n * Returns the height of the chart in pixels.\n *\n * If you are using chart with hardcoded `height` props, then the height returned will be the same\n * as the `height` prop on the main chart element.\n *\n * If you are using a chart with a `ResponsiveContainer`, the height will be the size of the chart\n * as the ResponsiveContainer has decided it would be.\n *\n * If the chart has any axes or legend, the `height` will be the size of the chart\n * including the axes and legend. Meaning: adding axes and legend will not change the height.\n *\n * The dimensions do not scale, meaning as user zoom in and out, the height number will not change\n * as the chart gets visually larger or smaller.\n *\n * Returns `undefined` if used outside a chart context.\n *\n * @returns {number | undefined} The height of the chart in pixels, or `undefined` if not in a chart context.\n */\nexport var useChartHeight = () => {\n  return useAppSelector(selectChartHeight);\n};\nvar manyComponentsThrowErrorsIfMarginIsUndefined = {\n  top: 0,\n  right: 0,\n  bottom: 0,\n  left: 0\n};\nexport var useMargin = () => {\n  var _useAppSelector3;\n  return (_useAppSelector3 = useAppSelector(state => state.layout.margin)) !== null && _useAppSelector3 !== void 0 ? _useAppSelector3 : manyComponentsThrowErrorsIfMarginIsUndefined;\n};\nexport var selectChartLayout = state => state.layout.layoutType;\nexport var useChartLayout = () => useAppSelector(selectChartLayout);\nexport var ReportChartSize = props => {\n  var dispatch = useAppDispatch();\n  useEffect(() => {\n    dispatch(setChartSize(props));\n  }, [dispatch, props]);\n  return null;\n};\nexport var ReportChartMargin = _ref => {\n  var {\n    margin\n  } = _ref;\n  var dispatch = useAppDispatch();\n  useEffect(() => {\n    dispatch(setMargin(margin));\n  }, [dispatch, margin]);\n  return null;\n};","// src/utils/env.ts\nvar NOTHING = Symbol.for(\"immer-nothing\");\nvar DRAFTABLE = Symbol.for(\"immer-draftable\");\nvar DRAFT_STATE = Symbol.for(\"immer-state\");\n\n// src/utils/errors.ts\nvar errors = process.env.NODE_ENV !== \"production\" ? [\n  // All error codes, starting by 0:\n  function(plugin) {\n    return `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`;\n  },\n  function(thing) {\n    return `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`;\n  },\n  \"This object has been frozen and should not be mutated\",\n  function(data) {\n    return \"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" + data;\n  },\n  \"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n  \"Immer forbids circular references\",\n  \"The first or second argument to `produce` must be a function\",\n  \"The third argument to `produce` must be a function or undefined\",\n  \"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n  \"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n  function(thing) {\n    return `'current' expects a draft, got: ${thing}`;\n  },\n  \"Object.defineProperty() cannot be used on an Immer draft\",\n  \"Object.setPrototypeOf() cannot be used on an Immer draft\",\n  \"Immer only supports deleting array indices\",\n  \"Immer only supports setting array indices and the 'length' property\",\n  function(thing) {\n    return `'original' expects a draft, got: ${thing}`;\n  }\n  // Note: if more errors are added, the errorOffset in Patches.ts should be increased\n  // See Patches.ts for additional errors\n] : [];\nfunction die(error, ...args) {\n  if (process.env.NODE_ENV !== \"production\") {\n    const e = errors[error];\n    const msg = typeof e === \"function\" ? e.apply(null, args) : e;\n    throw new Error(`[Immer] ${msg}`);\n  }\n  throw new Error(\n    `[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n  );\n}\n\n// src/utils/common.ts\nvar getPrototypeOf = Object.getPrototypeOf;\nfunction isDraft(value) {\n  return !!value && !!value[DRAFT_STATE];\n}\nfunction isDraftable(value) {\n  if (!value)\n    return false;\n  return isPlainObject(value) || Array.isArray(value) || !!value[DRAFTABLE] || !!value.constructor?.[DRAFTABLE] || isMap(value) || isSet(value);\n}\nvar objectCtorString = Object.prototype.constructor.toString();\nvar cachedCtorStrings = /* @__PURE__ */ new WeakMap();\nfunction isPlainObject(value) {\n  if (!value || typeof value !== \"object\")\n    return false;\n  const proto = Object.getPrototypeOf(value);\n  if (proto === null || proto === Object.prototype)\n    return true;\n  const Ctor = Object.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n  if (Ctor === Object)\n    return true;\n  if (typeof Ctor !== \"function\")\n    return false;\n  let ctorString = cachedCtorStrings.get(Ctor);\n  if (ctorString === void 0) {\n    ctorString = Function.toString.call(Ctor);\n    cachedCtorStrings.set(Ctor, ctorString);\n  }\n  return ctorString === objectCtorString;\n}\nfunction original(value) {\n  if (!isDraft(value))\n    die(15, value);\n  return value[DRAFT_STATE].base_;\n}\nfunction each(obj, iter, strict = true) {\n  if (getArchtype(obj) === 0 /* Object */) {\n    const keys = strict ? Reflect.ownKeys(obj) : Object.keys(obj);\n    keys.forEach((key) => {\n      iter(key, obj[key], obj);\n    });\n  } else {\n    obj.forEach((entry, index) => iter(index, entry, obj));\n  }\n}\nfunction getArchtype(thing) {\n  const state = thing[DRAFT_STATE];\n  return state ? state.type_ : Array.isArray(thing) ? 1 /* Array */ : isMap(thing) ? 2 /* Map */ : isSet(thing) ? 3 /* Set */ : 0 /* Object */;\n}\nfunction has(thing, prop) {\n  return getArchtype(thing) === 2 /* Map */ ? thing.has(prop) : Object.prototype.hasOwnProperty.call(thing, prop);\n}\nfunction get(thing, prop) {\n  return getArchtype(thing) === 2 /* Map */ ? thing.get(prop) : thing[prop];\n}\nfunction set(thing, propOrOldValue, value) {\n  const t = getArchtype(thing);\n  if (t === 2 /* Map */)\n    thing.set(propOrOldValue, value);\n  else if (t === 3 /* Set */) {\n    thing.add(value);\n  } else\n    thing[propOrOldValue] = value;\n}\nfunction is(x, y) {\n  if (x === y) {\n    return x !== 0 || 1 / x === 1 / y;\n  } else {\n    return x !== x && y !== y;\n  }\n}\nfunction isMap(target) {\n  return target instanceof Map;\n}\nfunction isSet(target) {\n  return target instanceof Set;\n}\nfunction latest(state) {\n  return state.copy_ || state.base_;\n}\nfunction shallowCopy(base, strict) {\n  if (isMap(base)) {\n    return new Map(base);\n  }\n  if (isSet(base)) {\n    return new Set(base);\n  }\n  if (Array.isArray(base))\n    return Array.prototype.slice.call(base);\n  const isPlain = isPlainObject(base);\n  if (strict === true || strict === \"class_only\" && !isPlain) {\n    const descriptors = Object.getOwnPropertyDescriptors(base);\n    delete descriptors[DRAFT_STATE];\n    let keys = Reflect.ownKeys(descriptors);\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i];\n      const desc = descriptors[key];\n      if (desc.writable === false) {\n        desc.writable = true;\n        desc.configurable = true;\n      }\n      if (desc.get || desc.set)\n        descriptors[key] = {\n          configurable: true,\n          writable: true,\n          // could live with !!desc.set as well here...\n          enumerable: desc.enumerable,\n          value: base[key]\n        };\n    }\n    return Object.create(getPrototypeOf(base), descriptors);\n  } else {\n    const proto = getPrototypeOf(base);\n    if (proto !== null && isPlain) {\n      return { ...base };\n    }\n    const obj = Object.create(proto);\n    return Object.assign(obj, base);\n  }\n}\nfunction freeze(obj, deep = false) {\n  if (isFrozen(obj) || isDraft(obj) || !isDraftable(obj))\n    return obj;\n  if (getArchtype(obj) > 1) {\n    Object.defineProperties(obj, {\n      set: dontMutateMethodOverride,\n      add: dontMutateMethodOverride,\n      clear: dontMutateMethodOverride,\n      delete: dontMutateMethodOverride\n    });\n  }\n  Object.freeze(obj);\n  if (deep)\n    Object.values(obj).forEach((value) => freeze(value, true));\n  return obj;\n}\nfunction dontMutateFrozenCollections() {\n  die(2);\n}\nvar dontMutateMethodOverride = {\n  value: dontMutateFrozenCollections\n};\nfunction isFrozen(obj) {\n  if (obj === null || typeof obj !== \"object\")\n    return true;\n  return Object.isFrozen(obj);\n}\n\n// src/utils/plugins.ts\nvar plugins = {};\nfunction getPlugin(pluginKey) {\n  const plugin = plugins[pluginKey];\n  if (!plugin) {\n    die(0, pluginKey);\n  }\n  return plugin;\n}\nfunction loadPlugin(pluginKey, implementation) {\n  if (!plugins[pluginKey])\n    plugins[pluginKey] = implementation;\n}\n\n// src/core/scope.ts\nvar currentScope;\nfunction getCurrentScope() {\n  return currentScope;\n}\nfunction createScope(parent_, immer_) {\n  return {\n    drafts_: [],\n    parent_,\n    immer_,\n    // Whenever the modified draft contains a draft from another scope, we\n    // need to prevent auto-freezing so the unowned draft can be finalized.\n    canAutoFreeze_: true,\n    unfinalizedDrafts_: 0\n  };\n}\nfunction usePatchesInScope(scope, patchListener) {\n  if (patchListener) {\n    getPlugin(\"Patches\");\n    scope.patches_ = [];\n    scope.inversePatches_ = [];\n    scope.patchListener_ = patchListener;\n  }\n}\nfunction revokeScope(scope) {\n  leaveScope(scope);\n  scope.drafts_.forEach(revokeDraft);\n  scope.drafts_ = null;\n}\nfunction leaveScope(scope) {\n  if (scope === currentScope) {\n    currentScope = scope.parent_;\n  }\n}\nfunction enterScope(immer2) {\n  return currentScope = createScope(currentScope, immer2);\n}\nfunction revokeDraft(draft) {\n  const state = draft[DRAFT_STATE];\n  if (state.type_ === 0 /* Object */ || state.type_ === 1 /* Array */)\n    state.revoke_();\n  else\n    state.revoked_ = true;\n}\n\n// src/core/finalize.ts\nfunction processResult(result, scope) {\n  scope.unfinalizedDrafts_ = scope.drafts_.length;\n  const baseDraft = scope.drafts_[0];\n  const isReplaced = result !== void 0 && result !== baseDraft;\n  if (isReplaced) {\n    if (baseDraft[DRAFT_STATE].modified_) {\n      revokeScope(scope);\n      die(4);\n    }\n    if (isDraftable(result)) {\n      result = finalize(scope, result);\n      if (!scope.parent_)\n        maybeFreeze(scope, result);\n    }\n    if (scope.patches_) {\n      getPlugin(\"Patches\").generateReplacementPatches_(\n        baseDraft[DRAFT_STATE].base_,\n        result,\n        scope.patches_,\n        scope.inversePatches_\n      );\n    }\n  } else {\n    result = finalize(scope, baseDraft, []);\n  }\n  revokeScope(scope);\n  if (scope.patches_) {\n    scope.patchListener_(scope.patches_, scope.inversePatches_);\n  }\n  return result !== NOTHING ? result : void 0;\n}\nfunction finalize(rootScope, value, path) {\n  if (isFrozen(value))\n    return value;\n  const useStrictIteration = rootScope.immer_.shouldUseStrictIteration();\n  const state = value[DRAFT_STATE];\n  if (!state) {\n    each(\n      value,\n      (key, childValue) => finalizeProperty(rootScope, state, value, key, childValue, path),\n      useStrictIteration\n    );\n    return value;\n  }\n  if (state.scope_ !== rootScope)\n    return value;\n  if (!state.modified_) {\n    maybeFreeze(rootScope, state.base_, true);\n    return state.base_;\n  }\n  if (!state.finalized_) {\n    state.finalized_ = true;\n    state.scope_.unfinalizedDrafts_--;\n    const result = state.copy_;\n    let resultEach = result;\n    let isSet2 = false;\n    if (state.type_ === 3 /* Set */) {\n      resultEach = new Set(result);\n      result.clear();\n      isSet2 = true;\n    }\n    each(\n      resultEach,\n      (key, childValue) => finalizeProperty(\n        rootScope,\n        state,\n        result,\n        key,\n        childValue,\n        path,\n        isSet2\n      ),\n      useStrictIteration\n    );\n    maybeFreeze(rootScope, result, false);\n    if (path && rootScope.patches_) {\n      getPlugin(\"Patches\").generatePatches_(\n        state,\n        path,\n        rootScope.patches_,\n        rootScope.inversePatches_\n      );\n    }\n  }\n  return state.copy_;\n}\nfunction finalizeProperty(rootScope, parentState, targetObject, prop, childValue, rootPath, targetIsSet) {\n  if (childValue == null) {\n    return;\n  }\n  if (typeof childValue !== \"object\" && !targetIsSet) {\n    return;\n  }\n  const childIsFrozen = isFrozen(childValue);\n  if (childIsFrozen && !targetIsSet) {\n    return;\n  }\n  if (process.env.NODE_ENV !== \"production\" && childValue === targetObject)\n    die(5);\n  if (isDraft(childValue)) {\n    const path = rootPath && parentState && parentState.type_ !== 3 /* Set */ && // Set objects are atomic since they have no keys.\n    !has(parentState.assigned_, prop) ? rootPath.concat(prop) : void 0;\n    const res = finalize(rootScope, childValue, path);\n    set(targetObject, prop, res);\n    if (isDraft(res)) {\n      rootScope.canAutoFreeze_ = false;\n    } else\n      return;\n  } else if (targetIsSet) {\n    targetObject.add(childValue);\n  }\n  if (isDraftable(childValue) && !childIsFrozen) {\n    if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n      return;\n    }\n    if (parentState && parentState.base_ && parentState.base_[prop] === childValue && childIsFrozen) {\n      return;\n    }\n    finalize(rootScope, childValue);\n    if ((!parentState || !parentState.scope_.parent_) && typeof prop !== \"symbol\" && (isMap(targetObject) ? targetObject.has(prop) : Object.prototype.propertyIsEnumerable.call(targetObject, prop)))\n      maybeFreeze(rootScope, childValue);\n  }\n}\nfunction maybeFreeze(scope, value, deep = false) {\n  if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n    freeze(value, deep);\n  }\n}\n\n// src/core/proxy.ts\nfunction createProxyProxy(base, parent) {\n  const isArray = Array.isArray(base);\n  const state = {\n    type_: isArray ? 1 /* Array */ : 0 /* Object */,\n    // Track which produce call this is associated with.\n    scope_: parent ? parent.scope_ : getCurrentScope(),\n    // True for both shallow and deep changes.\n    modified_: false,\n    // Used during finalization.\n    finalized_: false,\n    // Track which properties have been assigned (true) or deleted (false).\n    assigned_: {},\n    // The parent draft state.\n    parent_: parent,\n    // The base state.\n    base_: base,\n    // The base proxy.\n    draft_: null,\n    // set below\n    // The base copy with any updated values.\n    copy_: null,\n    // Called by the `produce` function.\n    revoke_: null,\n    isManual_: false\n  };\n  let target = state;\n  let traps = objectTraps;\n  if (isArray) {\n    target = [state];\n    traps = arrayTraps;\n  }\n  const { revoke, proxy } = Proxy.revocable(target, traps);\n  state.draft_ = proxy;\n  state.revoke_ = revoke;\n  return proxy;\n}\nvar objectTraps = {\n  get(state, prop) {\n    if (prop === DRAFT_STATE)\n      return state;\n    const source = latest(state);\n    if (!has(source, prop)) {\n      return readPropFromProto(state, source, prop);\n    }\n    const value = source[prop];\n    if (state.finalized_ || !isDraftable(value)) {\n      return value;\n    }\n    if (value === peek(state.base_, prop)) {\n      prepareCopy(state);\n      return state.copy_[prop] = createProxy(value, state);\n    }\n    return value;\n  },\n  has(state, prop) {\n    return prop in latest(state);\n  },\n  ownKeys(state) {\n    return Reflect.ownKeys(latest(state));\n  },\n  set(state, prop, value) {\n    const desc = getDescriptorFromProto(latest(state), prop);\n    if (desc?.set) {\n      desc.set.call(state.draft_, value);\n      return true;\n    }\n    if (!state.modified_) {\n      const current2 = peek(latest(state), prop);\n      const currentState = current2?.[DRAFT_STATE];\n      if (currentState && currentState.base_ === value) {\n        state.copy_[prop] = value;\n        state.assigned_[prop] = false;\n        return true;\n      }\n      if (is(value, current2) && (value !== void 0 || has(state.base_, prop)))\n        return true;\n      prepareCopy(state);\n      markChanged(state);\n    }\n    if (state.copy_[prop] === value && // special case: handle new props with value 'undefined'\n    (value !== void 0 || prop in state.copy_) || // special case: NaN\n    Number.isNaN(value) && Number.isNaN(state.copy_[prop]))\n      return true;\n    state.copy_[prop] = value;\n    state.assigned_[prop] = true;\n    return true;\n  },\n  deleteProperty(state, prop) {\n    if (peek(state.base_, prop) !== void 0 || prop in state.base_) {\n      state.assigned_[prop] = false;\n      prepareCopy(state);\n      markChanged(state);\n    } else {\n      delete state.assigned_[prop];\n    }\n    if (state.copy_) {\n      delete state.copy_[prop];\n    }\n    return true;\n  },\n  // Note: We never coerce `desc.value` into an Immer draft, because we can't make\n  // the same guarantee in ES5 mode.\n  getOwnPropertyDescriptor(state, prop) {\n    const owner = latest(state);\n    const desc = Reflect.getOwnPropertyDescriptor(owner, prop);\n    if (!desc)\n      return desc;\n    return {\n      writable: true,\n      configurable: state.type_ !== 1 /* Array */ || prop !== \"length\",\n      enumerable: desc.enumerable,\n      value: owner[prop]\n    };\n  },\n  defineProperty() {\n    die(11);\n  },\n  getPrototypeOf(state) {\n    return getPrototypeOf(state.base_);\n  },\n  setPrototypeOf() {\n    die(12);\n  }\n};\nvar arrayTraps = {};\neach(objectTraps, (key, fn) => {\n  arrayTraps[key] = function() {\n    arguments[0] = arguments[0][0];\n    return fn.apply(this, arguments);\n  };\n});\narrayTraps.deleteProperty = function(state, prop) {\n  if (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop)))\n    die(13);\n  return arrayTraps.set.call(this, state, prop, void 0);\n};\narrayTraps.set = function(state, prop, value) {\n  if (process.env.NODE_ENV !== \"production\" && prop !== \"length\" && isNaN(parseInt(prop)))\n    die(14);\n  return objectTraps.set.call(this, state[0], prop, value, state[0]);\n};\nfunction peek(draft, prop) {\n  const state = draft[DRAFT_STATE];\n  const source = state ? latest(state) : draft;\n  return source[prop];\n}\nfunction readPropFromProto(state, source, prop) {\n  const desc = getDescriptorFromProto(source, prop);\n  return desc ? `value` in desc ? desc.value : (\n    // This is a very special case, if the prop is a getter defined by the\n    // prototype, we should invoke it with the draft as context!\n    desc.get?.call(state.draft_)\n  ) : void 0;\n}\nfunction getDescriptorFromProto(source, prop) {\n  if (!(prop in source))\n    return void 0;\n  let proto = getPrototypeOf(source);\n  while (proto) {\n    const desc = Object.getOwnPropertyDescriptor(proto, prop);\n    if (desc)\n      return desc;\n    proto = getPrototypeOf(proto);\n  }\n  return void 0;\n}\nfunction markChanged(state) {\n  if (!state.modified_) {\n    state.modified_ = true;\n    if (state.parent_) {\n      markChanged(state.parent_);\n    }\n  }\n}\nfunction prepareCopy(state) {\n  if (!state.copy_) {\n    state.copy_ = shallowCopy(\n      state.base_,\n      state.scope_.immer_.useStrictShallowCopy_\n    );\n  }\n}\n\n// src/core/immerClass.ts\nvar Immer2 = class {\n  constructor(config) {\n    this.autoFreeze_ = true;\n    this.useStrictShallowCopy_ = false;\n    this.useStrictIteration_ = true;\n    /**\n     * The `produce` function takes a value and a \"recipe function\" (whose\n     * return value often depends on the base state). The recipe function is\n     * free to mutate its first argument however it wants. All mutations are\n     * only ever applied to a __copy__ of the base state.\n     *\n     * Pass only a function to create a \"curried producer\" which relieves you\n     * from passing the recipe function every time.\n     *\n     * Only plain objects and arrays are made mutable. All other objects are\n     * considered uncopyable.\n     *\n     * Note: This function is __bound__ to its `Immer` instance.\n     *\n     * @param {any} base - the initial state\n     * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n     * @param {Function} patchListener - optional function that will be called with all the patches produced here\n     * @returns {any} a new state, or the initial state if nothing was modified\n     */\n    this.produce = (base, recipe, patchListener) => {\n      if (typeof base === \"function\" && typeof recipe !== \"function\") {\n        const defaultBase = recipe;\n        recipe = base;\n        const self = this;\n        return function curriedProduce(base2 = defaultBase, ...args) {\n          return self.produce(base2, (draft) => recipe.call(this, draft, ...args));\n        };\n      }\n      if (typeof recipe !== \"function\")\n        die(6);\n      if (patchListener !== void 0 && typeof patchListener !== \"function\")\n        die(7);\n      let result;\n      if (isDraftable(base)) {\n        const scope = enterScope(this);\n        const proxy = createProxy(base, void 0);\n        let hasError = true;\n        try {\n          result = recipe(proxy);\n          hasError = false;\n        } finally {\n          if (hasError)\n            revokeScope(scope);\n          else\n            leaveScope(scope);\n        }\n        usePatchesInScope(scope, patchListener);\n        return processResult(result, scope);\n      } else if (!base || typeof base !== \"object\") {\n        result = recipe(base);\n        if (result === void 0)\n          result = base;\n        if (result === NOTHING)\n          result = void 0;\n        if (this.autoFreeze_)\n          freeze(result, true);\n        if (patchListener) {\n          const p = [];\n          const ip = [];\n          getPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip);\n          patchListener(p, ip);\n        }\n        return result;\n      } else\n        die(1, base);\n    };\n    this.produceWithPatches = (base, recipe) => {\n      if (typeof base === \"function\") {\n        return (state, ...args) => this.produceWithPatches(state, (draft) => base(draft, ...args));\n      }\n      let patches, inversePatches;\n      const result = this.produce(base, recipe, (p, ip) => {\n        patches = p;\n        inversePatches = ip;\n      });\n      return [result, patches, inversePatches];\n    };\n    if (typeof config?.autoFreeze === \"boolean\")\n      this.setAutoFreeze(config.autoFreeze);\n    if (typeof config?.useStrictShallowCopy === \"boolean\")\n      this.setUseStrictShallowCopy(config.useStrictShallowCopy);\n    if (typeof config?.useStrictIteration === \"boolean\")\n      this.setUseStrictIteration(config.useStrictIteration);\n  }\n  createDraft(base) {\n    if (!isDraftable(base))\n      die(8);\n    if (isDraft(base))\n      base = current(base);\n    const scope = enterScope(this);\n    const proxy = createProxy(base, void 0);\n    proxy[DRAFT_STATE].isManual_ = true;\n    leaveScope(scope);\n    return proxy;\n  }\n  finishDraft(draft, patchListener) {\n    const state = draft && draft[DRAFT_STATE];\n    if (!state || !state.isManual_)\n      die(9);\n    const { scope_: scope } = state;\n    usePatchesInScope(scope, patchListener);\n    return processResult(void 0, scope);\n  }\n  /**\n   * Pass true to automatically freeze all copies created by Immer.\n   *\n   * By default, auto-freezing is enabled.\n   */\n  setAutoFreeze(value) {\n    this.autoFreeze_ = value;\n  }\n  /**\n   * Pass true to enable strict shallow copy.\n   *\n   * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n   */\n  setUseStrictShallowCopy(value) {\n    this.useStrictShallowCopy_ = value;\n  }\n  /**\n   * Pass false to use faster iteration that skips non-enumerable properties\n   * but still handles symbols for compatibility.\n   *\n   * By default, strict iteration is enabled (includes all own properties).\n   */\n  setUseStrictIteration(value) {\n    this.useStrictIteration_ = value;\n  }\n  shouldUseStrictIteration() {\n    return this.useStrictIteration_;\n  }\n  applyPatches(base, patches) {\n    let i;\n    for (i = patches.length - 1; i >= 0; i--) {\n      const patch = patches[i];\n      if (patch.path.length === 0 && patch.op === \"replace\") {\n        base = patch.value;\n        break;\n      }\n    }\n    if (i > -1) {\n      patches = patches.slice(i + 1);\n    }\n    const applyPatchesImpl = getPlugin(\"Patches\").applyPatches_;\n    if (isDraft(base)) {\n      return applyPatchesImpl(base, patches);\n    }\n    return this.produce(\n      base,\n      (draft) => applyPatchesImpl(draft, patches)\n    );\n  }\n};\nfunction createProxy(value, parent) {\n  const draft = isMap(value) ? getPlugin(\"MapSet\").proxyMap_(value, parent) : isSet(value) ? getPlugin(\"MapSet\").proxySet_(value, parent) : createProxyProxy(value, parent);\n  const scope = parent ? parent.scope_ : getCurrentScope();\n  scope.drafts_.push(draft);\n  return draft;\n}\n\n// src/core/current.ts\nfunction current(value) {\n  if (!isDraft(value))\n    die(10, value);\n  return currentImpl(value);\n}\nfunction currentImpl(value) {\n  if (!isDraftable(value) || isFrozen(value))\n    return value;\n  const state = value[DRAFT_STATE];\n  let copy;\n  let strict = true;\n  if (state) {\n    if (!state.modified_)\n      return state.base_;\n    state.finalized_ = true;\n    copy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_);\n    strict = state.scope_.immer_.shouldUseStrictIteration();\n  } else {\n    copy = shallowCopy(value, true);\n  }\n  each(\n    copy,\n    (key, childValue) => {\n      set(copy, key, currentImpl(childValue));\n    },\n    strict\n  );\n  if (state) {\n    state.finalized_ = false;\n  }\n  return copy;\n}\n\n// src/plugins/patches.ts\nfunction enablePatches() {\n  const errorOffset = 16;\n  if (process.env.NODE_ENV !== \"production\") {\n    errors.push(\n      'Sets cannot have \"replace\" patches.',\n      function(op) {\n        return \"Unsupported patch operation: \" + op;\n      },\n      function(path) {\n        return \"Cannot apply patch, path doesn't resolve: \" + path;\n      },\n      \"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n    );\n  }\n  const REPLACE = \"replace\";\n  const ADD = \"add\";\n  const REMOVE = \"remove\";\n  function generatePatches_(state, basePath, patches, inversePatches) {\n    switch (state.type_) {\n      case 0 /* Object */:\n      case 2 /* Map */:\n        return generatePatchesFromAssigned(\n          state,\n          basePath,\n          patches,\n          inversePatches\n        );\n      case 1 /* Array */:\n        return generateArrayPatches(state, basePath, patches, inversePatches);\n      case 3 /* Set */:\n        return generateSetPatches(\n          state,\n          basePath,\n          patches,\n          inversePatches\n        );\n    }\n  }\n  function generateArrayPatches(state, basePath, patches, inversePatches) {\n    let { base_, assigned_ } = state;\n    let copy_ = state.copy_;\n    if (copy_.length < base_.length) {\n      ;\n      [base_, copy_] = [copy_, base_];\n      [patches, inversePatches] = [inversePatches, patches];\n    }\n    for (let i = 0; i < base_.length; i++) {\n      if (assigned_[i] && copy_[i] !== base_[i]) {\n        const path = basePath.concat([i]);\n        patches.push({\n          op: REPLACE,\n          path,\n          // Need to maybe clone it, as it can in fact be the original value\n          // due to the base/copy inversion at the start of this function\n          value: clonePatchValueIfNeeded(copy_[i])\n        });\n        inversePatches.push({\n          op: REPLACE,\n          path,\n          value: clonePatchValueIfNeeded(base_[i])\n        });\n      }\n    }\n    for (let i = base_.length; i < copy_.length; i++) {\n      const path = basePath.concat([i]);\n      patches.push({\n        op: ADD,\n        path,\n        // Need to maybe clone it, as it can in fact be the original value\n        // due to the base/copy inversion at the start of this function\n        value: clonePatchValueIfNeeded(copy_[i])\n      });\n    }\n    for (let i = copy_.length - 1; base_.length <= i; --i) {\n      const path = basePath.concat([i]);\n      inversePatches.push({\n        op: REMOVE,\n        path\n      });\n    }\n  }\n  function generatePatchesFromAssigned(state, basePath, patches, inversePatches) {\n    const { base_, copy_ } = state;\n    each(state.assigned_, (key, assignedValue) => {\n      const origValue = get(base_, key);\n      const value = get(copy_, key);\n      const op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD;\n      if (origValue === value && op === REPLACE)\n        return;\n      const path = basePath.concat(key);\n      patches.push(op === REMOVE ? { op, path } : { op, path, value });\n      inversePatches.push(\n        op === ADD ? { op: REMOVE, path } : op === REMOVE ? { op: ADD, path, value: clonePatchValueIfNeeded(origValue) } : { op: REPLACE, path, value: clonePatchValueIfNeeded(origValue) }\n      );\n    });\n  }\n  function generateSetPatches(state, basePath, patches, inversePatches) {\n    let { base_, copy_ } = state;\n    let i = 0;\n    base_.forEach((value) => {\n      if (!copy_.has(value)) {\n        const path = basePath.concat([i]);\n        patches.push({\n          op: REMOVE,\n          path,\n          value\n        });\n        inversePatches.unshift({\n          op: ADD,\n          path,\n          value\n        });\n      }\n      i++;\n    });\n    i = 0;\n    copy_.forEach((value) => {\n      if (!base_.has(value)) {\n        const path = basePath.concat([i]);\n        patches.push({\n          op: ADD,\n          path,\n          value\n        });\n        inversePatches.unshift({\n          op: REMOVE,\n          path,\n          value\n        });\n      }\n      i++;\n    });\n  }\n  function generateReplacementPatches_(baseValue, replacement, patches, inversePatches) {\n    patches.push({\n      op: REPLACE,\n      path: [],\n      value: replacement === NOTHING ? void 0 : replacement\n    });\n    inversePatches.push({\n      op: REPLACE,\n      path: [],\n      value: baseValue\n    });\n  }\n  function applyPatches_(draft, patches) {\n    patches.forEach((patch) => {\n      const { path, op } = patch;\n      let base = draft;\n      for (let i = 0; i < path.length - 1; i++) {\n        const parentType = getArchtype(base);\n        let p = path[i];\n        if (typeof p !== \"string\" && typeof p !== \"number\") {\n          p = \"\" + p;\n        }\n        if ((parentType === 0 /* Object */ || parentType === 1 /* Array */) && (p === \"__proto__\" || p === \"constructor\"))\n          die(errorOffset + 3);\n        if (typeof base === \"function\" && p === \"prototype\")\n          die(errorOffset + 3);\n        base = get(base, p);\n        if (typeof base !== \"object\")\n          die(errorOffset + 2, path.join(\"/\"));\n      }\n      const type = getArchtype(base);\n      const value = deepClonePatchValue(patch.value);\n      const key = path[path.length - 1];\n      switch (op) {\n        case REPLACE:\n          switch (type) {\n            case 2 /* Map */:\n              return base.set(key, value);\n            case 3 /* Set */:\n              die(errorOffset);\n            default:\n              return base[key] = value;\n          }\n        case ADD:\n          switch (type) {\n            case 1 /* Array */:\n              return key === \"-\" ? base.push(value) : base.splice(key, 0, value);\n            case 2 /* Map */:\n              return base.set(key, value);\n            case 3 /* Set */:\n              return base.add(value);\n            default:\n              return base[key] = value;\n          }\n        case REMOVE:\n          switch (type) {\n            case 1 /* Array */:\n              return base.splice(key, 1);\n            case 2 /* Map */:\n              return base.delete(key);\n            case 3 /* Set */:\n              return base.delete(patch.value);\n            default:\n              return delete base[key];\n          }\n        default:\n          die(errorOffset + 1, op);\n      }\n    });\n    return draft;\n  }\n  function deepClonePatchValue(obj) {\n    if (!isDraftable(obj))\n      return obj;\n    if (Array.isArray(obj))\n      return obj.map(deepClonePatchValue);\n    if (isMap(obj))\n      return new Map(\n        Array.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n      );\n    if (isSet(obj))\n      return new Set(Array.from(obj).map(deepClonePatchValue));\n    const cloned = Object.create(getPrototypeOf(obj));\n    for (const key in obj)\n      cloned[key] = deepClonePatchValue(obj[key]);\n    if (has(obj, DRAFTABLE))\n      cloned[DRAFTABLE] = obj[DRAFTABLE];\n    return cloned;\n  }\n  function clonePatchValueIfNeeded(obj) {\n    if (isDraft(obj)) {\n      return deepClonePatchValue(obj);\n    } else\n      return obj;\n  }\n  loadPlugin(\"Patches\", {\n    applyPatches_,\n    generatePatches_,\n    generateReplacementPatches_\n  });\n}\n\n// src/plugins/mapset.ts\nfunction enableMapSet() {\n  class DraftMap extends Map {\n    constructor(target, parent) {\n      super();\n      this[DRAFT_STATE] = {\n        type_: 2 /* Map */,\n        parent_: parent,\n        scope_: parent ? parent.scope_ : getCurrentScope(),\n        modified_: false,\n        finalized_: false,\n        copy_: void 0,\n        assigned_: void 0,\n        base_: target,\n        draft_: this,\n        isManual_: false,\n        revoked_: false\n      };\n    }\n    get size() {\n      return latest(this[DRAFT_STATE]).size;\n    }\n    has(key) {\n      return latest(this[DRAFT_STATE]).has(key);\n    }\n    set(key, value) {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      if (!latest(state).has(key) || latest(state).get(key) !== value) {\n        prepareMapCopy(state);\n        markChanged(state);\n        state.assigned_.set(key, true);\n        state.copy_.set(key, value);\n        state.assigned_.set(key, true);\n      }\n      return this;\n    }\n    delete(key) {\n      if (!this.has(key)) {\n        return false;\n      }\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      prepareMapCopy(state);\n      markChanged(state);\n      if (state.base_.has(key)) {\n        state.assigned_.set(key, false);\n      } else {\n        state.assigned_.delete(key);\n      }\n      state.copy_.delete(key);\n      return true;\n    }\n    clear() {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      if (latest(state).size) {\n        prepareMapCopy(state);\n        markChanged(state);\n        state.assigned_ = /* @__PURE__ */ new Map();\n        each(state.base_, (key) => {\n          state.assigned_.set(key, false);\n        });\n        state.copy_.clear();\n      }\n    }\n    forEach(cb, thisArg) {\n      const state = this[DRAFT_STATE];\n      latest(state).forEach((_value, key, _map) => {\n        cb.call(thisArg, this.get(key), key, this);\n      });\n    }\n    get(key) {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      const value = latest(state).get(key);\n      if (state.finalized_ || !isDraftable(value)) {\n        return value;\n      }\n      if (value !== state.base_.get(key)) {\n        return value;\n      }\n      const draft = createProxy(value, state);\n      prepareMapCopy(state);\n      state.copy_.set(key, draft);\n      return draft;\n    }\n    keys() {\n      return latest(this[DRAFT_STATE]).keys();\n    }\n    values() {\n      const iterator = this.keys();\n      return {\n        [Symbol.iterator]: () => this.values(),\n        next: () => {\n          const r = iterator.next();\n          if (r.done)\n            return r;\n          const value = this.get(r.value);\n          return {\n            done: false,\n            value\n          };\n        }\n      };\n    }\n    entries() {\n      const iterator = this.keys();\n      return {\n        [Symbol.iterator]: () => this.entries(),\n        next: () => {\n          const r = iterator.next();\n          if (r.done)\n            return r;\n          const value = this.get(r.value);\n          return {\n            done: false,\n            value: [r.value, value]\n          };\n        }\n      };\n    }\n    [(DRAFT_STATE, Symbol.iterator)]() {\n      return this.entries();\n    }\n  }\n  function proxyMap_(target, parent) {\n    return new DraftMap(target, parent);\n  }\n  function prepareMapCopy(state) {\n    if (!state.copy_) {\n      state.assigned_ = /* @__PURE__ */ new Map();\n      state.copy_ = new Map(state.base_);\n    }\n  }\n  class DraftSet extends Set {\n    constructor(target, parent) {\n      super();\n      this[DRAFT_STATE] = {\n        type_: 3 /* Set */,\n        parent_: parent,\n        scope_: parent ? parent.scope_ : getCurrentScope(),\n        modified_: false,\n        finalized_: false,\n        copy_: void 0,\n        base_: target,\n        draft_: this,\n        drafts_: /* @__PURE__ */ new Map(),\n        revoked_: false,\n        isManual_: false\n      };\n    }\n    get size() {\n      return latest(this[DRAFT_STATE]).size;\n    }\n    has(value) {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      if (!state.copy_) {\n        return state.base_.has(value);\n      }\n      if (state.copy_.has(value))\n        return true;\n      if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n        return true;\n      return false;\n    }\n    add(value) {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      if (!this.has(value)) {\n        prepareSetCopy(state);\n        markChanged(state);\n        state.copy_.add(value);\n      }\n      return this;\n    }\n    delete(value) {\n      if (!this.has(value)) {\n        return false;\n      }\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      prepareSetCopy(state);\n      markChanged(state);\n      return state.copy_.delete(value) || (state.drafts_.has(value) ? state.copy_.delete(state.drafts_.get(value)) : (\n        /* istanbul ignore next */\n        false\n      ));\n    }\n    clear() {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      if (latest(state).size) {\n        prepareSetCopy(state);\n        markChanged(state);\n        state.copy_.clear();\n      }\n    }\n    values() {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      prepareSetCopy(state);\n      return state.copy_.values();\n    }\n    entries() {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      prepareSetCopy(state);\n      return state.copy_.entries();\n    }\n    keys() {\n      return this.values();\n    }\n    [(DRAFT_STATE, Symbol.iterator)]() {\n      return this.values();\n    }\n    forEach(cb, thisArg) {\n      const iterator = this.values();\n      let result = iterator.next();\n      while (!result.done) {\n        cb.call(thisArg, result.value, result.value, this);\n        result = iterator.next();\n      }\n    }\n  }\n  function proxySet_(target, parent) {\n    return new DraftSet(target, parent);\n  }\n  function prepareSetCopy(state) {\n    if (!state.copy_) {\n      state.copy_ = /* @__PURE__ */ new Set();\n      state.base_.forEach((value) => {\n        if (isDraftable(value)) {\n          const draft = createProxy(value, state);\n          state.drafts_.set(value, draft);\n          state.copy_.add(draft);\n        } else {\n          state.copy_.add(value);\n        }\n      });\n    }\n  }\n  function assertUnrevoked(state) {\n    if (state.revoked_)\n      die(3, JSON.stringify(latest(state)));\n  }\n  loadPlugin(\"MapSet\", { proxyMap_, proxySet_ });\n}\n\n// src/immer.ts\nvar immer = new Immer2();\nvar produce = immer.produce;\nvar produceWithPatches = /* @__PURE__ */ immer.produceWithPatches.bind(\n  immer\n);\nvar setAutoFreeze = /* @__PURE__ */ immer.setAutoFreeze.bind(immer);\nvar setUseStrictShallowCopy = /* @__PURE__ */ immer.setUseStrictShallowCopy.bind(\n  immer\n);\nvar setUseStrictIteration = /* @__PURE__ */ immer.setUseStrictIteration.bind(\n  immer\n);\nvar applyPatches = /* @__PURE__ */ immer.applyPatches.bind(immer);\nvar createDraft = /* @__PURE__ */ immer.createDraft.bind(immer);\nvar finishDraft = /* @__PURE__ */ immer.finishDraft.bind(immer);\nfunction castDraft(value) {\n  return value;\n}\nfunction castImmutable(value) {\n  return value;\n}\nexport {\n  Immer2 as Immer,\n  applyPatches,\n  castDraft,\n  castImmutable,\n  createDraft,\n  current,\n  enableMapSet,\n  enablePatches,\n  finishDraft,\n  freeze,\n  DRAFTABLE as immerable,\n  isDraft,\n  isDraftable,\n  NOTHING as nothing,\n  original,\n  produce,\n  produceWithPatches,\n  setAutoFreeze,\n  setUseStrictIteration,\n  setUseStrictShallowCopy\n};\n//# sourceMappingURL=immer.mjs.map","import { createSlice, current } from '@reduxjs/toolkit';\nimport { castDraft } from 'immer';\n\n/**\n * The properties inside this state update independently of each other and quite often.\n * When selecting, never select the whole state because you are going to get\n * unnecessary re-renders. Select only the properties you need.\n *\n * This is why this state type is not exported - don't use it directly.\n */\n\nvar initialState = {\n  settings: {\n    layout: 'horizontal',\n    align: 'center',\n    verticalAlign: 'middle',\n    itemSorter: 'value'\n  },\n  size: {\n    width: 0,\n    height: 0\n  },\n  payload: []\n};\nvar legendSlice = createSlice({\n  name: 'legend',\n  initialState,\n  reducers: {\n    setLegendSize(state, action) {\n      state.size.width = action.payload.width;\n      state.size.height = action.payload.height;\n    },\n    setLegendSettings(state, action) {\n      state.settings.align = action.payload.align;\n      state.settings.layout = action.payload.layout;\n      state.settings.verticalAlign = action.payload.verticalAlign;\n      state.settings.itemSorter = action.payload.itemSorter;\n    },\n    addLegendPayload(state, action) {\n      state.payload.push(castDraft(action.payload));\n    },\n    removeLegendPayload(state, action) {\n      var index = current(state).payload.indexOf(castDraft(action.payload));\n      if (index > -1) {\n        state.payload.splice(index, 1);\n      }\n    }\n  }\n});\nexport var {\n  setLegendSize,\n  setLegendSettings,\n  addLegendPayload,\n  removeLegendPayload\n} = legendSlice.actions;\nexport var legendReducer = legendSlice.reducer;","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/**\n * @fileOverview Default Tooltip Content\n */\n\nimport * as React from 'react';\nimport sortBy from 'es-toolkit/compat/sortBy';\nimport { clsx } from 'clsx';\nimport { isNullish, isNumOrStr } from '../util/DataUtils';\nfunction defaultFormatter(value) {\n  return Array.isArray(value) && isNumOrStr(value[0]) && isNumOrStr(value[1]) ? value.join(' ~ ') : value;\n}\nexport var DefaultTooltipContent = props => {\n  var {\n    separator = ' : ',\n    contentStyle = {},\n    itemStyle = {},\n    labelStyle = {},\n    payload,\n    formatter,\n    itemSorter,\n    wrapperClassName,\n    labelClassName,\n    label,\n    labelFormatter,\n    accessibilityLayer = false\n  } = props;\n  var renderContent = () => {\n    if (payload && payload.length) {\n      var listStyle = {\n        padding: 0,\n        margin: 0\n      };\n      var items = (itemSorter ? sortBy(payload, itemSorter) : payload).map((entry, i) => {\n        if (entry.type === 'none') {\n          return null;\n        }\n        var finalFormatter = entry.formatter || formatter || defaultFormatter;\n        var {\n          value,\n          name\n        } = entry;\n        var finalValue = value;\n        var finalName = name;\n        if (finalFormatter) {\n          var formatted = finalFormatter(value, name, entry, i, payload);\n          if (Array.isArray(formatted)) {\n            [finalValue, finalName] = formatted;\n          } else if (formatted != null) {\n            finalValue = formatted;\n          } else {\n            return null;\n          }\n        }\n        var finalItemStyle = _objectSpread({\n          display: 'block',\n          paddingTop: 4,\n          paddingBottom: 4,\n          color: entry.color || '#000'\n        }, itemStyle);\n        return (\n          /*#__PURE__*/\n          // eslint-disable-next-line react/no-array-index-key\n          React.createElement(\"li\", {\n            className: \"recharts-tooltip-item\",\n            key: \"tooltip-item-\".concat(i),\n            style: finalItemStyle\n          }, isNumOrStr(finalName) ? /*#__PURE__*/React.createElement(\"span\", {\n            className: \"recharts-tooltip-item-name\"\n          }, finalName) : null, isNumOrStr(finalName) ? /*#__PURE__*/React.createElement(\"span\", {\n            className: \"recharts-tooltip-item-separator\"\n          }, separator) : null, /*#__PURE__*/React.createElement(\"span\", {\n            className: \"recharts-tooltip-item-value\"\n          }, finalValue), /*#__PURE__*/React.createElement(\"span\", {\n            className: \"recharts-tooltip-item-unit\"\n          }, entry.unit || ''))\n        );\n      });\n      return /*#__PURE__*/React.createElement(\"ul\", {\n        className: \"recharts-tooltip-item-list\",\n        style: listStyle\n      }, items);\n    }\n    return null;\n  };\n  var finalStyle = _objectSpread({\n    margin: 0,\n    padding: 10,\n    backgroundColor: '#fff',\n    border: '1px solid #ccc',\n    whiteSpace: 'nowrap'\n  }, contentStyle);\n  var finalLabelStyle = _objectSpread({\n    margin: 0\n  }, labelStyle);\n  var hasLabel = !isNullish(label);\n  var finalLabel = hasLabel ? label : '';\n  var wrapperCN = clsx('recharts-default-tooltip', wrapperClassName);\n  var labelCN = clsx('recharts-tooltip-label', labelClassName);\n  if (hasLabel && labelFormatter && payload !== undefined && payload !== null) {\n    finalLabel = labelFormatter(label, payload);\n  }\n  var accessibilityAttributes = accessibilityLayer ? {\n    role: 'status',\n    'aria-live': 'assertive'\n  } : {};\n  return /*#__PURE__*/React.createElement(\"div\", _extends({\n    className: wrapperCN,\n    style: finalStyle\n  }, accessibilityAttributes), /*#__PURE__*/React.createElement(\"p\", {\n    className: labelCN,\n    style: finalLabelStyle\n  }, /*#__PURE__*/React.isValidElement(finalLabel) ? finalLabel : \"\".concat(finalLabel)), renderContent());\n};","import { clsx } from 'clsx';\nimport { isNumber } from '../DataUtils';\nvar CSS_CLASS_PREFIX = 'recharts-tooltip-wrapper';\nvar TOOLTIP_HIDDEN = {\n  visibility: 'hidden'\n};\nexport function getTooltipCSSClassName(_ref) {\n  var {\n    coordinate,\n    translateX,\n    translateY\n  } = _ref;\n  return clsx(CSS_CLASS_PREFIX, {\n    [\"\".concat(CSS_CLASS_PREFIX, \"-right\")]: isNumber(translateX) && coordinate && isNumber(coordinate.x) && translateX >= coordinate.x,\n    [\"\".concat(CSS_CLASS_PREFIX, \"-left\")]: isNumber(translateX) && coordinate && isNumber(coordinate.x) && translateX < coordinate.x,\n    [\"\".concat(CSS_CLASS_PREFIX, \"-bottom\")]: isNumber(translateY) && coordinate && isNumber(coordinate.y) && translateY >= coordinate.y,\n    [\"\".concat(CSS_CLASS_PREFIX, \"-top\")]: isNumber(translateY) && coordinate && isNumber(coordinate.y) && translateY < coordinate.y\n  });\n}\nexport function getTooltipTranslateXY(_ref2) {\n  var {\n    allowEscapeViewBox,\n    coordinate,\n    key,\n    offsetTopLeft,\n    position,\n    reverseDirection,\n    tooltipDimension,\n    viewBox,\n    viewBoxDimension\n  } = _ref2;\n  if (position && isNumber(position[key])) {\n    return position[key];\n  }\n  var negative = coordinate[key] - tooltipDimension - (offsetTopLeft > 0 ? offsetTopLeft : 0);\n  var positive = coordinate[key] + offsetTopLeft;\n  if (allowEscapeViewBox[key]) {\n    return reverseDirection[key] ? negative : positive;\n  }\n  var viewBoxKey = viewBox[key];\n  if (viewBoxKey == null) {\n    return 0;\n  }\n  if (reverseDirection[key]) {\n    var _tooltipBoundary = negative;\n    var _viewBoxBoundary = viewBoxKey;\n    if (_tooltipBoundary < _viewBoxBoundary) {\n      return Math.max(positive, viewBoxKey);\n    }\n    return Math.max(negative, viewBoxKey);\n  }\n  if (viewBoxDimension == null) {\n    return 0;\n  }\n  var tooltipBoundary = positive + tooltipDimension;\n  var viewBoxBoundary = viewBoxKey + viewBoxDimension;\n  if (tooltipBoundary > viewBoxBoundary) {\n    return Math.max(negative, viewBoxKey);\n  }\n  return Math.max(positive, viewBoxKey);\n}\nexport function getTransformStyle(_ref3) {\n  var {\n    translateX,\n    translateY,\n    useTranslate3d\n  } = _ref3;\n  return {\n    transform: useTranslate3d ? \"translate3d(\".concat(translateX, \"px, \").concat(translateY, \"px, 0)\") : \"translate(\".concat(translateX, \"px, \").concat(translateY, \"px)\")\n  };\n}\nexport function getTooltipTranslate(_ref4) {\n  var {\n    allowEscapeViewBox,\n    coordinate,\n    offsetTopLeft,\n    position,\n    reverseDirection,\n    tooltipBox,\n    useTranslate3d,\n    viewBox\n  } = _ref4;\n  var cssProperties, translateX, translateY;\n  if (tooltipBox.height > 0 && tooltipBox.width > 0 && coordinate) {\n    translateX = getTooltipTranslateXY({\n      allowEscapeViewBox,\n      coordinate,\n      key: 'x',\n      offsetTopLeft,\n      position,\n      reverseDirection,\n      tooltipDimension: tooltipBox.width,\n      viewBox,\n      viewBoxDimension: viewBox.width\n    });\n    translateY = getTooltipTranslateXY({\n      allowEscapeViewBox,\n      coordinate,\n      key: 'y',\n      offsetTopLeft,\n      position,\n      reverseDirection,\n      tooltipDimension: tooltipBox.height,\n      viewBox,\n      viewBoxDimension: viewBox.height\n    });\n    cssProperties = getTransformStyle({\n      translateX,\n      translateY,\n      useTranslate3d\n    });\n  } else {\n    cssProperties = TOOLTIP_HIDDEN;\n  }\n  return {\n    cssProperties,\n    cssClasses: getTooltipCSSClassName({\n      translateX,\n      translateY,\n      coordinate\n    })\n  };\n}","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport * as React from 'react';\nimport { PureComponent } from 'react';\nimport { getTooltipTranslate } from '../util/tooltip/translate';\nexport class TooltipBoundingBox extends PureComponent {\n  constructor() {\n    super(...arguments);\n    _defineProperty(this, \"state\", {\n      dismissed: false,\n      dismissedAtCoordinate: {\n        x: 0,\n        y: 0\n      }\n    });\n    _defineProperty(this, \"handleKeyDown\", event => {\n      if (event.key === 'Escape') {\n        var _this$props$coordinat, _this$props$coordinat2, _this$props$coordinat3, _this$props$coordinat4;\n        this.setState({\n          dismissed: true,\n          dismissedAtCoordinate: {\n            x: (_this$props$coordinat = (_this$props$coordinat2 = this.props.coordinate) === null || _this$props$coordinat2 === void 0 ? void 0 : _this$props$coordinat2.x) !== null && _this$props$coordinat !== void 0 ? _this$props$coordinat : 0,\n            y: (_this$props$coordinat3 = (_this$props$coordinat4 = this.props.coordinate) === null || _this$props$coordinat4 === void 0 ? void 0 : _this$props$coordinat4.y) !== null && _this$props$coordinat3 !== void 0 ? _this$props$coordinat3 : 0\n          }\n        });\n      }\n    });\n  }\n  componentDidMount() {\n    document.addEventListener('keydown', this.handleKeyDown);\n  }\n  componentWillUnmount() {\n    document.removeEventListener('keydown', this.handleKeyDown);\n  }\n  componentDidUpdate() {\n    var _this$props$coordinat5, _this$props$coordinat6;\n    if (!this.state.dismissed) {\n      return;\n    }\n    if (((_this$props$coordinat5 = this.props.coordinate) === null || _this$props$coordinat5 === void 0 ? void 0 : _this$props$coordinat5.x) !== this.state.dismissedAtCoordinate.x || ((_this$props$coordinat6 = this.props.coordinate) === null || _this$props$coordinat6 === void 0 ? void 0 : _this$props$coordinat6.y) !== this.state.dismissedAtCoordinate.y) {\n      this.state.dismissed = false;\n    }\n  }\n  render() {\n    var {\n      active,\n      allowEscapeViewBox,\n      animationDuration,\n      animationEasing,\n      children,\n      coordinate,\n      hasPayload,\n      isAnimationActive,\n      offset,\n      position,\n      reverseDirection,\n      useTranslate3d,\n      viewBox,\n      wrapperStyle,\n      lastBoundingBox,\n      innerRef,\n      hasPortalFromProps\n    } = this.props;\n    var {\n      cssClasses,\n      cssProperties\n    } = getTooltipTranslate({\n      allowEscapeViewBox,\n      coordinate,\n      offsetTopLeft: offset,\n      position,\n      reverseDirection,\n      tooltipBox: {\n        height: lastBoundingBox.height,\n        width: lastBoundingBox.width\n      },\n      useTranslate3d,\n      viewBox\n    });\n\n    // do not use absolute styles if the user has passed a custom portal prop\n    var positionStyles = hasPortalFromProps ? {} : _objectSpread(_objectSpread({\n      transition: isAnimationActive && active ? \"transform \".concat(animationDuration, \"ms \").concat(animationEasing) : undefined\n    }, cssProperties), {}, {\n      pointerEvents: 'none',\n      visibility: !this.state.dismissed && active && hasPayload ? 'visible' : 'hidden',\n      position: 'absolute',\n      top: 0,\n      left: 0\n    });\n    var outerStyle = _objectSpread(_objectSpread({}, positionStyles), {}, {\n      visibility: !this.state.dismissed && active && hasPayload ? 'visible' : 'hidden'\n    }, wrapperStyle);\n    return (\n      /*#__PURE__*/\n      // This element allow listening to the `Escape` key. See https://github.com/recharts/recharts/pull/2925\n      React.createElement(\"div\", {\n        // @ts-expect-error typescript library does not recognize xmlns attribute, but it's required for an HTML chunk inside SVG.\n        xmlns: \"http://www.w3.org/1999/xhtml\",\n        tabIndex: -1,\n        className: cssClasses,\n        style: outerStyle,\n        ref: innerRef\n      }, children)\n    );\n  }\n}","var parseIsSsrByDefault = () => !(typeof window !== 'undefined' && window.document && Boolean(window.document.createElement) && window.setTimeout);\nexport var Global = {\n  isSsr: parseIsSsrByDefault()\n};","import { useAppSelector } from '../state/hooks';\nexport var useAccessibilityLayer = () => useAppSelector(state => state.rootProps.accessibilityLayer);","export function isWellBehavedNumber(n) {\n  return Number.isFinite(n);\n}\nexport function isPositiveNumber(n) {\n  return typeof n === 'number' && n > 0 && Number.isFinite(n);\n}","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/**\n * @fileOverview Curve\n */\nimport * as React from 'react';\nimport { line as shapeLine, area as shapeArea, curveBasisClosed, curveBasisOpen, curveBasis, curveBumpX, curveBumpY, curveLinearClosed, curveLinear, curveMonotoneX, curveMonotoneY, curveNatural, curveStep, curveStepAfter, curveStepBefore } from 'victory-vendor/d3-shape';\nimport { clsx } from 'clsx';\nimport { adaptEventHandlers } from '../util/types';\nimport { filterProps } from '../util/ReactUtils';\nimport { isNumber, upperFirst } from '../util/DataUtils';\nimport { isWellBehavedNumber } from '../util/isWellBehavedNumber';\nvar CURVE_FACTORIES = {\n  curveBasisClosed,\n  curveBasisOpen,\n  curveBasis,\n  curveBumpX,\n  curveBumpY,\n  curveLinearClosed,\n  curveLinear,\n  curveMonotoneX,\n  curveMonotoneY,\n  curveNatural,\n  curveStep,\n  curveStepAfter,\n  curveStepBefore\n};\n\n/**\n * @deprecated use {@link Coordinate} instead\n * Duplicated with `Coordinate` in `util/types.ts`\n */\n\n/**\n * @deprecated use {@link NullableCoordinate} instead\n * Duplicated with `NullableCoordinate` in `util/types.ts`\n */\n\nvar defined = p => isWellBehavedNumber(p.x) && isWellBehavedNumber(p.y);\nvar getX = p => p.x;\nvar getY = p => p.y;\nvar getCurveFactory = (type, layout) => {\n  if (typeof type === 'function') {\n    return type;\n  }\n  var name = \"curve\".concat(upperFirst(type));\n  if ((name === 'curveMonotone' || name === 'curveBump') && layout) {\n    return CURVE_FACTORIES[\"\".concat(name).concat(layout === 'vertical' ? 'Y' : 'X')];\n  }\n  return CURVE_FACTORIES[name] || curveLinear;\n};\n/**\n * Calculate the path of curve. Returns null if points is an empty array.\n * @return path or null\n */\nexport var getPath = _ref => {\n  var {\n    type = 'linear',\n    points = [],\n    baseLine,\n    layout,\n    connectNulls = false\n  } = _ref;\n  var curveFactory = getCurveFactory(type, layout);\n  var formatPoints = connectNulls ? points.filter(defined) : points;\n  var lineFunction;\n  if (Array.isArray(baseLine)) {\n    var formatBaseLine = connectNulls ? baseLine.filter(base => defined(base)) : baseLine;\n    var areaPoints = formatPoints.map((entry, index) => _objectSpread(_objectSpread({}, entry), {}, {\n      base: formatBaseLine[index]\n    }));\n    if (layout === 'vertical') {\n      lineFunction = shapeArea().y(getY).x1(getX).x0(d => d.base.x);\n    } else {\n      lineFunction = shapeArea().x(getX).y1(getY).y0(d => d.base.y);\n    }\n    lineFunction.defined(defined).curve(curveFactory);\n    return lineFunction(areaPoints);\n  }\n  if (layout === 'vertical' && isNumber(baseLine)) {\n    lineFunction = shapeArea().y(getY).x1(getX).x0(baseLine);\n  } else if (isNumber(baseLine)) {\n    lineFunction = shapeArea().x(getX).y1(getY).y0(baseLine);\n  } else {\n    lineFunction = shapeLine().x(getX).y(getY);\n  }\n  lineFunction.defined(defined).curve(curveFactory);\n  return lineFunction(formatPoints);\n};\nexport var Curve = props => {\n  var {\n    className,\n    points,\n    path,\n    pathRef\n  } = props;\n  if ((!points || !points.length) && !path) {\n    return null;\n  }\n  var realPath = points && points.length ? getPath(props) : path;\n  return /*#__PURE__*/React.createElement(\"path\", _extends({}, filterProps(props, false), adaptEventHandlers(props), {\n    className: clsx('recharts-curve', className),\n    d: realPath === null ? undefined : realPath,\n    ref: pathRef\n  }));\n};","var _excluded = [\"x\", \"y\", \"top\", \"left\", \"width\", \"height\", \"className\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\n/**\n * @fileOverview Cross\n */\nimport * as React from 'react';\nimport { clsx } from 'clsx';\nimport { isNumber } from '../util/DataUtils';\nimport { filterProps } from '../util/ReactUtils';\nvar getPath = (x, y, width, height, top, left) => {\n  return \"M\".concat(x, \",\").concat(top, \"v\").concat(height, \"M\").concat(left, \",\").concat(y, \"h\").concat(width);\n};\nexport var Cross = _ref => {\n  var {\n      x = 0,\n      y = 0,\n      top = 0,\n      left = 0,\n      width = 0,\n      height = 0,\n      className\n    } = _ref,\n    rest = _objectWithoutProperties(_ref, _excluded);\n  var props = _objectSpread({\n    x,\n    y,\n    top,\n    left,\n    width,\n    height\n  }, rest);\n  if (!isNumber(x) || !isNumber(y) || !isNumber(width) || !isNumber(height) || !isNumber(top) || !isNumber(left)) {\n    return null;\n  }\n  return /*#__PURE__*/React.createElement(\"path\", _extends({}, filterProps(props, true), {\n    className: clsx('recharts-cross', className),\n    d: getPath(x, y, width, height, top, left)\n  }));\n};","export function getCursorRectangle(layout, activeCoordinate, offset, tooltipAxisBandSize) {\n  var halfSize = tooltipAxisBandSize / 2;\n  return {\n    stroke: 'none',\n    fill: '#ccc',\n    x: layout === 'horizontal' ? activeCoordinate.x - halfSize : offset.left + 0.5,\n    y: layout === 'horizontal' ? offset.top + 0.5 : activeCoordinate.y - halfSize,\n    width: layout === 'horizontal' ? tooltipAxisBandSize : offset.width - 1,\n    height: layout === 'horizontal' ? offset.height - 1 : tooltipAxisBandSize\n  };\n}","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/**\n * This function mimics the behavior of the `defaultProps` static property in React.\n * Functional components do not have a defaultProps property, so this function is useful to resolve default props.\n *\n * The common recommendation is to use ES6 destructuring with default values in the function signature,\n * but you need to be careful there and make sure you destructure all the individual properties\n * and not the whole object. See the test file for example.\n *\n * And because destructuring all properties one by one is a faff, and it's easy to miss one property,\n * this function exists.\n *\n * @param realProps - the props object passed to the component by the user\n * @param defaultProps - the default props object defined in the component by Recharts\n * @returns - the props object with all the default props resolved. All `undefined` values are replaced with the default value.\n */\nexport function resolveDefaultProps(realProps, defaultProps) {\n  /*\n   * To avoid mutating the original `realProps` object passed to the function, create a shallow copy of it.\n   * `resolvedProps` will be modified directly with the defaults.\n   */\n  var resolvedProps = _objectSpread({}, realProps);\n  /*\n   * Since the function guarantees `D extends Partial<T>`, this assignment is safe.\n   * It allows TypeScript to work with the well-defined `Partial<T>` type inside the loop,\n   * making subsequent type inference (especially for `dp[key]`) much more straightforward for the compiler.\n   * This is a key step to improve type safety *without* value assertions later.\n   */\n  var dp = defaultProps;\n  /*\n   * `Object.keys` doesn't preserve strong key types - it always returns Array<string>.\n   * However, due to the `D extends Partial<T>` constraint,\n   * we know these keys *must* also be valid keys of `T`.\n   * This assertion informs TypeScript of this relationship, avoiding type errors when using `key` to index `acc` (type T).\n   *\n   * Type assertions are not sound but in this case it's necessary\n   * as `Object.keys` does not do what we want it to do.\n   */\n  var keys = Object.keys(defaultProps);\n  var withDefaults = keys.reduce((acc, key) => {\n    if (acc[key] === undefined && dp[key] !== undefined) {\n      acc[key] = dp[key];\n    }\n    return acc;\n  }, resolvedProps);\n  /*\n   * And again type assertions are not safe but here we have done the runtime work\n   * so let's bypass the lack of static type safety and tell the compiler what happened.\n   */\n  return withDefaults;\n}\n\n/**\n * Helper type to extract the keys of T that are required.\n * It iterates through each key K in T. If Pick<T, K> cannot be assigned an empty object {},\n * it means K is required, so we keep K; otherwise, we discard it (never).\n * [keyof T] at the end creates a union of the kept keys.\n */\n\n/**\n * Helper type to extract the keys of T that are optional.\n * It iterates through each key K in T. If Pick<T, K> can be assigned an empty object {},\n * it means K is optional (or potentially missing), so we keep K; otherwise, we discard it (never).\n * [keyof T] at the end creates a union of the kept keys.\n */\n\n/**\n * Helper type to ensure keys of D exist in T.\n * For each key K in D, if K is also a key of T, keep the type D[K].\n * If K is NOT a key of T, map it to type `never`.\n * An object cannot have a property of type `never`, effectively disallowing extra keys.\n */\n\n/**\n * This type will take a source type `Props` and a default type `Defaults` and will return a new type\n * where all properties that are optional in `Props` but required in `Defaults` are made required in the result.\n * Properties that are required in `Props` and optional in `Defaults` will remain required.\n * Properties that are optional in both `Props` and `Defaults` will remain optional.\n *\n * This is useful for creating a type that represents the resolved props of a component with default props.\n */","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction isPlainObject(value) {\n    if (!value || typeof value !== 'object') {\n        return false;\n    }\n    const proto = Object.getPrototypeOf(value);\n    const hasObjectPrototype = proto === null ||\n        proto === Object.prototype ||\n        Object.getPrototypeOf(proto) === null;\n    if (!hasObjectPrototype) {\n        return false;\n    }\n    return Object.prototype.toString.call(value) === '[object Object]';\n}\n\nexports.isPlainObject = isPlainObject;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isPlainObject = require('./isPlainObject.js');\nconst getSymbols = require('../compat/_internal/getSymbols.js');\nconst getTag = require('../compat/_internal/getTag.js');\nconst tags = require('../compat/_internal/tags.js');\nconst eq = require('../compat/util/eq.js');\n\nfunction isEqualWith(a, b, areValuesEqual) {\n    return isEqualWithImpl(a, b, undefined, undefined, undefined, undefined, areValuesEqual);\n}\nfunction isEqualWithImpl(a, b, property, aParent, bParent, stack, areValuesEqual) {\n    const result = areValuesEqual(a, b, property, aParent, bParent, stack);\n    if (result !== undefined) {\n        return result;\n    }\n    if (typeof a === typeof b) {\n        switch (typeof a) {\n            case 'bigint':\n            case 'string':\n            case 'boolean':\n            case 'symbol':\n            case 'undefined': {\n                return a === b;\n            }\n            case 'number': {\n                return a === b || Object.is(a, b);\n            }\n            case 'function': {\n                return a === b;\n            }\n            case 'object': {\n                return areObjectsEqual(a, b, stack, areValuesEqual);\n            }\n        }\n    }\n    return areObjectsEqual(a, b, stack, areValuesEqual);\n}\nfunction areObjectsEqual(a, b, stack, areValuesEqual) {\n    if (Object.is(a, b)) {\n        return true;\n    }\n    let aTag = getTag.getTag(a);\n    let bTag = getTag.getTag(b);\n    if (aTag === tags.argumentsTag) {\n        aTag = tags.objectTag;\n    }\n    if (bTag === tags.argumentsTag) {\n        bTag = tags.objectTag;\n    }\n    if (aTag !== bTag) {\n        return false;\n    }\n    switch (aTag) {\n        case tags.stringTag:\n            return a.toString() === b.toString();\n        case tags.numberTag: {\n            const x = a.valueOf();\n            const y = b.valueOf();\n            return eq.eq(x, y);\n        }\n        case tags.booleanTag:\n        case tags.dateTag:\n        case tags.symbolTag:\n            return Object.is(a.valueOf(), b.valueOf());\n        case tags.regexpTag: {\n            return a.source === b.source && a.flags === b.flags;\n        }\n        case tags.functionTag: {\n            return a === b;\n        }\n    }\n    stack = stack ?? new Map();\n    const aStack = stack.get(a);\n    const bStack = stack.get(b);\n    if (aStack != null && bStack != null) {\n        return aStack === b;\n    }\n    stack.set(a, b);\n    stack.set(b, a);\n    try {\n        switch (aTag) {\n            case tags.mapTag: {\n                if (a.size !== b.size) {\n                    return false;\n                }\n                for (const [key, value] of a.entries()) {\n                    if (!b.has(key) || !isEqualWithImpl(value, b.get(key), key, a, b, stack, areValuesEqual)) {\n                        return false;\n                    }\n                }\n                return true;\n            }\n            case tags.setTag: {\n                if (a.size !== b.size) {\n                    return false;\n                }\n                const aValues = Array.from(a.values());\n                const bValues = Array.from(b.values());\n                for (let i = 0; i < aValues.length; i++) {\n                    const aValue = aValues[i];\n                    const index = bValues.findIndex(bValue => {\n                        return isEqualWithImpl(aValue, bValue, undefined, a, b, stack, areValuesEqual);\n                    });\n                    if (index === -1) {\n                        return false;\n                    }\n                    bValues.splice(index, 1);\n                }\n                return true;\n            }\n            case tags.arrayTag:\n            case tags.uint8ArrayTag:\n            case tags.uint8ClampedArrayTag:\n            case tags.uint16ArrayTag:\n            case tags.uint32ArrayTag:\n            case tags.bigUint64ArrayTag:\n            case tags.int8ArrayTag:\n            case tags.int16ArrayTag:\n            case tags.int32ArrayTag:\n            case tags.bigInt64ArrayTag:\n            case tags.float32ArrayTag:\n            case tags.float64ArrayTag: {\n                if (typeof Buffer !== 'undefined' && Buffer.isBuffer(a) !== Buffer.isBuffer(b)) {\n                    return false;\n                }\n                if (a.length !== b.length) {\n                    return false;\n                }\n                for (let i = 0; i < a.length; i++) {\n                    if (!isEqualWithImpl(a[i], b[i], i, a, b, stack, areValuesEqual)) {\n                        return false;\n                    }\n                }\n                return true;\n            }\n            case tags.arrayBufferTag: {\n                if (a.byteLength !== b.byteLength) {\n                    return false;\n                }\n                return areObjectsEqual(new Uint8Array(a), new Uint8Array(b), stack, areValuesEqual);\n            }\n            case tags.dataViewTag: {\n                if (a.byteLength !== b.byteLength || a.byteOffset !== b.byteOffset) {\n                    return false;\n                }\n                return areObjectsEqual(new Uint8Array(a), new Uint8Array(b), stack, areValuesEqual);\n            }\n            case tags.errorTag: {\n                return a.name === b.name && a.message === b.message;\n            }\n            case tags.objectTag: {\n                const areEqualInstances = areObjectsEqual(a.constructor, b.constructor, stack, areValuesEqual) ||\n                    (isPlainObject.isPlainObject(a) && isPlainObject.isPlainObject(b));\n                if (!areEqualInstances) {\n                    return false;\n                }\n                const aKeys = [...Object.keys(a), ...getSymbols.getSymbols(a)];\n                const bKeys = [...Object.keys(b), ...getSymbols.getSymbols(b)];\n                if (aKeys.length !== bKeys.length) {\n                    return false;\n                }\n                for (let i = 0; i < aKeys.length; i++) {\n                    const propKey = aKeys[i];\n                    const aProp = a[propKey];\n                    if (!Object.hasOwn(b, propKey)) {\n                        return false;\n                    }\n                    const bProp = b[propKey];\n                    if (!isEqualWithImpl(aProp, bProp, propKey, a, b, stack, areValuesEqual)) {\n                        return false;\n                    }\n                }\n                return true;\n            }\n            default: {\n                return false;\n            }\n        }\n    }\n    finally {\n        stack.delete(a);\n        stack.delete(b);\n    }\n}\n\nexports.isEqualWith = isEqualWith;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction noop() { }\n\nexports.noop = noop;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isEqualWith = require('./isEqualWith.js');\nconst noop = require('../function/noop.js');\n\nfunction isEqual(a, b) {\n    return isEqualWith.isEqualWith(a, b, noop.noop);\n}\n\nexports.isEqual = isEqual;\n","module.exports = require('../dist/predicate/isEqual.js').isEqual;\n","/**\n * Represents a single item in the ReactSmoothQueue.\n * The item can be:\n * - A number representing a delay in milliseconds.\n * - An object representing a style change\n * - A StartAnimationFunction that starts eased transition and calls different render\n *      because of course in Recharts we have to have three ways to do everything\n * - An arbitrary function to be executed\n */\n\nexport function createAnimateManager(timeoutController) {\n  var currStyle = {};\n  var handleChange = () => null;\n  var shouldStop = false;\n  var cancelTimeout = null;\n  var setStyle = _style => {\n    if (shouldStop) {\n      return;\n    }\n    if (Array.isArray(_style)) {\n      if (!_style.length) {\n        return;\n      }\n      var styles = _style;\n      var [curr, ...restStyles] = styles;\n      if (typeof curr === 'number') {\n        cancelTimeout = timeoutController.setTimeout(setStyle.bind(null, restStyles), curr);\n        return;\n      }\n      setStyle(curr);\n      cancelTimeout = timeoutController.setTimeout(setStyle.bind(null, restStyles));\n      return;\n    }\n    if (typeof _style === 'object') {\n      currStyle = _style;\n      handleChange(currStyle);\n    }\n    if (typeof _style === 'function') {\n      _style();\n    }\n  };\n  return {\n    stop: () => {\n      shouldStop = true;\n    },\n    start: style => {\n      shouldStop = false;\n      if (cancelTimeout) {\n        cancelTimeout();\n        cancelTimeout = null;\n      }\n      setStyle(style);\n    },\n    subscribe: _handleChange => {\n      handleChange = _handleChange;\n      return () => {\n        handleChange = () => null;\n      };\n    },\n    getTimeoutController: () => timeoutController\n  };\n}","export var ACCURACY = 1e-4;\nvar cubicBezierFactor = (c1, c2) => [0, 3 * c1, 3 * c2 - 6 * c1, 3 * c1 - 3 * c2 + 1];\nvar evaluatePolynomial = (params, t) => params.map((param, i) => param * t ** i).reduce((pre, curr) => pre + curr);\nvar cubicBezier = (c1, c2) => t => {\n  var params = cubicBezierFactor(c1, c2);\n  return evaluatePolynomial(params, t);\n};\nvar derivativeCubicBezier = (c1, c2) => t => {\n  var params = cubicBezierFactor(c1, c2);\n  var newParams = [...params.map((param, i) => param * i).slice(1), 0];\n  return evaluatePolynomial(newParams, t);\n};\n// calculate cubic-bezier using Newton's method\nexport var configBezier = function configBezier() {\n  var x1, x2, y1, y2;\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n  if (args.length === 1) {\n    switch (args[0]) {\n      case 'linear':\n        [x1, y1, x2, y2] = [0.0, 0.0, 1.0, 1.0];\n        break;\n      case 'ease':\n        [x1, y1, x2, y2] = [0.25, 0.1, 0.25, 1.0];\n        break;\n      case 'ease-in':\n        [x1, y1, x2, y2] = [0.42, 0.0, 1.0, 1.0];\n        break;\n      case 'ease-out':\n        [x1, y1, x2, y2] = [0.42, 0.0, 0.58, 1.0];\n        break;\n      case 'ease-in-out':\n        [x1, y1, x2, y2] = [0.0, 0.0, 0.58, 1.0];\n        break;\n      default:\n        {\n          var easing = args[0].split('(');\n          if (easing[0] === 'cubic-bezier' && easing[1].split(')')[0].split(',').length === 4) {\n            [x1, y1, x2, y2] = easing[1].split(')')[0].split(',').map(x => parseFloat(x));\n          }\n        }\n    }\n  } else if (args.length === 4) {\n    [x1, y1, x2, y2] = args;\n  }\n  var curveX = cubicBezier(x1, x2);\n  var curveY = cubicBezier(y1, y2);\n  var derCurveX = derivativeCubicBezier(x1, x2);\n  var rangeValue = value => {\n    if (value > 1) {\n      return 1;\n    }\n    if (value < 0) {\n      return 0;\n    }\n    return value;\n  };\n  var bezier = _t => {\n    var t = _t > 1 ? 1 : _t;\n    var x = t;\n    for (var i = 0; i < 8; ++i) {\n      var evalT = curveX(x) - t;\n      var derVal = derCurveX(x);\n      if (Math.abs(evalT - t) < ACCURACY || derVal < ACCURACY) {\n        return curveY(x);\n      }\n      x = rangeValue(x - evalT / derVal);\n    }\n    return curveY(x);\n  };\n  bezier.isStepper = false;\n  return bezier;\n};\nexport var configSpring = function configSpring() {\n  var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var {\n    stiff = 100,\n    damping = 8,\n    dt = 17\n  } = config;\n  var stepper = (currX, destX, currV) => {\n    var FSpring = -(currX - destX) * stiff;\n    var FDamping = currV * damping;\n    var newV = currV + (FSpring - FDamping) * dt / 1000;\n    var newX = currV * dt / 1000 + currX;\n    if (Math.abs(newX - destX) < ACCURACY && Math.abs(newV) < ACCURACY) {\n      return [destX, 0];\n    }\n    return [newX, newV];\n  };\n  stepper.isStepper = true;\n  stepper.dt = dt;\n  return stepper;\n};\nexport var configEasing = easing => {\n  if (typeof easing === 'string') {\n    switch (easing) {\n      case 'ease':\n      case 'ease-in-out':\n      case 'ease-out':\n      case 'ease-in':\n      case 'linear':\n        return configBezier(easing);\n      case 'spring':\n        return configSpring();\n      default:\n        if (easing.split('(')[0] === 'cubic-bezier') {\n          return configBezier(easing);\n        }\n    }\n  }\n  if (typeof easing === 'function') {\n    return easing;\n  }\n  return null;\n};","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/*\n * @description: convert camel case to dash case\n * string => string\n */\nexport var getDashCase = name => name.replace(/([A-Z])/g, v => \"-\".concat(v.toLowerCase()));\nexport var getTransitionVal = (props, duration, easing) => props.map(prop => \"\".concat(getDashCase(prop), \" \").concat(duration, \"ms \").concat(easing)).join(',');\n\n/**\n * Finds the intersection of keys between two objects\n * @param {object} preObj previous object\n * @param {object} nextObj next object\n * @returns an array of keys that exist in both objects\n */\nexport var getIntersectionKeys = (preObj, nextObj) => [Object.keys(preObj), Object.keys(nextObj)].reduce((a, b) => a.filter(c => b.includes(c)));\n\n/**\n * Maps an object to another object\n * @param {function} fn function to map\n * @param {object} obj object to map\n * @returns mapped object\n */\nexport var mapObject = (fn, obj) => Object.keys(obj).reduce((res, key) => _objectSpread(_objectSpread({}, res), {}, {\n  [key]: fn(key, obj[key])\n}), {});","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { getIntersectionKeys, mapObject } from './util';\nexport var alpha = (begin, end, k) => begin + (end - begin) * k;\nvar needContinue = _ref => {\n  var {\n    from,\n    to\n  } = _ref;\n  return from !== to;\n};\n/*\n * @description: cal new from value and velocity in each stepper\n * @return: { [styleProperty]: { from, to, velocity } }\n */\nvar calStepperVals = (easing, preVals, steps) => {\n  var nextStepVals = mapObject((key, val) => {\n    if (needContinue(val)) {\n      var [newX, newV] = easing(val.from, val.to, val.velocity);\n      return _objectSpread(_objectSpread({}, val), {}, {\n        from: newX,\n        velocity: newV\n      });\n    }\n    return val;\n  }, preVals);\n  if (steps < 1) {\n    return mapObject((key, val) => {\n      if (needContinue(val)) {\n        return _objectSpread(_objectSpread({}, val), {}, {\n          velocity: alpha(val.velocity, nextStepVals[key].velocity, steps),\n          from: alpha(val.from, nextStepVals[key].from, steps)\n        });\n      }\n      return val;\n    }, preVals);\n  }\n  return calStepperVals(easing, nextStepVals, steps - 1);\n};\nfunction createStepperUpdate(from, to, easing, interKeys, render, timeoutController) {\n  var preTime;\n  var stepperStyle = interKeys.reduce((res, key) => _objectSpread(_objectSpread({}, res), {}, {\n    [key]: {\n      from: from[key],\n      velocity: 0,\n      to: to[key]\n    }\n  }), {});\n  var getCurrStyle = () => mapObject((key, val) => val.from, stepperStyle);\n  var shouldStopAnimation = () => !Object.values(stepperStyle).filter(needContinue).length;\n  var stopAnimation = null;\n  var stepperUpdate = now => {\n    if (!preTime) {\n      preTime = now;\n    }\n    var deltaTime = now - preTime;\n    var steps = deltaTime / easing.dt;\n    stepperStyle = calStepperVals(easing, stepperStyle, steps);\n    // get union set and add compatible prefix\n    render(_objectSpread(_objectSpread(_objectSpread({}, from), to), getCurrStyle()));\n    preTime = now;\n    if (!shouldStopAnimation()) {\n      stopAnimation = timeoutController.setTimeout(stepperUpdate);\n    }\n  };\n\n  // return start animation method\n  return () => {\n    stopAnimation = timeoutController.setTimeout(stepperUpdate);\n\n    // return stop animation method\n    return () => {\n      stopAnimation();\n    };\n  };\n}\nfunction createTimingUpdate(from, to, easing, duration, interKeys, render, timeoutController) {\n  var stopAnimation = null;\n  var timingStyle = interKeys.reduce((res, key) => _objectSpread(_objectSpread({}, res), {}, {\n    [key]: [from[key], to[key]]\n  }), {});\n  var beginTime;\n  var timingUpdate = now => {\n    if (!beginTime) {\n      beginTime = now;\n    }\n    var t = (now - beginTime) / duration;\n    var currStyle = mapObject((key, val) => alpha(...val, easing(t)), timingStyle);\n\n    // get union set and add compatible prefix\n    render(_objectSpread(_objectSpread(_objectSpread({}, from), to), currStyle));\n    if (t < 1) {\n      stopAnimation = timeoutController.setTimeout(timingUpdate);\n    } else {\n      var finalStyle = mapObject((key, val) => alpha(...val, easing(1)), timingStyle);\n      render(_objectSpread(_objectSpread(_objectSpread({}, from), to), finalStyle));\n    }\n  };\n\n  // return start animation method\n  return () => {\n    stopAnimation = timeoutController.setTimeout(timingUpdate);\n\n    // return stop animation method\n    return () => {\n      stopAnimation();\n    };\n  };\n}\n\n// configure update function\n// eslint-disable-next-line import/no-default-export\nexport default (from, to, easing, duration, render, timeoutController) => {\n  var interKeys = getIntersectionKeys(from, to);\n  return easing.isStepper === true ? createStepperUpdate(from, to, easing, interKeys, render, timeoutController) : createTimingUpdate(from, to, easing, duration, interKeys, render, timeoutController);\n};","/**\n * Callback type for the timeout function.\n * Receives current time in milliseconds as an argument.\n */\n\n/**\n * A function that, when called, cancels the timeout.\n */\n\nexport class RequestAnimationFrameTimeoutController {\n  setTimeout(callback) {\n    var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n    var startTime = performance.now();\n    var requestId = null;\n    var executeCallback = now => {\n      if (now - startTime >= delay) {\n        callback(now);\n        // tests fail without the extra if, even when five lines below it's not needed\n        // TODO finish transition to the mocked timeout controller and then remove this condition\n      } else if (typeof requestAnimationFrame === 'function') {\n        requestId = requestAnimationFrame(executeCallback);\n      }\n    };\n    requestId = requestAnimationFrame(executeCallback);\n    return () => {\n      cancelAnimationFrame(requestId);\n    };\n  }\n}","var _excluded = [\"children\", \"begin\", \"duration\", \"attributeName\", \"easing\", \"isActive\", \"from\", \"to\", \"canBegin\", \"onAnimationEnd\", \"shouldReAnimate\", \"onAnimationReStart\", \"animationManager\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport * as React from 'react';\nimport { PureComponent, cloneElement, Children, createContext, useContext } from 'react';\nimport isEqual from 'es-toolkit/compat/isEqual';\nimport { createAnimateManager } from './AnimationManager';\nimport { configEasing } from './easing';\nimport configUpdate from './configUpdate';\nimport { getTransitionVal } from './util';\nimport { RequestAnimationFrameTimeoutController } from './timeoutController';\nfunction createDefaultAnimationManager() {\n  return createAnimateManager(new RequestAnimationFrameTimeoutController());\n}\nclass AnimateImpl extends PureComponent {\n  constructor(props, context) {\n    super(props, context);\n    _defineProperty(this, \"mounted\", false);\n    _defineProperty(this, \"manager\", null);\n    _defineProperty(this, \"stopJSAnimation\", null);\n    _defineProperty(this, \"unSubscribe\", null);\n    var {\n      isActive,\n      attributeName,\n      from,\n      to,\n      children,\n      duration,\n      animationManager\n    } = this.props;\n    this.manager = animationManager;\n    this.handleStyleChange = this.handleStyleChange.bind(this);\n    this.changeStyle = this.changeStyle.bind(this);\n    if (!isActive || duration <= 0) {\n      this.state = {\n        style: {}\n      };\n\n      // if children is a function and animation is not active, set style to 'to'\n      if (typeof children === 'function') {\n        this.state = {\n          style: to\n        };\n      }\n      return;\n    }\n    if (from) {\n      if (typeof children === 'function') {\n        this.state = {\n          style: from\n        };\n        return;\n      }\n      this.state = {\n        style: attributeName ? {\n          [attributeName]: from\n        } : from\n      };\n    } else {\n      this.state = {\n        style: {}\n      };\n    }\n  }\n  componentDidMount() {\n    var {\n      isActive,\n      canBegin\n    } = this.props;\n    this.mounted = true;\n    if (!isActive || !canBegin) {\n      return;\n    }\n    this.runAnimation(this.props);\n  }\n  componentDidUpdate(prevProps) {\n    var {\n      isActive,\n      canBegin,\n      attributeName,\n      shouldReAnimate,\n      to,\n      from: currentFrom\n    } = this.props;\n    var {\n      style\n    } = this.state;\n    if (!canBegin) {\n      return;\n    }\n    if (!isActive) {\n      var newState = {\n        style: attributeName ? {\n          [attributeName]: to\n        } : to\n      };\n      if (this.state && style) {\n        if (attributeName && style[attributeName] !== to || !attributeName && style !== to) {\n          this.setState(newState);\n        }\n      }\n      return;\n    }\n    if (isEqual(prevProps.to, to) && prevProps.canBegin && prevProps.isActive) {\n      return;\n    }\n    var isTriggered = !prevProps.canBegin || !prevProps.isActive;\n    this.manager.stop();\n    if (this.stopJSAnimation) {\n      this.stopJSAnimation();\n    }\n    var from = isTriggered || shouldReAnimate ? currentFrom : prevProps.to;\n    if (this.state && style) {\n      var _newState = {\n        style: attributeName ? {\n          [attributeName]: from\n        } : from\n      };\n      if (attributeName && style[attributeName] !== from || !attributeName && style !== from) {\n        this.setState(_newState);\n      }\n    }\n    this.runAnimation(_objectSpread(_objectSpread({}, this.props), {}, {\n      from,\n      begin: 0\n    }));\n  }\n  componentWillUnmount() {\n    this.mounted = false;\n    var {\n      onAnimationEnd\n    } = this.props;\n    if (this.unSubscribe) {\n      this.unSubscribe();\n    }\n    this.manager.stop();\n    if (this.stopJSAnimation) {\n      this.stopJSAnimation();\n    }\n    if (onAnimationEnd) {\n      onAnimationEnd();\n    }\n  }\n  handleStyleChange(style) {\n    this.changeStyle(style);\n  }\n  changeStyle(style) {\n    if (this.mounted) {\n      this.setState({\n        style\n      });\n    }\n  }\n  runJSAnimation(props) {\n    var {\n      from,\n      to,\n      duration,\n      easing,\n      begin,\n      onAnimationEnd,\n      onAnimationStart\n    } = props;\n    var startAnimation = configUpdate(from, to, configEasing(easing), duration, this.changeStyle, this.manager.getTimeoutController());\n    var finalStartAnimation = () => {\n      this.stopJSAnimation = startAnimation();\n    };\n    this.manager.start([onAnimationStart, begin, finalStartAnimation, duration, onAnimationEnd]);\n  }\n  runAnimation(props) {\n    var {\n      begin,\n      duration,\n      attributeName,\n      to: propsTo,\n      easing,\n      onAnimationStart,\n      onAnimationEnd,\n      children\n    } = props;\n    this.unSubscribe = this.manager.subscribe(this.handleStyleChange);\n    if (typeof easing === 'function' || typeof children === 'function' || easing === 'spring') {\n      this.runJSAnimation(props);\n      return;\n    }\n    var to = attributeName ? {\n      [attributeName]: propsTo\n    } : propsTo;\n    var transition = getTransitionVal(Object.keys(to), duration, easing);\n    this.manager.start([onAnimationStart, begin, _objectSpread(_objectSpread({}, to), {}, {\n      transition\n    }), duration, onAnimationEnd]);\n  }\n  render() {\n    var _this$props = this.props,\n      {\n        children,\n        begin,\n        duration,\n        attributeName,\n        easing,\n        isActive,\n        from,\n        to,\n        canBegin,\n        onAnimationEnd,\n        shouldReAnimate,\n        onAnimationReStart,\n        animationManager\n      } = _this$props,\n      others = _objectWithoutProperties(_this$props, _excluded);\n    var count = Children.count(children);\n    var stateStyle = this.state.style;\n    if (typeof children === 'function') {\n      return children(stateStyle);\n    }\n    if (!isActive || count === 0 || duration <= 0) {\n      return children;\n    }\n    var cloneContainer = container => {\n      var {\n        style = {},\n        className\n      } = container.props;\n      var res = /*#__PURE__*/cloneElement(container, _objectSpread(_objectSpread({}, others), {}, {\n        style: _objectSpread(_objectSpread({}, style), stateStyle),\n        className\n      }));\n      return res;\n    };\n    if (count === 1) {\n      // @ts-expect-error TODO - fix the type error\n      return cloneContainer(Children.only(children));\n    }\n\n    // @ts-expect-error TODO - fix the type error\n    return /*#__PURE__*/React.createElement(\"div\", null, Children.map(children, child => cloneContainer(child)));\n  }\n}\n_defineProperty(AnimateImpl, \"displayName\", 'Animate');\n_defineProperty(AnimateImpl, \"defaultProps\", {\n  begin: 0,\n  duration: 1000,\n  attributeName: '',\n  easing: 'ease',\n  isActive: true,\n  canBegin: true,\n  onAnimationEnd: () => {},\n  onAnimationStart: () => {}\n});\nexport var AnimationManagerContext = /*#__PURE__*/createContext(null);\nexport function Animate(props) {\n  var _ref, _props$animationManag;\n  var contextAnimationManager = useContext(AnimationManagerContext);\n  return /*#__PURE__*/React.createElement(AnimateImpl, _extends({}, props, {\n    animationManager: (_ref = (_props$animationManag = props.animationManager) !== null && _props$animationManag !== void 0 ? _props$animationManag : contextAnimationManager) !== null && _ref !== void 0 ? _ref : createDefaultAnimationManager()\n  }));\n}","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/**\n * @fileOverview Rectangle\n */\nimport * as React from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { clsx } from 'clsx';\nimport { filterProps } from '../util/ReactUtils';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nimport { Animate } from '../animation/Animate';\nvar getRectanglePath = (x, y, width, height, radius) => {\n  var maxRadius = Math.min(Math.abs(width) / 2, Math.abs(height) / 2);\n  var ySign = height >= 0 ? 1 : -1;\n  var xSign = width >= 0 ? 1 : -1;\n  var clockWise = height >= 0 && width >= 0 || height < 0 && width < 0 ? 1 : 0;\n  var path;\n  if (maxRadius > 0 && radius instanceof Array) {\n    var newRadius = [0, 0, 0, 0];\n    for (var i = 0, len = 4; i < len; i++) {\n      newRadius[i] = radius[i] > maxRadius ? maxRadius : radius[i];\n    }\n    path = \"M\".concat(x, \",\").concat(y + ySign * newRadius[0]);\n    if (newRadius[0] > 0) {\n      path += \"A \".concat(newRadius[0], \",\").concat(newRadius[0], \",0,0,\").concat(clockWise, \",\").concat(x + xSign * newRadius[0], \",\").concat(y);\n    }\n    path += \"L \".concat(x + width - xSign * newRadius[1], \",\").concat(y);\n    if (newRadius[1] > 0) {\n      path += \"A \".concat(newRadius[1], \",\").concat(newRadius[1], \",0,0,\").concat(clockWise, \",\\n        \").concat(x + width, \",\").concat(y + ySign * newRadius[1]);\n    }\n    path += \"L \".concat(x + width, \",\").concat(y + height - ySign * newRadius[2]);\n    if (newRadius[2] > 0) {\n      path += \"A \".concat(newRadius[2], \",\").concat(newRadius[2], \",0,0,\").concat(clockWise, \",\\n        \").concat(x + width - xSign * newRadius[2], \",\").concat(y + height);\n    }\n    path += \"L \".concat(x + xSign * newRadius[3], \",\").concat(y + height);\n    if (newRadius[3] > 0) {\n      path += \"A \".concat(newRadius[3], \",\").concat(newRadius[3], \",0,0,\").concat(clockWise, \",\\n        \").concat(x, \",\").concat(y + height - ySign * newRadius[3]);\n    }\n    path += 'Z';\n  } else if (maxRadius > 0 && radius === +radius && radius > 0) {\n    var _newRadius = Math.min(maxRadius, radius);\n    path = \"M \".concat(x, \",\").concat(y + ySign * _newRadius, \"\\n            A \").concat(_newRadius, \",\").concat(_newRadius, \",0,0,\").concat(clockWise, \",\").concat(x + xSign * _newRadius, \",\").concat(y, \"\\n            L \").concat(x + width - xSign * _newRadius, \",\").concat(y, \"\\n            A \").concat(_newRadius, \",\").concat(_newRadius, \",0,0,\").concat(clockWise, \",\").concat(x + width, \",\").concat(y + ySign * _newRadius, \"\\n            L \").concat(x + width, \",\").concat(y + height - ySign * _newRadius, \"\\n            A \").concat(_newRadius, \",\").concat(_newRadius, \",0,0,\").concat(clockWise, \",\").concat(x + width - xSign * _newRadius, \",\").concat(y + height, \"\\n            L \").concat(x + xSign * _newRadius, \",\").concat(y + height, \"\\n            A \").concat(_newRadius, \",\").concat(_newRadius, \",0,0,\").concat(clockWise, \",\").concat(x, \",\").concat(y + height - ySign * _newRadius, \" Z\");\n  } else {\n    path = \"M \".concat(x, \",\").concat(y, \" h \").concat(width, \" v \").concat(height, \" h \").concat(-width, \" Z\");\n  }\n  return path;\n};\nvar defaultProps = {\n  x: 0,\n  y: 0,\n  width: 0,\n  height: 0,\n  // The radius of border\n  // The radius of four corners when radius is a number\n  // The radius of left-top, right-top, right-bottom, left-bottom when radius is an array\n  radius: 0,\n  isAnimationActive: false,\n  isUpdateAnimationActive: false,\n  animationBegin: 0,\n  animationDuration: 1500,\n  animationEasing: 'ease'\n};\nexport var Rectangle = rectangleProps => {\n  var props = resolveDefaultProps(rectangleProps, defaultProps);\n  var pathRef = useRef(null);\n  var [totalLength, setTotalLength] = useState(-1);\n  useEffect(() => {\n    if (pathRef.current && pathRef.current.getTotalLength) {\n      try {\n        var pathTotalLength = pathRef.current.getTotalLength();\n        if (pathTotalLength) {\n          setTotalLength(pathTotalLength);\n        }\n      } catch (_unused) {\n        // calculate total length error\n      }\n    }\n  }, []);\n  var {\n    x,\n    y,\n    width,\n    height,\n    radius,\n    className\n  } = props;\n  var {\n    animationEasing,\n    animationDuration,\n    animationBegin,\n    isAnimationActive,\n    isUpdateAnimationActive\n  } = props;\n  if (x !== +x || y !== +y || width !== +width || height !== +height || width === 0 || height === 0) {\n    return null;\n  }\n  var layerClass = clsx('recharts-rectangle', className);\n  if (!isUpdateAnimationActive) {\n    return /*#__PURE__*/React.createElement(\"path\", _extends({}, filterProps(props, true), {\n      className: layerClass,\n      d: getRectanglePath(x, y, width, height, radius)\n    }));\n  }\n  return /*#__PURE__*/React.createElement(Animate, {\n    canBegin: totalLength > 0,\n    from: {\n      width,\n      height,\n      x,\n      y\n    },\n    to: {\n      width,\n      height,\n      x,\n      y\n    },\n    duration: animationDuration\n    // @ts-expect-error TODO - fix the type error\n    ,\n    animationEasing: animationEasing,\n    isActive: isUpdateAnimationActive\n  }, _ref => {\n    var {\n      width: currWidth,\n      height: currHeight,\n      x: currX,\n      y: currY\n    } = _ref;\n    return /*#__PURE__*/React.createElement(Animate, {\n      canBegin: totalLength > 0\n      // @ts-expect-error TODO - fix the type error\n      ,\n      from: \"0px \".concat(totalLength === -1 ? 1 : totalLength, \"px\")\n      // @ts-expect-error TODO - fix the type error\n      ,\n      to: \"\".concat(totalLength, \"px 0px\"),\n      attributeName: \"strokeDasharray\",\n      begin: animationBegin,\n      duration: animationDuration,\n      isActive: isAnimationActive,\n      easing: animationEasing\n    }, /*#__PURE__*/React.createElement(\"path\", _extends({}, filterProps(props, true), {\n      className: layerClass,\n      d: getRectanglePath(currX, currY, currWidth, currHeight, radius),\n      ref: pathRef\n    })));\n  });\n};","import { polarToCartesian } from '../PolarUtils';\n/**\n * Only applicable for radial layouts\n * @param {Object} activeCoordinate ChartCoordinate\n * @returns {Object} RadialCursorPoints\n */\nexport function getRadialCursorPoints(activeCoordinate) {\n  var {\n    cx,\n    cy,\n    radius,\n    startAngle,\n    endAngle\n  } = activeCoordinate;\n  var startPoint = polarToCartesian(cx, cy, radius, startAngle);\n  var endPoint = polarToCartesian(cx, cy, radius, endAngle);\n  return {\n    points: [startPoint, endPoint],\n    cx,\n    cy,\n    radius,\n    startAngle,\n    endAngle\n  };\n}","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from 'react';\nimport { clsx } from 'clsx';\nimport { filterProps } from '../util/ReactUtils';\nimport { polarToCartesian, RADIAN } from '../util/PolarUtils';\nimport { getPercentValue, mathSign } from '../util/DataUtils';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nvar getDeltaAngle = (startAngle, endAngle) => {\n  var sign = mathSign(endAngle - startAngle);\n  var deltaAngle = Math.min(Math.abs(endAngle - startAngle), 359.999);\n  return sign * deltaAngle;\n};\nvar getTangentCircle = _ref => {\n  var {\n    cx,\n    cy,\n    radius,\n    angle,\n    sign,\n    isExternal,\n    cornerRadius,\n    cornerIsExternal\n  } = _ref;\n  var centerRadius = cornerRadius * (isExternal ? 1 : -1) + radius;\n  var theta = Math.asin(cornerRadius / centerRadius) / RADIAN;\n  var centerAngle = cornerIsExternal ? angle : angle + sign * theta;\n  var center = polarToCartesian(cx, cy, centerRadius, centerAngle);\n  // The coordinate of point which is tangent to the circle\n  var circleTangency = polarToCartesian(cx, cy, radius, centerAngle);\n  // The coordinate of point which is tangent to the radius line\n  var lineTangencyAngle = cornerIsExternal ? angle - sign * theta : angle;\n  var lineTangency = polarToCartesian(cx, cy, centerRadius * Math.cos(theta * RADIAN), lineTangencyAngle);\n  return {\n    center,\n    circleTangency,\n    lineTangency,\n    theta\n  };\n};\nvar getSectorPath = _ref2 => {\n  var {\n    cx,\n    cy,\n    innerRadius,\n    outerRadius,\n    startAngle,\n    endAngle\n  } = _ref2;\n  var angle = getDeltaAngle(startAngle, endAngle);\n\n  // When the angle of sector equals to 360, star point and end point coincide\n  var tempEndAngle = startAngle + angle;\n  var outerStartPoint = polarToCartesian(cx, cy, outerRadius, startAngle);\n  var outerEndPoint = polarToCartesian(cx, cy, outerRadius, tempEndAngle);\n  var path = \"M \".concat(outerStartPoint.x, \",\").concat(outerStartPoint.y, \"\\n    A \").concat(outerRadius, \",\").concat(outerRadius, \",0,\\n    \").concat(+(Math.abs(angle) > 180), \",\").concat(+(startAngle > tempEndAngle), \",\\n    \").concat(outerEndPoint.x, \",\").concat(outerEndPoint.y, \"\\n  \");\n  if (innerRadius > 0) {\n    var innerStartPoint = polarToCartesian(cx, cy, innerRadius, startAngle);\n    var innerEndPoint = polarToCartesian(cx, cy, innerRadius, tempEndAngle);\n    path += \"L \".concat(innerEndPoint.x, \",\").concat(innerEndPoint.y, \"\\n            A \").concat(innerRadius, \",\").concat(innerRadius, \",0,\\n            \").concat(+(Math.abs(angle) > 180), \",\").concat(+(startAngle <= tempEndAngle), \",\\n            \").concat(innerStartPoint.x, \",\").concat(innerStartPoint.y, \" Z\");\n  } else {\n    path += \"L \".concat(cx, \",\").concat(cy, \" Z\");\n  }\n  return path;\n};\nvar getSectorWithCorner = _ref3 => {\n  var {\n    cx,\n    cy,\n    innerRadius,\n    outerRadius,\n    cornerRadius,\n    forceCornerRadius,\n    cornerIsExternal,\n    startAngle,\n    endAngle\n  } = _ref3;\n  var sign = mathSign(endAngle - startAngle);\n  var {\n    circleTangency: soct,\n    lineTangency: solt,\n    theta: sot\n  } = getTangentCircle({\n    cx,\n    cy,\n    radius: outerRadius,\n    angle: startAngle,\n    sign,\n    cornerRadius,\n    cornerIsExternal\n  });\n  var {\n    circleTangency: eoct,\n    lineTangency: eolt,\n    theta: eot\n  } = getTangentCircle({\n    cx,\n    cy,\n    radius: outerRadius,\n    angle: endAngle,\n    sign: -sign,\n    cornerRadius,\n    cornerIsExternal\n  });\n  var outerArcAngle = cornerIsExternal ? Math.abs(startAngle - endAngle) : Math.abs(startAngle - endAngle) - sot - eot;\n  if (outerArcAngle < 0) {\n    if (forceCornerRadius) {\n      return \"M \".concat(solt.x, \",\").concat(solt.y, \"\\n        a\").concat(cornerRadius, \",\").concat(cornerRadius, \",0,0,1,\").concat(cornerRadius * 2, \",0\\n        a\").concat(cornerRadius, \",\").concat(cornerRadius, \",0,0,1,\").concat(-cornerRadius * 2, \",0\\n      \");\n    }\n    return getSectorPath({\n      cx,\n      cy,\n      innerRadius,\n      outerRadius,\n      startAngle,\n      endAngle\n    });\n  }\n  var path = \"M \".concat(solt.x, \",\").concat(solt.y, \"\\n    A\").concat(cornerRadius, \",\").concat(cornerRadius, \",0,0,\").concat(+(sign < 0), \",\").concat(soct.x, \",\").concat(soct.y, \"\\n    A\").concat(outerRadius, \",\").concat(outerRadius, \",0,\").concat(+(outerArcAngle > 180), \",\").concat(+(sign < 0), \",\").concat(eoct.x, \",\").concat(eoct.y, \"\\n    A\").concat(cornerRadius, \",\").concat(cornerRadius, \",0,0,\").concat(+(sign < 0), \",\").concat(eolt.x, \",\").concat(eolt.y, \"\\n  \");\n  if (innerRadius > 0) {\n    var {\n      circleTangency: sict,\n      lineTangency: silt,\n      theta: sit\n    } = getTangentCircle({\n      cx,\n      cy,\n      radius: innerRadius,\n      angle: startAngle,\n      sign,\n      isExternal: true,\n      cornerRadius,\n      cornerIsExternal\n    });\n    var {\n      circleTangency: eict,\n      lineTangency: eilt,\n      theta: eit\n    } = getTangentCircle({\n      cx,\n      cy,\n      radius: innerRadius,\n      angle: endAngle,\n      sign: -sign,\n      isExternal: true,\n      cornerRadius,\n      cornerIsExternal\n    });\n    var innerArcAngle = cornerIsExternal ? Math.abs(startAngle - endAngle) : Math.abs(startAngle - endAngle) - sit - eit;\n    if (innerArcAngle < 0 && cornerRadius === 0) {\n      return \"\".concat(path, \"L\").concat(cx, \",\").concat(cy, \"Z\");\n    }\n    path += \"L\".concat(eilt.x, \",\").concat(eilt.y, \"\\n      A\").concat(cornerRadius, \",\").concat(cornerRadius, \",0,0,\").concat(+(sign < 0), \",\").concat(eict.x, \",\").concat(eict.y, \"\\n      A\").concat(innerRadius, \",\").concat(innerRadius, \",0,\").concat(+(innerArcAngle > 180), \",\").concat(+(sign > 0), \",\").concat(sict.x, \",\").concat(sict.y, \"\\n      A\").concat(cornerRadius, \",\").concat(cornerRadius, \",0,0,\").concat(+(sign < 0), \",\").concat(silt.x, \",\").concat(silt.y, \"Z\");\n  } else {\n    path += \"L\".concat(cx, \",\").concat(cy, \"Z\");\n  }\n  return path;\n};\nvar defaultProps = {\n  cx: 0,\n  cy: 0,\n  innerRadius: 0,\n  outerRadius: 0,\n  startAngle: 0,\n  endAngle: 0,\n  cornerRadius: 0,\n  forceCornerRadius: false,\n  cornerIsExternal: false\n};\nexport var Sector = sectorProps => {\n  var props = resolveDefaultProps(sectorProps, defaultProps);\n  var {\n    cx,\n    cy,\n    innerRadius,\n    outerRadius,\n    cornerRadius,\n    forceCornerRadius,\n    cornerIsExternal,\n    startAngle,\n    endAngle,\n    className\n  } = props;\n  if (outerRadius < innerRadius || startAngle === endAngle) {\n    return null;\n  }\n  var layerClass = clsx('recharts-sector', className);\n  var deltaRadius = outerRadius - innerRadius;\n  var cr = getPercentValue(cornerRadius, deltaRadius, 0, true);\n  var path;\n  if (cr > 0 && Math.abs(startAngle - endAngle) < 360) {\n    path = getSectorWithCorner({\n      cx,\n      cy,\n      innerRadius,\n      outerRadius,\n      cornerRadius: Math.min(cr, deltaRadius / 2),\n      forceCornerRadius,\n      cornerIsExternal,\n      startAngle,\n      endAngle\n    });\n  } else {\n    path = getSectorPath({\n      cx,\n      cy,\n      innerRadius,\n      outerRadius,\n      startAngle,\n      endAngle\n    });\n  }\n  return /*#__PURE__*/React.createElement(\"path\", _extends({}, filterProps(props, true), {\n    className: layerClass,\n    d: path\n  }));\n};","import { polarToCartesian } from '../PolarUtils';\nimport { getRadialCursorPoints } from './getRadialCursorPoints';\nexport function getCursorPoints(layout, activeCoordinate, offset) {\n  var x1, y1, x2, y2;\n  if (layout === 'horizontal') {\n    x1 = activeCoordinate.x;\n    x2 = x1;\n    y1 = offset.top;\n    y2 = offset.top + offset.height;\n  } else if (layout === 'vertical') {\n    y1 = activeCoordinate.y;\n    y2 = y1;\n    x1 = offset.left;\n    x2 = offset.left + offset.width;\n  } else if (activeCoordinate.cx != null && activeCoordinate.cy != null) {\n    if (layout === 'centric') {\n      var {\n        cx,\n        cy,\n        innerRadius,\n        outerRadius,\n        angle\n      } = activeCoordinate;\n      var innerPoint = polarToCartesian(cx, cy, innerRadius, angle);\n      var outerPoint = polarToCartesian(cx, cy, outerRadius, angle);\n      x1 = innerPoint.x;\n      y1 = innerPoint.y;\n      x2 = outerPoint.x;\n      y2 = outerPoint.y;\n    } else {\n      // @ts-expect-error TODO the state is marked as containing Coordinate but actually in polar charts it contains PolarCoordinate, we should keep the polar state separate\n      return getRadialCursorPoints(activeCoordinate);\n    }\n  }\n  return [{\n    x: x1,\n    y: y1\n  }, {\n    x: x2,\n    y: y2\n  }];\n}","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isSymbol = require('../predicate/isSymbol.js');\n\nfunction toNumber(value) {\n    if (isSymbol.isSymbol(value)) {\n        return NaN;\n    }\n    return Number(value);\n}\n\nexports.toNumber = toNumber;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst toNumber = require('./toNumber.js');\n\nfunction toFinite(value) {\n    if (!value) {\n        return value === 0 ? value : 0;\n    }\n    value = toNumber.toNumber(value);\n    if (value === Infinity || value === -Infinity) {\n        const sign = value < 0 ? -1 : 1;\n        return sign * Number.MAX_VALUE;\n    }\n    return value === value ? value : 0;\n}\n\nexports.toFinite = toFinite;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isIterateeCall = require('../_internal/isIterateeCall.js');\nconst toFinite = require('../util/toFinite.js');\n\nfunction range(start, end, step) {\n    if (step && typeof step !== 'number' && isIterateeCall.isIterateeCall(start, end, step)) {\n        end = step = undefined;\n    }\n    start = toFinite.toFinite(start);\n    if (end === undefined) {\n        end = start;\n        start = 0;\n    }\n    else {\n        end = toFinite.toFinite(end);\n    }\n    step = step === undefined ? (start < end ? 1 : -1) : toFinite.toFinite(step);\n    const length = Math.max(Math.ceil((end - start) / (step || 1)), 0);\n    const result = new Array(length);\n    for (let index = 0; index < length; index++) {\n        result[index] = start;\n        start += step;\n    }\n    return result;\n}\n\nexports.range = range;\n","module.exports = require('../dist/compat/math/range.js').range;\n","export default function ascending(a, b) {\n  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n  return a == null || b == null ? NaN\n    : b < a ? -1\n    : b > a ? 1\n    : b >= a ? 0\n    : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n  let compare1, compare2, delta;\n\n  // If an accessor is specified, promote it to a comparator. In this case we\n  // can test whether the search value is (self-) comparable. We can’t do this\n  // for a comparator (except for specific, known comparators) because we can’t\n  // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n  // used to test whether a single value is comparable.\n  if (f.length !== 2) {\n    compare1 = ascending;\n    compare2 = (d, x) => ascending(f(d), x);\n    delta = (d, x) => f(d) - x;\n  } else {\n    compare1 = f === ascending || f === descending ? f : zero;\n    compare2 = f;\n    delta = f;\n  }\n\n  function left(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function right(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) <= 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function center(a, x, lo = 0, hi = a.length) {\n    const i = left(a, x, lo, hi - 1);\n    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n  }\n\n  return {left, center, right};\n}\n\nfunction zero() {\n  return 0;\n}\n","export default function number(x) {\n  return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export class InternMap extends Map {\n  constructor(entries, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (entries != null) for (const [key, value] of entries) this.set(key, value);\n  }\n  get(key) {\n    return super.get(intern_get(this, key));\n  }\n  has(key) {\n    return super.has(intern_get(this, key));\n  }\n  set(key, value) {\n    return super.set(intern_set(this, key), value);\n  }\n  delete(key) {\n    return super.delete(intern_delete(this, key));\n  }\n}\n\nexport class InternSet extends Set {\n  constructor(values, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (values != null) for (const value of values) this.add(value);\n  }\n  has(value) {\n    return super.has(intern_get(this, value));\n  }\n  add(value) {\n    return super.add(intern_set(this, value));\n  }\n  delete(value) {\n    return super.delete(intern_delete(this, value));\n  }\n}\n\nfunction intern_get({_intern, _key}, value) {\n  const key = _key(value);\n  return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) return _intern.get(key);\n  _intern.set(key, value);\n  return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) {\n    value = _intern.get(key);\n    _intern.delete(key);\n  }\n  return value;\n}\n\nfunction keyof(value) {\n  return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  values = Array.from(values);\n  let [f] = F;\n  if ((f && f.length !== 2) || F.length > 1) {\n    const index = Uint32Array.from(values, (d, i) => i);\n    if (F.length > 1) {\n      F = F.map(f => values.map(f));\n      index.sort((i, j) => {\n        for (const f of F) {\n          const c = ascendingDefined(f[i], f[j]);\n          if (c) return c;\n        }\n      });\n    } else {\n      f = values.map(f);\n      index.sort((i, j) => ascendingDefined(f[i], f[j]));\n    }\n    return permute(values, index);\n  }\n  return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n  if (compare === ascending) return ascendingDefined;\n  if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n  return (a, b) => {\n    const x = compare(a, b);\n    if (x || x === 0) return x;\n    return (compare(b, b) === 0) - (compare(a, a) === 0);\n  };\n}\n\nexport function ascendingDefined(a, b) {\n  return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n","const e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n  const step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log10(step)),\n      error = step / Math.pow(10, power),\n      factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n  let i1, i2, inc;\n  if (power < 0) {\n    inc = Math.pow(10, -power) / factor;\n    i1 = Math.round(start * inc);\n    i2 = Math.round(stop * inc);\n    if (i1 / inc < start) ++i1;\n    if (i2 / inc > stop) --i2;\n    inc = -inc;\n  } else {\n    inc = Math.pow(10, power) * factor;\n    i1 = Math.round(start / inc);\n    i2 = Math.round(stop / inc);\n    if (i1 * inc < start) ++i1;\n    if (i2 * inc > stop) --i2;\n  }\n  if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n  return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  if (!(count > 0)) return [];\n  if (start === stop) return [start];\n  const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n  if (!(i2 >= i1)) return [];\n  const n = i2 - i1 + 1, ticks = new Array(n);\n  if (reverse) {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n  } else {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n  }\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n  return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","export default function max(values, valueof) {\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  }\n  return max;\n}\n","export default function min(values, valueof) {\n  let min;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  }\n  return min;\n}\n","import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n  k = Math.floor(k);\n  left = Math.floor(Math.max(0, left));\n  right = Math.floor(Math.min(array.length - 1, right));\n\n  if (!(left <= k && k <= right)) return array;\n\n  compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n  while (right > left) {\n    if (right - left > 600) {\n      const n = right - left + 1;\n      const m = k - left + 1;\n      const z = Math.log(n);\n      const s = 0.5 * Math.exp(2 * z / 3);\n      const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n      const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n      const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n      quickselect(array, k, newLeft, newRight, compare);\n    }\n\n    const t = array[k];\n    let i = left;\n    let j = right;\n\n    swap(array, left, k);\n    if (compare(array[right], t) > 0) swap(array, left, right);\n\n    while (i < j) {\n      swap(array, i, j), ++i, --j;\n      while (compare(array[i], t) < 0) ++i;\n      while (compare(array[j], t) > 0) --j;\n    }\n\n    if (compare(array[left], t) === 0) swap(array, left, j);\n    else ++j, swap(array, j, right);\n\n    if (j <= k) left = j + 1;\n    if (k <= j) right = j - 1;\n  }\n\n  return array;\n}\n\nfunction swap(array, i, j) {\n  const t = array[i];\n  array[i] = array[j];\n  array[j] = t;\n}\n","import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n  values = Float64Array.from(numbers(values, valueof));\n  if (!(n = values.length) || isNaN(p = +p)) return;\n  if (p <= 0 || n < 2) return min(values);\n  if (p >= 1) return max(values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n      value1 = min(values.subarray(i0 + 1));\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n  if (!(n = values.length) || isNaN(p = +p)) return;\n  if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n  if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = +valueof(values[i0], i0, values),\n      value1 = +valueof(values[i0 + 1], i0 + 1, values);\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof = number) {\n  if (isNaN(p = +p)) return;\n  numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\n  if (p <= 0) return minIndex(numbers);\n  if (p >= 1) return maxIndex(numbers);\n  var numbers,\n      index = Uint32Array.from(values, (_, i) => i),\n      j = numbers.length - 1,\n      i = Math.floor(j * p);\n  quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n  i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n  return i >= 0 ? i : -1;\n}\n","export default function range(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n","export function initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: {\n      if (typeof domain === \"function\") this.interpolator(domain);\n      else this.range(domain);\n      break;\n    }\n    default: {\n      this.domain(domain);\n      if (typeof interpolator === \"function\") this.interpolator(interpolator);\n      else this.range(interpolator);\n      break;\n    }\n  }\n  return this;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n  var index = new InternMap(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    let i = index.get(d);\n    if (i === undefined) {\n      if (unknown !== implicit) return unknown;\n      index.set(d, i = domain.push(d) - 1);\n    }\n    return range[i % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = new InternMap();\n    for (const value of _) {\n      if (index.has(value)) continue;\n      index.set(value, domain.push(value) - 1);\n    }\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), scale) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return ordinal(domain, range).unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n  var scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      r0 = 0,\n      r1 = 1,\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    var n = domain().length,\n        reverse = r1 < r0,\n        start = reverse ? r1 : r0,\n        stop = reverse ? r0 : r1;\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n    if (round) step = Math.floor(step);\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n    var values = sequence(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n  };\n\n  scale.rangeRound = function(_) {\n    return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, rescale()) : round;\n  };\n\n  scale.padding = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n  };\n\n  scale.paddingInner = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n  };\n\n  scale.paddingOuter = function(_) {\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n  };\n\n  scale.align = function(_) {\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n  };\n\n  scale.copy = function() {\n    return band(domain(), [r0, r1])\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n  var copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n  delete scale.paddingOuter;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nexport function point() {\n  return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n    reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n    reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n    reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n    reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n    reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHex8: color_formatHex8,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n  return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb() {\n    return this;\n  },\n  clamp() {\n    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n  },\n  displayable() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatHex8: rgb_formatHex8,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n  const a = clampa(this.opacity);\n  return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n  return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n  value = clampi(value);\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  clamp() {\n    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n  },\n  displayable() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl() {\n    const a = clampa(this.opacity);\n    return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n  }\n}));\n\nfunction clamph(value) {\n  value = (value || 0) % 360;\n  return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n  return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n","export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n  const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n  return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n  return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n  // p0 = [ux0, uy0, w0]\n  // p1 = [ux1, uy1, w1]\n  function zoom(p0, p1) {\n    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n        ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n        dx = ux1 - ux0,\n        dy = uy1 - uy0,\n        d2 = dx * dx + dy * dy,\n        i,\n        S;\n\n    // Special case for u0 ≅ u1.\n    if (d2 < epsilon2) {\n      S = Math.log(w1 / w0) / rho;\n      i = function(t) {\n        return [\n          ux0 + t * dx,\n          uy0 + t * dy,\n          w0 * Math.exp(rho * t * S)\n        ];\n      }\n    }\n\n    // General case.\n    else {\n      var d1 = Math.sqrt(d2),\n          b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n          b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n          r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n          r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n      S = (r1 - r0) / rho;\n      i = function(t) {\n        var s = t * S,\n            coshr0 = cosh(r0),\n            u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n        return [\n          ux0 + u * dx,\n          uy0 + u * dy,\n          w0 * coshr0 / cosh(rho * s + r0)\n        ];\n      }\n    }\n\n    i.duration = S * 1000 * rho / Math.SQRT2;\n\n    return i;\n  }\n\n  zoom.rho = function(_) {\n    var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n    return zoomRho(_1, _2, _4);\n  };\n\n  return zoom;\n})(Math.SQRT2, 2, 4);\n","import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n  if (values === undefined) values = interpolate, interpolate = value;\n  var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n  while (i < n) I[i] = interpolate(v, v = values[++i]);\n  return function(t) {\n    var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n    return I[i](t - i);\n  };\n}\n","export default function constants(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function number(x) {\n  return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n  var t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisect(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport function transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    var n = Math.min(domain.length, range.length);\n    if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n    piecewise = n > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = Array.from(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nexport default function continuous() {\n  return transformer()(identity, identity);\n}\n","export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n","export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": (x, p) => (x * 100).toFixed(p),\n  \"b\": (x) => Math.round(x).toString(2),\n  \"c\": (x) => x + \"\",\n  \"d\": formatDecimal,\n  \"e\": (x, p) => x.toExponential(p),\n  \"f\": (x, p) => x.toFixed(p),\n  \"g\": (x, p) => x.toPrecision(p),\n  \"o\": (x) => Math.round(x).toString(8),\n  \"p\": (x, p) => formatRounded(x * 100, p),\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n  \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n  return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain();\n    var i0 = 0;\n    var i1 = d.length - 1;\n    var start = d[i0];\n    var stop = d[i1];\n    var prestep;\n    var step;\n    var maxIter = 10;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n    \n    while (maxIter-- > 0) {\n      step = tickIncrement(start, stop, count);\n      if (step === prestep) {\n        d[i0] = start\n        d[i1] = stop\n        return domain(d);\n      } else if (step > 0) {\n        start = Math.floor(start / step) * step;\n        stop = Math.ceil(stop / step) * step;\n      } else if (step < 0) {\n        start = Math.ceil(start * step) / step;\n        stop = Math.floor(stop * step) / step;\n      } else {\n        break;\n      }\n      prestep = step;\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous();\n\n  scale.copy = function() {\n    return copy(scale, linear());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","import {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n  var unknown;\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : x;\n  }\n\n  scale.invert = scale;\n\n  scale.domain = scale.range = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return identity(domain).unknown(unknown);\n  };\n\n  domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n  return linearish(scale);\n}\n","export default function nice(domain, interval) {\n  domain = domain.slice();\n\n  var i0 = 0,\n      i1 = domain.length - 1,\n      x0 = domain[i0],\n      x1 = domain[i1],\n      t;\n\n  if (x1 < x0) {\n    t = i0, i0 = i1, i1 = t;\n    t = x0, x0 = x1, x1 = t;\n  }\n\n  domain[i0] = interval.floor(x0);\n  domain[i1] = interval.ceil(x1);\n  return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n  return Math.log(x);\n}\n\nfunction transformExp(x) {\n  return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n  return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n  return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n  return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n  return base === 10 ? pow10\n      : base === Math.E ? Math.exp\n      : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n  return base === Math.E ? Math.log\n      : base === 10 && Math.log10\n      || base === 2 && Math.log2\n      || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n  return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n  const scale = transform(transformLog, transformExp);\n  const domain = scale.domain;\n  let base = 10;\n  let logs;\n  let pows;\n\n  function rescale() {\n    logs = logp(base), pows = powp(base);\n    if (domain()[0] < 0) {\n      logs = reflect(logs), pows = reflect(pows);\n      transform(transformLogn, transformExpn);\n    } else {\n      transform(transformLog, transformExp);\n    }\n    return scale;\n  }\n\n  scale.base = function(_) {\n    return arguments.length ? (base = +_, rescale()) : base;\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.ticks = count => {\n    const d = domain();\n    let u = d[0];\n    let v = d[d.length - 1];\n    const r = v < u;\n\n    if (r) ([u, v] = [v, u]);\n\n    let i = logs(u);\n    let j = logs(v);\n    let k;\n    let t;\n    const n = count == null ? 10 : +count;\n    let z = [];\n\n    if (!(base % 1) && j - i < n) {\n      i = Math.floor(i), j = Math.ceil(j);\n      if (u > 0) for (; i <= j; ++i) {\n        for (k = 1; k < base; ++k) {\n          t = i < 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      } else for (; i <= j; ++i) {\n        for (k = base - 1; k >= 1; --k) {\n          t = i > 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      }\n      if (z.length * 2 < n) z = ticks(u, v, n);\n    } else {\n      z = ticks(i, j, Math.min(j - i, n)).map(pows);\n    }\n    return r ? z.reverse() : z;\n  };\n\n  scale.tickFormat = (count, specifier) => {\n    if (count == null) count = 10;\n    if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n    if (typeof specifier !== \"function\") {\n      if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n      specifier = format(specifier);\n    }\n    if (count === Infinity) return specifier;\n    const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n    return d => {\n      let i = d / pows(Math.round(logs(d)));\n      if (i * base < base - 0.5) i *= base;\n      return i <= k ? specifier(d) : \"\";\n    };\n  };\n\n  scale.nice = () => {\n    return domain(nice(domain(), {\n      floor: x => pows(Math.floor(logs(x))),\n      ceil: x => pows(Math.ceil(logs(x)))\n    }));\n  };\n\n  return scale;\n}\n\nexport default function log() {\n  const scale = loggish(transformer()).domain([1, 10]);\n  scale.copy = () => copy(scale, log()).base(scale.base());\n  initRange.apply(scale, arguments);\n  return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n  return function(x) {\n    return Math.sign(x) * Math.log1p(Math.abs(x / c));\n  };\n}\n\nfunction transformSymexp(c) {\n  return function(x) {\n    return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n  };\n}\n\nexport function symlogish(transform) {\n  var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n  scale.constant = function(_) {\n    return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n  };\n\n  return linearish(scale);\n}\n\nexport default function symlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, symlog()).constant(scale.constant());\n  };\n\n  return initRange.apply(scale, arguments);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n  return function(x) {\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n  };\n}\n\nfunction transformSqrt(x) {\n  return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n  return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n  var scale = transform(identity, identity),\n      exponent = 1;\n\n  function rescale() {\n    return exponent === 1 ? transform(identity, identity)\n        : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n        : transform(transformPow(exponent), transformPow(1 / exponent));\n  }\n\n  scale.exponent = function(_) {\n    return arguments.length ? (exponent = +_, rescale()) : exponent;\n  };\n\n  return linearish(scale);\n}\n\nexport default function pow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, pow()).exponent(scale.exponent());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n\nexport function sqrt() {\n  return pow.apply(null, arguments).exponent(0.5);\n}\n","import continuous from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nfunction square(x) {\n  return Math.sign(x) * x * x;\n}\n\nfunction unsquare(x) {\n  return Math.sign(x) * Math.sqrt(Math.abs(x));\n}\n\nexport default function radial() {\n  var squared = continuous(),\n      range = [0, 1],\n      round = false,\n      unknown;\n\n  function scale(x) {\n    var y = unsquare(squared(x));\n    return isNaN(y) ? unknown : round ? Math.round(y) : y;\n  }\n\n  scale.invert = function(y) {\n    return squared.invert(square(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (squared.domain(_), scale) : squared.domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (squared.range((range = Array.from(_, number)).map(square)), scale) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return scale.range(_).round(true);\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, scale) : round;\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (squared.clamp(_), scale) : squared.clamp();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return radial(squared.domain(), range)\n        .round(round)\n        .clamp(squared.clamp())\n        .unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n  var domain = [],\n      range = [],\n      thresholds = [],\n      unknown;\n\n  function rescale() {\n    var i = 0, n = Math.max(1, range.length);\n    thresholds = new Array(n - 1);\n    while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n  }\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN] : [\n      i > 0 ? thresholds[i - 1] : domain[0],\n      i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n    ];\n  };\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(ascending);\n    return rescale();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.quantiles = function() {\n    return thresholds.slice();\n  };\n\n  scale.copy = function() {\n    return quantile()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {linearish} from \"./linear.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantize() {\n  var x0 = 0,\n      x1 = 1,\n      n = 1,\n      domain = [0.5],\n      range = [0, 1],\n      unknown;\n\n  function scale(x) {\n    return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n  }\n\n  function rescale() {\n    var i = -1;\n    domain = new Array(n);\n    while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n    return scale;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN]\n        : i < 1 ? [x0, domain[0]]\n        : i >= n ? [domain[n - 1], x1]\n        : [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : scale;\n  };\n\n  scale.thresholds = function() {\n    return domain.slice();\n  };\n\n  scale.copy = function() {\n    return quantize()\n        .domain([x0, x1])\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(linearish(scale), arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n  var domain = [0.5],\n      range = [0, 1],\n      unknown,\n      n = 1;\n\n  function scale(x) {\n    return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return threshold()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n  }\n\n  interval.floor = (date) => {\n    return floori(date = new Date(+date)), date;\n  };\n\n  interval.ceil = (date) => {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = (date) => {\n    const d0 = interval(date), d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = (date, step) => {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = (start, stop, step) => {\n    const range = [];\n    start = interval.ceil(start);\n    step = step == null ? 1 : Math.floor(step);\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n    let previous;\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n    while (previous < start && start < stop);\n    return range;\n  };\n\n  interval.filter = (test) => {\n    return timeInterval((date) => {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, (date, step) => {\n      if (date >= date) {\n        if (step < 0) while (++step <= 0) {\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n        } else while (--step >= 0) {\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n        }\n      }\n    });\n  };\n\n  if (count) {\n    interval.count = (start, end) => {\n      t0.setTime(+start), t1.setTime(+end);\n      floori(t0), floori(t1);\n      return Math.floor(count(t0, t1));\n    };\n\n    interval.every = (step) => {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? (d) => field(d) % step === 0\n              : (d) => interval.count(0, d) % step === 0);\n    };\n  }\n\n  return interval;\n}\n","import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n  // noop\n}, (date, step) => {\n  date.setTime(+date + step);\n}, (start, end) => {\n  return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n  k = Math.floor(k);\n  if (!isFinite(k) || !(k > 0)) return null;\n  if (!(k > 1)) return millisecond;\n  return timeInterval((date) => {\n    date.setTime(Math.floor(date / k) * k);\n  }, (date, step) => {\n    date.setTime(+date + step * k);\n  }, (start, end) => {\n    return (end - start) / k;\n  });\n};\n\nexport const milliseconds = millisecond.range;\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n  date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n  return (end - start) / durationSecond;\n}, (date) => {\n  return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n  date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n  return (end - start) / durationMinute;\n}, (date) => {\n  return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n  date.setUTCSeconds(0, 0);\n}, (date, step) => {\n  date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n  return (end - start) / durationMinute;\n}, (date) => {\n  return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n  date.setTime(+date + step * durationHour);\n}, (start, end) => {\n  return (end - start) / durationHour;\n}, (date) => {\n  return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n  date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n  date.setTime(+date + step * durationHour);\n}, (start, end) => {\n  return (end - start) / durationHour;\n}, (date) => {\n  return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n  date => date.setHours(0, 0, 0, 0),\n  (date, step) => date.setDate(date.getDate() + step),\n  (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n  date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n  return (end - start) / durationDay;\n}, (date) => {\n  return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n  return (end - start) / durationDay;\n}, (date) => {\n  return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n  return timeInterval((date) => {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setDate(date.getDate() + step * 7);\n  }, (start, end) => {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n  });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n  return timeInterval((date) => {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, (start, end) => {\n    return (end - start) / durationWeek;\n  });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n  return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n  date.setUTCDate(1);\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n  return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n  return end.getFullYear() - start.getFullYear();\n}, (date) => {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\n\nexport const utcYears = utcYear.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n  const tickIntervals = [\n    [second,  1,      durationSecond],\n    [second,  5,  5 * durationSecond],\n    [second, 15, 15 * durationSecond],\n    [second, 30, 30 * durationSecond],\n    [minute,  1,      durationMinute],\n    [minute,  5,  5 * durationMinute],\n    [minute, 15, 15 * durationMinute],\n    [minute, 30, 30 * durationMinute],\n    [  hour,  1,      durationHour  ],\n    [  hour,  3,  3 * durationHour  ],\n    [  hour,  6,  6 * durationHour  ],\n    [  hour, 12, 12 * durationHour  ],\n    [   day,  1,      durationDay   ],\n    [   day,  2,  2 * durationDay   ],\n    [  week,  1,      durationWeek  ],\n    [ month,  1,      durationMonth ],\n    [ month,  3,  3 * durationMonth ],\n    [  year,  1,      durationYear  ]\n  ];\n\n  function ticks(start, stop, count) {\n    const reverse = stop < start;\n    if (reverse) [start, stop] = [stop, start];\n    const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n    const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n    return reverse ? ticks.reverse() : ticks;\n  }\n\n  function tickInterval(start, stop, count) {\n    const target = Math.abs(stop - start) / count;\n    const i = bisector(([,, step]) => step).right(tickIntervals, target);\n    if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n    if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n    const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n    return t.every(step);\n  }\n\n  return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import {\n  timeDay,\n  timeSunday,\n  timeMonday,\n  timeThursday,\n  timeYear,\n  utcDay,\n  utcSunday,\n  utcMonday,\n  utcThursday,\n  utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n    date.setFullYear(d.y);\n    return date;\n  }\n  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n    date.setUTCFullYear(d.y);\n    return date;\n  }\n  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n  return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n  var locale_dateTime = locale.dateTime,\n      locale_date = locale.date,\n      locale_time = locale.time,\n      locale_periods = locale.periods,\n      locale_weekdays = locale.days,\n      locale_shortWeekdays = locale.shortDays,\n      locale_months = locale.months,\n      locale_shortMonths = locale.shortMonths;\n\n  var periodRe = formatRe(locale_periods),\n      periodLookup = formatLookup(locale_periods),\n      weekdayRe = formatRe(locale_weekdays),\n      weekdayLookup = formatLookup(locale_weekdays),\n      shortWeekdayRe = formatRe(locale_shortWeekdays),\n      shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n      monthRe = formatRe(locale_months),\n      monthLookup = formatLookup(locale_months),\n      shortMonthRe = formatRe(locale_shortMonths),\n      shortMonthLookup = formatLookup(locale_shortMonths);\n\n  var formats = {\n    \"a\": formatShortWeekday,\n    \"A\": formatWeekday,\n    \"b\": formatShortMonth,\n    \"B\": formatMonth,\n    \"c\": null,\n    \"d\": formatDayOfMonth,\n    \"e\": formatDayOfMonth,\n    \"f\": formatMicroseconds,\n    \"g\": formatYearISO,\n    \"G\": formatFullYearISO,\n    \"H\": formatHour24,\n    \"I\": formatHour12,\n    \"j\": formatDayOfYear,\n    \"L\": formatMilliseconds,\n    \"m\": formatMonthNumber,\n    \"M\": formatMinutes,\n    \"p\": formatPeriod,\n    \"q\": formatQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatSeconds,\n    \"u\": formatWeekdayNumberMonday,\n    \"U\": formatWeekNumberSunday,\n    \"V\": formatWeekNumberISO,\n    \"w\": formatWeekdayNumberSunday,\n    \"W\": formatWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatYear,\n    \"Y\": formatFullYear,\n    \"Z\": formatZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var utcFormats = {\n    \"a\": formatUTCShortWeekday,\n    \"A\": formatUTCWeekday,\n    \"b\": formatUTCShortMonth,\n    \"B\": formatUTCMonth,\n    \"c\": null,\n    \"d\": formatUTCDayOfMonth,\n    \"e\": formatUTCDayOfMonth,\n    \"f\": formatUTCMicroseconds,\n    \"g\": formatUTCYearISO,\n    \"G\": formatUTCFullYearISO,\n    \"H\": formatUTCHour24,\n    \"I\": formatUTCHour12,\n    \"j\": formatUTCDayOfYear,\n    \"L\": formatUTCMilliseconds,\n    \"m\": formatUTCMonthNumber,\n    \"M\": formatUTCMinutes,\n    \"p\": formatUTCPeriod,\n    \"q\": formatUTCQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatUTCSeconds,\n    \"u\": formatUTCWeekdayNumberMonday,\n    \"U\": formatUTCWeekNumberSunday,\n    \"V\": formatUTCWeekNumberISO,\n    \"w\": formatUTCWeekdayNumberSunday,\n    \"W\": formatUTCWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatUTCYear,\n    \"Y\": formatUTCFullYear,\n    \"Z\": formatUTCZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var parses = {\n    \"a\": parseShortWeekday,\n    \"A\": parseWeekday,\n    \"b\": parseShortMonth,\n    \"B\": parseMonth,\n    \"c\": parseLocaleDateTime,\n    \"d\": parseDayOfMonth,\n    \"e\": parseDayOfMonth,\n    \"f\": parseMicroseconds,\n    \"g\": parseYear,\n    \"G\": parseFullYear,\n    \"H\": parseHour24,\n    \"I\": parseHour24,\n    \"j\": parseDayOfYear,\n    \"L\": parseMilliseconds,\n    \"m\": parseMonthNumber,\n    \"M\": parseMinutes,\n    \"p\": parsePeriod,\n    \"q\": parseQuarter,\n    \"Q\": parseUnixTimestamp,\n    \"s\": parseUnixTimestampSeconds,\n    \"S\": parseSeconds,\n    \"u\": parseWeekdayNumberMonday,\n    \"U\": parseWeekNumberSunday,\n    \"V\": parseWeekNumberISO,\n    \"w\": parseWeekdayNumberSunday,\n    \"W\": parseWeekNumberMonday,\n    \"x\": parseLocaleDate,\n    \"X\": parseLocaleTime,\n    \"y\": parseYear,\n    \"Y\": parseFullYear,\n    \"Z\": parseZone,\n    \"%\": parseLiteralPercent\n  };\n\n  // These recursive directive definitions must be deferred.\n  formats.x = newFormat(locale_date, formats);\n  formats.X = newFormat(locale_time, formats);\n  formats.c = newFormat(locale_dateTime, formats);\n  utcFormats.x = newFormat(locale_date, utcFormats);\n  utcFormats.X = newFormat(locale_time, utcFormats);\n  utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n  function newFormat(specifier, formats) {\n    return function(date) {\n      var string = [],\n          i = -1,\n          j = 0,\n          n = specifier.length,\n          c,\n          pad,\n          format;\n\n      if (!(date instanceof Date)) date = new Date(+date);\n\n      while (++i < n) {\n        if (specifier.charCodeAt(i) === 37) {\n          string.push(specifier.slice(j, i));\n          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n          else pad = c === \"e\" ? \" \" : \"0\";\n          if (format = formats[c]) c = format(date, pad);\n          string.push(c);\n          j = i + 1;\n        }\n      }\n\n      string.push(specifier.slice(j, i));\n      return string.join(\"\");\n    };\n  }\n\n  function newParse(specifier, Z) {\n    return function(string) {\n      var d = newDate(1900, undefined, 1),\n          i = parseSpecifier(d, specifier, string += \"\", 0),\n          week, day;\n      if (i != string.length) return null;\n\n      // If a UNIX timestamp is specified, return it.\n      if (\"Q\" in d) return new Date(d.Q);\n      if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n      // If this is utcParse, never use the local timezone.\n      if (Z && !(\"Z\" in d)) d.Z = 0;\n\n      // The am-pm flag is 0 for AM, and 1 for PM.\n      if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n      // If the month was not specified, inherit from the quarter.\n      if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n      // Convert day-of-week and week-of-year to day-of-year.\n      if (\"V\" in d) {\n        if (d.V < 1 || d.V > 53) return null;\n        if (!(\"w\" in d)) d.w = 1;\n        if (\"Z\" in d) {\n          week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n          week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n          week = utcDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getUTCFullYear();\n          d.m = week.getUTCMonth();\n          d.d = week.getUTCDate() + (d.w + 6) % 7;\n        } else {\n          week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n          week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n          week = timeDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getFullYear();\n          d.m = week.getMonth();\n          d.d = week.getDate() + (d.w + 6) % 7;\n        }\n      } else if (\"W\" in d || \"U\" in d) {\n        if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n        day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n        d.m = 0;\n        d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n      }\n\n      // If a time zone is specified, all fields are interpreted as UTC and then\n      // offset according to the specified time zone.\n      if (\"Z\" in d) {\n        d.H += d.Z / 100 | 0;\n        d.M += d.Z % 100;\n        return utcDate(d);\n      }\n\n      // Otherwise, all fields are in local time.\n      return localDate(d);\n    };\n  }\n\n  function parseSpecifier(d, specifier, string, j) {\n    var i = 0,\n        n = specifier.length,\n        m = string.length,\n        c,\n        parse;\n\n    while (i < n) {\n      if (j >= m) return -1;\n      c = specifier.charCodeAt(i++);\n      if (c === 37) {\n        c = specifier.charAt(i++);\n        parse = parses[c in pads ? specifier.charAt(i++) : c];\n        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n      } else if (c != string.charCodeAt(j++)) {\n        return -1;\n      }\n    }\n\n    return j;\n  }\n\n  function parsePeriod(d, string, i) {\n    var n = periodRe.exec(string.slice(i));\n    return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseShortWeekday(d, string, i) {\n    var n = shortWeekdayRe.exec(string.slice(i));\n    return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseWeekday(d, string, i) {\n    var n = weekdayRe.exec(string.slice(i));\n    return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseShortMonth(d, string, i) {\n    var n = shortMonthRe.exec(string.slice(i));\n    return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseMonth(d, string, i) {\n    var n = monthRe.exec(string.slice(i));\n    return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseLocaleDateTime(d, string, i) {\n    return parseSpecifier(d, locale_dateTime, string, i);\n  }\n\n  function parseLocaleDate(d, string, i) {\n    return parseSpecifier(d, locale_date, string, i);\n  }\n\n  function parseLocaleTime(d, string, i) {\n    return parseSpecifier(d, locale_time, string, i);\n  }\n\n  function formatShortWeekday(d) {\n    return locale_shortWeekdays[d.getDay()];\n  }\n\n  function formatWeekday(d) {\n    return locale_weekdays[d.getDay()];\n  }\n\n  function formatShortMonth(d) {\n    return locale_shortMonths[d.getMonth()];\n  }\n\n  function formatMonth(d) {\n    return locale_months[d.getMonth()];\n  }\n\n  function formatPeriod(d) {\n    return locale_periods[+(d.getHours() >= 12)];\n  }\n\n  function formatQuarter(d) {\n    return 1 + ~~(d.getMonth() / 3);\n  }\n\n  function formatUTCShortWeekday(d) {\n    return locale_shortWeekdays[d.getUTCDay()];\n  }\n\n  function formatUTCWeekday(d) {\n    return locale_weekdays[d.getUTCDay()];\n  }\n\n  function formatUTCShortMonth(d) {\n    return locale_shortMonths[d.getUTCMonth()];\n  }\n\n  function formatUTCMonth(d) {\n    return locale_months[d.getUTCMonth()];\n  }\n\n  function formatUTCPeriod(d) {\n    return locale_periods[+(d.getUTCHours() >= 12)];\n  }\n\n  function formatUTCQuarter(d) {\n    return 1 + ~~(d.getUTCMonth() / 3);\n  }\n\n  return {\n    format: function(specifier) {\n      var f = newFormat(specifier += \"\", formats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    parse: function(specifier) {\n      var p = newParse(specifier += \"\", false);\n      p.toString = function() { return specifier; };\n      return p;\n    },\n    utcFormat: function(specifier) {\n      var f = newFormat(specifier += \"\", utcFormats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    utcParse: function(specifier) {\n      var p = newParse(specifier += \"\", true);\n      p.toString = function() { return specifier; };\n      return p;\n    }\n  };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n    numberRe = /^\\s*\\d+/, // note: ignores next directive\n    percentRe = /^%/,\n    requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n  var sign = value < 0 ? \"-\" : \"\",\n      string = (sign ? -value : value) + \"\",\n      length = string.length;\n  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n  return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n  return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n  return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 4));\n  return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n  var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 6));\n  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n  var n = percentRe.exec(string.slice(i, i + 1));\n  return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n  return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n  return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n  return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n  return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n  return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n  return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n  return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n  return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n  return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n  var day = d.getDay();\n  return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n  return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n  var day = d.getDay();\n  return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n  d = dISO(d);\n  return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n  return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n  return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n  d = dISO(d);\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n  var day = d.getDay();\n  d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n  var z = d.getTimezoneOffset();\n  return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n      + pad(z / 60 | 0, \"0\", 2)\n      + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n  return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n  return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n  return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n  return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n  return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n  return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n  return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n  return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n  return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n  var dow = d.getUTCDay();\n  return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n  return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n  var day = d.getUTCDay();\n  return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n  d = UTCdISO(d);\n  return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n  return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n  return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n  d = UTCdISO(d);\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n  var day = d.getUTCDay();\n  d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n  return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n  return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n  return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n  return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n  dateTime: \"%x, %X\",\n  date: \"%-m/%-d/%Y\",\n  time: \"%-I:%M:%S %p\",\n  periods: [\"AM\", \"PM\"],\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n  shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n  shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  timeFormat = locale.format;\n  timeParse = locale.parse;\n  utcFormat = locale.utcFormat;\n  utcParse = locale.utcParse;\n  return locale;\n}\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n  return new Date(t);\n}\n\nfunction number(t) {\n  return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n  var scale = continuous(),\n      invert = scale.invert,\n      domain = scale.domain;\n\n  var formatMillisecond = format(\".%L\"),\n      formatSecond = format(\":%S\"),\n      formatMinute = format(\"%I:%M\"),\n      formatHour = format(\"%I %p\"),\n      formatDay = format(\"%a %d\"),\n      formatWeek = format(\"%b %d\"),\n      formatMonth = format(\"%B\"),\n      formatYear = format(\"%Y\");\n\n  function tickFormat(date) {\n    return (second(date) < date ? formatMillisecond\n        : minute(date) < date ? formatSecond\n        : hour(date) < date ? formatMinute\n        : day(date) < date ? formatHour\n        : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n        : year(date) < date ? formatMonth\n        : formatYear)(date);\n  }\n\n  scale.invert = function(y) {\n    return new Date(invert(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n  };\n\n  scale.ticks = function(interval) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    return specifier == null ? tickFormat : format(specifier);\n  };\n\n  scale.nice = function(interval) {\n    var d = domain();\n    if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n    return interval ? domain(nice(d, interval)) : scale;\n  };\n\n  scale.copy = function() {\n    return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n  };\n\n  return scale;\n}\n\nexport default function time() {\n  return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n  return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n  var x0 = 0,\n      x1 = 1,\n      t0,\n      t1,\n      k10,\n      transform,\n      interpolator = identity,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  function range(interpolate) {\n    return function(_) {\n      var r0, r1;\n      return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n    };\n  }\n\n  scale.range = range(interpolate);\n\n  scale.rangeRound = range(interpolateRound);\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n    return scale;\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .interpolator(source.interpolator())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport default function sequential() {\n  var scale = linearish(transformer()(identity));\n\n  scale.copy = function() {\n    return copy(scale, sequential());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n  var scale = loggish(transformer()).domain([1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, sequentialLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, sequentialSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, sequentialPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n  return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect, quantile} from \"d3-array\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\n\nexport default function sequentialQuantile() {\n  var domain = [],\n      interpolator = identity;\n\n  function scale(x) {\n    if (x != null && !isNaN(x = +x)) return interpolator((bisect(domain, x, 1) - 1) / (domain.length - 1));\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(ascending);\n    return scale;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  scale.range = function() {\n    return domain.map((d, i) => interpolator(i / (domain.length - 1)));\n  };\n\n  scale.quantiles = function(n) {\n    return Array.from({length: n + 1}, (_, i) => quantile(domain, i / n));\n  };\n\n  scale.copy = function() {\n    return sequentialQuantile(interpolator).domain(domain);\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n","import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n  var x0 = 0,\n      x1 = 0.5,\n      x2 = 1,\n      s = 1,\n      t0,\n      t1,\n      t2,\n      k10,\n      k21,\n      interpolator = identity,\n      transform,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  function range(interpolate) {\n    return function(_) {\n      var r0, r1, r2;\n      return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n    };\n  }\n\n  scale.range = range(interpolate);\n\n  scale.rangeRound = range(interpolateRound);\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n    return scale;\n  };\n}\n\nexport default function diverging() {\n  var scale = linearish(transformer()(identity));\n\n  scale.copy = function() {\n    return copy(scale, diverging());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n  var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, divergingLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, divergingSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, divergingPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n  return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","import { createSelector } from 'reselect';\n/**\n * This selector always returns the data with the indexes set by a Brush.\n * Trouble is, that might or might not be what you want.\n *\n * In charts with Brush, you will sometimes want to select the full range of data, and sometimes the one decided by the Brush\n * - even if the Brush is active, the panorama inside the Brush should show the full range of data.\n *\n * So instead of this selector, consider using either selectChartDataAndAlwaysIgnoreIndexes or selectChartDataWithIndexesIfNotInPanorama\n *\n * @param state RechartsRootState\n * @returns data defined on the chart root element, such as BarChart or ScatterChart\n */\nexport var selectChartDataWithIndexes = state => state.chartData;\n\n/**\n * This selector will always return the full range of data, ignoring the indexes set by a Brush.\n * Useful for when you want to render the full range of data, even if a Brush is active.\n * For example: in the Brush panorama, in Legend, in Tooltip.\n */\nexport var selectChartDataAndAlwaysIgnoreIndexes = createSelector([selectChartDataWithIndexes], dataState => {\n  var dataEndIndex = dataState.chartData != null ? dataState.chartData.length - 1 : 0;\n  return {\n    chartData: dataState.chartData,\n    computedData: dataState.computedData,\n    dataEndIndex,\n    dataStartIndex: 0\n  };\n});\nexport var selectChartDataWithIndexesIfNotInPanorama = (state, _xAxisId, _yAxisId, isPanorama) => {\n  if (isPanorama) {\n    return selectChartDataAndAlwaysIgnoreIndexes(state);\n  }\n  return selectChartDataWithIndexes(state);\n};","import { MAX_VALUE_REG, MIN_VALUE_REG } from './ChartUtils';\nimport { isNumber } from './DataUtils';\nimport { isWellBehavedNumber } from './isWellBehavedNumber';\nexport function isWellFormedNumberDomain(v) {\n  if (Array.isArray(v) && v.length === 2) {\n    var [min, max] = v;\n    if (isWellBehavedNumber(min) && isWellBehavedNumber(max)) {\n      return true;\n    }\n  }\n  return false;\n}\nexport function extendDomain(providedDomain, boundaryDomain, allowDataOverflow) {\n  if (allowDataOverflow) {\n    // If the data are allowed to overflow - we're fine with whatever user provided\n    return providedDomain;\n  }\n  /*\n   * If the data are not allowed to overflow - we need to extend the domain.\n   * Means that effectively the user is allowed to make the domain larger\n   * but not smaller.\n   */\n  return [Math.min(providedDomain[0], boundaryDomain[0]), Math.max(providedDomain[1], boundaryDomain[1])];\n}\n\n/**\n * So Recharts allows users to provide their own domains,\n * but it also places some expectations on what the domain is.\n * We can improve on the typescript typing, but we also need a runtime test\n to observe that the user-provided domain is well-formed,\n * that is: an array with exactly two numbers.\n *\n * This function does not accept data as an argument.\n * This is to enable a performance optimization - if the domain is there,\n * and we know what it is without traversing all the data,\n * then we don't have to traverse all the data!\n *\n * If the user-provided domain is not well-formed,\n * this function will return undefined - in which case we should traverse the data to calculate the real domain.\n *\n * This function is for parsing the numerical domain only.\n *\n * @param userDomain external prop, user provided, before validation. Can have various shapes: array, function, special magical strings inside too.\n * @param allowDataOverflow boolean, provided by users. If true then the data domain wins\n *\n * @return [min, max] domain if it's well-formed; undefined if the domain is invalid\n */\nexport function numericalDomainSpecifiedWithoutRequiringData(userDomain, allowDataOverflow) {\n  if (!allowDataOverflow) {\n    // Cannot compute data overflow if the data is not provided\n    return undefined;\n  }\n  if (typeof userDomain === 'function') {\n    // The user function expects the data to be provided as an argument\n    return undefined;\n  }\n  if (Array.isArray(userDomain) && userDomain.length === 2) {\n    var [providedMin, providedMax] = userDomain;\n    var finalMin, finalMax;\n    if (isWellBehavedNumber(providedMin)) {\n      finalMin = providedMin;\n    } else if (typeof providedMin === 'function') {\n      // The user function expects the data to be provided as an argument\n      return undefined;\n    }\n    if (isWellBehavedNumber(providedMax)) {\n      finalMax = providedMax;\n    } else if (typeof providedMax === 'function') {\n      // The user function expects the data to be provided as an argument\n      return undefined;\n    }\n    var candidate = [finalMin, finalMax];\n    if (isWellFormedNumberDomain(candidate)) {\n      return candidate;\n    }\n  }\n  return undefined;\n}\n\n/**\n * So Recharts allows users to provide their own domains,\n * but it also places some expectations on what the domain is.\n * We can improve on the typescript typing, but we also need a runtime test\n * to observe that the user-provided domain is well-formed,\n * that is: an array with exactly two numbers.\n * If the user-provided domain is not well-formed,\n * this function will return undefined - in which case we should traverse the data to calculate the real domain.\n *\n * This function is for parsing the numerical domain only.\n *\n * You are probably thinking, why does domain need tick count?\n * Well it adjusts the domain based on where the \"nice ticks\" land, and nice ticks depend on the tick count.\n *\n * @param userDomain external prop, user provided, before validation. Can have various shapes: array, function, special magical strings inside too.\n * @param dataDomain calculated from data. Can be undefined, as an option for performance optimization\n * @param allowDataOverflow provided by users. If true then the data domain wins\n *\n * @return [min, max] domain if it's well-formed; undefined if the domain is invalid\n */\nexport function parseNumericalUserDomain(userDomain, dataDomain, allowDataOverflow) {\n  if (!allowDataOverflow && dataDomain == null) {\n    // Cannot compute data overflow if the data is not provided\n    return undefined;\n  }\n  if (typeof userDomain === 'function' && dataDomain != null) {\n    try {\n      var result = userDomain(dataDomain, allowDataOverflow);\n      if (isWellFormedNumberDomain(result)) {\n        return extendDomain(result, dataDomain, allowDataOverflow);\n      }\n    } catch (_unused) {\n      /* ignore the exception and compute domain from data later */\n    }\n  }\n  if (Array.isArray(userDomain) && userDomain.length === 2) {\n    var [providedMin, providedMax] = userDomain;\n    var finalMin, finalMax;\n    if (providedMin === 'auto') {\n      if (dataDomain != null) {\n        finalMin = Math.min(...dataDomain);\n      }\n    } else if (isNumber(providedMin)) {\n      finalMin = providedMin;\n    } else if (typeof providedMin === 'function') {\n      try {\n        if (dataDomain != null) {\n          finalMin = providedMin(dataDomain === null || dataDomain === void 0 ? void 0 : dataDomain[0]);\n        }\n      } catch (_unused2) {\n        /* ignore the exception and compute domain from data later */\n      }\n    } else if (typeof providedMin === 'string' && MIN_VALUE_REG.test(providedMin)) {\n      var match = MIN_VALUE_REG.exec(providedMin);\n      if (match == null || dataDomain == null) {\n        finalMin = undefined;\n      } else {\n        var value = +match[1];\n        finalMin = dataDomain[0] - value;\n      }\n    } else {\n      finalMin = dataDomain === null || dataDomain === void 0 ? void 0 : dataDomain[0];\n    }\n    if (providedMax === 'auto') {\n      if (dataDomain != null) {\n        finalMax = Math.max(...dataDomain);\n      }\n    } else if (isNumber(providedMax)) {\n      finalMax = providedMax;\n    } else if (typeof providedMax === 'function') {\n      try {\n        if (dataDomain != null) {\n          finalMax = providedMax(dataDomain === null || dataDomain === void 0 ? void 0 : dataDomain[1]);\n        }\n      } catch (_unused3) {\n        /* ignore the exception and compute domain from data later */\n      }\n    } else if (typeof providedMax === 'string' && MAX_VALUE_REG.test(providedMax)) {\n      var _match = MAX_VALUE_REG.exec(providedMax);\n      if (_match == null || dataDomain == null) {\n        finalMax = undefined;\n      } else {\n        var _value = +_match[1];\n        finalMax = dataDomain[1] + _value;\n      }\n    } else {\n      finalMax = dataDomain === null || dataDomain === void 0 ? void 0 : dataDomain[1];\n    }\n    var candidate = [finalMin, finalMax];\n    if (isWellFormedNumberDomain(candidate)) {\n      if (dataDomain == null) {\n        return candidate;\n      }\n      return extendDomain(candidate, dataDomain, allowDataOverflow);\n    }\n  }\n  return undefined;\n}","/*\r\n *  decimal.js-light v2.5.1\r\n *  An arbitrary-precision Decimal type for JavaScript.\r\n *  https://github.com/MikeMcl/decimal.js-light\r\n *  Copyright (c) 2020 Michael Mclaughlin <M8ch88l@gmail.com>\r\n *  MIT Expat Licence\r\n */\r\n\r\n\r\n// ------------------------------------  EDITABLE DEFAULTS  ------------------------------------- //\r\n\r\n\r\n// The limit on the value of `precision`, and on the value of the first argument to\r\n// `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.\r\nvar MAX_DIGITS = 1e9,                        // 0 to 1e9\r\n\r\n\r\n  // The initial configuration properties of the Decimal constructor.\r\n  defaults = {\r\n\r\n    // These values must be integers within the stated ranges (inclusive).\r\n    // Most of these values can be changed during run-time using `Decimal.config`.\r\n\r\n    // The maximum number of significant digits of the result of a calculation or base conversion.\r\n    // E.g. `Decimal.config({ precision: 20 });`\r\n    precision: 20,                         // 1 to MAX_DIGITS\r\n\r\n    // The rounding mode used by default by `toInteger`, `toDecimalPlaces`, `toExponential`,\r\n    // `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n    //\r\n    // ROUND_UP         0 Away from zero.\r\n    // ROUND_DOWN       1 Towards zero.\r\n    // ROUND_CEIL       2 Towards +Infinity.\r\n    // ROUND_FLOOR      3 Towards -Infinity.\r\n    // ROUND_HALF_UP    4 Towards nearest neighbour. If equidistant, up.\r\n    // ROUND_HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.\r\n    // ROUND_HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n    // ROUND_HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n    // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n    //\r\n    // E.g.\r\n    // `Decimal.rounding = 4;`\r\n    // `Decimal.rounding = Decimal.ROUND_HALF_UP;`\r\n    rounding: 4,                           // 0 to 8\r\n\r\n    // The exponent value at and beneath which `toString` returns exponential notation.\r\n    // JavaScript numbers: -7\r\n    toExpNeg: -7,                          // 0 to -MAX_E\r\n\r\n    // The exponent value at and above which `toString` returns exponential notation.\r\n    // JavaScript numbers: 21\r\n    toExpPos:  21,                         // 0 to MAX_E\r\n\r\n    // The natural logarithm of 10.\r\n    // 115 digits\r\n    LN10: '2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286'\r\n  },\r\n\r\n\r\n// ------------------------------------ END OF EDITABLE DEFAULTS -------------------------------- //\r\n\r\n\r\n  Decimal,\r\n  external = true,\r\n\r\n  decimalError = '[DecimalError] ',\r\n  invalidArgument = decimalError + 'Invalid argument: ',\r\n  exponentOutOfRange = decimalError + 'Exponent out of range: ',\r\n\r\n  mathfloor = Math.floor,\r\n  mathpow = Math.pow,\r\n\r\n  isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\r\n\r\n  ONE,\r\n  BASE = 1e7,\r\n  LOG_BASE = 7,\r\n  MAX_SAFE_INTEGER = 9007199254740991,\r\n  MAX_E = mathfloor(MAX_SAFE_INTEGER / LOG_BASE),    // 1286742750677284\r\n\r\n  // Decimal.prototype object\r\n  P = {};\r\n\r\n\r\n// Decimal prototype methods\r\n\r\n\r\n/*\r\n *  absoluteValue                       abs\r\n *  comparedTo                          cmp\r\n *  decimalPlaces                       dp\r\n *  dividedBy                           div\r\n *  dividedToIntegerBy                  idiv\r\n *  equals                              eq\r\n *  exponent\r\n *  greaterThan                         gt\r\n *  greaterThanOrEqualTo                gte\r\n *  isInteger                           isint\r\n *  isNegative                          isneg\r\n *  isPositive                          ispos\r\n *  isZero\r\n *  lessThan                            lt\r\n *  lessThanOrEqualTo                   lte\r\n *  logarithm                           log\r\n *  minus                               sub\r\n *  modulo                              mod\r\n *  naturalExponential                  exp\r\n *  naturalLogarithm                    ln\r\n *  negated                             neg\r\n *  plus                                add\r\n *  precision                           sd\r\n *  squareRoot                          sqrt\r\n *  times                               mul\r\n *  toDecimalPlaces                     todp\r\n *  toExponential\r\n *  toFixed\r\n *  toInteger                           toint\r\n *  toNumber\r\n *  toPower                             pow\r\n *  toPrecision\r\n *  toSignificantDigits                 tosd\r\n *  toString\r\n *  valueOf                             val\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the absolute value of this Decimal.\r\n *\r\n */\r\nP.absoluteValue = P.abs = function () {\r\n  var x = new this.constructor(this);\r\n  if (x.s) x.s = 1;\r\n  return x;\r\n};\r\n\r\n\r\n/*\r\n * Return\r\n *   1    if the value of this Decimal is greater than the value of `y`,\r\n *  -1    if the value of this Decimal is less than the value of `y`,\r\n *   0    if they have the same value\r\n *\r\n */\r\nP.comparedTo = P.cmp = function (y) {\r\n  var i, j, xdL, ydL,\r\n    x = this;\r\n\r\n  y = new x.constructor(y);\r\n\r\n  // Signs differ?\r\n  if (x.s !== y.s) return x.s || -y.s;\r\n\r\n  // Compare exponents.\r\n  if (x.e !== y.e) return x.e > y.e ^ x.s < 0 ? 1 : -1;\r\n\r\n  xdL = x.d.length;\r\n  ydL = y.d.length;\r\n\r\n  // Compare digit by digit.\r\n  for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\r\n    if (x.d[i] !== y.d[i]) return x.d[i] > y.d[i] ^ x.s < 0 ? 1 : -1;\r\n  }\r\n\r\n  // Compare lengths.\r\n  return xdL === ydL ? 0 : xdL > ydL ^ x.s < 0 ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return the number of decimal places of the value of this Decimal.\r\n *\r\n */\r\nP.decimalPlaces = P.dp = function () {\r\n  var x = this,\r\n    w = x.d.length - 1,\r\n    dp = (w - x.e) * LOG_BASE;\r\n\r\n  // Subtract the number of trailing zeros of the last word.\r\n  w = x.d[w];\r\n  if (w) for (; w % 10 == 0; w /= 10) dp--;\r\n\r\n  return dp < 0 ? 0 : dp;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal divided by `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\nP.dividedBy = P.div = function (y) {\r\n  return divide(this, new this.constructor(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\r\n * by the value of `y`, truncated to `precision` significant digits.\r\n *\r\n */\r\nP.dividedToIntegerBy = P.idiv = function (y) {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n  return round(divide(x, new Ctor(y), 0, 1), Ctor.precision);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.\r\n *\r\n */\r\nP.equals = P.eq = function (y) {\r\n  return !this.cmp(y);\r\n};\r\n\r\n\r\n/*\r\n * Return the (base 10) exponent value of this Decimal (this.e is the base 10000000 exponent).\r\n *\r\n */\r\nP.exponent = function () {\r\n  return getBase10Exponent(this);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is greater than the value of `y`, otherwise return\r\n * false.\r\n *\r\n */\r\nP.greaterThan = P.gt = function (y) {\r\n  return this.cmp(y) > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is greater than or equal to the value of `y`,\r\n * otherwise return false.\r\n *\r\n */\r\nP.greaterThanOrEqualTo = P.gte = function (y) {\r\n  return this.cmp(y) >= 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is an integer, otherwise return false.\r\n *\r\n */\r\nP.isInteger = P.isint = function () {\r\n  return this.e > this.d.length - 2;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is negative, otherwise return false.\r\n *\r\n */\r\nP.isNegative = P.isneg = function () {\r\n  return this.s < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is positive, otherwise return false.\r\n *\r\n */\r\nP.isPositive = P.ispos = function () {\r\n  return this.s > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is 0, otherwise return false.\r\n *\r\n */\r\nP.isZero = function () {\r\n  return this.s === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is less than `y`, otherwise return false.\r\n *\r\n */\r\nP.lessThan = P.lt = function (y) {\r\n  return this.cmp(y) < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.\r\n *\r\n */\r\nP.lessThanOrEqualTo = P.lte = function (y) {\r\n  return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return the logarithm of the value of this Decimal to the specified base, truncated to\r\n * `precision` significant digits.\r\n *\r\n * If no base is specified, return log[10](x).\r\n *\r\n * log[base](x) = ln(x) / ln(base)\r\n *\r\n * The maximum error of the result is 1 ulp (unit in the last place).\r\n *\r\n * [base] {number|string|Decimal} The base of the logarithm.\r\n *\r\n */\r\nP.logarithm = P.log = function (base) {\r\n  var r,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    pr = Ctor.precision,\r\n    wpr = pr + 5;\r\n\r\n  // Default base is 10.\r\n  if (base === void 0) {\r\n    base = new Ctor(10);\r\n  } else {\r\n    base = new Ctor(base);\r\n\r\n    // log[-b](x) = NaN\r\n    // log[0](x)  = NaN\r\n    // log[1](x)  = NaN\r\n    if (base.s < 1 || base.eq(ONE)) throw Error(decimalError + 'NaN');\r\n  }\r\n\r\n  // log[b](-x) = NaN\r\n  // log[b](0) = -Infinity\r\n  if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));\r\n\r\n  // log[b](1) = 0\r\n  if (x.eq(ONE)) return new Ctor(0);\r\n\r\n  external = false;\r\n  r = divide(ln(x, wpr), ln(base, wpr), wpr);\r\n  external = true;\r\n\r\n  return round(r, pr);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal minus `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\nP.minus = P.sub = function (y) {\r\n  var x = this;\r\n  y = new x.constructor(y);\r\n  return x.s == y.s ? subtract(x, y) : add(x, (y.s = -y.s, y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal modulo `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\nP.modulo = P.mod = function (y) {\r\n  var q,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    pr = Ctor.precision;\r\n\r\n  y = new Ctor(y);\r\n\r\n  // x % 0 = NaN\r\n  if (!y.s) throw Error(decimalError + 'NaN');\r\n\r\n  // Return x if x is 0.\r\n  if (!x.s) return round(new Ctor(x), pr);\r\n\r\n  // Prevent rounding of intermediate calculations.\r\n  external = false;\r\n  q = divide(x, y, 0, 1).times(y);\r\n  external = true;\r\n\r\n  return x.minus(q);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\r\n * i.e. the base e raised to the power the value of this Decimal, truncated to `precision`\r\n * significant digits.\r\n *\r\n */\r\nP.naturalExponential = P.exp = function () {\r\n  return exp(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\r\n * truncated to `precision` significant digits.\r\n *\r\n */\r\nP.naturalLogarithm = P.ln = function () {\r\n  return ln(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\r\n * -1.\r\n *\r\n */\r\nP.negated = P.neg = function () {\r\n  var x = new this.constructor(this);\r\n  x.s = -x.s || 0;\r\n  return x;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal plus `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\nP.plus = P.add = function (y) {\r\n  var x = this;\r\n  y = new x.constructor(y);\r\n  return x.s == y.s ? add(x, y) : subtract(x, (y.s = -y.s, y));\r\n};\r\n\r\n\r\n/*\r\n * Return the number of significant digits of the value of this Decimal.\r\n *\r\n * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\r\n *\r\n */\r\nP.precision = P.sd = function (z) {\r\n  var e, sd, w,\r\n    x = this;\r\n\r\n  if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\r\n\r\n  e = getBase10Exponent(x) + 1;\r\n  w = x.d.length - 1;\r\n  sd = w * LOG_BASE + 1;\r\n  w = x.d[w];\r\n\r\n  // If non-zero...\r\n  if (w) {\r\n\r\n    // Subtract the number of trailing zeros of the last word.\r\n    for (; w % 10 == 0; w /= 10) sd--;\r\n\r\n    // Add the number of digits of the first word.\r\n    for (w = x.d[0]; w >= 10; w /= 10) sd++;\r\n  }\r\n\r\n  return z && e > sd ? e : sd;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of this Decimal, truncated to `precision`\r\n * significant digits.\r\n *\r\n */\r\nP.squareRoot = P.sqrt = function () {\r\n  var e, n, pr, r, s, t, wpr,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  // Negative or zero?\r\n  if (x.s < 1) {\r\n    if (!x.s) return new Ctor(0);\r\n\r\n    // sqrt(-x) = NaN\r\n    throw Error(decimalError + 'NaN');\r\n  }\r\n\r\n  e = getBase10Exponent(x);\r\n  external = false;\r\n\r\n  // Initial estimate.\r\n  s = Math.sqrt(+x);\r\n\r\n  // Math.sqrt underflow/overflow?\r\n  // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n  if (s == 0 || s == 1 / 0) {\r\n    n = digitsToString(x.d);\r\n    if ((n.length + e) % 2 == 0) n += '0';\r\n    s = Math.sqrt(n);\r\n    e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n    if (s == 1 / 0) {\r\n      n = '5e' + e;\r\n    } else {\r\n      n = s.toExponential();\r\n      n = n.slice(0, n.indexOf('e') + 1) + e;\r\n    }\r\n\r\n    r = new Ctor(n);\r\n  } else {\r\n    r = new Ctor(s.toString());\r\n  }\r\n\r\n  pr = Ctor.precision;\r\n  s = wpr = pr + 3;\r\n\r\n  // Newton-Raphson iteration.\r\n  for (;;) {\r\n    t = r;\r\n    r = t.plus(divide(x, t, wpr + 2)).times(0.5);\r\n\r\n    if (digitsToString(t.d).slice(0, wpr) === (n = digitsToString(r.d)).slice(0, wpr)) {\r\n      n = n.slice(wpr - 3, wpr + 1);\r\n\r\n      // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\r\n      // 4999, i.e. approaching a rounding boundary, continue the iteration.\r\n      if (s == wpr && n == '4999') {\r\n\r\n        // On the first iteration only, check to see if rounding up gives the exact result as the\r\n        // nines may infinitely repeat.\r\n        round(t, pr + 1, 0);\r\n\r\n        if (t.times(t).eq(x)) {\r\n          r = t;\r\n          break;\r\n        }\r\n      } else if (n != '9999') {\r\n        break;\r\n      }\r\n\r\n      wpr += 4;\r\n    }\r\n  }\r\n\r\n  external = true;\r\n\r\n  return round(r, pr);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal times `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\nP.times = P.mul = function (y) {\r\n  var carry, e, i, k, r, rL, t, xdL, ydL,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    xd = x.d,\r\n    yd = (y = new Ctor(y)).d;\r\n\r\n  // Return 0 if either is 0.\r\n  if (!x.s || !y.s) return new Ctor(0);\r\n\r\n  y.s *= x.s;\r\n  e = x.e + y.e;\r\n  xdL = xd.length;\r\n  ydL = yd.length;\r\n\r\n  // Ensure xd points to the longer array.\r\n  if (xdL < ydL) {\r\n    r = xd;\r\n    xd = yd;\r\n    yd = r;\r\n    rL = xdL;\r\n    xdL = ydL;\r\n    ydL = rL;\r\n  }\r\n\r\n  // Initialise the result array with zeros.\r\n  r = [];\r\n  rL = xdL + ydL;\r\n  for (i = rL; i--;) r.push(0);\r\n\r\n  // Multiply!\r\n  for (i = ydL; --i >= 0;) {\r\n    carry = 0;\r\n    for (k = xdL + i; k > i;) {\r\n      t = r[k] + yd[i] * xd[k - i - 1] + carry;\r\n      r[k--] = t % BASE | 0;\r\n      carry = t / BASE | 0;\r\n    }\r\n\r\n    r[k] = (r[k] + carry) % BASE | 0;\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  for (; !r[--rL];) r.pop();\r\n\r\n  if (carry) ++e;\r\n  else r.shift();\r\n\r\n  y.d = r;\r\n  y.e = e;\r\n\r\n  return external ? round(y, Ctor.precision) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`\r\n * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.\r\n *\r\n * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toDecimalPlaces = P.todp = function (dp, rm) {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n\r\n  x = new Ctor(x);\r\n  if (dp === void 0) return x;\r\n\r\n  checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n  if (rm === void 0) rm = Ctor.rounding;\r\n  else checkInt32(rm, 0, 8);\r\n\r\n  return round(x, dp + getBase10Exponent(x) + 1, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in exponential notation rounded to\r\n * `dp` fixed decimal places using rounding mode `rounding`.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toExponential = function (dp, rm) {\r\n  var str,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (dp === void 0) {\r\n    str = toString(x, true);\r\n  } else {\r\n    checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n\r\n    x = round(new Ctor(x), dp + 1, rm);\r\n    str = toString(x, true, dp + 1);\r\n  }\r\n\r\n  return str;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in normal (fixed-point) notation to\r\n * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is\r\n * omitted.\r\n *\r\n * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n * (-0).toFixed(3) is '0.000'.\r\n * (-0.5).toFixed(0) is '-0'.\r\n *\r\n */\r\nP.toFixed = function (dp, rm) {\r\n  var str, y,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (dp === void 0) return toString(x);\r\n\r\n  checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n  if (rm === void 0) rm = Ctor.rounding;\r\n  else checkInt32(rm, 0, 8);\r\n\r\n  y = round(new Ctor(x), dp + getBase10Exponent(x) + 1, rm);\r\n  str = toString(y.abs(), false, dp + getBase10Exponent(y) + 1);\r\n\r\n  // To determine whether to add the minus sign look at the value before it was rounded,\r\n  // i.e. look at `x` rather than `y`.\r\n  return x.isneg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\r\n * rounding mode `rounding`.\r\n *\r\n */\r\nP.toInteger = P.toint = function () {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n  return round(new Ctor(x), getBase10Exponent(x) + 1, Ctor.rounding);\r\n};\r\n\r\n\r\n/*\r\n * Return the value of this Decimal converted to a number primitive.\r\n *\r\n */\r\nP.toNumber = function () {\r\n  return +this;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal raised to the power `y`,\r\n * truncated to `precision` significant digits.\r\n *\r\n * For non-integer or very large exponents pow(x, y) is calculated using\r\n *\r\n *   x^y = exp(y*ln(x))\r\n *\r\n * The maximum error is 1 ulp (unit in last place).\r\n *\r\n * y {number|string|Decimal} The power to which to raise this Decimal.\r\n *\r\n */\r\nP.toPower = P.pow = function (y) {\r\n  var e, k, pr, r, sign, yIsInt,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    guard = 12,\r\n    yn = +(y = new Ctor(y));\r\n\r\n  // pow(x, 0) = 1\r\n  if (!y.s) return new Ctor(ONE);\r\n\r\n  x = new Ctor(x);\r\n\r\n  // pow(0, y > 0) = 0\r\n  // pow(0, y < 0) = Infinity\r\n  if (!x.s) {\r\n    if (y.s < 1) throw Error(decimalError + 'Infinity');\r\n    return x;\r\n  }\r\n\r\n  // pow(1, y) = 1\r\n  if (x.eq(ONE)) return x;\r\n\r\n  pr = Ctor.precision;\r\n\r\n  // pow(x, 1) = x\r\n  if (y.eq(ONE)) return round(x, pr);\r\n\r\n  e = y.e;\r\n  k = y.d.length - 1;\r\n  yIsInt = e >= k;\r\n  sign = x.s;\r\n\r\n  if (!yIsInt) {\r\n\r\n    // pow(x < 0, y non-integer) = NaN\r\n    if (sign < 0) throw Error(decimalError + 'NaN');\r\n\r\n  // If y is a small integer use the 'exponentiation by squaring' algorithm.\r\n  } else if ((k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\r\n    r = new Ctor(ONE);\r\n\r\n    // Max k of 9007199254740991 takes 53 loop iterations.\r\n    // Maximum digits array length; leaves [28, 34] guard digits.\r\n    e = Math.ceil(pr / LOG_BASE + 4);\r\n\r\n    external = false;\r\n\r\n    for (;;) {\r\n      if (k % 2) {\r\n        r = r.times(x);\r\n        truncate(r.d, e);\r\n      }\r\n\r\n      k = mathfloor(k / 2);\r\n      if (k === 0) break;\r\n\r\n      x = x.times(x);\r\n      truncate(x.d, e);\r\n    }\r\n\r\n    external = true;\r\n\r\n    return y.s < 0 ? new Ctor(ONE).div(r) : round(r, pr);\r\n  }\r\n\r\n  // Result is negative if x is negative and the last digit of integer y is odd.\r\n  sign = sign < 0 && y.d[Math.max(e, k)] & 1 ? -1 : 1;\r\n\r\n  x.s = 1;\r\n  external = false;\r\n  r = y.times(ln(x, pr + guard));\r\n  external = true;\r\n  r = exp(r);\r\n  r.s = sign;\r\n\r\n  return r;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal rounded to `sd` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * Return exponential notation if `sd` is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toPrecision = function (sd, rm) {\r\n  var e, str,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (sd === void 0) {\r\n    e = getBase10Exponent(x);\r\n    str = toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);\r\n  } else {\r\n    checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n\r\n    x = round(new Ctor(x), sd, rm);\r\n    e = getBase10Exponent(x);\r\n    str = toString(x, sd <= e || e <= Ctor.toExpNeg, sd);\r\n  }\r\n\r\n  return str;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`\r\n * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if\r\n * omitted.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toSignificantDigits = P.tosd = function (sd, rm) {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (sd === void 0) {\r\n    sd = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n  } else {\r\n    checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n  }\r\n\r\n  return round(new Ctor(x), sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal.\r\n *\r\n * Return exponential notation if this Decimal has a positive exponent equal to or greater than\r\n * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.\r\n *\r\n */\r\nP.toString = P.valueOf = P.val = P.toJSON = P[Symbol.for('nodejs.util.inspect.custom')] = function () {\r\n  var x = this,\r\n    e = getBase10Exponent(x),\r\n    Ctor = x.constructor;\r\n\r\n  return toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);\r\n};\r\n\r\n\r\n// Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\r\n\r\n\r\n/*\r\n *  add                 P.minus, P.plus\r\n *  checkInt32          P.todp, P.toExponential, P.toFixed, P.toPrecision, P.tosd\r\n *  digitsToString      P.log, P.sqrt, P.pow, toString, exp, ln\r\n *  divide              P.div, P.idiv, P.log, P.mod, P.sqrt, exp, ln\r\n *  exp                 P.exp, P.pow\r\n *  getBase10Exponent   P.exponent, P.sd, P.toint, P.sqrt, P.todp, P.toFixed, P.toPrecision,\r\n *                      P.toString, divide, round, toString, exp, ln\r\n *  getLn10             P.log, ln\r\n *  getZeroString       digitsToString, toString\r\n *  ln                  P.log, P.ln, P.pow, exp\r\n *  parseDecimal        Decimal\r\n *  round               P.abs, P.idiv, P.log, P.minus, P.mod, P.neg, P.plus, P.toint, P.sqrt,\r\n *                      P.times, P.todp, P.toExponential, P.toFixed, P.pow, P.toPrecision, P.tosd,\r\n *                      divide, getLn10, exp, ln\r\n *  subtract            P.minus, P.plus\r\n *  toString            P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf\r\n *  truncate            P.pow\r\n *\r\n *  Throws:             P.log, P.mod, P.sd, P.sqrt, P.pow,  checkInt32, divide, round,\r\n *                      getLn10, exp, ln, parseDecimal, Decimal, config\r\n */\r\n\r\n\r\nfunction add(x, y) {\r\n  var carry, d, e, i, k, len, xd, yd,\r\n    Ctor = x.constructor,\r\n    pr = Ctor.precision;\r\n\r\n  // If either is zero...\r\n  if (!x.s || !y.s) {\r\n\r\n    // Return x if y is zero.\r\n    // Return y if y is non-zero.\r\n    if (!y.s) y = new Ctor(x);\r\n    return external ? round(y, pr) : y;\r\n  }\r\n\r\n  xd = x.d;\r\n  yd = y.d;\r\n\r\n  // x and y are finite, non-zero numbers with the same sign.\r\n\r\n  k = x.e;\r\n  e = y.e;\r\n  xd = xd.slice();\r\n  i = k - e;\r\n\r\n  // If base 1e7 exponents differ...\r\n  if (i) {\r\n    if (i < 0) {\r\n      d = xd;\r\n      i = -i;\r\n      len = yd.length;\r\n    } else {\r\n      d = yd;\r\n      e = k;\r\n      len = xd.length;\r\n    }\r\n\r\n    // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\r\n    k = Math.ceil(pr / LOG_BASE);\r\n    len = k > len ? k + 1 : len + 1;\r\n\r\n    if (i > len) {\r\n      i = len;\r\n      d.length = 1;\r\n    }\r\n\r\n    // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\r\n    d.reverse();\r\n    for (; i--;) d.push(0);\r\n    d.reverse();\r\n  }\r\n\r\n  len = xd.length;\r\n  i = yd.length;\r\n\r\n  // If yd is longer than xd, swap xd and yd so xd points to the longer array.\r\n  if (len - i < 0) {\r\n    i = len;\r\n    d = yd;\r\n    yd = xd;\r\n    xd = d;\r\n  }\r\n\r\n  // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\r\n  for (carry = 0; i;) {\r\n    carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\r\n    xd[i] %= BASE;\r\n  }\r\n\r\n  if (carry) {\r\n    xd.unshift(carry);\r\n    ++e;\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n  for (len = xd.length; xd[--len] == 0;) xd.pop();\r\n\r\n  y.d = xd;\r\n  y.e = e;\r\n\r\n  return external ? round(y, pr) : y;\r\n}\r\n\r\n\r\nfunction checkInt32(i, min, max) {\r\n  if (i !== ~~i || i < min || i > max) {\r\n    throw Error(invalidArgument + i);\r\n  }\r\n}\r\n\r\n\r\nfunction digitsToString(d) {\r\n  var i, k, ws,\r\n    indexOfLastWord = d.length - 1,\r\n    str = '',\r\n    w = d[0];\r\n\r\n  if (indexOfLastWord > 0) {\r\n    str += w;\r\n    for (i = 1; i < indexOfLastWord; i++) {\r\n      ws = d[i] + '';\r\n      k = LOG_BASE - ws.length;\r\n      if (k) str += getZeroString(k);\r\n      str += ws;\r\n    }\r\n\r\n    w = d[i];\r\n    ws = w + '';\r\n    k = LOG_BASE - ws.length;\r\n    if (k) str += getZeroString(k);\r\n  } else if (w === 0) {\r\n    return '0';\r\n  }\r\n\r\n  // Remove trailing zeros of last w.\r\n  for (; w % 10 === 0;) w /= 10;\r\n\r\n  return str + w;\r\n}\r\n\r\n\r\nvar divide = (function () {\r\n\r\n  // Assumes non-zero x and k, and hence non-zero result.\r\n  function multiplyInteger(x, k) {\r\n    var temp,\r\n      carry = 0,\r\n      i = x.length;\r\n\r\n    for (x = x.slice(); i--;) {\r\n      temp = x[i] * k + carry;\r\n      x[i] = temp % BASE | 0;\r\n      carry = temp / BASE | 0;\r\n    }\r\n\r\n    if (carry) x.unshift(carry);\r\n\r\n    return x;\r\n  }\r\n\r\n  function compare(a, b, aL, bL) {\r\n    var i, r;\r\n\r\n    if (aL != bL) {\r\n      r = aL > bL ? 1 : -1;\r\n    } else {\r\n      for (i = r = 0; i < aL; i++) {\r\n        if (a[i] != b[i]) {\r\n          r = a[i] > b[i] ? 1 : -1;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    return r;\r\n  }\r\n\r\n  function subtract(a, b, aL) {\r\n    var i = 0;\r\n\r\n    // Subtract b from a.\r\n    for (; aL--;) {\r\n      a[aL] -= i;\r\n      i = a[aL] < b[aL] ? 1 : 0;\r\n      a[aL] = i * BASE + a[aL] - b[aL];\r\n    }\r\n\r\n    // Remove leading zeros.\r\n    for (; !a[0] && a.length > 1;) a.shift();\r\n  }\r\n\r\n  return function (x, y, pr, dp) {\r\n    var cmp, e, i, k, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0, yL, yz,\r\n      Ctor = x.constructor,\r\n      sign = x.s == y.s ? 1 : -1,\r\n      xd = x.d,\r\n      yd = y.d;\r\n\r\n    // Either 0?\r\n    if (!x.s) return new Ctor(x);\r\n    if (!y.s) throw Error(decimalError + 'Division by zero');\r\n\r\n    e = x.e - y.e;\r\n    yL = yd.length;\r\n    xL = xd.length;\r\n    q = new Ctor(sign);\r\n    qd = q.d = [];\r\n\r\n    // Result exponent may be one less than e.\r\n    for (i = 0; yd[i] == (xd[i] || 0); ) ++i;\r\n    if (yd[i] > (xd[i] || 0)) --e;\r\n\r\n    if (pr == null) {\r\n      sd = pr = Ctor.precision;\r\n    } else if (dp) {\r\n      sd = pr + (getBase10Exponent(x) - getBase10Exponent(y)) + 1;\r\n    } else {\r\n      sd = pr;\r\n    }\r\n\r\n    if (sd < 0) return new Ctor(0);\r\n\r\n    // Convert precision in number of base 10 digits to base 1e7 digits.\r\n    sd = sd / LOG_BASE + 2 | 0;\r\n    i = 0;\r\n\r\n    // divisor < 1e7\r\n    if (yL == 1) {\r\n      k = 0;\r\n      yd = yd[0];\r\n      sd++;\r\n\r\n      // k is the carry.\r\n      for (; (i < xL || k) && sd--; i++) {\r\n        t = k * BASE + (xd[i] || 0);\r\n        qd[i] = t / yd | 0;\r\n        k = t % yd | 0;\r\n      }\r\n\r\n    // divisor >= 1e7\r\n    } else {\r\n\r\n      // Normalise xd and yd so highest order digit of yd is >= BASE/2\r\n      k = BASE / (yd[0] + 1) | 0;\r\n\r\n      if (k > 1) {\r\n        yd = multiplyInteger(yd, k);\r\n        xd = multiplyInteger(xd, k);\r\n        yL = yd.length;\r\n        xL = xd.length;\r\n      }\r\n\r\n      xi = yL;\r\n      rem = xd.slice(0, yL);\r\n      remL = rem.length;\r\n\r\n      // Add zeros to make remainder as long as divisor.\r\n      for (; remL < yL;) rem[remL++] = 0;\r\n\r\n      yz = yd.slice();\r\n      yz.unshift(0);\r\n      yd0 = yd[0];\r\n\r\n      if (yd[1] >= BASE / 2) ++yd0;\r\n\r\n      do {\r\n        k = 0;\r\n\r\n        // Compare divisor and remainder.\r\n        cmp = compare(yd, rem, yL, remL);\r\n\r\n        // If divisor < remainder.\r\n        if (cmp < 0) {\r\n\r\n          // Calculate trial digit, k.\r\n          rem0 = rem[0];\r\n          if (yL != remL) rem0 = rem0 * BASE + (rem[1] || 0);\r\n\r\n          // k will be how many times the divisor goes into the current remainder.\r\n          k = rem0 / yd0 | 0;\r\n\r\n          //  Algorithm:\r\n          //  1. product = divisor * trial digit (k)\r\n          //  2. if product > remainder: product -= divisor, k--\r\n          //  3. remainder -= product\r\n          //  4. if product was < remainder at 2:\r\n          //    5. compare new remainder and divisor\r\n          //    6. If remainder > divisor: remainder -= divisor, k++\r\n\r\n          if (k > 1) {\r\n            if (k >= BASE) k = BASE - 1;\r\n\r\n            // product = divisor * trial digit.\r\n            prod = multiplyInteger(yd, k);\r\n            prodL = prod.length;\r\n            remL = rem.length;\r\n\r\n            // Compare product and remainder.\r\n            cmp = compare(prod, rem, prodL, remL);\r\n\r\n            // product > remainder.\r\n            if (cmp == 1) {\r\n              k--;\r\n\r\n              // Subtract divisor from product.\r\n              subtract(prod, yL < prodL ? yz : yd, prodL);\r\n            }\r\n          } else {\r\n\r\n            // cmp is -1.\r\n            // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\r\n            // to avoid it. If k is 1 there is a need to compare yd and rem again below.\r\n            if (k == 0) cmp = k = 1;\r\n            prod = yd.slice();\r\n          }\r\n\r\n          prodL = prod.length;\r\n          if (prodL < remL) prod.unshift(0);\r\n\r\n          // Subtract product from remainder.\r\n          subtract(rem, prod, remL);\r\n\r\n          // If product was < previous remainder.\r\n          if (cmp == -1) {\r\n            remL = rem.length;\r\n\r\n            // Compare divisor and new remainder.\r\n            cmp = compare(yd, rem, yL, remL);\r\n\r\n            // If divisor < new remainder, subtract divisor from remainder.\r\n            if (cmp < 1) {\r\n              k++;\r\n\r\n              // Subtract divisor from remainder.\r\n              subtract(rem, yL < remL ? yz : yd, remL);\r\n            }\r\n          }\r\n\r\n          remL = rem.length;\r\n        } else if (cmp === 0) {\r\n          k++;\r\n          rem = [0];\r\n        }    // if cmp === 1, k will be 0\r\n\r\n        // Add the next digit, k, to the result array.\r\n        qd[i++] = k;\r\n\r\n        // Update the remainder.\r\n        if (cmp && rem[0]) {\r\n          rem[remL++] = xd[xi] || 0;\r\n        } else {\r\n          rem = [xd[xi]];\r\n          remL = 1;\r\n        }\r\n\r\n      } while ((xi++ < xL || rem[0] !== void 0) && sd--);\r\n    }\r\n\r\n    // Leading zero?\r\n    if (!qd[0]) qd.shift();\r\n\r\n    q.e = e;\r\n\r\n    return round(q, dp ? pr + getBase10Exponent(q) + 1 : pr);\r\n  };\r\n})();\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of `x` truncated to `sd`\r\n * significant digits.\r\n *\r\n * Taylor/Maclaurin series.\r\n *\r\n * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\r\n *\r\n * Argument reduction:\r\n *   Repeat x = x / 32, k += 5, until |x| < 0.1\r\n *   exp(x) = exp(x / 2^k)^(2^k)\r\n *\r\n * Previously, the argument was initially reduced by\r\n * exp(x) = exp(r) * 10^k  where r = x - k * ln10, k = floor(x / ln10)\r\n * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\r\n * found to be slower than just dividing repeatedly by 32 as above.\r\n *\r\n * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\r\n *\r\n *  exp(x) is non-terminating for any finite, non-zero x.\r\n *\r\n */\r\nfunction exp(x, sd) {\r\n  var denominator, guard, pow, sum, t, wpr,\r\n    i = 0,\r\n    k = 0,\r\n    Ctor = x.constructor,\r\n    pr = Ctor.precision;\r\n\r\n  if (getBase10Exponent(x) > 16) throw Error(exponentOutOfRange + getBase10Exponent(x));\r\n\r\n  // exp(0) = 1\r\n  if (!x.s) return new Ctor(ONE);\r\n\r\n  if (sd == null) {\r\n    external = false;\r\n    wpr = pr;\r\n  } else {\r\n    wpr = sd;\r\n  }\r\n\r\n  t = new Ctor(0.03125);\r\n\r\n  while (x.abs().gte(0.1)) {\r\n    x = x.times(t);    // x = x / 2^5\r\n    k += 5;\r\n  }\r\n\r\n  // Estimate the precision increase necessary to ensure the first 4 rounding digits are correct.\r\n  guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\r\n  wpr += guard;\r\n  denominator = pow = sum = new Ctor(ONE);\r\n  Ctor.precision = wpr;\r\n\r\n  for (;;) {\r\n    pow = round(pow.times(x), wpr);\r\n    denominator = denominator.times(++i);\r\n    t = sum.plus(divide(pow, denominator, wpr));\r\n\r\n    if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n      while (k--) sum = round(sum.times(sum), wpr);\r\n      Ctor.precision = pr;\r\n      return sd == null ? (external = true, round(sum, pr)) : sum;\r\n    }\r\n\r\n    sum = t;\r\n  }\r\n}\r\n\r\n\r\n// Calculate the base 10 exponent from the base 1e7 exponent.\r\nfunction getBase10Exponent(x) {\r\n  var e = x.e * LOG_BASE,\r\n    w = x.d[0];\r\n\r\n  // Add the number of digits of the first word of the digits array.\r\n  for (; w >= 10; w /= 10) e++;\r\n  return e;\r\n}\r\n\r\n\r\nfunction getLn10(Ctor, sd, pr) {\r\n\r\n  if (sd > Ctor.LN10.sd()) {\r\n\r\n\r\n    // Reset global state in case the exception is caught.\r\n    external = true;\r\n    if (pr) Ctor.precision = pr;\r\n    throw Error(decimalError + 'LN10 precision limit exceeded');\r\n  }\r\n\r\n  return round(new Ctor(Ctor.LN10), sd);\r\n}\r\n\r\n\r\nfunction getZeroString(k) {\r\n  var zs = '';\r\n  for (; k--;) zs += '0';\r\n  return zs;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of `x` truncated to `sd` significant\r\n * digits.\r\n *\r\n *  ln(n) is non-terminating (n != 1)\r\n *\r\n */\r\nfunction ln(y, sd) {\r\n  var c, c0, denominator, e, numerator, sum, t, wpr, x2,\r\n    n = 1,\r\n    guard = 10,\r\n    x = y,\r\n    xd = x.d,\r\n    Ctor = x.constructor,\r\n    pr = Ctor.precision;\r\n\r\n  // ln(-x) = NaN\r\n  // ln(0) = -Infinity\r\n  if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));\r\n\r\n  // ln(1) = 0\r\n  if (x.eq(ONE)) return new Ctor(0);\r\n\r\n  if (sd == null) {\r\n    external = false;\r\n    wpr = pr;\r\n  } else {\r\n    wpr = sd;\r\n  }\r\n\r\n  if (x.eq(10)) {\r\n    if (sd == null) external = true;\r\n    return getLn10(Ctor, wpr);\r\n  }\r\n\r\n  wpr += guard;\r\n  Ctor.precision = wpr;\r\n  c = digitsToString(xd);\r\n  c0 = c.charAt(0);\r\n  e = getBase10Exponent(x);\r\n\r\n  if (Math.abs(e) < 1.5e15) {\r\n\r\n    // Argument reduction.\r\n    // The series converges faster the closer the argument is to 1, so using\r\n    // ln(a^b) = b * ln(a),   ln(a) = ln(a^b) / b\r\n    // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\r\n    // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\r\n    // later be divided by this number, then separate out the power of 10 using\r\n    // ln(a*10^b) = ln(a) + b*ln(10).\r\n\r\n    // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\r\n    //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\r\n    // max n is 6 (gives 0.7 - 1.3)\r\n    while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\r\n      x = x.times(y);\r\n      c = digitsToString(x.d);\r\n      c0 = c.charAt(0);\r\n      n++;\r\n    }\r\n\r\n    e = getBase10Exponent(x);\r\n\r\n    if (c0 > 1) {\r\n      x = new Ctor('0.' + c);\r\n      e++;\r\n    } else {\r\n      x = new Ctor(c0 + '.' + c.slice(1));\r\n    }\r\n  } else {\r\n\r\n    // The argument reduction method above may result in overflow if the argument y is a massive\r\n    // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\r\n    // function using ln(x*10^e) = ln(x) + e*ln(10).\r\n    t = getLn10(Ctor, wpr + 2, pr).times(e + '');\r\n    x = ln(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\r\n\r\n    Ctor.precision = pr;\r\n    return sd == null ? (external = true, round(x, pr)) : x;\r\n  }\r\n\r\n  // x is reduced to a value near 1.\r\n\r\n  // Taylor series.\r\n  // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\r\n  // where x = (y - 1)/(y + 1)    (|x| < 1)\r\n  sum = numerator = x = divide(x.minus(ONE), x.plus(ONE), wpr);\r\n  x2 = round(x.times(x), wpr);\r\n  denominator = 3;\r\n\r\n  for (;;) {\r\n    numerator = round(numerator.times(x2), wpr);\r\n    t = sum.plus(divide(numerator, new Ctor(denominator), wpr));\r\n\r\n    if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n      sum = sum.times(2);\r\n\r\n      // Reverse the argument reduction.\r\n      if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\r\n      sum = divide(sum, new Ctor(n), wpr);\r\n\r\n      Ctor.precision = pr;\r\n      return sd == null ? (external = true, round(sum, pr)) : sum;\r\n    }\r\n\r\n    sum = t;\r\n    denominator += 2;\r\n  }\r\n}\r\n\r\n\r\n/*\r\n * Parse the value of a new Decimal `x` from string `str`.\r\n */\r\nfunction parseDecimal(x, str) {\r\n  var e, i, len;\r\n\r\n  // Decimal point?\r\n  if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n  // Exponential form?\r\n  if ((i = str.search(/e/i)) > 0) {\r\n\r\n    // Determine exponent.\r\n    if (e < 0) e = i;\r\n    e += +str.slice(i + 1);\r\n    str = str.substring(0, i);\r\n  } else if (e < 0) {\r\n\r\n    // Integer.\r\n    e = str.length;\r\n  }\r\n\r\n  // Determine leading zeros.\r\n  for (i = 0; str.charCodeAt(i) === 48;) ++i;\r\n\r\n  // Determine trailing zeros.\r\n  for (len = str.length; str.charCodeAt(len - 1) === 48;) --len;\r\n  str = str.slice(i, len);\r\n\r\n  if (str) {\r\n    len -= i;\r\n    e = e - i - 1;\r\n    x.e = mathfloor(e / LOG_BASE);\r\n    x.d = [];\r\n\r\n    // Transform base\r\n\r\n    // e is the base 10 exponent.\r\n    // i is where to slice str to get the first word of the digits array.\r\n    i = (e + 1) % LOG_BASE;\r\n    if (e < 0) i += LOG_BASE;\r\n\r\n    if (i < len) {\r\n      if (i) x.d.push(+str.slice(0, i));\r\n      for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\r\n      str = str.slice(i);\r\n      i = LOG_BASE - str.length;\r\n    } else {\r\n      i -= len;\r\n    }\r\n\r\n    for (; i--;) str += '0';\r\n    x.d.push(+str);\r\n\r\n    if (external && (x.e > MAX_E || x.e < -MAX_E)) throw Error(exponentOutOfRange + e);\r\n  } else {\r\n\r\n    // Zero.\r\n    x.s = 0;\r\n    x.e = 0;\r\n    x.d = [0];\r\n  }\r\n\r\n  return x;\r\n}\r\n\r\n\r\n/*\r\n * Round `x` to `sd` significant digits, using rounding mode `rm` if present (truncate otherwise).\r\n */\r\n function round(x, sd, rm) {\r\n  var i, j, k, n, rd, doRound, w, xdi,\r\n    xd = x.d;\r\n\r\n  // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n  // w: the word of xd which contains the rounding digit, a base 1e7 number.\r\n  // xdi: the index of w within xd.\r\n  // n: the number of digits of w.\r\n  // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\r\n  // they had leading zeros)\r\n  // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\r\n\r\n  // Get the length of the first word of the digits array xd.\r\n  for (n = 1, k = xd[0]; k >= 10; k /= 10) n++;\r\n  i = sd - n;\r\n\r\n  // Is the rounding digit in the first word of xd?\r\n  if (i < 0) {\r\n    i += LOG_BASE;\r\n    j = sd;\r\n    w = xd[xdi = 0];\r\n  } else {\r\n    xdi = Math.ceil((i + 1) / LOG_BASE);\r\n    k = xd.length;\r\n    if (xdi >= k) return x;\r\n    w = k = xd[xdi];\r\n\r\n    // Get the number of digits of w.\r\n    for (n = 1; k >= 10; k /= 10) n++;\r\n\r\n    // Get the index of rd within w.\r\n    i %= LOG_BASE;\r\n\r\n    // Get the index of rd within w, adjusted for leading zeros.\r\n    // The number of leading zeros of w is given by LOG_BASE - n.\r\n    j = i - LOG_BASE + n;\r\n  }\r\n\r\n  if (rm !== void 0) {\r\n    k = mathpow(10, n - j - 1);\r\n\r\n    // Get the rounding digit at index j of w.\r\n    rd = w / k % 10 | 0;\r\n\r\n    // Are there any non-zero digits after the rounding digit?\r\n    doRound = sd < 0 || xd[xdi + 1] !== void 0 || w % k;\r\n\r\n    // The expression `w % mathpow(10, n - j - 1)` returns all the digits of w to the right of the\r\n    // digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression will give\r\n    // 714.\r\n\r\n    doRound = rm < 4\r\n      ? (rd || doRound) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n      : rd > 5 || rd == 5 && (rm == 4 || doRound || rm == 6 &&\r\n\r\n        // Check whether the digit to the left of the rounding digit is odd.\r\n        ((i > 0 ? j > 0 ? w / mathpow(10, n - j) : 0 : xd[xdi - 1]) % 10) & 1 ||\r\n          rm == (x.s < 0 ? 8 : 7));\r\n  }\r\n\r\n  if (sd < 1 || !xd[0]) {\r\n    if (doRound) {\r\n      k = getBase10Exponent(x);\r\n      xd.length = 1;\r\n\r\n      // Convert sd to decimal places.\r\n      sd = sd - k - 1;\r\n\r\n      // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n      xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\r\n      x.e = mathfloor(-sd / LOG_BASE) || 0;\r\n    } else {\r\n      xd.length = 1;\r\n\r\n      // Zero.\r\n      xd[0] = x.e = x.s = 0;\r\n    }\r\n\r\n    return x;\r\n  }\r\n\r\n  // Remove excess digits.\r\n  if (i == 0) {\r\n    xd.length = xdi;\r\n    k = 1;\r\n    xdi--;\r\n  } else {\r\n    xd.length = xdi + 1;\r\n    k = mathpow(10, LOG_BASE - i);\r\n\r\n    // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n    // j > 0 means i > number of leading zeros of w.\r\n    xd[xdi] = j > 0 ? (w / mathpow(10, n - j) % mathpow(10, j) | 0) * k : 0;\r\n  }\r\n\r\n  if (doRound) {\r\n    for (;;) {\r\n\r\n      // Is the digit to be rounded up in the first word of xd?\r\n      if (xdi == 0) {\r\n        if ((xd[0] += k) == BASE) {\r\n          xd[0] = 1;\r\n          ++x.e;\r\n        }\r\n\r\n        break;\r\n      } else {\r\n        xd[xdi] += k;\r\n        if (xd[xdi] != BASE) break;\r\n        xd[xdi--] = 0;\r\n        k = 1;\r\n      }\r\n    }\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  for (i = xd.length; xd[--i] === 0;) xd.pop();\r\n\r\n  if (external && (x.e > MAX_E || x.e < -MAX_E)) {\r\n    throw Error(exponentOutOfRange + getBase10Exponent(x));\r\n  }\r\n\r\n  return x;\r\n}\r\n\r\n\r\nfunction subtract(x, y) {\r\n  var d, e, i, j, k, len, xd, xe, xLTy, yd,\r\n    Ctor = x.constructor,\r\n    pr = Ctor.precision;\r\n\r\n  // Return y negated if x is zero.\r\n  // Return x if y is zero and x is non-zero.\r\n  if (!x.s || !y.s) {\r\n    if (y.s) y.s = -y.s;\r\n    else y = new Ctor(x);\r\n    return external ? round(y, pr) : y;\r\n  }\r\n\r\n  xd = x.d;\r\n  yd = y.d;\r\n\r\n  // x and y are non-zero numbers with the same sign.\r\n\r\n  e = y.e;\r\n  xe = x.e;\r\n  xd = xd.slice();\r\n  k = xe - e;\r\n\r\n  // If exponents differ...\r\n  if (k) {\r\n    xLTy = k < 0;\r\n\r\n    if (xLTy) {\r\n      d = xd;\r\n      k = -k;\r\n      len = yd.length;\r\n    } else {\r\n      d = yd;\r\n      e = xe;\r\n      len = xd.length;\r\n    }\r\n\r\n    // Numbers with massively different exponents would result in a very high number of zeros\r\n    // needing to be prepended, but this can be avoided while still ensuring correct rounding by\r\n    // limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.\r\n    i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\r\n\r\n    if (k > i) {\r\n      k = i;\r\n      d.length = 1;\r\n    }\r\n\r\n    // Prepend zeros to equalise exponents.\r\n    d.reverse();\r\n    for (i = k; i--;) d.push(0);\r\n    d.reverse();\r\n\r\n  // Base 1e7 exponents equal.\r\n  } else {\r\n\r\n    // Check digits to determine which is the bigger number.\r\n\r\n    i = xd.length;\r\n    len = yd.length;\r\n    xLTy = i < len;\r\n    if (xLTy) len = i;\r\n\r\n    for (i = 0; i < len; i++) {\r\n      if (xd[i] != yd[i]) {\r\n        xLTy = xd[i] < yd[i];\r\n        break;\r\n      }\r\n    }\r\n\r\n    k = 0;\r\n  }\r\n\r\n  if (xLTy) {\r\n    d = xd;\r\n    xd = yd;\r\n    yd = d;\r\n    y.s = -y.s;\r\n  }\r\n\r\n  len = xd.length;\r\n\r\n  // Append zeros to xd if shorter.\r\n  // Don't add zeros to yd if shorter as subtraction only needs to start at yd length.\r\n  for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\r\n\r\n  // Subtract yd from xd.\r\n  for (i = yd.length; i > k;) {\r\n    if (xd[--i] < yd[i]) {\r\n      for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\r\n      --xd[j];\r\n      xd[i] += BASE;\r\n    }\r\n\r\n    xd[i] -= yd[i];\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  for (; xd[--len] === 0;) xd.pop();\r\n\r\n  // Remove leading zeros and adjust exponent accordingly.\r\n  for (; xd[0] === 0; xd.shift()) --e;\r\n\r\n  // Zero?\r\n  if (!xd[0]) return new Ctor(0);\r\n\r\n  y.d = xd;\r\n  y.e = e;\r\n\r\n  //return external && xd.length >= pr / LOG_BASE ? round(y, pr) : y;\r\n  return external ? round(y, pr) : y;\r\n}\r\n\r\n\r\nfunction toString(x, isExp, sd) {\r\n  var k,\r\n    e = getBase10Exponent(x),\r\n    str = digitsToString(x.d),\r\n    len = str.length;\r\n\r\n  if (isExp) {\r\n    if (sd && (k = sd - len) > 0) {\r\n      str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\r\n    } else if (len > 1) {\r\n      str = str.charAt(0) + '.' + str.slice(1);\r\n    }\r\n\r\n    str = str + (e < 0 ? 'e' : 'e+') + e;\r\n  } else if (e < 0) {\r\n    str = '0.' + getZeroString(-e - 1) + str;\r\n    if (sd && (k = sd - len) > 0) str += getZeroString(k);\r\n  } else if (e >= len) {\r\n    str += getZeroString(e + 1 - len);\r\n    if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\r\n  } else {\r\n    if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\r\n    if (sd && (k = sd - len) > 0) {\r\n      if (e + 1 === len) str += '.';\r\n      str += getZeroString(k);\r\n    }\r\n  }\r\n\r\n  return x.s < 0 ? '-' + str : str;\r\n}\r\n\r\n\r\n// Does not strip trailing zeros.\r\nfunction truncate(arr, len) {\r\n  if (arr.length > len) {\r\n    arr.length = len;\r\n    return true;\r\n  }\r\n}\r\n\r\n\r\n// Decimal methods\r\n\r\n\r\n/*\r\n *  clone\r\n *  config/set\r\n */\r\n\r\n\r\n/*\r\n * Create and return a Decimal constructor with the same configuration properties as this Decimal\r\n * constructor.\r\n *\r\n */\r\nfunction clone(obj) {\r\n  var i, p, ps;\r\n\r\n  /*\r\n   * The Decimal constructor and exported function.\r\n   * Return a new Decimal instance.\r\n   *\r\n   * value {number|string|Decimal} A numeric value.\r\n   *\r\n   */\r\n  function Decimal(value) {\r\n    var x = this;\r\n\r\n    // Decimal called without new.\r\n    if (!(x instanceof Decimal)) return new Decimal(value);\r\n\r\n    // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\r\n    // which points to Object.\r\n    x.constructor = Decimal;\r\n\r\n    // Duplicate.\r\n    if (value instanceof Decimal) {\r\n      x.s = value.s;\r\n      x.e = value.e;\r\n      x.d = (value = value.d) ? value.slice() : value;\r\n      return;\r\n    }\r\n\r\n    if (typeof value === 'number') {\r\n\r\n      // Reject Infinity/NaN.\r\n      if (value * 0 !== 0) {\r\n        throw Error(invalidArgument + value);\r\n      }\r\n\r\n      if (value > 0) {\r\n        x.s = 1;\r\n      } else if (value < 0) {\r\n        value = -value;\r\n        x.s = -1;\r\n      } else {\r\n        x.s = 0;\r\n        x.e = 0;\r\n        x.d = [0];\r\n        return;\r\n      }\r\n\r\n      // Fast path for small integers.\r\n      if (value === ~~value && value < 1e7) {\r\n        x.e = 0;\r\n        x.d = [value];\r\n        return;\r\n      }\r\n\r\n      return parseDecimal(x, value.toString());\r\n    } else if (typeof value !== 'string') {\r\n      throw Error(invalidArgument + value);\r\n    }\r\n\r\n    // Minus sign?\r\n    if (value.charCodeAt(0) === 45) {\r\n      value = value.slice(1);\r\n      x.s = -1;\r\n    } else {\r\n      x.s = 1;\r\n    }\r\n\r\n    if (isDecimal.test(value)) parseDecimal(x, value);\r\n    else throw Error(invalidArgument + value);\r\n  }\r\n\r\n  Decimal.prototype = P;\r\n\r\n  Decimal.ROUND_UP = 0;\r\n  Decimal.ROUND_DOWN = 1;\r\n  Decimal.ROUND_CEIL = 2;\r\n  Decimal.ROUND_FLOOR = 3;\r\n  Decimal.ROUND_HALF_UP = 4;\r\n  Decimal.ROUND_HALF_DOWN = 5;\r\n  Decimal.ROUND_HALF_EVEN = 6;\r\n  Decimal.ROUND_HALF_CEIL = 7;\r\n  Decimal.ROUND_HALF_FLOOR = 8;\r\n\r\n  Decimal.clone = clone;\r\n  Decimal.config = Decimal.set = config;\r\n\r\n  if (obj === void 0) obj = {};\r\n  if (obj) {\r\n    ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'LN10'];\r\n    for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\r\n  }\r\n\r\n  Decimal.config(obj);\r\n\r\n  return Decimal;\r\n}\r\n\r\n\r\n/*\r\n * Configure global settings for a Decimal constructor.\r\n *\r\n * `obj` is an object with one or more of the following properties,\r\n *\r\n *   precision  {number}\r\n *   rounding   {number}\r\n *   toExpNeg   {number}\r\n *   toExpPos   {number}\r\n *\r\n * E.g. Decimal.config({ precision: 20, rounding: 4 })\r\n *\r\n */\r\nfunction config(obj) {\r\n  if (!obj || typeof obj !== 'object') {\r\n    throw Error(decimalError + 'Object expected');\r\n  }\r\n  var i, p, v,\r\n    ps = [\r\n      'precision', 1, MAX_DIGITS,\r\n      'rounding', 0, 8,\r\n      'toExpNeg', -1 / 0, 0,\r\n      'toExpPos', 0, 1 / 0\r\n    ];\r\n\r\n  for (i = 0; i < ps.length; i += 3) {\r\n    if ((v = obj[p = ps[i]]) !== void 0) {\r\n      if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;\r\n      else throw Error(invalidArgument + p + ': ' + v);\r\n    }\r\n  }\r\n\r\n  if ((v = obj[p = 'LN10']) !== void 0) {\r\n      if (v == Math.LN10) this[p] = new this(v);\r\n      else throw Error(invalidArgument + p + ': ' + v);\r\n  }\r\n\r\n  return this;\r\n}\r\n\r\n\r\n// Create and configure initial Decimal constructor.\r\nexport var Decimal = clone(defaults);\r\n\r\n// Internal constant.\r\nONE = new Decimal(1);\r\n\r\nexport default Decimal;\r\n","var identity = i => i;\nexport var PLACE_HOLDER = {\n  '@@functional/placeholder': true\n};\nvar isPlaceHolder = val => val === PLACE_HOLDER;\nvar curry0 = fn => function _curried() {\n  if (arguments.length === 0 || arguments.length === 1 && isPlaceHolder(arguments.length <= 0 ? undefined : arguments[0])) {\n    return _curried;\n  }\n  return fn(...arguments);\n};\nvar curryN = (n, fn) => {\n  if (n === 1) {\n    return fn;\n  }\n  return curry0(function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    var argsLength = args.filter(arg => arg !== PLACE_HOLDER).length;\n    if (argsLength >= n) {\n      return fn(...args);\n    }\n    return curryN(n - argsLength, curry0(function () {\n      for (var _len2 = arguments.length, restArgs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        restArgs[_key2] = arguments[_key2];\n      }\n      var newArgs = args.map(arg => isPlaceHolder(arg) ? restArgs.shift() : arg);\n      return fn(...newArgs, ...restArgs);\n    }));\n  });\n};\nexport var curry = fn => curryN(fn.length, fn);\nexport var range = (begin, end) => {\n  var arr = [];\n  for (var i = begin; i < end; ++i) {\n    arr[i - begin] = i;\n  }\n  return arr;\n};\nexport var map = curry((fn, arr) => {\n  if (Array.isArray(arr)) {\n    return arr.map(fn);\n  }\n  return Object.keys(arr).map(key => arr[key]).map(fn);\n});\nexport var compose = function compose() {\n  for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n    args[_key3] = arguments[_key3];\n  }\n  if (!args.length) {\n    return identity;\n  }\n  var fns = args.reverse();\n  // first function can receive multiply arguments\n  var firstFn = fns[0];\n  var tailsFn = fns.slice(1);\n  return function () {\n    return tailsFn.reduce((res, fn) => fn(res), firstFn(...arguments));\n  };\n};\nexport var reverse = arr => {\n  if (Array.isArray(arr)) {\n    return arr.reverse();\n  }\n\n  // can be string\n  return arr.split('').reverse().join('');\n};\nexport var memoize = fn => {\n  var lastArgs = null;\n  var lastResult = null;\n  return function () {\n    for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      args[_key4] = arguments[_key4];\n    }\n    if (lastArgs && args.every((val, i) => {\n      var _lastArgs;\n      return val === ((_lastArgs = lastArgs) === null || _lastArgs === void 0 ? void 0 : _lastArgs[i]);\n    })) {\n      return lastResult;\n    }\n    lastArgs = args;\n    lastResult = fn(...args);\n    return lastResult;\n  };\n};","/**\n * @fileOverview 一些公用的运算方法\n * @author xile611\n * @date 2015-09-17\n */\nimport Decimal from 'decimal.js-light';\nimport { curry } from './utils';\n\n/**\n * 获取数值的位数\n * 其中绝对值属于区间[0.1, 1)， 得到的值为0\n * 绝对值属于区间[0.01, 0.1)，得到的位数为 -1\n * 绝对值属于区间[0.001, 0.01)，得到的位数为 -2\n *\n * @param  {Number} value 数值\n * @return {Integer} 位数\n */\nfunction getDigitCount(value) {\n  var result;\n  if (value === 0) {\n    result = 1;\n  } else {\n    result = Math.floor(new Decimal(value).abs().log(10).toNumber()) + 1;\n  }\n  return result;\n}\n\n/**\n * 按照固定的步长获取[start, end)这个区间的数据\n * 并且需要处理js计算精度的问题\n *\n * @param  {Decimal} start 起点\n * @param  {Decimal} end   终点，不包含该值\n * @param  {Decimal} step  步长\n * @return {Array}         若干数值\n */\nfunction rangeStep(start, end, step) {\n  var num = new Decimal(start);\n  var i = 0;\n  var result = [];\n\n  // magic number to prevent infinite loop\n  while (num.lt(end) && i < 100000) {\n    result.push(num.toNumber());\n    num = num.add(step);\n    i++;\n  }\n  return result;\n}\n/**\n * 对数值进行线性插值\n *\n * @param  {Number} a  定义域的极点\n * @param  {Number} b  定义域的极点\n * @param  {Number} t  [0, 1]内的某个值\n * @return {Number}    定义域内的某个值\n */\nvar interpolateNumber = curry((a, b, t) => {\n  var newA = +a;\n  var newB = +b;\n  return newA + t * (newB - newA);\n});\n/**\n * 线性插值的逆运算\n *\n * @param  {Number} a 定义域的极点\n * @param  {Number} b 定义域的极点\n * @param  {Number} x 可以认为是插值后的一个输出值\n * @return {Number}   当x在 a ~ b这个范围内时，返回值属于[0, 1]\n */\nvar uninterpolateNumber = curry((a, b, x) => {\n  var diff = b - +a;\n  diff = diff || Infinity;\n  return (x - a) / diff;\n});\n/**\n * 线性插值的逆运算，并且有截断的操作\n *\n * @param  {Number} a 定义域的极点\n * @param  {Number} b 定义域的极点\n * @param  {Number} x 可以认为是插值后的一个输出值\n * @return {Number}   当x在 a ~ b这个区间内时，返回值属于[0, 1]，\n * 当x不在 a ~ b这个区间时，会截断到 a ~ b 这个区间\n */\nvar uninterpolateTruncation = curry((a, b, x) => {\n  var diff = b - +a;\n  diff = diff || Infinity;\n  return Math.max(0, Math.min(1, (x - a) / diff));\n});\nexport { rangeStep, getDigitCount, interpolateNumber, uninterpolateNumber, uninterpolateTruncation };","/**\n * @fileOverview calculate tick values of scale\n * @author xile611, arcthur\n * @date 2015-09-17\n */\nimport Decimal from 'decimal.js-light';\nimport { compose, range, memoize, map, reverse } from './util/utils';\nimport { getDigitCount, rangeStep } from './util/arithmetic';\n\n/**\n * Calculate a interval of a minimum value and a maximum value\n *\n * @param  {Number} min       The minimum value\n * @param  {Number} max       The maximum value\n * @return {Array} An interval\n */\nexport var getValidInterval = _ref => {\n  var [min, max] = _ref;\n  var [validMin, validMax] = [min, max];\n\n  // exchange\n  if (min > max) {\n    [validMin, validMax] = [max, min];\n  }\n  return [validMin, validMax];\n};\n\n/**\n * Calculate the step which is easy to understand between ticks, like 10, 20, 25\n *\n * @param  {Decimal} roughStep        The rough step calculated by dividing the\n * difference by the tickCount\n * @param  {Boolean} allowDecimals    Allow the ticks to be decimals or not\n * @param  {Integer} correctionFactor A correction factor\n * @return {Decimal} The step which is easy to understand between two ticks\n */\nexport var getFormatStep = (roughStep, allowDecimals, correctionFactor) => {\n  if (roughStep.lte(0)) {\n    return new Decimal(0);\n  }\n  var digitCount = getDigitCount(roughStep.toNumber());\n  // The ratio between the rough step and the smallest number which has a bigger\n  // order of magnitudes than the rough step\n  var digitCountValue = new Decimal(10).pow(digitCount);\n  var stepRatio = roughStep.div(digitCountValue);\n  // When an integer and a float multiplied, the accuracy of result may be wrong\n  var stepRatioScale = digitCount !== 1 ? 0.05 : 0.1;\n  var amendStepRatio = new Decimal(Math.ceil(stepRatio.div(stepRatioScale).toNumber())).add(correctionFactor).mul(stepRatioScale);\n  var formatStep = amendStepRatio.mul(digitCountValue);\n  return allowDecimals ? new Decimal(formatStep.toNumber()) : new Decimal(Math.ceil(formatStep.toNumber()));\n};\n\n/**\n * calculate the ticks when the minimum value equals to the maximum value\n *\n * @param  value         The minimum value which is also the maximum value\n * @param  tickCount     The count of ticks\n * @param  allowDecimals Allow the ticks to be decimals or not\n * @return array of ticks\n */\nexport var getTickOfSingleValue = (value, tickCount, allowDecimals) => {\n  var step = new Decimal(1);\n  // calculate the middle value of ticks\n  var middle = new Decimal(value);\n  if (!middle.isint() && allowDecimals) {\n    var absVal = Math.abs(value);\n    if (absVal < 1) {\n      // The step should be a float number when the difference is smaller than 1\n      step = new Decimal(10).pow(getDigitCount(value) - 1);\n      middle = new Decimal(Math.floor(middle.div(step).toNumber())).mul(step);\n    } else if (absVal > 1) {\n      // Return the maximum integer which is smaller than 'value' when 'value' is greater than 1\n      middle = new Decimal(Math.floor(value));\n    }\n  } else if (value === 0) {\n    middle = new Decimal(Math.floor((tickCount - 1) / 2));\n  } else if (!allowDecimals) {\n    middle = new Decimal(Math.floor(value));\n  }\n  var middleIndex = Math.floor((tickCount - 1) / 2);\n  var fn = compose(map(n => middle.add(new Decimal(n - middleIndex).mul(step)).toNumber()), range);\n  return fn(0, tickCount);\n};\n\n/**\n * Calculate the step\n *\n * @param  {Number}  min              The minimum value of an interval\n * @param  {Number}  max              The maximum value of an interval\n * @param  {Integer} tickCount        The count of ticks\n * @param  {Boolean} allowDecimals    Allow the ticks to be decimals or not\n * @param  {Number}  correctionFactor A correction factor\n * @return {Object}  The step, minimum value of ticks, maximum value of ticks\n */\nvar _calculateStep = function calculateStep(min, max, tickCount, allowDecimals) {\n  var correctionFactor = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n  // dirty hack (for recharts' test)\n  if (!Number.isFinite((max - min) / (tickCount - 1))) {\n    return {\n      step: new Decimal(0),\n      tickMin: new Decimal(0),\n      tickMax: new Decimal(0)\n    };\n  }\n\n  // The step which is easy to understand between two ticks\n  var step = getFormatStep(new Decimal(max).sub(min).div(tickCount - 1), allowDecimals, correctionFactor);\n\n  // A medial value of ticks\n  var middle;\n\n  // When 0 is inside the interval, 0 should be a tick\n  if (min <= 0 && max >= 0) {\n    middle = new Decimal(0);\n  } else {\n    // calculate the middle value\n    middle = new Decimal(min).add(max).div(2);\n    // minus modulo value\n    middle = middle.sub(new Decimal(middle).mod(step));\n  }\n  var belowCount = Math.ceil(middle.sub(min).div(step).toNumber());\n  var upCount = Math.ceil(new Decimal(max).sub(middle).div(step).toNumber());\n  var scaleCount = belowCount + upCount + 1;\n  if (scaleCount > tickCount) {\n    // When more ticks need to cover the interval, step should be bigger.\n    return _calculateStep(min, max, tickCount, allowDecimals, correctionFactor + 1);\n  }\n  if (scaleCount < tickCount) {\n    // When less ticks can cover the interval, we should add some additional ticks\n    upCount = max > 0 ? upCount + (tickCount - scaleCount) : upCount;\n    belowCount = max > 0 ? belowCount : belowCount + (tickCount - scaleCount);\n  }\n  return {\n    step,\n    tickMin: middle.sub(new Decimal(belowCount).mul(step)),\n    tickMax: middle.add(new Decimal(upCount).mul(step))\n  };\n};\n\n/**\n * Calculate the ticks of an interval, the count of ticks will be guaranteed\n *\n * @param  {Number}  min, max      min: The minimum value, max: The maximum value\n * @param  {Integer} tickCount     The count of ticks\n * @param  {Boolean} allowDecimals Allow the ticks to be decimals or not\n * @return {Array}   ticks\n */\nexport { _calculateStep as calculateStep };\nfunction getNiceTickValuesFn(_ref2) {\n  var [min, max] = _ref2;\n  var tickCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 6;\n  var allowDecimals = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n  // More than two ticks should be return\n  var count = Math.max(tickCount, 2);\n  var [cormin, cormax] = getValidInterval([min, max]);\n  if (cormin === -Infinity || cormax === Infinity) {\n    var _values = cormax === Infinity ? [cormin, ...range(0, tickCount - 1).map(() => Infinity)] : [...range(0, tickCount - 1).map(() => -Infinity), cormax];\n    return min > max ? reverse(_values) : _values;\n  }\n  if (cormin === cormax) {\n    return getTickOfSingleValue(cormin, tickCount, allowDecimals);\n  }\n\n  // Get the step between two ticks\n  var {\n    step,\n    tickMin,\n    tickMax\n  } = _calculateStep(cormin, cormax, count, allowDecimals, 0);\n  var values = rangeStep(tickMin, tickMax.add(new Decimal(0.1).mul(step)), step);\n  return min > max ? reverse(values) : values;\n}\n\n/**\n * Calculate the ticks of an interval, the count of ticks won't be guraranteed,\n * but the domain will be guaranteed\n *\n * @param  {Number}  min, max      min: The minimum value, max: The maximum value\n * @param  {Integer} tickCount     The count of ticks\n * @param  {Boolean} allowDecimals Allow the ticks to be decimals or not\n * @return {Array}   ticks\n */\nfunction getTickValuesFixedDomainFn(_ref3, tickCount) {\n  var [min, max] = _ref3;\n  var allowDecimals = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n  // More than two ticks should be return\n  var [cormin, cormax] = getValidInterval([min, max]);\n  if (cormin === -Infinity || cormax === Infinity) {\n    return [min, max];\n  }\n  if (cormin === cormax) {\n    return [cormin];\n  }\n  var count = Math.max(tickCount, 2);\n  var step = getFormatStep(new Decimal(cormax).sub(cormin).div(count - 1), allowDecimals, 0);\n  var values = [...rangeStep(new Decimal(cormin), new Decimal(cormax).sub(new Decimal(0.99).mul(step)), step), cormax];\n  return min > max ? reverse(values) : values;\n}\nexport var getNiceTickValues = memoize(getNiceTickValuesFn);\nexport var getTickValuesFixedDomain = memoize(getTickValuesFixedDomainFn);","export var selectRootMaxBarSize = state => state.rootProps.maxBarSize;\nexport var selectBarGap = state => state.rootProps.barGap;\nexport var selectBarCategoryGap = state => state.rootProps.barCategoryGap;\nexport var selectRootBarSize = state => state.rootProps.barSize;\nexport var selectStackOffsetType = state => state.rootProps.stackOffset;\nexport var selectChartName = state => state.options.chartName;\nexport var selectSyncId = state => state.rootProps.syncId;\nexport var selectSyncMethod = state => state.rootProps.syncMethod;\nexport var selectEventEmitter = state => state.options.eventEmitter;","export var defaultPolarAngleAxisProps = {\n  allowDuplicatedCategory: true,\n  // if I set this to false then Tooltip synchronisation stops working in Radar, wtf\n  angleAxisId: 0,\n  axisLine: true,\n  cx: 0,\n  cy: 0,\n  orientation: 'outer',\n  reversed: false,\n  scale: 'auto',\n  tick: true,\n  tickLine: true,\n  tickSize: 8,\n  type: 'category'\n};","export var defaultPolarRadiusAxisProps = {\n  allowDataOverflow: false,\n  allowDuplicatedCategory: true,\n  angle: 0,\n  axisLine: true,\n  cx: 0,\n  cy: 0,\n  orientation: 'right',\n  radiusAxisId: 0,\n  scale: 'auto',\n  stroke: '#ccc',\n  tick: true,\n  tickCount: 5,\n  type: 'number'\n};","export var combineAxisRangeWithReverse = (axisSettings, axisRange) => {\n  if (!axisSettings || !axisRange) {\n    return undefined;\n  }\n  if (axisSettings !== null && axisSettings !== void 0 && axisSettings.reversed) {\n    return [axisRange[1], axisRange[0]];\n  }\n  return axisRange;\n};","import { createSelector } from 'reselect';\nimport { selectChartHeight, selectChartWidth } from './containerSelectors';\nimport { selectChartOffset } from './selectChartOffset';\nimport { getMaxRadius } from '../../util/PolarUtils';\nimport { getPercentValue } from '../../util/DataUtils';\nimport { defaultPolarAngleAxisProps } from '../../polar/defaultPolarAngleAxisProps';\nimport { defaultPolarRadiusAxisProps } from '../../polar/defaultPolarRadiusAxisProps';\nimport { combineAxisRangeWithReverse } from './combiners/combineAxisRangeWithReverse';\nimport { selectChartLayout } from '../../context/chartLayoutContext';\nexport var implicitAngleAxis = {\n  allowDataOverflow: false,\n  allowDecimals: false,\n  allowDuplicatedCategory: false,\n  // defaultPolarAngleAxisProps.allowDuplicatedCategory has it set to true but the actual axis rendering ignores the prop because reasons,\n  dataKey: undefined,\n  domain: undefined,\n  id: defaultPolarAngleAxisProps.angleAxisId,\n  includeHidden: false,\n  name: undefined,\n  reversed: defaultPolarAngleAxisProps.reversed,\n  scale: defaultPolarAngleAxisProps.scale,\n  tick: defaultPolarAngleAxisProps.tick,\n  tickCount: undefined,\n  ticks: undefined,\n  type: defaultPolarAngleAxisProps.type,\n  unit: undefined\n};\nexport var implicitRadiusAxis = {\n  allowDataOverflow: defaultPolarRadiusAxisProps.allowDataOverflow,\n  allowDecimals: false,\n  allowDuplicatedCategory: defaultPolarRadiusAxisProps.allowDuplicatedCategory,\n  dataKey: undefined,\n  domain: undefined,\n  id: defaultPolarRadiusAxisProps.radiusAxisId,\n  includeHidden: false,\n  name: undefined,\n  reversed: false,\n  scale: defaultPolarRadiusAxisProps.scale,\n  tick: defaultPolarRadiusAxisProps.tick,\n  tickCount: defaultPolarRadiusAxisProps.tickCount,\n  ticks: undefined,\n  type: defaultPolarRadiusAxisProps.type,\n  unit: undefined\n};\nexport var implicitRadialBarAngleAxis = {\n  allowDataOverflow: false,\n  allowDecimals: false,\n  allowDuplicatedCategory: defaultPolarAngleAxisProps.allowDuplicatedCategory,\n  dataKey: undefined,\n  domain: undefined,\n  id: defaultPolarAngleAxisProps.angleAxisId,\n  includeHidden: false,\n  name: undefined,\n  reversed: false,\n  scale: defaultPolarAngleAxisProps.scale,\n  tick: defaultPolarAngleAxisProps.tick,\n  tickCount: undefined,\n  ticks: undefined,\n  type: 'number',\n  unit: undefined\n};\nexport var implicitRadialBarRadiusAxis = {\n  allowDataOverflow: defaultPolarRadiusAxisProps.allowDataOverflow,\n  allowDecimals: false,\n  allowDuplicatedCategory: defaultPolarRadiusAxisProps.allowDuplicatedCategory,\n  dataKey: undefined,\n  domain: undefined,\n  id: defaultPolarRadiusAxisProps.radiusAxisId,\n  includeHidden: false,\n  name: undefined,\n  reversed: false,\n  scale: defaultPolarRadiusAxisProps.scale,\n  tick: defaultPolarRadiusAxisProps.tick,\n  tickCount: defaultPolarRadiusAxisProps.tickCount,\n  ticks: undefined,\n  type: 'category',\n  unit: undefined\n};\nexport var selectAngleAxis = (state, angleAxisId) => {\n  if (state.polarAxis.angleAxis[angleAxisId] != null) {\n    return state.polarAxis.angleAxis[angleAxisId];\n  }\n  if (state.layout.layoutType === 'radial') {\n    return implicitRadialBarAngleAxis;\n  }\n  return implicitAngleAxis;\n};\nexport var selectRadiusAxis = (state, radiusAxisId) => {\n  if (state.polarAxis.radiusAxis[radiusAxisId] != null) {\n    return state.polarAxis.radiusAxis[radiusAxisId];\n  }\n  if (state.layout.layoutType === 'radial') {\n    return implicitRadialBarRadiusAxis;\n  }\n  return implicitRadiusAxis;\n};\nexport var selectPolarOptions = state => state.polarOptions;\nexport var selectMaxRadius = createSelector([selectChartWidth, selectChartHeight, selectChartOffset], getMaxRadius);\nvar selectInnerRadius = createSelector([selectPolarOptions, selectMaxRadius], (polarChartOptions, maxRadius) => {\n  if (polarChartOptions == null) {\n    return undefined;\n  }\n  return getPercentValue(polarChartOptions.innerRadius, maxRadius, 0);\n});\nexport var selectOuterRadius = createSelector([selectPolarOptions, selectMaxRadius], (polarChartOptions, maxRadius) => {\n  if (polarChartOptions == null) {\n    return undefined;\n  }\n  return getPercentValue(polarChartOptions.outerRadius, maxRadius, maxRadius * 0.8);\n});\nvar combineAngleAxisRange = polarOptions => {\n  if (polarOptions == null) {\n    return [0, 0];\n  }\n  var {\n    startAngle,\n    endAngle\n  } = polarOptions;\n  return [startAngle, endAngle];\n};\nexport var selectAngleAxisRange = createSelector([selectPolarOptions], combineAngleAxisRange);\nexport var selectAngleAxisRangeWithReversed = createSelector([selectAngleAxis, selectAngleAxisRange], combineAxisRangeWithReverse);\nexport var selectRadiusAxisRange = createSelector([selectMaxRadius, selectInnerRadius, selectOuterRadius], (maxRadius, innerRadius, outerRadius) => {\n  if (maxRadius == null || innerRadius == null || outerRadius == null) {\n    return undefined;\n  }\n  return [innerRadius, outerRadius];\n});\nexport var selectRadiusAxisRangeWithReversed = createSelector([selectRadiusAxis, selectRadiusAxisRange], combineAxisRangeWithReverse);\nexport var selectPolarViewBox = createSelector([selectChartLayout, selectPolarOptions, selectInnerRadius, selectOuterRadius, selectChartWidth, selectChartHeight], (layout, polarOptions, innerRadius, outerRadius, width, height) => {\n  if (layout !== 'centric' && layout !== 'radial' || polarOptions == null || innerRadius == null || outerRadius == null) {\n    return undefined;\n  }\n  var {\n    cx,\n    cy,\n    startAngle,\n    endAngle\n  } = polarOptions;\n  return {\n    cx: getPercentValue(cx, width, width / 2),\n    cy: getPercentValue(cy, height, height / 2),\n    innerRadius,\n    outerRadius,\n    startAngle,\n    endAngle,\n    clockWise: false\n  };\n});","export var pickAxisType = (_state, axisType) => axisType;","export var pickAxisId = (_state, _axisType, axisId) => axisId;","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { createSelector } from 'reselect';\nimport range from 'es-toolkit/compat/range';\nimport * as d3Scales from 'victory-vendor/d3-scale';\nimport { selectChartLayout } from '../../context/chartLayoutContext';\nimport { checkDomainOfScale, getDomainOfStackGroups, getStackedData, getValueByDataKey, isCategoricalAxis } from '../../util/ChartUtils';\nimport { selectChartDataWithIndexes, selectChartDataWithIndexesIfNotInPanorama } from './dataSelectors';\nimport { isWellFormedNumberDomain, numericalDomainSpecifiedWithoutRequiringData, parseNumericalUserDomain } from '../../util/isDomainSpecifiedByUser';\nimport { getPercentValue, hasDuplicate, isNan, isNumber, isNumOrStr, mathSign, upperFirst } from '../../util/DataUtils';\nimport { isWellBehavedNumber } from '../../util/isWellBehavedNumber';\nimport { getNiceTickValues, getTickValuesFixedDomain } from '../../util/scale';\nimport { selectChartHeight, selectChartWidth } from './containerSelectors';\nimport { selectAllXAxes, selectAllYAxes } from './selectAllAxes';\nimport { selectChartOffset } from './selectChartOffset';\nimport { selectBrushDimensions, selectBrushSettings } from './brushSelectors';\nimport { selectBarCategoryGap, selectChartName, selectStackOffsetType } from './rootPropsSelectors';\nimport { selectAngleAxis, selectAngleAxisRange, selectRadiusAxis, selectRadiusAxisRange } from './polarAxisSelectors';\nimport { pickAxisType } from './pickAxisType';\nimport { pickAxisId } from './pickAxisId';\nimport { combineAxisRangeWithReverse } from './combiners/combineAxisRangeWithReverse';\nimport { DEFAULT_Y_AXIS_WIDTH } from '../../util/Constants';\nvar defaultNumericDomain = [0, 'auto'];\n\n/**\n * angle, radius, X, Y, and Z axes all have domain and range and scale and associated settings\n */\n\n/**\n * X and Y axes have ticks. Z axis is never displayed and so it lacks ticks\n * and tick settings.\n */\n\n/**\n * If an axis is not explicitly defined as an element,\n * we still need to render something in the chart and we need\n * some object to hold the domain and default settings.\n */\nexport var implicitXAxis = {\n  allowDataOverflow: false,\n  allowDecimals: true,\n  allowDuplicatedCategory: true,\n  angle: 0,\n  dataKey: undefined,\n  domain: undefined,\n  height: 30,\n  hide: true,\n  id: 0,\n  includeHidden: false,\n  interval: 'preserveEnd',\n  minTickGap: 5,\n  mirror: false,\n  name: undefined,\n  orientation: 'bottom',\n  padding: {\n    left: 0,\n    right: 0\n  },\n  reversed: false,\n  scale: 'auto',\n  tick: true,\n  tickCount: 5,\n  tickFormatter: undefined,\n  ticks: undefined,\n  type: 'category',\n  unit: undefined\n};\nexport var selectXAxisSettings = (state, axisId) => {\n  var axis = state.cartesianAxis.xAxis[axisId];\n  if (axis == null) {\n    return implicitXAxis;\n  }\n  return axis;\n};\n\n/**\n * If an axis is not explicitly defined as an element,\n * we still need to render something in the chart and we need\n * some object to hold the domain and default settings.\n */\nexport var implicitYAxis = {\n  allowDataOverflow: false,\n  allowDecimals: true,\n  allowDuplicatedCategory: true,\n  angle: 0,\n  dataKey: undefined,\n  domain: defaultNumericDomain,\n  hide: true,\n  id: 0,\n  includeHidden: false,\n  interval: 'preserveEnd',\n  minTickGap: 5,\n  mirror: false,\n  name: undefined,\n  orientation: 'left',\n  padding: {\n    top: 0,\n    bottom: 0\n  },\n  reversed: false,\n  scale: 'auto',\n  tick: true,\n  tickCount: 5,\n  tickFormatter: undefined,\n  ticks: undefined,\n  type: 'number',\n  unit: undefined,\n  width: DEFAULT_Y_AXIS_WIDTH\n};\nexport var selectYAxisSettings = (state, axisId) => {\n  var axis = state.cartesianAxis.yAxis[axisId];\n  if (axis == null) {\n    return implicitYAxis;\n  }\n  return axis;\n};\nexport var implicitZAxis = {\n  domain: [0, 'auto'],\n  includeHidden: false,\n  reversed: false,\n  allowDataOverflow: false,\n  allowDuplicatedCategory: false,\n  dataKey: undefined,\n  id: 0,\n  name: '',\n  range: [64, 64],\n  scale: 'auto',\n  type: 'number',\n  unit: ''\n};\nexport var selectZAxisSettings = (state, axisId) => {\n  var axis = state.cartesianAxis.zAxis[axisId];\n  if (axis == null) {\n    return implicitZAxis;\n  }\n  return axis;\n};\nexport var selectBaseAxis = (state, axisType, axisId) => {\n  switch (axisType) {\n    case 'xAxis':\n      {\n        return selectXAxisSettings(state, axisId);\n      }\n    case 'yAxis':\n      {\n        return selectYAxisSettings(state, axisId);\n      }\n    case 'zAxis':\n      {\n        return selectZAxisSettings(state, axisId);\n      }\n    case 'angleAxis':\n      {\n        return selectAngleAxis(state, axisId);\n      }\n    case 'radiusAxis':\n      {\n        return selectRadiusAxis(state, axisId);\n      }\n    default:\n      throw new Error(\"Unexpected axis type: \".concat(axisType));\n  }\n};\nvar selectCartesianAxisSettings = (state, axisType, axisId) => {\n  switch (axisType) {\n    case 'xAxis':\n      {\n        return selectXAxisSettings(state, axisId);\n      }\n    case 'yAxis':\n      {\n        return selectYAxisSettings(state, axisId);\n      }\n    default:\n      throw new Error(\"Unexpected axis type: \".concat(axisType));\n  }\n};\n\n/**\n * Selects either an X or Y axis. Doesn't work with Z axis - for that, instead use selectBaseAxis.\n * @param state Root state\n * @param axisType xAxis | yAxis\n * @param axisId xAxisId | yAxisId\n * @returns axis settings object\n */\nexport var selectAxisSettings = (state, axisType, axisId) => {\n  switch (axisType) {\n    case 'xAxis':\n      {\n        return selectXAxisSettings(state, axisId);\n      }\n    case 'yAxis':\n      {\n        return selectYAxisSettings(state, axisId);\n      }\n    case 'angleAxis':\n      {\n        return selectAngleAxis(state, axisId);\n      }\n    case 'radiusAxis':\n      {\n        return selectRadiusAxis(state, axisId);\n      }\n    default:\n      throw new Error(\"Unexpected axis type: \".concat(axisType));\n  }\n};\n\n/**\n * @param state RechartsRootState\n * @return boolean true if there is at least one Bar or RadialBar\n */\nexport var selectHasBar = state => state.graphicalItems.countOfBars > 0;\n\n/**\n * Filters CartesianGraphicalItemSettings by the relevant axis ID\n * @param axisType 'xAxis' | 'yAxis' | 'zAxis' | 'radiusAxis' | 'angleAxis'\n * @param axisId from props, defaults to 0\n *\n * @returns Predicate function that return true for CartesianGraphicalItemSettings that are relevant to the specified axis\n */\nexport function itemAxisPredicate(axisType, axisId) {\n  return item => {\n    switch (axisType) {\n      case 'xAxis':\n        // This is sensitive to the data type, as 0 !== '0'. I wonder if we should be more flexible. How does 2.x branch behave? TODO write test for that\n        return 'xAxisId' in item && item.xAxisId === axisId;\n      case 'yAxis':\n        return 'yAxisId' in item && item.yAxisId === axisId;\n      case 'zAxis':\n        return 'zAxisId' in item && item.zAxisId === axisId;\n      case 'angleAxis':\n        return 'angleAxisId' in item && item.angleAxisId === axisId;\n      case 'radiusAxis':\n        return 'radiusAxisId' in item && item.radiusAxisId === axisId;\n      default:\n        return false;\n    }\n  };\n}\nexport var selectUnfilteredCartesianItems = state => state.graphicalItems.cartesianItems;\nvar selectAxisPredicate = createSelector([pickAxisType, pickAxisId], itemAxisPredicate);\nexport var combineGraphicalItemsSettings = (graphicalItems, axisSettings, axisPredicate) => graphicalItems.filter(axisPredicate).filter(item => {\n  if ((axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.includeHidden) === true) {\n    return true;\n  }\n  return !item.hide;\n});\nexport var selectCartesianItemsSettings = createSelector([selectUnfilteredCartesianItems, selectBaseAxis, selectAxisPredicate], combineGraphicalItemsSettings);\nexport var filterGraphicalNotStackedItems = cartesianItems => cartesianItems.filter(item => item.stackId === undefined);\nvar selectCartesianItemsSettingsExceptStacked = createSelector([selectCartesianItemsSettings], filterGraphicalNotStackedItems);\nexport var combineGraphicalItemsData = cartesianItems => cartesianItems.map(item => item.data).filter(Boolean).flat(1);\n\n/**\n * This is a \"cheap\" selector - it returns the data but doesn't iterate them, so it is not sensitive on the array length.\n * Also does not apply dataKey yet.\n * @param state RechartsRootState\n * @returns data defined on the chart graphical items, such as Line or Scatter or Pie, and filtered with appropriate dataKey\n */\nexport var selectCartesianGraphicalItemsData = createSelector([selectCartesianItemsSettings], combineGraphicalItemsData);\nexport var combineDisplayedData = (graphicalItemsData, _ref) => {\n  var {\n    chartData = [],\n    dataStartIndex,\n    dataEndIndex\n  } = _ref;\n  if (graphicalItemsData.length > 0) {\n    /*\n     * There is no slicing when data is defined on graphical items. Why?\n     * Because Brush ignores data defined on graphical items,\n     * and does not render.\n     * So Brush will never show up in a Scatter chart for example.\n     * This is something we will need to fix.\n     *\n     * Now, when the root chart data is not defined, the dataEndIndex is 0,\n     * which means the itemsData will be sliced to an empty array anyway.\n     * But that's an implementation detail, and we can fix that too.\n     *\n     * Also, in absence of Axis dataKey, we use the dataKey from each item, respectively.\n     * This is the usual pattern for numerical axis, that is the one where bars go up:\n     * users don't specify any dataKey by default and expect the axis to \"just match the data\".\n     */\n    return graphicalItemsData;\n  }\n  return chartData.slice(dataStartIndex, dataEndIndex + 1);\n};\n\n/**\n * This selector will return all data there is in the chart: graphical items, chart root, all together.\n * Useful for figuring out an axis domain (because that needs to know of everything),\n * not useful for rendering individual graphical elements (because they need to know which data is theirs and which is not).\n *\n * This function will discard the original indexes, so it is also not useful for anything that depends on ordering.\n */\nexport var selectDisplayedData = createSelector([selectCartesianGraphicalItemsData, selectChartDataWithIndexesIfNotInPanorama], combineDisplayedData);\nexport var combineAppliedValues = (data, axisSettings, items) => {\n  if ((axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.dataKey) != null) {\n    return data.map(item => ({\n      value: getValueByDataKey(item, axisSettings.dataKey)\n    }));\n  }\n  if (items.length > 0) {\n    return items.map(item => item.dataKey).flatMap(dataKey => data.map(entry => ({\n      value: getValueByDataKey(entry, dataKey)\n    })));\n  }\n  return data.map(entry => ({\n    value: entry\n  }));\n};\n\n/**\n * This selector will return all values with the appropriate dataKey applied on them.\n * Which dataKey is appropriate depends on where it is defined.\n *\n * This is an expensive selector - it will iterate all data and compute their value using the provided dataKey.\n */\nexport var selectAllAppliedValues = createSelector([selectDisplayedData, selectBaseAxis, selectCartesianItemsSettings], combineAppliedValues);\nexport function isErrorBarRelevantForAxisType(axisType, errorBar) {\n  switch (axisType) {\n    case 'xAxis':\n      return errorBar.direction === 'x';\n    case 'yAxis':\n      return errorBar.direction === 'y';\n    default:\n      return false;\n  }\n}\n\n/**\n * This is type of \"error\" in chart. It is set by using ErrorBar, and it can represent confidence interval,\n * or gap in the data, or standard deviation, or quartiles in boxplot, or whiskers or whatever.\n *\n * We will internally represent it as a tuple of two numbers, where the first number is the lower bound and the second number is the upper bound.\n *\n * It is also true that the first number should be lower than or equal to the associated \"main value\",\n * and the second number should be higher than or equal to the associated \"main value\".\n */\n\nexport function fromMainValueToError(value) {\n  if (isNumber(value) && Number.isFinite(value)) {\n    return [value, value];\n  }\n  if (Array.isArray(value)) {\n    var minError = Math.min(...value);\n    var maxError = Math.max(...value);\n    if (!isNan(minError) && !isNan(maxError) && Number.isFinite(minError) && Number.isFinite(maxError)) {\n      return [minError, maxError];\n    }\n  }\n  return undefined;\n}\nfunction onlyAllowNumbers(data) {\n  return data.filter(v => isNumOrStr(v) || v instanceof Date).map(Number).filter(n => isNan(n) === false);\n}\n\n/**\n * @param entry One item in the 'data' array. Could be anything really - this is defined externally. This is the raw, before dataKey application\n * @param appliedValue This is the result of applying the 'main' dataKey on the `entry`.\n * @param relevantErrorBars Error bars that are relevant for the current axis and layout and all that.\n * @return either undefined or an array of ErrorValue\n */\nexport function getErrorDomainByDataKey(entry, appliedValue, relevantErrorBars) {\n  if (!relevantErrorBars || typeof appliedValue !== 'number' || isNan(appliedValue)) {\n    return [];\n  }\n  if (!relevantErrorBars.length) {\n    return [];\n  }\n  return onlyAllowNumbers(relevantErrorBars.flatMap(eb => {\n    var errorValue = getValueByDataKey(entry, eb.dataKey);\n    var lowBound, highBound;\n    if (Array.isArray(errorValue)) {\n      [lowBound, highBound] = errorValue;\n    } else {\n      lowBound = highBound = errorValue;\n    }\n    if (!isWellBehavedNumber(lowBound) || !isWellBehavedNumber(highBound)) {\n      return undefined;\n    }\n    return [appliedValue - lowBound, appliedValue + highBound];\n  }));\n}\nexport var combineStackGroups = (displayedData, items, stackOffsetType) => {\n  var initialItemsGroups = {};\n  var itemsGroup = items.reduce((acc, item) => {\n    if (item.stackId == null) {\n      return acc;\n    }\n    if (acc[item.stackId] == null) {\n      acc[item.stackId] = [];\n    }\n    acc[item.stackId].push(item);\n    return acc;\n  }, initialItemsGroups);\n  return Object.fromEntries(Object.entries(itemsGroup).map(_ref2 => {\n    var [stackId, graphicalItems] = _ref2;\n    var dataKeys = graphicalItems.map(i => i.dataKey);\n    return [stackId, {\n      // @ts-expect-error getStackedData requires that the input is array of objects, Recharts does not test for that\n      stackedData: getStackedData(displayedData, dataKeys, stackOffsetType),\n      graphicalItems\n    }];\n  }));\n};\n/**\n * Stack groups are groups of graphical items that stack on each other.\n * Stack is a function of axis type (X, Y), axis ID, and stack ID.\n * Graphical items that do not have a stack ID are not going to be present in stack groups.\n */\nexport var selectStackGroups = createSelector([selectDisplayedData, selectCartesianItemsSettings, selectStackOffsetType], combineStackGroups);\nexport var combineDomainOfStackGroups = (stackGroups, _ref3, axisType) => {\n  var {\n    dataStartIndex,\n    dataEndIndex\n  } = _ref3;\n  if (axisType === 'zAxis') {\n    // ZAxis ignores stacks\n    return undefined;\n  }\n  var domainOfStackGroups = getDomainOfStackGroups(stackGroups, dataStartIndex, dataEndIndex);\n  if (domainOfStackGroups != null && domainOfStackGroups[0] === 0 && domainOfStackGroups[1] === 0) {\n    return undefined;\n  }\n  return domainOfStackGroups;\n};\nexport var selectDomainOfStackGroups = createSelector([selectStackGroups, selectChartDataWithIndexes, pickAxisType], combineDomainOfStackGroups);\nexport var combineAppliedNumericalValuesIncludingErrorValues = (data, axisSettings, items, axisType) => {\n  if (items.length > 0) {\n    return data.flatMap(entry => {\n      return items.flatMap(item => {\n        var _item$errorBars, _axisSettings$dataKey;\n        var relevantErrorBars = (_item$errorBars = item.errorBars) === null || _item$errorBars === void 0 ? void 0 : _item$errorBars.filter(errorBar => isErrorBarRelevantForAxisType(axisType, errorBar));\n        var valueByDataKey = getValueByDataKey(entry, (_axisSettings$dataKey = axisSettings.dataKey) !== null && _axisSettings$dataKey !== void 0 ? _axisSettings$dataKey : item.dataKey);\n        return {\n          value: valueByDataKey,\n          errorDomain: getErrorDomainByDataKey(entry, valueByDataKey, relevantErrorBars)\n        };\n      });\n    }).filter(Boolean);\n  }\n  if ((axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.dataKey) != null) {\n    return data.map(item => ({\n      value: getValueByDataKey(item, axisSettings.dataKey),\n      errorDomain: []\n    }));\n  }\n  return data.map(entry => ({\n    value: entry,\n    errorDomain: []\n  }));\n};\nexport var selectAllAppliedNumericalValuesIncludingErrorValues = createSelector(selectDisplayedData, selectBaseAxis, selectCartesianItemsSettingsExceptStacked, pickAxisType, combineAppliedNumericalValuesIncludingErrorValues);\nfunction onlyAllowNumbersAndStringsAndDates(item) {\n  var {\n    value\n  } = item;\n  if (isNumOrStr(value) || value instanceof Date) {\n    return value;\n  }\n  return undefined;\n}\nvar computeNumericalDomain = dataWithErrorDomains => {\n  var allDataSquished = dataWithErrorDomains\n  // This flatMap has to be flat because we're creating a new array in the return value\n  .flatMap(d => [d.value, d.errorDomain])\n  // This flat is needed because a) errorDomain is an array, and b) value may be a number, or it may be a range (for Area, for example)\n  .flat(1);\n  var onlyNumbers = onlyAllowNumbers(allDataSquished);\n  if (onlyNumbers.length === 0) {\n    return undefined;\n  }\n  return [Math.min(...onlyNumbers), Math.max(...onlyNumbers)];\n};\nvar computeDomainOfTypeCategory = (allDataSquished, axisSettings, isCategorical) => {\n  var categoricalDomain = allDataSquished.map(onlyAllowNumbersAndStringsAndDates).filter(v => v != null);\n  if (isCategorical && (axisSettings.dataKey == null || axisSettings.allowDuplicatedCategory && hasDuplicate(categoricalDomain))) {\n    /*\n     * 1. In an absence of dataKey, Recharts will use array indexes as its categorical domain\n     * 2. When category axis has duplicated text, serial numbers are used to generate scale\n     */\n    return range(0, allDataSquished.length);\n  }\n  if (axisSettings.allowDuplicatedCategory) {\n    return categoricalDomain;\n  }\n  return Array.from(new Set(categoricalDomain));\n};\nexport var getDomainDefinition = axisSettings => {\n  var _axisSettings$domain;\n  if (axisSettings == null || !('domain' in axisSettings)) {\n    return defaultNumericDomain;\n  }\n  if (axisSettings.domain != null) {\n    return axisSettings.domain;\n  }\n  if (axisSettings.ticks != null) {\n    if (axisSettings.type === 'number') {\n      var allValues = onlyAllowNumbers(axisSettings.ticks);\n      return [Math.min(...allValues), Math.max(...allValues)];\n    }\n    if (axisSettings.type === 'category') {\n      return axisSettings.ticks.map(String);\n    }\n  }\n  return (_axisSettings$domain = axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.domain) !== null && _axisSettings$domain !== void 0 ? _axisSettings$domain : defaultNumericDomain;\n};\nexport var mergeDomains = function mergeDomains() {\n  for (var _len = arguments.length, domains = new Array(_len), _key = 0; _key < _len; _key++) {\n    domains[_key] = arguments[_key];\n  }\n  var allDomains = domains.filter(Boolean);\n  if (allDomains.length === 0) {\n    return undefined;\n  }\n  var allValues = allDomains.flat();\n  var min = Math.min(...allValues);\n  var max = Math.max(...allValues);\n  return [min, max];\n};\nexport var selectReferenceDots = state => state.referenceElements.dots;\nexport var filterReferenceElements = (elements, axisType, axisId) => {\n  return elements.filter(el => el.ifOverflow === 'extendDomain').filter(el => {\n    if (axisType === 'xAxis') {\n      return el.xAxisId === axisId;\n    }\n    return el.yAxisId === axisId;\n  });\n};\nexport var selectReferenceDotsByAxis = createSelector([selectReferenceDots, pickAxisType, pickAxisId], filterReferenceElements);\nexport var selectReferenceAreas = state => state.referenceElements.areas;\nexport var selectReferenceAreasByAxis = createSelector([selectReferenceAreas, pickAxisType, pickAxisId], filterReferenceElements);\nexport var selectReferenceLines = state => state.referenceElements.lines;\nexport var selectReferenceLinesByAxis = createSelector([selectReferenceLines, pickAxisType, pickAxisId], filterReferenceElements);\nexport var combineDotsDomain = (dots, axisType) => {\n  var allCoords = onlyAllowNumbers(dots.map(dot => axisType === 'xAxis' ? dot.x : dot.y));\n  if (allCoords.length === 0) {\n    return undefined;\n  }\n  return [Math.min(...allCoords), Math.max(...allCoords)];\n};\nvar selectReferenceDotsDomain = createSelector(selectReferenceDotsByAxis, pickAxisType, combineDotsDomain);\nexport var combineAreasDomain = (areas, axisType) => {\n  var allCoords = onlyAllowNumbers(areas.flatMap(area => [axisType === 'xAxis' ? area.x1 : area.y1, axisType === 'xAxis' ? area.x2 : area.y2]));\n  if (allCoords.length === 0) {\n    return undefined;\n  }\n  return [Math.min(...allCoords), Math.max(...allCoords)];\n};\nvar selectReferenceAreasDomain = createSelector([selectReferenceAreasByAxis, pickAxisType], combineAreasDomain);\nexport var combineLinesDomain = (lines, axisType) => {\n  var allCoords = onlyAllowNumbers(lines.map(line => axisType === 'xAxis' ? line.x : line.y));\n  if (allCoords.length === 0) {\n    return undefined;\n  }\n  return [Math.min(...allCoords), Math.max(...allCoords)];\n};\nvar selectReferenceLinesDomain = createSelector(selectReferenceLinesByAxis, pickAxisType, combineLinesDomain);\nvar selectReferenceElementsDomain = createSelector(selectReferenceDotsDomain, selectReferenceLinesDomain, selectReferenceAreasDomain, (dotsDomain, linesDomain, areasDomain) => {\n  return mergeDomains(dotsDomain, areasDomain, linesDomain);\n});\nexport var selectDomainDefinition = createSelector([selectBaseAxis], getDomainDefinition);\nexport var combineNumericalDomain = (axisSettings, domainDefinition, domainOfStackGroups, allDataWithErrorDomains, referenceElementsDomain) => {\n  var domainFromUserPreference = numericalDomainSpecifiedWithoutRequiringData(domainDefinition, axisSettings.allowDataOverflow);\n  if (domainFromUserPreference != null) {\n    // We're done! No need to compute anything else.\n    return domainFromUserPreference;\n  }\n  return parseNumericalUserDomain(domainDefinition, mergeDomains(domainOfStackGroups, referenceElementsDomain, computeNumericalDomain(allDataWithErrorDomains)), axisSettings.allowDataOverflow);\n};\nvar selectNumericalDomain = createSelector([selectBaseAxis, selectDomainDefinition, selectDomainOfStackGroups, selectAllAppliedNumericalValuesIncludingErrorValues, selectReferenceElementsDomain], combineNumericalDomain);\n\n/**\n * Expand by design maps everything between 0 and 1,\n * there is nothing to compute.\n * See https://d3js.org/d3-shape/stack#stack-offsets\n */\nvar expandDomain = [0, 1];\nexport var combineAxisDomain = (axisSettings, layout, displayedData, allAppliedValues, stackOffsetType, axisType, numericalDomain) => {\n  if (axisSettings == null || displayedData == null || displayedData.length === 0) {\n    return undefined;\n  }\n  var {\n    dataKey,\n    type\n  } = axisSettings;\n  var isCategorical = isCategoricalAxis(layout, axisType);\n  if (isCategorical && dataKey == null) {\n    return range(0, displayedData.length);\n  }\n  if (type === 'category') {\n    return computeDomainOfTypeCategory(allAppliedValues, axisSettings, isCategorical);\n  }\n  if (stackOffsetType === 'expand') {\n    return expandDomain;\n  }\n  return numericalDomain;\n};\nexport var selectAxisDomain = createSelector([selectBaseAxis, selectChartLayout, selectDisplayedData, selectAllAppliedValues, selectStackOffsetType, pickAxisType, selectNumericalDomain], combineAxisDomain);\nexport var combineRealScaleType = (axisConfig, layout, hasBar, chartType, axisType) => {\n  if (axisConfig == null) {\n    return undefined;\n  }\n  var {\n    scale,\n    type\n  } = axisConfig;\n  if (scale === 'auto') {\n    if (layout === 'radial' && axisType === 'radiusAxis') {\n      return 'band';\n    }\n    if (layout === 'radial' && axisType === 'angleAxis') {\n      return 'linear';\n    }\n    if (type === 'category' && chartType && (chartType.indexOf('LineChart') >= 0 || chartType.indexOf('AreaChart') >= 0 || chartType.indexOf('ComposedChart') >= 0 && !hasBar)) {\n      return 'point';\n    }\n    if (type === 'category') {\n      return 'band';\n    }\n    return 'linear';\n  }\n  if (typeof scale === 'string') {\n    var name = \"scale\".concat(upperFirst(scale));\n    return name in d3Scales ? name : 'point';\n  }\n  return undefined;\n};\nexport var selectRealScaleType = createSelector([selectBaseAxis, selectChartLayout, selectHasBar, selectChartName, pickAxisType], combineRealScaleType);\nfunction getD3ScaleFromType(realScaleType) {\n  if (realScaleType == null) {\n    return undefined;\n  }\n  if (realScaleType in d3Scales) {\n    // @ts-expect-error we should do better type verification here\n    return d3Scales[realScaleType]();\n  }\n  var name = \"scale\".concat(upperFirst(realScaleType));\n  if (name in d3Scales) {\n    // @ts-expect-error we should do better type verification here\n    return d3Scales[name]();\n  }\n  return undefined;\n}\nexport function combineScaleFunction(axis, realScaleType, axisDomain, axisRange) {\n  if (axisDomain == null || axisRange == null) {\n    return undefined;\n  }\n  if (typeof axis.scale === 'function') {\n    // @ts-expect-error we're going to assume here that if axis.scale is a function then it is a d3Scale function\n    return axis.scale.copy().domain(axisDomain).range(axisRange);\n  }\n  var d3ScaleFunction = getD3ScaleFromType(realScaleType);\n  if (d3ScaleFunction == null) {\n    return undefined;\n  }\n  var scale = d3ScaleFunction.domain(axisDomain).range(axisRange);\n  // I don't like this function because it mutates the scale. We should come up with a way to compute the domain up front.\n  checkDomainOfScale(scale);\n  return scale;\n}\nexport var combineNiceTicks = (axisDomain, axisSettings, realScaleType) => {\n  var domainDefinition = getDomainDefinition(axisSettings);\n  if (realScaleType !== 'auto' && realScaleType !== 'linear') {\n    return undefined;\n  }\n  if (axisSettings != null && axisSettings.tickCount && Array.isArray(domainDefinition) && (domainDefinition[0] === 'auto' || domainDefinition[1] === 'auto') && isWellFormedNumberDomain(axisDomain)) {\n    return getNiceTickValues(axisDomain, axisSettings.tickCount, axisSettings.allowDecimals);\n  }\n  if (axisSettings != null && axisSettings.tickCount && axisSettings.type === 'number' && isWellFormedNumberDomain(axisDomain)) {\n    return getTickValuesFixedDomain(axisDomain, axisSettings.tickCount, axisSettings.allowDecimals);\n  }\n  return undefined;\n};\nexport var selectNiceTicks = createSelector([selectAxisDomain, selectAxisSettings, selectRealScaleType], combineNiceTicks);\nexport var combineAxisDomainWithNiceTicks = (axisSettings, domain, niceTicks, axisType) => {\n  if (\n  /*\n   * Angle axis for some reason uses nice ticks when rendering axis tick labels,\n   * but doesn't use nice ticks for extending domain like all the other axes do.\n   * Not really sure why? Is there a good reason,\n   * or is it just because someone added support for nice ticks to the other axes and forgot this one?\n   */\n  axisType !== 'angleAxis' && (axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.type) === 'number' && isWellFormedNumberDomain(domain) && Array.isArray(niceTicks) && niceTicks.length > 0) {\n    var minFromDomain = domain[0];\n    var minFromTicks = niceTicks[0];\n    var maxFromDomain = domain[1];\n    var maxFromTicks = niceTicks[niceTicks.length - 1];\n    return [Math.min(minFromDomain, minFromTicks), Math.max(maxFromDomain, maxFromTicks)];\n  }\n  return domain;\n};\nexport var selectAxisDomainIncludingNiceTicks = createSelector([selectBaseAxis, selectAxisDomain, selectNiceTicks, pickAxisType], combineAxisDomainWithNiceTicks);\n\n/**\n * Returns the smallest gap, between two numbers in the data, as a ratio of the whole range (max - min).\n * Ignores domain provided by user and only considers domain from data.\n *\n * The result is a number between 0 and 1.\n */\nexport var selectSmallestDistanceBetweenValues = createSelector(selectAllAppliedValues, selectBaseAxis, (allDataSquished, axisSettings) => {\n  if (!axisSettings || axisSettings.type !== 'number') {\n    return undefined;\n  }\n  var smallestDistanceBetweenValues = Infinity;\n  var sortedValues = Array.from(onlyAllowNumbers(allDataSquished.map(d => d.value))).sort((a, b) => a - b);\n  if (sortedValues.length < 2) {\n    return Infinity;\n  }\n  var diff = sortedValues[sortedValues.length - 1] - sortedValues[0];\n  if (diff === 0) {\n    return Infinity;\n  }\n  // Only do n - 1 distance calculations because there's only n - 1 distances between n values.\n  for (var i = 0; i < sortedValues.length - 1; i++) {\n    var distance = sortedValues[i + 1] - sortedValues[i];\n    smallestDistanceBetweenValues = Math.min(smallestDistanceBetweenValues, distance);\n  }\n  return smallestDistanceBetweenValues / diff;\n});\nvar selectCalculatedPadding = createSelector(selectSmallestDistanceBetweenValues, selectChartLayout, selectBarCategoryGap, selectChartOffset, (_1, _2, _3, padding) => padding, (smallestDistanceInPercent, layout, barCategoryGap, offset, padding) => {\n  if (!isWellBehavedNumber(smallestDistanceInPercent)) {\n    return 0;\n  }\n  var rangeWidth = layout === 'vertical' ? offset.height : offset.width;\n  if (padding === 'gap') {\n    return smallestDistanceInPercent * rangeWidth / 2;\n  }\n  if (padding === 'no-gap') {\n    var gap = getPercentValue(barCategoryGap, smallestDistanceInPercent * rangeWidth);\n    var halfBand = smallestDistanceInPercent * rangeWidth / 2;\n    return halfBand - gap - (halfBand - gap) / rangeWidth * gap;\n  }\n  return 0;\n});\nexport var selectCalculatedXAxisPadding = (state, axisId) => {\n  var xAxisSettings = selectXAxisSettings(state, axisId);\n  if (xAxisSettings == null || typeof xAxisSettings.padding !== 'string') {\n    return 0;\n  }\n  return selectCalculatedPadding(state, 'xAxis', axisId, xAxisSettings.padding);\n};\nexport var selectCalculatedYAxisPadding = (state, axisId) => {\n  var yAxisSettings = selectYAxisSettings(state, axisId);\n  if (yAxisSettings == null || typeof yAxisSettings.padding !== 'string') {\n    return 0;\n  }\n  return selectCalculatedPadding(state, 'yAxis', axisId, yAxisSettings.padding);\n};\nvar selectXAxisPadding = createSelector(selectXAxisSettings, selectCalculatedXAxisPadding, (xAxisSettings, calculated) => {\n  var _padding$left, _padding$right;\n  if (xAxisSettings == null) {\n    return {\n      left: 0,\n      right: 0\n    };\n  }\n  var {\n    padding\n  } = xAxisSettings;\n  if (typeof padding === 'string') {\n    return {\n      left: calculated,\n      right: calculated\n    };\n  }\n  return {\n    left: ((_padding$left = padding.left) !== null && _padding$left !== void 0 ? _padding$left : 0) + calculated,\n    right: ((_padding$right = padding.right) !== null && _padding$right !== void 0 ? _padding$right : 0) + calculated\n  };\n});\nvar selectYAxisPadding = createSelector(selectYAxisSettings, selectCalculatedYAxisPadding, (yAxisSettings, calculated) => {\n  var _padding$top, _padding$bottom;\n  if (yAxisSettings == null) {\n    return {\n      top: 0,\n      bottom: 0\n    };\n  }\n  var {\n    padding\n  } = yAxisSettings;\n  if (typeof padding === 'string') {\n    return {\n      top: calculated,\n      bottom: calculated\n    };\n  }\n  return {\n    top: ((_padding$top = padding.top) !== null && _padding$top !== void 0 ? _padding$top : 0) + calculated,\n    bottom: ((_padding$bottom = padding.bottom) !== null && _padding$bottom !== void 0 ? _padding$bottom : 0) + calculated\n  };\n});\nexport var combineXAxisRange = createSelector([selectChartOffset, selectXAxisPadding, selectBrushDimensions, selectBrushSettings, (_state, _axisId, isPanorama) => isPanorama], (offset, padding, brushDimensions, _ref4, isPanorama) => {\n  var {\n    padding: brushPadding\n  } = _ref4;\n  if (isPanorama) {\n    return [brushPadding.left, brushDimensions.width - brushPadding.right];\n  }\n  return [offset.left + padding.left, offset.left + offset.width - padding.right];\n});\nexport var combineYAxisRange = createSelector([selectChartOffset, selectChartLayout, selectYAxisPadding, selectBrushDimensions, selectBrushSettings, (_state, _axisId, isPanorama) => isPanorama], (offset, layout, padding, brushDimensions, _ref5, isPanorama) => {\n  var {\n    padding: brushPadding\n  } = _ref5;\n  if (isPanorama) {\n    return [brushDimensions.height - brushPadding.bottom, brushPadding.top];\n  }\n  if (layout === 'horizontal') {\n    return [offset.top + offset.height - padding.bottom, offset.top + padding.top];\n  }\n  return [offset.top + padding.top, offset.top + offset.height - padding.bottom];\n});\nexport var selectAxisRange = (state, axisType, axisId, isPanorama) => {\n  var _selectZAxisSettings;\n  switch (axisType) {\n    case 'xAxis':\n      return combineXAxisRange(state, axisId, isPanorama);\n    case 'yAxis':\n      return combineYAxisRange(state, axisId, isPanorama);\n    case 'zAxis':\n      return (_selectZAxisSettings = selectZAxisSettings(state, axisId)) === null || _selectZAxisSettings === void 0 ? void 0 : _selectZAxisSettings.range;\n    case 'angleAxis':\n      return selectAngleAxisRange(state);\n    case 'radiusAxis':\n      return selectRadiusAxisRange(state, axisId);\n    default:\n      return undefined;\n  }\n};\nexport var selectAxisRangeWithReverse = createSelector([selectBaseAxis, selectAxisRange], combineAxisRangeWithReverse);\nexport var selectAxisScale = createSelector([selectBaseAxis, selectRealScaleType, selectAxisDomainIncludingNiceTicks, selectAxisRangeWithReverse], combineScaleFunction);\nexport var selectErrorBarsSettings = createSelector(selectCartesianItemsSettings, pickAxisType, (items, axisType) => {\n  return items.flatMap(item => {\n    var _item$errorBars2;\n    return (_item$errorBars2 = item.errorBars) !== null && _item$errorBars2 !== void 0 ? _item$errorBars2 : [];\n  }).filter(e => {\n    return isErrorBarRelevantForAxisType(axisType, e);\n  });\n});\nfunction compareIds(a, b) {\n  if (a.id < b.id) {\n    return -1;\n  }\n  if (a.id > b.id) {\n    return 1;\n  }\n  return 0;\n}\nvar pickAxisOrientation = (_state, orientation) => orientation;\nvar pickMirror = (_state, _orientation, mirror) => mirror;\nvar selectAllXAxesWithOffsetType = createSelector(selectAllXAxes, pickAxisOrientation, pickMirror, (allAxes, orientation, mirror) => allAxes.filter(axis => axis.orientation === orientation).filter(axis => axis.mirror === mirror).sort(compareIds));\nvar selectAllYAxesWithOffsetType = createSelector(selectAllYAxes, pickAxisOrientation, pickMirror, (allAxes, orientation, mirror) => allAxes.filter(axis => axis.orientation === orientation).filter(axis => axis.mirror === mirror).sort(compareIds));\nvar getXAxisSize = (offset, axisSettings) => {\n  return {\n    width: offset.width,\n    height: axisSettings.height\n  };\n};\nvar getYAxisSize = (offset, axisSettings) => {\n  var width = typeof axisSettings.width === 'number' ? axisSettings.width : DEFAULT_Y_AXIS_WIDTH;\n  return {\n    width,\n    height: offset.height\n  };\n};\nexport var selectXAxisSize = createSelector(selectChartOffset, selectXAxisSettings, getXAxisSize);\nvar combineXAxisPositionStartingPoint = (offset, orientation, chartHeight) => {\n  switch (orientation) {\n    case 'top':\n      return offset.top;\n    case 'bottom':\n      return chartHeight - offset.bottom;\n    default:\n      return 0;\n  }\n};\nvar combineYAxisPositionStartingPoint = (offset, orientation, chartWidth) => {\n  switch (orientation) {\n    case 'left':\n      return offset.left;\n    case 'right':\n      return chartWidth - offset.right;\n    default:\n      return 0;\n  }\n};\nexport var selectAllXAxesOffsetSteps = createSelector(selectChartHeight, selectChartOffset, selectAllXAxesWithOffsetType, pickAxisOrientation, pickMirror, (chartHeight, offset, allAxesWithSameOffsetType, orientation, mirror) => {\n  var steps = {};\n  var position;\n  allAxesWithSameOffsetType.forEach(axis => {\n    var axisSize = getXAxisSize(offset, axis);\n    if (position == null) {\n      position = combineXAxisPositionStartingPoint(offset, orientation, chartHeight);\n    }\n    var needSpace = orientation === 'top' && !mirror || orientation === 'bottom' && mirror;\n    steps[axis.id] = position - Number(needSpace) * axisSize.height;\n    position += (needSpace ? -1 : 1) * axisSize.height;\n  });\n  return steps;\n});\nexport var selectAllYAxesOffsetSteps = createSelector(selectChartWidth, selectChartOffset, selectAllYAxesWithOffsetType, pickAxisOrientation, pickMirror, (chartWidth, offset, allAxesWithSameOffsetType, orientation, mirror) => {\n  var steps = {};\n  var position;\n  allAxesWithSameOffsetType.forEach(axis => {\n    var axisSize = getYAxisSize(offset, axis);\n    if (position == null) {\n      position = combineYAxisPositionStartingPoint(offset, orientation, chartWidth);\n    }\n    var needSpace = orientation === 'left' && !mirror || orientation === 'right' && mirror;\n    steps[axis.id] = position - Number(needSpace) * axisSize.width;\n    position += (needSpace ? -1 : 1) * axisSize.width;\n  });\n  return steps;\n});\nexport var selectXAxisPosition = (state, axisId) => {\n  var offset = selectChartOffset(state);\n  var axisSettings = selectXAxisSettings(state, axisId);\n  if (axisSettings == null) {\n    return undefined;\n  }\n  var allSteps = selectAllXAxesOffsetSteps(state, axisSettings.orientation, axisSettings.mirror);\n  var stepOfThisAxis = allSteps[axisId];\n  if (stepOfThisAxis == null) {\n    return {\n      x: offset.left,\n      y: 0\n    };\n  }\n  return {\n    x: offset.left,\n    y: stepOfThisAxis\n  };\n};\nexport var selectYAxisPosition = (state, axisId) => {\n  var offset = selectChartOffset(state);\n  var axisSettings = selectYAxisSettings(state, axisId);\n  if (axisSettings == null) {\n    return undefined;\n  }\n  var allSteps = selectAllYAxesOffsetSteps(state, axisSettings.orientation, axisSettings.mirror);\n  var stepOfThisAxis = allSteps[axisId];\n  if (stepOfThisAxis == null) {\n    return {\n      x: 0,\n      y: offset.top\n    };\n  }\n  return {\n    x: stepOfThisAxis,\n    y: offset.top\n  };\n};\nexport var selectYAxisSize = createSelector(selectChartOffset, selectYAxisSettings, (offset, axisSettings) => {\n  var width = typeof axisSettings.width === 'number' ? axisSettings.width : DEFAULT_Y_AXIS_WIDTH;\n  return {\n    width,\n    height: offset.height\n  };\n});\nexport var selectCartesianAxisSize = (state, axisType, axisId) => {\n  switch (axisType) {\n    case 'xAxis':\n      {\n        return selectXAxisSize(state, axisId).width;\n      }\n    case 'yAxis':\n      {\n        return selectYAxisSize(state, axisId).height;\n      }\n    default:\n      {\n        return undefined;\n      }\n  }\n};\nexport var combineDuplicateDomain = (chartLayout, appliedValues, axis, axisType) => {\n  if (axis == null) {\n    return undefined;\n  }\n  var {\n    allowDuplicatedCategory,\n    type,\n    dataKey\n  } = axis;\n  var isCategorical = isCategoricalAxis(chartLayout, axisType);\n  var allData = appliedValues.map(av => av.value);\n  if (dataKey && isCategorical && type === 'category' && allowDuplicatedCategory && hasDuplicate(allData)) {\n    return allData;\n  }\n  return undefined;\n};\nexport var selectDuplicateDomain = createSelector([selectChartLayout, selectAllAppliedValues, selectBaseAxis, pickAxisType], combineDuplicateDomain);\nexport var combineCategoricalDomain = (layout, appliedValues, axis, axisType) => {\n  if (axis == null || axis.dataKey == null) {\n    return undefined;\n  }\n  var {\n    type,\n    scale\n  } = axis;\n  var isCategorical = isCategoricalAxis(layout, axisType);\n  if (isCategorical && (type === 'number' || scale !== 'auto')) {\n    return appliedValues.map(d => d.value);\n  }\n  return undefined;\n};\nexport var selectCategoricalDomain = createSelector([selectChartLayout, selectAllAppliedValues, selectAxisSettings, pickAxisType], combineCategoricalDomain);\nexport var selectAxisPropsNeededForCartesianGridTicksGenerator = createSelector([selectChartLayout, selectCartesianAxisSettings, selectRealScaleType, selectAxisScale, selectDuplicateDomain, selectCategoricalDomain, selectAxisRange, selectNiceTicks, pickAxisType], (layout, axis, realScaleType, scale, duplicateDomain, categoricalDomain, axisRange, niceTicks, axisType) => {\n  if (axis == null) {\n    return null;\n  }\n  var isCategorical = isCategoricalAxis(layout, axisType);\n  return {\n    angle: axis.angle,\n    interval: axis.interval,\n    minTickGap: axis.minTickGap,\n    orientation: axis.orientation,\n    tick: axis.tick,\n    tickCount: axis.tickCount,\n    tickFormatter: axis.tickFormatter,\n    ticks: axis.ticks,\n    type: axis.type,\n    unit: axis.unit,\n    axisType,\n    categoricalDomain,\n    duplicateDomain,\n    isCategorical,\n    niceTicks,\n    range: axisRange,\n    realScaleType,\n    scale\n  };\n});\nexport var combineAxisTicks = (layout, axis, realScaleType, scale, niceTicks, axisRange, duplicateDomain, categoricalDomain, axisType) => {\n  if (axis == null || scale == null) {\n    return undefined;\n  }\n  var isCategorical = isCategoricalAxis(layout, axisType);\n  var {\n    type,\n    ticks,\n    tickCount\n  } = axis;\n\n  // This is testing for `scaleBand` but for band axis the type is reported as `band` so this looks like a dead code with a workaround elsewhere?\n  var offsetForBand = realScaleType === 'scaleBand' && typeof scale.bandwidth === 'function' ? scale.bandwidth() / 2 : 2;\n  var offset = type === 'category' && scale.bandwidth ? scale.bandwidth() / offsetForBand : 0;\n  offset = axisType === 'angleAxis' && axisRange != null && axisRange.length >= 2 ? mathSign(axisRange[0] - axisRange[1]) * 2 * offset : offset;\n\n  // The ticks set by user should only affect the ticks adjacent to axis line\n  var ticksOrNiceTicks = ticks || niceTicks;\n  if (ticksOrNiceTicks) {\n    var result = ticksOrNiceTicks.map((entry, index) => {\n      var scaleContent = duplicateDomain ? duplicateDomain.indexOf(entry) : entry;\n      return {\n        index,\n        // If the scaleContent is not a number, the coordinate will be NaN.\n        // That could be the case for example with a PointScale and a string as domain.\n        coordinate: scale(scaleContent) + offset,\n        value: entry,\n        offset\n      };\n    });\n    return result.filter(row => !isNan(row.coordinate));\n  }\n\n  // When axis is a categorical axis, but the type of axis is number or the scale of axis is not \"auto\"\n  if (isCategorical && categoricalDomain) {\n    return categoricalDomain.map((entry, index) => ({\n      coordinate: scale(entry) + offset,\n      value: entry,\n      index,\n      offset\n    }));\n  }\n  if (scale.ticks) {\n    return scale.ticks(tickCount)\n    // @ts-expect-error why does the offset go here? The type does not require it\n    .map(entry => ({\n      coordinate: scale(entry) + offset,\n      value: entry,\n      offset\n    }));\n  }\n\n  // When axis has duplicated text, serial numbers are used to generate scale\n  return scale.domain().map((entry, index) => ({\n    coordinate: scale(entry) + offset,\n    value: duplicateDomain ? duplicateDomain[entry] : entry,\n    index,\n    offset\n  }));\n};\nexport var selectTicksOfAxis = createSelector([selectChartLayout, selectAxisSettings, selectRealScaleType, selectAxisScale, selectNiceTicks, selectAxisRange, selectDuplicateDomain, selectCategoricalDomain, pickAxisType], combineAxisTicks);\nexport var combineGraphicalItemTicks = (layout, axis, scale, axisRange, duplicateDomain, categoricalDomain, axisType) => {\n  if (axis == null || scale == null || axisRange == null || axisRange[0] === axisRange[1]) {\n    return undefined;\n  }\n  var isCategorical = isCategoricalAxis(layout, axisType);\n  var {\n    tickCount\n  } = axis;\n  var offset = 0;\n  offset = axisType === 'angleAxis' && (axisRange === null || axisRange === void 0 ? void 0 : axisRange.length) >= 2 ? mathSign(axisRange[0] - axisRange[1]) * 2 * offset : offset;\n\n  // When axis is a categorical axis, but the type of axis is number or the scale of axis is not \"auto\"\n  if (isCategorical && categoricalDomain) {\n    return categoricalDomain.map((entry, index) => ({\n      coordinate: scale(entry) + offset,\n      value: entry,\n      index,\n      offset\n    }));\n  }\n  if (scale.ticks) {\n    return scale.ticks(tickCount)\n    // @ts-expect-error why does the offset go here? The type does not require it\n    .map(entry => ({\n      coordinate: scale(entry) + offset,\n      value: entry,\n      offset\n    }));\n  }\n\n  // When axis has duplicated text, serial numbers are used to generate scale\n  return scale.domain().map((entry, index) => ({\n    coordinate: scale(entry) + offset,\n    value: duplicateDomain ? duplicateDomain[entry] : entry,\n    index,\n    offset\n  }));\n};\nexport var selectTicksOfGraphicalItem = createSelector([selectChartLayout, selectAxisSettings, selectAxisScale, selectAxisRange, selectDuplicateDomain, selectCategoricalDomain, pickAxisType], combineGraphicalItemTicks);\nexport var selectAxisWithScale = createSelector(selectBaseAxis, selectAxisScale, (axis, scale) => {\n  if (axis == null || scale == null) {\n    return undefined;\n  }\n  return _objectSpread(_objectSpread({}, axis), {}, {\n    scale\n  });\n});\nvar selectZAxisScale = createSelector([selectBaseAxis, selectRealScaleType, selectAxisDomain, selectAxisRangeWithReverse], combineScaleFunction);\nexport var selectZAxisWithScale = createSelector((state, _axisType, axisId) => selectZAxisSettings(state, axisId), selectZAxisScale, (axis, scale) => {\n  if (axis == null || scale == null) {\n    return undefined;\n  }\n  return _objectSpread(_objectSpread({}, axis), {}, {\n    scale\n  });\n});\n\n/**\n * We are also going to need to implement polar chart directions if we want to support keyboard controls for those.\n */\n\nexport var selectChartDirection = createSelector([selectChartLayout, selectAllXAxes, selectAllYAxes], (layout, allXAxes, allYAxes) => {\n  switch (layout) {\n    case 'horizontal':\n      {\n        return allXAxes.some(axis => axis.reversed) ? 'right-to-left' : 'left-to-right';\n      }\n    case 'vertical':\n      {\n        return allYAxes.some(axis => axis.reversed) ? 'bottom-to-top' : 'top-to-bottom';\n      }\n    // TODO: make this better. For now, right arrow triggers \"forward\", left arrow \"back\"\n    // however, the tooltip moves an unintuitive direction because of how the indices are rendered\n    case 'centric':\n    case 'radial':\n      {\n        return 'left-to-right';\n      }\n    default:\n      {\n        return undefined;\n      }\n  }\n});","import { useAppSelector } from '../hooks';\nexport var selectDefaultTooltipEventType = state => state.options.defaultTooltipEventType;\nexport var selectValidateTooltipEventTypes = state => state.options.validateTooltipEventTypes;\nexport function combineTooltipEventType(shared, defaultTooltipEventType, validateTooltipEventTypes) {\n  if (shared == null) {\n    return defaultTooltipEventType;\n  }\n  var eventType = shared ? 'axis' : 'item';\n  if (validateTooltipEventTypes == null) {\n    return defaultTooltipEventType;\n  }\n  return validateTooltipEventTypes.includes(eventType) ? eventType : defaultTooltipEventType;\n}\nexport function selectTooltipEventType(state, shared) {\n  var defaultTooltipEventType = selectDefaultTooltipEventType(state);\n  var validateTooltipEventTypes = selectValidateTooltipEventTypes(state);\n  return combineTooltipEventType(shared, defaultTooltipEventType, validateTooltipEventTypes);\n}\nexport function useTooltipEventType(shared) {\n  return useAppSelector(state => selectTooltipEventType(state, shared));\n}","import { isNan } from '../../../util/DataUtils';\nexport var combineActiveLabel = (tooltipTicks, activeIndex) => {\n  var _tooltipTicks$n;\n  var n = Number(activeIndex);\n  if (isNan(n) || activeIndex == null) {\n    return undefined;\n  }\n  return n >= 0 ? tooltipTicks === null || tooltipTicks === void 0 || (_tooltipTicks$n = tooltipTicks[n]) === null || _tooltipTicks$n === void 0 ? void 0 : _tooltipTicks$n.value : undefined;\n};","export var selectTooltipSettings = state => state.tooltip.settings;","import { createSlice, current } from '@reduxjs/toolkit';\nimport { castDraft } from 'immer';\n\n/**\n * One Tooltip can display multiple TooltipPayloadEntries at a time.\n */\n\n/**\n * So what happens is that the tooltip payload is decided based on the available data, and the dataKey.\n * The dataKey can either be defined on the graphical element (like Line, or Bar)\n * or on the tooltip itself.\n *\n * The data can be defined in the chart element, or in the graphical item.\n *\n * So this type is all the settings, other than the data + dataKey complications.\n */\n\n/**\n * This is what Tooltip renders.\n */\n\n/**\n * null means no active index\n * string means: whichever index from the chart data it is.\n * Different charts have different requirements on data shapes,\n * and are also responsible for providing a function that will accept this index\n * and return data.\n */\n\n/**\n * Different items have different data shapes so the state has no opinion on what the data shape should be;\n * the only requirement is that the chart also provides a searcher function\n * that accepts the data, and a key, and returns whatever the payload in Tooltip should be.\n */\n\n/**\n * So this informs the \"tooltip event type\". Tooltip event type can be either \"axis\" or \"item\"\n * and it is used for two things:\n * 1. Sets the active area\n * 2. Sets the background and cursor highlights\n *\n * Some charts only allow to have one type of tooltip event type, some allow both.\n * Those charts that allow both will have one default, and the \"shared\" prop will be used to switch between them.\n * Undefined means \"use the chart default\".\n *\n * Charts that only allow one tooltip event type, will ignore the shared prop.\n */\n\n/**\n * A generic state for user interaction with the chart.\n * User interaction can come through multiple channels: mouse events, keyboard events, or hardcoded in props, or synchronised from other charts.\n *\n * Each of the interaction states is represented as TooltipInteractionState,\n * and then the selectors and Tooltip will decide which of the interaction states to use.\n */\n\nexport var noInteraction = {\n  active: false,\n  index: null,\n  dataKey: undefined,\n  coordinate: undefined\n};\n\n/**\n * The tooltip interaction state stores:\n *\n * - Which graphical item is user interacting with at the moment,\n * - which axis (or, which part of chart background) is user interacting with at the moment\n * - The data that individual graphical items wish to be displayed in case the tooltip gets activated\n */\n\nexport var initialState = {\n  itemInteraction: {\n    click: noInteraction,\n    hover: noInteraction\n  },\n  axisInteraction: {\n    click: noInteraction,\n    hover: noInteraction\n  },\n  keyboardInteraction: noInteraction,\n  syncInteraction: {\n    active: false,\n    index: null,\n    dataKey: undefined,\n    label: undefined,\n    coordinate: undefined\n  },\n  tooltipItemPayloads: [],\n  settings: {\n    shared: undefined,\n    trigger: 'hover',\n    axisId: 0,\n    active: false,\n    defaultIndex: undefined\n  }\n};\nvar tooltipSlice = createSlice({\n  name: 'tooltip',\n  initialState,\n  reducers: {\n    addTooltipEntrySettings(state, action) {\n      state.tooltipItemPayloads.push(castDraft(action.payload));\n    },\n    removeTooltipEntrySettings(state, action) {\n      var index = current(state).tooltipItemPayloads.indexOf(castDraft(action.payload));\n      if (index > -1) {\n        state.tooltipItemPayloads.splice(index, 1);\n      }\n    },\n    setTooltipSettingsState(state, action) {\n      state.settings = action.payload;\n    },\n    setActiveMouseOverItemIndex(state, action) {\n      state.syncInteraction.active = false;\n      state.keyboardInteraction.active = false;\n      state.itemInteraction.hover.active = true;\n      state.itemInteraction.hover.index = action.payload.activeIndex;\n      state.itemInteraction.hover.dataKey = action.payload.activeDataKey;\n      state.itemInteraction.hover.coordinate = action.payload.activeCoordinate;\n    },\n    mouseLeaveChart(state) {\n      /*\n       * Clear only the active flags. Why?\n       * 1. Keep Coordinate to preserve animation - next time the Tooltip appears, we want to render it from\n       * the last place where it was when it disappeared.\n       * 2. We want to keep all the properties anyway just in case the tooltip has `active=true` prop\n       * and continues being visible even after the mouse has left the chart.\n       */\n      state.itemInteraction.hover.active = false;\n      state.axisInteraction.hover.active = false;\n    },\n    mouseLeaveItem(state) {\n      state.itemInteraction.hover.active = false;\n    },\n    setActiveClickItemIndex(state, action) {\n      state.syncInteraction.active = false;\n      state.itemInteraction.click.active = true;\n      state.keyboardInteraction.active = false;\n      state.itemInteraction.click.index = action.payload.activeIndex;\n      state.itemInteraction.click.dataKey = action.payload.activeDataKey;\n      state.itemInteraction.click.coordinate = action.payload.activeCoordinate;\n    },\n    setMouseOverAxisIndex(state, action) {\n      state.syncInteraction.active = false;\n      state.axisInteraction.hover.active = true;\n      state.keyboardInteraction.active = false;\n      state.axisInteraction.hover.index = action.payload.activeIndex;\n      state.axisInteraction.hover.dataKey = action.payload.activeDataKey;\n      state.axisInteraction.hover.coordinate = action.payload.activeCoordinate;\n    },\n    setMouseClickAxisIndex(state, action) {\n      state.syncInteraction.active = false;\n      state.keyboardInteraction.active = false;\n      state.axisInteraction.click.active = true;\n      state.axisInteraction.click.index = action.payload.activeIndex;\n      state.axisInteraction.click.dataKey = action.payload.activeDataKey;\n      state.axisInteraction.click.coordinate = action.payload.activeCoordinate;\n    },\n    setSyncInteraction(state, action) {\n      state.syncInteraction = action.payload;\n    },\n    setKeyboardInteraction(state, action) {\n      state.keyboardInteraction.active = action.payload.active;\n      state.keyboardInteraction.index = action.payload.activeIndex;\n      state.keyboardInteraction.coordinate = action.payload.activeCoordinate;\n      state.keyboardInteraction.dataKey = action.payload.activeDataKey;\n    }\n  }\n});\nexport var {\n  addTooltipEntrySettings,\n  removeTooltipEntrySettings,\n  setTooltipSettingsState,\n  setActiveMouseOverItemIndex,\n  mouseLeaveItem,\n  mouseLeaveChart,\n  setActiveClickItemIndex,\n  setMouseOverAxisIndex,\n  setMouseClickAxisIndex,\n  setSyncInteraction,\n  setKeyboardInteraction\n} = tooltipSlice.actions;\nexport var tooltipReducer = tooltipSlice.reducer;","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { noInteraction } from '../../tooltipSlice';\nfunction chooseAppropriateMouseInteraction(tooltipState, tooltipEventType, trigger) {\n  if (tooltipEventType === 'axis') {\n    if (trigger === 'click') {\n      return tooltipState.axisInteraction.click;\n    }\n    return tooltipState.axisInteraction.hover;\n  }\n  if (trigger === 'click') {\n    return tooltipState.itemInteraction.click;\n  }\n  return tooltipState.itemInteraction.hover;\n}\nfunction hasBeenActivePreviously(tooltipInteractionState) {\n  return tooltipInteractionState.index != null;\n}\nexport var combineTooltipInteractionState = (tooltipState, tooltipEventType, trigger, defaultIndex) => {\n  if (tooltipEventType == null) {\n    return noInteraction;\n  }\n  var appropriateMouseInteraction = chooseAppropriateMouseInteraction(tooltipState, tooltipEventType, trigger);\n  if (appropriateMouseInteraction == null) {\n    return noInteraction;\n  }\n  if (appropriateMouseInteraction.active) {\n    return appropriateMouseInteraction;\n  }\n  if (tooltipState.keyboardInteraction.active) {\n    return tooltipState.keyboardInteraction;\n  }\n  if (tooltipState.syncInteraction.active && tooltipState.syncInteraction.index != null) {\n    return tooltipState.syncInteraction;\n  }\n  var activeFromProps = tooltipState.settings.active === true;\n  if (hasBeenActivePreviously(appropriateMouseInteraction)) {\n    if (activeFromProps) {\n      return _objectSpread(_objectSpread({}, appropriateMouseInteraction), {}, {\n        active: true\n      });\n    }\n  } else if (defaultIndex != null) {\n    return {\n      active: true,\n      coordinate: undefined,\n      dataKey: undefined,\n      index: defaultIndex\n    };\n  }\n  return _objectSpread(_objectSpread({}, noInteraction), {}, {\n    coordinate: appropriateMouseInteraction.coordinate\n  });\n};","import { isWellBehavedNumber } from '../../../util/isWellBehavedNumber';\nexport var combineActiveTooltipIndex = (tooltipInteraction, chartData) => {\n  var desiredIndex = tooltipInteraction === null || tooltipInteraction === void 0 ? void 0 : tooltipInteraction.index;\n  if (desiredIndex == null) {\n    return null;\n  }\n  var indexAsNumber = Number(desiredIndex);\n  if (!isWellBehavedNumber(indexAsNumber)) {\n    // this is for charts like Sankey and Treemap that do not support numerical indexes. We need a proper solution for this before we can start supporting keyboard events on these charts.\n    return desiredIndex;\n  }\n\n  /*\n   * Zero is a trivial limit for single-dimensional charts like Line and Area,\n   * but this also needs a support for multidimensional charts like Sankey and Treemap! TODO\n   */\n  var lowerLimit = 0;\n  var upperLimit = +Infinity;\n  if (chartData.length > 0) {\n    upperLimit = chartData.length - 1;\n  }\n\n  // now let's clamp the desiredIndex between the limits\n  return String(Math.max(lowerLimit, Math.min(indexAsNumber, upperLimit)));\n};","export var combineCoordinateForDefaultIndex = (width, height, layout, offset, tooltipTicks, defaultIndex, tooltipConfigurations, tooltipPayloadSearcher) => {\n  if (defaultIndex == null || tooltipPayloadSearcher == null) {\n    return undefined;\n  }\n  // With defaultIndex alone, we don't have enough information to decide _which_ of the multiple tooltips to display. So we choose the first one.\n  var firstConfiguration = tooltipConfigurations[0];\n  // @ts-expect-error we need to rethink the tooltipPayloadSearcher type\n  var maybePosition = firstConfiguration == null ? undefined : tooltipPayloadSearcher(firstConfiguration.positions, defaultIndex);\n  if (maybePosition != null) {\n    return maybePosition;\n  }\n  var tick = tooltipTicks === null || tooltipTicks === void 0 ? void 0 : tooltipTicks[Number(defaultIndex)];\n  if (!tick) {\n    return undefined;\n  }\n  switch (layout) {\n    case 'horizontal':\n      {\n        return {\n          x: tick.coordinate,\n          y: (offset.top + height) / 2\n        };\n      }\n    default:\n      {\n        // This logic is not super sound - it conflates vertical, radial, centric layouts into just one. TODO improve!\n        return {\n          x: (offset.left + width) / 2,\n          y: tick.coordinate\n        };\n      }\n  }\n};","export var combineTooltipPayloadConfigurations = (tooltipState, tooltipEventType, trigger, defaultIndex) => {\n  // if tooltip reacts to axis interaction, then we display all items at the same time.\n  if (tooltipEventType === 'axis') {\n    return tooltipState.tooltipItemPayloads;\n  }\n  /*\n   * By now we already know that tooltipEventType is 'item', so we can only search in itemInteractions.\n   * item means that only the hovered or clicked item will be present in the tooltip.\n   */\n  if (tooltipState.tooltipItemPayloads.length === 0) {\n    // No point filtering if the payload is empty\n    return [];\n  }\n  var filterByDataKey;\n  if (trigger === 'hover') {\n    filterByDataKey = tooltipState.itemInteraction.hover.dataKey;\n  } else {\n    filterByDataKey = tooltipState.itemInteraction.click.dataKey;\n  }\n  if (filterByDataKey == null && defaultIndex != null) {\n    /*\n     * So when we use `defaultIndex` - we don't have a dataKey to filter by because user did not hover over anything yet.\n     * In that case let's display the first item in the tooltip; after all, this is `item` interaction case,\n     * so we should display only one item at a time instead of all.\n     */\n    return [tooltipState.tooltipItemPayloads[0]];\n  }\n  return tooltipState.tooltipItemPayloads.filter(tpc => {\n    var _tpc$settings;\n    return ((_tpc$settings = tpc.settings) === null || _tpc$settings === void 0 ? void 0 : _tpc$settings.dataKey) === filterByDataKey;\n  });\n};","export var selectTooltipPayloadSearcher = state => state.options.tooltipPayloadSearcher;","export var selectTooltipState = state => state.tooltip;","import { createSelector } from 'reselect';\nimport { combineAppliedNumericalValuesIncludingErrorValues, combineAppliedValues, combineAreasDomain, combineAxisDomain, combineAxisDomainWithNiceTicks, combineCategoricalDomain, combineDisplayedData, combineDomainOfStackGroups, combineDotsDomain, combineDuplicateDomain, combineGraphicalItemsData, combineGraphicalItemsSettings, combineLinesDomain, combineNiceTicks, combineNumericalDomain, combineRealScaleType, combineScaleFunction, combineStackGroups, filterGraphicalNotStackedItems, filterReferenceElements, getDomainDefinition, itemAxisPredicate, mergeDomains, selectAxisRange, selectAxisSettings, selectHasBar, selectReferenceAreas, selectReferenceDots, selectReferenceLines } from './axisSelectors';\nimport { selectChartLayout } from '../../context/chartLayoutContext';\nimport { isCategoricalAxis } from '../../util/ChartUtils';\nimport { selectChartDataWithIndexes } from './dataSelectors';\nimport { selectChartName, selectStackOffsetType } from './rootPropsSelectors';\nimport { mathSign } from '../../util/DataUtils';\nimport { combineAxisRangeWithReverse } from './combiners/combineAxisRangeWithReverse';\nimport { combineTooltipEventType, selectDefaultTooltipEventType, selectValidateTooltipEventTypes } from './selectTooltipEventType';\nimport { combineActiveLabel } from './combiners/combineActiveLabel';\nimport { selectTooltipSettings } from './selectTooltipSettings';\nimport { combineTooltipInteractionState } from './combiners/combineTooltipInteractionState';\nimport { combineActiveTooltipIndex } from './combiners/combineActiveTooltipIndex';\nimport { combineCoordinateForDefaultIndex } from './combiners/combineCoordinateForDefaultIndex';\nimport { selectChartHeight, selectChartWidth } from './containerSelectors';\nimport { selectChartOffset } from './selectChartOffset';\nimport { combineTooltipPayloadConfigurations } from './combiners/combineTooltipPayloadConfigurations';\nimport { selectTooltipPayloadSearcher } from './selectTooltipPayloadSearcher';\nimport { selectTooltipState } from './selectTooltipState';\nexport var selectTooltipAxisType = state => {\n  var layout = selectChartLayout(state);\n  if (layout === 'horizontal') {\n    return 'xAxis';\n  }\n  if (layout === 'vertical') {\n    return 'yAxis';\n  }\n  if (layout === 'centric') {\n    return 'angleAxis';\n  }\n  return 'radiusAxis';\n};\nexport var selectTooltipAxisId = state => state.tooltip.settings.axisId;\nexport var selectTooltipAxis = state => {\n  var axisType = selectTooltipAxisType(state);\n  var axisId = selectTooltipAxisId(state);\n  return selectAxisSettings(state, axisType, axisId);\n};\nexport var selectTooltipAxisRealScaleType = createSelector([selectTooltipAxis, selectChartLayout, selectHasBar, selectChartName, selectTooltipAxisType], combineRealScaleType);\nexport var selectAllUnfilteredGraphicalItems = createSelector([state => state.graphicalItems.cartesianItems, state => state.graphicalItems.polarItems], (cartesianItems, polarItems) => [...cartesianItems, ...polarItems]);\nvar selectTooltipAxisPredicate = createSelector([selectTooltipAxisType, selectTooltipAxisId], itemAxisPredicate);\nexport var selectAllGraphicalItemsSettings = createSelector([selectAllUnfilteredGraphicalItems, selectTooltipAxis, selectTooltipAxisPredicate], combineGraphicalItemsSettings);\nexport var selectTooltipGraphicalItemsData = createSelector([selectAllGraphicalItemsSettings], combineGraphicalItemsData);\n\n/**\n * Data for tooltip always use the data with indexes set by a Brush,\n * and never accept the isPanorama flag:\n * because Tooltip never displays inside the panorama anyway\n * so we don't need to worry what would happen there.\n */\nexport var selectTooltipDisplayedData = createSelector([selectTooltipGraphicalItemsData, selectChartDataWithIndexes], combineDisplayedData);\nvar selectAllTooltipAppliedValues = createSelector([selectTooltipDisplayedData, selectTooltipAxis, selectAllGraphicalItemsSettings], combineAppliedValues);\nvar selectTooltipAxisDomainDefinition = createSelector([selectTooltipAxis], getDomainDefinition);\nvar selectTooltipStackGroups = createSelector([selectTooltipDisplayedData, selectAllGraphicalItemsSettings, selectStackOffsetType], combineStackGroups);\nvar selectTooltipDomainOfStackGroups = createSelector([selectTooltipStackGroups, selectChartDataWithIndexes, selectTooltipAxisType], combineDomainOfStackGroups);\nvar selectTooltipItemsSettingsExceptStacked = createSelector([selectAllGraphicalItemsSettings], filterGraphicalNotStackedItems);\nvar selectTooltipAllAppliedNumericalValuesIncludingErrorValues = createSelector([selectTooltipDisplayedData, selectTooltipAxis, selectTooltipItemsSettingsExceptStacked, selectTooltipAxisType], combineAppliedNumericalValuesIncludingErrorValues);\nvar selectReferenceDotsByTooltipAxis = createSelector([selectReferenceDots, selectTooltipAxisType, selectTooltipAxisId], filterReferenceElements);\nvar selectTooltipReferenceDotsDomain = createSelector([selectReferenceDotsByTooltipAxis, selectTooltipAxisType], combineDotsDomain);\nvar selectReferenceAreasByTooltipAxis = createSelector([selectReferenceAreas, selectTooltipAxisType, selectTooltipAxisId], filterReferenceElements);\nvar selectTooltipReferenceAreasDomain = createSelector([selectReferenceAreasByTooltipAxis, selectTooltipAxisType], combineAreasDomain);\nvar selectReferenceLinesByTooltipAxis = createSelector([selectReferenceLines, selectTooltipAxisType, selectTooltipAxisId], filterReferenceElements);\nvar selectTooltipReferenceLinesDomain = createSelector([selectReferenceLinesByTooltipAxis, selectTooltipAxisType], combineLinesDomain);\nvar selectTooltipReferenceElementsDomain = createSelector([selectTooltipReferenceDotsDomain, selectTooltipReferenceLinesDomain, selectTooltipReferenceAreasDomain], mergeDomains);\nvar selectTooltipNumericalDomain = createSelector([selectTooltipAxis, selectTooltipAxisDomainDefinition, selectTooltipDomainOfStackGroups, selectTooltipAllAppliedNumericalValuesIncludingErrorValues, selectTooltipReferenceElementsDomain], combineNumericalDomain);\nexport var selectTooltipAxisDomain = createSelector([selectTooltipAxis, selectChartLayout, selectTooltipDisplayedData, selectAllTooltipAppliedValues, selectStackOffsetType, selectTooltipAxisType, selectTooltipNumericalDomain], combineAxisDomain);\nvar selectTooltipNiceTicks = createSelector([selectTooltipAxisDomain, selectTooltipAxis, selectTooltipAxisRealScaleType], combineNiceTicks);\nexport var selectTooltipAxisDomainIncludingNiceTicks = createSelector([selectTooltipAxis, selectTooltipAxisDomain, selectTooltipNiceTicks, selectTooltipAxisType], combineAxisDomainWithNiceTicks);\nvar selectTooltipAxisRange = state => {\n  var axisType = selectTooltipAxisType(state);\n  var axisId = selectTooltipAxisId(state);\n  var isPanorama = false; // Tooltip never displays in panorama so this is safe to assume\n  return selectAxisRange(state, axisType, axisId, isPanorama);\n};\nexport var selectTooltipAxisRangeWithReverse = createSelector([selectTooltipAxis, selectTooltipAxisRange], combineAxisRangeWithReverse);\nexport var selectTooltipAxisScale = createSelector([selectTooltipAxis, selectTooltipAxisRealScaleType, selectTooltipAxisDomainIncludingNiceTicks, selectTooltipAxisRangeWithReverse], combineScaleFunction);\nvar selectTooltipDuplicateDomain = createSelector([selectChartLayout, selectAllTooltipAppliedValues, selectTooltipAxis, selectTooltipAxisType], combineDuplicateDomain);\nexport var selectTooltipCategoricalDomain = createSelector([selectChartLayout, selectAllTooltipAppliedValues, selectTooltipAxis, selectTooltipAxisType], combineCategoricalDomain);\nvar combineTicksOfTooltipAxis = (layout, axis, realScaleType, scale, range, duplicateDomain, categoricalDomain, axisType) => {\n  if (!axis) {\n    return undefined;\n  }\n  var {\n    type\n  } = axis;\n  var isCategorical = isCategoricalAxis(layout, axisType);\n  if (!scale) {\n    return undefined;\n  }\n  var offsetForBand = realScaleType === 'scaleBand' && scale.bandwidth ? scale.bandwidth() / 2 : 2;\n  var offset = type === 'category' && scale.bandwidth ? scale.bandwidth() / offsetForBand : 0;\n  offset = axisType === 'angleAxis' && range != null && (range === null || range === void 0 ? void 0 : range.length) >= 2 ? mathSign(range[0] - range[1]) * 2 * offset : offset;\n\n  // When axis is a categorical axis, but the type of axis is number or the scale of axis is not \"auto\"\n  if (isCategorical && categoricalDomain) {\n    return categoricalDomain.map((entry, index) => ({\n      coordinate: scale(entry) + offset,\n      value: entry,\n      index,\n      offset\n    }));\n  }\n\n  // When axis has duplicated text, serial numbers are used to generate scale\n  return scale.domain().map((entry, index) => ({\n    coordinate: scale(entry) + offset,\n    value: duplicateDomain ? duplicateDomain[entry] : entry,\n    index,\n    offset\n  }));\n};\nexport var selectTooltipAxisTicks = createSelector([selectChartLayout, selectTooltipAxis, selectTooltipAxisRealScaleType, selectTooltipAxisScale, selectTooltipAxisRange, selectTooltipDuplicateDomain, selectTooltipCategoricalDomain, selectTooltipAxisType], combineTicksOfTooltipAxis);\nvar selectTooltipEventType = createSelector([selectDefaultTooltipEventType, selectValidateTooltipEventTypes, selectTooltipSettings], (defaultTooltipEventType, validateTooltipEventType, settings) => combineTooltipEventType(settings.shared, defaultTooltipEventType, validateTooltipEventType));\nvar selectTooltipTrigger = state => state.tooltip.settings.trigger;\nvar selectDefaultIndex = state => state.tooltip.settings.defaultIndex;\nvar selectTooltipInteractionState = createSelector([selectTooltipState, selectTooltipEventType, selectTooltipTrigger, selectDefaultIndex], combineTooltipInteractionState);\nexport var selectActiveTooltipIndex = createSelector([selectTooltipInteractionState, selectTooltipDisplayedData], combineActiveTooltipIndex);\nexport var selectActiveLabel = createSelector([selectTooltipAxisTicks, selectActiveTooltipIndex], combineActiveLabel);\nexport var selectActiveTooltipDataKey = createSelector([selectTooltipInteractionState], tooltipInteraction => {\n  if (!tooltipInteraction) {\n    return undefined;\n  }\n  return tooltipInteraction.dataKey;\n});\nvar selectTooltipPayloadConfigurations = createSelector([selectTooltipState, selectTooltipEventType, selectTooltipTrigger, selectDefaultIndex], combineTooltipPayloadConfigurations);\nvar selectTooltipCoordinateForDefaultIndex = createSelector([selectChartWidth, selectChartHeight, selectChartLayout, selectChartOffset, selectTooltipAxisTicks, selectDefaultIndex, selectTooltipPayloadConfigurations, selectTooltipPayloadSearcher], combineCoordinateForDefaultIndex);\nexport var selectActiveTooltipCoordinate = createSelector([selectTooltipInteractionState, selectTooltipCoordinateForDefaultIndex], (tooltipInteractionState, defaultIndexCoordinate) => {\n  if (tooltipInteractionState !== null && tooltipInteractionState !== void 0 && tooltipInteractionState.coordinate) {\n    return tooltipInteractionState.coordinate;\n  }\n  return defaultIndexCoordinate;\n});\nexport var selectIsTooltipActive = createSelector([selectTooltipInteractionState], tooltipInteractionState => tooltipInteractionState.active);","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { useAppSelector } from '../state/hooks';\nimport { getBandSizeOfAxis } from '../util/ChartUtils';\nimport { selectTooltipAxis, selectTooltipAxisScale, selectTooltipAxisTicks } from '../state/selectors/tooltipSelectors';\nexport var useTooltipAxis = () => useAppSelector(selectTooltipAxis);\nexport var useTooltipAxisBandSize = () => {\n  var tooltipAxis = useTooltipAxis();\n  var tooltipTicks = useAppSelector(selectTooltipAxisTicks);\n  var tooltipAxisScale = useAppSelector(selectTooltipAxisScale);\n  return getBandSizeOfAxis(_objectSpread(_objectSpread({}, tooltipAxis), {}, {\n    scale: tooltipAxisScale\n  }), tooltipTicks);\n};","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { createSelector } from 'reselect';\nimport sortBy from 'es-toolkit/compat/sortBy';\nimport { useAppSelector } from '../hooks';\nimport { calculateActiveTickIndex, calculateTooltipPos, getActiveCoordinate, getTooltipEntry, getValueByDataKey, inRange } from '../../util/ChartUtils';\nimport { findEntryInArray } from '../../util/DataUtils';\nimport { selectChartDataWithIndexes } from './dataSelectors';\nimport { selectTooltipAxis, selectTooltipAxisTicks, selectTooltipDisplayedData } from './tooltipSelectors';\nimport { selectChartName } from './rootPropsSelectors';\nimport { selectChartLayout } from '../../context/chartLayoutContext';\nimport { selectChartOffset } from './selectChartOffset';\nimport { selectChartHeight, selectChartWidth } from './containerSelectors';\nimport { combineActiveLabel } from './combiners/combineActiveLabel';\nimport { combineTooltipInteractionState } from './combiners/combineTooltipInteractionState';\nimport { combineActiveTooltipIndex } from './combiners/combineActiveTooltipIndex';\nimport { combineCoordinateForDefaultIndex } from './combiners/combineCoordinateForDefaultIndex';\nimport { combineTooltipPayloadConfigurations } from './combiners/combineTooltipPayloadConfigurations';\nimport { selectTooltipPayloadSearcher } from './selectTooltipPayloadSearcher';\nimport { selectTooltipState } from './selectTooltipState';\nexport var useChartName = () => {\n  return useAppSelector(selectChartName);\n};\nvar pickTooltipEventType = (_state, tooltipEventType) => tooltipEventType;\nvar pickTrigger = (_state, _tooltipEventType, trigger) => trigger;\nvar pickDefaultIndex = (_state, _tooltipEventType, _trigger, defaultIndex) => defaultIndex;\nfunction getSliced(arr, startIndex, endIndex) {\n  if (!Array.isArray(arr)) {\n    return arr;\n  }\n  if (arr && startIndex + endIndex !== 0) {\n    return arr.slice(startIndex, endIndex + 1);\n  }\n  return arr;\n}\nexport var selectOrderedTooltipTicks = createSelector(selectTooltipAxisTicks, ticks => sortBy(ticks, o => o.coordinate));\nexport var selectTooltipInteractionState = createSelector([selectTooltipState, pickTooltipEventType, pickTrigger, pickDefaultIndex], combineTooltipInteractionState);\nexport var selectActiveIndex = createSelector([selectTooltipInteractionState, selectTooltipDisplayedData], combineActiveTooltipIndex);\nexport var selectTooltipDataKey = (state, tooltipEventType, trigger) => {\n  if (tooltipEventType == null) {\n    return undefined;\n  }\n  var tooltipState = selectTooltipState(state);\n  if (tooltipEventType === 'axis') {\n    if (trigger === 'hover') {\n      return tooltipState.axisInteraction.hover.dataKey;\n    }\n    return tooltipState.axisInteraction.click.dataKey;\n  }\n  if (trigger === 'hover') {\n    return tooltipState.itemInteraction.hover.dataKey;\n  }\n  return tooltipState.itemInteraction.click.dataKey;\n};\nexport var selectTooltipPayloadConfigurations = createSelector([selectTooltipState, pickTooltipEventType, pickTrigger, pickDefaultIndex], combineTooltipPayloadConfigurations);\nexport var selectCoordinateForDefaultIndex = createSelector([selectChartWidth, selectChartHeight, selectChartLayout, selectChartOffset, selectTooltipAxisTicks, pickDefaultIndex, selectTooltipPayloadConfigurations, selectTooltipPayloadSearcher], combineCoordinateForDefaultIndex);\nexport var selectActiveCoordinate = createSelector([selectTooltipInteractionState, selectCoordinateForDefaultIndex], (tooltipInteractionState, defaultIndexCoordinate) => {\n  var _tooltipInteractionSt;\n  return (_tooltipInteractionSt = tooltipInteractionState.coordinate) !== null && _tooltipInteractionSt !== void 0 ? _tooltipInteractionSt : defaultIndexCoordinate;\n});\nexport var selectActiveLabel = createSelector(selectTooltipAxisTicks, selectActiveIndex, combineActiveLabel);\nfunction selectFinalData(dataDefinedOnItem, dataDefinedOnChart) {\n  /*\n   * If a payload has data specified directly from the graphical item, prefer that.\n   * Otherwise, fill in data from the chart level, using the same index.\n   */\n  if (dataDefinedOnItem != null) {\n    return dataDefinedOnItem;\n  }\n  return dataDefinedOnChart;\n}\nexport var combineTooltipPayload = (tooltipPayloadConfigurations, activeIndex, chartDataState, tooltipAxis, activeLabel, tooltipPayloadSearcher, tooltipEventType) => {\n  if (activeIndex == null || tooltipPayloadSearcher == null) {\n    return undefined;\n  }\n  var {\n    chartData,\n    computedData,\n    dataStartIndex,\n    dataEndIndex\n  } = chartDataState;\n  var init = [];\n  return tooltipPayloadConfigurations.reduce((agg, _ref) => {\n    var _settings$dataKey;\n    var {\n      dataDefinedOnItem,\n      settings\n    } = _ref;\n    var finalData = selectFinalData(dataDefinedOnItem, chartData);\n    var sliced = getSliced(finalData, dataStartIndex, dataEndIndex);\n    var finalDataKey = (_settings$dataKey = settings === null || settings === void 0 ? void 0 : settings.dataKey) !== null && _settings$dataKey !== void 0 ? _settings$dataKey : tooltipAxis === null || tooltipAxis === void 0 ? void 0 : tooltipAxis.dataKey;\n    // BaseAxisProps does not support nameKey but it could!\n    var finalNameKey = settings === null || settings === void 0 ? void 0 : settings.nameKey; // ?? tooltipAxis?.nameKey;\n    var tooltipPayload;\n    if (tooltipAxis !== null && tooltipAxis !== void 0 && tooltipAxis.dataKey && !(tooltipAxis !== null && tooltipAxis !== void 0 && tooltipAxis.allowDuplicatedCategory) && Array.isArray(sliced) &&\n    /*\n     * If the tooltipEventType is 'axis', we should search for the dataKey in the sliced data\n     * because thanks to allowDuplicatedCategory=false, the order of elements in the array\n     * no longer matches the order of elements in the original data\n     * and so we need to search by the active dataKey + label rather than by index.\n     *\n     * On the other hand the tooltipEventType 'item' should always search by index\n     * because we get the index from interacting over the individual elements\n     * which is always accurate, irrespective of the allowDuplicatedCategory setting.\n     */\n    tooltipEventType === 'axis') {\n      tooltipPayload = findEntryInArray(sliced, tooltipAxis.dataKey, activeLabel);\n    } else {\n      tooltipPayload = tooltipPayloadSearcher(sliced, activeIndex, computedData, finalNameKey);\n    }\n    if (Array.isArray(tooltipPayload)) {\n      tooltipPayload.forEach(item => {\n        var newSettings = _objectSpread(_objectSpread({}, settings), {}, {\n          name: item.name,\n          unit: item.unit,\n          // color and fill are erased to keep 100% the identical behaviour to recharts 2.x - but there's nothing stopping us from returning them here. It's technically a breaking change.\n          color: undefined,\n          // color and fill are erased to keep 100% the identical behaviour to recharts 2.x - but there's nothing stopping us from returning them here. It's technically a breaking change.\n          fill: undefined\n        });\n        agg.push(getTooltipEntry({\n          tooltipEntrySettings: newSettings,\n          dataKey: item.dataKey,\n          payload: item.payload,\n          // @ts-expect-error getValueByDataKey does not validate the output type\n          value: getValueByDataKey(item.payload, item.dataKey),\n          name: item.name\n        }));\n      });\n    } else {\n      var _getValueByDataKey;\n      // I am not quite sure why these two branches (Array vs Array of Arrays) have to behave differently - I imagine we should unify these. 3.x breaking change?\n      agg.push(getTooltipEntry({\n        tooltipEntrySettings: settings,\n        dataKey: finalDataKey,\n        payload: tooltipPayload,\n        // @ts-expect-error getValueByDataKey does not validate the output type\n        value: getValueByDataKey(tooltipPayload, finalDataKey),\n        // @ts-expect-error getValueByDataKey does not validate the output type\n        name: (_getValueByDataKey = getValueByDataKey(tooltipPayload, finalNameKey)) !== null && _getValueByDataKey !== void 0 ? _getValueByDataKey : settings === null || settings === void 0 ? void 0 : settings.name\n      }));\n    }\n    return agg;\n  }, init);\n};\nexport var selectTooltipPayload = createSelector([selectTooltipPayloadConfigurations, selectActiveIndex, selectChartDataWithIndexes, selectTooltipAxis, selectActiveLabel, selectTooltipPayloadSearcher, pickTooltipEventType], combineTooltipPayload);\nexport var selectIsTooltipActive = createSelector([selectTooltipInteractionState], tooltipInteractionState => {\n  return {\n    isActive: tooltipInteractionState.active,\n    activeIndex: tooltipInteractionState.index\n  };\n});\nexport var combineActiveProps = (chartEvent, layout, polarViewBox, tooltipAxisType, tooltipAxisRange, tooltipTicks, orderedTooltipTicks, offset) => {\n  if (!chartEvent || !layout || !tooltipAxisType || !tooltipAxisRange || !tooltipTicks) {\n    return undefined;\n  }\n  var rangeObj = inRange(chartEvent.chartX, chartEvent.chartY, layout, polarViewBox, offset);\n  if (!rangeObj) {\n    return undefined;\n  }\n  var pos = calculateTooltipPos(rangeObj, layout);\n  var activeIndex = calculateActiveTickIndex(pos, orderedTooltipTicks, tooltipTicks, tooltipAxisType, tooltipAxisRange);\n  var activeCoordinate = getActiveCoordinate(layout, tooltipTicks, activeIndex, rangeObj);\n  return {\n    activeIndex: String(activeIndex),\n    activeCoordinate\n  };\n};","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport * as React from 'react';\nimport { cloneElement, createElement, isValidElement } from 'react';\nimport { clsx } from 'clsx';\nimport { Curve } from '../shape/Curve';\nimport { Cross } from '../shape/Cross';\nimport { getCursorRectangle } from '../util/cursor/getCursorRectangle';\nimport { Rectangle } from '../shape/Rectangle';\nimport { getRadialCursorPoints } from '../util/cursor/getRadialCursorPoints';\nimport { Sector } from '../shape/Sector';\nimport { getCursorPoints } from '../util/cursor/getCursorPoints';\nimport { filterProps } from '../util/ReactUtils';\nimport { useChartLayout, useOffset } from '../context/chartLayoutContext';\nimport { useTooltipAxisBandSize } from '../context/useTooltipAxis';\nimport { useChartName } from '../state/selectors/selectors';\n\n/**\n * If set false, no cursor will be drawn when tooltip is active.\n * If set an object, the option is the configuration of cursor.\n * If set a React element, the option is the custom react element of drawing cursor\n */\n\nexport function CursorInternal(props) {\n  var {\n    coordinate,\n    payload,\n    index,\n    offset,\n    tooltipAxisBandSize,\n    layout,\n    cursor,\n    tooltipEventType,\n    chartName\n  } = props;\n\n  // The cursor is a part of the Tooltip, and it should be shown (by default) when the Tooltip is active.\n  var activeCoordinate = coordinate;\n  var activePayload = payload;\n  var activeTooltipIndex = index;\n  if (!cursor || !activeCoordinate || chartName !== 'ScatterChart' && tooltipEventType !== 'axis') {\n    return null;\n  }\n  var restProps, cursorComp;\n  if (chartName === 'ScatterChart') {\n    restProps = activeCoordinate;\n    cursorComp = Cross;\n  } else if (chartName === 'BarChart') {\n    restProps = getCursorRectangle(layout, activeCoordinate, offset, tooltipAxisBandSize);\n    cursorComp = Rectangle;\n  } else if (layout === 'radial') {\n    // @ts-expect-error TODO the state is marked as containing Coordinate but actually in polar charts it contains PolarCoordinate, we should keep the polar state separate\n    var {\n      cx,\n      cy,\n      radius,\n      startAngle,\n      endAngle\n    } = getRadialCursorPoints(activeCoordinate);\n    restProps = {\n      cx,\n      cy,\n      startAngle,\n      endAngle,\n      innerRadius: radius,\n      outerRadius: radius\n    };\n    cursorComp = Sector;\n  } else {\n    restProps = {\n      points: getCursorPoints(layout, activeCoordinate, offset)\n    };\n    cursorComp = Curve;\n  }\n  var extraClassName = typeof cursor === 'object' && 'className' in cursor ? cursor.className : undefined;\n  var cursorProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({\n    stroke: '#ccc',\n    pointerEvents: 'none'\n  }, offset), restProps), filterProps(cursor, false)), {}, {\n    payload: activePayload,\n    payloadIndex: activeTooltipIndex,\n    className: clsx('recharts-tooltip-cursor', extraClassName)\n  });\n  return /*#__PURE__*/isValidElement(cursor) ? /*#__PURE__*/cloneElement(cursor, cursorProps) : /*#__PURE__*/createElement(cursorComp, cursorProps);\n}\n\n/*\n * Cursor is the background, or a highlight,\n * that shows when user mouses over or activates\n * an area.\n *\n * It usually shows together with a tooltip\n * to emphasise which part of the chart does the tooltip refer to.\n */\nexport function Cursor(props) {\n  var tooltipAxisBandSize = useTooltipAxisBandSize();\n  var offset = useOffset();\n  var layout = useChartLayout();\n  var chartName = useChartName();\n  return /*#__PURE__*/React.createElement(CursorInternal, _extends({}, props, {\n    coordinate: props.coordinate,\n    index: props.index,\n    payload: props.payload,\n    offset: offset,\n    layout: layout,\n    tooltipAxisBandSize: tooltipAxisBandSize,\n    chartName: chartName\n  }));\n}","import { createContext, useContext } from 'react';\nexport var TooltipPortalContext = /*#__PURE__*/createContext(null);\nexport var useTooltipPortal = () => useContext(TooltipPortalContext);","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('The listener must be a function');\n  }\n\n  var listener = new EE(fn, context || emitter, once)\n    , evt = prefix ? prefix + event : event;\n\n  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n  else emitter._events[evt] = [emitter._events[evt], listener];\n\n  return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n  if (--emitter._eventsCount === 0) emitter._events = new Events();\n  else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n  var evt = prefix ? prefix + event : event\n    , handlers = this._events[evt];\n\n  if (!handlers) return [];\n  if (handlers.fn) return [handlers.fn];\n\n  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n    ee[i] = handlers[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n  var evt = prefix ? prefix + event : event\n    , listeners = this._events[evt];\n\n  if (!listeners) return 0;\n  if (listeners.fn) return 1;\n  return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    clearEvent(this, evt);\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n      listeners.fn === fn &&\n      (!once || listeners.once) &&\n      (!context || listeners.context === context)\n    ) {\n      clearEvent(this, evt);\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n        listeners[i].fn !== fn ||\n        (once && !listeners[i].once) ||\n        (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else clearEvent(this, evt);\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) clearEvent(this, evt);\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\n","import EventEmitter from 'eventemitter3';\nvar eventCenter = new EventEmitter();\nexport { eventCenter };\nexport var TOOLTIP_SYNC_EVENT = 'recharts.syncEvent.tooltip';\nexport var BRUSH_SYNC_EVENT = 'recharts.syncEvent.brush';","import { createSlice } from '@reduxjs/toolkit';\nimport { isNan } from '../util/DataUtils';\n\n/**\n * These chart options are decided internally, by Recharts,\n * and will not change during the lifetime of the chart.\n *\n * Changing these options can be done by swapping the root element\n * which will make a brand-new Redux store.\n *\n * If you want to store options that can be changed by the user,\n * use UpdatableChartOptions in rootPropsSlice.ts.\n */\n\nexport function arrayTooltipSearcher(data, strIndex) {\n  if (!strIndex) return undefined;\n  var numIndex = Number.parseInt(strIndex, 10);\n  if (isNan(numIndex)) {\n    return undefined;\n  }\n  return data === null || data === void 0 ? void 0 : data[numIndex];\n}\nvar initialState = {\n  chartName: '',\n  tooltipPayloadSearcher: undefined,\n  eventEmitter: undefined,\n  defaultTooltipEventType: 'axis'\n};\nvar optionsSlice = createSlice({\n  name: 'options',\n  initialState,\n  reducers: {\n    createEventEmitter: state => {\n      if (state.eventEmitter == null) {\n        state.eventEmitter = Symbol('rechartsEventEmitter');\n      }\n    }\n  }\n});\nexport var optionsReducer = optionsSlice.reducer;\nexport var {\n  createEventEmitter\n} = optionsSlice.actions;","export function selectSynchronisedTooltipState(state) {\n  return state.tooltip.syncInteraction;\n}","import { createSlice } from '@reduxjs/toolkit';\n\n/**\n * This is the data that's coming through main chart `data` prop\n * Recharts is very flexible in what it accepts so the type is very flexible too.\n * This will typically be an object, and various components will provide various `dataKey`\n * that dictates how to pull data from that object.\n *\n * TL;DR: before dataKey\n */\n\n/**\n * So this is the same unknown type as ChartData but this is after the dataKey has been applied.\n * We still don't know what the type is - that depends on what exactly it was before the dataKey application,\n * and the dataKey can return whatever anyway - but let's keep it separate as a form of documentation.\n *\n * TL;DR: ChartData after dataKey.\n */\n\nexport var initialChartDataState = {\n  chartData: undefined,\n  computedData: undefined,\n  dataStartIndex: 0,\n  dataEndIndex: 0\n};\nvar chartDataSlice = createSlice({\n  name: 'chartData',\n  initialState: initialChartDataState,\n  reducers: {\n    setChartData(state, action) {\n      state.chartData = action.payload;\n      if (action.payload == null) {\n        state.dataStartIndex = 0;\n        state.dataEndIndex = 0;\n        return;\n      }\n      if (action.payload.length > 0 && state.dataEndIndex !== action.payload.length - 1) {\n        state.dataEndIndex = action.payload.length - 1;\n      }\n    },\n    setComputedData(state, action) {\n      state.computedData = action.payload;\n    },\n    setDataStartEndIndexes(state, action) {\n      var {\n        startIndex,\n        endIndex\n      } = action.payload;\n      if (startIndex != null) {\n        state.dataStartIndex = startIndex;\n      }\n      if (endIndex != null) {\n        state.dataEndIndex = endIndex;\n      }\n    }\n  }\n});\nexport var {\n  setChartData,\n  setDataStartEndIndexes,\n  setComputedData\n} = chartDataSlice.actions;\nexport var chartDataReducer = chartDataSlice.reducer;","import { useEffect } from 'react';\nimport { useAppDispatch, useAppSelector } from '../state/hooks';\nimport { selectEventEmitter, selectSyncId, selectSyncMethod } from '../state/selectors/rootPropsSelectors';\nimport { BRUSH_SYNC_EVENT, eventCenter, TOOLTIP_SYNC_EVENT } from '../util/Events';\nimport { createEventEmitter } from '../state/optionsSlice';\nimport { setSyncInteraction } from '../state/tooltipSlice';\nimport { selectTooltipDataKey } from '../state/selectors/selectors';\nimport { selectTooltipAxisTicks } from '../state/selectors/tooltipSelectors';\nimport { selectSynchronisedTooltipState } from './syncSelectors';\nimport { useChartLayout, useViewBox } from '../context/chartLayoutContext';\nimport { setDataStartEndIndexes } from '../state/chartDataSlice';\nvar noop = () => {};\nfunction useTooltipSyncEventsListener() {\n  var mySyncId = useAppSelector(selectSyncId);\n  var myEventEmitter = useAppSelector(selectEventEmitter);\n  var dispatch = useAppDispatch();\n  var syncMethod = useAppSelector(selectSyncMethod);\n  var tooltipTicks = useAppSelector(selectTooltipAxisTicks);\n  var layout = useChartLayout();\n  var viewBox = useViewBox();\n  var className = useAppSelector(state => state.rootProps.className);\n  useEffect(() => {\n    if (mySyncId == null) {\n      // This chart is not synchronised with any other chart so we don't need to listen for any events.\n      return noop;\n    }\n    var listener = (incomingSyncId, action, emitter) => {\n      if (myEventEmitter === emitter) {\n        // We don't want to dispatch actions that we sent ourselves.\n        return;\n      }\n      if (mySyncId !== incomingSyncId) {\n        // This event is not for this chart\n        return;\n      }\n      if (syncMethod === 'index') {\n        dispatch(action);\n        // This is the default behaviour, we don't need to do anything else.\n        return;\n      }\n      if (tooltipTicks == null) {\n        // for the other two sync methods, we need the ticks to be available\n        return;\n      }\n      var activeTick;\n      if (typeof syncMethod === 'function') {\n        /*\n         * This is what the data shape in 2.x CategoricalChartState used to look like.\n         * In 3.x we store things differently but let's try to keep the old shape for compatibility.\n         */\n        var syncMethodParam = {\n          activeTooltipIndex: action.payload.index == null ? undefined : Number(action.payload.index),\n          isTooltipActive: action.payload.active,\n          activeIndex: action.payload.index == null ? undefined : Number(action.payload.index),\n          activeLabel: action.payload.label,\n          activeDataKey: action.payload.dataKey,\n          activeCoordinate: action.payload.coordinate\n        };\n        // Call a callback function. If there is an application specific algorithm\n        var activeTooltipIndex = syncMethod(tooltipTicks, syncMethodParam);\n        activeTick = tooltipTicks[activeTooltipIndex];\n      } else if (syncMethod === 'value') {\n        // labels are always strings, tick.value might be a string or a number, depending on axis type\n        activeTick = tooltipTicks.find(tick => String(tick.value) === action.payload.label);\n      }\n      var {\n        coordinate\n      } = action.payload;\n      if (activeTick == null || action.payload.active === false || coordinate == null || viewBox == null) {\n        dispatch(setSyncInteraction({\n          active: false,\n          coordinate: undefined,\n          dataKey: undefined,\n          index: null,\n          label: undefined\n        }));\n        return;\n      }\n      var {\n        x,\n        y\n      } = coordinate;\n      var validateChartX = Math.min(x, viewBox.x + viewBox.width);\n      var validateChartY = Math.min(y, viewBox.y + viewBox.height);\n      var activeCoordinate = {\n        x: layout === 'horizontal' ? activeTick.coordinate : validateChartX,\n        y: layout === 'horizontal' ? validateChartY : activeTick.coordinate\n      };\n      var syncAction = setSyncInteraction({\n        active: action.payload.active,\n        coordinate: activeCoordinate,\n        dataKey: action.payload.dataKey,\n        index: String(activeTick.index),\n        label: action.payload.label\n      });\n      dispatch(syncAction);\n    };\n    eventCenter.on(TOOLTIP_SYNC_EVENT, listener);\n    return () => {\n      eventCenter.off(TOOLTIP_SYNC_EVENT, listener);\n    };\n  }, [className, dispatch, myEventEmitter, mySyncId, syncMethod, tooltipTicks, layout, viewBox]);\n}\nfunction useBrushSyncEventsListener() {\n  var mySyncId = useAppSelector(selectSyncId);\n  var myEventEmitter = useAppSelector(selectEventEmitter);\n  var dispatch = useAppDispatch();\n  useEffect(() => {\n    if (mySyncId == null) {\n      // This chart is not synchronised with any other chart so we don't need to listen for any events.\n      return noop;\n    }\n    var listener = (incomingSyncId, action, emitter) => {\n      if (myEventEmitter === emitter) {\n        // We don't want to dispatch actions that we sent ourselves.\n        return;\n      }\n      if (mySyncId === incomingSyncId) {\n        dispatch(setDataStartEndIndexes(action));\n      }\n    };\n    eventCenter.on(BRUSH_SYNC_EVENT, listener);\n    return () => {\n      eventCenter.off(BRUSH_SYNC_EVENT, listener);\n    };\n  }, [dispatch, myEventEmitter, mySyncId]);\n}\n\n/**\n * Will receive synchronisation events from other charts.\n *\n * Reads syncMethod from state and decides how to synchronise the tooltip based on that.\n *\n * @returns void\n */\nexport function useSynchronisedEventsFromOtherCharts() {\n  var dispatch = useAppDispatch();\n  useEffect(() => {\n    dispatch(createEventEmitter());\n  }, [dispatch]);\n  useTooltipSyncEventsListener();\n  useBrushSyncEventsListener();\n}\n\n/**\n * Will send events to other charts.\n * If syncId is undefined, no events will be sent.\n *\n * This ignores the syncMethod, because that is set and computed on the receiving end.\n *\n * @param tooltipEventType from Tooltip\n * @param trigger from Tooltip\n * @param activeCoordinate from state\n * @param activeLabel from state\n * @param activeIndex from state\n * @param isTooltipActive from state\n * @returns void\n */\nexport function useTooltipChartSynchronisation(tooltipEventType, trigger, activeCoordinate, activeLabel, activeIndex, isTooltipActive) {\n  var activeDataKey = useAppSelector(state => selectTooltipDataKey(state, tooltipEventType, trigger));\n  var eventEmitterSymbol = useAppSelector(selectEventEmitter);\n  var syncId = useAppSelector(selectSyncId);\n  var syncMethod = useAppSelector(selectSyncMethod);\n  var tooltipState = useAppSelector(selectSynchronisedTooltipState);\n  var isReceivingSynchronisation = tooltipState === null || tooltipState === void 0 ? void 0 : tooltipState.active;\n  useEffect(() => {\n    if (isReceivingSynchronisation) {\n      /*\n       * This chart currently has active tooltip, synchronised from another chart.\n       * Let's not send any outgoing synchronisation events while that's happening\n       * to avoid infinite loops.\n       */\n      return;\n    }\n    if (syncId == null) {\n      /*\n       * syncId is not set, means that this chart is not synchronised with any other chart,\n       * means we don't need to send synchronisation events\n       */\n      return;\n    }\n    if (eventEmitterSymbol == null) {\n      /*\n       * When using Recharts internal hooks and selectors outside charts context,\n       * these properties will be undefined. Let's return silently instead of throwing an error.\n       */\n      return;\n    }\n    var syncAction = setSyncInteraction({\n      active: isTooltipActive,\n      coordinate: activeCoordinate,\n      dataKey: activeDataKey,\n      index: activeIndex,\n      label: typeof activeLabel === 'number' ? String(activeLabel) : activeLabel\n    });\n    eventCenter.emit(TOOLTIP_SYNC_EVENT, syncId, syncAction, eventEmitterSymbol);\n  }, [isReceivingSynchronisation, activeCoordinate, activeDataKey, activeIndex, activeLabel, eventEmitterSymbol, syncId, syncMethod, isTooltipActive]);\n}\nexport function useBrushChartSynchronisation() {\n  var syncId = useAppSelector(selectSyncId);\n  var eventEmitterSymbol = useAppSelector(selectEventEmitter);\n  var brushStartIndex = useAppSelector(state => state.chartData.dataStartIndex);\n  var brushEndIndex = useAppSelector(state => state.chartData.dataEndIndex);\n  useEffect(() => {\n    if (syncId == null || brushStartIndex == null || brushEndIndex == null || eventEmitterSymbol == null) {\n      return;\n    }\n    var syncAction = {\n      startIndex: brushStartIndex,\n      endIndex: brushEndIndex\n    };\n    eventCenter.emit(BRUSH_SYNC_EVENT, syncId, syncAction, eventEmitterSymbol);\n  }, [brushEndIndex, brushStartIndex, eventEmitterSymbol, syncId]);\n}","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport * as React from 'react';\nimport { useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { DefaultTooltipContent } from './DefaultTooltipContent';\nimport { TooltipBoundingBox } from './TooltipBoundingBox';\nimport { Global } from '../util/Global';\nimport { getUniqPayload } from '../util/payload/getUniqPayload';\nimport { useViewBox } from '../context/chartLayoutContext';\nimport { useAccessibilityLayer } from '../context/accessibilityContext';\nimport { useElementOffset } from '../util/useElementOffset';\nimport { Cursor } from './Cursor';\nimport { selectActiveCoordinate, selectActiveLabel, selectIsTooltipActive, selectTooltipPayload } from '../state/selectors/selectors';\nimport { useTooltipPortal } from '../context/tooltipPortalContext';\nimport { useAppDispatch, useAppSelector } from '../state/hooks';\nimport { setTooltipSettingsState } from '../state/tooltipSlice';\nimport { useTooltipChartSynchronisation } from '../synchronisation/useChartSynchronisation';\nimport { useTooltipEventType } from '../state/selectors/selectTooltipEventType';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nfunction defaultUniqBy(entry) {\n  return entry.dataKey;\n}\nfunction renderContent(content, props) {\n  if (/*#__PURE__*/React.isValidElement(content)) {\n    return /*#__PURE__*/React.cloneElement(content, props);\n  }\n  if (typeof content === 'function') {\n    return /*#__PURE__*/React.createElement(content, props);\n  }\n  return /*#__PURE__*/React.createElement(DefaultTooltipContent, props);\n}\nvar emptyPayload = [];\nvar defaultTooltipProps = {\n  allowEscapeViewBox: {\n    x: false,\n    y: false\n  },\n  animationDuration: 400,\n  animationEasing: 'ease',\n  axisId: 0,\n  contentStyle: {},\n  cursor: true,\n  filterNull: true,\n  isAnimationActive: !Global.isSsr,\n  itemSorter: 'name',\n  itemStyle: {},\n  labelStyle: {},\n  offset: 10,\n  reverseDirection: {\n    x: false,\n    y: false\n  },\n  separator: ' : ',\n  trigger: 'hover',\n  useTranslate3d: false,\n  wrapperStyle: {}\n};\nexport function Tooltip(outsideProps) {\n  var props = resolveDefaultProps(outsideProps, defaultTooltipProps);\n  var {\n    active: activeFromProps,\n    allowEscapeViewBox,\n    animationDuration,\n    animationEasing,\n    content,\n    filterNull,\n    isAnimationActive,\n    offset,\n    payloadUniqBy,\n    position,\n    reverseDirection,\n    useTranslate3d,\n    wrapperStyle,\n    cursor,\n    shared,\n    trigger,\n    defaultIndex,\n    portal: portalFromProps,\n    axisId\n  } = props;\n  var dispatch = useAppDispatch();\n  var defaultIndexAsString = typeof defaultIndex === 'number' ? String(defaultIndex) : defaultIndex;\n  useEffect(() => {\n    dispatch(setTooltipSettingsState({\n      shared,\n      trigger,\n      axisId,\n      active: activeFromProps,\n      defaultIndex: defaultIndexAsString\n    }));\n  }, [dispatch, shared, trigger, axisId, activeFromProps, defaultIndexAsString]);\n  var viewBox = useViewBox();\n  var accessibilityLayer = useAccessibilityLayer();\n  var tooltipEventType = useTooltipEventType(shared);\n  var {\n    activeIndex,\n    isActive\n  } = useAppSelector(state => selectIsTooltipActive(state, tooltipEventType, trigger, defaultIndexAsString));\n  var payloadFromRedux = useAppSelector(state => selectTooltipPayload(state, tooltipEventType, trigger, defaultIndexAsString));\n  var labelFromRedux = useAppSelector(state => selectActiveLabel(state, tooltipEventType, trigger, defaultIndexAsString));\n  var coordinate = useAppSelector(state => selectActiveCoordinate(state, tooltipEventType, trigger, defaultIndexAsString));\n  var payload = payloadFromRedux;\n  var tooltipPortalFromContext = useTooltipPortal();\n  /*\n   * The user can set `active=true` on the Tooltip in which case the Tooltip will stay always active,\n   * or `active=false` in which case the Tooltip never shows.\n   *\n   * If the `active` prop is not defined then it will show and hide based on mouse or keyboard activity.\n   */\n  var finalIsActive = activeFromProps !== null && activeFromProps !== void 0 ? activeFromProps : isActive;\n  var [lastBoundingBox, updateBoundingBox] = useElementOffset([payload, finalIsActive]);\n  var finalLabel = tooltipEventType === 'axis' ? labelFromRedux : undefined;\n  useTooltipChartSynchronisation(tooltipEventType, trigger, coordinate, finalLabel, activeIndex, finalIsActive);\n  var tooltipPortal = portalFromProps !== null && portalFromProps !== void 0 ? portalFromProps : tooltipPortalFromContext;\n  if (tooltipPortal == null) {\n    return null;\n  }\n  var finalPayload = payload !== null && payload !== void 0 ? payload : emptyPayload;\n  if (!finalIsActive) {\n    finalPayload = emptyPayload;\n  }\n  if (filterNull && finalPayload.length) {\n    finalPayload = getUniqPayload(payload.filter(entry => entry.value != null && (entry.hide !== true || props.includeHidden)), payloadUniqBy, defaultUniqBy);\n  }\n  var hasPayload = finalPayload.length > 0;\n  var tooltipElement = /*#__PURE__*/React.createElement(TooltipBoundingBox, {\n    allowEscapeViewBox: allowEscapeViewBox,\n    animationDuration: animationDuration,\n    animationEasing: animationEasing,\n    isAnimationActive: isAnimationActive,\n    active: finalIsActive,\n    coordinate: coordinate,\n    hasPayload: hasPayload,\n    offset: offset,\n    position: position,\n    reverseDirection: reverseDirection,\n    useTranslate3d: useTranslate3d,\n    viewBox: viewBox,\n    wrapperStyle: wrapperStyle,\n    lastBoundingBox: lastBoundingBox,\n    innerRef: updateBoundingBox,\n    hasPortalFromProps: Boolean(portalFromProps)\n  }, renderContent(content, _objectSpread(_objectSpread({}, props), {}, {\n    // @ts-expect-error renderContent method expects the payload to be mutable, TODO make it immutable\n    payload: finalPayload,\n    label: finalLabel,\n    active: finalIsActive,\n    coordinate,\n    accessibilityLayer\n  })));\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/createPortal(tooltipElement, tooltipPortal), finalIsActive && /*#__PURE__*/React.createElement(Cursor, {\n    cursor: cursor,\n    tooltipEventType: tooltipEventType,\n    coordinate: coordinate,\n    payload: payload,\n    index: activeIndex\n  }));\n}","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction maxBy(items, getValue) {\n    if (items.length === 0) {\n        return undefined;\n    }\n    let maxElement = items[0];\n    let max = getValue(maxElement);\n    for (let i = 1; i < items.length; i++) {\n        const element = items[i];\n        const value = getValue(element);\n        if (value > max) {\n            max = value;\n            maxElement = element;\n        }\n    }\n    return maxElement;\n}\n\nexports.maxBy = maxBy;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst maxBy$1 = require('../../array/maxBy.js');\nconst identity = require('../../function/identity.js');\nconst iteratee = require('../util/iteratee.js');\n\nfunction maxBy(items, iteratee$1) {\n    if (items == null) {\n        return undefined;\n    }\n    return maxBy$1.maxBy(Array.from(items), iteratee.iteratee(iteratee$1 ?? identity.identity));\n}\n\nexports.maxBy = maxBy;\n","module.exports = require('../dist/compat/math/maxBy.js').maxBy;\n","import { createSlice } from '@reduxjs/toolkit';\nimport { castDraft } from 'immer';\nvar initialState = {\n  radiusAxis: {},\n  angleAxis: {}\n};\nvar polarAxisSlice = createSlice({\n  name: 'polarAxis',\n  initialState,\n  reducers: {\n    addRadiusAxis(state, action) {\n      state.radiusAxis[action.payload.id] = castDraft(action.payload);\n    },\n    removeRadiusAxis(state, action) {\n      delete state.radiusAxis[action.payload.id];\n    },\n    addAngleAxis(state, action) {\n      state.angleAxis[action.payload.id] = castDraft(action.payload);\n    },\n    removeAngleAxis(state, action) {\n      delete state.angleAxis[action.payload.id];\n    }\n  }\n});\nexport var {\n  addRadiusAxis,\n  removeRadiusAxis,\n  addAngleAxis,\n  removeAngleAxis\n} = polarAxisSlice.actions;\nexport var polarAxisReducer = polarAxisSlice.reducer;","import { createSlice, current } from '@reduxjs/toolkit';\nimport { castDraft } from 'immer';\n\n/**\n * ErrorBars have lot more settings but all the others are scoped to the component itself.\n * Only some of them required to be reported to the global store because XAxis and YAxis need to know\n * if the error bar is contributing to extending the axis domain.\n */\n\nvar initialState = {\n  countOfBars: 0,\n  cartesianItems: [],\n  polarItems: []\n};\nvar graphicalItemsSlice = createSlice({\n  name: 'graphicalItems',\n  initialState,\n  reducers: {\n    addBar(state) {\n      state.countOfBars += 1;\n    },\n    removeBar(state) {\n      state.countOfBars -= 1;\n    },\n    addCartesianGraphicalItem(state, action) {\n      state.cartesianItems.push(castDraft(action.payload));\n    },\n    removeCartesianGraphicalItem(state, action) {\n      var index = current(state).cartesianItems.indexOf(castDraft(action.payload));\n      if (index > -1) {\n        state.cartesianItems.splice(index, 1);\n      }\n    },\n    addPolarGraphicalItem(state, action) {\n      state.polarItems.push(castDraft(action.payload));\n    },\n    removePolarGraphicalItem(state, action) {\n      var index = current(state).polarItems.indexOf(castDraft(action.payload));\n      if (index > -1) {\n        state.polarItems.splice(index, 1);\n      }\n    }\n  }\n});\nexport var {\n  addBar,\n  removeBar,\n  addCartesianGraphicalItem,\n  removeCartesianGraphicalItem,\n  addPolarGraphicalItem,\n  removePolarGraphicalItem\n} = graphicalItemsSlice.actions;\nexport var graphicalItemsReducer = graphicalItemsSlice.reducer;","import { useEffect } from 'react';\nimport { useAppDispatch } from './hooks';\nimport { addTooltipEntrySettings, removeTooltipEntrySettings } from './tooltipSlice';\nimport { useIsPanorama } from '../context/PanoramaContext';\nexport function SetTooltipEntrySettings(_ref) {\n  var {\n    fn,\n    args\n  } = _ref;\n  var dispatch = useAppDispatch();\n  var isPanorama = useIsPanorama();\n  useEffect(() => {\n    if (isPanorama) {\n      // Panorama graphical items should never contribute to Tooltip payload.\n      return undefined;\n    }\n    var tooltipEntrySettings = fn(args);\n    dispatch(addTooltipEntrySettings(tooltipEntrySettings));\n    return () => {\n      dispatch(removeTooltipEntrySettings(tooltipEntrySettings));\n    };\n  }, [fn, args, dispatch, isPanorama]);\n  return null;\n}","import { useEffect } from 'react';\nimport { setChartData, setComputedData } from '../state/chartDataSlice';\nimport { useAppDispatch, useAppSelector } from '../state/hooks';\nimport { useIsPanorama } from './PanoramaContext';\nexport var ChartDataContextProvider = props => {\n  var {\n    chartData\n  } = props;\n  var dispatch = useAppDispatch();\n  var isPanorama = useIsPanorama();\n  useEffect(() => {\n    if (isPanorama) {\n      // Panorama mode reuses data from the main chart, so we must not overwrite it here.\n      return () => {\n        // there is nothing to clean up\n      };\n    }\n    dispatch(setChartData(chartData));\n    return () => {\n      dispatch(setChartData(undefined));\n    };\n  }, [chartData, dispatch, isPanorama]);\n  return null;\n};\nexport var SetComputedData = props => {\n  var {\n    computedData\n  } = props;\n  var dispatch = useAppDispatch();\n  useEffect(() => {\n    dispatch(setComputedData(computedData));\n    return () => {\n      dispatch(setChartData(undefined));\n    };\n  }, [computedData, dispatch]);\n  return null;\n};\nvar selectChartData = state => state.chartData.chartData;\n\n/**\n * \"data\" is the data of the chart - it has no type because this part of recharts is very flexible.\n * Basically it's an array of \"something\" and then there's the dataKey property in various places\n * that's meant to pull other things away from the data.\n *\n * Some charts have `data` defined on the chart root, and they will return the array through this hook.\n * For example: <ComposedChart data={data} />.\n *\n * Other charts, such as Pie, have data defined on individual graphical elements.\n * These charts will return `undefined` through this hook, and you need to read the data from children.\n * For example: <PieChart><Pie data={data} />\n *\n * Some charts also allow setting both - data on the parent, and data on the children at the same time!\n * However, this particular selector will only return the ones defined on the parent.\n *\n * @deprecated use one of the other selectors instead - which one, depends on how do you identify the applicable graphical items.\n *\n * @return data array for some charts and undefined for other\n */\nexport var useChartData = () => useAppSelector(selectChartData);\nvar selectDataIndex = state => {\n  var {\n    dataStartIndex,\n    dataEndIndex\n  } = state.chartData;\n  return {\n    startIndex: dataStartIndex,\n    endIndex: dataEndIndex\n  };\n};\n\n/**\n * startIndex and endIndex are data boundaries, set through Brush.\n *\n * @return object with startIndex and endIndex\n */\nexport var useDataIndex = () => {\n  return useAppSelector(selectDataIndex);\n};","import { createSlice } from '@reduxjs/toolkit';\n\n/**\n * From all Brush properties, only height has a default value and will always be defined.\n * Other properties are nullable and will be computed from offsets and margins if they are not set.\n */\n\nvar initialState = {\n  x: 0,\n  y: 0,\n  width: 0,\n  height: 0,\n  padding: {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  }\n};\nexport var brushSlice = createSlice({\n  name: 'brush',\n  initialState,\n  reducers: {\n    setBrushSettings(_state, action) {\n      if (action.payload == null) {\n        return initialState;\n      }\n      return action.payload;\n    }\n  }\n});\nexport var {\n  setBrushSettings\n} = brushSlice.actions;\nexport var brushReducer = brushSlice.reducer;","import { createSlice, current } from '@reduxjs/toolkit';\nvar initialState = {\n  dots: [],\n  areas: [],\n  lines: []\n};\nexport var referenceElementsSlice = createSlice({\n  name: 'referenceElements',\n  initialState,\n  reducers: {\n    addDot: (state, action) => {\n      state.dots.push(action.payload);\n    },\n    removeDot: (state, action) => {\n      var index = current(state).dots.findIndex(dot => dot === action.payload);\n      if (index !== -1) {\n        state.dots.splice(index, 1);\n      }\n    },\n    addArea: (state, action) => {\n      state.areas.push(action.payload);\n    },\n    removeArea: (state, action) => {\n      var index = current(state).areas.findIndex(area => area === action.payload);\n      if (index !== -1) {\n        state.areas.splice(index, 1);\n      }\n    },\n    addLine: (state, action) => {\n      state.lines.push(action.payload);\n    },\n    removeLine: (state, action) => {\n      var index = current(state).lines.findIndex(line => line === action.payload);\n      if (index !== -1) {\n        state.lines.splice(index, 1);\n      }\n    }\n  }\n});\nexport var {\n  addDot,\n  removeDot,\n  addArea,\n  removeArea,\n  addLine,\n  removeLine\n} = referenceElementsSlice.actions;\nexport var referenceElementsReducer = referenceElementsSlice.reducer;","export function shallowEqual(a, b) {\n  /* eslint-disable no-restricted-syntax */\n  for (var key in a) {\n    if ({}.hasOwnProperty.call(a, key) && (!{}.hasOwnProperty.call(b, key) || a[key] !== b[key])) {\n      return false;\n    }\n  }\n  for (var _key in b) {\n    if ({}.hasOwnProperty.call(b, _key) && !{}.hasOwnProperty.call(a, _key)) {\n      return false;\n    }\n  }\n  return true;\n}","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { createSlice } from '@reduxjs/toolkit';\nimport { castDraft } from 'immer';\n\n/**\n * Properties shared in X, Y, and Z axes\n */\n\n/**\n * These are the external props, visible for users as they set them using our public API.\n * There is all sorts of internal computed things based on these, but they will come through selectors.\n *\n * Properties shared between X and Y axes\n */\n\n/**\n * Z axis is special because it's never displayed. It controls the size of Scatter dots,\n * but it never displays ticks anywhere.\n */\n\nvar initialState = {\n  xAxis: {},\n  yAxis: {},\n  zAxis: {}\n};\n\n/**\n * This is the slice where each individual Axis element pushes its own configuration.\n * Prefer to use this one instead of axisSlice.\n */\nvar cartesianAxisSlice = createSlice({\n  name: 'cartesianAxis',\n  initialState,\n  reducers: {\n    addXAxis(state, action) {\n      state.xAxis[action.payload.id] = castDraft(action.payload);\n    },\n    removeXAxis(state, action) {\n      delete state.xAxis[action.payload.id];\n    },\n    addYAxis(state, action) {\n      state.yAxis[action.payload.id] = castDraft(action.payload);\n    },\n    removeYAxis(state, action) {\n      delete state.yAxis[action.payload.id];\n    },\n    addZAxis(state, action) {\n      state.zAxis[action.payload.id] = castDraft(action.payload);\n    },\n    removeZAxis(state, action) {\n      delete state.zAxis[action.payload.id];\n    },\n    updateYAxisWidth(state, action) {\n      var {\n        id,\n        width\n      } = action.payload;\n      if (state.yAxis[id]) {\n        state.yAxis[id] = _objectSpread(_objectSpread({}, state.yAxis[id]), {}, {\n          width\n        });\n      }\n    }\n  }\n});\nexport var {\n  addXAxis,\n  removeXAxis,\n  addYAxis,\n  removeYAxis,\n  addZAxis,\n  removeZAxis,\n  updateYAxisWidth\n} = cartesianAxisSlice.actions;\nexport var cartesianAxisReducer = cartesianAxisSlice.reducer;","import { createSelector } from 'reselect';\nimport { selectChartLayout } from '../../context/chartLayoutContext';\nimport { selectTooltipAxisRangeWithReverse, selectTooltipAxisTicks, selectTooltipAxisType } from './tooltipSelectors';\nimport { selectChartOffset } from './selectChartOffset';\nimport { combineActiveProps, selectOrderedTooltipTicks } from './selectors';\nimport { selectPolarViewBox } from './polarAxisSelectors';\nvar pickChartPointer = (_state, chartPointer) => chartPointer;\nexport var selectActivePropsFromChartPointer = createSelector([pickChartPointer, selectChartLayout, selectPolarViewBox, selectTooltipAxisType, selectTooltipAxisRangeWithReverse, selectTooltipAxisTicks, selectOrderedTooltipTicks, selectChartOffset], combineActiveProps);","/**\n * Computes the chart coordinates from the mouse event.\n *\n * The coordinates are relative to the top-left corner of the chart,\n * where the top-left corner of the chart is (0, 0).\n * Moving right, the x-coordinate increases, and moving down, the y-coordinate increases.\n *\n * The coordinates are rounded to the nearest integer and are including a CSS transform scale.\n * So a chart that's scaled will return the same coordinates as a chart that's not scaled.\n *\n * @param event The mouse event from React event handlers\n * @return chartPointer The chart coordinates relative to the top-left corner of the chart\n */\nexport var getChartPointer = event => {\n  var rect = event.currentTarget.getBoundingClientRect();\n  var scaleX = rect.width / event.currentTarget.offsetWidth;\n  var scaleY = rect.height / event.currentTarget.offsetHeight;\n  return {\n    /*\n     * Here it's important to use:\n     * - event.clientX and event.clientY to get the mouse position relative to the viewport, including scroll.\n     * - pageX and pageY are not used because they are relative to the whole document, and ignore scroll.\n     * - rect.left and rect.top are used to get the position of the chart relative to the viewport.\n     * - offsetX and offsetY are not used because they are relative to the offset parent\n     *  which may or may not be the same as the clientX and clientY, depending on the position of the chart in the DOM\n     *  and surrounding element styles. CSS position: relative, absolute, fixed, will change the offset parent.\n     * - scaleX and scaleY are necessary for when the chart element is scaled using CSS `transform: scale(N)`.\n     */\n    chartX: Math.round((event.clientX - rect.left) / scaleX),\n    chartY: Math.round((event.clientY - rect.top) / scaleY)\n  };\n};","import { createAction, createListenerMiddleware } from '@reduxjs/toolkit';\nimport { mouseLeaveChart, setMouseClickAxisIndex, setMouseOverAxisIndex } from './tooltipSlice';\nimport { selectActivePropsFromChartPointer } from './selectors/selectActivePropsFromChartPointer';\nimport { selectTooltipEventType } from './selectors/selectTooltipEventType';\nimport { getChartPointer } from '../util/getChartPointer';\nexport var mouseClickAction = createAction('mouseClick');\nexport var mouseClickMiddleware = createListenerMiddleware();\n\n// TODO: there's a bug here when you click the chart the activeIndex resets to zero\nmouseClickMiddleware.startListening({\n  actionCreator: mouseClickAction,\n  effect: (action, listenerApi) => {\n    var mousePointer = action.payload;\n    var activeProps = selectActivePropsFromChartPointer(listenerApi.getState(), getChartPointer(mousePointer));\n    if ((activeProps === null || activeProps === void 0 ? void 0 : activeProps.activeIndex) != null) {\n      listenerApi.dispatch(setMouseClickAxisIndex({\n        activeIndex: activeProps.activeIndex,\n        activeDataKey: undefined,\n        activeCoordinate: activeProps.activeCoordinate\n      }));\n    }\n  }\n});\nexport var mouseMoveAction = createAction('mouseMove');\nexport var mouseMoveMiddleware = createListenerMiddleware();\nmouseMoveMiddleware.startListening({\n  actionCreator: mouseMoveAction,\n  effect: (action, listenerApi) => {\n    var mousePointer = action.payload;\n    var state = listenerApi.getState();\n    var tooltipEventType = selectTooltipEventType(state, state.tooltip.settings.shared);\n    var activeProps = selectActivePropsFromChartPointer(state, getChartPointer(mousePointer));\n\n    // this functionality only applies to charts that have axes\n    if (tooltipEventType === 'axis') {\n      if ((activeProps === null || activeProps === void 0 ? void 0 : activeProps.activeIndex) != null) {\n        listenerApi.dispatch(setMouseOverAxisIndex({\n          activeIndex: activeProps.activeIndex,\n          activeDataKey: undefined,\n          activeCoordinate: activeProps.activeCoordinate\n        }));\n      } else {\n        // this is needed to clear tooltip state when the mouse moves out of the inRange (svg - offset) function, but not yet out of the svg\n        listenerApi.dispatch(mouseLeaveChart());\n      }\n    }\n  }\n});","export function reduxDevtoolsJsonStringifyReplacer(_key, value) {\n  if (value instanceof HTMLElement) {\n    return \"HTMLElement <\".concat(value.tagName, \" class=\\\"\").concat(value.className, \"\\\">\");\n  }\n  if (value === window) {\n    return 'global.window';\n  }\n  return value;\n}","import { createSlice } from '@reduxjs/toolkit';\n\n/**\n * These are chart options that users can choose - which means they can also\n * choose to change them which should trigger a re-render.\n */\n\nexport var initialState = {\n  accessibilityLayer: true,\n  barCategoryGap: '10%',\n  barGap: 4,\n  barSize: undefined,\n  className: undefined,\n  maxBarSize: undefined,\n  stackOffset: 'none',\n  syncId: undefined,\n  syncMethod: 'index'\n};\nvar rootPropsSlice = createSlice({\n  name: 'rootProps',\n  initialState,\n  reducers: {\n    updateOptions: (state, action) => {\n      var _action$payload$barGa;\n      state.accessibilityLayer = action.payload.accessibilityLayer;\n      state.barCategoryGap = action.payload.barCategoryGap;\n      state.barGap = (_action$payload$barGa = action.payload.barGap) !== null && _action$payload$barGa !== void 0 ? _action$payload$barGa : initialState.barGap;\n      state.barSize = action.payload.barSize;\n      state.maxBarSize = action.payload.maxBarSize;\n      state.stackOffset = action.payload.stackOffset;\n      state.syncId = action.payload.syncId;\n      state.syncMethod = action.payload.syncMethod;\n      state.className = action.payload.className;\n    }\n  }\n});\nexport var rootPropsReducer = rootPropsSlice.reducer;\nexport var {\n  updateOptions\n} = rootPropsSlice.actions;","import { createSlice } from '@reduxjs/toolkit';\nvar polarOptionsSlice = createSlice({\n  name: 'polarOptions',\n  initialState: null,\n  reducers: {\n    updatePolarOptions: (_state, action) => {\n      return action.payload;\n    }\n  }\n});\nexport var {\n  updatePolarOptions\n} = polarOptionsSlice.actions;\nexport var polarOptionsReducer = polarOptionsSlice.reducer;","import { createAction, createListenerMiddleware } from '@reduxjs/toolkit';\nimport { setKeyboardInteraction } from './tooltipSlice';\nimport { selectTooltipAxisTicks, selectTooltipDisplayedData } from './selectors/tooltipSelectors';\nimport { selectCoordinateForDefaultIndex } from './selectors/selectors';\nimport { selectChartDirection } from './selectors/axisSelectors';\nimport { combineActiveTooltipIndex } from './selectors/combiners/combineActiveTooltipIndex';\nexport var keyDownAction = createAction('keyDown');\nexport var focusAction = createAction('focus');\nexport var keyboardEventsMiddleware = createListenerMiddleware();\nkeyboardEventsMiddleware.startListening({\n  actionCreator: keyDownAction,\n  effect: (action, listenerApi) => {\n    var state = listenerApi.getState();\n    var accessibilityLayerIsActive = state.rootProps.accessibilityLayer !== false;\n    if (!accessibilityLayerIsActive) {\n      return;\n    }\n    var {\n      keyboardInteraction\n    } = state.tooltip;\n    var key = action.payload;\n    if (key !== 'ArrowRight' && key !== 'ArrowLeft' && key !== 'Enter') {\n      return;\n    }\n\n    // TODO this is lacking index for charts that do not support numeric indexes\n    var currentIndex = Number(combineActiveTooltipIndex(keyboardInteraction, selectTooltipDisplayedData(state)));\n    var tooltipTicks = selectTooltipAxisTicks(state);\n    if (key === 'Enter') {\n      var _coordinate = selectCoordinateForDefaultIndex(state, 'axis', 'hover', String(keyboardInteraction.index));\n      listenerApi.dispatch(setKeyboardInteraction({\n        active: !keyboardInteraction.active,\n        activeIndex: keyboardInteraction.index,\n        activeDataKey: keyboardInteraction.dataKey,\n        activeCoordinate: _coordinate\n      }));\n      return;\n    }\n    var direction = selectChartDirection(state);\n    var directionMultiplier = direction === 'left-to-right' ? 1 : -1;\n    var movement = key === 'ArrowRight' ? 1 : -1;\n    var nextIndex = currentIndex + movement * directionMultiplier;\n    if (tooltipTicks == null || nextIndex >= tooltipTicks.length || nextIndex < 0) {\n      return;\n    }\n    var coordinate = selectCoordinateForDefaultIndex(state, 'axis', 'hover', String(nextIndex));\n    listenerApi.dispatch(setKeyboardInteraction({\n      active: true,\n      activeIndex: nextIndex.toString(),\n      activeDataKey: undefined,\n      activeCoordinate: coordinate\n    }));\n  }\n});\nkeyboardEventsMiddleware.startListening({\n  actionCreator: focusAction,\n  effect: (_action, listenerApi) => {\n    var state = listenerApi.getState();\n    var accessibilityLayerIsActive = state.rootProps.accessibilityLayer !== false;\n    if (!accessibilityLayerIsActive) {\n      return;\n    }\n    var {\n      keyboardInteraction\n    } = state.tooltip;\n    if (keyboardInteraction.active) {\n      return;\n    }\n    if (keyboardInteraction.index == null) {\n      var nextIndex = '0';\n      var coordinate = selectCoordinateForDefaultIndex(state, 'axis', 'hover', String(nextIndex));\n      listenerApi.dispatch(setKeyboardInteraction({\n        activeDataKey: undefined,\n        active: true,\n        activeIndex: nextIndex,\n        activeCoordinate: coordinate\n      }));\n    }\n  }\n});","import { createAction, createListenerMiddleware } from '@reduxjs/toolkit';\nimport { selectActiveLabel, selectActiveTooltipCoordinate, selectActiveTooltipDataKey, selectActiveTooltipIndex, selectIsTooltipActive } from './selectors/tooltipSelectors';\nexport var externalEventAction = createAction('externalEvent');\nexport var externalEventsMiddleware = createListenerMiddleware();\nexternalEventsMiddleware.startListening({\n  actionCreator: externalEventAction,\n  effect: (action, listenerApi) => {\n    if (action.payload.handler == null) {\n      return;\n    }\n    var state = listenerApi.getState();\n    var nextState = {\n      activeCoordinate: selectActiveTooltipCoordinate(state),\n      activeDataKey: selectActiveTooltipDataKey(state),\n      activeIndex: selectActiveTooltipIndex(state),\n      activeLabel: selectActiveLabel(state),\n      activeTooltipIndex: selectActiveTooltipIndex(state),\n      isTooltipActive: selectIsTooltipActive(state)\n    };\n    action.payload.handler(nextState, action.payload.reactEvent);\n  }\n});","import { createSelector } from 'reselect';\nimport { selectTooltipPayloadSearcher } from './selectTooltipPayloadSearcher';\nimport { selectTooltipState } from './selectTooltipState';\nvar selectAllTooltipPayloadConfiguration = createSelector([selectTooltipState], tooltipState => tooltipState.tooltipItemPayloads);\nexport var selectTooltipCoordinate = createSelector([selectAllTooltipPayloadConfiguration, selectTooltipPayloadSearcher, (_state, tooltipIndex, _dataKey) => tooltipIndex, (_state, _tooltipIndex, dataKey) => dataKey], (allTooltipConfigurations, tooltipPayloadSearcher, tooltipIndex, dataKey) => {\n  var mostRelevantTooltipConfiguration = allTooltipConfigurations.find(tooltipConfiguration => {\n    return tooltipConfiguration.settings.dataKey === dataKey;\n  });\n  if (mostRelevantTooltipConfiguration == null) {\n    return undefined;\n  }\n  var {\n    positions\n  } = mostRelevantTooltipConfiguration;\n  if (positions == null) {\n    return undefined;\n  }\n  // @ts-expect-error tooltipPayloadSearcher is not typed well\n  var maybePosition = tooltipPayloadSearcher(positions, tooltipIndex);\n  return maybePosition;\n});","import { createAction, createListenerMiddleware } from '@reduxjs/toolkit';\nimport { setActiveMouseOverItemIndex, setMouseOverAxisIndex } from './tooltipSlice';\nimport { selectActivePropsFromChartPointer } from './selectors/selectActivePropsFromChartPointer';\nimport { getChartPointer } from '../util/getChartPointer';\nimport { selectTooltipEventType } from './selectors/selectTooltipEventType';\nimport { DATA_ITEM_DATAKEY_ATTRIBUTE_NAME, DATA_ITEM_INDEX_ATTRIBUTE_NAME } from '../util/Constants';\nimport { selectTooltipCoordinate } from './selectors/touchSelectors';\nexport var touchEventAction = createAction('touchMove');\nexport var touchEventMiddleware = createListenerMiddleware();\ntouchEventMiddleware.startListening({\n  actionCreator: touchEventAction,\n  effect: (action, listenerApi) => {\n    var touchEvent = action.payload;\n    var state = listenerApi.getState();\n    var tooltipEventType = selectTooltipEventType(state, state.tooltip.settings.shared);\n    if (tooltipEventType === 'axis') {\n      var activeProps = selectActivePropsFromChartPointer(state, getChartPointer({\n        clientX: touchEvent.touches[0].clientX,\n        clientY: touchEvent.touches[0].clientY,\n        currentTarget: touchEvent.currentTarget\n      }));\n      if ((activeProps === null || activeProps === void 0 ? void 0 : activeProps.activeIndex) != null) {\n        listenerApi.dispatch(setMouseOverAxisIndex({\n          activeIndex: activeProps.activeIndex,\n          activeDataKey: undefined,\n          activeCoordinate: activeProps.activeCoordinate\n        }));\n      }\n    } else if (tooltipEventType === 'item') {\n      var _target$getAttribute;\n      var touch = touchEvent.touches[0];\n      var target = document.elementFromPoint(touch.clientX, touch.clientY);\n      if (!target || !target.getAttribute) {\n        return;\n      }\n      var itemIndex = target.getAttribute(DATA_ITEM_INDEX_ATTRIBUTE_NAME);\n      var dataKey = (_target$getAttribute = target.getAttribute(DATA_ITEM_DATAKEY_ATTRIBUTE_NAME)) !== null && _target$getAttribute !== void 0 ? _target$getAttribute : undefined;\n      var coordinate = selectTooltipCoordinate(listenerApi.getState(), itemIndex, dataKey);\n      listenerApi.dispatch(setActiveMouseOverItemIndex({\n        activeDataKey: dataKey,\n        activeIndex: itemIndex,\n        activeCoordinate: coordinate\n      }));\n    }\n  }\n});","import { combineReducers, configureStore } from '@reduxjs/toolkit';\nimport { optionsReducer } from './optionsSlice';\nimport { tooltipReducer } from './tooltipSlice';\nimport { chartDataReducer } from './chartDataSlice';\nimport { chartLayoutReducer } from './layoutSlice';\nimport { mouseClickMiddleware, mouseMoveMiddleware } from './mouseEventsMiddleware';\nimport { reduxDevtoolsJsonStringifyReplacer } from './reduxDevtoolsJsonStringifyReplacer';\nimport { cartesianAxisReducer } from './cartesianAxisSlice';\nimport { graphicalItemsReducer } from './graphicalItemsSlice';\nimport { referenceElementsReducer } from './referenceElementsSlice';\nimport { brushReducer } from './brushSlice';\nimport { legendReducer } from './legendSlice';\nimport { rootPropsReducer } from './rootPropsSlice';\nimport { polarAxisReducer } from './polarAxisSlice';\nimport { polarOptionsReducer } from './polarOptionsSlice';\nimport { keyboardEventsMiddleware } from './keyboardEventsMiddleware';\nimport { externalEventsMiddleware } from './externalEventsMiddleware';\nimport { touchEventMiddleware } from './touchEventsMiddleware';\nvar rootReducer = combineReducers({\n  brush: brushReducer,\n  cartesianAxis: cartesianAxisReducer,\n  chartData: chartDataReducer,\n  graphicalItems: graphicalItemsReducer,\n  layout: chartLayoutReducer,\n  legend: legendReducer,\n  options: optionsReducer,\n  polarAxis: polarAxisReducer,\n  polarOptions: polarOptionsReducer,\n  referenceElements: referenceElementsReducer,\n  rootProps: rootPropsReducer,\n  tooltip: tooltipReducer\n});\nexport var createRechartsStore = function createRechartsStore(preloadedState) {\n  var chartName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Chart';\n  return configureStore({\n    reducer: rootReducer,\n    // redux-toolkit v1 types are unhappy with the preloadedState type. Remove the `as any` when bumping to v2\n    preloadedState: preloadedState,\n    // @ts-expect-error redux-toolkit v1 types are unhappy with the middleware array. Remove this comment when bumping to v2\n    middleware: getDefaultMiddleware => getDefaultMiddleware({\n      serializableCheck: false\n    }).concat([mouseClickMiddleware.middleware, mouseMoveMiddleware.middleware, keyboardEventsMiddleware.middleware, externalEventsMiddleware.middleware, touchEventMiddleware.middleware]),\n    devTools: {\n      serialize: {\n        replacer: reduxDevtoolsJsonStringifyReplacer\n      },\n      name: \"recharts-\".concat(chartName)\n    }\n  });\n};","import * as React from 'react';\nimport { useRef } from 'react';\nimport { Provider } from 'react-redux';\nimport { createRechartsStore } from './store';\nimport { useIsPanorama } from '../context/PanoramaContext';\nimport { RechartsReduxContext } from './RechartsReduxContext';\nexport function RechartsStoreProvider(_ref) {\n  var {\n    preloadedState,\n    children,\n    reduxStoreName\n  } = _ref;\n  var isPanorama = useIsPanorama();\n  /*\n   * Why the ref? Redux official documentation recommends to use store as a singleton,\n   * and reuse that everywhere: https://redux-toolkit.js.org/api/configureStore#basic-example\n   *\n   * Which is correct! Except that is considering deploying Redux in an app.\n   * Recharts as a library supports multiple charts on the same page.\n   * And each of these charts needs its own store independent of others!\n   *\n   * The alternative is to have everything in the store keyed by the chart id.\n   * Which would make working with everything a little bit more painful because we need the chart id everywhere.\n   */\n  var storeRef = useRef(null);\n\n  /*\n   * Panorama means that this chart is not its own chart, it's only a \"preview\"\n   * being rendered as a child of Brush.\n   * In such case, it should not have a store on its own - it should implicitly inherit\n   * whatever data is in the \"parent\" or \"root\" chart.\n   * Which here is represented by not having a Provider at all. All selectors will use the root store by default.\n   */\n  if (isPanorama) {\n    return children;\n  }\n  if (storeRef.current == null) {\n    storeRef.current = createRechartsStore(preloadedState, reduxStoreName);\n  }\n\n  // ts-expect-error React-Redux types demand that the context internal value is not null, but we have that as default.\n  var nonNullContext = RechartsReduxContext;\n  return /*#__PURE__*/React.createElement(Provider, {\n    context: nonNullContext,\n    store: storeRef.current\n  }, children);\n}","import { useEffect, useState } from 'react';\nimport { useAppDispatch, useAppSelector } from '../state/hooks';\nimport { selectContainerScale } from '../state/selectors/containerSelectors';\nimport { setScale } from '../state/layoutSlice';\nimport { isWellBehavedNumber } from './isWellBehavedNumber';\nexport function useReportScale() {\n  var dispatch = useAppDispatch();\n  var [ref, setRef] = useState(null);\n  var scale = useAppSelector(selectContainerScale);\n  useEffect(() => {\n    if (ref == null) {\n      return;\n    }\n    var rect = ref.getBoundingClientRect();\n    var newScale = rect.width / ref.offsetWidth;\n    if (isWellBehavedNumber(newScale) && newScale !== scale) {\n      dispatch(setScale(newScale));\n    }\n  }, [ref, dispatch, scale]);\n  return setRef;\n}","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport * as React from 'react';\nimport { forwardRef, useState, useCallback } from 'react';\nimport { clsx } from 'clsx';\nimport { mouseLeaveChart } from '../state/tooltipSlice';\nimport { useAppDispatch } from '../state/hooks';\nimport { mouseClickAction, mouseMoveAction } from '../state/mouseEventsMiddleware';\nimport { useSynchronisedEventsFromOtherCharts } from '../synchronisation/useChartSynchronisation';\nimport { focusAction, keyDownAction } from '../state/keyboardEventsMiddleware';\nimport { useReportScale } from '../util/useReportScale';\nimport { externalEventAction } from '../state/externalEventsMiddleware';\nimport { touchEventAction } from '../state/touchEventsMiddleware';\nimport { TooltipPortalContext } from '../context/tooltipPortalContext';\nimport { LegendPortalContext } from '../context/legendPortalContext';\nexport var RechartsWrapper = /*#__PURE__*/forwardRef((_ref, ref) => {\n  var {\n    children,\n    className,\n    height,\n    onClick,\n    onContextMenu,\n    onDoubleClick,\n    onMouseDown,\n    onMouseEnter,\n    onMouseLeave,\n    onMouseMove,\n    onMouseUp,\n    onTouchEnd,\n    onTouchMove,\n    onTouchStart,\n    style,\n    width\n  } = _ref;\n  var dispatch = useAppDispatch();\n  var [tooltipPortal, setTooltipPortal] = useState(null);\n  var [legendPortal, setLegendPortal] = useState(null);\n  useSynchronisedEventsFromOtherCharts();\n  var setScaleRef = useReportScale();\n  var innerRef = useCallback(node => {\n    setScaleRef(node);\n    if (typeof ref === 'function') {\n      ref(node);\n    }\n    setTooltipPortal(node);\n    setLegendPortal(node);\n  }, [setScaleRef, ref, setTooltipPortal, setLegendPortal]);\n  var myOnClick = useCallback(e => {\n    dispatch(mouseClickAction(e));\n    dispatch(externalEventAction({\n      handler: onClick,\n      reactEvent: e\n    }));\n  }, [dispatch, onClick]);\n  var myOnMouseEnter = useCallback(e => {\n    dispatch(mouseMoveAction(e));\n    dispatch(externalEventAction({\n      handler: onMouseEnter,\n      reactEvent: e\n    }));\n  }, [dispatch, onMouseEnter]);\n  var myOnMouseLeave = useCallback(e => {\n    dispatch(mouseLeaveChart());\n    dispatch(externalEventAction({\n      handler: onMouseLeave,\n      reactEvent: e\n    }));\n  }, [dispatch, onMouseLeave]);\n  var myOnMouseMove = useCallback(e => {\n    dispatch(mouseMoveAction(e));\n    dispatch(externalEventAction({\n      handler: onMouseMove,\n      reactEvent: e\n    }));\n  }, [dispatch, onMouseMove]);\n  var onFocus = useCallback(() => {\n    dispatch(focusAction());\n  }, [dispatch]);\n  var onKeyDown = useCallback(e => {\n    dispatch(keyDownAction(e.key));\n  }, [dispatch]);\n  var myOnContextMenu = useCallback(e => {\n    dispatch(externalEventAction({\n      handler: onContextMenu,\n      reactEvent: e\n    }));\n  }, [dispatch, onContextMenu]);\n  var myOnDoubleClick = useCallback(e => {\n    dispatch(externalEventAction({\n      handler: onDoubleClick,\n      reactEvent: e\n    }));\n  }, [dispatch, onDoubleClick]);\n  var myOnMouseDown = useCallback(e => {\n    dispatch(externalEventAction({\n      handler: onMouseDown,\n      reactEvent: e\n    }));\n  }, [dispatch, onMouseDown]);\n  var myOnMouseUp = useCallback(e => {\n    dispatch(externalEventAction({\n      handler: onMouseUp,\n      reactEvent: e\n    }));\n  }, [dispatch, onMouseUp]);\n  var myOnTouchStart = useCallback(e => {\n    dispatch(externalEventAction({\n      handler: onTouchStart,\n      reactEvent: e\n    }));\n  }, [dispatch, onTouchStart]);\n\n  /*\n   * onTouchMove is special because it behaves different from mouse events.\n   * Mouse events have enter + leave combo that notify us when the mouse is over\n   * a certain element. Touch events don't have that; touch only gives us\n   * start (finger down), end (finger up) and move (finger moving).\n   * So we need to figure out which element the user is touching\n   * ourselves. Fortunately, there's a convenient method for that:\n   * https://developer.mozilla.org/en-US/docs/Web/API/Document/elementFromPoint\n   */\n  var myOnTouchMove = useCallback(e => {\n    dispatch(touchEventAction(e));\n    dispatch(externalEventAction({\n      handler: onTouchMove,\n      reactEvent: e\n    }));\n  }, [dispatch, onTouchMove]);\n  var myOnTouchEnd = useCallback(e => {\n    dispatch(externalEventAction({\n      handler: onTouchEnd,\n      reactEvent: e\n    }));\n  }, [dispatch, onTouchEnd]);\n  return /*#__PURE__*/React.createElement(TooltipPortalContext.Provider, {\n    value: tooltipPortal\n  }, /*#__PURE__*/React.createElement(LegendPortalContext.Provider, {\n    value: legendPortal\n  }, /*#__PURE__*/React.createElement(\"div\", {\n    className: clsx('recharts-wrapper', className),\n    style: _objectSpread({\n      position: 'relative',\n      cursor: 'default',\n      width,\n      height\n    }, style),\n    role: \"application\",\n    onClick: myOnClick,\n    onContextMenu: myOnContextMenu,\n    onDoubleClick: myOnDoubleClick,\n    onFocus: onFocus,\n    onKeyDown: onKeyDown,\n    onMouseDown: myOnMouseDown,\n    onMouseEnter: myOnMouseEnter,\n    onMouseLeave: myOnMouseLeave,\n    onMouseMove: myOnMouseMove,\n    onMouseUp: myOnMouseUp,\n    onTouchEnd: myOnTouchEnd,\n    onTouchMove: myOnTouchMove,\n    onTouchStart: myOnTouchStart,\n    ref: innerRef\n  }, children)));\n});","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst iteratee = require('../util/iteratee.js');\n\nfunction sumBy(array, iteratee$1) {\n    if (!array || !array.length) {\n        return 0;\n    }\n    if (iteratee$1 != null) {\n        iteratee$1 = iteratee.iteratee(iteratee$1);\n    }\n    let result = undefined;\n    for (let i = 0; i < array.length; i++) {\n        const current = iteratee$1 ? iteratee$1(array[i]) : array[i];\n        if (current !== undefined) {\n            if (result === undefined) {\n                result = current;\n            }\n            else {\n                result += current;\n            }\n        }\n    }\n    return result;\n}\n\nexports.sumBy = sumBy;\n","module.exports = require('../dist/compat/math/sumBy.js').sumBy;\n","var _excluded = [\"sourceX\", \"sourceY\", \"sourceControlX\", \"targetX\", \"targetY\", \"targetControlX\", \"linkWidth\"],\n  _excluded2 = [\"width\", \"height\", \"className\", \"style\", \"children\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport * as React from 'react';\nimport { PureComponent } from 'react';\nimport maxBy from 'es-toolkit/compat/maxBy';\nimport sumBy from 'es-toolkit/compat/sumBy';\nimport get from 'es-toolkit/compat/get';\nimport { Surface } from '../container/Surface';\nimport { Layer } from '../container/Layer';\nimport { Rectangle } from '../shape/Rectangle';\nimport { shallowEqual } from '../util/ShallowEqual';\nimport { filterProps } from '../util/ReactUtils';\nimport { getValueByDataKey } from '../util/ChartUtils';\nimport { ReportChartMargin, ReportChartSize } from '../context/chartLayoutContext';\nimport { TooltipPortalContext } from '../context/tooltipPortalContext';\nimport { RechartsWrapper } from './RechartsWrapper';\nimport { RechartsStoreProvider } from '../state/RechartsStoreProvider';\nimport { useAppDispatch } from '../state/hooks';\nimport { mouseLeaveItem, setActiveClickItemIndex, setActiveMouseOverItemIndex } from '../state/tooltipSlice';\nimport { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';\nimport { SetComputedData } from '../context/chartDataContext';\nimport { isPositiveNumber } from '../util/isWellBehavedNumber';\nvar interpolationGenerator = (a, b) => {\n  var ka = +a;\n  var kb = b - ka;\n  return t => ka + kb * t;\n};\nvar centerY = node => node.y + node.dy / 2;\nvar getValue = entry => entry && entry.value || 0;\nvar getSumOfIds = (links, ids) => ids.reduce((result, id) => result + getValue(links[id]), 0);\nvar getSumWithWeightedSource = (tree, links, ids) => ids.reduce((result, id) => {\n  var link = links[id];\n  var sourceNode = tree[link.source];\n  return result + centerY(sourceNode) * getValue(links[id]);\n}, 0);\nvar getSumWithWeightedTarget = (tree, links, ids) => ids.reduce((result, id) => {\n  var link = links[id];\n  var targetNode = tree[link.target];\n  return result + centerY(targetNode) * getValue(links[id]);\n}, 0);\nvar ascendingY = (a, b) => a.y - b.y;\nvar searchTargetsAndSources = (links, id) => {\n  var sourceNodes = [];\n  var sourceLinks = [];\n  var targetNodes = [];\n  var targetLinks = [];\n  for (var i = 0, len = links.length; i < len; i++) {\n    var link = links[i];\n    if (link.source === id) {\n      targetNodes.push(link.target);\n      targetLinks.push(i);\n    }\n    if (link.target === id) {\n      sourceNodes.push(link.source);\n      sourceLinks.push(i);\n    }\n  }\n  return {\n    sourceNodes,\n    sourceLinks,\n    targetLinks,\n    targetNodes\n  };\n};\nvar updateDepthOfTargets = (tree, curNode) => {\n  var {\n    targetNodes\n  } = curNode;\n  for (var i = 0, len = targetNodes.length; i < len; i++) {\n    var target = tree[targetNodes[i]];\n    if (target) {\n      target.depth = Math.max(curNode.depth + 1, target.depth);\n      updateDepthOfTargets(tree, target);\n    }\n  }\n};\nvar getNodesTree = (_ref, width, nodeWidth) => {\n  var {\n    nodes,\n    links\n  } = _ref;\n  var tree = nodes.map((entry, index) => {\n    var result = searchTargetsAndSources(links, index);\n    return _objectSpread(_objectSpread(_objectSpread({}, entry), result), {}, {\n      value: Math.max(getSumOfIds(links, result.sourceLinks), getSumOfIds(links, result.targetLinks)),\n      depth: 0\n    });\n  });\n  for (var i = 0, len = tree.length; i < len; i++) {\n    var node = tree[i];\n    if (!node.sourceNodes.length) {\n      updateDepthOfTargets(tree, node);\n    }\n  }\n  var maxDepth = maxBy(tree, entry => entry.depth).depth;\n  if (maxDepth >= 1) {\n    var childWidth = (width - nodeWidth) / maxDepth;\n    for (var _i = 0, _len = tree.length; _i < _len; _i++) {\n      var _node = tree[_i];\n      if (!_node.targetNodes.length) {\n        _node.depth = maxDepth;\n      }\n      _node.x = _node.depth * childWidth;\n      _node.dx = nodeWidth;\n    }\n  }\n  return {\n    tree,\n    maxDepth\n  };\n};\nvar getDepthTree = tree => {\n  var result = [];\n  for (var i = 0, len = tree.length; i < len; i++) {\n    var node = tree[i];\n    if (!result[node.depth]) {\n      result[node.depth] = [];\n    }\n    result[node.depth].push(node);\n  }\n  return result;\n};\nvar updateYOfTree = (depthTree, height, nodePadding, links) => {\n  var yRatio = Math.min(...depthTree.map(nodes => (height - (nodes.length - 1) * nodePadding) / sumBy(nodes, getValue)));\n  for (var d = 0, maxDepth = depthTree.length; d < maxDepth; d++) {\n    for (var i = 0, len = depthTree[d].length; i < len; i++) {\n      var node = depthTree[d][i];\n      node.y = i;\n      node.dy = node.value * yRatio;\n    }\n  }\n  return links.map(link => _objectSpread(_objectSpread({}, link), {}, {\n    dy: getValue(link) * yRatio\n  }));\n};\nvar resolveCollisions = function resolveCollisions(depthTree, height, nodePadding) {\n  var sort = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n  for (var i = 0, len = depthTree.length; i < len; i++) {\n    var nodes = depthTree[i];\n    var n = nodes.length;\n\n    // Sort by the value of y\n    if (sort) {\n      nodes.sort(ascendingY);\n    }\n    var y0 = 0;\n    for (var j = 0; j < n; j++) {\n      var node = nodes[j];\n      var dy = y0 - node.y;\n      if (dy > 0) {\n        node.y += dy;\n      }\n      y0 = node.y + node.dy + nodePadding;\n    }\n    y0 = height + nodePadding;\n    for (var _j = n - 1; _j >= 0; _j--) {\n      var _node2 = nodes[_j];\n      var _dy = _node2.y + _node2.dy + nodePadding - y0;\n      if (_dy > 0) {\n        _node2.y -= _dy;\n        y0 = _node2.y;\n      } else {\n        break;\n      }\n    }\n  }\n};\nvar relaxLeftToRight = (tree, depthTree, links, alpha) => {\n  for (var i = 0, maxDepth = depthTree.length; i < maxDepth; i++) {\n    var nodes = depthTree[i];\n    for (var j = 0, len = nodes.length; j < len; j++) {\n      var node = nodes[j];\n      if (node.sourceLinks.length) {\n        var sourceSum = getSumOfIds(links, node.sourceLinks);\n        var weightedSum = getSumWithWeightedSource(tree, links, node.sourceLinks);\n        var y = weightedSum / sourceSum;\n        node.y += (y - centerY(node)) * alpha;\n      }\n    }\n  }\n};\nvar relaxRightToLeft = (tree, depthTree, links, alpha) => {\n  for (var i = depthTree.length - 1; i >= 0; i--) {\n    var nodes = depthTree[i];\n    for (var j = 0, len = nodes.length; j < len; j++) {\n      var node = nodes[j];\n      if (node.targetLinks.length) {\n        var targetSum = getSumOfIds(links, node.targetLinks);\n        var weightedSum = getSumWithWeightedTarget(tree, links, node.targetLinks);\n        var y = weightedSum / targetSum;\n        node.y += (y - centerY(node)) * alpha;\n      }\n    }\n  }\n};\nvar updateYOfLinks = (tree, links) => {\n  for (var i = 0, len = tree.length; i < len; i++) {\n    var node = tree[i];\n    var sy = 0;\n    var ty = 0;\n    node.targetLinks.sort((a, b) => tree[links[a].target].y - tree[links[b].target].y);\n    node.sourceLinks.sort((a, b) => tree[links[a].source].y - tree[links[b].source].y);\n    for (var j = 0, tLen = node.targetLinks.length; j < tLen; j++) {\n      var link = links[node.targetLinks[j]];\n      if (link) {\n        link.sy = sy;\n        sy += link.dy;\n      }\n    }\n    for (var _j2 = 0, sLen = node.sourceLinks.length; _j2 < sLen; _j2++) {\n      var _link = links[node.sourceLinks[_j2]];\n      if (_link) {\n        _link.ty = ty;\n        ty += _link.dy;\n      }\n    }\n  }\n};\nvar computeData = _ref2 => {\n  var {\n    data,\n    width,\n    height,\n    iterations,\n    nodeWidth,\n    nodePadding,\n    sort\n  } = _ref2;\n  var {\n    links\n  } = data;\n  var {\n    tree\n  } = getNodesTree(data, width, nodeWidth);\n  var depthTree = getDepthTree(tree);\n  var newLinks = updateYOfTree(depthTree, height, nodePadding, links);\n  resolveCollisions(depthTree, height, nodePadding, sort);\n  var alpha = 1;\n  for (var i = 1; i <= iterations; i++) {\n    relaxRightToLeft(tree, depthTree, newLinks, alpha *= 0.99);\n    resolveCollisions(depthTree, height, nodePadding, sort);\n    relaxLeftToRight(tree, depthTree, newLinks, alpha);\n    resolveCollisions(depthTree, height, nodePadding, sort);\n  }\n  updateYOfLinks(tree, newLinks);\n  return {\n    nodes: tree,\n    links: newLinks\n  };\n};\nvar getCoordinateOfTooltip = (item, type) => {\n  if (type === 'node') {\n    return {\n      x: +item.x + +item.width / 2,\n      y: +item.y + +item.height / 2\n    };\n  }\n  return 'sourceX' in item && {\n    x: (item.sourceX + item.targetX) / 2,\n    y: (item.sourceY + item.targetY) / 2\n  };\n};\nvar getPayloadOfTooltip = (item, type, nameKey) => {\n  var {\n    payload\n  } = item;\n  if (type === 'node') {\n    return {\n      payload,\n      name: getValueByDataKey(payload, nameKey, ''),\n      value: getValueByDataKey(payload, 'value')\n    };\n  }\n  if ('source' in payload && payload.source && payload.target) {\n    var sourceName = getValueByDataKey(payload.source, nameKey, '');\n    var targetName = getValueByDataKey(payload.target, nameKey, '');\n    return {\n      payload,\n      name: \"\".concat(sourceName, \" - \").concat(targetName),\n      value: getValueByDataKey(payload, 'value')\n    };\n  }\n  return null;\n};\nexport var sankeyPayloadSearcher = (_, activeIndex, computedData, nameKey) => {\n  if (activeIndex == null || typeof activeIndex !== 'string') {\n    return undefined;\n  }\n  var splitIndex = activeIndex.split('-');\n  var [targetType, index] = splitIndex;\n  var item = get(computedData, \"\".concat(targetType, \"s[\").concat(index, \"]\"));\n  if (item) {\n    var payload = getPayloadOfTooltip(item, targetType, nameKey);\n    return payload;\n  }\n  return undefined;\n};\nvar options = {\n  chartName: 'Sankey',\n  defaultTooltipEventType: 'item',\n  validateTooltipEventTypes: ['item'],\n  tooltipPayloadSearcher: sankeyPayloadSearcher,\n  eventEmitter: undefined\n};\nfunction getTooltipEntrySettings(props) {\n  var {\n    dataKey,\n    nameKey,\n    stroke,\n    strokeWidth,\n    fill,\n    name,\n    data\n  } = props;\n  return {\n    dataDefinedOnItem: data,\n    positions: undefined,\n    settings: {\n      stroke,\n      strokeWidth,\n      fill,\n      dataKey,\n      name,\n      nameKey,\n      color: fill,\n      unit: '' // Sankey does not have unit, why?\n    }\n  };\n}\n\n// TODO: improve types - NodeOptions uses SankeyNode, LinkOptions uses LinkProps. Standardize.\n\n// Why is margin not a Sankey prop? No clue. Probably it should be\nvar defaultSankeyMargin = {\n  top: 0,\n  right: 0,\n  bottom: 0,\n  left: 0\n};\nfunction renderLinkItem(option, props) {\n  if (/*#__PURE__*/React.isValidElement(option)) {\n    return /*#__PURE__*/React.cloneElement(option, props);\n  }\n  if (typeof option === 'function') {\n    return option(props);\n  }\n  var {\n      sourceX,\n      sourceY,\n      sourceControlX,\n      targetX,\n      targetY,\n      targetControlX,\n      linkWidth\n    } = props,\n    others = _objectWithoutProperties(props, _excluded);\n  return /*#__PURE__*/React.createElement(\"path\", _extends({\n    className: \"recharts-sankey-link\",\n    d: \"\\n          M\".concat(sourceX, \",\").concat(sourceY, \"\\n          C\").concat(sourceControlX, \",\").concat(sourceY, \" \").concat(targetControlX, \",\").concat(targetY, \" \").concat(targetX, \",\").concat(targetY, \"\\n        \"),\n    fill: \"none\",\n    stroke: \"#333\",\n    strokeWidth: linkWidth,\n    strokeOpacity: \"0.2\"\n  }, filterProps(others, false)));\n}\nvar buildLinkProps = _ref3 => {\n  var {\n    link,\n    nodes,\n    left,\n    top,\n    i,\n    linkContent,\n    linkCurvature\n  } = _ref3;\n  var {\n    sy: sourceRelativeY,\n    ty: targetRelativeY,\n    dy: linkWidth\n  } = link;\n  var sourceNode = nodes[link.source];\n  var targetNode = nodes[link.target];\n  var sourceX = sourceNode.x + sourceNode.dx + left;\n  var targetX = targetNode.x + left;\n  var interpolationFunc = interpolationGenerator(sourceX, targetX);\n  var sourceControlX = interpolationFunc(linkCurvature);\n  var targetControlX = interpolationFunc(1 - linkCurvature);\n  var sourceY = sourceNode.y + sourceRelativeY + linkWidth / 2 + top;\n  var targetY = targetNode.y + targetRelativeY + linkWidth / 2 + top;\n  var linkProps = _objectSpread({\n    sourceX,\n    targetX,\n    sourceY,\n    targetY,\n    sourceControlX,\n    targetControlX,\n    sourceRelativeY,\n    targetRelativeY,\n    linkWidth,\n    index: i,\n    payload: _objectSpread(_objectSpread({}, link), {}, {\n      source: sourceNode,\n      target: targetNode\n    })\n  }, filterProps(linkContent, false));\n  return linkProps;\n};\nfunction SankeyLinkElement(_ref4) {\n  var {\n    props,\n    i,\n    linkContent,\n    onMouseEnter: _onMouseEnter,\n    onMouseLeave: _onMouseLeave,\n    onClick: _onClick,\n    dataKey\n  } = _ref4;\n  var activeCoordinate = getCoordinateOfTooltip(props, 'link');\n  var activeIndex = \"link-\".concat(i);\n  var dispatch = useAppDispatch();\n  var events = {\n    onMouseEnter: e => {\n      dispatch(setActiveMouseOverItemIndex({\n        activeIndex,\n        activeDataKey: dataKey,\n        activeCoordinate\n      }));\n      _onMouseEnter(props, e);\n    },\n    onMouseLeave: e => {\n      dispatch(mouseLeaveItem());\n      _onMouseLeave(props, e);\n    },\n    onClick: e => {\n      dispatch(setActiveClickItemIndex({\n        activeIndex,\n        activeDataKey: dataKey,\n        activeCoordinate\n      }));\n      _onClick(props, e);\n    }\n  };\n  return /*#__PURE__*/React.createElement(Layer, events, renderLinkItem(linkContent, props));\n}\nfunction AllSankeyLinkElements(_ref5) {\n  var {\n    modifiedLinks,\n    links,\n    linkContent,\n    onMouseEnter,\n    onMouseLeave,\n    onClick,\n    dataKey\n  } = _ref5;\n  return /*#__PURE__*/React.createElement(Layer, {\n    className: \"recharts-sankey-links\",\n    key: \"recharts-sankey-links\"\n  }, links.map((link, i) => {\n    var linkProps = modifiedLinks[i];\n    return /*#__PURE__*/React.createElement(SankeyLinkElement, {\n      key: \"link-\".concat(link.source, \"-\").concat(link.target, \"-\").concat(link.value),\n      props: linkProps,\n      linkContent: linkContent,\n      i: i,\n      onMouseEnter: onMouseEnter,\n      onMouseLeave: onMouseLeave,\n      onClick: onClick,\n      dataKey: dataKey\n    });\n  }));\n}\nfunction renderNodeItem(option, props) {\n  if (/*#__PURE__*/React.isValidElement(option)) {\n    return /*#__PURE__*/React.cloneElement(option, props);\n  }\n  if (typeof option === 'function') {\n    return option(props);\n  }\n  return /*#__PURE__*/React.createElement(Rectangle, _extends({\n    className: \"recharts-sankey-node\",\n    fill: \"#0088fe\",\n    fillOpacity: \"0.8\"\n  }, filterProps(props, false)));\n}\nvar buildNodeProps = _ref6 => {\n  var {\n    node,\n    nodeContent,\n    top,\n    left,\n    i\n  } = _ref6;\n  var {\n    x,\n    y,\n    dx,\n    dy\n  } = node;\n  var nodeProps = _objectSpread(_objectSpread({}, filterProps(nodeContent, false)), {}, {\n    x: x + left,\n    y: y + top,\n    width: dx,\n    height: dy,\n    index: i,\n    payload: node\n  });\n  return nodeProps;\n};\nfunction NodeElement(_ref7) {\n  var {\n    props,\n    nodeContent,\n    i,\n    onMouseEnter: _onMouseEnter2,\n    onMouseLeave: _onMouseLeave2,\n    onClick: _onClick2,\n    dataKey\n  } = _ref7;\n  var dispatch = useAppDispatch();\n  var activeCoordinate = getCoordinateOfTooltip(props, 'node');\n  var activeIndex = \"node-\".concat(i);\n  var events = {\n    onMouseEnter: e => {\n      dispatch(setActiveMouseOverItemIndex({\n        activeIndex,\n        activeDataKey: dataKey,\n        activeCoordinate\n      }));\n      _onMouseEnter2(props, e);\n    },\n    onMouseLeave: e => {\n      dispatch(mouseLeaveItem());\n      _onMouseLeave2(props, e);\n    },\n    onClick: e => {\n      dispatch(setActiveClickItemIndex({\n        activeIndex,\n        activeDataKey: dataKey,\n        activeCoordinate\n      }));\n      _onClick2(props, e);\n    }\n  };\n  return /*#__PURE__*/React.createElement(Layer, events, renderNodeItem(nodeContent, props));\n}\nfunction AllNodeElements(_ref8) {\n  var {\n    modifiedNodes,\n    nodeContent,\n    onMouseEnter,\n    onMouseLeave,\n    onClick,\n    dataKey\n  } = _ref8;\n  return /*#__PURE__*/React.createElement(Layer, {\n    className: \"recharts-sankey-nodes\",\n    key: \"recharts-sankey-nodes\"\n  }, modifiedNodes.map((modifiedNode, i) => {\n    return /*#__PURE__*/React.createElement(NodeElement, {\n      props: modifiedNode,\n      nodeContent: nodeContent,\n      i: i,\n      onMouseEnter: onMouseEnter,\n      onMouseLeave: onMouseLeave,\n      onClick: onClick,\n      dataKey: dataKey\n    });\n  }));\n}\nexport class Sankey extends PureComponent {\n  constructor() {\n    super(...arguments);\n    _defineProperty(this, \"state\", {\n      nodes: [],\n      links: [],\n      modifiedLinks: [],\n      modifiedNodes: []\n    });\n  }\n  static getDerivedStateFromProps(nextProps, prevState) {\n    var {\n      data,\n      width,\n      height,\n      margin,\n      iterations,\n      nodeWidth,\n      nodePadding,\n      sort,\n      linkCurvature\n    } = nextProps;\n    if (data !== prevState.prevData || width !== prevState.prevWidth || height !== prevState.prevHeight || !shallowEqual(margin, prevState.prevMargin) || iterations !== prevState.prevIterations || nodeWidth !== prevState.prevNodeWidth || nodePadding !== prevState.prevNodePadding || sort !== prevState.sort) {\n      var contentWidth = width - (margin && margin.left || 0) - (margin && margin.right || 0);\n      var contentHeight = height - (margin && margin.top || 0) - (margin && margin.bottom || 0);\n      var {\n        links,\n        nodes\n      } = computeData({\n        data,\n        width: contentWidth,\n        height: contentHeight,\n        iterations,\n        nodeWidth,\n        nodePadding,\n        sort\n      });\n      var top = get(margin, 'top') || 0;\n      var left = get(margin, 'left') || 0;\n      var modifiedLinks = links.map((link, i) => {\n        return buildLinkProps({\n          link,\n          nodes,\n          i,\n          top,\n          left,\n          linkContent: nextProps.link,\n          linkCurvature\n        });\n      });\n      var modifiedNodes = nodes.map((node, i) => {\n        return buildNodeProps({\n          node,\n          nodeContent: nextProps.node,\n          i,\n          top,\n          left\n        });\n      });\n      return _objectSpread(_objectSpread({}, prevState), {}, {\n        nodes,\n        links,\n        modifiedLinks,\n        modifiedNodes,\n        prevData: data,\n        prevWidth: iterations,\n        prevHeight: height,\n        prevMargin: margin,\n        prevNodePadding: nodePadding,\n        prevNodeWidth: nodeWidth,\n        prevIterations: iterations,\n        prevSort: sort\n      });\n    }\n    return null;\n  }\n  handleMouseEnter(item, type, e) {\n    var {\n      onMouseEnter\n    } = this.props;\n    if (onMouseEnter) {\n      onMouseEnter(item, type, e);\n    }\n  }\n  handleMouseLeave(item, type, e) {\n    var {\n      onMouseLeave\n    } = this.props;\n    if (onMouseLeave) {\n      onMouseLeave(item, type, e);\n    }\n  }\n  handleClick(item, type, e) {\n    var {\n      onClick\n    } = this.props;\n    if (onClick) onClick(item, type, e);\n  }\n  render() {\n    var _this$props = this.props,\n      {\n        width,\n        height,\n        className,\n        style,\n        children\n      } = _this$props,\n      others = _objectWithoutProperties(_this$props, _excluded2);\n    if (!isPositiveNumber(width) || !isPositiveNumber(height)) {\n      return null;\n    }\n    var {\n      links,\n      modifiedNodes,\n      modifiedLinks\n    } = this.state;\n    var attrs = filterProps(others, false);\n    return /*#__PURE__*/React.createElement(RechartsStoreProvider, {\n      preloadedState: {\n        options\n      },\n      reduxStoreName: className !== null && className !== void 0 ? className : 'Sankey'\n    }, /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {\n      fn: getTooltipEntrySettings,\n      args: this.props\n    }), /*#__PURE__*/React.createElement(SetComputedData, {\n      computedData: {\n        links: modifiedLinks,\n        nodes: modifiedNodes\n      }\n    }), /*#__PURE__*/React.createElement(ReportChartSize, {\n      width: width,\n      height: height\n    }), /*#__PURE__*/React.createElement(ReportChartMargin, {\n      margin: defaultSankeyMargin\n    }), /*#__PURE__*/React.createElement(TooltipPortalContext.Provider, {\n      value: this.state.tooltipPortal\n    }, /*#__PURE__*/React.createElement(RechartsWrapper, {\n      className: className,\n      style: style,\n      width: width,\n      height: height,\n      ref: node => {\n        if (this.state.tooltipPortal == null) {\n          this.setState({\n            tooltipPortal: node\n          });\n        }\n      },\n      onMouseEnter: undefined,\n      onMouseLeave: undefined,\n      onClick: undefined,\n      onMouseMove: undefined,\n      onMouseDown: undefined,\n      onMouseUp: undefined,\n      onContextMenu: undefined,\n      onDoubleClick: undefined,\n      onTouchStart: undefined,\n      onTouchMove: undefined,\n      onTouchEnd: undefined\n    }, /*#__PURE__*/React.createElement(Surface, _extends({}, attrs, {\n      width: width,\n      height: height\n    }), children, /*#__PURE__*/React.createElement(AllSankeyLinkElements, {\n      links: links,\n      modifiedLinks: modifiedLinks,\n      linkContent: this.props.link,\n      dataKey: this.props.dataKey,\n      onMouseEnter: (linkProps, e) => this.handleMouseEnter(linkProps, 'link', e),\n      onMouseLeave: (linkProps, e) => this.handleMouseLeave(linkProps, 'link', e),\n      onClick: (linkProps, e) => this.handleClick(linkProps, 'link', e)\n    }), /*#__PURE__*/React.createElement(AllNodeElements, {\n      modifiedNodes: modifiedNodes,\n      nodeContent: this.props.node,\n      dataKey: this.props.dataKey,\n      onMouseEnter: (nodeProps, e) => this.handleMouseEnter(nodeProps, 'node', e),\n      onMouseLeave: (nodeProps, e) => this.handleMouseLeave(nodeProps, 'node', e),\n      onClick: (nodeProps, e) => this.handleClick(nodeProps, 'node', e)\n    })))));\n  }\n}\n_defineProperty(Sankey, \"displayName\", 'Sankey');\n_defineProperty(Sankey, \"defaultProps\", {\n  nameKey: 'name',\n  dataKey: 'value',\n  nodePadding: 10,\n  nodeWidth: 10,\n  linkCurvature: 0.5,\n  iterations: 32,\n  margin: {\n    top: 5,\n    right: 5,\n    bottom: 5,\n    left: 5\n  },\n  sort: true\n});","import { useContext, useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\nimport { Sankey, Tooltip } from 'recharts';\nimport { useNavigate } from 'react-router-dom';\nimport DJClientContext from '../../providers/djclient';\nimport LoadingIcon from '../../icons/LoadingIcon';\n\n// Match badge background colors from index.css .node_type__* classes\nconst TYPE_COLORS = {\n  source: '#ccf7e5',\n  transform: '#ccefff',\n  metric: '#fad7dd',\n  dimension: '#ffefd0',\n  cube: '#dbafff',\n};\n\nconst TYPE_BORDER_COLORS = {\n  source: '#00b368',\n  transform: '#0063b4',\n  metric: '#a2283e',\n  dimension: '#a96621',\n  cube: '#580076',\n};\n\nconst TYPE_LAYER_ORDER = ['source', 'transform', 'dimension', 'metric', 'cube'];\n\n// Returns a slightly darker version of the pastel fill for the node border\nconst DARKER_FILL = {\n  source: '#8de8c3',\n  transform: '#8ed6f7',\n  metric: '#f0a3b0',\n  dimension: '#ffd08a',\n  cube: '#bc80f5',\n};\n\nfunction SankeyNode({\n  x,\n  y,\n  width,\n  height,\n  payload,\n  currentNodeName,\n  rightmostType,\n  onNavigate,\n  hoveredNodeName,\n  onNodeHover,\n}) {\n  if (!payload) return null;\n  if (payload.type === 'phantom') return <g />;\n  const isHovered = hoveredNodeName === payload.name;\n  const isDimmed = hoveredNodeName && !isHovered;\n  const baseFill = TYPE_COLORS[payload.type] ?? '#f1f5f9';\n  const hoverFill = DARKER_FILL[payload.type] ?? '#cbd5e1';\n  const borderColor = DARKER_FILL[payload.type] ?? '#cbd5e1';\n  const isCurrent = payload.name === currentNodeName;\n  const label = (payload.display_name || payload.name || '').split('.').pop();\n  const isRightmost = payload.type === rightmostType;\n  const labelX = isRightmost ? x + width + 8 : x - 8;\n  const labelAnchor = isRightmost ? 'start' : 'end';\n\n  return (\n    <g\n      style={{\n        cursor: payload.name ? 'pointer' : 'default',\n        opacity: isDimmed ? 0.55 : 1,\n        transition: 'opacity 0.15s',\n      }}\n      onMouseEnter={() => onNodeHover && onNodeHover(payload.name)}\n      onMouseLeave={() => onNodeHover && onNodeHover(null)}\n      onClick={() =>\n        payload.name && onNavigate && onNavigate('/nodes/' + payload.name)\n      }\n    >\n      <rect\n        x={x}\n        y={y}\n        width={width}\n        height={height}\n        fill={isHovered ? hoverFill : baseFill}\n        fillOpacity={1}\n        stroke={isCurrent || isHovered ? borderColor : 'none'}\n        strokeWidth={1.5}\n        rx={2}\n      />\n      <text\n        x={labelX}\n        y={y + height / 2}\n        textAnchor={labelAnchor}\n        dominantBaseline=\"middle\"\n        fontSize={11}\n        fill=\"#374151\"\n        style={{ userSelect: 'none', pointerEvents: 'none' }}\n      >\n        {label}\n      </text>\n    </g>\n  );\n}\n\nfunction SankeyLink({\n  sourceX,\n  targetX,\n  sourceY,\n  targetY,\n  sourceControlX,\n  targetControlX,\n  linkWidth,\n  index,\n  payload,\n  hoveredNodeName,\n}) {\n  const [linkHovered, setLinkHovered] = useState(false);\n  const hw = Math.max(linkWidth, 1);\n  const d = `\n    M${sourceX},${sourceY - hw / 2}\n    C${sourceControlX},${sourceY - hw / 2} ${targetControlX},${\n    targetY - hw / 2\n  } ${targetX},${targetY - hw / 2}\n    L${targetX},${targetY + hw / 2}\n    C${targetControlX},${targetY + hw / 2} ${sourceControlX},${\n    sourceY + hw / 2\n  } ${sourceX},${sourceY + hw / 2}\n    Z\n  `;\n  const targetType = payload?.target?.type;\n  if (targetType === 'phantom') return <g />;\n  const sourceType = payload?.source?.type;\n  const fromColor = TYPE_COLORS[sourceType] ?? '#e2e8f0';\n  const toColor = TYPE_COLORS[targetType] ?? '#e2e8f0';\n  const gradientId = `link-grad-${index}`;\n\n  const isConnected =\n    hoveredNodeName &&\n    (payload?.source?.name === hoveredNodeName ||\n      payload?.target?.name === hoveredNodeName);\n  const opacity = linkHovered\n    ? 0.85\n    : hoveredNodeName\n    ? isConnected\n      ? 0.8\n      : 0.15\n    : 0.38;\n\n  return (\n    <g>\n      <defs>\n        <linearGradient id={gradientId} x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n          <stop offset=\"0%\" stopColor={fromColor} stopOpacity={opacity} />\n          <stop offset=\"100%\" stopColor={toColor} stopOpacity={opacity} />\n        </linearGradient>\n      </defs>\n      <path\n        d={d}\n        fill={`url(#${gradientId})`}\n        stroke=\"none\"\n        style={{ cursor: 'pointer', transition: 'opacity 0.15s' }}\n        onMouseEnter={() => setLinkHovered(true)}\n        onMouseLeave={() => setLinkHovered(false)}\n      />\n    </g>\n  );\n}\n\nexport default function NodeDataFlowTab({ djNode }) {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const navigate = useNavigate();\n  const [sankeyData, setSankeyData] = useState(null);\n  const [loading, setLoading] = useState(true);\n  const [containerWidth, setContainerWidth] = useState(0);\n  const [hoveredNodeName, setHoveredNodeName] = useState(null);\n  const containerRef = useRef(null);\n\n  useEffect(() => {\n    const el = containerRef.current;\n    if (!el) return;\n    // Read initial width synchronously so the chart fills the container on first paint\n    setContainerWidth(el.getBoundingClientRect().width);\n    const observer = new ResizeObserver(entries => {\n      setContainerWidth(entries[0].contentRect.width);\n    });\n    observer.observe(el);\n    return () => observer.disconnect();\n  }, []);\n\n  useEffect(() => {\n    if (!djNode?.name) return;\n    setLoading(true);\n    Promise.all([\n      djClient.upstreamsGQL(djNode.name),\n      djClient.downstreamsGQL(djNode.name),\n    ])\n      .then(async ([upstreamNodes, downstreamNodes]) => {\n        const normalize = n => ({ ...n, type: n.type?.toLowerCase() });\n        const upstream = (upstreamNodes || []).map(normalize);\n        const downstream = (downstreamNodes || []).map(normalize);\n\n        // Fetch downstream cubes in one batch call\n        const cubeNames = downstream\n          .filter(n => n.type === 'cube')\n          .map(n => n.name);\n        const cubeNodes = await djClient.findCubesWithMetrics(cubeNames);\n\n        const nonCubeDownstreams = downstream.filter(n => n.type !== 'cube');\n        const allNodes = [\n          djNode,\n          ...upstream,\n          ...cubeNodes,\n          ...nonCubeDownstreams,\n        ];\n\n        // Deduplicate nodes\n        const seen = new Set();\n        const nodes = [];\n        allNodes.forEach(n => {\n          if (n && !seen.has(n.name)) {\n            seen.add(n.name);\n            nodes.push(n);\n          }\n        });\n\n        // Sort so seed node is first within its type group — it will appear at the top\n        // of its column when sort={false} is used.\n        const seedName = djNode?.name;\n        nodes.sort((a, b) => {\n          const aLayer = TYPE_LAYER_ORDER.indexOf(a.type);\n          const bLayer = TYPE_LAYER_ORDER.indexOf(b.type);\n          if (aLayer !== bLayer) return aLayer - bLayer;\n          if (a.name === seedName) return -1;\n          if (b.name === seedName) return 1;\n          return 0;\n        });\n\n        const nodeIndex = {};\n        nodes.forEach((n, i) => {\n          nodeIndex[n.name] = i;\n        });\n\n        const links = [];\n        nodes.forEach(node => {\n          (node.current?.parents || node.parents || []).forEach(parent => {\n            if (\n              parent.name &&\n              nodeIndex[parent.name] !== undefined &&\n              nodeIndex[node.name] !== undefined\n            ) {\n              links.push({\n                source: nodeIndex[parent.name],\n                target: nodeIndex[node.name],\n                value: 1,\n              });\n            }\n          });\n        });\n\n        // recharts forces any node with no outgoing links to maxDepth (the cube column).\n        // Fix: give free-floating metrics a tiny phantom outgoing link so they stay in\n        // the metric column. The phantom node renders as invisible.\n        const hasOutgoing = new Set(links.map(l => l.source));\n        const phantomLinks = [];\n        nodes.forEach((node, i) => {\n          if (node.type === 'metric' && !hasOutgoing.has(i)) {\n            phantomLinks.push({ source: i, target: nodes.length, value: 0.01 });\n          }\n        });\n        if (phantomLinks.length > 0) {\n          nodes.push({\n            name: '__phantom__',\n            type: 'phantom',\n            display_name: '',\n          });\n          links.push(...phantomLinks);\n        }\n\n        setSankeyData({ nodes, links });\n        setLoading(false);\n      })\n      .catch(err => {\n        console.error(err);\n        setLoading(false);\n      });\n  }, [djNode, djClient]);\n\n  // Always render the sentinel div so containerRef is mounted before data loads\n  if (loading || !sankeyData || sankeyData.links.length === 0) {\n    return (\n      <div>\n        {/* Sentinel must be in DOM so ResizeObserver fires even during loading */}\n        <div ref={containerRef} style={{ width: '100%', height: 0 }} />\n        {loading ? (\n          <div style={{ padding: '2rem' }}>\n            <LoadingIcon />\n          </div>\n        ) : (\n          <div style={{ padding: '2rem', color: '#64748b', fontSize: 14 }}>\n            No data flow relationships found for this node.\n          </div>\n        )}\n      </div>\n    );\n  }\n\n  const counts = sankeyData.nodes.reduce((acc, n) => {\n    if (n.type !== 'phantom') acc[n.type] = (acc[n.type] || 0) + 1;\n    return acc;\n  }, {});\n\n  const summaryParts = TYPE_LAYER_ORDER.filter(t => counts[t]).map(\n    t => `${counts[t]} ${t}${counts[t] > 1 ? 's' : ''}`,\n  );\n\n  // Height driven by the tallest column, not total node count\n  const colDepths = {};\n  sankeyData.nodes.forEach(n => {\n    if (n.type !== 'phantom') {\n      const col = TYPE_LAYER_ORDER.indexOf(n.type);\n      colDepths[col] = (colDepths[col] || 0) + 1;\n    }\n  });\n  const maxColNodes = Math.max(...Object.values(colDepths), 1);\n  // Derive chart height so each node is at least MIN_NODE_HEIGHT px tall.\n  // recharts fills: chartHeight - top - bottom = maxNodes * nodeHeight + (maxNodes - 1) * nodePadding\n  // Solving for chartHeight given a desired minimum nodeHeight:\n  const MIN_NODE_HEIGHT = 24;\n  const NODE_PADDING = 12;\n  const MARGIN_V = 20; // top + bottom margin\n  const chartHeight = Math.max(\n    280,\n    maxColNodes * (MIN_NODE_HEIGHT + NODE_PADDING) - NODE_PADDING + MARGIN_V,\n  );\n\n  // Rightmost column determines label side (right); everything else labels left\n  const rightmostType =\n    TYPE_LAYER_ORDER.slice()\n      .reverse()\n      .find(t => counts[t]) ?? 'metric';\n\n  // Measure label widths per side to set margins\n  const canvas = document.createElement('canvas');\n  const ctx = canvas.getContext('2d');\n  ctx.font = '11px system-ui, sans-serif';\n  const measureLabel = n =>\n    ctx.measureText((n.display_name || n.name || '').split('.').pop()).width;\n  const rightNodes = sankeyData.nodes.filter(n => n.type === rightmostType);\n  const leftNodes = sankeyData.nodes.filter(\n    n => n.type !== rightmostType && n.type !== 'phantom',\n  );\n  const rightMargin =\n    Math.ceil(Math.max(0, ...rightNodes.map(measureLabel))) + 16;\n  const leftMargin =\n    Math.ceil(Math.max(0, ...leftNodes.map(measureLabel))) + 16;\n\n  const nodeEl = (\n    <SankeyNode\n      currentNodeName={djNode?.name}\n      rightmostType={rightmostType}\n      onNavigate={navigate}\n      hoveredNodeName={hoveredNodeName}\n      onNodeHover={setHoveredNodeName}\n    />\n  );\n  const linkEl = <SankeyLink hoveredNodeName={hoveredNodeName} />;\n\n  return (\n    <div style={{ padding: '1.5rem 0.75rem' }}>\n      <div\n        style={{\n          fontSize: 13,\n          fontWeight: 700,\n          color: '#374151',\n          textTransform: 'uppercase',\n          letterSpacing: '0.06em',\n          marginBottom: '0.75rem',\n        }}\n      >\n        {summaryParts.join(' → ')}\n      </div>\n      <div\n        style={{\n          display: 'flex',\n          gap: '1rem',\n          marginBottom: '1.25rem',\n          flexWrap: 'wrap',\n        }}\n      >\n        {TYPE_LAYER_ORDER.filter(t => counts[t]).map(type => (\n          <span\n            key={type}\n            style={{\n              display: 'flex',\n              alignItems: 'center',\n              gap: 5,\n              fontSize: 12,\n              color: '#64748b',\n            }}\n          >\n            <span\n              style={{\n                width: 12,\n                height: 12,\n                background: TYPE_COLORS[type],\n                border: `1.5px solid ${TYPE_BORDER_COLORS[type]}`,\n                borderRadius: 2,\n                display: 'inline-block',\n              }}\n            />\n            {type}\n          </span>\n        ))}\n      </div>\n      {/* Sentinel div: measures true available width without the Sankey influencing it */}\n      <div ref={containerRef} style={{ width: '100%', height: 0 }} />\n      {containerWidth > 0 && (\n        <Sankey\n          width={containerWidth}\n          height={chartHeight}\n          data={sankeyData}\n          nodePadding={NODE_PADDING}\n          nodeWidth={16}\n          margin={{ top: 10, right: rightMargin, bottom: 10, left: leftMargin }}\n          node={nodeEl}\n          link={linkEl}\n          sort={false}\n        >\n          <Tooltip\n            content={({ active, payload }) => {\n              if (!active || !payload?.length) return null;\n              const item = payload[0]?.payload;\n              if (!item) return null;\n              const name =\n                item.name ||\n                `${item.source?.display_name || item.source?.name} → ${\n                  item.target?.display_name || item.target?.name\n                }`;\n              return (\n                <div\n                  style={{\n                    background: 'white',\n                    border: '1px solid #e2e8f0',\n                    padding: '8px 12px',\n                    borderRadius: 4,\n                    fontSize: 12,\n                    boxShadow: '0 2px 8px rgba(0,0,0,0.1)',\n                  }}\n                >\n                  <div style={{ fontWeight: 600 }}>{name}</div>\n                  {item.type && (\n                    <div\n                      style={{\n                        color: TYPE_COLORS[item.type] || '#64748b',\n                        marginTop: 2,\n                      }}\n                    >\n                      {item.type}\n                    </div>\n                  )}\n                </div>\n              );\n            }}\n          />\n        </Sankey>\n      )}\n    </div>\n  );\n}\n","export default function cc(names) {\n  if (typeof names === \"string\" || typeof names === \"number\") return \"\" + names\n\n  let out = \"\"\n\n  if (Array.isArray(names)) {\n    for (let i = 0, tmp; i < names.length; i++) {\n      if ((tmp = cc(names[i])) !== \"\") {\n        out += (out && \" \") + tmp\n      }\n    }\n  } else {\n    for (let k in names) {\n      if (names[k]) out += (out && \" \") + k\n    }\n  }\n\n  return out\n}\n","const createStoreImpl = (createState) => {\n  let state;\n  const listeners = /* @__PURE__ */ new Set();\n  const setState = (partial, replace) => {\n    const nextState = typeof partial === \"function\" ? partial(state) : partial;\n    if (!Object.is(nextState, state)) {\n      const previousState = state;\n      state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n      listeners.forEach((listener) => listener(state, previousState));\n    }\n  };\n  const getState = () => state;\n  const getInitialState = () => initialState;\n  const subscribe = (listener) => {\n    listeners.add(listener);\n    return () => listeners.delete(listener);\n  };\n  const destroy = () => {\n    if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n      console.warn(\n        \"[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected.\"\n      );\n    }\n    listeners.clear();\n  };\n  const api = { setState, getState, getInitialState, subscribe, destroy };\n  const initialState = state = createState(setState, getState, api);\n  return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\nvar vanilla = (createState) => {\n  if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n    console.warn(\n      \"[DEPRECATED] Default export is deprecated. Instead use import { createStore } from 'zustand/vanilla'.\"\n    );\n  }\n  return createStore(createState);\n};\n\nexport { createStore, vanilla as default };\n","import ReactExports from 'react';\nimport useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js';\nimport { createStore } from 'zustand/vanilla';\n\nconst { useDebugValue } = ReactExports;\nconst { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;\nconst identity = (arg) => arg;\nfunction useStoreWithEqualityFn(api, selector = identity, equalityFn) {\n  const slice = useSyncExternalStoreWithSelector(\n    api.subscribe,\n    api.getState,\n    api.getServerState || api.getInitialState,\n    selector,\n    equalityFn\n  );\n  useDebugValue(slice);\n  return slice;\n}\nconst createWithEqualityFnImpl = (createState, defaultEqualityFn) => {\n  const api = createStore(createState);\n  const useBoundStoreWithEqualityFn = (selector, equalityFn = defaultEqualityFn) => useStoreWithEqualityFn(api, selector, equalityFn);\n  Object.assign(useBoundStoreWithEqualityFn, api);\n  return useBoundStoreWithEqualityFn;\n};\nconst createWithEqualityFn = (createState, defaultEqualityFn) => createState ? createWithEqualityFnImpl(createState, defaultEqualityFn) : createWithEqualityFnImpl;\n\nexport { createWithEqualityFn, useStoreWithEqualityFn };\n","function shallow$1(objA, objB) {\n  if (Object.is(objA, objB)) {\n    return true;\n  }\n  if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n    return false;\n  }\n  if (objA instanceof Map && objB instanceof Map) {\n    if (objA.size !== objB.size) return false;\n    for (const [key, value] of objA) {\n      if (!Object.is(value, objB.get(key))) {\n        return false;\n      }\n    }\n    return true;\n  }\n  if (objA instanceof Set && objB instanceof Set) {\n    if (objA.size !== objB.size) return false;\n    for (const value of objA) {\n      if (!objB.has(value)) {\n        return false;\n      }\n    }\n    return true;\n  }\n  const keysA = Object.keys(objA);\n  if (keysA.length !== Object.keys(objB).length) {\n    return false;\n  }\n  for (const keyA of keysA) {\n    if (!Object.prototype.hasOwnProperty.call(objB, keyA) || !Object.is(objA[keyA], objB[keyA])) {\n      return false;\n    }\n  }\n  return true;\n}\n\nvar shallow = (objA, objB) => {\n  if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n    console.warn(\n      \"[DEPRECATED] Default export is deprecated. Instead use `import { shallow } from 'zustand/shallow'`.\"\n    );\n  }\n  return shallow$1(objA, objB);\n};\n\nexport { shallow as default, shallow$1 as shallow };\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nexport default dispatch;\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n  return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n  return function() {\n    return array(select.apply(this, arguments));\n  };\n}\n\nexport default function(select) {\n  if (typeof select === \"function\") select = arrayAll(select);\n  else select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n","export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n\nexport function childMatcher(selector) {\n  return function(node) {\n    return node.matches(selector);\n  };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n  return function() {\n    return find.call(this.children, match);\n  };\n}\n\nfunction childFirst() {\n  return this.firstElementChild;\n}\n\nexport default function(match) {\n  return this.select(match == null ? childFirst\n      : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n  return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n  return function() {\n    return filter.call(this.children, match);\n  };\n}\n\nexport default function(match) {\n  return this.selectAll(match == null ? children\n      : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n  return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don’t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = new Map,\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n      if (nodeByKeyValue.has(keyValue)) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue.set(keyValue, node);\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = key.call(parent, data[i], i, data) + \"\";\n    if (node = nodeByKeyValue.get(keyValue)) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue.delete(keyValue);\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction datum(node) {\n  return node.__data__;\n}\n\nexport default function(value, key) {\n  if (!arguments.length) return Array.from(this, datum);\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n  return typeof data === \"object\" && \"length\" in data\n    ? data // Array, TypedArray, NodeList, array-like\n    : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  if (typeof onenter === \"function\") {\n    enter = onenter(enter);\n    if (enter) enter = enter.selection();\n  } else {\n    enter = enter.append(onenter + \"\");\n  }\n  if (onupdate != null) {\n    update = onupdate(update);\n    if (update) update = update.selection();\n  }\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n  var selection = context.selection ? context.selection() : context;\n\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n","export default function() {\n  return Array.from(this);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n","export default function() {\n  let size = 0;\n  for (const node of this) ++size; // eslint-disable-line no-unused-vars\n  return size;\n}\n","export default function() {\n  return !this.node();\n}\n","export default function(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n","function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n","function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n","function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n","function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n","function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n","function remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n  return this.each(remove);\n}\n","function selection_cloneShallow() {\n  var clone = this.cloneNode(false), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n  var clone = this.cloneNode(true), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n","function contextListener(listener) {\n  return function(event) {\n    listener.call(this, event, this.__data__);\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, options) {\n  return function() {\n    var on = this.__on, o, listener = contextListener(value);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n        this.addEventListener(o.type, o.listener = listener, o.options = options);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, options);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, options) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n  return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n","export default function*() {\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) yield node;\n    }\n  }\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n  return this;\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  selectChild: selection_selectChild,\n  selectChildren: selection_selectChildren,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  selection: selection_selection,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch,\n  [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n","export default function(event) {\n  let sourceEvent;\n  while (sourceEvent = event.sourceEvent) event = sourceEvent;\n  return event;\n}\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n  event = sourceEvent(event);\n  if (node === undefined) node = event.currentTarget;\n  if (node) {\n    var svg = node.ownerSVGElement || node;\n    if (svg.createSVGPoint) {\n      var point = svg.createSVGPoint();\n      point.x = event.clientX, point.y = event.clientY;\n      point = point.matrixTransform(node.getScreenCTM().inverse());\n      return [point.x, point.y];\n    }\n    if (node.getBoundingClientRect) {\n      var rect = node.getBoundingClientRect();\n      return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n    }\n  }\n  return [event.pageX, event.pageY];\n}\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n  } else {\n    root.__noselect = root.style.MozUserSelect;\n    root.style.MozUserSelect = \"none\";\n  }\n}\n\nexport function yesdrag(view, noclick) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", null);\n  if (noclick) {\n    selection.on(\"click.drag\", noevent, nonpassivecapture);\n    setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n  }\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", null);\n  } else {\n    root.style.MozUserSelect = root.__noselect;\n    delete root.__noselect;\n  }\n}\n","export default x => () => x;\n","export default function DragEvent(type, {\n  sourceEvent,\n  subject,\n  target,\n  identifier,\n  active,\n  x, y, dx, dy,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    subject: {value: subject, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    identifier: {value: identifier, enumerable: true, configurable: true},\n    active: {value: active, enumerable: true, configurable: true},\n    x: {value: x, enumerable: true, configurable: true},\n    y: {value: y, enumerable: true, configurable: true},\n    dx: {value: dx, enumerable: true, configurable: true},\n    dy: {value: dy, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\n}\n\nDragEvent.prototype.on = function() {\n  var value = this._.on.apply(this._, arguments);\n  return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {select, pointer} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nonpassive, nonpassivecapture, nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n  return this.parentNode;\n}\n\nfunction defaultSubject(event, d) {\n  return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n  var filter = defaultFilter,\n      container = defaultContainer,\n      subject = defaultSubject,\n      touchable = defaultTouchable,\n      gestures = {},\n      listeners = dispatch(\"start\", \"drag\", \"end\"),\n      active = 0,\n      mousedownx,\n      mousedowny,\n      mousemoving,\n      touchending,\n      clickDistance2 = 0;\n\n  function drag(selection) {\n    selection\n        .on(\"mousedown.drag\", mousedowned)\n      .filter(touchable)\n        .on(\"touchstart.drag\", touchstarted)\n        .on(\"touchmove.drag\", touchmoved, nonpassive)\n        .on(\"touchend.drag touchcancel.drag\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  function mousedowned(event, d) {\n    if (touchending || !filter.call(this, event, d)) return;\n    var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\n    if (!gesture) return;\n    select(event.view)\n      .on(\"mousemove.drag\", mousemoved, nonpassivecapture)\n      .on(\"mouseup.drag\", mouseupped, nonpassivecapture);\n    nodrag(event.view);\n    nopropagation(event);\n    mousemoving = false;\n    mousedownx = event.clientX;\n    mousedowny = event.clientY;\n    gesture(\"start\", event);\n  }\n\n  function mousemoved(event) {\n    noevent(event);\n    if (!mousemoving) {\n      var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n      mousemoving = dx * dx + dy * dy > clickDistance2;\n    }\n    gestures.mouse(\"drag\", event);\n  }\n\n  function mouseupped(event) {\n    select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n    yesdrag(event.view, mousemoving);\n    noevent(event);\n    gestures.mouse(\"end\", event);\n  }\n\n  function touchstarted(event, d) {\n    if (!filter.call(this, event, d)) return;\n    var touches = event.changedTouches,\n        c = container.call(this, event, d),\n        n = touches.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\n        nopropagation(event);\n        gesture(\"start\", event, touches[i]);\n      }\n    }\n  }\n\n  function touchmoved(event) {\n    var touches = event.changedTouches,\n        n = touches.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = gestures[touches[i].identifier]) {\n        noevent(event);\n        gesture(\"drag\", event, touches[i]);\n      }\n    }\n  }\n\n  function touchended(event) {\n    var touches = event.changedTouches,\n        n = touches.length, i, gesture;\n\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n    for (i = 0; i < n; ++i) {\n      if (gesture = gestures[touches[i].identifier]) {\n        nopropagation(event);\n        gesture(\"end\", event, touches[i]);\n      }\n    }\n  }\n\n  function beforestart(that, container, event, d, identifier, touch) {\n    var dispatch = listeners.copy(),\n        p = pointer(touch || event, container), dx, dy,\n        s;\n\n    if ((s = subject.call(that, new DragEvent(\"beforestart\", {\n        sourceEvent: event,\n        target: drag,\n        identifier,\n        active,\n        x: p[0],\n        y: p[1],\n        dx: 0,\n        dy: 0,\n        dispatch\n      }), d)) == null) return;\n\n    dx = s.x - p[0] || 0;\n    dy = s.y - p[1] || 0;\n\n    return function gesture(type, event, touch) {\n      var p0 = p, n;\n      switch (type) {\n        case \"start\": gestures[identifier] = gesture, n = active++; break;\n        case \"end\": delete gestures[identifier], --active; // falls through\n        case \"drag\": p = pointer(touch || event, container), n = active; break;\n      }\n      dispatch.call(\n        type,\n        that,\n        new DragEvent(type, {\n          sourceEvent: event,\n          subject: s,\n          target: drag,\n          identifier,\n          active: n,\n          x: p[0] + dx,\n          y: p[1] + dy,\n          dx: p[0] - p0[0],\n          dy: p[1] - p0[1],\n          dispatch\n        }),\n        d\n      );\n    };\n  }\n\n  drag.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n  };\n\n  drag.container = function(_) {\n    return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n  };\n\n  drag.subject = function(_) {\n    return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n  };\n\n  drag.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n  };\n\n  drag.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? drag : value;\n  };\n\n  drag.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n  };\n\n  return drag;\n}\n","var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(elapsed => {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nexport function init(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nexport function set(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nexport function get(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule.state > STARTING && schedule.state < ENDING;\n    schedule.state = ENDED;\n    schedule.timer.stop();\n    schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nexport default function(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule = set(this, id);\n    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get(node, id).value[name];\n  };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n      : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i.call(this, t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n  return function() {\n    set(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set(this, id).duration = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set(this, id).ease = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (typeof v !== \"function\") throw new Error;\n    set(this, id).ease = v;\n  };\n}\n\nexport default function(value) {\n  if (typeof value !== \"function\") throw new Error;\n  return this.each(easeVarying(this._id, value));\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n  if (transition._id !== this._id) throw new Error;\n\n  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set;\n  return function() {\n    var schedule = sit(this, id),\n        on = schedule.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nexport default function() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n        schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n  return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        string1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = style(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule = set(this, id),\n        on = schedule.on,\n        listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i.call(this, t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nexport default function(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction(tweenValue(this, \"text\", value))\n      : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n  return function(t) {\n    this.textContent = i.call(this, t);\n  };\n}\n\nfunction textTween(value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(value) {\n  var key = \"text\";\n  if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        var inherit = get(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule = set(this, id),\n          on = schedule.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we’re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule.on = on1;\n    });\n\n    // The selection was empty, resolve end immediately\n    if (size === 0) resolve();\n  });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nexport default function transition(name) {\n  return selection().transition(name);\n}\n\nexport function newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  selectChild: selection_prototype.selectChild,\n  selectChildren: selection_prototype.selectChildren,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  textTween: transition_textTween,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  easeVarying: transition_easeVarying,\n  end: transition_end,\n  [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export function cubicIn(t) {\n  return t * t * t;\n}\n\nexport function cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      throw new Error(`transition ${id} not found`);\n    }\n  }\n  return timing;\n}\n\nexport default function(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","export default x => () => x;\n","export default function ZoomEvent(type, {\n  sourceEvent,\n  target,\n  transform,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    transform: {value: transform, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\n}\n","export function Transform(k, x, y) {\n  this.k = k;\n  this.x = x;\n  this.y = y;\n}\n\nTransform.prototype = {\n  constructor: Transform,\n  scale: function(k) {\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n  },\n  translate: function(x, y) {\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n  },\n  apply: function(point) {\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n  },\n  applyX: function(x) {\n    return x * this.k + this.x;\n  },\n  applyY: function(y) {\n    return y * this.k + this.y;\n  },\n  invert: function(location) {\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n  },\n  invertX: function(x) {\n    return (x - this.x) / this.k;\n  },\n  invertY: function(y) {\n    return (y - this.y) / this.k;\n  },\n  rescaleX: function(x) {\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n  },\n  rescaleY: function(y) {\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n  },\n  toString: function() {\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n  }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n  while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n  return node.__zoom;\n}\n","export function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n  return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n  var e = this;\n  if (e instanceof SVGElement) {\n    e = e.ownerSVGElement || e;\n    if (e.hasAttribute(\"viewBox\")) {\n      e = e.viewBox.baseVal;\n      return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n    }\n    return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n  }\n  return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n  return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n  return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n  var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n      dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n      dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n      dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n  return transform.translate(\n    dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n    dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n  );\n}\n\nexport default function() {\n  var filter = defaultFilter,\n      extent = defaultExtent,\n      constrain = defaultConstrain,\n      wheelDelta = defaultWheelDelta,\n      touchable = defaultTouchable,\n      scaleExtent = [0, Infinity],\n      translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n      duration = 250,\n      interpolate = interpolateZoom,\n      listeners = dispatch(\"start\", \"zoom\", \"end\"),\n      touchstarting,\n      touchfirst,\n      touchending,\n      touchDelay = 500,\n      wheelDelay = 150,\n      clickDistance2 = 0,\n      tapDistance = 10;\n\n  function zoom(selection) {\n    selection\n        .property(\"__zoom\", defaultTransform)\n        .on(\"wheel.zoom\", wheeled, {passive: false})\n        .on(\"mousedown.zoom\", mousedowned)\n        .on(\"dblclick.zoom\", dblclicked)\n      .filter(touchable)\n        .on(\"touchstart.zoom\", touchstarted)\n        .on(\"touchmove.zoom\", touchmoved)\n        .on(\"touchend.zoom touchcancel.zoom\", touchended)\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  zoom.transform = function(collection, transform, point, event) {\n    var selection = collection.selection ? collection.selection() : collection;\n    selection.property(\"__zoom\", defaultTransform);\n    if (collection !== selection) {\n      schedule(collection, transform, point, event);\n    } else {\n      selection.interrupt().each(function() {\n        gesture(this, arguments)\n          .event(event)\n          .start()\n          .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n          .end();\n      });\n    }\n  };\n\n  zoom.scaleBy = function(selection, k, p, event) {\n    zoom.scaleTo(selection, function() {\n      var k0 = this.__zoom.k,\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return k0 * k1;\n    }, p, event);\n  };\n\n  zoom.scaleTo = function(selection, k, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t0 = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n          p1 = t0.invert(p0),\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n    }, p, event);\n  };\n\n  zoom.translateBy = function(selection, x, y, event) {\n    zoom.transform(selection, function() {\n      return constrain(this.__zoom.translate(\n        typeof x === \"function\" ? x.apply(this, arguments) : x,\n        typeof y === \"function\" ? y.apply(this, arguments) : y\n      ), extent.apply(this, arguments), translateExtent);\n    }, null, event);\n  };\n\n  zoom.translateTo = function(selection, x, y, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n      return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n        typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n        typeof y === \"function\" ? -y.apply(this, arguments) : -y\n      ), e, translateExtent);\n    }, p, event);\n  };\n\n  function scale(transform, k) {\n    k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n    return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n  }\n\n  function translate(transform, p0, p1) {\n    var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n    return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n  }\n\n  function centroid(extent) {\n    return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n  }\n\n  function schedule(transition, transform, point, event) {\n    transition\n        .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n        .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n        .tween(\"zoom\", function() {\n          var that = this,\n              args = arguments,\n              g = gesture(that, args).event(event),\n              e = extent.apply(that, args),\n              p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n              w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n              a = that.__zoom,\n              b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n              i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n          return function(t) {\n            if (t === 1) t = b; // Avoid rounding error on end.\n            else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n            g.zoom(null, t);\n          };\n        });\n  }\n\n  function gesture(that, args, clean) {\n    return (!clean && that.__zooming) || new Gesture(that, args);\n  }\n\n  function Gesture(that, args) {\n    this.that = that;\n    this.args = args;\n    this.active = 0;\n    this.sourceEvent = null;\n    this.extent = extent.apply(that, args);\n    this.taps = 0;\n  }\n\n  Gesture.prototype = {\n    event: function(event) {\n      if (event) this.sourceEvent = event;\n      return this;\n    },\n    start: function() {\n      if (++this.active === 1) {\n        this.that.__zooming = this;\n        this.emit(\"start\");\n      }\n      return this;\n    },\n    zoom: function(key, transform) {\n      if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n      if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n      if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n      this.that.__zoom = transform;\n      this.emit(\"zoom\");\n      return this;\n    },\n    end: function() {\n      if (--this.active === 0) {\n        delete this.that.__zooming;\n        this.emit(\"end\");\n      }\n      return this;\n    },\n    emit: function(type) {\n      var d = select(this.that).datum();\n      listeners.call(\n        type,\n        this.that,\n        new ZoomEvent(type, {\n          sourceEvent: this.sourceEvent,\n          target: zoom,\n          type,\n          transform: this.that.__zoom,\n          dispatch: listeners\n        }),\n        d\n      );\n    }\n  };\n\n  function wheeled(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var g = gesture(this, args).event(event),\n        t = this.__zoom,\n        k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n        p = pointer(event);\n\n    // If the mouse is in the same location as before, reuse it.\n    // If there were recent wheel events, reset the wheel idle timeout.\n    if (g.wheel) {\n      if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n        g.mouse[1] = t.invert(g.mouse[0] = p);\n      }\n      clearTimeout(g.wheel);\n    }\n\n    // If this wheel event won’t trigger a transform change, ignore it.\n    else if (t.k === k) return;\n\n    // Otherwise, capture the mouse point and location at the start.\n    else {\n      g.mouse = [p, t.invert(p)];\n      interrupt(this);\n      g.start();\n    }\n\n    noevent(event);\n    g.wheel = setTimeout(wheelidled, wheelDelay);\n    g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n    function wheelidled() {\n      g.wheel = null;\n      g.end();\n    }\n  }\n\n  function mousedowned(event, ...args) {\n    if (touchending || !filter.apply(this, arguments)) return;\n    var currentTarget = event.currentTarget,\n        g = gesture(this, args, true).event(event),\n        v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n        p = pointer(event, currentTarget),\n        x0 = event.clientX,\n        y0 = event.clientY;\n\n    dragDisable(event.view);\n    nopropagation(event);\n    g.mouse = [p, this.__zoom.invert(p)];\n    interrupt(this);\n    g.start();\n\n    function mousemoved(event) {\n      noevent(event);\n      if (!g.moved) {\n        var dx = event.clientX - x0, dy = event.clientY - y0;\n        g.moved = dx * dx + dy * dy > clickDistance2;\n      }\n      g.event(event)\n       .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n    }\n\n    function mouseupped(event) {\n      v.on(\"mousemove.zoom mouseup.zoom\", null);\n      dragEnable(event.view, g.moved);\n      noevent(event);\n      g.event(event).end();\n    }\n  }\n\n  function dblclicked(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var t0 = this.__zoom,\n        p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n        p1 = t0.invert(p0),\n        k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n        t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n    noevent(event);\n    if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n    else select(this).call(zoom.transform, t1, p0, event);\n  }\n\n  function touchstarted(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var touches = event.touches,\n        n = touches.length,\n        g = gesture(this, args, event.changedTouches.length === n).event(event),\n        started, i, t, p;\n\n    nopropagation(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      p = [p, this.__zoom.invert(p), t.identifier];\n      if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n      else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n    }\n\n    if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n    if (started) {\n      if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n      interrupt(this);\n      g.start();\n    }\n  }\n\n  function touchmoved(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t, p, l;\n\n    noevent(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n      else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n    }\n    t = g.that.__zoom;\n    if (g.touch1) {\n      var p0 = g.touch0[0], l0 = g.touch0[1],\n          p1 = g.touch1[0], l1 = g.touch1[1],\n          dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n          dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n      t = scale(t, Math.sqrt(dp / dl));\n      p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n      l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n    }\n    else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n    else return;\n\n    g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n  }\n\n  function touchended(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t;\n\n    nopropagation(event);\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, touchDelay);\n    for (i = 0; i < n; ++i) {\n      t = touches[i];\n      if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n      else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n    }\n    if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n    if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n    else {\n      g.end();\n      // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n      if (g.taps === 2) {\n        t = pointer(t, this);\n        if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n          var p = select(this).on(\"dblclick.zoom\");\n          if (p) p.apply(this, arguments);\n        }\n      }\n    }\n  }\n\n  zoom.wheelDelta = function(_) {\n    return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n  };\n\n  zoom.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n  };\n\n  zoom.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n  };\n\n  zoom.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n  };\n\n  zoom.scaleExtent = function(_) {\n    return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n  };\n\n  zoom.translateExtent = function(_) {\n    return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n  };\n\n  zoom.constrain = function(_) {\n    return arguments.length ? (constrain = _, zoom) : constrain;\n  };\n\n  zoom.duration = function(_) {\n    return arguments.length ? (duration = +_, zoom) : duration;\n  };\n\n  zoom.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, zoom) : interpolate;\n  };\n\n  zoom.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? zoom : value;\n  };\n\n  zoom.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n  };\n\n  zoom.tapDistance = function(_) {\n    return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n  };\n\n  return zoom;\n}\n","import React, { createContext, useContext, useMemo, memo, useRef, useState, useEffect, forwardRef, useCallback } from 'react';\nimport cc from 'classcat';\nimport { useStoreWithEqualityFn, createWithEqualityFn } from 'zustand/traditional';\nimport { shallow } from 'zustand/shallow';\nimport { zoomIdentity, zoom } from 'd3-zoom';\nimport { select, pointer } from 'd3-selection';\nimport { drag } from 'd3-drag';\nimport { createPortal } from 'react-dom';\n\nconst StoreContext = createContext(null);\nconst Provider$1 = StoreContext.Provider;\n\nconst errorMessages = {\n    error001: () => '[React Flow]: Seems like you have not used zustand provider as an ancestor. Help: https://reactflow.dev/error#001',\n    error002: () => \"It looks like you've created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them.\",\n    error003: (nodeType) => `Node type \"${nodeType}\" not found. Using fallback type \"default\".`,\n    error004: () => 'The React Flow parent container needs a width and a height to render the graph.',\n    error005: () => 'Only child nodes can use a parent extent.',\n    error006: () => \"Can't create edge. An edge needs a source and a target.\",\n    error007: (id) => `The old edge with id=${id} does not exist.`,\n    error009: (type) => `Marker type \"${type}\" doesn't exist.`,\n    error008: (sourceHandle, edge) => `Couldn't create edge for ${!sourceHandle ? 'source' : 'target'} handle id: \"${!sourceHandle ? edge.sourceHandle : edge.targetHandle}\", edge id: ${edge.id}.`,\n    error010: () => 'Handle: No node id found. Make sure to only use a Handle inside a custom Node.',\n    error011: (edgeType) => `Edge type \"${edgeType}\" not found. Using fallback type \"default\".`,\n    error012: (id) => `Node with id \"${id}\" does not exist, it may have been removed. This can happen when a node is deleted before the \"onNodeClick\" handler is called.`,\n};\n\nconst zustandErrorMessage = errorMessages['error001']();\nfunction useStore(selector, equalityFn) {\n    const store = useContext(StoreContext);\n    if (store === null) {\n        throw new Error(zustandErrorMessage);\n    }\n    return useStoreWithEqualityFn(store, selector, equalityFn);\n}\nconst useStoreApi = () => {\n    const store = useContext(StoreContext);\n    if (store === null) {\n        throw new Error(zustandErrorMessage);\n    }\n    return useMemo(() => ({\n        getState: store.getState,\n        setState: store.setState,\n        subscribe: store.subscribe,\n        destroy: store.destroy,\n    }), [store]);\n};\n\nconst selector$g = (s) => (s.userSelectionActive ? 'none' : 'all');\nfunction Panel({ position, children, className, style, ...rest }) {\n    const pointerEvents = useStore(selector$g);\n    const positionClasses = `${position}`.split('-');\n    return (React.createElement(\"div\", { className: cc(['react-flow__panel', className, ...positionClasses]), style: { ...style, pointerEvents }, ...rest }, children));\n}\n\nfunction Attribution({ proOptions, position = 'bottom-right' }) {\n    if (proOptions?.hideAttribution) {\n        return null;\n    }\n    return (React.createElement(Panel, { position: position, className: \"react-flow__attribution\", \"data-message\": \"Please only hide this attribution when you are subscribed to React Flow Pro: https://reactflow.dev/pro\" },\n        React.createElement(\"a\", { href: \"https://reactflow.dev\", target: \"_blank\", rel: \"noopener noreferrer\", \"aria-label\": \"React Flow attribution\" }, \"React Flow\")));\n}\n\nconst EdgeText = ({ x, y, label, labelStyle = {}, labelShowBg = true, labelBgStyle = {}, labelBgPadding = [2, 4], labelBgBorderRadius = 2, children, className, ...rest }) => {\n    const edgeRef = useRef(null);\n    const [edgeTextBbox, setEdgeTextBbox] = useState({ x: 0, y: 0, width: 0, height: 0 });\n    const edgeTextClasses = cc(['react-flow__edge-textwrapper', className]);\n    useEffect(() => {\n        if (edgeRef.current) {\n            const textBbox = edgeRef.current.getBBox();\n            setEdgeTextBbox({\n                x: textBbox.x,\n                y: textBbox.y,\n                width: textBbox.width,\n                height: textBbox.height,\n            });\n        }\n    }, [label]);\n    if (typeof label === 'undefined' || !label) {\n        return null;\n    }\n    return (React.createElement(\"g\", { transform: `translate(${x - edgeTextBbox.width / 2} ${y - edgeTextBbox.height / 2})`, className: edgeTextClasses, visibility: edgeTextBbox.width ? 'visible' : 'hidden', ...rest },\n        labelShowBg && (React.createElement(\"rect\", { width: edgeTextBbox.width + 2 * labelBgPadding[0], x: -labelBgPadding[0], y: -labelBgPadding[1], height: edgeTextBbox.height + 2 * labelBgPadding[1], className: \"react-flow__edge-textbg\", style: labelBgStyle, rx: labelBgBorderRadius, ry: labelBgBorderRadius })),\n        React.createElement(\"text\", { className: \"react-flow__edge-text\", y: edgeTextBbox.height / 2, dy: \"0.3em\", ref: edgeRef, style: labelStyle }, label),\n        children));\n};\nvar EdgeText$1 = memo(EdgeText);\n\nconst getDimensions = (node) => ({\n    width: node.offsetWidth,\n    height: node.offsetHeight,\n});\nconst clamp = (val, min = 0, max = 1) => Math.min(Math.max(val, min), max);\nconst clampPosition = (position = { x: 0, y: 0 }, extent) => ({\n    x: clamp(position.x, extent[0][0], extent[1][0]),\n    y: clamp(position.y, extent[0][1], extent[1][1]),\n});\n// returns a number between 0 and 1 that represents the velocity of the movement\n// when the mouse is close to the edge of the canvas\nconst calcAutoPanVelocity = (value, min, max) => {\n    if (value < min) {\n        return clamp(Math.abs(value - min), 1, 50) / 50;\n    }\n    else if (value > max) {\n        return -clamp(Math.abs(value - max), 1, 50) / 50;\n    }\n    return 0;\n};\nconst calcAutoPan = (pos, bounds) => {\n    const xMovement = calcAutoPanVelocity(pos.x, 35, bounds.width - 35) * 20;\n    const yMovement = calcAutoPanVelocity(pos.y, 35, bounds.height - 35) * 20;\n    return [xMovement, yMovement];\n};\nconst getHostForElement = (element) => element.getRootNode?.() || window?.document;\nconst getBoundsOfBoxes = (box1, box2) => ({\n    x: Math.min(box1.x, box2.x),\n    y: Math.min(box1.y, box2.y),\n    x2: Math.max(box1.x2, box2.x2),\n    y2: Math.max(box1.y2, box2.y2),\n});\nconst rectToBox = ({ x, y, width, height }) => ({\n    x,\n    y,\n    x2: x + width,\n    y2: y + height,\n});\nconst boxToRect = ({ x, y, x2, y2 }) => ({\n    x,\n    y,\n    width: x2 - x,\n    height: y2 - y,\n});\nconst nodeToRect = (node) => ({\n    ...(node.positionAbsolute || { x: 0, y: 0 }),\n    width: node.width || 0,\n    height: node.height || 0,\n});\nconst getBoundsOfRects = (rect1, rect2) => boxToRect(getBoundsOfBoxes(rectToBox(rect1), rectToBox(rect2)));\nconst getOverlappingArea = (rectA, rectB) => {\n    const xOverlap = Math.max(0, Math.min(rectA.x + rectA.width, rectB.x + rectB.width) - Math.max(rectA.x, rectB.x));\n    const yOverlap = Math.max(0, Math.min(rectA.y + rectA.height, rectB.y + rectB.height) - Math.max(rectA.y, rectB.y));\n    return Math.ceil(xOverlap * yOverlap);\n};\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isRectObject = (obj) => isNumeric(obj.width) && isNumeric(obj.height) && isNumeric(obj.x) && isNumeric(obj.y);\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nconst isNumeric = (n) => !isNaN(n) && isFinite(n);\nconst internalsSymbol = Symbol.for('internals');\n// used for a11y key board controls for nodes and edges\nconst elementSelectionKeys = ['Enter', ' ', 'Escape'];\nconst devWarn = (id, message) => {\n    if (process.env.NODE_ENV === 'development') {\n        console.warn(`[React Flow]: ${message} Help: https://reactflow.dev/error#${id}`);\n    }\n};\nconst isReactKeyboardEvent = (event) => 'nativeEvent' in event;\nfunction isInputDOMNode(event) {\n    const kbEvent = isReactKeyboardEvent(event) ? event.nativeEvent : event;\n    // using composed path for handling shadow dom\n    const target = (kbEvent.composedPath?.()?.[0] || event.target);\n    const isInput = ['INPUT', 'SELECT', 'TEXTAREA'].includes(target?.nodeName) || target?.hasAttribute('contenteditable');\n    // when an input field is focused we don't want to trigger deletion or movement of nodes\n    return isInput || !!target?.closest('.nokey');\n}\nconst isMouseEvent = (event) => 'clientX' in event;\nconst getEventPosition = (event, bounds) => {\n    const isMouseTriggered = isMouseEvent(event);\n    const evtX = isMouseTriggered ? event.clientX : event.touches?.[0].clientX;\n    const evtY = isMouseTriggered ? event.clientY : event.touches?.[0].clientY;\n    return {\n        x: evtX - (bounds?.left ?? 0),\n        y: evtY - (bounds?.top ?? 0),\n    };\n};\nconst isMacOs = () => typeof navigator !== 'undefined' && navigator?.userAgent?.indexOf('Mac') >= 0;\n\nconst BaseEdge = ({ id, path, labelX, labelY, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, markerEnd, markerStart, interactionWidth = 20, }) => {\n    return (React.createElement(React.Fragment, null,\n        React.createElement(\"path\", { id: id, style: style, d: path, fill: \"none\", className: \"react-flow__edge-path\", markerEnd: markerEnd, markerStart: markerStart }),\n        interactionWidth && (React.createElement(\"path\", { d: path, fill: \"none\", strokeOpacity: 0, strokeWidth: interactionWidth, className: \"react-flow__edge-interaction\" })),\n        label && isNumeric(labelX) && isNumeric(labelY) ? (React.createElement(EdgeText$1, { x: labelX, y: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius })) : null));\n};\nBaseEdge.displayName = 'BaseEdge';\n\nconst getMarkerEnd = (markerType, markerEndId) => {\n    if (typeof markerEndId !== 'undefined' && markerEndId) {\n        return `url(#${markerEndId})`;\n    }\n    return typeof markerType !== 'undefined' ? `url(#react-flow__${markerType})` : 'none';\n};\nfunction getMouseHandler$1(id, getState, handler) {\n    return handler === undefined\n        ? handler\n        : (event) => {\n            const edge = getState().edges.find((e) => e.id === id);\n            if (edge) {\n                handler(event, { ...edge });\n            }\n        };\n}\n// this is used for straight edges and simple smoothstep edges (LTR, RTL, BTT, TTB)\nfunction getEdgeCenter({ sourceX, sourceY, targetX, targetY, }) {\n    const xOffset = Math.abs(targetX - sourceX) / 2;\n    const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;\n    const yOffset = Math.abs(targetY - sourceY) / 2;\n    const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n    return [centerX, centerY, xOffset, yOffset];\n}\nfunction getBezierEdgeCenter({ sourceX, sourceY, targetX, targetY, sourceControlX, sourceControlY, targetControlX, targetControlY, }) {\n    // cubic bezier t=0.5 mid point, not the actual mid point, but easy to calculate\n    // https://stackoverflow.com/questions/67516101/how-to-find-distance-mid-point-of-bezier-curve\n    const centerX = sourceX * 0.125 + sourceControlX * 0.375 + targetControlX * 0.375 + targetX * 0.125;\n    const centerY = sourceY * 0.125 + sourceControlY * 0.375 + targetControlY * 0.375 + targetY * 0.125;\n    const offsetX = Math.abs(centerX - sourceX);\n    const offsetY = Math.abs(centerY - sourceY);\n    return [centerX, centerY, offsetX, offsetY];\n}\n\nvar ConnectionMode;\n(function (ConnectionMode) {\n    ConnectionMode[\"Strict\"] = \"strict\";\n    ConnectionMode[\"Loose\"] = \"loose\";\n})(ConnectionMode || (ConnectionMode = {}));\nvar PanOnScrollMode;\n(function (PanOnScrollMode) {\n    PanOnScrollMode[\"Free\"] = \"free\";\n    PanOnScrollMode[\"Vertical\"] = \"vertical\";\n    PanOnScrollMode[\"Horizontal\"] = \"horizontal\";\n})(PanOnScrollMode || (PanOnScrollMode = {}));\nvar SelectionMode;\n(function (SelectionMode) {\n    SelectionMode[\"Partial\"] = \"partial\";\n    SelectionMode[\"Full\"] = \"full\";\n})(SelectionMode || (SelectionMode = {}));\n\nvar ConnectionLineType;\n(function (ConnectionLineType) {\n    ConnectionLineType[\"Bezier\"] = \"default\";\n    ConnectionLineType[\"Straight\"] = \"straight\";\n    ConnectionLineType[\"Step\"] = \"step\";\n    ConnectionLineType[\"SmoothStep\"] = \"smoothstep\";\n    ConnectionLineType[\"SimpleBezier\"] = \"simplebezier\";\n})(ConnectionLineType || (ConnectionLineType = {}));\nvar MarkerType;\n(function (MarkerType) {\n    MarkerType[\"Arrow\"] = \"arrow\";\n    MarkerType[\"ArrowClosed\"] = \"arrowclosed\";\n})(MarkerType || (MarkerType = {}));\n\nvar Position;\n(function (Position) {\n    Position[\"Left\"] = \"left\";\n    Position[\"Top\"] = \"top\";\n    Position[\"Right\"] = \"right\";\n    Position[\"Bottom\"] = \"bottom\";\n})(Position || (Position = {}));\n\nfunction getControl({ pos, x1, y1, x2, y2 }) {\n    if (pos === Position.Left || pos === Position.Right) {\n        return [0.5 * (x1 + x2), y1];\n    }\n    return [x1, 0.5 * (y1 + y2)];\n}\nfunction getSimpleBezierPath({ sourceX, sourceY, sourcePosition = Position.Bottom, targetX, targetY, targetPosition = Position.Top, }) {\n    const [sourceControlX, sourceControlY] = getControl({\n        pos: sourcePosition,\n        x1: sourceX,\n        y1: sourceY,\n        x2: targetX,\n        y2: targetY,\n    });\n    const [targetControlX, targetControlY] = getControl({\n        pos: targetPosition,\n        x1: targetX,\n        y1: targetY,\n        x2: sourceX,\n        y2: sourceY,\n    });\n    const [labelX, labelY, offsetX, offsetY] = getBezierEdgeCenter({\n        sourceX,\n        sourceY,\n        targetX,\n        targetY,\n        sourceControlX,\n        sourceControlY,\n        targetControlX,\n        targetControlY,\n    });\n    return [\n        `M${sourceX},${sourceY} C${sourceControlX},${sourceControlY} ${targetControlX},${targetControlY} ${targetX},${targetY}`,\n        labelX,\n        labelY,\n        offsetX,\n        offsetY,\n    ];\n}\nconst SimpleBezierEdge = memo(({ sourceX, sourceY, targetX, targetY, sourcePosition = Position.Bottom, targetPosition = Position.Top, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, markerEnd, markerStart, interactionWidth, }) => {\n    const [path, labelX, labelY] = getSimpleBezierPath({\n        sourceX,\n        sourceY,\n        sourcePosition,\n        targetX,\n        targetY,\n        targetPosition,\n    });\n    return (React.createElement(BaseEdge, { path: path, labelX: labelX, labelY: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius, style: style, markerEnd: markerEnd, markerStart: markerStart, interactionWidth: interactionWidth }));\n});\nSimpleBezierEdge.displayName = 'SimpleBezierEdge';\n\nconst handleDirections = {\n    [Position.Left]: { x: -1, y: 0 },\n    [Position.Right]: { x: 1, y: 0 },\n    [Position.Top]: { x: 0, y: -1 },\n    [Position.Bottom]: { x: 0, y: 1 },\n};\nconst getDirection = ({ source, sourcePosition = Position.Bottom, target, }) => {\n    if (sourcePosition === Position.Left || sourcePosition === Position.Right) {\n        return source.x < target.x ? { x: 1, y: 0 } : { x: -1, y: 0 };\n    }\n    return source.y < target.y ? { x: 0, y: 1 } : { x: 0, y: -1 };\n};\nconst distance = (a, b) => Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2));\n// ith this function we try to mimic a orthogonal edge routing behaviour\n// It's not as good as a real orthogonal edge routing but it's faster and good enough as a default for step and smooth step edges\nfunction getPoints({ source, sourcePosition = Position.Bottom, target, targetPosition = Position.Top, center, offset, }) {\n    const sourceDir = handleDirections[sourcePosition];\n    const targetDir = handleDirections[targetPosition];\n    const sourceGapped = { x: source.x + sourceDir.x * offset, y: source.y + sourceDir.y * offset };\n    const targetGapped = { x: target.x + targetDir.x * offset, y: target.y + targetDir.y * offset };\n    const dir = getDirection({\n        source: sourceGapped,\n        sourcePosition,\n        target: targetGapped,\n    });\n    const dirAccessor = dir.x !== 0 ? 'x' : 'y';\n    const currDir = dir[dirAccessor];\n    let points = [];\n    let centerX, centerY;\n    const sourceGapOffset = { x: 0, y: 0 };\n    const targetGapOffset = { x: 0, y: 0 };\n    const [defaultCenterX, defaultCenterY, defaultOffsetX, defaultOffsetY] = getEdgeCenter({\n        sourceX: source.x,\n        sourceY: source.y,\n        targetX: target.x,\n        targetY: target.y,\n    });\n    // opposite handle positions, default case\n    if (sourceDir[dirAccessor] * targetDir[dirAccessor] === -1) {\n        centerX = center.x ?? defaultCenterX;\n        centerY = center.y ?? defaultCenterY;\n        //    --->\n        //    |\n        // >---\n        const verticalSplit = [\n            { x: centerX, y: sourceGapped.y },\n            { x: centerX, y: targetGapped.y },\n        ];\n        //    |\n        //  ---\n        //  |\n        const horizontalSplit = [\n            { x: sourceGapped.x, y: centerY },\n            { x: targetGapped.x, y: centerY },\n        ];\n        if (sourceDir[dirAccessor] === currDir) {\n            points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;\n        }\n        else {\n            points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;\n        }\n    }\n    else {\n        // sourceTarget means we take x from source and y from target, targetSource is the opposite\n        const sourceTarget = [{ x: sourceGapped.x, y: targetGapped.y }];\n        const targetSource = [{ x: targetGapped.x, y: sourceGapped.y }];\n        // this handles edges with same handle positions\n        if (dirAccessor === 'x') {\n            points = sourceDir.x === currDir ? targetSource : sourceTarget;\n        }\n        else {\n            points = sourceDir.y === currDir ? sourceTarget : targetSource;\n        }\n        if (sourcePosition === targetPosition) {\n            const diff = Math.abs(source[dirAccessor] - target[dirAccessor]);\n            // if an edge goes from right to right for example (sourcePosition === targetPosition) and the distance between source.x and target.x is less than the offset, the added point and the gapped source/target will overlap. This leads to a weird edge path. To avoid this we add a gapOffset to the source/target\n            if (diff <= offset) {\n                const gapOffset = Math.min(offset - 1, offset - diff);\n                if (sourceDir[dirAccessor] === currDir) {\n                    sourceGapOffset[dirAccessor] = (sourceGapped[dirAccessor] > source[dirAccessor] ? -1 : 1) * gapOffset;\n                }\n                else {\n                    targetGapOffset[dirAccessor] = (targetGapped[dirAccessor] > target[dirAccessor] ? -1 : 1) * gapOffset;\n                }\n            }\n        }\n        // these are conditions for handling mixed handle positions like Right -> Bottom for example\n        if (sourcePosition !== targetPosition) {\n            const dirAccessorOpposite = dirAccessor === 'x' ? 'y' : 'x';\n            const isSameDir = sourceDir[dirAccessor] === targetDir[dirAccessorOpposite];\n            const sourceGtTargetOppo = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];\n            const sourceLtTargetOppo = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];\n            const flipSourceTarget = (sourceDir[dirAccessor] === 1 && ((!isSameDir && sourceGtTargetOppo) || (isSameDir && sourceLtTargetOppo))) ||\n                (sourceDir[dirAccessor] !== 1 && ((!isSameDir && sourceLtTargetOppo) || (isSameDir && sourceGtTargetOppo)));\n            if (flipSourceTarget) {\n                points = dirAccessor === 'x' ? sourceTarget : targetSource;\n            }\n        }\n        const sourceGapPoint = { x: sourceGapped.x + sourceGapOffset.x, y: sourceGapped.y + sourceGapOffset.y };\n        const targetGapPoint = { x: targetGapped.x + targetGapOffset.x, y: targetGapped.y + targetGapOffset.y };\n        const maxXDistance = Math.max(Math.abs(sourceGapPoint.x - points[0].x), Math.abs(targetGapPoint.x - points[0].x));\n        const maxYDistance = Math.max(Math.abs(sourceGapPoint.y - points[0].y), Math.abs(targetGapPoint.y - points[0].y));\n        // we want to place the label on the longest segment of the edge\n        if (maxXDistance >= maxYDistance) {\n            centerX = (sourceGapPoint.x + targetGapPoint.x) / 2;\n            centerY = points[0].y;\n        }\n        else {\n            centerX = points[0].x;\n            centerY = (sourceGapPoint.y + targetGapPoint.y) / 2;\n        }\n    }\n    const pathPoints = [\n        source,\n        { x: sourceGapped.x + sourceGapOffset.x, y: sourceGapped.y + sourceGapOffset.y },\n        ...points,\n        { x: targetGapped.x + targetGapOffset.x, y: targetGapped.y + targetGapOffset.y },\n        target,\n    ];\n    return [pathPoints, centerX, centerY, defaultOffsetX, defaultOffsetY];\n}\nfunction getBend(a, b, c, size) {\n    const bendSize = Math.min(distance(a, b) / 2, distance(b, c) / 2, size);\n    const { x, y } = b;\n    // no bend\n    if ((a.x === x && x === c.x) || (a.y === y && y === c.y)) {\n        return `L${x} ${y}`;\n    }\n    // first segment is horizontal\n    if (a.y === y) {\n        const xDir = a.x < c.x ? -1 : 1;\n        const yDir = a.y < c.y ? 1 : -1;\n        return `L ${x + bendSize * xDir},${y}Q ${x},${y} ${x},${y + bendSize * yDir}`;\n    }\n    const xDir = a.x < c.x ? 1 : -1;\n    const yDir = a.y < c.y ? -1 : 1;\n    return `L ${x},${y + bendSize * yDir}Q ${x},${y} ${x + bendSize * xDir},${y}`;\n}\nfunction getSmoothStepPath({ sourceX, sourceY, sourcePosition = Position.Bottom, targetX, targetY, targetPosition = Position.Top, borderRadius = 5, centerX, centerY, offset = 20, }) {\n    const [points, labelX, labelY, offsetX, offsetY] = getPoints({\n        source: { x: sourceX, y: sourceY },\n        sourcePosition,\n        target: { x: targetX, y: targetY },\n        targetPosition,\n        center: { x: centerX, y: centerY },\n        offset,\n    });\n    const path = points.reduce((res, p, i) => {\n        let segment = '';\n        if (i > 0 && i < points.length - 1) {\n            segment = getBend(points[i - 1], p, points[i + 1], borderRadius);\n        }\n        else {\n            segment = `${i === 0 ? 'M' : 'L'}${p.x} ${p.y}`;\n        }\n        res += segment;\n        return res;\n    }, '');\n    return [path, labelX, labelY, offsetX, offsetY];\n}\nconst SmoothStepEdge = memo(({ sourceX, sourceY, targetX, targetY, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, sourcePosition = Position.Bottom, targetPosition = Position.Top, markerEnd, markerStart, pathOptions, interactionWidth, }) => {\n    const [path, labelX, labelY] = getSmoothStepPath({\n        sourceX,\n        sourceY,\n        sourcePosition,\n        targetX,\n        targetY,\n        targetPosition,\n        borderRadius: pathOptions?.borderRadius,\n        offset: pathOptions?.offset,\n    });\n    return (React.createElement(BaseEdge, { path: path, labelX: labelX, labelY: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius, style: style, markerEnd: markerEnd, markerStart: markerStart, interactionWidth: interactionWidth }));\n});\nSmoothStepEdge.displayName = 'SmoothStepEdge';\n\nconst StepEdge = memo((props) => (React.createElement(SmoothStepEdge, { ...props, pathOptions: useMemo(() => ({ borderRadius: 0, offset: props.pathOptions?.offset }), [props.pathOptions?.offset]) })));\nStepEdge.displayName = 'StepEdge';\n\nfunction getStraightPath({ sourceX, sourceY, targetX, targetY, }) {\n    const [labelX, labelY, offsetX, offsetY] = getEdgeCenter({\n        sourceX,\n        sourceY,\n        targetX,\n        targetY,\n    });\n    return [`M ${sourceX},${sourceY}L ${targetX},${targetY}`, labelX, labelY, offsetX, offsetY];\n}\nconst StraightEdge = memo(({ sourceX, sourceY, targetX, targetY, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, markerEnd, markerStart, interactionWidth, }) => {\n    const [path, labelX, labelY] = getStraightPath({ sourceX, sourceY, targetX, targetY });\n    return (React.createElement(BaseEdge, { path: path, labelX: labelX, labelY: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius, style: style, markerEnd: markerEnd, markerStart: markerStart, interactionWidth: interactionWidth }));\n});\nStraightEdge.displayName = 'StraightEdge';\n\nfunction calculateControlOffset(distance, curvature) {\n    if (distance >= 0) {\n        return 0.5 * distance;\n    }\n    return curvature * 25 * Math.sqrt(-distance);\n}\nfunction getControlWithCurvature({ pos, x1, y1, x2, y2, c }) {\n    switch (pos) {\n        case Position.Left:\n            return [x1 - calculateControlOffset(x1 - x2, c), y1];\n        case Position.Right:\n            return [x1 + calculateControlOffset(x2 - x1, c), y1];\n        case Position.Top:\n            return [x1, y1 - calculateControlOffset(y1 - y2, c)];\n        case Position.Bottom:\n            return [x1, y1 + calculateControlOffset(y2 - y1, c)];\n    }\n}\nfunction getBezierPath({ sourceX, sourceY, sourcePosition = Position.Bottom, targetX, targetY, targetPosition = Position.Top, curvature = 0.25, }) {\n    const [sourceControlX, sourceControlY] = getControlWithCurvature({\n        pos: sourcePosition,\n        x1: sourceX,\n        y1: sourceY,\n        x2: targetX,\n        y2: targetY,\n        c: curvature,\n    });\n    const [targetControlX, targetControlY] = getControlWithCurvature({\n        pos: targetPosition,\n        x1: targetX,\n        y1: targetY,\n        x2: sourceX,\n        y2: sourceY,\n        c: curvature,\n    });\n    const [labelX, labelY, offsetX, offsetY] = getBezierEdgeCenter({\n        sourceX,\n        sourceY,\n        targetX,\n        targetY,\n        sourceControlX,\n        sourceControlY,\n        targetControlX,\n        targetControlY,\n    });\n    return [\n        `M${sourceX},${sourceY} C${sourceControlX},${sourceControlY} ${targetControlX},${targetControlY} ${targetX},${targetY}`,\n        labelX,\n        labelY,\n        offsetX,\n        offsetY,\n    ];\n}\nconst BezierEdge = memo(({ sourceX, sourceY, targetX, targetY, sourcePosition = Position.Bottom, targetPosition = Position.Top, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, markerEnd, markerStart, pathOptions, interactionWidth, }) => {\n    const [path, labelX, labelY] = getBezierPath({\n        sourceX,\n        sourceY,\n        sourcePosition,\n        targetX,\n        targetY,\n        targetPosition,\n        curvature: pathOptions?.curvature,\n    });\n    return (React.createElement(BaseEdge, { path: path, labelX: labelX, labelY: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius, style: style, markerEnd: markerEnd, markerStart: markerStart, interactionWidth: interactionWidth }));\n});\nBezierEdge.displayName = 'BezierEdge';\n\nconst NodeIdContext = createContext(null);\nconst Provider = NodeIdContext.Provider;\nNodeIdContext.Consumer;\nconst useNodeId = () => {\n    const nodeId = useContext(NodeIdContext);\n    return nodeId;\n};\n\nconst isEdge = (element) => 'id' in element && 'source' in element && 'target' in element;\nconst isNode = (element) => 'id' in element && !('source' in element) && !('target' in element);\nconst getOutgoers = (node, nodes, edges) => {\n    if (!isNode(node)) {\n        return [];\n    }\n    const outgoerIds = edges.filter((e) => e.source === node.id).map((e) => e.target);\n    return nodes.filter((n) => outgoerIds.includes(n.id));\n};\nconst getIncomers = (node, nodes, edges) => {\n    if (!isNode(node)) {\n        return [];\n    }\n    const incomersIds = edges.filter((e) => e.target === node.id).map((e) => e.source);\n    return nodes.filter((n) => incomersIds.includes(n.id));\n};\nconst getEdgeId = ({ source, sourceHandle, target, targetHandle }) => `reactflow__edge-${source}${sourceHandle || ''}-${target}${targetHandle || ''}`;\nconst getMarkerId = (marker, rfId) => {\n    if (typeof marker === 'undefined') {\n        return '';\n    }\n    if (typeof marker === 'string') {\n        return marker;\n    }\n    const idPrefix = rfId ? `${rfId}__` : '';\n    return `${idPrefix}${Object.keys(marker)\n        .sort()\n        .map((key) => `${key}=${marker[key]}`)\n        .join('&')}`;\n};\nconst connectionExists = (edge, edges) => {\n    return edges.some((el) => el.source === edge.source &&\n        el.target === edge.target &&\n        (el.sourceHandle === edge.sourceHandle || (!el.sourceHandle && !edge.sourceHandle)) &&\n        (el.targetHandle === edge.targetHandle || (!el.targetHandle && !edge.targetHandle)));\n};\nconst addEdge = (edgeParams, edges) => {\n    if (!edgeParams.source || !edgeParams.target) {\n        devWarn('006', errorMessages['error006']());\n        return edges;\n    }\n    let edge;\n    if (isEdge(edgeParams)) {\n        edge = { ...edgeParams };\n    }\n    else {\n        edge = {\n            ...edgeParams,\n            id: getEdgeId(edgeParams),\n        };\n    }\n    if (connectionExists(edge, edges)) {\n        return edges;\n    }\n    return edges.concat(edge);\n};\nconst reconnectEdge = (oldEdge, newConnection, edges, options = { shouldReplaceId: true }) => {\n    const { id: oldEdgeId, ...rest } = oldEdge;\n    if (!newConnection.source || !newConnection.target) {\n        devWarn('006', errorMessages['error006']());\n        return edges;\n    }\n    const foundEdge = edges.find((e) => e.id === oldEdgeId);\n    if (!foundEdge) {\n        devWarn('007', errorMessages['error007'](oldEdgeId));\n        return edges;\n    }\n    // Remove old edge and create the new edge with parameters of old edge.\n    const edge = {\n        ...rest,\n        id: options.shouldReplaceId ? getEdgeId(newConnection) : oldEdgeId,\n        source: newConnection.source,\n        target: newConnection.target,\n        sourceHandle: newConnection.sourceHandle,\n        targetHandle: newConnection.targetHandle,\n    };\n    return edges.filter((e) => e.id !== oldEdgeId).concat(edge);\n};\n/**\n *\n * @deprecated Use `reconnectEdge` instead.\n */\nconst updateEdge = (oldEdge, newConnection, edges, options = { shouldReplaceId: true }) => {\n    console.warn('[DEPRECATED] `updateEdge` is deprecated. Instead use `reconnectEdge` https://reactflow.dev/api-reference/utils/reconnect-edge');\n    return reconnectEdge(oldEdge, newConnection, edges, options);\n};\nconst pointToRendererPoint = ({ x, y }, [tx, ty, tScale], snapToGrid, [snapX, snapY]) => {\n    const position = {\n        x: (x - tx) / tScale,\n        y: (y - ty) / tScale,\n    };\n    if (snapToGrid) {\n        return {\n            x: snapX * Math.round(position.x / snapX),\n            y: snapY * Math.round(position.y / snapY),\n        };\n    }\n    return position;\n};\nconst rendererPointToPoint = ({ x, y }, [tx, ty, tScale]) => {\n    return {\n        x: x * tScale + tx,\n        y: y * tScale + ty,\n    };\n};\nconst getNodePositionWithOrigin = (node, nodeOrigin = [0, 0]) => {\n    if (!node) {\n        return {\n            x: 0,\n            y: 0,\n            positionAbsolute: {\n                x: 0,\n                y: 0,\n            },\n        };\n    }\n    const offsetX = (node.width ?? 0) * nodeOrigin[0];\n    const offsetY = (node.height ?? 0) * nodeOrigin[1];\n    const position = {\n        x: node.position.x - offsetX,\n        y: node.position.y - offsetY,\n    };\n    return {\n        ...position,\n        positionAbsolute: node.positionAbsolute\n            ? {\n                x: node.positionAbsolute.x - offsetX,\n                y: node.positionAbsolute.y - offsetY,\n            }\n            : position,\n    };\n};\nconst getNodesBounds = (nodes, nodeOrigin = [0, 0]) => {\n    if (nodes.length === 0) {\n        return { x: 0, y: 0, width: 0, height: 0 };\n    }\n    const box = nodes.reduce((currBox, node) => {\n        const { x, y } = getNodePositionWithOrigin(node, nodeOrigin).positionAbsolute;\n        return getBoundsOfBoxes(currBox, rectToBox({\n            x,\n            y,\n            width: node.width || 0,\n            height: node.height || 0,\n        }));\n    }, { x: Infinity, y: Infinity, x2: -Infinity, y2: -Infinity });\n    return boxToRect(box);\n};\n// @deprecated Use `getNodesBounds`.\nconst getRectOfNodes = (nodes, nodeOrigin = [0, 0]) => {\n    console.warn('[DEPRECATED] `getRectOfNodes` is deprecated. Instead use `getNodesBounds` https://reactflow.dev/api-reference/utils/get-nodes-bounds.');\n    return getNodesBounds(nodes, nodeOrigin);\n};\nconst getNodesInside = (nodeInternals, rect, [tx, ty, tScale] = [0, 0, 1], partially = false, \n// set excludeNonSelectableNodes if you want to pay attention to the nodes \"selectable\" attribute\nexcludeNonSelectableNodes = false, nodeOrigin = [0, 0]) => {\n    const paneRect = {\n        x: (rect.x - tx) / tScale,\n        y: (rect.y - ty) / tScale,\n        width: rect.width / tScale,\n        height: rect.height / tScale,\n    };\n    const visibleNodes = [];\n    nodeInternals.forEach((node) => {\n        const { width, height, selectable = true, hidden = false } = node;\n        if ((excludeNonSelectableNodes && !selectable) || hidden) {\n            return false;\n        }\n        const { positionAbsolute } = getNodePositionWithOrigin(node, nodeOrigin);\n        const nodeRect = {\n            x: positionAbsolute.x,\n            y: positionAbsolute.y,\n            width: width || 0,\n            height: height || 0,\n        };\n        const overlappingArea = getOverlappingArea(paneRect, nodeRect);\n        const notInitialized = typeof width === 'undefined' || typeof height === 'undefined' || width === null || height === null;\n        const partiallyVisible = partially && overlappingArea > 0;\n        const area = (width || 0) * (height || 0);\n        const isVisible = notInitialized || partiallyVisible || overlappingArea >= area;\n        if (isVisible || node.dragging) {\n            visibleNodes.push(node);\n        }\n    });\n    return visibleNodes;\n};\nconst getConnectedEdges = (nodes, edges) => {\n    const nodeIds = nodes.map((node) => node.id);\n    return edges.filter((edge) => nodeIds.includes(edge.source) || nodeIds.includes(edge.target));\n};\n// @deprecated Use `getViewportForBounds`.\nconst getTransformForBounds = (bounds, width, height, minZoom, maxZoom, padding = 0.1) => {\n    const { x, y, zoom } = getViewportForBounds(bounds, width, height, minZoom, maxZoom, padding);\n    console.warn('[DEPRECATED] `getTransformForBounds` is deprecated. Instead use `getViewportForBounds`. Beware that the return value is type Viewport (`{ x: number, y: number, zoom: number }`) instead of Transform (`[number, number, number]`). https://reactflow.dev/api-reference/utils/get-viewport-for-bounds');\n    return [x, y, zoom];\n};\nconst getViewportForBounds = (bounds, width, height, minZoom, maxZoom, padding = 0.1) => {\n    const xZoom = width / (bounds.width * (1 + padding));\n    const yZoom = height / (bounds.height * (1 + padding));\n    const zoom = Math.min(xZoom, yZoom);\n    const clampedZoom = clamp(zoom, minZoom, maxZoom);\n    const boundsCenterX = bounds.x + bounds.width / 2;\n    const boundsCenterY = bounds.y + bounds.height / 2;\n    const x = width / 2 - boundsCenterX * clampedZoom;\n    const y = height / 2 - boundsCenterY * clampedZoom;\n    return { x, y, zoom: clampedZoom };\n};\nconst getD3Transition = (selection, duration = 0) => {\n    return selection.transition().duration(duration);\n};\n\n// this functions collects all handles and adds an absolute position\n// so that we can later find the closest handle to the mouse position\nfunction getHandles(node, handleBounds, type, currentHandle) {\n    return (handleBounds[type] || []).reduce((res, h) => {\n        if (`${node.id}-${h.id}-${type}` !== currentHandle) {\n            res.push({\n                id: h.id || null,\n                type,\n                nodeId: node.id,\n                x: (node.positionAbsolute?.x ?? 0) + h.x + h.width / 2,\n                y: (node.positionAbsolute?.y ?? 0) + h.y + h.height / 2,\n            });\n        }\n        return res;\n    }, []);\n}\nfunction getClosestHandle(event, doc, pos, connectionRadius, handles, validator) {\n    // we always want to prioritize the handle below the mouse cursor over the closest distance handle,\n    // because it could be that the center of another handle is closer to the mouse pointer than the handle below the cursor\n    const { x, y } = getEventPosition(event);\n    const domNodes = doc.elementsFromPoint(x, y);\n    const handleBelow = domNodes.find((el) => el.classList.contains('react-flow__handle'));\n    if (handleBelow) {\n        const handleNodeId = handleBelow.getAttribute('data-nodeid');\n        if (handleNodeId) {\n            const handleType = getHandleType(undefined, handleBelow);\n            const handleId = handleBelow.getAttribute('data-handleid');\n            const validHandleResult = validator({ nodeId: handleNodeId, id: handleId, type: handleType });\n            if (validHandleResult) {\n                const handle = handles.find((h) => h.nodeId === handleNodeId && h.type === handleType && h.id === handleId);\n                return {\n                    handle: {\n                        id: handleId,\n                        type: handleType,\n                        nodeId: handleNodeId,\n                        x: handle?.x || pos.x,\n                        y: handle?.y || pos.y,\n                    },\n                    validHandleResult,\n                };\n            }\n        }\n    }\n    // if we couldn't find a handle below the mouse cursor we look for the closest distance based on the connectionRadius\n    let closestHandles = [];\n    let minDistance = Infinity;\n    handles.forEach((handle) => {\n        const distance = Math.sqrt((handle.x - pos.x) ** 2 + (handle.y - pos.y) ** 2);\n        if (distance <= connectionRadius) {\n            const validHandleResult = validator(handle);\n            if (distance <= minDistance) {\n                if (distance < minDistance) {\n                    closestHandles = [{ handle, validHandleResult }];\n                }\n                else if (distance === minDistance) {\n                    // when multiple handles are on the same distance we collect all of them\n                    closestHandles.push({\n                        handle,\n                        validHandleResult,\n                    });\n                }\n                minDistance = distance;\n            }\n        }\n    });\n    if (!closestHandles.length) {\n        return { handle: null, validHandleResult: defaultResult() };\n    }\n    if (closestHandles.length === 1) {\n        return closestHandles[0];\n    }\n    const hasValidHandle = closestHandles.some(({ validHandleResult }) => validHandleResult.isValid);\n    const hasTargetHandle = closestHandles.some(({ handle }) => handle.type === 'target');\n    // if multiple handles are layouted on top of each other we prefer the one with type = target and the one that is valid\n    return (closestHandles.find(({ handle, validHandleResult }) => hasTargetHandle ? handle.type === 'target' : (hasValidHandle ? validHandleResult.isValid : true)) || closestHandles[0]);\n}\nconst nullConnection = { source: null, target: null, sourceHandle: null, targetHandle: null };\nconst defaultResult = () => ({\n    handleDomNode: null,\n    isValid: false,\n    connection: nullConnection,\n    endHandle: null,\n});\n// checks if  and returns connection in fom of an object { source: 123, target: 312 }\nfunction isValidHandle(handle, connectionMode, fromNodeId, fromHandleId, fromType, isValidConnection, doc) {\n    const isTarget = fromType === 'target';\n    const handleToCheck = doc.querySelector(`.react-flow__handle[data-id=\"${handle?.nodeId}-${handle?.id}-${handle?.type}\"]`);\n    const result = {\n        ...defaultResult(),\n        handleDomNode: handleToCheck,\n    };\n    if (handleToCheck) {\n        const handleType = getHandleType(undefined, handleToCheck);\n        const handleNodeId = handleToCheck.getAttribute('data-nodeid');\n        const handleId = handleToCheck.getAttribute('data-handleid');\n        const connectable = handleToCheck.classList.contains('connectable');\n        const connectableEnd = handleToCheck.classList.contains('connectableend');\n        const connection = {\n            source: isTarget ? handleNodeId : fromNodeId,\n            sourceHandle: isTarget ? handleId : fromHandleId,\n            target: isTarget ? fromNodeId : handleNodeId,\n            targetHandle: isTarget ? fromHandleId : handleId,\n        };\n        result.connection = connection;\n        const isConnectable = connectable && connectableEnd;\n        // in strict mode we don't allow target to target or source to source connections\n        const isValid = isConnectable &&\n            (connectionMode === ConnectionMode.Strict\n                ? (isTarget && handleType === 'source') || (!isTarget && handleType === 'target')\n                : handleNodeId !== fromNodeId || handleId !== fromHandleId);\n        if (isValid) {\n            result.endHandle = {\n                nodeId: handleNodeId,\n                handleId,\n                type: handleType,\n            };\n            result.isValid = isValidConnection(connection);\n        }\n    }\n    return result;\n}\nfunction getHandleLookup({ nodes, nodeId, handleId, handleType }) {\n    return nodes.reduce((res, node) => {\n        if (node[internalsSymbol]) {\n            const { handleBounds } = node[internalsSymbol];\n            let sourceHandles = [];\n            let targetHandles = [];\n            if (handleBounds) {\n                sourceHandles = getHandles(node, handleBounds, 'source', `${nodeId}-${handleId}-${handleType}`);\n                targetHandles = getHandles(node, handleBounds, 'target', `${nodeId}-${handleId}-${handleType}`);\n            }\n            res.push(...sourceHandles, ...targetHandles);\n        }\n        return res;\n    }, []);\n}\nfunction getHandleType(edgeUpdaterType, handleDomNode) {\n    if (edgeUpdaterType) {\n        return edgeUpdaterType;\n    }\n    else if (handleDomNode?.classList.contains('target')) {\n        return 'target';\n    }\n    else if (handleDomNode?.classList.contains('source')) {\n        return 'source';\n    }\n    return null;\n}\nfunction resetRecentHandle(handleDomNode) {\n    handleDomNode?.classList.remove('valid', 'connecting', 'react-flow__handle-valid', 'react-flow__handle-connecting');\n}\nfunction getConnectionStatus(isInsideConnectionRadius, isHandleValid) {\n    let connectionStatus = null;\n    if (isHandleValid) {\n        connectionStatus = 'valid';\n    }\n    else if (isInsideConnectionRadius && !isHandleValid) {\n        connectionStatus = 'invalid';\n    }\n    return connectionStatus;\n}\n\nfunction handlePointerDown({ event, handleId, nodeId, onConnect, isTarget, getState, setState, isValidConnection, edgeUpdaterType, onReconnectEnd, }) {\n    // when react-flow is used inside a shadow root we can't use document\n    const doc = getHostForElement(event.target);\n    const { connectionMode, domNode, autoPanOnConnect, connectionRadius, onConnectStart, panBy, getNodes, cancelConnection, } = getState();\n    let autoPanId = 0;\n    let closestHandle;\n    const { x, y } = getEventPosition(event);\n    const clickedHandle = doc?.elementFromPoint(x, y);\n    const handleType = getHandleType(edgeUpdaterType, clickedHandle);\n    const containerBounds = domNode?.getBoundingClientRect();\n    if (!containerBounds || !handleType) {\n        return;\n    }\n    let prevActiveHandle;\n    let connectionPosition = getEventPosition(event, containerBounds);\n    let autoPanStarted = false;\n    let connection = null;\n    let isValid = false;\n    let handleDomNode = null;\n    const handleLookup = getHandleLookup({\n        nodes: getNodes(),\n        nodeId,\n        handleId,\n        handleType,\n    });\n    // when the user is moving the mouse close to the edge of the canvas while connecting we move the canvas\n    const autoPan = () => {\n        if (!autoPanOnConnect) {\n            return;\n        }\n        const [xMovement, yMovement] = calcAutoPan(connectionPosition, containerBounds);\n        panBy({ x: xMovement, y: yMovement });\n        autoPanId = requestAnimationFrame(autoPan);\n    };\n    setState({\n        connectionPosition,\n        connectionStatus: null,\n        // connectionNodeId etc will be removed in the next major in favor of connectionStartHandle\n        connectionNodeId: nodeId,\n        connectionHandleId: handleId,\n        connectionHandleType: handleType,\n        connectionStartHandle: {\n            nodeId,\n            handleId,\n            type: handleType,\n        },\n        connectionEndHandle: null,\n    });\n    onConnectStart?.(event, { nodeId, handleId, handleType });\n    function onPointerMove(event) {\n        const { transform } = getState();\n        connectionPosition = getEventPosition(event, containerBounds);\n        const { handle, validHandleResult } = getClosestHandle(event, doc, pointToRendererPoint(connectionPosition, transform, false, [1, 1]), connectionRadius, handleLookup, (handle) => isValidHandle(handle, connectionMode, nodeId, handleId, isTarget ? 'target' : 'source', isValidConnection, doc));\n        closestHandle = handle;\n        if (!autoPanStarted) {\n            autoPan();\n            autoPanStarted = true;\n        }\n        handleDomNode = validHandleResult.handleDomNode;\n        connection = validHandleResult.connection;\n        isValid = validHandleResult.isValid;\n        setState({\n            connectionPosition: closestHandle && isValid\n                ? rendererPointToPoint({\n                    x: closestHandle.x,\n                    y: closestHandle.y,\n                }, transform)\n                : connectionPosition,\n            connectionStatus: getConnectionStatus(!!closestHandle, isValid),\n            connectionEndHandle: validHandleResult.endHandle,\n        });\n        if (!closestHandle && !isValid && !handleDomNode) {\n            return resetRecentHandle(prevActiveHandle);\n        }\n        if (connection.source !== connection.target && handleDomNode) {\n            resetRecentHandle(prevActiveHandle);\n            prevActiveHandle = handleDomNode;\n            // @todo: remove the old class names \"react-flow__handle-\" in the next major version\n            handleDomNode.classList.add('connecting', 'react-flow__handle-connecting');\n            handleDomNode.classList.toggle('valid', isValid);\n            handleDomNode.classList.toggle('react-flow__handle-valid', isValid);\n        }\n    }\n    function onPointerUp(event) {\n        if ((closestHandle || handleDomNode) && connection && isValid) {\n            onConnect?.(connection);\n        }\n        // it's important to get a fresh reference from the store here\n        // in order to get the latest state of onConnectEnd\n        getState().onConnectEnd?.(event);\n        if (edgeUpdaterType) {\n            onReconnectEnd?.(event);\n        }\n        resetRecentHandle(prevActiveHandle);\n        cancelConnection();\n        cancelAnimationFrame(autoPanId);\n        autoPanStarted = false;\n        isValid = false;\n        connection = null;\n        handleDomNode = null;\n        doc.removeEventListener('mousemove', onPointerMove);\n        doc.removeEventListener('mouseup', onPointerUp);\n        doc.removeEventListener('touchmove', onPointerMove);\n        doc.removeEventListener('touchend', onPointerUp);\n    }\n    doc.addEventListener('mousemove', onPointerMove);\n    doc.addEventListener('mouseup', onPointerUp);\n    doc.addEventListener('touchmove', onPointerMove);\n    doc.addEventListener('touchend', onPointerUp);\n}\n\nconst alwaysValid = () => true;\nconst selector$f = (s) => ({\n    connectionStartHandle: s.connectionStartHandle,\n    connectOnClick: s.connectOnClick,\n    noPanClassName: s.noPanClassName,\n});\nconst connectingSelector = (nodeId, handleId, type) => (state) => {\n    const { connectionStartHandle: startHandle, connectionEndHandle: endHandle, connectionClickStartHandle: clickHandle, } = state;\n    return {\n        connecting: (startHandle?.nodeId === nodeId && startHandle?.handleId === handleId && startHandle?.type === type) ||\n            (endHandle?.nodeId === nodeId && endHandle?.handleId === handleId && endHandle?.type === type),\n        clickConnecting: clickHandle?.nodeId === nodeId && clickHandle?.handleId === handleId && clickHandle?.type === type,\n    };\n};\nconst Handle = forwardRef(({ type = 'source', position = Position.Top, isValidConnection, isConnectable = true, isConnectableStart = true, isConnectableEnd = true, id, onConnect, children, className, onMouseDown, onTouchStart, ...rest }, ref) => {\n    const handleId = id || null;\n    const isTarget = type === 'target';\n    const store = useStoreApi();\n    const nodeId = useNodeId();\n    const { connectOnClick, noPanClassName } = useStore(selector$f, shallow);\n    const { connecting, clickConnecting } = useStore(connectingSelector(nodeId, handleId, type), shallow);\n    if (!nodeId) {\n        store.getState().onError?.('010', errorMessages['error010']());\n    }\n    const onConnectExtended = (params) => {\n        const { defaultEdgeOptions, onConnect: onConnectAction, hasDefaultEdges } = store.getState();\n        const edgeParams = {\n            ...defaultEdgeOptions,\n            ...params,\n        };\n        if (hasDefaultEdges) {\n            const { edges, setEdges } = store.getState();\n            setEdges(addEdge(edgeParams, edges));\n        }\n        onConnectAction?.(edgeParams);\n        onConnect?.(edgeParams);\n    };\n    const onPointerDown = (event) => {\n        if (!nodeId) {\n            return;\n        }\n        const isMouseTriggered = isMouseEvent(event);\n        if (isConnectableStart && ((isMouseTriggered && event.button === 0) || !isMouseTriggered)) {\n            handlePointerDown({\n                event,\n                handleId,\n                nodeId,\n                onConnect: onConnectExtended,\n                isTarget,\n                getState: store.getState,\n                setState: store.setState,\n                isValidConnection: isValidConnection || store.getState().isValidConnection || alwaysValid,\n            });\n        }\n        if (isMouseTriggered) {\n            onMouseDown?.(event);\n        }\n        else {\n            onTouchStart?.(event);\n        }\n    };\n    const onClick = (event) => {\n        const { onClickConnectStart, onClickConnectEnd, connectionClickStartHandle, connectionMode, isValidConnection: isValidConnectionStore, } = store.getState();\n        if (!nodeId || (!connectionClickStartHandle && !isConnectableStart)) {\n            return;\n        }\n        if (!connectionClickStartHandle) {\n            onClickConnectStart?.(event, { nodeId, handleId, handleType: type });\n            store.setState({ connectionClickStartHandle: { nodeId, type, handleId } });\n            return;\n        }\n        const doc = getHostForElement(event.target);\n        const isValidConnectionHandler = isValidConnection || isValidConnectionStore || alwaysValid;\n        const { connection, isValid } = isValidHandle({\n            nodeId,\n            id: handleId,\n            type,\n        }, connectionMode, connectionClickStartHandle.nodeId, connectionClickStartHandle.handleId || null, connectionClickStartHandle.type, isValidConnectionHandler, doc);\n        if (isValid) {\n            onConnectExtended(connection);\n        }\n        onClickConnectEnd?.(event);\n        store.setState({ connectionClickStartHandle: null });\n    };\n    return (React.createElement(\"div\", { \"data-handleid\": handleId, \"data-nodeid\": nodeId, \"data-handlepos\": position, \"data-id\": `${nodeId}-${handleId}-${type}`, className: cc([\n            'react-flow__handle',\n            `react-flow__handle-${position}`,\n            'nodrag',\n            noPanClassName,\n            className,\n            {\n                source: !isTarget,\n                target: isTarget,\n                connectable: isConnectable,\n                connectablestart: isConnectableStart,\n                connectableend: isConnectableEnd,\n                connecting: clickConnecting,\n                // this class is used to style the handle when the user is connecting\n                connectionindicator: isConnectable && ((isConnectableStart && !connecting) || (isConnectableEnd && connecting)),\n            },\n        ]), onMouseDown: onPointerDown, onTouchStart: onPointerDown, onClick: connectOnClick ? onClick : undefined, ref: ref, ...rest }, children));\n});\nHandle.displayName = 'Handle';\nvar Handle$1 = memo(Handle);\n\nconst DefaultNode = ({ data, isConnectable, targetPosition = Position.Top, sourcePosition = Position.Bottom, }) => {\n    return (React.createElement(React.Fragment, null,\n        React.createElement(Handle$1, { type: \"target\", position: targetPosition, isConnectable: isConnectable }),\n        data?.label,\n        React.createElement(Handle$1, { type: \"source\", position: sourcePosition, isConnectable: isConnectable })));\n};\nDefaultNode.displayName = 'DefaultNode';\nvar DefaultNode$1 = memo(DefaultNode);\n\nconst InputNode = ({ data, isConnectable, sourcePosition = Position.Bottom }) => (React.createElement(React.Fragment, null,\n    data?.label,\n    React.createElement(Handle$1, { type: \"source\", position: sourcePosition, isConnectable: isConnectable })));\nInputNode.displayName = 'InputNode';\nvar InputNode$1 = memo(InputNode);\n\nconst OutputNode = ({ data, isConnectable, targetPosition = Position.Top }) => (React.createElement(React.Fragment, null,\n    React.createElement(Handle$1, { type: \"target\", position: targetPosition, isConnectable: isConnectable }),\n    data?.label));\nOutputNode.displayName = 'OutputNode';\nvar OutputNode$1 = memo(OutputNode);\n\nconst GroupNode = () => null;\nGroupNode.displayName = 'GroupNode';\n\nconst selector$e = (s) => ({\n    selectedNodes: s.getNodes().filter((n) => n.selected),\n    selectedEdges: s.edges.filter((e) => e.selected).map((e) => ({ ...e })),\n});\nconst selectId = (obj) => obj.id;\nfunction areEqual(a, b) {\n    return (shallow(a.selectedNodes.map(selectId), b.selectedNodes.map(selectId)) &&\n        shallow(a.selectedEdges.map(selectId), b.selectedEdges.map(selectId)));\n}\n// This is just a helper component for calling the onSelectionChange listener.\n// @TODO: Now that we have the onNodesChange and on EdgesChange listeners, do we still need this component?\nconst SelectionListener = memo(({ onSelectionChange }) => {\n    const store = useStoreApi();\n    const { selectedNodes, selectedEdges } = useStore(selector$e, areEqual);\n    useEffect(() => {\n        const params = { nodes: selectedNodes, edges: selectedEdges };\n        onSelectionChange?.(params);\n        store.getState().onSelectionChange.forEach((fn) => fn(params));\n    }, [selectedNodes, selectedEdges, onSelectionChange]);\n    return null;\n});\nSelectionListener.displayName = 'SelectionListener';\nconst changeSelector = (s) => !!s.onSelectionChange;\nfunction Wrapper$1({ onSelectionChange }) {\n    const storeHasSelectionChange = useStore(changeSelector);\n    if (onSelectionChange || storeHasSelectionChange) {\n        return React.createElement(SelectionListener, { onSelectionChange: onSelectionChange });\n    }\n    return null;\n}\n\nconst selector$d = (s) => ({\n    setNodes: s.setNodes,\n    setEdges: s.setEdges,\n    setDefaultNodesAndEdges: s.setDefaultNodesAndEdges,\n    setMinZoom: s.setMinZoom,\n    setMaxZoom: s.setMaxZoom,\n    setTranslateExtent: s.setTranslateExtent,\n    setNodeExtent: s.setNodeExtent,\n    reset: s.reset,\n});\nfunction useStoreUpdater(value, setStoreState) {\n    useEffect(() => {\n        if (typeof value !== 'undefined') {\n            setStoreState(value);\n        }\n    }, [value]);\n}\n// updates with values in store that don't have a dedicated setter function\nfunction useDirectStoreUpdater(key, value, setState) {\n    useEffect(() => {\n        if (typeof value !== 'undefined') {\n            setState({ [key]: value });\n        }\n    }, [value]);\n}\nconst StoreUpdater = ({ nodes, edges, defaultNodes, defaultEdges, onConnect, onConnectStart, onConnectEnd, onClickConnectStart, onClickConnectEnd, nodesDraggable, nodesConnectable, nodesFocusable, edgesFocusable, edgesUpdatable, elevateNodesOnSelect, minZoom, maxZoom, nodeExtent, onNodesChange, onEdgesChange, elementsSelectable, connectionMode, snapGrid, snapToGrid, translateExtent, connectOnClick, defaultEdgeOptions, fitView, fitViewOptions, onNodesDelete, onEdgesDelete, onNodeDrag, onNodeDragStart, onNodeDragStop, onSelectionDrag, onSelectionDragStart, onSelectionDragStop, noPanClassName, nodeOrigin, rfId, autoPanOnConnect, autoPanOnNodeDrag, onError, connectionRadius, isValidConnection, nodeDragThreshold, }) => {\n    const { setNodes, setEdges, setDefaultNodesAndEdges, setMinZoom, setMaxZoom, setTranslateExtent, setNodeExtent, reset, } = useStore(selector$d, shallow);\n    const store = useStoreApi();\n    useEffect(() => {\n        const edgesWithDefaults = defaultEdges?.map((e) => ({ ...e, ...defaultEdgeOptions }));\n        setDefaultNodesAndEdges(defaultNodes, edgesWithDefaults);\n        return () => {\n            reset();\n        };\n    }, []);\n    useDirectStoreUpdater('defaultEdgeOptions', defaultEdgeOptions, store.setState);\n    useDirectStoreUpdater('connectionMode', connectionMode, store.setState);\n    useDirectStoreUpdater('onConnect', onConnect, store.setState);\n    useDirectStoreUpdater('onConnectStart', onConnectStart, store.setState);\n    useDirectStoreUpdater('onConnectEnd', onConnectEnd, store.setState);\n    useDirectStoreUpdater('onClickConnectStart', onClickConnectStart, store.setState);\n    useDirectStoreUpdater('onClickConnectEnd', onClickConnectEnd, store.setState);\n    useDirectStoreUpdater('nodesDraggable', nodesDraggable, store.setState);\n    useDirectStoreUpdater('nodesConnectable', nodesConnectable, store.setState);\n    useDirectStoreUpdater('nodesFocusable', nodesFocusable, store.setState);\n    useDirectStoreUpdater('edgesFocusable', edgesFocusable, store.setState);\n    useDirectStoreUpdater('edgesUpdatable', edgesUpdatable, store.setState);\n    useDirectStoreUpdater('elementsSelectable', elementsSelectable, store.setState);\n    useDirectStoreUpdater('elevateNodesOnSelect', elevateNodesOnSelect, store.setState);\n    useDirectStoreUpdater('snapToGrid', snapToGrid, store.setState);\n    useDirectStoreUpdater('snapGrid', snapGrid, store.setState);\n    useDirectStoreUpdater('onNodesChange', onNodesChange, store.setState);\n    useDirectStoreUpdater('onEdgesChange', onEdgesChange, store.setState);\n    useDirectStoreUpdater('connectOnClick', connectOnClick, store.setState);\n    useDirectStoreUpdater('fitViewOnInit', fitView, store.setState);\n    useDirectStoreUpdater('fitViewOnInitOptions', fitViewOptions, store.setState);\n    useDirectStoreUpdater('onNodesDelete', onNodesDelete, store.setState);\n    useDirectStoreUpdater('onEdgesDelete', onEdgesDelete, store.setState);\n    useDirectStoreUpdater('onNodeDrag', onNodeDrag, store.setState);\n    useDirectStoreUpdater('onNodeDragStart', onNodeDragStart, store.setState);\n    useDirectStoreUpdater('onNodeDragStop', onNodeDragStop, store.setState);\n    useDirectStoreUpdater('onSelectionDrag', onSelectionDrag, store.setState);\n    useDirectStoreUpdater('onSelectionDragStart', onSelectionDragStart, store.setState);\n    useDirectStoreUpdater('onSelectionDragStop', onSelectionDragStop, store.setState);\n    useDirectStoreUpdater('noPanClassName', noPanClassName, store.setState);\n    useDirectStoreUpdater('nodeOrigin', nodeOrigin, store.setState);\n    useDirectStoreUpdater('rfId', rfId, store.setState);\n    useDirectStoreUpdater('autoPanOnConnect', autoPanOnConnect, store.setState);\n    useDirectStoreUpdater('autoPanOnNodeDrag', autoPanOnNodeDrag, store.setState);\n    useDirectStoreUpdater('onError', onError, store.setState);\n    useDirectStoreUpdater('connectionRadius', connectionRadius, store.setState);\n    useDirectStoreUpdater('isValidConnection', isValidConnection, store.setState);\n    useDirectStoreUpdater('nodeDragThreshold', nodeDragThreshold, store.setState);\n    useStoreUpdater(nodes, setNodes);\n    useStoreUpdater(edges, setEdges);\n    useStoreUpdater(minZoom, setMinZoom);\n    useStoreUpdater(maxZoom, setMaxZoom);\n    useStoreUpdater(translateExtent, setTranslateExtent);\n    useStoreUpdater(nodeExtent, setNodeExtent);\n    return null;\n};\n\nconst style = { display: 'none' };\nconst ariaLiveStyle = {\n    position: 'absolute',\n    width: 1,\n    height: 1,\n    margin: -1,\n    border: 0,\n    padding: 0,\n    overflow: 'hidden',\n    clip: 'rect(0px, 0px, 0px, 0px)',\n    clipPath: 'inset(100%)',\n};\nconst ARIA_NODE_DESC_KEY = 'react-flow__node-desc';\nconst ARIA_EDGE_DESC_KEY = 'react-flow__edge-desc';\nconst ARIA_LIVE_MESSAGE = 'react-flow__aria-live';\nconst selector$c = (s) => s.ariaLiveMessage;\nfunction AriaLiveMessage({ rfId }) {\n    const ariaLiveMessage = useStore(selector$c);\n    return (React.createElement(\"div\", { id: `${ARIA_LIVE_MESSAGE}-${rfId}`, \"aria-live\": \"assertive\", \"aria-atomic\": \"true\", style: ariaLiveStyle }, ariaLiveMessage));\n}\nfunction A11yDescriptions({ rfId, disableKeyboardA11y }) {\n    return (React.createElement(React.Fragment, null,\n        React.createElement(\"div\", { id: `${ARIA_NODE_DESC_KEY}-${rfId}`, style: style },\n            \"Press enter or space to select a node.\",\n            !disableKeyboardA11y && 'You can then use the arrow keys to move the node around.',\n            \" Press delete to remove it and escape to cancel.\",\n            ' '),\n        React.createElement(\"div\", { id: `${ARIA_EDGE_DESC_KEY}-${rfId}`, style: style }, \"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.\"),\n        !disableKeyboardA11y && React.createElement(AriaLiveMessage, { rfId: rfId })));\n}\n\n// the keycode can be a string 'a' or an array of strings ['a', 'a+d']\n// a string means a single key 'a' or a combination when '+' is used 'a+d'\n// an array means different possibilities. Explainer: ['a', 'd+s'] here the\n// user can use the single key 'a' or the combination 'd' + 's'\nvar useKeyPress = (keyCode = null, options = { actInsideInputWithModifier: true }) => {\n    const [keyPressed, setKeyPressed] = useState(false);\n    // we need to remember if a modifier key is pressed in order to track it\n    const modifierPressed = useRef(false);\n    // we need to remember the pressed keys in order to support combinations\n    const pressedKeys = useRef(new Set([]));\n    // keyCodes = array with single keys [['a']] or key combinations [['a', 's']]\n    // keysToWatch = array with all keys flattened ['a', 'd', 'ShiftLeft']\n    // used to check if we store event.code or event.key. When the code is in the list of keysToWatch\n    // we use the code otherwise the key. Explainer: When you press the left \"command\" key, the code is \"MetaLeft\"\n    // and the key is \"Meta\". We want users to be able to pass keys and codes so we assume that the key is meant when\n    // we can't find it in the list of keysToWatch.\n    const [keyCodes, keysToWatch] = useMemo(() => {\n        if (keyCode !== null) {\n            const keyCodeArr = Array.isArray(keyCode) ? keyCode : [keyCode];\n            const keys = keyCodeArr.filter((kc) => typeof kc === 'string').map((kc) => kc.split('+'));\n            const keysFlat = keys.reduce((res, item) => res.concat(...item), []);\n            return [keys, keysFlat];\n        }\n        return [[], []];\n    }, [keyCode]);\n    useEffect(() => {\n        const doc = typeof document !== 'undefined' ? document : null;\n        const target = options?.target || doc;\n        if (keyCode !== null) {\n            const downHandler = (event) => {\n                modifierPressed.current = event.ctrlKey || event.metaKey || event.shiftKey;\n                const preventAction = (!modifierPressed.current || (modifierPressed.current && !options.actInsideInputWithModifier)) &&\n                    isInputDOMNode(event);\n                if (preventAction) {\n                    return false;\n                }\n                const keyOrCode = useKeyOrCode(event.code, keysToWatch);\n                pressedKeys.current.add(event[keyOrCode]);\n                if (isMatchingKey(keyCodes, pressedKeys.current, false)) {\n                    event.preventDefault();\n                    setKeyPressed(true);\n                }\n            };\n            const upHandler = (event) => {\n                const preventAction = (!modifierPressed.current || (modifierPressed.current && !options.actInsideInputWithModifier)) &&\n                    isInputDOMNode(event);\n                if (preventAction) {\n                    return false;\n                }\n                const keyOrCode = useKeyOrCode(event.code, keysToWatch);\n                if (isMatchingKey(keyCodes, pressedKeys.current, true)) {\n                    setKeyPressed(false);\n                    pressedKeys.current.clear();\n                }\n                else {\n                    pressedKeys.current.delete(event[keyOrCode]);\n                }\n                // fix for Mac: when cmd key is pressed, keyup is not triggered for any other key, see: https://stackoverflow.com/questions/27380018/when-cmd-key-is-kept-pressed-keyup-is-not-triggered-for-any-other-key\n                if (event.key === 'Meta') {\n                    pressedKeys.current.clear();\n                }\n                modifierPressed.current = false;\n            };\n            const resetHandler = () => {\n                pressedKeys.current.clear();\n                setKeyPressed(false);\n            };\n            target?.addEventListener('keydown', downHandler);\n            target?.addEventListener('keyup', upHandler);\n            window.addEventListener('blur', resetHandler);\n            return () => {\n                target?.removeEventListener('keydown', downHandler);\n                target?.removeEventListener('keyup', upHandler);\n                window.removeEventListener('blur', resetHandler);\n            };\n        }\n    }, [keyCode, setKeyPressed]);\n    return keyPressed;\n};\n// utils\nfunction isMatchingKey(keyCodes, pressedKeys, isUp) {\n    return (keyCodes\n        // we only want to compare same sizes of keyCode definitions\n        // and pressed keys. When the user specified 'Meta' as a key somewhere\n        // this would also be truthy without this filter when user presses 'Meta' + 'r'\n        .filter((keys) => isUp || keys.length === pressedKeys.size)\n        // since we want to support multiple possibilities only one of the\n        // combinations need to be part of the pressed keys\n        .some((keys) => keys.every((k) => pressedKeys.has(k))));\n}\nfunction useKeyOrCode(eventCode, keysToWatch) {\n    return keysToWatch.includes(eventCode) ? 'code' : 'key';\n}\n\nfunction calculateXYZPosition(node, nodeInternals, result, nodeOrigin) {\n    const parentId = node.parentNode || node.parentId;\n    if (!parentId) {\n        return result;\n    }\n    const parentNode = nodeInternals.get(parentId);\n    const parentNodePosition = getNodePositionWithOrigin(parentNode, nodeOrigin);\n    return calculateXYZPosition(parentNode, nodeInternals, {\n        x: (result.x ?? 0) + parentNodePosition.x,\n        y: (result.y ?? 0) + parentNodePosition.y,\n        z: (parentNode[internalsSymbol]?.z ?? 0) > (result.z ?? 0) ? parentNode[internalsSymbol]?.z ?? 0 : result.z ?? 0,\n    }, nodeOrigin);\n}\nfunction updateAbsoluteNodePositions(nodeInternals, nodeOrigin, parentNodes) {\n    nodeInternals.forEach((node) => {\n        const parentId = node.parentNode || node.parentId;\n        if (parentId && !nodeInternals.has(parentId)) {\n            throw new Error(`Parent node ${parentId} not found`);\n        }\n        if (parentId || parentNodes?.[node.id]) {\n            const { x, y, z } = calculateXYZPosition(node, nodeInternals, {\n                ...node.position,\n                z: node[internalsSymbol]?.z ?? 0,\n            }, nodeOrigin);\n            node.positionAbsolute = {\n                x,\n                y,\n            };\n            node[internalsSymbol].z = z;\n            if (parentNodes?.[node.id]) {\n                node[internalsSymbol].isParent = true;\n            }\n        }\n    });\n}\nfunction createNodeInternals(nodes, nodeInternals, nodeOrigin, elevateNodesOnSelect) {\n    const nextNodeInternals = new Map();\n    const parentNodes = {};\n    const selectedNodeZ = elevateNodesOnSelect ? 1000 : 0;\n    nodes.forEach((node) => {\n        const z = (isNumeric(node.zIndex) ? node.zIndex : 0) + (node.selected ? selectedNodeZ : 0);\n        const currInternals = nodeInternals.get(node.id);\n        const internals = {\n            ...node,\n            positionAbsolute: {\n                x: node.position.x,\n                y: node.position.y,\n            },\n        };\n        const parentId = node.parentNode || node.parentId;\n        if (parentId) {\n            parentNodes[parentId] = true;\n        }\n        const resetHandleBounds = currInternals?.type && currInternals?.type !== node.type;\n        Object.defineProperty(internals, internalsSymbol, {\n            enumerable: false,\n            value: {\n                handleBounds: resetHandleBounds ? undefined : currInternals?.[internalsSymbol]?.handleBounds,\n                z,\n            },\n        });\n        nextNodeInternals.set(node.id, internals);\n    });\n    updateAbsoluteNodePositions(nextNodeInternals, nodeOrigin, parentNodes);\n    return nextNodeInternals;\n}\nfunction fitView(get, options = {}) {\n    const { getNodes, width, height, minZoom, maxZoom, d3Zoom, d3Selection, fitViewOnInitDone, fitViewOnInit, nodeOrigin, } = get();\n    const isInitialFitView = options.initial && !fitViewOnInitDone && fitViewOnInit;\n    const d3initialized = d3Zoom && d3Selection;\n    if (d3initialized && (isInitialFitView || !options.initial)) {\n        const nodes = getNodes().filter((n) => {\n            const isVisible = options.includeHiddenNodes ? n.width && n.height : !n.hidden;\n            if (options.nodes?.length) {\n                return isVisible && options.nodes.some((optionNode) => optionNode.id === n.id);\n            }\n            return isVisible;\n        });\n        const nodesInitialized = nodes.every((n) => n.width && n.height);\n        if (nodes.length > 0 && nodesInitialized) {\n            const bounds = getNodesBounds(nodes, nodeOrigin);\n            const { x, y, zoom } = getViewportForBounds(bounds, width, height, options.minZoom ?? minZoom, options.maxZoom ?? maxZoom, options.padding ?? 0.1);\n            const nextTransform = zoomIdentity.translate(x, y).scale(zoom);\n            if (typeof options.duration === 'number' && options.duration > 0) {\n                d3Zoom.transform(getD3Transition(d3Selection, options.duration), nextTransform);\n            }\n            else {\n                d3Zoom.transform(d3Selection, nextTransform);\n            }\n            return true;\n        }\n    }\n    return false;\n}\nfunction handleControlledNodeSelectionChange(nodeChanges, nodeInternals) {\n    nodeChanges.forEach((change) => {\n        const node = nodeInternals.get(change.id);\n        if (node) {\n            nodeInternals.set(node.id, {\n                ...node,\n                [internalsSymbol]: node[internalsSymbol],\n                selected: change.selected,\n            });\n        }\n    });\n    return new Map(nodeInternals);\n}\nfunction handleControlledEdgeSelectionChange(edgeChanges, edges) {\n    return edges.map((e) => {\n        const change = edgeChanges.find((change) => change.id === e.id);\n        if (change) {\n            e.selected = change.selected;\n        }\n        return e;\n    });\n}\nfunction updateNodesAndEdgesSelections({ changedNodes, changedEdges, get, set }) {\n    const { nodeInternals, edges, onNodesChange, onEdgesChange, hasDefaultNodes, hasDefaultEdges } = get();\n    if (changedNodes?.length) {\n        if (hasDefaultNodes) {\n            set({ nodeInternals: handleControlledNodeSelectionChange(changedNodes, nodeInternals) });\n        }\n        onNodesChange?.(changedNodes);\n    }\n    if (changedEdges?.length) {\n        if (hasDefaultEdges) {\n            set({ edges: handleControlledEdgeSelectionChange(changedEdges, edges) });\n        }\n        onEdgesChange?.(changedEdges);\n    }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => { };\nconst initialViewportHelper = {\n    zoomIn: noop,\n    zoomOut: noop,\n    zoomTo: noop,\n    getZoom: () => 1,\n    setViewport: noop,\n    getViewport: () => ({ x: 0, y: 0, zoom: 1 }),\n    fitView: () => false,\n    setCenter: noop,\n    fitBounds: noop,\n    project: (position) => position,\n    screenToFlowPosition: (position) => position,\n    flowToScreenPosition: (position) => position,\n    viewportInitialized: false,\n};\nconst selector$b = (s) => ({\n    d3Zoom: s.d3Zoom,\n    d3Selection: s.d3Selection,\n});\nconst useViewportHelper = () => {\n    const store = useStoreApi();\n    const { d3Zoom, d3Selection } = useStore(selector$b, shallow);\n    const viewportHelperFunctions = useMemo(() => {\n        if (d3Selection && d3Zoom) {\n            return {\n                zoomIn: (options) => d3Zoom.scaleBy(getD3Transition(d3Selection, options?.duration), 1.2),\n                zoomOut: (options) => d3Zoom.scaleBy(getD3Transition(d3Selection, options?.duration), 1 / 1.2),\n                zoomTo: (zoomLevel, options) => d3Zoom.scaleTo(getD3Transition(d3Selection, options?.duration), zoomLevel),\n                getZoom: () => store.getState().transform[2],\n                setViewport: (transform, options) => {\n                    const [x, y, zoom] = store.getState().transform;\n                    const nextTransform = zoomIdentity\n                        .translate(transform.x ?? x, transform.y ?? y)\n                        .scale(transform.zoom ?? zoom);\n                    d3Zoom.transform(getD3Transition(d3Selection, options?.duration), nextTransform);\n                },\n                getViewport: () => {\n                    const [x, y, zoom] = store.getState().transform;\n                    return { x, y, zoom };\n                },\n                fitView: (options) => fitView(store.getState, options),\n                setCenter: (x, y, options) => {\n                    const { width, height, maxZoom } = store.getState();\n                    const nextZoom = typeof options?.zoom !== 'undefined' ? options.zoom : maxZoom;\n                    const centerX = width / 2 - x * nextZoom;\n                    const centerY = height / 2 - y * nextZoom;\n                    const transform = zoomIdentity.translate(centerX, centerY).scale(nextZoom);\n                    d3Zoom.transform(getD3Transition(d3Selection, options?.duration), transform);\n                },\n                fitBounds: (bounds, options) => {\n                    const { width, height, minZoom, maxZoom } = store.getState();\n                    const { x, y, zoom } = getViewportForBounds(bounds, width, height, minZoom, maxZoom, options?.padding ?? 0.1);\n                    const transform = zoomIdentity.translate(x, y).scale(zoom);\n                    d3Zoom.transform(getD3Transition(d3Selection, options?.duration), transform);\n                },\n                // @deprecated Use `screenToFlowPosition`.\n                project: (position) => {\n                    const { transform, snapToGrid, snapGrid } = store.getState();\n                    console.warn('[DEPRECATED] `project` is deprecated. Instead use `screenToFlowPosition`. There is no need to subtract the react flow bounds anymore! https://reactflow.dev/api-reference/types/react-flow-instance#screen-to-flow-position');\n                    return pointToRendererPoint(position, transform, snapToGrid, snapGrid);\n                },\n                screenToFlowPosition: (position) => {\n                    const { transform, snapToGrid, snapGrid, domNode } = store.getState();\n                    if (!domNode) {\n                        return position;\n                    }\n                    const { x: domX, y: domY } = domNode.getBoundingClientRect();\n                    const relativePosition = {\n                        x: position.x - domX,\n                        y: position.y - domY,\n                    };\n                    return pointToRendererPoint(relativePosition, transform, snapToGrid, snapGrid);\n                },\n                flowToScreenPosition: (position) => {\n                    const { transform, domNode } = store.getState();\n                    if (!domNode) {\n                        return position;\n                    }\n                    const { x: domX, y: domY } = domNode.getBoundingClientRect();\n                    const rendererPosition = rendererPointToPoint(position, transform);\n                    return {\n                        x: rendererPosition.x + domX,\n                        y: rendererPosition.y + domY,\n                    };\n                },\n                viewportInitialized: true,\n            };\n        }\n        return initialViewportHelper;\n    }, [d3Zoom, d3Selection]);\n    return viewportHelperFunctions;\n};\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nfunction useReactFlow() {\n    const viewportHelper = useViewportHelper();\n    const store = useStoreApi();\n    const getNodes = useCallback(() => {\n        return store\n            .getState()\n            .getNodes()\n            .map((n) => ({ ...n }));\n    }, []);\n    const getNode = useCallback((id) => {\n        return store.getState().nodeInternals.get(id);\n    }, []);\n    const getEdges = useCallback(() => {\n        const { edges = [] } = store.getState();\n        return edges.map((e) => ({ ...e }));\n    }, []);\n    const getEdge = useCallback((id) => {\n        const { edges = [] } = store.getState();\n        return edges.find((e) => e.id === id);\n    }, []);\n    const setNodes = useCallback((payload) => {\n        const { getNodes, setNodes, hasDefaultNodes, onNodesChange } = store.getState();\n        const nodes = getNodes();\n        const nextNodes = typeof payload === 'function' ? payload(nodes) : payload;\n        if (hasDefaultNodes) {\n            setNodes(nextNodes);\n        }\n        else if (onNodesChange) {\n            const changes = nextNodes.length === 0\n                ? nodes.map((node) => ({ type: 'remove', id: node.id }))\n                : nextNodes.map((node) => ({ item: node, type: 'reset' }));\n            onNodesChange(changes);\n        }\n    }, []);\n    const setEdges = useCallback((payload) => {\n        const { edges = [], setEdges, hasDefaultEdges, onEdgesChange } = store.getState();\n        const nextEdges = typeof payload === 'function' ? payload(edges) : payload;\n        if (hasDefaultEdges) {\n            setEdges(nextEdges);\n        }\n        else if (onEdgesChange) {\n            const changes = nextEdges.length === 0\n                ? edges.map((edge) => ({ type: 'remove', id: edge.id }))\n                : nextEdges.map((edge) => ({ item: edge, type: 'reset' }));\n            onEdgesChange(changes);\n        }\n    }, []);\n    const addNodes = useCallback((payload) => {\n        const nodes = Array.isArray(payload) ? payload : [payload];\n        const { getNodes, setNodes, hasDefaultNodes, onNodesChange } = store.getState();\n        if (hasDefaultNodes) {\n            const currentNodes = getNodes();\n            const nextNodes = [...currentNodes, ...nodes];\n            setNodes(nextNodes);\n        }\n        else if (onNodesChange) {\n            const changes = nodes.map((node) => ({ item: node, type: 'add' }));\n            onNodesChange(changes);\n        }\n    }, []);\n    const addEdges = useCallback((payload) => {\n        const nextEdges = Array.isArray(payload) ? payload : [payload];\n        const { edges = [], setEdges, hasDefaultEdges, onEdgesChange } = store.getState();\n        if (hasDefaultEdges) {\n            setEdges([...edges, ...nextEdges]);\n        }\n        else if (onEdgesChange) {\n            const changes = nextEdges.map((edge) => ({ item: edge, type: 'add' }));\n            onEdgesChange(changes);\n        }\n    }, []);\n    const toObject = useCallback(() => {\n        const { getNodes, edges = [], transform } = store.getState();\n        const [x, y, zoom] = transform;\n        return {\n            nodes: getNodes().map((n) => ({ ...n })),\n            edges: edges.map((e) => ({ ...e })),\n            viewport: {\n                x,\n                y,\n                zoom,\n            },\n        };\n    }, []);\n    const deleteElements = useCallback(({ nodes: nodesDeleted, edges: edgesDeleted }) => {\n        const { nodeInternals, getNodes, edges, hasDefaultNodes, hasDefaultEdges, onNodesDelete, onEdgesDelete, onNodesChange, onEdgesChange, } = store.getState();\n        const nodeIds = (nodesDeleted || []).map((node) => node.id);\n        const edgeIds = (edgesDeleted || []).map((edge) => edge.id);\n        const nodesToRemove = getNodes().reduce((res, node) => {\n            const parentId = node.parentNode || node.parentId;\n            const parentHit = !nodeIds.includes(node.id) && parentId && res.find((n) => n.id === parentId);\n            const deletable = typeof node.deletable === 'boolean' ? node.deletable : true;\n            if (deletable && (nodeIds.includes(node.id) || parentHit)) {\n                res.push(node);\n            }\n            return res;\n        }, []);\n        const deletableEdges = edges.filter((e) => (typeof e.deletable === 'boolean' ? e.deletable : true));\n        const initialHitEdges = deletableEdges.filter((e) => edgeIds.includes(e.id));\n        if (nodesToRemove || initialHitEdges) {\n            const connectedEdges = getConnectedEdges(nodesToRemove, deletableEdges);\n            const edgesToRemove = [...initialHitEdges, ...connectedEdges];\n            const edgeIdsToRemove = edgesToRemove.reduce((res, edge) => {\n                if (!res.includes(edge.id)) {\n                    res.push(edge.id);\n                }\n                return res;\n            }, []);\n            if (hasDefaultEdges || hasDefaultNodes) {\n                if (hasDefaultEdges) {\n                    store.setState({\n                        edges: edges.filter((e) => !edgeIdsToRemove.includes(e.id)),\n                    });\n                }\n                if (hasDefaultNodes) {\n                    nodesToRemove.forEach((node) => {\n                        nodeInternals.delete(node.id);\n                    });\n                    store.setState({\n                        nodeInternals: new Map(nodeInternals),\n                    });\n                }\n            }\n            if (edgeIdsToRemove.length > 0) {\n                onEdgesDelete?.(edgesToRemove);\n                if (onEdgesChange) {\n                    onEdgesChange(edgeIdsToRemove.map((id) => ({\n                        id,\n                        type: 'remove',\n                    })));\n                }\n            }\n            if (nodesToRemove.length > 0) {\n                onNodesDelete?.(nodesToRemove);\n                if (onNodesChange) {\n                    const nodeChanges = nodesToRemove.map((n) => ({ id: n.id, type: 'remove' }));\n                    onNodesChange(nodeChanges);\n                }\n            }\n        }\n    }, []);\n    const getNodeRect = useCallback((nodeOrRect) => {\n        const isRect = isRectObject(nodeOrRect);\n        const node = isRect ? null : store.getState().nodeInternals.get(nodeOrRect.id);\n        if (!isRect && !node) {\n            return [null, null, isRect];\n        }\n        const nodeRect = isRect ? nodeOrRect : nodeToRect(node);\n        return [nodeRect, node, isRect];\n    }, []);\n    const getIntersectingNodes = useCallback((nodeOrRect, partially = true, nodes) => {\n        const [nodeRect, node, isRect] = getNodeRect(nodeOrRect);\n        if (!nodeRect) {\n            return [];\n        }\n        return (nodes || store.getState().getNodes()).filter((n) => {\n            if (!isRect && (n.id === node.id || !n.positionAbsolute)) {\n                return false;\n            }\n            const currNodeRect = nodeToRect(n);\n            const overlappingArea = getOverlappingArea(currNodeRect, nodeRect);\n            const partiallyVisible = partially && overlappingArea > 0;\n            return partiallyVisible || overlappingArea >= nodeRect.width * nodeRect.height;\n        });\n    }, []);\n    const isNodeIntersecting = useCallback((nodeOrRect, area, partially = true) => {\n        const [nodeRect] = getNodeRect(nodeOrRect);\n        if (!nodeRect) {\n            return false;\n        }\n        const overlappingArea = getOverlappingArea(nodeRect, area);\n        const partiallyVisible = partially && overlappingArea > 0;\n        return partiallyVisible || overlappingArea >= nodeRect.width * nodeRect.height;\n    }, []);\n    return useMemo(() => {\n        return {\n            ...viewportHelper,\n            getNodes,\n            getNode,\n            getEdges,\n            getEdge,\n            setNodes,\n            setEdges,\n            addNodes,\n            addEdges,\n            toObject,\n            deleteElements,\n            getIntersectingNodes,\n            isNodeIntersecting,\n        };\n    }, [\n        viewportHelper,\n        getNodes,\n        getNode,\n        getEdges,\n        getEdge,\n        setNodes,\n        setEdges,\n        addNodes,\n        addEdges,\n        toObject,\n        deleteElements,\n        getIntersectingNodes,\n        isNodeIntersecting,\n    ]);\n}\n\nconst deleteKeyOptions = { actInsideInputWithModifier: false };\nvar useGlobalKeyHandler = ({ deleteKeyCode, multiSelectionKeyCode }) => {\n    const store = useStoreApi();\n    const { deleteElements } = useReactFlow();\n    const deleteKeyPressed = useKeyPress(deleteKeyCode, deleteKeyOptions);\n    const multiSelectionKeyPressed = useKeyPress(multiSelectionKeyCode);\n    useEffect(() => {\n        if (deleteKeyPressed) {\n            const { edges, getNodes } = store.getState();\n            const selectedNodes = getNodes().filter((node) => node.selected);\n            const selectedEdges = edges.filter((edge) => edge.selected);\n            deleteElements({ nodes: selectedNodes, edges: selectedEdges });\n            store.setState({ nodesSelectionActive: false });\n        }\n    }, [deleteKeyPressed]);\n    useEffect(() => {\n        store.setState({ multiSelectionActive: multiSelectionKeyPressed });\n    }, [multiSelectionKeyPressed]);\n};\n\nfunction useResizeHandler(rendererNode) {\n    const store = useStoreApi();\n    useEffect(() => {\n        let resizeObserver;\n        const updateDimensions = () => {\n            if (!rendererNode.current) {\n                return;\n            }\n            const size = getDimensions(rendererNode.current);\n            if (size.height === 0 || size.width === 0) {\n                store.getState().onError?.('004', errorMessages['error004']());\n            }\n            store.setState({ width: size.width || 500, height: size.height || 500 });\n        };\n        updateDimensions();\n        window.addEventListener('resize', updateDimensions);\n        if (rendererNode.current) {\n            resizeObserver = new ResizeObserver(() => updateDimensions());\n            resizeObserver.observe(rendererNode.current);\n        }\n        return () => {\n            window.removeEventListener('resize', updateDimensions);\n            if (resizeObserver && rendererNode.current) {\n                resizeObserver.unobserve(rendererNode.current);\n            }\n        };\n    }, []);\n}\n\nconst containerStyle = {\n    position: 'absolute',\n    width: '100%',\n    height: '100%',\n    top: 0,\n    left: 0,\n};\n\n/* eslint-disable @typescript-eslint/ban-ts-comment */\nconst viewChanged = (prevViewport, eventTransform) => prevViewport.x !== eventTransform.x || prevViewport.y !== eventTransform.y || prevViewport.zoom !== eventTransform.k;\nconst eventToFlowTransform = (eventTransform) => ({\n    x: eventTransform.x,\n    y: eventTransform.y,\n    zoom: eventTransform.k,\n});\nconst isWrappedWithClass = (event, className) => event.target.closest(`.${className}`);\nconst isRightClickPan = (panOnDrag, usedButton) => usedButton === 2 && Array.isArray(panOnDrag) && panOnDrag.includes(2);\nconst wheelDelta = (event) => {\n    const factor = event.ctrlKey && isMacOs() ? 10 : 1;\n    return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * factor;\n};\nconst selector$a = (s) => ({\n    d3Zoom: s.d3Zoom,\n    d3Selection: s.d3Selection,\n    d3ZoomHandler: s.d3ZoomHandler,\n    userSelectionActive: s.userSelectionActive,\n});\nconst ZoomPane = ({ onMove, onMoveStart, onMoveEnd, onPaneContextMenu, zoomOnScroll = true, zoomOnPinch = true, panOnScroll = false, panOnScrollSpeed = 0.5, panOnScrollMode = PanOnScrollMode.Free, zoomOnDoubleClick = true, elementsSelectable, panOnDrag = true, defaultViewport, translateExtent, minZoom, maxZoom, zoomActivationKeyCode, preventScrolling = true, children, noWheelClassName, noPanClassName, }) => {\n    const timerId = useRef();\n    const store = useStoreApi();\n    const isZoomingOrPanning = useRef(false);\n    const zoomedWithRightMouseButton = useRef(false);\n    const zoomPane = useRef(null);\n    const prevTransform = useRef({ x: 0, y: 0, zoom: 0 });\n    const { d3Zoom, d3Selection, d3ZoomHandler, userSelectionActive } = useStore(selector$a, shallow);\n    const zoomActivationKeyPressed = useKeyPress(zoomActivationKeyCode);\n    const mouseButton = useRef(0);\n    const isPanScrolling = useRef(false);\n    const panScrollTimeout = useRef();\n    useResizeHandler(zoomPane);\n    useEffect(() => {\n        if (zoomPane.current) {\n            const bbox = zoomPane.current.getBoundingClientRect();\n            const d3ZoomInstance = zoom().scaleExtent([minZoom, maxZoom]).translateExtent(translateExtent);\n            const selection = select(zoomPane.current).call(d3ZoomInstance);\n            const updatedTransform = zoomIdentity\n                .translate(defaultViewport.x, defaultViewport.y)\n                .scale(clamp(defaultViewport.zoom, minZoom, maxZoom));\n            const extent = [\n                [0, 0],\n                [bbox.width, bbox.height],\n            ];\n            const constrainedTransform = d3ZoomInstance.constrain()(updatedTransform, extent, translateExtent);\n            d3ZoomInstance.transform(selection, constrainedTransform);\n            d3ZoomInstance.wheelDelta(wheelDelta);\n            store.setState({\n                d3Zoom: d3ZoomInstance,\n                d3Selection: selection,\n                d3ZoomHandler: selection.on('wheel.zoom'),\n                // we need to pass transform because zoom handler is not registered when we set the initial transform\n                transform: [constrainedTransform.x, constrainedTransform.y, constrainedTransform.k],\n                domNode: zoomPane.current.closest('.react-flow'),\n            });\n        }\n    }, []);\n    useEffect(() => {\n        if (d3Selection && d3Zoom) {\n            if (panOnScroll && !zoomActivationKeyPressed && !userSelectionActive) {\n                d3Selection.on('wheel.zoom', (event) => {\n                    if (isWrappedWithClass(event, noWheelClassName)) {\n                        return false;\n                    }\n                    event.preventDefault();\n                    event.stopImmediatePropagation();\n                    const currentZoom = d3Selection.property('__zoom').k || 1;\n                    // macos and win set ctrlKey=true for pinch gesture on a trackpad\n                    if (event.ctrlKey && zoomOnPinch) {\n                        const point = pointer(event);\n                        const pinchDelta = wheelDelta(event);\n                        const zoom = currentZoom * Math.pow(2, pinchDelta);\n                        // @ts-ignore\n                        d3Zoom.scaleTo(d3Selection, zoom, point, event);\n                        return;\n                    }\n                    // increase scroll speed in firefox\n                    // firefox: deltaMode === 1; chrome: deltaMode === 0\n                    const deltaNormalize = event.deltaMode === 1 ? 20 : 1;\n                    let deltaX = panOnScrollMode === PanOnScrollMode.Vertical ? 0 : event.deltaX * deltaNormalize;\n                    let deltaY = panOnScrollMode === PanOnScrollMode.Horizontal ? 0 : event.deltaY * deltaNormalize;\n                    // this enables vertical scrolling with shift + scroll on windows\n                    if (!isMacOs() && event.shiftKey && panOnScrollMode !== PanOnScrollMode.Vertical) {\n                        deltaX = event.deltaY * deltaNormalize;\n                        deltaY = 0;\n                    }\n                    d3Zoom.translateBy(d3Selection, -(deltaX / currentZoom) * panOnScrollSpeed, -(deltaY / currentZoom) * panOnScrollSpeed, \n                    // @ts-ignore\n                    { internal: true });\n                    const nextViewport = eventToFlowTransform(d3Selection.property('__zoom'));\n                    const { onViewportChangeStart, onViewportChange, onViewportChangeEnd } = store.getState();\n                    clearTimeout(panScrollTimeout.current);\n                    // for pan on scroll we need to handle the event calls on our own\n                    // we can't use the start, zoom and end events from d3-zoom\n                    // because start and move gets called on every scroll event and not once at the beginning\n                    if (!isPanScrolling.current) {\n                        isPanScrolling.current = true;\n                        onMoveStart?.(event, nextViewport);\n                        onViewportChangeStart?.(nextViewport);\n                    }\n                    if (isPanScrolling.current) {\n                        onMove?.(event, nextViewport);\n                        onViewportChange?.(nextViewport);\n                        panScrollTimeout.current = setTimeout(() => {\n                            onMoveEnd?.(event, nextViewport);\n                            onViewportChangeEnd?.(nextViewport);\n                            isPanScrolling.current = false;\n                        }, 150);\n                    }\n                }, { passive: false });\n            }\n            else if (typeof d3ZoomHandler !== 'undefined') {\n                d3Selection.on('wheel.zoom', function (event, d) {\n                    // we still want to enable pinch zooming even if preventScrolling is set to false\n                    const invalidEvent = !preventScrolling && event.type === 'wheel' && !event.ctrlKey;\n                    if (invalidEvent || isWrappedWithClass(event, noWheelClassName)) {\n                        return null;\n                    }\n                    event.preventDefault();\n                    d3ZoomHandler.call(this, event, d);\n                }, { passive: false });\n            }\n        }\n    }, [\n        userSelectionActive,\n        panOnScroll,\n        panOnScrollMode,\n        d3Selection,\n        d3Zoom,\n        d3ZoomHandler,\n        zoomActivationKeyPressed,\n        zoomOnPinch,\n        preventScrolling,\n        noWheelClassName,\n        onMoveStart,\n        onMove,\n        onMoveEnd,\n    ]);\n    useEffect(() => {\n        if (d3Zoom) {\n            d3Zoom.on('start', (event) => {\n                if (!event.sourceEvent || event.sourceEvent.internal) {\n                    return null;\n                }\n                // we need to remember it here, because it's always 0 in the \"zoom\" event\n                mouseButton.current = event.sourceEvent?.button;\n                const { onViewportChangeStart } = store.getState();\n                const flowTransform = eventToFlowTransform(event.transform);\n                isZoomingOrPanning.current = true;\n                prevTransform.current = flowTransform;\n                if (event.sourceEvent?.type === 'mousedown') {\n                    store.setState({ paneDragging: true });\n                }\n                onViewportChangeStart?.(flowTransform);\n                onMoveStart?.(event.sourceEvent, flowTransform);\n            });\n        }\n    }, [d3Zoom, onMoveStart]);\n    useEffect(() => {\n        if (d3Zoom) {\n            if (userSelectionActive && !isZoomingOrPanning.current) {\n                d3Zoom.on('zoom', null);\n            }\n            else if (!userSelectionActive) {\n                d3Zoom.on('zoom', (event) => {\n                    const { onViewportChange } = store.getState();\n                    store.setState({ transform: [event.transform.x, event.transform.y, event.transform.k] });\n                    zoomedWithRightMouseButton.current = !!(onPaneContextMenu && isRightClickPan(panOnDrag, mouseButton.current ?? 0));\n                    if ((onMove || onViewportChange) && !event.sourceEvent?.internal) {\n                        const flowTransform = eventToFlowTransform(event.transform);\n                        onViewportChange?.(flowTransform);\n                        onMove?.(event.sourceEvent, flowTransform);\n                    }\n                });\n            }\n        }\n    }, [userSelectionActive, d3Zoom, onMove, panOnDrag, onPaneContextMenu]);\n    useEffect(() => {\n        if (d3Zoom) {\n            d3Zoom.on('end', (event) => {\n                if (!event.sourceEvent || event.sourceEvent.internal) {\n                    return null;\n                }\n                const { onViewportChangeEnd } = store.getState();\n                isZoomingOrPanning.current = false;\n                store.setState({ paneDragging: false });\n                if (onPaneContextMenu &&\n                    isRightClickPan(panOnDrag, mouseButton.current ?? 0) &&\n                    !zoomedWithRightMouseButton.current) {\n                    onPaneContextMenu(event.sourceEvent);\n                }\n                zoomedWithRightMouseButton.current = false;\n                if ((onMoveEnd || onViewportChangeEnd) && viewChanged(prevTransform.current, event.transform)) {\n                    const flowTransform = eventToFlowTransform(event.transform);\n                    prevTransform.current = flowTransform;\n                    clearTimeout(timerId.current);\n                    timerId.current = setTimeout(() => {\n                        onViewportChangeEnd?.(flowTransform);\n                        onMoveEnd?.(event.sourceEvent, flowTransform);\n                    }, panOnScroll ? 150 : 0);\n                }\n            });\n        }\n    }, [d3Zoom, panOnScroll, panOnDrag, onMoveEnd, onPaneContextMenu]);\n    useEffect(() => {\n        if (d3Zoom) {\n            d3Zoom.filter((event) => {\n                const zoomScroll = zoomActivationKeyPressed || zoomOnScroll;\n                const pinchZoom = zoomOnPinch && event.ctrlKey;\n                if ((panOnDrag === true || (Array.isArray(panOnDrag) && panOnDrag.includes(1))) &&\n                    event.button === 1 &&\n                    event.type === 'mousedown' &&\n                    (isWrappedWithClass(event, 'react-flow__node') || isWrappedWithClass(event, 'react-flow__edge'))) {\n                    return true;\n                }\n                // if all interactions are disabled, we prevent all zoom events\n                if (!panOnDrag && !zoomScroll && !panOnScroll && !zoomOnDoubleClick && !zoomOnPinch) {\n                    return false;\n                }\n                // during a selection we prevent all other interactions\n                if (userSelectionActive) {\n                    return false;\n                }\n                // if zoom on double click is disabled, we prevent the double click event\n                if (!zoomOnDoubleClick && event.type === 'dblclick') {\n                    return false;\n                }\n                // if the target element is inside an element with the nowheel class, we prevent zooming\n                if (isWrappedWithClass(event, noWheelClassName) && event.type === 'wheel') {\n                    return false;\n                }\n                // if the target element is inside an element with the nopan class, we prevent panning\n                if (isWrappedWithClass(event, noPanClassName) &&\n                    (event.type !== 'wheel' || (panOnScroll && event.type === 'wheel' && !zoomActivationKeyPressed))) {\n                    return false;\n                }\n                if (!zoomOnPinch && event.ctrlKey && event.type === 'wheel') {\n                    return false;\n                }\n                // when there is no scroll handling enabled, we prevent all wheel events\n                if (!zoomScroll && !panOnScroll && !pinchZoom && event.type === 'wheel') {\n                    return false;\n                }\n                // if the pane is not movable, we prevent dragging it with mousestart or touchstart\n                if (!panOnDrag && (event.type === 'mousedown' || event.type === 'touchstart')) {\n                    return false;\n                }\n                // if the pane is only movable using allowed clicks\n                if (Array.isArray(panOnDrag) && !panOnDrag.includes(event.button) && event.type === 'mousedown') {\n                    return false;\n                }\n                // We only allow right clicks if pan on drag is set to right click\n                const buttonAllowed = (Array.isArray(panOnDrag) && panOnDrag.includes(event.button)) || !event.button || event.button <= 1;\n                // default filter for d3-zoom\n                return (!event.ctrlKey || event.type === 'wheel') && buttonAllowed;\n            });\n        }\n    }, [\n        userSelectionActive,\n        d3Zoom,\n        zoomOnScroll,\n        zoomOnPinch,\n        panOnScroll,\n        zoomOnDoubleClick,\n        panOnDrag,\n        elementsSelectable,\n        zoomActivationKeyPressed,\n    ]);\n    return (React.createElement(\"div\", { className: \"react-flow__renderer\", ref: zoomPane, style: containerStyle }, children));\n};\n\nconst selector$9 = (s) => ({\n    userSelectionActive: s.userSelectionActive,\n    userSelectionRect: s.userSelectionRect,\n});\nfunction UserSelection() {\n    const { userSelectionActive, userSelectionRect } = useStore(selector$9, shallow);\n    const isActive = userSelectionActive && userSelectionRect;\n    if (!isActive) {\n        return null;\n    }\n    return (React.createElement(\"div\", { className: \"react-flow__selection react-flow__container\", style: {\n            width: userSelectionRect.width,\n            height: userSelectionRect.height,\n            transform: `translate(${userSelectionRect.x}px, ${userSelectionRect.y}px)`,\n        } }));\n}\n\nfunction handleParentExpand(res, updateItem) {\n    const parentId = updateItem.parentNode || updateItem.parentId;\n    const parent = res.find((e) => e.id === parentId);\n    if (parent) {\n        const extendWidth = updateItem.position.x + updateItem.width - parent.width;\n        const extendHeight = updateItem.position.y + updateItem.height - parent.height;\n        if (extendWidth > 0 || extendHeight > 0 || updateItem.position.x < 0 || updateItem.position.y < 0) {\n            parent.style = { ...parent.style } || {};\n            parent.style.width = parent.style.width ?? parent.width;\n            parent.style.height = parent.style.height ?? parent.height;\n            if (extendWidth > 0) {\n                parent.style.width += extendWidth;\n            }\n            if (extendHeight > 0) {\n                parent.style.height += extendHeight;\n            }\n            if (updateItem.position.x < 0) {\n                const xDiff = Math.abs(updateItem.position.x);\n                parent.position.x = parent.position.x - xDiff;\n                parent.style.width += xDiff;\n                updateItem.position.x = 0;\n            }\n            if (updateItem.position.y < 0) {\n                const yDiff = Math.abs(updateItem.position.y);\n                parent.position.y = parent.position.y - yDiff;\n                parent.style.height += yDiff;\n                updateItem.position.y = 0;\n            }\n            parent.width = parent.style.width;\n            parent.height = parent.style.height;\n        }\n    }\n}\nfunction applyChanges(changes, elements) {\n    // we need this hack to handle the setNodes and setEdges function of the useReactFlow hook for controlled flows\n    if (changes.some((c) => c.type === 'reset')) {\n        return changes.filter((c) => c.type === 'reset').map((c) => c.item);\n    }\n    const initElements = changes.filter((c) => c.type === 'add').map((c) => c.item);\n    return elements.reduce((res, item) => {\n        const currentChanges = changes.filter((c) => c.id === item.id);\n        if (currentChanges.length === 0) {\n            res.push(item);\n            return res;\n        }\n        const updateItem = { ...item };\n        for (const currentChange of currentChanges) {\n            if (currentChange) {\n                switch (currentChange.type) {\n                    case 'select': {\n                        updateItem.selected = currentChange.selected;\n                        break;\n                    }\n                    case 'position': {\n                        if (typeof currentChange.position !== 'undefined') {\n                            updateItem.position = currentChange.position;\n                        }\n                        if (typeof currentChange.positionAbsolute !== 'undefined') {\n                            updateItem.positionAbsolute = currentChange.positionAbsolute;\n                        }\n                        if (typeof currentChange.dragging !== 'undefined') {\n                            updateItem.dragging = currentChange.dragging;\n                        }\n                        if (updateItem.expandParent) {\n                            handleParentExpand(res, updateItem);\n                        }\n                        break;\n                    }\n                    case 'dimensions': {\n                        if (typeof currentChange.dimensions !== 'undefined') {\n                            updateItem.width = currentChange.dimensions.width;\n                            updateItem.height = currentChange.dimensions.height;\n                        }\n                        if (typeof currentChange.updateStyle !== 'undefined') {\n                            updateItem.style = { ...(updateItem.style || {}), ...currentChange.dimensions };\n                        }\n                        if (typeof currentChange.resizing === 'boolean') {\n                            updateItem.resizing = currentChange.resizing;\n                        }\n                        if (updateItem.expandParent) {\n                            handleParentExpand(res, updateItem);\n                        }\n                        break;\n                    }\n                    case 'remove': {\n                        return res;\n                    }\n                }\n            }\n        }\n        res.push(updateItem);\n        return res;\n    }, initElements);\n}\nfunction applyNodeChanges(changes, nodes) {\n    return applyChanges(changes, nodes);\n}\nfunction applyEdgeChanges(changes, edges) {\n    return applyChanges(changes, edges);\n}\nconst createSelectionChange = (id, selected) => ({\n    id,\n    type: 'select',\n    selected,\n});\nfunction getSelectionChanges(items, selectedIds) {\n    return items.reduce((res, item) => {\n        const willBeSelected = selectedIds.includes(item.id);\n        if (!item.selected && willBeSelected) {\n            item.selected = true;\n            res.push(createSelectionChange(item.id, true));\n        }\n        else if (item.selected && !willBeSelected) {\n            item.selected = false;\n            res.push(createSelectionChange(item.id, false));\n        }\n        return res;\n    }, []);\n}\n\n/**\n * The user selection rectangle gets displayed when a user drags the mouse while pressing shift\n */\nconst wrapHandler = (handler, containerRef) => {\n    return (event) => {\n        if (event.target !== containerRef.current) {\n            return;\n        }\n        handler?.(event);\n    };\n};\nconst selector$8 = (s) => ({\n    userSelectionActive: s.userSelectionActive,\n    elementsSelectable: s.elementsSelectable,\n    dragging: s.paneDragging,\n});\nconst Pane = memo(({ isSelecting, selectionMode = SelectionMode.Full, panOnDrag, onSelectionStart, onSelectionEnd, onPaneClick, onPaneContextMenu, onPaneScroll, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, children, }) => {\n    const container = useRef(null);\n    const store = useStoreApi();\n    const prevSelectedNodesCount = useRef(0);\n    const prevSelectedEdgesCount = useRef(0);\n    const containerBounds = useRef();\n    const { userSelectionActive, elementsSelectable, dragging } = useStore(selector$8, shallow);\n    const resetUserSelection = () => {\n        store.setState({ userSelectionActive: false, userSelectionRect: null });\n        prevSelectedNodesCount.current = 0;\n        prevSelectedEdgesCount.current = 0;\n    };\n    const onClick = (event) => {\n        onPaneClick?.(event);\n        store.getState().resetSelectedElements();\n        store.setState({ nodesSelectionActive: false });\n    };\n    const onContextMenu = (event) => {\n        if (Array.isArray(panOnDrag) && panOnDrag?.includes(2)) {\n            event.preventDefault();\n            return;\n        }\n        onPaneContextMenu?.(event);\n    };\n    const onWheel = onPaneScroll ? (event) => onPaneScroll(event) : undefined;\n    const onMouseDown = (event) => {\n        const { resetSelectedElements, domNode } = store.getState();\n        containerBounds.current = domNode?.getBoundingClientRect();\n        if (!elementsSelectable ||\n            !isSelecting ||\n            event.button !== 0 ||\n            event.target !== container.current ||\n            !containerBounds.current) {\n            return;\n        }\n        const { x, y } = getEventPosition(event, containerBounds.current);\n        resetSelectedElements();\n        store.setState({\n            userSelectionRect: {\n                width: 0,\n                height: 0,\n                startX: x,\n                startY: y,\n                x,\n                y,\n            },\n        });\n        onSelectionStart?.(event);\n    };\n    const onMouseMove = (event) => {\n        const { userSelectionRect, nodeInternals, edges, transform, onNodesChange, onEdgesChange, nodeOrigin, getNodes } = store.getState();\n        if (!isSelecting || !containerBounds.current || !userSelectionRect) {\n            return;\n        }\n        store.setState({ userSelectionActive: true, nodesSelectionActive: false });\n        const mousePos = getEventPosition(event, containerBounds.current);\n        const startX = userSelectionRect.startX ?? 0;\n        const startY = userSelectionRect.startY ?? 0;\n        const nextUserSelectRect = {\n            ...userSelectionRect,\n            x: mousePos.x < startX ? mousePos.x : startX,\n            y: mousePos.y < startY ? mousePos.y : startY,\n            width: Math.abs(mousePos.x - startX),\n            height: Math.abs(mousePos.y - startY),\n        };\n        const nodes = getNodes();\n        const selectedNodes = getNodesInside(nodeInternals, nextUserSelectRect, transform, selectionMode === SelectionMode.Partial, true, nodeOrigin);\n        const selectedEdgeIds = getConnectedEdges(selectedNodes, edges).map((e) => e.id);\n        const selectedNodeIds = selectedNodes.map((n) => n.id);\n        if (prevSelectedNodesCount.current !== selectedNodeIds.length) {\n            prevSelectedNodesCount.current = selectedNodeIds.length;\n            const changes = getSelectionChanges(nodes, selectedNodeIds);\n            if (changes.length) {\n                onNodesChange?.(changes);\n            }\n        }\n        if (prevSelectedEdgesCount.current !== selectedEdgeIds.length) {\n            prevSelectedEdgesCount.current = selectedEdgeIds.length;\n            const changes = getSelectionChanges(edges, selectedEdgeIds);\n            if (changes.length) {\n                onEdgesChange?.(changes);\n            }\n        }\n        store.setState({\n            userSelectionRect: nextUserSelectRect,\n        });\n    };\n    const onMouseUp = (event) => {\n        if (event.button !== 0) {\n            return;\n        }\n        const { userSelectionRect } = store.getState();\n        // We only want to trigger click functions when in selection mode if\n        // the user did not move the mouse.\n        if (!userSelectionActive && userSelectionRect && event.target === container.current) {\n            onClick?.(event);\n        }\n        store.setState({ nodesSelectionActive: prevSelectedNodesCount.current > 0 });\n        resetUserSelection();\n        onSelectionEnd?.(event);\n    };\n    const onMouseLeave = (event) => {\n        if (userSelectionActive) {\n            store.setState({ nodesSelectionActive: prevSelectedNodesCount.current > 0 });\n            onSelectionEnd?.(event);\n        }\n        resetUserSelection();\n    };\n    const hasActiveSelection = elementsSelectable && (isSelecting || userSelectionActive);\n    return (React.createElement(\"div\", { className: cc(['react-flow__pane', { dragging, selection: isSelecting }]), onClick: hasActiveSelection ? undefined : wrapHandler(onClick, container), onContextMenu: wrapHandler(onContextMenu, container), onWheel: wrapHandler(onWheel, container), onMouseEnter: hasActiveSelection ? undefined : onPaneMouseEnter, onMouseDown: hasActiveSelection ? onMouseDown : undefined, onMouseMove: hasActiveSelection ? onMouseMove : onPaneMouseMove, onMouseUp: hasActiveSelection ? onMouseUp : undefined, onMouseLeave: hasActiveSelection ? onMouseLeave : onPaneMouseLeave, ref: container, style: containerStyle },\n        children,\n        React.createElement(UserSelection, null)));\n});\nPane.displayName = 'Pane';\n\nfunction isParentSelected(node, nodeInternals) {\n    const parentId = node.parentNode || node.parentId;\n    if (!parentId) {\n        return false;\n    }\n    const parentNode = nodeInternals.get(parentId);\n    if (!parentNode) {\n        return false;\n    }\n    if (parentNode.selected) {\n        return true;\n    }\n    return isParentSelected(parentNode, nodeInternals);\n}\nfunction hasSelector(target, selector, nodeRef) {\n    let current = target;\n    do {\n        if (current?.matches(selector))\n            return true;\n        if (current === nodeRef.current)\n            return false;\n        current = current.parentElement;\n    } while (current);\n    return false;\n}\n// looks for all selected nodes and created a NodeDragItem for each of them\nfunction getDragItems(nodeInternals, nodesDraggable, mousePos, nodeId) {\n    return Array.from(nodeInternals.values())\n        .filter((n) => (n.selected || n.id === nodeId) &&\n        (!n.parentNode || n.parentId || !isParentSelected(n, nodeInternals)) &&\n        (n.draggable || (nodesDraggable && typeof n.draggable === 'undefined')))\n        .map((n) => ({\n        id: n.id,\n        position: n.position || { x: 0, y: 0 },\n        positionAbsolute: n.positionAbsolute || { x: 0, y: 0 },\n        distance: {\n            x: mousePos.x - (n.positionAbsolute?.x ?? 0),\n            y: mousePos.y - (n.positionAbsolute?.y ?? 0),\n        },\n        delta: {\n            x: 0,\n            y: 0,\n        },\n        extent: n.extent,\n        parentNode: n.parentNode || n.parentId,\n        parentId: n.parentNode || n.parentId,\n        width: n.width,\n        height: n.height,\n        expandParent: n.expandParent,\n    }));\n}\nfunction clampNodeExtent(node, extent) {\n    if (!extent || extent === 'parent') {\n        return extent;\n    }\n    return [extent[0], [extent[1][0] - (node.width || 0), extent[1][1] - (node.height || 0)]];\n}\nfunction calcNextPosition(node, nextPosition, nodeInternals, nodeExtent, nodeOrigin = [0, 0], onError) {\n    const clampedNodeExtent = clampNodeExtent(node, node.extent || nodeExtent);\n    let currentExtent = clampedNodeExtent;\n    const parentId = node.parentNode || node.parentId;\n    if (node.extent === 'parent' && !node.expandParent) {\n        if (parentId && node.width && node.height) {\n            const parent = nodeInternals.get(parentId);\n            const { x: parentX, y: parentY } = getNodePositionWithOrigin(parent, nodeOrigin).positionAbsolute;\n            currentExtent =\n                parent && isNumeric(parentX) && isNumeric(parentY) && isNumeric(parent.width) && isNumeric(parent.height)\n                    ? [\n                        [parentX + node.width * nodeOrigin[0], parentY + node.height * nodeOrigin[1]],\n                        [\n                            parentX + parent.width - node.width + node.width * nodeOrigin[0],\n                            parentY + parent.height - node.height + node.height * nodeOrigin[1],\n                        ],\n                    ]\n                    : currentExtent;\n        }\n        else {\n            onError?.('005', errorMessages['error005']());\n            currentExtent = clampedNodeExtent;\n        }\n    }\n    else if (node.extent && parentId && node.extent !== 'parent') {\n        const parent = nodeInternals.get(parentId);\n        const { x: parentX, y: parentY } = getNodePositionWithOrigin(parent, nodeOrigin).positionAbsolute;\n        currentExtent = [\n            [node.extent[0][0] + parentX, node.extent[0][1] + parentY],\n            [node.extent[1][0] + parentX, node.extent[1][1] + parentY],\n        ];\n    }\n    let parentPosition = { x: 0, y: 0 };\n    if (parentId) {\n        const parentNode = nodeInternals.get(parentId);\n        parentPosition = getNodePositionWithOrigin(parentNode, nodeOrigin).positionAbsolute;\n    }\n    const positionAbsolute = currentExtent && currentExtent !== 'parent'\n        ? clampPosition(nextPosition, currentExtent)\n        : nextPosition;\n    return {\n        position: {\n            x: positionAbsolute.x - parentPosition.x,\n            y: positionAbsolute.y - parentPosition.y,\n        },\n        positionAbsolute,\n    };\n}\n// returns two params:\n// 1. the dragged node (or the first of the list, if we are dragging a node selection)\n// 2. array of selected nodes (for multi selections)\nfunction getEventHandlerParams({ nodeId, dragItems, nodeInternals, }) {\n    const extentedDragItems = dragItems.map((n) => {\n        const node = nodeInternals.get(n.id);\n        return {\n            ...node,\n            position: n.position,\n            positionAbsolute: n.positionAbsolute,\n        };\n    });\n    return [nodeId ? extentedDragItems.find((n) => n.id === nodeId) : extentedDragItems[0], extentedDragItems];\n}\n\nconst getHandleBounds = (selector, nodeElement, zoom, nodeOrigin) => {\n    const handles = nodeElement.querySelectorAll(selector);\n    if (!handles || !handles.length) {\n        return null;\n    }\n    const handlesArray = Array.from(handles);\n    const nodeBounds = nodeElement.getBoundingClientRect();\n    const nodeOffset = {\n        x: nodeBounds.width * nodeOrigin[0],\n        y: nodeBounds.height * nodeOrigin[1],\n    };\n    return handlesArray.map((handle) => {\n        const handleBounds = handle.getBoundingClientRect();\n        return {\n            id: handle.getAttribute('data-handleid'),\n            position: handle.getAttribute('data-handlepos'),\n            x: (handleBounds.left - nodeBounds.left - nodeOffset.x) / zoom,\n            y: (handleBounds.top - nodeBounds.top - nodeOffset.y) / zoom,\n            ...getDimensions(handle),\n        };\n    });\n};\nfunction getMouseHandler(id, getState, handler) {\n    return handler === undefined\n        ? handler\n        : (event) => {\n            const node = getState().nodeInternals.get(id);\n            if (node) {\n                handler(event, { ...node });\n            }\n        };\n}\n// this handler is called by\n// 1. the click handler when node is not draggable or selectNodesOnDrag = false\n// or\n// 2. the on drag start handler when node is draggable and selectNodesOnDrag = true\nfunction handleNodeClick({ id, store, unselect = false, nodeRef, }) {\n    const { addSelectedNodes, unselectNodesAndEdges, multiSelectionActive, nodeInternals, onError } = store.getState();\n    const node = nodeInternals.get(id);\n    if (!node) {\n        onError?.('012', errorMessages['error012'](id));\n        return;\n    }\n    store.setState({ nodesSelectionActive: false });\n    if (!node.selected) {\n        addSelectedNodes([id]);\n    }\n    else if (unselect || (node.selected && multiSelectionActive)) {\n        unselectNodesAndEdges({ nodes: [node], edges: [] });\n        requestAnimationFrame(() => nodeRef?.current?.blur());\n    }\n}\n\nfunction useGetPointerPosition() {\n    const store = useStoreApi();\n    // returns the pointer position projected to the RF coordinate system\n    const getPointerPosition = useCallback(({ sourceEvent }) => {\n        const { transform, snapGrid, snapToGrid } = store.getState();\n        const x = sourceEvent.touches ? sourceEvent.touches[0].clientX : sourceEvent.clientX;\n        const y = sourceEvent.touches ? sourceEvent.touches[0].clientY : sourceEvent.clientY;\n        const pointerPos = {\n            x: (x - transform[0]) / transform[2],\n            y: (y - transform[1]) / transform[2],\n        };\n        // we need the snapped position in order to be able to skip unnecessary drag events\n        return {\n            xSnapped: snapToGrid ? snapGrid[0] * Math.round(pointerPos.x / snapGrid[0]) : pointerPos.x,\n            ySnapped: snapToGrid ? snapGrid[1] * Math.round(pointerPos.y / snapGrid[1]) : pointerPos.y,\n            ...pointerPos,\n        };\n    }, []);\n    return getPointerPosition;\n}\n\nfunction wrapSelectionDragFunc(selectionFunc) {\n    return (event, _, nodes) => selectionFunc?.(event, nodes);\n}\nfunction useDrag({ nodeRef, disabled = false, noDragClassName, handleSelector, nodeId, isSelectable, selectNodesOnDrag, }) {\n    const store = useStoreApi();\n    const [dragging, setDragging] = useState(false);\n    const dragItems = useRef([]);\n    const lastPos = useRef({ x: null, y: null });\n    const autoPanId = useRef(0);\n    const containerBounds = useRef(null);\n    const mousePosition = useRef({ x: 0, y: 0 });\n    const dragEvent = useRef(null);\n    const autoPanStarted = useRef(false);\n    const dragStarted = useRef(false);\n    const abortDrag = useRef(false);\n    const getPointerPosition = useGetPointerPosition();\n    useEffect(() => {\n        if (nodeRef?.current) {\n            const selection = select(nodeRef.current);\n            const updateNodes = ({ x, y }) => {\n                const { nodeInternals, onNodeDrag, onSelectionDrag, updateNodePositions, nodeExtent, snapGrid, snapToGrid, nodeOrigin, onError, } = store.getState();\n                lastPos.current = { x, y };\n                let hasChange = false;\n                let nodesBox = { x: 0, y: 0, x2: 0, y2: 0 };\n                if (dragItems.current.length > 1 && nodeExtent) {\n                    const rect = getNodesBounds(dragItems.current, nodeOrigin);\n                    nodesBox = rectToBox(rect);\n                }\n                dragItems.current = dragItems.current.map((n) => {\n                    const nextPosition = { x: x - n.distance.x, y: y - n.distance.y };\n                    if (snapToGrid) {\n                        nextPosition.x = snapGrid[0] * Math.round(nextPosition.x / snapGrid[0]);\n                        nextPosition.y = snapGrid[1] * Math.round(nextPosition.y / snapGrid[1]);\n                    }\n                    // if there is selection with multiple nodes and a node extent is set, we need to adjust the node extent for each node\n                    // based on its position so that the node stays at it's position relative to the selection.\n                    const adjustedNodeExtent = [\n                        [nodeExtent[0][0], nodeExtent[0][1]],\n                        [nodeExtent[1][0], nodeExtent[1][1]],\n                    ];\n                    if (dragItems.current.length > 1 && nodeExtent && !n.extent) {\n                        adjustedNodeExtent[0][0] = n.positionAbsolute.x - nodesBox.x + nodeExtent[0][0];\n                        adjustedNodeExtent[1][0] = n.positionAbsolute.x + (n.width ?? 0) - nodesBox.x2 + nodeExtent[1][0];\n                        adjustedNodeExtent[0][1] = n.positionAbsolute.y - nodesBox.y + nodeExtent[0][1];\n                        adjustedNodeExtent[1][1] = n.positionAbsolute.y + (n.height ?? 0) - nodesBox.y2 + nodeExtent[1][1];\n                    }\n                    const updatedPos = calcNextPosition(n, nextPosition, nodeInternals, adjustedNodeExtent, nodeOrigin, onError);\n                    // we want to make sure that we only fire a change event when there is a change\n                    hasChange = hasChange || n.position.x !== updatedPos.position.x || n.position.y !== updatedPos.position.y;\n                    n.position = updatedPos.position;\n                    n.positionAbsolute = updatedPos.positionAbsolute;\n                    return n;\n                });\n                if (!hasChange) {\n                    return;\n                }\n                updateNodePositions(dragItems.current, true, true);\n                setDragging(true);\n                const onDrag = nodeId ? onNodeDrag : wrapSelectionDragFunc(onSelectionDrag);\n                if (onDrag && dragEvent.current) {\n                    const [currentNode, nodes] = getEventHandlerParams({\n                        nodeId,\n                        dragItems: dragItems.current,\n                        nodeInternals,\n                    });\n                    onDrag(dragEvent.current, currentNode, nodes);\n                }\n            };\n            const autoPan = () => {\n                if (!containerBounds.current) {\n                    return;\n                }\n                const [xMovement, yMovement] = calcAutoPan(mousePosition.current, containerBounds.current);\n                if (xMovement !== 0 || yMovement !== 0) {\n                    const { transform, panBy } = store.getState();\n                    lastPos.current.x = (lastPos.current.x ?? 0) - xMovement / transform[2];\n                    lastPos.current.y = (lastPos.current.y ?? 0) - yMovement / transform[2];\n                    if (panBy({ x: xMovement, y: yMovement })) {\n                        updateNodes(lastPos.current);\n                    }\n                }\n                autoPanId.current = requestAnimationFrame(autoPan);\n            };\n            const startDrag = (event) => {\n                const { nodeInternals, multiSelectionActive, nodesDraggable, unselectNodesAndEdges, onNodeDragStart, onSelectionDragStart, } = store.getState();\n                dragStarted.current = true;\n                const onStart = nodeId ? onNodeDragStart : wrapSelectionDragFunc(onSelectionDragStart);\n                if ((!selectNodesOnDrag || !isSelectable) && !multiSelectionActive && nodeId) {\n                    if (!nodeInternals.get(nodeId)?.selected) {\n                        // we need to reset selected nodes when selectNodesOnDrag=false\n                        unselectNodesAndEdges();\n                    }\n                }\n                if (nodeId && isSelectable && selectNodesOnDrag) {\n                    handleNodeClick({\n                        id: nodeId,\n                        store,\n                        nodeRef: nodeRef,\n                    });\n                }\n                const pointerPos = getPointerPosition(event);\n                lastPos.current = pointerPos;\n                dragItems.current = getDragItems(nodeInternals, nodesDraggable, pointerPos, nodeId);\n                if (onStart && dragItems.current) {\n                    const [currentNode, nodes] = getEventHandlerParams({\n                        nodeId,\n                        dragItems: dragItems.current,\n                        nodeInternals,\n                    });\n                    onStart(event.sourceEvent, currentNode, nodes);\n                }\n            };\n            if (disabled) {\n                selection.on('.drag', null);\n            }\n            else {\n                const dragHandler = drag()\n                    .on('start', (event) => {\n                    const { domNode, nodeDragThreshold } = store.getState();\n                    if (nodeDragThreshold === 0) {\n                        startDrag(event);\n                    }\n                    abortDrag.current = false;\n                    const pointerPos = getPointerPosition(event);\n                    lastPos.current = pointerPos;\n                    containerBounds.current = domNode?.getBoundingClientRect() || null;\n                    mousePosition.current = getEventPosition(event.sourceEvent, containerBounds.current);\n                })\n                    .on('drag', (event) => {\n                    const pointerPos = getPointerPosition(event);\n                    const { autoPanOnNodeDrag, nodeDragThreshold } = store.getState();\n                    if (event.sourceEvent.type === 'touchmove' && event.sourceEvent.touches.length > 1) {\n                        abortDrag.current = true;\n                    }\n                    if (abortDrag.current) {\n                        return;\n                    }\n                    if (!autoPanStarted.current && dragStarted.current && autoPanOnNodeDrag) {\n                        autoPanStarted.current = true;\n                        autoPan();\n                    }\n                    if (!dragStarted.current) {\n                        const x = pointerPos.xSnapped - (lastPos?.current?.x ?? 0);\n                        const y = pointerPos.ySnapped - (lastPos?.current?.y ?? 0);\n                        const distance = Math.sqrt(x * x + y * y);\n                        if (distance > nodeDragThreshold) {\n                            startDrag(event);\n                        }\n                    }\n                    // skip events without movement\n                    if ((lastPos.current.x !== pointerPos.xSnapped || lastPos.current.y !== pointerPos.ySnapped) &&\n                        dragItems.current &&\n                        dragStarted.current) {\n                        dragEvent.current = event.sourceEvent;\n                        mousePosition.current = getEventPosition(event.sourceEvent, containerBounds.current);\n                        updateNodes(pointerPos);\n                    }\n                })\n                    .on('end', (event) => {\n                    if (!dragStarted.current || abortDrag.current) {\n                        return;\n                    }\n                    setDragging(false);\n                    autoPanStarted.current = false;\n                    dragStarted.current = false;\n                    cancelAnimationFrame(autoPanId.current);\n                    if (dragItems.current) {\n                        const { updateNodePositions, nodeInternals, onNodeDragStop, onSelectionDragStop } = store.getState();\n                        const onStop = nodeId ? onNodeDragStop : wrapSelectionDragFunc(onSelectionDragStop);\n                        updateNodePositions(dragItems.current, false, false);\n                        if (onStop) {\n                            const [currentNode, nodes] = getEventHandlerParams({\n                                nodeId,\n                                dragItems: dragItems.current,\n                                nodeInternals,\n                            });\n                            onStop(event.sourceEvent, currentNode, nodes);\n                        }\n                    }\n                })\n                    .filter((event) => {\n                    const target = event.target;\n                    const isDraggable = !event.button &&\n                        (!noDragClassName || !hasSelector(target, `.${noDragClassName}`, nodeRef)) &&\n                        (!handleSelector || hasSelector(target, handleSelector, nodeRef));\n                    return isDraggable;\n                });\n                selection.call(dragHandler);\n                return () => {\n                    selection.on('.drag', null);\n                };\n            }\n        }\n    }, [\n        nodeRef,\n        disabled,\n        noDragClassName,\n        handleSelector,\n        isSelectable,\n        store,\n        nodeId,\n        selectNodesOnDrag,\n        getPointerPosition,\n    ]);\n    return dragging;\n}\n\nfunction useUpdateNodePositions() {\n    const store = useStoreApi();\n    const updatePositions = useCallback((params) => {\n        const { nodeInternals, nodeExtent, updateNodePositions, getNodes, snapToGrid, snapGrid, onError, nodesDraggable } = store.getState();\n        const selectedNodes = getNodes().filter((n) => n.selected && (n.draggable || (nodesDraggable && typeof n.draggable === 'undefined')));\n        // by default a node moves 5px on each key press, or 20px if shift is pressed\n        // if snap grid is enabled, we use that for the velocity.\n        const xVelo = snapToGrid ? snapGrid[0] : 5;\n        const yVelo = snapToGrid ? snapGrid[1] : 5;\n        const factor = params.isShiftPressed ? 4 : 1;\n        const positionDiffX = params.x * xVelo * factor;\n        const positionDiffY = params.y * yVelo * factor;\n        const nodeUpdates = selectedNodes.map((n) => {\n            if (n.positionAbsolute) {\n                const nextPosition = { x: n.positionAbsolute.x + positionDiffX, y: n.positionAbsolute.y + positionDiffY };\n                if (snapToGrid) {\n                    nextPosition.x = snapGrid[0] * Math.round(nextPosition.x / snapGrid[0]);\n                    nextPosition.y = snapGrid[1] * Math.round(nextPosition.y / snapGrid[1]);\n                }\n                const { positionAbsolute, position } = calcNextPosition(n, nextPosition, nodeInternals, nodeExtent, undefined, onError);\n                n.position = position;\n                n.positionAbsolute = positionAbsolute;\n            }\n            return n;\n        });\n        updateNodePositions(nodeUpdates, true, false);\n    }, []);\n    return updatePositions;\n}\n\nconst arrowKeyDiffs = {\n    ArrowUp: { x: 0, y: -1 },\n    ArrowDown: { x: 0, y: 1 },\n    ArrowLeft: { x: -1, y: 0 },\n    ArrowRight: { x: 1, y: 0 },\n};\nvar wrapNode = (NodeComponent) => {\n    const NodeWrapper = ({ id, type, data, xPos, yPos, xPosOrigin, yPosOrigin, selected, onClick, onMouseEnter, onMouseMove, onMouseLeave, onContextMenu, onDoubleClick, style, className, isDraggable, isSelectable, isConnectable, isFocusable, selectNodesOnDrag, sourcePosition, targetPosition, hidden, resizeObserver, dragHandle, zIndex, isParent, noDragClassName, noPanClassName, initialized, disableKeyboardA11y, ariaLabel, rfId, hasHandleBounds, }) => {\n        const store = useStoreApi();\n        const nodeRef = useRef(null);\n        const prevNodeRef = useRef(null);\n        const prevSourcePosition = useRef(sourcePosition);\n        const prevTargetPosition = useRef(targetPosition);\n        const prevType = useRef(type);\n        const hasPointerEvents = isSelectable || isDraggable || onClick || onMouseEnter || onMouseMove || onMouseLeave;\n        const updatePositions = useUpdateNodePositions();\n        const onMouseEnterHandler = getMouseHandler(id, store.getState, onMouseEnter);\n        const onMouseMoveHandler = getMouseHandler(id, store.getState, onMouseMove);\n        const onMouseLeaveHandler = getMouseHandler(id, store.getState, onMouseLeave);\n        const onContextMenuHandler = getMouseHandler(id, store.getState, onContextMenu);\n        const onDoubleClickHandler = getMouseHandler(id, store.getState, onDoubleClick);\n        const onSelectNodeHandler = (event) => {\n            const { nodeDragThreshold } = store.getState();\n            if (isSelectable && (!selectNodesOnDrag || !isDraggable || nodeDragThreshold > 0)) {\n                // this handler gets called within the drag start event when selectNodesOnDrag=true\n                handleNodeClick({\n                    id,\n                    store,\n                    nodeRef,\n                });\n            }\n            if (onClick) {\n                const node = store.getState().nodeInternals.get(id);\n                if (node) {\n                    onClick(event, { ...node });\n                }\n            }\n        };\n        const onKeyDown = (event) => {\n            if (isInputDOMNode(event)) {\n                return;\n            }\n            if (disableKeyboardA11y) {\n                return;\n            }\n            if (elementSelectionKeys.includes(event.key) && isSelectable) {\n                const unselect = event.key === 'Escape';\n                handleNodeClick({\n                    id,\n                    store,\n                    unselect,\n                    nodeRef,\n                });\n            }\n            else if (isDraggable && selected && Object.prototype.hasOwnProperty.call(arrowKeyDiffs, event.key)) {\n                store.setState({\n                    ariaLiveMessage: `Moved selected node ${event.key\n                        .replace('Arrow', '')\n                        .toLowerCase()}. New position, x: ${~~xPos}, y: ${~~yPos}`,\n                });\n                updatePositions({\n                    x: arrowKeyDiffs[event.key].x,\n                    y: arrowKeyDiffs[event.key].y,\n                    isShiftPressed: event.shiftKey,\n                });\n            }\n        };\n        useEffect(() => {\n            return () => {\n                if (prevNodeRef.current) {\n                    resizeObserver?.unobserve(prevNodeRef.current);\n                    prevNodeRef.current = null;\n                }\n            };\n        }, []);\n        useEffect(() => {\n            if (nodeRef.current && !hidden) {\n                const currNode = nodeRef.current;\n                if (!initialized || !hasHandleBounds || prevNodeRef.current !== currNode) {\n                    // At this point we always want to make sure that the node gets re-measured / re-initialized.\n                    // We need to unobserve it first in case it is still observed\n                    if (prevNodeRef.current) {\n                        resizeObserver?.unobserve(prevNodeRef.current);\n                    }\n                    resizeObserver?.observe(currNode);\n                    prevNodeRef.current = currNode;\n                }\n            }\n        }, [hidden, initialized, hasHandleBounds]);\n        useEffect(() => {\n            // when the user programmatically changes the source or handle position, we re-initialize the node\n            const typeChanged = prevType.current !== type;\n            const sourcePosChanged = prevSourcePosition.current !== sourcePosition;\n            const targetPosChanged = prevTargetPosition.current !== targetPosition;\n            if (nodeRef.current && (typeChanged || sourcePosChanged || targetPosChanged)) {\n                if (typeChanged) {\n                    prevType.current = type;\n                }\n                if (sourcePosChanged) {\n                    prevSourcePosition.current = sourcePosition;\n                }\n                if (targetPosChanged) {\n                    prevTargetPosition.current = targetPosition;\n                }\n                store.getState().updateNodeDimensions([{ id, nodeElement: nodeRef.current, forceUpdate: true }]);\n            }\n        }, [id, type, sourcePosition, targetPosition]);\n        const dragging = useDrag({\n            nodeRef,\n            disabled: hidden || !isDraggable,\n            noDragClassName,\n            handleSelector: dragHandle,\n            nodeId: id,\n            isSelectable,\n            selectNodesOnDrag,\n        });\n        if (hidden) {\n            return null;\n        }\n        return (React.createElement(\"div\", { className: cc([\n                'react-flow__node',\n                `react-flow__node-${type}`,\n                {\n                    // this is overwritable by passing `nopan` as a class name\n                    [noPanClassName]: isDraggable,\n                },\n                className,\n                {\n                    selected,\n                    selectable: isSelectable,\n                    parent: isParent,\n                    dragging,\n                },\n            ]), ref: nodeRef, style: {\n                zIndex,\n                transform: `translate(${xPosOrigin}px,${yPosOrigin}px)`,\n                pointerEvents: hasPointerEvents ? 'all' : 'none',\n                visibility: initialized ? 'visible' : 'hidden',\n                ...style,\n            }, \"data-id\": id, \"data-testid\": `rf__node-${id}`, onMouseEnter: onMouseEnterHandler, onMouseMove: onMouseMoveHandler, onMouseLeave: onMouseLeaveHandler, onContextMenu: onContextMenuHandler, onClick: onSelectNodeHandler, onDoubleClick: onDoubleClickHandler, onKeyDown: isFocusable ? onKeyDown : undefined, tabIndex: isFocusable ? 0 : undefined, role: isFocusable ? 'button' : undefined, \"aria-describedby\": disableKeyboardA11y ? undefined : `${ARIA_NODE_DESC_KEY}-${rfId}`, \"aria-label\": ariaLabel },\n            React.createElement(Provider, { value: id },\n                React.createElement(NodeComponent, { id: id, data: data, type: type, xPos: xPos, yPos: yPos, selected: selected, isConnectable: isConnectable, sourcePosition: sourcePosition, targetPosition: targetPosition, dragging: dragging, dragHandle: dragHandle, zIndex: zIndex }))));\n    };\n    NodeWrapper.displayName = 'NodeWrapper';\n    return memo(NodeWrapper);\n};\n\n/**\n * The nodes selection rectangle gets displayed when a user\n * made a selection with on or several nodes\n */\nconst selector$7 = (s) => {\n    const selectedNodes = s.getNodes().filter((n) => n.selected);\n    return {\n        ...getNodesBounds(selectedNodes, s.nodeOrigin),\n        transformString: `translate(${s.transform[0]}px,${s.transform[1]}px) scale(${s.transform[2]})`,\n        userSelectionActive: s.userSelectionActive,\n    };\n};\nfunction NodesSelection({ onSelectionContextMenu, noPanClassName, disableKeyboardA11y }) {\n    const store = useStoreApi();\n    const { width, height, x: left, y: top, transformString, userSelectionActive } = useStore(selector$7, shallow);\n    const updatePositions = useUpdateNodePositions();\n    const nodeRef = useRef(null);\n    useEffect(() => {\n        if (!disableKeyboardA11y) {\n            nodeRef.current?.focus({\n                preventScroll: true,\n            });\n        }\n    }, [disableKeyboardA11y]);\n    useDrag({\n        nodeRef,\n    });\n    if (userSelectionActive || !width || !height) {\n        return null;\n    }\n    const onContextMenu = onSelectionContextMenu\n        ? (event) => {\n            const selectedNodes = store\n                .getState()\n                .getNodes()\n                .filter((n) => n.selected);\n            onSelectionContextMenu(event, selectedNodes);\n        }\n        : undefined;\n    const onKeyDown = (event) => {\n        if (Object.prototype.hasOwnProperty.call(arrowKeyDiffs, event.key)) {\n            updatePositions({\n                x: arrowKeyDiffs[event.key].x,\n                y: arrowKeyDiffs[event.key].y,\n                isShiftPressed: event.shiftKey,\n            });\n        }\n    };\n    return (React.createElement(\"div\", { className: cc(['react-flow__nodesselection', 'react-flow__container', noPanClassName]), style: {\n            transform: transformString,\n        } },\n        React.createElement(\"div\", { ref: nodeRef, className: \"react-flow__nodesselection-rect\", onContextMenu: onContextMenu, tabIndex: disableKeyboardA11y ? undefined : -1, onKeyDown: disableKeyboardA11y ? undefined : onKeyDown, style: {\n                width,\n                height,\n                top,\n                left,\n            } })));\n}\nvar NodesSelection$1 = memo(NodesSelection);\n\nconst selector$6 = (s) => s.nodesSelectionActive;\nconst FlowRenderer = ({ children, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneContextMenu, onPaneScroll, deleteKeyCode, onMove, onMoveStart, onMoveEnd, selectionKeyCode, selectionOnDrag, selectionMode, onSelectionStart, onSelectionEnd, multiSelectionKeyCode, panActivationKeyCode, zoomActivationKeyCode, elementsSelectable, zoomOnScroll, zoomOnPinch, panOnScroll: _panOnScroll, panOnScrollSpeed, panOnScrollMode, zoomOnDoubleClick, panOnDrag: _panOnDrag, defaultViewport, translateExtent, minZoom, maxZoom, preventScrolling, onSelectionContextMenu, noWheelClassName, noPanClassName, disableKeyboardA11y, }) => {\n    const nodesSelectionActive = useStore(selector$6);\n    const selectionKeyPressed = useKeyPress(selectionKeyCode);\n    const panActivationKeyPressed = useKeyPress(panActivationKeyCode);\n    const panOnDrag = panActivationKeyPressed || _panOnDrag;\n    const panOnScroll = panActivationKeyPressed || _panOnScroll;\n    const isSelecting = selectionKeyPressed || (selectionOnDrag && panOnDrag !== true);\n    useGlobalKeyHandler({ deleteKeyCode, multiSelectionKeyCode });\n    return (React.createElement(ZoomPane, { onMove: onMove, onMoveStart: onMoveStart, onMoveEnd: onMoveEnd, onPaneContextMenu: onPaneContextMenu, elementsSelectable: elementsSelectable, zoomOnScroll: zoomOnScroll, zoomOnPinch: zoomOnPinch, panOnScroll: panOnScroll, panOnScrollSpeed: panOnScrollSpeed, panOnScrollMode: panOnScrollMode, zoomOnDoubleClick: zoomOnDoubleClick, panOnDrag: !selectionKeyPressed && panOnDrag, defaultViewport: defaultViewport, translateExtent: translateExtent, minZoom: minZoom, maxZoom: maxZoom, zoomActivationKeyCode: zoomActivationKeyCode, preventScrolling: preventScrolling, noWheelClassName: noWheelClassName, noPanClassName: noPanClassName },\n        React.createElement(Pane, { onSelectionStart: onSelectionStart, onSelectionEnd: onSelectionEnd, onPaneClick: onPaneClick, onPaneMouseEnter: onPaneMouseEnter, onPaneMouseMove: onPaneMouseMove, onPaneMouseLeave: onPaneMouseLeave, onPaneContextMenu: onPaneContextMenu, onPaneScroll: onPaneScroll, panOnDrag: panOnDrag, isSelecting: !!isSelecting, selectionMode: selectionMode },\n            children,\n            nodesSelectionActive && (React.createElement(NodesSelection$1, { onSelectionContextMenu: onSelectionContextMenu, noPanClassName: noPanClassName, disableKeyboardA11y: disableKeyboardA11y })))));\n};\nFlowRenderer.displayName = 'FlowRenderer';\nvar FlowRenderer$1 = memo(FlowRenderer);\n\nfunction useVisibleNodes(onlyRenderVisible) {\n    const nodes = useStore(useCallback((s) => onlyRenderVisible\n        ? getNodesInside(s.nodeInternals, { x: 0, y: 0, width: s.width, height: s.height }, s.transform, true)\n        : s.getNodes(), [onlyRenderVisible]));\n    return nodes;\n}\n\nfunction createNodeTypes(nodeTypes) {\n    const standardTypes = {\n        input: wrapNode((nodeTypes.input || InputNode$1)),\n        default: wrapNode((nodeTypes.default || DefaultNode$1)),\n        output: wrapNode((nodeTypes.output || OutputNode$1)),\n        group: wrapNode((nodeTypes.group || GroupNode)),\n    };\n    const wrappedTypes = {};\n    const specialTypes = Object.keys(nodeTypes)\n        .filter((k) => !['input', 'default', 'output', 'group'].includes(k))\n        .reduce((res, key) => {\n        res[key] = wrapNode((nodeTypes[key] || DefaultNode$1));\n        return res;\n    }, wrappedTypes);\n    return {\n        ...standardTypes,\n        ...specialTypes,\n    };\n}\nconst getPositionWithOrigin = ({ x, y, width, height, origin, }) => {\n    if (!width || !height) {\n        return { x, y };\n    }\n    if (origin[0] < 0 || origin[1] < 0 || origin[0] > 1 || origin[1] > 1) {\n        return { x, y };\n    }\n    return {\n        x: x - width * origin[0],\n        y: y - height * origin[1],\n    };\n};\n\nconst selector$5 = (s) => ({\n    nodesDraggable: s.nodesDraggable,\n    nodesConnectable: s.nodesConnectable,\n    nodesFocusable: s.nodesFocusable,\n    elementsSelectable: s.elementsSelectable,\n    updateNodeDimensions: s.updateNodeDimensions,\n    onError: s.onError,\n});\nconst NodeRenderer = (props) => {\n    const { nodesDraggable, nodesConnectable, nodesFocusable, elementsSelectable, updateNodeDimensions, onError } = useStore(selector$5, shallow);\n    const nodes = useVisibleNodes(props.onlyRenderVisibleElements);\n    const resizeObserverRef = useRef();\n    const resizeObserver = useMemo(() => {\n        if (typeof ResizeObserver === 'undefined') {\n            return null;\n        }\n        const observer = new ResizeObserver((entries) => {\n            const updates = entries.map((entry) => ({\n                id: entry.target.getAttribute('data-id'),\n                nodeElement: entry.target,\n                forceUpdate: true,\n            }));\n            updateNodeDimensions(updates);\n        });\n        resizeObserverRef.current = observer;\n        return observer;\n    }, []);\n    useEffect(() => {\n        return () => {\n            resizeObserverRef?.current?.disconnect();\n        };\n    }, []);\n    return (React.createElement(\"div\", { className: \"react-flow__nodes\", style: containerStyle }, nodes.map((node) => {\n        let nodeType = node.type || 'default';\n        if (!props.nodeTypes[nodeType]) {\n            onError?.('003', errorMessages['error003'](nodeType));\n            nodeType = 'default';\n        }\n        const NodeComponent = (props.nodeTypes[nodeType] || props.nodeTypes.default);\n        const isDraggable = !!(node.draggable || (nodesDraggable && typeof node.draggable === 'undefined'));\n        const isSelectable = !!(node.selectable || (elementsSelectable && typeof node.selectable === 'undefined'));\n        const isConnectable = !!(node.connectable || (nodesConnectable && typeof node.connectable === 'undefined'));\n        const isFocusable = !!(node.focusable || (nodesFocusable && typeof node.focusable === 'undefined'));\n        const clampedPosition = props.nodeExtent\n            ? clampPosition(node.positionAbsolute, props.nodeExtent)\n            : node.positionAbsolute;\n        const posX = clampedPosition?.x ?? 0;\n        const posY = clampedPosition?.y ?? 0;\n        const posOrigin = getPositionWithOrigin({\n            x: posX,\n            y: posY,\n            width: node.width ?? 0,\n            height: node.height ?? 0,\n            origin: props.nodeOrigin,\n        });\n        return (React.createElement(NodeComponent, { key: node.id, id: node.id, className: node.className, style: node.style, type: nodeType, data: node.data, sourcePosition: node.sourcePosition || Position.Bottom, targetPosition: node.targetPosition || Position.Top, hidden: node.hidden, xPos: posX, yPos: posY, xPosOrigin: posOrigin.x, yPosOrigin: posOrigin.y, selectNodesOnDrag: props.selectNodesOnDrag, onClick: props.onNodeClick, onMouseEnter: props.onNodeMouseEnter, onMouseMove: props.onNodeMouseMove, onMouseLeave: props.onNodeMouseLeave, onContextMenu: props.onNodeContextMenu, onDoubleClick: props.onNodeDoubleClick, selected: !!node.selected, isDraggable: isDraggable, isSelectable: isSelectable, isConnectable: isConnectable, isFocusable: isFocusable, resizeObserver: resizeObserver, dragHandle: node.dragHandle, zIndex: node[internalsSymbol]?.z ?? 0, isParent: !!node[internalsSymbol]?.isParent, noDragClassName: props.noDragClassName, noPanClassName: props.noPanClassName, initialized: !!node.width && !!node.height, rfId: props.rfId, disableKeyboardA11y: props.disableKeyboardA11y, ariaLabel: node.ariaLabel, hasHandleBounds: !!node[internalsSymbol]?.handleBounds }));\n    })));\n};\nNodeRenderer.displayName = 'NodeRenderer';\nvar NodeRenderer$1 = memo(NodeRenderer);\n\nconst shiftX = (x, shift, position) => {\n    if (position === Position.Left)\n        return x - shift;\n    if (position === Position.Right)\n        return x + shift;\n    return x;\n};\nconst shiftY = (y, shift, position) => {\n    if (position === Position.Top)\n        return y - shift;\n    if (position === Position.Bottom)\n        return y + shift;\n    return y;\n};\nconst EdgeUpdaterClassName = 'react-flow__edgeupdater';\nconst EdgeAnchor = ({ position, centerX, centerY, radius = 10, onMouseDown, onMouseEnter, onMouseOut, type, }) => (React.createElement(\"circle\", { onMouseDown: onMouseDown, onMouseEnter: onMouseEnter, onMouseOut: onMouseOut, className: cc([EdgeUpdaterClassName, `${EdgeUpdaterClassName}-${type}`]), cx: shiftX(centerX, radius, position), cy: shiftY(centerY, radius, position), r: radius, stroke: \"transparent\", fill: \"transparent\" }));\n\nconst alwaysValidConnection = () => true;\nvar wrapEdge = (EdgeComponent) => {\n    const EdgeWrapper = ({ id, className, type, data, onClick, onEdgeDoubleClick, selected, animated, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, source, target, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, elementsSelectable, hidden, sourceHandleId, targetHandleId, onContextMenu, onMouseEnter, onMouseMove, onMouseLeave, reconnectRadius, onReconnect, onReconnectStart, onReconnectEnd, markerEnd, markerStart, rfId, ariaLabel, isFocusable, isReconnectable, pathOptions, interactionWidth, disableKeyboardA11y, }) => {\n        const edgeRef = useRef(null);\n        const [updateHover, setUpdateHover] = useState(false);\n        const [updating, setUpdating] = useState(false);\n        const store = useStoreApi();\n        const markerStartUrl = useMemo(() => `url('#${getMarkerId(markerStart, rfId)}')`, [markerStart, rfId]);\n        const markerEndUrl = useMemo(() => `url('#${getMarkerId(markerEnd, rfId)}')`, [markerEnd, rfId]);\n        if (hidden) {\n            return null;\n        }\n        const onEdgeClick = (event) => {\n            const { edges, addSelectedEdges, unselectNodesAndEdges, multiSelectionActive } = store.getState();\n            const edge = edges.find((e) => e.id === id);\n            if (!edge) {\n                return;\n            }\n            if (elementsSelectable) {\n                store.setState({ nodesSelectionActive: false });\n                if (edge.selected && multiSelectionActive) {\n                    unselectNodesAndEdges({ nodes: [], edges: [edge] });\n                    edgeRef.current?.blur();\n                }\n                else {\n                    addSelectedEdges([id]);\n                }\n            }\n            if (onClick) {\n                onClick(event, edge);\n            }\n        };\n        const onEdgeDoubleClickHandler = getMouseHandler$1(id, store.getState, onEdgeDoubleClick);\n        const onEdgeContextMenu = getMouseHandler$1(id, store.getState, onContextMenu);\n        const onEdgeMouseEnter = getMouseHandler$1(id, store.getState, onMouseEnter);\n        const onEdgeMouseMove = getMouseHandler$1(id, store.getState, onMouseMove);\n        const onEdgeMouseLeave = getMouseHandler$1(id, store.getState, onMouseLeave);\n        const handleEdgeUpdater = (event, isSourceHandle) => {\n            // avoid triggering edge updater if mouse btn is not left\n            if (event.button !== 0) {\n                return;\n            }\n            const { edges, isValidConnection: isValidConnectionStore } = store.getState();\n            const nodeId = isSourceHandle ? target : source;\n            const handleId = (isSourceHandle ? targetHandleId : sourceHandleId) || null;\n            const handleType = isSourceHandle ? 'target' : 'source';\n            const isValidConnection = isValidConnectionStore || alwaysValidConnection;\n            const isTarget = isSourceHandle;\n            const edge = edges.find((e) => e.id === id);\n            setUpdating(true);\n            onReconnectStart?.(event, edge, handleType);\n            const _onReconnectEnd = (evt) => {\n                setUpdating(false);\n                onReconnectEnd?.(evt, edge, handleType);\n            };\n            const onConnectEdge = (connection) => onReconnect?.(edge, connection);\n            handlePointerDown({\n                event,\n                handleId,\n                nodeId,\n                onConnect: onConnectEdge,\n                isTarget,\n                getState: store.getState,\n                setState: store.setState,\n                isValidConnection,\n                edgeUpdaterType: handleType,\n                onReconnectEnd: _onReconnectEnd,\n            });\n        };\n        const onEdgeUpdaterSourceMouseDown = (event) => handleEdgeUpdater(event, true);\n        const onEdgeUpdaterTargetMouseDown = (event) => handleEdgeUpdater(event, false);\n        const onEdgeUpdaterMouseEnter = () => setUpdateHover(true);\n        const onEdgeUpdaterMouseOut = () => setUpdateHover(false);\n        const inactive = !elementsSelectable && !onClick;\n        const onKeyDown = (event) => {\n            if (!disableKeyboardA11y && elementSelectionKeys.includes(event.key) && elementsSelectable) {\n                const { unselectNodesAndEdges, addSelectedEdges, edges } = store.getState();\n                const unselect = event.key === 'Escape';\n                if (unselect) {\n                    edgeRef.current?.blur();\n                    unselectNodesAndEdges({ edges: [edges.find((e) => e.id === id)] });\n                }\n                else {\n                    addSelectedEdges([id]);\n                }\n            }\n        };\n        return (React.createElement(\"g\", { className: cc([\n                'react-flow__edge',\n                `react-flow__edge-${type}`,\n                className,\n                { selected, animated, inactive, updating: updateHover },\n            ]), onClick: onEdgeClick, onDoubleClick: onEdgeDoubleClickHandler, onContextMenu: onEdgeContextMenu, onMouseEnter: onEdgeMouseEnter, onMouseMove: onEdgeMouseMove, onMouseLeave: onEdgeMouseLeave, onKeyDown: isFocusable ? onKeyDown : undefined, tabIndex: isFocusable ? 0 : undefined, role: isFocusable ? 'button' : 'img', \"data-testid\": `rf__edge-${id}`, \"aria-label\": ariaLabel === null ? undefined : ariaLabel ? ariaLabel : `Edge from ${source} to ${target}`, \"aria-describedby\": isFocusable ? `${ARIA_EDGE_DESC_KEY}-${rfId}` : undefined, ref: edgeRef },\n            !updating && (React.createElement(EdgeComponent, { id: id, source: source, target: target, selected: selected, animated: animated, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius, data: data, style: style, sourceX: sourceX, sourceY: sourceY, targetX: targetX, targetY: targetY, sourcePosition: sourcePosition, targetPosition: targetPosition, sourceHandleId: sourceHandleId, targetHandleId: targetHandleId, markerStart: markerStartUrl, markerEnd: markerEndUrl, pathOptions: pathOptions, interactionWidth: interactionWidth })),\n            isReconnectable && (React.createElement(React.Fragment, null,\n                (isReconnectable === 'source' || isReconnectable === true) && (React.createElement(EdgeAnchor, { position: sourcePosition, centerX: sourceX, centerY: sourceY, radius: reconnectRadius, onMouseDown: onEdgeUpdaterSourceMouseDown, onMouseEnter: onEdgeUpdaterMouseEnter, onMouseOut: onEdgeUpdaterMouseOut, type: \"source\" })),\n                (isReconnectable === 'target' || isReconnectable === true) && (React.createElement(EdgeAnchor, { position: targetPosition, centerX: targetX, centerY: targetY, radius: reconnectRadius, onMouseDown: onEdgeUpdaterTargetMouseDown, onMouseEnter: onEdgeUpdaterMouseEnter, onMouseOut: onEdgeUpdaterMouseOut, type: \"target\" }))))));\n    };\n    EdgeWrapper.displayName = 'EdgeWrapper';\n    return memo(EdgeWrapper);\n};\n\nfunction createEdgeTypes(edgeTypes) {\n    const standardTypes = {\n        default: wrapEdge((edgeTypes.default || BezierEdge)),\n        straight: wrapEdge((edgeTypes.bezier || StraightEdge)),\n        step: wrapEdge((edgeTypes.step || StepEdge)),\n        smoothstep: wrapEdge((edgeTypes.step || SmoothStepEdge)),\n        simplebezier: wrapEdge((edgeTypes.simplebezier || SimpleBezierEdge)),\n    };\n    const wrappedTypes = {};\n    const specialTypes = Object.keys(edgeTypes)\n        .filter((k) => !['default', 'bezier'].includes(k))\n        .reduce((res, key) => {\n        res[key] = wrapEdge((edgeTypes[key] || BezierEdge));\n        return res;\n    }, wrappedTypes);\n    return {\n        ...standardTypes,\n        ...specialTypes,\n    };\n}\nfunction getHandlePosition(position, nodeRect, handle = null) {\n    const x = (handle?.x || 0) + nodeRect.x;\n    const y = (handle?.y || 0) + nodeRect.y;\n    const width = handle?.width || nodeRect.width;\n    const height = handle?.height || nodeRect.height;\n    switch (position) {\n        case Position.Top:\n            return {\n                x: x + width / 2,\n                y,\n            };\n        case Position.Right:\n            return {\n                x: x + width,\n                y: y + height / 2,\n            };\n        case Position.Bottom:\n            return {\n                x: x + width / 2,\n                y: y + height,\n            };\n        case Position.Left:\n            return {\n                x,\n                y: y + height / 2,\n            };\n    }\n}\nfunction getHandle(bounds, handleId) {\n    if (!bounds) {\n        return null;\n    }\n    if (bounds.length === 1 || !handleId) {\n        return bounds[0];\n    }\n    else if (handleId) {\n        return bounds.find((d) => d.id === handleId) || null;\n    }\n    return null;\n}\nconst getEdgePositions = (sourceNodeRect, sourceHandle, sourcePosition, targetNodeRect, targetHandle, targetPosition) => {\n    const sourceHandlePos = getHandlePosition(sourcePosition, sourceNodeRect, sourceHandle);\n    const targetHandlePos = getHandlePosition(targetPosition, targetNodeRect, targetHandle);\n    return {\n        sourceX: sourceHandlePos.x,\n        sourceY: sourceHandlePos.y,\n        targetX: targetHandlePos.x,\n        targetY: targetHandlePos.y,\n    };\n};\nfunction isEdgeVisible({ sourcePos, targetPos, sourceWidth, sourceHeight, targetWidth, targetHeight, width, height, transform, }) {\n    const edgeBox = {\n        x: Math.min(sourcePos.x, targetPos.x),\n        y: Math.min(sourcePos.y, targetPos.y),\n        x2: Math.max(sourcePos.x + sourceWidth, targetPos.x + targetWidth),\n        y2: Math.max(sourcePos.y + sourceHeight, targetPos.y + targetHeight),\n    };\n    if (edgeBox.x === edgeBox.x2) {\n        edgeBox.x2 += 1;\n    }\n    if (edgeBox.y === edgeBox.y2) {\n        edgeBox.y2 += 1;\n    }\n    const viewBox = rectToBox({\n        x: (0 - transform[0]) / transform[2],\n        y: (0 - transform[1]) / transform[2],\n        width: width / transform[2],\n        height: height / transform[2],\n    });\n    const xOverlap = Math.max(0, Math.min(viewBox.x2, edgeBox.x2) - Math.max(viewBox.x, edgeBox.x));\n    const yOverlap = Math.max(0, Math.min(viewBox.y2, edgeBox.y2) - Math.max(viewBox.y, edgeBox.y));\n    const overlappingArea = Math.ceil(xOverlap * yOverlap);\n    return overlappingArea > 0;\n}\nfunction getNodeData(node) {\n    const handleBounds = node?.[internalsSymbol]?.handleBounds || null;\n    const isValid = handleBounds &&\n        node?.width &&\n        node?.height &&\n        typeof node?.positionAbsolute?.x !== 'undefined' &&\n        typeof node?.positionAbsolute?.y !== 'undefined';\n    return [\n        {\n            x: node?.positionAbsolute?.x || 0,\n            y: node?.positionAbsolute?.y || 0,\n            width: node?.width || 0,\n            height: node?.height || 0,\n        },\n        handleBounds,\n        !!isValid,\n    ];\n}\n\nconst defaultEdgeTree = [{ level: 0, isMaxLevel: true, edges: [] }];\nfunction groupEdgesByZLevel(edges, nodeInternals, elevateEdgesOnSelect = false) {\n    let maxLevel = -1;\n    const levelLookup = edges.reduce((tree, edge) => {\n        const hasZIndex = isNumeric(edge.zIndex);\n        let z = hasZIndex ? edge.zIndex : 0;\n        if (elevateEdgesOnSelect) {\n            const targetNode = nodeInternals.get(edge.target);\n            const sourceNode = nodeInternals.get(edge.source);\n            const edgeOrConnectedNodeSelected = edge.selected || targetNode?.selected || sourceNode?.selected;\n            const selectedZIndex = Math.max(sourceNode?.[internalsSymbol]?.z || 0, targetNode?.[internalsSymbol]?.z || 0, 1000);\n            z = (hasZIndex ? edge.zIndex : 0) + (edgeOrConnectedNodeSelected ? selectedZIndex : 0);\n        }\n        if (tree[z]) {\n            tree[z].push(edge);\n        }\n        else {\n            tree[z] = [edge];\n        }\n        maxLevel = z > maxLevel ? z : maxLevel;\n        return tree;\n    }, {});\n    const edgeTree = Object.entries(levelLookup).map(([key, edges]) => {\n        const level = +key;\n        return {\n            edges,\n            level,\n            isMaxLevel: level === maxLevel,\n        };\n    });\n    if (edgeTree.length === 0) {\n        return defaultEdgeTree;\n    }\n    return edgeTree;\n}\nfunction useVisibleEdges(onlyRenderVisible, nodeInternals, elevateEdgesOnSelect) {\n    const edges = useStore(useCallback((s) => {\n        if (!onlyRenderVisible) {\n            return s.edges;\n        }\n        return s.edges.filter((e) => {\n            const sourceNode = nodeInternals.get(e.source);\n            const targetNode = nodeInternals.get(e.target);\n            return (sourceNode?.width &&\n                sourceNode?.height &&\n                targetNode?.width &&\n                targetNode?.height &&\n                isEdgeVisible({\n                    sourcePos: sourceNode.positionAbsolute || { x: 0, y: 0 },\n                    targetPos: targetNode.positionAbsolute || { x: 0, y: 0 },\n                    sourceWidth: sourceNode.width,\n                    sourceHeight: sourceNode.height,\n                    targetWidth: targetNode.width,\n                    targetHeight: targetNode.height,\n                    width: s.width,\n                    height: s.height,\n                    transform: s.transform,\n                }));\n        });\n    }, [onlyRenderVisible, nodeInternals]));\n    return groupEdgesByZLevel(edges, nodeInternals, elevateEdgesOnSelect);\n}\n\nconst ArrowSymbol = ({ color = 'none', strokeWidth = 1 }) => {\n    return (React.createElement(\"polyline\", { style: {\n            stroke: color,\n            strokeWidth,\n        }, strokeLinecap: \"round\", strokeLinejoin: \"round\", fill: \"none\", points: \"-5,-4 0,0 -5,4\" }));\n};\nconst ArrowClosedSymbol = ({ color = 'none', strokeWidth = 1 }) => {\n    return (React.createElement(\"polyline\", { style: {\n            stroke: color,\n            fill: color,\n            strokeWidth,\n        }, strokeLinecap: \"round\", strokeLinejoin: \"round\", points: \"-5,-4 0,0 -5,4 -5,-4\" }));\n};\nconst MarkerSymbols = {\n    [MarkerType.Arrow]: ArrowSymbol,\n    [MarkerType.ArrowClosed]: ArrowClosedSymbol,\n};\nfunction useMarkerSymbol(type) {\n    const store = useStoreApi();\n    const symbol = useMemo(() => {\n        const symbolExists = Object.prototype.hasOwnProperty.call(MarkerSymbols, type);\n        if (!symbolExists) {\n            store.getState().onError?.('009', errorMessages['error009'](type));\n            return null;\n        }\n        return MarkerSymbols[type];\n    }, [type]);\n    return symbol;\n}\n\nconst Marker = ({ id, type, color, width = 12.5, height = 12.5, markerUnits = 'strokeWidth', strokeWidth, orient = 'auto-start-reverse', }) => {\n    const Symbol = useMarkerSymbol(type);\n    if (!Symbol) {\n        return null;\n    }\n    return (React.createElement(\"marker\", { className: \"react-flow__arrowhead\", id: id, markerWidth: `${width}`, markerHeight: `${height}`, viewBox: \"-10 -10 20 20\", markerUnits: markerUnits, orient: orient, refX: \"0\", refY: \"0\" },\n        React.createElement(Symbol, { color: color, strokeWidth: strokeWidth })));\n};\nconst markerSelector = ({ defaultColor, rfId }) => (s) => {\n    const ids = [];\n    return s.edges\n        .reduce((markers, edge) => {\n        [edge.markerStart, edge.markerEnd].forEach((marker) => {\n            if (marker && typeof marker === 'object') {\n                const markerId = getMarkerId(marker, rfId);\n                if (!ids.includes(markerId)) {\n                    markers.push({ id: markerId, color: marker.color || defaultColor, ...marker });\n                    ids.push(markerId);\n                }\n            }\n        });\n        return markers;\n    }, [])\n        .sort((a, b) => a.id.localeCompare(b.id));\n};\n// when you have multiple flows on a page and you hide the first one, the other ones have no markers anymore\n// when they do have markers with the same ids. To prevent this the user can pass a unique id to the react flow wrapper\n// that we can then use for creating our unique marker ids\nconst MarkerDefinitions = ({ defaultColor, rfId }) => {\n    const markers = useStore(useCallback(markerSelector({ defaultColor, rfId }), [defaultColor, rfId]), \n    // the id includes all marker options, so we just need to look at that part of the marker\n    (a, b) => !(a.length !== b.length || a.some((m, i) => m.id !== b[i].id)));\n    return (React.createElement(\"defs\", null, markers.map((marker) => (React.createElement(Marker, { id: marker.id, key: marker.id, type: marker.type, color: marker.color, width: marker.width, height: marker.height, markerUnits: marker.markerUnits, strokeWidth: marker.strokeWidth, orient: marker.orient })))));\n};\nMarkerDefinitions.displayName = 'MarkerDefinitions';\nvar MarkerDefinitions$1 = memo(MarkerDefinitions);\n\nconst selector$4 = (s) => ({\n    nodesConnectable: s.nodesConnectable,\n    edgesFocusable: s.edgesFocusable,\n    edgesUpdatable: s.edgesUpdatable,\n    elementsSelectable: s.elementsSelectable,\n    width: s.width,\n    height: s.height,\n    connectionMode: s.connectionMode,\n    nodeInternals: s.nodeInternals,\n    onError: s.onError,\n});\nconst EdgeRenderer = ({ defaultMarkerColor, onlyRenderVisibleElements, elevateEdgesOnSelect, rfId, edgeTypes, noPanClassName, onEdgeContextMenu, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, onEdgeClick, onEdgeDoubleClick, onReconnect, onReconnectStart, onReconnectEnd, reconnectRadius, children, disableKeyboardA11y, }) => {\n    const { edgesFocusable, edgesUpdatable, elementsSelectable, width, height, connectionMode, nodeInternals, onError } = useStore(selector$4, shallow);\n    const edgeTree = useVisibleEdges(onlyRenderVisibleElements, nodeInternals, elevateEdgesOnSelect);\n    if (!width) {\n        return null;\n    }\n    return (React.createElement(React.Fragment, null,\n        edgeTree.map(({ level, edges, isMaxLevel }) => (React.createElement(\"svg\", { key: level, style: { zIndex: level }, width: width, height: height, className: \"react-flow__edges react-flow__container\" },\n            isMaxLevel && React.createElement(MarkerDefinitions$1, { defaultColor: defaultMarkerColor, rfId: rfId }),\n            React.createElement(\"g\", null, edges.map((edge) => {\n                const [sourceNodeRect, sourceHandleBounds, sourceIsValid] = getNodeData(nodeInternals.get(edge.source));\n                const [targetNodeRect, targetHandleBounds, targetIsValid] = getNodeData(nodeInternals.get(edge.target));\n                if (!sourceIsValid || !targetIsValid) {\n                    return null;\n                }\n                let edgeType = edge.type || 'default';\n                if (!edgeTypes[edgeType]) {\n                    onError?.('011', errorMessages['error011'](edgeType));\n                    edgeType = 'default';\n                }\n                const EdgeComponent = edgeTypes[edgeType] || edgeTypes.default;\n                // when connection type is loose we can define all handles as sources and connect source -> source\n                const targetNodeHandles = connectionMode === ConnectionMode.Strict\n                    ? targetHandleBounds.target\n                    : (targetHandleBounds.target ?? []).concat(targetHandleBounds.source ?? []);\n                const sourceHandle = getHandle(sourceHandleBounds.source, edge.sourceHandle);\n                const targetHandle = getHandle(targetNodeHandles, edge.targetHandle);\n                const sourcePosition = sourceHandle?.position || Position.Bottom;\n                const targetPosition = targetHandle?.position || Position.Top;\n                const isFocusable = !!(edge.focusable || (edgesFocusable && typeof edge.focusable === 'undefined'));\n                const edgeReconnectable = edge.reconnectable || edge.updatable;\n                const isReconnectable = typeof onReconnect !== 'undefined' &&\n                    (edgeReconnectable || (edgesUpdatable && typeof edgeReconnectable === 'undefined'));\n                if (!sourceHandle || !targetHandle) {\n                    onError?.('008', errorMessages['error008'](sourceHandle, edge));\n                    return null;\n                }\n                const { sourceX, sourceY, targetX, targetY } = getEdgePositions(sourceNodeRect, sourceHandle, sourcePosition, targetNodeRect, targetHandle, targetPosition);\n                return (React.createElement(EdgeComponent, { key: edge.id, id: edge.id, className: cc([edge.className, noPanClassName]), type: edgeType, data: edge.data, selected: !!edge.selected, animated: !!edge.animated, hidden: !!edge.hidden, label: edge.label, labelStyle: edge.labelStyle, labelShowBg: edge.labelShowBg, labelBgStyle: edge.labelBgStyle, labelBgPadding: edge.labelBgPadding, labelBgBorderRadius: edge.labelBgBorderRadius, style: edge.style, source: edge.source, target: edge.target, sourceHandleId: edge.sourceHandle, targetHandleId: edge.targetHandle, markerEnd: edge.markerEnd, markerStart: edge.markerStart, sourceX: sourceX, sourceY: sourceY, targetX: targetX, targetY: targetY, sourcePosition: sourcePosition, targetPosition: targetPosition, elementsSelectable: elementsSelectable, onContextMenu: onEdgeContextMenu, onMouseEnter: onEdgeMouseEnter, onMouseMove: onEdgeMouseMove, onMouseLeave: onEdgeMouseLeave, onClick: onEdgeClick, onEdgeDoubleClick: onEdgeDoubleClick, onReconnect: onReconnect, onReconnectStart: onReconnectStart, onReconnectEnd: onReconnectEnd, reconnectRadius: reconnectRadius, rfId: rfId, ariaLabel: edge.ariaLabel, isFocusable: isFocusable, isReconnectable: isReconnectable, pathOptions: 'pathOptions' in edge ? edge.pathOptions : undefined, interactionWidth: edge.interactionWidth, disableKeyboardA11y: disableKeyboardA11y }));\n            }))))),\n        children));\n};\nEdgeRenderer.displayName = 'EdgeRenderer';\nvar EdgeRenderer$1 = memo(EdgeRenderer);\n\nconst selector$3 = (s) => `translate(${s.transform[0]}px,${s.transform[1]}px) scale(${s.transform[2]})`;\nfunction Viewport({ children }) {\n    const transform = useStore(selector$3);\n    return (React.createElement(\"div\", { className: \"react-flow__viewport react-flow__container\", style: { transform } }, children));\n}\n\nfunction useOnInitHandler(onInit) {\n    const rfInstance = useReactFlow();\n    const isInitialized = useRef(false);\n    useEffect(() => {\n        if (!isInitialized.current && rfInstance.viewportInitialized && onInit) {\n            setTimeout(() => onInit(rfInstance), 1);\n            isInitialized.current = true;\n        }\n    }, [onInit, rfInstance.viewportInitialized]);\n}\n\nconst oppositePosition = {\n    [Position.Left]: Position.Right,\n    [Position.Right]: Position.Left,\n    [Position.Top]: Position.Bottom,\n    [Position.Bottom]: Position.Top,\n};\nconst ConnectionLine = ({ nodeId, handleType, style, type = ConnectionLineType.Bezier, CustomComponent, connectionStatus, }) => {\n    const { fromNode, handleId, toX, toY, connectionMode } = useStore(useCallback((s) => ({\n        fromNode: s.nodeInternals.get(nodeId),\n        handleId: s.connectionHandleId,\n        toX: (s.connectionPosition.x - s.transform[0]) / s.transform[2],\n        toY: (s.connectionPosition.y - s.transform[1]) / s.transform[2],\n        connectionMode: s.connectionMode,\n    }), [nodeId]), shallow);\n    const fromHandleBounds = fromNode?.[internalsSymbol]?.handleBounds;\n    let handleBounds = fromHandleBounds?.[handleType];\n    if (connectionMode === ConnectionMode.Loose) {\n        handleBounds = handleBounds ? handleBounds : fromHandleBounds?.[handleType === 'source' ? 'target' : 'source'];\n    }\n    if (!fromNode || !handleBounds) {\n        return null;\n    }\n    const fromHandle = handleId ? handleBounds.find((d) => d.id === handleId) : handleBounds[0];\n    const fromHandleX = fromHandle ? fromHandle.x + fromHandle.width / 2 : (fromNode.width ?? 0) / 2;\n    const fromHandleY = fromHandle ? fromHandle.y + fromHandle.height / 2 : fromNode.height ?? 0;\n    const fromX = (fromNode.positionAbsolute?.x ?? 0) + fromHandleX;\n    const fromY = (fromNode.positionAbsolute?.y ?? 0) + fromHandleY;\n    const fromPosition = fromHandle?.position;\n    const toPosition = fromPosition ? oppositePosition[fromPosition] : null;\n    if (!fromPosition || !toPosition) {\n        return null;\n    }\n    if (CustomComponent) {\n        return (React.createElement(CustomComponent, { connectionLineType: type, connectionLineStyle: style, fromNode: fromNode, fromHandle: fromHandle, fromX: fromX, fromY: fromY, toX: toX, toY: toY, fromPosition: fromPosition, toPosition: toPosition, connectionStatus: connectionStatus }));\n    }\n    let dAttr = '';\n    const pathParams = {\n        sourceX: fromX,\n        sourceY: fromY,\n        sourcePosition: fromPosition,\n        targetX: toX,\n        targetY: toY,\n        targetPosition: toPosition,\n    };\n    if (type === ConnectionLineType.Bezier) {\n        // we assume the destination position is opposite to the source position\n        [dAttr] = getBezierPath(pathParams);\n    }\n    else if (type === ConnectionLineType.Step) {\n        [dAttr] = getSmoothStepPath({\n            ...pathParams,\n            borderRadius: 0,\n        });\n    }\n    else if (type === ConnectionLineType.SmoothStep) {\n        [dAttr] = getSmoothStepPath(pathParams);\n    }\n    else if (type === ConnectionLineType.SimpleBezier) {\n        [dAttr] = getSimpleBezierPath(pathParams);\n    }\n    else {\n        dAttr = `M${fromX},${fromY} ${toX},${toY}`;\n    }\n    return React.createElement(\"path\", { d: dAttr, fill: \"none\", className: \"react-flow__connection-path\", style: style });\n};\nConnectionLine.displayName = 'ConnectionLine';\nconst selector$2 = (s) => ({\n    nodeId: s.connectionNodeId,\n    handleType: s.connectionHandleType,\n    nodesConnectable: s.nodesConnectable,\n    connectionStatus: s.connectionStatus,\n    width: s.width,\n    height: s.height,\n});\nfunction ConnectionLineWrapper({ containerStyle, style, type, component }) {\n    const { nodeId, handleType, nodesConnectable, width, height, connectionStatus } = useStore(selector$2, shallow);\n    const isValid = !!(nodeId && handleType && width && nodesConnectable);\n    if (!isValid) {\n        return null;\n    }\n    return (React.createElement(\"svg\", { style: containerStyle, width: width, height: height, className: \"react-flow__edges react-flow__connectionline react-flow__container\" },\n        React.createElement(\"g\", { className: cc(['react-flow__connection', connectionStatus]) },\n            React.createElement(ConnectionLine, { nodeId: nodeId, handleType: handleType, style: style, type: type, CustomComponent: component, connectionStatus: connectionStatus }))));\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction useNodeOrEdgeTypes(nodeOrEdgeTypes, createTypes) {\n    const typesKeysRef = useRef(null);\n    const store = useStoreApi();\n    const typesParsed = useMemo(() => {\n        if (process.env.NODE_ENV === 'development') {\n            const typeKeys = Object.keys(nodeOrEdgeTypes);\n            if (shallow(typesKeysRef.current, typeKeys)) {\n                store.getState().onError?.('002', errorMessages['error002']());\n            }\n            typesKeysRef.current = typeKeys;\n        }\n        return createTypes(nodeOrEdgeTypes);\n    }, [nodeOrEdgeTypes]);\n    return typesParsed;\n}\n\nconst GraphView = ({ nodeTypes, edgeTypes, onMove, onMoveStart, onMoveEnd, onInit, onNodeClick, onEdgeClick, onNodeDoubleClick, onEdgeDoubleClick, onNodeMouseEnter, onNodeMouseMove, onNodeMouseLeave, onNodeContextMenu, onSelectionContextMenu, onSelectionStart, onSelectionEnd, connectionLineType, connectionLineStyle, connectionLineComponent, connectionLineContainerStyle, selectionKeyCode, selectionOnDrag, selectionMode, multiSelectionKeyCode, panActivationKeyCode, zoomActivationKeyCode, deleteKeyCode, onlyRenderVisibleElements, elementsSelectable, selectNodesOnDrag, defaultViewport, translateExtent, minZoom, maxZoom, preventScrolling, defaultMarkerColor, zoomOnScroll, zoomOnPinch, panOnScroll, panOnScrollSpeed, panOnScrollMode, zoomOnDoubleClick, panOnDrag, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneScroll, onPaneContextMenu, onEdgeContextMenu, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, onReconnect, onReconnectStart, onReconnectEnd, reconnectRadius, noDragClassName, noWheelClassName, noPanClassName, elevateEdgesOnSelect, disableKeyboardA11y, nodeOrigin, nodeExtent, rfId, }) => {\n    const nodeTypesWrapped = useNodeOrEdgeTypes(nodeTypes, createNodeTypes);\n    const edgeTypesWrapped = useNodeOrEdgeTypes(edgeTypes, createEdgeTypes);\n    useOnInitHandler(onInit);\n    return (React.createElement(FlowRenderer$1, { onPaneClick: onPaneClick, onPaneMouseEnter: onPaneMouseEnter, onPaneMouseMove: onPaneMouseMove, onPaneMouseLeave: onPaneMouseLeave, onPaneContextMenu: onPaneContextMenu, onPaneScroll: onPaneScroll, deleteKeyCode: deleteKeyCode, selectionKeyCode: selectionKeyCode, selectionOnDrag: selectionOnDrag, selectionMode: selectionMode, onSelectionStart: onSelectionStart, onSelectionEnd: onSelectionEnd, multiSelectionKeyCode: multiSelectionKeyCode, panActivationKeyCode: panActivationKeyCode, zoomActivationKeyCode: zoomActivationKeyCode, elementsSelectable: elementsSelectable, onMove: onMove, onMoveStart: onMoveStart, onMoveEnd: onMoveEnd, zoomOnScroll: zoomOnScroll, zoomOnPinch: zoomOnPinch, zoomOnDoubleClick: zoomOnDoubleClick, panOnScroll: panOnScroll, panOnScrollSpeed: panOnScrollSpeed, panOnScrollMode: panOnScrollMode, panOnDrag: panOnDrag, defaultViewport: defaultViewport, translateExtent: translateExtent, minZoom: minZoom, maxZoom: maxZoom, onSelectionContextMenu: onSelectionContextMenu, preventScrolling: preventScrolling, noDragClassName: noDragClassName, noWheelClassName: noWheelClassName, noPanClassName: noPanClassName, disableKeyboardA11y: disableKeyboardA11y },\n        React.createElement(Viewport, null,\n            React.createElement(EdgeRenderer$1, { edgeTypes: edgeTypesWrapped, onEdgeClick: onEdgeClick, onEdgeDoubleClick: onEdgeDoubleClick, onlyRenderVisibleElements: onlyRenderVisibleElements, onEdgeContextMenu: onEdgeContextMenu, onEdgeMouseEnter: onEdgeMouseEnter, onEdgeMouseMove: onEdgeMouseMove, onEdgeMouseLeave: onEdgeMouseLeave, onReconnect: onReconnect, onReconnectStart: onReconnectStart, onReconnectEnd: onReconnectEnd, reconnectRadius: reconnectRadius, defaultMarkerColor: defaultMarkerColor, noPanClassName: noPanClassName, elevateEdgesOnSelect: !!elevateEdgesOnSelect, disableKeyboardA11y: disableKeyboardA11y, rfId: rfId },\n                React.createElement(ConnectionLineWrapper, { style: connectionLineStyle, type: connectionLineType, component: connectionLineComponent, containerStyle: connectionLineContainerStyle })),\n            React.createElement(\"div\", { className: \"react-flow__edgelabel-renderer\" }),\n            React.createElement(NodeRenderer$1, { nodeTypes: nodeTypesWrapped, onNodeClick: onNodeClick, onNodeDoubleClick: onNodeDoubleClick, onNodeMouseEnter: onNodeMouseEnter, onNodeMouseMove: onNodeMouseMove, onNodeMouseLeave: onNodeMouseLeave, onNodeContextMenu: onNodeContextMenu, selectNodesOnDrag: selectNodesOnDrag, onlyRenderVisibleElements: onlyRenderVisibleElements, noPanClassName: noPanClassName, noDragClassName: noDragClassName, disableKeyboardA11y: disableKeyboardA11y, nodeOrigin: nodeOrigin, nodeExtent: nodeExtent, rfId: rfId }))));\n};\nGraphView.displayName = 'GraphView';\nvar GraphView$1 = memo(GraphView);\n\nconst infiniteExtent = [\n    [Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY],\n    [Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY],\n];\nconst initialState = {\n    rfId: '1',\n    width: 0,\n    height: 0,\n    transform: [0, 0, 1],\n    nodeInternals: new Map(),\n    edges: [],\n    onNodesChange: null,\n    onEdgesChange: null,\n    hasDefaultNodes: false,\n    hasDefaultEdges: false,\n    d3Zoom: null,\n    d3Selection: null,\n    d3ZoomHandler: undefined,\n    minZoom: 0.5,\n    maxZoom: 2,\n    translateExtent: infiniteExtent,\n    nodeExtent: infiniteExtent,\n    nodesSelectionActive: false,\n    userSelectionActive: false,\n    userSelectionRect: null,\n    connectionNodeId: null,\n    connectionHandleId: null,\n    connectionHandleType: 'source',\n    connectionPosition: { x: 0, y: 0 },\n    connectionStatus: null,\n    connectionMode: ConnectionMode.Strict,\n    domNode: null,\n    paneDragging: false,\n    noPanClassName: 'nopan',\n    nodeOrigin: [0, 0],\n    nodeDragThreshold: 0,\n    snapGrid: [15, 15],\n    snapToGrid: false,\n    nodesDraggable: true,\n    nodesConnectable: true,\n    nodesFocusable: true,\n    edgesFocusable: true,\n    edgesUpdatable: true,\n    elementsSelectable: true,\n    elevateNodesOnSelect: true,\n    fitViewOnInit: false,\n    fitViewOnInitDone: false,\n    fitViewOnInitOptions: undefined,\n    onSelectionChange: [],\n    multiSelectionActive: false,\n    connectionStartHandle: null,\n    connectionEndHandle: null,\n    connectionClickStartHandle: null,\n    connectOnClick: true,\n    ariaLiveMessage: '',\n    autoPanOnConnect: true,\n    autoPanOnNodeDrag: true,\n    connectionRadius: 20,\n    onError: devWarn,\n    isValidConnection: undefined,\n};\n\nconst createRFStore = () => createWithEqualityFn((set, get) => ({\n    ...initialState,\n    setNodes: (nodes) => {\n        const { nodeInternals, nodeOrigin, elevateNodesOnSelect } = get();\n        set({ nodeInternals: createNodeInternals(nodes, nodeInternals, nodeOrigin, elevateNodesOnSelect) });\n    },\n    getNodes: () => {\n        return Array.from(get().nodeInternals.values());\n    },\n    setEdges: (edges) => {\n        const { defaultEdgeOptions = {} } = get();\n        set({ edges: edges.map((e) => ({ ...defaultEdgeOptions, ...e })) });\n    },\n    setDefaultNodesAndEdges: (nodes, edges) => {\n        const hasDefaultNodes = typeof nodes !== 'undefined';\n        const hasDefaultEdges = typeof edges !== 'undefined';\n        const nodeInternals = hasDefaultNodes\n            ? createNodeInternals(nodes, new Map(), get().nodeOrigin, get().elevateNodesOnSelect)\n            : new Map();\n        const nextEdges = hasDefaultEdges ? edges : [];\n        set({ nodeInternals, edges: nextEdges, hasDefaultNodes, hasDefaultEdges });\n    },\n    updateNodeDimensions: (updates) => {\n        const { onNodesChange, nodeInternals, fitViewOnInit, fitViewOnInitDone, fitViewOnInitOptions, domNode, nodeOrigin, } = get();\n        const viewportNode = domNode?.querySelector('.react-flow__viewport');\n        if (!viewportNode) {\n            return;\n        }\n        const style = window.getComputedStyle(viewportNode);\n        const { m22: zoom } = new window.DOMMatrixReadOnly(style.transform);\n        const changes = updates.reduce((res, update) => {\n            const node = nodeInternals.get(update.id);\n            if (node?.hidden) {\n                nodeInternals.set(node.id, {\n                    ...node,\n                    [internalsSymbol]: {\n                        ...node[internalsSymbol],\n                        // we need to reset the handle bounds when the node is hidden\n                        // in order to force a new observation when the node is shown again\n                        handleBounds: undefined,\n                    },\n                });\n            }\n            else if (node) {\n                const dimensions = getDimensions(update.nodeElement);\n                const doUpdate = !!(dimensions.width &&\n                    dimensions.height &&\n                    (node.width !== dimensions.width || node.height !== dimensions.height || update.forceUpdate));\n                if (doUpdate) {\n                    nodeInternals.set(node.id, {\n                        ...node,\n                        [internalsSymbol]: {\n                            ...node[internalsSymbol],\n                            handleBounds: {\n                                source: getHandleBounds('.source', update.nodeElement, zoom, nodeOrigin),\n                                target: getHandleBounds('.target', update.nodeElement, zoom, nodeOrigin),\n                            },\n                        },\n                        ...dimensions,\n                    });\n                    res.push({\n                        id: node.id,\n                        type: 'dimensions',\n                        dimensions,\n                    });\n                }\n            }\n            return res;\n        }, []);\n        updateAbsoluteNodePositions(nodeInternals, nodeOrigin);\n        const nextFitViewOnInitDone = fitViewOnInitDone ||\n            (fitViewOnInit && !fitViewOnInitDone && fitView(get, { initial: true, ...fitViewOnInitOptions }));\n        set({ nodeInternals: new Map(nodeInternals), fitViewOnInitDone: nextFitViewOnInitDone });\n        if (changes?.length > 0) {\n            onNodesChange?.(changes);\n        }\n    },\n    updateNodePositions: (nodeDragItems, positionChanged = true, dragging = false) => {\n        const { triggerNodeChanges } = get();\n        const changes = nodeDragItems.map((node) => {\n            const change = {\n                id: node.id,\n                type: 'position',\n                dragging,\n            };\n            if (positionChanged) {\n                change.positionAbsolute = node.positionAbsolute;\n                change.position = node.position;\n            }\n            return change;\n        });\n        triggerNodeChanges(changes);\n    },\n    triggerNodeChanges: (changes) => {\n        const { onNodesChange, nodeInternals, hasDefaultNodes, nodeOrigin, getNodes, elevateNodesOnSelect } = get();\n        if (changes?.length) {\n            if (hasDefaultNodes) {\n                const nodes = applyNodeChanges(changes, getNodes());\n                const nextNodeInternals = createNodeInternals(nodes, nodeInternals, nodeOrigin, elevateNodesOnSelect);\n                set({ nodeInternals: nextNodeInternals });\n            }\n            onNodesChange?.(changes);\n        }\n    },\n    addSelectedNodes: (selectedNodeIds) => {\n        const { multiSelectionActive, edges, getNodes } = get();\n        let changedNodes;\n        let changedEdges = null;\n        if (multiSelectionActive) {\n            changedNodes = selectedNodeIds.map((nodeId) => createSelectionChange(nodeId, true));\n        }\n        else {\n            changedNodes = getSelectionChanges(getNodes(), selectedNodeIds);\n            changedEdges = getSelectionChanges(edges, []);\n        }\n        updateNodesAndEdgesSelections({\n            changedNodes,\n            changedEdges,\n            get,\n            set,\n        });\n    },\n    addSelectedEdges: (selectedEdgeIds) => {\n        const { multiSelectionActive, edges, getNodes } = get();\n        let changedEdges;\n        let changedNodes = null;\n        if (multiSelectionActive) {\n            changedEdges = selectedEdgeIds.map((edgeId) => createSelectionChange(edgeId, true));\n        }\n        else {\n            changedEdges = getSelectionChanges(edges, selectedEdgeIds);\n            changedNodes = getSelectionChanges(getNodes(), []);\n        }\n        updateNodesAndEdgesSelections({\n            changedNodes,\n            changedEdges,\n            get,\n            set,\n        });\n    },\n    unselectNodesAndEdges: ({ nodes, edges } = {}) => {\n        const { edges: storeEdges, getNodes } = get();\n        const nodesToUnselect = nodes ? nodes : getNodes();\n        const edgesToUnselect = edges ? edges : storeEdges;\n        const changedNodes = nodesToUnselect.map((n) => {\n            n.selected = false;\n            return createSelectionChange(n.id, false);\n        });\n        const changedEdges = edgesToUnselect.map((edge) => createSelectionChange(edge.id, false));\n        updateNodesAndEdgesSelections({\n            changedNodes,\n            changedEdges,\n            get,\n            set,\n        });\n    },\n    setMinZoom: (minZoom) => {\n        const { d3Zoom, maxZoom } = get();\n        d3Zoom?.scaleExtent([minZoom, maxZoom]);\n        set({ minZoom });\n    },\n    setMaxZoom: (maxZoom) => {\n        const { d3Zoom, minZoom } = get();\n        d3Zoom?.scaleExtent([minZoom, maxZoom]);\n        set({ maxZoom });\n    },\n    setTranslateExtent: (translateExtent) => {\n        get().d3Zoom?.translateExtent(translateExtent);\n        set({ translateExtent });\n    },\n    resetSelectedElements: () => {\n        const { edges, getNodes } = get();\n        const nodes = getNodes();\n        const nodesToUnselect = nodes\n            .filter((e) => e.selected)\n            .map((n) => createSelectionChange(n.id, false));\n        const edgesToUnselect = edges\n            .filter((e) => e.selected)\n            .map((e) => createSelectionChange(e.id, false));\n        updateNodesAndEdgesSelections({\n            changedNodes: nodesToUnselect,\n            changedEdges: edgesToUnselect,\n            get,\n            set,\n        });\n    },\n    setNodeExtent: (nodeExtent) => {\n        const { nodeInternals } = get();\n        nodeInternals.forEach((node) => {\n            node.positionAbsolute = clampPosition(node.position, nodeExtent);\n        });\n        set({\n            nodeExtent,\n            nodeInternals: new Map(nodeInternals),\n        });\n    },\n    panBy: (delta) => {\n        const { transform, width, height, d3Zoom, d3Selection, translateExtent } = get();\n        if (!d3Zoom || !d3Selection || (!delta.x && !delta.y)) {\n            return false;\n        }\n        const nextTransform = zoomIdentity\n            .translate(transform[0] + delta.x, transform[1] + delta.y)\n            .scale(transform[2]);\n        const extent = [\n            [0, 0],\n            [width, height],\n        ];\n        const constrainedTransform = d3Zoom?.constrain()(nextTransform, extent, translateExtent);\n        d3Zoom.transform(d3Selection, constrainedTransform);\n        const transformChanged = transform[0] !== constrainedTransform.x ||\n            transform[1] !== constrainedTransform.y ||\n            transform[2] !== constrainedTransform.k;\n        return transformChanged;\n    },\n    cancelConnection: () => set({\n        connectionNodeId: initialState.connectionNodeId,\n        connectionHandleId: initialState.connectionHandleId,\n        connectionHandleType: initialState.connectionHandleType,\n        connectionStatus: initialState.connectionStatus,\n        connectionStartHandle: initialState.connectionStartHandle,\n        connectionEndHandle: initialState.connectionEndHandle,\n    }),\n    reset: () => set({ ...initialState }),\n}), Object.is);\n\nconst ReactFlowProvider = ({ children }) => {\n    const storeRef = useRef(null);\n    if (!storeRef.current) {\n        storeRef.current = createRFStore();\n    }\n    return React.createElement(Provider$1, { value: storeRef.current }, children);\n};\nReactFlowProvider.displayName = 'ReactFlowProvider';\n\nconst Wrapper = ({ children }) => {\n    const isWrapped = useContext(StoreContext);\n    if (isWrapped) {\n        // we need to wrap it with a fragment because it's not allowed for children to be a ReactNode\n        // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/18051\n        return React.createElement(React.Fragment, null, children);\n    }\n    return React.createElement(ReactFlowProvider, null, children);\n};\nWrapper.displayName = 'ReactFlowWrapper';\n\nconst defaultNodeTypes = {\n    input: InputNode$1,\n    default: DefaultNode$1,\n    output: OutputNode$1,\n    group: GroupNode,\n};\nconst defaultEdgeTypes = {\n    default: BezierEdge,\n    straight: StraightEdge,\n    step: StepEdge,\n    smoothstep: SmoothStepEdge,\n    simplebezier: SimpleBezierEdge,\n};\nconst initNodeOrigin = [0, 0];\nconst initSnapGrid = [15, 15];\nconst initDefaultViewport = { x: 0, y: 0, zoom: 1 };\nconst wrapperStyle = {\n    width: '100%',\n    height: '100%',\n    overflow: 'hidden',\n    position: 'relative',\n    zIndex: 0,\n};\nconst ReactFlow = forwardRef(({ nodes, edges, defaultNodes, defaultEdges, className, nodeTypes = defaultNodeTypes, edgeTypes = defaultEdgeTypes, onNodeClick, onEdgeClick, onInit, onMove, onMoveStart, onMoveEnd, onConnect, onConnectStart, onConnectEnd, onClickConnectStart, onClickConnectEnd, onNodeMouseEnter, onNodeMouseMove, onNodeMouseLeave, onNodeContextMenu, onNodeDoubleClick, onNodeDragStart, onNodeDrag, onNodeDragStop, onNodesDelete, onEdgesDelete, onSelectionChange, onSelectionDragStart, onSelectionDrag, onSelectionDragStop, onSelectionContextMenu, onSelectionStart, onSelectionEnd, connectionMode = ConnectionMode.Strict, connectionLineType = ConnectionLineType.Bezier, connectionLineStyle, connectionLineComponent, connectionLineContainerStyle, deleteKeyCode = 'Backspace', selectionKeyCode = 'Shift', selectionOnDrag = false, selectionMode = SelectionMode.Full, panActivationKeyCode = 'Space', multiSelectionKeyCode = isMacOs() ? 'Meta' : 'Control', zoomActivationKeyCode = isMacOs() ? 'Meta' : 'Control', snapToGrid = false, snapGrid = initSnapGrid, onlyRenderVisibleElements = false, selectNodesOnDrag = true, nodesDraggable, nodesConnectable, nodesFocusable, nodeOrigin = initNodeOrigin, edgesFocusable, edgesUpdatable, elementsSelectable, defaultViewport = initDefaultViewport, minZoom = 0.5, maxZoom = 2, translateExtent = infiniteExtent, preventScrolling = true, nodeExtent, defaultMarkerColor = '#b1b1b7', zoomOnScroll = true, zoomOnPinch = true, panOnScroll = false, panOnScrollSpeed = 0.5, panOnScrollMode = PanOnScrollMode.Free, zoomOnDoubleClick = true, panOnDrag = true, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneScroll, onPaneContextMenu, children, onEdgeContextMenu, onEdgeDoubleClick, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, onEdgeUpdate, onEdgeUpdateStart, onEdgeUpdateEnd, onReconnect, onReconnectStart, onReconnectEnd, reconnectRadius = 10, edgeUpdaterRadius = 10, onNodesChange, onEdgesChange, noDragClassName = 'nodrag', noWheelClassName = 'nowheel', noPanClassName = 'nopan', fitView = false, fitViewOptions, connectOnClick = true, attributionPosition, proOptions, defaultEdgeOptions, elevateNodesOnSelect = true, elevateEdgesOnSelect = false, disableKeyboardA11y = false, autoPanOnConnect = true, autoPanOnNodeDrag = true, connectionRadius = 20, isValidConnection, onError, style, id, nodeDragThreshold, ...rest }, ref) => {\n    const rfId = id || '1';\n    return (React.createElement(\"div\", { ...rest, style: { ...style, ...wrapperStyle }, ref: ref, className: cc(['react-flow', className]), \"data-testid\": \"rf__wrapper\", id: id },\n        React.createElement(Wrapper, null,\n            React.createElement(GraphView$1, { onInit: onInit, onMove: onMove, onMoveStart: onMoveStart, onMoveEnd: onMoveEnd, onNodeClick: onNodeClick, onEdgeClick: onEdgeClick, onNodeMouseEnter: onNodeMouseEnter, onNodeMouseMove: onNodeMouseMove, onNodeMouseLeave: onNodeMouseLeave, onNodeContextMenu: onNodeContextMenu, onNodeDoubleClick: onNodeDoubleClick, nodeTypes: nodeTypes, edgeTypes: edgeTypes, connectionLineType: connectionLineType, connectionLineStyle: connectionLineStyle, connectionLineComponent: connectionLineComponent, connectionLineContainerStyle: connectionLineContainerStyle, selectionKeyCode: selectionKeyCode, selectionOnDrag: selectionOnDrag, selectionMode: selectionMode, deleteKeyCode: deleteKeyCode, multiSelectionKeyCode: multiSelectionKeyCode, panActivationKeyCode: panActivationKeyCode, zoomActivationKeyCode: zoomActivationKeyCode, onlyRenderVisibleElements: onlyRenderVisibleElements, selectNodesOnDrag: selectNodesOnDrag, defaultViewport: defaultViewport, translateExtent: translateExtent, minZoom: minZoom, maxZoom: maxZoom, preventScrolling: preventScrolling, zoomOnScroll: zoomOnScroll, zoomOnPinch: zoomOnPinch, zoomOnDoubleClick: zoomOnDoubleClick, panOnScroll: panOnScroll, panOnScrollSpeed: panOnScrollSpeed, panOnScrollMode: panOnScrollMode, panOnDrag: panOnDrag, onPaneClick: onPaneClick, onPaneMouseEnter: onPaneMouseEnter, onPaneMouseMove: onPaneMouseMove, onPaneMouseLeave: onPaneMouseLeave, onPaneScroll: onPaneScroll, onPaneContextMenu: onPaneContextMenu, onSelectionContextMenu: onSelectionContextMenu, onSelectionStart: onSelectionStart, onSelectionEnd: onSelectionEnd, onEdgeContextMenu: onEdgeContextMenu, onEdgeDoubleClick: onEdgeDoubleClick, onEdgeMouseEnter: onEdgeMouseEnter, onEdgeMouseMove: onEdgeMouseMove, onEdgeMouseLeave: onEdgeMouseLeave, onReconnect: onReconnect ?? onEdgeUpdate, onReconnectStart: onReconnectStart ?? onEdgeUpdateStart, onReconnectEnd: onReconnectEnd ?? onEdgeUpdateEnd, reconnectRadius: reconnectRadius ?? edgeUpdaterRadius, defaultMarkerColor: defaultMarkerColor, noDragClassName: noDragClassName, noWheelClassName: noWheelClassName, noPanClassName: noPanClassName, elevateEdgesOnSelect: elevateEdgesOnSelect, rfId: rfId, disableKeyboardA11y: disableKeyboardA11y, nodeOrigin: nodeOrigin, nodeExtent: nodeExtent }),\n            React.createElement(StoreUpdater, { nodes: nodes, edges: edges, defaultNodes: defaultNodes, defaultEdges: defaultEdges, onConnect: onConnect, onConnectStart: onConnectStart, onConnectEnd: onConnectEnd, onClickConnectStart: onClickConnectStart, onClickConnectEnd: onClickConnectEnd, nodesDraggable: nodesDraggable, nodesConnectable: nodesConnectable, nodesFocusable: nodesFocusable, edgesFocusable: edgesFocusable, edgesUpdatable: edgesUpdatable, elementsSelectable: elementsSelectable, elevateNodesOnSelect: elevateNodesOnSelect, minZoom: minZoom, maxZoom: maxZoom, nodeExtent: nodeExtent, onNodesChange: onNodesChange, onEdgesChange: onEdgesChange, snapToGrid: snapToGrid, snapGrid: snapGrid, connectionMode: connectionMode, translateExtent: translateExtent, connectOnClick: connectOnClick, defaultEdgeOptions: defaultEdgeOptions, fitView: fitView, fitViewOptions: fitViewOptions, onNodesDelete: onNodesDelete, onEdgesDelete: onEdgesDelete, onNodeDragStart: onNodeDragStart, onNodeDrag: onNodeDrag, onNodeDragStop: onNodeDragStop, onSelectionDrag: onSelectionDrag, onSelectionDragStart: onSelectionDragStart, onSelectionDragStop: onSelectionDragStop, noPanClassName: noPanClassName, nodeOrigin: nodeOrigin, rfId: rfId, autoPanOnConnect: autoPanOnConnect, autoPanOnNodeDrag: autoPanOnNodeDrag, onError: onError, connectionRadius: connectionRadius, isValidConnection: isValidConnection, nodeDragThreshold: nodeDragThreshold }),\n            React.createElement(Wrapper$1, { onSelectionChange: onSelectionChange }),\n            children,\n            React.createElement(Attribution, { proOptions: proOptions, position: attributionPosition }),\n            React.createElement(A11yDescriptions, { rfId: rfId, disableKeyboardA11y: disableKeyboardA11y }))));\n});\nReactFlow.displayName = 'ReactFlow';\n\nconst selector$1 = (s) => s.domNode?.querySelector('.react-flow__edgelabel-renderer');\nfunction EdgeLabelRenderer({ children }) {\n    const edgeLabelRenderer = useStore(selector$1);\n    if (!edgeLabelRenderer) {\n        return null;\n    }\n    return createPortal(children, edgeLabelRenderer);\n}\n\nfunction useUpdateNodeInternals() {\n    const store = useStoreApi();\n    return useCallback((id) => {\n        const { domNode, updateNodeDimensions } = store.getState();\n        const updateIds = Array.isArray(id) ? id : [id];\n        const updates = updateIds.reduce((res, updateId) => {\n            const nodeElement = domNode?.querySelector(`.react-flow__node[data-id=\"${updateId}\"]`);\n            if (nodeElement) {\n                res.push({ id: updateId, nodeElement, forceUpdate: true });\n            }\n            return res;\n        }, []);\n        requestAnimationFrame(() => updateNodeDimensions(updates));\n    }, []);\n}\n\nconst nodesSelector = (state) => state.getNodes();\nfunction useNodes() {\n    const nodes = useStore(nodesSelector, shallow);\n    return nodes;\n}\n\nconst edgesSelector = (state) => state.edges;\nfunction useEdges() {\n    const edges = useStore(edgesSelector, shallow);\n    return edges;\n}\n\nconst viewportSelector = (state) => ({\n    x: state.transform[0],\n    y: state.transform[1],\n    zoom: state.transform[2],\n});\nfunction useViewport() {\n    const viewport = useStore(viewportSelector, shallow);\n    return viewport;\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction createUseItemsState(applyChanges) {\n    return (initialItems) => {\n        const [items, setItems] = useState(initialItems);\n        const onItemsChange = useCallback((changes) => setItems((items) => applyChanges(changes, items)), []);\n        return [items, setItems, onItemsChange];\n    };\n}\nconst useNodesState = createUseItemsState(applyNodeChanges);\nconst useEdgesState = createUseItemsState(applyEdgeChanges);\n\nfunction useOnViewportChange({ onStart, onChange, onEnd }) {\n    const store = useStoreApi();\n    useEffect(() => {\n        store.setState({ onViewportChangeStart: onStart });\n    }, [onStart]);\n    useEffect(() => {\n        store.setState({ onViewportChange: onChange });\n    }, [onChange]);\n    useEffect(() => {\n        store.setState({ onViewportChangeEnd: onEnd });\n    }, [onEnd]);\n}\n\nfunction useOnSelectionChange({ onChange }) {\n    const store = useStoreApi();\n    useEffect(() => {\n        const nextSelectionChangeHandlers = [...store.getState().onSelectionChange, onChange];\n        store.setState({ onSelectionChange: nextSelectionChangeHandlers });\n        return () => {\n            const nextHandlers = store.getState().onSelectionChange.filter((fn) => fn !== onChange);\n            store.setState({ onSelectionChange: nextHandlers });\n        };\n    }, [onChange]);\n}\n\nconst selector = (options) => (s) => {\n    if (s.nodeInternals.size === 0) {\n        return false;\n    }\n    return s\n        .getNodes()\n        .filter((n) => (options.includeHiddenNodes ? true : !n.hidden))\n        .every((n) => n[internalsSymbol]?.handleBounds !== undefined);\n};\nconst defaultOptions = {\n    includeHiddenNodes: false,\n};\nfunction useNodesInitialized(options = defaultOptions) {\n    const initialized = useStore(selector(options));\n    return initialized;\n}\n\nexport { BaseEdge, BezierEdge, ConnectionLineType, ConnectionMode, EdgeLabelRenderer, EdgeText$1 as EdgeText, Handle$1 as Handle, MarkerType, PanOnScrollMode, Panel, Position, ReactFlow, ReactFlowProvider, SelectionMode, SimpleBezierEdge, SmoothStepEdge, StepEdge, StraightEdge, addEdge, applyEdgeChanges, applyNodeChanges, boxToRect, clamp, getBezierPath, getBoundsOfRects, getConnectedEdges, getIncomers, getMarkerEnd, getNodePositionWithOrigin, getNodesBounds, getOutgoers, getRectOfNodes, getSimpleBezierPath, getSmoothStepPath, getStraightPath, getTransformForBounds, getViewportForBounds, handleParentExpand, internalsSymbol, isEdge, isNode, reconnectEdge, rectToBox, updateEdge, useEdges, useEdgesState, useGetPointerPosition, useKeyPress, useNodeId, useNodes, useNodesInitialized, useNodesState, useOnSelectionChange, useOnViewportChange, useReactFlow, useStore, useStoreApi, useUpdateNodeInternals, useViewport };\n","import React, { memo, useRef, useEffect } from 'react';\nimport cc from 'classcat';\nimport { shallow } from 'zustand/shallow';\nimport { zoom, zoomIdentity } from 'd3-zoom';\nimport { select, pointer } from 'd3-selection';\nimport { useStore, getNodePositionWithOrigin, useStoreApi, Panel, getBoundsOfRects, getNodesBounds } from '@reactflow/core';\n\nconst MiniMapNode = ({ id, x, y, width, height, style, color, strokeColor, strokeWidth, className, borderRadius, shapeRendering, onClick, selected, }) => {\n    const { background, backgroundColor } = style || {};\n    const fill = (color || background || backgroundColor);\n    return (React.createElement(\"rect\", { className: cc(['react-flow__minimap-node', { selected }, className]), x: x, y: y, rx: borderRadius, ry: borderRadius, width: width, height: height, fill: fill, stroke: strokeColor, strokeWidth: strokeWidth, shapeRendering: shapeRendering, onClick: onClick ? (event) => onClick(event, id) : undefined }));\n};\nMiniMapNode.displayName = 'MiniMapNode';\nvar MiniMapNode$1 = memo(MiniMapNode);\n\n/* eslint-disable @typescript-eslint/ban-ts-comment */\nconst selector$1 = (s) => s.nodeOrigin;\nconst selectorNodes = (s) => s.getNodes().filter((node) => !node.hidden && node.width && node.height);\nconst getAttrFunction = (func) => (func instanceof Function ? func : () => func);\nfunction MiniMapNodes({ nodeStrokeColor = 'transparent', nodeColor = '#e2e2e2', nodeClassName = '', nodeBorderRadius = 5, nodeStrokeWidth = 2, \n// We need to rename the prop to be `CapitalCase` so that JSX will render it as\n// a component properly.\nnodeComponent: NodeComponent = MiniMapNode$1, onClick, }) {\n    const nodes = useStore(selectorNodes, shallow);\n    const nodeOrigin = useStore(selector$1);\n    const nodeColorFunc = getAttrFunction(nodeColor);\n    const nodeStrokeColorFunc = getAttrFunction(nodeStrokeColor);\n    const nodeClassNameFunc = getAttrFunction(nodeClassName);\n    const shapeRendering = typeof window === 'undefined' || !!window.chrome ? 'crispEdges' : 'geometricPrecision';\n    return (React.createElement(React.Fragment, null, nodes.map((node) => {\n        const { x, y } = getNodePositionWithOrigin(node, nodeOrigin).positionAbsolute;\n        return (React.createElement(NodeComponent, { key: node.id, x: x, y: y, width: node.width, height: node.height, style: node.style, selected: node.selected, className: nodeClassNameFunc(node), color: nodeColorFunc(node), borderRadius: nodeBorderRadius, strokeColor: nodeStrokeColorFunc(node), strokeWidth: nodeStrokeWidth, shapeRendering: shapeRendering, onClick: onClick, id: node.id }));\n    })));\n}\nvar MiniMapNodes$1 = memo(MiniMapNodes);\n\n/* eslint-disable @typescript-eslint/ban-ts-comment */\nconst defaultWidth = 200;\nconst defaultHeight = 150;\nconst selector = (s) => {\n    const nodes = s.getNodes();\n    const viewBB = {\n        x: -s.transform[0] / s.transform[2],\n        y: -s.transform[1] / s.transform[2],\n        width: s.width / s.transform[2],\n        height: s.height / s.transform[2],\n    };\n    return {\n        viewBB,\n        boundingRect: nodes.length > 0 ? getBoundsOfRects(getNodesBounds(nodes, s.nodeOrigin), viewBB) : viewBB,\n        rfId: s.rfId,\n    };\n};\nconst ARIA_LABEL_KEY = 'react-flow__minimap-desc';\nfunction MiniMap({ style, className, nodeStrokeColor = 'transparent', nodeColor = '#e2e2e2', nodeClassName = '', nodeBorderRadius = 5, nodeStrokeWidth = 2, \n// We need to rename the prop to be `CapitalCase` so that JSX will render it as\n// a component properly.\nnodeComponent, maskColor = 'rgb(240, 240, 240, 0.6)', maskStrokeColor = 'none', maskStrokeWidth = 1, position = 'bottom-right', onClick, onNodeClick, pannable = false, zoomable = false, ariaLabel = 'React Flow mini map', inversePan = false, zoomStep = 10, offsetScale = 5, }) {\n    const store = useStoreApi();\n    const svg = useRef(null);\n    const { boundingRect, viewBB, rfId } = useStore(selector, shallow);\n    const elementWidth = style?.width ?? defaultWidth;\n    const elementHeight = style?.height ?? defaultHeight;\n    const scaledWidth = boundingRect.width / elementWidth;\n    const scaledHeight = boundingRect.height / elementHeight;\n    const viewScale = Math.max(scaledWidth, scaledHeight);\n    const viewWidth = viewScale * elementWidth;\n    const viewHeight = viewScale * elementHeight;\n    const offset = offsetScale * viewScale;\n    const x = boundingRect.x - (viewWidth - boundingRect.width) / 2 - offset;\n    const y = boundingRect.y - (viewHeight - boundingRect.height) / 2 - offset;\n    const width = viewWidth + offset * 2;\n    const height = viewHeight + offset * 2;\n    const labelledBy = `${ARIA_LABEL_KEY}-${rfId}`;\n    const viewScaleRef = useRef(0);\n    viewScaleRef.current = viewScale;\n    useEffect(() => {\n        if (svg.current) {\n            const selection = select(svg.current);\n            const zoomHandler = (event) => {\n                const { transform, d3Selection, d3Zoom } = store.getState();\n                if (event.sourceEvent.type !== 'wheel' || !d3Selection || !d3Zoom) {\n                    return;\n                }\n                const pinchDelta = -event.sourceEvent.deltaY *\n                    (event.sourceEvent.deltaMode === 1 ? 0.05 : event.sourceEvent.deltaMode ? 1 : 0.002) *\n                    zoomStep;\n                const zoom = transform[2] * Math.pow(2, pinchDelta);\n                d3Zoom.scaleTo(d3Selection, zoom);\n            };\n            const panHandler = (event) => {\n                const { transform, d3Selection, d3Zoom, translateExtent, width, height } = store.getState();\n                if (event.sourceEvent.type !== 'mousemove' || !d3Selection || !d3Zoom) {\n                    return;\n                }\n                // @TODO: how to calculate the correct next position? Math.max(1, transform[2]) is a workaround.\n                const moveScale = viewScaleRef.current * Math.max(1, transform[2]) * (inversePan ? -1 : 1);\n                const position = {\n                    x: transform[0] - event.sourceEvent.movementX * moveScale,\n                    y: transform[1] - event.sourceEvent.movementY * moveScale,\n                };\n                const extent = [\n                    [0, 0],\n                    [width, height],\n                ];\n                const nextTransform = zoomIdentity.translate(position.x, position.y).scale(transform[2]);\n                const constrainedTransform = d3Zoom.constrain()(nextTransform, extent, translateExtent);\n                d3Zoom.transform(d3Selection, constrainedTransform);\n            };\n            const zoomAndPanHandler = zoom()\n                // @ts-ignore\n                .on('zoom', pannable ? panHandler : null)\n                // @ts-ignore\n                .on('zoom.wheel', zoomable ? zoomHandler : null);\n            selection.call(zoomAndPanHandler);\n            return () => {\n                selection.on('zoom', null);\n            };\n        }\n    }, [pannable, zoomable, inversePan, zoomStep]);\n    const onSvgClick = onClick\n        ? (event) => {\n            const rfCoord = pointer(event);\n            onClick(event, { x: rfCoord[0], y: rfCoord[1] });\n        }\n        : undefined;\n    const onSvgNodeClick = onNodeClick\n        ? (event, nodeId) => {\n            const node = store.getState().nodeInternals.get(nodeId);\n            onNodeClick(event, node);\n        }\n        : undefined;\n    return (React.createElement(Panel, { position: position, style: style, className: cc(['react-flow__minimap', className]), \"data-testid\": \"rf__minimap\" },\n        React.createElement(\"svg\", { width: elementWidth, height: elementHeight, viewBox: `${x} ${y} ${width} ${height}`, role: \"img\", \"aria-labelledby\": labelledBy, ref: svg, onClick: onSvgClick },\n            ariaLabel && React.createElement(\"title\", { id: labelledBy }, ariaLabel),\n            React.createElement(MiniMapNodes$1, { onClick: onSvgNodeClick, nodeColor: nodeColor, nodeStrokeColor: nodeStrokeColor, nodeBorderRadius: nodeBorderRadius, nodeClassName: nodeClassName, nodeStrokeWidth: nodeStrokeWidth, nodeComponent: nodeComponent }),\n            React.createElement(\"path\", { className: \"react-flow__minimap-mask\", d: `M${x - offset},${y - offset}h${width + offset * 2}v${height + offset * 2}h${-width - offset * 2}z\n        M${viewBB.x},${viewBB.y}h${viewBB.width}v${viewBB.height}h${-viewBB.width}z`, fill: maskColor, fillRule: \"evenodd\", stroke: maskStrokeColor, strokeWidth: maskStrokeWidth, pointerEvents: \"none\" }))));\n}\nMiniMap.displayName = 'MiniMap';\nvar MiniMap$1 = memo(MiniMap);\n\nexport { MiniMap$1 as MiniMap };\n","import React, { memo, useState, useEffect } from 'react';\nimport cc from 'classcat';\nimport { shallow } from 'zustand/shallow';\nimport { useStoreApi, useStore, useReactFlow, Panel } from '@reactflow/core';\n\nfunction PlusIcon() {\n    return (React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 32 32\" },\n        React.createElement(\"path\", { d: \"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z\" })));\n}\n\nfunction MinusIcon() {\n    return (React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 32 5\" },\n        React.createElement(\"path\", { d: \"M0 0h32v4.2H0z\" })));\n}\n\nfunction FitViewIcon() {\n    return (React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 32 30\" },\n        React.createElement(\"path\", { d: \"M3.692 4.63c0-.53.4-.938.939-.938h5.215V0H4.708C2.13 0 0 2.054 0 4.63v5.216h3.692V4.631zM27.354 0h-5.2v3.692h5.17c.53 0 .984.4.984.939v5.215H32V4.631A4.624 4.624 0 0027.354 0zm.954 24.83c0 .532-.4.94-.939.94h-5.215v3.768h5.215c2.577 0 4.631-2.13 4.631-4.707v-5.139h-3.692v5.139zm-23.677.94c-.531 0-.939-.4-.939-.94v-5.138H0v5.139c0 2.577 2.13 4.707 4.708 4.707h5.138V25.77H4.631z\" })));\n}\n\nfunction LockIcon() {\n    return (React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 25 32\" },\n        React.createElement(\"path\", { d: \"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0 8 0 4.571 3.429 4.571 7.619v3.048H3.048A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047zm4.724-13.866H7.467V7.619c0-2.59 2.133-4.724 4.723-4.724 2.591 0 4.724 2.133 4.724 4.724v3.048z\" })));\n}\n\nfunction UnlockIcon() {\n    return (React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 25 32\" },\n        React.createElement(\"path\", { d: \"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0c-4.114 1.828-1.37 2.133.305 2.438 1.676.305 4.42 2.59 4.42 5.181v3.048H3.047A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047z\" })));\n}\n\nconst ControlButton = ({ children, className, ...rest }) => (React.createElement(\"button\", { type: \"button\", className: cc(['react-flow__controls-button', className]), ...rest }, children));\nControlButton.displayName = 'ControlButton';\n\nconst selector = (s) => ({\n    isInteractive: s.nodesDraggable || s.nodesConnectable || s.elementsSelectable,\n    minZoomReached: s.transform[2] <= s.minZoom,\n    maxZoomReached: s.transform[2] >= s.maxZoom,\n});\nconst Controls = ({ style, showZoom = true, showFitView = true, showInteractive = true, fitViewOptions, onZoomIn, onZoomOut, onFitView, onInteractiveChange, className, children, position = 'bottom-left', }) => {\n    const store = useStoreApi();\n    const [isVisible, setIsVisible] = useState(false);\n    const { isInteractive, minZoomReached, maxZoomReached } = useStore(selector, shallow);\n    const { zoomIn, zoomOut, fitView } = useReactFlow();\n    useEffect(() => {\n        setIsVisible(true);\n    }, []);\n    if (!isVisible) {\n        return null;\n    }\n    const onZoomInHandler = () => {\n        zoomIn();\n        onZoomIn?.();\n    };\n    const onZoomOutHandler = () => {\n        zoomOut();\n        onZoomOut?.();\n    };\n    const onFitViewHandler = () => {\n        fitView(fitViewOptions);\n        onFitView?.();\n    };\n    const onToggleInteractivity = () => {\n        store.setState({\n            nodesDraggable: !isInteractive,\n            nodesConnectable: !isInteractive,\n            elementsSelectable: !isInteractive,\n        });\n        onInteractiveChange?.(!isInteractive);\n    };\n    return (React.createElement(Panel, { className: cc(['react-flow__controls', className]), position: position, style: style, \"data-testid\": \"rf__controls\" },\n        showZoom && (React.createElement(React.Fragment, null,\n            React.createElement(ControlButton, { onClick: onZoomInHandler, className: \"react-flow__controls-zoomin\", title: \"zoom in\", \"aria-label\": \"zoom in\", disabled: maxZoomReached },\n                React.createElement(PlusIcon, null)),\n            React.createElement(ControlButton, { onClick: onZoomOutHandler, className: \"react-flow__controls-zoomout\", title: \"zoom out\", \"aria-label\": \"zoom out\", disabled: minZoomReached },\n                React.createElement(MinusIcon, null)))),\n        showFitView && (React.createElement(ControlButton, { className: \"react-flow__controls-fitview\", onClick: onFitViewHandler, title: \"fit view\", \"aria-label\": \"fit view\" },\n            React.createElement(FitViewIcon, null))),\n        showInteractive && (React.createElement(ControlButton, { className: \"react-flow__controls-interactive\", onClick: onToggleInteractivity, title: \"toggle interactivity\", \"aria-label\": \"toggle interactivity\" }, isInteractive ? React.createElement(UnlockIcon, null) : React.createElement(LockIcon, null))),\n        children));\n};\nControls.displayName = 'Controls';\nvar Controls$1 = memo(Controls);\n\nexport { ControlButton, Controls$1 as Controls };\n","import React, { memo, useRef } from 'react';\nimport cc from 'classcat';\nimport { useStore } from '@reactflow/core';\nimport { shallow } from 'zustand/shallow';\n\nvar BackgroundVariant;\n(function (BackgroundVariant) {\n    BackgroundVariant[\"Lines\"] = \"lines\";\n    BackgroundVariant[\"Dots\"] = \"dots\";\n    BackgroundVariant[\"Cross\"] = \"cross\";\n})(BackgroundVariant || (BackgroundVariant = {}));\n\nfunction LinePattern({ color, dimensions, lineWidth }) {\n    return (React.createElement(\"path\", { stroke: color, strokeWidth: lineWidth, d: `M${dimensions[0] / 2} 0 V${dimensions[1]} M0 ${dimensions[1] / 2} H${dimensions[0]}` }));\n}\nfunction DotPattern({ color, radius }) {\n    return React.createElement(\"circle\", { cx: radius, cy: radius, r: radius, fill: color });\n}\n\nconst defaultColor = {\n    [BackgroundVariant.Dots]: '#91919a',\n    [BackgroundVariant.Lines]: '#eee',\n    [BackgroundVariant.Cross]: '#e2e2e2',\n};\nconst defaultSize = {\n    [BackgroundVariant.Dots]: 1,\n    [BackgroundVariant.Lines]: 1,\n    [BackgroundVariant.Cross]: 6,\n};\nconst selector = (s) => ({ transform: s.transform, patternId: `pattern-${s.rfId}` });\nfunction Background({ id, variant = BackgroundVariant.Dots, \n// only used for dots and cross\ngap = 20, \n// only used for lines and cross\nsize, lineWidth = 1, offset = 2, color, style, className, }) {\n    const ref = useRef(null);\n    const { transform, patternId } = useStore(selector, shallow);\n    const patternColor = color || defaultColor[variant];\n    const patternSize = size || defaultSize[variant];\n    const isDots = variant === BackgroundVariant.Dots;\n    const isCross = variant === BackgroundVariant.Cross;\n    const gapXY = Array.isArray(gap) ? gap : [gap, gap];\n    const scaledGap = [gapXY[0] * transform[2] || 1, gapXY[1] * transform[2] || 1];\n    const scaledSize = patternSize * transform[2];\n    const patternDimensions = isCross ? [scaledSize, scaledSize] : scaledGap;\n    const patternOffset = isDots\n        ? [scaledSize / offset, scaledSize / offset]\n        : [patternDimensions[0] / offset, patternDimensions[1] / offset];\n    return (React.createElement(\"svg\", { className: cc(['react-flow__background', className]), style: {\n            ...style,\n            position: 'absolute',\n            width: '100%',\n            height: '100%',\n            top: 0,\n            left: 0,\n        }, ref: ref, \"data-testid\": \"rf__background\" },\n        React.createElement(\"pattern\", { id: patternId + id, x: transform[0] % scaledGap[0], y: transform[1] % scaledGap[1], width: scaledGap[0], height: scaledGap[1], patternUnits: \"userSpaceOnUse\", patternTransform: `translate(-${patternOffset[0]},-${patternOffset[1]})` }, isDots ? (React.createElement(DotPattern, { color: patternColor, radius: scaledSize / offset })) : (React.createElement(LinePattern, { dimensions: patternDimensions, color: patternColor, lineWidth: lineWidth }))),\n        React.createElement(\"rect\", { x: \"0\", y: \"0\", width: \"100%\", height: \"100%\", fill: `url(#${patternId + id})` })));\n}\nBackground.displayName = 'Background';\nvar Background$1 = memo(Background);\n\nexport { Background$1 as Background, BackgroundVariant };\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nmodule.exports = listCacheSet;\n","var listCacheClear = require('./_listCacheClear'),\n    listCacheDelete = require('./_listCacheDelete'),\n    listCacheGet = require('./_listCacheGet'),\n    listCacheHas = require('./_listCacheHas'),\n    listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n    isMasked = require('./_isMasked'),\n    isObject = require('./isObject'),\n    toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n    getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nmodule.exports = hashSet;\n","var hashClear = require('./_hashClear'),\n    hashDelete = require('./_hashDelete'),\n    hashGet = require('./_hashGet'),\n    hashHas = require('./_hashHas'),\n    hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var Hash = require('./_Hash'),\n    ListCache = require('./_ListCache'),\n    Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nmodule.exports = mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nmodule.exports = getMapData;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nmodule.exports = mapCacheSet;\n","var mapCacheClear = require('./_mapCacheClear'),\n    mapCacheDelete = require('./_mapCacheDelete'),\n    mapCacheGet = require('./_mapCacheGet'),\n    mapCacheHas = require('./_mapCacheHas'),\n    mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var ListCache = require('./_ListCache'),\n    Map = require('./_Map'),\n    MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nmodule.exports = stackSet;\n","var ListCache = require('./_ListCache'),\n    stackClear = require('./_stackClear'),\n    stackDelete = require('./_stackDelete'),\n    stackGet = require('./_stackGet'),\n    stackHas = require('./_stackHas'),\n    stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nmodule.exports = arrayEach;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nmodule.exports = baseAssignValue;\n","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignValue;\n","var assignValue = require('./_assignValue'),\n    baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nmodule.exports = copyObject;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nmodule.exports = baseTimes;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n    isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n    stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseGetTag = require('./_baseGetTag'),\n    isLength = require('./isLength'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseTimes = require('./_baseTimes'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isIndex = require('./_isIndex'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var isPrototype = require('./_isPrototype'),\n    nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeys;\n","var isFunction = require('./isFunction'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeys = require('./_baseKeys'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var copyObject = require('./_copyObject'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var isObject = require('./isObject'),\n    isPrototype = require('./_isPrototype'),\n    nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeysIn;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeysIn = require('./_baseKeysIn'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nmodule.exports = cloneBuffer;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nmodule.exports = copyArray;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nmodule.exports = stubArray;\n","var arrayFilter = require('./_arrayFilter'),\n    stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nmodule.exports = getSymbols;\n","var copyObject = require('./_copyObject'),\n    getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nmodule.exports = arrayPush;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var arrayPush = require('./_arrayPush'),\n    getPrototype = require('./_getPrototype'),\n    getSymbols = require('./_getSymbols'),\n    stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var copyObject = require('./_copyObject'),\n    getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var arrayPush = require('./_arrayPush'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbols = require('./_getSymbols'),\n    keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbolsIn = require('./_getSymbolsIn'),\n    keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var DataView = require('./_DataView'),\n    Map = require('./_Map'),\n    Promise = require('./_Promise'),\n    Set = require('./_Set'),\n    WeakMap = require('./_WeakMap'),\n    baseGetTag = require('./_baseGetTag'),\n    toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nmodule.exports = getTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nmodule.exports = initCloneArray;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n    cloneDataView = require('./_cloneDataView'),\n    cloneRegExp = require('./_cloneRegExp'),\n    cloneSymbol = require('./_cloneSymbol'),\n    cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nmodule.exports = initCloneByTag;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nmodule.exports = baseCreate;\n","var baseCreate = require('./_baseCreate'),\n    getPrototype = require('./_getPrototype'),\n    isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nmodule.exports = initCloneObject;\n","var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var baseIsMap = require('./_baseIsMap'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var baseIsSet = require('./_baseIsSet'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var Stack = require('./_Stack'),\n    arrayEach = require('./_arrayEach'),\n    assignValue = require('./_assignValue'),\n    baseAssign = require('./_baseAssign'),\n    baseAssignIn = require('./_baseAssignIn'),\n    cloneBuffer = require('./_cloneBuffer'),\n    copyArray = require('./_copyArray'),\n    copySymbols = require('./_copySymbols'),\n    copySymbolsIn = require('./_copySymbolsIn'),\n    getAllKeys = require('./_getAllKeys'),\n    getAllKeysIn = require('./_getAllKeysIn'),\n    getTag = require('./_getTag'),\n    initCloneArray = require('./_initCloneArray'),\n    initCloneByTag = require('./_initCloneByTag'),\n    initCloneObject = require('./_initCloneObject'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isMap = require('./isMap'),\n    isObject = require('./isObject'),\n    isSet = require('./isSet'),\n    keys = require('./keys'),\n    keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nmodule.exports = baseClone;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n  return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = clone;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nmodule.exports = constant;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nmodule.exports = createBaseFor;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var baseFor = require('./_baseFor'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length,\n        index = fromRight ? length : -1,\n        iterable = Object(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\nmodule.exports = createBaseEach;\n","var baseForOwn = require('./_baseForOwn'),\n    createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = identity;\n","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n  return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","var arrayEach = require('./_arrayEach'),\n    baseEach = require('./_baseEach'),\n    castFunction = require('./_castFunction'),\n    isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n *   console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n  var func = isArray(collection) ? arrayEach : baseEach;\n  return func(collection, castFunction(iteratee));\n}\n\nmodule.exports = forEach;\n","module.exports = require('./forEach');\n","var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n  var result = [];\n  baseEach(collection, function(value, index, collection) {\n    if (predicate(value, index, collection)) {\n      result.push(value);\n    }\n  });\n  return result;\n}\n\nmodule.exports = baseFilter;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","var MapCache = require('./_MapCache'),\n    setCacheAdd = require('./_setCacheAdd'),\n    setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var SetCache = require('./_SetCache'),\n    arraySome = require('./_arraySome'),\n    cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Check that cyclic values are equal.\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\nmodule.exports = setToArray;\n","var Symbol = require('./_Symbol'),\n    Uint8Array = require('./_Uint8Array'),\n    eq = require('./eq'),\n    equalArrays = require('./_equalArrays'),\n    mapToArray = require('./_mapToArray'),\n    setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\nmodule.exports = equalByTag;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Check that cyclic values are equal.\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalObjects;\n","var Stack = require('./_Stack'),\n    equalArrays = require('./_equalArrays'),\n    equalByTag = require('./_equalByTag'),\n    equalObjects = require('./_equalObjects'),\n    getTag = require('./_getTag'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n    baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack;\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === undefined\n            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\nmodule.exports = baseIsMatch;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","var isStrictComparable = require('./_isStrictComparable'),\n    keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = keys(object),\n      length = result.length;\n\n  while (length--) {\n    var key = result[length],\n        value = object[key];\n\n    result[length] = [key, value, isStrictComparable(value)];\n  }\n  return result;\n}\n\nmodule.exports = getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue &&\n      (srcValue !== undefined || (key in Object(object)));\n  };\n}\n\nmodule.exports = matchesStrictComparable;\n","var baseIsMatch = require('./_baseIsMatch'),\n    getMatchData = require('./_getMatchData'),\n    matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\n\nmodule.exports = baseMatches;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nmodule.exports = memoizeCapped;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nmodule.exports = stringToPath;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nmodule.exports = arrayMap;\n","var Symbol = require('./_Symbol'),\n    arrayMap = require('./_arrayMap'),\n    isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var isArray = require('./isArray'),\n    isKey = require('./_isKey'),\n    stringToPath = require('./_stringToPath'),\n    toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","var castPath = require('./_castPath'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = castPath(path, object);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n  return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var castPath = require('./_castPath'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isIndex = require('./_isIndex'),\n    isLength = require('./isLength'),\n    toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      result = false;\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result || ++index != length) {\n    return result;\n  }\n  length = object == null ? 0 : object.length;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var baseHasIn = require('./_baseHasIn'),\n    hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","var baseIsEqual = require('./_baseIsEqual'),\n    get = require('./get'),\n    hasIn = require('./hasIn'),\n    isKey = require('./_isKey'),\n    isStrictComparable = require('./_isStrictComparable'),\n    matchesStrictComparable = require('./_matchesStrictComparable'),\n    toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  if (isKey(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return (objValue === undefined && objValue === srcValue)\n      ? hasIn(object, path)\n      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n  };\n}\n\nmodule.exports = baseMatchesProperty;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\n\nmodule.exports = basePropertyDeep;\n","var baseProperty = require('./_baseProperty'),\n    basePropertyDeep = require('./_basePropertyDeep'),\n    isKey = require('./_isKey'),\n    toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var baseMatches = require('./_baseMatches'),\n    baseMatchesProperty = require('./_baseMatchesProperty'),\n    identity = require('./identity'),\n    isArray = require('./isArray'),\n    property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n  if (typeof value == 'function') {\n    return value;\n  }\n  if (value == null) {\n    return identity;\n  }\n  if (typeof value == 'object') {\n    return isArray(value)\n      ? baseMatchesProperty(value[0], value[1])\n      : baseMatches(value);\n  }\n  return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var arrayFilter = require('./_arrayFilter'),\n    baseFilter = require('./_baseFilter'),\n    baseIteratee = require('./_baseIteratee'),\n    isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n *   { 'user': 'barney', 'age': 36, 'active': true },\n *   { 'user': 'fred',   'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\nfunction filter(collection, predicate) {\n  var func = isArray(collection) ? arrayFilter : baseFilter;\n  return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = filter;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n  return object != null && hasOwnProperty.call(object, key);\n}\n\nmodule.exports = baseHas;\n","var baseHas = require('./_baseHas'),\n    hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n  return object != null && hasPath(object, path, baseHas);\n}\n\nmodule.exports = has;\n","var baseKeys = require('./_baseKeys'),\n    getTag = require('./_getTag'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isArrayLike = require('./isArrayLike'),\n    isBuffer = require('./isBuffer'),\n    isPrototype = require('./_isPrototype'),\n    isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n  if (value == null) {\n    return true;\n  }\n  if (isArrayLike(value) &&\n      (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n        isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n    return !value.length;\n  }\n  var tag = getTag(value);\n  if (tag == mapTag || tag == setTag) {\n    return !value.size;\n  }\n  if (isPrototype(value)) {\n    return !baseKeys(value).length;\n  }\n  for (var key in value) {\n    if (hasOwnProperty.call(value, key)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nmodule.exports = isEmpty;\n","/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n  return value === undefined;\n}\n\nmodule.exports = isUndefined;\n","var baseEach = require('./_baseEach'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n  var index = -1,\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value, key, collection) {\n    result[++index] = iteratee(value, key, collection);\n  });\n  return result;\n}\n\nmodule.exports = baseMap;\n","var arrayMap = require('./_arrayMap'),\n    baseIteratee = require('./_baseIteratee'),\n    baseMap = require('./_baseMap'),\n    isArray = require('./isArray');\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n *   return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n *   { 'user': 'barney' },\n *   { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n  var func = isArray(collection) ? arrayMap : baseMap;\n  return func(collection, baseIteratee(iteratee, 3));\n}\n\nmodule.exports = map;\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n *  the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  if (initAccum && length) {\n    accumulator = array[++index];\n  }\n  while (++index < length) {\n    accumulator = iteratee(accumulator, array[index], index, array);\n  }\n  return accumulator;\n}\n\nmodule.exports = arrayReduce;\n","/**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n *  `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n  eachFunc(collection, function(value, index, collection) {\n    accumulator = initAccum\n      ? (initAccum = false, value)\n      : iteratee(accumulator, value, index, collection);\n  });\n  return accumulator;\n}\n\nmodule.exports = baseReduce;\n","var arrayReduce = require('./_arrayReduce'),\n    baseEach = require('./_baseEach'),\n    baseIteratee = require('./_baseIteratee'),\n    baseReduce = require('./_baseReduce'),\n    isArray = require('./isArray');\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n *   return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n *   (result[value] || (result[value] = [])).push(key);\n *   return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\nfunction reduce(collection, iteratee, accumulator) {\n  var func = isArray(collection) ? arrayReduce : baseReduce,\n      initAccum = arguments.length < 3;\n\n  return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n}\n\nmodule.exports = reduce;\n","var baseGetTag = require('./_baseGetTag'),\n    isArray = require('./isArray'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n  return typeof value == 'string' ||\n    (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","var baseProperty = require('./_baseProperty');\n\n/**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nvar asciiSize = baseProperty('length');\n\nmodule.exports = asciiSize;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n  return reHasUnicode.test(string);\n}\n\nmodule.exports = hasUnicode;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nfunction unicodeSize(string) {\n  var result = reUnicode.lastIndex = 0;\n  while (reUnicode.test(string)) {\n    ++result;\n  }\n  return result;\n}\n\nmodule.exports = unicodeSize;\n","var asciiSize = require('./_asciiSize'),\n    hasUnicode = require('./_hasUnicode'),\n    unicodeSize = require('./_unicodeSize');\n\n/**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\nfunction stringSize(string) {\n  return hasUnicode(string)\n    ? unicodeSize(string)\n    : asciiSize(string);\n}\n\nmodule.exports = stringSize;\n","var baseKeys = require('./_baseKeys'),\n    getTag = require('./_getTag'),\n    isArrayLike = require('./isArrayLike'),\n    isString = require('./isString'),\n    stringSize = require('./_stringSize');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\n\n/**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\nfunction size(collection) {\n  if (collection == null) {\n    return 0;\n  }\n  if (isArrayLike(collection)) {\n    return isString(collection) ? stringSize(collection) : collection.length;\n  }\n  var tag = getTag(collection);\n  if (tag == mapTag || tag == setTag) {\n    return collection.size;\n  }\n  return baseKeys(collection).length;\n}\n\nmodule.exports = size;\n","var arrayEach = require('./_arrayEach'),\n    baseCreate = require('./_baseCreate'),\n    baseForOwn = require('./_baseForOwn'),\n    baseIteratee = require('./_baseIteratee'),\n    getPrototype = require('./_getPrototype'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isFunction = require('./isFunction'),\n    isObject = require('./isObject'),\n    isTypedArray = require('./isTypedArray');\n\n/**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n *   result.push(n *= n);\n *   return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n *   (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\nfunction transform(object, iteratee, accumulator) {\n  var isArr = isArray(object),\n      isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n  iteratee = baseIteratee(iteratee, 4);\n  if (accumulator == null) {\n    var Ctor = object && object.constructor;\n    if (isArrLike) {\n      accumulator = isArr ? new Ctor : [];\n    }\n    else if (isObject(object)) {\n      accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n    }\n    else {\n      accumulator = {};\n    }\n  }\n  (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n    return iteratee(accumulator, value, index, object);\n  });\n  return accumulator;\n}\n\nmodule.exports = transform;\n","var Symbol = require('./_Symbol'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","var arrayPush = require('./_arrayPush'),\n    isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseFlatten;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nmodule.exports = overRest;\n","var constant = require('./constant'),\n    defineProperty = require('./_defineProperty'),\n    identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nmodule.exports = baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nmodule.exports = shortOut;\n","var baseSetToString = require('./_baseSetToString'),\n    shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var identity = require('./identity'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n  var length = array.length,\n      index = fromIndex + (fromRight ? 1 : -1);\n\n  while ((fromRight ? index-- : ++index < length)) {\n    if (predicate(array[index], index, array)) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n  return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n  var index = fromIndex - 1,\n      length = array.length;\n\n  while (++index < length) {\n    if (array[index] === value) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = strictIndexOf;\n","var baseFindIndex = require('./_baseFindIndex'),\n    baseIsNaN = require('./_baseIsNaN'),\n    strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n  return value === value\n    ? strictIndexOf(array, value, fromIndex)\n    : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n  var length = array == null ? 0 : array.length;\n  return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (comparator(value, array[index])) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n  // No operation performed.\n}\n\nmodule.exports = noop;\n","var Set = require('./_Set'),\n    noop = require('./noop'),\n    setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n  return new Set(values);\n};\n\nmodule.exports = createSet;\n","var SetCache = require('./_SetCache'),\n    arrayIncludes = require('./_arrayIncludes'),\n    arrayIncludesWith = require('./_arrayIncludesWith'),\n    cacheHas = require('./_cacheHas'),\n    createSet = require('./_createSet'),\n    setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n  var index = -1,\n      includes = arrayIncludes,\n      length = array.length,\n      isCommon = true,\n      result = [],\n      seen = result;\n\n  if (comparator) {\n    isCommon = false;\n    includes = arrayIncludesWith;\n  }\n  else if (length >= LARGE_ARRAY_SIZE) {\n    var set = iteratee ? null : createSet(array);\n    if (set) {\n      return setToArray(set);\n    }\n    isCommon = false;\n    includes = cacheHas;\n    seen = new SetCache;\n  }\n  else {\n    seen = iteratee ? [] : result;\n  }\n  outer:\n  while (++index < length) {\n    var value = array[index],\n        computed = iteratee ? iteratee(value) : value;\n\n    value = (comparator || value !== 0) ? value : 0;\n    if (isCommon && computed === computed) {\n      var seenIndex = seen.length;\n      while (seenIndex--) {\n        if (seen[seenIndex] === computed) {\n          continue outer;\n        }\n      }\n      if (iteratee) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n    else if (!includes(seen, computed, comparator)) {\n      if (seen !== result) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseUniq;\n","var isArrayLike = require('./isArrayLike'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","var baseFlatten = require('./_baseFlatten'),\n    baseRest = require('./_baseRest'),\n    baseUniq = require('./_baseUniq'),\n    isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\nvar union = baseRest(function(arrays) {\n  return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nmodule.exports = union;\n","var arrayMap = require('./_arrayMap');\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n  return arrayMap(props, function(key) {\n    return object[key];\n  });\n}\n\nmodule.exports = baseValues;\n","var baseValues = require('./_baseValues'),\n    keys = require('./keys');\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n  return object == null ? [] : baseValues(object, keys(object));\n}\n\nmodule.exports = values;\n","/* global window */\n\nvar lodash;\n\nif (typeof require === \"function\") {\n  try {\n    lodash = {\n      clone: require(\"lodash/clone\"),\n      constant: require(\"lodash/constant\"),\n      each: require(\"lodash/each\"),\n      filter: require(\"lodash/filter\"),\n      has:  require(\"lodash/has\"),\n      isArray: require(\"lodash/isArray\"),\n      isEmpty: require(\"lodash/isEmpty\"),\n      isFunction: require(\"lodash/isFunction\"),\n      isUndefined: require(\"lodash/isUndefined\"),\n      keys: require(\"lodash/keys\"),\n      map: require(\"lodash/map\"),\n      reduce: require(\"lodash/reduce\"),\n      size: require(\"lodash/size\"),\n      transform: require(\"lodash/transform\"),\n      union: require(\"lodash/union\"),\n      values: require(\"lodash/values\")\n    };\n  } catch (e) {\n    // continue regardless of error\n  }\n}\n\nif (!lodash) {\n  lodash = window._;\n}\n\nmodule.exports = lodash;\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\n\nmodule.exports = Graph;\n\nvar DEFAULT_EDGE_NAME = \"\\x00\";\nvar GRAPH_NODE = \"\\x00\";\nvar EDGE_KEY_DELIM = \"\\x01\";\n\n// Implementation notes:\n//\n//  * Node id query functions should return string ids for the nodes\n//  * Edge id query functions should return an \"edgeObj\", edge object, that is\n//    composed of enough information to uniquely identify an edge: {v, w, name}.\n//  * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n//    reference edges. This is because we need a performant way to look these\n//    edges up and, object properties, which have string keys, are the closest\n//    we're going to get to a performant hashtable in JavaScript.\n\nfunction Graph(opts) {\n  this._isDirected = _.has(opts, \"directed\") ? opts.directed : true;\n  this._isMultigraph = _.has(opts, \"multigraph\") ? opts.multigraph : false;\n  this._isCompound = _.has(opts, \"compound\") ? opts.compound : false;\n\n  // Label for the graph itself\n  this._label = undefined;\n\n  // Defaults to be set when creating a new node\n  this._defaultNodeLabelFn = _.constant(undefined);\n\n  // Defaults to be set when creating a new edge\n  this._defaultEdgeLabelFn = _.constant(undefined);\n\n  // v -> label\n  this._nodes = {};\n\n  if (this._isCompound) {\n    // v -> parent\n    this._parent = {};\n\n    // v -> children\n    this._children = {};\n    this._children[GRAPH_NODE] = {};\n  }\n\n  // v -> edgeObj\n  this._in = {};\n\n  // u -> v -> Number\n  this._preds = {};\n\n  // v -> edgeObj\n  this._out = {};\n\n  // v -> w -> Number\n  this._sucs = {};\n\n  // e -> edgeObj\n  this._edgeObjs = {};\n\n  // e -> label\n  this._edgeLabels = {};\n}\n\n/* Number of nodes in the graph. Should only be changed by the implementation. */\nGraph.prototype._nodeCount = 0;\n\n/* Number of edges in the graph. Should only be changed by the implementation. */\nGraph.prototype._edgeCount = 0;\n\n\n/* === Graph functions ========= */\n\nGraph.prototype.isDirected = function() {\n  return this._isDirected;\n};\n\nGraph.prototype.isMultigraph = function() {\n  return this._isMultigraph;\n};\n\nGraph.prototype.isCompound = function() {\n  return this._isCompound;\n};\n\nGraph.prototype.setGraph = function(label) {\n  this._label = label;\n  return this;\n};\n\nGraph.prototype.graph = function() {\n  return this._label;\n};\n\n\n/* === Node functions ========== */\n\nGraph.prototype.setDefaultNodeLabel = function(newDefault) {\n  if (!_.isFunction(newDefault)) {\n    newDefault = _.constant(newDefault);\n  }\n  this._defaultNodeLabelFn = newDefault;\n  return this;\n};\n\nGraph.prototype.nodeCount = function() {\n  return this._nodeCount;\n};\n\nGraph.prototype.nodes = function() {\n  return _.keys(this._nodes);\n};\n\nGraph.prototype.sources = function() {\n  var self = this;\n  return _.filter(this.nodes(), function(v) {\n    return _.isEmpty(self._in[v]);\n  });\n};\n\nGraph.prototype.sinks = function() {\n  var self = this;\n  return _.filter(this.nodes(), function(v) {\n    return _.isEmpty(self._out[v]);\n  });\n};\n\nGraph.prototype.setNodes = function(vs, value) {\n  var args = arguments;\n  var self = this;\n  _.each(vs, function(v) {\n    if (args.length > 1) {\n      self.setNode(v, value);\n    } else {\n      self.setNode(v);\n    }\n  });\n  return this;\n};\n\nGraph.prototype.setNode = function(v, value) {\n  if (_.has(this._nodes, v)) {\n    if (arguments.length > 1) {\n      this._nodes[v] = value;\n    }\n    return this;\n  }\n\n  this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v);\n  if (this._isCompound) {\n    this._parent[v] = GRAPH_NODE;\n    this._children[v] = {};\n    this._children[GRAPH_NODE][v] = true;\n  }\n  this._in[v] = {};\n  this._preds[v] = {};\n  this._out[v] = {};\n  this._sucs[v] = {};\n  ++this._nodeCount;\n  return this;\n};\n\nGraph.prototype.node = function(v) {\n  return this._nodes[v];\n};\n\nGraph.prototype.hasNode = function(v) {\n  return _.has(this._nodes, v);\n};\n\nGraph.prototype.removeNode =  function(v) {\n  var self = this;\n  if (_.has(this._nodes, v)) {\n    var removeEdge = function(e) { self.removeEdge(self._edgeObjs[e]); };\n    delete this._nodes[v];\n    if (this._isCompound) {\n      this._removeFromParentsChildList(v);\n      delete this._parent[v];\n      _.each(this.children(v), function(child) {\n        self.setParent(child);\n      });\n      delete this._children[v];\n    }\n    _.each(_.keys(this._in[v]), removeEdge);\n    delete this._in[v];\n    delete this._preds[v];\n    _.each(_.keys(this._out[v]), removeEdge);\n    delete this._out[v];\n    delete this._sucs[v];\n    --this._nodeCount;\n  }\n  return this;\n};\n\nGraph.prototype.setParent = function(v, parent) {\n  if (!this._isCompound) {\n    throw new Error(\"Cannot set parent in a non-compound graph\");\n  }\n\n  if (_.isUndefined(parent)) {\n    parent = GRAPH_NODE;\n  } else {\n    // Coerce parent to string\n    parent += \"\";\n    for (var ancestor = parent;\n      !_.isUndefined(ancestor);\n      ancestor = this.parent(ancestor)) {\n      if (ancestor === v) {\n        throw new Error(\"Setting \" + parent+ \" as parent of \" + v +\n                        \" would create a cycle\");\n      }\n    }\n\n    this.setNode(parent);\n  }\n\n  this.setNode(v);\n  this._removeFromParentsChildList(v);\n  this._parent[v] = parent;\n  this._children[parent][v] = true;\n  return this;\n};\n\nGraph.prototype._removeFromParentsChildList = function(v) {\n  delete this._children[this._parent[v]][v];\n};\n\nGraph.prototype.parent = function(v) {\n  if (this._isCompound) {\n    var parent = this._parent[v];\n    if (parent !== GRAPH_NODE) {\n      return parent;\n    }\n  }\n};\n\nGraph.prototype.children = function(v) {\n  if (_.isUndefined(v)) {\n    v = GRAPH_NODE;\n  }\n\n  if (this._isCompound) {\n    var children = this._children[v];\n    if (children) {\n      return _.keys(children);\n    }\n  } else if (v === GRAPH_NODE) {\n    return this.nodes();\n  } else if (this.hasNode(v)) {\n    return [];\n  }\n};\n\nGraph.prototype.predecessors = function(v) {\n  var predsV = this._preds[v];\n  if (predsV) {\n    return _.keys(predsV);\n  }\n};\n\nGraph.prototype.successors = function(v) {\n  var sucsV = this._sucs[v];\n  if (sucsV) {\n    return _.keys(sucsV);\n  }\n};\n\nGraph.prototype.neighbors = function(v) {\n  var preds = this.predecessors(v);\n  if (preds) {\n    return _.union(preds, this.successors(v));\n  }\n};\n\nGraph.prototype.isLeaf = function (v) {\n  var neighbors;\n  if (this.isDirected()) {\n    neighbors = this.successors(v);\n  } else {\n    neighbors = this.neighbors(v);\n  }\n  return neighbors.length === 0;\n};\n\nGraph.prototype.filterNodes = function(filter) {\n  var copy = new this.constructor({\n    directed: this._isDirected,\n    multigraph: this._isMultigraph,\n    compound: this._isCompound\n  });\n\n  copy.setGraph(this.graph());\n\n  var self = this;\n  _.each(this._nodes, function(value, v) {\n    if (filter(v)) {\n      copy.setNode(v, value);\n    }\n  });\n\n  _.each(this._edgeObjs, function(e) {\n    if (copy.hasNode(e.v) && copy.hasNode(e.w)) {\n      copy.setEdge(e, self.edge(e));\n    }\n  });\n\n  var parents = {};\n  function findParent(v) {\n    var parent = self.parent(v);\n    if (parent === undefined || copy.hasNode(parent)) {\n      parents[v] = parent;\n      return parent;\n    } else if (parent in parents) {\n      return parents[parent];\n    } else {\n      return findParent(parent);\n    }\n  }\n\n  if (this._isCompound) {\n    _.each(copy.nodes(), function(v) {\n      copy.setParent(v, findParent(v));\n    });\n  }\n\n  return copy;\n};\n\n/* === Edge functions ========== */\n\nGraph.prototype.setDefaultEdgeLabel = function(newDefault) {\n  if (!_.isFunction(newDefault)) {\n    newDefault = _.constant(newDefault);\n  }\n  this._defaultEdgeLabelFn = newDefault;\n  return this;\n};\n\nGraph.prototype.edgeCount = function() {\n  return this._edgeCount;\n};\n\nGraph.prototype.edges = function() {\n  return _.values(this._edgeObjs);\n};\n\nGraph.prototype.setPath = function(vs, value) {\n  var self = this;\n  var args = arguments;\n  _.reduce(vs, function(v, w) {\n    if (args.length > 1) {\n      self.setEdge(v, w, value);\n    } else {\n      self.setEdge(v, w);\n    }\n    return w;\n  });\n  return this;\n};\n\n/*\n * setEdge(v, w, [value, [name]])\n * setEdge({ v, w, [name] }, [value])\n */\nGraph.prototype.setEdge = function() {\n  var v, w, name, value;\n  var valueSpecified = false;\n  var arg0 = arguments[0];\n\n  if (typeof arg0 === \"object\" && arg0 !== null && \"v\" in arg0) {\n    v = arg0.v;\n    w = arg0.w;\n    name = arg0.name;\n    if (arguments.length === 2) {\n      value = arguments[1];\n      valueSpecified = true;\n    }\n  } else {\n    v = arg0;\n    w = arguments[1];\n    name = arguments[3];\n    if (arguments.length > 2) {\n      value = arguments[2];\n      valueSpecified = true;\n    }\n  }\n\n  v = \"\" + v;\n  w = \"\" + w;\n  if (!_.isUndefined(name)) {\n    name = \"\" + name;\n  }\n\n  var e = edgeArgsToId(this._isDirected, v, w, name);\n  if (_.has(this._edgeLabels, e)) {\n    if (valueSpecified) {\n      this._edgeLabels[e] = value;\n    }\n    return this;\n  }\n\n  if (!_.isUndefined(name) && !this._isMultigraph) {\n    throw new Error(\"Cannot set a named edge when isMultigraph = false\");\n  }\n\n  // It didn't exist, so we need to create it.\n  // First ensure the nodes exist.\n  this.setNode(v);\n  this.setNode(w);\n\n  this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name);\n\n  var edgeObj = edgeArgsToObj(this._isDirected, v, w, name);\n  // Ensure we add undirected edges in a consistent way.\n  v = edgeObj.v;\n  w = edgeObj.w;\n\n  Object.freeze(edgeObj);\n  this._edgeObjs[e] = edgeObj;\n  incrementOrInitEntry(this._preds[w], v);\n  incrementOrInitEntry(this._sucs[v], w);\n  this._in[w][e] = edgeObj;\n  this._out[v][e] = edgeObj;\n  this._edgeCount++;\n  return this;\n};\n\nGraph.prototype.edge = function(v, w, name) {\n  var e = (arguments.length === 1\n    ? edgeObjToId(this._isDirected, arguments[0])\n    : edgeArgsToId(this._isDirected, v, w, name));\n  return this._edgeLabels[e];\n};\n\nGraph.prototype.hasEdge = function(v, w, name) {\n  var e = (arguments.length === 1\n    ? edgeObjToId(this._isDirected, arguments[0])\n    : edgeArgsToId(this._isDirected, v, w, name));\n  return _.has(this._edgeLabels, e);\n};\n\nGraph.prototype.removeEdge = function(v, w, name) {\n  var e = (arguments.length === 1\n    ? edgeObjToId(this._isDirected, arguments[0])\n    : edgeArgsToId(this._isDirected, v, w, name));\n  var edge = this._edgeObjs[e];\n  if (edge) {\n    v = edge.v;\n    w = edge.w;\n    delete this._edgeLabels[e];\n    delete this._edgeObjs[e];\n    decrementOrRemoveEntry(this._preds[w], v);\n    decrementOrRemoveEntry(this._sucs[v], w);\n    delete this._in[w][e];\n    delete this._out[v][e];\n    this._edgeCount--;\n  }\n  return this;\n};\n\nGraph.prototype.inEdges = function(v, u) {\n  var inV = this._in[v];\n  if (inV) {\n    var edges = _.values(inV);\n    if (!u) {\n      return edges;\n    }\n    return _.filter(edges, function(edge) { return edge.v === u; });\n  }\n};\n\nGraph.prototype.outEdges = function(v, w) {\n  var outV = this._out[v];\n  if (outV) {\n    var edges = _.values(outV);\n    if (!w) {\n      return edges;\n    }\n    return _.filter(edges, function(edge) { return edge.w === w; });\n  }\n};\n\nGraph.prototype.nodeEdges = function(v, w) {\n  var inEdges = this.inEdges(v, w);\n  if (inEdges) {\n    return inEdges.concat(this.outEdges(v, w));\n  }\n};\n\nfunction incrementOrInitEntry(map, k) {\n  if (map[k]) {\n    map[k]++;\n  } else {\n    map[k] = 1;\n  }\n}\n\nfunction decrementOrRemoveEntry(map, k) {\n  if (!--map[k]) { delete map[k]; }\n}\n\nfunction edgeArgsToId(isDirected, v_, w_, name) {\n  var v = \"\" + v_;\n  var w = \"\" + w_;\n  if (!isDirected && v > w) {\n    var tmp = v;\n    v = w;\n    w = tmp;\n  }\n  return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM +\n             (_.isUndefined(name) ? DEFAULT_EDGE_NAME : name);\n}\n\nfunction edgeArgsToObj(isDirected, v_, w_, name) {\n  var v = \"\" + v_;\n  var w = \"\" + w_;\n  if (!isDirected && v > w) {\n    var tmp = v;\n    v = w;\n    w = tmp;\n  }\n  var edgeObj =  { v: v, w: w };\n  if (name) {\n    edgeObj.name = name;\n  }\n  return edgeObj;\n}\n\nfunction edgeObjToId(isDirected, edgeObj) {\n  return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name);\n}\n","module.exports = '2.1.8';\n","// Includes only the \"core\" of graphlib\nmodule.exports = {\n  Graph: require(\"./graph\"),\n  version: require(\"./version\")\n};\n","var _ = require(\"./lodash\");\nvar Graph = require(\"./graph\");\n\nmodule.exports = {\n  write: write,\n  read: read\n};\n\nfunction write(g) {\n  var json = {\n    options: {\n      directed: g.isDirected(),\n      multigraph: g.isMultigraph(),\n      compound: g.isCompound()\n    },\n    nodes: writeNodes(g),\n    edges: writeEdges(g)\n  };\n  if (!_.isUndefined(g.graph())) {\n    json.value = _.clone(g.graph());\n  }\n  return json;\n}\n\nfunction writeNodes(g) {\n  return _.map(g.nodes(), function(v) {\n    var nodeValue = g.node(v);\n    var parent = g.parent(v);\n    var node = { v: v };\n    if (!_.isUndefined(nodeValue)) {\n      node.value = nodeValue;\n    }\n    if (!_.isUndefined(parent)) {\n      node.parent = parent;\n    }\n    return node;\n  });\n}\n\nfunction writeEdges(g) {\n  return _.map(g.edges(), function(e) {\n    var edgeValue = g.edge(e);\n    var edge = { v: e.v, w: e.w };\n    if (!_.isUndefined(e.name)) {\n      edge.name = e.name;\n    }\n    if (!_.isUndefined(edgeValue)) {\n      edge.value = edgeValue;\n    }\n    return edge;\n  });\n}\n\nfunction read(json) {\n  var g = new Graph(json.options).setGraph(json.value);\n  _.each(json.nodes, function(entry) {\n    g.setNode(entry.v, entry.value);\n    if (entry.parent) {\n      g.setParent(entry.v, entry.parent);\n    }\n  });\n  _.each(json.edges, function(entry) {\n    g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value);\n  });\n  return g;\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = components;\n\nfunction components(g) {\n  var visited = {};\n  var cmpts = [];\n  var cmpt;\n\n  function dfs(v) {\n    if (_.has(visited, v)) return;\n    visited[v] = true;\n    cmpt.push(v);\n    _.each(g.successors(v), dfs);\n    _.each(g.predecessors(v), dfs);\n  }\n\n  _.each(g.nodes(), function(v) {\n    cmpt = [];\n    dfs(v);\n    if (cmpt.length) {\n      cmpts.push(cmpt);\n    }\n  });\n\n  return cmpts;\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = PriorityQueue;\n\n/**\n * A min-priority queue data structure. This algorithm is derived from Cormen,\n * et al., \"Introduction to Algorithms\". The basic idea of a min-priority\n * queue is that you can efficiently (in O(1) time) get the smallest key in\n * the queue. Adding and removing elements takes O(log n) time. A key can\n * have its priority decreased in O(log n) time.\n */\nfunction PriorityQueue() {\n  this._arr = [];\n  this._keyIndices = {};\n}\n\n/**\n * Returns the number of elements in the queue. Takes `O(1)` time.\n */\nPriorityQueue.prototype.size = function() {\n  return this._arr.length;\n};\n\n/**\n * Returns the keys that are in the queue. Takes `O(n)` time.\n */\nPriorityQueue.prototype.keys = function() {\n  return this._arr.map(function(x) { return x.key; });\n};\n\n/**\n * Returns `true` if **key** is in the queue and `false` if not.\n */\nPriorityQueue.prototype.has = function(key) {\n  return _.has(this._keyIndices, key);\n};\n\n/**\n * Returns the priority for **key**. If **key** is not present in the queue\n * then this function returns `undefined`. Takes `O(1)` time.\n *\n * @param {Object} key\n */\nPriorityQueue.prototype.priority = function(key) {\n  var index = this._keyIndices[key];\n  if (index !== undefined) {\n    return this._arr[index].priority;\n  }\n};\n\n/**\n * Returns the key for the minimum element in this queue. If the queue is\n * empty this function throws an Error. Takes `O(1)` time.\n */\nPriorityQueue.prototype.min = function() {\n  if (this.size() === 0) {\n    throw new Error(\"Queue underflow\");\n  }\n  return this._arr[0].key;\n};\n\n/**\n * Inserts a new key into the priority queue. If the key already exists in\n * the queue this function returns `false`; otherwise it will return `true`.\n * Takes `O(n)` time.\n *\n * @param {Object} key the key to add\n * @param {Number} priority the initial priority for the key\n */\nPriorityQueue.prototype.add = function(key, priority) {\n  var keyIndices = this._keyIndices;\n  key = String(key);\n  if (!_.has(keyIndices, key)) {\n    var arr = this._arr;\n    var index = arr.length;\n    keyIndices[key] = index;\n    arr.push({key: key, priority: priority});\n    this._decrease(index);\n    return true;\n  }\n  return false;\n};\n\n/**\n * Removes and returns the smallest key in the queue. Takes `O(log n)` time.\n */\nPriorityQueue.prototype.removeMin = function() {\n  this._swap(0, this._arr.length - 1);\n  var min = this._arr.pop();\n  delete this._keyIndices[min.key];\n  this._heapify(0);\n  return min.key;\n};\n\n/**\n * Decreases the priority for **key** to **priority**. If the new priority is\n * greater than the previous priority, this function will throw an Error.\n *\n * @param {Object} key the key for which to raise priority\n * @param {Number} priority the new priority for the key\n */\nPriorityQueue.prototype.decrease = function(key, priority) {\n  var index = this._keyIndices[key];\n  if (priority > this._arr[index].priority) {\n    throw new Error(\"New priority is greater than current priority. \" +\n        \"Key: \" + key + \" Old: \" + this._arr[index].priority + \" New: \" + priority);\n  }\n  this._arr[index].priority = priority;\n  this._decrease(index);\n};\n\nPriorityQueue.prototype._heapify = function(i) {\n  var arr = this._arr;\n  var l = 2 * i;\n  var r = l + 1;\n  var largest = i;\n  if (l < arr.length) {\n    largest = arr[l].priority < arr[largest].priority ? l : largest;\n    if (r < arr.length) {\n      largest = arr[r].priority < arr[largest].priority ? r : largest;\n    }\n    if (largest !== i) {\n      this._swap(i, largest);\n      this._heapify(largest);\n    }\n  }\n};\n\nPriorityQueue.prototype._decrease = function(index) {\n  var arr = this._arr;\n  var priority = arr[index].priority;\n  var parent;\n  while (index !== 0) {\n    parent = index >> 1;\n    if (arr[parent].priority < priority) {\n      break;\n    }\n    this._swap(index, parent);\n    index = parent;\n  }\n};\n\nPriorityQueue.prototype._swap = function(i, j) {\n  var arr = this._arr;\n  var keyIndices = this._keyIndices;\n  var origArrI = arr[i];\n  var origArrJ = arr[j];\n  arr[i] = origArrJ;\n  arr[j] = origArrI;\n  keyIndices[origArrJ.key] = i;\n  keyIndices[origArrI.key] = j;\n};\n","var _ = require(\"../lodash\");\nvar PriorityQueue = require(\"../data/priority-queue\");\n\nmodule.exports = dijkstra;\n\nvar DEFAULT_WEIGHT_FUNC = _.constant(1);\n\nfunction dijkstra(g, source, weightFn, edgeFn) {\n  return runDijkstra(g, String(source),\n    weightFn || DEFAULT_WEIGHT_FUNC,\n    edgeFn || function(v) { return g.outEdges(v); });\n}\n\nfunction runDijkstra(g, source, weightFn, edgeFn) {\n  var results = {};\n  var pq = new PriorityQueue();\n  var v, vEntry;\n\n  var updateNeighbors = function(edge) {\n    var w = edge.v !== v ? edge.v : edge.w;\n    var wEntry = results[w];\n    var weight = weightFn(edge);\n    var distance = vEntry.distance + weight;\n\n    if (weight < 0) {\n      throw new Error(\"dijkstra does not allow negative edge weights. \" +\n                      \"Bad edge: \" + edge + \" Weight: \" + weight);\n    }\n\n    if (distance < wEntry.distance) {\n      wEntry.distance = distance;\n      wEntry.predecessor = v;\n      pq.decrease(w, distance);\n    }\n  };\n\n  g.nodes().forEach(function(v) {\n    var distance = v === source ? 0 : Number.POSITIVE_INFINITY;\n    results[v] = { distance: distance };\n    pq.add(v, distance);\n  });\n\n  while (pq.size() > 0) {\n    v = pq.removeMin();\n    vEntry = results[v];\n    if (vEntry.distance === Number.POSITIVE_INFINITY) {\n      break;\n    }\n\n    edgeFn(v).forEach(updateNeighbors);\n  }\n\n  return results;\n}\n","var dijkstra = require(\"./dijkstra\");\nvar _ = require(\"../lodash\");\n\nmodule.exports = dijkstraAll;\n\nfunction dijkstraAll(g, weightFunc, edgeFunc) {\n  return _.transform(g.nodes(), function(acc, v) {\n    acc[v] = dijkstra(g, v, weightFunc, edgeFunc);\n  }, {});\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = tarjan;\n\nfunction tarjan(g) {\n  var index = 0;\n  var stack = [];\n  var visited = {}; // node id -> { onStack, lowlink, index }\n  var results = [];\n\n  function dfs(v) {\n    var entry = visited[v] = {\n      onStack: true,\n      lowlink: index,\n      index: index++\n    };\n    stack.push(v);\n\n    g.successors(v).forEach(function(w) {\n      if (!_.has(visited, w)) {\n        dfs(w);\n        entry.lowlink = Math.min(entry.lowlink, visited[w].lowlink);\n      } else if (visited[w].onStack) {\n        entry.lowlink = Math.min(entry.lowlink, visited[w].index);\n      }\n    });\n\n    if (entry.lowlink === entry.index) {\n      var cmpt = [];\n      var w;\n      do {\n        w = stack.pop();\n        visited[w].onStack = false;\n        cmpt.push(w);\n      } while (v !== w);\n      results.push(cmpt);\n    }\n  }\n\n  g.nodes().forEach(function(v) {\n    if (!_.has(visited, v)) {\n      dfs(v);\n    }\n  });\n\n  return results;\n}\n","var _ = require(\"../lodash\");\nvar tarjan = require(\"./tarjan\");\n\nmodule.exports = findCycles;\n\nfunction findCycles(g) {\n  return _.filter(tarjan(g), function(cmpt) {\n    return cmpt.length > 1 || (cmpt.length === 1 && g.hasEdge(cmpt[0], cmpt[0]));\n  });\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = floydWarshall;\n\nvar DEFAULT_WEIGHT_FUNC = _.constant(1);\n\nfunction floydWarshall(g, weightFn, edgeFn) {\n  return runFloydWarshall(g,\n    weightFn || DEFAULT_WEIGHT_FUNC,\n    edgeFn || function(v) { return g.outEdges(v); });\n}\n\nfunction runFloydWarshall(g, weightFn, edgeFn) {\n  var results = {};\n  var nodes = g.nodes();\n\n  nodes.forEach(function(v) {\n    results[v] = {};\n    results[v][v] = { distance: 0 };\n    nodes.forEach(function(w) {\n      if (v !== w) {\n        results[v][w] = { distance: Number.POSITIVE_INFINITY };\n      }\n    });\n    edgeFn(v).forEach(function(edge) {\n      var w = edge.v === v ? edge.w : edge.v;\n      var d = weightFn(edge);\n      results[v][w] = { distance: d, predecessor: v };\n    });\n  });\n\n  nodes.forEach(function(k) {\n    var rowK = results[k];\n    nodes.forEach(function(i) {\n      var rowI = results[i];\n      nodes.forEach(function(j) {\n        var ik = rowI[k];\n        var kj = rowK[j];\n        var ij = rowI[j];\n        var altDistance = ik.distance + kj.distance;\n        if (altDistance < ij.distance) {\n          ij.distance = altDistance;\n          ij.predecessor = kj.predecessor;\n        }\n      });\n    });\n  });\n\n  return results;\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = topsort;\ntopsort.CycleException = CycleException;\n\nfunction topsort(g) {\n  var visited = {};\n  var stack = {};\n  var results = [];\n\n  function visit(node) {\n    if (_.has(stack, node)) {\n      throw new CycleException();\n    }\n\n    if (!_.has(visited, node)) {\n      stack[node] = true;\n      visited[node] = true;\n      _.each(g.predecessors(node), visit);\n      delete stack[node];\n      results.push(node);\n    }\n  }\n\n  _.each(g.sinks(), visit);\n\n  if (_.size(visited) !== g.nodeCount()) {\n    throw new CycleException();\n  }\n\n  return results;\n}\n\nfunction CycleException() {}\nCycleException.prototype = new Error(); // must be an instance of Error to pass testing","var topsort = require(\"./topsort\");\n\nmodule.exports = isAcyclic;\n\nfunction isAcyclic(g) {\n  try {\n    topsort(g);\n  } catch (e) {\n    if (e instanceof topsort.CycleException) {\n      return false;\n    }\n    throw e;\n  }\n  return true;\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = dfs;\n\n/*\n * A helper that preforms a pre- or post-order traversal on the input graph\n * and returns the nodes in the order they were visited. If the graph is\n * undirected then this algorithm will navigate using neighbors. If the graph\n * is directed then this algorithm will navigate using successors.\n *\n * Order must be one of \"pre\" or \"post\".\n */\nfunction dfs(g, vs, order) {\n  if (!_.isArray(vs)) {\n    vs = [vs];\n  }\n\n  var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g);\n\n  var acc = [];\n  var visited = {};\n  _.each(vs, function(v) {\n    if (!g.hasNode(v)) {\n      throw new Error(\"Graph does not have node: \" + v);\n    }\n\n    doDfs(g, v, order === \"post\", visited, navigation, acc);\n  });\n  return acc;\n}\n\nfunction doDfs(g, v, postorder, visited, navigation, acc) {\n  if (!_.has(visited, v)) {\n    visited[v] = true;\n\n    if (!postorder) { acc.push(v); }\n    _.each(navigation(v), function(w) {\n      doDfs(g, w, postorder, visited, navigation, acc);\n    });\n    if (postorder) { acc.push(v); }\n  }\n}\n","var dfs = require(\"./dfs\");\n\nmodule.exports = postorder;\n\nfunction postorder(g, vs) {\n  return dfs(g, vs, \"post\");\n}\n","var dfs = require(\"./dfs\");\n\nmodule.exports = preorder;\n\nfunction preorder(g, vs) {\n  return dfs(g, vs, \"pre\");\n}\n","var _ = require(\"../lodash\");\nvar Graph = require(\"../graph\");\nvar PriorityQueue = require(\"../data/priority-queue\");\n\nmodule.exports = prim;\n\nfunction prim(g, weightFunc) {\n  var result = new Graph();\n  var parents = {};\n  var pq = new PriorityQueue();\n  var v;\n\n  function updateNeighbors(edge) {\n    var w = edge.v === v ? edge.w : edge.v;\n    var pri = pq.priority(w);\n    if (pri !== undefined) {\n      var edgeWeight = weightFunc(edge);\n      if (edgeWeight < pri) {\n        parents[w] = v;\n        pq.decrease(w, edgeWeight);\n      }\n    }\n  }\n\n  if (g.nodeCount() === 0) {\n    return result;\n  }\n\n  _.each(g.nodes(), function(v) {\n    pq.add(v, Number.POSITIVE_INFINITY);\n    result.setNode(v);\n  });\n\n  // Start from an arbitrary node\n  pq.decrease(g.nodes()[0], 0);\n\n  var init = false;\n  while (pq.size() > 0) {\n    v = pq.removeMin();\n    if (_.has(parents, v)) {\n      result.setEdge(v, parents[v]);\n    } else if (init) {\n      throw new Error(\"Input graph is not connected: \" + g);\n    } else {\n      init = true;\n    }\n\n    g.nodeEdges(v).forEach(updateNeighbors);\n  }\n\n  return result;\n}\n","module.exports = {\n  components: require(\"./components\"),\n  dijkstra: require(\"./dijkstra\"),\n  dijkstraAll: require(\"./dijkstra-all\"),\n  findCycles: require(\"./find-cycles\"),\n  floydWarshall: require(\"./floyd-warshall\"),\n  isAcyclic: require(\"./is-acyclic\"),\n  postorder: require(\"./postorder\"),\n  preorder: require(\"./preorder\"),\n  prim: require(\"./prim\"),\n  tarjan: require(\"./tarjan\"),\n  topsort: require(\"./topsort\")\n};\n","/**\n * Copyright (c) 2014, Chris Pettitt\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (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 lib = require(\"./lib\");\n\nmodule.exports = {\n  Graph: lib.Graph,\n  json: require(\"./lib/json\"),\n  alg: require(\"./lib/alg\"),\n  version: lib.version\n};\n","/* global window */\n\nvar graphlib;\n\nif (typeof require === \"function\") {\n  try {\n    graphlib = require(\"graphlib\");\n  } catch (e) {\n    // continue regardless of error\n  }\n}\n\nif (!graphlib) {\n  graphlib = window.graphlib;\n}\n\nmodule.exports = graphlib;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","var eq = require('./eq'),\n    isArrayLike = require('./isArrayLike'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nmodule.exports = isIterateeCall;\n","var baseRest = require('./_baseRest'),\n    eq = require('./eq'),\n    isIterateeCall = require('./_isIterateeCall'),\n    keysIn = require('./keysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n  object = Object(object);\n\n  var index = -1;\n  var length = sources.length;\n  var guard = length > 2 ? sources[2] : undefined;\n\n  if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n    length = 1;\n  }\n\n  while (++index < length) {\n    var source = sources[index];\n    var props = keysIn(source);\n    var propsIndex = -1;\n    var propsLength = props.length;\n\n    while (++propsIndex < propsLength) {\n      var key = props[propsIndex];\n      var value = object[key];\n\n      if (value === undefined ||\n          (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        object[key] = source[key];\n      }\n    }\n  }\n\n  return object;\n});\n\nmodule.exports = defaults;\n","var baseIteratee = require('./_baseIteratee'),\n    isArrayLike = require('./isArrayLike'),\n    keys = require('./keys');\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n  return function(collection, predicate, fromIndex) {\n    var iterable = Object(collection);\n    if (!isArrayLike(collection)) {\n      var iteratee = baseIteratee(predicate, 3);\n      collection = keys(collection);\n      predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n    }\n    var index = findIndexFunc(collection, predicate, fromIndex);\n    return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n  };\n}\n\nmodule.exports = createFind;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nmodule.exports = baseTrim;\n","var baseTrim = require('./_baseTrim'),\n    isObject = require('./isObject'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n  if (!value) {\n    return value === 0 ? value : 0;\n  }\n  value = toNumber(value);\n  if (value === INFINITY || value === -INFINITY) {\n    var sign = (value < 0 ? -1 : 1);\n    return sign * MAX_INTEGER;\n  }\n  return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n","var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n  var result = toFinite(value),\n      remainder = result % 1;\n\n  return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n","var baseFindIndex = require('./_baseFindIndex'),\n    baseIteratee = require('./_baseIteratee'),\n    toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'active': false },\n *   { 'user': 'fred',    'active': false },\n *   { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n  var length = array == null ? 0 : array.length;\n  if (!length) {\n    return -1;\n  }\n  var index = fromIndex == null ? 0 : toInteger(fromIndex);\n  if (index < 0) {\n    index = nativeMax(length + index, 0);\n  }\n  return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n","var createFind = require('./_createFind'),\n    findIndex = require('./findIndex');\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'age': 36, 'active': true },\n *   { 'user': 'fred',    'age': 40, 'active': false },\n *   { 'user': 'pebbles', 'age': 1,  'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nmodule.exports = find;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","var baseFor = require('./_baseFor'),\n    castFunction = require('./_castFunction'),\n    keysIn = require('./keysIn');\n\n/**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\nfunction forIn(object, iteratee) {\n  return object == null\n    ? object\n    : baseFor(object, castFunction(iteratee), keysIn);\n}\n\nmodule.exports = forIn;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n","var baseAssignValue = require('./_baseAssignValue'),\n    baseForOwn = require('./_baseForOwn'),\n    baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n *   'fred':    { 'user': 'fred',    'age': 40 },\n *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n  var result = {};\n  iteratee = baseIteratee(iteratee, 3);\n\n  baseForOwn(object, function(value, key, object) {\n    baseAssignValue(result, key, iteratee(value, key, object));\n  });\n  return result;\n}\n\nmodule.exports = mapValues;\n","var isSymbol = require('./isSymbol');\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n  var index = -1,\n      length = array.length;\n\n  while (++index < length) {\n    var value = array[index],\n        current = iteratee(value);\n\n    if (current != null && (computed === undefined\n          ? (current === current && !isSymbol(current))\n          : comparator(current, computed)\n        )) {\n      var computed = current,\n          result = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseExtremum;\n","/**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n *  else `false`.\n */\nfunction baseGt(value, other) {\n  return value > other;\n}\n\nmodule.exports = baseGt;\n","var baseExtremum = require('./_baseExtremum'),\n    baseGt = require('./_baseGt'),\n    identity = require('./identity');\n\n/**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\nfunction max(array) {\n  return (array && array.length)\n    ? baseExtremum(array, identity, baseGt)\n    : undefined;\n}\n\nmodule.exports = max;\n","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n  if ((value !== undefined && !eq(object[key], value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignMergeValue;\n","var baseGetTag = require('./_baseGetTag'),\n    getPrototype = require('./_getPrototype'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n  if (key === 'constructor' && typeof object[key] === 'function') {\n    return;\n  }\n\n  if (key == '__proto__') {\n    return;\n  }\n\n  return object[key];\n}\n\nmodule.exports = safeGet;\n","var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","var assignMergeValue = require('./_assignMergeValue'),\n    cloneBuffer = require('./_cloneBuffer'),\n    cloneTypedArray = require('./_cloneTypedArray'),\n    copyArray = require('./_copyArray'),\n    initCloneObject = require('./_initCloneObject'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isArrayLikeObject = require('./isArrayLikeObject'),\n    isBuffer = require('./isBuffer'),\n    isFunction = require('./isFunction'),\n    isObject = require('./isObject'),\n    isPlainObject = require('./isPlainObject'),\n    isTypedArray = require('./isTypedArray'),\n    safeGet = require('./_safeGet'),\n    toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object, key),\n      srcValue = safeGet(source, key),\n      stacked = stack.get(srcValue);\n\n  if (stacked) {\n    assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer\n    ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n    : undefined;\n\n  var isCommon = newValue === undefined;\n\n  if (isCommon) {\n    var isArr = isArray(srcValue),\n        isBuff = !isArr && isBuffer(srcValue),\n        isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      }\n      else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      }\n      else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      }\n      else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      }\n      else {\n        newValue = [];\n      }\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      }\n      else if (!isObject(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack['delete'](srcValue);\n  }\n  assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n","var Stack = require('./_Stack'),\n    assignMergeValue = require('./_assignMergeValue'),\n    baseFor = require('./_baseFor'),\n    baseMergeDeep = require('./_baseMergeDeep'),\n    isObject = require('./isObject'),\n    keysIn = require('./keysIn'),\n    safeGet = require('./_safeGet');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack);\n    if (isObject(srcValue)) {\n      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    }\n    else {\n      var newValue = customizer\n        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      if (newValue === undefined) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\n\nmodule.exports = baseMerge;\n","var baseRest = require('./_baseRest'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nmodule.exports = createAssigner;\n","var baseMerge = require('./_baseMerge'),\n    createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n *   'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n *   'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n  baseMerge(object, source, srcIndex);\n});\n\nmodule.exports = merge;\n","/**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n *  else `false`.\n */\nfunction baseLt(value, other) {\n  return value < other;\n}\n\nmodule.exports = baseLt;\n","var baseExtremum = require('./_baseExtremum'),\n    baseLt = require('./_baseLt'),\n    identity = require('./identity');\n\n/**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n  return (array && array.length)\n    ? baseExtremum(array, identity, baseLt)\n    : undefined;\n}\n\nmodule.exports = min;\n","var baseExtremum = require('./_baseExtremum'),\n    baseIteratee = require('./_baseIteratee'),\n    baseLt = require('./_baseLt');\n\n/**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\nfunction minBy(array, iteratee) {\n  return (array && array.length)\n    ? baseExtremum(array, baseIteratee(iteratee, 2), baseLt)\n    : undefined;\n}\n\nmodule.exports = minBy;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nmodule.exports = now;\n","var assignValue = require('./_assignValue'),\n    castPath = require('./_castPath'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n  if (!isObject(object)) {\n    return object;\n  }\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      lastIndex = length - 1,\n      nested = object;\n\n  while (nested != null && ++index < length) {\n    var key = toKey(path[index]),\n        newValue = value;\n\n    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n      return object;\n    }\n\n    if (index != lastIndex) {\n      var objValue = nested[key];\n      newValue = customizer ? customizer(objValue, key, nested) : undefined;\n      if (newValue === undefined) {\n        newValue = isObject(objValue)\n          ? objValue\n          : (isIndex(path[index + 1]) ? [] : {});\n      }\n    }\n    assignValue(nested, key, newValue);\n    nested = nested[key];\n  }\n  return object;\n}\n\nmodule.exports = baseSet;\n","var baseGet = require('./_baseGet'),\n    baseSet = require('./_baseSet'),\n    castPath = require('./_castPath');\n\n/**\n * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n  var index = -1,\n      length = paths.length,\n      result = {};\n\n  while (++index < length) {\n    var path = paths[index],\n        value = baseGet(object, path);\n\n    if (predicate(value, path)) {\n      baseSet(result, castPath(path, object), value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = basePickBy;\n","var basePickBy = require('./_basePickBy'),\n    hasIn = require('./hasIn');\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n  return basePickBy(object, paths, function(value, path) {\n    return hasIn(object, path);\n  });\n}\n\nmodule.exports = basePick;\n","var flatten = require('./flatten'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n  return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","var basePick = require('./_basePick'),\n    flatRest = require('./_flatRest');\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n  return object == null ? {} : basePick(object, paths);\n});\n\nmodule.exports = pick;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n    nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n  var index = -1,\n      length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n      result = Array(length);\n\n  while (length--) {\n    result[fromRight ? length : ++index] = start;\n    start += step;\n  }\n  return result;\n}\n\nmodule.exports = baseRange;\n","var baseRange = require('./_baseRange'),\n    isIterateeCall = require('./_isIterateeCall'),\n    toFinite = require('./toFinite');\n\n/**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n  return function(start, end, step) {\n    if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n      end = step = undefined;\n    }\n    // Ensure the sign of `-0` is preserved.\n    start = toFinite(start);\n    if (end === undefined) {\n      end = start;\n      start = 0;\n    } else {\n      end = toFinite(end);\n    }\n    step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n    return baseRange(start, end, step, fromRight);\n  };\n}\n\nmodule.exports = createRange;\n","var createRange = require('./_createRange');\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nmodule.exports = range;\n","/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n  var length = array.length;\n\n  array.sort(comparer);\n  while (length--) {\n    array[length] = array[length].value;\n  }\n  return array;\n}\n\nmodule.exports = baseSortBy;\n","var isSymbol = require('./isSymbol');\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n  if (value !== other) {\n    var valIsDefined = value !== undefined,\n        valIsNull = value === null,\n        valIsReflexive = value === value,\n        valIsSymbol = isSymbol(value);\n\n    var othIsDefined = other !== undefined,\n        othIsNull = other === null,\n        othIsReflexive = other === other,\n        othIsSymbol = isSymbol(other);\n\n    if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n        (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n        (valIsNull && othIsDefined && othIsReflexive) ||\n        (!valIsDefined && othIsReflexive) ||\n        !valIsReflexive) {\n      return 1;\n    }\n    if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n        (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n        (othIsNull && valIsDefined && valIsReflexive) ||\n        (!othIsDefined && valIsReflexive) ||\n        !othIsReflexive) {\n      return -1;\n    }\n  }\n  return 0;\n}\n\nmodule.exports = compareAscending;\n","var compareAscending = require('./_compareAscending');\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n  var index = -1,\n      objCriteria = object.criteria,\n      othCriteria = other.criteria,\n      length = objCriteria.length,\n      ordersLength = orders.length;\n\n  while (++index < length) {\n    var result = compareAscending(objCriteria[index], othCriteria[index]);\n    if (result) {\n      if (index >= ordersLength) {\n        return result;\n      }\n      var order = orders[index];\n      return result * (order == 'desc' ? -1 : 1);\n    }\n  }\n  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n  // that causes it, under certain circumstances, to provide the same value for\n  // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n  // for more details.\n  //\n  // This also ensures a stable sort in V8 and other engines.\n  // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n  return object.index - other.index;\n}\n\nmodule.exports = compareMultiple;\n","var arrayMap = require('./_arrayMap'),\n    baseGet = require('./_baseGet'),\n    baseIteratee = require('./_baseIteratee'),\n    baseMap = require('./_baseMap'),\n    baseSortBy = require('./_baseSortBy'),\n    baseUnary = require('./_baseUnary'),\n    compareMultiple = require('./_compareMultiple'),\n    identity = require('./identity'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n  if (iteratees.length) {\n    iteratees = arrayMap(iteratees, function(iteratee) {\n      if (isArray(iteratee)) {\n        return function(value) {\n          return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n        }\n      }\n      return iteratee;\n    });\n  } else {\n    iteratees = [identity];\n  }\n\n  var index = -1;\n  iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n  var result = baseMap(collection, function(value, key, collection) {\n    var criteria = arrayMap(iteratees, function(iteratee) {\n      return iteratee(value);\n    });\n    return { 'criteria': criteria, 'index': ++index, 'value': value };\n  });\n\n  return baseSortBy(result, function(object, other) {\n    return compareMultiple(object, other, orders);\n  });\n}\n\nmodule.exports = baseOrderBy;\n","var baseFlatten = require('./_baseFlatten'),\n    baseOrderBy = require('./_baseOrderBy'),\n    baseRest = require('./_baseRest'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n *  The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n *   { 'user': 'fred',   'age': 48 },\n *   { 'user': 'barney', 'age': 36 },\n *   { 'user': 'fred',   'age': 30 },\n *   { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n  if (collection == null) {\n    return [];\n  }\n  var length = iteratees.length;\n  if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n    iteratees = [];\n  } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n    iteratees = [iteratees[0]];\n  }\n  return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nmodule.exports = sortBy;\n","var toString = require('./toString');\n\n/** Used to generate unique IDs. */\nvar idCounter = 0;\n\n/**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\nfunction uniqueId(prefix) {\n  var id = ++idCounter;\n  return toString(prefix) + id;\n}\n\nmodule.exports = uniqueId;\n","/**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\nfunction baseZipObject(props, values, assignFunc) {\n  var index = -1,\n      length = props.length,\n      valsLength = values.length,\n      result = {};\n\n  while (++index < length) {\n    var value = index < valsLength ? values[index] : undefined;\n    assignFunc(result, props[index], value);\n  }\n  return result;\n}\n\nmodule.exports = baseZipObject;\n","var assignValue = require('./_assignValue'),\n    baseZipObject = require('./_baseZipObject');\n\n/**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\nfunction zipObject(props, values) {\n  return baseZipObject(props || [], values || [], assignValue);\n}\n\nmodule.exports = zipObject;\n","/* global window */\n\nvar lodash;\n\nif (typeof require === \"function\") {\n  try {\n    lodash = {\n      cloneDeep: require(\"lodash/cloneDeep\"),\n      constant: require(\"lodash/constant\"),\n      defaults: require(\"lodash/defaults\"),\n      each: require(\"lodash/each\"),\n      filter: require(\"lodash/filter\"),\n      find: require(\"lodash/find\"),\n      flatten: require(\"lodash/flatten\"),\n      forEach: require(\"lodash/forEach\"),\n      forIn: require(\"lodash/forIn\"),\n      has:  require(\"lodash/has\"),\n      isUndefined: require(\"lodash/isUndefined\"),\n      last: require(\"lodash/last\"),\n      map: require(\"lodash/map\"),\n      mapValues: require(\"lodash/mapValues\"),\n      max: require(\"lodash/max\"),\n      merge: require(\"lodash/merge\"),\n      min: require(\"lodash/min\"),\n      minBy: require(\"lodash/minBy\"),\n      now: require(\"lodash/now\"),\n      pick: require(\"lodash/pick\"),\n      range: require(\"lodash/range\"),\n      reduce: require(\"lodash/reduce\"),\n      sortBy: require(\"lodash/sortBy\"),\n      uniqueId: require(\"lodash/uniqueId\"),\n      values: require(\"lodash/values\"),\n      zipObject: require(\"lodash/zipObject\"),\n    };\n  } catch (e) {\n    // continue regardless of error\n  }\n}\n\nif (!lodash) {\n  lodash = window._;\n}\n\nmodule.exports = lodash;\n","/*\n * Simple doubly linked list implementation derived from Cormen, et al.,\n * \"Introduction to Algorithms\".\n */\n\nmodule.exports = List;\n\nfunction List() {\n  var sentinel = {};\n  sentinel._next = sentinel._prev = sentinel;\n  this._sentinel = sentinel;\n}\n\nList.prototype.dequeue = function() {\n  var sentinel = this._sentinel;\n  var entry = sentinel._prev;\n  if (entry !== sentinel) {\n    unlink(entry);\n    return entry;\n  }\n};\n\nList.prototype.enqueue = function(entry) {\n  var sentinel = this._sentinel;\n  if (entry._prev && entry._next) {\n    unlink(entry);\n  }\n  entry._next = sentinel._next;\n  sentinel._next._prev = entry;\n  sentinel._next = entry;\n  entry._prev = sentinel;\n};\n\nList.prototype.toString = function() {\n  var strs = [];\n  var sentinel = this._sentinel;\n  var curr = sentinel._prev;\n  while (curr !== sentinel) {\n    strs.push(JSON.stringify(curr, filterOutLinks));\n    curr = curr._prev;\n  }\n  return \"[\" + strs.join(\", \") + \"]\";\n};\n\nfunction unlink(entry) {\n  entry._prev._next = entry._next;\n  entry._next._prev = entry._prev;\n  delete entry._next;\n  delete entry._prev;\n}\n\nfunction filterOutLinks(k, v) {\n  if (k !== \"_next\" && k !== \"_prev\") {\n    return v;\n  }\n}\n","var _ = require(\"./lodash\");\nvar Graph = require(\"./graphlib\").Graph;\nvar List = require(\"./data/list\");\n\n/*\n * A greedy heuristic for finding a feedback arc set for a graph. A feedback\n * arc set is a set of edges that can be removed to make a graph acyclic.\n * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, \"A fast and\n * effective heuristic for the feedback arc set problem.\" This implementation\n * adjusts that from the paper to allow for weighted edges.\n */\nmodule.exports = greedyFAS;\n\nvar DEFAULT_WEIGHT_FN = _.constant(1);\n\nfunction greedyFAS(g, weightFn) {\n  if (g.nodeCount() <= 1) {\n    return [];\n  }\n  var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN);\n  var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx);\n\n  // Expand multi-edges\n  return _.flatten(_.map(results, function(e) {\n    return g.outEdges(e.v, e.w);\n  }), true);\n}\n\nfunction doGreedyFAS(g, buckets, zeroIdx) {\n  var results = [];\n  var sources = buckets[buckets.length - 1];\n  var sinks = buckets[0];\n\n  var entry;\n  while (g.nodeCount()) {\n    while ((entry = sinks.dequeue()))   { removeNode(g, buckets, zeroIdx, entry); }\n    while ((entry = sources.dequeue())) { removeNode(g, buckets, zeroIdx, entry); }\n    if (g.nodeCount()) {\n      for (var i = buckets.length - 2; i > 0; --i) {\n        entry = buckets[i].dequeue();\n        if (entry) {\n          results = results.concat(removeNode(g, buckets, zeroIdx, entry, true));\n          break;\n        }\n      }\n    }\n  }\n\n  return results;\n}\n\nfunction removeNode(g, buckets, zeroIdx, entry, collectPredecessors) {\n  var results = collectPredecessors ? [] : undefined;\n\n  _.forEach(g.inEdges(entry.v), function(edge) {\n    var weight = g.edge(edge);\n    var uEntry = g.node(edge.v);\n\n    if (collectPredecessors) {\n      results.push({ v: edge.v, w: edge.w });\n    }\n\n    uEntry.out -= weight;\n    assignBucket(buckets, zeroIdx, uEntry);\n  });\n\n  _.forEach(g.outEdges(entry.v), function(edge) {\n    var weight = g.edge(edge);\n    var w = edge.w;\n    var wEntry = g.node(w);\n    wEntry[\"in\"] -= weight;\n    assignBucket(buckets, zeroIdx, wEntry);\n  });\n\n  g.removeNode(entry.v);\n\n  return results;\n}\n\nfunction buildState(g, weightFn) {\n  var fasGraph = new Graph();\n  var maxIn = 0;\n  var maxOut = 0;\n\n  _.forEach(g.nodes(), function(v) {\n    fasGraph.setNode(v, { v: v, \"in\": 0, out: 0 });\n  });\n\n  // Aggregate weights on nodes, but also sum the weights across multi-edges\n  // into a single edge for the fasGraph.\n  _.forEach(g.edges(), function(e) {\n    var prevWeight = fasGraph.edge(e.v, e.w) || 0;\n    var weight = weightFn(e);\n    var edgeWeight = prevWeight + weight;\n    fasGraph.setEdge(e.v, e.w, edgeWeight);\n    maxOut = Math.max(maxOut, fasGraph.node(e.v).out += weight);\n    maxIn  = Math.max(maxIn,  fasGraph.node(e.w)[\"in\"]  += weight);\n  });\n\n  var buckets = _.range(maxOut + maxIn + 3).map(function() { return new List(); });\n  var zeroIdx = maxIn + 1;\n\n  _.forEach(fasGraph.nodes(), function(v) {\n    assignBucket(buckets, zeroIdx, fasGraph.node(v));\n  });\n\n  return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx };\n}\n\nfunction assignBucket(buckets, zeroIdx, entry) {\n  if (!entry.out) {\n    buckets[0].enqueue(entry);\n  } else if (!entry[\"in\"]) {\n    buckets[buckets.length - 1].enqueue(entry);\n  } else {\n    buckets[entry.out - entry[\"in\"] + zeroIdx].enqueue(entry);\n  }\n}\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\nvar greedyFAS = require(\"./greedy-fas\");\n\nmodule.exports = {\n  run: run,\n  undo: undo\n};\n\nfunction run(g) {\n  var fas = (g.graph().acyclicer === \"greedy\"\n    ? greedyFAS(g, weightFn(g))\n    : dfsFAS(g));\n  _.forEach(fas, function(e) {\n    var label = g.edge(e);\n    g.removeEdge(e);\n    label.forwardName = e.name;\n    label.reversed = true;\n    g.setEdge(e.w, e.v, label, _.uniqueId(\"rev\"));\n  });\n\n  function weightFn(g) {\n    return function(e) {\n      return g.edge(e).weight;\n    };\n  }\n}\n\nfunction dfsFAS(g) {\n  var fas = [];\n  var stack = {};\n  var visited = {};\n\n  function dfs(v) {\n    if (_.has(visited, v)) {\n      return;\n    }\n    visited[v] = true;\n    stack[v] = true;\n    _.forEach(g.outEdges(v), function(e) {\n      if (_.has(stack, e.w)) {\n        fas.push(e);\n      } else {\n        dfs(e.w);\n      }\n    });\n    delete stack[v];\n  }\n\n  _.forEach(g.nodes(), dfs);\n  return fas;\n}\n\nfunction undo(g) {\n  _.forEach(g.edges(), function(e) {\n    var label = g.edge(e);\n    if (label.reversed) {\n      g.removeEdge(e);\n\n      var forwardName = label.forwardName;\n      delete label.reversed;\n      delete label.forwardName;\n      g.setEdge(e.w, e.v, label, forwardName);\n    }\n  });\n}\n","/* eslint \"no-console\": off */\n\n\"use strict\";\n\nvar _ = require(\"./lodash\");\nvar Graph = require(\"./graphlib\").Graph;\n\nmodule.exports = {\n  addDummyNode: addDummyNode,\n  simplify: simplify,\n  asNonCompoundGraph: asNonCompoundGraph,\n  successorWeights: successorWeights,\n  predecessorWeights: predecessorWeights,\n  intersectRect: intersectRect,\n  buildLayerMatrix: buildLayerMatrix,\n  normalizeRanks: normalizeRanks,\n  removeEmptyRanks: removeEmptyRanks,\n  addBorderNode: addBorderNode,\n  maxRank: maxRank,\n  partition: partition,\n  time: time,\n  notime: notime\n};\n\n/*\n * Adds a dummy node to the graph and return v.\n */\nfunction addDummyNode(g, type, attrs, name) {\n  var v;\n  do {\n    v = _.uniqueId(name);\n  } while (g.hasNode(v));\n\n  attrs.dummy = type;\n  g.setNode(v, attrs);\n  return v;\n}\n\n/*\n * Returns a new graph with only simple edges. Handles aggregation of data\n * associated with multi-edges.\n */\nfunction simplify(g) {\n  var simplified = new Graph().setGraph(g.graph());\n  _.forEach(g.nodes(), function(v) { simplified.setNode(v, g.node(v)); });\n  _.forEach(g.edges(), function(e) {\n    var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 };\n    var label = g.edge(e);\n    simplified.setEdge(e.v, e.w, {\n      weight: simpleLabel.weight + label.weight,\n      minlen: Math.max(simpleLabel.minlen, label.minlen)\n    });\n  });\n  return simplified;\n}\n\nfunction asNonCompoundGraph(g) {\n  var simplified = new Graph({ multigraph: g.isMultigraph() }).setGraph(g.graph());\n  _.forEach(g.nodes(), function(v) {\n    if (!g.children(v).length) {\n      simplified.setNode(v, g.node(v));\n    }\n  });\n  _.forEach(g.edges(), function(e) {\n    simplified.setEdge(e, g.edge(e));\n  });\n  return simplified;\n}\n\nfunction successorWeights(g) {\n  var weightMap = _.map(g.nodes(), function(v) {\n    var sucs = {};\n    _.forEach(g.outEdges(v), function(e) {\n      sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight;\n    });\n    return sucs;\n  });\n  return _.zipObject(g.nodes(), weightMap);\n}\n\nfunction predecessorWeights(g) {\n  var weightMap = _.map(g.nodes(), function(v) {\n    var preds = {};\n    _.forEach(g.inEdges(v), function(e) {\n      preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight;\n    });\n    return preds;\n  });\n  return _.zipObject(g.nodes(), weightMap);\n}\n\n/*\n * Finds where a line starting at point ({x, y}) would intersect a rectangle\n * ({x, y, width, height}) if it were pointing at the rectangle's center.\n */\nfunction intersectRect(rect, point) {\n  var x = rect.x;\n  var y = rect.y;\n\n  // Rectangle intersection algorithm from:\n  // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes\n  var dx = point.x - x;\n  var dy = point.y - y;\n  var w = rect.width / 2;\n  var h = rect.height / 2;\n\n  if (!dx && !dy) {\n    throw new Error(\"Not possible to find intersection inside of the rectangle\");\n  }\n\n  var sx, sy;\n  if (Math.abs(dy) * w > Math.abs(dx) * h) {\n    // Intersection is top or bottom of rect.\n    if (dy < 0) {\n      h = -h;\n    }\n    sx = h * dx / dy;\n    sy = h;\n  } else {\n    // Intersection is left or right of rect.\n    if (dx < 0) {\n      w = -w;\n    }\n    sx = w;\n    sy = w * dy / dx;\n  }\n\n  return { x: x + sx, y: y + sy };\n}\n\n/*\n * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\n * function will produce a matrix with the ids of each node.\n */\nfunction buildLayerMatrix(g) {\n  var layering = _.map(_.range(maxRank(g) + 1), function() { return []; });\n  _.forEach(g.nodes(), function(v) {\n    var node = g.node(v);\n    var rank = node.rank;\n    if (!_.isUndefined(rank)) {\n      layering[rank][node.order] = v;\n    }\n  });\n  return layering;\n}\n\n/*\n * Adjusts the ranks for all nodes in the graph such that all nodes v have\n * rank(v) >= 0 and at least one node w has rank(w) = 0.\n */\nfunction normalizeRanks(g) {\n  var min = _.min(_.map(g.nodes(), function(v) { return g.node(v).rank; }));\n  _.forEach(g.nodes(), function(v) {\n    var node = g.node(v);\n    if (_.has(node, \"rank\")) {\n      node.rank -= min;\n    }\n  });\n}\n\nfunction removeEmptyRanks(g) {\n  // Ranks may not start at 0, so we need to offset them\n  var offset = _.min(_.map(g.nodes(), function(v) { return g.node(v).rank; }));\n\n  var layers = [];\n  _.forEach(g.nodes(), function(v) {\n    var rank = g.node(v).rank - offset;\n    if (!layers[rank]) {\n      layers[rank] = [];\n    }\n    layers[rank].push(v);\n  });\n\n  var delta = 0;\n  var nodeRankFactor = g.graph().nodeRankFactor;\n  _.forEach(layers, function(vs, i) {\n    if (_.isUndefined(vs) && i % nodeRankFactor !== 0) {\n      --delta;\n    } else if (delta) {\n      _.forEach(vs, function(v) { g.node(v).rank += delta; });\n    }\n  });\n}\n\nfunction addBorderNode(g, prefix, rank, order) {\n  var node = {\n    width: 0,\n    height: 0\n  };\n  if (arguments.length >= 4) {\n    node.rank = rank;\n    node.order = order;\n  }\n  return addDummyNode(g, \"border\", node, prefix);\n}\n\nfunction maxRank(g) {\n  return _.max(_.map(g.nodes(), function(v) {\n    var rank = g.node(v).rank;\n    if (!_.isUndefined(rank)) {\n      return rank;\n    }\n  }));\n}\n\n/*\n * Partition a collection into two groups: `lhs` and `rhs`. If the supplied\n * function returns true for an entry it goes into `lhs`. Otherwise it goes\n * into `rhs.\n */\nfunction partition(collection, fn) {\n  var result = { lhs: [], rhs: [] };\n  _.forEach(collection, function(value) {\n    if (fn(value)) {\n      result.lhs.push(value);\n    } else {\n      result.rhs.push(value);\n    }\n  });\n  return result;\n}\n\n/*\n * Returns a new function that wraps `fn` with a timer. The wrapper logs the\n * time it takes to execute the function.\n */\nfunction time(name, fn) {\n  var start = _.now();\n  try {\n    return fn();\n  } finally {\n    console.log(name + \" time: \" + (_.now() - start) + \"ms\");\n  }\n}\n\nfunction notime(name, fn) {\n  return fn();\n}\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\nvar util = require(\"./util\");\n\nmodule.exports = {\n  run: run,\n  undo: undo\n};\n\n/*\n * Breaks any long edges in the graph into short segments that span 1 layer\n * each. This operation is undoable with the denormalize function.\n *\n * Pre-conditions:\n *\n *    1. The input graph is a DAG.\n *    2. Each node in the graph has a \"rank\" property.\n *\n * Post-condition:\n *\n *    1. All edges in the graph have a length of 1.\n *    2. Dummy nodes are added where edges have been split into segments.\n *    3. The graph is augmented with a \"dummyChains\" attribute which contains\n *       the first dummy in each chain of dummy nodes produced.\n */\nfunction run(g) {\n  g.graph().dummyChains = [];\n  _.forEach(g.edges(), function(edge) { normalizeEdge(g, edge); });\n}\n\nfunction normalizeEdge(g, e) {\n  var v = e.v;\n  var vRank = g.node(v).rank;\n  var w = e.w;\n  var wRank = g.node(w).rank;\n  var name = e.name;\n  var edgeLabel = g.edge(e);\n  var labelRank = edgeLabel.labelRank;\n\n  if (wRank === vRank + 1) return;\n\n  g.removeEdge(e);\n\n  var dummy, attrs, i;\n  for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) {\n    edgeLabel.points = [];\n    attrs = {\n      width: 0, height: 0,\n      edgeLabel: edgeLabel, edgeObj: e,\n      rank: vRank\n    };\n    dummy = util.addDummyNode(g, \"edge\", attrs, \"_d\");\n    if (vRank === labelRank) {\n      attrs.width = edgeLabel.width;\n      attrs.height = edgeLabel.height;\n      attrs.dummy = \"edge-label\";\n      attrs.labelpos = edgeLabel.labelpos;\n    }\n    g.setEdge(v, dummy, { weight: edgeLabel.weight }, name);\n    if (i === 0) {\n      g.graph().dummyChains.push(dummy);\n    }\n    v = dummy;\n  }\n\n  g.setEdge(v, w, { weight: edgeLabel.weight }, name);\n}\n\nfunction undo(g) {\n  _.forEach(g.graph().dummyChains, function(v) {\n    var node = g.node(v);\n    var origLabel = node.edgeLabel;\n    var w;\n    g.setEdge(node.edgeObj, origLabel);\n    while (node.dummy) {\n      w = g.successors(v)[0];\n      g.removeNode(v);\n      origLabel.points.push({ x: node.x, y: node.y });\n      if (node.dummy === \"edge-label\") {\n        origLabel.x = node.x;\n        origLabel.y = node.y;\n        origLabel.width = node.width;\n        origLabel.height = node.height;\n      }\n      v = w;\n      node = g.node(v);\n    }\n  });\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\n\nmodule.exports = {\n  longestPath: longestPath,\n  slack: slack\n};\n\n/*\n * Initializes ranks for the input graph using the longest path algorithm. This\n * algorithm scales well and is fast in practice, it yields rather poor\n * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\n * ranks wide and leaving edges longer than necessary. However, due to its\n * speed, this algorithm is good for getting an initial ranking that can be fed\n * into other algorithms.\n *\n * This algorithm does not normalize layers because it will be used by other\n * algorithms in most cases. If using this algorithm directly, be sure to\n * run normalize at the end.\n *\n * Pre-conditions:\n *\n *    1. Input graph is a DAG.\n *    2. Input graph node labels can be assigned properties.\n *\n * Post-conditions:\n *\n *    1. Each node will be assign an (unnormalized) \"rank\" property.\n */\nfunction longestPath(g) {\n  var visited = {};\n\n  function dfs(v) {\n    var label = g.node(v);\n    if (_.has(visited, v)) {\n      return label.rank;\n    }\n    visited[v] = true;\n\n    var rank = _.min(_.map(g.outEdges(v), function(e) {\n      return dfs(e.w) - g.edge(e).minlen;\n    }));\n\n    if (rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3\n        rank === undefined || // return value of _.map([]) for Lodash 4\n        rank === null) { // return value of _.map([null])\n      rank = 0;\n    }\n\n    return (label.rank = rank);\n  }\n\n  _.forEach(g.sources(), dfs);\n}\n\n/*\n * Returns the amount of slack for the given edge. The slack is defined as the\n * difference between the length of the edge and its minimum length.\n */\nfunction slack(g, e) {\n  return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar Graph = require(\"../graphlib\").Graph;\nvar slack = require(\"./util\").slack;\n\nmodule.exports = feasibleTree;\n\n/*\n * Constructs a spanning tree with tight edges and adjusted the input node's\n * ranks to achieve this. A tight edge is one that is has a length that matches\n * its \"minlen\" attribute.\n *\n * The basic structure for this function is derived from Gansner, et al., \"A\n * Technique for Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n *    1. Graph must be a DAG.\n *    2. Graph must be connected.\n *    3. Graph must have at least one node.\n *    5. Graph nodes must have been previously assigned a \"rank\" property that\n *       respects the \"minlen\" property of incident edges.\n *    6. Graph edges must have a \"minlen\" property.\n *\n * Post-conditions:\n *\n *    - Graph nodes will have their rank adjusted to ensure that all edges are\n *      tight.\n *\n * Returns a tree (undirected graph) that is constructed using only \"tight\"\n * edges.\n */\nfunction feasibleTree(g) {\n  var t = new Graph({ directed: false });\n\n  // Choose arbitrary node from which to start our tree\n  var start = g.nodes()[0];\n  var size = g.nodeCount();\n  t.setNode(start, {});\n\n  var edge, delta;\n  while (tightTree(t, g) < size) {\n    edge = findMinSlackEdge(t, g);\n    delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge);\n    shiftRanks(t, g, delta);\n  }\n\n  return t;\n}\n\n/*\n * Finds a maximal tree of tight edges and returns the number of nodes in the\n * tree.\n */\nfunction tightTree(t, g) {\n  function dfs(v) {\n    _.forEach(g.nodeEdges(v), function(e) {\n      var edgeV = e.v,\n        w = (v === edgeV) ? e.w : edgeV;\n      if (!t.hasNode(w) && !slack(g, e)) {\n        t.setNode(w, {});\n        t.setEdge(v, w, {});\n        dfs(w);\n      }\n    });\n  }\n\n  _.forEach(t.nodes(), dfs);\n  return t.nodeCount();\n}\n\n/*\n * Finds the edge with the smallest slack that is incident on tree and returns\n * it.\n */\nfunction findMinSlackEdge(t, g) {\n  return _.minBy(g.edges(), function(e) {\n    if (t.hasNode(e.v) !== t.hasNode(e.w)) {\n      return slack(g, e);\n    }\n  });\n}\n\nfunction shiftRanks(t, g, delta) {\n  _.forEach(t.nodes(), function(v) {\n    g.node(v).rank += delta;\n  });\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar feasibleTree = require(\"./feasible-tree\");\nvar slack = require(\"./util\").slack;\nvar initRank = require(\"./util\").longestPath;\nvar preorder = require(\"../graphlib\").alg.preorder;\nvar postorder = require(\"../graphlib\").alg.postorder;\nvar simplify = require(\"../util\").simplify;\n\nmodule.exports = networkSimplex;\n\n// Expose some internals for testing purposes\nnetworkSimplex.initLowLimValues = initLowLimValues;\nnetworkSimplex.initCutValues = initCutValues;\nnetworkSimplex.calcCutValue = calcCutValue;\nnetworkSimplex.leaveEdge = leaveEdge;\nnetworkSimplex.enterEdge = enterEdge;\nnetworkSimplex.exchangeEdges = exchangeEdges;\n\n/*\n * The network simplex algorithm assigns ranks to each node in the input graph\n * and iteratively improves the ranking to reduce the length of edges.\n *\n * Preconditions:\n *\n *    1. The input graph must be a DAG.\n *    2. All nodes in the graph must have an object value.\n *    3. All edges in the graph must have \"minlen\" and \"weight\" attributes.\n *\n * Postconditions:\n *\n *    1. All nodes in the graph will have an assigned \"rank\" attribute that has\n *       been optimized by the network simplex algorithm. Ranks start at 0.\n *\n *\n * A rough sketch of the algorithm is as follows:\n *\n *    1. Assign initial ranks to each node. We use the longest path algorithm,\n *       which assigns ranks to the lowest position possible. In general this\n *       leads to very wide bottom ranks and unnecessarily long edges.\n *    2. Construct a feasible tight tree. A tight tree is one such that all\n *       edges in the tree have no slack (difference between length of edge\n *       and minlen for the edge). This by itself greatly improves the assigned\n *       rankings by shorting edges.\n *    3. Iteratively find edges that have negative cut values. Generally a\n *       negative cut value indicates that the edge could be removed and a new\n *       tree edge could be added to produce a more compact graph.\n *\n * Much of the algorithms here are derived from Gansner, et al., \"A Technique\n * for Drawing Directed Graphs.\" The structure of the file roughly follows the\n * structure of the overall algorithm.\n */\nfunction networkSimplex(g) {\n  g = simplify(g);\n  initRank(g);\n  var t = feasibleTree(g);\n  initLowLimValues(t);\n  initCutValues(t, g);\n\n  var e, f;\n  while ((e = leaveEdge(t))) {\n    f = enterEdge(t, g, e);\n    exchangeEdges(t, g, e, f);\n  }\n}\n\n/*\n * Initializes cut values for all edges in the tree.\n */\nfunction initCutValues(t, g) {\n  var vs = postorder(t, t.nodes());\n  vs = vs.slice(0, vs.length - 1);\n  _.forEach(vs, function(v) {\n    assignCutValue(t, g, v);\n  });\n}\n\nfunction assignCutValue(t, g, child) {\n  var childLab = t.node(child);\n  var parent = childLab.parent;\n  t.edge(child, parent).cutvalue = calcCutValue(t, g, child);\n}\n\n/*\n * Given the tight tree, its graph, and a child in the graph calculate and\n * return the cut value for the edge between the child and its parent.\n */\nfunction calcCutValue(t, g, child) {\n  var childLab = t.node(child);\n  var parent = childLab.parent;\n  // True if the child is on the tail end of the edge in the directed graph\n  var childIsTail = true;\n  // The graph's view of the tree edge we're inspecting\n  var graphEdge = g.edge(child, parent);\n  // The accumulated cut value for the edge between this node and its parent\n  var cutValue = 0;\n\n  if (!graphEdge) {\n    childIsTail = false;\n    graphEdge = g.edge(parent, child);\n  }\n\n  cutValue = graphEdge.weight;\n\n  _.forEach(g.nodeEdges(child), function(e) {\n    var isOutEdge = e.v === child,\n      other = isOutEdge ? e.w : e.v;\n\n    if (other !== parent) {\n      var pointsToHead = isOutEdge === childIsTail,\n        otherWeight = g.edge(e).weight;\n\n      cutValue += pointsToHead ? otherWeight : -otherWeight;\n      if (isTreeEdge(t, child, other)) {\n        var otherCutValue = t.edge(child, other).cutvalue;\n        cutValue += pointsToHead ? -otherCutValue : otherCutValue;\n      }\n    }\n  });\n\n  return cutValue;\n}\n\nfunction initLowLimValues(tree, root) {\n  if (arguments.length < 2) {\n    root = tree.nodes()[0];\n  }\n  dfsAssignLowLim(tree, {}, 1, root);\n}\n\nfunction dfsAssignLowLim(tree, visited, nextLim, v, parent) {\n  var low = nextLim;\n  var label = tree.node(v);\n\n  visited[v] = true;\n  _.forEach(tree.neighbors(v), function(w) {\n    if (!_.has(visited, w)) {\n      nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v);\n    }\n  });\n\n  label.low = low;\n  label.lim = nextLim++;\n  if (parent) {\n    label.parent = parent;\n  } else {\n    // TODO should be able to remove this when we incrementally update low lim\n    delete label.parent;\n  }\n\n  return nextLim;\n}\n\nfunction leaveEdge(tree) {\n  return _.find(tree.edges(), function(e) {\n    return tree.edge(e).cutvalue < 0;\n  });\n}\n\nfunction enterEdge(t, g, edge) {\n  var v = edge.v;\n  var w = edge.w;\n\n  // For the rest of this function we assume that v is the tail and w is the\n  // head, so if we don't have this edge in the graph we should flip it to\n  // match the correct orientation.\n  if (!g.hasEdge(v, w)) {\n    v = edge.w;\n    w = edge.v;\n  }\n\n  var vLabel = t.node(v);\n  var wLabel = t.node(w);\n  var tailLabel = vLabel;\n  var flip = false;\n\n  // If the root is in the tail of the edge then we need to flip the logic that\n  // checks for the head and tail nodes in the candidates function below.\n  if (vLabel.lim > wLabel.lim) {\n    tailLabel = wLabel;\n    flip = true;\n  }\n\n  var candidates = _.filter(g.edges(), function(edge) {\n    return flip === isDescendant(t, t.node(edge.v), tailLabel) &&\n           flip !== isDescendant(t, t.node(edge.w), tailLabel);\n  });\n\n  return _.minBy(candidates, function(edge) { return slack(g, edge); });\n}\n\nfunction exchangeEdges(t, g, e, f) {\n  var v = e.v;\n  var w = e.w;\n  t.removeEdge(v, w);\n  t.setEdge(f.v, f.w, {});\n  initLowLimValues(t);\n  initCutValues(t, g);\n  updateRanks(t, g);\n}\n\nfunction updateRanks(t, g) {\n  var root = _.find(t.nodes(), function(v) { return !g.node(v).parent; });\n  var vs = preorder(t, root);\n  vs = vs.slice(1);\n  _.forEach(vs, function(v) {\n    var parent = t.node(v).parent,\n      edge = g.edge(v, parent),\n      flipped = false;\n\n    if (!edge) {\n      edge = g.edge(parent, v);\n      flipped = true;\n    }\n\n    g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen);\n  });\n}\n\n/*\n * Returns true if the edge is in the tree.\n */\nfunction isTreeEdge(tree, u, v) {\n  return tree.hasEdge(u, v);\n}\n\n/*\n * Returns true if the specified node is descendant of the root node per the\n * assigned low and lim attributes in the tree.\n */\nfunction isDescendant(tree, vLabel, rootLabel) {\n  return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim;\n}\n","\"use strict\";\n\nvar rankUtil = require(\"./util\");\nvar longestPath = rankUtil.longestPath;\nvar feasibleTree = require(\"./feasible-tree\");\nvar networkSimplex = require(\"./network-simplex\");\n\nmodule.exports = rank;\n\n/*\n * Assigns a rank to each node in the input graph that respects the \"minlen\"\n * constraint specified on edges between nodes.\n *\n * This basic structure is derived from Gansner, et al., \"A Technique for\n * Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n *    1. Graph must be a connected DAG\n *    2. Graph nodes must be objects\n *    3. Graph edges must have \"weight\" and \"minlen\" attributes\n *\n * Post-conditions:\n *\n *    1. Graph nodes will have a \"rank\" attribute based on the results of the\n *       algorithm. Ranks can start at any index (including negative), we'll\n *       fix them up later.\n */\nfunction rank(g) {\n  switch(g.graph().ranker) {\n  case \"network-simplex\": networkSimplexRanker(g); break;\n  case \"tight-tree\": tightTreeRanker(g); break;\n  case \"longest-path\": longestPathRanker(g); break;\n  default: networkSimplexRanker(g);\n  }\n}\n\n// A fast and simple ranker, but results are far from optimal.\nvar longestPathRanker = longestPath;\n\nfunction tightTreeRanker(g) {\n  longestPath(g);\n  feasibleTree(g);\n}\n\nfunction networkSimplexRanker(g) {\n  networkSimplex(g);\n}\n","var _ = require(\"./lodash\");\n\nmodule.exports = parentDummyChains;\n\nfunction parentDummyChains(g) {\n  var postorderNums = postorder(g);\n\n  _.forEach(g.graph().dummyChains, function(v) {\n    var node = g.node(v);\n    var edgeObj = node.edgeObj;\n    var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w);\n    var path = pathData.path;\n    var lca = pathData.lca;\n    var pathIdx = 0;\n    var pathV = path[pathIdx];\n    var ascending = true;\n\n    while (v !== edgeObj.w) {\n      node = g.node(v);\n\n      if (ascending) {\n        while ((pathV = path[pathIdx]) !== lca &&\n               g.node(pathV).maxRank < node.rank) {\n          pathIdx++;\n        }\n\n        if (pathV === lca) {\n          ascending = false;\n        }\n      }\n\n      if (!ascending) {\n        while (pathIdx < path.length - 1 &&\n               g.node(pathV = path[pathIdx + 1]).minRank <= node.rank) {\n          pathIdx++;\n        }\n        pathV = path[pathIdx];\n      }\n\n      g.setParent(v, pathV);\n      v = g.successors(v)[0];\n    }\n  });\n}\n\n// Find a path from v to w through the lowest common ancestor (LCA). Return the\n// full path and the LCA.\nfunction findPath(g, postorderNums, v, w) {\n  var vPath = [];\n  var wPath = [];\n  var low = Math.min(postorderNums[v].low, postorderNums[w].low);\n  var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim);\n  var parent;\n  var lca;\n\n  // Traverse up from v to find the LCA\n  parent = v;\n  do {\n    parent = g.parent(parent);\n    vPath.push(parent);\n  } while (parent &&\n           (postorderNums[parent].low > low || lim > postorderNums[parent].lim));\n  lca = parent;\n\n  // Traverse from w to LCA\n  parent = w;\n  while ((parent = g.parent(parent)) !== lca) {\n    wPath.push(parent);\n  }\n\n  return { path: vPath.concat(wPath.reverse()), lca: lca };\n}\n\nfunction postorder(g) {\n  var result = {};\n  var lim = 0;\n\n  function dfs(v) {\n    var low = lim;\n    _.forEach(g.children(v), dfs);\n    result[v] = { low: low, lim: lim++ };\n  }\n  _.forEach(g.children(), dfs);\n\n  return result;\n}\n","var _ = require(\"./lodash\");\nvar util = require(\"./util\");\n\nmodule.exports = {\n  run: run,\n  cleanup: cleanup\n};\n\n/*\n * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs,\n * adds appropriate edges to ensure that all cluster nodes are placed between\n * these boundries, and ensures that the graph is connected.\n *\n * In addition we ensure, through the use of the minlen property, that nodes\n * and subgraph border nodes to not end up on the same rank.\n *\n * Preconditions:\n *\n *    1. Input graph is a DAG\n *    2. Nodes in the input graph has a minlen attribute\n *\n * Postconditions:\n *\n *    1. Input graph is connected.\n *    2. Dummy nodes are added for the tops and bottoms of subgraphs.\n *    3. The minlen attribute for nodes is adjusted to ensure nodes do not\n *       get placed on the same rank as subgraph border nodes.\n *\n * The nesting graph idea comes from Sander, \"Layout of Compound Directed\n * Graphs.\"\n */\nfunction run(g) {\n  var root = util.addDummyNode(g, \"root\", {}, \"_root\");\n  var depths = treeDepths(g);\n  var height = _.max(_.values(depths)) - 1; // Note: depths is an Object not an array\n  var nodeSep = 2 * height + 1;\n\n  g.graph().nestingRoot = root;\n\n  // Multiply minlen by nodeSep to align nodes on non-border ranks.\n  _.forEach(g.edges(), function(e) { g.edge(e).minlen *= nodeSep; });\n\n  // Calculate a weight that is sufficient to keep subgraphs vertically compact\n  var weight = sumWeights(g) + 1;\n\n  // Create border nodes and link them up\n  _.forEach(g.children(), function(child) {\n    dfs(g, root, nodeSep, weight, height, depths, child);\n  });\n\n  // Save the multiplier for node layers for later removal of empty border\n  // layers.\n  g.graph().nodeRankFactor = nodeSep;\n}\n\nfunction dfs(g, root, nodeSep, weight, height, depths, v) {\n  var children = g.children(v);\n  if (!children.length) {\n    if (v !== root) {\n      g.setEdge(root, v, { weight: 0, minlen: nodeSep });\n    }\n    return;\n  }\n\n  var top = util.addBorderNode(g, \"_bt\");\n  var bottom = util.addBorderNode(g, \"_bb\");\n  var label = g.node(v);\n\n  g.setParent(top, v);\n  label.borderTop = top;\n  g.setParent(bottom, v);\n  label.borderBottom = bottom;\n\n  _.forEach(children, function(child) {\n    dfs(g, root, nodeSep, weight, height, depths, child);\n\n    var childNode = g.node(child);\n    var childTop = childNode.borderTop ? childNode.borderTop : child;\n    var childBottom = childNode.borderBottom ? childNode.borderBottom : child;\n    var thisWeight = childNode.borderTop ? weight : 2 * weight;\n    var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1;\n\n    g.setEdge(top, childTop, {\n      weight: thisWeight,\n      minlen: minlen,\n      nestingEdge: true\n    });\n\n    g.setEdge(childBottom, bottom, {\n      weight: thisWeight,\n      minlen: minlen,\n      nestingEdge: true\n    });\n  });\n\n  if (!g.parent(v)) {\n    g.setEdge(root, top, { weight: 0, minlen: height + depths[v] });\n  }\n}\n\nfunction treeDepths(g) {\n  var depths = {};\n  function dfs(v, depth) {\n    var children = g.children(v);\n    if (children && children.length) {\n      _.forEach(children, function(child) {\n        dfs(child, depth + 1);\n      });\n    }\n    depths[v] = depth;\n  }\n  _.forEach(g.children(), function(v) { dfs(v, 1); });\n  return depths;\n}\n\nfunction sumWeights(g) {\n  return _.reduce(g.edges(), function(acc, e) {\n    return acc + g.edge(e).weight;\n  }, 0);\n}\n\nfunction cleanup(g) {\n  var graphLabel = g.graph();\n  g.removeNode(graphLabel.nestingRoot);\n  delete graphLabel.nestingRoot;\n  _.forEach(g.edges(), function(e) {\n    var edge = g.edge(e);\n    if (edge.nestingEdge) {\n      g.removeEdge(e);\n    }\n  });\n}\n","var _ = require(\"./lodash\");\nvar util = require(\"./util\");\n\nmodule.exports = addBorderSegments;\n\nfunction addBorderSegments(g) {\n  function dfs(v) {\n    var children = g.children(v);\n    var node = g.node(v);\n    if (children.length) {\n      _.forEach(children, dfs);\n    }\n\n    if (_.has(node, \"minRank\")) {\n      node.borderLeft = [];\n      node.borderRight = [];\n      for (var rank = node.minRank, maxRank = node.maxRank + 1;\n        rank < maxRank;\n        ++rank) {\n        addBorderNode(g, \"borderLeft\", \"_bl\", v, node, rank);\n        addBorderNode(g, \"borderRight\", \"_br\", v, node, rank);\n      }\n    }\n  }\n\n  _.forEach(g.children(), dfs);\n}\n\nfunction addBorderNode(g, prop, prefix, sg, sgNode, rank) {\n  var label = { width: 0, height: 0, rank: rank, borderType: prop };\n  var prev = sgNode[prop][rank - 1];\n  var curr = util.addDummyNode(g, \"border\", label, prefix);\n  sgNode[prop][rank] = curr;\n  g.setParent(curr, sg);\n  if (prev) {\n    g.setEdge(prev, curr, { weight: 1 });\n  }\n}\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\n\nmodule.exports = {\n  adjust: adjust,\n  undo: undo\n};\n\nfunction adjust(g) {\n  var rankDir = g.graph().rankdir.toLowerCase();\n  if (rankDir === \"lr\" || rankDir === \"rl\") {\n    swapWidthHeight(g);\n  }\n}\n\nfunction undo(g) {\n  var rankDir = g.graph().rankdir.toLowerCase();\n  if (rankDir === \"bt\" || rankDir === \"rl\") {\n    reverseY(g);\n  }\n\n  if (rankDir === \"lr\" || rankDir === \"rl\") {\n    swapXY(g);\n    swapWidthHeight(g);\n  }\n}\n\nfunction swapWidthHeight(g) {\n  _.forEach(g.nodes(), function(v) { swapWidthHeightOne(g.node(v)); });\n  _.forEach(g.edges(), function(e) { swapWidthHeightOne(g.edge(e)); });\n}\n\nfunction swapWidthHeightOne(attrs) {\n  var w = attrs.width;\n  attrs.width = attrs.height;\n  attrs.height = w;\n}\n\nfunction reverseY(g) {\n  _.forEach(g.nodes(), function(v) { reverseYOne(g.node(v)); });\n\n  _.forEach(g.edges(), function(e) {\n    var edge = g.edge(e);\n    _.forEach(edge.points, reverseYOne);\n    if (_.has(edge, \"y\")) {\n      reverseYOne(edge);\n    }\n  });\n}\n\nfunction reverseYOne(attrs) {\n  attrs.y = -attrs.y;\n}\n\nfunction swapXY(g) {\n  _.forEach(g.nodes(), function(v) { swapXYOne(g.node(v)); });\n\n  _.forEach(g.edges(), function(e) {\n    var edge = g.edge(e);\n    _.forEach(edge.points, swapXYOne);\n    if (_.has(edge, \"x\")) {\n      swapXYOne(edge);\n    }\n  });\n}\n\nfunction swapXYOne(attrs) {\n  var x = attrs.x;\n  attrs.x = attrs.y;\n  attrs.y = x;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\n\nmodule.exports = initOrder;\n\n/*\n * Assigns an initial order value for each node by performing a DFS search\n * starting from nodes in the first rank. Nodes are assigned an order in their\n * rank as they are first visited.\n *\n * This approach comes from Gansner, et al., \"A Technique for Drawing Directed\n * Graphs.\"\n *\n * Returns a layering matrix with an array per layer and each layer sorted by\n * the order of its nodes.\n */\nfunction initOrder(g) {\n  var visited = {};\n  var simpleNodes = _.filter(g.nodes(), function(v) {\n    return !g.children(v).length;\n  });\n  var maxRank = _.max(_.map(simpleNodes, function(v) { return g.node(v).rank; }));\n  var layers = _.map(_.range(maxRank + 1), function() { return []; });\n\n  function dfs(v) {\n    if (_.has(visited, v)) return;\n    visited[v] = true;\n    var node = g.node(v);\n    layers[node.rank].push(v);\n    _.forEach(g.successors(v), dfs);\n  }\n\n  var orderedVs = _.sortBy(simpleNodes, function(v) { return g.node(v).rank; });\n  _.forEach(orderedVs, dfs);\n\n  return layers;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\n\nmodule.exports = crossCount;\n\n/*\n * A function that takes a layering (an array of layers, each with an array of\n * ordererd nodes) and a graph and returns a weighted crossing count.\n *\n * Pre-conditions:\n *\n *    1. Input graph must be simple (not a multigraph), directed, and include\n *       only simple edges.\n *    2. Edges in the input graph must have assigned weights.\n *\n * Post-conditions:\n *\n *    1. The graph and layering matrix are left unchanged.\n *\n * This algorithm is derived from Barth, et al., \"Bilayer Cross Counting.\"\n */\nfunction crossCount(g, layering) {\n  var cc = 0;\n  for (var i = 1; i < layering.length; ++i) {\n    cc += twoLayerCrossCount(g, layering[i-1], layering[i]);\n  }\n  return cc;\n}\n\nfunction twoLayerCrossCount(g, northLayer, southLayer) {\n  // Sort all of the edges between the north and south layers by their position\n  // in the north layer and then the south. Map these edges to the position of\n  // their head in the south layer.\n  var southPos = _.zipObject(southLayer,\n    _.map(southLayer, function (v, i) { return i; }));\n  var southEntries = _.flatten(_.map(northLayer, function(v) {\n    return _.sortBy(_.map(g.outEdges(v), function(e) {\n      return { pos: southPos[e.w], weight: g.edge(e).weight };\n    }), \"pos\");\n  }), true);\n\n  // Build the accumulator tree\n  var firstIndex = 1;\n  while (firstIndex < southLayer.length) firstIndex <<= 1;\n  var treeSize = 2 * firstIndex - 1;\n  firstIndex -= 1;\n  var tree = _.map(new Array(treeSize), function() { return 0; });\n\n  // Calculate the weighted crossings\n  var cc = 0;\n  _.forEach(southEntries.forEach(function(entry) {\n    var index = entry.pos + firstIndex;\n    tree[index] += entry.weight;\n    var weightSum = 0;\n    while (index > 0) {\n      if (index % 2) {\n        weightSum += tree[index + 1];\n      }\n      index = (index - 1) >> 1;\n      tree[index] += entry.weight;\n    }\n    cc += entry.weight * weightSum;\n  }));\n\n  return cc;\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = barycenter;\n\nfunction barycenter(g, movable) {\n  return _.map(movable, function(v) {\n    var inV = g.inEdges(v);\n    if (!inV.length) {\n      return { v: v };\n    } else {\n      var result = _.reduce(inV, function(acc, e) {\n        var edge = g.edge(e),\n          nodeU = g.node(e.v);\n        return {\n          sum: acc.sum + (edge.weight * nodeU.order),\n          weight: acc.weight + edge.weight\n        };\n      }, { sum: 0, weight: 0 });\n\n      return {\n        v: v,\n        barycenter: result.sum / result.weight,\n        weight: result.weight\n      };\n    }\n  });\n}\n\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\n\nmodule.exports = resolveConflicts;\n\n/*\n * Given a list of entries of the form {v, barycenter, weight} and a\n * constraint graph this function will resolve any conflicts between the\n * constraint graph and the barycenters for the entries. If the barycenters for\n * an entry would violate a constraint in the constraint graph then we coalesce\n * the nodes in the conflict into a new node that respects the contraint and\n * aggregates barycenter and weight information.\n *\n * This implementation is based on the description in Forster, \"A Fast and\n * Simple Hueristic for Constrained Two-Level Crossing Reduction,\" thought it\n * differs in some specific details.\n *\n * Pre-conditions:\n *\n *    1. Each entry has the form {v, barycenter, weight}, or if the node has\n *       no barycenter, then {v}.\n *\n * Returns:\n *\n *    A new list of entries of the form {vs, i, barycenter, weight}. The list\n *    `vs` may either be a singleton or it may be an aggregation of nodes\n *    ordered such that they do not violate constraints from the constraint\n *    graph. The property `i` is the lowest original index of any of the\n *    elements in `vs`.\n */\nfunction resolveConflicts(entries, cg) {\n  var mappedEntries = {};\n  _.forEach(entries, function(entry, i) {\n    var tmp = mappedEntries[entry.v] = {\n      indegree: 0,\n      \"in\": [],\n      out: [],\n      vs: [entry.v],\n      i: i\n    };\n    if (!_.isUndefined(entry.barycenter)) {\n      tmp.barycenter = entry.barycenter;\n      tmp.weight = entry.weight;\n    }\n  });\n\n  _.forEach(cg.edges(), function(e) {\n    var entryV = mappedEntries[e.v];\n    var entryW = mappedEntries[e.w];\n    if (!_.isUndefined(entryV) && !_.isUndefined(entryW)) {\n      entryW.indegree++;\n      entryV.out.push(mappedEntries[e.w]);\n    }\n  });\n\n  var sourceSet = _.filter(mappedEntries, function(entry) {\n    return !entry.indegree;\n  });\n\n  return doResolveConflicts(sourceSet);\n}\n\nfunction doResolveConflicts(sourceSet) {\n  var entries = [];\n\n  function handleIn(vEntry) {\n    return function(uEntry) {\n      if (uEntry.merged) {\n        return;\n      }\n      if (_.isUndefined(uEntry.barycenter) ||\n          _.isUndefined(vEntry.barycenter) ||\n          uEntry.barycenter >= vEntry.barycenter) {\n        mergeEntries(vEntry, uEntry);\n      }\n    };\n  }\n\n  function handleOut(vEntry) {\n    return function(wEntry) {\n      wEntry[\"in\"].push(vEntry);\n      if (--wEntry.indegree === 0) {\n        sourceSet.push(wEntry);\n      }\n    };\n  }\n\n  while (sourceSet.length) {\n    var entry = sourceSet.pop();\n    entries.push(entry);\n    _.forEach(entry[\"in\"].reverse(), handleIn(entry));\n    _.forEach(entry.out, handleOut(entry));\n  }\n\n  return _.map(_.filter(entries, function(entry) { return !entry.merged; }),\n    function(entry) {\n      return _.pick(entry, [\"vs\", \"i\", \"barycenter\", \"weight\"]);\n    });\n\n}\n\nfunction mergeEntries(target, source) {\n  var sum = 0;\n  var weight = 0;\n\n  if (target.weight) {\n    sum += target.barycenter * target.weight;\n    weight += target.weight;\n  }\n\n  if (source.weight) {\n    sum += source.barycenter * source.weight;\n    weight += source.weight;\n  }\n\n  target.vs = source.vs.concat(target.vs);\n  target.barycenter = sum / weight;\n  target.weight = weight;\n  target.i = Math.min(source.i, target.i);\n  source.merged = true;\n}\n","var _ = require(\"../lodash\");\nvar util = require(\"../util\");\n\nmodule.exports = sort;\n\nfunction sort(entries, biasRight) {\n  var parts = util.partition(entries, function(entry) {\n    return _.has(entry, \"barycenter\");\n  });\n  var sortable = parts.lhs,\n    unsortable = _.sortBy(parts.rhs, function(entry) { return -entry.i; }),\n    vs = [],\n    sum = 0,\n    weight = 0,\n    vsIndex = 0;\n\n  sortable.sort(compareWithBias(!!biasRight));\n\n  vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n\n  _.forEach(sortable, function (entry) {\n    vsIndex += entry.vs.length;\n    vs.push(entry.vs);\n    sum += entry.barycenter * entry.weight;\n    weight += entry.weight;\n    vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n  });\n\n  var result = { vs: _.flatten(vs, true) };\n  if (weight) {\n    result.barycenter = sum / weight;\n    result.weight = weight;\n  }\n  return result;\n}\n\nfunction consumeUnsortable(vs, unsortable, index) {\n  var last;\n  while (unsortable.length && (last = _.last(unsortable)).i <= index) {\n    unsortable.pop();\n    vs.push(last.vs);\n    index++;\n  }\n  return index;\n}\n\nfunction compareWithBias(bias) {\n  return function(entryV, entryW) {\n    if (entryV.barycenter < entryW.barycenter) {\n      return -1;\n    } else if (entryV.barycenter > entryW.barycenter) {\n      return 1;\n    }\n\n    return !bias ? entryV.i - entryW.i : entryW.i - entryV.i;\n  };\n}\n","var _ = require(\"../lodash\");\nvar barycenter = require(\"./barycenter\");\nvar resolveConflicts = require(\"./resolve-conflicts\");\nvar sort = require(\"./sort\");\n\nmodule.exports = sortSubgraph;\n\nfunction sortSubgraph(g, v, cg, biasRight) {\n  var movable = g.children(v);\n  var node = g.node(v);\n  var bl = node ? node.borderLeft : undefined;\n  var br = node ? node.borderRight: undefined;\n  var subgraphs = {};\n\n  if (bl) {\n    movable = _.filter(movable, function(w) {\n      return w !== bl && w !== br;\n    });\n  }\n\n  var barycenters = barycenter(g, movable);\n  _.forEach(barycenters, function(entry) {\n    if (g.children(entry.v).length) {\n      var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight);\n      subgraphs[entry.v] = subgraphResult;\n      if (_.has(subgraphResult, \"barycenter\")) {\n        mergeBarycenters(entry, subgraphResult);\n      }\n    }\n  });\n\n  var entries = resolveConflicts(barycenters, cg);\n  expandSubgraphs(entries, subgraphs);\n\n  var result = sort(entries, biasRight);\n\n  if (bl) {\n    result.vs = _.flatten([bl, result.vs, br], true);\n    if (g.predecessors(bl).length) {\n      var blPred = g.node(g.predecessors(bl)[0]),\n        brPred = g.node(g.predecessors(br)[0]);\n      if (!_.has(result, \"barycenter\")) {\n        result.barycenter = 0;\n        result.weight = 0;\n      }\n      result.barycenter = (result.barycenter * result.weight +\n                           blPred.order + brPred.order) / (result.weight + 2);\n      result.weight += 2;\n    }\n  }\n\n  return result;\n}\n\nfunction expandSubgraphs(entries, subgraphs) {\n  _.forEach(entries, function(entry) {\n    entry.vs = _.flatten(entry.vs.map(function(v) {\n      if (subgraphs[v]) {\n        return subgraphs[v].vs;\n      }\n      return v;\n    }), true);\n  });\n}\n\nfunction mergeBarycenters(target, other) {\n  if (!_.isUndefined(target.barycenter)) {\n    target.barycenter = (target.barycenter * target.weight +\n                         other.barycenter * other.weight) /\n                        (target.weight + other.weight);\n    target.weight += other.weight;\n  } else {\n    target.barycenter = other.barycenter;\n    target.weight = other.weight;\n  }\n}\n","var _ = require(\"../lodash\");\nvar Graph = require(\"../graphlib\").Graph;\n\nmodule.exports = buildLayerGraph;\n\n/*\n * Constructs a graph that can be used to sort a layer of nodes. The graph will\n * contain all base and subgraph nodes from the request layer in their original\n * hierarchy and any edges that are incident on these nodes and are of the type\n * requested by the \"relationship\" parameter.\n *\n * Nodes from the requested rank that do not have parents are assigned a root\n * node in the output graph, which is set in the root graph attribute. This\n * makes it easy to walk the hierarchy of movable nodes during ordering.\n *\n * Pre-conditions:\n *\n *    1. Input graph is a DAG\n *    2. Base nodes in the input graph have a rank attribute\n *    3. Subgraph nodes in the input graph has minRank and maxRank attributes\n *    4. Edges have an assigned weight\n *\n * Post-conditions:\n *\n *    1. Output graph has all nodes in the movable rank with preserved\n *       hierarchy.\n *    2. Root nodes in the movable layer are made children of the node\n *       indicated by the root attribute of the graph.\n *    3. Non-movable nodes incident on movable nodes, selected by the\n *       relationship parameter, are included in the graph (without hierarchy).\n *    4. Edges incident on movable nodes, selected by the relationship\n *       parameter, are added to the output graph.\n *    5. The weights for copied edges are aggregated as need, since the output\n *       graph is not a multi-graph.\n */\nfunction buildLayerGraph(g, rank, relationship) {\n  var root = createRootNode(g),\n    result = new Graph({ compound: true }).setGraph({ root: root })\n      .setDefaultNodeLabel(function(v) { return g.node(v); });\n\n  _.forEach(g.nodes(), function(v) {\n    var node = g.node(v),\n      parent = g.parent(v);\n\n    if (node.rank === rank || node.minRank <= rank && rank <= node.maxRank) {\n      result.setNode(v);\n      result.setParent(v, parent || root);\n\n      // This assumes we have only short edges!\n      _.forEach(g[relationship](v), function(e) {\n        var u = e.v === v ? e.w : e.v,\n          edge = result.edge(u, v),\n          weight = !_.isUndefined(edge) ? edge.weight : 0;\n        result.setEdge(u, v, { weight: g.edge(e).weight + weight });\n      });\n\n      if (_.has(node, \"minRank\")) {\n        result.setNode(v, {\n          borderLeft: node.borderLeft[rank],\n          borderRight: node.borderRight[rank]\n        });\n      }\n    }\n  });\n\n  return result;\n}\n\nfunction createRootNode(g) {\n  var v;\n  while (g.hasNode((v = _.uniqueId(\"_root\"))));\n  return v;\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = addSubgraphConstraints;\n\nfunction addSubgraphConstraints(g, cg, vs) {\n  var prev = {},\n    rootPrev;\n\n  _.forEach(vs, function(v) {\n    var child = g.parent(v),\n      parent,\n      prevChild;\n    while (child) {\n      parent = g.parent(child);\n      if (parent) {\n        prevChild = prev[parent];\n        prev[parent] = child;\n      } else {\n        prevChild = rootPrev;\n        rootPrev = child;\n      }\n      if (prevChild && prevChild !== child) {\n        cg.setEdge(prevChild, child);\n        return;\n      }\n      child = parent;\n    }\n  });\n\n  /*\n  function dfs(v) {\n    var children = v ? g.children(v) : g.children();\n    if (children.length) {\n      var min = Number.POSITIVE_INFINITY,\n          subgraphs = [];\n      _.each(children, function(child) {\n        var childMin = dfs(child);\n        if (g.children(child).length) {\n          subgraphs.push({ v: child, order: childMin });\n        }\n        min = Math.min(min, childMin);\n      });\n      _.reduce(_.sortBy(subgraphs, \"order\"), function(prev, curr) {\n        cg.setEdge(prev.v, curr.v);\n        return curr;\n      });\n      return min;\n    }\n    return g.node(v).order;\n  }\n  dfs(undefined);\n  */\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar initOrder = require(\"./init-order\");\nvar crossCount = require(\"./cross-count\");\nvar sortSubgraph = require(\"./sort-subgraph\");\nvar buildLayerGraph = require(\"./build-layer-graph\");\nvar addSubgraphConstraints = require(\"./add-subgraph-constraints\");\nvar Graph = require(\"../graphlib\").Graph;\nvar util = require(\"../util\");\n\nmodule.exports = order;\n\n/*\n * Applies heuristics to minimize edge crossings in the graph and sets the best\n * order solution as an order attribute on each node.\n *\n * Pre-conditions:\n *\n *    1. Graph must be DAG\n *    2. Graph nodes must be objects with a \"rank\" attribute\n *    3. Graph edges must have the \"weight\" attribute\n *\n * Post-conditions:\n *\n *    1. Graph nodes will have an \"order\" attribute based on the results of the\n *       algorithm.\n */\nfunction order(g) {\n  var maxRank = util.maxRank(g),\n    downLayerGraphs = buildLayerGraphs(g, _.range(1, maxRank + 1), \"inEdges\"),\n    upLayerGraphs = buildLayerGraphs(g, _.range(maxRank - 1, -1, -1), \"outEdges\");\n\n  var layering = initOrder(g);\n  assignOrder(g, layering);\n\n  var bestCC = Number.POSITIVE_INFINITY,\n    best;\n\n  for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {\n    sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2);\n\n    layering = util.buildLayerMatrix(g);\n    var cc = crossCount(g, layering);\n    if (cc < bestCC) {\n      lastBest = 0;\n      best = _.cloneDeep(layering);\n      bestCC = cc;\n    }\n  }\n\n  assignOrder(g, best);\n}\n\nfunction buildLayerGraphs(g, ranks, relationship) {\n  return _.map(ranks, function(rank) {\n    return buildLayerGraph(g, rank, relationship);\n  });\n}\n\nfunction sweepLayerGraphs(layerGraphs, biasRight) {\n  var cg = new Graph();\n  _.forEach(layerGraphs, function(lg) {\n    var root = lg.graph().root;\n    var sorted = sortSubgraph(lg, root, cg, biasRight);\n    _.forEach(sorted.vs, function(v, i) {\n      lg.node(v).order = i;\n    });\n    addSubgraphConstraints(lg, cg, sorted.vs);\n  });\n}\n\nfunction assignOrder(g, layering) {\n  _.forEach(layering, function(layer) {\n    _.forEach(layer, function(v, i) {\n      g.node(v).order = i;\n    });\n  });\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar Graph = require(\"../graphlib\").Graph;\nvar util = require(\"../util\");\n\n/*\n * This module provides coordinate assignment based on Brandes and Köpf, \"Fast\n * and Simple Horizontal Coordinate Assignment.\"\n */\n\nmodule.exports = {\n  positionX: positionX,\n  findType1Conflicts: findType1Conflicts,\n  findType2Conflicts: findType2Conflicts,\n  addConflict: addConflict,\n  hasConflict: hasConflict,\n  verticalAlignment: verticalAlignment,\n  horizontalCompaction: horizontalCompaction,\n  alignCoordinates: alignCoordinates,\n  findSmallestWidthAlignment: findSmallestWidthAlignment,\n  balance: balance\n};\n\n/*\n * Marks all edges in the graph with a type-1 conflict with the \"type1Conflict\"\n * property. A type-1 conflict is one where a non-inner segment crosses an\n * inner segment. An inner segment is an edge with both incident nodes marked\n * with the \"dummy\" property.\n *\n * This algorithm scans layer by layer, starting with the second, for type-1\n * conflicts between the current layer and the previous layer. For each layer\n * it scans the nodes from left to right until it reaches one that is incident\n * on an inner segment. It then scans predecessors to determine if they have\n * edges that cross that inner segment. At the end a final scan is done for all\n * nodes on the current rank to see if they cross the last visited inner\n * segment.\n *\n * This algorithm (safely) assumes that a dummy node will only be incident on a\n * single node in the layers being scanned.\n */\nfunction findType1Conflicts(g, layering) {\n  var conflicts = {};\n\n  function visitLayer(prevLayer, layer) {\n    var\n      // last visited node in the previous layer that is incident on an inner\n      // segment.\n      k0 = 0,\n      // Tracks the last node in this layer scanned for crossings with a type-1\n      // segment.\n      scanPos = 0,\n      prevLayerLength = prevLayer.length,\n      lastNode = _.last(layer);\n\n    _.forEach(layer, function(v, i) {\n      var w = findOtherInnerSegmentNode(g, v),\n        k1 = w ? g.node(w).order : prevLayerLength;\n\n      if (w || v === lastNode) {\n        _.forEach(layer.slice(scanPos, i +1), function(scanNode) {\n          _.forEach(g.predecessors(scanNode), function(u) {\n            var uLabel = g.node(u),\n              uPos = uLabel.order;\n            if ((uPos < k0 || k1 < uPos) &&\n                !(uLabel.dummy && g.node(scanNode).dummy)) {\n              addConflict(conflicts, u, scanNode);\n            }\n          });\n        });\n        scanPos = i + 1;\n        k0 = k1;\n      }\n    });\n\n    return layer;\n  }\n\n  _.reduce(layering, visitLayer);\n  return conflicts;\n}\n\nfunction findType2Conflicts(g, layering) {\n  var conflicts = {};\n\n  function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) {\n    var v;\n    _.forEach(_.range(southPos, southEnd), function(i) {\n      v = south[i];\n      if (g.node(v).dummy) {\n        _.forEach(g.predecessors(v), function(u) {\n          var uNode = g.node(u);\n          if (uNode.dummy &&\n              (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) {\n            addConflict(conflicts, u, v);\n          }\n        });\n      }\n    });\n  }\n\n\n  function visitLayer(north, south) {\n    var prevNorthPos = -1,\n      nextNorthPos,\n      southPos = 0;\n\n    _.forEach(south, function(v, southLookahead) {\n      if (g.node(v).dummy === \"border\") {\n        var predecessors = g.predecessors(v);\n        if (predecessors.length) {\n          nextNorthPos = g.node(predecessors[0]).order;\n          scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos);\n          southPos = southLookahead;\n          prevNorthPos = nextNorthPos;\n        }\n      }\n      scan(south, southPos, south.length, nextNorthPos, north.length);\n    });\n\n    return south;\n  }\n\n  _.reduce(layering, visitLayer);\n  return conflicts;\n}\n\nfunction findOtherInnerSegmentNode(g, v) {\n  if (g.node(v).dummy) {\n    return _.find(g.predecessors(v), function(u) {\n      return g.node(u).dummy;\n    });\n  }\n}\n\nfunction addConflict(conflicts, v, w) {\n  if (v > w) {\n    var tmp = v;\n    v = w;\n    w = tmp;\n  }\n\n  var conflictsV = conflicts[v];\n  if (!conflictsV) {\n    conflicts[v] = conflictsV = {};\n  }\n  conflictsV[w] = true;\n}\n\nfunction hasConflict(conflicts, v, w) {\n  if (v > w) {\n    var tmp = v;\n    v = w;\n    w = tmp;\n  }\n  return _.has(conflicts[v], w);\n}\n\n/*\n * Try to align nodes into vertical \"blocks\" where possible. This algorithm\n * attempts to align a node with one of its median neighbors. If the edge\n * connecting a neighbor is a type-1 conflict then we ignore that possibility.\n * If a previous node has already formed a block with a node after the node\n * we're trying to form a block with, we also ignore that possibility - our\n * blocks would be split in that scenario.\n */\nfunction verticalAlignment(g, layering, conflicts, neighborFn) {\n  var root = {},\n    align = {},\n    pos = {};\n\n  // We cache the position here based on the layering because the graph and\n  // layering may be out of sync. The layering matrix is manipulated to\n  // generate different extreme alignments.\n  _.forEach(layering, function(layer) {\n    _.forEach(layer, function(v, order) {\n      root[v] = v;\n      align[v] = v;\n      pos[v] = order;\n    });\n  });\n\n  _.forEach(layering, function(layer) {\n    var prevIdx = -1;\n    _.forEach(layer, function(v) {\n      var ws = neighborFn(v);\n      if (ws.length) {\n        ws = _.sortBy(ws, function(w) { return pos[w]; });\n        var mp = (ws.length - 1) / 2;\n        for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) {\n          var w = ws[i];\n          if (align[v] === v &&\n              prevIdx < pos[w] &&\n              !hasConflict(conflicts, v, w)) {\n            align[w] = v;\n            align[v] = root[v] = root[w];\n            prevIdx = pos[w];\n          }\n        }\n      }\n    });\n  });\n\n  return { root: root, align: align };\n}\n\nfunction horizontalCompaction(g, layering, root, align, reverseSep) {\n  // This portion of the algorithm differs from BK due to a number of problems.\n  // Instead of their algorithm we construct a new block graph and do two\n  // sweeps. The first sweep places blocks with the smallest possible\n  // coordinates. The second sweep removes unused space by moving blocks to the\n  // greatest coordinates without violating separation.\n  var xs = {},\n    blockG = buildBlockGraph(g, layering, root, reverseSep),\n    borderType = reverseSep ? \"borderLeft\" : \"borderRight\";\n\n  function iterate(setXsFunc, nextNodesFunc) {\n    var stack = blockG.nodes();\n    var elem = stack.pop();\n    var visited = {};\n    while (elem) {\n      if (visited[elem]) {\n        setXsFunc(elem);\n      } else {\n        visited[elem] = true;\n        stack.push(elem);\n        stack = stack.concat(nextNodesFunc(elem));\n      }\n\n      elem = stack.pop();\n    }\n  }\n\n  // First pass, assign smallest coordinates\n  function pass1(elem) {\n    xs[elem] = blockG.inEdges(elem).reduce(function(acc, e) {\n      return Math.max(acc, xs[e.v] + blockG.edge(e));\n    }, 0);\n  }\n\n  // Second pass, assign greatest coordinates\n  function pass2(elem) {\n    var min = blockG.outEdges(elem).reduce(function(acc, e) {\n      return Math.min(acc, xs[e.w] - blockG.edge(e));\n    }, Number.POSITIVE_INFINITY);\n\n    var node = g.node(elem);\n    if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) {\n      xs[elem] = Math.max(xs[elem], min);\n    }\n  }\n\n  iterate(pass1, blockG.predecessors.bind(blockG));\n  iterate(pass2, blockG.successors.bind(blockG));\n\n  // Assign x coordinates to all nodes\n  _.forEach(align, function(v) {\n    xs[v] = xs[root[v]];\n  });\n\n  return xs;\n}\n\n\nfunction buildBlockGraph(g, layering, root, reverseSep) {\n  var blockGraph = new Graph(),\n    graphLabel = g.graph(),\n    sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep);\n\n  _.forEach(layering, function(layer) {\n    var u;\n    _.forEach(layer, function(v) {\n      var vRoot = root[v];\n      blockGraph.setNode(vRoot);\n      if (u) {\n        var uRoot = root[u],\n          prevMax = blockGraph.edge(uRoot, vRoot);\n        blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0));\n      }\n      u = v;\n    });\n  });\n\n  return blockGraph;\n}\n\n/*\n * Returns the alignment that has the smallest width of the given alignments.\n */\nfunction findSmallestWidthAlignment(g, xss) {\n  return _.minBy(_.values(xss), function (xs) {\n    var max = Number.NEGATIVE_INFINITY;\n    var min = Number.POSITIVE_INFINITY;\n\n    _.forIn(xs, function (x, v) {\n      var halfWidth = width(g, v) / 2;\n\n      max = Math.max(x + halfWidth, max);\n      min = Math.min(x - halfWidth, min);\n    });\n\n    return max - min;\n  });\n}\n\n/*\n * Align the coordinates of each of the layout alignments such that\n * left-biased alignments have their minimum coordinate at the same point as\n * the minimum coordinate of the smallest width alignment and right-biased\n * alignments have their maximum coordinate at the same point as the maximum\n * coordinate of the smallest width alignment.\n */\nfunction alignCoordinates(xss, alignTo) {\n  var alignToVals = _.values(alignTo),\n    alignToMin = _.min(alignToVals),\n    alignToMax = _.max(alignToVals);\n\n  _.forEach([\"u\", \"d\"], function(vert) {\n    _.forEach([\"l\", \"r\"], function(horiz) {\n      var alignment = vert + horiz,\n        xs = xss[alignment],\n        delta;\n      if (xs === alignTo) return;\n\n      var xsVals = _.values(xs);\n      delta = horiz === \"l\" ? alignToMin - _.min(xsVals) : alignToMax - _.max(xsVals);\n\n      if (delta) {\n        xss[alignment] = _.mapValues(xs, function(x) { return x + delta; });\n      }\n    });\n  });\n}\n\nfunction balance(xss, align) {\n  return _.mapValues(xss.ul, function(ignore, v) {\n    if (align) {\n      return xss[align.toLowerCase()][v];\n    } else {\n      var xs = _.sortBy(_.map(xss, v));\n      return (xs[1] + xs[2]) / 2;\n    }\n  });\n}\n\nfunction positionX(g) {\n  var layering = util.buildLayerMatrix(g);\n  var conflicts = _.merge(\n    findType1Conflicts(g, layering),\n    findType2Conflicts(g, layering));\n\n  var xss = {};\n  var adjustedLayering;\n  _.forEach([\"u\", \"d\"], function(vert) {\n    adjustedLayering = vert === \"u\" ? layering : _.values(layering).reverse();\n    _.forEach([\"l\", \"r\"], function(horiz) {\n      if (horiz === \"r\") {\n        adjustedLayering = _.map(adjustedLayering, function(inner) {\n          return _.values(inner).reverse();\n        });\n      }\n\n      var neighborFn = (vert === \"u\" ? g.predecessors : g.successors).bind(g);\n      var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn);\n      var xs = horizontalCompaction(g, adjustedLayering,\n        align.root, align.align, horiz === \"r\");\n      if (horiz === \"r\") {\n        xs = _.mapValues(xs, function(x) { return -x; });\n      }\n      xss[vert + horiz] = xs;\n    });\n  });\n\n  var smallestWidth = findSmallestWidthAlignment(g, xss);\n  alignCoordinates(xss, smallestWidth);\n  return balance(xss, g.graph().align);\n}\n\nfunction sep(nodeSep, edgeSep, reverseSep) {\n  return function(g, v, w) {\n    var vLabel = g.node(v);\n    var wLabel = g.node(w);\n    var sum = 0;\n    var delta;\n\n    sum += vLabel.width / 2;\n    if (_.has(vLabel, \"labelpos\")) {\n      switch (vLabel.labelpos.toLowerCase()) {\n      case \"l\": delta = -vLabel.width / 2; break;\n      case \"r\": delta = vLabel.width / 2; break;\n      }\n    }\n    if (delta) {\n      sum += reverseSep ? delta : -delta;\n    }\n    delta = 0;\n\n    sum += (vLabel.dummy ? edgeSep : nodeSep) / 2;\n    sum += (wLabel.dummy ? edgeSep : nodeSep) / 2;\n\n    sum += wLabel.width / 2;\n    if (_.has(wLabel, \"labelpos\")) {\n      switch (wLabel.labelpos.toLowerCase()) {\n      case \"l\": delta = wLabel.width / 2; break;\n      case \"r\": delta = -wLabel.width / 2; break;\n      }\n    }\n    if (delta) {\n      sum += reverseSep ? delta : -delta;\n    }\n    delta = 0;\n\n    return sum;\n  };\n}\n\nfunction width(g, v) {\n  return g.node(v).width;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar util = require(\"../util\");\nvar positionX = require(\"./bk\").positionX;\n\nmodule.exports = position;\n\nfunction position(g) {\n  g = util.asNonCompoundGraph(g);\n\n  positionY(g);\n  _.forEach(positionX(g), function(x, v) {\n    g.node(v).x = x;\n  });\n}\n\nfunction positionY(g) {\n  var layering = util.buildLayerMatrix(g);\n  var rankSep = g.graph().ranksep;\n  var prevY = 0;\n  _.forEach(layering, function(layer) {\n    var maxHeight = _.max(_.map(layer, function(v) { return g.node(v).height; }));\n    _.forEach(layer, function(v) {\n      g.node(v).y = prevY + maxHeight / 2;\n    });\n    prevY += maxHeight + rankSep;\n  });\n}\n\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\nvar acyclic = require(\"./acyclic\");\nvar normalize = require(\"./normalize\");\nvar rank = require(\"./rank\");\nvar normalizeRanks = require(\"./util\").normalizeRanks;\nvar parentDummyChains = require(\"./parent-dummy-chains\");\nvar removeEmptyRanks = require(\"./util\").removeEmptyRanks;\nvar nestingGraph = require(\"./nesting-graph\");\nvar addBorderSegments = require(\"./add-border-segments\");\nvar coordinateSystem = require(\"./coordinate-system\");\nvar order = require(\"./order\");\nvar position = require(\"./position\");\nvar util = require(\"./util\");\nvar Graph = require(\"./graphlib\").Graph;\n\nmodule.exports = layout;\n\nfunction layout(g, opts) {\n  var time = opts && opts.debugTiming ? util.time : util.notime;\n  time(\"layout\", function() {\n    var layoutGraph = \n      time(\"  buildLayoutGraph\", function() { return buildLayoutGraph(g); });\n    time(\"  runLayout\",        function() { runLayout(layoutGraph, time); });\n    time(\"  updateInputGraph\", function() { updateInputGraph(g, layoutGraph); });\n  });\n}\n\nfunction runLayout(g, time) {\n  time(\"    makeSpaceForEdgeLabels\", function() { makeSpaceForEdgeLabels(g); });\n  time(\"    removeSelfEdges\",        function() { removeSelfEdges(g); });\n  time(\"    acyclic\",                function() { acyclic.run(g); });\n  time(\"    nestingGraph.run\",       function() { nestingGraph.run(g); });\n  time(\"    rank\",                   function() { rank(util.asNonCompoundGraph(g)); });\n  time(\"    injectEdgeLabelProxies\", function() { injectEdgeLabelProxies(g); });\n  time(\"    removeEmptyRanks\",       function() { removeEmptyRanks(g); });\n  time(\"    nestingGraph.cleanup\",   function() { nestingGraph.cleanup(g); });\n  time(\"    normalizeRanks\",         function() { normalizeRanks(g); });\n  time(\"    assignRankMinMax\",       function() { assignRankMinMax(g); });\n  time(\"    removeEdgeLabelProxies\", function() { removeEdgeLabelProxies(g); });\n  time(\"    normalize.run\",          function() { normalize.run(g); });\n  time(\"    parentDummyChains\",      function() { parentDummyChains(g); });\n  time(\"    addBorderSegments\",      function() { addBorderSegments(g); });\n  time(\"    order\",                  function() { order(g); });\n  time(\"    insertSelfEdges\",        function() { insertSelfEdges(g); });\n  time(\"    adjustCoordinateSystem\", function() { coordinateSystem.adjust(g); });\n  time(\"    position\",               function() { position(g); });\n  time(\"    positionSelfEdges\",      function() { positionSelfEdges(g); });\n  time(\"    removeBorderNodes\",      function() { removeBorderNodes(g); });\n  time(\"    normalize.undo\",         function() { normalize.undo(g); });\n  time(\"    fixupEdgeLabelCoords\",   function() { fixupEdgeLabelCoords(g); });\n  time(\"    undoCoordinateSystem\",   function() { coordinateSystem.undo(g); });\n  time(\"    translateGraph\",         function() { translateGraph(g); });\n  time(\"    assignNodeIntersects\",   function() { assignNodeIntersects(g); });\n  time(\"    reversePoints\",          function() { reversePointsForReversedEdges(g); });\n  time(\"    acyclic.undo\",           function() { acyclic.undo(g); });\n}\n\n/*\n * Copies final layout information from the layout graph back to the input\n * graph. This process only copies whitelisted attributes from the layout graph\n * to the input graph, so it serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction updateInputGraph(inputGraph, layoutGraph) {\n  _.forEach(inputGraph.nodes(), function(v) {\n    var inputLabel = inputGraph.node(v);\n    var layoutLabel = layoutGraph.node(v);\n\n    if (inputLabel) {\n      inputLabel.x = layoutLabel.x;\n      inputLabel.y = layoutLabel.y;\n\n      if (layoutGraph.children(v).length) {\n        inputLabel.width = layoutLabel.width;\n        inputLabel.height = layoutLabel.height;\n      }\n    }\n  });\n\n  _.forEach(inputGraph.edges(), function(e) {\n    var inputLabel = inputGraph.edge(e);\n    var layoutLabel = layoutGraph.edge(e);\n\n    inputLabel.points = layoutLabel.points;\n    if (_.has(layoutLabel, \"x\")) {\n      inputLabel.x = layoutLabel.x;\n      inputLabel.y = layoutLabel.y;\n    }\n  });\n\n  inputGraph.graph().width = layoutGraph.graph().width;\n  inputGraph.graph().height = layoutGraph.graph().height;\n}\n\nvar graphNumAttrs = [\"nodesep\", \"edgesep\", \"ranksep\", \"marginx\", \"marginy\"];\nvar graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: \"tb\" };\nvar graphAttrs = [\"acyclicer\", \"ranker\", \"rankdir\", \"align\"];\nvar nodeNumAttrs = [\"width\", \"height\"];\nvar nodeDefaults = { width: 0, height: 0 };\nvar edgeNumAttrs = [\"minlen\", \"weight\", \"width\", \"height\", \"labeloffset\"];\nvar edgeDefaults = {\n  minlen: 1, weight: 1, width: 0, height: 0,\n  labeloffset: 10, labelpos: \"r\"\n};\nvar edgeAttrs = [\"labelpos\"];\n\n/*\n * Constructs a new graph from the input graph, which can be used for layout.\n * This process copies only whitelisted attributes from the input graph to the\n * layout graph. Thus this function serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction buildLayoutGraph(inputGraph) {\n  var g = new Graph({ multigraph: true, compound: true });\n  var graph = canonicalize(inputGraph.graph());\n\n  g.setGraph(_.merge({},\n    graphDefaults,\n    selectNumberAttrs(graph, graphNumAttrs),\n    _.pick(graph, graphAttrs)));\n\n  _.forEach(inputGraph.nodes(), function(v) {\n    var node = canonicalize(inputGraph.node(v));\n    g.setNode(v, _.defaults(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults));\n    g.setParent(v, inputGraph.parent(v));\n  });\n\n  _.forEach(inputGraph.edges(), function(e) {\n    var edge = canonicalize(inputGraph.edge(e));\n    g.setEdge(e, _.merge({},\n      edgeDefaults,\n      selectNumberAttrs(edge, edgeNumAttrs),\n      _.pick(edge, edgeAttrs)));\n  });\n\n  return g;\n}\n\n/*\n * This idea comes from the Gansner paper: to account for edge labels in our\n * layout we split each rank in half by doubling minlen and halving ranksep.\n * Then we can place labels at these mid-points between nodes.\n *\n * We also add some minimal padding to the width to push the label for the edge\n * away from the edge itself a bit.\n */\nfunction makeSpaceForEdgeLabels(g) {\n  var graph = g.graph();\n  graph.ranksep /= 2;\n  _.forEach(g.edges(), function(e) {\n    var edge = g.edge(e);\n    edge.minlen *= 2;\n    if (edge.labelpos.toLowerCase() !== \"c\") {\n      if (graph.rankdir === \"TB\" || graph.rankdir === \"BT\") {\n        edge.width += edge.labeloffset;\n      } else {\n        edge.height += edge.labeloffset;\n      }\n    }\n  });\n}\n\n/*\n * Creates temporary dummy nodes that capture the rank in which each edge's\n * label is going to, if it has one of non-zero width and height. We do this\n * so that we can safely remove empty ranks while preserving balance for the\n * label's position.\n */\nfunction injectEdgeLabelProxies(g) {\n  _.forEach(g.edges(), function(e) {\n    var edge = g.edge(e);\n    if (edge.width && edge.height) {\n      var v = g.node(e.v);\n      var w = g.node(e.w);\n      var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e };\n      util.addDummyNode(g, \"edge-proxy\", label, \"_ep\");\n    }\n  });\n}\n\nfunction assignRankMinMax(g) {\n  var maxRank = 0;\n  _.forEach(g.nodes(), function(v) {\n    var node = g.node(v);\n    if (node.borderTop) {\n      node.minRank = g.node(node.borderTop).rank;\n      node.maxRank = g.node(node.borderBottom).rank;\n      maxRank = _.max(maxRank, node.maxRank);\n    }\n  });\n  g.graph().maxRank = maxRank;\n}\n\nfunction removeEdgeLabelProxies(g) {\n  _.forEach(g.nodes(), function(v) {\n    var node = g.node(v);\n    if (node.dummy === \"edge-proxy\") {\n      g.edge(node.e).labelRank = node.rank;\n      g.removeNode(v);\n    }\n  });\n}\n\nfunction translateGraph(g) {\n  var minX = Number.POSITIVE_INFINITY;\n  var maxX = 0;\n  var minY = Number.POSITIVE_INFINITY;\n  var maxY = 0;\n  var graphLabel = g.graph();\n  var marginX = graphLabel.marginx || 0;\n  var marginY = graphLabel.marginy || 0;\n\n  function getExtremes(attrs) {\n    var x = attrs.x;\n    var y = attrs.y;\n    var w = attrs.width;\n    var h = attrs.height;\n    minX = Math.min(minX, x - w / 2);\n    maxX = Math.max(maxX, x + w / 2);\n    minY = Math.min(minY, y - h / 2);\n    maxY = Math.max(maxY, y + h / 2);\n  }\n\n  _.forEach(g.nodes(), function(v) { getExtremes(g.node(v)); });\n  _.forEach(g.edges(), function(e) {\n    var edge = g.edge(e);\n    if (_.has(edge, \"x\")) {\n      getExtremes(edge);\n    }\n  });\n\n  minX -= marginX;\n  minY -= marginY;\n\n  _.forEach(g.nodes(), function(v) {\n    var node = g.node(v);\n    node.x -= minX;\n    node.y -= minY;\n  });\n\n  _.forEach(g.edges(), function(e) {\n    var edge = g.edge(e);\n    _.forEach(edge.points, function(p) {\n      p.x -= minX;\n      p.y -= minY;\n    });\n    if (_.has(edge, \"x\")) { edge.x -= minX; }\n    if (_.has(edge, \"y\")) { edge.y -= minY; }\n  });\n\n  graphLabel.width = maxX - minX + marginX;\n  graphLabel.height = maxY - minY + marginY;\n}\n\nfunction assignNodeIntersects(g) {\n  _.forEach(g.edges(), function(e) {\n    var edge = g.edge(e);\n    var nodeV = g.node(e.v);\n    var nodeW = g.node(e.w);\n    var p1, p2;\n    if (!edge.points) {\n      edge.points = [];\n      p1 = nodeW;\n      p2 = nodeV;\n    } else {\n      p1 = edge.points[0];\n      p2 = edge.points[edge.points.length - 1];\n    }\n    edge.points.unshift(util.intersectRect(nodeV, p1));\n    edge.points.push(util.intersectRect(nodeW, p2));\n  });\n}\n\nfunction fixupEdgeLabelCoords(g) {\n  _.forEach(g.edges(), function(e) {\n    var edge = g.edge(e);\n    if (_.has(edge, \"x\")) {\n      if (edge.labelpos === \"l\" || edge.labelpos === \"r\") {\n        edge.width -= edge.labeloffset;\n      }\n      switch (edge.labelpos) {\n      case \"l\": edge.x -= edge.width / 2 + edge.labeloffset; break;\n      case \"r\": edge.x += edge.width / 2 + edge.labeloffset; break;\n      }\n    }\n  });\n}\n\nfunction reversePointsForReversedEdges(g) {\n  _.forEach(g.edges(), function(e) {\n    var edge = g.edge(e);\n    if (edge.reversed) {\n      edge.points.reverse();\n    }\n  });\n}\n\nfunction removeBorderNodes(g) {\n  _.forEach(g.nodes(), function(v) {\n    if (g.children(v).length) {\n      var node = g.node(v);\n      var t = g.node(node.borderTop);\n      var b = g.node(node.borderBottom);\n      var l = g.node(_.last(node.borderLeft));\n      var r = g.node(_.last(node.borderRight));\n\n      node.width = Math.abs(r.x - l.x);\n      node.height = Math.abs(b.y - t.y);\n      node.x = l.x + node.width / 2;\n      node.y = t.y + node.height / 2;\n    }\n  });\n\n  _.forEach(g.nodes(), function(v) {\n    if (g.node(v).dummy === \"border\") {\n      g.removeNode(v);\n    }\n  });\n}\n\nfunction removeSelfEdges(g) {\n  _.forEach(g.edges(), function(e) {\n    if (e.v === e.w) {\n      var node = g.node(e.v);\n      if (!node.selfEdges) {\n        node.selfEdges = [];\n      }\n      node.selfEdges.push({ e: e, label: g.edge(e) });\n      g.removeEdge(e);\n    }\n  });\n}\n\nfunction insertSelfEdges(g) {\n  var layers = util.buildLayerMatrix(g);\n  _.forEach(layers, function(layer) {\n    var orderShift = 0;\n    _.forEach(layer, function(v, i) {\n      var node = g.node(v);\n      node.order = i + orderShift;\n      _.forEach(node.selfEdges, function(selfEdge) {\n        util.addDummyNode(g, \"selfedge\", {\n          width: selfEdge.label.width,\n          height: selfEdge.label.height,\n          rank: node.rank,\n          order: i + (++orderShift),\n          e: selfEdge.e,\n          label: selfEdge.label\n        }, \"_se\");\n      });\n      delete node.selfEdges;\n    });\n  });\n}\n\nfunction positionSelfEdges(g) {\n  _.forEach(g.nodes(), function(v) {\n    var node = g.node(v);\n    if (node.dummy === \"selfedge\") {\n      var selfNode = g.node(node.e.v);\n      var x = selfNode.x + selfNode.width / 2;\n      var y = selfNode.y;\n      var dx = node.x - x;\n      var dy = selfNode.height / 2;\n      g.setEdge(node.e, node.label);\n      g.removeNode(v);\n      node.label.points = [\n        { x: x + 2 * dx / 3, y: y - dy },\n        { x: x + 5 * dx / 6, y: y - dy },\n        { x: x +     dx    , y: y },\n        { x: x + 5 * dx / 6, y: y + dy },\n        { x: x + 2 * dx / 3, y: y + dy }\n      ];\n      node.label.x = node.x;\n      node.label.y = node.y;\n    }\n  });\n}\n\nfunction selectNumberAttrs(obj, attrs) {\n  return _.mapValues(_.pick(obj, attrs), Number);\n}\n\nfunction canonicalize(attrs) {\n  var newAttrs = {};\n  _.forEach(attrs, function(v, k) {\n    newAttrs[k.toLowerCase()] = v;\n  });\n  return newAttrs;\n}\n","var _ = require(\"./lodash\");\nvar util = require(\"./util\");\nvar Graph = require(\"./graphlib\").Graph;\n\nmodule.exports = {\n  debugOrdering: debugOrdering\n};\n\n/* istanbul ignore next */\nfunction debugOrdering(g) {\n  var layerMatrix = util.buildLayerMatrix(g);\n\n  var h = new Graph({ compound: true, multigraph: true }).setGraph({});\n\n  _.forEach(g.nodes(), function(v) {\n    h.setNode(v, { label: v });\n    h.setParent(v, \"layer\" + g.node(v).rank);\n  });\n\n  _.forEach(g.edges(), function(e) {\n    h.setEdge(e.v, e.w, {}, e.name);\n  });\n\n  _.forEach(layerMatrix, function(layer, i) {\n    var layerV = \"layer\" + i;\n    h.setNode(layerV, { rank: \"same\" });\n    _.reduce(layer, function(u, v) {\n      h.setEdge(u, v, { style: \"invis\" });\n      return v;\n    });\n  });\n\n  return h;\n}\n","module.exports = \"0.8.5\";\n","/*\nCopyright (c) 2012-2014 Chris Pettitt\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\nmodule.exports = {\n  graphlib: require(\"./lib/graphlib\"),\n\n  layout: require(\"./lib/layout\"),\n  debug: require(\"./lib/debug\"),\n  util: {\n    time: require(\"./lib/util\").time,\n    notime: require(\"./lib/util\").notime\n  },\n  version: require(\"./lib/version\")\n};\n","import {\n  useCallback,\n  useContext,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'; // useRef kept for hasFitRef\nimport * as React from 'react';\nimport ReactFlow, {\n  addEdge,\n  useEdgesState,\n  useNodesState,\n  Handle,\n  MarkerType,\n  Position,\n} from 'reactflow';\nimport { useNavigate } from 'react-router-dom';\nimport dagre from 'dagre';\nimport 'reactflow/dist/style.css';\nimport DJClientContext from '../../providers/djclient';\n\nconst TYPE_COLORS = {\n  source: { border: '#00b368', text: '#00b368', bg: '#ccf7e5' },\n  transform: { border: '#0063b4', text: '#0063b4', bg: '#ccefff' },\n  metric: { border: '#a2283e', text: '#a2283e', bg: '#fad7dd' },\n  dimension: { border: '#a96621', text: '#a96621', bg: '#ffefd0' },\n  cube: { border: '#580076', text: '#580076', bg: '#dbafff' },\n};\n\nconst NODE_WIDTH = 220;\nconst NODE_HEIGHT = 72;\nconst HANDLE_BASE = {\n  width: 1,\n  height: 1,\n  opacity: 0,\n  border: 'none',\n  background: 'transparent',\n  pointerEvents: 'none',\n};\n// ReactFlow connects Position.Right edges to handle.x + handle.width (right edge of handle).\n// Setting right:0 puts the right edge flush with the node's right border → edge is flush.\n// Similarly, left:0 puts the left edge flush with the node's left border.\nconst TARGET_HANDLE = { ...HANDLE_BASE, left: 0 };\nconst SOURCE_HANDLE = { ...HANDLE_BASE, right: 0 };\n\nconst BASE_EDGE = { strokeWidth: 1, stroke: '#dde3ec' };\nconst BASE_MARKER = {\n  type: MarkerType.ArrowClosed,\n  color: '#dde3ec',\n  width: 12,\n  height: 12,\n};\n\nfunction DimNode({ data }) {\n  const navigate = useNavigate();\n  const c = TYPE_COLORS[data.type] ?? {\n    border: '#cbd5e1',\n    text: '#64748b',\n    bg: '#f8fafc',\n  };\n  const label = (data.display_name || data.name || '').split('.').pop();\n  const namespace = (data.name || '').split('.').slice(0, -1).join('.');\n\n  const borderStyle = data.isCurrent\n    ? {\n        border: `3px solid ${c.border}`,\n        boxShadow: `0 0 0 1px ${c.border}33, 0 4px 12px rgba(0,0,0,0.12)`,\n      }\n    : {\n        border: `1px solid ${c.border}66`,\n        opacity: data.dimmed ? 0.3 : 1,\n        boxShadow: '0 1px 4px rgba(0,0,0,0.06)',\n      };\n\n  return (\n    <>\n      <Handle type=\"target\" position={Position.Left} style={TARGET_HANDLE} />\n      <div\n        onClick={() => navigate('/nodes/' + data.name)}\n        style={{\n          width: NODE_WIDTH,\n          padding: '12px 16px',\n          background: '#fff',\n          borderRadius: 12,\n          cursor: 'pointer',\n          transition: 'opacity 0.15s',\n          ...borderStyle,\n        }}\n      >\n        <div\n          style={{\n            display: 'flex',\n            alignItems: 'flex-start',\n            justifyContent: 'space-between',\n            gap: 8,\n          }}\n        >\n          <div\n            style={{\n              fontSize: 13,\n              fontWeight: 700,\n              color: '#0f172a',\n              lineHeight: 1.3,\n              flex: 1,\n              minWidth: 0,\n              overflow: 'hidden',\n              textOverflow: 'ellipsis',\n              whiteSpace: 'nowrap',\n            }}\n          >\n            {label}\n          </div>\n          <span\n            style={{\n              fontSize: 10,\n              fontWeight: 600,\n              color: c.text,\n              background: c.bg,\n              borderRadius: 5,\n              padding: '2px 6px',\n              textTransform: 'uppercase',\n              letterSpacing: '0.05em',\n              whiteSpace: 'nowrap',\n              flexShrink: 0,\n            }}\n          >\n            {data.type}\n          </span>\n        </div>\n        {namespace && (\n          <div\n            style={{\n              fontSize: 11,\n              color: '#94a3b8',\n              marginTop: 5,\n              overflow: 'hidden',\n              textOverflow: 'ellipsis',\n              whiteSpace: 'nowrap',\n            }}\n          >\n            {namespace}\n          </div>\n        )}\n      </div>\n      <Handle type=\"source\" position={Position.Right} style={SOURCE_HANDLE} />\n    </>\n  );\n}\n\nconst getLayoutedElements = (nodes, edges, currentName) => {\n  const g = new dagre.graphlib.Graph();\n  g.setDefaultEdgeLabel(() => ({}));\n  g.setGraph({\n    rankdir: 'LR',\n    nodesep: 24,\n    ranksep: 80,\n    ranker: 'longest-path',\n  });\n  nodes.forEach(n =>\n    g.setNode(n.id, { width: NODE_WIDTH, height: NODE_HEIGHT }),\n  );\n  edges.forEach(e => g.setEdge(e.source, e.target));\n  dagre.layout(g);\n  nodes.forEach(n => {\n    const pos = g.node(n.id);\n    n.position = { x: pos.x - NODE_WIDTH / 2, y: pos.y - NODE_HEIGHT / 2 };\n    n.targetPosition = 'left';\n    n.sourcePosition = 'right';\n  });\n\n  // Translate so the current node's center sits at the origin (0, 0).\n  // fitView then centers on it regardless of how asymmetric the rest of the graph is.\n  const current = nodes.find(n => n.id === currentName);\n  if (current) {\n    const dx = -(current.position.x + NODE_WIDTH / 2);\n    const dy = -(current.position.y + NODE_HEIGHT / 2);\n    nodes.forEach(n => {\n      n.position = { x: n.position.x + dx, y: n.position.y + dy };\n    });\n  }\n\n  return { nodes, edges };\n};\n\nconst buildRFNode = (n, currentName) => ({\n  id: n.name,\n  type: 'DimNode',\n  zIndex: 10,\n  data: {\n    name: n.name,\n    display_name: n.display_name,\n    type: n.type,\n    isCurrent: n.name === currentName,\n    dimmed: false,\n  },\n});\n\nexport default function NodeDimensionsTab({ djNode }) {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const nodeTypes = useMemo(() => ({ DimNode }), []);\n  const [nodes, setNodes, onNodesChange] = useNodesState([]);\n  const [edges, setEdges, onEdgesChange] = useEdgesState([]);\n  const [loaded, setLoaded] = useState(false);\n  const [rfInstance, setRfInstance] = useState(null);\n  const [currentNodeName, setCurrentNodeName] = useState(null);\n  const hasFitRef = useRef(false);\n\n  // Reset fit-view state whenever the node changes so a fresh fitView fires on load.\n  useEffect(() => {\n    hasFitRef.current = false;\n    setCurrentNodeName(null);\n  }, [djNode?.name]);\n\n  // Center viewport on the current node (which is placed at the origin by getLayoutedElements).\n  // rfInstance is state (not ref) so this re-runs if onInit fires after nodes are set.\n  useEffect(() => {\n    if (\n      nodes.length > 0 &&\n      rfInstance &&\n      currentNodeName &&\n      !hasFitRef.current\n    ) {\n      hasFitRef.current = true;\n      rfInstance.setCenter(0, 0, { zoom: 0.9 });\n    }\n  }, [nodes, rfInstance, currentNodeName]);\n\n  useEffect(() => {\n    if (!djNode?.name) return;\n\n    const makeEdge = (() => {\n      const seen = new Set();\n      return (source, target) => {\n        const id = `${source}->${target}`;\n        if (seen.has(id)) return null;\n        seen.add(id);\n        return { id, source, target, style: BASE_EDGE, markerEnd: BASE_MARKER };\n      };\n    })();\n\n    const applyLayout = (rfNodes, rfEdges) => {\n      const { nodes: ln, edges: le } = getLayoutedElements(\n        rfNodes,\n        rfEdges,\n        djNode.name,\n      );\n      setCurrentNodeName(djNode.name);\n      setNodes(ln);\n      setEdges(le);\n      setLoaded(true);\n    };\n\n    djClient\n      .dimensionDag(djNode.name)\n      .then(\n        ({\n          inbound = [],\n          inbound_edges = [],\n          outbound = [],\n          outbound_edges = [],\n        }) => {\n          if (inbound.length === 0 && outbound.length === 0) {\n            setLoaded(true);\n            return;\n          }\n          const allRelated = [...inbound, ...outbound];\n          const rfNodes = [\n            buildRFNode(djNode, djNode.name),\n            ...allRelated.map(n => buildRFNode(n, djNode.name)),\n          ];\n          const rfEdges = [\n            ...inbound_edges.map(e => makeEdge(e.source, e.target)),\n            ...outbound_edges.map(e => makeEdge(e.source, e.target)),\n          ].filter(Boolean);\n          applyLayout(rfNodes, rfEdges);\n        },\n      )\n      .catch(err => {\n        console.error(err);\n        setLoaded(true);\n      });\n  }, [djNode, djClient]);\n\n  const onNodeMouseEnter = useCallback(\n    (_, node) => {\n      const connectedIds = new Set([node.id]);\n      setEdges(eds => {\n        eds.forEach(e => {\n          if (e.source === node.id) connectedIds.add(e.target);\n          if (e.target === node.id) connectedIds.add(e.source);\n        });\n        return eds.map(e => {\n          const isConn = e.source === node.id || e.target === node.id;\n          const hoverColor = isConn ? '#475569' : '#cbd5e1';\n          return {\n            ...e,\n            style: { strokeWidth: isConn ? 2 : 1, stroke: hoverColor },\n            markerEnd: {\n              type: MarkerType.ArrowClosed,\n              color: hoverColor,\n              width: 12,\n              height: 12,\n            },\n          };\n        });\n      });\n      setNodes(ns =>\n        ns.map(n => ({\n          ...n,\n          data: { ...n.data, dimmed: !connectedIds.has(n.id) },\n        })),\n      );\n    },\n    [setEdges, setNodes],\n  );\n\n  const onNodeMouseLeave = useCallback(() => {\n    setEdges(eds =>\n      eds.map(e => ({ ...e, style: BASE_EDGE, markerEnd: BASE_MARKER })),\n    );\n    setNodes(ns => ns.map(n => ({ ...n, data: { ...n.data, dimmed: false } })));\n  }, [setEdges, setNodes]);\n\n  const onConnect = useCallback(\n    params => setEdges(eds => addEdge(params, eds)),\n    [setEdges],\n  );\n\n  if (loaded && nodes.length === 0) {\n    return (\n      <div style={{ padding: '2rem', color: '#64748b', fontSize: 14 }}>\n        No dimension links found for this node.\n      </div>\n    );\n  }\n\n  return (\n    <div\n      style={{\n        height: 'calc(100vh - 280px)',\n        minHeight: 400,\n        background: '#fff',\n      }}\n    >\n      {/* Ensure node HTML layer always renders above the edge SVG layer */}\n      <style>{`.react-flow__nodes { z-index: 10 !important; }`}</style>\n      <ReactFlow\n        nodes={nodes}\n        edges={edges}\n        nodeTypes={nodeTypes}\n        onNodesChange={onNodesChange}\n        onEdgesChange={onEdgesChange}\n        onConnect={onConnect}\n        onNodeMouseEnter={onNodeMouseEnter}\n        onNodeMouseLeave={onNodeMouseLeave}\n        onInit={setRfInstance}\n        proOptions={{ hideAttribution: true }}\n      />\n    </div>\n  );\n}\n","const DiffIcon = props => (\n  <svg\n    width=\"2em\"\n    height=\"2em\"\n    viewBox=\"0 0 256 256\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <rect fill=\"none\" height=\"256\" width=\"256\" />\n    <circle\n      cx=\"196\"\n      cy=\"188\"\n      fill=\"none\"\n      r=\"28\"\n      stroke=\"#000\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      strokeWidth=\"12\"\n    />\n    <path\n      d=\"M196,160V119.9a48.2,48.2,0,0,0-14.1-34L144,48\"\n      fill=\"none\"\n      stroke=\"#000\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      strokeWidth=\"12\"\n    />\n    <polyline\n      fill=\"none\"\n      points=\"144 88 144 48 184 48\"\n      stroke=\"#000\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      strokeWidth=\"12\"\n    />\n    <circle\n      cx=\"60\"\n      cy=\"68\"\n      fill=\"none\"\n      r=\"28\"\n      stroke=\"#000\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      strokeWidth=\"12\"\n    />\n    <path\n      d=\"M60,96v40.1a48.2,48.2,0,0,0,14.1,34L112,208\"\n      fill=\"none\"\n      stroke=\"#000\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      strokeWidth=\"12\"\n    />\n    <polyline\n      fill=\"none\"\n      points=\"112 168 112 208 72 208\"\n      stroke=\"#000\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      strokeWidth=\"12\"\n    />\n  </svg>\n);\nexport default DiffIcon;\n","import { useEffect, useState } from 'react';\nimport * as React from 'react';\nimport DiffIcon from '../../icons/DiffIcon';\nimport { labelize } from '../../../utils/form';\nimport CommitIcon from '../../icons/CommitIcon';\n\nexport default function NodeHistory({ node, djClient }) {\n  const [history, setHistory] = useState([]);\n\n  useEffect(() => {\n    const fetchData = async () => {\n      if (node) {\n        const data = await djClient.history('node', node.name);\n        setHistory(data);\n      }\n    };\n    fetchData().catch(console.error);\n  }, [djClient, node]);\n\n  const eventData = event => {\n    const standard = (\n      <>\n        <a href={'#'} className={'highlight-svg'} title=\"Browse Details\">\n          <CommitIcon /> Details\n        </a>\n      </>\n    );\n\n    if (event.activity_type === 'update' && event.entity_type === 'node') {\n      return (\n        <>\n          <a href={`/nodes/${event.node}/revisions/${event.details.version}`}>\n            <span className={`badge version`}>{event.details.version}</span>\n          </a>\n          <a\n            href={`/nodes/${event.node}/revisions/${event.details.version}`}\n            className={'highlight-svg'}\n            title=\"View Diff\"\n          >\n            <DiffIcon /> Diff\n          </a>\n        </>\n      );\n    }\n    return '';\n  };\n\n  const eventDescription = event => {\n    if (event.activity_type === 'create' && event.entity_type === 'node') {\n      return (\n        <div className=\"history-left\">\n          <b style={{ textTransform: 'capitalize' }}>{event.activity_type}</b>{' '}\n          {event.entity_type}{' '}\n          <b>\n            <a href={'/nodes/' + event.entity_name}>{event.entity_name}</a>\n          </b>\n        </div>\n      );\n    }\n    if (\n      ['create', 'update', 'delete'].includes(event.activity_type) &&\n      event.entity_type === 'link'\n    ) {\n      return (\n        <div className=\"history-left\">\n          <b style={{ textTransform: 'capitalize' }}>{event.activity_type}</b>{' '}\n          {event.entity_type} from{' '}\n          <b>\n            <a href={'/nodes/' + event.entity_name}>{event.entity_name}</a>\n          </b>{' '}\n          to{' '}\n          <b>\n            <a href={'/nodes/' + event.details.dimension}>\n              {event.details.dimension}\n            </a>\n          </b>\n        </div>\n      );\n    }\n    if (event.activity_type === 'refresh') {\n      return (\n        <div className=\"history-left\">\n          <b style={{ textTransform: 'capitalize' }}>{event.activity_type}</b>{' '}\n          {event.entity_type}{' '}\n          <b>\n            <a href={'/nodes/' + event.entity_name}>{event.entity_name}</a>\n          </b>\n        </div>\n      );\n    }\n    if (event.activity_type === 'update' && event.entity_type === 'node') {\n      if (event.details?.old_owners) {\n        return (\n          <div className=\"history-left\">\n            <b style={{ textTransform: 'capitalize' }}>Ownership Change</b> for{' '}\n            {event.entity_type}{' '}\n            <b>\n              <a href={'/nodes/' + event.entity_name}>{event.entity_name}</a>\n            </b>\n            <small>\n              {' '}\n              to{' '}\n              {event.details?.new_owners.map(owner => (\n                <span className=\"badge version\" style={{ margin: '2px' }}>\n                  {owner}\n                </span>\n              ))}\n            </small>\n          </div>\n        );\n      }\n      return (\n        <div className=\"history-left\">\n          <b style={{ textTransform: 'capitalize' }}>{event.activity_type}</b>{' '}\n          {event.entity_type}{' '}\n          <b>\n            <a href={'/nodes/' + event.entity_name}>{event.entity_name}</a>\n          </b>\n        </div>\n      );\n    }\n    if (event.activity_type === 'tag' && event.entity_type === 'node') {\n      return (\n        <div className=\"history-left\">\n          Add tag{event.details.tags.length > 1 ? 's' : ''}{' '}\n          {event.details.tags.map(tag => (\n            <span className={'badge version'}>\n              <a href={`/tags/${tag}`}>{tag}</a>\n            </span>\n          ))}\n        </div>\n      );\n    }\n    if (event.activity_type === 'create' && event.entity_type === 'partition') {\n      return (\n        <div className=\"history-left\">\n          Set <b>{event.details.partition.type_} partition</b> on{' '}\n          <a href={'/nodes/' + event.node}>{event.details.column}</a>\n        </div>\n      );\n    }\n\n    if (\n      event.activity_type === 'set_attribute' &&\n      event.entity_type === 'column_attribute'\n    ) {\n      return (\n        <div className=\"history-left\">\n          <b>Set column attributes</b> on{' '}\n          <b>\n            <a href={'/nodes/' + event.node}>{event.node}</a>\n          </b>\n        </div>\n      );\n    }\n\n    if (event.entity_type === 'materialization') {\n      return (\n        <div className=\"history-left\">\n          <span style={{ textTransform: 'capitalize' }}>\n            {event.activity_type}\n          </span>{' '}\n          <b>{event.entity_type}</b>{' '}\n          <a href={`/nodes/${event.node}/materializations`}>\n            {event.entity_name}\n          </a>\n        </div>\n      );\n    }\n\n    if (\n      event.activity_type === 'status_change' &&\n      event.entity_type === 'node'\n    ) {\n      return (\n        <div className=\"history-left\">\n          <b style={{ textTransform: 'capitalize' }}>\n            {labelize(event.activity_type)}\n          </b>{' '}\n          on <a href={`/nodes/${event.node}`}>{event.node}</a> from{' '}\n          <b>{event.pre.status}</b> to <b>{event.post.status}</b>\n        </div>\n      );\n    }\n\n    if (\n      event.activity_type === 'create' &&\n      event.entity_type === 'availability'\n    ) {\n      return (\n        <div className=\"history-left\">\n          <b>Materialized</b> table{' '}\n          <code>\n            {event.post.catalog}.{event.post.schema_}.{event.post.table}\n          </code>{' '}\n          with partitions between {event.post.min_temporal_partition} and{' '}\n          {event.post.max_temporal_partition} available for{' '}\n          <a href={'/nodes/' + event.node}>{event.node}</a>.\n        </div>\n      );\n    }\n\n    if (event.activity_type === 'create' && event.entity_type === 'backfill') {\n      return (\n        <div className=\"history-left\">\n          <b>Backfill</b> created for materialization{' '}\n          {event.details.materialization} for partition{' '}\n          {event.details.partition[0].column_name} from{' '}\n          {event.details.partition[0].range[0]} to{' '}\n          {event.details.partition[0].range[1]}\n        </div>\n      );\n    }\n  };\n\n  const removeTagNodeEventsWithoutTags = event =>\n    event.activity_type !== 'tag' ||\n    (event.activity_type === 'tag' &&\n      event.entity_type === 'node' &&\n      event.details.tags.length > 0);\n\n  return (\n    <ul className=\"history-border\" role=\"list\" aria-label=\"Activity\">\n      {history.filter(removeTagNodeEventsWithoutTags).map(event => (\n        <li key={`history-row-${event.id}`} className=\"history\">\n          {eventDescription(event)}\n          <div className={'history-small'}>\n            done by <a href=\"#\">{event.user ? event.user : 'unknown'}</a> on{' '}\n            {new Date(Date.parse(event.created_at)).toLocaleString()}\n          </div>\n          <div className=\"history-right\">{eventData(event)}</div>\n        </li>\n      ))}\n    </ul>\n  );\n}\n","const JupyterExportIcon = ({ size = 14 }) => (\n  <svg\n    className=\"feather feather-jupyter-export\"\n    fill=\"none\"\n    height={size}\n    width={size}\n    viewBox=\"0 0 24 24\"\n    stroke=\"currentColor\"\n    strokeWidth=\"2\"\n    strokeLinecap=\"round\"\n    strokeLinejoin=\"round\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <rect x=\"3\" y=\"2\" width=\"14\" height=\"20\" rx=\"2\" ry=\"2\" />\n    <line x1=\"7\" y1=\"6\" x2=\"13\" y2=\"6\" />\n    <line x1=\"7\" y1=\"10\" x2=\"13\" y2=\"10\" />\n    <line x1=\"7\" y1=\"14\" x2=\"13\" y2=\"14\" />\n  </svg>\n);\n\nexport default JupyterExportIcon;\n","import DJClientContext from '../../providers/djclient';\nimport JupyterExportIcon from '../../icons/JupyterExportIcon';\nimport { useContext } from 'react';\n\nexport default function NotebookDownload({ node, buttonStyle }) {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n\n  const downloadFile = async () => {\n    try {\n      const response = await djClient.notebookExportCube(node.name);\n      const notebook = await response.blob();\n      const url = window.URL.createObjectURL(new Blob([notebook]));\n\n      const link = document.createElement('a');\n      link.href = url;\n      link.setAttribute('download', 'notebook.ipynb');\n      document.body.appendChild(link);\n      link.click();\n      link.parentNode.removeChild(link);\n    } catch (error) {\n      console.error('Error downloading file: ', error);\n    }\n  };\n\n  return (\n    <button onClick={downloadFile} style={buttonStyle}>\n      <JupyterExportIcon /> Notebook\n    </button>\n  );\n}\n","const TableIcon = props => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    fill=\"currentColor\"\n    className=\"bi bi-table\"\n    viewBox=\"0 0 16 16\"\n  >\n    <path d=\"M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm15 2h-4v3h4V4zm0 4h-4v3h4V8zm0 4h-4v3h3a1 1 0 0 0 1-1v-2zm-5 3v-3H6v3h4zm-5 0v-3H1v2a1 1 0 0 0 1 1h3zm-4-4h4V8H1v3zm0-4h4V4H1v3zm5-3v3h4V4H6zm4 4H6v3h4V8z\" />\n  </svg>\n);\n\nexport default TableIcon;\n","/**\n * Materialization configuration field.\n */\nimport React from 'react';\nimport { ErrorMessage, Field, useFormikContext } from 'formik';\nimport CodeMirror from '@uiw/react-codemirror';\nimport { langs } from '@uiw/codemirror-extensions-langs';\n\nexport const ConfigField = ({ djClient, value }) => {\n  const formik = useFormikContext();\n  const jsonExt = langs.json();\n\n  const updateFormik = val => {\n    formik.setFieldValue('spark_config', JSON.parse(val));\n  };\n\n  return (\n    <div className=\"DescriptionInput\">\n      <details>\n        <summary>\n          <label htmlFor=\"SparkConfig\" style={{ display: 'inline-block' }}>\n            Spark Config\n          </label>\n        </summary>\n        <ErrorMessage name=\"spark_config\" component=\"span\" />\n        <Field\n          type=\"textarea\"\n          style={{ display: 'none' }}\n          as=\"textarea\"\n          name=\"spark_config\"\n          id=\"SparkConfig\"\n        />\n        <div role=\"button\" tabIndex={0} className=\"relative flex bg-[#282a36]\">\n          <CodeMirror\n            id={'spark_config'}\n            name={'spark_config'}\n            extensions={[jsonExt]}\n            value={JSON.stringify(value, null, '    ')}\n            options={{\n              theme: 'default',\n              lineNumbers: true,\n            }}\n            width=\"100%\"\n            height=\"170px\"\n            style={{\n              margin: '0 0 23px 0',\n              flex: 1,\n              fontSize: '150%',\n              textAlign: 'left',\n            }}\n            onChange={(value, viewUpdate) => {\n              updateFormik(value);\n            }}\n          />\n        </div>\n      </details>{' '}\n      <></>\n    </div>\n  );\n};\n","import { useContext, useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\nimport DJClientContext from '../../providers/djclient';\nimport { ErrorMessage, Field, Form, Formik } from 'formik';\nimport { displayMessageAfterSubmit, labelize } from '../../../utils/form';\nimport { ConfigField } from './MaterializationConfigField';\nimport LoadingIcon from '../../icons/LoadingIcon';\n\nexport default function AddMaterializationPopover({ node, onSubmit }) {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const [popoverAnchor, setPopoverAnchor] = useState(false);\n  const [options, setOptions] = useState([]);\n  const [jobs, setJobs] = useState([]);\n\n  const timePartitionColumns = node.columns.filter(col => col.partition);\n\n  const ref = useRef(null);\n\n  // Fetch materialization options only when the popover is opened (once), not on\n  // every materialization-tab load — the options are only used inside the form.\n  const fetchedRef = useRef(false);\n  useEffect(() => {\n    if (!popoverAnchor || fetchedRef.current) return;\n    fetchedRef.current = true;\n    const fetchData = async () => {\n      const options = await djClient.materializationInfo();\n      setOptions(options);\n      const allowedJobs = options.job_types?.filter(job =>\n        job.allowed_node_types.includes(node.type),\n      );\n      setJobs(allowedJobs);\n    };\n    fetchData().catch(console.error);\n  }, [popoverAnchor, djClient, node.type]);\n\n  useEffect(() => {\n    const handleClickOutside = event => {\n      if (ref.current && !ref.current.contains(event.target)) {\n        setPopoverAnchor(false);\n      }\n    };\n    document.addEventListener('click', handleClickOutside, true);\n    return () => {\n      document.removeEventListener('click', handleClickOutside, true);\n    };\n  }, []);\n\n  const materialize = async (values, setStatus) => {\n    const config = {};\n    config.spark = values.spark_config;\n    config.lookback_window = values.lookback_window;\n    if (!values.job_type) {\n      values.job_type = 'spark_sql';\n    }\n    const { status, json } =\n      values.job_type === 'druid_cube'\n        ? await djClient.materializeCube(\n            values.node,\n            values.job_type,\n            values.strategy,\n            values.schedule,\n            values.lookback_window,\n          )\n        : await djClient.materialize(\n            values.node,\n            values.job_type,\n            values.strategy,\n            values.schedule,\n            config,\n          );\n    if (status === 200 || status === 201) {\n      setStatus({ success: json.message });\n      window.location.reload();\n    } else {\n      setStatus({\n        failure: `${json.message}`,\n      });\n    }\n  };\n\n  const configureMaterialization = async (\n    values,\n    { setSubmitting, setStatus },\n  ) => {\n    await materialize(values, setStatus).then(_ => {\n      window.scrollTo({ top: 0, left: 0, behavior: 'smooth' });\n      setSubmitting(false);\n    });\n  };\n\n  return (\n    <>\n      <button\n        className=\"edit_button\"\n        aria-label=\"AddMaterialization\"\n        tabIndex=\"0\"\n        onClick={() => {\n          setPopoverAnchor(!popoverAnchor);\n        }}\n      >\n        <span className=\"add_node\">+ Add Materialization</span>\n      </button>\n      <div\n        className=\"fade modal-backdrop in\"\n        style={{ display: popoverAnchor === false ? 'none' : 'block' }}\n      ></div>\n      <div\n        className=\"centerPopover\"\n        role=\"dialog\"\n        aria-label=\"client-code\"\n        style={{\n          display: popoverAnchor === false ? 'none' : 'block',\n          width: '50%',\n        }}\n        ref={ref}\n      >\n        <Formik\n          initialValues={{\n            node: node?.name,\n            job_type: node?.type === 'cube' ? 'druid_cube' : 'spark_sql',\n            strategy:\n              timePartitionColumns.length == 1 ? 'incremental_time' : 'full',\n            schedule: '@daily',\n            lookback_window: '1 DAY',\n            spark_config: {\n              'spark.executor.memory': '16g',\n              'spark.memory.fraction': '0.3',\n            },\n          }}\n          onSubmit={configureMaterialization}\n        >\n          {function Render({ isSubmitting, status, setFieldValue }) {\n            return (\n              <Form>\n                <h2>Configure Materialization for the Latest Node Version</h2>\n                {displayMessageAfterSubmit(status)}\n                {node.type === 'cube' ? (\n                  <span data-testid=\"job-type\">\n                    <label htmlFor=\"job_type\">Job Type</label>\n\n                    <Field as=\"select\" name=\"job_type\">\n                      <>\n                        <option key={'druid_cube'} value={'druid_cube'}>\n                          Druid\n                        </option>\n                      </>\n                    </Field>\n                    <br />\n                    <br />\n                  </span>\n                ) : (\n                  ''\n                )}\n                <input\n                  hidden={true}\n                  name=\"node\"\n                  value={node?.name}\n                  readOnly={true}\n                />\n                <span data-testid=\"edit-partition\">\n                  <label htmlFor=\"strategy\">Strategy</label>\n                  <Field as=\"select\" name=\"strategy\" id=\"strategy\">\n                    <>\n                      <option key={'full'} value={'full'}>\n                        Full\n                      </option>\n                      <option\n                        key={'incremental_time'}\n                        value={'incremental_time'}\n                      >\n                        Incremental Time\n                      </option>\n                    </>\n                  </Field>\n                </span>\n                <br />\n                <br />\n                <label htmlFor=\"schedule\">Schedule</label>\n                <Field\n                  type=\"text\"\n                  name=\"schedule\"\n                  id=\"schedule\"\n                  placeholder=\"Cron\"\n                  default=\"@daily\"\n                />\n                <br />\n                <br />\n                <div className=\"DescriptionInput\">\n                  <ErrorMessage name=\"description\" component=\"span\" />\n                  <label htmlFor=\"lookback_window\">Lookback Window</label>\n                  <Field\n                    type=\"text\"\n                    name=\"lookback_window\"\n                    id=\"lookback_window\"\n                    placeholder=\"1 DAY\"\n                    default=\"1 DAY\"\n                  />\n                </div>\n                <br />\n                <ConfigField\n                  value={{\n                    'spark.executor.memory': '16g',\n                    'spark.memory.fraction': '0.3',\n                  }}\n                />\n                <div\n                  style={{\n                    display: 'flex',\n                    justifyContent: 'flex-end',\n                    marginTop: '20px',\n                  }}\n                >\n                  <button\n                    className=\"add_node\"\n                    type=\"submit\"\n                    aria-label=\"SaveEditColumn\"\n                    aria-hidden=\"false\"\n                    disabled={isSubmitting}\n                  >\n                    {isSubmitting ? <LoadingIcon /> : 'Save'}\n                  </button>\n                </div>\n              </Form>\n            );\n          }}\n        </Formik>\n      </div>\n    </>\n  );\n}\n","import * as React from 'react';\nimport { Field } from 'formik';\n\nexport default function PartitionValueForm({ col, materialization }) {\n  if (col.partition.type_ === 'temporal') {\n    return (\n      <>\n        <div\n          className=\"partition__full\"\n          key={col.name}\n          style={{ width: '50%' }}\n        >\n          <div className=\"partition__header\">{col.display_name}</div>\n          <div className=\"partition__body\">\n            <span style={{ padding: '0.5rem' }}>From</span>{' '}\n            <Field\n              type=\"text\"\n              name={`partitionValues.['${col.name}'].from`}\n              id={`${col.name}.from`}\n              placeholder=\"20230101\"\n              default=\"20230101\"\n              style={{ width: '7rem', paddingRight: '1rem' }}\n            />{' '}\n            <span style={{ padding: '0.5rem' }}>To</span>\n            <Field\n              type=\"text\"\n              name={`partitionValues.['${col.name}'].to`}\n              id={`${col.name}.to`}\n              placeholder=\"20230102\"\n              default=\"20230102\"\n              style={{ width: '7rem' }}\n            />\n          </div>\n        </div>\n      </>\n    );\n  } else {\n    return (\n      <>\n        <div\n          className=\"partition__full\"\n          key={col.name}\n          style={{ width: '50%' }}\n        >\n          <div className=\"partition__header\">{col.display_name}</div>\n          <div className=\"partition__body\">\n            <Field\n              type=\"text\"\n              name={`partitionValues.['${col.name}']`}\n              id={col.name}\n              placeholder=\"\"\n              default=\"\"\n              style={{ width: '7rem', paddingRight: '1rem' }}\n            />\n          </div>\n        </div>\n      </>\n    );\n  }\n}\n","import { useContext, useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\nimport DJClientContext from '../../providers/djclient';\nimport { Field, Form, Formik } from 'formik';\nimport { displayMessageAfterSubmit } from '../../../utils/form';\nimport PartitionValueForm from './PartitionValueForm';\nimport LoadingIcon from '../../icons/LoadingIcon';\n\nexport default function AddBackfillPopover({\n  node,\n  materialization,\n  onSubmit,\n}) {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const [popoverAnchor, setPopoverAnchor] = useState(false);\n  const ref = useRef(null);\n\n  useEffect(() => {\n    const handleClickOutside = event => {\n      if (ref.current && !ref.current.contains(event.target)) {\n        setPopoverAnchor(false);\n      }\n    };\n    document.addEventListener('click', handleClickOutside, true);\n    return () => {\n      document.removeEventListener('click', handleClickOutside, true);\n    };\n  }, [setPopoverAnchor]);\n\n  const partitionColumns = node.columns.filter(col => col.partition !== null);\n  const initialValues = {\n    node: node.name,\n    materializationName: materialization.name,\n    partitionValues: {},\n  };\n\n  for (const partitionCol of partitionColumns) {\n    if (partitionCol.partition.type_ === 'temporal') {\n      initialValues.partitionValues[partitionCol.name] = {\n        from: '',\n        to: '',\n      };\n    } else {\n      initialValues.partitionValues[partitionCol.name] = '';\n    }\n  }\n\n  const runBackfill = async (values, setStatus) => {\n    const response = await djClient.runBackfill(\n      values.node,\n      values.materializationName,\n      Object.entries(values.partitionValues).map(entry => {\n        if (typeof entry[1] === 'object' && entry[1] !== null) {\n          return {\n            columnName: entry[0],\n            range: [entry[1].from, entry[1].to],\n          };\n        }\n        return {\n          columnName: entry[0],\n          values: [entry[1]],\n        };\n      }),\n    );\n    if (response.status === 200 || response.status === 201) {\n      setStatus({ success: 'Saved!' });\n      return true;\n    } else {\n      setStatus({\n        failure: `${response.json.message}`,\n      });\n      return false;\n    }\n  };\n\n  const submitBackfill = async (values, { setSubmitting, setStatus }) => {\n    const success = await runBackfill(values, setStatus);\n    window.scrollTo({ top: 0, left: 0, behavior: 'smooth' });\n    setSubmitting(false);\n    if (success) {\n      setPopoverAnchor(false);\n      if (onSubmit) {\n        onSubmit();\n      }\n    }\n  };\n\n  return (\n    <>\n      <button\n        className=\"edit_button add_button\"\n        aria-label=\"AddBackfill\"\n        tabIndex=\"0\"\n        onClick={() => {\n          setPopoverAnchor(!popoverAnchor);\n        }}\n      >\n        <span className=\"add_button\">+ Run</span>\n      </button>\n      <div\n        className=\"fade modal-backdrop in\"\n        style={{ display: popoverAnchor === false ? 'none' : 'block' }}\n      ></div>\n      <div\n        className=\"centerPopover\"\n        role=\"dialog\"\n        aria-label=\"client-code\"\n        style={{\n          display: popoverAnchor === false ? 'none' : 'block',\n          width: '50%',\n          minWidth: '800px',\n        }}\n        ref={ref}\n      >\n        <Formik initialValues={initialValues} onSubmit={submitBackfill}>\n          {function Render({ isSubmitting, status, setFieldValue }) {\n            return (\n              <Form>\n                {displayMessageAfterSubmit(status)}\n                <h2>Run Backfill</h2>\n                <span data-testid=\"edit-partition\">\n                  <label\n                    htmlFor=\"materializationName\"\n                    style={{ paddingBottom: '1rem' }}\n                  >\n                    Materialization Name\n                  </label>\n                  <Field\n                    as=\"select\"\n                    name=\"materializationName\"\n                    id=\"materializationName\"\n                    disabled={true}\n                  >\n                    <option value={materialization?.name}>\n                      {materialization?.name}{' '}\n                    </option>\n                  </Field>\n                </span>\n                <br />\n                <br />\n                <label htmlFor=\"partition\" style={{ paddingBottom: '1rem' }}>\n                  Partition\n                </label>\n                {node.columns\n                  .filter(col => col.partition !== null)\n                  .map(col => {\n                    return (\n                      <PartitionValueForm\n                        col={col}\n                        materialization={materialization}\n                        key={col.name}\n                      />\n                    );\n                  })}\n                <br />\n                <button\n                  className=\"add_node\"\n                  type=\"submit\"\n                  aria-label=\"SaveEditColumn\"\n                  aria-hidden=\"false\"\n                  disabled={isSubmitting}\n                >\n                  {isSubmitting ? <LoadingIcon /> : 'Save'}\n                </button>\n              </Form>\n            );\n          }}\n        </Formik>\n      </div>\n    </>\n  );\n}\n","const DeleteIcon = ({ size = 14 }) => (\n  <svg\n    className=\"feather feather-trash-2\"\n    fill=\"none\"\n    height={size}\n    stroke=\"currentColor\"\n    strokeLinecap=\"round\"\n    strokeLinejoin=\"round\"\n    strokeWidth=\"2\"\n    viewBox=\"0 0 24 24\"\n    width={size}\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <polyline points=\"3 6 5 6 21 6\" />\n    <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\n    <line x1=\"10\" x2=\"10\" y1=\"11\" y2=\"17\" />\n    <line x1=\"14\" x2=\"14\" y1=\"11\" y2=\"17\" />\n  </svg>\n);\n\nexport default DeleteIcon;\n","import DJClientContext from '../providers/djclient';\nimport * as React from 'react';\nimport DeleteIcon from '../icons/DeleteIcon';\nimport { Form, Formik } from 'formik';\nimport { useContext } from 'react';\nimport { displayMessageAfterSubmit } from '../../utils/form';\n\nexport default function NodeMaterializationDelete({\n  nodeName,\n  materializationName,\n  nodeVersion = null,\n}) {\n  const [deleteButton, setDeleteButton] = React.useState(<DeleteIcon />);\n\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const deleteNode = async (values, { setStatus }) => {\n    if (\n      !window.confirm(\n        'Deleting materialization job ' +\n          values.materializationName +\n          ' for node version ' +\n          values.nodeVersion +\n          '. Are you sure?',\n      )\n    ) {\n      return;\n    }\n    const { status, json } = await djClient.deleteMaterialization(\n      values.nodeName,\n      values.materializationName,\n      values.nodeVersion,\n    );\n    if (status === 200 || status === 201 || status === 204) {\n      window.location.reload();\n      setStatus({\n        success: (\n          <>\n            Successfully deleted materialization job:{' '}\n            {values.materializationName}\n          </>\n        ),\n      });\n      setDeleteButton(''); // hide the Delete button\n    } else {\n      setStatus({\n        failure: `${json.message}`,\n      });\n    }\n  };\n\n  const initialValues = {\n    nodeName: nodeName,\n    materializationName: materializationName,\n    nodeVersion: nodeVersion,\n  };\n\n  return (\n    <div>\n      <Formik\n        key={`${nodeName}-${materializationName}-${nodeVersion}`}\n        initialValues={initialValues}\n        enableReinitialize={true}\n        onSubmit={deleteNode}\n      >\n        {function Render({ status, setFieldValue }) {\n          return (\n            <Form className=\"deleteNode\">\n              {displayMessageAfterSubmit(status)}\n              {\n                <>\n                  <button\n                    type=\"submit\"\n                    style={{\n                      marginLeft: 0,\n                      all: 'unset',\n                      color: '#005c72',\n                      cursor: 'pointer',\n                    }}\n                  >\n                    {deleteButton}\n                  </button>\n                </>\n              }\n            </Form>\n          );\n        }}\n      </Formik>\n    </div>\n  );\n}\n","import Tab from '../../components/Tab';\n\nexport default function NodeRevisionMaterializationTab({\n  version,\n  node,\n  selectedRevisionTab,\n  onClickRevisionTab,\n  showInactive,\n  versionHasOnlyInactive,\n}) {\n  const isCurrentVersion = version === node?.version;\n  const tabName = isCurrentVersion ? `${version} (latest)` : version;\n  const versionInfo = versionHasOnlyInactive[version];\n  const isOnlyInactive =\n    versionInfo && !versionInfo.hasActive && versionInfo.hasInactive;\n\n  // For inactive-only versions, render with oval styling\n  if (isOnlyInactive && showInactive) {\n    return (\n      <div\n        key={version}\n        className={selectedRevisionTab === version ? 'col active' : 'col'}\n      >\n        <div className=\"header-tabs nav-overflow nav nav-tabs\">\n          <div className=\"nav-item\">\n            <button\n              id={version}\n              className=\"nav-link\"\n              tabIndex=\"0\"\n              onClick={onClickRevisionTab(version)}\n              aria-label={tabName}\n              aria-hidden=\"false\"\n              style={{\n                padding: '4px 8px',\n                borderRadius: '12px',\n                backgroundColor: '#f5f5f5',\n                border: '1px solid #ddd',\n                margin: '0 2px',\n              }}\n            >\n              {tabName}\n            </button>\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <Tab\n      key={version}\n      id={version}\n      name={tabName}\n      onClick={onClickRevisionTab(version)}\n      selectedTab={selectedRevisionTab}\n    />\n  );\n}\n","import TableIcon from '../../icons/TableIcon';\n\nexport default function AvailabilityStateBlock({ availability }) {\n  return (\n    <table\n      className=\"card-inner-table table\"\n      aria-label=\"Availability\"\n      aria-hidden=\"false\"\n      style={{ marginBottom: '20px' }}\n    >\n      <thead className=\"fs-7 fw-bold text-gray-400 border-bottom-0\">\n        <tr>\n          <th className=\"text-start\">Output Dataset</th>\n          <th>Valid Through</th>\n          <th>Partitions</th>\n          <th>Links</th>\n        </tr>\n      </thead>\n      <tbody>\n        <tr>\n          <td>\n            <div className={`table__full`} key={availability.table}>\n              <div className=\"table__header\">\n                <TableIcon />{' '}\n                <span className={`entity-info`}>\n                  {availability.catalog + '.' + availability.schema_}\n                </span>\n              </div>\n              <div className={`table__body upstream_tables`}>\n                <a href={availability.url}>{availability.table}</a>\n              </div>\n            </div>\n          </td>\n          <td>{new Date(availability.valid_through_ts).toISOString()}</td>\n          <td>\n            <span\n              className={`badge partition_value`}\n              style={{ fontSize: '100%' }}\n            >\n              <span className={`badge partition_value_highlight`}>\n                {availability.min_temporal_partition?.join(', ') || 'N/A'}\n              </span>\n              to\n              <span className={`badge partition_value_highlight`}>\n                {availability.max_temporal_partition?.join(', ') || 'N/A'}\n              </span>\n            </span>\n          </td>\n          <td>\n            {availability.links &&\n            Object.keys(availability.links).length > 0 ? (\n              Object.entries(availability.links).map(([key, value]) => (\n                <div key={key}>\n                  <a href={value} target=\"_blank\" rel=\"noreferrer\">\n                    {key}\n                  </a>\n                </div>\n              ))\n            ) : (\n              <></>\n            )}\n          </td>\n        </tr>\n      </tbody>\n    </table>\n  );\n}\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"cronstrue\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"cronstrue\"] = factory();\n\telse\n\t\troot[\"cronstrue\"] = factory();\n})(globalThis, () => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 794:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.CronParser = void 0;\nvar rangeValidator_1 = __webpack_require__(586);\nvar CronParser = (function () {\n    function CronParser(expression, dayOfWeekStartIndexZero, monthStartIndexZero) {\n        if (dayOfWeekStartIndexZero === void 0) { dayOfWeekStartIndexZero = true; }\n        if (monthStartIndexZero === void 0) { monthStartIndexZero = false; }\n        this.expression = expression;\n        this.dayOfWeekStartIndexZero = dayOfWeekStartIndexZero;\n        this.monthStartIndexZero = monthStartIndexZero;\n    }\n    CronParser.prototype.parse = function () {\n        var parsed = this.extractParts(this.expression);\n        this.normalize(parsed);\n        this.validate(parsed);\n        return parsed;\n    };\n    CronParser.prototype.extractParts = function (expression) {\n        if (!this.expression) {\n            throw new Error(\"Expression is empty\");\n        }\n        var parsed = expression.trim().split(/[ ]+/);\n        if (parsed.length < 5) {\n            throw new Error(\"Expression has only \".concat(parsed.length, \" part\").concat(parsed.length == 1 ? \"\" : \"s\", \". At least 5 parts are required.\"));\n        }\n        else if (parsed.length == 5) {\n            parsed.unshift(\"\");\n            parsed.push(\"\");\n        }\n        else if (parsed.length == 6) {\n            var isYearWithNoSecondsPart = /\\d{4}$/.test(parsed[5]) || parsed[4] == \"?\" || parsed[2] == \"?\";\n            if (isYearWithNoSecondsPart) {\n                parsed.unshift(\"\");\n            }\n            else {\n                parsed.push(\"\");\n            }\n        }\n        else if (parsed.length > 7) {\n            throw new Error(\"Expression has \".concat(parsed.length, \" parts; too many!\"));\n        }\n        return parsed;\n    };\n    CronParser.prototype.normalize = function (expressionParts) {\n        var _this = this;\n        expressionParts[3] = expressionParts[3].replace(\"?\", \"*\");\n        expressionParts[5] = expressionParts[5].replace(\"?\", \"*\");\n        expressionParts[2] = expressionParts[2].replace(\"?\", \"*\");\n        if (expressionParts[0].indexOf(\"0/\") == 0) {\n            expressionParts[0] = expressionParts[0].replace(\"0/\", \"*/\");\n        }\n        if (expressionParts[1].indexOf(\"0/\") == 0) {\n            expressionParts[1] = expressionParts[1].replace(\"0/\", \"*/\");\n        }\n        if (expressionParts[2].indexOf(\"0/\") == 0) {\n            expressionParts[2] = expressionParts[2].replace(\"0/\", \"*/\");\n        }\n        if (expressionParts[3].indexOf(\"1/\") == 0) {\n            expressionParts[3] = expressionParts[3].replace(\"1/\", \"*/\");\n        }\n        if (expressionParts[4].indexOf(\"1/\") == 0) {\n            expressionParts[4] = expressionParts[4].replace(\"1/\", \"*/\");\n        }\n        if (expressionParts[6].indexOf(\"1/\") == 0) {\n            expressionParts[6] = expressionParts[6].replace(\"1/\", \"*/\");\n        }\n        expressionParts[5] = expressionParts[5].replace(/(^\\d)|([^#/\\s]\\d)/g, function (t) {\n            var dowDigits = t.replace(/\\D/, \"\");\n            var dowDigitsAdjusted = dowDigits;\n            if (_this.dayOfWeekStartIndexZero) {\n                if (dowDigits == \"7\") {\n                    dowDigitsAdjusted = \"0\";\n                }\n            }\n            else {\n                dowDigitsAdjusted = (parseInt(dowDigits) - 1).toString();\n            }\n            return t.replace(dowDigits, dowDigitsAdjusted);\n        });\n        if (expressionParts[5] == \"L\") {\n            expressionParts[5] = \"6\";\n        }\n        if (expressionParts[3] == \"?\") {\n            expressionParts[3] = \"*\";\n        }\n        if (expressionParts[3].indexOf(\"W\") > -1 &&\n            (expressionParts[3].indexOf(\",\") > -1 || expressionParts[3].indexOf(\"-\") > -1)) {\n            throw new Error(\"The 'W' character can be specified only when the day-of-month is a single day, not a range or list of days.\");\n        }\n        var days = {\n            SUN: 0,\n            MON: 1,\n            TUE: 2,\n            WED: 3,\n            THU: 4,\n            FRI: 5,\n            SAT: 6,\n        };\n        for (var day in days) {\n            expressionParts[5] = expressionParts[5].replace(new RegExp(day, \"gi\"), days[day].toString());\n        }\n        expressionParts[4] = expressionParts[4].replace(/(^\\d{1,2})|([^#/\\s]\\d{1,2})/g, function (t) {\n            var dowDigits = t.replace(/\\D/, \"\");\n            var dowDigitsAdjusted = dowDigits;\n            if (_this.monthStartIndexZero) {\n                dowDigitsAdjusted = (parseInt(dowDigits) + 1).toString();\n            }\n            return t.replace(dowDigits, dowDigitsAdjusted);\n        });\n        var months = {\n            JAN: 1,\n            FEB: 2,\n            MAR: 3,\n            APR: 4,\n            MAY: 5,\n            JUN: 6,\n            JUL: 7,\n            AUG: 8,\n            SEP: 9,\n            OCT: 10,\n            NOV: 11,\n            DEC: 12,\n        };\n        for (var month in months) {\n            expressionParts[4] = expressionParts[4].replace(new RegExp(month, \"gi\"), months[month].toString());\n        }\n        if (expressionParts[0] == \"0\") {\n            expressionParts[0] = \"\";\n        }\n        if (!/\\*|\\-|\\,|\\//.test(expressionParts[2]) &&\n            (/\\*|\\//.test(expressionParts[1]) || /\\*|\\//.test(expressionParts[0]))) {\n            expressionParts[2] += \"-\".concat(expressionParts[2]);\n        }\n        for (var i = 0; i < expressionParts.length; i++) {\n            if (expressionParts[i].indexOf(\",\") != -1) {\n                expressionParts[i] =\n                    expressionParts[i]\n                        .split(\",\")\n                        .filter(function (str) { return str !== \"\"; })\n                        .join(\",\") || \"*\";\n            }\n            if (expressionParts[i] == \"*/1\") {\n                expressionParts[i] = \"*\";\n            }\n            if (expressionParts[i].indexOf(\"/\") > -1 && !/^\\*|\\-|\\,/.test(expressionParts[i])) {\n                var stepRangeThrough = null;\n                switch (i) {\n                    case 4:\n                        stepRangeThrough = \"12\";\n                        break;\n                    case 5:\n                        stepRangeThrough = \"6\";\n                        break;\n                    case 6:\n                        stepRangeThrough = \"9999\";\n                        break;\n                    default:\n                        stepRangeThrough = null;\n                        break;\n                }\n                if (stepRangeThrough !== null) {\n                    var parts = expressionParts[i].split(\"/\");\n                    expressionParts[i] = \"\".concat(parts[0], \"-\").concat(stepRangeThrough, \"/\").concat(parts[1]);\n                }\n            }\n        }\n    };\n    CronParser.prototype.validate = function (parsed) {\n        this.assertNoInvalidCharacters(\"DOW\", parsed[5]);\n        this.assertNoInvalidCharacters(\"DOM\", parsed[3]);\n        this.validateRange(parsed);\n    };\n    CronParser.prototype.validateRange = function (parsed) {\n        rangeValidator_1.default.secondRange(parsed[0]);\n        rangeValidator_1.default.minuteRange(parsed[1]);\n        rangeValidator_1.default.hourRange(parsed[2]);\n        rangeValidator_1.default.dayOfMonthRange(parsed[3]);\n        rangeValidator_1.default.monthRange(parsed[4], this.monthStartIndexZero);\n        rangeValidator_1.default.dayOfWeekRange(parsed[5], this.dayOfWeekStartIndexZero);\n    };\n    CronParser.prototype.assertNoInvalidCharacters = function (partDescription, expression) {\n        var invalidChars = expression.match(/[A-KM-VX-Z]+/gi);\n        if (invalidChars && invalidChars.length) {\n            throw new Error(\"\".concat(partDescription, \" part contains invalid values: '\").concat(invalidChars.toString(), \"'\"));\n        }\n    };\n    return CronParser;\n}());\nexports.CronParser = CronParser;\n\n\n/***/ }),\n\n/***/ 728:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.ExpressionDescriptor = void 0;\nvar stringUtilities_1 = __webpack_require__(910);\nvar cronParser_1 = __webpack_require__(794);\nvar ExpressionDescriptor = (function () {\n    function ExpressionDescriptor(expression, options) {\n        this.expression = expression;\n        this.options = options;\n        this.expressionParts = new Array(5);\n        if (!this.options.locale && ExpressionDescriptor.defaultLocale) {\n            this.options.locale = ExpressionDescriptor.defaultLocale;\n        }\n        if (!ExpressionDescriptor.locales[this.options.locale]) {\n            var fallBackLocale = Object.keys(ExpressionDescriptor.locales)[0];\n            console.warn(\"Locale '\".concat(this.options.locale, \"' could not be found; falling back to '\").concat(fallBackLocale, \"'.\"));\n            this.options.locale = fallBackLocale;\n        }\n        this.i18n = ExpressionDescriptor.locales[this.options.locale];\n        if (options.use24HourTimeFormat === undefined) {\n            options.use24HourTimeFormat = this.i18n.use24HourTimeFormatByDefault();\n        }\n    }\n    ExpressionDescriptor.toString = function (expression, _a) {\n        var _b = _a === void 0 ? {} : _a, _c = _b.throwExceptionOnParseError, throwExceptionOnParseError = _c === void 0 ? true : _c, _d = _b.verbose, verbose = _d === void 0 ? false : _d, _e = _b.dayOfWeekStartIndexZero, dayOfWeekStartIndexZero = _e === void 0 ? true : _e, _f = _b.monthStartIndexZero, monthStartIndexZero = _f === void 0 ? false : _f, use24HourTimeFormat = _b.use24HourTimeFormat, _g = _b.locale, locale = _g === void 0 ? null : _g;\n        var options = {\n            throwExceptionOnParseError: throwExceptionOnParseError,\n            verbose: verbose,\n            dayOfWeekStartIndexZero: dayOfWeekStartIndexZero,\n            monthStartIndexZero: monthStartIndexZero,\n            use24HourTimeFormat: use24HourTimeFormat,\n            locale: locale,\n        };\n        var descripter = new ExpressionDescriptor(expression, options);\n        return descripter.getFullDescription();\n    };\n    ExpressionDescriptor.initialize = function (localesLoader, defaultLocale) {\n        if (defaultLocale === void 0) { defaultLocale = \"en\"; }\n        ExpressionDescriptor.specialCharacters = [\"/\", \"-\", \",\", \"*\"];\n        ExpressionDescriptor.defaultLocale = defaultLocale;\n        localesLoader.load(ExpressionDescriptor.locales);\n    };\n    ExpressionDescriptor.prototype.getFullDescription = function () {\n        var description = \"\";\n        try {\n            var parser = new cronParser_1.CronParser(this.expression, this.options.dayOfWeekStartIndexZero, this.options.monthStartIndexZero);\n            this.expressionParts = parser.parse();\n            var timeSegment = this.getTimeOfDayDescription();\n            var dayOfMonthDesc = this.getDayOfMonthDescription();\n            var monthDesc = this.getMonthDescription();\n            var dayOfWeekDesc = this.getDayOfWeekDescription();\n            var yearDesc = this.getYearDescription();\n            description += timeSegment + dayOfMonthDesc + dayOfWeekDesc + monthDesc + yearDesc;\n            description = this.transformVerbosity(description, !!this.options.verbose);\n            description = description.charAt(0).toLocaleUpperCase() + description.substr(1);\n        }\n        catch (ex) {\n            if (!this.options.throwExceptionOnParseError) {\n                description = this.i18n.anErrorOccuredWhenGeneratingTheExpressionD();\n            }\n            else {\n                throw \"\".concat(ex);\n            }\n        }\n        return description;\n    };\n    ExpressionDescriptor.prototype.getTimeOfDayDescription = function () {\n        var secondsExpression = this.expressionParts[0];\n        var minuteExpression = this.expressionParts[1];\n        var hourExpression = this.expressionParts[2];\n        var description = \"\";\n        if (!stringUtilities_1.StringUtilities.containsAny(minuteExpression, ExpressionDescriptor.specialCharacters) &&\n            !stringUtilities_1.StringUtilities.containsAny(hourExpression, ExpressionDescriptor.specialCharacters) &&\n            !stringUtilities_1.StringUtilities.containsAny(secondsExpression, ExpressionDescriptor.specialCharacters)) {\n            description += this.i18n.atSpace() + this.formatTime(hourExpression, minuteExpression, secondsExpression);\n        }\n        else if (!secondsExpression &&\n            minuteExpression.indexOf(\"-\") > -1 &&\n            !(minuteExpression.indexOf(\",\") > -1) &&\n            !(minuteExpression.indexOf(\"/\") > -1) &&\n            !stringUtilities_1.StringUtilities.containsAny(hourExpression, ExpressionDescriptor.specialCharacters)) {\n            var minuteParts = minuteExpression.split(\"-\");\n            description += stringUtilities_1.StringUtilities.format(this.i18n.everyMinuteBetweenX0AndX1(), this.formatTime(hourExpression, minuteParts[0], \"\"), this.formatTime(hourExpression, minuteParts[1], \"\"));\n        }\n        else if (!secondsExpression &&\n            hourExpression.indexOf(\",\") > -1 &&\n            hourExpression.indexOf(\"-\") == -1 &&\n            hourExpression.indexOf(\"/\") == -1 &&\n            !stringUtilities_1.StringUtilities.containsAny(minuteExpression, ExpressionDescriptor.specialCharacters)) {\n            var hourParts = hourExpression.split(\",\");\n            description += this.i18n.at();\n            for (var i = 0; i < hourParts.length; i++) {\n                description += \" \";\n                description += this.formatTime(hourParts[i], minuteExpression, \"\");\n                if (i < hourParts.length - 2) {\n                    description += \",\";\n                }\n                if (i == hourParts.length - 2) {\n                    description += this.i18n.spaceAnd();\n                }\n            }\n        }\n        else {\n            var secondsDescription = this.getSecondsDescription();\n            var minutesDescription = this.getMinutesDescription();\n            var hoursDescription = this.getHoursDescription();\n            description += secondsDescription;\n            if (description && minutesDescription) {\n                description += \", \";\n            }\n            description += minutesDescription;\n            if (minutesDescription === hoursDescription) {\n                return description;\n            }\n            if (description && hoursDescription) {\n                description += \", \";\n            }\n            description += hoursDescription;\n        }\n        return description;\n    };\n    ExpressionDescriptor.prototype.getSecondsDescription = function () {\n        var _this = this;\n        var description = this.getSegmentDescription(this.expressionParts[0], this.i18n.everySecond(), function (s) {\n            return s;\n        }, function (s) {\n            return stringUtilities_1.StringUtilities.format(_this.i18n.everyX0Seconds(s), s);\n        }, function (s) {\n            return _this.i18n.secondsX0ThroughX1PastTheMinute();\n        }, function (s) {\n            return s == \"0\"\n                ? \"\"\n                : parseInt(s) < 20\n                    ? _this.i18n.atX0SecondsPastTheMinute(s)\n                    : _this.i18n.atX0SecondsPastTheMinuteGt20() || _this.i18n.atX0SecondsPastTheMinute(s);\n        });\n        return description;\n    };\n    ExpressionDescriptor.prototype.getMinutesDescription = function () {\n        var _this = this;\n        var secondsExpression = this.expressionParts[0];\n        var hourExpression = this.expressionParts[2];\n        var description = this.getSegmentDescription(this.expressionParts[1], this.i18n.everyMinute(), function (s) {\n            return s;\n        }, function (s) {\n            return stringUtilities_1.StringUtilities.format(_this.i18n.everyX0Minutes(s), s);\n        }, function (s) {\n            return _this.i18n.minutesX0ThroughX1PastTheHour();\n        }, function (s) {\n            try {\n                return s == \"0\" && hourExpression.indexOf(\"/\") == -1 && secondsExpression == \"\"\n                    ? _this.i18n.everyHour()\n                    : parseInt(s) < 20\n                        ? _this.i18n.atX0MinutesPastTheHour(s)\n                        : _this.i18n.atX0MinutesPastTheHourGt20() || _this.i18n.atX0MinutesPastTheHour(s);\n            }\n            catch (e) {\n                return _this.i18n.atX0MinutesPastTheHour(s);\n            }\n        });\n        return description;\n    };\n    ExpressionDescriptor.prototype.getHoursDescription = function () {\n        var _this = this;\n        var expression = this.expressionParts[2];\n        var description = this.getSegmentDescription(expression, this.i18n.everyHour(), function (s) {\n            return _this.formatTime(s, \"0\", \"\");\n        }, function (s) {\n            return stringUtilities_1.StringUtilities.format(_this.i18n.everyX0Hours(s), s);\n        }, function (s) {\n            return _this.i18n.betweenX0AndX1();\n        }, function (s) {\n            return _this.i18n.atX0();\n        });\n        if (description && expression.includes(\"-\") && this.expressionParts[1] != \"0\") {\n            var atTheHourMatches = Array.from(description.matchAll(/:00/g));\n            if (atTheHourMatches.length > 1) {\n                var lastAtTheHourMatchIndex = atTheHourMatches[atTheHourMatches.length - 1].index;\n                description =\n                    description.substring(0, lastAtTheHourMatchIndex) +\n                        \":59\" +\n                        description.substring(lastAtTheHourMatchIndex + 3);\n            }\n        }\n        return description;\n    };\n    ExpressionDescriptor.prototype.getDayOfWeekDescription = function () {\n        var _this = this;\n        var daysOfWeekNames = this.i18n.daysOfTheWeek();\n        var description = null;\n        if (this.expressionParts[5] == \"*\") {\n            description = \"\";\n        }\n        else {\n            description = this.getSegmentDescription(this.expressionParts[5], this.i18n.commaEveryDay(), function (s, form) {\n                var exp = s;\n                if (s.indexOf(\"#\") > -1) {\n                    exp = s.substring(0, s.indexOf(\"#\"));\n                }\n                else if (s.indexOf(\"L\") > -1) {\n                    exp = exp.replace(\"L\", \"\");\n                }\n                var description = _this.i18n.daysOfTheWeekInCase\n                    ? _this.i18n.daysOfTheWeekInCase(form)[parseInt(exp)]\n                    : daysOfWeekNames[parseInt(exp)];\n                if (s.indexOf(\"#\") > -1) {\n                    var dayOfWeekOfMonthDescription = null;\n                    var dayOfWeekOfMonthNumber = s.substring(s.indexOf(\"#\") + 1);\n                    var dayOfWeekNumber = s.substring(0, s.indexOf(\"#\"));\n                    switch (dayOfWeekOfMonthNumber) {\n                        case \"1\":\n                            dayOfWeekOfMonthDescription = _this.i18n.first(dayOfWeekNumber);\n                            break;\n                        case \"2\":\n                            dayOfWeekOfMonthDescription = _this.i18n.second(dayOfWeekNumber);\n                            break;\n                        case \"3\":\n                            dayOfWeekOfMonthDescription = _this.i18n.third(dayOfWeekNumber);\n                            break;\n                        case \"4\":\n                            dayOfWeekOfMonthDescription = _this.i18n.fourth(dayOfWeekNumber);\n                            break;\n                        case \"5\":\n                            dayOfWeekOfMonthDescription = _this.i18n.fifth(dayOfWeekNumber);\n                            break;\n                    }\n                    description = dayOfWeekOfMonthDescription + \" \" + description;\n                }\n                return description;\n            }, function (s) {\n                if (parseInt(s) == 1) {\n                    return \"\";\n                }\n                else {\n                    return stringUtilities_1.StringUtilities.format(_this.i18n.commaEveryX0DaysOfTheWeek(s), s);\n                }\n            }, function (s) {\n                var beginFrom = s.substring(0, s.indexOf(\"-\"));\n                var domSpecified = _this.expressionParts[3] != \"*\";\n                return domSpecified ? _this.i18n.commaAndX0ThroughX1(beginFrom) : _this.i18n.commaX0ThroughX1(beginFrom);\n            }, function (s) {\n                var format = null;\n                if (s.indexOf(\"#\") > -1) {\n                    var dayOfWeekOfMonthNumber = s.substring(s.indexOf(\"#\") + 1);\n                    format = _this.i18n.commaOnThe(dayOfWeekOfMonthNumber).trim() + _this.i18n.spaceX0OfTheMonth();\n                }\n                else if (s.indexOf(\"L\") > -1) {\n                    format = _this.i18n.commaOnTheLastX0OfTheMonth(s.replace(\"L\", \"\"));\n                }\n                else {\n                    var domSpecified = _this.expressionParts[3] != \"*\";\n                    format = domSpecified ? _this.i18n.commaAndOnX0() : _this.i18n.commaOnlyOnX0(s);\n                }\n                return format;\n            });\n        }\n        return description;\n    };\n    ExpressionDescriptor.prototype.getMonthDescription = function () {\n        var _this = this;\n        var monthNames = this.i18n.monthsOfTheYear();\n        var description = this.getSegmentDescription(this.expressionParts[4], \"\", function (s, form) {\n            return form && _this.i18n.monthsOfTheYearInCase\n                ? _this.i18n.monthsOfTheYearInCase(form)[parseInt(s) - 1]\n                : monthNames[parseInt(s) - 1];\n        }, function (s) {\n            if (parseInt(s) == 1) {\n                return \"\";\n            }\n            else {\n                return stringUtilities_1.StringUtilities.format(_this.i18n.commaEveryX0Months(s), s);\n            }\n        }, function (s) {\n            return _this.i18n.commaMonthX0ThroughMonthX1() || _this.i18n.commaX0ThroughX1();\n        }, function (s) {\n            return _this.i18n.commaOnlyInMonthX0 ? _this.i18n.commaOnlyInMonthX0() : _this.i18n.commaOnlyInX0();\n        });\n        return description;\n    };\n    ExpressionDescriptor.prototype.getDayOfMonthDescription = function () {\n        var _this = this;\n        var description = null;\n        var expression = this.expressionParts[3];\n        switch (expression) {\n            case \"L\":\n                description = this.i18n.commaOnTheLastDayOfTheMonth();\n                break;\n            case \"WL\":\n            case \"LW\":\n                description = this.i18n.commaOnTheLastWeekdayOfTheMonth();\n                break;\n            default:\n                var weekDayNumberMatches = expression.match(/(\\d{1,2}W)|(W\\d{1,2})/);\n                if (weekDayNumberMatches) {\n                    var dayNumber = parseInt(weekDayNumberMatches[0].replace(\"W\", \"\"));\n                    var dayString = dayNumber == 1\n                        ? this.i18n.firstWeekday()\n                        : stringUtilities_1.StringUtilities.format(this.i18n.weekdayNearestDayX0(), dayNumber.toString());\n                    description = stringUtilities_1.StringUtilities.format(this.i18n.commaOnTheX0OfTheMonth(), dayString);\n                    break;\n                }\n                else {\n                    var lastDayOffSetMatches = expression.match(/L-(\\d{1,2})/);\n                    if (lastDayOffSetMatches) {\n                        var offSetDays = lastDayOffSetMatches[1];\n                        description = stringUtilities_1.StringUtilities.format(this.i18n.commaDaysBeforeTheLastDayOfTheMonth(offSetDays), offSetDays);\n                        break;\n                    }\n                    else if (expression == \"*\" && this.expressionParts[5] != \"*\") {\n                        return \"\";\n                    }\n                    else {\n                        description = this.getSegmentDescription(expression, this.i18n.commaEveryDay(), function (s) {\n                            return s == \"L\"\n                                ? _this.i18n.lastDay()\n                                : _this.i18n.dayX0\n                                    ? stringUtilities_1.StringUtilities.format(_this.i18n.dayX0(), s)\n                                    : s;\n                        }, function (s) {\n                            return s == \"1\" ? _this.i18n.commaEveryDay() : _this.i18n.commaEveryX0Days(s);\n                        }, function (s) {\n                            return _this.i18n.commaBetweenDayX0AndX1OfTheMonth(s);\n                        }, function (s) {\n                            return _this.i18n.commaOnDayX0OfTheMonth(s);\n                        });\n                    }\n                    break;\n                }\n        }\n        return description;\n    };\n    ExpressionDescriptor.prototype.getYearDescription = function () {\n        var _this = this;\n        var description = this.getSegmentDescription(this.expressionParts[6], \"\", function (s) {\n            return /^\\d+$/.test(s) ? new Date(parseInt(s), 1).getFullYear().toString() : s;\n        }, function (s) {\n            return stringUtilities_1.StringUtilities.format(_this.i18n.commaEveryX0Years(s), s);\n        }, function (s) {\n            return _this.i18n.commaYearX0ThroughYearX1() || _this.i18n.commaX0ThroughX1();\n        }, function (s) {\n            return _this.i18n.commaOnlyInYearX0 ? _this.i18n.commaOnlyInYearX0() : _this.i18n.commaOnlyInX0();\n        });\n        return description;\n    };\n    ExpressionDescriptor.prototype.getSegmentDescription = function (expression, allDescription, getSingleItemDescription, getIncrementDescriptionFormat, getRangeDescriptionFormat, getDescriptionFormat) {\n        var description = null;\n        var doesExpressionContainIncrement = expression.indexOf(\"/\") > -1;\n        var doesExpressionContainRange = expression.indexOf(\"-\") > -1;\n        var doesExpressionContainMultipleValues = expression.indexOf(\",\") > -1;\n        if (!expression) {\n            description = \"\";\n        }\n        else if (expression === \"*\") {\n            description = allDescription;\n        }\n        else if (!doesExpressionContainIncrement && !doesExpressionContainRange && !doesExpressionContainMultipleValues) {\n            description = stringUtilities_1.StringUtilities.format(getDescriptionFormat(expression), getSingleItemDescription(expression));\n        }\n        else if (doesExpressionContainMultipleValues) {\n            var segments = expression.split(\",\");\n            var descriptionContent = \"\";\n            for (var i = 0; i < segments.length; i++) {\n                if (i > 0 && segments.length > 2) {\n                    descriptionContent += \",\";\n                    if (i < segments.length - 1) {\n                        descriptionContent += \" \";\n                    }\n                }\n                if (i > 0 && segments.length > 1 && (i == segments.length - 1 || segments.length == 2)) {\n                    descriptionContent += \"\".concat(this.i18n.spaceAnd(), \" \");\n                }\n                if (segments[i].indexOf(\"/\") > -1 || segments[i].indexOf(\"-\") > -1) {\n                    var isSegmentRangeWithoutIncrement = segments[i].indexOf(\"-\") > -1 && segments[i].indexOf(\"/\") == -1;\n                    var currentDescriptionContent = this.getSegmentDescription(segments[i], allDescription, getSingleItemDescription, getIncrementDescriptionFormat, isSegmentRangeWithoutIncrement ? this.i18n.commaX0ThroughX1 : getRangeDescriptionFormat, getDescriptionFormat);\n                    if (isSegmentRangeWithoutIncrement) {\n                        currentDescriptionContent = currentDescriptionContent.replace(\", \", \"\");\n                    }\n                    descriptionContent += currentDescriptionContent;\n                }\n                else if (!doesExpressionContainIncrement) {\n                    descriptionContent += getSingleItemDescription(segments[i]);\n                }\n                else {\n                    descriptionContent += this.getSegmentDescription(segments[i], allDescription, getSingleItemDescription, getIncrementDescriptionFormat, getRangeDescriptionFormat, getDescriptionFormat);\n                }\n            }\n            if (!doesExpressionContainIncrement) {\n                description = stringUtilities_1.StringUtilities.format(getDescriptionFormat(expression), descriptionContent);\n            }\n            else {\n                description = descriptionContent;\n            }\n        }\n        else if (doesExpressionContainIncrement) {\n            var segments = expression.split(\"/\");\n            description = stringUtilities_1.StringUtilities.format(getIncrementDescriptionFormat(segments[1]), segments[1]);\n            if (segments[0].indexOf(\"-\") > -1) {\n                var rangeSegmentDescription = this.generateRangeSegmentDescription(segments[0], getRangeDescriptionFormat, getSingleItemDescription);\n                if (rangeSegmentDescription.indexOf(\", \") != 0) {\n                    description += \", \";\n                }\n                description += rangeSegmentDescription;\n            }\n            else if (segments[0].indexOf(\"*\") == -1) {\n                var rangeItemDescription = stringUtilities_1.StringUtilities.format(getDescriptionFormat(segments[0]), getSingleItemDescription(segments[0]));\n                rangeItemDescription = rangeItemDescription.replace(\", \", \"\");\n                description += stringUtilities_1.StringUtilities.format(this.i18n.commaStartingX0(), rangeItemDescription);\n            }\n        }\n        else if (doesExpressionContainRange) {\n            description = this.generateRangeSegmentDescription(expression, getRangeDescriptionFormat, getSingleItemDescription);\n        }\n        return description;\n    };\n    ExpressionDescriptor.prototype.generateRangeSegmentDescription = function (rangeExpression, getRangeDescriptionFormat, getSingleItemDescription) {\n        var description = \"\";\n        var rangeSegments = rangeExpression.split(\"-\");\n        var rangeSegment1Description = getSingleItemDescription(rangeSegments[0], 1);\n        var rangeSegment2Description = getSingleItemDescription(rangeSegments[1], 2);\n        var rangeDescriptionFormat = getRangeDescriptionFormat(rangeExpression);\n        description += stringUtilities_1.StringUtilities.format(rangeDescriptionFormat, rangeSegment1Description, rangeSegment2Description);\n        return description;\n    };\n    ExpressionDescriptor.prototype.formatTime = function (hourExpression, minuteExpression, secondExpression) {\n        var hour = parseInt(hourExpression);\n        var period = \"\";\n        var setPeriodBeforeTime = false;\n        if (!this.options.use24HourTimeFormat) {\n            setPeriodBeforeTime = !!(this.i18n.setPeriodBeforeTime && this.i18n.setPeriodBeforeTime());\n            period = setPeriodBeforeTime ? \"\".concat(this.getPeriod(hour), \" \") : \" \".concat(this.getPeriod(hour));\n            if (hour > 12) {\n                hour -= 12;\n            }\n            if (hour === 0) {\n                hour = 12;\n            }\n        }\n        var minute = minuteExpression;\n        var second = \"\";\n        if (secondExpression) {\n            second = \":\".concat((\"00\" + secondExpression).substring(secondExpression.length));\n        }\n        return \"\".concat(setPeriodBeforeTime ? period : \"\").concat((\"00\" + hour.toString()).substring(hour.toString().length), \":\").concat((\"00\" + minute.toString()).substring(minute.toString().length)).concat(second).concat(!setPeriodBeforeTime ? period : \"\");\n    };\n    ExpressionDescriptor.prototype.transformVerbosity = function (description, useVerboseFormat) {\n        if (!useVerboseFormat) {\n            description = description.replace(new RegExp(\", \".concat(this.i18n.everyMinute()), \"g\"), \"\");\n            description = description.replace(new RegExp(\", \".concat(this.i18n.everyHour()), \"g\"), \"\");\n            description = description.replace(new RegExp(this.i18n.commaEveryDay(), \"g\"), \"\");\n            description = description.replace(/\\, ?$/, \"\");\n        }\n        return description;\n    };\n    ExpressionDescriptor.prototype.getPeriod = function (hour) {\n        return hour >= 12 ? (this.i18n.pm && this.i18n.pm()) || \"PM\" : (this.i18n.am && this.i18n.am()) || \"AM\";\n    };\n    ExpressionDescriptor.locales = {};\n    return ExpressionDescriptor;\n}());\nexports.ExpressionDescriptor = ExpressionDescriptor;\n\n\n/***/ }),\n\n/***/ 336:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.enLocaleLoader = void 0;\nvar en_1 = __webpack_require__(751);\nvar enLocaleLoader = (function () {\n    function enLocaleLoader() {\n    }\n    enLocaleLoader.prototype.load = function (availableLocales) {\n        availableLocales[\"en\"] = new en_1.en();\n    };\n    return enLocaleLoader;\n}());\nexports.enLocaleLoader = enLocaleLoader;\n\n\n/***/ }),\n\n/***/ 751:\n/***/ ((__unused_webpack_module, exports) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.en = void 0;\nvar en = (function () {\n    function en() {\n    }\n    en.prototype.atX0SecondsPastTheMinuteGt20 = function () {\n        return null;\n    };\n    en.prototype.atX0MinutesPastTheHourGt20 = function () {\n        return null;\n    };\n    en.prototype.commaMonthX0ThroughMonthX1 = function () {\n        return null;\n    };\n    en.prototype.commaYearX0ThroughYearX1 = function () {\n        return null;\n    };\n    en.prototype.use24HourTimeFormatByDefault = function () {\n        return false;\n    };\n    en.prototype.anErrorOccuredWhenGeneratingTheExpressionD = function () {\n        return \"An error occured when generating the expression description.  Check the cron expression syntax.\";\n    };\n    en.prototype.everyMinute = function () {\n        return \"every minute\";\n    };\n    en.prototype.everyHour = function () {\n        return \"every hour\";\n    };\n    en.prototype.atSpace = function () {\n        return \"At \";\n    };\n    en.prototype.everyMinuteBetweenX0AndX1 = function () {\n        return \"Every minute between %s and %s\";\n    };\n    en.prototype.at = function () {\n        return \"At\";\n    };\n    en.prototype.spaceAnd = function () {\n        return \" and\";\n    };\n    en.prototype.everySecond = function () {\n        return \"every second\";\n    };\n    en.prototype.everyX0Seconds = function () {\n        return \"every %s seconds\";\n    };\n    en.prototype.secondsX0ThroughX1PastTheMinute = function () {\n        return \"seconds %s through %s past the minute\";\n    };\n    en.prototype.atX0SecondsPastTheMinute = function () {\n        return \"at %s seconds past the minute\";\n    };\n    en.prototype.everyX0Minutes = function () {\n        return \"every %s minutes\";\n    };\n    en.prototype.minutesX0ThroughX1PastTheHour = function () {\n        return \"minutes %s through %s past the hour\";\n    };\n    en.prototype.atX0MinutesPastTheHour = function () {\n        return \"at %s minutes past the hour\";\n    };\n    en.prototype.everyX0Hours = function () {\n        return \"every %s hours\";\n    };\n    en.prototype.betweenX0AndX1 = function () {\n        return \"between %s and %s\";\n    };\n    en.prototype.atX0 = function () {\n        return \"at %s\";\n    };\n    en.prototype.commaEveryDay = function () {\n        return \", every day\";\n    };\n    en.prototype.commaEveryX0DaysOfTheWeek = function () {\n        return \", every %s days of the week\";\n    };\n    en.prototype.commaX0ThroughX1 = function () {\n        return \", %s through %s\";\n    };\n    en.prototype.commaAndX0ThroughX1 = function () {\n        return \", %s through %s\";\n    };\n    en.prototype.first = function () {\n        return \"first\";\n    };\n    en.prototype.second = function () {\n        return \"second\";\n    };\n    en.prototype.third = function () {\n        return \"third\";\n    };\n    en.prototype.fourth = function () {\n        return \"fourth\";\n    };\n    en.prototype.fifth = function () {\n        return \"fifth\";\n    };\n    en.prototype.commaOnThe = function () {\n        return \", on the \";\n    };\n    en.prototype.spaceX0OfTheMonth = function () {\n        return \" %s of the month\";\n    };\n    en.prototype.lastDay = function () {\n        return \"the last day\";\n    };\n    en.prototype.commaOnTheLastX0OfTheMonth = function () {\n        return \", on the last %s of the month\";\n    };\n    en.prototype.commaOnlyOnX0 = function () {\n        return \", only on %s\";\n    };\n    en.prototype.commaAndOnX0 = function () {\n        return \", and on %s\";\n    };\n    en.prototype.commaEveryX0Months = function () {\n        return \", every %s months\";\n    };\n    en.prototype.commaOnlyInX0 = function () {\n        return \", only in %s\";\n    };\n    en.prototype.commaOnTheLastDayOfTheMonth = function () {\n        return \", on the last day of the month\";\n    };\n    en.prototype.commaOnTheLastWeekdayOfTheMonth = function () {\n        return \", on the last weekday of the month\";\n    };\n    en.prototype.commaDaysBeforeTheLastDayOfTheMonth = function () {\n        return \", %s days before the last day of the month\";\n    };\n    en.prototype.firstWeekday = function () {\n        return \"first weekday\";\n    };\n    en.prototype.weekdayNearestDayX0 = function () {\n        return \"weekday nearest day %s\";\n    };\n    en.prototype.commaOnTheX0OfTheMonth = function () {\n        return \", on the %s of the month\";\n    };\n    en.prototype.commaEveryX0Days = function () {\n        return \", every %s days\";\n    };\n    en.prototype.commaBetweenDayX0AndX1OfTheMonth = function () {\n        return \", between day %s and %s of the month\";\n    };\n    en.prototype.commaOnDayX0OfTheMonth = function () {\n        return \", on day %s of the month\";\n    };\n    en.prototype.commaEveryHour = function () {\n        return \", every hour\";\n    };\n    en.prototype.commaEveryX0Years = function () {\n        return \", every %s years\";\n    };\n    en.prototype.commaStartingX0 = function () {\n        return \", starting %s\";\n    };\n    en.prototype.daysOfTheWeek = function () {\n        return [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\n    };\n    en.prototype.monthsOfTheYear = function () {\n        return [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\",\n        ];\n    };\n    return en;\n}());\nexports.en = en;\n\n\n/***/ }),\n\n/***/ 586:\n/***/ ((__unused_webpack_module, exports) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nfunction assert(value, message) {\n    if (!value) {\n        throw new Error(message);\n    }\n}\nvar RangeValidator = (function () {\n    function RangeValidator() {\n    }\n    RangeValidator.secondRange = function (parse) {\n        var parsed = parse.split(',');\n        for (var i = 0; i < parsed.length; i++) {\n            if (!isNaN(parseInt(parsed[i], 10))) {\n                var second = parseInt(parsed[i], 10);\n                assert(second >= 0 && second <= 59, 'seconds part must be >= 0 and <= 59');\n            }\n        }\n    };\n    RangeValidator.minuteRange = function (parse) {\n        var parsed = parse.split(',');\n        for (var i = 0; i < parsed.length; i++) {\n            if (!isNaN(parseInt(parsed[i], 10))) {\n                var minute = parseInt(parsed[i], 10);\n                assert(minute >= 0 && minute <= 59, 'minutes part must be >= 0 and <= 59');\n            }\n        }\n    };\n    RangeValidator.hourRange = function (parse) {\n        var parsed = parse.split(',');\n        for (var i = 0; i < parsed.length; i++) {\n            if (!isNaN(parseInt(parsed[i], 10))) {\n                var hour = parseInt(parsed[i], 10);\n                assert(hour >= 0 && hour <= 23, 'hours part must be >= 0 and <= 23');\n            }\n        }\n    };\n    RangeValidator.dayOfMonthRange = function (parse) {\n        var parsed = parse.split(',');\n        for (var i = 0; i < parsed.length; i++) {\n            if (!isNaN(parseInt(parsed[i], 10))) {\n                var dayOfMonth = parseInt(parsed[i], 10);\n                assert(dayOfMonth >= 1 && dayOfMonth <= 31, 'DOM part must be >= 1 and <= 31');\n            }\n        }\n    };\n    RangeValidator.monthRange = function (parse, monthStartIndexZero) {\n        var parsed = parse.split(',');\n        for (var i = 0; i < parsed.length; i++) {\n            if (!isNaN(parseInt(parsed[i], 10))) {\n                var month = parseInt(parsed[i], 10);\n                assert(month >= 1 && month <= 12, monthStartIndexZero ? 'month part must be >= 0 and <= 11' : 'month part must be >= 1 and <= 12');\n            }\n        }\n    };\n    RangeValidator.dayOfWeekRange = function (parse, dayOfWeekStartIndexZero) {\n        var parsed = parse.split(',');\n        for (var i = 0; i < parsed.length; i++) {\n            if (!isNaN(parseInt(parsed[i], 10))) {\n                var dayOfWeek = parseInt(parsed[i], 10);\n                assert(dayOfWeek >= 0 && dayOfWeek <= 6, dayOfWeekStartIndexZero ? 'DOW part must be >= 0 and <= 6' : 'DOW part must be >= 1 and <= 7');\n            }\n        }\n    };\n    return RangeValidator;\n}());\nexports[\"default\"] = RangeValidator;\n\n\n/***/ }),\n\n/***/ 910:\n/***/ ((__unused_webpack_module, exports) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.StringUtilities = void 0;\nvar StringUtilities = (function () {\n    function StringUtilities() {\n    }\n    StringUtilities.format = function (template) {\n        var values = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            values[_i - 1] = arguments[_i];\n        }\n        return template.replace(/%s/g, function (substring) {\n            var args = [];\n            for (var _i = 1; _i < arguments.length; _i++) {\n                args[_i - 1] = arguments[_i];\n            }\n            return values.shift();\n        });\n    };\n    StringUtilities.containsAny = function (text, searchStrings) {\n        return searchStrings.some(function (c) {\n            return text.indexOf(c) > -1;\n        });\n    };\n    return StringUtilities;\n}());\nexports.StringUtilities = StringUtilities;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n(() => {\nvar exports = __webpack_exports__;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.toString = void 0;\nvar expressionDescriptor_1 = __webpack_require__(728);\nvar enLocaleLoader_1 = __webpack_require__(336);\nexpressionDescriptor_1.ExpressionDescriptor.initialize(new enLocaleLoader_1.enLocaleLoader());\nexports[\"default\"] = expressionDescriptor_1.ExpressionDescriptor;\nvar toString = expressionDescriptor_1.ExpressionDescriptor.toString;\nexports.toString = toString;\n\n})();\n\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});","import { useCallback, useEffect, useState, useMemo } from 'react';\nimport TableIcon from '../../icons/TableIcon';\nimport AddMaterializationPopover from './AddMaterializationPopover';\nimport * as React from 'react';\nimport AddBackfillPopover from './AddBackfillPopover';\nimport { labelize } from '../../../utils/form';\nimport NodeMaterializationDelete from '../../components/NodeMaterializationDelete';\nimport Tab from '../../components/Tab';\nimport NodeRevisionMaterializationTab from './NodeRevisionMaterializationTab';\nimport AvailabilityStateBlock from './AvailabilityStateBlock';\nimport cronstrue from 'cronstrue';\n\n/**\n * Cube materialization tab - shows cube-specific materializations.\n * For non-cube nodes, the parent component (index.jsx) renders\n * NodePreAggregationsTab instead.\n */\nexport default function NodeMaterializationTab({\n  node,\n  djClient,\n  readOnly = false,\n}) {\n  const [rawMaterializations, setRawMaterializations] = useState([]);\n  const [selectedRevisionTab, setSelectedRevisionTab] = useState(null);\n  const [showInactive, setShowInactive] = useState(false);\n  const [availabilityStates, setAvailabilityStates] = useState([]);\n  const [availabilityStatesByRevision, setAvailabilityStatesByRevision] =\n    useState({});\n  const [isRebuilding, setIsRebuilding] = useState(() => {\n    // Check if we're in the middle of a rebuild operation\n    return localStorage.getItem(`rebuilding-${node?.name}`) === 'true';\n  });\n\n  const filteredMaterializations = useMemo(() => {\n    return showInactive\n      ? rawMaterializations\n      : rawMaterializations.filter(mat => !mat.deactivated_at);\n  }, [rawMaterializations, showInactive]);\n\n  const materializationsByRevision = useMemo(() => {\n    return filteredMaterializations.reduce((acc, mat) => {\n      // Extract version from materialization config\n      const matVersion = mat.config?.cube?.version || node?.version;\n\n      if (!acc[matVersion]) {\n        acc[matVersion] = [];\n      }\n      acc[matVersion].push(mat);\n      return acc;\n    }, {});\n  }, [filteredMaterializations, node?.version]);\n\n  const fetchData = useCallback(async () => {\n    if (node) {\n      const data = await djClient.materializations(node.name);\n\n      // Store raw data\n      setRawMaterializations(data);\n\n      // Fetch availability states\n      const availabilityData = await djClient.availabilityStates(node.name);\n      setAvailabilityStates(availabilityData);\n\n      // Group availability states by version\n      const availabilityGrouped = availabilityData.reduce((acc, avail) => {\n        const version = avail.node_version || node.version;\n        if (!acc[version]) {\n          acc[version] = [];\n        }\n        acc[version].push(avail);\n        return acc;\n      }, {});\n\n      setAvailabilityStatesByRevision(availabilityGrouped);\n\n      // Clear rebuilding state once data is loaded after a page reload\n      if (localStorage.getItem(`rebuilding-${node.name}`) === 'true') {\n        localStorage.removeItem(`rebuilding-${node.name}`);\n        setIsRebuilding(false);\n      }\n    }\n  }, [djClient, node]);\n\n  useEffect(() => {\n    fetchData().catch(console.error);\n  }, [fetchData]);\n\n  // Set default selected tab, or reset if current tab is no longer visible\n  useEffect(() => {\n    const versions = Object.keys(materializationsByRevision);\n    if (versions.length === 0) return;\n\n    if (\n      !selectedRevisionTab ||\n      !materializationsByRevision[selectedRevisionTab]\n    ) {\n      // First try to find current node version\n      if (materializationsByRevision[node?.version]) {\n        setSelectedRevisionTab(node.version);\n      } else {\n        // Otherwise, select the most recent version (sort by version string)\n        const sortedVersions = versions.sort((a, b) => b.localeCompare(a));\n        setSelectedRevisionTab(sortedVersions[0]);\n      }\n    }\n  }, [materializationsByRevision, selectedRevisionTab, node?.version]);\n\n  const partitionColumnsMap = node\n    ? Object.fromEntries(\n        node?.columns\n          .filter(col => col.partition !== null)\n          .map(col => [col.name, col.display_name]),\n      )\n    : {};\n  const cron = materialization => {\n    var parsedCron = '';\n    try {\n      parsedCron = cronstrue.toString(materialization.schedule);\n    } catch (e) {}\n    return parsedCron;\n  };\n\n  const onClickRevisionTab = revisionId => () => {\n    setSelectedRevisionTab(revisionId);\n  };\n\n  const buildRevisionTabs = () => {\n    const versions = Object.keys(materializationsByRevision);\n\n    // Check if there are any materializations at all (including inactive ones)\n    const hasAnyMaterializations = rawMaterializations.length > 0;\n\n    // Determine which versions have only inactive materializations\n    const versionHasOnlyInactive = {};\n    rawMaterializations.forEach(mat => {\n      const matVersion = mat.config?.cube?.version || node.version;\n      if (!versionHasOnlyInactive[matVersion]) {\n        versionHasOnlyInactive[matVersion] = {\n          hasActive: false,\n          hasInactive: false,\n        };\n      }\n      if (mat.deactivated_at) {\n        versionHasOnlyInactive[matVersion].hasInactive = true;\n      } else {\n        versionHasOnlyInactive[matVersion].hasActive = true;\n      }\n    });\n\n    // If no active versions but there are inactive materializations, show checkbox and button\n    if (versions.length === 0) {\n      return (\n        <div\n          style={{\n            display: 'flex',\n            alignItems: 'center',\n            justifyContent: 'flex-end',\n            marginBottom: '20px',\n            paddingTop: '16px',\n          }}\n        >\n          <div style={{ display: 'flex', alignItems: 'center', gap: '15px' }}>\n            {hasAnyMaterializations && (\n              <label\n                style={{\n                  display: 'flex',\n                  alignItems: 'center',\n                  gap: '5px',\n                  fontSize: '14px',\n                  color: '#333',\n                  padding: '4px 8px',\n                  borderRadius: '12px',\n                  backgroundColor: '#f5f5f5',\n                  border: '1px solid #ddd',\n                }}\n                title=\"Shows inactive materializations for the latest cube.\"\n              >\n                <input\n                  type=\"checkbox\"\n                  checked={showInactive}\n                  onChange={e => setShowInactive(e.target.checked)}\n                />\n                Show Inactive\n              </label>\n            )}\n            {node && !readOnly && <AddMaterializationPopover node={node} />}\n          </div>\n        </div>\n      );\n    }\n\n    // Sort versions: current version first, then by version string (most recent first)\n    const sortedVersions = versions.sort((a, b) => {\n      // Current node version always comes first\n      if (a === node?.version) return -1;\n      if (b === node?.version) return 1;\n\n      // Then sort by version string (descending)\n      return b.localeCompare(a);\n    });\n\n    // Check if latest version has any materializations (including inactive ones)\n    const hasLatestVersionMaterialization = rawMaterializations.some(mat => {\n      const matVersion = mat.config?.cube?.version || node?.version;\n      return matVersion === node?.version;\n    });\n\n    // Refresh latest materialization function\n    const refreshLatestMaterialization = async () => {\n      if (\n        !window.confirm(\n          'This will rebuild the materialization workflows for the current cube version without creating a new version. Would you like to continue?',\n        )\n      ) {\n        return;\n      }\n\n      // Set loading state in both React state and localStorage\n      setIsRebuilding(true);\n      localStorage.setItem(`rebuilding-${node.name}`, 'true');\n\n      try {\n        const { status, json } = await djClient.refreshLatestMaterialization(\n          node.name,\n        );\n\n        if (status === 200 || status === 201) {\n          // Keep the loading state during page reload\n          window.location.reload(); // Reload to show the updated materialization\n        } else {\n          alert(`Failed to rebuild materialization: ${json.message}`);\n          // Clear loading state on error\n          localStorage.removeItem(`rebuilding-${node.name}`);\n          setIsRebuilding(false);\n        }\n      } catch (error) {\n        alert(`Error rebuilding materialization: ${error.message}`);\n        // Clear loading state on error\n        localStorage.removeItem(`rebuilding-${node.name}`);\n        setIsRebuilding(false);\n      }\n    };\n\n    return (\n      <div\n        style={{\n          display: 'flex',\n          alignItems: 'center',\n          justifyContent: 'space-between',\n          marginBottom: '20px',\n        }}\n      >\n        <div className=\"align-items-center row\">\n          {sortedVersions.map(version => (\n            <NodeRevisionMaterializationTab\n              key={version}\n              version={version}\n              node={node}\n              selectedRevisionTab={selectedRevisionTab}\n              onClickRevisionTab={onClickRevisionTab}\n              showInactive={showInactive}\n              versionHasOnlyInactive={versionHasOnlyInactive}\n            />\n          ))}\n        </div>\n        <div style={{ display: 'flex', alignItems: 'center', gap: '15px' }}>\n          <label\n            style={{\n              display: 'flex',\n              alignItems: 'center',\n              gap: '5px',\n              fontSize: '14px',\n              color: '#333',\n              padding: '4px 8px',\n              borderRadius: '12px',\n              backgroundColor: '#f5f5f5',\n              border: '1px solid #ddd',\n            }}\n            title=\"Shows inactive materializations for the latest cube.\"\n          >\n            <input\n              type=\"checkbox\"\n              checked={showInactive}\n              onChange={e => setShowInactive(e.target.checked)}\n            />\n            Show Inactive\n          </label>\n          {node &&\n            !readOnly &&\n            (hasLatestVersionMaterialization ? (\n              <button\n                className=\"edit_button\"\n                aria-label=\"RefreshLatestMaterialization\"\n                tabIndex=\"0\"\n                onClick={refreshLatestMaterialization}\n                disabled={isRebuilding}\n                title=\"Rebuild the materialization workflows for the current cube version (no version bump).\"\n                style={{\n                  opacity: isRebuilding ? 0.7 : 1,\n                  cursor: isRebuilding ? 'not-allowed' : 'pointer',\n                }}\n              >\n                <span className=\"add_node\">\n                  Rebuild (latest) Materialization\n                </span>\n              </button>\n            ) : (\n              <AddMaterializationPopover node={node} />\n            ))}\n        </div>\n      </div>\n    );\n  };\n\n  const materializationRows = materializations => {\n    return materializations.map((materialization, index) => (\n      <div key={`${materialization.name}-${index}`}>\n        <div className=\"tr\">\n          <div key={materialization.name} style={{ fontSize: 'large' }}>\n            <div\n              className=\"text-start node_name td\"\n              style={{ fontWeight: '600' }}\n            >\n              {materialization.job\n                ?.replace('MaterializationJob', '')\n                .match(/[A-Z][a-z]+/g)\n                .join(' ')}\n            </div>\n            <div className=\"td\">\n              {!readOnly && (\n                <NodeMaterializationDelete\n                  nodeName={node.name}\n                  materializationName={materialization.name}\n                  nodeVersion={selectedRevisionTab}\n                />\n              )}\n            </div>\n            <div className=\"td\">\n              <span className={`badge cron`}>{materialization.schedule}</span>\n              <div className={`cron-description`}>{cron(materialization)} </div>\n            </div>\n            <div className=\"td\">\n              <span className={`badge strategy`}>\n                {labelize(materialization.strategy)}\n              </span>\n            </div>\n          </div>\n        </div>\n        <div style={{ display: 'table-row' }}>\n          <div style={{ display: 'inline-flex' }}>\n            <ul className=\"backfills\">\n              <li className=\"backfill\">\n                <div className=\"backfills_header\">Output Tables</div>{' '}\n                {materialization.output_tables.map(table => (\n                  <div className={`table__full`} key={table}>\n                    <div className=\"table__header\">\n                      <TableIcon />{' '}\n                      <span className={`entity-info`}>\n                        {table.split('.')[0] + '.' + table.split('.')[1]}\n                      </span>\n                    </div>\n                    <div className={`table__body upstream_tables`}>\n                      {table.split('.')[2]}\n                    </div>\n                  </div>\n                ))}\n              </li>\n            </ul>\n          </div>\n\n          <div style={{ display: 'inline-flex' }}>\n            <ul className=\"backfills\">\n              <li>\n                <div className=\"backfills_header\">Workflows</div>{' '}\n                <ul>\n                  {materialization.urls.map((url, idx) => (\n                    <li style={{ listStyle: 'none' }} key={idx}>\n                      <div\n                        className=\"partitionLink\"\n                        style={{ fontSize: 'revert' }}\n                      >\n                        <a\n                          href={url}\n                          key={`url-${idx}`}\n                          className=\"\"\n                          target=\"blank\"\n                        >\n                          {idx === 0 ? 'main' : 'backfill'}\n                        </a>\n                      </div>\n                    </li>\n                  ))}\n                </ul>\n              </li>\n            </ul>\n          </div>\n\n          <div style={{ display: 'inline-flex' }}>\n            <ul className=\"backfills\">\n              <li className=\"backfill\">\n                <details open>\n                  <summary>\n                    <span className=\"backfills_header\">Backfills</span>{' '}\n                  </summary>\n                  {materialization.strategy === 'incremental_time' ? (\n                    <ul>\n                      {!readOnly && (\n                        <li>\n                          <AddBackfillPopover\n                            node={node}\n                            materialization={materialization}\n                            onSubmit={fetchData}\n                          />\n                        </li>\n                      )}\n                      {materialization.backfills.map(backfill => (\n                        <li className=\"backfill\">\n                          <div className=\"partitionLink\">\n                            <a href={backfill.urls[0]}>\n                              {backfill.spec.map(partition => {\n                                const partitionBody =\n                                  'range' in partition &&\n                                  partition['range'] !== null ? (\n                                    <>\n                                      <span className=\"badge partition_value\">\n                                        {partition.range[0]}\n                                      </span>\n                                      to\n                                      <span className=\"badge partition_value\">\n                                        {partition.range[1]}\n                                      </span>\n                                    </>\n                                  ) : (\n                                    <span className=\"badge partition_value\">\n                                      {partition.values.join(', ')}\n                                    </span>\n                                  );\n                                return (\n                                  <>\n                                    <div>\n                                      {\n                                        partitionColumnsMap[\n                                          partition.column_name.replaceAll(\n                                            '_DOT_',\n                                            '.',\n                                          )\n                                        ]\n                                      }{' '}\n                                      {partitionBody}\n                                    </div>\n                                  </>\n                                );\n                              })}\n                            </a>\n                          </div>\n                        </li>\n                      ))}\n                    </ul>\n                  ) : (\n                    <ul>\n                      <li>N/A</li>\n                    </ul>\n                  )}\n                </details>\n              </li>\n            </ul>\n          </div>\n          <div className=\"td\">\n            <ul className=\"backfills\">\n              <li className=\"backfill\">\n                <div className=\"backfills_header\">Partitions</div>{' '}\n                <ul>\n                  {node.columns\n                    .filter(col => col.partition !== null)\n                    .map(column => {\n                      return (\n                        <li key={column.name}>\n                          <div className=\"partitionLink\">\n                            {column.display_name}\n                            <span className=\"badge partition_value\">\n                              {column.partition.type_}\n                            </span>\n                          </div>\n                        </li>\n                      );\n                    })}\n                </ul>\n              </li>\n            </ul>\n          </div>\n        </div>\n      </div>\n    ));\n  };\n  const currentRevisionMaterializations = selectedRevisionTab\n    ? materializationsByRevision[selectedRevisionTab] || []\n    : filteredMaterializations;\n\n  const currentRevisionAvailability = selectedRevisionTab\n    ? availabilityStatesByRevision[selectedRevisionTab] || []\n    : availabilityStates;\n\n  const renderMaterializedDatasets = availabilityStates => {\n    if (!availabilityStates || availabilityStates.length === 0) {\n      return (\n        <div className=\"message alert\" style={{ marginTop: '10px' }}>\n          No materialized datasets available for this revision.\n        </div>\n      );\n    }\n\n    return availabilityStates.map((availability, index) => (\n      <AvailabilityStateBlock\n        key={`availability-${index}`}\n        availability={availability}\n      />\n    ));\n  };\n\n  return (\n    <>\n      <div\n        className=\"table-vertical\"\n        role=\"table\"\n        aria-label=\"Materializations\"\n        style={{ position: 'relative' }}\n      >\n        {/* Loading overlay */}\n        {isRebuilding && (\n          <div\n            style={{\n              position: 'absolute',\n              top: 0,\n              left: 0,\n              right: 0,\n              bottom: 0,\n              backgroundColor: 'rgba(255, 255, 255, 0.8)',\n              display: 'flex',\n              flexDirection: 'column',\n              justifyContent: 'center',\n              alignItems: 'center',\n              zIndex: 1000,\n              minHeight: '200px',\n            }}\n          >\n            <div\n              style={{\n                width: '40px',\n                height: '40px',\n                border: '4px solid #f3f3f3',\n                borderTop: '4px solid #3498db',\n                borderRadius: '50%',\n                animation: 'spin 1s linear infinite',\n                marginBottom: '16px',\n              }}\n            />\n            <div\n              style={{ fontSize: '16px', color: '#666', textAlign: 'center' }}\n            >\n              Rebuilding materialization...\n              <br />\n              <small style={{ fontSize: '14px' }}>\n                This may take a few moments\n              </small>\n            </div>\n          </div>\n        )}\n\n        <div>\n          {buildRevisionTabs()}\n          {currentRevisionMaterializations.length > 0 ? (\n            <div\n              className=\"card-inner-table table\"\n              aria-label=\"Materializations\"\n              aria-hidden=\"false\"\n            >\n              <div style={{ display: 'table' }}>\n                {materializationRows(\n                  currentRevisionMaterializations.filter(\n                    materialization =>\n                      !(\n                        materialization.name === 'default' &&\n                        node.type === 'cube'\n                      ),\n                  ),\n                )}\n              </div>\n            </div>\n          ) : (\n            <div className=\"message alert\" style={{ marginTop: '10px' }}>\n              No materialization workflows configured for this revision.\n            </div>\n          )}\n          {Object.keys(materializationsByRevision).length > 0 && (\n            <div style={{ marginTop: '30px' }}>\n              {renderMaterializedDatasets(currentRevisionAvailability)}\n            </div>\n          )}\n        </div>\n      </div>\n    </>\n  );\n}\n","import { useEffect, useState, useMemo, useContext } from 'react';\nimport DJClientContext from '../../providers/djclient';\nimport { labelize } from '../../../utils/form';\nimport '../../../styles/preaggregations.css';\nimport cronstrue from 'cronstrue';\n\n/**\n * Pre-aggregations tab for non-cube nodes (transform, metric, dimension).\n * Shows pre-aggs grouped by staleness (current vs stale versions).\n */\nexport default function NodePreAggregationsTab({ node }) {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const [preaggs, setPreaggs] = useState([]);\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState(null);\n  const [expandedIds, setExpandedIds] = useState(new Set());\n  const [expandedGrainIds, setExpandedGrainIds] = useState(new Set());\n  const [deactivating, setDeactivating] = useState(new Set());\n\n  const MAX_VISIBLE_GRAIN = 10;\n\n  // Fetch pre-aggregations for this node\n  useEffect(() => {\n    const fetchPreaggs = async () => {\n      if (!node?.name) return;\n\n      setLoading(true);\n      setError(null);\n\n      try {\n        const result = await djClient.listPreaggs({\n          node_name: node.name,\n          include_stale: true,\n        });\n        if (result._error) {\n          setError(result.message);\n        } else {\n          setPreaggs(result.items || []);\n        }\n      } catch (err) {\n        setError(err.message || 'Failed to load pre-aggregations');\n      } finally {\n        setLoading(false);\n      }\n    };\n\n    fetchPreaggs();\n  }, [node?.name, djClient]);\n\n  // Group pre-aggs by staleness\n  const { currentPreaggs, stalePreaggs } = useMemo(() => {\n    const currentVersion = node?.version;\n    const current = [];\n    const stale = [];\n\n    preaggs.forEach(preagg => {\n      if (preagg.node_version === currentVersion) {\n        current.push(preagg);\n      } else {\n        stale.push(preagg);\n      }\n    });\n\n    return { currentPreaggs: current, stalePreaggs: stale };\n  }, [preaggs, node?.version]);\n\n  // Auto-expand the first current pre-agg when data loads\n  useEffect(() => {\n    if (currentPreaggs.length > 0 && expandedIds.size === 0) {\n      setExpandedIds(new Set([currentPreaggs[0].id]));\n    }\n  }, [currentPreaggs]);\n\n  // Toggle expanded state for a pre-agg row\n  const toggleExpanded = id => {\n    setExpandedIds(prev => {\n      const next = new Set(prev);\n      if (next.has(id)) {\n        next.delete(id);\n      } else {\n        next.add(id);\n      }\n      return next;\n    });\n  };\n\n  // Deactivate a single pre-agg workflow\n  const handleDeactivate = async preaggId => {\n    if (\n      !window.confirm(\n        'Are you sure you want to deactivate this workflow? ' +\n          'The materialization will stop running.',\n      )\n    ) {\n      return;\n    }\n\n    setDeactivating(prev => new Set(prev).add(preaggId));\n\n    try {\n      const result = await djClient.deactivatePreaggWorkflow(preaggId);\n      if (result._error) {\n        alert(`Failed to deactivate: ${result.message}`);\n      } else {\n        // Refresh the list\n        const refreshed = await djClient.listPreaggs({\n          node_name: node.name,\n          include_stale: true,\n        });\n        if (!refreshed._error) {\n          setPreaggs(refreshed.items || []);\n        }\n      }\n    } catch (err) {\n      alert(`Error: ${err.message}`);\n    } finally {\n      setDeactivating(prev => {\n        const next = new Set(prev);\n        next.delete(preaggId);\n        return next;\n      });\n    }\n  };\n\n  // Bulk deactivate all stale workflows\n  const handleDeactivateAllStale = async () => {\n    const activeStale = stalePreaggs.filter(\n      p => p.workflow_status === 'active',\n    );\n    if (activeStale.length === 0) {\n      alert('No active stale workflows to deactivate.');\n      return;\n    }\n\n    if (\n      !window.confirm(\n        `Are you sure you want to deactivate ${activeStale.length} stale workflow(s)? ` +\n          'These materializations are from older node versions and will stop running.',\n      )\n    ) {\n      return;\n    }\n\n    setDeactivating(prev => {\n      const next = new Set(prev);\n      activeStale.forEach(p => next.add(p.id));\n      return next;\n    });\n\n    try {\n      const result = await djClient.bulkDeactivatePreaggWorkflows(\n        node.name,\n        true,\n      );\n      if (result._error) {\n        alert(`Failed to deactivate: ${result.message}`);\n      } else {\n        // Refresh the list\n        const refreshed = await djClient.listPreaggs({\n          node_name: node.name,\n          include_stale: true,\n        });\n        if (!refreshed._error) {\n          setPreaggs(refreshed.items || []);\n        }\n      }\n    } catch (err) {\n      alert(`Error: ${err.message}`);\n    } finally {\n      setDeactivating(new Set());\n    }\n  };\n\n  // Format cron expression to human-readable\n  const formatSchedule = schedule => {\n    if (!schedule) return 'Not scheduled';\n    try {\n      return cronstrue.toString(schedule);\n    } catch {\n      return schedule;\n    }\n  };\n\n  // Render a single pre-agg row\n  const renderPreaggRow = (preagg, isStale = false) => {\n    const isExpanded = expandedIds.has(preagg.id);\n    const isDeactivating = deactivating.has(preagg.id);\n    const hasActiveWorkflow = preagg.workflow_status === 'active';\n\n    return (\n      <div\n        key={preagg.id}\n        className={`preagg-row ${isStale ? 'preagg-row--stale' : ''}`}\n      >\n        {/* Collapsed header row */}\n        <div\n          className=\"preagg-row-header\"\n          onClick={() => toggleExpanded(preagg.id)}\n        >\n          <span className=\"preagg-row-toggle\">\n            {isExpanded ? '\\u25BC' : '\\u25B6'}\n          </span>\n\n          {preagg.preagg_hash && (\n            <code\n              className=\"preagg-row-hash\"\n              title=\"Pre-aggregation hash - used in table and workflow names\"\n            >\n              {preagg.preagg_hash}\n            </code>\n          )}\n\n          <div className=\"preagg-row-grain-chips\">\n            {(() => {\n              const grainCols = preagg.grain_columns || [];\n              const maxVisible = MAX_VISIBLE_GRAIN;\n              const visibleCols = grainCols.slice(0, maxVisible);\n              const hiddenCount = grainCols.length - maxVisible;\n\n              return (\n                <>\n                  {visibleCols.map((col, idx) => {\n                    const parts = col.split('.');\n                    const shortName = parts[parts.length - 1];\n                    return (\n                      <span key={idx} className=\"preagg-grain-chip\">\n                        {shortName}\n                      </span>\n                    );\n                  })}\n                  {hiddenCount > 0 && (\n                    <span className=\"preagg-grain-chip preagg-grain-chip--more\">\n                      +{hiddenCount}\n                    </span>\n                  )}\n                </>\n              );\n            })()}\n          </div>\n\n          <span className=\"preagg-row-measures\">\n            {preagg.measures?.length || 0} measure\n            {(preagg.measures?.length || 0) !== 1 ? 's' : ''}\n          </span>\n\n          {preagg.related_metrics?.length > 0 && (\n            <span className=\"preagg-metric-count-badge\">\n              {preagg.related_metrics.length} metric\n              {preagg.related_metrics.length !== 1 ? 's' : ''}\n            </span>\n          )}\n\n          {hasActiveWorkflow ? (\n            <span className=\"preagg-status-badge preagg-status-badge--active\">\n              Active\n            </span>\n          ) : preagg.workflow_status === 'paused' ? (\n            <span className=\"preagg-status-badge preagg-status-badge--paused\">\n              Paused\n            </span>\n          ) : (\n            <span className=\"preagg-status-badge preagg-status-badge--pending\">\n              Pending\n            </span>\n          )}\n\n          {preagg.schedule && (\n            <span className=\"preagg-row-schedule\">\n              {formatSchedule(preagg.schedule).toLowerCase()}\n            </span>\n          )}\n\n          {isStale && (\n            <span className=\"preagg-row-version\">\n              was {preagg.node_version}\n            </span>\n          )}\n        </div>\n\n        {/* Expanded details */}\n        {isExpanded && (\n          <div\n            className={`preagg-details ${\n              isStale ? 'preagg-details--stale' : ''\n            }`}\n          >\n            {isStale && (\n              <div className=\"preagg-stale-banner\">\n                <span className=\"preagg-stale-banner-icon\">⚠️</span>\n                <div>\n                  <strong>Built for {preagg.node_version}</strong> — current is{' '}\n                  {node.version}\n                  <br />\n                  <span className=\"preagg-stale-banner-text\">\n                    This workflow is still running but won't be used for\n                    queries.\n                  </span>\n                </div>\n              </div>\n            )}\n\n            <div className=\"preagg-stack\">\n              {/* Config + Grain side by side */}\n              <div className=\"preagg-two-column\">\n                {/* Config */}\n                <div>\n                  <div className=\"preagg-card-label\">Config</div>\n                  <div className=\"preagg-card\">\n                    {/* Table-style key-value pairs */}\n                    <table className=\"preagg-config-table\">\n                      <tbody>\n                        <tr>\n                          <td className=\"preagg-config-key\">Strategy</td>\n                          <td className=\"preagg-config-value\">\n                            {preagg.strategy\n                              ? labelize(preagg.strategy)\n                              : 'Not set'}\n                          </td>\n                        </tr>\n                        {preagg.preagg_hash && (\n                          <tr>\n                            <td className=\"preagg-config-key\">Hash</td>\n                            <td className=\"preagg-config-value\">\n                              <code\n                                className=\"preagg-hash-badge\"\n                                title=\"Unique identifier for this pre-aggregation. Used in table and workflow names.\"\n                              >\n                                {preagg.preagg_hash}\n                              </code>\n                            </td>\n                          </tr>\n                        )}\n                        <tr>\n                          <td className=\"preagg-config-key\">Schedule</td>\n                          <td className=\"preagg-config-value\">\n                            {preagg.schedule ? (\n                              <>\n                                {formatSchedule(preagg.schedule)}\n                                <span className=\"preagg-config-schedule-cron\">\n                                  ({preagg.schedule})\n                                </span>\n                              </>\n                            ) : (\n                              'Not scheduled'\n                            )}\n                          </td>\n                        </tr>\n                        {preagg.lookback_window && (\n                          <tr>\n                            <td className=\"preagg-config-key\">Lookback</td>\n                            <td className=\"preagg-config-value\">\n                              {preagg.lookback_window}\n                            </td>\n                          </tr>\n                        )}\n                        {preagg.max_partition &&\n                          preagg.max_partition.length > 0 && (\n                            <tr>\n                              <td className=\"preagg-config-key\">\n                                Max Partition\n                              </td>\n                              <td className=\"preagg-config-value\">\n                                <code>{preagg.max_partition.join(', ')}</code>\n                              </td>\n                            </tr>\n                          )}\n                      </tbody>\n                    </table>\n\n                    {/* Actions */}\n                    <div className=\"preagg-actions\">\n                      {/* Workflow buttons - one per URL */}\n                      {preagg.workflow_urls?.map((wf, idx) => {\n                        const label = wf.label || 'Workflow';\n                        const capitalizedLabel =\n                          label.charAt(0).toUpperCase() + label.slice(1);\n                        return (\n                          <a\n                            key={idx}\n                            href={wf.url}\n                            target=\"_blank\"\n                            rel=\"noopener noreferrer\"\n                            className=\"preagg-action-btn\"\n                          >\n                            {capitalizedLabel}\n                          </a>\n                        );\n                      })}\n\n                      {hasActiveWorkflow && (\n                        <button\n                          className={`preagg-action-btn preagg-action-btn--danger`}\n                          disabled={isDeactivating}\n                          onClick={e => {\n                            e.stopPropagation();\n                            handleDeactivate(preagg.id);\n                          }}\n                        >\n                          {isDeactivating ? 'Deactivating...' : 'Deactivate'}\n                        </button>\n                      )}\n                    </div>\n                  </div>\n                </div>\n\n                {/* Grain */}\n                <div>\n                  <div className=\"preagg-card-label\">Grain</div>\n                  <div className=\"preagg-card preagg-card--compact\">\n                    <div className=\"preagg-grain-list\">\n                      {(() => {\n                        const grainCols = preagg.grain_columns || [];\n                        const isGrainExpanded = expandedGrainIds.has(preagg.id);\n                        const visibleCols = isGrainExpanded\n                          ? grainCols\n                          : grainCols.slice(0, MAX_VISIBLE_GRAIN);\n                        const hiddenCount =\n                          grainCols.length - MAX_VISIBLE_GRAIN;\n\n                        return (\n                          <>\n                            {visibleCols.map((col, idx) => {\n                              const parts = col.split('.');\n                              const nodeName = parts.slice(0, -1).join('.');\n                              return (\n                                <a\n                                  key={idx}\n                                  href={`/nodes/${nodeName}`}\n                                  title={`View ${nodeName}`}\n                                  className=\"preagg-grain-badge\"\n                                >\n                                  {col}\n                                </a>\n                              );\n                            })}\n                            {!isGrainExpanded && hiddenCount > 0 && (\n                              <button\n                                className=\"preagg-expand-btn\"\n                                onClick={e => {\n                                  e.stopPropagation();\n                                  setExpandedGrainIds(prev => {\n                                    const next = new Set(prev);\n                                    next.add(preagg.id);\n                                    return next;\n                                  });\n                                }}\n                              >\n                                +{hiddenCount} more\n                              </button>\n                            )}\n                            {isGrainExpanded && hiddenCount > 0 && (\n                              <button\n                                className=\"preagg-expand-btn\"\n                                onClick={e => {\n                                  e.stopPropagation();\n                                  setExpandedGrainIds(prev => {\n                                    const next = new Set(prev);\n                                    next.delete(preagg.id);\n                                    return next;\n                                  });\n                                }}\n                              >\n                                Show less\n                              </button>\n                            )}\n                          </>\n                        );\n                      })()}\n                    </div>\n                  </div>\n                </div>\n              </div>\n\n              {/* Measures */}\n              <div>\n                <div className=\"preagg-card-label preagg-card-label--with-info\">\n                  Measures\n                  <span\n                    className=\"preagg-info-icon\"\n                    title=\"Pre-computed aggregations stored in this pre-aggregation. At query time, DJ uses these to avoid re-scanning raw data.\"\n                  >\n                    ⓘ\n                  </span>\n                </div>\n                <div\n                  className=\"preagg-card preagg-card--table\"\n                  style={{ border: '1px solid #e2e8f0' }}\n                >\n                  <table className=\"preagg-measures-table\">\n                    <thead>\n                      <tr>\n                        <th>Name</th>\n                        <th>\n                          Aggregation\n                          <span\n                            className=\"preagg-info-icon\"\n                            title=\"Phase 1: How raw data is aggregated when building the pre-agg table\"\n                          >\n                            ⓘ\n                          </span>\n                        </th>\n                        <th>\n                          Merge\n                          <span\n                            className=\"preagg-info-icon\"\n                            title=\"Phase 2: How pre-aggregated values are combined at query time\"\n                          >\n                            ⓘ\n                          </span>\n                        </th>\n                        <th>\n                          Rule\n                          <span\n                            className=\"preagg-info-icon\"\n                            title=\"Additivity: FULL = can roll up across any dimension\"\n                          >\n                            ⓘ\n                          </span>\n                        </th>\n                        <th>\n                          Used By\n                          <span\n                            className=\"preagg-info-icon\"\n                            title=\"Metrics that use this measure\"\n                          >\n                            ⓘ\n                          </span>\n                        </th>\n                      </tr>\n                    </thead>\n                    <tbody>\n                      {preagg.measures?.map((measure, idx) => (\n                        <tr key={idx}>\n                          <td className=\"preagg-measure-name\">\n                            {measure.name}\n                          </td>\n                          <td>\n                            <code className=\"preagg-agg-badge\">\n                              {measure.aggregation\n                                ? `${measure.aggregation}(${measure.expression})`\n                                : measure.expression}\n                            </code>\n                          </td>\n                          <td>\n                            {measure.merge && (\n                              <code className=\"preagg-merge-badge\">\n                                {measure.merge}\n                              </code>\n                            )}\n                          </td>\n                          <td>\n                            {measure.rule && (\n                              <span className=\"preagg-rule-badge\">\n                                {typeof measure.rule === 'object'\n                                  ? measure.rule.type || ''\n                                  : measure.rule}\n                              </span>\n                            )}\n                          </td>\n                          <td>\n                            {measure.used_by_metrics?.length > 0 && (\n                              <div className=\"preagg-metrics-list\">\n                                {measure.used_by_metrics.map((metric, mIdx) => (\n                                  <a\n                                    key={mIdx}\n                                    href={`/nodes/${metric.name}`}\n                                    title={metric.name}\n                                    className=\"preagg-metric-badge\"\n                                  >\n                                    {metric.display_name ||\n                                      metric.name.split('.').pop()}\n                                  </a>\n                                ))}\n                              </div>\n                            )}\n                          </td>\n                        </tr>\n                      ))}\n                    </tbody>\n                  </table>\n                </div>\n              </div>\n            </div>\n          </div>\n        )}\n      </div>\n    );\n  };\n\n  // Loading state\n  if (loading) {\n    return <div className=\"preagg-loading\">Loading pre-aggregations...</div>;\n  }\n\n  // Error state\n  if (error) {\n    return (\n      <div className=\"message alert preagg-error\">\n        Error loading pre-aggregations: {error}\n      </div>\n    );\n  }\n\n  // No pre-aggs\n  if (preaggs.length === 0) {\n    return (\n      <div className=\"preagg-no-data\">\n        <div className=\"message alert preagg-no-data-alert\">\n          No pre-aggregations found for this node.\n        </div>\n        <p className=\"preagg-no-data-text\">\n          Visit <a href=\"/planner\">Explorer</a> to plan materializations for\n          metrics derived from this node.\n        </p>\n      </div>\n    );\n  }\n\n  // Calculate if there are active stale workflows\n  const activeStaleCount = stalePreaggs.filter(\n    p => p.workflow_status === 'active',\n  ).length;\n\n  return (\n    <div className=\"preagg-container\">\n      {/* Current Version Section */}\n      <div className=\"preagg-section\">\n        <div className=\"preagg-section-header\">\n          <h3 className=\"preagg-section-title\">\n            Current Pre-Aggregations ({node.version})\n          </h3>\n          <span className=\"preagg-section-count\">\n            {currentPreaggs.length} pre-aggregation\n            {currentPreaggs.length !== 1 ? 's' : ''}\n          </span>\n        </div>\n\n        {currentPreaggs.length > 0 ? (\n          currentPreaggs.map(preagg => renderPreaggRow(preagg, false))\n        ) : (\n          <div className=\"preagg-empty\">\n            No pre-aggregations for the current version.\n          </div>\n        )}\n      </div>\n\n      {/* Stale Section */}\n      {stalePreaggs.length > 0 && (\n        <div className=\"preagg-section\">\n          <div className=\"preagg-section-header preagg-section-header--stale\">\n            <div className=\"preagg-section-header-left\">\n              <h3 className=\"preagg-section-title preagg-section-title--stale\">\n                Stale Pre-Aggregations ({stalePreaggs.length})\n              </h3>\n              <span className=\"preagg-section-count preagg-section-count--stale\">\n                {activeStaleCount} active workflow\n                {activeStaleCount !== 1 ? 's' : ''}\n              </span>\n            </div>\n\n            {activeStaleCount > 0 && (\n              <button\n                className=\"preagg-action-btn preagg-action-btn--danger-fill\"\n                onClick={handleDeactivateAllStale}\n              >\n                Deactivate All Stale\n              </button>\n            )}\n          </div>\n\n          {stalePreaggs.map(preagg => renderPreaggRow(preagg, true))}\n        </div>\n      )}\n    </div>\n  );\n}\n","export default {\n  \"hljs\": {\n    \"display\": \"block\",\n    \"overflowX\": \"auto\",\n    \"padding\": \"0.5em\",\n    \"background\": \"#011627\",\n    \"color\": \"#d6deeb\"\n  },\n  \"hljs-keyword\": {\n    \"color\": \"#c792ea\",\n    \"fontStyle\": \"italic\"\n  },\n  \"hljs-built_in\": {\n    \"color\": \"#addb67\",\n    \"fontStyle\": \"italic\"\n  },\n  \"hljs-type\": {\n    \"color\": \"#82aaff\"\n  },\n  \"hljs-literal\": {\n    \"color\": \"#ff5874\"\n  },\n  \"hljs-number\": {\n    \"color\": \"#F78C6C\"\n  },\n  \"hljs-regexp\": {\n    \"color\": \"#5ca7e4\"\n  },\n  \"hljs-string\": {\n    \"color\": \"#ecc48d\"\n  },\n  \"hljs-subst\": {\n    \"color\": \"#d3423e\"\n  },\n  \"hljs-symbol\": {\n    \"color\": \"#82aaff\"\n  },\n  \"hljs-class\": {\n    \"color\": \"#ffcb8b\"\n  },\n  \"hljs-function\": {\n    \"color\": \"#82AAFF\"\n  },\n  \"hljs-title\": {\n    \"color\": \"#DCDCAA\",\n    \"fontStyle\": \"italic\"\n  },\n  \"hljs-params\": {\n    \"color\": \"#7fdbca\"\n  },\n  \"hljs-comment\": {\n    \"color\": \"#637777\",\n    \"fontStyle\": \"italic\"\n  },\n  \"hljs-doctag\": {\n    \"color\": \"#7fdbca\"\n  },\n  \"hljs-meta\": {\n    \"color\": \"#82aaff\"\n  },\n  \"hljs-meta-keyword\": {\n    \"color\": \"#82aaff\"\n  },\n  \"hljs-meta-string\": {\n    \"color\": \"#ecc48d\"\n  },\n  \"hljs-section\": {\n    \"color\": \"#82b1ff\"\n  },\n  \"hljs-tag\": {\n    \"color\": \"#7fdbca\"\n  },\n  \"hljs-name\": {\n    \"color\": \"#7fdbca\"\n  },\n  \"hljs-builtin-name\": {\n    \"color\": \"#7fdbca\"\n  },\n  \"hljs-attr\": {\n    \"color\": \"#7fdbca\"\n  },\n  \"hljs-attribute\": {\n    \"color\": \"#80cbc4\"\n  },\n  \"hljs-variable\": {\n    \"color\": \"#addb67\"\n  },\n  \"hljs-bullet\": {\n    \"color\": \"#d9f5dd\"\n  },\n  \"hljs-code\": {\n    \"color\": \"#80CBC4\"\n  },\n  \"hljs-emphasis\": {\n    \"color\": \"#c792ea\",\n    \"fontStyle\": \"italic\"\n  },\n  \"hljs-strong\": {\n    \"color\": \"#addb67\",\n    \"fontWeight\": \"bold\"\n  },\n  \"hljs-formula\": {\n    \"color\": \"#c792ea\"\n  },\n  \"hljs-link\": {\n    \"color\": \"#ff869a\"\n  },\n  \"hljs-quote\": {\n    \"color\": \"#697098\",\n    \"fontStyle\": \"italic\"\n  },\n  \"hljs-selector-tag\": {\n    \"color\": \"#ff6363\"\n  },\n  \"hljs-selector-id\": {\n    \"color\": \"#fad430\"\n  },\n  \"hljs-selector-class\": {\n    \"color\": \"#addb67\",\n    \"fontStyle\": \"italic\"\n  },\n  \"hljs-selector-attr\": {\n    \"color\": \"#c792ea\",\n    \"fontStyle\": \"italic\"\n  },\n  \"hljs-selector-pseudo\": {\n    \"color\": \"#c792ea\",\n    \"fontStyle\": \"italic\"\n  },\n  \"hljs-template-tag\": {\n    \"color\": \"#c792ea\"\n  },\n  \"hljs-template-variable\": {\n    \"color\": \"#addb67\"\n  },\n  \"hljs-addition\": {\n    \"color\": \"#addb67ff\",\n    \"fontStyle\": \"italic\"\n  },\n  \"hljs-deletion\": {\n    \"color\": \"#EF535090\",\n    \"fontStyle\": \"italic\"\n  }\n};","const PythonIcon = ({ size = 14 }) => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    x=\"0px\"\n    y=\"0px\"\n    width={size}\n    height={size}\n    viewBox=\"0 0 48 48\"\n  >\n    <path d=\"M 24 3 C 20.271429 3 18.240267 3.9470561 16.792969 4.5742188 L 16.791016 4.5742188 C 15.488673 5.1421213 14.704771 6.3187748 14.365234 7.4296875 C 14.025697 8.5406002 14 9.6506515 14 10.640625 L 14 14 L 10.640625 14 C 9.6506515 14 8.5406002 14.0257 7.4296875 14.365234 C 6.3187748 14.704771 5.1421212 15.488626 4.5742188 16.791016 L 4.5742188 16.792969 C 3.947056 18.24022 3 20.271429 3 24 C 3 27.728571 3.9470561 29.759733 4.5742188 31.207031 L 4.5742188 31.208984 C 5.1421212 32.511374 6.3187748 33.295229 7.4296875 33.634766 C 8.5406002 33.974256 9.6506515 34 10.640625 34 L 14 34 L 14 37.359375 C 14 38.349349 14.0257 39.459401 14.365234 40.570312 C 14.704771 41.681225 15.488626 42.857879 16.791016 43.425781 L 16.792969 43.425781 C 18.24022 44.052944 20.271429 45 24 45 C 27.728571 45 29.759733 44.052944 31.207031 43.425781 L 31.208984 43.425781 C 32.511374 42.857879 33.295229 41.681225 33.634766 40.570312 C 33.974256 39.459401 34 38.349349 34 37.359375 L 34 34 L 37.359375 34 C 38.349349 34 39.459401 33.9743 40.570312 33.634766 C 41.681225 33.295229 42.857879 32.511374 43.425781 31.208984 L 43.425781 31.207031 C 44.052944 29.75978 45 27.728571 45 24 C 45 20.271429 44.052944 18.240267 43.425781 16.792969 L 43.425781 16.791016 C 42.857879 15.488673 41.681225 14.704771 40.570312 14.365234 C 39.459401 14.025697 38.349349 14 37.359375 14 L 34 14 L 34 10.640625 C 34 9.6506515 33.974303 8.5406002 33.634766 7.4296875 C 33.295229 6.3187748 32.511374 5.1421213 31.208984 4.5742188 L 31.207031 4.5742188 C 29.75978 3.9470561 27.728571 3 24 3 z M 24 6 C 27.268623 6 28.459017 6.6519922 30.009766 7.3242188 C 30.427376 7.5063161 30.590162 7.7325533 30.765625 8.3066406 C 30.941088 8.8807279 31 9.7405985 31 10.640625 L 31 15.253906 A 1.50015 1.50015 0 0 0 31 15.740234 L 31 19 C 31 20.950062 29.450062 22.5 27.5 22.5 L 20.5 22.5 C 16.928062 22.5 14 25.428062 14 29 L 14 31 L 10.640625 31 C 9.7405985 31 8.8807279 30.941088 8.3066406 30.765625 C 7.7325533 30.590162 7.5063162 30.427376 7.3242188 30.009766 C 6.6519921 28.459017 6 27.268623 6 24 C 6 20.731377 6.6519921 19.540983 7.3242188 17.990234 C 7.5063161 17.572624 7.7325533 17.409838 8.3066406 17.234375 C 8.8807279 17.058912 9.7405985 17 10.640625 17 L 23.5 17 A 1.50015 1.50015 0 1 0 23.5 14 L 17 14 L 17 10.640625 C 17 9.7405985 17.058912 8.8807279 17.234375 8.3066406 C 17.409838 7.7325533 17.572624 7.5063162 17.990234 7.3242188 C 19.540983 6.6519921 20.731377 6 24 6 z M 20.5 9 A 1.5 1.5 0 0 0 20.5 12 A 1.5 1.5 0 0 0 20.5 9 z M 34 17 L 37.359375 17 C 38.259401 17 39.119272 17.05891 39.693359 17.234375 C 40.267447 17.409838 40.493684 17.572624 40.675781 17.990234 C 41.348008 19.540983 42 20.731377 42 24 C 42 27.268623 41.348008 28.459017 40.675781 30.009766 C 40.493684 30.427376 40.267447 30.590162 39.693359 30.765625 C 39.119272 30.941088 38.259401 31 37.359375 31 L 24.5 31 A 1.50015 1.50015 0 1 0 24.5 34 L 31 34 L 31 37.359375 C 31 38.259401 30.94109 39.119272 30.765625 39.693359 C 30.590162 40.267447 30.427376 40.493684 30.009766 40.675781 C 28.459017 41.348008 27.268623 42 24 42 C 20.731377 42 19.540983 41.348008 17.990234 40.675781 C 17.572624 40.493684 17.409838 40.267447 17.234375 39.693359 C 17.058912 39.119272 17 38.259401 17 37.359375 L 17 29 C 17 27.049938 18.549938 25.5 20.5 25.5 L 27.5 25.5 C 31.071938 25.5 34 22.571938 34 19 L 34 17 z M 27.5 36 A 1.5 1.5 0 0 0 27.5 39 A 1.5 1.5 0 0 0 27.5 36 z\"></path>\n  </svg>\n);\n\nexport default PythonIcon;\n","import DJClientContext from '../../providers/djclient';\nimport { Light as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport { useEffect, useRef, useState, useContext } from 'react';\nimport nightOwl from 'react-syntax-highlighter/dist/esm/styles/hljs/night-owl';\nimport PythonIcon from '../../icons/PythonIcon';\nimport LoadingIcon from 'app/icons/LoadingIcon';\n\nexport default function ClientCodePopover({ nodeName, buttonStyle }) {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const [showModal, setShowModal] = useState(false);\n  const modalRef = useRef(null);\n  const [code, setCode] = useState(null);\n\n  // Drop any cached code when the node changes.\n  useEffect(() => {\n    setCode(null);\n  }, [nodeName]);\n\n  // The generated client code is only shown inside the modal, and generating it\n  // is expensive (~1s server round trip). Fetch it lazily the first time the\n  // popover is opened rather than on every node-page load.\n  useEffect(() => {\n    if (!showModal || code !== null) return;\n    let cancelled = false;\n    async function fetchCode() {\n      try {\n        const result = await djClient.clientCode(nodeName);\n        if (!cancelled) setCode(result);\n      } catch (err) {\n        console.log(err);\n      }\n    }\n    fetchCode();\n    return () => {\n      cancelled = true;\n    };\n  }, [showModal, nodeName, djClient, code]);\n\n  useEffect(() => {\n    const handleClickOutside = event => {\n      if (modalRef.current && !modalRef.current.contains(event.target)) {\n        setShowModal(false);\n      }\n    };\n\n    if (showModal) {\n      document.addEventListener('mousedown', handleClickOutside);\n    } else {\n      document.removeEventListener('mousedown', handleClickOutside);\n    }\n\n    return () => {\n      document.removeEventListener('mousedown', handleClickOutside);\n    };\n  }, [showModal]);\n\n  return (\n    <>\n      <button onClick={() => setShowModal(true)} style={buttonStyle}>\n        <PythonIcon /> Python\n      </button>\n\n      {showModal && (\n        <div\n          className=\"modal-backdrop fade in\"\n          style={{\n            position: 'fixed',\n            top: 0,\n            left: 0,\n            width: '100vw',\n            height: '100vh',\n            backgroundColor: 'rgba(0, 0, 0, 0.5)',\n            zIndex: 9999,\n            display: 'flex',\n            alignItems: 'center',\n            justifyContent: 'center',\n          }}\n        >\n          <div\n            className=\"centerPopover\"\n            ref={modalRef}\n            style={{\n              position: 'relative',\n              maxWidth: '80%',\n              width: '600px',\n              maxHeight: '80vh',\n              overflowY: 'auto',\n              padding: '1.5rem',\n              background: '#fff',\n              borderRadius: '10px',\n              boxShadow: '0 3px 10px rgba(0, 0, 0, 0.3)',\n            }}\n          >\n            <button\n              onClick={() => setShowModal(false)}\n              style={{\n                position: 'absolute',\n                top: '1rem',\n                right: '1rem',\n                background: 'none',\n                border: 'none',\n                fontSize: '1.5rem',\n                cursor: 'pointer',\n                color: '#999',\n              }}\n              aria-label=\"Close modal\"\n            >\n              ×\n            </button>\n            <h2>Python Client Code</h2>\n            {code ? (\n              <SyntaxHighlighter language=\"python\" style={nightOwl}>\n                {code}\n              </SyntaxHighlighter>\n            ) : (\n              <>\n                <LoadingIcon />\n              </>\n            )}\n          </div>\n        </div>\n      )}\n    </>\n  );\n}\n","const EyeIcon = ({ size = 14 }) => (\n  <svg\n    className=\"feather feather-eye\"\n    fill=\"none\"\n    height={size}\n    width={size}\n    viewBox=\"0 0 24 24\"\n    stroke=\"currentColor\"\n    strokeWidth=\"2\"\n    strokeLinecap=\"round\"\n    strokeLinejoin=\"round\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n    <circle cx=\"12\" cy=\"12\" r=\"3\" />\n  </svg>\n);\n\nexport default EyeIcon;\n","const ExpandedIcon = props => (\n  <svg\n    stroke=\"currentColor\"\n    fill=\"currentColor\"\n    strokeWidth=\"0\"\n    viewBox=\"0 0 512 512\"\n    height=\"1em\"\n    width=\"1em\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path d=\"M48 256c0 114.9 93.1 208 208 208s208-93.1 208-208S370.9 48 256 48 48 141.1 48 256zm289.1-43.4c7.5-7.5 19.8-7.5 27.3 0 3.8 3.8 5.6 8.7 5.6 13.6s-1.9 9.9-5.7 13.7l-94.3 94c-7.6 6.9-19.3 6.7-26.6-.6l-95.7-95.4c-7.5-7.5-7.6-19.7 0-27.3 7.5-7.5 19.7-7.6 27.3 0l81.1 81.9 81-79.9z\"></path>\n  </svg>\n);\n\nexport default ExpandedIcon;\n","const CollapsedIcon = props => (\n  <svg\n    stroke=\"currentColor\"\n    fill=\"currentColor\"\n    strokeWidth=\"0\"\n    viewBox=\"0 0 512 512\"\n    height=\"1em\"\n    width=\"1em\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path d=\"M48 256c0 114.9 93.1 208 208 208s208-93.1 208-208S370.9 48 256 48 48 141.1 48 256zm244.5 0l-81.9-81.1c-7.5-7.5-7.5-19.8 0-27.3s19.8-7.5 27.3 0l95.4 95.7c7.3 7.3 7.5 19.1.6 26.6l-94 94.3c-3.8 3.8-8.7 5.7-13.7 5.7-4.9 0-9.9-1.9-13.6-5.6-7.5-7.5-7.6-19.7 0-27.3l79.9-81z\"></path>\n  </svg>\n);\n\nexport default CollapsedIcon;\n","import { useContext, useState, useRef, useEffect } from 'react';\nimport DJClientContext from '../../providers/djclient';\nimport EyeIcon from '../../icons/EyeIcon';\nimport ExpandedIcon from '../../icons/ExpandedIcon';\nimport CollapsedIcon from '../../icons/CollapsedIcon';\n\nconst EVENT_TYPES = ['delete', 'update'];\n\nexport default function WatchButton({ node, buttonStyle }) {\n  // All hooks must be called before any early returns\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const [selectedEvents, setSelectedEvents] = useState([]);\n  const [loading, setLoading] = useState(false);\n  const [dropdownOpen, setDropdownOpen] = useState(false);\n  const dropdownRef = useRef();\n\n  // Load existing preferences\n  useEffect(() => {\n    if (!node || !node.name || !node.type) {\n      return;\n    }\n\n    const loadPreferences = async () => {\n      try {\n        const preferences = await djClient.getNotificationPreferences({\n          entity_name: node.name,\n        });\n\n        const matched = preferences.find(item =>\n          item.alert_types.includes('web'),\n        );\n\n        if (matched) {\n          setSelectedEvents(matched.activity_types);\n        }\n      } catch (err) {\n        console.error('Failed to load notification preferences', err);\n      }\n    };\n\n    loadPreferences();\n  }, [djClient, node?.name, node?.type]);\n\n  // Close dropdown on outside click\n  useEffect(() => {\n    const handleClickOutside = event => {\n      if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\n        setDropdownOpen(false);\n      }\n    };\n\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, []);\n\n  // Early return after all hooks are called\n  if (!node || !node.name || !node.type) {\n    return null;\n  }\n\n  const toggleEvent = async event => {\n    const isSelected = selectedEvents.includes(event);\n\n    try {\n      setLoading(true);\n      let updatedEvents;\n\n      if (!isSelected) {\n        updatedEvents = Array.from(new Set([...selectedEvents, event]));\n      } else {\n        updatedEvents = selectedEvents.filter(e => e !== event);\n      }\n\n      if (updatedEvents.length === 0) {\n        await djClient.unsubscribeFromNotifications({\n          entity_type: 'node',\n          entity_name: node.name,\n        });\n      } else {\n        await djClient.subscribeToNotifications({\n          entity_type: 'node',\n          entity_name: node.name,\n          activity_types: updatedEvents,\n          alert_types: ['web'],\n        });\n      }\n\n      setSelectedEvents(updatedEvents);\n    } catch (err) {\n      console.error('Failed to update preference', err);\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleWatchClick = async () => {\n    try {\n      setLoading(true);\n      if (selectedEvents.length === 0) {\n        await djClient.subscribeToNotifications({\n          entity_type: 'node',\n          entity_name: node.name,\n          activity_types: EVENT_TYPES,\n          alert_types: ['web'],\n        });\n        setSelectedEvents(EVENT_TYPES);\n      } else {\n        await djClient.unsubscribeFromNotifications({\n          entity_type: 'node',\n          entity_name: node.name,\n        });\n        setSelectedEvents([]);\n      }\n    } catch (err) {\n      console.error('Watch toggle failed', err);\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  return (\n    <div\n      className=\"btn-group\"\n      ref={dropdownRef}\n      style={{\n        position: 'relative',\n        display: 'inline-flex',\n        verticalAlign: 'middle',\n      }}\n    >\n      <button\n        onClick={handleWatchClick}\n        disabled={loading}\n        style={{\n          ...buttonStyle,\n          borderTopRightRadius: 0,\n          borderBottomRightRadius: 0,\n          borderRight: 'none',\n        }}\n      >\n        <EyeIcon />\n        Watch\n        {selectedEvents.length > 0 && (\n          <span\n            style={{\n              backgroundColor: '#e2e6ed',\n              color: '#333',\n              padding: '2px 5px',\n              borderRadius: '999px',\n              fontSize: '10px',\n              fontWeight: 500,\n              lineHeight: 1,\n            }}\n          >\n            {selectedEvents.length}\n          </span>\n        )}\n      </button>\n\n      <button\n        onClick={() => setDropdownOpen(prev => !prev)}\n        disabled={loading}\n        style={{\n          ...buttonStyle,\n          borderTopLeftRadius: 0,\n          borderBottomLeftRadius: 0,\n          padding: '0 6px',\n        }}\n        aria-label=\"Toggle dropdown\"\n      >\n        {dropdownOpen ? <ExpandedIcon /> : <CollapsedIcon />}\n      </button>\n\n      {dropdownOpen && (\n        <ul\n          className=\"p-2\"\n          style={{\n            display: 'block',\n            minWidth: '220px',\n            position: 'absolute',\n            top: '100%',\n            right: 0,\n            zIndex: 9999,\n            backgroundColor: '#fff',\n            border: '1px solid #ccc',\n            borderRadius: '0.5rem',\n            marginTop: '0.25rem',\n            boxShadow: '0px 6px 16px rgba(0, 0, 0, 0.1)',\n            padding: '0.5rem 0',\n          }}\n        >\n          {EVENT_TYPES.map(event => {\n            const isSelected = selectedEvents.includes(event);\n            return (\n              <li\n                key={event}\n                onClick={() => toggleEvent(event)}\n                style={{\n                  display: 'flex',\n                  alignItems: 'center',\n                  padding: '0.5rem 1rem',\n                  cursor: 'pointer',\n                  backgroundColor: isSelected ? '#f0f4f8' : 'transparent',\n                  fontWeight: isSelected ? '600' : '400',\n                  fontSize: '0.9rem',\n                  color: '#333',\n                  borderLeft: isSelected\n                    ? '4px solid #7983ff'\n                    : '4px solid transparent',\n                  transition: 'background 0.2s',\n                }}\n              >\n                <input\n                  className=\"form-check-input\"\n                  type=\"checkbox\"\n                  checked={isSelected}\n                  readOnly\n                  style={{ marginRight: '0.75rem' }}\n                />\n                {event}\n              </li>\n            );\n          })}\n        </ul>\n      )}\n    </div>\n  );\n}\n","import { useEffect, useState } from 'react';\nimport * as React from 'react';\n\nexport default function NodesWithDimension({ node, djClient }) {\n  const [availableNodes, setAvailableNodes] = useState([]);\n\n  useEffect(() => {\n    const fetchData = async () => {\n      const data = await djClient.nodesWithDimension(node.name);\n      setAvailableNodes(data);\n    };\n    fetchData().catch(console.error);\n  }, [djClient, node]);\n  return (\n    <div className=\"table-responsive\">\n      <table className=\"card-inner-table table\">\n        <thead className=\"fs-7 fw-bold text-gray-400 border-bottom-0\">\n          <tr>\n            <th className=\"text-start\">Name</th>\n            <th>Type</th>\n          </tr>\n        </thead>\n        <tbody>\n          {availableNodes.map(node => (\n            <tr>\n              <td>\n                <a href={`/nodes/${node.name}`}>{node.name}</a>\n              </td>\n              {/* <td>\n                <span\n                  className={'node_type__' + node.type + ' badge node_type'}\n                >\n                  {node.type}\n                </span>\n              </td> */}\n            </tr>\n          ))}\n        </tbody>\n      </table>\n    </div>\n  );\n}\n","import { useContext, useEffect, useState } from 'react';\nimport DJClientContext from '../../providers/djclient';\n\nexport function DJNodeDimensions(data) {\n  const [dimensions, setDimensions] = useState([]);\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  useEffect(() => {\n    if (data.type === 'metric') {\n      async function getDimensions() {\n        try {\n          const metricData = await djClient.metric(data.name);\n          setDimensions(metricData.dimensions);\n        } catch (err) {\n          console.log(err);\n        }\n      }\n      getDimensions();\n    }\n  }, [data, djClient]);\n  const dimensionsToObject = dimensions => {\n    return dimensions.map(dim => {\n      const [attribute, ...nodeName] = dim.name.split('.').reverse();\n      return {\n        dimension: nodeName.reverse().join('.'),\n        path: dim.path,\n        column: attribute,\n      };\n    });\n  };\n  const groupedDimensions = dims =>\n    dims.reduce((acc, current) => {\n      const dimKey = current.dimension + ' via ' + current.path.slice(-1);\n      acc[dimKey] = acc[dimKey] || {\n        dimension: current.dimension,\n        path: current.path.slice(-1),\n        columns: [],\n      };\n      acc[dimKey].columns.push(current.column);\n      return acc;\n    }, {});\n  const dimensionsRenderer = grouped =>\n    Object.entries(grouped).map(([dimKey, dimValue]) => {\n      if (Array.isArray(dimValue.columns)) {\n        const attributes = dimValue.columns.map(col => {\n          return (\n            <span className={'badge white_badge'} key={`attr-${col}`}>\n              {col}\n            </span>\n          );\n        });\n        return (\n          <div\n            className={'custom-node-subheader node_type__' + data.type}\n            key={`dim-${dimValue.path}-${dimValue.dimension}`}\n          >\n            <div className=\"custom-node-port\">\n              <a href={`/nodes/${dimValue.dimension}`}>{dimValue.dimension}</a>{' '}\n              <div className={'badge node_type__metric text-black'}>\n                {dimValue.path}\n              </div>\n            </div>\n            <div className={'dimension_attributes'}>{attributes}</div>\n          </div>\n        );\n      }\n      return <></>;\n    });\n  return (\n    <>\n      {dimensions.length <= 0\n        ? ''\n        : dimensionsRenderer(groupedDimensions(dimensionsToObject(dimensions)))}\n    </>\n  );\n}\n","import { Handle } from 'reactflow';\nimport React from 'react';\n\nexport function DJNodeColumns({ data, limit }) {\n  const handleWrapperStyle = {\n    display: 'flex',\n    position: 'absolute',\n    height: '100%',\n    flexDirection: 'column',\n    top: '50%',\n    justifyContent: 'space-between',\n  };\n  const handleWrapperStyleRight = { ...handleWrapperStyle, ...{ right: 0 } };\n\n  const handleStyle = {\n    width: '12px',\n    height: '12px',\n    borderRadius: '12px',\n    background: 'transparent',\n    border: '4px solid transparent',\n    cursor: 'pointer',\n    position: 'absolute',\n    top: '0px',\n    left: 0,\n  };\n  const handleStyleLeft = percentage => {\n    return {\n      ...handleStyle,\n      ...{\n        transform: 'translate(-' + percentage + '%, -50%)',\n      },\n    };\n  };\n  return data.column_names.slice(0, limit).map(col => (\n    <div\n      className={\n        'custom-node-subheader node_type__' +\n        data.type +\n        (col.order <= 0 ? ' custom-node-emphasis' : '')\n      }\n      key={`${data.name}.${col.name}`}\n    >\n      <div style={handleWrapperStyle}>\n        <Handle\n          type=\"target\"\n          position=\"left\"\n          id={data.name + '.' + col.name}\n          style={handleStyleLeft(100)}\n        />\n      </div>\n      <div\n        className=\"custom-node-port\"\n        id={data.name + '.' + col.name}\n        key={'i-' + data.name + '.' + col.name}\n      >\n        {data.primary_key.includes(col.name) ? (\n          <b>{col.name} (PK)</b>\n        ) : (\n          <>{col.name}</>\n        )}\n        <span style={{ marginLeft: '0.25rem' }} className={'badge'}>\n          {col.type}\n        </span>\n      </div>\n      <div style={handleWrapperStyleRight}>\n        <Handle\n          type=\"source\"\n          position=\"right\"\n          id={data.name + '.' + col.name}\n          style={handleStyle}\n        />\n      </div>\n    </div>\n  ));\n}\n","import React from 'react';\nimport { DJNodeDimensions } from './DJNodeDimensions';\nimport { DJNodeColumns } from './DJNodeColumns';\n\nexport default function Collapse({ collapsed, text, data }) {\n  const [isCollapsed, setIsCollapsed] = React.useState(collapsed);\n\n  const limit = 5;\n  return (\n    <>\n      <div className=\"collapse\">\n        {data.type === 'metric' ? (\n          <button\n            className=\"collapse-button\"\n            onClick={() => setIsCollapsed(!isCollapsed)}\n          >\n            {isCollapsed ? '\\u25B6 Show' : '\\u25BC Hide'} {text}\n          </button>\n        ) : (\n          ''\n        )}\n        <div\n          className={`collapse-content ${\n            isCollapsed && data.type === 'metric' ? 'collapsed' : 'expanded'\n          }`}\n          aria-expanded={isCollapsed}\n        >\n          {data.type !== 'metric'\n            ? isCollapsed\n              ? DJNodeColumns({ data: data, limit: limit })\n              : DJNodeColumns({ data: data, limit: 100 })\n            : DJNodeDimensions(data)}\n        </div>\n        {data.type !== 'metric' && data.column_names.length > limit ? (\n          <button\n            className=\"collapse-button\"\n            onClick={() => setIsCollapsed(!isCollapsed)}\n          >\n            {isCollapsed ? '\\u25B6 More' : '\\u25BC Less'} {text}\n          </button>\n        ) : (\n          ''\n        )}\n      </div>\n    </>\n  );\n}\n","import { memo } from 'react';\nimport { Handle, Position } from 'reactflow';\nimport Collapse from './Collapse';\n\nfunction capitalize(string) {\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport function DJNode({ id, data }) {\n  const handleWrapperStyle = {\n    display: 'flex',\n    position: 'absolute',\n    height: '100%',\n    flexDirection: 'column',\n    top: '50%',\n    justifyContent: 'space-between',\n  };\n  const handleWrapperStyleRight = { ...handleWrapperStyle, ...{ right: 0 } };\n\n  const handleStyle = {\n    width: '12px',\n    height: '12px',\n    borderRadius: '12px',\n    background: 'transparent',\n    border: '4px solid transparent',\n    cursor: 'pointer',\n    position: 'absolute',\n    top: '0px',\n    left: 0,\n  };\n  const handleStyleLeft = percentage => {\n    return {\n      ...handleStyle,\n      ...{\n        transform: 'translate(-' + percentage + '%, -50%)',\n      },\n    };\n  };\n  const highlightNodeClass =\n    data.is_current === true ? ' dj-node_highlight' : '';\n  return (\n    <>\n      <div\n        className={'dj-node__full node_type__' + data.type + highlightNodeClass}\n        key={data.name}\n        style={{ width: '450px' }}\n      >\n        <div style={handleWrapperStyle}>\n          <Handle\n            type=\"target\"\n            id={data.name}\n            position={Position.Left}\n            style={handleStyleLeft(100)}\n          />\n        </div>\n        <div className=\"dj-node__header\">\n          <div className=\"serif\">\n            {data.name\n              .split('.')\n              .slice(0, data.name.split('.').length - 1)\n              .join(' \\u25B6 ')}\n          </div>\n        </div>\n        <div className=\"dj-node__body\">\n          <b>{capitalize(data.type)}</b>\n          <br />{' '}\n          <a href={`/nodes/${data.name}`}>\n            {data.type === 'source' ? data.table : data.display_name}\n          </a>\n          <Collapse\n            collapsed={data.is_current && data.type != 'metric' ? false : true}\n            text={data.type !== 'metric' ? 'columns' : 'dimensions'}\n            data={data}\n          />\n        </div>\n        <div style={handleWrapperStyleRight}>\n          <Handle\n            type=\"source\"\n            id={data.name}\n            position={Position.Right}\n            style={handleStyleLeft(90)}\n          />\n        </div>\n      </div>\n    </>\n  );\n}\n\nexport default memo(DJNode);\n","import React, { useCallback, useEffect, useMemo } from 'react';\nimport ReactFlow, {\n  addEdge,\n  MiniMap,\n  Controls,\n  Background,\n  useNodesState,\n  useEdgesState,\n} from 'reactflow';\n\nimport '../../../styles/dag.css';\nimport 'reactflow/dist/style.css';\nimport DJNode from '../../components/djgraph/DJNode';\nimport dagre from 'dagre';\n\nconst getLayoutedElements = (\n  nodes,\n  edges,\n  direction = 'LR',\n  nodeWidth = 600,\n) => {\n  const dagreGraph = new dagre.graphlib.Graph();\n  dagreGraph.setDefaultEdgeLabel(() => ({}));\n\n  const isHorizontal = direction === 'TB';\n  dagreGraph.setGraph({\n    rankdir: direction,\n    nodesep: 40,\n    ranksep: 10,\n    ranker: 'longest-path',\n  });\n  const nodeHeightTracker = {};\n\n  nodes.forEach(node => {\n    const minColumnsLength = node.data.column_names.filter(\n      col => col.order > 0,\n    ).length;\n    nodeHeightTracker[node.id] = Math.min(minColumnsLength, 5) * 40 + 250;\n    dagreGraph.setNode(node.id, {\n      width: nodeWidth,\n      height: nodeHeightTracker[node.id],\n    });\n  });\n\n  edges.forEach(edge => {\n    dagreGraph.setEdge(edge.source, edge.target);\n  });\n\n  dagre.layout(dagreGraph);\n\n  nodes.forEach(node => {\n    const nodeWithPosition = dagreGraph.node(node.id);\n    node.targetPosition = isHorizontal ? 'left' : 'top';\n    node.sourcePosition = isHorizontal ? 'right' : 'bottom';\n    node.position = {\n      x: nodeWithPosition.x - nodeWidth / 2,\n      y: nodeWithPosition.y - nodeHeightTracker[node.id] / 3,\n    };\n    node.width = nodeWidth;\n    node.height = nodeHeightTracker[node.id];\n    return node;\n  });\n\n  return { nodes: nodes, edges: edges };\n};\n\nconst LayoutFlow = (djNode, saveGraph) => {\n  const nodeTypes = useMemo(() => ({ DJNode: DJNode }), []);\n\n  // These are used internally by ReactFlow (to update the nodes on the ReactFlow pane)\n  const [nodes, setNodes, onNodesChange] = useNodesState([]);\n  const [edges, setEdges, onEdgesChange] = useEdgesState([]);\n\n  const minimapStyle = {\n    height: 100,\n    width: 150,\n  };\n\n  useEffect(() => {\n    saveGraph(getLayoutedElements, setNodes, setEdges).catch(console.error);\n  }, [djNode]);\n\n  const onConnect = useCallback(\n    params => setEdges(eds => addEdge(params, eds)),\n    [setEdges],\n  );\n  return (\n    <div style={{ height: '800px' }}>\n      <ReactFlow\n        nodes={nodes}\n        edges={edges}\n        nodeTypes={nodeTypes}\n        onNodesChange={onNodesChange}\n        onEdgesChange={onEdgesChange}\n        onConnect={onConnect}\n        snapToGrid={true}\n        fitView\n      >\n        <MiniMap style={minimapStyle} zoomable pannable />\n        <Controls />\n        <Background color=\"#aaa\" gap={16} />\n      </ReactFlow>\n    </div>\n  );\n};\nexport default LayoutFlow;\n","import { useContext } from 'react';\nimport { MarkerType } from 'reactflow';\n\nimport '../../../styles/dag.css';\nimport 'reactflow/dist/style.css';\nimport DJClientContext from '../../providers/djclient';\nimport LayoutFlow from '../../components/djgraph/LayoutFlow';\n\nconst createDJNode = node => {\n  return {\n    id: node.node_name,\n    type: 'DJNode',\n    data: {\n      label: node.node_name,\n      name: node.node_name,\n      type: node.node_type,\n      table: node.node_type === 'source' ? node.node_name : '',\n      display_name:\n        node.node_type === 'source' ? node.node_name : node.display_name,\n      column_names: [{ name: node.column_name, type: '' }],\n      primary_key: [],\n    },\n  };\n};\n\nconst NodeColumnLineage = djNode => {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const dagFetch = async (getLayoutedElements, setNodes, setEdges) => {\n    if (!djNode?.djNode) return;\n    let relatedNodes = await djClient.node_lineage(djNode.djNode.name);\n    let nodesMapping = {};\n    let edgesMapping = {};\n    let processing = relatedNodes;\n    while (processing.length > 0) {\n      let current = processing.pop();\n      let node = createDJNode(current);\n      if (node.id in nodesMapping) {\n        nodesMapping[node.id].data.column_names = Array.from(\n          new Set([\n            ...nodesMapping[node.id].data.column_names.map(x => x.name),\n            ...node.data.column_names.map(x => x.name),\n          ]),\n        ).map(x => {\n          return { name: x, type: '' };\n        });\n      } else {\n        nodesMapping[node.id] = node;\n      }\n\n      current.lineage.forEach(lineageColumn => {\n        const sourceHandle =\n          lineageColumn.node_name + '.' + lineageColumn.column_name;\n        const targetHandle = current.node_name + '.' + current.column_name;\n        edgesMapping[sourceHandle + '->' + targetHandle] = {\n          id: sourceHandle + '->' + targetHandle,\n          source: lineageColumn.node_name,\n          sourceHandle: sourceHandle,\n          target: current.node_name,\n          targetHandle: targetHandle,\n          animated: true,\n          markerEnd: {\n            type: MarkerType.Arrow,\n          },\n          style: {\n            strokeWidth: 3,\n            stroke: '#b0b9c2',\n          },\n        };\n        processing.push(lineageColumn);\n      });\n    }\n\n    // use dagre to determine the position of the parents (the DJ nodes)\n    // the positions of the columns are relative to each DJ node\n    const elements = getLayoutedElements(\n      Object.keys(nodesMapping).map(key => nodesMapping[key]),\n      Object.keys(edgesMapping).map(key => edgesMapping[key]),\n    );\n\n    setNodes(elements.nodes);\n    setEdges(elements.edges);\n  };\n  return LayoutFlow(djNode, dagFetch);\n};\nexport default NodeColumnLineage;\n","const ChartIcon = ({ size = 16, ...props }) => (\n  <svg\n    width={size}\n    height={size}\n    viewBox=\"0 0 24 24\"\n    fill=\"currentColor\"\n    stroke=\"none\"\n    {...props}\n  >\n    {/* Bars */}\n    <rect x=\"4\" y=\"11\" width=\"5\" height=\"8\" rx=\"1\" />\n    <rect x=\"10\" y=\"5\" width=\"5\" height=\"14\" rx=\"1\" />\n    <rect x=\"16\" y=\"8\" width=\"5\" height=\"11\" rx=\"1\" />\n    {/* X axis */}\n    <line\n      x1=\"2\"\n      y1=\"21\"\n      x2=\"23\"\n      y2=\"21\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.5\"\n      strokeLinecap=\"round\"\n      opacity=\"0.35\"\n    />\n  </svg>\n);\n\nexport default ChartIcon;\n","import { useEffect, useState } from 'react';\nimport * as React from 'react';\nimport { labelize } from '../../../utils/form';\nimport LoadingIcon from '../../icons/LoadingIcon';\n\nexport default function NodeDependenciesTab({ node, djClient }) {\n  const [upstreams, setUpstreams] = useState(null);\n  const [downstreams, setDownstreams] = useState(null);\n  const [dimensions, setDimensions] = useState(null);\n\n  useEffect(() => {\n    if (node) {\n      // Reset state when node changes\n      setUpstreams(null);\n      setDownstreams(null);\n      setDimensions(null);\n\n      // Load all three in parallel, display each as it loads\n      djClient.upstreamsGQL(node.name).then(setUpstreams).catch(console.error);\n      djClient\n        .downstreamsGQL(node.name)\n        .then(setDownstreams)\n        .catch(console.error);\n      djClient\n        .nodeDimensions(node.name)\n        .then(setDimensions)\n        .catch(console.error);\n    }\n  }, [djClient, node]);\n\n  return (\n    <div>\n      <h2>Upstreams</h2>\n      {upstreams !== null ? (\n        <NodeList nodes={upstreams} />\n      ) : (\n        <span style={{ display: 'block' }}>\n          <LoadingIcon centered={false} />\n        </span>\n      )}\n      <h2>Downstreams</h2>\n      {downstreams !== null ? (\n        <NodeList nodes={downstreams} />\n      ) : (\n        <span style={{ display: 'block' }}>\n          <LoadingIcon centered={false} />\n        </span>\n      )}\n      <h2>Dimensions</h2>\n      {dimensions !== null ? (\n        <NodeDimensionsList rawDimensions={dimensions} />\n      ) : (\n        <span style={{ display: 'block' }}>\n          <LoadingIcon centered={false} />\n        </span>\n      )}\n    </div>\n  );\n}\n\nexport function NodeDimensionsList({ rawDimensions }) {\n  const dimensions = Object.entries(\n    rawDimensions.reduce((group, dimension) => {\n      group[dimension.node_name + dimension.path] =\n        group[dimension.node_name + dimension.path] ?? [];\n      group[dimension.node_name + dimension.path].push(dimension);\n      return group;\n    }, {}),\n  );\n  return (\n    <div style={{ padding: '0.5rem' }}>\n      {dimensions.map(grouping => {\n        const dimensionsInGroup = grouping[1];\n        const role = dimensionsInGroup[0].path\n          .map(pathItem => pathItem.split('.').slice(-1))\n          .join(' → ');\n        const fullPath = dimensionsInGroup[0].path.join(' → ');\n        const groupHeader = (\n          <span\n            style={{\n              fontWeight: 'normal',\n              marginBottom: '15px',\n              marginTop: '15px',\n            }}\n          >\n            <a href={`/nodes/${dimensionsInGroup[0].node_name}`}>\n              <b>{dimensionsInGroup[0].node_display_name}</b>\n            </a>{' '}\n            with role{' '}\n            <span className=\"HighlightPath\">\n              <b>{role}</b>\n            </span>{' '}\n            via <span className=\"HighlightPath\">{fullPath}</span>\n          </span>\n        );\n        const dimensionGroupOptions = dimensionsInGroup.map(dim => {\n          return {\n            value: dim.name,\n            label:\n              labelize(dim.name.split('.').slice(-1)[0]) +\n              (dim.properties?.includes('primary_key') ? ' (PK)' : ''),\n          };\n        });\n        return (\n          <details key={grouping[0]}>\n            <summary style={{ marginBottom: '10px' }}>{groupHeader}</summary>\n            <div className=\"dimensionsList\">\n              {dimensionGroupOptions.map(dimension => {\n                return (\n                  <div key={dimension.value}>\n                    {dimension.label.split('[').slice(0)[0]} ⇢{' '}\n                    <code className=\"DimensionAttribute\">\n                      {dimension.value}\n                    </code>\n                  </div>\n                );\n              })}\n            </div>\n          </details>\n        );\n      })}\n    </div>\n  );\n}\n\nexport function NodeList({ nodes }) {\n  return nodes && nodes.length > 0 ? (\n    <ul className=\"backfills\">\n      {nodes?.map(node => {\n        // GraphQL returns uppercase types (e.g., \"SOURCE\"), CSS classes expect lowercase\n        const nodeType = node.type?.toLowerCase() || '';\n        return (\n          <li\n            className=\"backfill\"\n            style={{ marginBottom: '5px' }}\n            key={node.name}\n          >\n            <span\n              className={`node_type__${nodeType} badge node_type`}\n              style={{ marginRight: '5px' }}\n              role=\"dialog\"\n              aria-hidden=\"false\"\n              aria-label=\"NodeType\"\n            >\n              {nodeType}\n            </span>\n            <a href={`/nodes/${node.name}`}>{node.name}</a>\n          </li>\n        );\n      })}\n    </ul>\n  ) : (\n    <span style={{ display: 'block' }}>None</span>\n  );\n}\n","import * as React from 'react';\nimport { useParams } from 'react-router-dom';\nimport { useContext, useEffect, useState } from 'react';\nimport Tab from '../../components/Tab';\nimport NamespaceHeader from '../../components/NamespaceHeader';\nimport NodeInfoTab from './NodeInfoTab';\nimport NodeColumnTab from './NodeColumnTab';\nimport NodeDataFlowTab from './NodeDataFlowTab';\nimport NodeDimensionsTab from './NodeDimensionsTab';\nimport NodeHistory from './NodeHistory';\nimport NotebookDownload from './NotebookDownload';\nimport DJClientContext from '../../providers/djclient';\nimport NodeMaterializationTab from './NodeMaterializationTab';\nimport NodePreAggregationsTab from './NodePreAggregationsTab';\nimport ClientCodePopover from './ClientCodePopover';\nimport WatchButton from './WatchNodeButton';\nimport NodesWithDimension from './NodesWithDimension';\nimport NodeColumnLineage from './NodeLineageTab';\nimport EditIcon from '../../icons/EditIcon';\nimport ChartIcon from '../../icons/ChartIcon';\nimport AlertIcon from '../../icons/AlertIcon';\nimport LoadingIcon from '../../icons/LoadingIcon';\nimport NodeDependenciesTab from './NodeDependenciesTab';\nimport { useNavigate } from 'react-router-dom';\n\nexport function NodePage() {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const navigate = useNavigate();\n\n  const { name, tab } = useParams();\n\n  const [state, setState] = useState({\n    selectedTab: tab || 'info',\n  });\n\n  const [node, setNode] = useState(null);\n  // undefined = not yet known; NamespaceHeader reports the read-only verdict\n  // (git_only, flat/root shape, or git-deployed) once its config + sources load.\n  const [isReadOnly, setIsReadOnly] = useState(undefined);\n\n  const onClickTab = id => () => {\n    // Preview tab redirects to Query Planner instead of showing content\n    if (id === 'preview') {\n      const param = node?.type === 'cube' ? 'cube' : 'metrics';\n      navigate(`/planner?${param}=${encodeURIComponent(name)}`);\n      return;\n    }\n    navigate(`/nodes/${name}/${id}`);\n    setState({ selectedTab: id });\n  };\n\n  const buildTabs = tab => {\n    return tab.display ? (\n      <Tab\n        key={tab.id}\n        id={tab.id}\n        name={tab.name}\n        icon={tab.icon}\n        onClick={onClickTab(tab.id)}\n        selectedTab={state.selectedTab}\n      />\n    ) : null;\n  };\n\n  useEffect(() => {\n    const fetchData = async () => {\n      const data = await djClient.node(name);\n      if (data.message !== undefined) {\n        // Error response\n        setNode(data);\n        return;\n      }\n      setNode({ ...data });\n    };\n    fetchData().catch(console.error);\n  }, [djClient, name]);\n\n  const tabsList = node => {\n    return [\n      {\n        id: 'info',\n        name: 'Info',\n        display: true,\n      },\n      {\n        id: 'columns',\n        name: 'Columns',\n        display: node?.type !== 'metric',\n      },\n      {\n        id: 'data-flow',\n        name: 'Data Flow',\n        display: true,\n      },\n      {\n        id: 'dimensions',\n        name: 'Dimensions',\n        display: node?.type !== 'source',\n      },\n      {\n        id: 'history',\n        name: 'History',\n        display: true,\n      },\n      {\n        id: 'materializations',\n        name: 'Materializations',\n        display: node?.type !== 'source' && node?.type !== 'metric',\n      },\n      {\n        id: 'linked',\n        name: 'Linked Nodes',\n        display: node?.type === 'dimension',\n      },\n      {\n        id: 'lineage',\n        name: 'Lineage',\n        display: node?.type === 'metric',\n      },\n      {\n        id: 'dependencies',\n        name: 'Dependencies',\n        display: node?.type !== 'cube',\n      },\n      {\n        id: 'preview',\n        name: 'Preview →',\n        icon: <ChartIcon size={18} />,\n        display: node?.type === 'metric' || node?.type === 'cube',\n      },\n    ];\n  };\n  let tabToDisplay = null;\n\n  switch (state.selectedTab) {\n    case 'info':\n      tabToDisplay = node ? <NodeInfoTab node={node} /> : '';\n      break;\n    case 'columns':\n      tabToDisplay = (\n        <NodeColumnTab\n          node={node}\n          djClient={djClient}\n          readOnly={!!isReadOnly}\n        />\n      );\n      break;\n    case 'data-flow':\n      tabToDisplay = <NodeDataFlowTab djNode={node} />;\n      break;\n    case 'dimensions':\n      tabToDisplay = <NodeDimensionsTab djNode={node} />;\n      break;\n    case 'history':\n      tabToDisplay = <NodeHistory node={node} djClient={djClient} />;\n      break;\n    case 'materializations':\n      // Cube nodes use cube-specific materialization tab\n      // Other nodes (transform, metric, dimension) use pre-aggregations tab\n      tabToDisplay =\n        node?.type === 'cube' ? (\n          <NodeMaterializationTab node={node} djClient={djClient} />\n        ) : (\n          <NodePreAggregationsTab node={node} />\n        );\n      break;\n    case 'linked':\n      tabToDisplay = <NodesWithDimension node={node} djClient={djClient} />;\n      break;\n    case 'lineage':\n      tabToDisplay = <NodeColumnLineage djNode={node} djClient={djClient} />;\n      break;\n    case 'dependencies':\n      tabToDisplay = <NodeDependenciesTab node={node} djClient={djClient} />;\n      break;\n    default:\n      /* istanbul ignore next */\n      tabToDisplay = <NodeInfoTab node={node} />;\n  }\n\n  const buttonStyle = {\n    height: '28px',\n    padding: '0 10px',\n    fontSize: '12px',\n    border: '1px solid #e2e8f0',\n    borderRadius: '4px',\n    backgroundColor: '#ffffff',\n    color: '#475569',\n    cursor: 'pointer',\n    display: 'flex',\n    alignItems: 'center',\n    gap: '4px',\n    whiteSpace: 'nowrap',\n  };\n\n  const NodeButtons = () => {\n    return (\n      <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n        {isReadOnly === false && (\n          <button\n            style={buttonStyle}\n            onClick={() => navigate(`/nodes/${node?.name}/edit`)}\n          >\n            <EditIcon /> Edit\n          </button>\n        )}\n\n        <WatchButton node={node} buttonStyle={buttonStyle} />\n\n        <ClientCodePopover nodeName={name} buttonStyle={buttonStyle} />\n        {node?.type === 'cube' && (\n          <NotebookDownload node={node} buttonStyle={buttonStyle} />\n        )}\n      </div>\n    );\n  };\n\n  // @ts-ignore\n  return (\n    <div className=\"node__header\">\n      <NamespaceHeader\n        namespace={name.split('.').slice(0, -1).join('.')}\n        onReadOnlyChange={setIsReadOnly}\n      />\n      <div className=\"card\">\n        {node === undefined ? (\n          <div style={{ padding: '2rem', textAlign: 'center' }}>\n            <LoadingIcon />\n          </div>\n        ) : node?.message === undefined ? (\n          <div className=\"card-header\" style={{}}>\n            <div\n              style={{\n                display: 'flex',\n                flexDirection: 'row',\n                justifyContent: 'space-between',\n              }}\n            >\n              <h3\n                className=\"card-title align-items-start flex-column\"\n                style={{ display: 'inline-block' }}\n              >\n                <span\n                  className=\"card-label fw-bold text-gray-800\"\n                  role=\"dialog\"\n                  aria-hidden=\"false\"\n                  aria-label=\"DisplayName\"\n                >\n                  {node?.display_name}{' '}\n                  <span\n                    className={'node_type__' + node?.type + ' badge node_type'}\n                    role=\"dialog\"\n                    aria-hidden=\"false\"\n                    aria-label=\"NodeType\"\n                  >\n                    {node?.type}\n                  </span>\n                  {isReadOnly === true && (\n                    <span\n                      style={{\n                        display: 'inline-flex',\n                        alignItems: 'center',\n                        marginLeft: '4px',\n                        color: '#92400e',\n                        verticalAlign: 'middle',\n                        cursor: 'help',\n                      }}\n                      aria-label=\"ReadOnly\"\n                      title=\"Read-only — edits must go through git.\"\n                    >\n                      <svg\n                        xmlns=\"http://www.w3.org/2000/svg\"\n                        width=\"14\"\n                        height=\"14\"\n                        viewBox=\"0 0 24 24\"\n                        fill=\"none\"\n                        stroke=\"currentColor\"\n                        strokeWidth=\"2\"\n                        strokeLinecap=\"round\"\n                        strokeLinejoin=\"round\"\n                      >\n                        <rect\n                          x=\"3\"\n                          y=\"11\"\n                          width=\"18\"\n                          height=\"11\"\n                          rx=\"2\"\n                          ry=\"2\"\n                        />\n                        <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n                      </svg>\n                    </span>\n                  )}\n                </span>\n              </h3>\n              <NodeButtons />\n            </div>\n            <div>\n              <a\n                href={'/nodes/' + node?.name}\n                className=\"link-table\"\n                role=\"dialog\"\n                aria-hidden=\"false\"\n                aria-label=\"NodeName\"\n              >\n                {node?.name}\n              </a>\n              <span\n                className=\"rounded-pill badge bg-secondary-soft\"\n                style={{ marginLeft: '0.5rem' }}\n              >\n                {node?.version}\n              </span>\n            </div>\n            <div className=\"dj-tabs-bar\">{tabsList(node).map(buildTabs)}</div>\n            {tabToDisplay}\n          </div>\n        ) : node?.message !== undefined ? (\n          <div className=\"message alert\" style={{ margin: '20px' }}>\n            <AlertIcon />\n            Node `{name}` does not exist!\n          </div>\n        ) : (\n          ''\n        )}\n      </div>\n    </div>\n  );\n}\n"],"names":["ReactPropTypesSecret","ReactPropTypesSecret_1","require$$0","emptyFunction","emptyFunctionWithReset","factoryWithThrowingShims","shim","props","propName","componentName","location","propFullName","secret","err","getShim","ReactPropTypes","propTypesModule","hasElementType","hasMap","hasSet","hasArrayBuffer","equal","a","b","length","i","keys","it","reactFastCompare","error","invariant","condition","format","c","d","e","f","args","argIndex","browser","shallowequal","objA","objB","compare","compareContext","ret","keysA","keysB","bHasOwnProperty","idx","key","valueA","valueB","t","r","n","s","u","o","l","p","h","m","y","T","g","v","A","C","O","S","E","I","P","w","x","L","j","M","k","H","N","R","D","U","q","Y","B","K","_","z","F","G","W","lazyLoad","importFunc","selectorFunc","opts","lazyFactory","module","LazyComponent","lazy","jsx","Suspense","NamespacePage","MyWorkspacePage","OverviewPage","SystemMetricsExplorerPage","SettingsPage","NotificationsPage","NodePage","index","RevisionDiff","SQLBuilderPage","CubeBuilderPage","QueryPlannerPage","TagPage","LazyAddEditNodePage","AddEditNodePage","AddEditTagPage","NotFoundPage","Fragment","isMergeableObject","value","isNonNullObject","isSpecial","stringValue","isReactElement","canUseSymbol","REACT_ELEMENT_TYPE","emptyTarget","val","cloneUnlessOtherwiseSpecified","options","deepmerge","defaultArrayMerge","target","source","element","mergeObject","destination","sourceIsArray","targetIsArray","sourceAndTargetTypesMatch","array","prev","next","deepmerge_1","freeGlobal","freeSelf","root","Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","isOwn","tag","unmasked","result","objectToString","nullTag","undefinedTag","baseGetTag","overArg","func","transform","arg","getPrototype","isObjectLike","objectTag","funcProto","funcToString","objectCtorString","isPlainObject","proto","Ctor","isArray","keyList","hasProp","arrA","arrB","dateA","dateB","regexpA","regexpB","listCacheClear","eq","other","assocIndexOf","arrayProto","splice","listCacheDelete","data","lastIndex","listCacheGet","listCacheHas","listCacheSet","ListCache","entries","entry","stackClear","stackDelete","stackGet","stackHas","isObject","type","asyncTag","funcTag","genTag","proxyTag","isFunction","coreJsData","maskSrcKey","uid","isMasked","toSource","reRegExpChar","reIsHostCtor","reIsNative","baseIsNative","pattern","getValue","object","getNative","Map","nativeCreate","hashClear","hashDelete","HASH_UNDEFINED","hashGet","hashHas","hashSet","Hash","mapCacheClear","isKeyable","getMapData","map","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","size","MapCache","LARGE_ARRAY_SIZE","stackSet","pairs","Stack","arrayEach","iteratee","defineProperty","baseAssignValue","assignValue","objValue","copyObject","customizer","isNew","newValue","baseTimes","argsTag","baseIsArguments","propertyIsEnumerable","isArguments","stubFalse","freeExports","freeModule","moduleExports","Buffer","nativeIsBuffer","isBuffer","MAX_SAFE_INTEGER","reIsUint","isIndex","isLength","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","baseUnary","freeProcess","nodeUtil","types","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","isPrototype","nativeKeys","baseKeys","isArrayLike","baseAssign","nativeKeysIn","baseKeysIn","isProto","keysIn","baseAssignIn","allocUnsafe","cloneBuffer","buffer","isDeep","copyArray","arrayFilter","predicate","resIndex","stubArray","nativeGetSymbols","getSymbols","symbol","copySymbols","arrayPush","values","offset","getSymbolsIn","copySymbolsIn","baseGetAllKeys","keysFunc","symbolsFunc","getAllKeys","getAllKeysIn","DataView","Promise","Set","WeakMap","promiseTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ctorString","initCloneArray","Uint8Array","cloneArrayBuffer","arrayBuffer","cloneDataView","dataView","reFlags","cloneRegExp","regexp","symbolProto","symbolValueOf","cloneSymbol","cloneTypedArray","typedArray","symbolTag","initCloneByTag","objectCreate","baseCreate","initCloneObject","baseIsMap","nodeIsMap","isMap","baseIsSet","nodeIsSet","isSet","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","cloneableTags","baseClone","bitmask","stack","isFlat","isFull","isFunc","stacked","subValue","clone","arrayMap","isSymbol","FUNC_ERROR_TEXT","memoize","resolver","memoized","cache","MAX_MEMOIZE_SIZE","memoizeCapped","rePropName","reEscapeChar","stringToPath","string","match","number","quote","subString","toKey","symbolToString","baseToString","toString","toPath","reactIs_production_min","reactIsModule","reactIs","REACT_STATICS","KNOWN_STATICS","FORWARD_REF_STATICS","MEMO_STATICS","TYPE_STATICS","getStatics","component","getOwnPropertyNames","getOwnPropertySymbols","getOwnPropertyDescriptor","getPrototypeOf","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","descriptor","hoistNonReactStatics_cjs","cloneDeep","_extends","_inheritsLoose","subClass","superClass","_objectWithoutPropertiesLoose","excluded","sourceKeys","_assertThisInitialized","self","FormikContext","FormikProvider","FormikConsumer","useFormikContext","formik","useContext","isEmptyArray","obj","isInteger","isString","isEmptyChildren","children","Children","isPromise","getIn","def","path","setIn","res","resVal","pathArray","currentPath","currentObj","nextPath","setNestedObjectValues","visited","response","_i","_Object$keys","formikReducer","state","msg","isEqual","emptyErrors","emptyTouched","useFormik","_ref","_ref$validateOnChange","validateOnChange","_ref$validateOnBlur","validateOnBlur","_ref$validateOnMount","validateOnMount","isInitialValid","_ref$enableReinitiali","enableReinitialize","onSubmit","rest","initialValues","useRef","initialErrors","initialTouched","initialStatus","isMounted","fieldRegistry","useEffect","_React$useState","useState","setIteration","stateRef","dispatch","useCallback","action","runValidateHandler","field","resolve","reject","maybePromisedErrors","errors","actualException","runValidationSchema","validationSchema","schema","promise","validateYupSchema","yupToFormErrors","runSingleFieldLevelValidation","runFieldLevelValidations","fieldKeysWithValidation","fieldValidations","fieldErrorsList","curr","runAllValidations","_ref2","fieldErrors","schemaErrors","validateErrors","combinedErrors","arrayMerge","validateFormWithHighPriority","useEventCallback","resetForm","nextState","touched","status","dispatchFn","maybePromisedOnReset","imperativeMethods","validateField","name","maybePromise","registerField","_ref3","validate","unregisterField","setTouched","shouldValidate","willValidate","setErrors","setValues","resolvedValues","setFieldError","setFieldValue","executeChange","eventOrTextValue","maybePath","parsed","id","checked","multiple","getValueForCheckbox","getSelectedValues","handleChange","eventOrPath","event","setFieldTouched","executeBlur","_e$target","handleBlur","eventOrString","setFormikState","stateOrCb","setStatus","setSubmitting","isSubmitting","submitForm","isInstanceOfError","isActuallyValid","promiseOrUndefined","executeSubmit","_errors","handleSubmit","reason","handleReset","getFieldMeta","getFieldHelpers","getFieldProps","nameOrOptions","isAnObject","valueState","valueProp","is","dirty","useMemo","isValid","ctx","Formik","formikbag","render","innerRef","useImperativeHandle","createElement","yupError","_iterator","_isArray","_ref5","sync","context","normalizedValues","prepareDataForValidation","cloneRequested","shouldClone","el","currentValue","currentArrayOfValues","isValueInArray","useIsomorphicLayoutEffect","useLayoutEffect","fn","ref","_len","_key","useField","propsOrFieldName","fieldName","validateFn","fieldHelpers","Field","_useFormikContext","meta","legacyBag","asElement","_innerRef","_rest","Form","forwardRef","_action","connect","Comp","componentDisplayName","move","from","to","copy","copyArrayLike","swap","arrayLike","indexA","indexB","insert","replace","maxIndex","max","createAlterationHandler","alteration","defaultFunction","FieldArrayInner","_React$Component","_this","alterTouched","alterErrors","_this$props","prevState","updateErrors","updateTouched","fieldError","fieldTouched","arr","_proto","prevProps","tmp","arrayHelpers","_this$props2","_this$props2$formik","restOfFormik","Component","ErrorMessageImpl","touch","ErrorMessage","FastFieldInner","bag","FastField","logo","LoadingIcon","centered","content","jsxs","GitHubLoginButton","GoogleLoginButton","Cache","maxSize","SPLIT_REGEX","DIGIT_REGEX","LEAD_DIGIT_REGEX","SPEC_CHAR_REGEX","CLEAN_QUOTES_REGEX","MAX_CACHE_SIZE","pathCache","getCache","propertyExpr","split","normalizePath","safe","parts","len","segments","part","isQuoted","cb","thisArg","forEach","iter","isBracket","shouldBeQuoted","str","hasLeadingNumber","hasSpecialChars","reWords","words","join","camelCase","acc","snakeCase","tinyCase","toposortModule","edges","toposort","uniqueNodes","nodes","cursor","sorted","outgoingEdges","makeOutgoingEdges","nodesHash","makeNodesHash","edge","visit","node","predecessors","nodeRep","outgoing","child","errorToString","regExpToString","SYMBOL_REGEXP","printNumber","printSimpleValue","quoteStrings","typeOf","printValue","toArray","_Symbol$toStringTag","strReg","ValidationError","message","params","errorOrErrors","disableStack","innerErrors","mixed","originalValue","castMsg","date","boolean","tuple","spec","typeLen","isSchema","Condition","refs","config","then","otherwise","check","_branch","branch","builder","base","prefixes","Reference","prefix","getter","parent","isAbsent","createValidation","panic","test","skipAbsent","abortEarly","disableStackTrace","item","createError","overrides","_overrides$disableSta","nextParams","invalid","handleResult","validOrError","handleError","_result","lastPart","lastPartDebug","_part","isTuple","ReferenceSet","description","newItems","removeItems","src","seen","Schema$2","label","before","combined","mergedSpec","conditions","prevSchema","_options$strict","_options$abortEarly","_options$recursive","_options$disableStack","resolvedSchema","allowOptionality","formattedValue","formattedResult","rawValue","prevValue","_value","strict","initialTests","runOptions","fired","tests","panicOnce","nextOnce","count","nestedErrors","parentPath","originalParent","testOptions","_options$disableStack2","validated","_options$disableStack3","defaultValue","isStrict","nullable","optional","isExclusive","deps","dep","enums","valids","resolved","invalids","strip","list","Schema","method","alias","rEmail","rUrl","rUUID","isTrimmed","objStringTag","create$6","StringSchema","_raw","strValue","min","regex","excludeEmptyString","isoReg","toNumber","parseIsoDate","regexResult","struct","totalMinutesOffset","invalidDate","isDate","DateSchema","param","cast","limit","sortFields","fields","excludedEdges","excludes","addNode","depPath","findIndex","ii","_err$path","sortByKeyOrder","parseJson","deepPartial","partial","fieldSchema","nextArray","deepHas","last","unknown","known","defaultSort","create$3","ObjectSchema","_options$stripUnknown","intermediateValue","innerOptions","isChanged","prop","exists","fieldValue","inputValue","fieldSpec","recursive","objectErrors","nextFields","schemaOrRef","dft","_innerOptions","shape","additions","picked","remaining","fromGetter","newObj","noAllow","unknownKeys","allow","_innerOptions2","githubLoginURL","googleLoginURL","SignupSchema","Yup.object","Yup.string","SignupForm","setShowSignup","setError","handleBasicSignup","email","signupUsername","signupPassword","loginData","LoginSchema","LoginForm","handleBasicLogin","username","password","LoginPage","showSignup","HIDDEN_NAMESPACES","isHiddenNamespace","hidden","topLevelNamespaces","namespaces","ns","isGitRoot","_a","isTopLevel","buildNamespaceOptions","gitBacked","topLevel","byValue","groups","searchNamespaces","text","findHierarchyNode","hierarchy","found","immediateChildren","MARKER_TYPE_ARROW","DJ_URL","DJ_GQL","getDJUrl","_namespacesCache","_namespacesCacheAt","NAMESPACES_CACHE_TTL_MS","_djURL","QUERY_END_STATES","sleep","ms","DataJunctionAPI","namespace","byType","counts","nodeTypes","tags","editedBy","after","sortConfig","mode","ownedBy","statuses","missingDescription","hasMaterialization","orphanedDimension","search","query","_b","current","cubeMetrics","cubeDimensionObjects","cubeDimensions","druidMat","cubeMaterialization","_c","_d","_e","_f","_g","_h","metric","dimensions","filters","orderby","url","dimension","columns","rows","dimIdx","metricIdx","row","dateIdx","typeIdx","countIdx","byDateint","dateint","nodeType","col","attr","results","names","queryParams","display_name","primary_key","metric_direction","metric_unit","required_dimensions","custom_metadata","requestBody","significant_digits","owners","metrics","catalog","table","sourceNodeNamespace","nodeNames","cubeNames","nodeName","temporalPartitions","metricsQuery","stripped","dimsQuery","nmspce","force","now","metric_name","selection","metricSelection","dimensionSelection","useMaterialized","dialect","onProgress","pollInterval","submitResponse","errorData","pollResponse","attempt","retryResponse","retryResults","cube","namespaceNodes","column_names","columnName","attributes","attribute","dimensionName","dimensionNode","joinOn","joinType","joinCardinality","role","nodeColumn","dimensionColumn","signal","nodeLimit","tagLimit","user","tagName","tagNames","displayName","tagType","updates","partitionType","granularity","body","jobType","strategy","schedule","lookbackWindow","cubeName","runBackfill","materializationName","partitionValues","partitionValue","nodeVersion","entity_type","entity_name","activity_types","alert_types","clientId","preaggId","startDate","endDate","staleOnly","branchName","parentNamespace","branchNamespace","deleteGitBranch","commitMessage","title","payload","DJClientContext","React","secondaryButtonStyle","primaryButtonStyle","onSecondaryHover","onSecondaryOut","detectShape","buildGitConfigPayload","model","repository","defaultBranch","SplitFilter","onChange","option","active","GitSettingsModal","isOpen","onClose","onSave","onRemove","currentConfig","nodeCount","setSource","setModel","setRepository","setBranch","setDefaultBranch","saving","setSaving","success","setSuccess","handleClose","CreateBranchModal","onCreate","gitBranch","setBranchName","creating","setCreating","setResult","previewNamespace","branchSuffix","SyncToGitModal","onSync","repoPath","setCommitMessage","syncing","setSyncing","CreatePRModal","parentBranch","setTitle","setBody","progress","setProgress","getProgressText","isWorking","DeleteBranchModal","onDelete","setDeleteGitBranch","deleting","setDeleting","itemStyle","onItemOver","onItemOut","GitMenu","viewInGitUrl","onOpenSettings","onNewBranch","NamespaceHeader","onGitConfigLoaded","onReadOnlyChange","namespaceOptions","currentNamespace","djClient","sources","setSources","recentDeployments","setRecentDeployments","deploymentsDropdownOpen","setDeploymentsDropdownOpen","dropdownRef","gitConfig","setGitConfig","gitConfigLoading","setGitConfigLoading","parentGitConfig","setParentGitConfig","existingPR","setExistingPR","prLoading","setPrLoading","branches","setBranches","branchDropdownOpen","setBranchDropdownOpen","branchDropdownRef","nsSwitcherOpen","setNsSwitcherOpen","nsQuery","setNsQuery","nsSwitcherRef","showGitSettings","setShowGitSettings","showCreateBranch","setShowCreateBranch","showSyncToGit","setShowSyncToGit","showCreatePR","setShowCreatePR","showDeleteBranch","setShowDeleteBranch","deployments","branchNs","branchConfig","gitRootNs","parentConfig","branchList","pr","handleClickOutside","namespaceParts","isInBranch","branchScopeNamespace","handleSaveGitConfig","gitConfigOwnerNamespace","isBranch","handleRemoveGitConfig","gitRootNamespace","rootDefaultBranch","canCreateBranch","handleCreateBranch","handleSyncToGit","handleCreatePR","syncResult","handleDeleteBranch","gitShape","onSubBranch","isDefaultBranch","isReadOnly","isGitDeployed","isGitManaged","gitConfigOwnerConfig","repo","isLast","cumulative","href","isBranchCrumb","isCurrent","isGit","statusColor","commitUrl","detail","shortSha","repoBranch","editableBranch","gitUrl","buttonStyle","_typeof","toPrimitive","toPropertyKey","_defineProperty","ownKeys","_objectSpread2","_arrayWithHoles","_iterableToArrayLimit","_arrayLikeToArray","_unsupportedIterableToArray","arrayLikeToArray","_nonIterableRest","_slicedToArray","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","_objectWithoutProperties","objectWithoutPropertiesLoose","_excluded","useStateManager","_ref$defaultInputValu","defaultInputValue","_ref$defaultMenuIsOpe","defaultMenuIsOpen","_ref$defaultValue","propsInputValue","propsMenuIsOpen","propsOnChange","propsOnInputChange","propsOnMenuClose","propsOnMenuOpen","propsValue","restSelectProps","_useState","_useState2","stateInputValue","setStateInputValue","_useState3","_useState4","stateMenuIsOpen","setStateMenuIsOpen","_useState5","_useState6","stateValue","setStateValue","actionMeta","onInputChange","onMenuOpen","onMenuClose","menuIsOpen","_objectSpread","_classCallCheck","_defineProperties","_createClass","_setPrototypeOf","_inherits","setPrototypeOf","_getPrototypeOf","_isNativeReflectConstruct","_possibleConstructorReturn","assertThisInitialized","_createSuper","isNativeReflectConstruct","possibleConstructorReturn","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","_toConsumableArray","arrayWithoutHoles","iterableToArray","nonIterableSpread","sheetForTag","createStyleElement","StyleSheet","rule","sheet","_tag$parentNode","MS","MOZ","WEBKIT","COMMENT","RULESET","DECLARATION","IMPORT","KEYFRAMES","LAYER","abs","assign","hash","charat","trim","replacement","indexof","substr","begin","end","strlen","sizeof","append","combine","callback","line","column","position","character","characters","char","peek","caret","slice","token","alloc","dealloc","delimit","delimiter","whitespace","escaping","commenter","identifier","compile","parse","rules","rulesets","pseudo","points","declarations","atrule","property","previous","variable","scanning","ampersand","reference","comment","declaration","ruleset","post","serialize","output","stringify","middleware","collection","rulesheet","identifierWithPointTracking","toRules","getRules","fixedElements","compat","isImplicitRule","parentRules","removeLabel","prefixer","defaultStylisPlugins","createCache","ssrStyles","dataEmotionAttribute","stylisPlugins","inserted","container","nodesToHydrate","attrib","_insert","omnipresentPlugins","currentSheet","finalizingPlugins","serializer","stylis","styles","selector","serialized","shouldCache","isBrowser","getRegisteredStyles","registered","registeredStyles","classNames","rawClassName","className","registerStyles","isStringTag","insertStyles","murmur2","unitlessKeys","hyphenateRegex","animationRegex","isCustomProperty","isProcessableValue","processStyleName","styleName","processStyleValue","p1","p2","unitless","handleInterpolation","mergedProps","interpolation","componentSelector","keyframes","serializedStyles","createStringFromObject","previousCursor","asString","interpolated","labelPattern","serializeStyles","stringMode","strings","asTemplateStringsArr","templateStringsArr","identifierName","hashString","syncFallback","create","useInsertionEffect","useInsertionEffectAlwaysWithSyncFallback","EmotionCacheContext","withEmotionCache","ThemeContext","hasOwn","typePropName","createEmotionProps","newProps","Insertion","Emotion","cssProp","WrappedComponent","_key2","Emotion$1","argsLength","createElementArgArray","_jsx","JSX","css","insertable","_taggedTemplateLiteral","round","floor","createCoords","rectToClientRect","rect","width","height","hasWindow","getNodeName","isNode","getWindow","_node$ownerDocument","getDocumentElement","isElement","isHTMLElement","isShadowRoot","invalidOverflowDisplayValues","isOverflowElement","overflow","overflowX","overflowY","display","getComputedStyle","isWebKit","lastTraversableNodeNames","isLastTraversableNode","getParentNode","getNearestOverflowAncestor","parentNode","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","getComputedStyle$1","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","domElement","$","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","offsetParent","clientRect","scale","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","left","top","rectsAreEqual","observeMove","onMove","io","timeoutId","cleanup","_io","refresh","skip","threshold","elementRectForRootMargin","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","ratio","autoUpdate","floating","update","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","ancestor","cleanupIo","reobserveFrame","resizeObserver","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","_excluded$3","noop","applyPrefixToName","classNameList","cleanValue","cleanCommonProps","innerProps","getStyleProps","classNamesState","cx","getStyles","getClassNames","handleInputChange","_newValue","isDocumentElement","normalizedHeight","getScrollTop","scrollTo","getScrollParent","style","excludeStaticParent","overflowRx","easeOutCubic","animatedScrollTo","duration","start","change","increment","currentTime","animateScroll","scrollIntoView","menuEl","focusedEl","menuRect","focusedRect","overScroll","getBoundingClientObj","isTouchCapable","isMobileDevice","passiveOptionAccessed","supportsPassiveEvents","notNullish","valueTernary","isMulti","multiValue","singleValue","removeProps","propsObj","_len2","properties","propsMap","_ref4","getMenuPlacement","preferredMaxHeight","minHeight","preferredPlacement","shouldScroll","isFixedPosition","controlHeight","scrollParent","defaultState","_scrollParent$getBoun","scrollHeight","_menuEl$getBoundingCl","menuBottom","menuHeight","menuTop","_menuEl$offsetParent$","containerTop","viewHeight","scrollTop","marginBottom","marginTop","viewSpaceAbove","viewSpaceBelow","scrollSpaceAbove","scrollSpaceBelow","scrollDown","scrollUp","scrollDuration","constrainedHeight","_constrainedHeight","spaceAbove","_constrainedHeight2","alignToControl","placement","placementToCSSProp","coercePlacement","menuCSS","unstyled","_ref2$theme","borderRadius","spacing","colors","PortalPlacementContext","MenuPlacer","minMenuHeight","maxMenuHeight","menuPlacement","menuPosition","menuShouldScrollIntoView","theme","setPortalPlacement","maxHeight","setMaxHeight","setPlacement","Menu","Menu$1","menuListCSS","baseUnit","MenuList","noticeCSS","_ref5$theme","noOptionsMessageCSS","loadingMessageCSS","NoOptionsMessage","LoadingMessage","menuPortalCSS","_ref6","MenuPortal","appendTo","controlElement","menuPortalRef","cleanupRef","portalPlacementContext","_useState7","_useState8","computedPosition","setComputedPosition","updateComputedPosition","scrollDistance","runAutoUpdate","setMenuPortalElement","menuPortalElement","menuWrapper","createPortal","containerCSS","isDisabled","isRtl","SelectContainer","valueContainerCSS","hasValue","controlShouldRenderValue","ValueContainer","indicatorsContainerCSS","IndicatorsContainer","_templateObject","_excluded$2","Svg","CrossIcon","DownChevron","baseCSS","isFocused","_ref3$theme","dropdownIndicatorCSS","DropdownIndicator","clearIndicatorCSS","ClearIndicator","indicatorSeparatorCSS","_ref4$theme","IndicatorSeparator","loadingDotAnimations","loadingIndicatorCSS","LoadingDot","delay","css$2","LoadingIndicator","css$1","_ref$theme","Control","Control$1","_excluded$1","groupCSS","Group","Heading","headingProps","selectProps","groupHeadingCSS","GroupHeading","_cleanCommonProps","Group$1","inputCSS","containerStyle","spacingStyle","inputStyle","isHidden","Input","inputClassName","Input$1","multiValueCSS","multiValueLabelCSS","cropWithEllipsis","multiValueRemoveCSS","MultiValueGeneric","MultiValueContainer","MultiValueLabel","MultiValueRemove","MultiValue","components","Container","Label","Remove","MultiValue$1","optionCSS","isSelected","Option","Option$1","placeholderCSS","Placeholder","Placeholder$1","SingleValue","SingleValue$1","defaultComponents","safeIsNaN","first","second","areInputsEqual","newInputs","lastInputs","memoizeOne","resultFn","newArgs","lastResult","A11yText","A11yText$1","defaultAriaLiveMessages","isSearchable","tabSelectsValue","_props$label","labels","focused","_props$label2","selectValue","getArrayIndex","disabled","resultsMessage","LiveRegion","ariaSelection","focusedOption","focusedValue","focusableOptions","ariaLiveMessages","getOptionLabel","isOptionDisabled","screenReaderStatus","ariaLabel","ariaLive","messages","ariaSelected","selectedOptions","removedValue","removedValues","asOption","selected","multiSelected","onChangeProps","ariaFocused","focusMsg","onFocusProps","ariaResults","resultsMsg","ariaGuidance","guidanceMsg","ariaContext","ScreenReaderText","isInitialFocus","LiveRegion$1","diacritics","anyDiacritic","diacriticToBase","diacritic","stripDiacritics","memoizedStripDiacriticsForInput","trimString","defaultStringify","createFilter","rawInput","_ignoreCase$ignoreAcc","ignoreCase","ignoreAccents","matchFrom","input","candidate","DummyInput","filteredProps","cancelScroll","useScrollCapture","isEnabled","onBottomArrive","onBottomLeave","onTopArrive","onTopLeave","isBottom","isTop","touchStart","scrollTarget","handleEventDelta","delta","_scrollTarget$current","clientHeight","isDeltaPositive","availableScroll","shouldCancelScroll","onWheel","onTouchStart","onTouchMove","deltaY","startListening","notPassive","stopListening","STYLE_KEYS","LOCK_STYLES","preventTouchMove","allowTouchMove","preventInertiaScroll","totalScroll","currentScroll","isTouchDevice","canUseDOM","activeScrollLocks","listenerOptions","useScrollLock","_ref$accountForScroll","accountForScrollbars","originalStyles","addScrollLock","touchScrollTarget","targetStyle","currentPadding","clientWidth","adjustedPadding","removeScrollLock","blurSelectInput","_ref2$1","ScrollManager","lockEnabled","_ref$captureEnabled","captureEnabled","setScrollCaptureTarget","setScrollLockTarget","targetRef","RequiredInput","onFocus","RequiredInput$1","formatGroupLabel","group","getOptionLabel$1","getOptionValue$1","defaultStyles","menuGutter","defaultTheme","defaultProps","toCategorizedOption","_isOptionDisabled","_isOptionSelected","getOptionValue","buildCategorizedOptions","groupOrOption","groupOrOptionIndex","categorizedOptions","optionIndex","categorizedOption","isFocusable","buildFocusableOptionsFromCategorizedOptions","optionsAccumulator","buildFocusableOptions","_props$inputValue","shouldHideSelectedOptions","_filterOption","getNextFocusedValue","nextSelectValue","lastSelectValue","lastFocusedIndex","nextFocusedIndex","getNextFocusedOption","lastFocusedOption","hideSelectedOptions","instanceId","Select","_Component","_super","_props","closeMenuOnSelect","_this$props3","blurInputOnSelect","deselected","newValueArray","lastSelectedValue","custom","_this$props$className","_this$props$className2","openMenuOnClick","_this$props4","touches","deltaX","moveThreshold","prevInputValue","_this$props5","backspaceRemovesValue","escapeClearsValue","isClearable","onKeyDown","openMenuOnFocus","_this$state","_this$props6","focusOption","_this2","_this$state2","openAtIndex","selectedIndex","direction","_this$state3","focusedIndex","nextFocus","pageSize","clearValue","selectOption","setValue","_this$props7","_inputValue","_selectValue","_this$props8","inputId","tabIndex","form","required","_this$getComponents","_this$state4","inputIsHidden","commonProps","ariaAttributes","_this3","_this$getComponents2","_this$props9","placeholder","_this$state5","opt","isOptionFocused","_this$getComponents3","_this$props10","isLoading","_this$getComponents4","_this$props11","_this$getComponents5","_this$getComponents6","_this4","_this$getComponents7","_this$props12","captureMenuScroll","loadingMessage","menuPortalTarget","menuShouldBlockScroll","noOptionsMessage","onMenuScrollToTop","onMenuScrollToBottom","onHover","onSelect","optionId","menuUI","_data","groupIndex","groupId","headingId","_message","menuPlacementProps","menuElement","_ref4$placerProps","scrollTargetRef","instance","_this5","_this$props13","_this$state6","_this$getComponents8","_this$props14","clearFocusValueOnUpdate","inputIsHiddenAfterUpdate","prevWasFocused","newMenuOptionsState","newInputIsHiddenState","newAriaSelection","hasKeptFocus","StateManagedSelect","baseSelectProps","StateManagedSelect$1","FormikSelect","selectOptions","formikFieldName","customOnChange","helpers","getSelectValue","ValidIcon","AlertIcon","displayMessageAfterSubmit","labelize","RegisterTablePage","catalogs","setCatalogs","validator","json","DJLogo","DEBOUNCE_MS","MIN_QUERY_LENGTH","CACHE_MAX_ENTRIES","CACHE_TTL_MS","truncate","Search","searchValue","setSearchValue","setNodes","setTags","setIsLoading","abortRef","debounceRef","inputRef","cacheRef","readCache","writeCache","oldest","runSearch","cached","controller","trimmed","hasResults","UserContext","createContext","UserProvider","currentUser","setCurrentUser","loading","setLoading","fetchUser","useCurrentUser","NotificationIcon","SettingsIcon","formatRelativeTime","dateString","diffMs","diffMins","diffHours","diffDays","getDateGroup","today","yesterday","thisWeekStart","lastWeekStart","dateOnly","groupByDate","items","dateField","order","calculateUnreadCount","notifs","lastViewed","lastViewedDate","enrichWithNodeInfo","nodeMap","NotificationBell","onDropdownToggle","forceClose","userLoading","showDropdown","setShowDropdown","notifications","setNotifications","unreadCount","setUnreadCount","fetchNotifications","history","enriched","handleToggle","willOpen","version","getInitials","UserMenu","handleLogout","defaultDocsSites","docsSites","Root","openDropdown","setOpenDropdown","Helmet","Outlet","parse_1","serialize_1","decode","encode","fieldContentRegExp","dec","pair","tryDecode","enc","maxAge","sameSite","hasDocumentCookie","parseCookies","cookies","cookie.parse","isParsingCookie","doNotParse","readCookie","cleanupCookieValue","__assign","Cookies","parseOptions","name_1","cookie.serialize","finalOptions","CookiesContext","Provider","__extends","extendStatics","__","CookiesProvider","isInBrowser","useCookies","dependencies","initialCookies","allCookies","setCookies","previousCookiesRef","newCookies","shouldUpdate","setCookie","removeCookie","oldCookies","dependencies_1","dependency","LOGGED_IN_FLAG_COOKIE","GB","SCAN_WARNING_THRESHOLD_GB","SCAN_CRITICAL_THRESHOLD_GB","SCAN_WARNING_THRESHOLD","SCAN_CRITICAL_THRESHOLD","DJ_CONTEXT_VALUE","App","Constants.LOGGED_IN_FLAG_COOKIE","BrowserRouter","Routes","Route","Tab","onClick","selectedTab","isActive","powerSetPermutations","arrLength","classNameCombinations","getClassNameCombinations","createStyleObject","elementStyle","stylesheet","nonTokenClassNames","classNamesCombinations","styleObject","createClassNameString","createChildren","useInlineStyles","childrenCount","_ref$style","TagName","childrenCreator","allStylesheetSelectors","classes","startingClassName","checkForListedLanguage","astGenerator","language","langs","newLineRegex","getNewLines","getAllLineNumbers","lines","startingLineNumber","AllLineNumbers","codeString","codeStyle","_ref2$containerStyle","_ref2$numberStyle","numberStyle","getEmWidthOfNumber","num","getInlineLineNumber","lineNumber","inlineLineNumberStyle","assembleLineNumberStyles","lineNumberStyle","largestLineNumber","defaultLineNumberStyle","customLineNumberStyle","assembledStyle","createLineElement","showInlineLineNumbers","_ref3$lineProps","lineProps","_ref3$className","showLineNumbers","wrapLongLines","_ref3$wrapLines","wrapLines","flattenCodeTree","tree","newTree","processLines","codeTree","lastLineBreakIndex","createWrappedLine","createUnwrappedLine","createLine","_loop","newLines","splitValue","newChild","_children","_line","stringChild","lastLineInPreviousSpan","newElem","_children2","_line2","_children3","_line3","defaultRenderer","isHighlightJs","getCodeTree","code","defaultCodeValue","hasLanguage","highlight$2","defaultAstGenerator","defaultStyle","_ref7","_code$match$length","_code$match","_ref7$style","_ref7$customStyle","customStyle","_ref7$codeTagProps","codeTagProps","_ref7$useInlineStyles","_ref7$showLineNumbers","_ref7$showInlineLineN","_ref7$startingLineNum","lineNumberContainerStyle","_ref7$lineNumberStyle","_ref7$wrapLongLines","_ref7$lineProps","renderer","_ref7$PreTag","PreTag","_ref7$CodeTag","CodeTag","_ref7$code","allLineNumbers","defaultPreStyle","generatorClassName","preProps","lineBreakCount","deepFreeze","deepFreezeEs6","_default","Response","escapeHTML","inherit","original","objects","SPAN_CLOSE","emitsWrappingTags","HTMLRenderer","parseTree","TokenTree","kind","TokenTreeEmitter","emitter","escape","re","concat","either","countMatchGroups","startsWith","lexeme","BACKREF_RE","regexps","separator","numCaptures","out","MATCH_NOTHING_RE","IDENT_RE","UNDERSCORE_IDENT_RE","NUMBER_RE","C_NUMBER_RE","BINARY_NUMBER_RE","RE_STARTERS_RE","SHEBANG","beginShebang","resp","BACKSLASH_ESCAPE","APOS_STRING_MODE","QUOTE_STRING_MODE","PHRASAL_WORDS_MODE","modeOptions","C_LINE_COMMENT_MODE","C_BLOCK_COMMENT_MODE","HASH_COMMENT_MODE","NUMBER_MODE","C_NUMBER_MODE","BINARY_NUMBER_MODE","CSS_NUMBER_MODE","REGEXP_MODE","TITLE_MODE","UNDERSCORE_TITLE_MODE","METHOD_GUARD","END_SAME_AS_BEGIN","MODES","skipIfhasPrecedingDot","beginKeywords","compileIllegal","_parent","compileMatch","compileRelevance","COMMON_KEYWORDS","DEFAULT_KEYWORD_CLASSNAME","compileKeywords","rawKeywords","caseInsensitive","compiledKeywords","compileList","keywordList","keyword","scoreForKeyword","providedScore","commonKeyword","compileLanguage","plugins","langRe","global","MultiRegex","terminators","matchData","ResumableMultiRegex","matcher","m2","buildModeRegex","mm","term","compileMode","cmode","ext","keywordPattern","expandOrCloneMode","dependencyOnParent","variant","hasValueOrEmptyAttribute","BuildVuePlugin","hljs","Vue","mergeHTMLPlugin","originalStream","nodeStream","resultNode","mergeStreams","_nodeStream","highlighted","processed","nodeStack","selectStream","open","attributeString","close","stream","seenDeprecations","warn","deprecated","escape$1","inherit$1","NO_MATCH","HLJS","languages","aliases","SAFE_MODE","fixMarkupRe","LANGUAGE_NOT_FOUND","PLAINTEXT_LANGUAGE","shouldNotHighlight","languageName","blockLanguage","block","getLanguage","_class","highlight","codeOrlanguageName","optionsOrCode","ignoreIllegals","continuation","fire","_highlight","codeToHighlight","keywordData","matchText","processKeywords","modeBuffer","buf","keywordRelevance","relevance","cssClass","processSubLanguage","continuations","highlightAuto","processBuffer","startNewMode","endOfMode","matchPlusRemainder","matched","doIgnore","resumeScanAtSamePosition","doBeginMatch","newMode","beforeCallbacks","doEndMatch","endMode","origin","processContinuations","lastMatch","processLexeme","textBeforeMatch","iterations","md","beforeMatch","processedCount","justTextHighlightResult","languageSubset","plaintext","autoDetection","best","secondBest","fixMarkup","html","updateClassName","currentLang","resultLang","brPlugin","TAB_REPLACE_RE","tabReplacePlugin","highlightElement","configure","userOptions","initHighlighting","initHighlightingOnLoad","wantsHighlight","highlightAll","boot","registerLanguage","languageDefinition","lang","error$1","registerAliases","unregisterLanguage","listLanguages","requireLanguage","aliasList","upgradePluginAPI","plugin","addPlugin","deprecateFixMarkup","deprecateHighlightBlock","core","vsprintf","printf","fmt","replacements","escaped","leadingZero","precision","nextArg","slurpNumber","digits","formatter","fault","fault_1","EConstructor","FormattedError","high","require$$1","registerAlias","Emitter","addKeyword","addSublanguage","toHtmlNoop","defaultPrefix","settings","subset","syntax","tail","sql","COMMENT_MODE","STRING","QUOTED_IDENTIFIER","LITERALS","MULTI_WORD_TYPES","TYPES","NON_RESERVED_WORDS","RESERVED_WORDS","RESERVED_FUNCTIONS","POSSIBLE_WITHOUT_PARENS","COMBOS","FUNCTIONS","KEYWORDS","VARIABLE","OPERATOR","FUNCTION_CALL","reduceRelevancy","exceptions","when","qualifyFn","sql_1","SyntaxHighlighter","lowlight","foundation","InvalidIcon","Tooltip","maxWidth","visible","setVisible","tooltipId","useId","show","hide","NodeStatus","revalidate","showLabel","validLabel","invalidLabel","validTooltip","invalidTooltip","validation","setValidation","codeAnchor","setCodeAnchor","displayValidation","badge","nameRe","nameReJsx","emptyOptions","thing","empty","Schema$1","normal","space","merge","definitions","definition","normalize","Info","powers","booleanish","overloadedBoolean","spaceSeparated","commaSeparated","commaOrSpaceSeparated","checks","DefinedInfo","mask","mark","normals","info","aria","caseSensitiveTransform","caseInsensitiveTransform","svg","xlink","xmlns","xml","hastToReact","cap","dash","valid","find","Type","camelcase","dashes","kebab","$0","htmlBase","svgBase","COMMENT_REGEX","NEWLINE_REGEX","WHITESPACE_REGEX","PROPERTY_REGEX","COLON_REGEX","VALUE_REGEX","SEMICOLON_REGEX","TRIM_REGEX","NEWLINE","FORWARD_SLASH","ASTERISK","EMPTY_STRING","TYPE_COMMENT","TYPE_DECLARATION","lineno","updatePosition","Position","comments","pos","decls","decl","cjs","__importDefault","this","mod","StyleToObject","inline_style_parser_1","iterator","hasIterator","utilities","CUSTOM_PROPERTY_REGEX","HYPHEN_REGEX","NO_HYPHEN_REGEX","VENDOR_PREFIX_REGEX","MS_VENDOR_PREFIX_REGEX","skipCamelCase","capitalize","trimHyphen","style_to_object_1","utilities_1","StyleToJS","pointEnd","point","pointStart","stringifyPosition","VFileMessage","causeOrReason","optionsOrParentOrPlace","legacyCause","own","emptyMap","tableElements","tableCellElement","docs","toJsxRuntime","filePath","developmentCreate","productionCreate","one","mdxExpression","mdxJsxElement","mdxEsm","parentSchema","findComponentFromName","createElementProps","addChildren","expression","assert","crashEstree","createJsxElementProps","jsxDEV","isStaticChildren","alignValue","createProperty","objectExpression","countsByName","commas","spaces","parseStyle","transformStylesToCssCasing","styleToJs","cause","allowExpression","identifiers","isIdentifierName","place","domCasing","cssCasing","transformStyleToCssCasing","toDash","urlAttributes","includeImageAlt","includeHtml","all","decodeNamedCharacterReference","characterReference","remove","chunkStart","parameters","push","combineExtensions","extensions","syntaxExtension","extension","hook","right","constructs","existing","decodeNumericCharacterReference","normalizeIdentifier","asciiAlpha","regexCheck","asciiAlphanumeric","asciiAtext","asciiControl","asciiDigit","asciiHexDigit","asciiPunctuation","markdownLineEnding","markdownLineEndingOrSpace","markdownSpace","unicodePunctuation","unicodeWhitespace","normalizeUri","factorySpace","effects","ok","initializeContent","contentStart","afterContentStartConstruct","paragraphInitial","lineStart","document","initializeDocument","containerConstruct","tokenizeContainer","continued","childFlow","childToken","lineStartOffset","documentContinue","checkNewContainers","closeFlow","indexBeforeExits","indexBeforeFlow","exitContainers","documentContinued","flowStart","thereIsANewContainer","thereIsNoNewContainer","containerContinue","flowContinue","writeToChild","endOfFile","nok","classifyCharacter","resolveAll","events","called","attention","resolveAllAttention","tokenizeAttention","openingSequence","closingSequence","use","nextEvents","movePoint","attentionMarkers","marker","inside","autolink","tokenizeAutolink","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","blankLine","tokenizeBlankLine","blockQuote","tokenizeBlockQuoteContinuation","exit","tokenizeBlockQuoteStart","contStart","contBefore","characterEscape","tokenizeCharacterEscape","tokenizeCharacterReference","numeric","nonLazyContinuation","tokenizeNonLazyContinuation","codeFenced","tokenizeCodeFenced","closeStart","tokenizeCloseStart","initialPrefix","sizeOpen","beforeSequenceOpen","sequenceOpen","infoBefore","atNonLazyBreak","metaBefore","contentBefore","beforeContentChunk","contentChunk","startBefore","beforeSequenceClose","sequenceClose","sequenceCloseAfter","codeIndented","tokenizeCodeIndented","furtherStart","tokenizeFurtherStart","afterPrefix","atBreak","codeText","resolveCodeText","tokenizeCodeText","tailExitIndex","headEnterIndex","enter","between","SpliceBuffer","initial","stop","deleteCount","removed","chunkedPush","subtokenize","eventsArray","jumps","lineIndex","otherIndex","otherEvent","subevents","more","subcontent","eventIndex","startPosition","startPositions","tokenizer","childEvents","gaps","adjust","breaks","resolveContent","tokenizeContent","continuationConstruct","tokenizeContinuation","chunkInside","contentEnd","contentContinue","startLookahead","prefixed","factoryDestination","literalType","literalMarkerType","rawType","stringType","balance","enclosedBefore","raw","enclosed","enclosedEscape","rawEscape","factoryLabel","markerType","labelInside","labelEscape","factoryTitle","factoryWhitespace","tokenizeDefinition","titleBefore","tokenizeTitleBefore","labelAfter","markerAfter","destinationBefore","destinationAfter","afterWhitespace","beforeMarker","titleAfter","titleAfterOptionalWhitespace","hardBreakEscape","tokenizeHardBreakEscape","headingAtx","resolveHeadingAtx","tokenizeHeadingAtx","sequenceFurther","htmlBlockNames","htmlRawNames","htmlFlow","resolveToHtmlFlow","tokenizeHtmlFlow","blankLineBefore","tokenizeBlankLineBefore","nonLazyContinuationStart","tokenizeNonLazyContinuationStart","closingTag","markerB","declarationOpen","tagCloseStart","continuationDeclarationInside","commentOpenInside","cdataOpenInside","slash","basicSelfClosing","completeClosingTagAfter","completeAttributeNameBefore","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCdataInside","continuationAfter","continuationStart","continuationStartNonLazy","continuationBefore","continuationRawEndTag","htmlText","tokenizeHtmlText","returnState","instruction","tagOpen","commentEnd","commentClose","lineEndingBefore","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","lineEndingAfter","lineEndingAfterPrefix","labelEnd","resolveAllLabelEnd","resolveToLabelEnd","tokenizeLabelEnd","resourceConstruct","tokenizeResource","referenceFullConstruct","tokenizeReferenceFull","referenceCollapsedConstruct","tokenizeReferenceCollapsed","newEvents","media","labelStart","defined","labelEndNok","labelEndOk","referenceNotFull","resourceStart","resourceBefore","resourceOpen","resourceEnd","resourceDestinationAfter","resourceDestinationMissing","resourceBetween","resourceTitleAfter","referenceFull","referenceFullAfter","referenceFullMissing","referenceCollapsedStart","referenceCollapsedOpen","labelStartImage","tokenizeLabelStartImage","labelStartLink","tokenizeLabelStartLink","lineEnding","tokenizeLineEnding","thematicBreak","tokenizeThematicBreak","sequence","tokenizeListContinuation","tokenizeListEnd","tokenizeListStart","listItemPrefixWhitespaceConstruct","tokenizeListItemPrefixWhitespace","indentConstruct","tokenizeIndent","initialSize","atMarker","onBlank","endOfPrefix","otherPrefix","notBlank","notInCurrentItem","setextUnderline","resolveToSetextUnderline","tokenizeSetextUnderline","heading","paragraph","flow","initializeFlow","atBlankEnding","afterConstruct","createResolver","initializeFactory","resolveAllLineSuffixes","initializeText","notText","extraResolver","resolveAllText","chunks","bufferIndex","tabs","chunk","contentInitial","flowInitial","insideSpan","resolveText","disable","createTokenizer","parser","initialize","columnStart","resolveAllConstructs","constructFactory","onsuccessfulconstruct","onsuccessfulcheck","consume","defineSkip","sliceSerialize","sliceStream","write","main","addResult","expandTabs","serializeChunks","sliceChunks","_bufferIndex","_index","accountForPotentialSkip","chunkIndex","go","construct","onreturn","bogusState","listOfConstructs","constructIndex","currentConstruct","handleListOfConstructs","handleMapOfConstructs","handleConstruct","store","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","restore","startIndex","startBufferIndex","endIndex","endBufferIndex","view","head","atTab","defaultConstructs","creator","postprocess","preprocess","atCarriageReturn","preprocessor","encoding","endPosition","characterEscapeOrReference","decodeString","$1","$2","hex","fromMarkdown","compiler","opener","link","onenterdata","codeFlow","emphasis","hardBreak","image","listItem","onenterlistitemvalue","onenterlistordered","onenterreference","strong","closer","onexitatxheadingsequence","onexitautolinkemail","onexitautolinkprotocol","onexitdata","onexitcharacterreferencemarker","onexitcharacterreferencevalue","onexitcharacterreference","onexitcodefenced","onexitcodefencedfence","onexitcodefencedfenceinfo","onexitcodefencedfencemeta","onexitcodeindented","onexitcodetext","onexitdefinitiondestinationstring","onexitdefinitionlabelstring","onexitdefinitiontitlestring","onexithardbreak","onexithtmlflow","onexithtmltext","onexitimage","onexitlabel","onexitlabeltext","onexitlineending","onexitlink","onexitreferencestring","onexitresourcedestinationstring","onexitresourcetitlestring","onexitresource","onexitsetextheading","onexitsetextheadinglinesequence","onexitsetextheadingtext","resume","listStack","prepareList","handler","defaultOnError","containerBalance","listSpread","firstBlankLineIndex","tailIndex","tailEvent","and","errorHandler","onExitError","depth","siblings","referenceType","fragment","remarkParse","doc","blockquote","strikethrough","footnoteReference","clobberPrefix","safeId","counter","reuseCounter","sup","revert","subtype","suffix","contents","imageReference","inlineCode","linkReference","loose","listLoose","listItemLoose","spread","firstRow","tableContent","tableRow","align","cellIndex","cells","cell","tableCell","tab","trimLines","trimLine","handlers","ignore","VOID","PRIMITIVE","ARRAY","OBJECT","DATE","REGEXP","MAP","SET","ERROR","BIGINT","env","deserializer","as","unpair","flags","set","deserialize","EMPTY","shouldSkip","TYPE","lossy","structuredClone$1","any","defaultFootnoteBackContent","rereferenceIndex","defaultFootnoteBackLabel","referenceIndex","footer","footnoteBackContent","footnoteBackLabel","footnoteLabel","footnoteLabelTagName","footnoteLabelProperties","listItems","backReferences","tailTail","structuredClone","convert","castFactory","anyFactory","propertiesFactory","typeFactory","checkAsRecord","nodeAsRecord","testFunction","looksLikeANode","CONTINUE","EXIT","SKIP","visitParents","visitor","reverse","step","factory","parents","subresult","grandparents","toResult","nodeAsParent","testOrVisitor","visitorOrReverse","maybeReverse","overload","createState","definitionById","footnoteById","footnoteCounts","defaultHandlers","applyData","patch","wrap","handle","shallow","defaultUnknownHandler","trimMarkdownSpaceStart","hName","hChildren","hProperties","toHast","foot","remarkRehype","file","hastTree","bail","toStr","gOPD","hasOwnConstructor","hasIsPrototypeOf","setProperty","getProperty","extend","copyIsArray","deep","prototype","trough","fns","pipeline","run","middlewareIndex","middelware","wrapped","fnExpectsCallback","done","exception","minpath","basename","dirname","extname","assertPath","seenNonSlash","firstNonSlashEnd","extnameIndex","unmatchedSlash","startPart","startDot","preDotState","joined","absolute","normalizeString","allowAboveRoot","lastSegmentLength","lastSlash","dots","lastSlashIndex","minproc","cwd","isUrl","fileUrlOrPath","urlToPath","getPathFromURLPosix","pathname","third","VFile","isUint8Array","assertNonEmpty","assertPart","stem","CallableInstance","apply","Processor","attacher","assertUnfrozen","transformer","realFile","vfile","assertParser","assertCompiler","executor","realDone","compileTree","compileResult","looksLikeAValue","complete","assertDone","assertNode","transformers","outputTree","resultingTree","attachers","addList","addPreset","add","entryIndex","primary","currentPrimary","isPlainObj","unified","frozen","asyncName","looksLikeAVFile","changelog","emptyPlugins","emptyRemarkRehypeOptions","safeProtocol","deprecations","Markdown","allowedElements","allowElement","disallowedElements","rehypePlugins","remarkPlugins","remarkRehypeOptions","skipHtml","unwrapDisallowed","urlTransform","defaultUrlTransform","processor","deprecation","mdastTree","colon","questionMark","numberSign","ListGroupItem","NodeInfoTab","metricInfo","setMetricInfo","nodeTags","fetchData","upstreamNode","cubeElements","setCubeElements","metricsWarning","metricQueryDiv","queryDiv","displayCubeElement","cubeElem","metricMetadataDiv","_k","_j","_l","customMetadataDiv","cubeElementsDiv","_m","filter","primaryKeyOrRequiredDims","_n","dim","_o","owner","EditIcon","EditColumnPopover","popoverAnchor","setPopoverAnchor","saveAttributes","EditColumnDescriptionPopover","saveDescription","ManageDimensionLinksDialog","fkLinks","referenceLink","setIsOpen","activeTab","setActiveTab","dimensionColumns","setDimensionColumns","selectedDimension","setSelectedDimension","handleFKSubmit","existingDims","newDims","toAdd","toRemove","addPromises","removePromises","failures","handleReferenceSubmit","handleRemoveReference","AddItemIcon","rangeFrom","rangeTo","numbers","isExtendingChar","mid","isRegionalIndicator","ZWJ","findClusterBreak","forward","includeExtending","nextClusterBreak","prevClusterBreak","surrogateLow","surrogateHigh","codePointAt","codePointSize","countBefore","code0","code1","ch","Text$1","Text","clip","TextNode","RawTextCursor","dir","PartialTextCursor","inner","LineCursor","TextLeaf","textLength","isLine","Line","sliceText","appendText","newLen","lineSep","endLine","childOpen","updated","totalLines","iA","iB","eA","eB","chA","chB","flat","maxChunk","minChunk","chunked","currentLines","currentLen","currentChunk","flush","offsetValue","lineBreak","Line$1","findClusterBreak$1","fromCodePoint","DefaultSplit","MapMode","ChangeDesc","sections","ins","posA","posB","individual","iterChanges","composeSets","mapSet","assoc","endA","ChangeSet","fromA","toA","fromB","_toB","ranges","resultSections","resultInserted","filteredSections","SectionIter","addSection","addInsert","changes","total","process","sub","insText","insLen","forceJoin","desc","endB","setA","setB","mkSet","piece","sectionLen","insB","SelectionRange","level","EditorSelection","includeAssoc","mainIndex","range","which","anchor","bidiLevel","goalColumn","checkSelection","docLength","nextID","Facet","compareInput","isStatic","enables","sameArray","FacetProvider","get","facet","addresses","multi","depDoc","depSel","depAddrs","tr","ensureAll","newVal","compareArray","oldState","oldAddr","oldVal","getAddr","StateField","addrs","changed","addr","ensureAddr","dynamicFacetSlot","providers","providerAddrs","providerTypes","dynamic","depChanged","oldProviders","oldValue","initField","createF","updateF","compareF","init","oldInit","reInit","Prec_","prec","PrecExtension","Prec","Compartment","CompartmentInstance","compartment","Configuration","compartments","dynamicSlots","address","staticValues","facets","newCompartments","flatten","oldFacets","languageData","allowMultipleSelections","lineSeparator","changeFilter","transactionFilter","transactionExtender","readOnly","Annotation","AnnotationType","StateEffectType","StateEffect","mapping","mapped","effect","Transaction","startState","annotations","ann","joinRanges","mergeTransaction","sequential","mapForA","mapForB","resolveTransactionInner","docSize","sel","asArray","resolveTransaction","specs","seq","extendTransaction","filterTransaction","back","filtered","extenders","none","CharCategory","nonASCIISingleCaseWordChar","wordChar","hasWordChar","makeCategorizer","wordChars","EditorState","computeSlot","require","conf","startValues","slot","result1","newChanges","newMapped","mapBy","fieldInit","configuration","phrase","side","provider","at","chars","cat","kA","kB","combineConfig","configs","defaults","RangeValue","Range","cmpVal","Range$1","cmpRange","Chunk","maxPoint","startAt","lo","hi","diff","newPos","curFrom","curTo","newFrom","newTo","RangeSet","chunkPos","nextLayer","updateSpec","sort","filterFrom","filterTo","cur","LayerCursor","spill","RangeSetBuilder","HeapCursor","sets","oldSets","newSets","textDiff","comparator","minPointSize","sharedChunks","findSharedChunks","sideA","SpanCursor","sideB","sameValues","openRanges","openCount","build","lazySort","layer","newArrays","inA","shared","minPoint","rank","rangeIndex","heap","heapBubble","childIndex","findMinIndex","trackOpen","wasPoint","nextVal","startA","startB","dPos","bounds","boundChange","dEnd","clipEnd","foundPos","countColumn","tabSize","findColumn","COUNT","StyleModule","finish","splitSelector","selectors","isKeyframes","local","isAt","modules","nonce","StyleSet","adoptedSet","adopted","shift","mac","ie","keyName","ignoreKey","crelt","elt","nav","ie_edge","ie_upto10","ie_11up","gecko","chrome","webkit","safari","ios","combineAttrs","noAttrs","attrsEq","setAttrs","dom","attrs","updateAttrs","getAttrs","WidgetType","widget","BlockType","Decoration","startSide","endSide","MarkDecoration","PointDecoration","getInclusive","LineDecoration","of","isReplace","widgetsEq","addRange","margin","BlockWrapper","getSelection","contains","hasSelection","clientRectsFor","textRange","isEquivalentPosition","off","targetNode","targetOff","scanFor","domIndex","isBlockElement","maxOffset","flattenRect","windowRect","vp","scaleX","scaleY","scrollRectIntoView","xMargin","yMargin","ltr","bounding","moveX","moveY","rectHeight","boundingHeight","movedX","movedY","scrollableParents","getX","DOMSelectionState","domSel","anchorNode","focusNode","anchorOffset","focusOffset","preventScrollSupported","focusPreventScroll","scratchRange","dispatchKey","mods","down","up","getRoot","atElementStart","isScrolledToBottom","textNodeBefore","startNode","startOffset","textNodeAfter","DOMPos","precise","Direction","LTR","RTL","LowTypes","ArabicTypes","Brackets","BracketStack","charType","BidiRE","BidiSpan","maybe","span","isolatesEq","computeCharTypes","rFrom","rTo","isolates","outerType","iI","prevType","prevStrong","processBracketPairs","oppositeType","sI","br","sJ","embed","processNeutrals","beforeL","afterL","jI","fromJ","emitSpans","baseLevel","ourType","iCh","sameDir","isNum","recurse","localLevel","iScan","iso","upto","dirSwap","computeSectionOrder","computeOrder","trivialOrder","movedOver","moveVisually","spanI","spanEnd","nextI","nextIndex","nextSpan","autoDirection","clickAddsSelectionRange","dragMovesSelection$1","mouseSelectionStyle","exceptionSink","updateListener","inputHandler","focusChangeEffect","clipboardInputFilter","clipboardOutputFilter","perLineTextDirection","nativeSelectionHidden","scrollHandler","ScrollTarget","isSnapshot","setEditContextFormatting","logException","editable","nextPluginID","viewPlugin","ViewPlugin","domEventHandlers","domEventObservers","buildExtensions","eventHandlers","eventObservers","provide","deco","decorations","pluginInst","cls","PluginInstance","editorAttributes","contentAttributes","blockWrappers","outerDecorations","atomicRanges","bidiIsolatedRanges","getIsolatedRanges","fromDoc","toDoc","scrollMargins","getScrollMargins","bottom","styleModule","ChangedRange","toB","me","dI","rI","nextD","nextR","ViewUpdate","transactions","changedRanges","noChildren","Tile","track","tile","DocTile","CompositeTile","tracking","rm$1","BlockWrapperTile","beforeOff","afterOff","wrapper","LineTile","keepAttrs","forCoords","scan","onSameLine","fallbackRect","saw","rects","MarkTile","TextTile","WidgetTile","fromBack","WidgetBufferTile","img","TilePointer","dist","walker","beforeBreak","brk","take","OpenWrapper","TileBuilder","marks","openStart","composition","freeNode","nw","oldTile","noSpace","lineBaseAttrs","hasContent","BreakWidget","TextStream","maxLen","buckets","TileCache","bucket","widgets","pass","TileUpdate","old","disallowBlockEffectsFor","compositionContext","skipA","incStart","incEnd","activeMarks","getMarks","openMarks","pendingLineAttrs","markCount","openEnd","NullWidget","widgetFlags","addLineDeco","requireText","ptr","DocView","readCompositionAt","touchesComposition","findCompositionRange","prevDeco","prevWrappers","decoDiff","findChangedDeco","blockDiff","findChangedWrappers","observer","destroyDropped","BlockGapWidget","mustRead","fromPointer","activeElt","selectionNotFocus","betweenUneditable","dummy","inUneditable","rawSel","nextTo","nextToUneditable","newRange","bias","beforeBad","afterBad","viewport","contentWidth","isWider","widest","measureBounds","childRect","lineMeasure","totalWidth","textHeight","lineHeight","charWidth","vs","allDeco","dynamicOuter","outerDeco","margins","targetRect","reused","findCompositionNode","headPos","textBefore","textAfter","textNode","tileAfter","tileBefore","inv","DecorationComparator$1","comp","WrapperComparator","groupAt","categorize","linePos","posAtCoordsImprecise","contentRect","into","blockAt","moveToLineBoundary","includeWrap","coords","editorRect","moveByChar","by","spans","byGroup","nextCat","moveVertically","distance","startPos","goal","startY","startCoords","docTop","resolvedGoal","halfText","posAtCoords","posCoords","skipAtomicRanges","atoms","moved","skipAtomsForSelection","skipAtoms","oldPos","PosAssoc","scanY","yOffset","halfLine","InlineCoordsScan","baseDir","positions","getRects","recursed","bidi","above","below","closestI","closestDx","closestRect","dx","LineBreakPlaceholder","DOMReader","oldLen","nextTile","isEmptyToEnd","nextBreak","breakSize","fromView","isAtEnd","override","DOMPoint","DOMChange","typeOver","iHead","iAnchor","curSel","domBoundsAround","selPoints","selectionPoints","reader","selectionFromPoints","offFrom","offTo","fromI","fromStart","toI","toEnd","prevEnd","applyDOMChange","domChange","newSel","lastKey","preferredPos","preferredSide","cmp","selEnd","findDiff","sameSelPos","applyDOMChangeInner","userEvent","defaultTr","defaultInsert","applyDefaultInsert","inAtomic","mainSel","replaced","compositionRange","dLen","rangeChanges","selOff","minLen","InputState","firefoxCopyCutHack","eventBelongsToEditor","computeHandlers","passive","modifierCodes","pending","PendingKeys","EmacsyPendingKeys","mouseSelection","bindHandler","record","observers","dragScrollMargin","dragScrollSpeed","MouseSelection","startEvent","mustSelect","addsSelectionRange","isInPrimarySelection","getClickType","sx","sy","dragMovesSelection","brokenClipboardAPI","capturePaste","doPaste","textFilter","byLine","lastLinewiseCopy","lastLine","iState","makeStyle","basicMouseSelection","mustFocus","mouseSel","rangeForClick","visual","BadMouseDetail","lastMouseDown","lastMouseDownCount","lastMouseDownTime","lastTime","startSel","startRange","removeRangeAround","inputState","dropText","direct","dropPos","draggedContent","del","files","read","finishFile","captureCopy","copiedRange","linewise","isFocusChange","focusChangeTransaction","focus","getEffect","updateForFocusChange","startViewHeight","appliedFirefoxHack","wrappingWhiteSpace","heightChangeFlag","clearHeightChangeFlag","HeightOracle","lineWrapping","whiteSpace","lineHeights","newHeight","lineLength","knownHeights","MeasuredHeights","heights","BlockInfo","_content","QueryType","Epsilon","HeightMap","_from","_to","oldDoc","oracle","NodeBuilder","HeightMapText","HeightMapBranch","SpaceDeco","HeightMapBlock","_oracle","_type","measured","_force","HeightMapGap","firstLine","perLine","perChar","totalPerLine","guess","lineTop","linesAbove","singleHeight","rightTop","rightOffset","subQuery","rightStart","mergeGaps","rebalance","around","relevantWidgetHeight","gap","heightRelevantDecoChanges","DecorationComparator","visiblePixelRange","paddingTop","parentRect","inWindow","fullPixelRange","LineGap","displaySize","gA","gB","viewState","wrapping","LineGapWidget","vertical","ViewState","IdScaler","guessWrapping","staticDeco","viewports","Viewport","scaler","BigScaler","scaleBlock","contentChanges","heightChanges","prevHeight","scrollAnchor","viewportChange","domRect","measureContent","paddingBottom","scrollOffset","pixelViewport","dTop","dBottom","inView","visibleTop","visibleBottom","topPos","mayMeasure","halfMargin","doubleMargin","addGap","structure","avoid","checkLine","lineStructure","viewFrom","viewTo","marginHeight","bot","targetFrac","findFraction","spaceFrac","findPosition","marginWidth","horizOffset","pxLeft","pxRight","fraction","Viewport$1","stateDeco","counted","outer","heightMap","vpHeight","domBase","bTop","bBottom","strs","darkTheme","baseThemeID","baseLightID","baseDarkID","lightDarkIDs","buildTheme","scopes","baseTheme$1","observeOptions","useCharData","DOMObserver","mutations","mut","EditContextManager","wasChanged","safariSelectionRangeHack","keyCode","records","readSelection","handled","rec","childBefore","findChild","childAfter","curTile","buildSelectionRangeFromRange","curAnchor","deletes","lineStyle","thickness","drifted","abort","_fromB","reverted","contextPos","clipLen","editorPos","EditorView","trs","redrawn","attrsChanged","focusFlag","dispatchFocus","pendingKey","CachedOrder","listener","newState","hadFocus","prevSpecs","newPlugins","scroll","scrollAnchorPos","scrollAnchorHeight","measuring","BadMeasure","editorAttrs","attrsFromFacet","contentAttrs","changedContent","changedEditor","div","request","MaxBidiLine","scrollLeft","inputs","fresh","lastDir","currentPlatform","normalizeKeyName","platform","alt","ctrl","modifiers","handleKeyEvents","runHandlers","getKeymap","keymap","Keymaps","bindings","buildKeymap","runScopeHandlers","scope","storedPrefix","PrefixTimeout","bound","isPrefix","checkPrefix","command","preventDefault","stopPropagation","scopeObj","ourObj","full","binding","currentKeyEvent","charCode","isChar","prevented","ran","runFor","cmd","baseName","shiftName","RectangleMarker","getBase","rectanglesForRange","wrappedLine","lineElt","leftSide","rightSide","startBlock","endBlock","visualStart","visualEnd","pieces","drawForLine","drawForWidget","horizontal","addSpan","fromOpen","toOpen","fromCoords","toCoords","endPos","docLine","spanFrom","spanTo","sameMarker","LayerView","layerOrder","markers","oldI","selectionConfig","drawSelection","cursorLayer","selectionLayer","hideNativeSelection","configChanged","cursors","prim","confChange","setBlinkRate","setDropCursorPos","dropCursorPos","drawDropCursor","cursorPos","dropCursor","iterMatches","matchRanges","maxLength","MatchDecorator","decoration","decorate","boundary","_view","changeFrom","changeTo","_t","updateFrom","updateTo","fromLine","toLine","UnicodeRegexpSupport","Specials","Names","_supportsTabSize","supportsTabSize","specialCharConfig","highlightSpecialChars","specialCharPlugin","_plugin","TabWidget","SpecialCharWidget","DefaultPlaceholder","placeholder$1","ph","highlightActiveLine","activeLineHighlighter","lineDeco","lastLineStart","MaxOff","rectangleFor","startLine","startOff","endOff","startCol","endCol","absoluteColumn","getPos","rectangleSelectionStyle","newStart","newLine","_extend","rectangularSelection","showCrosshair","crosshairCursor","isDown","Outside","TooltipViewManager","createTooltipView","removeTooltipView","tooltips","tooltipViews","newAbove","tip","tooltipView","windowSpace","docElt","tooltipConfig","knownHeight","tooltipPlugin","showTooltip","tooltip","shouldMeasure","newConfig","arrow","makeAbsolute","tv","others","tView","arrowHeight","noOffset","spaceVert","setLeftStyle","arrowLeft","baseTheme","showHoverTooltip","HoverTooltipHost","hostedView","given","showHoverTooltipHost","hoverPlugin","HoverPlugin","locked","setHover","hoverTime","hovered","lastMove","rtl","isInTooltip","isOverRange","watch","tooltipMargin","arrowRect","docBottom","hoverTooltip","hoverState","lock","closeHoverTooltipEffect","getTooltip","panelConfig","topContainer","bottomContainer","getPanel","panel","panelPlugin","showPanel","PanelGroup","panels","mount","curDOM","rm","GutterMarker","gutterLineClass","gutterWidgetClass","activeGutters","gutter","gutters","unfixGutters","gutterView","SingleGutterView","vpA","vpB","vpOverlap","detach","lineClasses","classSet","contexts","UpdateContext","advanceCursor","collect","newElt","GutterElement","extraMarkers","localMarkers","forLine","prevMarkers","sameMarkers","domPos","iNew","iOld","skipTo","lineNumberMarkers","lineNumberWidgetMarker","lineNumberConfig","NumberMarker","formatNumber","lineNumberGutter","maxLineNumber","spacer","lineNumbers","activeLineGutterMarker","activeLineGutterHighlighter","highlightActiveLineGutter","DefaultBufferLength","nextPropID","NodeProp","NodeType","MountedTree","overlay","noProps","NodeSet","newTypes","CachedNode","CachedInnerNode","IterMode","Tree","mounted","TreeCursor","TreeNode","resolveNode","stackIterator","leave","anon","entered","balanceRange","buildTree","FlatBufferCursor","TreeBuffer","pick","checkSide","startI","endI","overlays","BaseNode","getChildren","matchNodeContext","_tree","BufferNode","BufferContext","hasChild","rPos","parentStart","iterStack","heads","newHeads","StackIterator","layers","mustLeave","nodeSet","maxBufferLength","minRepeatType","contextHash","lookAhead","takeNode","minPos","inRepeat","lookAheadAtStart","contextAtStart","findBufferSize","copyToBuffer","localChildren","localPositions","localInRepeat","lastGroup","lastEnd","makeRepeatLeaf","takeFlatNode","make","makeBalanced","makeTree","stopAt","lastI","lookAheadProp","fork","minStart","nodeSize","localSkipped","nodeStart","bufferStart","nodeSizeCache","balanceType","mkTop","mkTree","maxChild","divide","groupFrom","groupStart","groupSize","nextSize","only","NodeWeakMap","TreeFragment","fragments","minGap","fI","nextF","cI","nextC","nextPos","cut","fFrom","fTo","Parser","StringInput","parseMixed","nest","MixedParse","InnerParse","checkRanges","ActiveOverlay","mounts","stoppedInner","fragmentCursor","FragmentCursor","covered","isCovered","checkCover","materialize","oldMounts","punchRanges","enterFragments","sliceBuf","newStack","innerOffset","stackPos","targetI","StructureCursor","FragmentCursor$2","frag","gapFrom","gapTo","findCoverChanges","inB","nextA","nextB","nextTagID","Tag","modified","nameOrParent","Modifier","nextModifierID","powerSet","styleTags","byName","Rule","ruleNodeProp","Rule$1","tagHighlighter","tagClass","highlightTags","highlighters","highlighter","highlightTree","putStyle","HighlightBuilder","inheritedClass","getStyleTags","tagCls","innerHighlighters","typeName","propertyName","literal","operator","punctuation","bracket","languageDataProp","defineLanguageFacet","baseData","sublanguageProp","Language","extraExtensions","syntaxTree","topNodeAt","innerNode","sublang","explore","topLang","LRLanguage","DocInput","stringStart","currentContext","ParseContext","treeLen","skipped","scheduleOn","until","endTime","cutFragments","startLen","frags","LanguageState","newCx","vpTo","parseState","requestIdle","timeout","idle","isInputPending","parseWorker","deadline","viewportFirst","LanguageSupport","support","LanguageDescription","filename","loadFunc","load","descs","fuzzy","indentService","indentUnit","unit","getIndentUnit","indentString","cols","ts","getIndentation","IndentContext","service","syntaxIndentation","simulateBreak","simulateDoubleBreak","overriden","indentNodeProp","ast","indentFor","indentStrategy","TreeIndentContext","ignoreClosed","closed","delimitedStrategy","topIndent","isParent","bracketedAligned","openToken","sim","openLine","lineEnd","delimitedIndent","closing","units","closedAt","aligned","flatIndent","continuedIndent","except","matchExcept","DontIndentBeyond","indentOnInput","indent","norm","foldService","foldNodeProp","foldInside","syntaxFolding","isUnfinished","foldable","mapRange","foldEffect","unfoldEffect","selectedLines","foldState","folded","clearTouchedFolds","foldExists","preparePlaceholder","foldConfig","PreparedFoldWidget","foldWidget","findFold","maybeEnable","codeFolding","foldCode","announceFold","unfoldCode","fold","lineFrom","lineTo","foldAll","unfoldAll","foldKeymap","defaultConfig","widgetToDOM","prepared","onclick","foldGutterDefaults","FoldMarker","foldGutter","fullConfig","canFold","canUnfold","HighlightStyle","modSpec","scopeOpt","highlighterFacet","fallbackHighlighter","getHighlighters","syntaxHighlighting","treeHighlighter","themeType","TreeHighlighter","styleChange","decoratedToMapped","defaultHighlightStyle","DefaultScanDist","DefaultBrackets","bracketMatchingConfig","defaultRenderMatch","matchingMark","nonmatchingMark","bracketDeco","matchBrackets","bracketMatcher","bracketMatchingUnique","bracketMatching","bracketMatchingHandle","matchingNodes","brackets","byProp","findHandle","hasHandle","maxScanDistance","matches","matchMarkedBrackets","matchPlainBrackets","_state","_pos","matching","firstToken","endHandle","tokenType","startCh","startToken","basePos","countCol","startValue","StringStream","overrideIndent","cased","fullParser","defaultCopyState","noTokens","IndentedFrom","StreamLanguage","impl","Parse","docID","TokenTable","defaultTokenTable","overrideIndentation","findState","statePos","indentation","readToken","cutTree","findStartInFragments","editorState","Parse$1","parseEnd","eol","rangeEnd","rangeStart","offPos","len0","streamParser","typeArray","warned","byTag","defaultTable","legacyName","createTokenType","extra","warnForPart","tagStr","tags$1","toggleComment","getConfig","toggleLineComment","toggleBlockCommentByLine","changeLineComment","toggleBlockComment","changeBlockComment","selectedLineRanges","SearchMargin","findBlockComment","spaceBefore","spaceAfter","startText","endText","startSpace","endSpace","tokens","prevLine","minIndent","single","changeSet","fromHistory","isolateHistory","invertedEffects","historyConfig","isAdjacent","adj","historyField_","HistoryState","fromHist","HistEvent","updateBranch","addSelection","isolate","time","undo","redo","historyState","undoSelection","redoSelection","startSelection","selectionsAfter","invert","selections","newEvent","newBranch","eqSelectionShape","conc","MaxSelectionsPerEvent","lastEvent","sels","popSelection","addMappingToBranch","mapEvent","extraSelections","mappedChanges","fullMapping","joinableUserEvent","undone","prevTime","prevUserEvent","newGroupDelay","onlySelection","historyKeymap","updateSel","setSel","moveSel","how","cursorByChar","ltrAtCursor","cursorCharLeft","cursorCharRight","cursorByGroup","cursorGroupLeft","cursorGroupRight","interestingNode","bracketProp","moveBySyntax","cursorSyntaxLeft","cursorSyntaxRight","cursorByLine","cursorLineUp","cursorLineDown","pageInfo","selfScroll","cursorByPage","page","scrollRect","scrollBottom","cursorPageUp","cursorPageDown","moveByLineBoundary","cursorLineBoundaryForward","cursorLineBoundaryBackward","cursorLineBoundaryLeft","cursorLineBoundaryRight","cursorLineStart","cursorLineEnd","toMatchingBracket","cursorMatchingBracket","extendSel","selectByChar","selectCharLeft","selectCharRight","selectByGroup","selectGroupLeft","selectGroupRight","selectSyntaxLeft","selectSyntaxRight","selectByLine","selectLineUp","selectLineDown","selectByPage","selectPageUp","selectPageDown","selectLineBoundaryForward","selectLineBoundaryBackward","selectLineBoundaryLeft","selectLineBoundaryRight","selectLineStart","selectLineEnd","cursorDocStart","cursorDocEnd","selectDocStart","selectDocEnd","selectAll","selectLine","selectedLineBlocks","selectParentSyntax","stackBefore","addCursorVertically","addCursorAbove","addCursorBelow","simplifySelection","deleteBy","towards","skipAtomic","deleteByChar","byIndentUnit","targetPos","drop","deleteCharBackward","deleteCharForward","deleteByGroup","nextChar","deleteGroupBackward","deleteGroupForward","deleteToLineEnd","deleteLineBoundaryBackward","deleteLineBoundaryForward","splitLine","transposeChars","blocks","moveLine","nextLine","moveLineUp","moveLineDown","copyLine","copyLineUp","copyLineDown","deleteLine","isBetweenBrackets","closedBy","insertNewlineAndIndent","newlineAndIndent","insertBlankLine","atEof","explode","changeBySelectedLine","atLine","indentSelection","indentMore","indentLess","keep","toggleTabFocusMode","emacsStyleKeymap","standardKeymap","defaultKeymap","indentWithTab","basicNormalize","SearchCursor","baseFlags","RegExpCursor","MultilineRegExpCursor","toCharEnd","flattened","FlattenedDoc","cachedFrom","validRegExp","createLineDialog","dialogEffect","sign","ln","cl","percent","pc","dialogField","gotoLine","defaultHighlightOptions","highlightConfig","highlightSelectionMatches","matchHighlighter","matchDeco","mainMatchDeco","insideWordBoundaries","insideWord","word","selectWord","findNextOccurrence","fullWord","cycled","selectNextOccurrence","searchedText","searchConfigFacet","SearchPanel","SearchQuery","RegExpQuery","StringQuery","st","regexpCursor","stringCursor","stringWordTest","categorizer","bufPos","charBefore","charAfter","regexpWordTest","setSearchQuery","togglePanel","searchState","SearchState","defaultQuery","createSearchPanel","matchMark","selectedMatchMark","searchHighlighter","searchCommand","openSearchPanel","findNext","announceMatch","selectSearchInput","findPrevious","selectMatches","selectSelectionMatches","replaceNext","replaceAll","announceText","fallback","selText","getSearchInput","searchInput","searchExtensions","closeSearchPanel","searchKeymap","button","AnnounceMargin","Break","CompletionContext","explicit","expr","ensureAnchor","toSet","prefixMatch","completeFromList","validFor","ifNotIn","completion","score","addStart","addEnd","pickedCompletion","insertCompletionText","fromOff","toOff","SourceCache","asSource","startCompletionEffect","closeCompletionEffect","FuzzyMatcher","upper","byWord","firstSize","anyTo","preciseTo","byWordTo","byWordFolded","adjacentTo","adjacentStart","adjacentEnd","hasLower","wordAdjacent","StrictMatcher","completionConfig","defaultPositionInfo","joinClass","narrow","spaceLeft","spaceRight","infoWidth","infoHeight","spaceBelow","optionContent","icon","_s","_v","labelElt","detailElt","rangeAroundSelected","CompletionTooltip","stateField","applyCompletion","cState","infoResult","destroy","listRect","infoRect","selRect","ul","curSection","section","header","li","completionTooltip","sortOptions","dynamicSectionScore","addOption","getMatch","sectionOrder","CompletionDialog","timestamp","makeAttrs","didSetActive","selectedValue","createTooltip","CompletionState","ActiveSource","didSet","setActiveEffect","sameResults","setSelectedEffect","baseAttrs","getUpdateType","typing","ActiveResult","checkValid","completionState","moveCompletionSelection","acceptCompletion","startCompletion","closeCompletion","RunningQuery","MaxUpdateCount","MinAbortTime","completionPlugin","doesReset","dialog","windows","commitCharacters","commitChars","FieldPos","FieldRange","Snippet","fieldPositions","lineObj","baseIndent","template","rawName","snip","brace","fieldMarker","fieldRange","ActiveSnippet","setActive","moveToField","snippetState","fieldSelection","snippet","editor","addSnippetKeymap","snippetPointerHandler","moveField","clearSnippet","nextSnippetField","prevSnippetField","defaultSnippetKeymap","snippetKeymap","maps","snippetCompletion","closeBracketEffect","closedBracket","bracketState","closeBrackets","definedClosing","android","insertBracket","deleteBracketPair","dont","prevChar","closeBracketsKeymap","tok","handleSame","handleOpen","closedBracketAt","closeBefore","_open","allowTriple","stringPrefixes","canStartStringAt","probablyInString","quoteToken","maxPrefix","quotePos","charCat","autocompletion","completionKeymapExt","completionKeymap","SelectedDiagnostic","diagnostic","LintState","diagnostics","diagnosticFilter","lintConfig","scanPos","docLen","behind","sev","maxSeverity","DiagnosticWidget","markClass","findDiagnostic","hideTooltip","setDiagnosticsEffect","maybeEnableLint","lintState","lintExtensions","movePanelSelection","selPos","LintPanel","activeMark","lintTooltip","diagnosticsTooltip","renderDiagnostic","openLintPanel","closeLintPanel","nextDiagnostic","lintKeymap","combineFilter","assignKeys","actions","assigned","inPanel","click","keyIndex","nameElt","PanelItem","onkeydown","needsSync","newSelectedItem","_start","_end","underline","color","severityWeight","weight","basicSetup","keymaps","chalky","coral","cyan","ivory","stone","malibu","sage","whiskey","violet","darkBackground","highlightBackground","background","tooltipBackground","oneDarkTheme","oneDarkHighlightStyle","oneDark","defaultLightThemeOption","getDefaultExtensions","optios","defaultIndentWithTab","placeholderStr","defaultBasicSetup","getExtensions","getStatistics","External","emptyExtensions","useCodeMirror","onStatistics","onCreateEditor","onUpdate","autoFocus","minWidth","initialState","setContainer","setView","setState","defaultThemeOption","vu","defaultExtensions","stateCurrent","viewCurrent","ReactCodeMirror","defaultClassNames","legacy","dialectName","index$5","index$h","index$f","index$7","index$g","index$b","index$d","index$e","index$4","index$a","index$6","index$c","index$3","index$9","apl$1","asciiarmor","asterisk$1","brainfuck$1","cobol$1","clike$1","cmake$1","coffeescript","commonlisp","cypher$1","crystal$1","d$3","diff$1","dockerfile","dtd$1","dylan$1","ebnf$1","ecl$1","eiffel$1","elm$1","erlang$1","factor$1","fcl$1","forth$1","fortran$1","gas$1","gherkin$1","groovy$1","haskell$1","haxe$1","http$1","idl$1","julia$1","livescript","lua$1","mirc$1","mathematica$1","modelica$1","mumps$1","mbox$1","nginx$1","nsis$1","ntriples$1","octave$1","oz$1","pascal$1","perl$1","pig$1","powershell","properties$1","protobuf$1","puppet$1","q$2","r$2","ruby$1","sas$1","scheme$1","shell$1","sieve$1","smalltalk$1","solr$1","sparql$1","spreadsheet$1","stylus$1","swift$1","stex$1","verilog$1","tcl$1","textile$1","tiddlywiki","tiki$1","toml$1","troff$1","ttcn$1","turtle$1","webidl","vb$1","vbscript","velocity$1","vhdl$1","xquery","yacas$1","z80$1","mscgen$1","index$2","index$1","CompositeBlock","parentHash","LeafBlock","skipSpace","skipForList","bl","isOrderedList","isBulletList","isHorizontalRule","DefaultSkipMarkup","_cx","skipSpaceBack","isFencedCode","isBlockquote","breaking","isSetextUnderline","DefaultLeafBlocks","inList","isAtxHeading","EmptyLine","CommentEnd","ProcessingEnd","HTMLBlockStyle","isHTMLBlock","getListIndent","indentAfter","indented","addCodeText","DefaultBlockParsers","pendingMarks","codeStart","fenceEnd","infoFrom","infoTo","textStart","textEnd","newBase","endOfSpace","trailing","LinkReferenceParser","leaf","parseLinkLabel","parseURL","parseLinkTitle","titleEnd","SetextHeadingParser","underlineMark","DefaultEndLeaf","scanLineResult","BlockContext","markI","taken","toRelative","textOffset","rangeI","nextFrom","injectMarks","injectGaps","inline","TreeElement","dummies","movePastNext","inclusive","reuse","MarkdownParser","blockParsers","leafBlockParsers","blockNames","endLeafBlock","skipContextMarkup","inlineParsers","inlineNames","wrappers","resolveConfig","nonEmpty","composite","findName","InlineContext","wrapA","wrapB","Buffer$1","elts","Element$5","Element","EmphasisUnderscore","EmphasisAsterisk","LinkStart","ImageStart","InlineDelimiter","Escapable","Punctuation","DefaultInline","curSize","procInst","pBefore","pAfter","sBefore","sAfter","leftFlanking","rightFlanking","canOpen","canClose","finishLink","dest","requireNonWS","emp","closeSize","elements","eI","NotLast","FragmentCursor$1","fragEnd","blockI","prevI","markdownHighlighting","leftOverSpace","parseCode","codeParser","htmlParser","infoNode","StrikethroughDelim","Strikethrough","parseRow","cellStart","cellEnd","esc","parseCell","hasPipe","delimiterLine","TableParser","lineText","Table","TaskParser","TaskList","autolinkRE","urlRE","lastTwoDomainWords","emailRE","xmppResourceRE","autolinkURLEnd","autolinkEmailEnd","Autolink","absPos","noBracket","GFM","parseSubSuper","Superscript","Subscript","Emoji","reducePos","bufferBase","curContext","StackContext","lookaheadRecord","dPrec","baseStateID","mustSink","mustMove","nextStart","nextEnd","SimulatedStack","nextStates","reduce","backup","rDepth","dialectID","tracker","goto","StackBufferCursor","decodeArray","digit","CachedToken","nullToken","InputStream","endOffset","nextChunk","TokenGroup","LocalTokenGroup","precTable","elseToken","ExternalTokenizer","precOffset","groupMask","accEnd","low","findOffset","tableData","tableOffset","iPrev","verbose","stackIDs","cutAt","fr","TokenCache","actionIndex","tokenizers","stacks","newStacks","stopped","stoppedTokens","finished","findFinished","maxRemaining","strictCx","cxHash","defaultReduce","localStack","pushStackDedup","restarted","tokenEnd","forceBase","Dialect","ContextTracker","LRParser","topTerms","nodeProps","setProp","nodeID","propSpec","tokenArray","getSpecializer","groupTag","terminal","flag","deflt","scriptText","StartCloseScriptTag","styleText","StartCloseStyleTag","textareaText","StartCloseTextareaTag","EndTag","SelfClosingEndTag","StartTag","StartScriptTag","StartStyleTag","StartTextareaTag","StartSelfClosingTag","StartCloseTag","NoMatchStartCloseTag","MismatchedStartCloseTag","missingCloseTag","IncompleteTag","IncompleteCloseTag","commentContent$1","Attribute","AttributeName","AttributeValue","UnquotedAttributeValue","ScriptText","StyleText","TextareaText","OpenTag","CloseTag","Dialect_noMatch","Dialect_selfClosing","selfClosers","implicitlyClosed","closeOnOpen","nameChar","cachedName","cachedInput","cachedPos","tagNameAfter","question","bang","lessThan","greaterThan","ElementContext","startTagTerms","elementContext","tagStart","commentContent","inForeignElement","endTag","selfClosing","contentTokenizer","textToken","endToken","lastState","matchedLen","scriptTokens","styleTokens","textareaTokens","htmlHighlighting","openTag","att","findTagName","tagNameNode","maybeNest","configureNesting","script","textarea","nameNode","descendantOp","Unit","callee","VariableName","queryIdentifier","queryVariableName","QueryCallee","parenL","underscore","bracketL","period","backslash","newline","asterisk","isAlpha","isDigit","isHex","identifierTokens","varName","queryIdentifiers","descendant","unitToken","cssHighlighting","spec_callee","spec_queryIdentifier","spec_QueryCallee","spec_AtKeyword","spec_identifier","_properties","pseudoClasses","atRules","isVarArg","VariablesByNode","declSelector","astTop","variableNames","isVariable","defineCSSCompletionSource","isDash","cssCompletionSource","cssLanguage","noSemi","noSemiType","incdec","incdecPrefix","questionDot","JSXStartTag","insertSemi","LineComment","BlockComment","Dialect_jsx","braceR","semicolon","star","plus","minus","lt","comma","dot","trackNewline","insertSemicolon","noSemicolon","noSemicolonType","operatorToken","mayPostfix","identifierChar","jsHighlight","spec_word","spec_LessThan","snippets","typescriptSnippets","ScopeNodes","defID","functionContext","gatherCompletions","getScope","completions","gather","Identifier","dontComplete","localCompletionSource","isWord","pathFor","member","completionPath","enumeratePropertyCompletions","scopeCompletionSource","javascriptLanguage","isCase","jsxSublanguage","typescriptLanguage","jsxLanguage","tsxLanguage","kwCompletion","keywords","typescriptKeywords","javascript","autoCloseTags","findOpenTag","elementName","closeTags","esLint","eslint","translateDiagnostic","mapPos","Targets","Charsets","Methods","Encs","Bool","Tags","GlobalAttrs","eventAttributes","extraTags","extraAttrs","findParentElement","allowedChildren","parentInfo","openTags","completeTag","completeCloseTag","completeStartTag","completeAttrName","localAttrs","attrName","completeAttrValue","quoteStart","quoteEnd","htmlCompletionFor","htmlCompletionSource","htmlCompletionSourceWith","jsonParser","defaultNesting","defaultAttrs","htmlPlain","endElt","htmlLanguage","insertTransaction","didType","headingProp","commonmark","isHeading","isList","findSectionEnd","headerNode","headerIndent","mkLang","commonmarkLanguage","extended","markdownLanguage","getCodeParser","defaultLanguage","Context$d","itemNumber","getContext","Context","renumberList","normalizeIndent","blank","insertNewlineContinueMarkupCommand","emptyLine","delTo","quoted","nonTightList","insertNewlineContinueMarkup","isMark","line1","line2","contextNodeForDelete","deleteMarkupBackward","spaceEnd","markdownKeymap","htmlNoMatch","markdown","codeLanguages","defaultCodeLanguage","addKeymap","completeHTMLTags","pasteURL","htmlTagLanguage","defaultCode","pasteURLAsLink","htmlTagCompletion","htmlTagCompletions","_tagCompletions","nonPlainText","crossesNode","openArgList","argList","lessHighlighting","lessLanguage","lessCompletionSource","less","dedent","InterpolationEnd","InterpolationContinue","InterpolationStart","blankLineStart","eof","Comment","IndentedMixin","IndentedInclude","Dialect_indented","braceL","newlineChar","equals","startOfComment","indentedComment","indentedMixins","cDepth","interpolationEnd","IndentLevel","trackIndent","sassLanguage","indentedSassLanguage","sassCompletionSource","sass","jsonHighlighting","jsonParseLinter","getErrorPosition","jsonLanguage","PieDiagram","MindmapDiagram","skipCodePoints","diagramMap","diagrams","longestTextLength","diagramText","codePoint","parser$2","LineText1","LineText2","LineText3","LineText4","LineText5","newline$2","newlineEmpty","LineTextTokens","newline$1","carriageReturn","parenR","bracketR","newlines","_stack","lineTextType","indentTracker","countIndent","getLineType","mermaidTags","mindmapTags","pieTags","mindmapHighlighting","spec_word$1","parser$1","TitleText","titleText","pieHighlighting","mermaidLanguage","mindmapLanguage","pieLanguage","mermaid","mindmap","pie","printKeyword","newlineBracketed","stringContent","Escape","replacementStart","stringEnd","ParenL","ParenthesizedExpression","TupleExpression","ComprehensionExpression","BracketL","ArrayExpression","ArrayComprehensionExpression","BraceL","DictionaryExpression","DictionaryComprehensionExpression","SetExpression","SetComprehensionExpression","ArgList","subscript","String$1","stringStartD","stringStartL","stringStartLD","stringStartR","stringStartRD","stringStartRL","stringStartRLD","FormatString","stringStartF","stringStartFD","stringStartFL","stringStartFLD","stringStartFR","stringStartFRD","stringStartFRL","stringStartFRLD","FormatReplacement","nestedFormatReplacement","importList","TypeParamList","ParamList","SequencePattern","MappingPattern","PatternArgList","parenOpen","braceOpen","braceClose","singleQuote","doubleQuote","letter_o","letter_x","letter_N","letter_u","letter_U","bracketed","isLineBreak","cx_Bracketed","cx_String","cx_DoubleQuote","cx_Long","cx_Raw","cx_Format","stringFlags","legacyPrint","long","escapes","skipEscape","pythonHighlighting","_node","isFrom","globals","globalCompletion","innerBody","lineIndent","indentBody","pythonLanguage","python","MissingCloseTag","mismatchedStartCloseTag","incompleteStartCloseTag","piContent$1","cdataContent$1","isSpace","startTag","scanTo","piContent","cdataContent","xmlHighlighting","elementName$1","findLocation","inTag","Element$2","attrValues","attrCompletion","valueCompletion","completeFromSchema","eltSpecs","attrSpecs","allAttrs","globalAttrs","allElements","topElements","attrVals","loc","parentName","xmlLanguage","subtree","Number","Null","ParenR","BraceR","BracketR","Semi","Dot","Operator","SpecialVar","QuotedIdentifier","Keyword","Bits","Bytes","Builtin","isHexDigit","readLiteral","endQuote","backslashEscapes","readDoubleDollarLiteral","readPLSQLQuotedLiteral","openDelim","matchingDelim","closeDelim","readWord","readWordOrQuoted","readBits","readNumber","sawDot","inString","Space","builtin","kw","tp","SQLTypes","SQLKeywords","kws","tokensFor","quoteStyle","tokenBefore","idName","plainID","parentsFor","sourceContext","getAliases","EndFrom","statement","sawFrom","prevID","maybeQuoteCompletions","openingQuote","closingQuote","Span","QuotedSpan","isSelfTag","CompletionLevel","idQuote","idCaseInsensitive","nameCompletion","getClosingQuote","tables","schemas","defaultTableName","defaultSchemaName","defaultSchema","quoteAfter","completionType","completeKeywords","upperCase","SQLDialect","defaultKeyword","keywordCompletionSource","schemaCompletionSource","StandardSQL","schemaCompletion","PostgreSQL","MySQLKeywords","MySQLTypes","MySQLBuiltin","MySQL","MariaSQL","MSSQLBuiltin","MSSQL","SQLite","Cassandra","PLSQL","javaHighlighting","javaLanguage","java","closureParamDelim","tpOpen","tpClose","RawString","Float","_r","_E","Zero","Plus","Minus","Quote","Pipe","LessThan","GreaterThan","isNum_","literalTokens","isFloat","isQuote","closureParam","tpDelim","rustHighlighting","rustLanguage","rust","templateArgsEndFallback","MacroName","Z","Underscore","rawString","sawLetter","cppHighlighting","spec_","spec_templateArgsEnd","spec_scopedIdentifier","cppLanguage","cpp","lezerHighlighting","spec_AtName","spec_keyword","lezerLanguage","lezer","castOpen","HeredocString","interpolatedStringContent","EscapeSequence","afterInterpolation","automaticSemicolon","abstract","Boolean","_break","_case","_catch","_const","_continue","declare","_do","echo","_else","elseif","enddeclare","endfor","endforeach","endif","endswitch","endwhile","_enum","final","_finally","_for","foreach","_function","_if","_implements","include","include_once","_instanceof","insteadof","_interface","_new","_null","or","print","readonly","_require","require_once","_return","_switch","_throw","trait","_try","unset","_var","Visibility","_while","xor","_yield","keywordMap","isASCIILetter","isIdentifierStart","castTypes","eofToken","scanEscape","phpHighlighting","spec_name","phpLanguage","php","htmlSupport","spec_Keyword","wastLanguage","wast","exprParser","baseParser","exprMixed","textParser","attrParser","textMixed","attrMixed","baseHTML","makeVue","mixVue","vueLanguage","vue","attributeContentSingle","attributeContentDouble","scriptAttributeContentSingle","scriptAttributeContentDouble","attrContent","attrSingle","attrDouble","scriptAttrSingle","scriptAttrDouble","statementMixed","mkAngular","mixAngular","angularLanguage","angular","strContent","strDollarBrace","strEnd","escapeSequence","indStrContent","indStrDollarBrace","indStrEnd","indEscapeSequence","backslack","dollar","apostrophe","scanString","afterDollar","scanIndString","afterApostrophe","spec_Identifier","nixLanguage","nix","LongExpression","ShortExpression","greaterThan$1","slash$1","parenClose","squareOpen","squareClose","curlyOpen","curlyClose","quoteDouble","quoteSingle","tick","createStringHandler","inStringType","inStringIgnoreNext","createCommentHandler","inLineComment","inBlockComment","longExpression","commentHandler","stringHandler","popIfMatch","shortExpression","svelteHighlighting","spec_BlockPrefix","spec_BlockType","spec_AttributeName","spec_TagName","expressionParser","svelteLanguage","svelte","hasRightBracket","interpStringContent","interpStringBrace","interpStringEnd","interpVStringContent","interpVStringBrace","interpVStringEnd","interpString","interpVString","csharpLanguage","csharp","keywordsSpecial","keywordsEtherUnit","keywordsTimeUnit","keywordsBlockAndTransactionProperties","keywordsMoreBlockAndTransactionProperties","keywordsErrorHandling","keywordsMathematicalAndCryptographicFuctions","keywordsContractRelated","keywordsTypeInformation","keywordsContractList","keywordsControlStructures","keywordsValueTypes","keywordsV0505NewReserve","keywordsAbiEncodeDecodeFunctions","keywordsMembersOfAddressType","natSpecTags","isOperatorChar","isNegativeChar","curPunc","tokenBase","tokenString","isVersion","isNumber","updateGarmmer","tokenComment","peeked","isValidInteger","isValidBytes","isValidFixed","updateHexLiterals","maybeEnd","numberPart","bytesPart","hexValue","stringAfterHex","Context$b","pushContext","popContext","indentContext","firstChar","solidity","builtInFuncs","isOperator","isNiladic","isArrow","isComment","stringEater","apl","errorIfNotEmpty","nonWS","asciiArmor","dpcmd","apps","basicToken","ch1","reserve","brainfuck","typeBefore","isTopScope","clike","parserConfig","statementIndentUnit","dontAlignCalls","blockKeywords","defKeywords","hooks","multiLineStrings","indentStatements","indentSwitch","namespaceSeparator","isPunctuationChar","numberStart","isIdentifierChar","isReservedIdentifier","isDefKeyword","maybeEOL","switchBlock","cKeywords","cppKeywords","objCKeywords","objCBuiltins","basicCTypes","basicObjCTypes","cTypes","objCTypes","cBlockKeywords","cDefKeywords","cppHook","pointerHook","_stream","cIsReservedIdentifier","cpp14Literal","cpp11StringHook","tokenRawString","cppLooksLikeConstructor","lastTwo","tokenAtString","delim","tokenTripleString","tokenNestedComment","scala","tokenKotlinString","tripleString","kotlin","shader","nesC","objectiveC","objectiveCpp","squirrel","stringTokenizer","tokenCeylonString","ceylon","pushInterpolationStack","popInterpolationStack","sizeInterpolationStack","tokenDartString","tripleQuoted","tokenStringHelper","tokenInterpolation","tokenInterpolationIdentifier","dart","isUpper","coll","prefixColl","prefixEdge","sameEdge","prefixContainer","spec_Symbol","clojureLanguage","parentBase","clojure","variable_regex","found_var","tokenize","cmake","BUILTIN","ATOM","NUMBER","KEYWORD","MODTAG","COBOLLINENUM","PERIOD","makeKeywords","builtins","cobol","returnType","ERRORCLASS","wordRegexp","operators","delimiters","atProp","wordOperators","indentKeywords","commonKeywords","regexPrefixes","commonConstants","constants","scopeOffset","lineOffset","longComment","floatLiteral","intLiteral","tokenFactory","singleline","outclass","alignOffset","_indent","tokenLexer","delimiter_index","coffeeScript","fillAlign","closes","specialForm","assumeBody","numLiteral","readSym","inComment","commonLisp","wordRegExp","chain","conditionalOperators","indexingOperators","anotherOperators","idents","atomWords","indentKeywordsArray","indentExpressionKeywordsArray","indentExpressionKeywords","dedentKeywordsArray","dedentKeywords","dedentPunctualsArray","dedentPunctuals","nextTokenizer","tokenFollowIdent","tokenMacroDef","tokenFollowType","tokenMacro","tokenNest","tokenQuote","tokenHereDoc","started","nextStyle","crystal","operatorChars","funcs","preds","systemKeywords","cypher","blockKeywordsStr","TOKEN_NAMES","tw_pos","token_name","simpleMode","states","ensureState","states_","hasIndentation","orig","tokenFunction","indentFunction","toRegex","asToken","pend","curState","fromRegex","shells","shellsAsArrayRegex","expose","exposeRegex","instructions","instructionRegex","instructionOnlyLine","instructionWithArguments","dockerFile","tokenSGMLComment","inBlock","sc","terminator","dtd","some","symbolPattern","patterns","patternStyles","patternName","wordLookup","styleLookup","maybeNested","nestedCount","dylan","commentType","stateType","ebnf","metaHook","variable_2","variable_3","cur2","ecl","wordObj","newtok","readQuoted","unescaped","eiffel","switchState","lowerRE","upperRE","innerRE","digitRE","hexRE","symbolRE","specialRE","spacesRE","chompMultiComment","chompGlsl","chompChar","chompMultiString","chompSingleString","isDef","wellKnownWords","elm","typeWords","keywordWords","separatorRE","separatorWords","operatorAtomWords","operatorSymbolRE","operatorSymbolWords","openParenRE","openParenWords","closeParenRE","closeParenWords","guardWords","bifWords","anumRE","escapesRE","rval","peekToken","is_member","lookahead","radixRE","nongreedy","greedy","quoteChar","escapeChar","pushToken","realToken","aToken","ind","typ","fakeToken","maybe_drop_pre","maybe_drop_post","tt","ss","indenter","wordAfter","wordafter","currT","prevT","getToken","postcommaToken","defaultToken","truthy","objs","getTokenIndex","oper","propname","propvals","erlang","factor","start_blocks","end_blocks","fcl","toWordList","coreWordList","immediateWordList","searchWordList","wordList","forth","stt","mat","dataTypes","litOperator","fortran","mkGas","arch","lineCommentStartSymbol","directives","registers","x86","armv6","nextUntilUnescaped","clikeComment","gas","gherkin","standaloneKeywords","startString","expectExpression","tokenBaseUntilBrace","tokenVariableDeref","groovy","smallRE","largeRE","hexitRE","octitRE","idRE","whiteCharRE","ncomment","stringLiteral","currNest","stringGap","wkw","setType","haskell","atom","toUnescaped","cont","haxeTokenBase","haxeTokenString","haxeTokenComment","atomicTypes","HaxeLexical","inScope","varname","parseHaxe","cc","combinator","imported","typename","registerimport","importname","register","defaultVars","pushcontext","popcontext","pushlex","poplex","expect","wanted","metadef","vardef1","maybeattribute","functiondef","forspec1","maybelabel","funarg","importdef","typedef","maybeoperator","maybeexpression","commasep","objprop","metaargs","what","proceed","typeuse","vardef2","forin","typestring","typeprop","haxe","defaulttypes","lexical","hxml","sol","failFirstLine","responseStatusCode","requestPath","responseStatusText","requestProtocol","http","builtinArray","keywordArray","singleOperators","boolOperators","idl","jinja2","pre","octChar","hexChar","sChar","uChar","asciiOperatorsList","openersList","closersList","keywordsList","builtinsList","openers","closers","macro","macroOperators","symbolOperators","inArray","inGenerator","currentScope","leavingExpr","tokenAnnotation","imMatcher","numberLiteral","tokenChar","tokenStringFactory","isDefinition","julia","next_rule","nr","Rules","i$","keywordend","stringfill","rr","liveScript","prefixRE","wordRE","indentTokens","dedentTokens","dedentPartial","readBracket","curlev","lua","pBase","pFloat","pFloatBase","pPrecision","reBaseForm","reFloatForm","reIdInContext","mathematica","rfc2822","rfc2822NoEmail","rfc2822Header","rfc2822HeaderNoEmail","untilEmail","bracketedEmail","untilBracketedEmail","styleForHeader","emailPermitted","mbox","parseWords","specials","functions","beforeParams","tokenUnparsed","mirc","isSingleOperatorChar","isDoubleOperatorChar","isNonDigit","tokenLineComment","tokenBlockComment","tokenIdent","tokenQIdent","tokenUnsignedNumber","modelica","mkParser","startStateFn","copyStateFn","produceTokenFunction","mscgen","msgenny","xu","wordRegexpBoundary","pWords","pState","pConfig","pStream","doubleOperators","singleDelimiters","commandKeywords","intrinsicFuncsWords","intrinsicFuncs","mumps","keywords_block","keywords_important","tokenCComment","nginx","nsis","Location","transitState","currState","currLocation","ntriples","parsedURI","parsedAnchor","parsedBNode","parsedLang","parsedType","doubleDelimiters","tripleDelimiters","expressionEnd","tokenTranspose","octave","tripleOperators","middle","openingKeywords","middleKeywords","endKeywords","tokenFunProc","tokenClass","tokenMeth","buildElectricInputRegEx","allClosings","oz","trueText","tokenCommentBraces","pascal","look","eatSuffix","PERL","RXstyle","RXmodifiers","tokenChain","tokenPerl","tokenSOMETHING","perl","pBuiltins","pKeywords","pTypes","isEnd","pig","buildRegexp","notCharacterOrDash","varNames","symbolBuiltins","namedBuiltins","variableBuiltins","grammar","tokenSingleQuoteString","tokenVariable","tokenDoubleQuoteString","quoteMatch","tokenMultiString","tokenStringInterpolation","tokenMultiStringReturn","tokenHereStringInterpolation","parentTokenize","savedBracketNesting","tokenVariableWithBraces","powerShell","protobuf","define","resource","special_resource","puppet","buildRE","tokenCommentToEOF","commonAtoms","commonBuiltins","commonBlockKeywords","blockkeywords","opChars","ALIGN_YES","ALIGN_NO","BRACELESS","setFlag","pop","indentWords","dedentWords","opening","readBlockComment","regexpAhead","readHereDoc","tokenBaseOnce","alreadyCalled","mayIndent","ruby","kwtype","thisTok","ct","isDoubleOperatorSym","doubleOperator","sas","SYMBOL","BRACKET","INDENT_WORD_SKIP","indentKeys","stateStack","pushStack","popStack","binaryMatcher","octalMatcher","hexMatcher","decimalMatcher","isBinaryNumber","isOctalNumber","isDecimalNumber","isHexNumber","processEscapedSequence","scheme","numTest","hasExactness","hasRadix","keyWord","indentTemp","letter","dict","commonCommands","tokenDollar","heredoc","tokenHeredoc","tokenStringStart","shell","tokenMultiLineString","sieve","_textAfter","specialChars","Token","eos","State","aChar","nextComment","nextString","nextSymbol","nextTemporaries","smalltalk","isStringChar","isOperatorString","tokenOperator","tokenWord","solr","ops","PN_CHARS","PREFIX_START","PREFIX_REMAINDER","tokenLiteral","eatPnLocal","sparql","spreadsheet","mkStex","mathMode","pushCommand","peekCommand","popCommand","plug","getMostPowerful","addPluginPattern","pluginName","cmdStyle","cmdName","beginParams","inMathMode","endModeSeq","lastPlug","stex","tagKeywords_","documentTypes_","mediaTypes_","mediaFeatures_","propertyKeywords_","nonStandardPropertyKeywords_","fontProperties_","colorKeywords_","valueKeywords_","wordOperatorKeywords_","blockKeywords_","commonAtoms_","commonDef_","hintWords","keySet","escapeRegExp","tagKeywords","tagVariablesRegexp","propertyKeywords","nonStandardPropertyKeywords","valueKeywords","colorKeywords","documentTypes","documentTypesRegexp","mediaFeatures","mediaTypes","fontProperties","operatorsRegexp","wordOperatorKeywordsRegexp","vendorPrefixesRegexp","firstWordMatch","tokenParenthesized","wordIsTag","currentIndent","contextIndent","popAndPass","wordIsProperty","wordIsBlock","wordIsVendorPrefix","wordAsValue","wordLC","typeIsBlock","endOfLine","typeIsInterpolation","typeIsPseudo","startOfLine","firstWordOfLine","stylus","iCx","lineFirstWord","prevLineFirstWord","prevLineIndent","wordSet","definingKeywords","punc","binary","octal","hexadecimal","decimal","stringMatch","ident","tokenUntilClosingParen","openQuote","singleLine","swift","tcl","TOKEN_STYLES","startNewLine","Modes","RE","handlePhraseModifier","togglePhraseModifier","tokenStyles","phraseModifier","closeRE","openSize","textileDisabled","activeStyles","spanningLayout","REs","listMod","textile","textwords","isSpaceName","reHR","reWikiCommentStart","reWikiCommentStop","reBlockQuote","reJsCodeStart","reJsCodeStop","reXmlCodeStart","reXmlCodeStop","reCodeBlockStart","reCodeBlockStop","reUntilCodeStop","twTokenCode","twTokenComment","twTokenEm","twTokenUnderline","twTokenStrike","twTokenStrong","twTokenMacro","sb","tiddlyWiki","returnTokenizer","inText","inLine","inPlugin","inAttributeNoQuote","inAttribute","setStyle","noIndent","endplugin","endcloseplugin","attvalue","attvaluemaybe","tiki","comb","toml","troff","timerOps","portOps","configOps","verdictOps","sutOps","functionOps","verdictConsts","booleanConsts","otherConsts","visibilityModifiers","templateMatch","afterQuote","ttcn","turtle","operatorKeywords","commontypes","doubleClosing","doOpening","OUTCLASS","vb","mkVBScript","parserConf","commonkeywords","builtinFuncsWords","builtinConsts","builtinObjsWords","knownProperties","knownMethods","aspBuiltinObjsWords","aspKnownProperties","aspKnownMethods","knownWords","builtinFuncs","builtinObjs","noIndentWords","vbScript","velocity","mkVerilog","noIndentKeywords","isBracketChar","unsignedNumber","decimalLiteral","binaryLiteral","octLiteral","hexLiteral","realLiteral","closingBracketOrWord","closingBracket","curKeyword","openClose","statementKeywords","isClosing","contextClosing","closingKeywords","closings","fromHook","possibleClosing","verilog","tlvIdentifierStyle","tlvScopePrefixChars","tlvIndentUnit","tlvIdentMatch","tlvLineIndentationMatch","tlvCommentMatch","blankline","chPos","bodyString","mnemonic","allCaps","firstCap","tokenString2","vhdl","atomArray","startDefArray","startDefs","endDefArray","endDefs","integers","floats","identifiersEnd","multilineComments","multilineCommentsStart","multilineCommentsEnd","lastToken","nextToken","webIDL","qualifier","kwObj","basic","axis_specifiers","mightBeFunction","isEQName","isEQNameAhead","tokenXMLComment","tokenCDATA","tokenPreProcessing","isclose","tokenTag","pushStateStack","popStateStack","isInXmlBlock","foundColon","isInXmlConstructor","isInXmlAttributeBlock","isVariableChar","tokenAttribute","isIn","reinstateTokenize","xQuery","bodiedOps","pFloatForm","pIdentifier","reIdentifier","rePattern","reFunctionLike","yacas","cons","keywordRegex","yaml","mkZ80","ez80","keywords1","keywords2","variables1","variables2","z80","_apl","_asciiArmor","_asterisk","_csharp","_scala","_solidity","_kotlin","_shader","_nesC","_objectiveC","_objectiveCpp","_squirrel","_ceylon","_dart","_cmake","_cobol","_commonLisp","_crystal","_cypher","_diff","_dtd","_dylan","_ebnf","_ecl","_eiffel","_elm","_factor","_fcl","_forth","_fortran","_gas","_gherkin","_groovy","_haskell","_haxe","_http","_idl","_jinja","_mathematica","_mbox","_mirc","_modelica","_mscgen","_mumps","_nsis","_ntriples","_octave","_oz","_pig","_protobuf","_puppet","_q","_sas","_sass","_mermaid","_nix","_svelte","_sieve","_smalltalk","_solr","_sparql","_spreadsheet","_stex","_textile","_tiddlyWiki","_tiki","_troff","_ttcn","_turtle","_velocity","_verilog","_vhdl","_webIDL","_xQuery","_yacas","_z","_vue","_angular","_markdown","_go","_shell","_lua","_swift","_tcl","_yaml","_vb","_brainfuck","_stylus","_erlang","_nginx","_perl","_ruby","_pascal","_less","_scheme","_toml","_clojure","_julia","AddComplexDimensionLinkPopover","existingLink","isEditMode","joinTypeOptions","joinCardinalityOptions","CodeMirror","PartitionColumnPopover","savePartition","partition_type","removePartition","NodeColumnTab","setAttributes","setDimensions","setColumns","links","setLinks","showColumnAttributes","showColumnPartition","isTemporal","typeLabel","details","columnList","fkLinksForColumn","foreignKeys","columnKey","dimName","clsx","exports","isUnsafeProperty","isDeepKey","deepKey","require$$2","require$$3","getWithPath","mathSign","isNan","isPercent","isNumOrStr","idCounter","uniqueId","getPercentValue","totalValue","hasDuplicate","ary","interpolateNumber","numberA","numberB","interpolate","findEntryInArray","specifiedKey","specifiedValue","isNullish","upperFirst","SVGContainerPropKeys","SVGElementPropKeys","PolyElementKeys","FilteredElementKeyMap","EventKeys","adaptEventHandlers","newHandler","inputProps","isValidElement","getEventHandlerOfChild","originalHandler","adaptEventsOfChild","getDisplayName","lastChildren","isFragment","findAllByType","childType","isClipDot","isValidSpreadableProp","includeEvents","svgElementType","matchingElementTypeKeys","filterProps","_inputProps","Surface","viewBox","svgView","layerClass","Layer","LegendPortalContext","useLegendPortal","constant$4","pi","tau","epsilon","tauEpsilon","appendRound","Path","x1","y1","x2","y2","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","t01","t21","a0","a1","ccw","dy","cw","da","withPath","array$1","Linear","curveLinear","shapeLine","constant","curve","pointX","pointY","defined0","shapeArea","area","x0z","y0z","arealine","Bump","bumpX","bumpY","noop$5","that","Basis","curveBasis","BasisClosed","curveBasisClosed","BasisOpen","curveBasisOpen","LinearClosed","curveLinearClosed","slope3","h0","h1","s0","s1","slope2","t0","t1","MonotoneX","MonotoneY","ReflectContext","monotoneX","monotoneY","Natural","px","controlPoints","py","i0","i1","curveNatural","Step","curveStep","stepBefore","stepAfter","stackOffsetNone","series","stackOrderNone","stackValue","stackSeries","shapeStack","orderNone","offsetNone","sz","stackOffsetExpand","stackOffsetSilhouette","stackOffsetWiggle","s2","si","sij0","sij1","s3","sk","skj0","skj1","uniqBy","mapper","identity","isArrayLikeObject","isPrimitive","isMatchWith","isMatchWithInternal","doesMatch","srcValue","isObjectMatch","isArrayMatch","isMapMatch","isSetMatch","sourceValue","targetValue","countedIndex","sourceItem","targetItem","isMatch","booleanTag","argumentsTag","functionTag","uint8ArrayTag","uint8ClampedArrayTag","uint16ArrayTag","uint32ArrayTag","bigUint64ArrayTag","int8ArrayTag","int16ArrayTag","int32ArrayTag","bigInt64ArrayTag","float32ArrayTag","float64ArrayTag","require$$4","cloneDeepWith","cloneValue","cloneDeepWithImpl","valueToClone","keyToClone","objectToClone","cloned","copyProperties","isCloneableObject","cloneDeepWith$1","IS_UNSIGNED_INTEGER","has","resolvedPath","matchesProperty","uniqBy$1","iteratee$1","getUniqPayload","defaultUniqBy","objectIs","useDebugValue","useSyncExternalStore$2","subscribe","getSnapshot","inst","forceUpdate","checkIfSnapshotChanged","latestGetSnapshot","nextValue","useSyncExternalStore$1","useSyncExternalStoreShim_production","shimModule","useSyncExternalStore","withSelector_production","getServerSnapshot","instRef","memoizedSelector","nextSnapshot","hasMemo","memoizedSnapshot","currentSelection","memoizedSelection","nextSelection","maybeGetServerSnapshot","withSelectorModule","RechartsReduxContext","noopDispatch","useAppDispatch","addNestedSubNoop","refEquality","useAppSelector","useSyncExternalStoreWithSelector","assertIsFunction","errorMessage","assertIsObject","assertIsArrayOfFunctions","itemTypes","ensureIsArray","getDependencies","createSelectorArgs","collectInputSelectorResults","inputSelectorArgs","inputSelectorResults","StrongRef","Ref","UNTERMINATED","TERMINATED","createCacheNode","weakMapMemoize","fnNode","resultEqualityCheck","resultsCount","cacheNode","objectCache","objectNode","primitiveCache","primitiveNode","terminatedNode","lastResultValue","createSelectorCreator","memoizeOrOptions","memoizeOptionsFromArgs","createSelectorCreatorOptions","createSelector2","recomputations","dependencyRecomputations","directlyPassedOptions","resultFunc","combinedOptions","memoizeOptions","argsMemoize","argsMemoizeOptions","finalMemoizeOptions","finalArgsMemoizeOptions","memoizedResultFunc","createSelector","createStructuredSelector","inputSelectorsObject","selectorCreator","inputSelectorKeys","getPriority","compareValues","aPriority","bPriority","regexIsDeepProp","regexIsPlainProp","isKey","orderBy","criteria","orders","guard","getValueByNestedPath","getValueByCriterion","criterion","preparedCriteria","comparedResult","flooredDepth","currentDepth","isIterateeCall","sortBy","selectLegendSettings","selectLegendSize","selectAllLegendPayload2DArray","selectLegendPayload","payloads","itemSorter","EPS","useElementOffset","extraDependencies","lastBoundingBox","setLastBoundingBox","updateBoundingBox","box","chartLayoutSlice","createSlice","setMargin","setLayout","setChartSize","setScale","chartLayoutReducer","_toPropertyKey","_toPrimitive","RADIAN","radianToDegree","angleInRadian","polarToCartesian","cy","radius","angle","getMaxRadius","distanceBetweenPoints","anotherPoint","getAngleOfPoint","cos","formatAngleOfSector","startAngle","endAngle","startCnt","endCnt","reverseFormatAngleOfSector","inRangeOfSector","innerRadius","outerRadius","formatAngle","inRange","getValueByDataKey","dataKey","calculateActiveTickIndex","coordinate","ticks","unsortedTicks","axisType","_ticks$length","sameDirectionCoord","diffInterval","curInRange","afterInRange","sameInterval","minValue","maxValue","appendOffsetOfLegend","legendSettings","legendSize","boxWidth","boxHeight","verticalAlign","layout","isCategoricalAxis","getCoordinatesOfGrid","syncWithTicks","hasMin","hasMax","getTicksOfAxis","axis","isGrid","isAll","duplicateDomain","realScaleType","isCategorical","categoricalDomain","tickCount","niceTicks","offsetForBand","scaleContent","checkDomainOfScale","domain","truncateByDomain","offsetSign","positive","negative","offsetPositive","STACK_OFFSET_MAP","getStackedData","dataKeys","offsetType","offsetAccessor","getNormalizedStackId","publicStackId","getCateCoordinateOfLine","bandSize","matchedTick","getCateCoordinateOfBar","getBaseValueOfBar","numericAxis","getDomainOfSingle","makeDomainFinite","getDomainOfStackGroups","stackGroups","stackId","stackedData","MIN_VALUE_REG","MAX_VALUE_REG","getBandSizeOfAxis","isBar","bandWidth","orderedTicks","getTooltipEntry","tooltipEntrySettings","getTooltipNameProp","nameFromItem","polarViewBox","isInRange","getActiveCoordinate","tooltipTicks","activeIndex","rangeObj","_angle","_radius","calculateTooltipPos","selectChartWidth","selectChartHeight","selectContainerScale","selectMargin","selectAllXAxes","xAxisMap","selectAllYAxes","yAxisMap","DATA_ITEM_INDEX_ATTRIBUTE_NAME","DATA_ITEM_DATAKEY_ATTRIBUTE_NAME","DEFAULT_Y_AXIS_WIDTH","selectBrushHeight","selectChartOffset","chartWidth","chartHeight","brushHeight","xAxes","yAxes","offsetH","orientation","offsetV","brushBottom","selectChartViewBox","selectAxisViewBox","PanoramaContext","useIsPanorama","selectBrushSettings","selectBrushDimensions","brushSettings","useViewBox","_useAppSelector","panorama","rootViewBox","brushDimensions","brushPadding","manyComponentsThrowErrorsIfOffsetIsUndefined","useOffset","_useAppSelector2","useChartWidth","useChartHeight","manyComponentsThrowErrorsIfMarginIsUndefined","useMargin","_useAppSelector3","selectChartLayout","useChartLayout","ReportChartSize","ReportChartMargin","NOTHING","DRAFTABLE","DRAFT_STATE","die","isDraft","isDraftable","cachedCtorStrings","each","getArchtype","propOrOldValue","latest","shallowCopy","isPlain","descriptors","freeze","isFrozen","dontMutateMethodOverride","dontMutateFrozenCollections","getPlugin","pluginKey","getCurrentScope","createScope","parent_","immer_","usePatchesInScope","patchListener","revokeScope","leaveScope","revokeDraft","enterScope","immer2","draft","processResult","baseDraft","finalize","maybeFreeze","rootScope","useStrictIteration","childValue","finalizeProperty","resultEach","isSet2","parentState","targetObject","rootPath","targetIsSet","childIsFrozen","createProxyProxy","traps","objectTraps","arrayTraps","revoke","proxy","readPropFromProto","prepareCopy","createProxy","getDescriptorFromProto","current2","currentState","markChanged","Immer2","recipe","defaultBase","base2","hasError","ip","patches","inversePatches","applyPatchesImpl","currentImpl","immer","produce","legendSlice","setLegendSize","setLegendSettings","addLegendPayload","removeLegendPayload","legendReducer","defaultFormatter","DefaultTooltipContent","contentStyle","labelStyle","wrapperClassName","labelClassName","labelFormatter","accessibilityLayer","renderContent","listStyle","finalFormatter","finalValue","finalName","formatted","finalItemStyle","finalStyle","finalLabelStyle","hasLabel","finalLabel","wrapperCN","labelCN","accessibilityAttributes","CSS_CLASS_PREFIX","TOOLTIP_HIDDEN","getTooltipCSSClassName","translateX","translateY","getTooltipTranslateXY","allowEscapeViewBox","offsetTopLeft","reverseDirection","tooltipDimension","viewBoxDimension","viewBoxKey","_tooltipBoundary","_viewBoxBoundary","tooltipBoundary","viewBoxBoundary","getTransformStyle","useTranslate3d","getTooltipTranslate","tooltipBox","cssProperties","TooltipBoundingBox","PureComponent","_this$props$coordinat","_this$props$coordinat2","_this$props$coordinat3","_this$props$coordinat4","_this$props$coordinat5","_this$props$coordinat6","animationDuration","animationEasing","hasPayload","isAnimationActive","wrapperStyle","hasPortalFromProps","cssClasses","positionStyles","outerStyle","parseIsSsrByDefault","Global","useAccessibilityLayer","isWellBehavedNumber","isPositiveNumber","CURVE_FACTORIES","curveBumpX","curveBumpY","curveMonotoneX","curveMonotoneY","curveStepAfter","curveStepBefore","getY","getCurveFactory","getPath","baseLine","connectNulls","curveFactory","formatPoints","lineFunction","formatBaseLine","areaPoints","Curve","pathRef","realPath","Cross","getCursorRectangle","activeCoordinate","tooltipAxisBandSize","halfSize","resolveDefaultProps","realProps","resolvedProps","dp","withDefaults","isEqualWith","areValuesEqual","isEqualWithImpl","aParent","bParent","areObjectsEqual","aTag","bTag","aStack","bStack","aValues","bValues","aValue","bValue","aKeys","bKeys","propKey","aProp","bProp","createAnimateManager","timeoutController","currStyle","shouldStop","cancelTimeout","_style","restStyles","_handleChange","ACCURACY","cubicBezierFactor","c1","c2","evaluatePolynomial","cubicBezier","derivativeCubicBezier","newParams","configBezier","easing","curveX","curveY","derCurveX","rangeValue","bezier","evalT","derVal","configSpring","stiff","damping","dt","stepper","currX","destX","currV","FSpring","FDamping","newV","newX","configEasing","getDashCase","getTransitionVal","getIntersectionKeys","preObj","nextObj","mapObject","alpha","needContinue","calStepperVals","preVals","steps","nextStepVals","createStepperUpdate","interKeys","preTime","stepperStyle","getCurrStyle","shouldStopAnimation","stopAnimation","stepperUpdate","deltaTime","createTimingUpdate","timingStyle","beginTime","timingUpdate","configUpdate","RequestAnimationFrameTimeoutController","startTime","requestId","executeCallback","createDefaultAnimationManager","AnimateImpl","attributeName","animationManager","canBegin","shouldReAnimate","currentFrom","isTriggered","_newState","onAnimationEnd","onAnimationStart","startAnimation","finalStartAnimation","propsTo","transition","onAnimationReStart","stateStyle","cloneContainer","cloneElement","AnimationManagerContext","Animate","_props$animationManag","contextAnimationManager","getRectanglePath","maxRadius","ySign","xSign","clockWise","newRadius","_newRadius","Rectangle","rectangleProps","totalLength","setTotalLength","pathTotalLength","animationBegin","isUpdateAnimationActive","currWidth","currHeight","currY","getRadialCursorPoints","endPoint","getDeltaAngle","deltaAngle","getTangentCircle","isExternal","cornerRadius","cornerIsExternal","centerRadius","theta","centerAngle","center","circleTangency","lineTangencyAngle","lineTangency","getSectorPath","tempEndAngle","outerStartPoint","outerEndPoint","innerStartPoint","innerEndPoint","getSectorWithCorner","forceCornerRadius","soct","solt","sot","eoct","eolt","eot","outerArcAngle","sict","silt","sit","eict","eilt","eit","innerArcAngle","Sector","sectorProps","deltaRadius","cr","getCursorPoints","innerPoint","outerPoint","toFinite","ascending","descending","bisector","compare1","compare2","zero","valueof","ascendingBisect","bisectRight","InternMap","keyof","intern_get","intern_set","intern_delete","_intern","compareDefined","ascendingDefined","e10","e5","e2","tickSpec","power","i2","inc","tickIncrement","tickStep","quickselect","sd","newLeft","newRight","quantile","value0","value1","quantileSorted","initRange","initInterpolator","interpolator","implicit","ordinal","band","ordinalRange","r0","r1","bandwidth","paddingInner","paddingOuter","rescale","pointish","constructor","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","channels","color_formatHex","color_formatHex8","color_formatHsl","color_formatRgb","hslConvert","rgbn","Rgb","rgba","hsla","rgbConvert","rgb","opacity","clampi","clampa","rgb_formatHex","rgb_formatHex8","rgb_formatRgb","Hsl","hsl","m1","hsl2rgb","clamph","clampt","constant$3","linear","exponential","gamma","nogamma","interpolateRgb","rgbGamma","colorRgb","numberArray","isNumberArray","genericArray","nb","na","date$1","reA","reB","interpolateString","bi","am","bm","bs","interpolate$1","interpolateRound","degrees","decompose","skewX","svgNode","parseCss","parseSvg","interpolateTransform","pxComma","pxParen","degParen","translate","xa","ya","xb","yb","rotate","interpolateTransformCss","interpolateTransformSvg","epsilon2","cosh","sinh","tanh","interpolateZoom","zoomRho","rho","rho2","rho4","zoom","p0","ux0","uy0","w0","ux1","uy1","w1","d2","d1","b0","b1","coshr0","_1","_2","_4","piecewise","clamper","bimap","d0","polymap","bisect","interpolateValue","untransform","clamp","continuous","formatDecimal","formatDecimalParts","coefficient","exponent","formatGroup","grouping","thousands","formatNumerals","numerals","formatSpecifier","specifier","FormatSpecifier","formatTrim","prefixExponent","formatPrefixAuto","formatRounded","formatTypes","identity$4","formatLocale$1","locale","currencyPrefix","currencySuffix","nan","newFormat","fill","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","padding","formatPrefix","defaultLocale","formatLocale","precisionFixed","precisionPrefix","precisionRound","tickFormat","linearish","prestep","maxIter","nice","interval","transformLog","transformExp","transformLogn","transformExpn","pow10","powp","logp","reflect","loggish","logs","pows","log","transformSymlog","transformSymexp","symlogish","symlog","transformPow","transformSqrt","transformSquare","powish","pow","sqrt","square","unsquare","radial","squared","thresholds","quantize","timeInterval","floori","offseti","millisecond","durationSecond","durationMinute","durationHour","durationDay","durationWeek","durationMonth","durationYear","timeMinute","utcMinute","timeHour","utcHour","timeDay","utcDay","unixDay","timeWeekday","timeSunday","timeMonday","timeTuesday","timeWednesday","timeThursday","timeFriday","timeSaturday","utcWeekday","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","timeMonth","utcMonth","timeYear","utcYear","ticker","year","month","week","day","hour","minute","tickIntervals","tickInterval","utcTicks","utcTickInterval","timeTicks","timeTickInterval","localDate","utcDate","newDate","locale_dateTime","locale_date","locale_time","locale_periods","locale_weekdays","locale_shortWeekdays","locale_months","locale_shortMonths","periodRe","formatRe","periodLookup","formatLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatShortWeekday","formatWeekday","formatShortMonth","formatMonth","formatDayOfMonth","formatMicroseconds","formatYearISO","formatFullYearISO","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","formatPeriod","formatQuarter","formatUnixTimestamp","formatUnixTimestampSeconds","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYear","formatFullYear","formatZone","formatLiteralPercent","utcFormats","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCDayOfMonth","formatUTCMicroseconds","formatUTCYearISO","formatUTCFullYearISO","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCPeriod","formatUTCQuarter","formatUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parses","parseShortWeekday","parseWeekday","parseShortMonth","parseMonth","parseLocaleDateTime","parseDayOfMonth","parseMicroseconds","parseYear","parseFullYear","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parsePeriod","parseQuarter","parseUnixTimestamp","parseUnixTimestampSeconds","parseSeconds","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekdayNumberSunday","parseWeekNumberMonday","parseLocaleDate","parseLocaleTime","parseZone","parseLiteralPercent","pad","pads","newParse","parseSpecifier","numberRe","percentRe","requoteRe","requote","dISO","dow","UTCdISO","timeFormat","utcFormat","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","timeWeek","timeSecond","utcTime","utcWeek","utcSecond","k10","sequentialLog","sequentialSymlog","sequentialPow","sequentialSqrt","sequentialQuantile","t2","k21","r2","diverging","divergingLog","divergingSymlog","divergingPow","divergingSqrt","selectChartDataWithIndexes","selectChartDataAndAlwaysIgnoreIndexes","dataState","dataEndIndex","selectChartDataWithIndexesIfNotInPanorama","_xAxisId","_yAxisId","isPanorama","isWellFormedNumberDomain","extendDomain","providedDomain","boundaryDomain","allowDataOverflow","numericalDomainSpecifiedWithoutRequiringData","userDomain","providedMin","providedMax","finalMin","finalMax","parseNumericalUserDomain","dataDomain","_match","MAX_DIGITS","Decimal","external","decimalError","invalidArgument","exponentOutOfRange","mathfloor","mathpow","isDecimal","ONE","BASE","LOG_BASE","MAX_E","xdL","ydL","getBase10Exponent","wpr","subtract","exp","digitsToString","carry","rL","xd","yd","checkInt32","yIsInt","yn","ws","indexOfLastWord","getZeroString","multiplyInteger","temp","aL","bL","prod","prodL","qd","rem","remL","rem0","xi","xL","yd0","yL","yz","denominator","sum","getLn10","zs","c0","numerator","parseDecimal","rd","doRound","xdi","xe","xLTy","isExp","ps","PLACE_HOLDER","isPlaceHolder","curry0","_curried","curryN","restArgs","curry","compose","_len3","_key3","firstFn","tailsFn","lastArgs","_len4","_key4","_lastArgs","getDigitCount","rangeStep","newA","newB","getValidInterval","validMin","validMax","getFormatStep","roughStep","allowDecimals","correctionFactor","digitCount","digitCountValue","stepRatio","stepRatioScale","amendStepRatio","formatStep","getTickOfSingleValue","absVal","middleIndex","_calculateStep","belowCount","upCount","scaleCount","getNiceTickValuesFn","cormin","cormax","_values","tickMin","tickMax","getTickValuesFixedDomainFn","getNiceTickValues","getTickValuesFixedDomain","selectRootMaxBarSize","selectBarGap","selectBarCategoryGap","selectRootBarSize","selectStackOffsetType","selectChartName","selectSyncId","selectSyncMethod","selectEventEmitter","defaultPolarAngleAxisProps","defaultPolarRadiusAxisProps","combineAxisRangeWithReverse","axisSettings","axisRange","implicitAngleAxis","implicitRadiusAxis","implicitRadialBarAngleAxis","implicitRadialBarRadiusAxis","selectAngleAxis","angleAxisId","selectRadiusAxis","radiusAxisId","selectPolarOptions","selectMaxRadius","selectInnerRadius","polarChartOptions","selectOuterRadius","combineAngleAxisRange","polarOptions","selectAngleAxisRange","selectRadiusAxisRange","selectPolarViewBox","pickAxisType","pickAxisId","_axisType","axisId","defaultNumericDomain","implicitXAxis","selectXAxisSettings","implicitYAxis","selectYAxisSettings","implicitZAxis","selectZAxisSettings","selectBaseAxis","selectCartesianAxisSettings","selectAxisSettings","selectHasBar","itemAxisPredicate","selectUnfilteredCartesianItems","selectAxisPredicate","combineGraphicalItemsSettings","graphicalItems","axisPredicate","selectCartesianItemsSettings","filterGraphicalNotStackedItems","cartesianItems","selectCartesianItemsSettingsExceptStacked","combineGraphicalItemsData","selectCartesianGraphicalItemsData","combineDisplayedData","graphicalItemsData","chartData","dataStartIndex","selectDisplayedData","combineAppliedValues","selectAllAppliedValues","isErrorBarRelevantForAxisType","errorBar","onlyAllowNumbers","getErrorDomainByDataKey","appliedValue","relevantErrorBars","eb","errorValue","lowBound","highBound","combineStackGroups","displayedData","stackOffsetType","initialItemsGroups","itemsGroup","selectStackGroups","combineDomainOfStackGroups","domainOfStackGroups","selectDomainOfStackGroups","combineAppliedNumericalValuesIncludingErrorValues","_item$errorBars","_axisSettings$dataKey","valueByDataKey","selectAllAppliedNumericalValuesIncludingErrorValues","onlyAllowNumbersAndStringsAndDates","computeNumericalDomain","dataWithErrorDomains","allDataSquished","onlyNumbers","computeDomainOfTypeCategory","getDomainDefinition","_axisSettings$domain","allValues","mergeDomains","domains","allDomains","selectReferenceDots","filterReferenceElements","selectReferenceDotsByAxis","selectReferenceAreas","selectReferenceAreasByAxis","selectReferenceLines","selectReferenceLinesByAxis","combineDotsDomain","allCoords","selectReferenceDotsDomain","combineAreasDomain","areas","selectReferenceAreasDomain","combineLinesDomain","selectReferenceLinesDomain","selectReferenceElementsDomain","dotsDomain","linesDomain","areasDomain","selectDomainDefinition","combineNumericalDomain","domainDefinition","allDataWithErrorDomains","referenceElementsDomain","domainFromUserPreference","selectNumericalDomain","expandDomain","combineAxisDomain","allAppliedValues","numericalDomain","selectAxisDomain","combineRealScaleType","axisConfig","hasBar","chartType","d3Scales","selectRealScaleType","getD3ScaleFromType","combineScaleFunction","axisDomain","d3ScaleFunction","combineNiceTicks","selectNiceTicks","combineAxisDomainWithNiceTicks","minFromDomain","minFromTicks","maxFromDomain","maxFromTicks","selectAxisDomainIncludingNiceTicks","selectSmallestDistanceBetweenValues","smallestDistanceBetweenValues","sortedValues","selectCalculatedPadding","_3","smallestDistanceInPercent","barCategoryGap","rangeWidth","halfBand","selectCalculatedXAxisPadding","xAxisSettings","selectCalculatedYAxisPadding","yAxisSettings","selectXAxisPadding","calculated","_padding$left","_padding$right","selectYAxisPadding","_padding$top","_padding$bottom","combineXAxisRange","_axisId","combineYAxisRange","selectAxisRange","_selectZAxisSettings","selectAxisRangeWithReverse","selectAxisScale","_item$errorBars2","compareIds","pickAxisOrientation","pickMirror","_orientation","mirror","selectAllXAxesWithOffsetType","allAxes","selectAllYAxesWithOffsetType","getXAxisSize","getYAxisSize","selectXAxisSize","combineXAxisPositionStartingPoint","combineYAxisPositionStartingPoint","selectAllXAxesOffsetSteps","allAxesWithSameOffsetType","axisSize","needSpace","selectAllYAxesOffsetSteps","selectXAxisPosition","allSteps","stepOfThisAxis","selectYAxisPosition","selectYAxisSize","selectCartesianAxisSize","combineDuplicateDomain","chartLayout","appliedValues","allowDuplicatedCategory","allData","av","selectDuplicateDomain","combineCategoricalDomain","selectCategoricalDomain","selectAxisPropsNeededForCartesianGridTicksGenerator","combineAxisTicks","ticksOrNiceTicks","selectTicksOfAxis","combineGraphicalItemTicks","selectTicksOfGraphicalItem","selectAxisWithScale","selectZAxisScale","selectChartDirection","allXAxes","allYAxes","selectDefaultTooltipEventType","selectValidateTooltipEventTypes","combineTooltipEventType","defaultTooltipEventType","validateTooltipEventTypes","eventType","selectTooltipEventType","useTooltipEventType","combineActiveLabel","_tooltipTicks$n","selectTooltipSettings","noInteraction","tooltipSlice","addTooltipEntrySettings","removeTooltipEntrySettings","setTooltipSettingsState","setActiveMouseOverItemIndex","mouseLeaveItem","mouseLeaveChart","setActiveClickItemIndex","setMouseOverAxisIndex","setMouseClickAxisIndex","setSyncInteraction","setKeyboardInteraction","tooltipReducer","chooseAppropriateMouseInteraction","tooltipState","tooltipEventType","trigger","hasBeenActivePreviously","tooltipInteractionState","combineTooltipInteractionState","defaultIndex","appropriateMouseInteraction","activeFromProps","combineActiveTooltipIndex","tooltipInteraction","desiredIndex","indexAsNumber","lowerLimit","upperLimit","combineCoordinateForDefaultIndex","tooltipConfigurations","tooltipPayloadSearcher","firstConfiguration","maybePosition","combineTooltipPayloadConfigurations","filterByDataKey","tpc","_tpc$settings","selectTooltipPayloadSearcher","selectTooltipState","selectTooltipAxisType","selectTooltipAxisId","selectTooltipAxis","selectTooltipAxisRealScaleType","selectAllUnfilteredGraphicalItems","polarItems","selectTooltipAxisPredicate","selectAllGraphicalItemsSettings","selectTooltipGraphicalItemsData","selectTooltipDisplayedData","selectAllTooltipAppliedValues","selectTooltipAxisDomainDefinition","selectTooltipStackGroups","selectTooltipDomainOfStackGroups","selectTooltipItemsSettingsExceptStacked","selectTooltipAllAppliedNumericalValuesIncludingErrorValues","selectReferenceDotsByTooltipAxis","selectTooltipReferenceDotsDomain","selectReferenceAreasByTooltipAxis","selectTooltipReferenceAreasDomain","selectReferenceLinesByTooltipAxis","selectTooltipReferenceLinesDomain","selectTooltipReferenceElementsDomain","selectTooltipNumericalDomain","selectTooltipAxisDomain","selectTooltipNiceTicks","selectTooltipAxisDomainIncludingNiceTicks","selectTooltipAxisRange","selectTooltipAxisRangeWithReverse","selectTooltipAxisScale","selectTooltipDuplicateDomain","selectTooltipCategoricalDomain","combineTicksOfTooltipAxis","selectTooltipAxisTicks","validateTooltipEventType","selectTooltipTrigger","selectDefaultIndex","selectTooltipInteractionState","selectActiveTooltipIndex","selectActiveLabel","selectActiveTooltipDataKey","selectTooltipPayloadConfigurations","selectTooltipCoordinateForDefaultIndex","selectActiveTooltipCoordinate","defaultIndexCoordinate","selectIsTooltipActive","useTooltipAxis","useTooltipAxisBandSize","tooltipAxis","tooltipAxisScale","useChartName","pickTooltipEventType","pickTrigger","_tooltipEventType","pickDefaultIndex","_trigger","getSliced","selectOrderedTooltipTicks","selectActiveIndex","selectTooltipDataKey","selectCoordinateForDefaultIndex","selectActiveCoordinate","_tooltipInteractionSt","selectFinalData","dataDefinedOnItem","dataDefinedOnChart","combineTooltipPayload","tooltipPayloadConfigurations","chartDataState","activeLabel","computedData","agg","_settings$dataKey","finalData","sliced","finalDataKey","finalNameKey","tooltipPayload","newSettings","_getValueByDataKey","selectTooltipPayload","combineActiveProps","chartEvent","tooltipAxisType","tooltipAxisRange","orderedTooltipTicks","CursorInternal","chartName","activePayload","activeTooltipIndex","restProps","cursorComp","extraClassName","cursorProps","Cursor","TooltipPortalContext","useTooltipPortal","Events","EE","once","addListener","evt","clearEvent","EventEmitter","ee","listeners","a2","a3","a4","a5","eventCenter","TOOLTIP_SYNC_EVENT","BRUSH_SYNC_EVENT","arrayTooltipSearcher","strIndex","numIndex","optionsSlice","optionsReducer","createEventEmitter","selectSynchronisedTooltipState","initialChartDataState","chartDataSlice","setChartData","setDataStartEndIndexes","setComputedData","chartDataReducer","useTooltipSyncEventsListener","mySyncId","myEventEmitter","syncMethod","incomingSyncId","activeTick","syncMethodParam","validateChartX","validateChartY","syncAction","useBrushSyncEventsListener","useSynchronisedEventsFromOtherCharts","useTooltipChartSynchronisation","isTooltipActive","activeDataKey","eventEmitterSymbol","syncId","isReceivingSynchronisation","emptyPayload","defaultTooltipProps","outsideProps","filterNull","payloadUniqBy","portalFromProps","defaultIndexAsString","payloadFromRedux","labelFromRedux","tooltipPortalFromContext","finalIsActive","tooltipPortal","finalPayload","tooltipElement","maxBy","maxElement","maxBy$1","polarAxisSlice","addRadiusAxis","removeRadiusAxis","addAngleAxis","removeAngleAxis","polarAxisReducer","graphicalItemsSlice","addBar","removeBar","addCartesianGraphicalItem","removeCartesianGraphicalItem","addPolarGraphicalItem","removePolarGraphicalItem","graphicalItemsReducer","SetTooltipEntrySettings","ChartDataContextProvider","SetComputedData","brushSlice","setBrushSettings","brushReducer","referenceElementsSlice","addDot","removeDot","addArea","removeArea","addLine","removeLine","referenceElementsReducer","shallowEqual","cartesianAxisSlice","addXAxis","removeXAxis","addYAxis","removeYAxis","addZAxis","removeZAxis","updateYAxisWidth","cartesianAxisReducer","pickChartPointer","chartPointer","selectActivePropsFromChartPointer","getChartPointer","mouseClickAction","createAction","mouseClickMiddleware","createListenerMiddleware","listenerApi","mousePointer","activeProps","mouseMoveAction","mouseMoveMiddleware","reduxDevtoolsJsonStringifyReplacer","rootPropsSlice","_action$payload$barGa","rootPropsReducer","updateOptions","polarOptionsSlice","updatePolarOptions","polarOptionsReducer","keyDownAction","focusAction","keyboardEventsMiddleware","accessibilityLayerIsActive","keyboardInteraction","currentIndex","_coordinate","directionMultiplier","movement","externalEventAction","externalEventsMiddleware","selectAllTooltipPayloadConfiguration","selectTooltipCoordinate","tooltipIndex","_dataKey","_tooltipIndex","allTooltipConfigurations","mostRelevantTooltipConfiguration","tooltipConfiguration","touchEventAction","touchEventMiddleware","touchEvent","_target$getAttribute","itemIndex","rootReducer","combineReducers","createRechartsStore","preloadedState","configureStore","getDefaultMiddleware","RechartsStoreProvider","reduxStoreName","storeRef","nonNullContext","useReportScale","setRef","newScale","RechartsWrapper","onContextMenu","onDoubleClick","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseUp","onTouchEnd","setTooltipPortal","legendPortal","setLegendPortal","setScaleRef","myOnClick","myOnMouseEnter","myOnMouseLeave","myOnMouseMove","myOnContextMenu","myOnDoubleClick","myOnMouseDown","myOnMouseUp","myOnTouchStart","myOnTouchMove","myOnTouchEnd","sumBy","_excluded2","interpolationGenerator","ka","kb","centerY","getSumOfIds","ids","getSumWithWeightedSource","sourceNode","getSumWithWeightedTarget","ascendingY","searchTargetsAndSources","sourceNodes","sourceLinks","targetNodes","targetLinks","updateDepthOfTargets","curNode","getNodesTree","nodeWidth","maxDepth","childWidth","getDepthTree","updateYOfTree","depthTree","nodePadding","yRatio","resolveCollisions","_node2","_dy","relaxLeftToRight","sourceSum","weightedSum","relaxRightToLeft","targetSum","updateYOfLinks","ty","tLen","_j2","sLen","_link","computeData","newLinks","getCoordinateOfTooltip","getPayloadOfTooltip","nameKey","sourceName","targetName","sankeyPayloadSearcher","splitIndex","targetType","getTooltipEntrySettings","stroke","strokeWidth","defaultSankeyMargin","renderLinkItem","sourceX","sourceY","sourceControlX","targetX","targetY","targetControlX","linkWidth","buildLinkProps","linkContent","linkCurvature","sourceRelativeY","targetRelativeY","interpolationFunc","linkProps","SankeyLinkElement","_onMouseEnter","_onMouseLeave","_onClick","AllSankeyLinkElements","modifiedLinks","renderNodeItem","buildNodeProps","nodeContent","NodeElement","_onMouseEnter2","_onMouseLeave2","_onClick2","AllNodeElements","_ref8","modifiedNodes","modifiedNode","Sankey","nextProps","contentHeight","TYPE_COLORS","TYPE_BORDER_COLORS","TYPE_LAYER_ORDER","DARKER_FILL","SankeyNode","currentNodeName","rightmostType","onNavigate","hoveredNodeName","onNodeHover","isHovered","isDimmed","baseFill","hoverFill","borderColor","isRightmost","labelX","labelAnchor","SankeyLink","linkHovered","setLinkHovered","hw","sourceType","fromColor","toColor","gradientId","isConnected","NodeDataFlowTab","djNode","navigate","useNavigate","sankeyData","setSankeyData","containerWidth","setContainerWidth","setHoveredNodeName","containerRef","upstreamNodes","downstreamNodes","upstream","downstream","cubeNodes","nonCubeDownstreams","allNodes","seedName","aLayer","bLayer","nodeIndex","hasOutgoing","phantomLinks","summaryParts","colDepths","maxColNodes","MIN_NODE_HEIGHT","NODE_PADDING","measureLabel","rightNodes","leftNodes","rightMargin","leftMargin","nodeEl","linkEl","createStoreImpl","previousState","getState","api","__vite_import_meta_env__","createStore","ReactExports","useSyncExternalStoreExports","useStoreWithEqualityFn","equalityFn","createWithEqualityFnImpl","defaultEqualityFn","useBoundStoreWithEqualityFn","createWithEqualityFn","shallow$1","keyA","Dispatch","parseTypenames","typenames","xhtml","creatorInherit","uri","creatorFixed","fullname","selector$h","selection_select","select","subgroups","subgroup","subnode","Selection","selectorAll","arrayAll","selection_selectAll","childMatcher","childFind","childFirst","selection_selectChild","childrenFilter","selection_selectChildren","selection_filter","sparse","selection_enter","EnterNode","datum","constant$2","bindIndex","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","keyValue","selection_data","bind","arraylike","enterGroup","updateGroup","exitGroup","selection_exit","selection_join","onenter","onupdate","onexit","selection_merge","groups0","groups1","m0","merges","group0","group1","selection_order","selection_sort","compareNode","sortgroups","sortgroup","selection_call","selection_nodes","selection_node","selection_size","selection_empty","selection_each","attrRemove","attrRemoveNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","selection_attr","defaultView","styleRemove","styleConstant","priority","styleFunction","selection_style","styleValue","propertyRemove","propertyConstant","propertyFunction","selection_property","classArray","classList","ClassList","classedAdd","classedRemove","classedTrue","classedFalse","classedFunction","selection_classed","textRemove","textConstant","textFunction","selection_text","htmlRemove","htmlConstant","htmlFunction","selection_html","raise","selection_raise","lower","selection_lower","selection_append","constantNull","selection_insert","selection_remove","selection_cloneShallow","selection_cloneDeep","selection_clone","selection_datum","contextListener","on","onAdd","selection_on","dispatchEvent","window","dispatchConstant","dispatchFunction","selection_dispatch","selection_iterator","selection_selection","sourceEvent","pointer","nonpassive","nonpassivecapture","nopropagation","noevent$1","dragDisable","noevent","yesdrag","noclick","constant$1","DragEvent","subject","defaultFilter","defaultContainer","defaultSubject","defaultTouchable","drag","touchable","gestures","mousedownx","mousedowny","mousemoving","touchending","clickDistance2","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","mousemoved","mouseupped","nodrag","frame","pokeDelay","taskHead","taskTail","clockLast","clockNow","clockSkew","clock","setFrame","clearNow","Timer","timer","timerFlush","wake","nap","poke","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","timing","schedules","tween","interrupt","selection_interrupt","tweenRemove","tween0","tween1","tweenFunction","transition_tween","tweenValue","string00","string1","interpolate0","string0","string10","transition_attr","attrInterpolate","attrInterpolateNS","attrTweenNS","attrTween","transition_attrTween","delayFunction","delayConstant","transition_delay","durationFunction","durationConstant","transition_duration","easeConstant","transition_ease","easeVarying","transition_easeVarying","transition_filter","Transition","transition_merge","onFunction","on0","on1","transition_on","removeFunction","transition_remove","transition_select","transition_selectAll","transition_selection","styleNull","styleMaybeRemove","listener0","transition_style","styleInterpolate","styleTween","transition_styleTween","transition_text","textInterpolate","textTween","transition_textTween","transition_transition","id0","id1","newId","transition_end","cancel","selection_prototype","cubicInOut","defaultTiming","easeCubicInOut","selection_transition","ZoomEvent","Transform","defaultExtent","defaultTransform","defaultWheelDelta","defaultConstrain","extent","translateExtent","dx0","dx1","dy0","dy1","constrain","wheelDelta","scaleExtent","touchstarting","touchfirst","touchDelay","wheelDelay","tapDistance","wheeled","dblclicked","k0","k1","centroid","clean","Gesture","wheelidled","currentTarget","dragEnable","l0","l1","dl","StoreContext","Provider$1","errorMessages","sourceHandle","edgeType","zustandErrorMessage","useStore","useStoreApi","selector$g","Panel","pointerEvents","positionClasses","Attribution","proOptions","EdgeText","labelShowBg","labelBgStyle","labelBgPadding","labelBgBorderRadius","edgeRef","edgeTextBbox","setEdgeTextBbox","edgeTextClasses","textBbox","EdgeText$1","memo","getDimensions","clampPosition","calcAutoPanVelocity","calcAutoPan","xMovement","yMovement","getHostForElement","getBoundsOfBoxes","box1","box2","rectToBox","boxToRect","nodeToRect","getBoundsOfRects","rect1","rect2","getOverlappingArea","rectA","rectB","xOverlap","yOverlap","isRectObject","isNumeric","internalsSymbol","elementSelectionKeys","devWarn","isReactKeyboardEvent","isInputDOMNode","kbEvent","isMouseEvent","getEventPosition","isMouseTriggered","evtX","evtY","isMacOs","BaseEdge","labelY","markerEnd","markerStart","interactionWidth","getMouseHandler$1","getEdgeCenter","xOffset","centerX","getBezierEdgeCenter","sourceControlY","targetControlY","offsetX","offsetY","ConnectionMode","PanOnScrollMode","SelectionMode","ConnectionLineType","MarkerType","getControl","getSimpleBezierPath","sourcePosition","targetPosition","SimpleBezierEdge","handleDirections","getDirection","getPoints","sourceDir","targetDir","sourceGapped","targetGapped","dirAccessor","currDir","sourceGapOffset","targetGapOffset","defaultCenterX","defaultCenterY","defaultOffsetX","defaultOffsetY","verticalSplit","horizontalSplit","sourceTarget","targetSource","gapOffset","dirAccessorOpposite","isSameDir","sourceGtTargetOppo","sourceLtTargetOppo","sourceGapPoint","targetGapPoint","maxXDistance","maxYDistance","getBend","bendSize","xDir","yDir","getSmoothStepPath","segment","SmoothStepEdge","pathOptions","StepEdge","getStraightPath","StraightEdge","calculateControlOffset","curvature","getControlWithCurvature","getBezierPath","BezierEdge","NodeIdContext","useNodeId","isEdge","getEdgeId","targetHandle","getMarkerId","rfId","connectionExists","addEdge","edgeParams","pointToRendererPoint","tx","tScale","snapToGrid","snapX","snapY","rendererPointToPoint","getNodePositionWithOrigin","nodeOrigin","getNodesBounds","currBox","getNodesInside","nodeInternals","partially","excludeNonSelectableNodes","paneRect","visibleNodes","selectable","positionAbsolute","nodeRect","overlappingArea","notInitialized","partiallyVisible","getConnectedEdges","nodeIds","getViewportForBounds","minZoom","maxZoom","xZoom","yZoom","clampedZoom","boundsCenterX","boundsCenterY","getD3Transition","getHandles","handleBounds","currentHandle","getClosestHandle","connectionRadius","handles","handleBelow","handleNodeId","handleType","getHandleType","handleId","validHandleResult","closestHandles","minDistance","defaultResult","hasValidHandle","hasTargetHandle","nullConnection","isValidHandle","connectionMode","fromNodeId","fromHandleId","fromType","isValidConnection","isTarget","handleToCheck","connectable","connectableEnd","connection","getHandleLookup","nodeId","sourceHandles","targetHandles","edgeUpdaterType","handleDomNode","resetRecentHandle","getConnectionStatus","isInsideConnectionRadius","isHandleValid","connectionStatus","handlePointerDown","onConnect","onReconnectEnd","domNode","autoPanOnConnect","onConnectStart","panBy","getNodes","cancelConnection","autoPanId","closestHandle","clickedHandle","containerBounds","prevActiveHandle","connectionPosition","autoPanStarted","handleLookup","autoPan","onPointerMove","onPointerUp","alwaysValid","selector$f","connectingSelector","startHandle","clickHandle","Handle","isConnectable","isConnectableStart","isConnectableEnd","connectOnClick","noPanClassName","connecting","clickConnecting","onConnectExtended","defaultEdgeOptions","onConnectAction","hasDefaultEdges","setEdges","onPointerDown","onClickConnectStart","onClickConnectEnd","connectionClickStartHandle","isValidConnectionStore","isValidConnectionHandler","Handle$1","DefaultNode","DefaultNode$1","InputNode","InputNode$1","OutputNode","OutputNode$1","GroupNode","selector$e","selectId","areEqual","SelectionListener","onSelectionChange","selectedNodes","selectedEdges","changeSelector","Wrapper$1","storeHasSelectionChange","selector$d","useStoreUpdater","setStoreState","useDirectStoreUpdater","StoreUpdater","defaultNodes","defaultEdges","onConnectEnd","nodesDraggable","nodesConnectable","nodesFocusable","edgesFocusable","edgesUpdatable","elevateNodesOnSelect","nodeExtent","onNodesChange","onEdgesChange","elementsSelectable","snapGrid","fitView","fitViewOptions","onNodesDelete","onEdgesDelete","onNodeDrag","onNodeDragStart","onNodeDragStop","onSelectionDrag","onSelectionDragStart","onSelectionDragStop","autoPanOnNodeDrag","onError","nodeDragThreshold","setDefaultNodesAndEdges","setMinZoom","setMaxZoom","setTranslateExtent","setNodeExtent","reset","edgesWithDefaults","ariaLiveStyle","ARIA_NODE_DESC_KEY","ARIA_EDGE_DESC_KEY","ARIA_LIVE_MESSAGE","selector$c","AriaLiveMessage","ariaLiveMessage","A11yDescriptions","disableKeyboardA11y","useKeyPress","keyPressed","setKeyPressed","modifierPressed","pressedKeys","keyCodes","keysToWatch","kc","keysFlat","downHandler","keyOrCode","useKeyOrCode","isMatchingKey","upHandler","resetHandler","isUp","eventCode","calculateXYZPosition","parentId","parentNodePosition","updateAbsoluteNodePositions","parentNodes","createNodeInternals","nextNodeInternals","selectedNodeZ","currInternals","internals","resetHandleBounds","d3Zoom","d3Selection","fitViewOnInitDone","fitViewOnInit","isInitialFitView","isVisible","optionNode","nodesInitialized","nextTransform","zoomIdentity","handleControlledNodeSelectionChange","nodeChanges","handleControlledEdgeSelectionChange","edgeChanges","updateNodesAndEdgesSelections","changedNodes","changedEdges","hasDefaultNodes","initialViewportHelper","selector$b","useViewportHelper","zoomLevel","nextZoom","domX","domY","relativePosition","rendererPosition","useReactFlow","viewportHelper","getNode","getEdges","getEdge","nextNodes","nextEdges","addNodes","addEdges","toObject","deleteElements","nodesDeleted","edgesDeleted","edgeIds","nodesToRemove","parentHit","deletableEdges","initialHitEdges","connectedEdges","edgesToRemove","edgeIdsToRemove","getNodeRect","nodeOrRect","isRect","getIntersectingNodes","currNodeRect","isNodeIntersecting","deleteKeyOptions","useGlobalKeyHandler","deleteKeyCode","multiSelectionKeyCode","deleteKeyPressed","multiSelectionKeyPressed","useResizeHandler","rendererNode","updateDimensions","viewChanged","prevViewport","eventTransform","eventToFlowTransform","isWrappedWithClass","isRightClickPan","panOnDrag","usedButton","selector$a","ZoomPane","onMoveStart","onMoveEnd","onPaneContextMenu","zoomOnScroll","zoomOnPinch","panOnScroll","panOnScrollSpeed","panOnScrollMode","zoomOnDoubleClick","defaultViewport","zoomActivationKeyCode","preventScrolling","noWheelClassName","timerId","isZoomingOrPanning","zoomedWithRightMouseButton","zoomPane","prevTransform","d3ZoomHandler","userSelectionActive","zoomActivationKeyPressed","mouseButton","isPanScrolling","panScrollTimeout","bbox","d3ZoomInstance","updatedTransform","constrainedTransform","currentZoom","pinchDelta","deltaNormalize","nextViewport","onViewportChangeStart","onViewportChange","onViewportChangeEnd","flowTransform","zoomScroll","pinchZoom","buttonAllowed","selector$9","UserSelection","userSelectionRect","handleParentExpand","updateItem","extendWidth","extendHeight","xDiff","yDiff","applyChanges","initElements","currentChanges","currentChange","applyNodeChanges","applyEdgeChanges","createSelectionChange","getSelectionChanges","selectedIds","willBeSelected","wrapHandler","selector$8","Pane","isSelecting","selectionMode","onSelectionStart","onSelectionEnd","onPaneClick","onPaneScroll","onPaneMouseEnter","onPaneMouseMove","onPaneMouseLeave","prevSelectedNodesCount","prevSelectedEdgesCount","dragging","resetUserSelection","resetSelectedElements","mousePos","startX","nextUserSelectRect","selectedEdgeIds","selectedNodeIds","hasActiveSelection","isParentSelected","hasSelector","nodeRef","getDragItems","clampNodeExtent","calcNextPosition","nextPosition","clampedNodeExtent","currentExtent","parentX","parentY","parentPosition","getEventHandlerParams","dragItems","extentedDragItems","getHandleBounds","nodeElement","handlesArray","nodeBounds","nodeOffset","getMouseHandler","handleNodeClick","unselect","addSelectedNodes","unselectNodesAndEdges","multiSelectionActive","useGetPointerPosition","pointerPos","wrapSelectionDragFunc","selectionFunc","useDrag","noDragClassName","handleSelector","isSelectable","selectNodesOnDrag","setDragging","lastPos","mousePosition","dragEvent","dragStarted","abortDrag","getPointerPosition","updateNodes","updateNodePositions","hasChange","nodesBox","adjustedNodeExtent","updatedPos","onDrag","currentNode","startDrag","onStart","dragHandler","onStop","useUpdateNodePositions","xVelo","yVelo","positionDiffX","positionDiffY","nodeUpdates","arrowKeyDiffs","wrapNode","NodeComponent","NodeWrapper","xPos","yPos","xPosOrigin","yPosOrigin","isDraggable","dragHandle","zIndex","initialized","hasHandleBounds","prevNodeRef","prevSourcePosition","prevTargetPosition","hasPointerEvents","updatePositions","onMouseEnterHandler","onMouseMoveHandler","onMouseLeaveHandler","onContextMenuHandler","onDoubleClickHandler","onSelectNodeHandler","currNode","typeChanged","sourcePosChanged","targetPosChanged","selector$7","NodesSelection","onSelectionContextMenu","transformString","NodesSelection$1","selector$6","FlowRenderer","selectionKeyCode","selectionOnDrag","panActivationKeyCode","_panOnScroll","_panOnDrag","nodesSelectionActive","selectionKeyPressed","panActivationKeyPressed","FlowRenderer$1","useVisibleNodes","onlyRenderVisible","createNodeTypes","standardTypes","wrappedTypes","specialTypes","getPositionWithOrigin","selector$5","NodeRenderer","updateNodeDimensions","resizeObserverRef","clampedPosition","posX","posY","posOrigin","NodeRenderer$1","shiftX","shiftY","EdgeUpdaterClassName","EdgeAnchor","onMouseOut","alwaysValidConnection","wrapEdge","EdgeComponent","EdgeWrapper","onEdgeDoubleClick","animated","sourceHandleId","targetHandleId","reconnectRadius","onReconnect","onReconnectStart","isReconnectable","updateHover","setUpdateHover","updating","setUpdating","markerStartUrl","markerEndUrl","onEdgeClick","addSelectedEdges","onEdgeDoubleClickHandler","onEdgeContextMenu","onEdgeMouseEnter","onEdgeMouseMove","onEdgeMouseLeave","handleEdgeUpdater","isSourceHandle","_onReconnectEnd","onEdgeUpdaterSourceMouseDown","onEdgeUpdaterTargetMouseDown","onEdgeUpdaterMouseEnter","onEdgeUpdaterMouseOut","inactive","createEdgeTypes","edgeTypes","getHandlePosition","getHandle","getEdgePositions","sourceNodeRect","targetNodeRect","sourceHandlePos","targetHandlePos","isEdgeVisible","sourcePos","sourceWidth","sourceHeight","targetWidth","targetHeight","edgeBox","getNodeData","defaultEdgeTree","groupEdgesByZLevel","elevateEdgesOnSelect","maxLevel","levelLookup","hasZIndex","edgeOrConnectedNodeSelected","selectedZIndex","edgeTree","useVisibleEdges","ArrowSymbol","ArrowClosedSymbol","MarkerSymbols","useMarkerSymbol","Marker","markerUnits","orient","markerSelector","defaultColor","markerId","MarkerDefinitions","MarkerDefinitions$1","selector$4","EdgeRenderer","defaultMarkerColor","onlyRenderVisibleElements","isMaxLevel","sourceHandleBounds","sourceIsValid","targetHandleBounds","targetIsValid","targetNodeHandles","edgeReconnectable","EdgeRenderer$1","selector$3","useOnInitHandler","onInit","rfInstance","isInitialized","oppositePosition","ConnectionLine","CustomComponent","fromNode","toX","toY","fromHandleBounds","fromHandle","fromHandleX","fromHandleY","fromX","fromY","fromPosition","toPosition","dAttr","pathParams","selector$2","ConnectionLineWrapper","useNodeOrEdgeTypes","nodeOrEdgeTypes","createTypes","GraphView","onNodeClick","onNodeDoubleClick","onNodeMouseEnter","onNodeMouseMove","onNodeMouseLeave","onNodeContextMenu","connectionLineType","connectionLineStyle","connectionLineComponent","connectionLineContainerStyle","nodeTypesWrapped","edgeTypesWrapped","GraphView$1","infiniteExtent","createRFStore","fitViewOnInitOptions","viewportNode","nextFitViewOnInitDone","nodeDragItems","positionChanged","triggerNodeChanges","edgeId","storeEdges","nodesToUnselect","edgesToUnselect","ReactFlowProvider","Wrapper","defaultNodeTypes","defaultEdgeTypes","initNodeOrigin","initSnapGrid","initDefaultViewport","ReactFlow","onEdgeUpdate","onEdgeUpdateStart","onEdgeUpdateEnd","edgeUpdaterRadius","attributionPosition","createUseItemsState","initialItems","setItems","onItemsChange","useNodesState","useEdgesState","MiniMapNode","strokeColor","shapeRendering","backgroundColor","MiniMapNode$1","selector$1","selectorNodes","getAttrFunction","MiniMapNodes","nodeStrokeColor","nodeColor","nodeClassName","nodeBorderRadius","nodeStrokeWidth","nodeColorFunc","nodeStrokeColorFunc","nodeClassNameFunc","MiniMapNodes$1","defaultWidth","defaultHeight","viewBB","ARIA_LABEL_KEY","MiniMap","nodeComponent","maskColor","maskStrokeColor","maskStrokeWidth","pannable","zoomable","inversePan","zoomStep","offsetScale","boundingRect","elementWidth","elementHeight","scaledWidth","scaledHeight","viewScale","viewWidth","labelledBy","viewScaleRef","zoomHandler","panHandler","moveScale","zoomAndPanHandler","onSvgClick","rfCoord","onSvgNodeClick","MiniMap$1","PlusIcon","MinusIcon","FitViewIcon","LockIcon","UnlockIcon","ControlButton","Controls","showZoom","showFitView","showInteractive","onZoomIn","onZoomOut","onFitView","onInteractiveChange","setIsVisible","isInteractive","minZoomReached","maxZoomReached","zoomIn","zoomOut","onZoomInHandler","onZoomOutHandler","onFitViewHandler","onToggleInteractivity","Controls$1","BackgroundVariant","LinePattern","lineWidth","DotPattern","defaultSize","Background","patternId","patternColor","patternSize","isDots","isCross","gapXY","scaledGap","scaledSize","patternDimensions","patternOffset","Background$1","_listCacheClear","eq_1","_assocIndexOf","_listCacheDelete","_listCacheGet","_listCacheHas","_listCacheSet","_ListCache","_stackClear","_stackDelete","_stackGet","_stackHas","_freeGlobal","_root","_Symbol","_getRawTag","_objectToString","_baseGetTag","isObject_1","isFunction_1","_coreJsData","_isMasked","_toSource","_baseIsNative","_getValue","_getNative","_Map","_nativeCreate","_hashClear","_hashDelete","_hashGet","_hashHas","_hashSet","_Hash","_mapCacheClear","_isKeyable","_getMapData","_mapCacheDelete","_mapCacheGet","_mapCacheHas","_mapCacheSet","_MapCache","_stackSet","require$$5","_Stack","_arrayEach","_baseAssignValue","_assignValue","_copyObject","_baseTimes","isObjectLike_1","_baseIsArguments","isArguments_1","isArray_1","stubFalse_1","_isIndex","isLength_1","_baseIsTypedArray","_baseUnary","isTypedArray_1","_arrayLikeKeys","_isPrototype","_overArg","_nativeKeys","_baseKeys","isArrayLike_1","keys_1","_baseAssign","_nativeKeysIn","_baseKeysIn","keysIn_1","_baseAssignIn","_copyArray","_arrayFilter","stubArray_1","_getSymbols","_copySymbols","_arrayPush","_getPrototype","_getSymbolsIn","_copySymbolsIn","_baseGetAllKeys","_getAllKeys","_getAllKeysIn","_DataView","_Promise","_Set","_WeakMap","require$$6","_getTag","_initCloneArray","_Uint8Array","_cloneArrayBuffer","_cloneDataView","_cloneRegExp","_cloneSymbol","_cloneTypedArray","_initCloneByTag","_baseCreate","_initCloneObject","_baseIsMap","isMap_1","_baseIsSet","isSet_1","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","_baseClone","clone_1","constant_1","createBaseFor","fromRight","iterable","_createBaseFor","baseFor","_baseFor","baseForOwn","_baseForOwn","createBaseEach","eachFunc","_createBaseEach","baseEach","_baseEach","identity_1","castFunction","_castFunction","forEach_1","baseFilter","_baseFilter","setCacheAdd","_setCacheAdd","setCacheHas","_setCacheHas","SetCache","_SetCache","arraySome","_arraySome","cacheHas","_cacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","equalFunc","isPartial","othLength","arrStacked","othStacked","arrValue","othValue","compared","othIndex","_equalArrays","mapToArray","_mapToArray","setToArray","_setToArray","equalByTag","_equalByTag","equalObjects","objProps","objLength","othProps","objStacked","skipCtor","objCtor","othCtor","_equalObjects","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","_baseIsEqualDeep","baseIsEqual","_baseIsEqual","baseIsMatch","noCustomizer","_baseIsMatch","isStrictComparable","_isStrictComparable","getMatchData","_getMatchData","matchesStrictComparable","_matchesStrictComparable","baseMatches","_baseMatches","isSymbol_1","reIsDeepProp","reIsPlainProp","_isKey","memoize_1","_memoizeCapped","_stringToPath","_arrayMap","_baseToString","toString_1","castPath","_castPath","_toKey","baseGet","_baseGet","get_1","baseHasIn","_baseHasIn","hasPath","hasFunc","_hasPath","hasIn","hasIn_1","baseMatchesProperty","_baseMatchesProperty","baseProperty","_baseProperty","basePropertyDeep","_basePropertyDeep","property_1","baseIteratee","_baseIteratee","filter_1","baseHas","_baseHas","has_1","isEmpty","isEmpty_1","isUndefined","isUndefined_1","baseMap","_baseMap","map_1","arrayReduce","accumulator","initAccum","_arrayReduce","baseReduce","_baseReduce","reduce_1","isString_1","asciiSize","_asciiSize","rsAstralRange","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsVarRange","rsZWJ","reHasUnicode","hasUnicode","_hasUnicode","rsAstral","rsCombo","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsOptVar","rsOptJoin","rsSeq","rsSymbol","reUnicode","unicodeSize","_unicodeSize","stringSize","_stringSize","size_1","isArrLike","transform_1","spreadableSymbol","isFlattenable","_isFlattenable","baseFlatten","_baseFlatten","_apply","nativeMax","overRest","otherArgs","_overRest","baseSetToString","_baseSetToString","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","lastCalled","stamp","_shortOut","setToString","_setToString","baseRest","_baseRest","baseFindIndex","fromIndex","_baseFindIndex","baseIsNaN","_baseIsNaN","strictIndexOf","_strictIndexOf","baseIndexOf","_baseIndexOf","arrayIncludes","_arrayIncludes","arrayIncludesWith","_arrayIncludesWith","noop_1","INFINITY","createSet","_createSet","baseUniq","includes","isCommon","computed","seenIndex","_baseUniq","isArrayLikeObject_1","union","arrays","union_1","baseValues","_baseValues","values_1","lodash","lodash_1","graph","Graph","DEFAULT_EDGE_NAME","GRAPH_NODE","EDGE_KEY_DELIM","newDefault","removeEdge","predsV","sucsV","neighbors","findParent","valueSpecified","arg0","edgeArgsToId","edgeObj","edgeArgsToObj","incrementOrInitEntry","edgeObjToId","decrementOrRemoveEntry","inV","outV","inEdges","isDirected","v_","w_","lib","writeNodes","writeEdges","nodeValue","edgeValue","components_1","cmpts","cmpt","dfs","priorityQueue","PriorityQueue","keyIndices","largest","origArrI","origArrJ","dijkstra_1","dijkstra","DEFAULT_WEIGHT_FUNC","weightFn","edgeFn","runDijkstra","pq","vEntry","updateNeighbors","wEntry","dijkstraAll_1","dijkstraAll","weightFunc","edgeFunc","tarjan_1","tarjan","findCycles_1","findCycles","floydWarshall_1","floydWarshall","runFloydWarshall","rowK","rowI","ik","kj","ij","altDistance","topsort_1","topsort","CycleException","isAcyclic_1","isAcyclic","dfs_1","navigation","doDfs","postorder","postorder_1","preorder_1","preorder","prim_1","pri","edgeWeight","alg","graphlib","graphlib_1","cloneDeep_1","_isIterateeCall","propsIndex","propsLength","defaults_1","createFind","findIndexFunc","_createFind","reWhitespace","trimmedEndIndex","_trimmedEndIndex","reTrimStart","baseTrim","_baseTrim","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","isBinary","toNumber_1","MAX_INTEGER","toFinite_1","toInteger","remainder","toInteger_1","findIndex_1","find_1","flatten_1","forIn","forIn_1","last_1","mapValues","mapValues_1","baseExtremum","_baseExtremum","baseGt","_baseGt","max_1","assignMergeValue","_assignMergeValue","isPlainObject_1","safeGet","_safeGet","toPlainObject","toPlainObject_1","baseMergeDeep","srcIndex","mergeFunc","isTyped","_baseMergeDeep","baseMerge","_baseMerge","createAssigner","assigner","_createAssigner","merge_1","baseLt","_baseLt","min_1","minBy","minBy_1","now_1","baseSet","nested","_baseSet","basePickBy","paths","_basePickBy","basePick","_basePick","flatRest","_flatRest","pick_1","nativeCeil","baseRange","_baseRange","createRange","_createRange","range_1","baseSortBy","comparer","_baseSortBy","compareAscending","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","_compareAscending","compareMultiple","objCriteria","othCriteria","ordersLength","_compareMultiple","baseOrderBy","iteratees","_baseOrderBy","sortBy_1","uniqueId_1","baseZipObject","assignFunc","valsLength","_baseZipObject","zipObject","zipObject_1","require$$22","require$$23","require$$24","require$$25","List","sentinel","unlink","filterOutLinks","greedyFas","greedyFAS","DEFAULT_WEIGHT_FN","buildState","doGreedyFAS","zeroIdx","sinks","removeNode","collectPredecessors","uEntry","assignBucket","fasGraph","maxIn","maxOut","prevWeight","acyclic","fas","dfsFAS","forwardName","util","addDummyNode","simplify","asNonCompoundGraph","successorWeights","predecessorWeights","intersectRect","buildLayerMatrix","normalizeRanks","removeEmptyRanks","addBorderNode","maxRank","partition","notime","simplified","simpleLabel","weightMap","sucs","layering","nodeRankFactor","normalizeEdge","vRank","wRank","edgeLabel","labelRank","origLabel","longestPath","slack","feasibleTree_1","feasibleTree","tightTree","findMinSlackEdge","shiftRanks","edgeV","initRank","networkSimplex_1","networkSimplex","initLowLimValues","initCutValues","calcCutValue","leaveEdge","enterEdge","exchangeEdges","assignCutValue","childLab","childIsTail","graphEdge","cutValue","isOutEdge","pointsToHead","otherWeight","isTreeEdge","otherCutValue","dfsAssignLowLim","nextLim","vLabel","wLabel","tailLabel","flip","candidates","isDescendant","updateRanks","flipped","rootLabel","rankUtil","rank_1","networkSimplexRanker","tightTreeRanker","longestPathRanker","parentDummyChains_1","parentDummyChains","postorderNums","pathData","findPath","lca","pathIdx","pathV","vPath","wPath","lim","nestingGraph","depths","treeDepths","nodeSep","sumWeights","childNode","childTop","childBottom","thisWeight","minlen","graphLabel","addBorderSegments_1","addBorderSegments","sg","sgNode","coordinateSystem","rankDir","swapWidthHeight","reverseY","swapXY","swapWidthHeightOne","reverseYOne","swapXYOne","initOrder_1","initOrder","simpleNodes","orderedVs","crossCount_1","crossCount","twoLayerCrossCount","northLayer","southLayer","southPos","southEntries","firstIndex","treeSize","weightSum","barycenter_1","barycenter","movable","nodeU","resolveConflicts_1","resolveConflicts","cg","mappedEntries","entryV","entryW","sourceSet","doResolveConflicts","handleIn","mergeEntries","handleOut","sort_1","biasRight","sortable","unsortable","vsIndex","compareWithBias","consumeUnsortable","sortSubgraph_1","sortSubgraph","subgraphs","barycenters","subgraphResult","mergeBarycenters","expandSubgraphs","blPred","brPred","buildLayerGraph_1","buildLayerGraph","relationship","createRootNode","addSubgraphConstraints_1","addSubgraphConstraints","rootPrev","prevChild","order_1","downLayerGraphs","buildLayerGraphs","upLayerGraphs","assignOrder","bestCC","lastBest","sweepLayerGraphs","ranks","layerGraphs","lg","bk","positionX","findType1Conflicts","conflicts","visitLayer","prevLayer","prevLayerLength","lastNode","findOtherInnerSegmentNode","scanNode","uLabel","uPos","addConflict","findType2Conflicts","south","southEnd","prevNorthBorder","nextNorthBorder","uNode","north","prevNorthPos","nextNorthPos","southLookahead","conflictsV","hasConflict","verticalAlignment","neighborFn","prevIdx","mp","il","horizontalCompaction","reverseSep","xs","blockG","buildBlockGraph","borderType","iterate","setXsFunc","nextNodesFunc","elem","pass1","pass2","blockGraph","sepFn","sep","vRoot","uRoot","prevMax","findSmallestWidthAlignment","xss","halfWidth","alignCoordinates","alignTo","alignToVals","alignToMin","alignToMax","vert","horiz","alignment","xsVals","adjustedLayering","smallestWidth","edgeSep","position_1","positionY","rankSep","prevY","layout_1","layoutGraph","buildLayoutGraph","runLayout","updateInputGraph","makeSpaceForEdgeLabels","removeSelfEdges","injectEdgeLabelProxies","assignRankMinMax","removeEdgeLabelProxies","insertSelfEdges","positionSelfEdges","removeBorderNodes","fixupEdgeLabelCoords","translateGraph","assignNodeIntersects","reversePointsForReversedEdges","inputGraph","inputLabel","layoutLabel","graphNumAttrs","graphDefaults","graphAttrs","nodeNumAttrs","nodeDefaults","edgeNumAttrs","edgeDefaults","edgeAttrs","canonicalize","selectNumberAttrs","minX","maxX","minY","maxY","marginX","marginY","getExtremes","nodeV","nodeW","orderShift","selfEdge","selfNode","newAttrs","debug","debugOrdering","layerMatrix","layerV","dagre","NODE_WIDTH","NODE_HEIGHT","HANDLE_BASE","TARGET_HANDLE","SOURCE_HANDLE","BASE_EDGE","BASE_MARKER","DimNode","borderStyle","getLayoutedElements","currentName","buildRFNode","NodeDimensionsTab","loaded","setLoaded","setRfInstance","setCurrentNodeName","hasFitRef","makeEdge","applyLayout","rfNodes","rfEdges","le","inbound","inbound_edges","outbound","outbound_edges","allRelated","connectedIds","eds","isConn","hoverColor","DiffIcon","NodeHistory","setHistory","eventData","eventDescription","removeTagNodeEventsWithoutTags","JupyterExportIcon","NotebookDownload","downloadFile","notebook","TableIcon","ConfigField","jsonExt","updateFormik","viewUpdate","AddMaterializationPopover","setOptions","jobs","setJobs","timePartitionColumns","fetchedRef","allowedJobs","job","configureMaterialization","PartitionValueForm","materialization","AddBackfillPopover","partitionColumns","partitionCol","submitBackfill","DeleteIcon","NodeMaterializationDelete","deleteButton","setDeleteButton","deleteNode","NodeRevisionMaterializationTab","selectedRevisionTab","onClickRevisionTab","showInactive","versionHasOnlyInactive","tabName","versionInfo","AvailabilityStateBlock","availability","__webpack_modules__","__unused_webpack_module","__webpack_require__","rangeValidator_1","CronParser","dayOfWeekStartIndexZero","monthStartIndexZero","isYearWithNoSecondsPart","expressionParts","dowDigits","dowDigitsAdjusted","days","months","stepRangeThrough","partDescription","invalidChars","stringUtilities_1","cronParser_1","ExpressionDescriptor","fallBackLocale","throwExceptionOnParseError","use24HourTimeFormat","descripter","localesLoader","timeSegment","dayOfMonthDesc","monthDesc","dayOfWeekDesc","yearDesc","ex","secondsExpression","minuteExpression","hourExpression","minuteParts","hourParts","secondsDescription","minutesDescription","hoursDescription","atTheHourMatches","lastAtTheHourMatchIndex","daysOfWeekNames","dayOfWeekOfMonthDescription","dayOfWeekOfMonthNumber","dayOfWeekNumber","beginFrom","domSpecified","monthNames","weekDayNumberMatches","dayNumber","dayString","lastDayOffSetMatches","offSetDays","allDescription","getSingleItemDescription","getIncrementDescriptionFormat","getRangeDescriptionFormat","getDescriptionFormat","doesExpressionContainIncrement","doesExpressionContainRange","doesExpressionContainMultipleValues","descriptionContent","isSegmentRangeWithoutIncrement","currentDescriptionContent","rangeSegmentDescription","rangeItemDescription","rangeExpression","rangeSegments","rangeSegment1Description","rangeSegment2Description","rangeDescriptionFormat","secondExpression","setPeriodBeforeTime","useVerboseFormat","en_1","enLocaleLoader","availableLocales","en","RangeValidator","dayOfMonth","dayOfWeek","StringUtilities","substring","searchStrings","__webpack_module_cache__","moduleId","cachedModule","__webpack_exports__","expressionDescriptor_1","enLocaleLoader_1","NodeMaterializationTab","rawMaterializations","setRawMaterializations","setSelectedRevisionTab","setShowInactive","availabilityStates","setAvailabilityStates","availabilityStatesByRevision","setAvailabilityStatesByRevision","isRebuilding","setIsRebuilding","filteredMaterializations","materializationsByRevision","matVersion","availabilityData","availabilityGrouped","avail","versions","sortedVersions","partitionColumnsMap","cron","parsedCron","cronstrue","revisionId","buildRevisionTabs","hasAnyMaterializations","hasLatestVersionMaterialization","refreshLatestMaterialization","materializationRows","materializations","backfill","partitionBody","currentRevisionMaterializations","currentRevisionAvailability","renderMaterializedDatasets","NodePreAggregationsTab","preaggs","setPreaggs","expandedIds","setExpandedIds","expandedGrainIds","setExpandedGrainIds","deactivating","setDeactivating","MAX_VISIBLE_GRAIN","currentPreaggs","stalePreaggs","currentVersion","stale","preagg","toggleExpanded","handleDeactivate","refreshed","handleDeactivateAllStale","activeStale","formatSchedule","renderPreaggRow","isStale","isExpanded","isDeactivating","hasActiveWorkflow","grainCols","maxVisible","visibleCols","hiddenCount","shortName","wf","capitalizedLabel","isGrainExpanded","measure","mIdx","activeStaleCount","nightOwl","PythonIcon","ClientCodePopover","showModal","setShowModal","modalRef","setCode","cancelled","fetchCode","EyeIcon","ExpandedIcon","CollapsedIcon","EVENT_TYPES","WatchButton","selectedEvents","setSelectedEvents","dropdownOpen","setDropdownOpen","toggleEvent","updatedEvents","handleWatchClick","NodesWithDimension","availableNodes","setAvailableNodes","DJNodeDimensions","metricData","dimensionsToObject","groupedDimensions","dims","dimKey","dimensionsRenderer","grouped","dimValue","DJNodeColumns","handleWrapperStyle","handleWrapperStyleRight","handleStyle","handleStyleLeft","percentage","Collapse","collapsed","isCollapsed","setIsCollapsed","DJNode","highlightNodeClass","dagreGraph","isHorizontal","nodeHeightTracker","minColumnsLength","nodeWithPosition","LayoutFlow","saveGraph","minimapStyle","createDJNode","NodeColumnLineage","relatedNodes","nodesMapping","edgesMapping","processing","lineageColumn","ChartIcon","NodeDependenciesTab","upstreams","setUpstreams","downstreams","setDownstreams","NodeList","NodeDimensionsList","rawDimensions","dimensionsInGroup","pathItem","fullPath","groupHeader","dimensionGroupOptions","useParams","setNode","setIsReadOnly","onClickTab","buildTabs","tabsList","tabToDisplay","NodeButtons"],"mappings":"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S,gBACX,EAAG,CACD,KAAM,IACN,QAAS,oBACX,EAAG,CACD,KAAM,KACN,QAAS,GACX,EAAG,CACD,KAAM,KACN,QAAS,GACX,EAAG,CACD,KAAM,IACN,QAAS,UACX,EAAG,CACD,KAAM,IACN,QAAS,kBACX,EAAG,CACD,KAAM,KACN,QAAS,GACX,EAAG,CACD,KAAM,KACN,QAAS,GACX,EAAG,CACD,KAAM,IACN,QAAS,6CACX,EAAG,CACD,KAAM,KACN,QAAS,GACX,EAAG,CACD,KAAM,KACN,QAAS,GACX,EAAG,CACD,KAAM,KACN,QAAS,GACX,EAAG,CACD,KAAM,IACN,QAAS,YACX,EAAG,CACD,KAAM,IACN,QAAS,QACX,EAAG,CACD,KAAM,IACN,QAAS,mBACX,EAAG,CACD,KAAM,IACN,QAAS,mBACX,EAAG,CACD,KAAM,IACN,QAAS,iBACX,EAAG,CACD,KAAM,KACN,QAAS,GACX,EAAG,CACD,KAAM,IACN,QAAS,oCACX,EAAG,CACD,KAAM,IACN,QAAS,UACX,EAAG,CACD,KAAM,KACN,QAAS,GACX,EAAG,CACD,KAAM,IACN,QAAS,YACX,EAAG,CACD,KAAM,IACN,QAAS,OACX,EAAG,CACD,KAAM,IACN,QAAS,iBACX,EAAG,CACD,KAAM,IACN,QAAS,gBACX,EAAG,CACD,KAAM,IACN,QAAS,qCACX,EAAG,CACD,KAAM,KACN,QAAS,GACX,EAAG,CACD,KAAM,KACN,QAAS,KACX,EAAG,CACD,KAAM,KACN,QAAS,GACX,EAAG,CACD,KAAM,KACN,QAAS,GACX,EAAG,CACD,KAAM,KACN,QAAS,IACX,EAAG,CACD,KAAM,KACN,QAAS,GACX,EAAG,CACD,KAAM,IACN,QAAS,WACX,EAAG,CACD,KAAM,IACN,QAAS,eACX,EAAG,CACD,KAAM,IACN,QAAS,gBACX,EAAG,CACD,KAAM,KACN,QAAS,IACX,EAAG,CACD,KAAM,IACN,QAAS,iCACX,EAAG,CACD,KAAM,IACN,QAAS,QACX,EAAG,CACD,KAAM,IACN,QAAS,iBACX,EAAG,CACD,KAAM,IACN,QAAS,iBACX,EAAG,CAC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AAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,EAAG,GAAG,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,EAAG,GAAG,EAAE,OAAOA,EAAI,CAAC,CAAC,CAAC,CAE9uH,CACA,IAAI4jD,GAAwB,CAAA,EAC5B,SAASC,IAAyB3yB,EAAY,CAC5C,GAAIA,EAAW,SAAW,GAAKA,EAAW,SAAW,EAAG,OAAOA,EAC/D,IAAIr4C,EAAMq4C,EAAW,KAAK,GAAG,EAC7B,OAAK0yB,GAAsB/qE,CAAG,IAC5B+qE,GAAsB/qE,CAAG,EAAI6qE,IAAqBxyB,CAAU,GAEvD0yB,GAAsB/qE,CAAG,CAClC,CACO,SAASirE,IAAkB5yB,EAAY,CAC5C,IAAI6yB,EAAe,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAA,EACnFC,EAAa,UAAU,OAAS,EAAI,UAAU,CAAC,EAAI,OACnDC,EAAqB/yB,EAAW,OAAO,SAAUE,EAAW,CAC9D,OAAOA,IAAc,OACvB,CAAC,EACG8yB,EAAyBL,IAAyBI,CAAkB,EACxE,OAAOC,EAAuB,OAAO,SAAUC,EAAa/yB,EAAW,CACrE,OAAO/H,GAAcA,GAAc,CAAA,EAAI86B,CAAW,EAAGH,EAAW5yB,CAAS,CAAC,CAC5E,EAAG2yB,CAAY,CACjB,CACO,SAASK,GAAsBlzB,EAAY,CAChD,OAAOA,EAAW,KAAK,GAAG,CAC5B,CACO,SAASmzB,IAAeL,EAAYM,EAAiB,CAC1D,IAAIC,EAAgB,EACpB,OAAO,SAAU/xD,EAAU,CACzB,OAAA+xD,GAAiB,EACV/xD,EAAS,IAAI,SAAUkS,EAAOttB,EAAG,CACtC,OAAO0kB,GAAc,CACnB,KAAM4I,EACN,WAAYs/C,EACZ,gBAAiBM,EACjB,IAAK,gBAAgB,OAAOC,EAAe,GAAG,EAAE,OAAOntE,CAAC,CAChE,CAAO,CACH,CAAC,CACH,CACF,CACe,SAAS0kB,GAAc7H,EAAM,CAC1C,IAAIqQ,EAAOrQ,EAAK,KACd+vD,EAAa/vD,EAAK,WAClBuwD,EAAavwD,EAAK,MAClByoC,EAAQ8nB,IAAe,OAAS,CAAA,EAAKA,EACrCF,EAAkBrwD,EAAK,gBACvBpb,EAAMob,EAAK,IACTuqC,EAAal6B,EAAK,WACpB5hB,EAAO4hB,EAAK,KACZmgD,EAAUngD,EAAK,QACfhnB,EAAQgnB,EAAK,MACf,GAAI5hB,IAAS,OACX,OAAOpF,EACF,GAAImnE,EAAS,CAClB,IAAIC,EAAkBL,IAAeL,EAAYM,CAAe,EAC5DpuE,EACJ,GAAI,CAACouE,EACHpuE,EAAQmzC,GAAcA,GAAc,CAAA,EAAImV,CAAU,EAAG,CAAA,EAAI,CACvD,UAAW4lB,GAAsB5lB,EAAW,SAAS,CAC7D,CAAO,MACI,CACL,IAAImmB,EAAyB,OAAO,KAAKX,CAAU,EAAE,OAAO,SAAUY,EAASj0B,EAAU,CACvF,OAAAA,EAAS,MAAM,GAAG,EAAE,QAAQ,SAAUS,EAAW,CAC1CwzB,EAAQ,SAASxzB,CAAS,GAAGwzB,EAAQ,KAAKxzB,CAAS,CAC1D,CAAC,EACMwzB,CACT,EAAG,CAAA,CAAE,EAGDC,EAAoBrmB,EAAW,WAAaA,EAAW,UAAU,SAAS,OAAO,EAAI,CAAC,OAAO,EAAI,CAAA,EACjGpN,EAAYoN,EAAW,WAAaqmB,EAAkB,OAAOrmB,EAAW,UAAU,OAAO,SAAUpN,EAAW,CAChH,MAAO,CAACuzB,EAAuB,SAASvzB,CAAS,CACnD,CAAC,CAAC,EACFl7C,EAAQmzC,GAAcA,GAAc,CAAA,EAAImV,CAAU,EAAG,CAAA,EAAI,CACvD,UAAW4lB,GAAsBhzB,CAAS,GAAK,OAC/C,MAAO0yB,IAAkBtlB,EAAW,UAAW,OAAO,OAAO,CAAA,EAAIA,EAAW,MAAO9B,CAAK,EAAGsnB,CAAU,CAC7G,CAAO,CACH,CACA,IAAIxxD,EAAWkyD,EAAgBpgD,EAAK,QAAQ,EAC5C,OAAoBkY,EAAM,cAAcioC,EAASrzD,GAAS,CACxD,IAAKvY,CACX,EAAO3C,CAAK,EAAGsc,CAAQ,CACrB,CACF,CC1GA,MAAAsyD,IAAgB,SAAUC,EAAcC,EAAU,CAChD,IAAIC,EAAQF,EAAa,cAAa,EACtC,OAAOE,EAAM,QAAQD,CAAQ,IAAM,EACrC,ECAA,IAAI39B,IAAY,CAAC,WAAY,WAAY,QAAS,cAAe,eAAgB,kBAAmB,kBAAmB,wBAAyB,qBAAsB,2BAA4B,kBAAmB,YAAa,gBAAiB,YAAa,WAAY,SAAU,UAAW,OAAQ,cAAc,EACvT,SAASf,GAAQ,EAAGrtC,EAAG,CAAE,IAAID,EAAI,OAAO,KAAK,CAAC,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIK,EAAI,OAAO,sBAAsB,CAAC,EAAGJ,IAAMI,EAAIA,EAAE,OAAO,SAAUJ,EAAG,CAAE,OAAO,OAAO,yBAAyB,EAAGA,CAAC,EAAE,UAAY,CAAC,GAAID,EAAE,KAAK,MAAMA,EAAGK,CAAC,CAAG,CAAE,OAAOL,CAAG,CAC9P,SAASqwC,GAAc,EAAG,CAAE,QAASpwC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAID,EAAY,UAAUC,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAA,EAAIA,EAAI,EAAIqtC,GAAQ,OAAOttC,CAAC,EAAG,EAAE,EAAE,QAAQ,SAAU,EAAG,CAAEqtC,GAAgB,EAAG,EAAGrtC,EAAE,CAAC,CAAC,CAAG,CAAC,EAAI,OAAO,0BAA4B,OAAO,iBAAiB,EAAG,OAAO,0BAA0BA,CAAC,CAAC,EAAIstC,GAAQ,OAAOttC,CAAC,CAAC,EAAE,QAAQ,SAAU,EAAG,CAAE,OAAO,eAAe,EAAG,EAAG,OAAO,yBAAyBA,EAAG,CAAC,CAAC,CAAG,CAAC,CAAG,CAAE,OAAO,CAAG,CAItb,IAAIksE,IAAe,MACnB,SAASC,IAAYpiD,EAAK,CACxB,OAAOA,EAAI,MAAMmiD,GAAY,CAC/B,CACA,SAASE,IAAkBnxD,EAAM,CAC/B,IAAIoxD,EAAQpxD,EAAK,MACfqxD,EAAqBrxD,EAAK,mBAC1ByoC,EAAQzoC,EAAK,MACf,OAAOoxD,EAAM,IAAI,SAAUjqE,EAAGhE,EAAG,CAC/B,IAAI+X,EAAS/X,EAAIkuE,EACjB,OAAoB9oC,EAAM,cAAc,OAAQ,CAC9C,IAAK,QAAQ,OAAOplC,CAAC,EACrB,UAAW,uCACX,MAAO,OAAOslD,GAAU,WAAaA,EAAMvtC,CAAM,EAAIutC,CAC3D,EAAO,GAAG,OAAOvtC,EAAQ;AAAA,CAAI,CAAC,CAC5B,CAAC,CACH,CACA,SAASo2D,IAAevuD,EAAO,CAC7B,IAAIwuD,EAAaxuD,EAAM,WACrByuD,EAAYzuD,EAAM,UAClB0uD,EAAuB1uD,EAAM,eAC7B6vC,EAAiB6e,IAAyB,OAAS,CACjD,MAAS,OACT,aAAc,MACpB,EAAQA,EACJC,EAAoB3uD,EAAM,YAC1B4uD,EAAcD,IAAsB,OAAS,CAAA,EAAKA,EAClDL,EAAqBtuD,EAAM,mBAC7B,OAAoBwlB,EAAM,cAAc,OAAQ,CAC9C,MAAO,OAAO,OAAO,CAAA,EAAIipC,EAAW5e,CAAc,CACtD,EAAKue,IAAkB,CACnB,MAAOI,EAAW,QAAQ,MAAO,EAAE,EAAE,MAAM;AAAA,CAAI,EAC/C,MAAOI,EACP,mBAAoBN,CACxB,CAAG,CAAC,CACJ,CACA,SAASO,IAAmBC,EAAK,CAC/B,MAAO,GAAG,OAAOA,EAAI,SAAQ,EAAG,OAAQ,OAAO,CACjD,CACA,SAASC,GAAoBC,EAAYC,EAAuB,CAC9D,MAAO,CACL,KAAM,UACN,QAAS,OACT,WAAY,CACV,IAAK,gBAAgB,OAAOD,CAAU,EACtC,UAAW,CAAC,UAAW,aAAc,sCAAsC,EAC3E,MAAOC,CACb,EACI,SAAU,CAAC,CACT,KAAM,OACN,MAAOD,CACb,CAAK,CACL,CACA,CACA,SAASE,GAAyBC,EAAiBH,EAAYI,EAAmB,CAEhF,IAAIC,EAAyB,CAC3B,QAAS,eACT,SAAUR,IAAmBO,CAAiB,EAC9C,aAAc,MACd,UAAW,QACX,WAAY,MAChB,EAEME,EAAwB,OAAOH,GAAoB,WAAaA,EAAgBH,CAAU,EAAIG,EAE9FI,EAAiBl9B,GAAcA,GAAc,CAAA,EAAIg9B,CAAsB,EAAGC,CAAqB,EACnG,OAAOC,CACT,CACA,SAASC,GAAkBruD,EAAO,CAChC,IAAI3F,EAAW2F,EAAM,SACnB6tD,EAAa7tD,EAAM,WACnBguD,EAAkBhuD,EAAM,gBACxBiuD,EAAoBjuD,EAAM,kBAC1BsuD,EAAwBtuD,EAAM,sBAC9BuuD,EAAkBvuD,EAAM,UACxBwuD,EAAYD,IAAoB,OAAS,CAAA,EAAKA,EAC9CE,EAAkBzuD,EAAM,UACxBi5B,EAAYw1B,IAAoB,OAAS,CAAA,EAAKA,EAC9CC,EAAkB1uD,EAAM,gBACxB2uD,EAAgB3uD,EAAM,cACtB4uD,EAAkB5uD,EAAM,UACxB6uD,EAAYD,IAAoB,OAAS,GAAQA,EAC/CvoB,EAAawoB,EAAY39B,GAAc,CAAA,EAAI,OAAOs9B,GAAc,WAAaA,EAAUX,CAAU,EAAIW,CAAS,EAAI,CAAA,EAEtH,GADAnoB,EAAW,UAAeA,EAAW,UAAe,GAAG,OAAOlU,GAAmBkU,EAAW,UAAa,KAAI,EAAG,MAAM,KAAK,CAAC,EAAGlU,GAAmB8G,CAAS,CAAC,EAAIA,EAC5J40B,GAAcS,EAAuB,CACvC,IAAIR,EAAwBC,GAAyBC,EAAiBH,EAAYI,CAAiB,EACnG5zD,EAAS,QAAQuzD,GAAoBC,EAAYC,CAAqB,CAAC,CACzE,CACA,OAAIa,EAAgBD,IAClBroB,EAAW,MAAQnV,GAAc,CAC/B,QAAS,MACf,EAAOmV,EAAW,KAAK,GAEd,CACL,KAAM,UACN,QAAS,OACT,WAAYA,EACZ,SAAUhsC,CACd,CACA,CACA,SAASy0D,GAAgBC,EAAM,CAG7B,QAFI91B,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAA,EAChF+1B,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAA,EACzE/vE,EAAI,EAAGA,EAAI8vE,EAAK,OAAQ9vE,IAAK,CACpC,IAAIktB,EAAO4iD,EAAK9vE,CAAC,EACjB,GAAIktB,EAAK,OAAS,OAChB6iD,EAAQ,KAAKX,GAAkB,CAC7B,SAAU,CAACliD,CAAI,EACf,UAAWgmB,GAAmB,IAAI,IAAI8G,CAAS,CAAC,CACxD,CAAO,CAAC,UACO9sB,EAAK,SAAU,CACxB,IAAI4sB,EAAaE,EAAU,OAAO9sB,EAAK,WAAW,SAAS,EAC3D2iD,GAAgB3iD,EAAK,SAAU4sB,CAAU,EAAE,QAAQ,SAAU95C,EAAG,CAC9D,OAAO+vE,EAAQ,KAAK/vE,CAAC,CACvB,CAAC,CACH,CACF,CACA,OAAO+vE,CACT,CACA,SAASC,IAAaC,EAAUL,EAAWL,EAAWE,EAAiBJ,EAAuBnB,EAAoBc,EAAmBD,EAAiBW,EAAe,CACnK,IAAIpoB,EACAwoB,EAAOD,GAAgBI,EAAS,KAAK,EACrCF,EAAU,CAAA,EACVG,EAAqB,GACrB5qE,EAAQ,EACZ,SAAS6qE,EAAkB/0D,EAAUwzD,EAAY,CAC/C,IAAI50B,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAA,EACpF,OAAOo1B,GAAkB,CACvB,SAAUh0D,EACV,WAAYwzD,EACZ,gBAAiBG,EACjB,kBAAmBC,EACnB,sBAAuBK,EACvB,UAAWE,EACX,UAAWv1B,EACX,gBAAiBy1B,EACjB,cAAeC,EACf,UAAWE,CACjB,CAAK,CACH,CACA,SAASQ,EAAoBh1D,EAAUwzD,EAAY,CACjD,GAAIa,GAAmBb,GAAcS,EAAuB,CAC1D,IAAIR,EAAwBC,GAAyBC,EAAiBH,EAAYI,CAAiB,EACnG5zD,EAAS,QAAQuzD,GAAoBC,EAAYC,CAAqB,CAAC,CACzE,CACA,OAAOzzD,CACT,CACA,SAASi1D,EAAWj1D,EAAUwzD,EAAY,CACxC,IAAI50B,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAA,EACpF,OAAO41B,GAAa51B,EAAU,OAAS,EAAIm2B,EAAkB/0D,EAAUwzD,EAAY50B,CAAS,EAAIo2B,EAAoBh1D,EAAUwzD,CAAU,CAC1I,CAqDA,QApDI0B,EAAQ,UAAiB,CAC3B,IAAIpjD,EAAO4iD,EAAKxqE,CAAK,EACjBY,EAAQgnB,EAAK,SAAS,CAAC,EAAE,MACzBqjD,EAAWxC,IAAY7nE,CAAK,EAChC,GAAIqqE,EAAU,CACZ,IAAIC,EAAatqE,EAAM,MAAM;AAAA,CAAI,EACjCsqE,EAAW,QAAQ,SAAUl1C,EAAMt7B,EAAG,CACpC,IAAI4uE,EAAaa,GAAmBM,EAAQ,OAAS7B,EACjDuC,EAAW,CACb,KAAM,OACN,MAAO,GAAG,OAAOn1C,EAAM;AAAA,CAAI,CACrC,EAGQ,GAAIt7B,IAAM,EAAG,CACX,IAAI0wE,EAAYZ,EAAK,MAAMI,EAAqB,EAAG5qE,CAAK,EAAE,OAAO8pE,GAAkB,CACjF,SAAU,CAACqB,CAAQ,EACnB,UAAWvjD,EAAK,WAAW,SACvC,CAAW,CAAC,EACEyjD,EAAQN,EAAWK,EAAW9B,CAAU,EAC5CmB,EAAQ,KAAKY,CAAK,CAGpB,SAAW3wE,IAAMwwE,EAAW,OAAS,EAAG,CACtC,IAAII,EAAcd,EAAKxqE,EAAQ,CAAC,GAAKwqE,EAAKxqE,EAAQ,CAAC,EAAE,UAAYwqE,EAAKxqE,EAAQ,CAAC,EAAE,SAAS,CAAC,EACvFurE,EAAyB,CAC3B,KAAM,OACN,MAAO,GAAG,OAAOv1C,CAAI,CACjC,EACU,GAAIs1C,EAAa,CACf,IAAIE,EAAU1B,GAAkB,CAC9B,SAAU,CAACyB,CAAsB,EACjC,UAAW3jD,EAAK,WAAW,SACzC,CAAa,EACD4iD,EAAK,OAAOxqE,EAAQ,EAAG,EAAGwrE,CAAO,CACnC,KAAO,CACL,IAAIC,EAAa,CAACF,CAAsB,EACpCG,EAASX,EAAWU,EAAYnC,EAAY1hD,EAAK,WAAW,SAAS,EACzE6iD,EAAQ,KAAKiB,CAAM,CACrB,CAGF,KAAO,CACL,IAAIC,EAAa,CAACR,CAAQ,EACtBS,EAASb,EAAWY,EAAYrC,EAAY1hD,EAAK,WAAW,SAAS,EACzE6iD,EAAQ,KAAKmB,CAAM,CACrB,CACF,CAAC,EACDhB,EAAqB5qE,CACvB,CACAA,GACF,EACOA,EAAQwqE,EAAK,QAClBQ,EAAK,EAEP,GAAIJ,IAAuBJ,EAAK,OAAS,EAAG,CAC1C,IAAI10D,EAAW00D,EAAK,MAAMI,EAAqB,EAAGJ,EAAK,MAAM,EAC7D,GAAI10D,GAAYA,EAAS,OAAQ,CAC/B,IAAIwzD,EAAaa,GAAmBM,EAAQ,OAAS7B,EACjD94B,EAAOi7B,EAAWj1D,EAAUwzD,CAAU,EAC1CmB,EAAQ,KAAK36B,CAAI,CACnB,CACF,CACA,OAAOw6B,EAAYG,GAAWzoB,EAAQ,CAAA,GAAI,OAAO,MAAMA,EAAOyoB,CAAO,CACvE,CACA,SAASoB,IAAgBrsD,EAAO,CAC9B,IAAI6Z,EAAO7Z,EAAM,KACf8nD,EAAa9nD,EAAM,WACnBooD,EAAkBpoD,EAAM,gBAC1B,OAAO6Z,EAAK,IAAI,SAAUzR,EAAMltB,EAAG,CACjC,OAAO0kB,GAAc,CACnB,KAAMwI,EACN,WAAY0/C,EACZ,gBAAiBM,EACjB,IAAK,gBAAgB,OAAOltE,CAAC,CACnC,CAAK,CACH,CAAC,CACH,CAGA,SAASoxE,GAAczD,EAAc,CACnC,OAAOA,GAAgB,OAAOA,EAAa,cAAkB,GAC/D,CACA,SAAS0D,IAAY5lB,EAAO,CAC1B,IAAIkiB,EAAeliB,EAAM,aACvBmiB,EAAWniB,EAAM,SACjB6lB,EAAO7lB,EAAM,KACb8lB,EAAmB9lB,EAAM,iBAK3B,GAAI2lB,GAAczD,CAAY,EAAG,CAC/B,IAAI6D,EAAc9D,IAAuBC,EAAcC,CAAQ,EAC/D,OAAIA,IAAa,OACR,CACL,MAAO2D,EACP,SAAU,MAClB,EACeC,EACF7D,EAAa,UAAUC,EAAU0D,CAAI,EAErC3D,EAAa,cAAc2D,CAAI,CAE1C,CAGA,GAAI,CACF,OAAO1D,GAAYA,IAAa,OAAS,CACvC,MAAOD,EAAa,UAAU2D,EAAM1D,CAAQ,CAClD,EAAQ,CACF,MAAO2D,CACb,CACE,MAAY,CACV,MAAO,CACL,MAAOA,CACb,CACE,CACF,CACe,SAAAE,IAAUC,EAAqBC,EAAc,CAC1D,OAAO,SAA2BC,EAAO,CACvC,IAAIC,EAAoBC,EACpBlE,EAAWgE,EAAM,SACnBx2D,EAAWw2D,EAAM,SACjBG,EAAcH,EAAM,MACpBtsB,EAAQysB,IAAgB,OAASJ,EAAeI,EAChDC,EAAoBJ,EAAM,YAC1BK,EAAcD,IAAsB,OAAS,CAAA,EAAKA,EAClDE,EAAqBN,EAAM,aAC3BO,EAAeD,IAAuB,OAAS,CAC7C,UAAWtE,EAAW,YAAY,OAAOA,CAAQ,EAAI,OACrD,MAAO37B,GAAcA,GAAc,CAAA,EAAIqT,EAAM,0BAA0B,CAAC,EAAGA,EAAM,yBAA0B,OAAOsoB,EAAU,IAAK,CAAC,CAAC,CAC3I,EAAUsE,EACJE,EAAwBR,EAAM,gBAC9B1E,EAAkBkF,IAA0B,OAAS,GAAOA,EAC5DC,EAAwBT,EAAM,gBAC9BnC,EAAkB4C,IAA0B,OAAS,GAAQA,EAC7DC,EAAwBV,EAAM,sBAC9BvC,EAAwBiD,IAA0B,OAAS,GAAOA,EAClEC,EAAwBX,EAAM,mBAC9B1D,EAAqBqE,IAA0B,OAAS,EAAIA,EAC5DC,EAA2BZ,EAAM,yBACjCa,EAAwBb,EAAM,gBAC9B7C,EAAkB0D,IAA0B,OAAS,CAAA,EAAKA,EAC1D7C,EAAYgC,EAAM,UAClBc,EAAsBd,EAAM,cAC5BlC,EAAgBgD,IAAwB,OAAS,GAAQA,EACzDC,EAAkBf,EAAM,UACxBrC,EAAYoD,IAAoB,OAAS,CAAA,EAAKA,EAC9CC,EAAWhB,EAAM,SACjBiB,EAAejB,EAAM,OACrBkB,EAASD,IAAiB,OAAS,MAAQA,EAC3CE,EAAgBnB,EAAM,QACtBoB,EAAUD,IAAkB,OAAS,OAASA,EAC9CE,EAAarB,EAAM,KACnBN,EAAO2B,IAAe,QAAU,MAAM,QAAQ73D,CAAQ,EAAIA,EAAS,CAAC,EAAIA,IAAa,GAAK63D,EAC1FtF,EAAeiE,EAAM,aACrBp0D,EAAOuyB,GAAyB6hC,EAAO3hC,GAAS,EAClD09B,EAAeA,GAAgB+D,EAC/B,IAAIwB,EAAiBzD,EAA+BrqC,EAAM,cAAc+oC,IAAgB,CACtF,eAAgBqE,EAChB,UAAWL,EAAa,OAAS,CAAA,EACjC,YAAapD,EACb,mBAAoBb,EACpB,WAAYoD,CAClB,CAAK,EAAI,KACD6B,EAAkB7tB,EAAM,MAAQA,EAAM,yBAAyB,GAAK,CACtE,gBAAiB,MACvB,EACQ8tB,EAAqBhC,GAAczD,CAAY,EAAI,OAAS,UAC5D0F,EAAWnG,EAAkB,OAAO,OAAO,CAAA,EAAI1vD,EAAM,CACvD,MAAO,OAAO,OAAO,CAAA,EAAI21D,EAAiBlB,CAAW,CAC3D,CAAK,EAAI,OAAO,OAAO,CAAA,EAAIz0D,EAAM,CAC3B,UAAWA,EAAK,UAAY,GAAG,OAAO41D,EAAoB,GAAG,EAAE,OAAO51D,EAAK,SAAS,EAAI41D,EACxF,MAAO,OAAO,OAAO,CAAA,EAAInB,CAAW,CAC1C,CAAK,EAUD,GATIvC,EACFyC,EAAa,MAAQlgC,GAAc,CACjC,WAAY,UACpB,EAASkgC,EAAa,KAAK,EAErBA,EAAa,MAAQlgC,GAAc,CACjC,WAAY,KACpB,EAASkgC,EAAa,KAAK,EAEnB,CAACxE,EACH,OAAoBvoC,EAAM,cAAc0tC,EAAQO,EAAUH,EAA6B9tC,EAAM,cAAc4tC,EAASb,EAAcb,CAAI,CAAC,GAOrI1B,IAAc,QAAagD,GAAYlD,KAAeE,EAAY,IACtEgD,EAAWA,GAAYzB,IACvB,IAAII,GAAmB,CAAC,CACtB,KAAM,OACN,MAAOD,CACb,CAAK,EACGrB,GAAWoB,IAAY,CACzB,aAAc1D,EACd,SAAUC,EACV,KAAM0D,EACN,iBAAkBC,EACxB,CAAK,EACGtB,GAAS,WAAa,OACxBA,GAAS,MAAQsB,IAInB,IAAI+B,GAAkBzB,GAAsBC,EAAcR,EAAK,MAAM,KAAK,KAAO,MAAQQ,IAAgB,OAAS,OAASA,EAAY,UAAY,MAAQD,IAAuB,OAASA,EAAqB,EAC5M7C,EAAoBd,EAAqBoF,EACzC30C,GAAOqxC,IAAaC,GAAUL,EAAWL,EAAWE,EAAiBJ,EAAuBnB,EAAoBc,EAAmBD,EAAiBW,CAAa,EACrK,OAAoBtqC,EAAM,cAAc0tC,EAAQO,EAAuBjuC,EAAM,cAAc4tC,EAASb,EAAc,CAAC9C,GAAyB6D,EAAgBN,EAAS,CACnK,KAAMj0C,GACN,WAAY2mB,EACZ,gBAAiB4nB,CACvB,CAAK,CAAC,CAAC,CACL,CACF,WC5XA,SAASqG,GAAWv4D,EAAK,CACrB,OAAIA,aAAe,IACfA,EAAI,MAAQA,EAAI,OAASA,EAAI,IAAM,UAAY,CAC3C,MAAM,IAAI,MAAM,kBAAkB,CAC9C,EACeA,aAAe,MACtBA,EAAI,IAAMA,EAAI,MAAQA,EAAI,OAAS,UAAY,CAC3C,MAAM,IAAI,MAAM,kBAAkB,CAC9C,GAII,OAAO,OAAOA,CAAG,EAEjB,OAAO,oBAAoBA,CAAG,EAAE,QAAQ,SAAU4F,EAAM,CACpD,IAAIkX,EAAO9c,EAAI4F,CAAI,EAGf,OAAOkX,GAAQ,UAAY,CAAC,OAAO,SAASA,CAAI,GAChDy7C,GAAWz7C,CAAI,CAE3B,CAAK,EAEM9c,CACX,CAEA,IAAIw4D,GAAgBD,GAChBE,IAAWF,GACfC,GAAc,QAAUC,IAGxB,MAAMC,EAAS,CAIb,YAAY32C,EAAM,CAEZA,EAAK,OAAS,SAAWA,EAAK,KAAO,CAAA,GAEzC,KAAK,KAAOA,EAAK,KACjB,KAAK,eAAiB,EAC1B,CAEE,aAAc,CACZ,KAAK,eAAiB,EAC1B,CACA,CAMA,SAAS42C,GAAWztE,EAAO,CACzB,OAAOA,EACJ,QAAQ,KAAM,OAAO,EACrB,QAAQ,KAAM,MAAM,EACpB,QAAQ,KAAM,MAAM,EACpB,QAAQ,KAAM,QAAQ,EACtB,QAAQ,KAAM,QAAQ,CAC3B,CAUA,SAAS0tE,GAAQC,KAAaC,EAAS,CAErC,MAAMvrE,EAAS,OAAO,OAAO,IAAI,EAEjC,UAAW9G,KAAOoyE,EAChBtrE,EAAO9G,CAAG,EAAIoyE,EAASpyE,CAAG,EAE5B,OAAAqyE,EAAQ,QAAQ,SAAS94D,EAAK,CAC5B,UAAWvZ,KAAOuZ,EAChBzS,EAAO9G,CAAG,EAAIuZ,EAAIvZ,CAAG,CAE3B,CAAG,EACwB8G,CAC3B,CAcA,MAAMwrE,IAAa,UAMbC,GAAqB9mD,GAClB,CAAC,CAACA,EAAK,KAIhB,MAAM+mD,GAAa,CAOjB,YAAYC,EAAWttE,EAAS,CAC9B,KAAK,OAAS,GACd,KAAK,YAAcA,EAAQ,YAC3BstE,EAAU,KAAK,IAAI,CACvB,CAME,QAAQ54C,EAAM,CACZ,KAAK,QAAUq4C,GAAWr4C,CAAI,CAClC,CAME,SAASpO,EAAM,CACb,GAAI,CAAC8mD,GAAkB9mD,CAAI,EAAG,OAE9B,IAAI8sB,EAAY9sB,EAAK,KAChBA,EAAK,cACR8sB,EAAY,GAAG,KAAK,WAAW,GAAGA,CAAS,IAE7C,KAAK,KAAKA,CAAS,CACvB,CAME,UAAU9sB,EAAM,CACT8mD,GAAkB9mD,CAAI,IAE3B,KAAK,QAAU6mD,IACnB,CAKE,OAAQ,CACN,OAAO,KAAK,MAChB,CAQE,KAAK/5B,EAAW,CACd,KAAK,QAAU,gBAAgBA,CAAS,IAC5C,CACA,CAMA,MAAMm6B,EAAU,CACd,aAAc,CAEZ,KAAK,SAAW,CAAE,SAAU,EAAE,EAC9B,KAAK,MAAQ,CAAC,KAAK,QAAQ,CAC/B,CAEE,IAAI,KAAM,CACR,OAAO,KAAK,MAAM,KAAK,MAAM,OAAS,CAAC,CAC3C,CAEE,IAAI,MAAO,CAAE,OAAO,KAAK,QAAS,CAGlC,IAAIjnD,EAAM,CACR,KAAK,IAAI,SAAS,KAAKA,CAAI,CAC/B,CAGE,SAASknD,EAAM,CAEb,MAAMlnD,EAAO,CAAE,KAAAknD,EAAM,SAAU,CAAA,CAAE,EACjC,KAAK,IAAIlnD,CAAI,EACb,KAAK,MAAM,KAAKA,CAAI,CACxB,CAEE,WAAY,CACV,GAAI,KAAK,MAAM,OAAS,EACtB,OAAO,KAAK,MAAM,IAAG,CAI3B,CAEE,eAAgB,CACd,KAAO,KAAK,aAAY,CAC5B,CAEE,QAAS,CACP,OAAO,KAAK,UAAU,KAAK,SAAU,KAAM,CAAC,CAChD,CAME,KAAKuC,EAAS,CAEZ,OAAO,KAAK,YAAY,MAAMA,EAAS,KAAK,QAAQ,CAGxD,CAME,OAAO,MAAMA,EAASvC,EAAM,CAC1B,OAAI,OAAOA,GAAS,SAClBuC,EAAQ,QAAQvC,CAAI,EACXA,EAAK,WACduC,EAAQ,SAASvC,CAAI,EACrBA,EAAK,SAAS,QAASI,GAAU,KAAK,MAAMmC,EAASnC,CAAK,CAAC,EAC3DmC,EAAQ,UAAUvC,CAAI,GAEjBuC,CACX,CAKE,OAAO,UAAUvC,EAAM,CACjB,OAAOA,GAAS,UACfA,EAAK,WAENA,EAAK,SAAS,MAAM7H,GAAM,OAAOA,GAAO,QAAQ,EAGlD6H,EAAK,SAAW,CAACA,EAAK,SAAS,KAAK,EAAE,CAAC,EAEvCA,EAAK,SAAS,QAASI,GAAU,CAC/B6mD,GAAU,UAAU7mD,CAAK,CACjC,CAAO,EAEP,CACA,CAsBA,MAAM+mD,YAAyBF,EAAU,CAIvC,YAAYvtE,EAAS,CACnB,MAAK,EACL,KAAK,QAAUA,CACnB,CAME,WAAW00B,EAAM84C,EAAM,CACjB94C,IAAS,KAEb,KAAK,SAAS84C,CAAI,EAClB,KAAK,QAAQ94C,CAAI,EACjB,KAAK,UAAS,EAClB,CAKE,QAAQA,EAAM,CACRA,IAAS,IAEb,KAAK,IAAIA,CAAI,CACjB,CAME,eAAeg5C,EAAS1zD,EAAM,CAE5B,MAAMsM,EAAOonD,EAAQ,KACrBpnD,EAAK,KAAOtM,EACZsM,EAAK,YAAc,GACnB,KAAK,IAAIA,CAAI,CACjB,CAEE,QAAS,CAEP,OADiB,IAAI+mD,IAAa,KAAM,KAAK,OAAO,EACpC,MAAK,CACzB,CAEE,UAAW,CACT,MAAO,EACX,CACA,CAMA,SAASM,IAAOruE,EAAO,CACrB,OAAO,IAAI,OAAOA,EAAM,QAAQ,wBAAyB,MAAM,EAAG,GAAG,CACvE,CAMA,SAASc,GAAOwtE,EAAI,CAClB,OAAKA,EACD,OAAOA,GAAO,SAAiBA,EAE5BA,EAAG,OAHM,IAIlB,CAMA,SAASC,OAAU7zE,EAAM,CAEvB,OADeA,EAAK,IAAKsC,GAAM8D,GAAO9D,CAAC,CAAC,EAAE,KAAK,EAAE,CAEnD,CASA,SAASwxE,OAAU9zE,EAAM,CAEvB,MADe,IAAMA,EAAK,IAAKsC,GAAM8D,GAAO9D,CAAC,CAAC,EAAE,KAAK,GAAG,EAAI,GAE9D,CAMA,SAASyxE,IAAiBH,EAAI,CAC5B,OAAQ,IAAI,OAAOA,EAAG,SAAQ,EAAK,GAAG,EAAG,KAAK,EAAE,EAAE,OAAS,CAC7D,CAOA,SAASI,IAAWJ,EAAIK,EAAQ,CAC9B,MAAM/8D,EAAQ08D,GAAMA,EAAG,KAAKK,CAAM,EAClC,OAAO/8D,GAASA,EAAM,QAAU,CAClC,CASA,MAAMg9D,IAAa,iDAYnB,SAAS9oD,IAAK+oD,EAASC,EAAY,IAAK,CACtC,IAAIC,EAAc,EAElB,OAAOF,EAAQ,IAAKz/C,GAAU,CAC5B2/C,GAAe,EACf,MAAM1hE,EAAS0hE,EACf,IAAIT,EAAKxtE,GAAOsuB,CAAK,EACjB4/C,EAAM,GAEV,KAAOV,EAAG,OAAS,GAAG,CACpB,MAAM18D,EAAQg9D,IAAW,KAAKN,CAAE,EAChC,GAAI,CAAC18D,EAAO,CACVo9D,GAAOV,EACP,KACR,CACMU,GAAOV,EAAG,UAAU,EAAG18D,EAAM,KAAK,EAClC08D,EAAKA,EAAG,UAAU18D,EAAM,MAAQA,EAAM,CAAC,EAAE,MAAM,EAC3CA,EAAM,CAAC,EAAE,CAAC,IAAM,MAAQA,EAAM,CAAC,EAEjCo9D,GAAO,KAAO,OAAO,OAAOp9D,EAAM,CAAC,CAAC,EAAIvE,CAAM,GAE9C2hE,GAAOp9D,EAAM,CAAC,EACVA,EAAM,CAAC,IAAM,KACfm9D,IAGV,CACI,OAAOC,CACX,CAAG,EAAE,IAAIV,GAAM,IAAIA,CAAE,GAAG,EAAE,KAAKQ,CAAS,CACxC,CAGA,MAAMG,IAAmB,OACnBC,GAAW,eACXC,GAAsB,gBACtBC,GAAY,oBACZC,GAAc,yEACdC,GAAmB,eACnBC,IAAiB,+IAKjBC,IAAU,CAAClxE,EAAO,KAAO,CAC7B,MAAMmxE,EAAe,YACrB,OAAInxE,EAAK,SACPA,EAAK,MAAQiwE,IACXkB,EACA,OACAnxE,EAAK,OACL,MAAM,GAEHovE,GAAQ,CACb,UAAW,OACX,MAAO+B,EACP,IAAK,IACL,UAAW,EAEX,WAAY,CAACtzE,EAAGuzE,IAAS,CACnBvzE,EAAE,QAAU,GAAGuzE,EAAK,YAAW,CACzC,CACA,EAAKpxE,CAAI,CACT,EAGMqxE,GAAmB,CACvB,MAAO,eAAgB,UAAW,CACpC,EACMC,IAAmB,CACvB,UAAW,SACX,MAAO,IACP,IAAK,IACL,QAAS,MACT,SAAU,CAACD,EAAgB,CAC7B,EACME,IAAoB,CACxB,UAAW,SACX,MAAO,IACP,IAAK,IACL,QAAS,MACT,SAAU,CAACF,EAAgB,CAC7B,EACMG,GAAqB,CACzB,MAAO,4IACT,EASMjiC,GAAU,SAASc,EAAOC,EAAKmhC,EAAc,CAAA,EAAI,CACrD,MAAMl5C,EAAO62C,GACX,CACE,UAAW,UACX,MAAA/+B,EACA,IAAAC,EACA,SAAU,CAAA,CAChB,EACImhC,CACJ,EACE,OAAAl5C,EAAK,SAAS,KAAKi5C,EAAkB,EACrCj5C,EAAK,SAAS,KAAK,CACjB,UAAW,SACX,MAAO,6CACP,UAAW,CACf,CAAG,EACMA,CACT,EACMm5C,IAAsBniC,GAAQ,KAAM,GAAG,EACvCoiC,IAAuBpiC,GAAQ,OAAQ,MAAM,EAC7CqiC,IAAoBriC,GAAQ,IAAK,GAAG,EACpCsiC,IAAc,CAClB,UAAW,SACX,MAAOf,GACP,UAAW,CACb,EACMgB,IAAgB,CACpB,UAAW,SACX,MAAOf,GACP,UAAW,CACb,EACMgB,IAAqB,CACzB,UAAW,SACX,MAAOf,GACP,UAAW,CACb,EACMgB,IAAkB,CACtB,UAAW,SACX,MAAOlB,GAAY,kGASnB,UAAW,CACb,EACMmB,IAAc,CAOlB,MAAO,kBACP,SAAU,CAAC,CACT,UAAW,SACX,MAAO,KACP,IAAK,aACL,QAAS,KACT,SAAU,CACRZ,GACA,CACE,MAAO,KACP,IAAK,KACL,UAAW,EACX,SAAU,CAACA,EAAgB,CACnC,CACA,CACA,CAAG,CACH,EACMa,IAAa,CACjB,UAAW,QACX,MAAOtB,GACP,UAAW,CACb,EACMuB,IAAwB,CAC5B,UAAW,QACX,MAAOtB,GACP,UAAW,CACb,EACMuB,IAAe,CAEnB,MAAO,UAAYvB,GACnB,UAAW,CACb,EASMwB,IAAoB,SAAS95C,EAAM,CACvC,OAAO,OAAO,OAAOA,EACnB,CAEE,WAAY,CAAC16B,EAAGuzE,IAAS,CAAEA,EAAK,KAAK,YAAcvzE,EAAE,CAAC,CAAE,EAExD,SAAU,CAACA,EAAGuzE,IAAS,CAAMA,EAAK,KAAK,cAAgBvzE,EAAE,CAAC,GAAGuzE,EAAK,YAAW,CAAG,CACtF,CAAK,CACL,EAEA,IAAIkB,GAAqB,OAAO,OAAO,CACnC,UAAW,KACX,iBAAkB3B,IAClB,SAAUC,GACV,oBAAqBC,GACrB,UAAWC,GACX,YAAaC,GACb,iBAAkBC,GAClB,eAAgBC,IAChB,QAASC,IACT,iBAAkBG,GAClB,iBAAkBC,IAClB,kBAAmBC,IACnB,mBAAoBC,GACpB,QAASjiC,GACT,oBAAqBmiC,IACrB,qBAAsBC,IACtB,kBAAmBC,IACnB,YAAaC,IACb,cAAeC,IACf,mBAAoBC,IACpB,gBAAiBC,IACjB,YAAaC,IACb,WAAYC,IACZ,sBAAuBC,IACvB,aAAcC,IACd,kBAAmBC,GACvB,CAAC,EA0BD,SAASE,IAAsBj/D,EAAOqE,EAAU,CAC/BrE,EAAM,MAAMA,EAAM,MAAQ,CAAC,IAC3B,KACbqE,EAAS,YAAW,CAExB,CAOA,SAAS66D,IAAcj6C,EAAMhN,EAAQ,CAC9BA,GACAgN,EAAK,gBAOVA,EAAK,MAAQ,OAASA,EAAK,cAAc,MAAM,GAAG,EAAE,KAAK,GAAG,EAAI,sBAChEA,EAAK,cAAgBg6C,IACrBh6C,EAAK,SAAWA,EAAK,UAAYA,EAAK,cACtC,OAAOA,EAAK,cAKRA,EAAK,YAAc,SAAWA,EAAK,UAAY,GACrD,CAMA,SAASk6C,IAAel6C,EAAMm6C,EAAS,CAChC,MAAM,QAAQn6C,EAAK,OAAO,IAE/BA,EAAK,QAAU23C,IAAO,GAAG33C,EAAK,OAAO,EACvC,CAMA,SAASo6C,IAAap6C,EAAMm6C,EAAS,CACnC,GAAKn6C,EAAK,MACV,IAAIA,EAAK,OAASA,EAAK,IAAK,MAAM,IAAI,MAAM,0CAA0C,EAEtFA,EAAK,MAAQA,EAAK,MAClB,OAAOA,EAAK,MACd,CAMA,SAASq6C,IAAiBr6C,EAAMm6C,EAAS,CAEnCn6C,EAAK,YAAc,SAAWA,EAAK,UAAY,EACrD,CAGA,MAAMs6C,IAAkB,CACtB,KACA,MACA,MACA,KACA,MACA,KACA,KACA,OACA,SACA,OACA,OACF,EAEMC,IAA4B,UAQlC,SAASC,GAAgBC,EAAaC,EAAiBz9B,EAAYs9B,IAA2B,CAE5F,MAAMI,EAAmB,CAAA,EAIzB,OAAI,OAAOF,GAAgB,SACzBG,EAAY39B,EAAWw9B,EAAY,MAAM,GAAG,CAAC,EACpC,MAAM,QAAQA,CAAW,EAClCG,EAAY39B,EAAWw9B,CAAW,EAElC,OAAO,KAAKA,CAAW,EAAE,QAAQ,SAASx9B,EAAW,CAEnD,OAAO,OACL09B,EACAH,GAAgBC,EAAYx9B,CAAS,EAAGy9B,EAAiBz9B,CAAS,CAC1E,CACA,CAAK,EAEI09B,EAYP,SAASC,EAAY39B,EAAW49B,EAAa,CACvCH,IACFG,EAAcA,EAAY,IAAI10E,GAAKA,EAAE,YAAW,CAAE,GAEpD00E,EAAY,QAAQ,SAASC,EAAS,CACpC,MAAM9O,EAAO8O,EAAQ,MAAM,GAAG,EAC9BH,EAAiB3O,EAAK,CAAC,CAAC,EAAI,CAAC/uB,EAAW89B,IAAgB/O,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,CAAC,CAC/E,CAAK,CACL,CACA,CAUA,SAAS+O,IAAgBD,EAASE,EAAe,CAG/C,OAAIA,EACK,OAAOA,CAAa,EAGtBC,IAAcH,CAAO,EAAI,EAAI,CACtC,CAMA,SAASG,IAAcH,EAAS,CAC9B,OAAOR,IAAgB,SAASQ,EAAQ,YAAW,CAAE,CACvD,CAaA,SAASI,IAAgBrK,EAAU,CAAE,QAAAsK,GAAW,CAO9C,SAASC,EAAOjyE,EAAOkyE,EAAQ,CAC7B,OAAO,IAAI,OACTpxE,GAAOd,CAAK,EACZ,KAAO0nE,EAAS,iBAAmB,IAAM,KAAOwK,EAAS,IAAM,GACrE,CACA,CAeE,MAAMC,CAAW,CACf,aAAc,CACZ,KAAK,aAAe,CAAA,EAEpB,KAAK,QAAU,CAAA,EACf,KAAK,QAAU,EACf,KAAK,SAAW,CACtB,CAGI,QAAQ7D,EAAIhwE,EAAM,CAChBA,EAAK,SAAW,KAAK,WAErB,KAAK,aAAa,KAAK,OAAO,EAAIA,EAClC,KAAK,QAAQ,KAAK,CAACA,EAAMgwE,CAAE,CAAC,EAC5B,KAAK,SAAWG,IAAiBH,CAAE,EAAI,CAC7C,CAEI,SAAU,CACJ,KAAK,QAAQ,SAAW,IAG1B,KAAK,KAAO,IAAM,MAEpB,MAAM8D,EAAc,KAAK,QAAQ,IAAIjzD,GAAMA,EAAG,CAAC,CAAC,EAChD,KAAK,UAAY8yD,EAAOnsD,IAAKssD,CAAW,EAAG,EAAI,EAC/C,KAAK,UAAY,CACvB,CAGI,KAAKv2E,EAAG,CACN,KAAK,UAAU,UAAY,KAAK,UAChC,MAAM+V,EAAQ,KAAK,UAAU,KAAK/V,CAAC,EACnC,GAAI,CAAC+V,EAAS,OAAO,KAGrB,MAAM9X,EAAI8X,EAAM,UAAU,CAACuN,EAAIrlB,IAAMA,EAAI,GAAKqlB,IAAO,MAAS,EAExDkzD,EAAY,KAAK,aAAav4E,CAAC,EAGrC,OAAA8X,EAAM,OAAO,EAAG9X,CAAC,EAEV,OAAO,OAAO8X,EAAOygE,CAAS,CAC3C,CACA,CAiCE,MAAMC,CAAoB,CACxB,aAAc,CAEZ,KAAK,MAAQ,CAAA,EAEb,KAAK,aAAe,CAAA,EACpB,KAAK,MAAQ,EAEb,KAAK,UAAY,EACjB,KAAK,WAAa,CACxB,CAGI,WAAWlzE,EAAO,CAChB,GAAI,KAAK,aAAaA,CAAK,EAAG,OAAO,KAAK,aAAaA,CAAK,EAE5D,MAAMmzE,EAAU,IAAIJ,EACpB,YAAK,MAAM,MAAM/yE,CAAK,EAAE,QAAQ,CAAC,CAACkvE,EAAIhwE,CAAI,IAAMi0E,EAAQ,QAAQjE,EAAIhwE,CAAI,CAAC,EACzEi0E,EAAQ,QAAO,EACf,KAAK,aAAanzE,CAAK,EAAImzE,EACpBA,CACb,CAEI,4BAA6B,CAC3B,OAAO,KAAK,aAAe,CACjC,CAEI,aAAc,CACZ,KAAK,WAAa,CACxB,CAGI,QAAQjE,EAAIhwE,EAAM,CAChB,KAAK,MAAM,KAAK,CAACgwE,EAAIhwE,CAAI,CAAC,EACtBA,EAAK,OAAS,SAAS,KAAK,OACtC,CAGI,KAAKzC,EAAG,CACN,MAAMM,EAAI,KAAK,WAAW,KAAK,UAAU,EACzCA,EAAE,UAAY,KAAK,UACnB,IAAIkG,EAASlG,EAAE,KAAKN,CAAC,EAiCrB,GAAI,KAAK,8BACH,EAAAwG,GAAUA,EAAO,QAAU,KAAK,WAAkB,CACpD,MAAMmwE,EAAK,KAAK,WAAW,CAAC,EAC5BA,EAAG,UAAY,KAAK,UAAY,EAChCnwE,EAASmwE,EAAG,KAAK32E,CAAC,CAC5B,CAGM,OAAIwG,IACF,KAAK,YAAcA,EAAO,SAAW,EACjC,KAAK,aAAe,KAAK,OAE3B,KAAK,YAAW,GAIbA,CACb,CACA,CASE,SAASowE,EAAe57C,EAAM,CAC5B,MAAM67C,EAAK,IAAIJ,EAEf,OAAAz7C,EAAK,SAAS,QAAQ87C,GAAQD,EAAG,QAAQC,EAAK,MAAO,CAAE,KAAMA,EAAM,KAAM,OAAO,CAAE,CAAC,EAE/E97C,EAAK,eACP67C,EAAG,QAAQ77C,EAAK,cAAe,CAAE,KAAM,MAAO,EAE5CA,EAAK,SACP67C,EAAG,QAAQ77C,EAAK,QAAS,CAAE,KAAM,UAAW,EAGvC67C,CACX,CAyCE,SAASE,EAAY/7C,EAAMhN,EAAQ,CACjC,MAAMgpD,EAAmCh8C,EACzC,GAAIA,EAAK,WAAY,OAAOg8C,EAE5B,CAGE5B,GACN,EAAM,QAAQ6B,GAAOA,EAAIj8C,EAAMhN,CAAM,CAAC,EAElC69C,EAAS,mBAAmB,QAAQoL,GAAOA,EAAIj8C,EAAMhN,CAAM,CAAC,EAG5DgN,EAAK,cAAgB,KAErB,CACEi6C,IAGAC,IAEAG,GACN,EAAM,QAAQ4B,GAAOA,EAAIj8C,EAAMhN,CAAM,CAAC,EAElCgN,EAAK,WAAa,GAElB,IAAIk8C,EAAiB,KAWrB,GAVI,OAAOl8C,EAAK,UAAa,WAC3Bk8C,EAAiBl8C,EAAK,SAAS,SAC/B,OAAOA,EAAK,SAAS,UAGnBA,EAAK,WACPA,EAAK,SAAWw6C,GAAgBx6C,EAAK,SAAU6wC,EAAS,gBAAgB,GAItE7wC,EAAK,SAAWk8C,EAClB,MAAM,IAAI,MAAM,gGAAgG,EAKlH,OAAAA,EAAiBA,GAAkBl8C,EAAK,SAAW,MACnDg8C,EAAM,iBAAmBZ,EAAOc,EAAgB,EAAI,EAEhDlpD,IACGgN,EAAK,QAAOA,EAAK,MAAQ,SAC9Bg8C,EAAM,QAAUZ,EAAOp7C,EAAK,KAAK,EAC7BA,EAAK,iBAAgBA,EAAK,IAAMA,EAAK,OACrC,CAACA,EAAK,KAAO,CAACA,EAAK,iBAAgBA,EAAK,IAAM,SAC9CA,EAAK,MAAKg8C,EAAM,MAAQZ,EAAOp7C,EAAK,GAAG,GAC3Cg8C,EAAM,cAAgB/xE,GAAO+1B,EAAK,GAAG,GAAK,GACtCA,EAAK,gBAAkBhN,EAAO,gBAChCgpD,EAAM,gBAAkBh8C,EAAK,IAAM,IAAM,IAAMhN,EAAO,gBAGtDgN,EAAK,UAASg8C,EAAM,UAAYZ,EAAuCp7C,EAAK,OAAO,GAClFA,EAAK,WAAUA,EAAK,SAAW,CAAA,GAEpCA,EAAK,SAAW,CAAA,EAAG,OAAO,GAAGA,EAAK,SAAS,IAAI,SAASv8B,EAAG,CACzD,OAAO04E,IAAkB14E,IAAM,OAASu8B,EAAOv8B,CAAC,CACtD,CAAK,CAAC,EACFu8B,EAAK,SAAS,QAAQ,SAASv8B,EAAG,CAAEs4E,EAA+Bt4E,EAAIu4E,CAAK,CAAE,CAAE,EAE5Eh8C,EAAK,QACP+7C,EAAY/7C,EAAK,OAAQhN,CAAM,EAGjCgpD,EAAM,QAAUJ,EAAeI,CAAK,EAC7BA,CACX,CAKE,GAHKnL,EAAS,qBAAoBA,EAAS,mBAAqB,CAAA,GAG5DA,EAAS,UAAYA,EAAS,SAAS,SAAS,MAAM,EACxD,MAAM,IAAI,MAAM,2FAA2F,EAI7G,OAAAA,EAAS,iBAAmBgG,GAAQhG,EAAS,kBAAoB,CAAA,CAAE,EAE5DkL,EAA+BlL,CAAQ,CAChD,CAaA,SAASuL,GAAmBp8C,EAAM,CAChC,OAAKA,EAEEA,EAAK,gBAAkBo8C,GAAmBp8C,EAAK,MAAM,EAF1C,EAGpB,CAYA,SAASm8C,IAAkBn8C,EAAM,CAU/B,OATIA,EAAK,UAAY,CAACA,EAAK,iBACzBA,EAAK,eAAiBA,EAAK,SAAS,IAAI,SAASq8C,EAAS,CACxD,OAAOxF,GAAQ72C,EAAM,CAAE,SAAU,IAAI,EAAIq8C,CAAO,CACtD,CAAK,GAMCr8C,EAAK,eACAA,EAAK,eAOVo8C,GAAmBp8C,CAAI,EAClB62C,GAAQ72C,EAAM,CAAE,OAAQA,EAAK,OAAS62C,GAAQ72C,EAAK,MAAM,EAAI,IAAI,CAAE,EAGxE,OAAO,SAASA,CAAI,EACf62C,GAAQ72C,CAAI,EAIdA,CACT,CAEA,IAAI+qC,IAAU,SAId,SAASuR,IAAyBnzE,EAAO,CACvC,MAAO,GAAQA,GAASA,IAAU,GACpC,CAEA,SAASozE,IAAeC,EAAM,CAC5B,MAAMnwD,EAAY,CAChB,MAAO,CAAC,WAAY,OAAQ,YAAY,EACxC,KAAM,UAAW,CACf,MAAO,CACL,iBAAkB,GAClB,gBAAiB,EACzB,CACA,EACI,SAAU,CACR,WAAY,CACV,OAAI,KAAK,gBAAwB,GAE1B,QAAU,KAAK,gBAC9B,EACM,aAAc,CAEZ,GAAI,CAAC,KAAK,YAAc,CAACmwD,EAAK,YAAY,KAAK,QAAQ,EACrD,eAAQ,KAAK,iBAAiB,KAAK,QAAQ,qCAAqC,EAChF,KAAK,gBAAkB,GAChB5F,GAAW,KAAK,IAAI,EAG7B,IAAIprE,EAAS,CAAA,EACb,OAAI,KAAK,YACPA,EAASgxE,EAAK,cAAc,KAAK,IAAI,EACrC,KAAK,iBAAmBhxE,EAAO,WAE/BA,EAASgxE,EAAK,UAAU,KAAK,SAAU,KAAK,KAAM,KAAK,cAAc,EACrE,KAAK,iBAAmB,KAAK,UAExBhxE,EAAO,KACtB,EACM,YAAa,CACX,MAAO,CAAC,KAAK,UAAY8wE,IAAyB,KAAK,UAAU,CACzE,EACM,gBAAiB,CACf,MAAO,EACf,CACA,EAGI,OAAO30D,EAAe,CACpB,OAAOA,EAAc,MAAO,GAAI,CAC9BA,EAAc,OAAQ,CACpB,MAAO,KAAK,UACZ,SAAU,CAAE,UAAW,KAAK,WAAW,CACjD,CAAS,CACT,CAAO,CACP,CAEA,EAQE,MAAO,CAAE,UAAA0E,EAAW,UANF,CAChB,QAAQowD,EAAK,CACXA,EAAI,UAAU,cAAepwD,CAAS,CAC5C,CACA,CAE+B,CAC/B,CAKA,MAAMqwD,IAAkB,CACtB,yBAA0B,CAAC,CAAE,GAAAp0D,EAAI,OAAA9c,EAAQ,KAAA+yB,CAAI,IAAO,CAClD,MAAMo+C,EAAiBC,GAAWt0D,CAAE,EACpC,GAAI,CAACq0D,EAAe,OAAQ,OAE5B,MAAME,EAAa,SAAS,cAAc,KAAK,EAC/CA,EAAW,UAAYrxE,EAAO,MAC9BA,EAAO,MAAQsxE,IAAaH,EAAgBC,GAAWC,CAAU,EAAGt+C,CAAI,CAC5E,CACA,EAcA,SAASjzB,GAAI6kB,EAAM,CACjB,OAAOA,EAAK,SAAS,YAAW,CAClC,CAKA,SAASysD,GAAWzsD,EAAM,CAExB,MAAM3kB,EAAS,CAAA,EACf,OAAC,SAASuxE,EAAY5sD,EAAM3Z,EAAQ,CAClC,QAAS+Z,EAAQJ,EAAK,WAAYI,EAAOA,EAAQA,EAAM,YACjDA,EAAM,WAAa,EACrB/Z,GAAU+Z,EAAM,UAAU,OACjBA,EAAM,WAAa,IAC5B/kB,EAAO,KAAK,CACV,MAAO,QACP,OAAQgL,EACR,KAAM+Z,CAChB,CAAS,EACD/Z,EAASumE,EAAYxsD,EAAO/Z,CAAM,EAI7BlL,GAAIilB,CAAK,EAAE,MAAM,iBAAiB,GACrC/kB,EAAO,KAAK,CACV,MAAO,OACP,OAAQgL,EACR,KAAM+Z,CAClB,CAAW,GAIP,OAAO/Z,CACX,EAAK2Z,EAAM,CAAC,EACH3kB,CACT,CAOA,SAASsxE,IAAahG,EAAUkG,EAAa7zE,EAAO,CAClD,IAAI8zE,EAAY,EACZzxE,EAAS,GACb,MAAM0xE,EAAY,CAAA,EAElB,SAASC,GAAe,CACtB,MAAI,CAACrG,EAAS,QAAU,CAACkG,EAAY,OAC5BlG,EAAS,OAASA,EAAWkG,EAElClG,EAAS,CAAC,EAAE,SAAWkG,EAAY,CAAC,EAAE,OAChClG,EAAS,CAAC,EAAE,OAASkG,EAAY,CAAC,EAAE,OAAUlG,EAAWkG,EAkB5DA,EAAY,CAAC,EAAE,QAAU,QAAUlG,EAAWkG,CACzD,CAKE,SAASI,EAAKjtD,EAAM,CAElB,SAASktD,EAAgB96C,EAAM,CAC7B,MAAO,IAAMA,EAAK,SAAW,KAAOq0C,GAAWr0C,EAAK,KAAK,EAAI,GACnE,CAEI/2B,GAAU,IAAMF,GAAI6kB,CAAI,EAAI,CAAA,EAAG,IAAI,KAAKA,EAAK,WAAYktD,CAAe,EAAE,KAAK,EAAE,EAAI,GACzF,CAKE,SAASC,EAAMntD,EAAM,CACnB3kB,GAAU,KAAOF,GAAI6kB,CAAI,EAAI,GACjC,CAKE,SAAS3I,EAAOlC,EAAO,EACpBA,EAAM,QAAU,QAAU83D,EAAOE,GAAOh4D,EAAM,IAAI,CACvD,CAEE,KAAOwxD,EAAS,QAAUkG,EAAY,QAAQ,CAC5C,IAAIO,EAASJ,EAAY,EAGzB,GAFA3xE,GAAUorE,GAAWztE,EAAM,UAAU8zE,EAAWM,EAAO,CAAC,EAAE,MAAM,CAAC,EACjEN,EAAYM,EAAO,CAAC,EAAE,OAClBA,IAAWzG,EAAU,CAOvBoG,EAAU,QAAO,EAAG,QAAQI,CAAK,EACjC,GACE91D,EAAO+1D,EAAO,OAAO,EAAG,CAAC,EAAE,CAAC,CAAC,EAC7BA,EAASJ,EAAY,QACdI,IAAWzG,GAAYyG,EAAO,QAAUA,EAAO,CAAC,EAAE,SAAWN,GACtEC,EAAU,QAAO,EAAG,QAAQE,CAAI,CACtC,MACUG,EAAO,CAAC,EAAE,QAAU,QACtBL,EAAU,KAAKK,EAAO,CAAC,EAAE,IAAI,EAE7BL,EAAU,IAAG,EAEf11D,EAAO+1D,EAAO,OAAO,EAAG,CAAC,EAAE,CAAC,CAAC,CAEnC,CACE,OAAO/xE,EAASorE,GAAWztE,EAAM,OAAO8zE,CAAS,CAAC,CACpD,CAYA,MAAMO,GAAmB,CAAA,EAKnBn6E,GAAS+tB,GAAY,CACzB,QAAQ,MAAMA,CAAO,CACvB,EAMMqsD,GAAO,CAACrsD,KAAYvtB,IAAS,CACjC,QAAQ,IAAI,SAASutB,CAAO,GAAI,GAAGvtB,CAAI,CACzC,EAMM65E,GAAa,CAAC3S,EAAS35C,IAAY,CACnCosD,GAAiB,GAAGzS,CAAO,IAAI35C,CAAO,EAAE,IAE5C,QAAQ,IAAI,oBAAoB25C,CAAO,KAAK35C,CAAO,EAAE,EACrDosD,GAAiB,GAAGzS,CAAO,IAAI35C,CAAO,EAAE,EAAI,GAC9C,EAOMusD,GAAW/G,GACXgH,GAAY/G,GACZgH,GAAW,OAAO,SAAS,EAM3BC,IAAO,SAAStB,EAAM,CAG1B,MAAMuB,EAAY,OAAO,OAAO,IAAI,EAE9BC,EAAU,OAAO,OAAO,IAAI,EAE5B7C,EAAU,CAAA,EAIhB,IAAI8C,EAAY,GAChB,MAAMC,EAAc,yBACdC,EAAqB,sFAErBC,EAAqB,CAAE,kBAAmB,GAAM,KAAM,aAAc,SAAU,EAAE,EAKtF,IAAIv0E,EAAU,CACZ,cAAe,qBACf,iBAAkB,8BAClB,YAAa,QACb,WAAY,KACZ,MAAO,GACP,UAAW,KAGX,UAAWytE,GACf,EAQE,SAAS+G,EAAmBC,EAAc,CACxC,OAAOz0E,EAAQ,cAAc,KAAKy0E,CAAY,CAClD,CAKE,SAASC,EAAcC,EAAO,CAC5B,IAAI/N,EAAU+N,EAAM,UAAY,IAEhC/N,GAAW+N,EAAM,WAAaA,EAAM,WAAW,UAAY,GAG3D,MAAMzjE,EAAQlR,EAAQ,iBAAiB,KAAK4mE,CAAO,EACnD,GAAI11D,EAAO,CACT,MAAM81D,EAAW4N,EAAY1jE,EAAM,CAAC,CAAC,EACrC,OAAK81D,IACH4M,GAAKU,EAAmB,QAAQ,KAAMpjE,EAAM,CAAC,CAAC,CAAC,EAC/C0iE,GAAK,oDAAqDe,CAAK,GAE1D3N,EAAW91D,EAAM,CAAC,EAAI,cACnC,CAEI,OAAO01D,EACJ,MAAM,KAAK,EACX,KAAMiO,GAAWL,EAAmBK,CAAM,GAAKD,EAAYC,CAAM,CAAC,CACzE,CAwBE,SAASC,EAAUC,EAAoBC,EAAeC,EAAgBC,EAAc,CAClF,IAAIxK,GAAO,GACP+J,GAAe,GACf,OAAOO,GAAkB,UAC3BtK,GAAOqK,EACPE,EAAiBD,EAAc,eAC/BP,GAAeO,EAAc,SAG7BE,EAAe,SAGfrB,GAAW,SAAU,qDAAqD,EAC1EA,GAAW,SAAU;AAAA,wDAAuG,EAC5HY,GAAeM,EACfrK,GAAOsK,GAIT,MAAM52D,EAAU,CACd,KAAAssD,GACA,SAAU+J,EAChB,EAGIU,EAAK,mBAAoB/2D,CAAO,EAIhC,MAAMzc,EAASyc,EAAQ,OACnBA,EAAQ,OACRg3D,EAAWh3D,EAAQ,SAAUA,EAAQ,KAAM62D,EAAgBC,CAAY,EAE3E,OAAAvzE,EAAO,KAAOyc,EAAQ,KAEtB+2D,EAAK,kBAAmBxzE,CAAM,EAEvBA,CACX,CAWE,SAASyzE,EAAWX,EAAcY,EAAiBJ,EAAgBC,EAAc,CAO/E,SAASI,GAAYn/C,GAAMjlB,GAAO,CAChC,MAAMqkE,GAAYvO,GAAS,iBAAmB91D,GAAM,CAAC,EAAE,YAAW,EAAKA,GAAM,CAAC,EAC9E,OAAO,OAAO,UAAU,eAAe,KAAKilB,GAAK,SAAUo/C,EAAS,GAAKp/C,GAAK,SAASo/C,EAAS,CACtG,CAEI,SAASC,IAAkB,CACzB,GAAI,CAACz6B,EAAI,SAAU,CACjB2yB,GAAQ,QAAQ+H,EAAU,EAC1B,MACR,CAEM,IAAI3xE,GAAY,EAChBi3C,EAAI,iBAAiB,UAAY,EACjC,IAAI7pC,GAAQ6pC,EAAI,iBAAiB,KAAK06B,EAAU,EAC5CC,GAAM,GAEV,KAAOxkE,IAAO,CACZwkE,IAAOD,GAAW,UAAU3xE,GAAWoN,GAAM,KAAK,EAClD,MAAMrN,GAAOyxE,GAAYv6B,EAAK7pC,EAAK,EACnC,GAAIrN,GAAM,CACR,KAAM,CAAC2pE,GAAMmI,EAAgB,EAAI9xE,GAKjC,GAJA6pE,GAAQ,QAAQgI,EAAG,EACnBA,GAAM,GAENE,GAAaD,GACTnI,GAAK,WAAW,GAAG,EAGrBkI,IAAOxkE,GAAM,CAAC,MACT,CACL,MAAM2kE,GAAW7O,GAAS,iBAAiBwG,EAAI,GAAKA,GACpDE,GAAQ,WAAWx8D,GAAM,CAAC,EAAG2kE,EAAQ,CACjD,CACA,MACUH,IAAOxkE,GAAM,CAAC,EAEhBpN,GAAYi3C,EAAI,iBAAiB,UACjC7pC,GAAQ6pC,EAAI,iBAAiB,KAAK06B,EAAU,CACpD,CACMC,IAAOD,GAAW,OAAO3xE,EAAS,EAClC4pE,GAAQ,QAAQgI,EAAG,CACzB,CAEI,SAASI,GAAqB,CAC5B,GAAIL,KAAe,GAAI,OAEvB,IAAI9zE,GAAS,KAEb,GAAI,OAAOo5C,EAAI,aAAgB,SAAU,CACvC,GAAI,CAACm5B,EAAUn5B,EAAI,WAAW,EAAG,CAC/B2yB,GAAQ,QAAQ+H,EAAU,EAC1B,MACV,CACQ9zE,GAASyzE,EAAWr6B,EAAI,YAAa06B,GAAY,GAAMM,GAAch7B,EAAI,WAAW,CAAC,EACrFg7B,GAAch7B,EAAI,WAAW,EAAiCp5C,GAAO,GAC7E,MACQA,GAASq0E,EAAcP,GAAY16B,EAAI,YAAY,OAASA,EAAI,YAAc,IAAI,EAOhFA,EAAI,UAAY,IAClB66B,GAAaj0E,GAAO,WAEtB+rE,GAAQ,eAAe/rE,GAAO,QAASA,GAAO,QAAQ,CAC5D,CAEI,SAASs0E,GAAgB,CACnBl7B,EAAI,aAAe,KACrB+6B,EAAkB,EAElBN,GAAe,EAEjBC,GAAa,EACnB,CAKI,SAASS,GAAa//C,GAAM,CAC1B,OAAIA,GAAK,WACPu3C,GAAQ,SAAS1G,GAAS,iBAAiB7wC,GAAK,SAAS,GAAKA,GAAK,SAAS,EAE9E4kB,EAAM,OAAO,OAAO5kB,GAAM,CAAE,OAAQ,CAAE,MAAO4kB,CAAG,EAAI,EAC7CA,CACb,CAQI,SAASo7B,EAAUhgD,GAAMjlB,GAAOklE,GAAoB,CAClD,IAAIC,GAAUrI,IAAW73C,GAAK,MAAOigD,EAAkB,EAEvD,GAAIC,GAAS,CACX,GAAIlgD,GAAK,QAAQ,EAAG,CAClB,MAAM64C,GAAO,IAAIlC,GAAS32C,EAAI,EAC9BA,GAAK,QAAQ,EAAEjlB,GAAO89D,EAAI,EACtBA,GAAK,iBAAgBqH,GAAU,GAC7C,CAEQ,GAAIA,GAAS,CACX,KAAOlgD,GAAK,YAAcA,GAAK,QAC7BA,GAAOA,GAAK,OAEd,OAAOA,EACjB,CACA,CAGM,GAAIA,GAAK,eACP,OAAOggD,EAAUhgD,GAAK,OAAQjlB,GAAOklE,EAAkB,CAE/D,CAOI,SAASE,GAASrI,GAAQ,CACxB,OAAIlzB,EAAI,QAAQ,aAAe,GAG7B06B,IAAcxH,GAAO,CAAC,EACf,IAIPsI,GAA2B,GACpB,EAEf,CAQI,SAASC,GAAatlE,GAAO,CAC3B,MAAM+8D,GAAS/8D,GAAM,CAAC,EAChBulE,GAAUvlE,GAAM,KAEhB89D,GAAO,IAAIlC,GAAS2J,EAAO,EAE3BC,GAAkB,CAACD,GAAQ,cAAeA,GAAQ,UAAU,CAAC,EACnE,UAAWhyD,MAAMiyD,GACf,GAAKjyD,KACLA,GAAGvT,GAAO89D,EAAI,EACVA,GAAK,gBAAgB,OAAOsH,GAASrI,EAAM,EAGjD,OAAIwI,IAAWA,GAAQ,iBACrBA,GAAQ,MAAQ9I,IAAOM,EAAM,GAG3BwI,GAAQ,KACVhB,IAAcxH,IAEVwI,GAAQ,eACVhB,IAAcxH,IAEhBgI,EAAa,EACT,CAACQ,GAAQ,aAAe,CAACA,GAAQ,eACnChB,GAAaxH,KAGjBiI,GAAaO,EAAO,EAKbA,GAAQ,YAAc,EAAIxI,GAAO,MAC9C,CAOI,SAAS0I,GAAWzlE,GAAO,CACzB,MAAM+8D,GAAS/8D,GAAM,CAAC,EAChBklE,GAAqBf,EAAgB,OAAOnkE,GAAM,KAAK,EAEvD0lE,GAAUT,EAAUp7B,EAAK7pC,GAAOklE,EAAkB,EACxD,GAAI,CAACQ,GAAW,OAAO5C,GAEvB,MAAM6C,GAAS97B,EACX87B,GAAO,KACTpB,IAAcxH,IAER4I,GAAO,WAAaA,GAAO,aAC/BpB,IAAcxH,IAEhBgI,EAAa,EACTY,GAAO,aACTpB,GAAaxH,KAGjB,GACMlzB,EAAI,WACN2yB,GAAQ,UAAS,EAEf,CAAC3yB,EAAI,MAAQ,CAACA,EAAI,cACpB66B,GAAa76B,EAAI,WAEnBA,EAAMA,EAAI,aACHA,IAAQ67B,GAAQ,QACzB,OAAIA,GAAQ,SACNA,GAAQ,iBACVA,GAAQ,OAAO,MAAQA,GAAQ,OAEjCV,GAAaU,GAAQ,MAAM,GAEtBC,GAAO,UAAY,EAAI5I,GAAO,MAC3C,CAEI,SAAS6I,IAAuB,CAC9B,MAAMlpD,GAAO,CAAA,EACb,QAASgJ,GAAUmkB,EAAKnkB,KAAYowC,GAAUpwC,GAAUA,GAAQ,OAC1DA,GAAQ,WACVhJ,GAAK,QAAQgJ,GAAQ,SAAS,EAGlChJ,GAAK,QAAQjE,IAAQ+jD,GAAQ,SAAS/jD,EAAI,CAAC,CACjD,CAGI,IAAIotD,GAAY,CAAA,EAQhB,SAASC,GAAcC,GAAiB/lE,GAAO,CAC7C,MAAM+8D,GAAS/8D,IAASA,GAAM,CAAC,EAK/B,GAFAukE,IAAcwB,GAEVhJ,IAAU,KACZ,OAAAgI,EAAa,EACN,EAOT,GAAIc,GAAU,OAAS,SAAW7lE,GAAM,OAAS,OAAS6lE,GAAU,QAAU7lE,GAAM,OAAS+8D,KAAW,GAAI,CAG1G,GADAwH,IAAcJ,EAAgB,MAAMnkE,GAAM,MAAOA,GAAM,MAAQ,CAAC,EAC5D,CAACkjE,EAAW,CAEd,MAAM57E,GAAM,IAAI,MAAM,qBAAqB,EAC3C,MAAAA,GAAI,aAAei8E,EACnBj8E,GAAI,QAAUu+E,GAAU,KAClBv+E,EAChB,CACQ,MAAO,EACf,CAGM,GAFAu+E,GAAY7lE,GAERA,GAAM,OAAS,QACjB,OAAOslE,GAAatlE,EAAK,EACpB,GAAIA,GAAM,OAAS,WAAa,CAAC+jE,EAAgB,CAGtD,MAAMz8E,GAAM,IAAI,MAAM,mBAAqBy1E,GAAS,gBAAkBlzB,EAAI,WAAa,aAAe,GAAG,EACzG,MAAAviD,GAAI,KAAOuiD,EACLviD,EACd,SAAiB0Y,GAAM,OAAS,MAAO,CAC/B,MAAMkiE,GAAYuD,GAAWzlE,EAAK,EAClC,GAAIkiE,KAAcY,GAChB,OAAOZ,EAEjB,CAKM,GAAIliE,GAAM,OAAS,WAAa+8D,KAAW,GAEzC,MAAO,GAOT,GAAIiJ,GAAa,KAAUA,GAAahmE,GAAM,MAAQ,EAEpD,MADY,IAAI,MAAM,2DAA2D,EAgBnF,OAAAukE,IAAcxH,GACPA,GAAO,MACpB,CAEI,MAAMjH,GAAW4N,EAAYH,CAAY,EACzC,GAAI,CAACzN,GACH,MAAAxtE,GAAM86E,EAAmB,QAAQ,KAAMG,CAAY,CAAC,EAC9C,IAAI,MAAM,sBAAwBA,EAAe,GAAG,EAG5D,MAAM0C,GAAK9F,IAAgBrK,GAAU,CAAE,QAAAsK,CAAO,CAAE,EAChD,IAAI3vE,GAAS,GAETo5C,EAAMm6B,GAAgBiC,GAE1B,MAAMpB,GAAgB,CAAA,EAChBrI,GAAU,IAAI1tE,EAAQ,UAAUA,CAAO,EAC7C82E,GAAoB,EACpB,IAAIrB,GAAa,GACbG,EAAY,EACZl3E,EAAQ,EACRw4E,GAAa,EACbX,GAA2B,GAE/B,GAAI,CAGF,IAFAx7B,EAAI,QAAQ,YAAW,IAEd,CACPm8B,KACIX,GAGFA,GAA2B,GAE3Bx7B,EAAI,QAAQ,YAAW,EAEzBA,EAAI,QAAQ,UAAYr8C,EAExB,MAAMwS,GAAQ6pC,EAAI,QAAQ,KAAKs6B,CAAe,EAG9C,GAAI,CAACnkE,GAAO,MAEZ,MAAMkmE,GAAc/B,EAAgB,UAAU32E,EAAOwS,GAAM,KAAK,EAC1DmmE,GAAiBL,GAAcI,GAAalmE,EAAK,EACvDxS,EAAQwS,GAAM,MAAQmmE,EAC9B,CACM,OAAAL,GAAc3B,EAAgB,OAAO32E,CAAK,CAAC,EAC3CgvE,GAAQ,cAAa,EACrBA,GAAQ,SAAQ,EAChB/rE,GAAS+rE,GAAQ,OAAM,EAEhB,CAGL,UAAW,KAAK,MAAMkI,CAAS,EAC/B,MAAOj0E,GACP,SAAU8yE,EACV,QAAS,GACT,QAAS/G,GACT,IAAK3yB,CACb,CACA,OAAaviD,GAAK,CACZ,GAAIA,GAAI,SAAWA,GAAI,QAAQ,SAAS,SAAS,EAC/C,MAAO,CACL,QAAS,GACT,UAAW,CACT,IAAKA,GAAI,QACT,QAAS68E,EAAgB,MAAM32E,EAAQ,IAAKA,EAAQ,GAAG,EACvD,KAAMlG,GAAI,IACtB,EACU,MAAOmJ,GACP,UAAW,EACX,MAAOmyE,GAASuB,CAAe,EAC/B,QAAS3H,EACnB,EACa,GAAI0G,EACT,MAAO,CACL,QAAS,GACT,UAAW,EACX,MAAON,GAASuB,CAAe,EAC/B,QAAS3H,GACT,SAAU+G,EACV,IAAK15B,EACL,YAAaviD,EACvB,EAEQ,MAAMA,EAEd,CACA,CASE,SAAS8+E,EAAwB5M,EAAM,CACrC,MAAM/oE,EAAS,CACb,UAAW,EACX,QAAS,IAAI3B,EAAQ,UAAUA,CAAO,EACtC,MAAO8zE,GAASpJ,CAAI,EACpB,QAAS,GACT,IAAK6J,CACX,EACI,OAAA5yE,EAAO,QAAQ,QAAQ+oE,CAAI,EACpB/oE,CACX,CAgBE,SAASq0E,EAActL,EAAM6M,EAAgB,CAC3CA,EAAiBA,GAAkBv3E,EAAQ,WAAa,OAAO,KAAKk0E,CAAS,EAC7E,MAAMsD,EAAYF,EAAwB5M,CAAI,EAExC/xC,EAAU4+C,EAAe,OAAO3C,CAAW,EAAE,OAAO6C,CAAa,EAAE,IAAIz9D,IAC3Eo7D,EAAWp7D,GAAM0wD,EAAM,EAAK,CAClC,EACI/xC,EAAQ,QAAQ6+C,CAAS,EAEzB,MAAMzxD,GAAS4S,EAAQ,KAAK,CAAC1/B,GAAGC,IAAM,CAEpC,GAAID,GAAE,YAAcC,EAAE,UAAW,OAAOA,EAAE,UAAYD,GAAE,UAIxD,GAAIA,GAAE,UAAYC,EAAE,SAAU,CAC5B,GAAI07E,EAAY37E,GAAE,QAAQ,EAAE,aAAeC,EAAE,SAC3C,MAAO,GACF,GAAI07E,EAAY17E,EAAE,QAAQ,EAAE,aAAeD,GAAE,SAClD,MAAO,EAEjB,CAMM,MAAO,EACb,CAAK,EAEK,CAACy+E,GAAMC,CAAU,EAAI5xD,GAGrBpkB,EAAS+1E,GACf,OAAA/1E,EAAO,YAAcg2E,EAEdh2E,CACX,CAWE,SAASi2E,EAAUC,EAAM,CACvB,OAAM73E,EAAQ,YAAcA,EAAQ,MAI7B63E,EAAK,QAAQxD,EAAanjE,GAC3BA,IAAU;AAAA,EACLlR,EAAQ,MAAQ,OAASkR,EACvBlR,EAAQ,WACVkR,EAAM,QAAQ,MAAOlR,EAAQ,UAAU,EAEzCkR,CACR,EAVQ2mE,CAWb,CASE,SAASC,EAAgBz3E,EAAS03E,EAAaC,EAAY,CACzD,MAAMhR,EAAW+Q,EAAc5D,EAAQ4D,CAAW,EAAIC,EAEtD33E,EAAQ,UAAU,IAAI,MAAM,EACxB2mE,GAAU3mE,EAAQ,UAAU,IAAI2mE,CAAQ,CAChD,CAGE,MAAMiR,EAAW,CACf,0BAA2B,CAAC,CAAE,GAAAx5D,KAAS,CACjCze,EAAQ,QACVye,EAAG,UAAYA,EAAG,UAAU,QAAQ,MAAO,EAAE,EAAE,QAAQ,aAAc;AAAA,CAAI,EAEjF,EACI,yBAA0B,CAAC,CAAE,OAAA9c,KAAa,CACpC3B,EAAQ,QACV2B,EAAO,MAAQA,EAAO,MAAM,QAAQ,MAAO,MAAM,EAEzD,CACA,EAEQu2E,EAAiB,mBAEjBC,EAAmB,CACvB,yBAA0B,CAAC,CAAE,OAAAx2E,KAAa,CACpC3B,EAAQ,aACV2B,EAAO,MAAQA,EAAO,MAAM,QAAQu2E,EAAiBz8E,GACnDA,EAAE,QAAQ,MAAOuE,EAAQ,UAAU,CAC7C,EAEA,CACA,EAQE,SAASo4E,EAAiB/3E,EAAS,CAEjC,IAAIimB,EAAO,KACX,MAAM0gD,EAAW0N,EAAcr0E,CAAO,EAEtC,GAAIm0E,EAAmBxN,CAAQ,EAAG,OAGlCmO,EAAK,0BACH,CAAE,GAAI90E,EAAS,SAAU2mE,CAAQ,CAAE,EAErC1gD,EAAOjmB,EACP,MAAMq0B,EAAOpO,EAAK,YACZ3kB,GAASqlE,EAAW8N,EAAUpgD,EAAM,CAAE,SAAAsyC,EAAU,eAAgB,EAAI,CAAE,EAAIgP,EAActhD,CAAI,EAGlGygD,EAAK,yBAA0B,CAAE,GAAI90E,EAAS,OAAAsB,GAAQ,KAAA+yB,EAAM,EAE5Dr0B,EAAQ,UAAYsB,GAAO,MAC3Bm2E,EAAgBz3E,EAAS2mE,EAAUrlE,GAAO,QAAQ,EAClDtB,EAAQ,OAAS,CACf,SAAUsB,GAAO,SAEjB,GAAIA,GAAO,UACX,UAAWA,GAAO,SACxB,EACQA,GAAO,cACTtB,EAAQ,YAAc,CACpB,SAAUsB,GAAO,YAAY,SAE7B,GAAIA,GAAO,YAAY,UACvB,UAAWA,GAAO,YAAY,SACtC,EAEA,CAOE,SAAS02E,EAAUC,EAAa,CAC1BA,EAAY,QACdzE,GAAW,SAAU,2CAA2C,EAChEA,GAAW,SAAU,oEAAoE,GAE3F7zE,EAAU+zE,GAAU/zE,EAASs4E,CAAW,CAC5C,CAQE,MAAMC,EAAmB,IAAM,CAC7B,GAAIA,EAAiB,OAAQ,OAC7BA,EAAiB,OAAS,GAE1B1E,GAAW,SAAU,gEAAgE,EAEtE,SAAS,iBAAiB,UAAU,EAC5C,QAAQuE,CAAgB,CACnC,EAIE,SAASI,GAAyB,CAChC3E,GAAW,SAAU,sEAAsE,EAC3F4E,EAAiB,EACrB,CAEE,IAAIA,EAAiB,GAKrB,SAASC,GAAe,CAEtB,GAAI,SAAS,aAAe,UAAW,CACrCD,EAAiB,GACjB,MACN,CAEmB,SAAS,iBAAiB,UAAU,EAC5C,QAAQL,CAAgB,CACnC,CAEE,SAASO,GAAO,CAEVF,GAAgBC,EAAY,CACpC,CAGM,OAAO,OAAW,KAAe,OAAO,kBAC1C,OAAO,iBAAiB,mBAAoBC,EAAM,EAAK,EASzD,SAASC,EAAiBnE,EAAcoE,EAAoB,CAC1D,IAAIC,EAAO,KACX,GAAI,CACFA,EAAOD,EAAmBlG,CAAI,CACpC,OAAaoG,EAAS,CAGhB,GAFAv/E,GAAM,wDAAwD,QAAQ,KAAMi7E,CAAY,CAAC,EAEpFL,EAAqC56E,GAAMu/E,CAAO,MAArC,OAAMA,EAKxBD,EAAOvE,CACb,CAESuE,EAAK,OAAMA,EAAK,KAAOrE,GAC5BP,EAAUO,CAAY,EAAIqE,EAC1BA,EAAK,cAAgBD,EAAmB,KAAK,KAAMlG,CAAI,EAEnDmG,EAAK,SACPE,EAAgBF,EAAK,QAAS,CAAE,aAAArE,CAAY,CAAE,CAEpD,CAOE,SAASwE,EAAmBxE,EAAc,CACxC,OAAOP,EAAUO,CAAY,EAC7B,UAAW1mD,KAAS,OAAO,KAAKomD,CAAO,EACjCA,EAAQpmD,CAAK,IAAM0mD,GACrB,OAAON,EAAQpmD,CAAK,CAG5B,CAKE,SAASmrD,GAAgB,CACvB,OAAO,OAAO,KAAKhF,CAAS,CAChC,CAWE,SAASiF,EAAgBn/D,EAAM,CAC7B65D,GAAW,SAAU,kDAAkD,EACvEA,GAAW,SAAU,kEAAkE,EAEvF,MAAMiF,EAAOlE,EAAY56D,CAAI,EAC7B,GAAI8+D,EAAQ,OAAOA,EAGnB,MADY,IAAI,MAAM,iDAAmD,QAAQ,KAAM9+D,CAAI,CAAC,CAEhG,CAME,SAAS46D,EAAY56D,EAAM,CACzB,OAAAA,GAAQA,GAAQ,IAAI,YAAW,EACxBk6D,EAAUl6D,CAAI,GAAKk6D,EAAUC,EAAQn6D,CAAI,CAAC,CACrD,CAOE,SAASg/D,EAAgBI,EAAW,CAAE,aAAA3E,GAAgB,CAChD,OAAO2E,GAAc,WACvBA,EAAY,CAACA,CAAS,GAExBA,EAAU,QAAQrrD,GAAS,CAAEomD,EAAQpmD,EAAM,aAAa,EAAI0mD,CAAa,CAAE,CAC/E,CAME,SAASgD,EAAcz9D,EAAM,CAC3B,MAAM8+D,EAAOlE,EAAY56D,CAAI,EAC7B,OAAO8+D,GAAQ,CAACA,EAAK,iBACzB,CAOE,SAASO,EAAiBC,EAAQ,CAE5BA,EAAO,uBAAuB,GAAK,CAACA,EAAO,yBAAyB,IACtEA,EAAO,yBAAyB,EAAKz1E,GAAS,CAC5Cy1E,EAAO,uBAAuB,EAC5B,OAAO,OAAO,CAAE,MAAOz1E,EAAK,EAAE,EAAIA,CAAI,CAChD,CACA,GAEQy1E,EAAO,sBAAsB,GAAK,CAACA,EAAO,wBAAwB,IACpEA,EAAO,wBAAwB,EAAKz1E,GAAS,CAC3Cy1E,EAAO,sBAAsB,EAC3B,OAAO,OAAO,CAAE,MAAOz1E,EAAK,EAAE,EAAIA,CAAI,CAChD,CACA,EAEA,CAKE,SAAS01E,EAAUD,EAAQ,CACzBD,EAAiBC,CAAM,EACvBhI,EAAQ,KAAKgI,CAAM,CACvB,CAOE,SAASnE,EAAK15D,EAAOzhB,EAAM,CACzB,MAAMyqB,EAAKhJ,EACX61D,EAAQ,QAAQ,SAASgI,EAAQ,CAC3BA,EAAO70D,CAAE,GACX60D,EAAO70D,CAAE,EAAEzqB,CAAI,CAEvB,CAAK,CACL,CAQE,SAASw/E,EAAmBr3E,EAAK,CAC/B,OAAA0xE,GAAW,SAAU,6CAA6C,EAClEA,GAAW,SAAU,oEAAoE,EAElF+D,EAAUz1E,CAAG,CACxB,CAME,SAASs3E,EAAwBh7D,EAAI,CACnC,OAAAo1D,GAAW,SAAU,kDAAkD,EACvEA,GAAW,SAAU,kCAAkC,EAEhDuE,EAAiB35D,CAAE,CAC9B,CAGE,OAAO,OAAOk0D,EAAM,CAClB,UAAAmC,EACA,cAAAkB,EACA,aAAA0C,EACA,UAAWc,EACX,iBAAApB,EAEA,eAAgBqB,EAChB,UAAApB,EACA,iBAAAE,EACA,uBAAAC,EACA,iBAAAI,EACA,mBAAAK,EACA,cAAAC,EACA,YAAAtE,EACA,gBAAAoE,EACA,gBAAAG,EACA,cAAA1B,EACA,QAAS1D,GACT,UAAAwF,EAEA,UAAW7G,IAAeC,CAAI,EAAE,SACpC,CAAG,EAEDA,EAAK,UAAY,UAAW,CAAEyB,EAAY,EAAM,EAChDzB,EAAK,SAAW,UAAW,CAAEyB,EAAY,EAAK,EAC9CzB,EAAK,cAAgBzR,IAErB,UAAWrmE,KAAOq1E,GAEZ,OAAOA,GAAMr1E,CAAG,GAAM,UAExB+xE,GAAcsD,GAAMr1E,CAAG,CAAC,EAK5B,cAAO,OAAO83E,EAAMzC,EAAK,EAGzByC,EAAK,UAAUsF,CAAQ,EACvBtF,EAAK,UAAUE,GAAe,EAC9BF,EAAK,UAAUwF,CAAgB,EACxBxF,CACT,EAGA,IAAImC,IAAYb,IAAK,EAAE,EAEvByF,IAAiB5E,kCCz8Ef,UAAW,CAGX,IAAIn/C,EAIFA,EAAY73B,EAAA,QAAiBnE,EAS/Bg8B,EAAU,OAASh8B,EACnBg8B,EAAU,SAAWgkD,EAEjB,OAAO,QAAY,KAAe,OAAO,QAAQ,KAAQ,aAC3DhkD,EAAU,OAASikD,GAGrB,SAASA,GAAkB,CACzB,QAAQ,IAAIjgF,EAAO,MAAM,KAAM,SAAS,CAAC,CAC7C,CAEE,SAASggF,EAASE,EAAKC,EAAc,CACnC,OAAOngF,EAAO,MAAM,KAAM,CAACkgF,CAAG,EAAE,OAAOC,CAAY,CAAC,CACxD,CAEE,SAASngF,EAAOkgF,EAAK,CAsBnB,QArBI5/E,EAAW,EACXD,EAAO,CAAA,EAAG,MAAM,KAAK,SAAS,EAC9BZ,EAAI,EACJ8B,EAAI2+E,EAAI,OACRl4E,EAAS,GACT/H,EACAmgF,EAAU,GACV53E,EACAggB,EACA63D,EAAc,GACdC,EACAC,EAAU,UAAW,CAAE,OAAOlgF,EAAKC,GAAU,CAAE,EAC/CkgF,EAAc,UAAW,CAEvB,QADIC,EAAS,GACN,KAAK,KAAKP,EAAIzgF,CAAC,CAAC,GACrBghF,GAAUP,EAAIzgF,GAAG,EACjBQ,EAAIigF,EAAIzgF,CAAC,EAEX,OAAOghF,EAAO,OAAS,EAAI,SAASA,CAAM,EAAI,IACxD,EAEWhhF,EAAI8B,EAAG,EAAE9B,EAEd,GADAQ,EAAIigF,EAAIzgF,CAAC,EACL2gF,EAeF,OAdAA,EAAU,GACNngF,GAAK,KACPogF,EAAc,GACdpgF,EAAIigF,EAAI,EAAEzgF,CAAC,GAEJQ,GAAK,KAAOigF,EAAIzgF,EAAI,CAAC,GAAK,KACjC4gF,EAAc,GACd5gF,GAAK,EACLQ,EAAIigF,EAAIzgF,CAAC,GAGT4gF,EAAc,GAEhBC,EAAYE,EAAW,EACfvgF,EAAC,CACT,IAAK,IACH+H,GAAU,SAASu4E,EAAO,EAAI,EAAE,EAAE,SAAS,CAAC,EAC5C,MACF,IAAK,IACH/3E,EAAM+3E,EAAO,EACT,OAAO/3E,GAAQ,UAAYA,aAAe,OAC5CR,GAAUQ,EAEVR,GAAU,OAAO,aAAa,SAASQ,EAAK,EAAE,CAAC,EACjD,MACF,IAAK,IACHR,GAAU,SAASu4E,EAAO,EAAI,EAAE,EAChC,MACF,IAAK,IACH/3D,EAAM,OAAO,WAAW+3D,EAAO,CAAE,EAAE,QAAQD,GAAa,CAAC,CAAC,EAC1Dt4E,GAAUq4E,EAAc73D,EAAMA,EAAI,QAAQ,KAAM,EAAE,EAClD,MACF,IAAK,IACHxgB,GAAU,KAAK,UAAUu4E,GAAS,EAClC,MACF,IAAK,IACHv4E,GAAU,IAAM,SAASu4E,EAAO,EAAI,EAAE,EAAE,SAAS,CAAC,EAClD,MACF,IAAK,IACHv4E,GAAUu4E,EAAO,EACjB,MACF,IAAK,IACHv4E,GAAU,KAAO,SAASu4E,EAAO,EAAI,EAAE,EAAE,SAAS,EAAE,EACpD,MACF,IAAK,IACHv4E,GAAU,KAAO,SAASu4E,EAAO,EAAI,EAAE,EAAE,SAAS,EAAE,EAAE,YAAW,EACjE,MACF,QACEv4E,GAAU/H,EACV,WAEOA,IAAM,IACfmgF,EAAU,GAEVp4E,GAAU/H,EAGd,OAAO+H,CACX,CAEA,8BC7HI04E,IAAYxiF,IAEZyiF,GAAQ/kC,GAAO,KAAK,EAExBglC,IAAiBD,GAEjBA,GAAM,KAAO/kC,GAAO,SAAS,EAC7B+kC,GAAM,MAAQ/kC,GAAO,UAAU,EAC/B+kC,GAAM,UAAY/kC,GAAO,cAAc,EACvC+kC,GAAM,OAAS/kC,GAAO,WAAW,EACjC+kC,GAAM,KAAO/kC,GAAO,SAAS,EAC7B+kC,GAAM,IAAM/kC,GAAO,QAAQ,EAE3B+kC,GAAM,OAAS/kC,GAGf,SAASA,GAAOilC,EAAc,CAC5B,OAAAC,EAAe,YAAcD,EAAa,aAAeA,EAAa,KAE/DC,EAEP,SAASA,EAAe9gF,EAAQ,CAC9B,OAAIA,IACFA,EAAS0gF,IAAU,MAAM,KAAM,SAAS,GAGnC,IAAIG,EAAa7gF,CAAM,CAClC,CACA,CC5BA,IAAI+gF,GAAO7iF,IACPyiF,GAAQK,IAEZjB,GAAA,UAAoB5E,GACpB4E,GAAA,cAAwB1D,IACxB0D,GAAA,iBAA2Bd,IAC3Bc,GAAA,cAAwBR,IACxBQ,GAAA,cAAwBkB,IAExBC,GAAQ,UAAU,QAAUnmD,IAC5BmmD,GAAQ,UAAU,WAAaC,IAC/BD,GAAQ,UAAU,eAAiBE,IACnCF,GAAQ,UAAU,SAAWtH,IAC7BsH,GAAQ,UAAU,UAAYpH,IAC9BoH,GAAQ,UAAU,cAAgBr9B,GAClCq9B,GAAQ,UAAU,SAAWr9B,GAC7Bq9B,GAAQ,UAAU,OAASG,IAE3B,IAAIC,IAAgB,QAGpB,SAASnG,GAAU96D,EAAM1a,EAAOU,EAAS,CACvC,IAAIirB,EAASyvD,GAAK,UAAU,CAAA,CAAE,EAC1BQ,EAAWl7E,GAAW,CAAA,EACtBipB,EAASiyD,EAAS,OAClBv5E,EAEJ,GAAI,OAAOqY,GAAS,SAClB,MAAMsgE,GAAM,uCAAwCtgE,CAAI,EAG1D,GAAI,CAAC0gE,GAAK,YAAY1gE,CAAI,EACxB,MAAMsgE,GAAM,2CAA4CtgE,CAAI,EAG9D,GAAI,OAAO1a,GAAU,SACnB,MAAMg7E,GAAM,wCAAyCh7E,CAAK,EAe5D,GAZI2pB,GAAW,OACbA,EAASgyD,KAGXP,GAAK,UAAU,CAAC,UAAWG,GAAS,YAAa5xD,CAAM,CAAC,EAExDtnB,EAAS+4E,GAAK,UAAUp7E,EAAO,CAAC,SAAU0a,EAAM,eAAgB,EAAI,CAAC,EAErE0gE,GAAK,UAAUzvD,GAAU,CAAA,CAAE,EAIvBtpB,EAAO,YACT,MAAMA,EAAO,YAGf,MAAO,CACL,UAAWA,EAAO,UAClB,SAAUA,EAAO,SACjB,MAAOA,EAAO,QAAQ,SAAS,QACnC,CACA,CAEA,SAASq0E,IAAc12E,EAAOU,EAAS,CACrC,IAAIk7E,EAAWl7E,GAAW,CAAA,EACtBm7E,EAASD,EAAS,QAAUR,GAAK,cAAa,EACrCQ,EAAS,OACtB,IAAI/hF,EAASgiF,EAAO,OAChBz8E,EAAQ,GACRiD,EACAg2E,EACA/gD,EACA5c,EAMJ,GAAI,OAAO1a,GAAU,SACnB,MAAMg7E,GAAM,wCAAyCh7E,CAAK,EAM5D,IAHAq4E,EAAa,CAAC,UAAW,EAAG,SAAU,KAAM,MAAO,CAAA,CAAE,EACrDh2E,EAAS,CAAC,UAAW,EAAG,SAAU,KAAM,MAAO,CAAA,CAAE,EAE1C,EAAEjD,EAAQvF,GACf6gB,EAAOmhE,EAAOz8E,CAAK,EAEdg8E,GAAK,YAAY1gE,CAAI,IAI1B4c,EAAUk+C,GAAU96D,EAAM1a,EAAOU,CAAO,EACxC42B,EAAQ,SAAW5c,EAEf4c,EAAQ,UAAY+gD,EAAW,YACjCA,EAAa/gD,GAGXA,EAAQ,UAAYj1B,EAAO,YAC7Bg2E,EAAah2E,EACbA,EAASi1B,IAIb,OAAI+gD,EAAW,WACbh2E,EAAO,WAAag2E,GAGfh2E,CACT,CAGA,SAASi3E,IAAiB5+D,EAAMohE,EAAQ,CACtCV,GAAK,iBAAiB1gE,EAAMohE,CAAM,CACpC,CAGA,SAASlC,KAAgB,CACvB,OAAOwB,GAAK,cAAa,CAC3B,CAGA,SAASE,IAAc5gE,EAAM+T,EAAO,CAClC,IAAItnB,EAAMuT,EACNnf,EAEAkzB,IACFtnB,EAAM,CAAA,EACNA,EAAIuT,CAAI,EAAI+T,GAGd,IAAKlzB,KAAO4L,EACVi0E,GAAK,gBAAgBj0E,EAAI5L,CAAG,EAAG,CAAC,aAAcA,CAAG,CAAC,CAEtD,CAEA,SAASggF,GAAQ76E,EAAS,CACxB,KAAK,QAAUA,EACf,KAAK,SAAW,CAAC,SAAU,CAAA,CAAE,EAC7B,KAAK,MAAQ,CAAC,KAAK,QAAQ,CAC7B,CAEA,SAAS86E,IAAWx7E,EAAO0a,EAAM,CAC/B,KAAK,SAASA,CAAI,EAClB,KAAK,QAAQ1a,CAAK,EAClB,KAAK,UAAS,CAChB,CAEA,SAASy7E,IAAev3E,EAAOwW,EAAM,CACnC,IAAIlK,EAAQ,KAAK,MACb8mB,EAAU9mB,EAAMA,EAAM,OAAS,CAAC,EAChC6oB,EAAUn1B,EAAM,SAAS,SACzB8iB,EAAOtM,EACP,CACE,KAAM,UACN,QAAS,OACT,WAAY,CAAC,UAAW,CAACA,CAAI,CAAC,EAC9B,SAAU2e,CAClB,EACMA,EAEJ/B,EAAQ,SAAWA,EAAQ,SAAS,OAAOtQ,CAAI,CACjD,CAEA,SAASoO,IAAKp1B,EAAO,CACnB,IAAIwQ,EAAQ,KAAK,MACb8mB,EACAykD,EAEA/7E,IAAU,KAEds3B,EAAU9mB,EAAMA,EAAM,OAAS,CAAC,EAChCurE,EAAOzkD,EAAQ,SAASA,EAAQ,SAAS,OAAS,CAAC,EAE/CykD,GAAQA,EAAK,OAAS,OACxBA,EAAK,OAAS/7E,EAEds3B,EAAQ,SAAS,KAAK,CAAC,KAAM,OAAQ,MAAOt3B,CAAK,CAAC,EAEtD,CAEA,SAASi0E,IAAKv5D,EAAM,CAClB,IAAIlK,EAAQ,KAAK,MACbsjC,EAAY,KAAK,QAAQ,YAAcp5B,EACvC4c,EAAU9mB,EAAMA,EAAM,OAAS,CAAC,EAChC4W,EAAQ,CACV,KAAM,UACN,QAAS,OACT,WAAY,CAAC,UAAW,CAAC0sB,CAAS,CAAC,EACnC,SAAU,CAAA,CACd,EAEExc,EAAQ,SAAS,KAAKlQ,CAAK,EAC3B5W,EAAM,KAAK4W,CAAK,CAClB,CAEA,SAAS+sD,KAAQ,CACf,KAAK,MAAM,IAAG,CAChB,CAEA,SAASuH,KAAa,CACpB,MAAO,EACT,CAEA,SAASx9B,IAAO,CAAA,CCrMhB,SAASp9C,GAAOwtE,EAAI,CAClB,OAAKA,EACD,OAAOA,GAAO,SAAiBA,EAE5BA,EAAG,OAHM,IAIlB,CAMA,SAASC,OAAU7zE,EAAM,CAEvB,OADeA,EAAK,IAAKsC,GAAM8D,GAAO9D,CAAC,CAAC,EAAE,KAAK,EAAE,CAEnD,CASA,SAASwxE,MAAU9zE,EAAM,CAEvB,MADe,IAAMA,EAAK,IAAKsC,GAAM8D,GAAO9D,CAAC,CAAC,EAAE,KAAK,GAAG,EAAI,GAE9D,CAQA,SAASg/E,IAAI3I,EAAM,CACjB,MAAM4I,EAAe5I,EAAK,QAAQ,KAAM,GAAG,EACrC6I,EAAS,CACb,UAAW,SACX,SAAU,CACR,CACE,MAAO,IACP,IAAK,IACL,SAAU,CACR,CAAC,MAAO,IAAI,CACtB,CACA,CACA,CACA,EACQC,EAAoB,CACxB,MAAO,IACP,IAAK,IACL,SAAU,CAAE,CAAE,MAAO,IAAI,CAAE,CAC/B,EAEQC,EAAW,CACf,OACA,QAGA,SACJ,EAEQC,EAAmB,CACvB,mBACA,eACA,gBACA,kBACJ,EAEQC,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,WACJ,EAEQC,EAAqB,CACzB,MACA,MACA,YACA,OACA,QACA,QACA,OACA,MACJ,EAGQC,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,YACA,QACA,OACA,QACA,QACA,SACA,WACA,UACA,WACA,YACA,UACA,UACA,aACA,OACA,WACA,QACA,eACA,SACA,OACA,SACA,UACA,MACJ,EAKQC,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,U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,IAAM,EAAA,CAAA,CAClC,CAAA,EACF,EAECA,EAAmB,GAClBpwX,EAAAA,IAAC,SAAA,CACC,UAAU,mDACV,QAASkvX,EACV,SAAA,sBAAA,CAAA,CAED,EAEJ,EAECP,EAAa,IAAIG,GAAUO,EAAgBP,EAAQ,EAAI,CAAC,CAAA,CAAA,CAC3D,CAAA,EAEJ,CAEJ,CCnqBA,MAAAuB,IAAe,CACb,KAAQ,CACN,QAAW,QACX,UAAa,OACb,QAAW,QACX,WAAc,UACd,MAAS,SACb,EACE,eAAgB,CACd,MAAS,UACT,UAAa,QACjB,EACE,gBAAiB,CACf,MAAS,UACT,UAAa,QACjB,EACE,YAAa,CACX,MAAS,SACb,EACE,eAAgB,CACd,MAAS,SACb,EACE,cAAe,CACb,MAAS,SACb,EACE,cAAe,CACb,MAAS,SACb,EACE,cAAe,CACb,MAAS,SACb,EACE,aAAc,CACZ,MAAS,SACb,EACE,cAAe,CACb,MAAS,SACb,EACE,aAAc,CACZ,MAAS,SACb,EACE,gBAAiB,CACf,MAAS,SACb,EACE,aAAc,CACZ,MAAS,UACT,UAAa,QACjB,EACE,cAAe,CACb,MAAS,SACb,EACE,eAAgB,CACd,MAAS,UACT,UAAa,QACjB,EACE,cAAe,CACb,MAAS,SACb,EACE,YAAa,CACX,MAAS,SACb,EACE,oBAAqB,CACnB,MAAS,SACb,EACE,mBAAoB,CAClB,MAAS,SACb,EACE,eAAgB,CACd,MAAS,SACb,EACE,WAAY,CACV,MAAS,SACb,EACE,YAAa,CACX,MAAS,SACb,EACE,oBAAqB,CACnB,MAAS,SACb,EACE,YAAa,CACX,MAAS,SACb,EACE,iBAAkB,CAChB,MAAS,SACb,EACE,gBAAiB,CACf,MAAS,SACb,EACE,cAAe,CACb,MAAS,SACb,EACE,YAAa,CACX,MAAS,SACb,EACE,gBAAiB,CACf,MAAS,UACT,UAAa,QACjB,EACE,cAAe,CACb,MAAS,UACT,WAAc,MAClB,EACE,eAAgB,CACd,MAAS,SACb,EACE,YAAa,CACX,MAAS,SACb,EACE,aAAc,CACZ,MAAS,UACT,UAAa,QACjB,EACE,oBAAqB,CA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","x_google_ignoreList":[0,1,2,3,4,5,6,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,152,153,154,155,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,239,240,241,242,243,244,245,249,250,251,252,253,254,255,256,257,258,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1226,1229]}