{"version":3,"file":"barba.mjs","sources":["../src/modules/Logger.ts","../src/defs/hooks.ts","../../../node_modules/path-to-regexp/dist.es2015/index.js","../src/schemas/attribute.ts","../src/utils/dom.ts","../src/utils/history.ts","../src/utils/helpers.ts","../src/utils/url.ts","../src/utils/request.ts","../../../node_modules/is-promise/index.mjs","../src/utils/run-async.ts","../src/hooks.ts","../src/modules/Ignore.ts","../src/modules/Cache.ts","../src/modules/Headers.ts","../src/modules/Prevent.ts","../src/modules/Error.ts","../src/modules/Store.ts","../src/modules/Transitions.ts","../src/modules/Views.ts","../src/polyfills/index.ts","../src/schemas/page.ts","../src/core.ts"],"sourcesContent":["/**\n * @barba/core/modules/Logger\n * <br><br>\n * ## Logger.\n *\n * - Display informations via the console\n *\n * @module core/modules/Logger\n * @preferred\n */\n\n/***/\n\n/**\n * Log levels, all lower level messages are printed\n *\n * 0. mute\n * 1. error = `console.error()`\n * 2. warning= `console.warn()`\n * 3. info = `console.info()`\n * 4. debug = `console.log()`\n */\nexport enum LogLevels {\n  off = 0,\n  error = 1,\n  warning = 2,\n  info = 3,\n  debug = 4,\n}\n\n/**\n * Global log level\n */\nlet _level: number = LogLevels.off;\n\nexport class Logger {\n  /**\n   * Get global log level.\n   */\n  public static getLevel(): number {\n    return _level;\n  }\n\n  /**\n   * Set global log level.\n   */\n  public static setLevel(name: keyof typeof LogLevels): number {\n    _level = LogLevels[name];\n\n    return _level;\n  }\n\n  /**\n   * Log \"prefix\".\n   */\n  private _source: string;\n\n  /**\n   * Creates an instance of Logger.\n   */\n  constructor(source: string) {\n    this._source = source;\n  }\n\n  /**\n   * Permanent, unremovable log.\n   */\n  // public print(...objects: any[]): void {\n  //   this._log(console.info, LogLevels.off, objects);\n  // }\n\n  /**\n   * Error log.\n   */\n  public error(...objects: any[]): void {\n    this._log(console.error, LogLevels.error, objects);\n  }\n\n  /**\n   * Warn log.\n   */\n  public warn(...objects: any[]): void {\n    this._log(console.warn, LogLevels.warning, objects);\n  }\n\n  /**\n   * Info log.\n   */\n  public info(...objects: any[]): void {\n    this._log(console.info, LogLevels.info, objects);\n  }\n\n  /**\n   * Debug log.\n   */\n  public debug(...objects: any[]): void {\n    this._log(console.log, LogLevels.debug, objects);\n  }\n\n  /**\n   * Internal logger.\n   */\n  private _log(fn: () => void, level: number, objects: any[]): void {\n    if (level <= Logger.getLevel()) {\n      fn.apply(console, ([`[${this._source}] `].concat(objects) as unknown) as [\n\n      ]);\n    }\n  }\n}\n","/**\n * @module typings/core\n */\nimport { ITransitionData, ITransitionPage, IViewData } from './index';\n\nexport type HooksBarba =\n  | 'ready'\n  | 'page'\n  | 'reset'\n  | 'currentAdded'\n  | 'currentRemoved'\n  | 'nextAdded'\n  | 'nextRemoved';\n\nexport type HooksOnce = 'beforeOnce' | 'once' | 'afterOnce';\n\nexport type HooksPage =\n  | 'before'\n  | 'beforeLeave'\n  | 'leave'\n  | 'afterLeave'\n  | 'beforeEnter'\n  | 'enter'\n  | 'afterEnter'\n  | 'after';\n\nexport type HooksBefore = 'beforeOnce' | 'beforeLeave' | 'beforeEnter';\nexport type HooksAfter = 'afterOnce' | 'afterLeave' | 'afterEnter';\n\nexport type HooksTransition = HooksOnce | HooksPage;\nexport type HooksView = HooksBefore | HooksAfter;\nexport type HooksAll = HooksBarba | HooksTransition;\n\n// Allow optional \"dynamically created\" hooks\nexport type HooksTransitionMap = { [key in HooksTransition]?: any };\n\nexport type HookFunction = (\n  data?: ITransitionData | IViewData,\n  t?: ITransitionPage\n) => Promise<void> | void;\n\nexport class HookMethods {\n  public before: (fn: HookFunction, ctx?: any) => void;\n  public beforeLeave: (fn: HookFunction, ctx?: any) => void;\n  public leave: (fn: HookFunction, ctx?: any) => void;\n  public afterLeave: (fn: HookFunction, ctx?: any) => void;\n  public beforeEnter: (fn: HookFunction, ctx?: any) => void;\n  public enter: (fn: HookFunction, ctx?: any) => void;\n  public afterEnter: (fn: HookFunction, ctx?: any) => void;\n  public after: (fn: HookFunction, ctx?: any) => void;\n}\n","/**\n * Tokenize input string.\n */\nfunction lexer(str) {\n    var tokens = [];\n    var i = 0;\n    while (i < str.length) {\n        var char = str[i];\n        if (char === \"*\" || char === \"+\" || char === \"?\") {\n            tokens.push({ type: \"MODIFIER\", index: i, value: str[i++] });\n            continue;\n        }\n        if (char === \"\\\\\") {\n            tokens.push({ type: \"ESCAPED_CHAR\", index: i++, value: str[i++] });\n            continue;\n        }\n        if (char === \"{\") {\n            tokens.push({ type: \"OPEN\", index: i, value: str[i++] });\n            continue;\n        }\n        if (char === \"}\") {\n            tokens.push({ type: \"CLOSE\", index: i, value: str[i++] });\n            continue;\n        }\n        if (char === \":\") {\n            var name = \"\";\n            var j = i + 1;\n            while (j < str.length) {\n                var code = str.charCodeAt(j);\n                if (\n                // `0-9`\n                (code >= 48 && code <= 57) ||\n                    // `A-Z`\n                    (code >= 65 && code <= 90) ||\n                    // `a-z`\n                    (code >= 97 && code <= 122) ||\n                    // `_`\n                    code === 95) {\n                    name += str[j++];\n                    continue;\n                }\n                break;\n            }\n            if (!name)\n                throw new TypeError(\"Missing parameter name at \".concat(i));\n            tokens.push({ type: \"NAME\", index: i, value: name });\n            i = j;\n            continue;\n        }\n        if (char === \"(\") {\n            var count = 1;\n            var pattern = \"\";\n            var j = i + 1;\n            if (str[j] === \"?\") {\n                throw new TypeError(\"Pattern cannot start with \\\"?\\\" at \".concat(j));\n            }\n            while (j < str.length) {\n                if (str[j] === \"\\\\\") {\n                    pattern += str[j++] + str[j++];\n                    continue;\n                }\n                if (str[j] === \")\") {\n                    count--;\n                    if (count === 0) {\n                        j++;\n                        break;\n                    }\n                }\n                else if (str[j] === \"(\") {\n                    count++;\n                    if (str[j + 1] !== \"?\") {\n                        throw new TypeError(\"Capturing groups are not allowed at \".concat(j));\n                    }\n                }\n                pattern += str[j++];\n            }\n            if (count)\n                throw new TypeError(\"Unbalanced pattern at \".concat(i));\n            if (!pattern)\n                throw new TypeError(\"Missing pattern at \".concat(i));\n            tokens.push({ type: \"PATTERN\", index: i, value: pattern });\n            i = j;\n            continue;\n        }\n        tokens.push({ type: \"CHAR\", index: i, value: str[i++] });\n    }\n    tokens.push({ type: \"END\", index: i, value: \"\" });\n    return tokens;\n}\n/**\n * Parse a string for the raw tokens.\n */\nexport function parse(str, options) {\n    if (options === void 0) { options = {}; }\n    var tokens = lexer(str);\n    var _a = options.prefixes, prefixes = _a === void 0 ? \"./\" : _a;\n    var defaultPattern = \"[^\".concat(escapeString(options.delimiter || \"/#?\"), \"]+?\");\n    var result = [];\n    var key = 0;\n    var i = 0;\n    var path = \"\";\n    var tryConsume = function (type) {\n        if (i < tokens.length && tokens[i].type === type)\n            return tokens[i++].value;\n    };\n    var mustConsume = function (type) {\n        var value = tryConsume(type);\n        if (value !== undefined)\n            return value;\n        var _a = tokens[i], nextType = _a.type, index = _a.index;\n        throw new TypeError(\"Unexpected \".concat(nextType, \" at \").concat(index, \", expected \").concat(type));\n    };\n    var consumeText = function () {\n        var result = \"\";\n        var value;\n        while ((value = tryConsume(\"CHAR\") || tryConsume(\"ESCAPED_CHAR\"))) {\n            result += value;\n        }\n        return result;\n    };\n    while (i < tokens.length) {\n        var char = tryConsume(\"CHAR\");\n        var name = tryConsume(\"NAME\");\n        var pattern = tryConsume(\"PATTERN\");\n        if (name || pattern) {\n            var prefix = char || \"\";\n            if (prefixes.indexOf(prefix) === -1) {\n                path += prefix;\n                prefix = \"\";\n            }\n            if (path) {\n                result.push(path);\n                path = \"\";\n            }\n            result.push({\n                name: name || key++,\n                prefix: prefix,\n                suffix: \"\",\n                pattern: pattern || defaultPattern,\n                modifier: tryConsume(\"MODIFIER\") || \"\",\n            });\n            continue;\n        }\n        var value = char || tryConsume(\"ESCAPED_CHAR\");\n        if (value) {\n            path += value;\n            continue;\n        }\n        if (path) {\n            result.push(path);\n            path = \"\";\n        }\n        var open = tryConsume(\"OPEN\");\n        if (open) {\n            var prefix = consumeText();\n            var name_1 = tryConsume(\"NAME\") || \"\";\n            var pattern_1 = tryConsume(\"PATTERN\") || \"\";\n            var suffix = consumeText();\n            mustConsume(\"CLOSE\");\n            result.push({\n                name: name_1 || (pattern_1 ? key++ : \"\"),\n                pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1,\n                prefix: prefix,\n                suffix: suffix,\n                modifier: tryConsume(\"MODIFIER\") || \"\",\n            });\n            continue;\n        }\n        mustConsume(\"END\");\n    }\n    return result;\n}\n/**\n * Compile a string to a template function for the path.\n */\nexport function compile(str, options) {\n    return tokensToFunction(parse(str, options), options);\n}\n/**\n * Expose a method for transforming tokens into the path function.\n */\nexport function tokensToFunction(tokens, options) {\n    if (options === void 0) { options = {}; }\n    var reFlags = flags(options);\n    var _a = options.encode, encode = _a === void 0 ? function (x) { return x; } : _a, _b = options.validate, validate = _b === void 0 ? true : _b;\n    // Compile all the tokens into regexps.\n    var matches = tokens.map(function (token) {\n        if (typeof token === \"object\") {\n            return new RegExp(\"^(?:\".concat(token.pattern, \")$\"), reFlags);\n        }\n    });\n    return function (data) {\n        var path = \"\";\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (typeof token === \"string\") {\n                path += token;\n                continue;\n            }\n            var value = data ? data[token.name] : undefined;\n            var optional = token.modifier === \"?\" || token.modifier === \"*\";\n            var repeat = token.modifier === \"*\" || token.modifier === \"+\";\n            if (Array.isArray(value)) {\n                if (!repeat) {\n                    throw new TypeError(\"Expected \\\"\".concat(token.name, \"\\\" to not repeat, but got an array\"));\n                }\n                if (value.length === 0) {\n                    if (optional)\n                        continue;\n                    throw new TypeError(\"Expected \\\"\".concat(token.name, \"\\\" to not be empty\"));\n                }\n                for (var j = 0; j < value.length; j++) {\n                    var segment = encode(value[j], token);\n                    if (validate && !matches[i].test(segment)) {\n                        throw new TypeError(\"Expected all \\\"\".concat(token.name, \"\\\" to match \\\"\").concat(token.pattern, \"\\\", but got \\\"\").concat(segment, \"\\\"\"));\n                    }\n                    path += token.prefix + segment + token.suffix;\n                }\n                continue;\n            }\n            if (typeof value === \"string\" || typeof value === \"number\") {\n                var segment = encode(String(value), token);\n                if (validate && !matches[i].test(segment)) {\n                    throw new TypeError(\"Expected \\\"\".concat(token.name, \"\\\" to match \\\"\").concat(token.pattern, \"\\\", but got \\\"\").concat(segment, \"\\\"\"));\n                }\n                path += token.prefix + segment + token.suffix;\n                continue;\n            }\n            if (optional)\n                continue;\n            var typeOfMessage = repeat ? \"an array\" : \"a string\";\n            throw new TypeError(\"Expected \\\"\".concat(token.name, \"\\\" to be \").concat(typeOfMessage));\n        }\n        return path;\n    };\n}\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nexport function match(str, options) {\n    var keys = [];\n    var re = pathToRegexp(str, keys, options);\n    return regexpToFunction(re, keys, options);\n}\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nexport function regexpToFunction(re, keys, options) {\n    if (options === void 0) { options = {}; }\n    var _a = options.decode, decode = _a === void 0 ? function (x) { return x; } : _a;\n    return function (pathname) {\n        var m = re.exec(pathname);\n        if (!m)\n            return false;\n        var path = m[0], index = m.index;\n        var params = Object.create(null);\n        var _loop_1 = function (i) {\n            if (m[i] === undefined)\n                return \"continue\";\n            var key = keys[i - 1];\n            if (key.modifier === \"*\" || key.modifier === \"+\") {\n                params[key.name] = m[i].split(key.prefix + key.suffix).map(function (value) {\n                    return decode(value, key);\n                });\n            }\n            else {\n                params[key.name] = decode(m[i], key);\n            }\n        };\n        for (var i = 1; i < m.length; i++) {\n            _loop_1(i);\n        }\n        return { path: path, index: index, params: params };\n    };\n}\n/**\n * Escape a regular expression string.\n */\nfunction escapeString(str) {\n    return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n}\n/**\n * Get the flags for a regexp from the options.\n */\nfunction flags(options) {\n    return options && options.sensitive ? \"\" : \"i\";\n}\n/**\n * Pull out keys from a regexp.\n */\nfunction regexpToRegexp(path, keys) {\n    if (!keys)\n        return path;\n    var groupsRegex = /\\((?:\\?<(.*?)>)?(?!\\?)/g;\n    var index = 0;\n    var execResult = groupsRegex.exec(path.source);\n    while (execResult) {\n        keys.push({\n            // Use parenthesized substring match if available, index otherwise\n            name: execResult[1] || index++,\n            prefix: \"\",\n            suffix: \"\",\n            modifier: \"\",\n            pattern: \"\",\n        });\n        execResult = groupsRegex.exec(path.source);\n    }\n    return path;\n}\n/**\n * Transform an array into a regexp.\n */\nfunction arrayToRegexp(paths, keys, options) {\n    var parts = paths.map(function (path) { return pathToRegexp(path, keys, options).source; });\n    return new RegExp(\"(?:\".concat(parts.join(\"|\"), \")\"), flags(options));\n}\n/**\n * Create a path regexp from string input.\n */\nfunction stringToRegexp(path, keys, options) {\n    return tokensToRegexp(parse(path, options), keys, options);\n}\n/**\n * Expose a function for taking tokens and returning a RegExp.\n */\nexport function tokensToRegexp(tokens, keys, options) {\n    if (options === void 0) { options = {}; }\n    var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function (x) { return x; } : _d, _e = options.delimiter, delimiter = _e === void 0 ? \"/#?\" : _e, _f = options.endsWith, endsWith = _f === void 0 ? \"\" : _f;\n    var endsWithRe = \"[\".concat(escapeString(endsWith), \"]|$\");\n    var delimiterRe = \"[\".concat(escapeString(delimiter), \"]\");\n    var route = start ? \"^\" : \"\";\n    // Iterate over the tokens and create our regexp string.\n    for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n        var token = tokens_1[_i];\n        if (typeof token === \"string\") {\n            route += escapeString(encode(token));\n        }\n        else {\n            var prefix = escapeString(encode(token.prefix));\n            var suffix = escapeString(encode(token.suffix));\n            if (token.pattern) {\n                if (keys)\n                    keys.push(token);\n                if (prefix || suffix) {\n                    if (token.modifier === \"+\" || token.modifier === \"*\") {\n                        var mod = token.modifier === \"*\" ? \"?\" : \"\";\n                        route += \"(?:\".concat(prefix, \"((?:\").concat(token.pattern, \")(?:\").concat(suffix).concat(prefix, \"(?:\").concat(token.pattern, \"))*)\").concat(suffix, \")\").concat(mod);\n                    }\n                    else {\n                        route += \"(?:\".concat(prefix, \"(\").concat(token.pattern, \")\").concat(suffix, \")\").concat(token.modifier);\n                    }\n                }\n                else {\n                    if (token.modifier === \"+\" || token.modifier === \"*\") {\n                        route += \"((?:\".concat(token.pattern, \")\").concat(token.modifier, \")\");\n                    }\n                    else {\n                        route += \"(\".concat(token.pattern, \")\").concat(token.modifier);\n                    }\n                }\n            }\n            else {\n                route += \"(?:\".concat(prefix).concat(suffix, \")\").concat(token.modifier);\n            }\n        }\n    }\n    if (end) {\n        if (!strict)\n            route += \"\".concat(delimiterRe, \"?\");\n        route += !options.endsWith ? \"$\" : \"(?=\".concat(endsWithRe, \")\");\n    }\n    else {\n        var endToken = tokens[tokens.length - 1];\n        var isEndDelimited = typeof endToken === \"string\"\n            ? delimiterRe.indexOf(endToken[endToken.length - 1]) > -1\n            : endToken === undefined;\n        if (!strict) {\n            route += \"(?:\".concat(delimiterRe, \"(?=\").concat(endsWithRe, \"))?\");\n        }\n        if (!isEndDelimited) {\n            route += \"(?=\".concat(delimiterRe, \"|\").concat(endsWithRe, \")\");\n        }\n    }\n    return new RegExp(route, flags(options));\n}\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n */\nexport function pathToRegexp(path, keys, options) {\n    if (path instanceof RegExp)\n        return regexpToRegexp(path, keys);\n    if (Array.isArray(path))\n        return arrayToRegexp(path, keys, options);\n    return stringToRegexp(path, keys, options);\n}\n//# sourceMappingURL=index.js.map","/**\n * @barba/core/schemas\n * <br><br>\n * ## Schemas description.\n *\n * @module core/schemas\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { ISchemaAttribute } from '../defs';\n\n/**\n * See [[ISchemaAttribute]]\n */\nexport const schemaAttribute: ISchemaAttribute = {\n  container: 'container',\n  history: 'history',\n  namespace: 'namespace',\n  prefix: 'data-barba',\n  prevent: 'prevent',\n  wrapper: 'wrapper',\n};\n","/**\n * @barba/core/utils/dom\n * <br><br>\n * ## Dom utils\n *\n * - Access DOM contents\n * - DOM vs string conversions\n *\n * @module core/utils/dom\n * @preferred\n */\n\n/***/\n\nimport path from 'path';\n\n// Definitions\nimport { IDomSibling, ISchemaAttribute, Link, Scope, Wrapper } from '../defs';\n// Schemas\nimport { schemaAttribute } from '../schemas/attribute';\n\nexport class Dom {\n  private _attr: ISchemaAttribute = schemaAttribute;\n  private _parser: DOMParser;\n  private _sibling: IDomSibling = {\n    after: null,\n    before: null,\n    parent: null\n  };\n\n  /**\n   * Convert HTMLDocument to string.\n   */\n  public toString(el: HTMLElement): string {\n    return el.outerHTML;\n  }\n\n  /**\n   * Parse HTML string to HTMLDocument.\n   */\n  // see https://github.com/barbajs/barba/issues/362\n  // Seems that using DOMParser.parseFromString causes this issue.\n  public toDocument(htmlString: string): HTMLDocument {\n    /* istanbul ignore else */\n    if (!this._parser) {\n      this._parser = new DOMParser();\n    }\n    return this._parser.parseFromString(htmlString, 'text/html');\n  }\n\n  /**\n   * Parse HTML string to DIVElement.\n   *\n   * DOMParser.parseFromString fails with img[srcset] on iOS.\n   * see https://github.com/barbajs/barba/issues/362\n   */\n  public toElement(htmlString: string): HTMLDivElement {\n    const div = document.createElement('div');\n\n    div.innerHTML = htmlString;\n    return div;\n  }\n\n  /**\n   * Get HTML content.\n   */\n  public getHtml(doc: HTMLDocument = document): string {\n    return this.toString(doc.documentElement);\n  }\n\n  /**\n   * Get full document content.\n   */\n  // getDocument(el = document.documentElement) {\n  //   return this.toStr(el);\n  // },\n\n  /**\n   * Get `[data-barba=\"wrapper\"]`.\n   */\n  public getWrapper(scope: Scope = document): Wrapper {\n    return scope.querySelector(\n      `[${this._attr.prefix}=\"${this._attr.wrapper}\"]`\n    );\n  }\n\n  /**\n   * Get `[data-barba=\"container\"]`.\n   */\n  public getContainer(scope: Scope = document): HTMLElement | null {\n    return scope.querySelector(\n      `[${this._attr.prefix}=\"${this._attr.container}\"]`\n    );\n  }\n\n  /**\n   * Remove container and store next sibling (if applicable).\n   */\n  public removeContainer(container: HTMLElement) {\n    if (document.body.contains(container)) {\n      this._updateSibling(container);\n      container.parentNode.removeChild(container);\n    }\n  }\n\n  /**\n   * Add container near previous container\n   */\n  public addContainer(container: HTMLElement, wrapper: HTMLElement) {\n    const siblingBefore = this.getContainer() || this._sibling.before;\n\n    if (siblingBefore) {\n      this._insertAfter(container, siblingBefore);\n    } else if (this._sibling.after) {\n      this._sibling.after.parentNode.insertBefore(container, this._sibling.after);\n    } else if (this._sibling.parent) {\n      this._sibling.parent.appendChild(container);\n    } else {\n      wrapper.appendChild(container);\n    }\n  }\n\n  /**\n   * Get current dom sibling\n   */\n  public getSibling(): IDomSibling {\n    return this._sibling;\n  }\n\n  /**\n   * Get `[data-barba-namespace]`.\n   */\n  public getNamespace(scope: Scope = document): string | null {\n    const ns = scope.querySelector(\n      `[${this._attr.prefix}-${this._attr.namespace}]`\n    );\n\n    return ns\n      ? ns.getAttribute(`${this._attr.prefix}-${this._attr.namespace}`)\n      : null;\n  }\n\n  /**\n   * Get URL from `href` value.\n   */\n  public getHref(el: Link): string | null {\n    // HTML tagName is UPPERCASE, xhtml tagName keeps existing case.\n    if (el.tagName && el.tagName.toLowerCase() === 'a') {\n      // HTMLAnchorElement, full URL available\n      if (typeof el.href === 'string') {\n        return el.href;\n      }\n\n      // Probably a SVGAElement…\n      const href = el.getAttribute('href') || el.getAttribute('xlink:href');\n\n      /* istanbul ignore else */\n      if (href) {\n        // When link comes from SVG, `href` returns an object, not a string.\n        const attr: string =\n          ((href as unknown) as SVGAnimatedString).baseVal || href;\n\n        return this.resolveUrl(attr);\n      }\n    }\n    return null;\n  }\n\n  // Copyright 2014 Simon Lydell\n  // X11 (“MIT”) Licensed. (See LICENSE\n  // https://github.com/lydell/resolve-url/blob/master/resolve-url.js\n  /* istanbul ignore next */\n  public resolveUrl(...urls: string[]) {\n    const numUrls = urls.length;\n\n    if (numUrls === 0) {\n      throw new Error('resolveUrl requires at least one argument; got none.');\n    }\n\n    const base = document.createElement('base');\n    base.href = arguments[0];\n\n    if (numUrls === 1) {\n      return base.href;\n    }\n\n    const head = document.getElementsByTagName('head')[0];\n    head.insertBefore(base, head.firstChild);\n\n    const a = document.createElement('a');\n    let resolved;\n\n    for (let index = 1; index < numUrls; index++) {\n      a.href = arguments[index];\n      resolved = a.href;\n      base.href = resolved;\n    }\n\n    head.removeChild(base);\n\n    return resolved;\n  }\n\n  /**\n   * Insert node after another node.\n   */\n  private _insertAfter(newNode: Node, referenceNode: Node) {\n    referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n  }\n\n  /**\n   * Update current dom sibling regarding container\n   */\n  private _updateSibling(container: HTMLElement): IDomSibling {\n    this._sibling = {\n      after: container.nextElementSibling,\n      before: container.previousElementSibling,\n      parent: container.parentElement\n    };\n\n    return this._sibling;\n  }\n}\n\nconst dom = new Dom();\n\nexport { dom };\n","import { HistoryAction, LinkEvent, Trigger } from '../defs';\n// Schemas\nimport { schemaAttribute } from '../schemas/attribute';\n\n/**\n * @barba/core/utils/history\n * <br><br>\n * ## History manager.\n *\n * - Keep track of the navigation history\n *\n * @module core/utils/history\n * @preferred\n */\n\n/**\n * State item.\n *\n * @property from\n * @property index\n */\ninterface IHistoryItem {\n  /** origin */\n  from: string;\n  /** index */\n  index: number;\n  /** states */\n  states: IStateItem[];\n}\n\n/***/\ninterface ICoords {\n  x: number;\n  y: number;\n}\n\n/**\n * History item.\n *\n * @property namespace\n * @property scroll\n * @property URL\n */\ninterface IStateItem {\n  /** data */\n  data: object;\n  /** namespace */\n  ns: string | undefined;\n  /** Scroll position */\n  scroll: ICoords;\n  /** URL */\n  url: string;\n}\n\nexport class History {\n  private _session: string;\n  private _states: IStateItem[] = [];\n  private _pointer = -1;\n\n  /**\n   * Init with first state.\n   */\n  public init(url: string, ns: string): void {\n    this._session = 'barba';\n\n    const state: IStateItem = {\n      data: {},\n      ns,\n      scroll: {\n        x: window.scrollX,\n        y: window.scrollY,\n      },\n      url,\n    };\n\n    this._pointer = 0;\n    this._states.push(state);\n\n    const item: IHistoryItem = {\n      from: this._session,\n      index: this._pointer,\n      states: [...this._states],\n    };\n\n    window.history && window.history.replaceState(item, '', url);\n  }\n\n  public change(\n    url: string,\n    trigger: Trigger,\n    e?: LinkEvent | PopStateEvent\n  ): Trigger {\n    if (e && (e as PopStateEvent).state) {\n      // If popstate, move to existing state\n      // and get back/forward direction.\n      const { state }: { state: IHistoryItem } = e as PopStateEvent;\n      const { index } = state;\n      const diff = this._pointer - index;\n\n      trigger = this._getDirection(diff);\n\n      // Work with previous states\n      this.replace(state.states);\n      this._pointer = index;\n    } else {\n      // Add new state\n      this.add(url, trigger);\n    }\n\n    return trigger;\n  }\n\n  /**\n   * Add a new state.\n   */\n  public add(url: string, trigger: Trigger, action?: HistoryAction, data?: object): void {\n    // If no state, it will be updated later.\n    const ns = 'tmp';\n    const method = action ?? this._getAction(trigger);\n    const state: IStateItem = {\n      data: data ?? {},\n      ns,\n      scroll: {\n        x: window.scrollX,\n        y: window.scrollY,\n      },\n      url,\n    };\n\n    switch (method) {\n      case 'push':\n        this._pointer = this.size;\n        this._states.push(state);\n        break;\n      case 'replace':\n        this.set(this._pointer, state);\n        break;\n      /* istanbul ignore next */\n      default:\n    }\n\n    const item: IHistoryItem = {\n      from: this._session,\n      index: this._pointer,\n      states: [...this._states],\n    };\n\n    switch (method) {\n      case 'push':\n        window.history && window.history.pushState(item, '', url);\n        break;\n      case 'replace':\n        window.history && window.history.replaceState(item, '', url);\n        break;\n      /* istanbul ignore next */\n      default:\n    }\n  }\n\n  /**\n   * Store custom user data per state.\n   */\n   public store(data: object, i?: number): void {\n     const index = i || this._pointer;\n     const state = this.get(index);\n\n     // merge data (allow data overwrite)\n     state.data = {\n       ...state.data,\n       ...data\n     };\n\n     // update states\n     this.set(index, state);\n\n     const item: IHistoryItem = {\n       from: this._session,\n       index: this._pointer,\n       states: [...this._states],\n     };\n\n     // update browser history\n     window.history.replaceState(item, '');\n   }\n\n  /**\n   * Update state.\n   */\n  public update(data: any, i?: number): void {\n    const index = i || this._pointer;\n    const existing = this.get(index);\n    const state: IStateItem = {\n      ...existing,\n      ...data,\n    };\n\n    this.set(index, state);\n  }\n\n  /**\n   * Remove last state.\n   */\n  public remove(i?: number): void {\n    if (i) {\n      this._states.splice(i, 1);\n    } else {\n      this._states.pop();\n    }\n\n    this._pointer--;\n  }\n\n  /**\n   * Delete all states.\n   */\n  public clear(): void {\n    this._states = [];\n    this._pointer = -1;\n  }\n\n  /**\n   * Replace all states.\n   */\n  public replace(newStates: IStateItem[]): void {\n    this._states = newStates;\n  }\n\n  /**\n   * Get state by index.\n   */\n  public get(index: number): IStateItem {\n    return this._states[index];\n  }\n\n  /**\n   * Set state by index.\n   */\n  public set(i: number, state: IStateItem) {\n    return (this._states[i] = state);\n  }\n\n  /**\n   * Get the current state.\n   */\n  get current(): IStateItem {\n    return this._states[this._pointer];\n  }\n\n  /**\n   * Get the previous state.\n   */\n  get previous(): IStateItem | null {\n    return this._pointer < 1 ? null : this._states[this._pointer - 1];\n  }\n\n  /**\n   * Get the state size.\n   */\n  get size(): number {\n    return this._states.length;\n  }\n\n  /**\n   * Get the history action: push vs replace\n   */\n  private _getAction(trigger: Trigger): HistoryAction {\n    let action: HistoryAction = 'push';\n\n    // Manage `data-barba-history` attribute\n    // to get the right action (push vs replace).\n    const el = trigger as HTMLAnchorElement;\n    const attr = `${schemaAttribute.prefix}-${schemaAttribute.history}`;\n\n    if (el.hasAttribute && el.hasAttribute(attr)) {\n      action = el.getAttribute(attr) as HistoryAction;\n    }\n\n    return action;\n  }\n\n  /**\n   * Get the direction of popstate change\n   */\n  private _getDirection(diff: number): Trigger {\n    // Check if \"session switch\"\n    if (Math.abs(diff) > 1) {\n      // Ex 6-0 > 0 -> forward, 0-6 < 0 -> back\n      return diff > 0 ? 'forward' : 'back';\n    } else {\n      if (diff === 0) {\n        return 'popstate';\n      } else {\n        // Ex 6-5 > 0 -> back, 5-6 < 0 -> forward\n        return diff > 0 ? 'back' : 'forward';\n      }\n    }\n  }\n}\n\nconst history = new History();\n\nexport { history };\n","/**\n * @barba/core/utils/helpers\n * <br><br>\n * ## Helpers\n *\n * - Update next page data\n *\n * @module core/utils/helpers\n * @preferred\n */\n\n/***/\n\n// Third-party\nimport { pathToRegexp as ptr } from 'path-to-regexp';\n// Definitions\nimport { IResponse, ITransitionData } from '../defs';\n// Utils\nimport { dom } from './dom';\nimport { history } from './history';\n\n/**\n * Update `data.next`, the title and the history\n */\nexport const update = async (\n  page: Promise<IResponse | void>,\n  data: ITransitionData\n): Promise<void> => {\n  // If not already updated\n  if (!data.next.html) {\n    const response = await page;\n    const { next } = data;\n\n    if (response) {\n      // see: https://github.com/barbajs/barba/issues/362\n      // const nextDocument = dom.toDocument(html);\n      const nextDocument = dom.toElement(response.html);\n\n      next.namespace = dom.getNamespace(nextDocument);\n      next.container = dom.getContainer(nextDocument);\n      // see https://github.com/barbajs/barba/issues/362\n      // next.html = dom.getHtml(nextDocument);\n      // next.html = nextDocument.innerHTML;\n      next.url = response.url;\n      next.html = response.html;\n\n      // Update history namespace (not available when initially set)\n      history.update({ ns: next.namespace });\n\n      // Update title.\n      const { title } = dom.toDocument(response.html);\n\n      document.title = title;\n    }\n  }\n};\n\n/**\n * Next tick\n */\nexport const nextTick = () =>\n  new Promise(resolve => {\n    window.requestAnimationFrame(resolve);\n    // DEV: same result?\n    // setTimeout(resolve, 0);\n  });\n\n/**\n * Turn a route string such as `/user/:name` into a regular expression.\n *\n * Used for:\n *\n * - routes to ignore\n * - route transition resolution\n *\n * @see https://www.npmjs.com/package/path-to-regexp\n */\nconst pathToRegexp = ptr;\n\nexport { pathToRegexp };\n","/**\n * @barba/core/utils/url\n * <br><br>\n * ## URL utils.\n *\n * - Collect and structure informations from URLs\n *\n * @module core/utils/url\n */\n\n/***/\n\n// Definitions\nimport { IGenericObject, IUrlBase } from '../defs';\n\n/**\n * Get location href.\n */\nexport const getHref = () => window.location.href;\n\n/**\n * Get absolute href from URL.\n */\nexport const getAbsoluteHref = (url: string, base: string = document.baseURI): string => new URL(url, base).href;\n\n/**\n * Get location origin.\n */\nexport const getOrigin = () => window.location.origin;\n\n/**\n * Get port based on URL or location.\n */\nexport const getPort = (url: string = window.location.href) => parse(url).port;\n\n/**\n * Get path from URL.\n */\nexport const getPath = (url: string = window.location.href) => parse(url).path;\n\n/**\n * Get query object from URL.\n */\nexport const getQuery = (url: string, stringify: boolean = false): IGenericObject|string => {\n  return stringify ? JSON.stringify(parse(url).query) : parse(url).query;\n};\n\n/**\n * Get hash from URL.\n */\nexport const getHash = (url: string): string => parse(url).hash;\n\n/**\n * Parse URL for path, query and hash and more.\n */\nexport const parse = (url: string): IUrlBase => {\n  // Port\n  let port;\n  const matches = url.match(/:\\d+/);\n\n  if (matches === null) {\n    if (/^http/.test(url)) {\n      port = 80;\n    }\n\n    if (/^https/.test(url)) {\n      port = 443;\n    }\n  } else {\n    const portString = matches[0].substring(1);\n\n    port = parseInt(portString, 10);\n  }\n\n  // Path\n  let path = url.replace(getOrigin(), '');\n  let hash;\n  let query = {};\n\n  // Hash\n  const hashIndex = path.indexOf('#');\n\n  if (hashIndex >= 0) {\n    hash = path.slice(hashIndex + 1);\n    path = path.slice(0, hashIndex);\n  }\n\n  // Query\n  const queryIndex = path.indexOf('?');\n\n  if (queryIndex >= 0) {\n    query = parseQuery(path.slice(queryIndex + 1));\n    path = path.slice(0, queryIndex);\n  }\n\n  return {\n    hash,\n    path,\n    port,\n    query,\n  };\n};\n\n/**\n * Parse a query string to object.\n */\nexport const parseQuery = (str: string) =>\n  str.split('&').reduce((acc: IGenericObject, el: string) => {\n    const [key, value] = el.split('=');\n\n    acc[key] = value;\n\n    return acc;\n  }, {});\n\n/**\n * Clean URL, remove \"hash\" and/or \"trailing slash\".\n */\nexport const clean = (url: string = window.location.href) =>\n  url.replace(/(\\/#.*|\\/|#.*)$/, '');\n","/**\n * @barba/core/utils/request\n * <br><br>\n * ## Fetch pages for transitions.\n *\n * - Includes timeout\n * - Uses Fetch API\n * - Handles errors\n *\n * @module core/utils/request\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { Cache } from '@barba/core/src/modules/Cache';\nimport { Headers } from '@barba/core/src/modules/Headers';\nimport { IResponse, RequestError } from '../defs';\nimport { parse } from './url';\n\n/**\n * Init a page request.\n * Fetch the page and returns a promise with the text content.\n */\nfunction request(\n  url: string,\n  ttl: number = 2e3,\n  requestError: RequestError,\n  cache: Cache,\n  headers: Headers\n): Promise<IResponse> {\n  return new Promise((resolve, reject) => {\n    const xhr = new XMLHttpRequest();\n\n    xhr.onreadystatechange = () => {\n      if (xhr.readyState === XMLHttpRequest.DONE) {\n        if (xhr.status === 200) {\n          /* istanbul ignore next: bypass jest since xhr-mock doesn't support custom xhr.responseURL */\n          const responseURL = xhr.responseURL !== '' && xhr.responseURL !== url ? xhr.responseURL : url;\n\n          resolve({\n            html: xhr.responseText,\n            url: {\n              href: responseURL,\n              ...parse(responseURL)\n            },\n          });\n\n          cache.update(url, {\n            status: 'fulfilled',\n            target: responseURL\n          });\n        } else if (xhr.status) {\n          // HTTP code is not 200, reject with response.\n          const response = {\n            status: xhr.status,\n            statusText: xhr.statusText,\n          };\n\n          requestError(url, response);\n          reject(response);\n\n          cache.update(url, { status: 'rejected' });\n        }\n      }\n    };\n\n    xhr.ontimeout = () => {\n      const error = new Error(`Timeout error [${ttl}]`);\n      requestError(url, error);\n      reject(error);\n      cache.update(url, { status: 'rejected' });\n    };\n\n    xhr.onerror = () => {\n      const error = new Error(`Fetch error`);\n      requestError(url, error);\n      reject(error);\n      cache.update(url, { status: 'rejected' });\n    };\n\n    xhr.open('GET', url);\n    xhr.timeout = ttl;\n    xhr.setRequestHeader(\n      'Accept',\n      'text/html,application/xhtml+xml,application/xml'\n    );\n    xhr.setRequestHeader('x-barba', 'yes');\n\n    headers.all().forEach((value, key) => {\n      xhr.setRequestHeader(key, value);\n    });\n\n    xhr.send();\n  });\n}\n\nexport { request };\n","export default function isPromise(obj) {\n  return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';\n}\n","import isPromise from 'is-promise';\n\n// https://github.com/SBoudrias/run-async\n/* istanbul ignore next */\nexport function runAsync(\n  func: (...args: any[]) => void | Promise<any>,\n  ctx: any = {}\n): (...args: any[]) => Promise<any> {\n  return (...args: any[]) => {\n    let async = false;\n\n    const promise = new Promise((resolve, reject) => {\n      // Add async to context\n      ctx.async = () => {\n        async = true;\n\n        return (err: any, value: any) => {\n          if (err) {\n            reject(err);\n          } else {\n            resolve(value);\n          }\n        };\n      };\n\n      const answer = func.apply(ctx, args as []);\n\n      if (!async) {\n        if (isPromise(answer)) {\n          (answer as Promise<any>).then(resolve, reject);\n        } else {\n          resolve(answer);\n        }\n      }\n    });\n\n    return promise;\n  };\n}\n","/**\n * @barba/core/modules/hooks\n * <br><br>\n * ## Hooks manager.\n *\n * - Register and trigger hooks\n *\n * Hooks can be easily registered:\n *\n * ```js\n * hooks.leave(callback, context);\n * ```\n *\n * @module core/modules/hooks\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { HookFunction, HookMethods, HooksAll } from './defs';\n// Modules\nimport { Logger } from './modules/Logger';\n// Utils\nimport { runAsync } from './utils';\n// Types\ninterface IHookInfos {\n  ctx: any;\n  fn: HookFunction;\n}\n\nexport class Hooks extends HookMethods {\n  /**\n   * Allow the use of `hooks[name](cb, ctx)`.\n   */\n  [key: string]: any;\n  // [key in HooksAll]?: any;\n  public logger: Logger = new Logger('@barba/core');\n  /**\n   * All available hooks.\n   *\n   * See [[HooksAll]]\n   */\n  // TODO: get hooks from defs (DRY)?\n  public all: HooksAll[] = [\n    'ready',\n    'page',\n    'reset',\n    'currentAdded',\n    'currentRemoved',\n    'nextAdded',\n    'nextRemoved',\n    'beforeOnce',\n    'once',\n    'afterOnce',\n    'before',\n    'beforeLeave',\n    'leave',\n    'afterLeave',\n    'beforeEnter',\n    'enter',\n    'afterEnter',\n    'after',\n  ];\n  /**\n   * Registered hooks.\n   *\n   * - Unique hook name\n   * - Associated data set(s) (callback + context)\n   */\n  public registered: Map<HooksAll, Set<IHookInfos>> = new Map();\n\n  constructor() {\n    super();\n    this.init();\n  }\n\n  public init() {\n    this.registered.clear();\n    this.all.forEach(hook => {\n      if (!this[hook]) {\n        this[hook] = (fn: HookFunction, ctx?: any) => {\n          if (!this.registered.has(hook)) {\n            this.registered.set(hook, new Set());\n          }\n          const set = this.registered.get(hook);\n\n          set.add({\n            ctx: ctx || {},\n            fn,\n          });\n        };\n      }\n    });\n  }\n\n  /**\n   * Do hook.\n   *\n   * Trigger registered hooks.\n   */\n  public do(name: HooksAll, ...args: any): Promise<any> {\n    if (this.registered.has(name)) {\n      // Let's start a chain of promises\n      let chain = Promise.resolve();\n\n      this.registered.get(name).forEach(hook => {\n        // Chain async hooks promisified\n        chain = chain.then(() => runAsync(hook.fn, hook.ctx)(...args));\n      });\n\n      return chain.catch(error => {\n        this.logger.debug(`Hook error [${name}]`);\n        this.logger.error(error);\n      });\n    }\n\n    return Promise.resolve();\n  }\n\n  public clear(): void {\n    this.all.forEach(hook => {\n      delete this[hook];\n    });\n\n    this.init();\n  }\n\n  /**\n   * Help, print available and registered hooks.\n   */\n  public help(): void {\n    this.logger.info(`Available hooks: ${this.all.join(',')}`);\n    const registered: string[] = [];\n    this.registered.forEach((_value: any, key: string) => registered.push(key));\n    this.logger.info(`Registered hooks: ${registered.join(',')}`);\n  }\n}\n\nconst hooks = new Hooks();\n\nexport { hooks };\n","/**\n * @barba/core/modules/ignore\n * <br><br>\n * ## Manage ignore options.\n *\n * - cache\n * - prefetch\n *\n * @module core/modules/ignore\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { IgnoreOption } from '../defs';\n// Utils\nimport { pathToRegexp } from '../utils/helpers';\nimport { parse } from '../utils/url';\n\nexport class Ignore {\n  private _ignoreAll: boolean;\n  private _ignoreRegexes: RegExp[] = [];\n\n  constructor(ignore: IgnoreOption) {\n    if (typeof ignore === 'boolean') {\n      this._ignoreAll = ignore;\n    } else {\n      const paths = Array.isArray(ignore) ? ignore : [ignore];\n\n      this._ignoreRegexes = paths.map(p => pathToRegexp(p));\n    }\n  }\n\n  public checkHref(href: string): boolean {\n    if (typeof this._ignoreAll === 'boolean') {\n      return this._ignoreAll;\n    }\n\n    const { path } = parse(href);\n\n    return this._ignoreRegexes.some(regex => regex.exec(path) !== null);\n  }\n}\n","/**\n * @barba/core/modules/cache\n * <br><br>\n * ## Cache for storing URL / HTML.\n *\n * @module core/modules/cache\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { CacheAction, CacheRequest, CacheStatus, CacheTarget, ICacheData, IgnoreOption } from '../defs';\n// Modules\nimport { Ignore } from './Ignore';\n\nexport class Cache extends Ignore {\n  private _state: Map<string, ICacheData> = new Map();\n\n  constructor(ignore: IgnoreOption) {\n    super(ignore);\n  }\n\n  /**\n   * Set value to cache\n   */\n  public set(\n    href: string,\n    request: CacheRequest,\n    action: CacheAction,\n    status: CacheStatus,\n    target?: CacheTarget,\n  ): ICacheData {\n    this._state.set(href, {\n      action,\n      request,\n      status,\n      target: target ?? href,\n    });\n\n    return {\n      action,\n      request,\n      status,\n      target,\n    };\n  }\n\n  /**\n   * Get data from cache\n   */\n  public get(href: string): ICacheData {\n    return this._state.get(href);\n  }\n\n  /**\n   * Get request from cache\n   */\n  public getRequest(href: string): CacheRequest {\n    return this._state.get(href).request;\n  }\n\n  /**\n   * Get action from cache\n   */\n  public getAction(href: string): CacheAction {\n    return this._state.get(href).action;\n  }\n\n  /**\n   * Get status from cache\n   */\n  public getStatus(href: string): CacheStatus {\n    return this._state.get(href).status;\n  }\n\n  /**\n   * Get target from cache\n   */\n  public getTarget(href: string): CacheTarget {\n    return this._state.get(href).target;\n  }\n\n  /**\n   * Check if value exists into cache\n   */\n  public has(href: string): boolean {\n    /* istanbul ignore else */\n    if (this.checkHref(href)) {\n      return false;\n    }\n    return this._state.has(href);\n  }\n\n  /**\n   * Delete value from cache\n   */\n  public delete(href: string): boolean {\n    return this._state.delete(href);\n  }\n\n  /**\n   * Update cache value\n   */\n  public update(href: string, data: ICacheData): ICacheData {\n    const state = {\n      ...this._state.get(href),\n      ...data,\n    };\n    this._state.set(href, state);\n\n    return state;\n  }\n}\n","/**\n * @barba/core/modules/headers\n * <br><br>\n * ## Manage request Headers.\n *\n * @module core/modules/headers\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { HeaderList, IHeaderData } from '../defs';\n\nexport class Headers {\n  private _list: HeaderList = new Map();\n\n  /**\n   * Set a new header\n   */\n  public set(name: string, value: string): IHeaderData {\n    this._list.set(name, value);\n\n    return {\n      name: value\n    };\n  }\n\n  /**\n   * Get a specific header\n   */\n  public get(name: string): string {\n    return this._list.get(name);\n  }\n\n  /**\n   * Get all headers\n   */\n  public all(): HeaderList {\n    return this._list;\n  }\n\n  /**\n   * Check if header exists\n   */\n  public has(name: string): boolean {\n    return this._list.has(name);\n  }\n\n  /**\n   * Delete a header\n   */\n  public delete(name: string): boolean {\n    return this._list.delete(name);\n  }\n\n  /**\n   * Clear all headers\n   */\n  public clear(): void {\n    return this._list.clear();\n  }\n}\n","/**\n * @barba/core/modules/prevent\n * <br><br>\n * ## Prevent checks.\n *\n * - Gathers all the tests that allow Barba to work and play transitions\n *\n * @module core/modules/prevent\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { IgnoreOption, Link, PreventCheck } from '../defs';\n// Schemas\nimport { schemaAttribute } from '../schemas/attribute';\n// Utils\nimport { url } from '../utils';\n// Modules\nimport { Ignore } from './Ignore';\n\n/**\n * Make sure the browser supports `history.pushState`.\n */\nconst pushState: PreventCheck = () => !window.history.pushState;\n\n/**\n * Make sure there is an `el` and `href`.\n */\nconst exists: PreventCheck = ({ el, href }) => !el || !href;\n\n/**\n * If the user is pressing ctrl + click, the browser will open a new tab.\n */\nconst newTab: PreventCheck = ({ event }) =>\n  (event as KeyboardEvent).which > 1 ||\n  (event as KeyboardEvent).metaKey ||\n  (event as KeyboardEvent).ctrlKey ||\n  (event as KeyboardEvent).shiftKey ||\n  (event as KeyboardEvent).altKey;\n\n/**\n * If the link has `_blank` target.\n */\nconst blank: PreventCheck = ({ el }) =>\n  el.hasAttribute('target') && (el as Link).target === '_blank';\n\n/**\n * If the domain is the same (in order to avoid pushState cross origin security problem).\n * Note: SVGAElement do not have `protocol` neither `hostname` properties.\n */\nconst corsDomain: PreventCheck = ({ el }) =>\n  ((el as HTMLAnchorElement).protocol !== undefined &&\n    window.location.protocol !== (el as HTMLAnchorElement).protocol) ||\n  ((el as HTMLAnchorElement).hostname !== undefined &&\n    window.location.hostname !== (el as HTMLAnchorElement).hostname);\n\n/**\n * If the port is the same.\n * Note: SVGAElement do not have `port` property.\n */\nconst corsPort: PreventCheck = ({ el }) =>\n  (el as HTMLAnchorElement).port !== undefined &&\n  url.getPort() !== url.getPort((el as HTMLAnchorElement).href);\n\n/**\n * If the link has download attribute.\n */\nconst download: PreventCheck = ({ el }) =>\n  el.getAttribute && typeof el.getAttribute('download') === 'string';\n\n/**\n * If the links contains [data-barba-prevent] or [data-barba-prevent=\"self\"].\n */\nconst preventSelf: PreventCheck = ({ el }) =>\n  el.hasAttribute(`${schemaAttribute.prefix}-${schemaAttribute.prevent}`);\n\n/**\n * If some link ancestor contains [data-barba-prevent=\"all\"].\n */\nconst preventAll: PreventCheck = ({ el }) =>\n  Boolean(\n    el.closest(`[${schemaAttribute.prefix}-${schemaAttribute.prevent}=\"all\"]`)\n  );\n\n/**\n * If the link is the current URL.\n *\n * > Not in the test suite.\n */\nconst sameUrl: PreventCheck = ({ href }) =>\n  url.clean(href) === url.clean() && url.getPort(href) === url.getPort();\n\nexport class Prevent extends Ignore {\n  public suite: string[] = [];\n  public tests: Map<string, PreventCheck> = new Map();\n\n  constructor(ignore: IgnoreOption) {\n    super(ignore);\n    this.init();\n  }\n\n  public init(): void {\n    // Add defaults\n    this.add('pushState', pushState);\n    this.add('exists', exists);\n    this.add('newTab', newTab);\n    this.add('blank', blank);\n    this.add('corsDomain', corsDomain);\n    this.add('corsPort', corsPort);\n    this.add('download', download);\n    this.add('preventSelf', preventSelf);\n    this.add('preventAll', preventAll);\n\n    // Outside of the test suite\n    this.add('sameUrl', sameUrl, false);\n  }\n\n  public add(name: string, check: PreventCheck, suite: boolean = true): void {\n    this.tests.set(name, check);\n    suite && this.suite.push(name);\n  }\n\n  /**\n   * Run individual test\n   */\n  public run(name: string, el: Link, event: Event, href: string): boolean {\n    return this.tests.get(name)({\n      el,\n      event,\n      href,\n    });\n  }\n\n  /**\n   * Run test suite\n   */\n  public checkLink(el: Link, event: Event, href: string): boolean {\n    return this.suite.some(name => this.run(name, el, event, href));\n  }\n}\n","// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error\nexport class BarbaError extends Error {\n  /* istanbul ignore next */\n  constructor(\n    public error: Error,\n    public label = 'Barba error',\n    ...params: any[]\n  ) {\n    // Pass remaining arguments (including vendor specific ones) to parent constructor\n    super(...params);\n\n    // Maintains proper stack trace for where our error was thrown (only available on V8)\n    /* istanbul ignore else */\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, BarbaError);\n    }\n\n    this.name = 'BarbaError';\n  }\n}\n","/**\n * @barba/core/modules/store\n * <br><br>\n * ## Transitions store.\n *\n * - Resolve transition\n * - Manage rules\n *\n * @module core/modules/store\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport {\n  IRule,\n  IRules,\n  ITransitionData,\n  ITransitionFilters,\n  ITransitionOnce,\n  ITransitionPage,\n  RuleName,\n} from '../defs';\n\n// Modules\nimport { Logger } from './Logger';\n\nexport class Store {\n  public logger: Logger = new Logger('@barba/core');\n  /**\n   * All registered transitions.\n   */\n  public all: ITransitionPage[] = [];\n  /**\n   * \"Page only\" registered transitions.\n   */\n  public page: ITransitionPage[] = [];\n  /**\n   * \"Once only\" registered transitions.\n   */\n  public once: ITransitionOnce[] = [];\n  /**\n   * Rules for transition resolution.\n   *\n   * Defaults:\n   *\n   * - namespace\n   * - custom\n   */\n  private _rules: IRule[] = [\n    {\n      name: 'namespace',\n      type: 'strings',\n    },\n    {\n      name: 'custom',\n      type: 'function',\n    },\n  ];\n\n  /**\n   * Init store.\n   */\n  constructor(transitions: ITransitionPage[] = []) {\n    /* istanbul ignore else */\n    if (transitions) {\n      // TODO: add check for valid transitions? criteria? (once || enter && leave)\n      this.all = this.all.concat(transitions);\n    }\n    this.update();\n  }\n\n  /**\n   * Add rule or transition.\n   */\n  public add(type: 'rule' | 'transition', data: any): void {\n    switch (type) {\n      case 'rule':\n        // TODO: check for valid rule\n        this._rules.splice(data.position || 0, 0, data.value);\n        break;\n      case 'transition':\n      default:\n        // TODO: check for valid transition\n        this.all.push(data);\n        break;\n    }\n\n    this.update();\n  }\n\n  /**\n   * Resolve transition.\n   */\n  public resolve(\n    data: ITransitionData,\n    filters: ITransitionFilters = {}\n  ): ITransitionOnce | ITransitionPage {\n    // Filter on \"once\"\n    let transitions = filters.once ? this.once : this.page;\n\n    // Filter on \"self\"\n    if (filters.self) {\n      transitions = transitions.filter(t => t.name && t.name === 'self');\n    } else {\n      transitions = transitions.filter(t => !t.name || t.name !== 'self');\n    }\n\n    // All matching transition infos\n    const matching = new Map();\n\n    // Active = first of valid transitions\n    // sorted by directions (from/to, from || to, …)\n    const active = transitions.find(t => {\n      let valid = true;\n      const match = {};\n\n      if (filters.self && t.name === 'self') {\n        matching.set(t, match);\n        return true;\n      }\n\n      // Check rules\n      this._rules.reverse().forEach(rule => {\n        if (valid) {\n          valid = this._check(t, rule, data, match);\n          // From/to check\n          if (t.from && t.to) {\n            valid =\n              this._check(t, rule, data, match, 'from') &&\n              this._check(t, rule, data, match, 'to');\n          }\n          if (t.from && !t.to) {\n            valid = this._check(t, rule, data, match, 'from');\n          }\n          if (!t.from && t.to) {\n            valid = this._check(t, rule, data, match, 'to');\n          }\n        }\n      });\n\n      matching.set(t, match);\n\n      return valid;\n    });\n\n    const activeMatch = matching.get(active);\n    const transitionType = [];\n    if (filters.once) {\n      transitionType.push('once');\n    } else {\n      transitionType.push('page');\n    }\n    if (filters.self) {\n      transitionType.push('self');\n    }\n\n    if (activeMatch) {\n      // Log resolved transition\n      const infos: any[] = [active];\n      // Log if matching criteria\n      Object.keys(activeMatch).length > 0 && infos.push(activeMatch);\n\n      this.logger.info(\n        `Transition found [${transitionType.join(',')}]`,\n        ...infos\n      );\n    } else {\n      this.logger.info(`No transition found [${transitionType.join(',')}]`);\n    }\n\n    return active;\n  }\n\n  /**\n   * ### Update store.\n   *\n   * - Reorder transition by priorities\n   * - Get wait indicator\n   * - Get once transitions\n   */\n  public update(): void {\n    // Reorder by priorities\n    this.all = this.all\n      .map(t => this._addPriority(t))\n      .sort((a, b) => a.priority - b.priority)\n      .reverse()\n      .map(t => {\n        delete t.priority;\n\n        return t;\n      });\n    this.page = this.all.filter(\n      t => t.leave !== undefined || t.enter !== undefined\n    ) as ITransitionPage[];\n    this.once = this.all.filter(t => t.once !== undefined) as ITransitionOnce[];\n  }\n\n  /**\n   * ### Check if transition apply.\n   *\n   * Based on rule, page data and optional direction:\n   *\n   * 1. transition has no rule \"property\":\n   *    - always returns true\n   * 2. transition has rule \"property\":\n   *     - \"strings\" should be present on both side (transition + page) and match\n   *     - \"function\" should return true\n   */\n  private _check(\n    transition: ITransitionPage,\n    rule: IRule,\n    data: ITransitionData,\n    match: any,\n    direction?: 'from' | 'to'\n  ): boolean {\n    let isValid = true;\n    let hasMatch = false;\n    const t = transition;\n    const { name, type } = rule;\n    const strRule = name as IRules['strings'];\n    const objRule = name as IRules['object'];\n    const fnName = name as IRules['function'];\n    const base = direction ? t[direction] : t; // = t || t.from || t.to\n    const page = direction === 'to' ? data.next : data.current; // = current || next\n    const exist = direction ? base && base[name] : base[name];\n\n    // If transition rule exists\n    if (exist) {\n      switch (type) {\n        case 'strings':\n        default: {\n          // Array support\n          const names: string[] = Array.isArray(base[strRule])\n            ? (base[strRule] as string[])\n            : [base[strRule] as string];\n\n          // For matching, prop should be present on both sides and match\n          if (page[strRule] && names.indexOf(page[strRule]) !== -1) {\n            hasMatch = true;\n          }\n          // If transition prop is different from current, not valid\n          if (names.indexOf(page[strRule]) === -1) {\n            isValid = false;\n          }\n          break;\n        }\n\n        case 'object': {\n          // Array support\n          const names: string[] = Array.isArray(base[objRule])\n            ? (base[objRule] as string[])\n            : [base[objRule] as string];\n\n          // For matching, prop should be present on both sides and match\n          if (page[objRule]) {\n            if (\n              page[objRule].name &&\n              names.indexOf(page[objRule].name) !== -1\n            ) {\n              hasMatch = true;\n            }\n            // If transition prop is different from current, not valid\n            if (names.indexOf(page[objRule].name) === -1) {\n              isValid = false;\n            }\n          } else {\n            isValid = false;\n          }\n          break;\n        }\n\n        case 'function':\n          if (base[fnName](data)) {\n            hasMatch = true;\n          } else {\n            isValid = false;\n          }\n          break;\n      }\n\n      if (hasMatch) {\n        if (direction) {\n          match[direction] = match[direction] || {};\n          match[direction][name] = t[direction][name];\n        } else {\n          match[name] = t[name];\n        }\n      }\n    }\n\n    return isValid;\n  }\n\n  /**\n   * ### Calculate transition priority.\n   *\n   * Based on:\n   *\n   * - rule \"position\" (index) give tens, hundreds, thousands, …\n   * - from/to properties give units (0, 1 or 2)\n   */\n  private _calculatePriority(\n    t: ITransitionPage,\n    ruleName: RuleName,\n    ruleIndex: number\n  ): number {\n    let priority = 0;\n\n    if (\n      t[ruleName] ||\n      (t.from && t.from[ruleName]) ||\n      (t.to && t.to[ruleName])\n    ) {\n      priority += Math.pow(10, ruleIndex);\n\n      if (t.from && t.from[ruleName]) {\n        priority += 1;\n      }\n      if (t.to && t.to[ruleName]) {\n        priority += 2;\n      }\n    }\n\n    return priority;\n  }\n\n  private _addPriority(t: ITransitionPage): ITransitionPage {\n    t.priority = 0;\n    let priority = 0;\n\n    this._rules.forEach((rule, i) => {\n      const { name } = rule;\n      const index = i + 1;\n\n      priority += this._calculatePriority(t, name, index);\n    });\n\n    t.priority = priority;\n\n    return t;\n  }\n}\n","/**\n * @barba/core/modules/transitions\n * <br><br>\n * ## Transitions manager.\n *\n * - Handle hooks and transition lifecycle\n *\n * @module core/modules/transitions\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport {\n  HooksTransition,\n  HooksTransitionMap,\n  IResponse,\n  ITransitionData,\n  ITransitionFilters,\n  ITransitionOnce,\n  ITransitionPage,\n  Wrapper,\n} from '../defs';\n// Hooks\nimport { hooks } from '../hooks';\n// Utils\nimport { dom, helpers, runAsync } from '../utils';\n// Modules\nimport { BarbaError } from './Error';\nimport { Logger } from './Logger';\nimport { Store } from './Store';\n\nexport class Transitions {\n  public logger: Logger = new Logger('@barba/core');\n  public store: Store;\n  private _running: boolean = false;\n\n  constructor(transitions: ITransitionPage[] = []) {\n    this.store = new Store(transitions);\n  }\n\n  /**\n   * Get resolved transition\n   *\n   * - based on data\n   */\n  public get(\n    data: ITransitionData,\n    filters?: ITransitionFilters\n  ): ITransitionOnce | ITransitionPage {\n    return this.store.resolve(data, filters);\n  }\n\n  /**\n   * Animation running status.\n   */\n  get isRunning(): boolean {\n    return this._running;\n  }\n  set isRunning(status: boolean) {\n    this._running = status;\n  }\n\n  /**\n   * Check for registered once transition(s).\n   */\n  get hasOnce(): boolean {\n    return this.store.once.length > 0;\n  }\n\n  /**\n   * Check for registered self transition.\n   */\n  get hasSelf(): boolean {\n    return this.store.all.some(t => t.name === 'self');\n  }\n\n  /**\n   * ### Wait indicator.\n   *\n   * Tells Barba to get next page data<br>\n   * before starting the resolution<br>\n   * because some registered transitions need<br>\n   * next page data to be resolved (eg: `sync: true`, `to: { namespace }`, …)\n   */\n  get shouldWait(): boolean {\n    return this.store.all.some(t => (t.to && !t.to.route) || t.sync);\n  }\n\n  /**\n   * ### Do \"once\" transition.\n   *\n   * Hooks: see [[HooksOnce]].\n   */\n  public async doOnce({\n    data,\n    transition,\n  }: {\n    data: ITransitionData;\n    transition: ITransitionOnce;\n  }) {\n    const t = transition || {};\n    this._running = true;\n\n    try {\n      await this._doAsyncHook('beforeOnce', data, t);\n      await this.once(data, t);\n      await this._doAsyncHook('afterOnce', data, t);\n    } catch (error) {\n      this._running = false;\n\n      this.logger.debug('Transition error [before/after/once]');\n      this.logger.error(error);\n    }\n\n    this._running = false;\n  }\n\n  /**\n   * ### Do \"page\" transition.\n   *\n   * Hooks: see [[HooksPage]].\n   *\n   * `sync: false` (default) order:\n   *\n   * 1. before\n   * 2. beforeLeave\n   * 3. leave\n   * 4. afterLeave\n   * 5. beforeEnter\n   * 6. enter\n   * 7. afterEnter\n   * 8. after\n   *\n   * `sync: true` order:\n   *\n   * 1. before\n   * 2. beforeLeave\n   * 3. beforeEnter\n   * 4. leave & enter\n   * 5. afterLeave\n   * 6. afterEnter\n   * 7. after\n   */\n  public async doPage({\n    data,\n    transition,\n    page,\n    wrapper,\n  }: {\n    data: ITransitionData;\n    transition: ITransitionPage;\n    page: Promise<IResponse | void>;\n    wrapper: Wrapper;\n  }) {\n    const t = transition || {};\n    const sync = t.sync === true || false;\n\n    this._running = true;\n\n    try {\n      // Check sync mode, wait for next content\n      if (sync) {\n        await helpers.update(page, data);\n      }\n\n      await this._doAsyncHook('before', data, t);\n\n      if (sync) {\n        try {\n          await this.add(data, wrapper);\n          // Before actions\n          await this._doAsyncHook('beforeLeave', data, t);\n          await this._doAsyncHook('beforeEnter', data, t);\n\n          // Actions\n          await Promise.all([this.leave(data, t), this.enter(data, t)]);\n\n          // After actions\n          await this._doAsyncHook('afterLeave', data, t);\n          await this._doAsyncHook('afterEnter', data, t);\n        } catch (error) {\n          // this.logger.debug('Transition error [sync]');\n          // this.logger.error(error);\n          if (this._isTransitionError(error)) {\n            throw new BarbaError(\n              (error as Error),\n              'Transition error [sync]'\n            );\n          }\n        }\n      } else {\n        let leaveResult: any = false;\n\n        try {\n          // Leave\n          await this._doAsyncHook('beforeLeave', data, t);\n\n          leaveResult = await Promise.all([\n            this.leave(data, t),\n            helpers.update(page, data),\n          ]).then(values => values[0]);\n\n          await this._doAsyncHook('afterLeave', data, t);\n\n          // TODO: check here \"valid\" page result\n          // before going further\n        } catch (error) {\n          // this.logger.debug('Transition error [before/after/leave]');\n          // this.logger.error(error);\n          if (this._isTransitionError(error)) {\n            throw new BarbaError(\n              (error as Error),\n              'Transition error [before/after/leave]'\n            );\n          }\n        }\n\n        try {\n          // Enter\n          /* istanbul ignore else */\n          if (leaveResult !== false) {\n            await this.add(data, wrapper);\n\n            await this._doAsyncHook('beforeEnter', data, t);\n            await this.enter(data, t, leaveResult);\n            await this._doAsyncHook('afterEnter', data, t);\n          }\n        } catch (error) {\n          // this.logger.debug('Transition error [before/after/enter]');\n          // this.logger.error(error);\n          if (this._isTransitionError(error)) {\n            throw new BarbaError(\n              (error as Error),\n              'Transition error [before/after/enter]'\n            );\n          }\n        }\n      }\n\n      // Remove current container\n      await this.remove(data);\n\n      await this._doAsyncHook('after', data, t);\n    } catch (error: any) {\n      this._running = false;\n\n      // If \"custom/specific\" barba error.\n      /* istanbul ignore else */\n      if (error.name && error.name === 'BarbaError') {\n        this.logger.debug(error.label);\n        this.logger.error(error.error);\n\n        throw error;\n      }\n\n      this.logger.debug('Transition error [page]');\n      this.logger.error(error);\n\n      throw error;\n    }\n\n    this._running = false;\n  }\n\n  /**\n   * Once hook + async \"once\" transition.\n   */\n  public async once(data: ITransitionData, t: ITransitionOnce): Promise<void> {\n    await hooks.do('once', data, t);\n\n    return t.once ? runAsync(t.once, t)(data) : Promise.resolve();\n  }\n\n  /**\n   * Leave hook + async \"leave\" transition.\n   */\n  public async leave(data: ITransitionData, t: ITransitionPage): Promise<any> {\n    await hooks.do('leave', data, t);\n\n    return t.leave ? runAsync(t.leave, t)(data) : Promise.resolve();\n  }\n\n  /**\n   * Enter hook + async \"enter\" transition.\n   */\n  public async enter(\n    data: ITransitionData,\n    t: ITransitionPage,\n    leaveResult?: any\n  ): Promise<void> {\n    await hooks.do('enter', data, t);\n\n    return t.enter\n      ? runAsync(t.enter, t)(data, leaveResult)\n      : Promise.resolve();\n  }\n\n  /**\n   * Add next container.\n   */\n  public async add(data: ITransitionData, wrapper: Wrapper): Promise<void> {\n    dom.addContainer(data.next.container, wrapper);\n    hooks.do('nextAdded', data);\n  }\n\n  /**\n   * Remove current container.\n   */\n  public async remove(data: ITransitionData): Promise<void> {\n    dom.removeContainer(data.current.container);\n    hooks.do('currentRemoved', data);\n  }\n\n  private _isTransitionError(error: any) {\n    if (error.message) {\n      // Errors from request\n      return !/Timeout error|Fetch error/.test(error.message);\n    }\n\n    if (error.status) {\n      // Errors from request\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Do hooks + async transition methods.\n   */\n  private async _doAsyncHook(\n    hook: HooksTransition,\n    data: ITransitionData,\n    t: HooksTransitionMap\n  ): Promise<void> {\n    await hooks.do(hook, data, t);\n\n    return t[hook] ? runAsync(t[hook], t)(data) : Promise.resolve();\n  }\n}\n","/**\n * @barba/core/modules/views\n * <br><br>\n * ## Views manager.\n *\n * @module core/modules/views\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { HooksView, IView, IViewData } from '../defs';\n// Hooks\nimport { hooks } from '../hooks';\n// Utils\nimport { runAsync } from '../utils';\n// Types\ntype Hook = (data: IViewData) => Promise<void>;\n\nexport class Views {\n  /**\n   * Available hook names for views.\n   */\n  public names: HooksView[] = [\n    'beforeLeave',\n    'afterLeave',\n    'beforeEnter',\n    'afterEnter',\n  ];\n  /**\n   * Registered views by namespace.\n   */\n  public byNamespace: Map<string, IView> = new Map();\n\n  /**\n   * Init views.\n   */\n  constructor(views: IView[]) {\n    if (views.length === 0) {\n      return;\n    }\n\n    // TODO: add check\n    // for valid views? criteria? (namespace property, string ?)\n    // or duplicate\n    views.forEach(view => {\n      this.byNamespace.set(view.namespace, view);\n    });\n\n    this.names.forEach(name => {\n      hooks[name](this._createHook(name));\n    });\n  }\n\n  /**\n   * Create the hook method.\n   *\n   * - get view based on namespace\n   * - execute callback with transition data\n   */\n  private _createHook(name: HooksView): Hook {\n    return data => {\n      const { namespace } = name.match(/enter/i) ? data.next : data.current;\n      const view = this.byNamespace.get(namespace);\n\n      // TODO: manage self…\n      // if (view && data.trigger !== 'self') {\n      if (view && view[name]) {\n        return runAsync(view[name], view)(data);\n      }\n\n      return Promise.resolve();\n    };\n  }\n}\n","// Element.prototype.matches polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\nif (!Element.prototype.matches) {\n  Element.prototype.matches =\n    (Element as any).prototype.msMatchesSelector ||\n    Element.prototype.webkitMatchesSelector;\n}\n\n// Element.prototype.closest polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\nif (!Element.prototype.closest) {\n  Element.prototype.closest = function closest(s: string) {\n    let el = this;\n\n    do {\n      if (el.matches(s)) {\n        return el;\n      }\n\n      el = (el.parentElement || el.parentNode) as Element;\n    } while (el !== null && el.nodeType === 1);\n\n    return null;\n  };\n}\n","/**\n * @module core/schemas\n */\n\n// Definitions\nimport { ISchemaPage } from '../defs';\n\n/**\n * See [[ISchemaPage]]\n */\nexport const schemaPage: ISchemaPage = {\n  container: null,\n  html: '',\n  namespace: '',\n  url: {\n    hash: '',\n    href: '',\n    path: '',\n    port: null,\n    query: {},\n  },\n};\n","/**\n * @barba/core\n * <br><br>\n * ## Barba core object\n *\n * Main methods:\n *\n * - `.init()` for initialization with options\n * - `.use()` for plugins\n *\n * @module core\n */\n\n/***/\n\nimport { version } from '../package.json';\n// Definitions\nimport {\n  IBarbaOptions,\n  IBarbaPlugin,\n  IgnoreOption,\n  ISchemaPage,\n  ITransitionData,\n  ITransitionOnce,\n  ITransitionPage,\n  Link,\n  LinkEvent,\n  RequestCustomError,\n  RequestErrorOrResponse,\n  SchemaAttributeValues,\n  Trigger,\n  Wrapper,\n} from './defs';\n// Hooks\nimport { hooks } from './hooks';\n// Modules\nimport { Cache } from './modules/Cache';\nimport { Headers } from './modules/Headers';\nimport { Logger } from './modules/Logger';\nimport { Prevent } from './modules/Prevent';\nimport { Transitions } from './modules/Transitions';\nimport { Views } from './modules/Views';\n// Polyfills\nimport './polyfills';\n// Schemas\nimport { schemaAttribute } from './schemas/attribute';\nimport { schemaPage } from './schemas/page';\n// Utils\nimport { dom, helpers, history, request, url } from './utils';\n\nexport class Core {\n  /**\n   * Version.\n   */\n  public version: string = version;\n  /**\n   * Schemas.\n   */\n  public schemaPage: ISchemaPage = schemaPage;\n  /**\n   * Logger class, allows plugins to create Logger.\n   */\n  public Logger: typeof Logger = Logger;\n  /**\n   * Barba logger.\n   */\n  public logger: Logger = new Logger('@barba/core');\n  /**\n   * Plugins.\n   */\n  public plugins: IBarbaPlugin<any>[] = [];\n  /**\n   * Options\n   */\n  public timeout: number;\n  public cacheIgnore: IgnoreOption;\n  public cacheFirstPage: boolean;\n  public prefetchIgnore: IgnoreOption;\n  public preventRunning: boolean;\n  /**\n   * Hooks\n   */\n  public hooks = hooks;\n  /**\n   * Modules.\n   */\n  // public history: History;\n  public cache: Cache;\n  public headers: Headers;\n  public prevent: Prevent;\n  public transitions: Transitions;\n  public views: Views;\n  /**\n   * Utils.\n   */\n  public dom = dom;\n  public helpers = helpers;\n  public history = history;\n  public request = request;\n  public url = url;\n\n  private _data: ITransitionData;\n  private _requestCustomError: RequestCustomError;\n  private _wrapper: Wrapper;\n  private _linkEvent: LinkEvent;\n\n  /**\n   * ### Init plugin with options.\n   *\n   * See [[IBarbaPlugin]] for more details.\n   */\n  public use<T>(plugin: IBarbaPlugin<T>, options?: T): void {\n    const installedPlugins = this.plugins;\n\n    // Plugin installation\n    if (installedPlugins.indexOf(plugin) > -1) {\n      this.logger.warn(`Plugin [${plugin.name}] already installed.`);\n\n      return;\n    }\n\n    if (typeof plugin.install !== 'function') {\n      this.logger.warn(`Plugin [${plugin.name}] has no \"install\" method.`);\n\n      return;\n    }\n\n    plugin.install(this, options);\n    installedPlugins.push(plugin);\n  }\n\n  /**\n   * ### Init barba with options.\n   *\n   * See [[IBarbaOptions]] for more details.\n   *\n   * Default values are:\n   *\n   * - transitions: `[]`\n   * - views: `[]`\n   * - schema: [[SchemaAttribute]]\n   * - timeout: `2e3`\n   * - cacheIgnore: `false`\n   * - cacheFirstPage: `false`\n   * - prefetchIgnore: `false`\n   * - preventRunning: `false`\n   * - prevent: `null`,\n   * - debug: `false`\n   * - logLevel: `'debug'`\n   */\n  public init(\n    /** @ignore */ {\n      transitions = [],\n      views = [],\n      schema = schemaAttribute,\n      requestError,\n      timeout = 2e3,\n      cacheIgnore = false,\n      cacheFirstPage = false,\n      prefetchIgnore = false,\n      /* istanbul ignore next */\n      preventRunning = false,\n      prevent: preventCustom = null,\n      debug = false,\n      logLevel = 'off',\n    }: IBarbaOptions = {}\n  ) {\n    // 0. Set logger level and print version\n    Logger.setLevel(debug === true ? 'debug' : logLevel);\n    this.logger.info(this.version);\n\n    // 1. Manage options\n    Object.keys(schema).forEach(k => {\n      const attr = k as SchemaAttributeValues;\n\n      /* istanbul ignore else */\n      if (schemaAttribute[attr]) {\n        schemaAttribute[attr] = schema[attr];\n      }\n    });\n    this._requestCustomError = requestError;\n    this.timeout = timeout;\n    this.cacheIgnore = cacheIgnore;\n    this.cacheFirstPage = cacheFirstPage;\n    this.prefetchIgnore = prefetchIgnore;\n    this.preventRunning = preventRunning;\n\n    // 2. Get and check wrapper\n    this._wrapper = this.dom.getWrapper();\n    if (!this._wrapper) {\n      throw new Error('[@barba/core] No Barba wrapper found');\n    }\n\n    // 3. Init pages (get \"current\" data)\n    this._resetData();\n\n    const { current } = this.data;\n\n    if (!current.container) {\n      throw new Error('[@barba/core] No Barba container found');\n    }\n\n    // 4. Init other modules\n    this.cache = new Cache(cacheIgnore);\n    this.headers = new Headers();\n    this.prevent = new Prevent(prefetchIgnore);\n    this.transitions = new Transitions(transitions);\n    this.views = new Views(views);\n\n    // Add prevent custom\n    if (preventCustom !== null) {\n      if (typeof preventCustom !== 'function') {\n        throw new Error('[@barba/core] Prevent should be a function');\n      }\n\n      this.prevent.add('preventCustom', preventCustom);\n    }\n\n    // 5. Init history\n    this.history.init(current.url.href, current.namespace);\n\n    // 6. Add to cache\n    if (cacheFirstPage) {\n      this.cache.set(current.url.href, Promise.resolve({\n        html: current.html,\n        url: current.url,\n      }), 'init', 'fulfilled');\n    }\n\n    // 7. Bind context\n    this._onLinkEnter = this._onLinkEnter.bind(this);\n    this._onLinkClick = this._onLinkClick.bind(this);\n    this._onStateChange = this._onStateChange.bind(this);\n    this._bind();\n\n    // 8. Init plugins\n    this.plugins.forEach(plugin => plugin.init());\n\n    // 9. Barba ready\n    // Set next + trigger for once and `beforeEnter`/`afterEnter` view on page load.\n    const onceData = this.data;\n\n    onceData.trigger = 'barba';\n    onceData.next = onceData.current;\n    onceData.current = { ...this.schemaPage };\n    this.hooks.do('ready', onceData);\n\n    // 9. Finally, do once…\n    this.once(onceData);\n\n    // Clean data for first barba transition…\n    this._resetData();\n  }\n\n  public destroy(): void {\n    this._resetData();\n    this._unbind();\n    this.history.clear();\n    this.hooks.clear();\n    this.plugins = [];\n  }\n\n  get data(): ITransitionData {\n    return this._data;\n  }\n\n  get wrapper(): HTMLElement {\n    return this._wrapper;\n  }\n\n  /**\n   * ### Force a page change without Barba transition.\n   */\n  public force(href: string): void {\n    // DEV\n    // Can be used waiting animation cancellation management…\n    window.location.assign(href);\n  }\n\n  /**\n   * ### Go for a Barba transition.\n   *\n   * Manage \"self page\" href:\n   *\n   * - if same url and no self transition, keep default behavior\n   *   - link: reload the page\n   *   - anchor: scroll to\n   * - if same url with self transition, use it\n   * - then start a page transition.\n   */\n  public go(\n    href: string,\n    trigger: Trigger = 'barba',\n    e?: LinkEvent | PopStateEvent\n  ): Promise<void> {\n    this._linkEvent = null;\n\n    // If animation running, force reload\n    if (this.transitions.isRunning) {\n      this.force(href);\n\n      return;\n    }\n\n    let self = false;\n\n    // Check prevent sameURL against current history\n    // + state check\n    // + update trigger with direction\n    if (trigger === 'popstate') {\n      self =\n        this.history.current &&\n        this.url.getPath(this.history.current.url) === this.url.getPath(href) &&\n        this.url.getQuery(this.history.current.url, true) === this.url.getQuery(href, true);\n    } else {\n      self = this.prevent.run('sameUrl', null, null, href);\n    }\n\n    if (self && !this.transitions.hasSelf) {\n      return;\n    }\n\n    trigger = this.history.change(this.cache.has(href) ? this.cache.get(href).target : href, trigger, e);\n\n    if (e) {\n      e.stopPropagation();\n      e.preventDefault();\n    }\n\n    return this.page(href, trigger, e ?? undefined, self);\n  }\n\n  /**\n   * ### Start an \"once\" transition.\n   *\n   * If some registered \"once\" transition,\n   * get the \"resolved\" transition from the store and start it.\n   */\n  public async once(readyData: ITransitionData): Promise<void> {\n    await this.hooks.do('beforeEnter', readyData);\n\n    // Check if once transition\n    if (this.transitions.hasOnce) {\n      const transition = this.transitions.get(readyData, {\n        once: true,\n      }) as ITransitionOnce;\n\n      await this.transitions.doOnce({ transition, data: readyData });\n    }\n\n    await this.hooks.do('afterEnter', readyData);\n  }\n\n  /**\n   * ### Start a \"page\" transition.\n   *\n   * 1. If no running transition, updates data with full URL properties and trigger.\n   * 2. Get page from cache or init request.\n   * 3. Wait if some transitions need \"next\" data (`sync: true`, `to: …`).\n   * 4. Manage the history, depending on trigger.\n   * 5. Get \"data\" and trigger \"go\" hook.\n   * 6. Get the \"resolved\" transition from the store and start it.\n   * 7. Update title and reset data (current, next = undefined).\n   *\n   * > If \"self\", use the \"self\" transition\n   */\n  public async page(\n    href: string,\n    trigger: Trigger,\n    event: LinkEvent | PopStateEvent,\n    self: boolean\n  ): Promise<void> {\n    this.data.next.url = {\n      href,\n      ...this.url.parse(href),\n    };\n    this.data.trigger = trigger;\n    this.data.event = event;\n\n    let page;\n\n    if (this.cache.has(href)) {\n      page = this.cache.update(href, { action: 'click' }).request;\n    } else {\n      const pageRequest = this.request(\n        href,\n        this.timeout,\n        this.onRequestError.bind(this, trigger),\n        this.cache,\n        this.headers\n      );\n\n      // manage 301 server response: replace history\n      pageRequest.then(response => {\n        /* istanbul ignore next: bypass jest since xhr-mock doesn't support custom xhr.responseURL */\n        if (response.url.href !== href) {\n          this.history.add(response.url.href, trigger, 'replace');\n        }\n      });\n\n      page = this.cache.set(href, pageRequest, 'click', 'pending').request;\n    }\n\n    // Need to wait before getting the right transition\n    if (this.transitions.shouldWait) {\n      await helpers.update(page, this.data);\n    }\n\n    const data = this.data;\n\n    // Hook: between trigger and transition\n    // Can be used to resolve \"route\"…\n    await this.hooks.do('page', data);\n\n    try {\n      const transition = this.transitions.get(data, {\n        once: false,\n        self,\n      }) as ITransitionPage;\n\n      await this.transitions.doPage({\n        data,\n        page,\n        transition,\n        wrapper: this._wrapper,\n      });\n\n      this._resetData();\n    } catch (error) {\n      // Something went wrong (rejected promise, error, 404, 505, other…)\n      // TODO: manage / use cases for cancellation\n      // this.logger.debug('Transition cancelled');\n\n      // If transition error and no debug mode, force reload page.\n      /* istanbul ignore else */\n      if (Logger.getLevel() === 0) {\n        this.force(data.next.url.href);\n      }\n    }\n  }\n\n  /**\n   * When a request error occurs.\n   *\n   * Allow the user to manage request error. (E.g: 404)\n   */\n  public onRequestError(trigger: Trigger, ...args: any): boolean {\n    // Cancel transition status\n    this.transitions.isRunning = false;\n\n    const [href, response]: [string, RequestErrorOrResponse] = args;\n    const action = this.cache.getAction(href);\n    this.cache.delete(href);\n\n    // Custom requestError returning false will return here.\n    if (\n      this._requestCustomError &&\n      this._requestCustomError(trigger, action, href, response) === false\n    ) {\n      return false;\n    }\n\n    // Force page change\n    if (action === 'click') {\n      this.force(href);\n    }\n    return false;\n  }\n\n  /**\n   * Programmatically prefetch\n   */\n  public prefetch(href: string) {\n\n    // only prefetch absolute href\n    href = this.url.getAbsoluteHref(href);\n\n    // Already in cache\n    /* istanbul ignore next */\n    if (this.cache.has(href)) {\n      return;\n    }\n\n    this.cache.set(\n      href,\n      this.request(\n        href,\n        this.timeout,\n        this.onRequestError.bind(this, 'barba'),\n        this.cache,\n        this.headers\n      ).catch((error: RequestErrorOrResponse) => {\n        this.logger.error(error);\n      }),\n      'prefetch',\n      'pending'\n    );\n  }\n\n  /**\n   * Bind event listeners.\n   */\n  private _bind(): void {\n    /* istanbul ignore else */\n    if (this.prefetchIgnore !== true) {\n      document.addEventListener('mouseover', this._onLinkEnter);\n      document.addEventListener('touchstart', this._onLinkEnter);\n    }\n    document.addEventListener('click', this._onLinkClick);\n    window.addEventListener('popstate', this._onStateChange);\n  }\n\n  /**\n   * Bind event listeners.\n   */\n  private _unbind(): void {\n    /* istanbul ignore else */\n    if (this.prefetchIgnore !== true) {\n      document.removeEventListener('mouseover', this._onLinkEnter);\n      document.removeEventListener('touchstart', this._onLinkEnter);\n    }\n    document.removeEventListener('click', this._onLinkClick);\n    window.removeEventListener('popstate', this._onStateChange);\n  }\n\n  /**\n   * When a element is entered.\n   *\n   * Get valid link element.\n   * Cache URL if needed.\n   */\n  private _onLinkEnter(e: LinkEvent): void {\n    const link = this._getLinkElement(e);\n\n    if (!link) {\n      return;\n    }\n\n    const href = this.url.getAbsoluteHref(this.dom.getHref(link));\n\n    if (this.prevent.checkHref(href)) {\n      return;\n    }\n\n    // Already in cache\n    if (this.cache.has(href)) {\n      return;\n    }\n\n    this.cache.set(\n      href,\n      this.request(\n        href,\n        this.timeout,\n        this.onRequestError.bind(this, link),\n        this.cache,\n        this.headers\n      ).catch((error: RequestErrorOrResponse) => {\n        this.logger.error(error);\n      }),\n      'enter',\n      'pending'\n    );\n  }\n\n  /**\n   * When an element is clicked.\n   *\n   * Get valid link element.\n   * Prevent same URL.\n   * Go for a Barba transition.\n   */\n  private _onLinkClick(e: LinkEvent): void {\n\n    // This use `prevent.checkLink` under the hood to get eligible link.\n    const link = this._getLinkElement(e);\n\n    if (!link) {\n      return;\n    }\n\n    if (this.transitions.isRunning && this.preventRunning) {\n      e.preventDefault();\n      e.stopPropagation();\n\n      return;\n    }\n\n    this._linkEvent = e;\n\n    this.go(this.dom.getHref(link), link, e);\n  }\n\n  /**\n   * When History state changes.\n   *\n   * Get \"href\" from URL\n   * Go for a Barba transition.\n   */\n  private _onStateChange(e: PopStateEvent): void {\n    this.go(this.url.getHref(), 'popstate', e);\n  }\n\n  /**\n   * Get a valid link ancestor.\n   *\n   * Check for a \"href\" attribute.\n   * Then check if eligible for Barba.\n   */\n  private _getLinkElement(e: LinkEvent): Link {\n    let el = e.target as Link;\n\n    while (el && !this.dom.getHref(el)) {\n      el = (el as HTMLElement).parentNode as Link;\n    }\n\n    // Check prevent\n    if (!el || this.prevent.checkLink(el, e, this.dom.getHref(el))) {\n      return;\n    }\n\n    return el;\n  }\n\n  /**\n   * Reset pages data.\n   *\n   * Set \"current\" and unset \"next\".\n   */\n  private _resetData() {\n    const href = this.url.getHref();\n    const current = {\n      container: this.dom.getContainer(),\n      html: this.dom.getHtml(),\n      namespace: this.dom.getNamespace(),\n      url: {\n        href,\n        ...this.url.parse(href),\n      },\n    };\n\n    this._data = {\n      current,\n      event: undefined,\n      next: { ...this.schemaPage },\n      trigger: undefined,\n    };\n\n    this.hooks.do('reset', this.data);\n  }\n}\n\nconst core = new Core();\n\nexport default core;\n"],"names":["LogLevels","before","beforeLeave","leave","this","afterLeave","beforeEnter","enter","afterEnter","after","_level","off","Logger","source","_source","getLevel","setLevel","name","_proto","prototype","error","_log","console","slice","call","arguments","warn","warning","info","debug","log","fn","level","objects","apply","concat","escapeString","str","replace","flags","options","sensitive","schemaAttribute","container","history","namespace","prefix","prevent","wrapper","dom","_attr","_parser","_sibling","parent","toString","el","outerHTML","toDocument","htmlString","DOMParser","parseFromString","toElement","div","document","createElement","innerHTML","getHtml","doc","documentElement","getWrapper","scope","querySelector","getContainer","removeContainer","body","contains","_updateSibling","parentNode","removeChild","addContainer","siblingBefore","_insertAfter","insertBefore","appendChild","getSibling","getNamespace","ns","getAttribute","getHref","tagName","toLowerCase","href","resolveUrl","baseVal","numUrls","length","base","getElementsByTagName","head","firstChild","resolved","a","index","newNode","referenceNode","nextSibling","nextElementSibling","previousElementSibling","parentElement","Dom","History","_session","_states","_pointer","init","url","state","data","scroll","x","window","scrollX","y","scrollY","push","from","states","replaceState","item","change","trigger","e","_getDirection","add","action","method","_getAction","size","set","pushState","store","i","get","update","remove","splice","pop","clear","newStates","attr","hasAttribute","diff","Math","abs","_createClass","key","page","_temp","next","html","then","response","nextDocument","title","Promise","resolve","reject","pathToRegexp","path","keys","RegExp","groupsRegex","execResult","exec","suffix","modifier","pattern","regexpToRegexp","Array","isArray","paths","parts","map","join","arrayToRegexp","tokens","_a","strict","_b","start","_c","end","_d","encode","_e","delimiter","_f","endsWith","endsWithRe","delimiterRe","route","_i","tokens_1","token","mod","endToken","isEndDelimited","indexOf","undefined","tokensToRegexp","char","type","value","count","j","TypeError","code","charCodeAt","lexer","prefixes","defaultPattern","result","tryConsume","mustConsume","consumeText","name_1","pattern_1","parse","stringToRegexp","requestAnimationFrame","getOrigin","location","origin","getPort","port","matches","match","test","portString","substring","parseInt","hash","query","hashIndex","queryIndex","parseQuery","split","reduce","acc","clean","baseURI","stringify","JSON","ttl","requestError","cache","headers","XMLHttpRequest","xhr","onreadystatechange","readyState","DONE","status","responseURL","responseText","_extends","target","statusText","ontimeout","Error","onerror","open","timeout","setRequestHeader","all","forEach","send","isPromise","obj","runAsync","func","ctx","_arguments","async","err","answer","promise","hooks","_HookMethods","Hooks","_this","logger","registered","Map","_inheritsLoose","_this2","hook","has","Set","_this3","chain","_this4","help","_value","HookMethods","Ignore","ignore","_ignoreAll","_ignoreRegexes","p","checkHref","some","regex","Cache","_Ignore","_state","request","getRequest","getAction","getStatus","getTarget","Headers","_list","exists","newTab","event","which","metaKey","ctrlKey","shiftKey","altKey","blank","_ref3","corsDomain","protocol","hostname","corsPort","_ref5","download","_ref6","preventSelf","preventAll","Boolean","closest","sameUrl","url.clean","Prevent","suite","tests","check","run","checkLink","BarbaError","_Error","label","captureStackTrace","_wrapNativeSuper","Store","transitions","once","_rules","position","filters","filter","self","t","matching","active","find","valid","reverse","rule","_check","to","activeMatch","transitionType","_this$logger","infos","Object","_addPriority","sort","b","priority","transition","direction","isValid","hasMatch","objRule","fnName","current","names","strRule","_calculatePriority","ruleName","ruleIndex","pow","Transitions","_running","doOnce","_ref","_temp2","_catch","_doAsyncHook","doPage","_ref2","_temp11","_result5","sync","_temp9","_temp7","_result2","_isTransitionError","leaveResult","_temp3","_leaveResult","_temp4","helpers","values","_Promise$all$then","_temp5","_temp6","_temp8","_temp10","message","Views","views","byNamespace","view","_createHook","Element","msMatchesSelector","webkitMatchesSelector","s","nodeType","schemaPage","core","version","plugins","cacheIgnore","cacheFirstPage","prefetchIgnore","preventRunning","_data","_requestCustomError","_wrapper","_linkEvent","use","plugin","installedPlugins","install","_ref$transitions","_ref$views","_ref$schema","schema","_ref$timeout","_ref$cacheIgnore","_ref$cacheFirstPage","_ref$prefetchIgnore","_ref$preventRunning","_ref$prevent","preventCustom","_ref$debug","_ref$logLevel","logLevel","k","_resetData","_onLinkEnter","bind","_onLinkClick","_onStateChange","_bind","onceData","destroy","_unbind","force","assign","go","isRunning","getPath","getQuery","hasSelf","stopPropagation","preventDefault","readyData","hasOnce","pageRequest","onRequestError","shouldWait","_slice$call","prefetch","getAbsoluteHref","addEventListener","removeEventListener","link","_getLinkElement","Core"],"mappings":"4oEA4BCA,ICcQC,WAAAA,KAAAA,YACAC,EAAAA,KAAAA,wBACAC,WAAK,EAAAC,KACLC,gBAAU,EAAAD,KACVE,iBACAC,EAAAA,KAAAA,WACAC,EAAAA,KAAAA,uBACAC,WAAK,CAAA,GD3Bd,SAAYT,GACVA,EAAAA,EAAA,IAAA,GAAA,MACAA,EAAAA,EAAA,MAAA,GAAA,QACAA,EAAAA,EAAA,QAAA,GAAA,UACAA,EAAAA,EAAA,KAAA,GAAA,OACAA,EAAAA,EAAA,MAAA,GAAA,OACD,CAND,CAAYA,IAAAA,EAMX,CAAA,IAKD,IAAUU,EAAWV,EAAUW,IAElBC,0BAyBX,SAAYC,EAAAA,GAAcT,KALlBU,OAMN,EAAAV,KAAKU,EAAUD,CACjB,GAvBcE,SAAP,WACL,OAAOL,CACT,EAACE,EAKaI,SAAP,SAAgBC,GAGrB,OAFAP,EAASV,EAAUiB,EAGrB,EAYC,IAAAC,EAAAN,EAAAO,UA8CA,OA9CAD,EAYME,MAAA,WACLhB,KAAKiB,EAAKC,QAAQF,MAAOpB,EAAUoB,MACrC,GAAAG,MAAAC,KAAAC,WAAA,EAKOC,EAAAA,KAAA,WACLtB,KAAKiB,EAAKC,QAAQI,KAAM1B,EAAU2B,QAAO,GAAAJ,MAAAC,KAAAC,WAC3C,EAACP,EAKMU,KAAA,WACLxB,KAAKiB,EAAKC,QAAQM,KAAM5B,EAAU4B,8BACpC,EAACV,EAKMW,MAAA,WACLzB,KAAKiB,EAAKC,QAAQQ,IAAK9B,EAAU6B,MACnC,GAAAN,MAAAC,KAAAC,WAAA,EAKQJ,EAAAA,EAAA,SAAKU,EAAgBC,EAAeC,GACtCD,GAASpB,EAAOG,YAClBgB,EAAGG,MAAMZ,QAAU,CAAK,IAAAlB,KAAKU,EAAY,MAACqB,OAAOF,GAIrD,EAACrB,CAAA,IE0KH,SAASwB,EAAaC,GAClB,OAAOA,EAAIC,QAAQ,4BAA6B,OACpD,CAIA,SAASC,EAAMC,GACX,OAAOA,GAAWA,EAAQC,UAAY,GAAK,GAC/C,CC7QO,IAAqBC,EAAqB,CAC/CC,UAAW,YACXC,QAAS,UACTC,UAAW,YACXC,OAAQ,aACRC,QAAS,UACTC,QAAS,WCyMFC,EAAG,iBA1MFC,WAAAA,SAAAA,IAAAA,KAAAA,EAA0BR,OAC1BS,OAAO,EAAA/C,KACPgD,EAAwB,CAC9B3C,MAAO,KACPR,OAAQ,KACRoD,OAAQ,KACT,CAKMC,IAAAA,EAAAA,EAAAA,UA4LN,OA5LMA,EAAAA,SAAA,SAASC,GACd,SAAUC,SACZ,EAACtC,EAOMuC,WAAA,SAAWC,GAKhB,OAHKtD,KAAK+C,IACR/C,KAAK+C,EAAU,IAChBQ,WACUvD,KAAC+C,EAAQS,gBAAgBF,EAAY,YAClD,EAACxC,EAQM2C,UAAA,SAAUH,GACf,IAAMI,EAAMC,SAASC,cAAc,OAGnC,OADAF,EAAIG,UAAYP,GAElB,EAACxC,EAKMgD,QAAA,SAAQC,GACb,gBADaA,IAAAA,EAAoBJ,UACtB3D,KAACkD,SAASa,EAAIC,gBAC3B,EAAClD,EAYMmD,WAAA,SAAWC,GAChB,gBADgBA,IAAAA,EAAeP,YAClBQ,kBACPnE,KAAK8C,EAAMJ,OAAW,KAAA1C,KAAK8C,EAAMF,QAAO,KAEhD,EAAC9B,EAKMsD,aAAA,SAAaF,GAClB,YADkBA,IAAAA,IAAAA,EAAeP,UAC1BO,EAAMC,kBACPnE,KAAK8C,EAAMJ,OAAW,KAAA1C,KAAK8C,EAAMP,UAAS,KAElD,EAACzB,EAKMuD,gBAAA,SAAgB9B,GACjBoB,SAASW,KAAKC,SAAShC,KACzBvC,KAAKwE,EAAejC,GACpBA,EAAUkC,WAAWC,YAAYnC,GAErC,IAKOoC,aAAA,SAAapC,EAAwBK,GAC1C,IAAMgC,EAAgB5E,KAAKoE,gBAAkBpE,KAAKgD,EAASnD,OAEvD+E,EACF5E,KAAK6E,EAAatC,EAAWqC,GACpB5E,KAAKgD,EAAS3C,MACvBL,KAAKgD,EAAS3C,MAAMoE,WAAWK,aAAavC,EAAWvC,KAAKgD,EAAS3C,OAC5DL,KAAKgD,EAASC,OACvBjD,KAAKgD,EAASC,OAAO8B,YAAYxC,GAEjCK,EAAQmC,YAAYxC,EAExB,EAKOyC,EAAAA,WAAA,WACL,OAAOhF,KAAKgD,CACd,IAKOiC,aAAA,SAAaf,YAAAA,IAAAA,EAAeP,UACjC,IAAQuB,EAAGhB,EAAMC,cACX,IAAAnE,KAAK8C,EAAMJ,OAAM,IAAI1C,KAAK8C,EAAML,UACrC,KAED,OAASyC,EACLA,EAAGC,aAAgBnF,KAAK8C,EAAMJ,OAAU,IAAA1C,KAAK8C,EAAML,WACnD,IACN,EAKO2C,EAAAA,QAAA,SAAQjC,GAEb,GAAIA,EAAGkC,SAAwC,MAA7BlC,EAAGkC,QAAQC,cAAuB,CAElD,GAAuB,mBAATC,KACZ,OAAOpC,EAAGoC,KAIZ,IAAMA,EAAOpC,EAAGgC,aAAa,SAAWhC,EAAGgC,aAAa,cAGxD,GAAII,EAKF,OAAOvF,KAAKwF,WAFRD,EAAuCE,SAAWF,EAIzD,CACD,WACF,EAACzE,EAMM0E,WAAA,WACL,IAAaE,EAAG,yBAAKC,OAErB,GAAgB,IAAZD,EACF,MAAM,UAAU,wDAGlB,IAAUE,EAAGjC,SAASC,cAAc,QAGpC,GAFAgC,EAAKL,KAAOlE,UAAU,GAEN,IAAZqE,EACF,SAAYH,KAGd,MAAa5B,SAASkC,qBAAqB,QAAQ,GACnDC,EAAKhB,aAAac,EAAME,EAAKC,YAK7B,IAHA,IACYC,EADLC,EAAGtC,SAASC,cAAc,KAGxBsC,EAAQ,EAAGA,EAAQR,EAASQ,IACnCD,EAAEV,KAAOlE,UAAU6E,GAEnBN,EAAKL,KADLS,EAAWC,EAAEV,KAMf,OAFAO,EAAKpB,YAAYkB,GAGnBI,CAAA,EAKQnB,EAAAA,EAAA,SAAasB,EAAeC,GAClCA,EAAc3B,WAAWK,aAAaqB,EAASC,EAAcC,YAC/D,EAACvF,EAKO0D,EAAA,SAAejC,GAOrB,OANAvC,KAAKgD,EAAW,CACd3C,MAAOkC,EAAU+D,mBACjBzG,OAAQ0C,EAAUgE,uBAClBtD,OAAQV,EAAUiE,oBAGRxD,CACd,EAACyD,CAAA,CAvMO3D,ICgCU4D,eAAA,WAAA,SAAAA,IAAA1G,KACV2G,OACAC,EAAAA,KAAAA,EAAwB,GAAE5G,KAC1B6G,GAAY,CAAC,CAKdC,IAAAA,EAAAA,EAAAA,iBAAAA,EAAAA,KAAA,SAAKC,EAAa7B,GACvBlF,KAAK2G,EAAW,QAEhB,IAAMK,EAAoB,CACxBC,KAAM,CAAE,EACR/B,GAAAA,EACAgC,OAAQ,CACNC,EAAGC,OAAOC,QACVC,EAAGF,OAAOG,SAEZR,IAAAA,GAGF/G,KAAK6G,EAAW,EAChB7G,KAAK4G,EAAQY,KAAKR,GAElB,MAA2B,CACzBS,KAAMzH,KAAK2G,EACXT,MAAOlG,KAAK6G,EACZa,iBAAY1H,KAAK4G,IAGnBQ,OAAO5E,SAAW4E,OAAO5E,QAAQmF,aAAaC,EAAM,GAAIb,EAC1D,IAEOc,OAAA,SACLd,EACAe,EACAC,GAEA,GAAIA,GAAMA,EAAoBf,MAAO,CAGnC,IAAQA,EAAmCe,EAAnCf,QACUA,EAAVd,MAGR4B,EAAU9H,KAAKgI,EAFFhI,KAAK6G,EAAWX,GAK7BlG,KAAKkC,QAAQ8E,EAAMU,QACnB1H,KAAK6G,EAAWX,CACjB,MAEClG,KAAKiI,IAAIlB,EAAKe,GAGhB,OAAOA,CACT,EAKOG,EAAAA,IAAA,SAAIlB,EAAae,EAAkBI,EAAwBjB,GAEhE,IACMkB,EAAe,MAAND,EAAAA,EAAUlI,KAAKoI,EAAWN,GAC9Bd,EAAe,CACxBC,KAAMA,MAAAA,EAAAA,EAAQ,CAAE,EAChB/B,GAJS,MAKTgC,OAAQ,CACNC,EAAGC,OAAOC,QACVC,EAAGF,OAAOG,SAEZR,IAAAA,GAGF,OAAQoB,GACN,IAAK,OACHnI,KAAK6G,EAAW7G,KAAKqI,KACrBrI,KAAK4G,EAAQY,KAAKR,GAClB,MACF,IAAK,UACHhH,KAAKsI,IAAItI,KAAK6G,EAAUG,GAM5B,IAAUY,EAAiB,CACzBH,KAAMzH,KAAK2G,EACXT,MAAOlG,KAAK6G,EACZa,OAAM,GAAA3F,OAAM/B,KAAK4G,IAGnB,OAAQuB,GACN,IAAK,OACHf,OAAO5E,SAAW4E,OAAO5E,QAAQ+F,UAAUX,EAAM,GAAIb,GACrD,MACF,IAAK,UACHK,OAAO5E,SAAW4E,OAAO5E,QAAQmF,aAAaC,EAAM,GAAIb,GAK9D,EAACjG,EAKO0H,MAAA,SAAMvB,EAAcwB,GACzB,MAAcA,GAAKzI,KAAK6G,IACV7G,KAAK0I,IAAIxC,GAGvBc,EAAMC,UACDD,EAAMC,KACNA,GAILjH,KAAKsI,IAAIpC,EAAOc,GAEhB,MAA2B,CACzBS,KAAMzH,KAAK2G,EACXT,MAAOlG,KAAK6G,EACZa,OAAY,GAAA3F,OAAA/B,KAAK4G,IAInBQ,OAAO5E,QAAQmF,aAAaC,EAAM,GACpC,EAKMe,EAAAA,OAAA,SAAO1B,EAAWwB,GACvB,IAAMvC,EAAQuC,GAAKzI,KAAK6G,EAElBG,OADWhH,KAAK0I,IAAIxC,GAGrBe,GAGLjH,KAAKsI,IAAIpC,EAAOc,EAClB,IAKO4B,OAAA,SAAOH,GACRA,EACFzI,KAAK4G,EAAQiC,OAAOJ,EAAG,GAEvBzI,KAAK4G,EAAQkC,MAGf9I,KAAK6G,GACP,IAKOkC,MAAA,WACL/I,KAAK4G,EAAU,GACf5G,KAAK6G,GAAY,CACnB,IAKO3E,QAAA,SAAQ8G,GACbhJ,KAAK4G,EAAUoC,CACjB,IAKON,IAAA,SAAIxC,GACT,OAAOlG,KAAK4G,EAAQV,EACtB,IAKOoC,IAAA,SAAIG,EAAWzB,GACpB,OAAYhH,KAAC4G,EAAQ6B,GAAKzB,CAC5B,EA0BQoB,EAAAA,EAAA,SAAWN,GACjB,MAA4B,OAItB3E,EAAK2E,EACDmB,EAAM3G,EAAgBI,WAAUJ,EAAgBE,QAM1D,OAJIW,EAAG+F,cAAgB/F,EAAG+F,aAAaD,KACrCf,EAAS/E,EAAGgC,aAAa8D,IAI7Bf,CAAA,IAKQF,EAAA,SAAcmB,GAEpB,OAAIC,KAAKC,IAAIF,GAAQ,IAEL,EAAI,UAAY,OAEjB,IAATA,EACK,WAGIA,EAAG,EAAI,OAAS,SAGjC,EAACG,EAAA5C,EAAA,CAAA,CAAA6C,IAAA,UAAAb,IApDD,WACE,YAAY9B,EAAQ5G,KAAK6G,EAC3B,uBAKA,WACE,OAAW7G,KAAC6G,EAAW,EAAI,KAAO7G,KAAK4G,EAAQ5G,KAAK6G,EAAW,EACjE,GAAC,CAAA0C,IAAA,OAAAb,IAKD,WACE,YAAY9B,EAAQjB,MACtB,OA9MkB,GAqPdnD,EAAU,IAAIkE,ECnRDiC,EAAA,SACjBa,EACAvC,OAGI,IAAAwC,EAAA,WAAA,IAACxC,EAAKyC,KAAKC,4BACUH,GAAII,KAAA,SAArBC,GACN,IAAYH,EAAKzC,EAATyC,KAAc,GAElBG,EAGF,CAAA,IAAkBC,EAAGjH,EAAIY,UAAUoG,EAASF,MAE5CD,EAAKjH,UAAYI,EAAIoC,aAAa6E,GAClCJ,EAAKnH,UAAYM,EAAIuB,aAAa0F,GAIlCJ,EAAK3C,IAAM8C,EAAS9C,IACpB2C,EAAKC,KAAOE,EAASF,KAGrBnH,EAAQmG,OAAO,CAAEzD,GAAIwE,EAAKjH,YAG1B,IAAkBI,EAAAA,EAAIQ,WAAWwG,EAASF,MAE1ChG,SAASoG,MAFDA,EAAAA,KAEe,CAG7B,EAAA,CA1BM,GA0BN,OAAAC,QAAAC,QAAAR,GAAAA,EAAAG,KAAAH,EAAAG,KAAA,mBAAA,EAKA,CALC,MAKD7B,GAAA,OAAAiC,QAAAE,OAAAnC,EAAA,CAAA,EAiBMoC,EJ2TC,SAASA,EAAaC,EAAMC,EAAMjI,GACrC,OAAIgI,aAAgBE,OAvGxB,SAAwBF,EAAMC,GAC1B,IAAKA,EACD,OAAOD,EAIX,IAHA,IAAIG,EAAc,0BACdrE,EAAQ,EACRsE,EAAaD,EAAYE,KAAKL,EAAK3J,QAChC+J,GACHH,EAAK7C,KAAK,CAEN3G,KAAM2J,EAAW,IAAMtE,IACvBxD,OAAQ,GACRgI,OAAQ,GACRC,SAAU,GACVC,QAAS,KAEbJ,EAAaD,EAAYE,KAAKL,EAAK3J,QAEvC,OAAO2J,CACX,CAsFeS,CAAeT,EAAMC,GAC5BS,MAAMC,QAAQX,GAnFtB,SAAuBY,EAAOX,EAAMjI,GAChC,IAAI6I,EAAQD,EAAME,IAAI,SAAUd,GAAQ,OAAOD,EAAaC,EAAMC,EAAMjI,GAAS3B,MAAS,GAC1F,OAAO,IAAI6J,OAAO,MAAMvI,OAAOkJ,EAAME,KAAK,KAAM,KAAMhJ,EAAMC,GAChE,CAiFegJ,CAAchB,EAAMC,EAAMjI,GA7EzC,SAAwBgI,EAAMC,EAAMjI,GAChC,OAKG,SAAwBiJ,EAAQhB,EAAMjI,QACzB,IAAZA,IAAsBA,EAAU,CAAE,GAMtC,IALA,IAAIkJ,EAAKlJ,EAAQmJ,OAAQA,OAAgB,IAAPD,GAAwBA,EAAIE,EAAKpJ,EAAQqJ,MAAOA,OAAe,IAAPD,GAAuBA,EAAIE,EAAKtJ,EAAQuJ,IAAKA,OAAa,IAAPD,GAAuBA,EAAIE,EAAKxJ,EAAQyJ,OAAQA,OAAgB,IAAPD,EAAgB,SAAUzE,GAAK,OAAOA,CAAE,EAAKyE,EAAIE,EAAK1J,EAAQ2J,UAAWA,OAAmB,IAAPD,EAAgB,MAAQA,EAAIE,EAAK5J,EAAQ6J,SAChUC,EAAa,IAAInK,OAAOC,OADoU,IAAPgK,EAAgB,GAAKA,GAC1T,OAChDG,EAAc,IAAIpK,OAAOC,EAAa+J,GAAY,KAClDK,EAAQX,EAAQ,IAAM,GAEjBY,EAAK,EAAGC,EAAWjB,EAAQgB,EAAKC,EAAS3G,OAAQ0G,IAAM,CAC5D,IAAIE,EAAQD,EAASD,GACrB,GAAqB,iBAAVE,EACPH,GAASpK,EAAa6J,EAAOU,QAE5B,CACD,IAAI7J,EAASV,EAAa6J,EAAOU,EAAM7J,SACnCgI,EAAS1I,EAAa6J,EAAOU,EAAM7B,SACvC,GAAI6B,EAAM3B,QAGN,GAFIP,GACAA,EAAK7C,KAAK+E,GACV7J,GAAUgI,EACV,GAAuB,MAAnB6B,EAAM5B,UAAuC,MAAnB4B,EAAM5B,SAAkB,CAClD,IAAI6B,EAAyB,MAAnBD,EAAM5B,SAAmB,IAAM,GACzCyB,GAAS,MAAMrK,OAAOW,EAAQ,QAAQX,OAAOwK,EAAM3B,QAAS,QAAQ7I,OAAO2I,GAAQ3I,OAAOW,EAAQ,OAAOX,OAAOwK,EAAM3B,QAAS,QAAQ7I,OAAO2I,EAAQ,KAAK3I,OAAOyK,EACrK,MAEGJ,GAAS,MAAMrK,OAAOW,EAAQ,KAAKX,OAAOwK,EAAM3B,QAAS,KAAK7I,OAAO2I,EAAQ,KAAK3I,OAAOwK,EAAM5B,eAK/FyB,GADmB,MAAnBG,EAAM5B,UAAuC,MAAnB4B,EAAM5B,SACvB,OAAO5I,OAAOwK,EAAM3B,QAAS,KAAK7I,OAAOwK,EAAM5B,SAAU,KAGzD,IAAI5I,OAAOwK,EAAM3B,QAAS,KAAK7I,OAAOwK,EAAM5B,eAK7DyB,GAAS,MAAMrK,OAAOW,GAAQX,OAAO2I,EAAQ,KAAK3I,OAAOwK,EAAM5B,SAEtE,CACJ,CACD,GAAIgB,EACKJ,IACDa,GAAS,GAAGrK,OAAOoK,EAAa,MACpCC,GAAUhK,EAAQ6J,SAAiB,MAAMlK,OAAOmK,EAAY,KAA/B,QAE5B,CACD,IAAIO,EAAWpB,EAAOA,EAAO1F,OAAS,GAClC+G,EAAqC,iBAAbD,EACtBN,EAAYQ,QAAQF,EAASA,EAAS9G,OAAS,KAAO,OACzCiH,IAAbH,EACDlB,IACDa,GAAS,MAAMrK,OAAOoK,EAAa,OAAOpK,OAAOmK,EAAY,QAE5DQ,IACDN,GAAS,MAAMrK,OAAOoK,EAAa,KAAKpK,OAAOmK,EAAY,KAElE,CACD,OAAO,IAAI5B,OAAO8B,EAAOjK,EAAMC,GACnC,CAhEWyK,CApOJ,SAAe5K,EAAKG,QACP,IAAZA,IAAsBA,EAAU,CAAE,GA2BtC,IA1BA,IAAIiJ,EA3FR,SAAepJ,GAGX,IAFA,IAAIoJ,EAAS,GACT5C,EAAI,EACDA,EAAIxG,EAAI0D,QAAQ,CACnB,IAAImH,EAAO7K,EAAIwG,GACf,GAAa,MAATqE,GAAyB,MAATA,GAAyB,MAATA,EAIpC,GAAa,OAATA,EAIJ,GAAa,MAATA,EAIJ,GAAa,MAATA,EAIJ,GAAa,MAATA,EAyBJ,GAAa,MAATA,EAmCJzB,EAAO7D,KAAK,CAAEuF,KAAM,OAAQ7G,MAAOuC,EAAGuE,MAAO/K,EAAIwG,WAnCjD,CACI,IAAIwE,EAAQ,EACRrC,EAAU,GAEd,GAAe,MAAX3I,EADAiL,EAAIzE,EAAI,GAER,MAAM,IAAI0E,UAAU,oCAAsCpL,OAAOmL,IAErE,KAAOA,EAAIjL,EAAI0D,QACX,GAAe,OAAX1D,EAAIiL,GAAR,CAIA,GAAe,MAAXjL,EAAIiL,IAEJ,GAAc,KADdD,EACiB,CACbC,IACA,KACH,OAEA,GAAe,MAAXjL,EAAIiL,KACTD,IACmB,MAAfhL,EAAIiL,EAAI,IACR,MAAM,IAAIC,UAAU,uCAAuCpL,OAAOmL,IAG1EtC,GAAW3I,EAAIiL,IAdd,MAFGtC,GAAW3I,EAAIiL,KAAOjL,EAAIiL,KAkBlC,GAAID,EACA,MAAM,IAAIE,UAAU,yBAAyBpL,OAAO0G,IACxD,IAAKmC,EACD,MAAM,IAAIuC,UAAU,sBAAsBpL,OAAO0G,IACrD4C,EAAO7D,KAAK,CAAEuF,KAAM,UAAW7G,MAAOuC,EAAGuE,MAAOpC,IAChDnC,EAAIyE,CAEP,KA3DD,CAGI,IAFA,IAAIrM,EAAO,GACPqM,EAAIzE,EAAI,EACLyE,EAAIjL,EAAI0D,QAAQ,CACnB,IAAIyH,EAAOnL,EAAIoL,WAAWH,GAC1B,KAECE,GAAQ,IAAMA,GAAQ,IAElBA,GAAQ,IAAMA,GAAQ,IAEtBA,GAAQ,IAAMA,GAAQ,KAEd,KAATA,GAIJ,MAHIvM,GAAQoB,EAAIiL,IAInB,CACD,IAAKrM,EACD,MAAM,IAAIsM,UAAU,6BAA6BpL,OAAO0G,IAC5D4C,EAAO7D,KAAK,CAAEuF,KAAM,OAAQ7G,MAAOuC,EAAGuE,MAAOnM,IAC7C4H,EAAIyE,CAEP,MA3BG7B,EAAO7D,KAAK,CAAEuF,KAAM,QAAS7G,MAAOuC,EAAGuE,MAAO/K,EAAIwG,YAJlD4C,EAAO7D,KAAK,CAAEuF,KAAM,OAAQ7G,MAAOuC,EAAGuE,MAAO/K,EAAIwG,YAJjD4C,EAAO7D,KAAK,CAAEuF,KAAM,eAAgB7G,MAAOuC,IAAKuE,MAAO/K,EAAIwG,YAJ3D4C,EAAO7D,KAAK,CAAEuF,KAAM,WAAY7G,MAAOuC,EAAGuE,MAAO/K,EAAIwG,MA4E5D,CAED,OADA4C,EAAO7D,KAAK,CAAEuF,KAAM,MAAO7G,MAAOuC,EAAGuE,MAAO,KACrC3B,CACX,CAMiBiC,CAAMrL,GACfqJ,EAAKlJ,EAAQmL,SAAUA,OAAkB,IAAPjC,EAAgB,KAAOA,EACzDkC,EAAiB,KAAKzL,OAAOC,EAAaI,EAAQ2J,WAAa,OAAQ,OACvE0B,EAAS,GACTlE,EAAM,EACNd,EAAI,EACJ2B,EAAO,GACPsD,EAAa,SAAUX,GACvB,GAAItE,EAAI4C,EAAO1F,QAAU0F,EAAO5C,GAAGsE,OAASA,EACxC,OAAO1B,EAAO5C,KAAKuE,KAC/B,EACQW,EAAc,SAAUZ,GACxB,IAAIC,EAAQU,EAAWX,GACvB,QAAcH,IAAVI,EACA,OAAOA,EACX,IAAI1B,EAAKD,EAAO5C,GAAwBvC,EAAQoF,EAAGpF,MACnD,MAAM,IAAIiH,UAAU,cAAcpL,OADHuJ,EAAGyB,KACiB,QAAQhL,OAAOmE,EAAO,eAAenE,OAAOgL,GACvG,EACQa,EAAc,WAGd,IAFA,IACIZ,EADAS,EAAS,GAELT,EAAQU,EAAW,SAAWA,EAAW,iBAC7CD,GAAUT,EAEd,OAAOS,CACf,EACWhF,EAAI4C,EAAO1F,QAAQ,CACtB,IAAImH,EAAOY,EAAW,QAClB7M,EAAO6M,EAAW,QAClB9C,EAAU8C,EAAW,WACzB,GAAI7M,GAAQ+J,GAE0B,IAA9B2C,EAASZ,QADTjK,EAASoK,GAAQ,MAEjB1C,GAAQ1H,EACRA,EAAS,IAET0H,IACAqD,EAAOjG,KAAK4C,GACZA,EAAO,IAEXqD,EAAOjG,KAAK,CACR3G,KAAMA,GAAQ0I,IACd7G,OAAQA,EACRgI,OAAQ,GACRE,QAASA,GAAW4C,EACpB7C,SAAU+C,EAAW,aAAe,SAf5C,CAmBA,IAAIV,EAAQF,GAAQY,EAAW,gBAC/B,GAAIV,EACA5C,GAAQ4C,OAQZ,GALI5C,IACAqD,EAAOjG,KAAK4C,GACZA,EAAO,IAEAsD,EAAW,QACtB,CACI,IAAIhL,EAASkL,IACTC,EAASH,EAAW,SAAW,GAC/BI,EAAYJ,EAAW,YAAc,GACrChD,EAASkD,IACbD,EAAY,SACZF,EAAOjG,KAAK,CACR3G,KAAMgN,IAAWC,EAAYvE,IAAQ,IACrCqB,QAASiD,IAAWC,EAAYN,EAAiBM,EACjDpL,OAAQA,EACRgI,OAAQA,EACRC,SAAU+C,EAAW,aAAe,IAG3C,MACDC,EAAY,MA1BX,CA2BJ,CACD,OAAOF,CACX,CAqJ0BM,CAAM3D,EAAMhI,GAAUiI,EAAMjI,EACtD,CA4EW4L,CAAe5D,EAAMC,EAAMjI,EACtC,sCIlVwB,WAAH,WACR4H,QAAC,SAAAC,GACV7C,OAAO6G,sBAAsBhE,EAG/B,EAAE,kBCrCSiE,EAAY,WAAM9G,OAAAA,OAAO+G,SAASC,MAAM,EAKjCC,EAAG,SAACtH,GAAuCgH,YAAzB,IAAdhH,IAAAA,EAAcK,OAAO+G,SAAS5I,MAASwI,EAAMhH,GAAKuH,IAAI,EAsB5DP,EAAG,SAAChH,GAEpB,IAAQuH,EACFC,EAAUxH,EAAIyH,MAAM,QAE1B,GAAgB,OAAZD,EACE,QAAQE,KAAK1H,KACfuH,EAAO,IAGL,SAASG,KAAK1H,KAChBuH,EAAO,SAEJ,CACL,IAAMI,EAAaH,EAAQ,GAAGI,UAAU,GAExCL,EAAOM,SAASF,EAAY,GAC7B,CAGD,IACQG,EADJzE,EAAOrD,EAAI7E,QAAQgM,IAAa,IAEhCY,EAAQ,CAAE,EAGCC,EAAG3E,EAAKuC,QAAQ,KAE3BoC,GAAa,IACfF,EAAOzE,EAAKjJ,MAAM4N,EAAY,GAC9B3E,EAAOA,EAAKjJ,MAAM,EAAG4N,IAIvB,IAAgBC,EAAG5E,EAAKuC,QAAQ,KAOhC,OALIqC,GAAc,IAChBF,EAAQG,EAAW7E,EAAKjJ,MAAM6N,EAAa,IAC3C5E,EAAOA,EAAKjJ,MAAM,EAAG6N,IAGhB,CACLH,KAAAA,EACAzE,KAAAA,EACAkE,KAAAA,EACAQ,MAAAA,EAEJ,IAK0B,SAAC7M,GAAW,SAChCiN,MAAM,KAAKC,OAAO,SAACC,EAAqBjM,GAC1C,IAAqBA,EAAAA,EAAG+L,MAAM,KAI9B,OAFAE,EAFYpC,EAAAA,IAEZoC,EAAAA,IAGF,EAAG,CAAE,EAAC,EAKKC,EAAQ,SAACtI,GAAkC,YAAlCA,IAAAA,IAAAA,EAAcK,OAAO+G,SAAS5I,MAC/CwB,EAAC7E,QAAQ,kBAAmB,GAAG,4BArGb,WAAMkF,OAAAA,OAAO+G,SAAS5I,IAAI,kBAKlB,SAACwB,EAAanB,GAA4C,YAA7B,IAAfA,IAAAA,EAAejC,SAAS2L,SAAoB,QAAQvI,EAAKnB,GAAML,IAAI,gCAezF,SAACwB,GAAuCgH,YAAzB,IAAdhH,IAAAA,EAAcK,OAAO+G,SAAS5I,MAASwI,EAAMhH,GAAKqD,IAAI,WAKtD,SAACrD,EAAawI,GACpC,YADoC,IAAAA,IAAAA,GAAqB,GACzCA,EAAGC,KAAKD,UAAUxB,EAAMhH,GAAK+H,OAASf,EAAMhH,GAAK+H,KACnE,UAKuB,SAAC/H,GAAwBgH,OAAAA,EAAMhH,GAAK8H,IAAI,gCCzB/D,WACE9H,EACA0I,EACAC,EACAC,EACAC,GAEA,YALA,IAAAH,IAAAA,EAAc,SAKIzF,QAAC,SAACC,EAASC,GAC3B,MAAY,IAAoB2F,eAEhCC,EAAIC,mBAAqB,WACvB,GAAID,EAAIE,aAAeH,eAAeI,KACpC,GAAmB,MAAfH,EAAII,OAAgB,CAEtB,MAAwC,KAApBJ,EAAIK,aAAsBL,EAAIK,cAAgBpJ,EAAM+I,EAAIK,YAAcpJ,EAE1FkD,EAAQ,CACNN,KAAMmG,EAAIM,aACVrJ,IAAGsJ,EAAA,CACD9K,KAAM4K,GACHpC,EAAMoC,MAIbR,EAAMhH,OAAO5B,EAAK,CAChBmJ,OAAQ,YACRI,OAAQH,GAEX,MAAM,GAAIL,EAAII,OAAQ,CAErB,IAAcrG,EAAG,CACfqG,OAAQJ,EAAII,OACZK,WAAYT,EAAIS,YAGlBb,EAAa3I,EAAK8C,GAClBK,EAAOL,GAEP8F,EAAMhH,OAAO5B,EAAK,CAAEmJ,OAAQ,YAC7B,CAEL,EAEAJ,EAAIU,UAAY,WACd,IAAWxP,EAAG,IAAIyP,wBAAwBhB,EAAG,KAC7CC,EAAa3I,EAAK/F,GAClBkJ,EAAOlJ,GACP2O,EAAMhH,OAAO5B,EAAK,CAAEmJ,OAAQ,YAC9B,EAEAJ,EAAIY,QAAU,WACZ,IAAM1P,EAAQ,UAAwB,eACtC0O,EAAa3I,EAAK/F,GAClBkJ,EAAOlJ,GACP2O,EAAMhH,OAAO5B,EAAK,CAAEmJ,OAAQ,YAC9B,EAEAJ,EAAIa,KAAK,MAAO5J,GAChB+I,EAAIc,QAAUnB,EACdK,EAAIe,iBACF,SACA,mDAEFf,EAAIe,iBAAiB,UAAW,OAEhCjB,EAAQkB,MAAMC,QAAQ,SAAC/D,EAAOzD,GAC5BuG,EAAIe,iBAAiBtH,EAAKyD,EAC5B,GAEA8C,EAAIkB,MACN,EACF,CChGe,SAASC,EAAUC,GAChC,QAASA,IAAuB,iBAARA,GAAmC,mBAARA,IAA2C,mBAAbA,EAAItH,IACvF,CCEgBuH,SAAAA,EACdC,EACAC,GAEA,gBAFAA,IAAAA,EAAW,CAAA,GAEe,WAAA,IAAAC,EAAAjQ,UACpBkQ,GAAQ,IAEI,IAAWvH,QAAC,SAACC,EAASC,GAEpCmH,EAAIE,MAAQ,WAGV,OAFAA,GAAQ,EAED,SAACC,EAAUxE,GACZwE,EACFtH,EAAOsH,GAEPvH,EAAQ+C,EAEZ,CACF,EAEA,IAAYyE,EAAGL,EAAKtP,MAAMuP,EAAG,GAAAlQ,MAAAC,KAAAkQ,IAExBC,IACCN,EAAUQ,GACXA,EAAwB7H,KAAKK,EAASC,GAEvCD,EAAQwH,GAGd,GAEA,OAAOC,CACT,CACF,CCPA,IA4GWC,EAAG,iBAnEZ,SAAAC,GAAA,SAAAC,UAEc,OADZC,EAAOF,EAAAxQ,KAAApB,OAAAA,MApCF+R,OAAiB,IAAUvR,EAAC,eAAcsR,EAO1ChB,IAAkB,CACvB,QACA,OACA,QACA,eACA,iBACA,YACA,cACA,aACA,OACA,YACA,SACA,cACA,QACA,aACA,cACA,QACA,aACA,SAQKkB,EAAAA,WAA6C,IAAIC,IAItDH,EAAKhL,OAAOgL,CACd,CAHAI,EAAAL,EAAAD,GAGC,IAEM9K,EAAAA,EAAAA,iBAAAA,EAAAA,KAAA,WAAI,IAAAqL,EAAAnS,KACTA,KAAKgS,WAAWjJ,QAChB/I,KAAK8Q,IAAIC,QAAQ,SAAAqB,GACVD,EAAKC,KACRD,EAAKC,GAAQ,SAACzQ,EAAkB0P,GACzBc,EAAKH,WAAWK,IAAID,IACvBD,EAAKH,WAAW1J,IAAI8J,EAAM,IAAIE,KAEpBH,EAAKH,WAAWtJ,IAAI0J,GAE5BnK,IAAI,CACNoJ,IAAKA,GAAO,CAAE,EACd1P,GAAAA,GAEJ,EAEJ,EACF,OAOO,SAAGd,GACR,IAAAyQ,EAAAjQ,UAAAkR,EAAAvS,KAAA,GAAIA,KAAKgS,WAAWK,IAAIxR,GAAO,CAE7B,MAAYmJ,QAAQC,UAOpB,OALAjK,KAAKgS,WAAWtJ,IAAI7H,GAAMkQ,QAAQ,SAAAqB,GAEhCI,EAAQA,EAAM5I,KAAK,WAAMuH,OAAAA,EAASiB,EAAKzQ,GAAIyQ,EAAKf,KAAavP,WAAA,EAAA,GAAAX,MAAAC,KAAAkQ,EAAA,GAAA,EAC/D,GAEYkB,EAAA,MAAO,SAAAxR,GACjBuR,EAAKR,OAAOtQ,MAAqBZ,eAAAA,OACjC0R,EAAKR,OAAO/Q,MAAMA,EACpB,EACD,CAED,OAAOgJ,QAAQC,SACjB,EAEOlB,EAAAA,MAAA,WAAK,IAAA0J,EAAAzS,KACVA,KAAK8Q,IAAIC,QAAQ,SAAAqB,YACHA,EACd,GAEApS,KAAK8G,MACP,IAKO4L,KAAA,WACL1S,KAAK+R,OAAOvQ,KAAyB,oBAAAxB,KAAK8Q,IAAI3F,KAAK,MACnD,IAAgB6G,EAAa,GAC7BhS,KAAKgS,WAAWjB,QAAQ,SAAC4B,EAAapJ,GAAgByI,OAAAA,EAAWxK,KAAK+B,EAAI,GAC1EvJ,KAAK+R,OAAOvQ,0BAA0BwQ,EAAW7G,KAAK,KACxD,IAhEA,CAzCyByH,ICXdC,eAIX,WAAA,SAAAA,EAAYC,GACV,GAJMC,KAAAA,OACAC,EAAAA,KAAAA,EAA2B,GAGX,kBAAXF,EACT9S,KAAK+S,EAAaD,MACb,CACL,IAAW9H,EAAGF,MAAMC,QAAQ+H,GAAUA,EAAS,CAACA,GAEhD9S,KAAKgT,EAAiBhI,EAAME,IAAI,SAAA+H,GAAK9I,OAAAA,EAAa8I,EAAE,EACrD,CACH,CAUC,OARMC,EAAAA,UAAAA,UAAA,SAAU3N,GACf,GAA+B,kBAApBvF,KAAK+S,EACd,OAAO/S,KAAK+S,EAGd,IAAQ3I,EAAS2D,EAAMxI,GAAf6E,KAER,OAAWpK,KAACgT,EAAeG,KAAK,SAAAC,GAASA,OAAqB,OAArBA,EAAM3I,KAAKL,EAAc,EACpE,EAACyI,CAAA,CAlBD,GCRWQ,eAGX,SAAAC,GAAA,SAAAD,EAAYP,GACV,IAAAhB,EACF,OADEA,EAAAwB,EAAAlS,KAAApB,KAAM8S,IAAQ9S,MAHRuT,EAAkC,IAAItB,IAI9CH,CAAA,CAFAI,EAAAmB,EAAAC,GAEC,IAKMhL,EAAAA,EAAAA,iBAAAA,EAAAA,IAAA,SACL/C,EACAiO,EACAtL,EACAgI,EACAI,GASA,OAPAtQ,KAAKuT,EAAOjL,IAAI/C,EAAM,CACpB2C,OAAAA,EACAsL,QAAAA,EACAtD,OAAAA,EACAI,aAAQA,EAAAA,EAAU/K,IAGb,CACL2C,OAAAA,EACAsL,QAAAA,EACAtD,OAAAA,EACAI,OAAAA,EAEJ,EAACxP,EAKM4H,IAAA,SAAInD,GACT,OAAWvF,KAACuT,EAAO7K,IAAInD,EACzB,EAACzE,EAKM2S,WAAA,SAAWlO,GAChB,OAAWvF,KAACuT,EAAO7K,IAAInD,GAAMiO,OAC/B,EAAC1S,EAKM4S,UAAA,SAAUnO,GACf,OAAWvF,KAACuT,EAAO7K,IAAInD,GAAM2C,MAC/B,EAACpH,EAKM6S,UAAA,SAAUpO,GACf,OAAOvF,KAAKuT,EAAO7K,IAAInD,GAAM2K,MAC/B,IAKO0D,UAAA,SAAUrO,GACf,OAAOvF,KAAKuT,EAAO7K,IAAInD,GAAM+K,MAC/B,EAKO+B,EAAAA,IAAA,SAAI9M,GAET,OAAIvF,KAAKkT,UAAU3N,IAGZvF,KAAKuT,EAAOlB,IAAI9M,EACzB,EAKOzE,EAAA,OAAA,SAAOyE,GACZ,OAAWvF,KAACuT,EAAM,OAAQhO,EAC5B,EAKOoD,EAAAA,OAAA,SAAOpD,EAAc0B,GAC1B,IAAMD,EACDqJ,EAAA,GAAArQ,KAAKuT,EAAO7K,IAAInD,GAChB0B,GAIL,OAFAjH,KAAKuT,EAAOjL,IAAI/C,EAAMyB,GAGxBA,CAAA,IA7FA,CAHyB6L,GCFdgB,4CACHC,EAAoB,IAAS7B,GAAA,CAAA,IAAAnR,EAAA+S,EAAA9S,UA8CpC,OA9CoCD,EAK9BwH,IAAA,SAAIzH,EAAcmM,GAGvB,OAFAhN,KAAK8T,EAAMxL,IAAIzH,EAAMmM,GAEd,CACLnM,KAAMmM,EAEV,EAKOtE,EAAAA,IAAA,SAAI7H,GACT,OAAOb,KAAK8T,EAAMpL,IAAI7H,EACxB,EAACC,EAKMgQ,IAAA,WACL,OAAO9Q,KAAK8T,CACd,EAKOzB,EAAAA,IAAA,SAAIxR,GACT,OAAOb,KAAK8T,EAAMzB,IAAIxR,EACxB,EAACC,EAAA,OAKM,SAAOD,GACZ,OAAOb,KAAK8T,EAAK,OAAQjT,EAC3B,IAKOkI,MAAA,WACL,OAAO/I,KAAK8T,EAAM/K,OACpB,EAAC8K,CAAA,ICpCGtL,EAA0B,WAAjB,OAAwBnB,OAAO5E,QAAQ+F,SAAS,EAKnDwL,EAAiB,SAAG5Q,GAAe,OAAfA,EAAAA,KAAIoC,EAAAA,IAAuB,EAK/CyO,EAAiB,SAAGC,GAAAA,IAAAA,EAAAA,EAAAA,MAC7BA,OAAAA,EAAwBC,MAAQ,GAChCD,EAAwBE,SACxBF,EAAwBG,SACxBH,EAAwBI,UACxBJ,EAAwBK,MAAM,EAK3BC,EAAsB,SAAjBC,GAAA,IAAsBrR,EAAAqR,EAAFrR,GAAE,OAC7BA,EAAC+F,aAAa,WAAqC,WAAvB/F,EAAYmN,MAAmB,EAM/CmE,EAAiB,SAAGtR,GAAAA,IAAAA,EAAAA,EAAAA,GAChCA,YAAsCyJ,IAAtCzJ,EAAyBuR,UACzBtN,OAAO+G,SAASuG,WAAcvR,EAAyBuR,eACjB9H,IAAtCzJ,EAAyBwR,UACzBvN,OAAO+G,SAASwG,WAAcxR,EAAyBwR,QAAS,EAM9DC,EAAyB,SAAjBC,GAAA,IAAsB1R,EAAA0R,EAAF1R,GAAE,YACCyJ,IAAVzJ,EAACmL,MAC1BvH,MAAkBA,EAAa5D,EAAyBoC,KAAK,EAKzDuP,EAAyB,SAAjBC,GAAA,IAAsB5R,EAAA4R,EAAF5R,GAAE,OAChCA,EAACgC,cAAuD,iBAAhChC,EAAGgC,aAAa,WAAwB,EAKnD6P,EAAiB,SAAG7R,GACnCA,OADmCA,EAAAA,GAChC+F,aAAgB5G,EAAgBI,OAAUJ,IAAAA,EAAgBK,QAAU,EAKnEsS,EAA2B,SAAG9R,GAClC+R,OAAAA,QADkC/R,EAAAA,GAE7BgS,QAAY7S,IAAAA,EAAgBI,OAAUJ,IAAAA,EAAgBK,QAAiB,WAC3E,EAOUyS,EAAiB,SAAG7P,GAAAA,IAAAA,EAAAA,EAAAA,YAC5B8P,EAAO9P,KAAUwB,KAAeA,EAAYxB,KAAUwB,GAAa,EAE3DuO,eAIX,SAAAhC,GAAA,SAAAgC,EAAYxC,GACV,IAAAhB,EACY,OADZA,EAAAwB,EAAAlS,KAAApB,KAAM8S,IAAQ9S,MAJTuV,MAAkB,GAAEzD,EACpB0D,MAAmC,IAAIvD,IAI5CH,EAAKhL,OAAOgL,CACd,CAHAI,EAAAoD,EAAAhC,GAGC,IAAAxS,EAAAwU,EAAAvU,iBAAAD,EAEMgG,KAAA,WAEL9G,KAAKiI,IAAI,YAAaM,GACtBvI,KAAKiI,IAAI,SAAU8L,GACnB/T,KAAKiI,IAAI,SAAU+L,GACnBhU,KAAKiI,IAAI,QAASsM,GAClBvU,KAAKiI,IAAI,aAAcwM,GACvBzU,KAAKiI,IAAI,WAAY2M,GACrB5U,KAAKiI,IAAI,WAAY6M,GACrB9U,KAAKiI,IAAI,cAAe+M,GACxBhV,KAAKiI,IAAI,aAAcgN,GAGvBjV,KAAKiI,IAAI,UAAWmN,GAAS,EAC/B,EAEOnN,EAAAA,IAAA,SAAIpH,EAAc4U,EAAqBF,QAAAA,IAAAA,IAAAA,GAAiB,GAC7DvV,KAAKwV,MAAMlN,IAAIzH,EAAM4U,GACrBF,GAASvV,KAAKuV,MAAM/N,KAAK3G,EAC3B,EAACC,EAKM4U,IAAA,SAAI7U,EAAcsC,EAAU8Q,EAAc1O,GAC/C,OAAWvF,KAACwV,MAAM9M,IAAI7H,EAAXb,CAAiB,CAC1BmD,GAAAA,EACA8Q,MAAAA,EACA1O,KAAAA,GAEJ,EAKOoQ,EAAAA,UAAA,SAAUxS,EAAU8Q,EAAc1O,GAAY,IAAA4M,EAAAnS,KACnD,OAAOA,KAAKuV,MAAMpC,KAAK,SAAAtS,GAAI,OAAQsR,EAACuD,IAAI7U,EAAMsC,EAAI8Q,EAAO1O,EAAK,EAChE,IA1CA,CAJ2BsN,GC7FhB+C,eAEX,SAAAC,GAAA,SAAAD,EACS5U,EACA8U,GACS,IAAAhE,EAWS,YAZlB,IAAAgE,IAAAA,EAAQ,gBAIfhE,EAAA+D,EAAAzU,KAAAU,MAAA+T,EAAA,CAAA7V,MAAA+B,OAAA,GAAAZ,MAAAC,KAAAC,UAAA,MAAiBrB,MALVgB,WAAA,EAAA8Q,EACAgE,WADA,EAAAhE,EAAK9Q,MAALA,EACA8Q,EAAKgE,MAALA,EAQHrF,MAAMsF,mBACRtF,MAAMsF,uBAAwBH,GAGhC9D,EAAKjR,KAAO,aAAaiR,CAC3B,CAAC,OAfDI,EAAA0D,EAAAC,GAeCD,CAAA,CAfD,cAeCI,EAjB6BvF,QC2BdwF,eAAA,WAoChB,SAAYC,EAAAA,YAAAA,IAAAA,EAAiC,IAnCtCnE,KAAAA,OAAiB,IAAUvR,EAAC,eAAcR,KAI1C8Q,IAAyB,GAAE9Q,KAI3BwJ,KAA0B,GAI1B2M,KAAAA,KAA0B,GASzBC,KAAAA,EAAkB,CACxB,CACEvV,KAAM,YACNkM,KAAM,WAER,CACElM,KAAM,SACNkM,KAAM,aASJmJ,IAEFlW,KAAK8Q,IAAM9Q,KAAK8Q,IAAI/O,OAAOmU,IAE7BlW,KAAK2I,QACP,CAAC,IAKMV,EAAAA,EAAAA,UA0QN,OA1QMA,EAAAA,IAAA,SAAI8E,EAA6B9F,GAE/B,SADC8F,EAGJ/M,KAAKoW,EAAOvN,OAAO5B,EAAKoP,UAAY,EAAG,EAAGpP,EAAK+F,OAK/ChN,KAAK8Q,IAAItJ,KAAKP,GAIlBjH,KAAK2I,QACP,EAKOsB,EAAAA,QAAA,SACLhD,EACAqP,GAAgC,IAAAxE,EAAA9R,UAAhC,IAAAsW,IAAAA,EAA8B,CAAA,GAG9B,IAAIJ,EAAcI,EAAQH,KAAOnW,KAAKmW,KAAOnW,KAAKwJ,KAIhD0M,EAAcA,EAAYK,OADxBD,EAAQE,KACuB,SAAAC,GAAKA,OAAAA,EAAE5V,MAAmB,SAAX4V,EAAE5V,IAAe,EAEhC,SAAA4V,GAAC,OAAKA,EAAE5V,MAAmB,SAAX4V,EAAE5V,IAAe,GAIpE,IAAc6V,EAAG,IAASzE,IAIpB0E,EAAST,EAAYU,KAAK,SAAAH,GAC9B,IAAII,GAAQ,EACNrI,EAAQ,CAAA,EAEd,OAAI8H,EAAQE,MAAmB,SAAXC,EAAE5V,MACpB6V,EAASpO,IAAImO,EAAGjI,IACT,IAITsD,EAAKsE,EAAOU,UAAU/F,QAAQ,SAAAgG,GACxBF,IACFA,EAAQ/E,EAAKkF,EAAOP,EAAGM,EAAM9P,EAAMuH,GAE/BiI,EAAEhP,MAAQgP,EAAEQ,KACdJ,EACE/E,EAAKkF,EAAOP,EAAGM,EAAM9P,EAAMuH,EAAO,SAClCsD,EAAKkF,EAAOP,EAAGM,EAAM9P,EAAMuH,EAAO,OAElCiI,EAAEhP,OAASgP,EAAEQ,KACfJ,EAAQ/E,EAAKkF,EAAOP,EAAGM,EAAM9P,EAAMuH,EAAO,UAEvCiI,EAAEhP,MAAQgP,EAAEQ,KACfJ,EAAQ/E,EAAKkF,EAAOP,EAAGM,EAAM9P,EAAMuH,EAAO,OAGhD,GAEAkI,EAASpO,IAAImO,EAAGjI,GAGlBqI,EAAA,GAEMK,EAAcR,EAAShO,IAAIiO,GAC3BQ,EAAiB,GAUvB,GAREA,EAAe3P,KADb8O,EAAQH,KACU,OAEA,QAElBG,EAAQE,MACVW,EAAe3P,KAAK,QAGlB0P,EAAa,CAEf,IAAAE,EAAWC,EAAU,CAACV,GAEtBW,OAAOjN,KAAK6M,GAAavR,OAAS,GAAK0R,EAAM7P,KAAK0P,IAElDE,EAAApX,KAAK+R,QAAOvQ,mCACW2V,EAAehM,KAAK,KACtCkM,KAAAA,OAAAA,GAEN,MACCrX,KAAK+R,OAAOvQ,6BAA6B2V,EAAehM,KAAK,KAC9D,KAED,OACFwL,CAAA,EASOhO,EAAAA,OAAA,WAEL,IAAAwJ,EAAAnS,KAAAA,KAAK8Q,IAAM9Q,KAAK8Q,IACb5F,IAAI,SAAAuL,GAAC,OAAQtE,EAACoF,EAAad,EAAE,GAC7Be,KAAK,SAACvR,EAAGwR,GAAC,SAAOC,SAAWD,EAAEC,QAAQ,GACtCZ,UACA5L,IAAI,SAAAuL,GAGH,gBAFSiB,SAGXjB,CAAA,GACFzW,KAAKwJ,KAAOxJ,KAAK8Q,IAAIyF,OACnB,SAAAE,GAAKA,YAAY7J,IAAZ6J,EAAE1W,YAAmC6M,IAAZ6J,EAAEtW,KAAmB,GAErDH,KAAKmW,KAAOnW,KAAK8Q,IAAIyF,OAAO,SAAAE,GAAC,YAAe7J,IAAV6J,EAACN,IAAkB,EACvD,EAaQa,EAAAA,EAAA,SACNW,EACAZ,EACA9P,EACAuH,EACAoJ,GAEA,IAAIC,GAAU,EACVC,GAAW,IACLH,EACE9W,EAAWkW,EAAflW,OACQA,EACHkX,EAAGlX,EACJmX,EAAGnX,EACT+E,EAAOgS,EAAYnB,EAAEmB,GAAanB,IACb,OAAdmB,EAAqB3Q,EAAKyC,KAAOzC,EAAKgR,QAInD,GAHcL,EAAYhS,GAAQA,EAAK/E,GAAQ+E,EAAK/E,GAGzC,CACT,OAVqBkW,EAAThK,MAWV,IAAK,UACL,QAEE,IAAWmL,EAAapN,MAAMC,QAAQnF,EAAKuS,IACtCvS,EAAKuS,GACN,CAACvS,EAAKuS,IAGN3O,EAAK2O,KAA8C,IAAlCD,EAAMvL,QAAQnD,EAAK2O,MACtCL,GAAW,IAGyB,IAAlCI,EAAMvL,QAAQnD,EAAK2O,MACrBN,GAAU,GAEZ,MAGF,IAAK,SAEH,MAAwB/M,MAAMC,QAAQnF,EAAKmS,IACtCnS,EAAKmS,GACN,CAACnS,EAAKmS,IAGNvO,EAAKuO,IAELvO,EAAKuO,GAASlX,OACyB,IAAvCqX,EAAMvL,QAAQnD,EAAKuO,GAASlX,QAE5BiX,GAAW,IAG8B,IAAvCI,EAAMvL,QAAQnD,EAAKuO,GAASlX,QAC9BgX,GAAU,IAGZA,GAAU,EAEZ,MAGF,IAAK,WACCjS,EAAKoS,GAAQ/Q,GACf6Q,GAAW,EAEXD,GAAU,EAKZC,IACEF,GACFpJ,EAAMoJ,GAAapJ,EAAMoJ,IAAc,CAAE,EACzCpJ,EAAMoJ,GAAW/W,GAAQ4V,EAAEmB,GAAW/W,IAEtC2N,EAAM3N,GAAQ4V,EAAE5V,GAGrB,CAED,OACFgX,CAAA,EAUQO,EAAAA,EAAA,SACN3B,EACA4B,EACAC,GAEA,IAAYZ,EAAG,EAiBf,OAdEjB,EAAE4B,IACD5B,EAAEhP,MAAQgP,EAAEhP,KAAK4Q,IACjB5B,EAAEQ,IAAMR,EAAEQ,GAAGoB,MAEdX,GAAYtO,KAAKmP,IAAI,GAAID,GAErB7B,EAAEhP,MAAQgP,EAAEhP,KAAK4Q,KACnBX,GAAY,GAEVjB,EAAEQ,IAAMR,EAAEQ,GAAGoB,KACfX,GAAY,IAKlBA,CAAA,EAEQH,EAAAA,EAAA,SAAad,GAAkB,IAAAlE,EAAAvS,KACrCyW,EAAEiB,SAAW,EACb,IAAYA,EAAG,EAWf,OATA1X,KAAKoW,EAAOrF,QAAQ,SAACgG,EAAMtO,GAIzBiP,GAAYnF,EAAK6F,EAAmB3B,EAHnBM,EAATlW,KACM4H,EAAI,EAGpB,GAEAgO,EAAEiB,SAAWA,GAGf,EAACzB,CAAA,CA1Te,8FCKMuC,eAAA,WAKtB,SAAYtC,EAAAA,YAAAA,IAAAA,EAAiC,IAAElW,KAJxC+R,OAAiB,IAAUvR,EAAC,eAC5BgI,KAAAA,WACCiQ,EAAAA,KAAAA,GAAoB,EAG1BzY,KAAKwI,MAAQ,IAASyN,EAACC,EACzB,CAAC,IAAApV,EAAA0X,EAAAzX,UAgDA,OAhDAD,EAOM4H,IAAA,SACLzB,EACAqP,GAEA,OAAWtW,KAACwI,MAAMyB,QAAQhD,EAAMqP,EAClC,EAACxV,EA2CY4X,OAAM,SAAAC,GAAA,MACjB1R,EAAAA,KACA0Q,EAAAA,EAAAA,WAID,IAAA,IAAAiB,EAAA,WAeC9G,EAAK2G,GAAW,CAAM,EAbtB3G,EAAA9R,KADMyW,EAAIkB,GAAc,CAAA,EACxB7F,EAAK2G,GAAW,EAAK,IAAAhP,EAAAoP,EAAA,WAGb,OAAA7O,QAAAC,QAAA6H,EAAKgH,EAAa,aAAc7R,EAAMwP,IACtC7M,KAAA,WAAA,OAAAI,QAAAC,QAAA6H,EAAKqE,KAAKlP,EAAMwP,IAAE7M,KAAA,WAAA,OAAAI,QAAAC,QAClB6H,EAAKgH,EAAa,YAAa7R,EAAMwP,IAAE7M,KAAA,WAAA,EAAA,EAAA,EAC9C,EAAA,SAAQ5I,GACP8Q,EAAK2G,GAAW,EAEhB3G,EAAKC,OAAOtQ,MAAM,wCAClBqQ,EAAKC,OAAO/Q,MAAMA,EACnB,GAAA,OAAAgJ,QAAAC,QAAAR,GAAAA,EAAAG,KAAAH,EAAAG,KAAAgP,GAAAA,IAGF,CAAA,MAAA7Q,GAAA,OAAAiC,QAAAE,OAAAnC,EAAA,CAAA,EAAAjH,EA4BYiY,OAAM,SAAAC,GAAA,IACb/R,EAAA+R,EAAJ/R,KACA0Q,EAAUqB,EAAVrB,WACAnO,EAAIwP,EAAJxP,KACA5G,EAAOoW,EAAPpW,QAAO,IAkHP,IAAAqW,EAAA,SAAAC,GAAA/G,EAAKsG,GAAW,CAAM,EAxGtBtG,EAAAnS,KAHOyW,EAAGkB,GAAc,CAAE,KACF,IAAXlB,EAAE0C,OAAiB,EAEhChH,EAAKsG,GAAW,EAAK,mBAQb,SAAAW,IAAA,OAAApP,QAAAC,QAAAkI,EAAK2G,EAAa,SAAU7R,EAAMwP,IA2ElC7M,KAAA,WAAA,SAAAyP,EAAAC,GAAA,OAAAtP,QAAAC,QAAAkI,EAAKvJ,OAAO3B,IAEZ2C,KAAA,WAAA,OAAAI,QAAAC,QAAAkI,EAAK2G,EAAa,QAAS7R,EAAMwP,IA3EnC0C,KAAAA,aAAAA,EAAAA,CAAAA,IAAAA,EAAAA,WAAAA,GAAAA,EACE,OAAAN,EAAA,WAAA,OAAA7O,QAAAC,QACIkI,EAAKlK,IAAIhB,EAAMrE,IAEfgH,KAAA,WAAA,OAAAI,QAAAC,QAAAkI,EAAK2G,EAAa,cAAe7R,EAAMwP,IACvC7M,KAAA,WAAA,OAAAI,QAAAC,QAAAkI,EAAK2G,EAAa,cAAe7R,EAAMwP,IAGvCzM,KAAAA,WAAAA,OAAAA,QAAAA,QAAAA,QAAQ8G,IAAI,CAACqB,EAAKpS,MAAMkH,EAAMwP,GAAItE,EAAKhS,MAAM8G,EAAMwP,MAGnD7M,KAAA,WAAA,OAAAI,QAAAC,QAAAkI,EAAK2G,EAAa,aAAc7R,EAAMwP,IACtC7M,KAAA,WAAA,OAAAI,QAAAC,QAAAkI,EAAK2G,EAAa,aAAc7R,EAAMwP,IAAE7M,KAAA,aAAA,EAAA,EAAA,EAAA,EAAA,EAC/C,EAAA,SAAQ5I,GAGH,GAAAmR,EAAKoH,EAAmBvY,GAC1B,MAAM,IAAc4U,EACjB5U,EACD,0BAGL,yCA+BKwY,IAAAA,EAAAA,WAAAA,IAAgB,IAAhBA,EACI,OAAAxP,QAAAC,QAAAkI,EAAKlK,IAAIhB,EAAMrE,IAEfgH,KAAA,WAAA,OAAAI,QAAAC,QAAAkI,EAAK2G,EAAa,cAAe7R,EAAMwP,IACvC7M,KAAA,WAAA,OAAAI,QAAAC,QAAAkI,EAAKhS,MAAM8G,EAAMwP,EAAG+C,IAAY5P,KAAA,WAAA,OAAAI,QAAAC,QAChCkI,EAAK2G,EAAa,aAAc7R,EAAMwP,IAAE7M,KAAA,WAAA,EAAA,EAAA,EAAA,EAAA,CAL5C4P,GAK4C,GAAAC,GAAAA,EAAA7P,KAAA,OAAA6P,EAAA7P,KAAA,WAAA,EAEjD,EAAA,SAAQ5I,GAGH,GAAAmR,EAAKoH,EAAmBvY,GAC1B,MAAU4U,IAAAA,EACP5U,EACD,wCAGL,EA7CD,EAAe0Y,GAAQ,EAEnBC,EAAAd,EAAA,WAAA,OAAA7O,QAAAC,QAEIkI,EAAK2G,EAAa,cAAe7R,EAAMwP,IAAE7M,KAAA,WAAA,OAAAI,QAAAC,QAE3BD,QAAQ8G,IAAI,CAC9BqB,EAAKpS,MAAMkH,EAAMwP,GACjBmD,EAAepQ,EAAMvC,KACpB2C,KAAK,SAAAiQ,GAAUA,OAAAA,EAAO,EAAE,IAH3BL,KAAAA,SAAAA,GAG6B,OAH7BA,EAG4BM,EAEtB9P,QAAAC,QAAAkI,EAAK2G,EAAa,aAAc7R,EAAMwP,IAAE7M,KAAA,aAAA,EAAA,EAI/C,EAAA,SAAQ5I,GAGH,GAAAmR,EAAKoH,EAAmBvY,GAC1B,MAAU4U,IAAAA,EACP5U,EACD,wCAGL,GAAA,OAAA2Y,GAAAA,EAAA/P,KAAA+P,EAAA/P,KAAAmQ,GAAAA,GAAA,CAhDCZ,GAgDD,OAAAa,GAAAA,EAAApQ,KAAAoQ,EAAApQ,KAAAyP,GAAAA,GAAA,EAAA,CAAA,IAAAY,EAAA,WAAA,GAtDCd,EACIS,OAAAA,QAAAA,QAAAA,EAAepQ,EAAMvC,IAAK2C,KAAA,WAAA,EAAA,CAqD/B,GArD+B,OAAAqQ,GAAAA,EAAArQ,KAAAqQ,EAAArQ,KAAAwP,GAAAA,GAiFnC,EAAA,SAAQpY,GAKP,GAJAmR,EAAKsG,GAAW,EAIZzX,EAAMH,MAAuB,eAAfG,EAAMH,KAItB,MAHAsR,EAAKJ,OAAOtQ,MAAMT,EAAM8U,OACxB3D,EAAKJ,OAAO/Q,MAAMA,EAAMA,OAElBA,EAMR,MAHAmR,EAAKJ,OAAOtQ,MAAM,2BAClB0Q,EAAKJ,OAAO/Q,MAAMA,GAEZA,CACP,GAAA,OAAAgJ,QAAAC,QAAAiQ,GAAAA,EAAAtQ,KAAAsQ,EAAAtQ,KAAAqP,GAAAA,IAQU9C,CALZ,MAKYA,GAAAA,OAAAA,QAAAA,OAAAA,EAAAA,CAAAA,EAAAA,EAAAA,KAAKlP,SAAAA,EAAuBwP,GAAkB,IAAA,OAAAzM,QAAAC,QACnD0H,EAAK,GAAI,OAAQ1K,EAAMwP,IAE7B7M,KAAA,WAAA,OAAQ6M,EAACN,KAAOhF,EAASsF,EAAEN,KAAMM,EAAjBtF,CAAoBlK,GAAQ+C,QAAQC,SAAU,EAMnDlK,CALZ,MAKYA,GAAAA,OAAAA,QAAAA,OAAAA,EAAAA,CAAAA,EAAAA,EAAAA,MAAMkH,SAAAA,EAAuBwP,GAAkB,IACpD9E,OAAAA,QAAAA,QAAAA,EAAQ,GAAC,QAAS1K,EAAMwP,IAE9B7M,KAAA,WAAA,OAAQ6M,EAAC1W,MAAQoR,EAASsF,EAAE1W,MAAO0W,EAAlBtF,CAAqBlK,GAAQ+C,QAAQC,SAAU,EACjE,CAAA,MAAAlC,GAAA,OAAAiC,QAAAE,OAAAnC,EAAA,CAAA,EAAAjH,EAKYX,MAAK,SAChB8G,EACAwP,EACA+C,GAAiB,IAEX7H,OAAAA,QAAAA,QAAAA,EAAQ,GAAC,QAAS1K,EAAMwP,IAE9B7M,KAAA,WAAA,OAAQ6M,EAACtW,MACLgR,EAASsF,EAAEtW,MAAOsW,EAAlBtF,CAAqBlK,EAAMuS,GAC3BxP,QAAQC,SAAU,EAMXhC,CALZ,MAKYA,GAAAA,OAAAA,QAAAA,OAAAA,EAAAA,CAAAA,EAAAA,EAAAA,IAAIhB,SAAAA,EAAuBrE,GAAgB,IAE1B,OAD5BC,EAAI8B,aAAasC,EAAKyC,KAAKnH,UAAWK,GACtC+O,EAAK,GAAI,YAAa1K,GACxB+C,QAAAC,SAKarB,CALZ,MAKYA,GAAAA,OAAAA,QAAAA,OAAAA,EAAAA,CAAAA,EAAAA,EAAAA,OAAO3B,SAAAA,GAAqB,IAEN,OADjCpE,EAAIwB,gBAAgB4C,EAAKgR,QAAQ1V,WACjCoP,EAAK,GAAI,iBAAkB1K,GAC7B+C,QAAAC,SAEQsP,CAFP,MAEOA,GAAAA,OAAAA,QAAAA,OAAAA,EAAAA,CAAAA,EAAAA,EAAAA,EAAA,SAAmBvY,GACzB,OAAIA,EAAMmZ,SAEA,4BAA4B1L,KAAKzN,EAAMmZ,UAG7CnZ,EAAMkP,MAMZ,EAACpP,EAKagY,EAAY,SACxB1G,EACAnL,EACAwP,GAAqB,2BAEf9E,EAAK,GAAIS,EAAMnL,EAAMwP,IAAE7M,KAAA,WAE7B,OAAO6M,EAAErE,GAAQjB,EAASsF,EAAErE,GAAOqE,EAAlBtF,CAAqBlK,GAAQ+C,QAAQC,SAAU,EACjE,CAAA,MAAAlC,GAAA,OAAAiC,QAAAE,OAAAnC,EAAA,CAAA,EAAAuB,EAAAkP,EAAA,CAAA,CAAAjP,IAAA,YAAAb,IA3RD,WACE,OAAO1I,KAAKyY,CACd,EAACnQ,IACD,SAAc4H,GACZlQ,KAAKyY,EAAWvI,CAClB,GAKA,CAAA3G,IAAA,UAAAb,IAAA,WACE,OAAW1I,KAACwI,MAAM2N,KAAKxQ,OAAS,CAClC,GAAC,CAAA4D,IAAA,UAAAb,IAKD,WACE,OAAO1I,KAAKwI,MAAMsI,IAAIqC,KAAK,SAAAsD,GAAC,MAAe,SAAVA,EAAC5V,IAAe,EACnD,GAAC,CAAA0I,IAAA,aAAAb,IAUD,WACE,OAAW1I,KAACwI,MAAMsI,IAAIqC,KAAK,SAAAsD,GAAMA,OAAAA,EAAEQ,KAAOR,EAAEQ,GAAG7K,OAAUqK,EAAE0C,IAAI,EACjE,KAACX,CAAA,CAvDqB,kBCKtB,WAAA,SAAA4B,EAAYC,GAAc,IAAAvI,EAAA9R,KAAAA,KAdnBkY,MAAqB,CAC1B,cACA,aACA,cACA,cAKKoC,KAAAA,YAAkC,QAMlB,IAAjBD,EAAM1U,SAOV0U,EAAMtJ,QAAQ,SAAAwJ,GACZzI,EAAKwI,YAAYhS,IAAIiS,EAAK9X,UAAW8X,EACvC,GAEAva,KAAKkY,MAAMnH,QAAQ,SAAAlQ,GACjB8Q,EAAM9Q,GAAMiR,EAAK0I,EAAY3Z,GAC/B,GACF,CAqBC,OArBAuZ,EAAArZ,UAQOyZ,EAAA,SAAY3Z,cAClB,OAAO,SAAAoG,GACL,IAAsBpG,EAAAA,EAAK2N,MAAM,UAAYvH,EAAKyC,KAAOzC,EAAKgR,QACpDsC,EAAGpI,EAAKmI,YAAY5R,IADbiQ,EAATlW,WAKR,OAAI8X,GAAQA,EAAK1Z,GACAsQ,EAACoJ,EAAK1Z,GAAO0Z,EAAbpJ,CAAmBlK,GAG7B+C,QAAQC,SACjB,CACF,EAACmQ,CAAA,CApCD,GCpCGK,QAAQ1Z,UAAUwN,UACrBkM,QAAQ1Z,UAAUwN,QACfkM,QAAgB1Z,UAAU2Z,mBAC3BD,QAAQ1Z,UAAU4Z,uBAKjBF,QAAQ1Z,UAAUoU,UACrBsF,QAAQ1Z,UAAUoU,QAAU,SAAiByF,GAC3C,IAAIzX,EAAKnD,KAET,EAAG,CACD,GAAImD,EAAGoL,QAAQqM,GACb,SAGFzX,EAAMA,EAAGqD,eAAiBrD,EAAGsB,iBACf,OAAPtB,GAA+B,IAAhBA,EAAG0X,UAE3B,WACF,OCbqBC,EAAgB,CACrCvY,UAAW,KACXoH,KAAM,GACNlH,UAAW,GACXsE,IAAK,CACH8H,KAAM,GACNtJ,KAAM,GACN6E,KAAM,GACNkE,KAAM,KACNQ,MAAO,CAAA,ICynBDiM,EAAG,iBAtlBJC,WAAAA,SAAAA,IAAAA,KAAAA,iBAIAF,KAAAA,WAA0BA,EAI1Bta,KAAAA,OAAwBA,EAIxBuR,KAAAA,OAAiB,IAAUvR,EAAC,eAI5Bya,KAAAA,QAA+B,GAI/BrK,KAAAA,aACAsK,EAAAA,KAAAA,iBACAC,EAAAA,KAAAA,oBACAC,EAAAA,KAAAA,oBACAC,EAAAA,KAAAA,oBAIA1J,EAAAA,KAAAA,MAAQA,EAKRhC,KAAAA,WACAC,EAAAA,KAAAA,aACAjN,EAAAA,KAAAA,aACAuT,EAAAA,KAAAA,iBACAmE,EAAAA,KAAAA,WAIAxX,EAAAA,KAAAA,IAAMA,EACN+W,KAAAA,QAAUA,EACVpX,KAAAA,QAAUA,EACVgR,KAAAA,QAAUA,EACVzM,KAAAA,IAAMA,EAELuU,KAAAA,OACAC,EAAAA,KAAAA,OACAC,EAAAA,KAAAA,OACAC,EAAAA,KAAAA,OAODC,CAAAA,CAAAA,IAAAA,EAAAA,EAAAA,UA6hBT,OA7hBSA,EAAAA,IAAA,SAAOC,EAAyBvZ,GACrC,IAAsBwZ,EAAG5b,KAAKib,QAG1BW,EAAiBjP,QAAQgP,IAAW,EACtC3b,KAAK+R,OAAOzQ,KAAI,WAAYqa,EAAO9a,KAAI,wBAKX,mBAAnB8a,EAAOE,SAMlBF,EAAOE,QAAQ7b,KAAMoC,GACrBwZ,EAAiBpU,KAAKmU,IANpB3b,KAAK+R,OAAOzQ,KAAI,WAAYqa,EAAO9a,KAAI,6BAO3C,EAqBOiG,EAAAA,KAAA,SAAA2C,GAec,IAAAkP,OAAA,IAAAlP,EAAA,CAAE,EAAAA,EAAAqS,EAAAnD,EAbnBzC,YAAAA,OAAW,IAAA4F,EAAG,GAAEA,EAAAC,EAAApD,EAChB0B,MAAAA,OAAK,IAAA0B,EAAG,GAAEA,EAAAC,EAAArD,EACVsD,OAAAA,OAAM,IAAAD,EAAG1Z,EAAe0Z,EACxBtM,EAAYiJ,EAAZjJ,aAAYwM,EAAAvD,EACZ/H,QAAAA,OAAO,IAAAsL,EAAG,IAAGA,EAAAC,EAAAxD,EACbuC,YAAAA,OAAW,IAAAiB,GAAQA,EAAAC,EAAAzD,EACnBwC,eAAAA,OAAc,IAAAiB,GAAQA,EAAAC,EAAA1D,EACtByC,eAAAA,OAAc,IAAAiB,GAAQA,EAAAC,EAAA3D,EAEtB0C,eAAAA,OAAc,IAAAiB,GAAQA,EAAAC,EAAA5D,EACtBhW,QAAS6Z,OAAa,IAAAD,EAAG,KAAIA,EAAAE,EAAA9D,EAC7BlX,MAAaib,EAAA/D,EACbgE,SAyBF,GArBAnc,EAAOI,UAAmB,UALnB,IAAA6b,GAAQA,GAKkB,aAJvB,IAAAC,EAAG,MAAKA,GAKlB1c,KAAK+R,OAAOvQ,KAAKxB,KAAKgb,SAGtB1D,OAAOjN,KAAK4R,GAAQlL,QAAQ,SAAA6L,GAItBta,EAHSsa,KAIXta,EAJWsa,GAIaX,EAJbW,GAMf,GACA5c,KAAKub,EAAsB7L,EAC3B1P,KAAK4Q,QAAUA,EACf5Q,KAAKkb,YAAcA,EACnBlb,KAAKmb,eAAiBA,EACtBnb,KAAKob,eAAiBA,EACtBpb,KAAKqb,eAAiBA,EAGtBrb,KAAKwb,EAAWxb,KAAK6C,IAAIoB,cACpBjE,KAAKwb,EACR,MAAM,IAAS/K,MAAC,wCAIlBzQ,KAAK6c,IAEL,IAAQ5E,EAAYjY,KAAKiH,KAAjBgR,QAER,IAAKA,EAAQ1V,UACX,MAAM,IAASkO,MAAC,0CAWlB,GAPAzQ,KAAK2P,MAAQ,IAAS0D,EAAC6H,GACvBlb,KAAK4P,QAAU,IAAIiE,EACnB7T,KAAK2C,QAAU,IAAW2S,EAAC8F,GAC3Bpb,KAAKkW,YAAc,IAAesC,EAACtC,GACnClW,KAAKqa,MAAQ,IAASD,EAACC,GAGD,OAAlBmC,EAAwB,CAC1B,GAA6B,mBAAlBA,EACT,MAAM,IAAS/L,MAAC,8CAGlBzQ,KAAK2C,QAAQsF,IAAI,gBAAiBuU,EACnC,CAGDxc,KAAKwC,QAAQsE,KAAKmR,EAAQlR,IAAIxB,KAAM0S,EAAQxV,WAGxC0Y,GACFnb,KAAK2P,MAAMrH,IAAI2P,EAAQlR,IAAIxB,KAAMyE,QAAQC,QAAQ,CAC/CN,KAAMsO,EAAQtO,KACd5C,IAAKkR,EAAQlR,MACX,OAAQ,aAId/G,KAAK8c,EAAe9c,KAAK8c,EAAaC,KAAK/c,MAC3CA,KAAKgd,EAAehd,KAAKgd,EAAaD,KAAK/c,MAC3CA,KAAKid,EAAiBjd,KAAKid,EAAeF,KAAK/c,MAC/CA,KAAKkd,IAGLld,KAAKib,QAAQlK,QAAQ,SAAA4K,GAAM,OAAUA,EAAC7U,MAAM,GAI5C,IAAMqW,EAAWnd,KAAKiH,KAEtBkW,EAASrV,QAAU,QACnBqV,EAASzT,KAAOyT,EAASlF,QACzBkF,EAASlF,QAAe5H,EAAA,CAAA,EAAArQ,KAAK8a,YAC7B9a,KAAK2R,MAAK,GAAI,QAASwL,GAGvBnd,KAAKmW,KAAKgH,GAGVnd,KAAK6c,GACP,EAEOO,EAAAA,QAAA,WACLpd,KAAK6c,IACL7c,KAAKqd,IACLrd,KAAKwC,QAAQuG,QACb/I,KAAK2R,MAAM5I,QACX/I,KAAKib,QAAU,EACjB,EAaOqC,EAAAA,MAAA,SAAM/X,GAGX6B,OAAO+G,SAASoP,OAAOhY,EACzB,EAaOiY,EAAAA,GAAA,SACLjY,EACAuC,EACAC,GAWA,IAAIyO,EANJ,QANA1O,IAAAA,IAAAA,EAAmB,SAGnB9H,KAAKyb,EAAa,KAGdzb,KAAKkW,YAAYuH,UACnBzd,KAAKsd,MAAM/X,QAmBb,KAREiR,EADc,aAAZ1O,EAEA9H,KAAKwC,QAAQyV,SACbjY,KAAK+G,IAAI2W,QAAQ1d,KAAKwC,QAAQyV,QAAQlR,OAAS/G,KAAK+G,IAAI2W,QAAQnY,IAChEvF,KAAK+G,IAAI4W,SAAS3d,KAAKwC,QAAQyV,QAAQlR,KAAK,KAAU/G,KAAK+G,IAAI4W,SAASpY,GAAM,GAEzEvF,KAAK2C,QAAQ+S,IAAI,UAAW,KAAM,KAAMnQ,KAGpCvF,KAAKkW,YAAY0H,QAW9B,OAPA9V,EAAU9H,KAAKwC,QAAQqF,OAAO7H,KAAK2P,MAAM0C,IAAI9M,GAAQvF,KAAK2P,MAAMjH,IAAInD,GAAM+K,OAAS/K,EAAMuC,EAASC,GAE9FA,IACFA,EAAE8V,kBACF9V,EAAE+V,kBAGG9d,KAAKwJ,KAAKjE,EAAMuC,EAASC,MAAAA,EAAAA,OAAK6E,EAAW4J,EAClD,EAQaL,EAAAA,KAAK4H,SAAAA,GAA0B,IAAA,IAAAjM,EACpC9R,KAAI,OAAAgK,QAAAC,QAAJ6H,EAAKH,MAAQ,GAAC,cAAeoM,IAAUnU,KAAA,WAAA,SAAA6P,IAAA,OAAAzP,QAAAC,QAWvC6H,EAAKH,MAAQ,GAAC,aAAcoM,IAR9BnU,KAAA,WAAA,EAAA,CAAA,IAAAgP,EAAA,WAAA,GAAA9G,EAAKoE,YAAY8H,QAAO,CAC1B,IAAMrG,EAAa7F,EAAKoE,YAAYxN,IAAIqV,EAAW,CACjD5H,MAAM,IACc,OAAAnM,QAAAC,QAEhB6H,EAAKoE,YAAYwC,OAAO,CAAEf,WAAAA,EAAY1Q,KAAM8W,KAAYnU,KAAA,WAAA,EAAA,CAAA,CAL5D,GAK4D,OAAAgP,GAAAA,EAAAhP,KAAAgP,EAAAhP,KAAA6P,GAAAA,GAAA,EAIjE,CAAA,MAAA1R,GAAA,OAAAiC,QAAAE,OAAAnC,EAAA,CAAA,EAAAjH,EAeY0I,KAAI,SACfjE,EACAuC,EACAmM,EACAuC,GAAa,IAsCb,IA7BQhN,EA6BRwQ,EAAA,WAAA,IAAU/S,EAAGkL,EAAKlL,KAAK,OAAA+C,QAAAC,QAIjBkI,EAAKR,MAAQ,GAAC,OAAQ1K,IAExB2C,KAAA,WAAA,IAAA+P,2BACIhC,EAAaxF,EAAK+D,YAAYxN,IAAIzB,EAAM,CAC5CkP,MAAM,EACNK,KAAAA,IACoBxM,QAAAC,QAEhBkI,EAAK+D,YAAY6C,OAAO,CAC5B9R,KAAAA,EACAuC,KAAAA,EACAmO,WAAAA,EACA/U,QAASuP,EAAKqJ,KAGhB5R,KAAA,WAAAuI,EAAK0K,GAAa,wBAbhB,IACIlF,sCADJkB,CAAA,EAcY,WAOY,IAAtBrY,EAAOG,YACTwR,EAAKmL,MAAMrW,EAAKyC,KAAK3C,IAAIxB,KAE5B,GAlED,GAAAoU,GAAAA,EAAA/P,KAAA,OAAA+P,EAAA/P,KAAA,WAAA,EAAA,EAAA,EAAAuI,EAAAnS,KASA,GATAmS,EAAKlL,KAAKyC,KAAK3C,IAAGsJ,EAAA,CAChB9K,KAAAA,GACG4M,EAAKpL,IAAIgH,MAAMxI,IAEpB4M,EAAKlL,KAAKa,QAAUA,EACpBqK,EAAKlL,KAAKgN,MAAQA,EAId9B,EAAKxC,MAAM0C,IAAI9M,GACjBiE,EAAO2I,EAAKxC,MAAMhH,OAAOpD,EAAM,CAAE2C,OAAQ,UAAWsL,YAC/C,CACL,IAAMyK,EAAc9L,EAAKqB,QACvBjO,EACA4M,EAAKvB,QACLuB,EAAK+L,eAAenB,KAAI5K,EAAOrK,GAC/BqK,EAAKxC,MACLwC,EAAKvC,SAIPqO,EAAYrU,KAAK,SAAAC,GAEXA,EAAS9C,IAAIxB,OAASA,GACxB4M,EAAK3P,QAAQyF,IAAI4B,EAAS9C,IAAIxB,KAAMuC,EAAS,UAEjD,GAEA0B,EAAO2I,EAAKxC,MAAMrH,IAAI/C,EAAM0Y,EAAa,QAAS,WAAWzK,OAC9D,CAAA,IAGGuG,EAAA,WAAA,GAAA5H,EAAK+D,YAAYiI,WAAU,OAAAnU,QAAAC,QACvB2P,EAAepQ,EAAM2I,EAAKlL,OAAK2C,KAAA,WAAA,EAAA,CADnC,GACmC,OAAAI,QAAAC,QAAA8P,GAAAA,EAAAnQ,KAAAmQ,EAAAnQ,KAAAoQ,GAAAA,IAkCxC,CAAA,MAAAjS,GAAA,OAAAiC,QAAAE,OAAAnC,EAAA,CAAA,EAAAjH,EAOMod,eAAA,SAAepW,GAEpB9H,KAAKkW,YAAYuH,WAAY,EAE7B,IAAOlY,EAAAA,GAAAA,MAAAA,KAAAA,UAAAA,GAAAA,EAAMsE,EAAAA,GAAAA,EACbuU,EAAA,GAAYlW,EAAGlI,KAAK2P,MAAM+D,UAAUnO,GAIpC,OAHAvF,KAAK2P,MAAY,OAACpK,GAIhBvF,KAAKub,IACyD,IAA9Dvb,KAAKub,EAAoBzT,EAASI,EAAQ3C,EAAMsE,IAMnC,UAAX3B,GACFlI,KAAKsd,MAAM/X,IALJ,CAQX,EAACzE,EAKMud,SAAA,SAAS9Y,GAAY,IAAAgN,EAAAvS,KAG1BuF,EAAOvF,KAAK+G,IAAIuX,gBAAgB/Y,GAI5BvF,KAAK2P,MAAM0C,IAAI9M,IAInBvF,KAAK2P,MAAMrH,IACT/C,EACAvF,KAAKwT,QACHjO,EACAvF,KAAK4Q,QACL5Q,KAAKke,eAAenB,KAAK/c,KAAM,SAC/BA,KAAK2P,MACL3P,KAAK4P,SACN,MAAO,SAAC5O,GACPuR,EAAKR,OAAO/Q,MAAMA,EACpB,GACA,WACA,UAEJ,EAACF,EAKOoc,EAAA,YAEsB,IAAxBld,KAAKob,iBACPzX,SAAS4a,iBAAiB,YAAave,KAAK8c,GAC5CnZ,SAAS4a,iBAAiB,aAAcve,KAAK8c,IAE/CnZ,SAAS4a,iBAAiB,QAASve,KAAKgd,GACxC5V,OAAOmX,iBAAiB,WAAYve,KAAKid,EAC3C,EAACnc,EAKOuc,EAAA,YAEsB,IAAxBrd,KAAKob,iBACPzX,SAAS6a,oBAAoB,YAAaxe,KAAK8c,GAC/CnZ,SAAS6a,oBAAoB,aAAcxe,KAAK8c,IAElDnZ,SAAS6a,oBAAoB,QAASxe,KAAKgd,GAC3C5V,OAAOoX,oBAAoB,WAAYxe,KAAKid,EAC9C,EAQQH,EAAAA,EAAA,SAAa/U,GACnB,IAAA0K,EAAAzS,KAAUye,EAAGze,KAAK0e,EAAgB3W,GAElC,GAAK0W,EAAL,CAIA,IAAMlZ,EAAOvF,KAAK+G,IAAIuX,gBAAgBte,KAAK6C,IAAIuC,QAAQqZ,IAEnDze,KAAK2C,QAAQuQ,UAAU3N,IAKvBvF,KAAK2P,MAAM0C,IAAI9M,IAInBvF,KAAK2P,MAAMrH,IACT/C,EACAvF,KAAKwT,QACHjO,EACAvF,KAAK4Q,QACL5Q,KAAKke,eAAenB,KAAK/c,KAAMye,GAC/Bze,KAAK2P,MACL3P,KAAK4P,SACA,MAAC,SAAC5O,GACPyR,EAAKV,OAAO/Q,MAAMA,EACpB,GACA,QACA,UAzBD,CA2BH,EASQgc,EAAAA,EAAA,SAAajV,GAGnB,IAAU0W,EAAGze,KAAK0e,EAAgB3W,GAElC,GAAK0W,EAAL,CAIA,GAAIze,KAAKkW,YAAYuH,WAAazd,KAAKqb,eAIrC,OAHAtT,EAAE+V,sBACF/V,EAAE8V,kBAKJ7d,KAAKyb,EAAa1T,EAElB/H,KAAKwd,GAAGxd,KAAK6C,IAAIuC,QAAQqZ,GAAOA,EAAM1W,EAXrC,CAYH,EAACjH,EAQOmc,EAAA,SAAelV,GACrB/H,KAAKwd,GAAGxd,KAAK+G,IAAI3B,UAAW,WAAY2C,EAC1C,EAQQ2W,EAAAA,EAAA,SAAgB3W,GAGtB,IAFA,IAAM5E,EAAG4E,EAAEuI,OAEJnN,IAAOnD,KAAK6C,IAAIuC,QAAQjC,IAC7BA,EAAMA,EAAmBsB,WAI3B,GAAKtB,IAAMnD,KAAK2C,QAAQgT,UAAUxS,EAAI4E,EAAG/H,KAAK6C,IAAIuC,QAAQjC,IAI1D,OACFA,CAAA,EAOQ0Z,EAAAA,EAAA,WACN,IAAUtX,EAAGvF,KAAK+G,IAAI3B,UACT6S,EAAG,CACd1V,UAAWvC,KAAK6C,IAAIuB,eACpBuF,KAAM3J,KAAK6C,IAAIiB,UACfrB,UAAWzC,KAAK6C,IAAIoC,eACpB8B,IAAGsJ,EAAA,CACD9K,KAAAA,GACGvF,KAAK+G,IAAIgH,MAAMxI,KAItBvF,KAAKsb,EAAQ,CACXrD,QAAAA,EACAhE,WAAOrH,EACPlD,KAAI2G,EAAA,GAAOrQ,KAAK8a,YAChBhT,aAAS8E,GAGX5M,KAAK2R,MAAK,GAAI,QAAS3R,KAAKiH,KAC9B,EAnYAqC,EAAAqV,EAAA,CAAA,CAAApV,IAAA,OAAAb,IAAA,WACE,OAAW1I,KAACsb,CACd,GAEA,CAAA/R,IAAA,UAAAb,IAAA,WACE,OAAW1I,KAACwb,CACd,KAgYFmD,CAAA,CAtlBS3D"}