{"version":3,"file":"D6Preb8e.mjs","sources":["../../../../../../node_modules/svelte/src/runtime/internal/dev.js","../../../../../../node_modules/@sveltejs/kit/src/utils/url.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/hash.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/utils.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/client/fetcher.js","../../../../../../node_modules/@sveltejs/kit/src/utils/routing.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/client/parse.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/client/session-storage.js","../../../../../../node_modules/svelte/src/runtime/store/index.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/client/constants.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/client/utils.js","../../../../../../node_modules/devalue/src/base64.js","../../../../../../node_modules/devalue/src/constants.js","../../../../../../node_modules/devalue/src/parse.js","../../../../../../node_modules/@sveltejs/kit/src/utils/exports.js","../../../../../../node_modules/@sveltejs/kit/src/utils/array.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/control.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/shared.js","../../../../../../node_modules/@sveltejs/kit/src/utils/error.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/client/state.svelte.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/pathname.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/client/client.js"],"sourcesContent":["import {\n\tcustom_event,\n\tappend,\n\tappend_hydration,\n\tinsert,\n\tinsert_hydration,\n\tdetach,\n\tlisten,\n\tattr\n} from './dom.js';\nimport { SvelteComponent } from './Component.js';\nimport { is_void } from '../../shared/utils/names.js';\nimport { VERSION } from '../../shared/version.js';\nimport { contenteditable_truthy_values } from './utils.js';\nimport { ensure_array_like } from './each.js';\n\n/**\n * @template T\n * @param {string} type\n * @param {T} [detail]\n * @returns {void}\n */\nexport function dispatch_dev(type, detail) {\n\tdocument.dispatchEvent(custom_event(type, { version: VERSION, ...detail }, { bubbles: true }));\n}\n\n/**\n * @param {Node} target\n * @param {Node} node\n * @returns {void}\n */\nexport function append_dev(target, node) {\n\tdispatch_dev('SvelteDOMInsert', { target, node });\n\tappend(target, node);\n}\n\n/**\n * @param {Node} target\n * @param {Node} node\n * @returns {void}\n */\nexport function append_hydration_dev(target, node) {\n\tdispatch_dev('SvelteDOMInsert', { target, node });\n\tappend_hydration(target, node);\n}\n\n/**\n * @param {Node} target\n * @param {Node} node\n * @param {Node} [anchor]\n * @returns {void}\n */\nexport function insert_dev(target, node, anchor) {\n\tdispatch_dev('SvelteDOMInsert', { target, node, anchor });\n\tinsert(target, node, anchor);\n}\n\n/** @param {Node} target\n * @param {Node} node\n * @param {Node} [anchor]\n * @returns {void}\n */\nexport function insert_hydration_dev(target, node, anchor) {\n\tdispatch_dev('SvelteDOMInsert', { target, node, anchor });\n\tinsert_hydration(target, node, anchor);\n}\n\n/**\n * @param {Node} node\n * @returns {void}\n */\nexport function detach_dev(node) {\n\tdispatch_dev('SvelteDOMRemove', { node });\n\tdetach(node);\n}\n\n/**\n * @param {Node} before\n * @param {Node} after\n * @returns {void}\n */\nexport function detach_between_dev(before, after) {\n\twhile (before.nextSibling && before.nextSibling !== after) {\n\t\tdetach_dev(before.nextSibling);\n\t}\n}\n\n/**\n * @param {Node} after\n * @returns {void}\n */\nexport function detach_before_dev(after) {\n\twhile (after.previousSibling) {\n\t\tdetach_dev(after.previousSibling);\n\t}\n}\n\n/**\n * @param {Node} before\n * @returns {void}\n */\nexport function detach_after_dev(before) {\n\twhile (before.nextSibling) {\n\t\tdetach_dev(before.nextSibling);\n\t}\n}\n\n/**\n * @param {Node} node\n * @param {string} event\n * @param {EventListenerOrEventListenerObject} handler\n * @param {boolean | AddEventListenerOptions | EventListenerOptions} [options]\n * @param {boolean} [has_prevent_default]\n * @param {boolean} [has_stop_propagation]\n * @param {boolean} [has_stop_immediate_propagation]\n * @returns {() => void}\n */\nexport function listen_dev(\n\tnode,\n\tevent,\n\thandler,\n\toptions,\n\thas_prevent_default,\n\thas_stop_propagation,\n\thas_stop_immediate_propagation\n) {\n\tconst modifiers =\n\t\toptions === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];\n\tif (has_prevent_default) modifiers.push('preventDefault');\n\tif (has_stop_propagation) modifiers.push('stopPropagation');\n\tif (has_stop_immediate_propagation) modifiers.push('stopImmediatePropagation');\n\tdispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });\n\tconst dispose = listen(node, event, handler, options);\n\treturn () => {\n\t\tdispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });\n\t\tdispose();\n\t};\n}\n\n/**\n * @param {Element} node\n * @param {string} attribute\n * @param {string} [value]\n * @returns {void}\n */\nexport function attr_dev(node, attribute, value) {\n\tattr(node, attribute, value);\n\tif (value == null) dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });\n\telse dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });\n}\n\n/**\n * @param {Element} node\n * @param {string} property\n * @param {any} [value]\n * @returns {void}\n */\nexport function prop_dev(node, property, value) {\n\tnode[property] = value;\n\tdispatch_dev('SvelteDOMSetProperty', { node, property, value });\n}\n\n/**\n * @param {HTMLElement} node\n * @param {string} property\n * @param {any} [value]\n * @returns {void}\n */\nexport function dataset_dev(node, property, value) {\n\tnode.dataset[property] = value;\n\tdispatch_dev('SvelteDOMSetDataset', { node, property, value });\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @returns {void}\n */\nexport function set_data_dev(text, data) {\n\tdata = '' + data;\n\tif (text.data === data) return;\n\tdispatch_dev('SvelteDOMSetData', { node: text, data });\n\ttext.data = /** @type {string} */ (data);\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @returns {void}\n */\nexport function set_data_contenteditable_dev(text, data) {\n\tdata = '' + data;\n\tif (text.wholeText === data) return;\n\tdispatch_dev('SvelteDOMSetData', { node: text, data });\n\ttext.data = /** @type {string} */ (data);\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @param {string} attr_value\n * @returns {void}\n */\nexport function set_data_maybe_contenteditable_dev(text, data, attr_value) {\n\tif (~contenteditable_truthy_values.indexOf(attr_value)) {\n\t\tset_data_contenteditable_dev(text, data);\n\t} else {\n\t\tset_data_dev(text, data);\n\t}\n}\n\nexport function ensure_array_like_dev(arg) {\n\tif (\n\t\ttypeof arg !== 'string' &&\n\t\t!(arg && typeof arg === 'object' && 'length' in arg) &&\n\t\t!(typeof Symbol === 'function' && arg && Symbol.iterator in arg)\n\t) {\n\t\tthrow new Error('{#each} only works with iterable values.');\n\t}\n\treturn ensure_array_like(arg);\n}\n\n/**\n * @returns {void} */\nexport function validate_slots(name, slot, keys) {\n\tfor (const slot_key of Object.keys(slot)) {\n\t\tif (!~keys.indexOf(slot_key)) {\n\t\t\tconsole.warn(`<${name}> received an unexpected slot \"${slot_key}\".`);\n\t\t}\n\t}\n}\n\n/**\n * @param {unknown} tag\n * @returns {void}\n */\nexport function validate_dynamic_element(tag) {\n\tconst is_string = typeof tag === 'string';\n\tif (tag && !is_string) {\n\t\tthrow new Error(' expects \"this\" attribute to be a string.');\n\t}\n}\n\n/**\n * @param {undefined | string} tag\n * @returns {void}\n */\nexport function validate_void_dynamic_element(tag) {\n\tif (tag && is_void(tag)) {\n\t\tconsole.warn(` is self-closing and cannot have content.`);\n\t}\n}\n\nexport function construct_svelte_component_dev(component, props) {\n\tconst error_message = 'this={...} of should specify a Svelte component.';\n\ttry {\n\t\tconst instance = new component(props);\n\t\tif (!instance.$$ || !instance.$set || !instance.$on || !instance.$destroy) {\n\t\t\tthrow new Error(error_message);\n\t\t}\n\t\treturn instance;\n\t} catch (err) {\n\t\tconst { message } = err;\n\t\tif (typeof message === 'string' && message.indexOf('is not a constructor') !== -1) {\n\t\t\tthrow new Error(error_message);\n\t\t} else {\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\n/**\n * Base class for Svelte components with some minor dev-enhancements. Used when dev=true.\n *\n * Can be used to create strongly typed Svelte components.\n *\n * #### Example:\n *\n * You have component library on npm called `component-library`, from which\n * you export a component called `MyComponent`. For Svelte+TypeScript users,\n * you want to provide typings. Therefore you create a `index.d.ts`:\n * ```ts\n * import { SvelteComponent } from \"svelte\";\n * export class MyComponent extends SvelteComponent<{foo: string}> {}\n * ```\n * Typing this makes it possible for IDEs like VS Code with the Svelte extension\n * to provide intellisense and to use the component like this in a Svelte file\n * with TypeScript:\n * ```svelte\n * \n * \n * ```\n * @template {Record} [Props=any]\n * @template {Record} [Events=any]\n * @template {Record} [Slots=any]\n * @extends {SvelteComponent}\n */\nexport class SvelteComponentDev extends SvelteComponent {\n\t/**\n\t * For type checking capabilities only.\n\t * Does not exist at runtime.\n\t * ### DO NOT USE!\n\t *\n\t * @type {Props}\n\t */\n\t$$prop_def;\n\t/**\n\t * For type checking capabilities only.\n\t * Does not exist at runtime.\n\t * ### DO NOT USE!\n\t *\n\t * @type {Events}\n\t */\n\t$$events_def;\n\t/**\n\t * For type checking capabilities only.\n\t * Does not exist at runtime.\n\t * ### DO NOT USE!\n\t *\n\t * @type {Slots}\n\t */\n\t$$slot_def;\n\n\t/** @param {import('./public.js').ComponentConstructorOptions} options */\n\tconstructor(options) {\n\t\tif (!options || (!options.target && !options.$$inline)) {\n\t\t\tthrow new Error(\"'target' is a required option\");\n\t\t}\n\t\tsuper();\n\t}\n\n\t/** @returns {void} */\n\t$destroy() {\n\t\tsuper.$destroy();\n\t\tthis.$destroy = () => {\n\t\t\tconsole.warn('Component was already destroyed'); // eslint-disable-line no-console\n\t\t};\n\t}\n\n\t/** @returns {void} */\n\t$capture_state() {}\n\n\t/** @returns {void} */\n\t$inject_state() {}\n}\n/**\n * @template {Record} [Props=any]\n * @template {Record} [Events=any]\n * @template {Record} [Slots=any]\n * @deprecated Use `SvelteComponent` instead. See PR for more information: https://github.com/sveltejs/svelte/pull/8512\n * @extends {SvelteComponentDev}\n */\nexport class SvelteComponentTyped extends SvelteComponentDev {}\n\n/** @returns {() => void} */\nexport function loop_guard(timeout) {\n\tconst start = Date.now();\n\treturn () => {\n\t\tif (Date.now() - start > timeout) {\n\t\t\tthrow new Error('Infinite loop detected');\n\t\t}\n\t};\n}\n","import { BROWSER, DEV } from 'esm-env';\n\n/**\n * Matches a URI scheme. See https://www.rfc-editor.org/rfc/rfc3986#section-3.1\n * @type {RegExp}\n */\nexport const SCHEME = /^[a-z][a-z\\d+\\-.]+:/i;\n\nconst internal = new URL('sveltekit-internal://');\n\n/**\n * @param {string} base\n * @param {string} path\n */\nexport function resolve(base, path) {\n\t// special case\n\tif (path[0] === '/' && path[1] === '/') return path;\n\n\tlet url = new URL(base, internal);\n\turl = new URL(path, url);\n\n\treturn url.protocol === internal.protocol ? url.pathname + url.search + url.hash : url.href;\n}\n\n/** @param {string} path */\nexport function is_root_relative(path) {\n\treturn path[0] === '/' && path[1] !== '/';\n}\n\n/**\n * @param {string} path\n * @param {import('types').TrailingSlash} trailing_slash\n */\nexport function normalize_path(path, trailing_slash) {\n\tif (path === '/' || trailing_slash === 'ignore') return path;\n\n\tif (trailing_slash === 'never') {\n\t\treturn path.endsWith('/') ? path.slice(0, -1) : path;\n\t} else if (trailing_slash === 'always' && !path.endsWith('/')) {\n\t\treturn path + '/';\n\t}\n\n\treturn path;\n}\n\n/**\n * Decode pathname excluding %25 to prevent further double decoding of params\n * @param {string} pathname\n */\nexport function decode_pathname(pathname) {\n\treturn pathname.split('%25').map(decodeURI).join('%25');\n}\n\n/** @param {Record} params */\nexport function decode_params(params) {\n\tfor (const key in params) {\n\t\t// input has already been decoded by decodeURI\n\t\t// now handle the rest\n\t\tparams[key] = decodeURIComponent(params[key]);\n\t}\n\n\treturn params;\n}\n\n/**\n * The error when a URL is malformed is not very helpful, so we augment it with the URI\n * @param {string} uri\n */\nexport function decode_uri(uri) {\n\ttry {\n\t\treturn decodeURI(uri);\n\t} catch (e) {\n\t\tif (e instanceof Error) {\n\t\t\te.message = `Failed to decode URI: ${uri}\\n` + e.message;\n\t\t}\n\t\tthrow e;\n\t}\n}\n\n/**\n * Returns everything up to the first `#` in a URL\n * @param {{href: string}} url_like\n */\nexport function strip_hash({ href }) {\n\treturn href.split('#')[0];\n}\n\n/**\n * @param {URL} url\n * @param {() => void} callback\n * @param {(search_param: string) => void} search_params_callback\n * @param {boolean} [allow_hash]\n */\nexport function make_trackable(url, callback, search_params_callback, allow_hash = false) {\n\tconst tracked = new URL(url);\n\n\tObject.defineProperty(tracked, 'searchParams', {\n\t\tvalue: new Proxy(tracked.searchParams, {\n\t\t\tget(obj, key) {\n\t\t\t\tif (key === 'get' || key === 'getAll' || key === 'has') {\n\t\t\t\t\treturn (/**@type {string}*/ param) => {\n\t\t\t\t\t\tsearch_params_callback(param);\n\t\t\t\t\t\treturn obj[key](param);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// if they try to access something different from what is in `tracked_search_params_properties`\n\t\t\t\t// we track the whole url (entries, values, keys etc)\n\t\t\t\tcallback();\n\n\t\t\t\tconst value = Reflect.get(obj, key);\n\t\t\t\treturn typeof value === 'function' ? value.bind(obj) : value;\n\t\t\t}\n\t\t}),\n\t\tenumerable: true,\n\t\tconfigurable: true\n\t});\n\n\t/**\n\t * URL properties that could change during the lifetime of the page,\n\t * which excludes things like `origin`\n\t */\n\tconst tracked_url_properties = ['href', 'pathname', 'search', 'toString', 'toJSON'];\n\tif (allow_hash) tracked_url_properties.push('hash');\n\n\tfor (const property of tracked_url_properties) {\n\t\tObject.defineProperty(tracked, property, {\n\t\t\tget() {\n\t\t\t\tcallback();\n\t\t\t\t// @ts-expect-error\n\t\t\t\treturn url[property];\n\t\t\t},\n\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true\n\t\t});\n\t}\n\n\tif (!BROWSER) {\n\t\t// @ts-ignore\n\t\ttracked[Symbol.for('nodejs.util.inspect.custom')] = (depth, opts, inspect) => {\n\t\t\treturn inspect(url, opts);\n\t\t};\n\n\t\t// @ts-ignore\n\t\ttracked.searchParams[Symbol.for('nodejs.util.inspect.custom')] = (depth, opts, inspect) => {\n\t\t\treturn inspect(url.searchParams, opts);\n\t\t};\n\t}\n\n\tif ((DEV || !BROWSER) && !allow_hash) {\n\t\tdisable_hash(tracked);\n\t}\n\n\treturn tracked;\n}\n\n/**\n * Disallow access to `url.hash` on the server and in `load`\n * @param {URL} url\n */\nfunction disable_hash(url) {\n\tallow_nodejs_console_log(url);\n\n\tObject.defineProperty(url, 'hash', {\n\t\tget() {\n\t\t\tthrow new Error(\n\t\t\t\t'Cannot access event.url.hash. Consider using `page.url.hash` inside a component instead'\n\t\t\t);\n\t\t}\n\t});\n}\n\n/**\n * Disallow access to `url.search` and `url.searchParams` during prerendering\n * @param {URL} url\n */\nexport function disable_search(url) {\n\tallow_nodejs_console_log(url);\n\n\tfor (const property of ['search', 'searchParams']) {\n\t\tObject.defineProperty(url, property, {\n\t\t\tget() {\n\t\t\t\tthrow new Error(`Cannot access url.${property} on a page with prerendering enabled`);\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Allow URL to be console logged, bypassing disabled properties.\n * @param {URL} url\n */\nfunction allow_nodejs_console_log(url) {\n\tif (!BROWSER) {\n\t\t// @ts-ignore\n\t\turl[Symbol.for('nodejs.util.inspect.custom')] = (depth, opts, inspect) => {\n\t\t\treturn inspect(new URL(url), opts);\n\t\t};\n\t}\n}\n","/**\n * Hash using djb2\n * @param {import('types').StrictBody[]} values\n */\nexport function hash(...values) {\n\tlet hash = 5381;\n\n\tfor (const value of values) {\n\t\tif (typeof value === 'string') {\n\t\t\tlet i = value.length;\n\t\t\twhile (i) hash = (hash * 33) ^ value.charCodeAt(--i);\n\t\t} else if (ArrayBuffer.isView(value)) {\n\t\t\tconst buffer = new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n\t\t\tlet i = buffer.length;\n\t\t\twhile (i) hash = (hash * 33) ^ buffer[--i];\n\t\t} else {\n\t\t\tthrow new TypeError('value must be a string or TypedArray');\n\t\t}\n\t}\n\n\treturn (hash >>> 0).toString(36);\n}\n","/**\n * @param {string} text\n * @returns {ArrayBufferLike}\n */\nexport function b64_decode(text) {\n\tconst d = atob(text);\n\n\tconst u8 = new Uint8Array(d.length);\n\n\tfor (let i = 0; i < d.length; i++) {\n\t\tu8[i] = d.charCodeAt(i);\n\t}\n\n\treturn u8.buffer;\n}\n\n/**\n * @param {ArrayBuffer} buffer\n * @returns {string}\n */\nexport function b64_encode(buffer) {\n\tif (globalThis.Buffer) {\n\t\treturn Buffer.from(buffer).toString('base64');\n\t}\n\n\tconst little_endian = new Uint8Array(new Uint16Array([1]).buffer)[0] > 0;\n\n\t// The Uint16Array(Uint8Array(...)) ensures the code points are padded with 0's\n\treturn btoa(\n\t\tnew TextDecoder(little_endian ? 'utf-16le' : 'utf-16be').decode(\n\t\t\tnew Uint16Array(new Uint8Array(buffer))\n\t\t)\n\t);\n}\n\n/**\n * Like node's path.relative, but without using node\n * @param {string} from\n * @param {string} to\n */\nexport function get_relative_path(from, to) {\n\tconst from_parts = from.split(/[/\\\\]/);\n\tconst to_parts = to.split(/[/\\\\]/);\n\tfrom_parts.pop(); // get dirname\n\n\twhile (from_parts[0] === to_parts[0]) {\n\t\tfrom_parts.shift();\n\t\tto_parts.shift();\n\t}\n\n\tlet i = from_parts.length;\n\twhile (i--) from_parts[i] = '..';\n\n\treturn from_parts.concat(to_parts).join('/');\n}\n","import { BROWSER, DEV } from 'esm-env';\nimport { hash } from '../hash.js';\nimport { b64_decode } from '../utils.js';\n\nlet loading = 0;\n\n/** @type {typeof fetch} */\nconst native_fetch = BROWSER ? window.fetch : /** @type {any} */ (() => {});\n\nexport function lock_fetch() {\n\tloading += 1;\n}\n\nexport function unlock_fetch() {\n\tloading -= 1;\n}\n\nif (DEV && BROWSER) {\n\tlet can_inspect_stack_trace = false;\n\n\t// detect whether async stack traces work\n\t// eslint-disable-next-line @typescript-eslint/require-await\n\tconst check_stack_trace = async () => {\n\t\tconst stack = /** @type {string} */ (new Error().stack);\n\t\tcan_inspect_stack_trace = stack.includes('check_stack_trace');\n\t};\n\n\tvoid check_stack_trace();\n\n\t/**\n\t * @param {RequestInfo | URL} input\n\t * @param {RequestInit & Record | undefined} init\n\t */\n\twindow.fetch = (input, init) => {\n\t\t// Check if fetch was called via load_node. the lock method only checks if it was called at the\n\t\t// same time, but not necessarily if it was called from `load`.\n\t\t// We use just the filename as the method name sometimes does not appear on the CI.\n\t\tconst url = input instanceof Request ? input.url : input.toString();\n\t\tconst stack_array = /** @type {string} */ (new Error().stack).split('\\n');\n\t\t// We need to do a cutoff because Safari and Firefox maintain the stack\n\t\t// across events and for example traces a `fetch` call triggered from a button\n\t\t// back to the creation of the event listener and the element creation itself,\n\t\t// where at some point client.js will show up, leading to false positives.\n\t\tconst cutoff = stack_array.findIndex((a) => a.includes('load@') || a.includes('at load'));\n\t\tconst stack = stack_array.slice(0, cutoff + 2).join('\\n');\n\n\t\tconst in_load_heuristic = can_inspect_stack_trace\n\t\t\t? stack.includes('src/runtime/client/client.js')\n\t\t\t: loading;\n\n\t\t// This flag is set in initial_fetch and subsequent_fetch\n\t\tconst used_kit_fetch = init?.__sveltekit_fetch__;\n\n\t\tif (in_load_heuristic && !used_kit_fetch) {\n\t\t\tconsole.warn(\n\t\t\t\t`Loading ${url} using \\`window.fetch\\`. For best results, use the \\`fetch\\` that is passed to your \\`load\\` function: https://svelte.dev/docs/kit/load#making-fetch-requests`\n\t\t\t);\n\t\t}\n\n\t\tconst method = input instanceof Request ? input.method : init?.method || 'GET';\n\n\t\tif (method !== 'GET') {\n\t\t\tcache.delete(build_selector(input));\n\t\t}\n\n\t\treturn native_fetch(input, init);\n\t};\n} else if (BROWSER) {\n\twindow.fetch = (input, init) => {\n\t\tconst method = input instanceof Request ? input.method : init?.method || 'GET';\n\n\t\tif (method !== 'GET') {\n\t\t\tcache.delete(build_selector(input));\n\t\t}\n\n\t\treturn native_fetch(input, init);\n\t};\n}\n\nconst cache = new Map();\n\n/**\n * Should be called on the initial run of load functions that hydrate the page.\n * Saves any requests with cache-control max-age to the cache.\n * @param {URL | string} resource\n * @param {RequestInit} [opts]\n */\nexport function initial_fetch(resource, opts) {\n\tconst selector = build_selector(resource, opts);\n\n\tconst script = document.querySelector(selector);\n\tif (script?.textContent) {\n\t\tlet { body, ...init } = JSON.parse(script.textContent);\n\n\t\tconst ttl = script.getAttribute('data-ttl');\n\t\tif (ttl) cache.set(selector, { body, init, ttl: 1000 * Number(ttl) });\n\t\tconst b64 = script.getAttribute('data-b64');\n\t\tif (b64 !== null) {\n\t\t\t// Can't use native_fetch('data:...;base64,${body}')\n\t\t\t// csp can block the request\n\t\t\tbody = b64_decode(body);\n\t\t}\n\n\t\treturn Promise.resolve(new Response(body, init));\n\t}\n\n\treturn DEV ? dev_fetch(resource, opts) : window.fetch(resource, opts);\n}\n\n/**\n * Tries to get the response from the cache, if max-age allows it, else does a fetch.\n * @param {URL | string} resource\n * @param {string} resolved\n * @param {RequestInit} [opts]\n */\nexport function subsequent_fetch(resource, resolved, opts) {\n\tif (cache.size > 0) {\n\t\tconst selector = build_selector(resource, opts);\n\t\tconst cached = cache.get(selector);\n\t\tif (cached) {\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/Request/cache#value\n\t\t\tif (\n\t\t\t\tperformance.now() < cached.ttl &&\n\t\t\t\t['default', 'force-cache', 'only-if-cached', undefined].includes(opts?.cache)\n\t\t\t) {\n\t\t\t\treturn new Response(cached.body, cached.init);\n\t\t\t}\n\n\t\t\tcache.delete(selector);\n\t\t}\n\t}\n\n\treturn DEV ? dev_fetch(resolved, opts) : window.fetch(resolved, opts);\n}\n\n/**\n * @param {RequestInfo | URL} resource\n * @param {RequestInit & Record | undefined} opts\n */\nexport function dev_fetch(resource, opts) {\n\tconst patched_opts = { ...opts };\n\t// This assigns the __sveltekit_fetch__ flag and makes it non-enumerable\n\tObject.defineProperty(patched_opts, '__sveltekit_fetch__', {\n\t\tvalue: true,\n\t\twritable: true,\n\t\tconfigurable: true\n\t});\n\treturn window.fetch(resource, patched_opts);\n}\n\n/**\n * Build the cache key for a given request\n * @param {URL | RequestInfo} resource\n * @param {RequestInit} [opts]\n */\nfunction build_selector(resource, opts) {\n\tconst url = JSON.stringify(resource instanceof Request ? resource.url : resource);\n\n\tlet selector = `script[data-sveltekit-fetched][data-url=${url}]`;\n\n\tif (opts?.headers || opts?.body) {\n\t\t/** @type {import('types').StrictBody[]} */\n\t\tconst values = [];\n\n\t\tif (opts.headers) {\n\t\t\tvalues.push([...new Headers(opts.headers)].join(','));\n\t\t}\n\n\t\tif (opts.body && (typeof opts.body === 'string' || ArrayBuffer.isView(opts.body))) {\n\t\t\tvalues.push(opts.body);\n\t\t}\n\n\t\tselector += `[data-hash=\"${hash(...values)}\"]`;\n\t}\n\n\treturn selector;\n}\n","import { BROWSER } from 'esm-env';\n\nconst param_pattern = /^(\\[)?(\\.\\.\\.)?(\\w+)(?:=(\\w+))?(\\])?$/;\n\n/**\n * Creates the regex pattern, extracts parameter names, and generates types for a route\n * @param {string} id\n */\nexport function parse_route_id(id) {\n\t/** @type {import('types').RouteParam[]} */\n\tconst params = [];\n\n\tconst pattern =\n\t\tid === '/'\n\t\t\t? /^\\/$/\n\t\t\t: new RegExp(\n\t\t\t\t\t`^${get_route_segments(id)\n\t\t\t\t\t\t.map((segment) => {\n\t\t\t\t\t\t\t// special case — /[...rest]/ could contain zero segments\n\t\t\t\t\t\t\tconst rest_match = /^\\[\\.\\.\\.(\\w+)(?:=(\\w+))?\\]$/.exec(segment);\n\t\t\t\t\t\t\tif (rest_match) {\n\t\t\t\t\t\t\t\tparams.push({\n\t\t\t\t\t\t\t\t\tname: rest_match[1],\n\t\t\t\t\t\t\t\t\tmatcher: rest_match[2],\n\t\t\t\t\t\t\t\t\toptional: false,\n\t\t\t\t\t\t\t\t\trest: true,\n\t\t\t\t\t\t\t\t\tchained: true\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\treturn '(?:/(.*))?';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// special case — /[[optional]]/ could contain zero segments\n\t\t\t\t\t\t\tconst optional_match = /^\\[\\[(\\w+)(?:=(\\w+))?\\]\\]$/.exec(segment);\n\t\t\t\t\t\t\tif (optional_match) {\n\t\t\t\t\t\t\t\tparams.push({\n\t\t\t\t\t\t\t\t\tname: optional_match[1],\n\t\t\t\t\t\t\t\t\tmatcher: optional_match[2],\n\t\t\t\t\t\t\t\t\toptional: true,\n\t\t\t\t\t\t\t\t\trest: false,\n\t\t\t\t\t\t\t\t\tchained: true\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\treturn '(?:/([^/]+))?';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!segment) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst parts = segment.split(/\\[(.+?)\\](?!\\])/);\n\t\t\t\t\t\t\tconst result = parts\n\t\t\t\t\t\t\t\t.map((content, i) => {\n\t\t\t\t\t\t\t\t\tif (i % 2) {\n\t\t\t\t\t\t\t\t\t\tif (content.startsWith('x+')) {\n\t\t\t\t\t\t\t\t\t\t\treturn escape(String.fromCharCode(parseInt(content.slice(2), 16)));\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (content.startsWith('u+')) {\n\t\t\t\t\t\t\t\t\t\t\treturn escape(\n\t\t\t\t\t\t\t\t\t\t\t\tString.fromCharCode(\n\t\t\t\t\t\t\t\t\t\t\t\t\t...content\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.slice(2)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.split('-')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.map((code) => parseInt(code, 16))\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// We know the match cannot be null in the browser because manifest generation\n\t\t\t\t\t\t\t\t\t\t// would have invoked this during build and failed if we hit an invalid\n\t\t\t\t\t\t\t\t\t\t// param/matcher name with non-alphanumeric character.\n\t\t\t\t\t\t\t\t\t\tconst match = /** @type {RegExpExecArray} */ (param_pattern.exec(content));\n\t\t\t\t\t\t\t\t\t\tif (!BROWSER && !match) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t\t\t`Invalid param: ${content}. Params and matcher names can only have underscores and alphanumeric characters.`\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tconst [, is_optional, is_rest, name, matcher] = match;\n\t\t\t\t\t\t\t\t\t\t// It's assumed that the following invalid route id cases are already checked\n\t\t\t\t\t\t\t\t\t\t// - unbalanced brackets\n\t\t\t\t\t\t\t\t\t\t// - optional param following rest param\n\n\t\t\t\t\t\t\t\t\t\tparams.push({\n\t\t\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\t\t\t\t\toptional: !!is_optional,\n\t\t\t\t\t\t\t\t\t\t\trest: !!is_rest,\n\t\t\t\t\t\t\t\t\t\t\tchained: is_rest ? i === 1 && parts[0] === '' : false\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\treturn is_rest ? '(.*?)' : is_optional ? '([^/]*)?' : '([^/]+?)';\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturn escape(content);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.join('');\n\n\t\t\t\t\t\t\treturn '/' + result;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join('')}/?$`\n\t\t\t\t);\n\n\treturn { pattern, params };\n}\n\nconst optional_param_regex = /\\/\\[\\[\\w+?(?:=\\w+)?\\]\\]/;\n\n/**\n * Removes optional params from a route ID.\n * @param {string} id\n * @returns The route id with optional params removed\n */\nexport function remove_optional_params(id) {\n\treturn id.replace(optional_param_regex, '');\n}\n\n/**\n * Returns `false` for `(group)` segments\n * @param {string} segment\n */\nfunction affects_path(segment) {\n\treturn !/^\\([^)]+\\)$/.test(segment);\n}\n\n/**\n * Splits a route id into its segments, removing segments that\n * don't affect the path (i.e. groups). The root route is represented by `/`\n * and will be returned as `['']`.\n * @param {string} route\n * @returns string[]\n */\nexport function get_route_segments(route) {\n\treturn route.slice(1).split('/').filter(affects_path);\n}\n\n/**\n * @param {RegExpMatchArray} match\n * @param {import('types').RouteParam[]} params\n * @param {Record} matchers\n */\nexport function exec(match, params, matchers) {\n\t/** @type {Record} */\n\tconst result = {};\n\n\tconst values = match.slice(1);\n\tconst values_needing_match = values.filter((value) => value !== undefined);\n\n\tlet buffered = 0;\n\n\tfor (let i = 0; i < params.length; i += 1) {\n\t\tconst param = params[i];\n\t\tlet value = values[i - buffered];\n\n\t\t// in the `[[a=b]]/.../[...rest]` case, if one or more optional parameters\n\t\t// weren't matched, roll the skipped values into the rest\n\t\tif (param.chained && param.rest && buffered) {\n\t\t\tvalue = values\n\t\t\t\t.slice(i - buffered, i + 1)\n\t\t\t\t.filter((s) => s)\n\t\t\t\t.join('/');\n\n\t\t\tbuffered = 0;\n\t\t}\n\n\t\t// if `value` is undefined, it means this is an optional or rest parameter\n\t\tif (value === undefined) {\n\t\t\tif (param.rest) result[param.name] = '';\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!param.matcher || matchers[param.matcher](value)) {\n\t\t\tresult[param.name] = value;\n\n\t\t\t// Now that the params match, reset the buffer if the next param isn't the [...rest]\n\t\t\t// and the next value is defined, otherwise the buffer will cause us to skip values\n\t\t\tconst next_param = params[i + 1];\n\t\t\tconst next_value = values[i + 1];\n\t\t\tif (next_param && !next_param.rest && next_param.optional && next_value && param.chained) {\n\t\t\t\tbuffered = 0;\n\t\t\t}\n\n\t\t\t// There are no more params and no more values, but all non-empty values have been matched\n\t\t\tif (\n\t\t\t\t!next_param &&\n\t\t\t\t!next_value &&\n\t\t\t\tObject.keys(result).length === values_needing_match.length\n\t\t\t) {\n\t\t\t\tbuffered = 0;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\t// in the `/[[a=b]]/...` case, if the value didn't satisfy the matcher,\n\t\t// keep track of the number of skipped optional parameters and continue\n\t\tif (param.optional && param.chained) {\n\t\t\tbuffered++;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// otherwise, if the matcher returns `false`, the route did not match\n\t\treturn;\n\t}\n\n\tif (buffered) return;\n\treturn result;\n}\n\n/** @param {string} str */\nfunction escape(str) {\n\treturn (\n\t\tstr\n\t\t\t.normalize()\n\t\t\t// escape [ and ] before escaping other characters, since they are used in the replacements\n\t\t\t.replace(/[[\\]]/g, '\\\\$&')\n\t\t\t// replace %, /, ? and # with their encoded versions because decode_pathname leaves them untouched\n\t\t\t.replace(/%/g, '%25')\n\t\t\t.replace(/\\//g, '%2[Ff]')\n\t\t\t.replace(/\\?/g, '%3[Ff]')\n\t\t\t.replace(/#/g, '%23')\n\t\t\t// escape characters that have special meaning in regex\n\t\t\t.replace(/[.*+?^${}()|\\\\]/g, '\\\\$&')\n\t);\n}\n\nconst basic_param_pattern = /\\[(\\[)?(\\.\\.\\.)?(\\w+?)(?:=(\\w+))?\\]\\]?/g;\n\n/**\n * Populate a route ID with params to resolve a pathname.\n * @example\n * ```js\n * resolveRoute(\n * `/blog/[slug]/[...somethingElse]`,\n * {\n * slug: 'hello-world',\n * somethingElse: 'something/else'\n * }\n * ); // `/blog/hello-world/something/else`\n * ```\n * @param {string} id\n * @param {Record} params\n * @returns {string}\n */\nexport function resolve_route(id, params) {\n\tconst segments = get_route_segments(id);\n\treturn (\n\t\t'/' +\n\t\tsegments\n\t\t\t.map((segment) =>\n\t\t\t\tsegment.replace(basic_param_pattern, (_, optional, rest, name) => {\n\t\t\t\t\tconst param_value = params[name];\n\n\t\t\t\t\t// This is nested so TS correctly narrows the type\n\t\t\t\t\tif (!param_value) {\n\t\t\t\t\t\tif (optional) return '';\n\t\t\t\t\t\tif (rest && param_value !== undefined) return '';\n\t\t\t\t\t\tthrow new Error(`Missing parameter '${name}' in route ${id}`);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (param_value.startsWith('/') || param_value.endsWith('/'))\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Parameter '${name}' in route ${id} cannot start or end with a slash -- this would cause an invalid route like foo//bar`\n\t\t\t\t\t\t);\n\t\t\t\t\treturn param_value;\n\t\t\t\t})\n\t\t\t)\n\t\t\t.filter(Boolean)\n\t\t\t.join('/')\n\t);\n}\n\n/**\n * @param {import('types').SSRNode} node\n * @returns {boolean}\n */\nexport function has_server_load(node) {\n\treturn node.server?.load !== undefined || node.server?.trailingSlash !== undefined;\n}\n","import { exec, parse_route_id } from '../../utils/routing.js';\n\n/**\n * @param {import('./types.js').SvelteKitApp} app\n * @returns {import('types').CSRRoute[]}\n */\nexport function parse({ nodes, server_loads, dictionary, matchers }) {\n\tconst layouts_with_server_load = new Set(server_loads);\n\n\treturn Object.entries(dictionary).map(([id, [leaf, layouts, errors]]) => {\n\t\tconst { pattern, params } = parse_route_id(id);\n\n\t\t/** @type {import('types').CSRRoute} */\n\t\tconst route = {\n\t\t\tid,\n\t\t\t/** @param {string} path */\n\t\t\texec: (path) => {\n\t\t\t\tconst match = pattern.exec(path);\n\t\t\t\tif (match) return exec(match, params, matchers);\n\t\t\t},\n\t\t\terrors: [1, ...(errors || [])].map((n) => nodes[n]),\n\t\t\tlayouts: [0, ...(layouts || [])].map(create_layout_loader),\n\t\t\tleaf: create_leaf_loader(leaf)\n\t\t};\n\n\t\t// bit of a hack, but ensures that layout/error node lists are the same\n\t\t// length, without which the wrong data will be applied if the route\n\t\t// manifest looks like `[[a, b], [c,], d]`\n\t\troute.errors.length = route.layouts.length = Math.max(\n\t\t\troute.errors.length,\n\t\t\troute.layouts.length\n\t\t);\n\n\t\treturn route;\n\t});\n\n\t/**\n\t * @param {number} id\n\t * @returns {[boolean, import('types').CSRPageNodeLoader]}\n\t */\n\tfunction create_leaf_loader(id) {\n\t\t// whether or not the route uses the server data is\n\t\t// encoded using the ones' complement, to save space\n\t\tconst uses_server_data = id < 0;\n\t\tif (uses_server_data) id = ~id;\n\t\treturn [uses_server_data, nodes[id]];\n\t}\n\n\t/**\n\t * @param {number | undefined} id\n\t * @returns {[boolean, import('types').CSRPageNodeLoader] | undefined}\n\t */\n\tfunction create_layout_loader(id) {\n\t\t// whether or not the layout uses the server data is\n\t\t// encoded in the layouts array, to save space\n\t\treturn id === undefined ? id : [layouts_with_server_load.has(id), nodes[id]];\n\t}\n}\n\n/**\n * @param {import('types').CSRRouteServer} input\n * @param {import('types').CSRPageNodeLoader[]} app_nodes Will be modified if a new node is loaded that's not already in the array\n * @returns {import('types').CSRRoute}\n */\nexport function parse_server_route({ nodes, id, leaf, layouts, errors }, app_nodes) {\n\treturn {\n\t\tid,\n\t\texec: () => ({}), // dummy function; exec already happened on the server\n\t\t// By writing to app_nodes only when a loader at that index is not already defined,\n\t\t// we ensure that loaders have referential equality when they load the same node.\n\t\t// Code elsewhere in client.js relies on this referential equality to determine\n\t\t// if a loader is different and should therefore (re-)run.\n\t\terrors: errors.map((n) => (n ? (app_nodes[n] ||= nodes[n]) : undefined)),\n\t\tlayouts: layouts.map((n) => (n ? [n[0], (app_nodes[n[1]] ||= nodes[n[1]])] : undefined)),\n\t\tleaf: [leaf[0], (app_nodes[leaf[1]] ||= nodes[leaf[1]])]\n\t};\n}\n","/**\n * Read a value from `sessionStorage`\n * @param {string} key\n * @param {(value: string) => any} parse\n */\nexport function get(key, parse = JSON.parse) {\n\ttry {\n\t\treturn parse(sessionStorage[key]);\n\t} catch {\n\t\t// do nothing\n\t}\n}\n\n/**\n * Write a value to `sessionStorage`\n * @param {string} key\n * @param {any} value\n * @param {(value: any) => string} stringify\n */\nexport function set(key, value, stringify = JSON.stringify) {\n\tconst data = stringify(value);\n\ttry {\n\t\tsessionStorage[key] = data;\n\t} catch {\n\t\t// do nothing\n\t}\n}\n","import {\n\trun_all,\n\tsubscribe,\n\tnoop,\n\tsafe_not_equal,\n\tis_function,\n\tget_store_value\n} from '../internal/index.js';\n\nconst subscriber_queue = [];\n\n/**\n * Creates a `Readable` store that allows reading by subscription.\n *\n * https://svelte.dev/docs/svelte-store#readable\n * @template T\n * @param {T} [value] initial value\n * @param {import('./public.js').StartStopNotifier} [start]\n * @returns {import('./public.js').Readable}\n */\nexport function readable(value, start) {\n\treturn {\n\t\tsubscribe: writable(value, start).subscribe\n\t};\n}\n\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n *\n * https://svelte.dev/docs/svelte-store#writable\n * @template T\n * @param {T} [value] initial value\n * @param {import('./public.js').StartStopNotifier} [start]\n * @returns {import('./public.js').Writable}\n */\nexport function writable(value, start = noop) {\n\t/** @type {import('./public.js').Unsubscriber} */\n\tlet stop;\n\t/** @type {Set>} */\n\tconst subscribers = new Set();\n\t/** @param {T} new_value\n\t * @returns {void}\n\t */\n\tfunction set(new_value) {\n\t\tif (safe_not_equal(value, new_value)) {\n\t\t\tvalue = new_value;\n\t\t\tif (stop) {\n\t\t\t\t// store is ready\n\t\t\t\tconst run_queue = !subscriber_queue.length;\n\t\t\t\tfor (const subscriber of subscribers) {\n\t\t\t\t\tsubscriber[1]();\n\t\t\t\t\tsubscriber_queue.push(subscriber, value);\n\t\t\t\t}\n\t\t\t\tif (run_queue) {\n\t\t\t\t\tfor (let i = 0; i < subscriber_queue.length; i += 2) {\n\t\t\t\t\t\tsubscriber_queue[i][0](subscriber_queue[i + 1]);\n\t\t\t\t\t}\n\t\t\t\t\tsubscriber_queue.length = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {import('./public.js').Updater} fn\n\t * @returns {void}\n\t */\n\tfunction update(fn) {\n\t\tset(fn(value));\n\t}\n\n\t/**\n\t * @param {import('./public.js').Subscriber} run\n\t * @param {import('./private.js').Invalidator} [invalidate]\n\t * @returns {import('./public.js').Unsubscriber}\n\t */\n\tfunction subscribe(run, invalidate = noop) {\n\t\t/** @type {import('./private.js').SubscribeInvalidateTuple} */\n\t\tconst subscriber = [run, invalidate];\n\t\tsubscribers.add(subscriber);\n\t\tif (subscribers.size === 1) {\n\t\t\tstop = start(set, update) || noop;\n\t\t}\n\t\trun(value);\n\t\treturn () => {\n\t\t\tsubscribers.delete(subscriber);\n\t\t\tif (subscribers.size === 0 && stop) {\n\t\t\t\tstop();\n\t\t\t\tstop = null;\n\t\t\t}\n\t\t};\n\t}\n\treturn { set, update, subscribe };\n}\n\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * https://svelte.dev/docs/svelte-store#derived\n * @template {import('./private.js').Stores} S\n * @template T\n * @overload\n * @param {S} stores - input stores\n * @param {(values: import('./private.js').StoresValues, set: (value: T) => void, update: (fn: import('./public.js').Updater) => void) => import('./public.js').Unsubscriber | void} fn - function callback that aggregates the values\n * @param {T} [initial_value] - initial value\n * @returns {import('./public.js').Readable}\n */\n\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * https://svelte.dev/docs/svelte-store#derived\n * @template {import('./private.js').Stores} S\n * @template T\n * @overload\n * @param {S} stores - input stores\n * @param {(values: import('./private.js').StoresValues) => T} fn - function callback that aggregates the values\n * @param {T} [initial_value] - initial value\n * @returns {import('./public.js').Readable}\n */\n\n/**\n * @template {import('./private.js').Stores} S\n * @template T\n * @param {S} stores\n * @param {Function} fn\n * @param {T} [initial_value]\n * @returns {import('./public.js').Readable}\n */\nexport function derived(stores, fn, initial_value) {\n\tconst single = !Array.isArray(stores);\n\t/** @type {Array>} */\n\tconst stores_array = single ? [stores] : stores;\n\tif (!stores_array.every(Boolean)) {\n\t\tthrow new Error('derived() expects stores as input, got a falsy value');\n\t}\n\tconst auto = fn.length < 2;\n\treturn readable(initial_value, (set, update) => {\n\t\tlet started = false;\n\t\tconst values = [];\n\t\tlet pending = 0;\n\t\tlet cleanup = noop;\n\t\tconst sync = () => {\n\t\t\tif (pending) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcleanup();\n\t\t\tconst result = fn(single ? values[0] : values, set, update);\n\t\t\tif (auto) {\n\t\t\t\tset(result);\n\t\t\t} else {\n\t\t\t\tcleanup = is_function(result) ? result : noop;\n\t\t\t}\n\t\t};\n\t\tconst unsubscribers = stores_array.map((store, i) =>\n\t\t\tsubscribe(\n\t\t\t\tstore,\n\t\t\t\t(value) => {\n\t\t\t\t\tvalues[i] = value;\n\t\t\t\t\tpending &= ~(1 << i);\n\t\t\t\t\tif (started) {\n\t\t\t\t\t\tsync();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tpending |= 1 << i;\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\t\tstarted = true;\n\t\tsync();\n\t\treturn function stop() {\n\t\t\trun_all(unsubscribers);\n\t\t\tcleanup();\n\t\t\t// We need to set this to false because callbacks can still happen despite having unsubscribed:\n\t\t\t// Callbacks might already be placed in the queue which doesn't know it should no longer\n\t\t\t// invoke this derived store.\n\t\t\tstarted = false;\n\t\t};\n\t});\n}\n\n/**\n * Takes a store and returns a new one derived from the old one that is readable.\n *\n * https://svelte.dev/docs/svelte-store#readonly\n * @template T\n * @param {import('./public.js').Readable} store - store to make readonly\n * @returns {import('./public.js').Readable}\n */\nexport function readonly(store) {\n\treturn {\n\t\tsubscribe: store.subscribe.bind(store)\n\t};\n}\n\nexport { get_store_value as get };\n","export const SNAPSHOT_KEY = 'sveltekit:snapshot';\nexport const SCROLL_KEY = 'sveltekit:scroll';\nexport const STATES_KEY = 'sveltekit:states';\nexport const PAGE_URL_KEY = 'sveltekit:pageurl';\n\nexport const HISTORY_INDEX = 'sveltekit:history';\nexport const NAVIGATION_INDEX = 'sveltekit:navigation';\n\nexport const PRELOAD_PRIORITIES = /** @type {const} */ ({\n\ttap: 1,\n\thover: 2,\n\tviewport: 3,\n\teager: 4,\n\toff: -1,\n\tfalse: -1\n});\n","import { BROWSER, DEV } from 'esm-env';\nimport { writable } from 'svelte/store';\nimport { assets } from '__sveltekit/paths';\nimport { version } from '__sveltekit/environment';\nimport { PRELOAD_PRIORITIES } from './constants.js';\n\n/* global __SVELTEKIT_APP_VERSION_FILE__, __SVELTEKIT_APP_VERSION_POLL_INTERVAL__ */\n\nexport const origin = BROWSER ? location.origin : '';\n\n/** @param {string | URL} url */\nexport function resolve_url(url) {\n\tif (url instanceof URL) return url;\n\n\tlet baseURI = document.baseURI;\n\n\tif (!baseURI) {\n\t\tconst baseTags = document.getElementsByTagName('base');\n\t\tbaseURI = baseTags.length ? baseTags[0].href : document.URL;\n\t}\n\n\treturn new URL(url, baseURI);\n}\n\nexport function scroll_state() {\n\treturn {\n\t\tx: pageXOffset,\n\t\ty: pageYOffset\n\t};\n}\n\nconst warned = new WeakSet();\n\n/** @typedef {keyof typeof valid_link_options} LinkOptionName */\n\nconst valid_link_options = /** @type {const} */ ({\n\t'preload-code': ['', 'off', 'false', 'tap', 'hover', 'viewport', 'eager'],\n\t'preload-data': ['', 'off', 'false', 'tap', 'hover'],\n\tkeepfocus: ['', 'true', 'off', 'false'],\n\tnoscroll: ['', 'true', 'off', 'false'],\n\treload: ['', 'true', 'off', 'false'],\n\treplacestate: ['', 'true', 'off', 'false']\n});\n\n/**\n * @template {LinkOptionName} T\n * @typedef {typeof valid_link_options[T][number]} ValidLinkOptions\n */\n\n/**\n * @template {LinkOptionName} T\n * @param {Element} element\n * @param {T} name\n */\nfunction link_option(element, name) {\n\tconst value = /** @type {ValidLinkOptions | null} */ (\n\t\telement.getAttribute(`data-sveltekit-${name}`)\n\t);\n\n\tif (DEV) {\n\t\tvalidate_link_option(element, name, value);\n\t}\n\n\treturn value;\n}\n\n/**\n * @template {LinkOptionName} T\n * @template {ValidLinkOptions | null} U\n * @param {Element} element\n * @param {T} name\n * @param {U} value\n */\nfunction validate_link_option(element, name, value) {\n\tif (value === null) return;\n\n\t// @ts-expect-error - includes is dumb\n\tif (!warned.has(element) && !valid_link_options[name].includes(value)) {\n\t\tconsole.error(\n\t\t\t`Unexpected value for ${name} — should be one of ${valid_link_options[name]\n\t\t\t\t.map((option) => JSON.stringify(option))\n\t\t\t\t.join(', ')}`,\n\t\t\telement\n\t\t);\n\n\t\twarned.add(element);\n\t}\n}\n\nconst levels = {\n\t...PRELOAD_PRIORITIES,\n\t'': PRELOAD_PRIORITIES.hover\n};\n\n/**\n * @param {Element} element\n * @returns {Element | null}\n */\nfunction parent_element(element) {\n\tlet parent = element.assignedSlot ?? element.parentNode;\n\n\t// @ts-expect-error handle shadow roots\n\tif (parent?.nodeType === 11) parent = parent.host;\n\n\treturn /** @type {Element} */ (parent);\n}\n\n/**\n * @param {Element} element\n * @param {Element} target\n */\nexport function find_anchor(element, target) {\n\twhile (element && element !== target) {\n\t\tif (element.nodeName.toUpperCase() === 'A' && element.hasAttribute('href')) {\n\t\t\treturn /** @type {HTMLAnchorElement | SVGAElement} */ (element);\n\t\t}\n\n\t\telement = /** @type {Element} */ (parent_element(element));\n\t}\n}\n\n/**\n * @param {HTMLAnchorElement | SVGAElement} a\n * @param {string} base\n * @param {boolean} uses_hash_router\n */\nexport function get_link_info(a, base, uses_hash_router) {\n\t/** @type {URL | undefined} */\n\tlet url;\n\n\ttry {\n\t\turl = new URL(a instanceof SVGAElement ? a.href.baseVal : a.href, document.baseURI);\n\n\t\t// if the hash doesn't start with `#/` then it's probably linking to an id on the current page\n\t\tif (uses_hash_router && url.hash.match(/^#[^/]/)) {\n\t\t\tconst route = location.hash.split('#')[1] || '/';\n\t\t\turl.hash = `#${route}${url.hash}`;\n\t\t}\n\t} catch {}\n\n\tconst target = a instanceof SVGAElement ? a.target.baseVal : a.target;\n\n\tconst external =\n\t\t!url ||\n\t\t!!target ||\n\t\tis_external_url(url, base, uses_hash_router) ||\n\t\t(a.getAttribute('rel') || '').split(/\\s+/).includes('external');\n\n\tconst download = url?.origin === origin && a.hasAttribute('download');\n\n\treturn { url, external, target, download };\n}\n\n/**\n * @param {HTMLFormElement | HTMLAnchorElement | SVGAElement} element\n */\nexport function get_router_options(element) {\n\t/** @type {ValidLinkOptions<'keepfocus'> | null} */\n\tlet keepfocus = null;\n\n\t/** @type {ValidLinkOptions<'noscroll'> | null} */\n\tlet noscroll = null;\n\n\t/** @type {ValidLinkOptions<'preload-code'> | null} */\n\tlet preload_code = null;\n\n\t/** @type {ValidLinkOptions<'preload-data'> | null} */\n\tlet preload_data = null;\n\n\t/** @type {ValidLinkOptions<'reload'> | null} */\n\tlet reload = null;\n\n\t/** @type {ValidLinkOptions<'replacestate'> | null} */\n\tlet replace_state = null;\n\n\t/** @type {Element} */\n\tlet el = element;\n\n\twhile (el && el !== document.documentElement) {\n\t\tif (preload_code === null) preload_code = link_option(el, 'preload-code');\n\t\tif (preload_data === null) preload_data = link_option(el, 'preload-data');\n\t\tif (keepfocus === null) keepfocus = link_option(el, 'keepfocus');\n\t\tif (noscroll === null) noscroll = link_option(el, 'noscroll');\n\t\tif (reload === null) reload = link_option(el, 'reload');\n\t\tif (replace_state === null) replace_state = link_option(el, 'replacestate');\n\n\t\tel = /** @type {Element} */ (parent_element(el));\n\t}\n\n\t/** @param {string | null} value */\n\tfunction get_option_state(value) {\n\t\tswitch (value) {\n\t\t\tcase '':\n\t\t\tcase 'true':\n\t\t\t\treturn true;\n\t\t\tcase 'off':\n\t\t\tcase 'false':\n\t\t\t\treturn false;\n\t\t\tdefault:\n\t\t\t\treturn undefined;\n\t\t}\n\t}\n\n\treturn {\n\t\tpreload_code: levels[preload_code ?? 'off'],\n\t\tpreload_data: levels[preload_data ?? 'off'],\n\t\tkeepfocus: get_option_state(keepfocus),\n\t\tnoscroll: get_option_state(noscroll),\n\t\treload: get_option_state(reload),\n\t\treplace_state: get_option_state(replace_state)\n\t};\n}\n\n/** @param {any} value */\nexport function notifiable_store(value) {\n\tconst store = writable(value);\n\tlet ready = true;\n\n\tfunction notify() {\n\t\tready = true;\n\t\tstore.update((val) => val);\n\t}\n\n\t/** @param {any} new_value */\n\tfunction set(new_value) {\n\t\tready = false;\n\t\tstore.set(new_value);\n\t}\n\n\t/** @param {(value: any) => void} run */\n\tfunction subscribe(run) {\n\t\t/** @type {any} */\n\t\tlet old_value;\n\t\treturn store.subscribe((new_value) => {\n\t\t\tif (old_value === undefined || (ready && new_value !== old_value)) {\n\t\t\t\trun((old_value = new_value));\n\t\t\t}\n\t\t});\n\t}\n\n\treturn { notify, set, subscribe };\n}\n\nexport const updated_listener = {\n\tv: () => {}\n};\n\nexport function create_updated_store() {\n\tconst { set, subscribe } = writable(false);\n\n\tif (DEV || !BROWSER) {\n\t\treturn {\n\t\t\tsubscribe,\n\t\t\t// eslint-disable-next-line @typescript-eslint/require-await\n\t\t\tcheck: async () => false\n\t\t};\n\t}\n\n\tconst interval = __SVELTEKIT_APP_VERSION_POLL_INTERVAL__;\n\n\t/** @type {NodeJS.Timeout} */\n\tlet timeout;\n\n\t/** @type {() => Promise} */\n\tasync function check() {\n\t\tclearTimeout(timeout);\n\n\t\tif (interval) timeout = setTimeout(check, interval);\n\n\t\ttry {\n\t\t\tconst res = await fetch(`${assets}/${__SVELTEKIT_APP_VERSION_FILE__}`, {\n\t\t\t\theaders: {\n\t\t\t\t\tpragma: 'no-cache',\n\t\t\t\t\t'cache-control': 'no-cache'\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!res.ok) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst data = await res.json();\n\t\t\tconst updated = data.version !== version;\n\n\t\t\tif (updated) {\n\t\t\t\tset(true);\n\t\t\t\tupdated_listener.v();\n\t\t\t\tclearTimeout(timeout);\n\t\t\t}\n\n\t\t\treturn updated;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (interval) timeout = setTimeout(check, interval);\n\n\treturn {\n\t\tsubscribe,\n\t\tcheck\n\t};\n}\n\n/**\n * Is external if\n * - origin different\n * - path doesn't start with base\n * - uses hash router and pathname is more than base\n * @param {URL} url\n * @param {string} base\n * @param {boolean} hash_routing\n */\nexport function is_external_url(url, base, hash_routing) {\n\tif (url.origin !== origin || !url.pathname.startsWith(base)) {\n\t\treturn true;\n\t}\n\n\tif (hash_routing) {\n\t\tif (url.pathname === base + '/' || url.pathname === base + '/index.html') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// be lenient if serving from filesystem\n\t\tif (url.protocol === 'file:' && url.pathname.replace(/\\/[^/]+\\.html?$/, '') === base) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\n/** @type {Record} */\nconst seen = {};\n\n/**\n * Used for server-side resolution, to replicate Vite's CSS loading behaviour in production.\n *\n * Closely modelled after https://github.com/vitejs/vite/blob/3dd12f4724130fdf8ba44c6d3252ebdff407fd47/packages/vite/src/node/plugins/importAnalysisBuild.ts#L214\n * (which ideally we could just use directly, but it's not exported)\n * @param {string[]} deps\n */\nexport function load_css(deps) {\n\tif (__SVELTEKIT_CLIENT_ROUTING__) return;\n\n\tconst csp_nonce_meta = /** @type {HTMLMetaElement} */ (\n\t\tdocument.querySelector('meta[property=csp-nonce]')\n\t);\n\tconst csp_nonce = csp_nonce_meta?.nonce || csp_nonce_meta?.getAttribute('nonce');\n\n\tfor (const dep of deps) {\n\t\tif (dep in seen) continue;\n\t\tseen[dep] = true;\n\n\t\tif (document.querySelector(`link[href=\"${dep}\"][rel=\"stylesheet\"]`)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst link = document.createElement('link');\n\t\tlink.rel = 'stylesheet';\n\t\tlink.crossOrigin = '';\n\t\tlink.href = dep;\n\t\tif (csp_nonce) {\n\t\t\tlink.setAttribute('nonce', csp_nonce);\n\t\t}\n\t\tdocument.head.appendChild(link);\n\t}\n}\n","/**\n * Base64 Encodes an arraybuffer\n * @param {ArrayBuffer} arraybuffer\n * @returns {string}\n */\nexport function encode64(arraybuffer) {\n const dv = new DataView(arraybuffer);\n let binaryString = \"\";\n\n for (let i = 0; i < arraybuffer.byteLength; i++) {\n binaryString += String.fromCharCode(dv.getUint8(i));\n }\n\n return binaryToAscii(binaryString);\n}\n\n/**\n * Decodes a base64 string into an arraybuffer\n * @param {string} string\n * @returns {ArrayBuffer}\n */\nexport function decode64(string) {\n const binaryString = asciiToBinary(string);\n const arraybuffer = new ArrayBuffer(binaryString.length);\n const dv = new DataView(arraybuffer);\n\n for (let i = 0; i < arraybuffer.byteLength; i++) {\n dv.setUint8(i, binaryString.charCodeAt(i));\n }\n\n return arraybuffer;\n}\n\nconst KEY_STRING =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n/**\n * Substitute for atob since it's deprecated in node.\n * Does not do any input validation.\n *\n * @see https://github.com/jsdom/abab/blob/master/lib/atob.js\n *\n * @param {string} data\n * @returns {string}\n */\nfunction asciiToBinary(data) {\n if (data.length % 4 === 0) {\n data = data.replace(/==?$/, \"\");\n }\n\n let output = \"\";\n let buffer = 0;\n let accumulatedBits = 0;\n\n for (let i = 0; i < data.length; i++) {\n buffer <<= 6;\n buffer |= KEY_STRING.indexOf(data[i]);\n accumulatedBits += 6;\n if (accumulatedBits === 24) {\n output += String.fromCharCode((buffer & 0xff0000) >> 16);\n output += String.fromCharCode((buffer & 0xff00) >> 8);\n output += String.fromCharCode(buffer & 0xff);\n buffer = accumulatedBits = 0;\n }\n }\n if (accumulatedBits === 12) {\n buffer >>= 4;\n output += String.fromCharCode(buffer);\n } else if (accumulatedBits === 18) {\n buffer >>= 2;\n output += String.fromCharCode((buffer & 0xff00) >> 8);\n output += String.fromCharCode(buffer & 0xff);\n }\n return output;\n}\n\n/**\n * Substitute for btoa since it's deprecated in node.\n * Does not do any input validation.\n *\n * @see https://github.com/jsdom/abab/blob/master/lib/btoa.js\n *\n * @param {string} str\n * @returns {string}\n */\nfunction binaryToAscii(str) {\n let out = \"\";\n for (let i = 0; i < str.length; i += 3) {\n /** @type {[number, number, number, number]} */\n const groupsOfSix = [undefined, undefined, undefined, undefined];\n groupsOfSix[0] = str.charCodeAt(i) >> 2;\n groupsOfSix[1] = (str.charCodeAt(i) & 0x03) << 4;\n if (str.length > i + 1) {\n groupsOfSix[1] |= str.charCodeAt(i + 1) >> 4;\n groupsOfSix[2] = (str.charCodeAt(i + 1) & 0x0f) << 2;\n }\n if (str.length > i + 2) {\n groupsOfSix[2] |= str.charCodeAt(i + 2) >> 6;\n groupsOfSix[3] = str.charCodeAt(i + 2) & 0x3f;\n }\n for (let j = 0; j < groupsOfSix.length; j++) {\n if (typeof groupsOfSix[j] === \"undefined\") {\n out += \"=\";\n } else {\n out += KEY_STRING[groupsOfSix[j]];\n }\n }\n }\n return out;\n}\n","export const UNDEFINED = -1;\nexport const HOLE = -2;\nexport const NAN = -3;\nexport const POSITIVE_INFINITY = -4;\nexport const NEGATIVE_INFINITY = -5;\nexport const NEGATIVE_ZERO = -6;\n","import { decode64 } from './base64.js';\nimport {\n\tHOLE,\n\tNAN,\n\tNEGATIVE_INFINITY,\n\tNEGATIVE_ZERO,\n\tPOSITIVE_INFINITY,\n\tUNDEFINED\n} from './constants.js';\n\n/**\n * Revive a value serialized with `devalue.stringify`\n * @param {string} serialized\n * @param {Record any>} [revivers]\n */\nexport function parse(serialized, revivers) {\n\treturn unflatten(JSON.parse(serialized), revivers);\n}\n\n/**\n * Revive a value flattened with `devalue.stringify`\n * @param {number | any[]} parsed\n * @param {Record any>} [revivers]\n */\nexport function unflatten(parsed, revivers) {\n\tif (typeof parsed === 'number') return hydrate(parsed, true);\n\n\tif (!Array.isArray(parsed) || parsed.length === 0) {\n\t\tthrow new Error('Invalid input');\n\t}\n\n\tconst values = /** @type {any[]} */ (parsed);\n\n\tconst hydrated = Array(values.length);\n\n\t/**\n\t * @param {number} index\n\t * @returns {any}\n\t */\n\tfunction hydrate(index, standalone = false) {\n\t\tif (index === UNDEFINED) return undefined;\n\t\tif (index === NAN) return NaN;\n\t\tif (index === POSITIVE_INFINITY) return Infinity;\n\t\tif (index === NEGATIVE_INFINITY) return -Infinity;\n\t\tif (index === NEGATIVE_ZERO) return -0;\n\n\t\tif (standalone) throw new Error(`Invalid input`);\n\n\t\tif (index in hydrated) return hydrated[index];\n\n\t\tconst value = values[index];\n\n\t\tif (!value || typeof value !== 'object') {\n\t\t\thydrated[index] = value;\n\t\t} else if (Array.isArray(value)) {\n\t\t\tif (typeof value[0] === 'string') {\n\t\t\t\tconst type = value[0];\n\n\t\t\t\tconst reviver = revivers?.[type];\n\t\t\t\tif (reviver) {\n\t\t\t\t\treturn (hydrated[index] = reviver(hydrate(value[1])));\n\t\t\t\t}\n\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase 'Date':\n\t\t\t\t\t\thydrated[index] = new Date(value[1]);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Set':\n\t\t\t\t\t\tconst set = new Set();\n\t\t\t\t\t\thydrated[index] = set;\n\t\t\t\t\t\tfor (let i = 1; i < value.length; i += 1) {\n\t\t\t\t\t\t\tset.add(hydrate(value[i]));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Map':\n\t\t\t\t\t\tconst map = new Map();\n\t\t\t\t\t\thydrated[index] = map;\n\t\t\t\t\t\tfor (let i = 1; i < value.length; i += 2) {\n\t\t\t\t\t\t\tmap.set(hydrate(value[i]), hydrate(value[i + 1]));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RegExp':\n\t\t\t\t\t\thydrated[index] = new RegExp(value[1], value[2]);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\thydrated[index] = Object(value[1]);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BigInt':\n\t\t\t\t\t\thydrated[index] = BigInt(value[1]);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'null':\n\t\t\t\t\t\tconst obj = Object.create(null);\n\t\t\t\t\t\thydrated[index] = obj;\n\t\t\t\t\t\tfor (let i = 1; i < value.length; i += 2) {\n\t\t\t\t\t\t\tobj[value[i]] = hydrate(value[i + 1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n case \"Int8Array\":\n case \"Uint8Array\":\n case \"Uint8ClampedArray\":\n case \"Int16Array\":\n case \"Uint16Array\":\n case \"Int32Array\":\n case \"Uint32Array\":\n case \"Float32Array\":\n case \"Float64Array\":\n case \"BigInt64Array\":\n case \"BigUint64Array\": {\n const TypedArrayConstructor = globalThis[type];\n const base64 = value[1];\n const arraybuffer = decode64(base64);\n const typedArray = new TypedArrayConstructor(arraybuffer);\n hydrated[index] = typedArray;\n break;\n }\n\n case \"ArrayBuffer\": {\n const base64 = value[1];\n const arraybuffer = decode64(base64);\n hydrated[index] = arraybuffer;\n break;\n }\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error(`Unknown type ${type}`);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst array = new Array(value.length);\n\t\t\t\thydrated[index] = array;\n\n\t\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\t\tconst n = value[i];\n\t\t\t\t\tif (n === HOLE) continue;\n\n\t\t\t\t\tarray[i] = hydrate(n);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t/** @type {Record} */\n\t\t\tconst object = {};\n\t\t\thydrated[index] = object;\n\n\t\t\tfor (const key in value) {\n\t\t\t\tconst n = value[key];\n\t\t\t\tobject[key] = hydrate(n);\n\t\t\t}\n\t\t}\n\n\t\treturn hydrated[index];\n\t}\n\n\treturn hydrate(0);\n}\n","/**\n * @param {Set} expected\n */\nfunction validator(expected) {\n\t/**\n\t * @param {any} module\n\t * @param {string} [file]\n\t */\n\tfunction validate(module, file) {\n\t\tif (!module) return;\n\n\t\tfor (const key in module) {\n\t\t\tif (key[0] === '_' || expected.has(key)) continue; // key is valid in this module\n\n\t\t\tconst values = [...expected.values()];\n\n\t\t\tconst hint =\n\t\t\t\thint_for_supported_files(key, file?.slice(file.lastIndexOf('.'))) ??\n\t\t\t\t`valid exports are ${values.join(', ')}, or anything with a '_' prefix`;\n\n\t\t\tthrow new Error(`Invalid export '${key}'${file ? ` in ${file}` : ''} (${hint})`);\n\t\t}\n\t}\n\n\treturn validate;\n}\n\n/**\n * @param {string} key\n * @param {string} ext\n * @returns {string | void}\n */\nfunction hint_for_supported_files(key, ext = '.js') {\n\tconst supported_files = [];\n\n\tif (valid_layout_exports.has(key)) {\n\t\tsupported_files.push(`+layout${ext}`);\n\t}\n\n\tif (valid_page_exports.has(key)) {\n\t\tsupported_files.push(`+page${ext}`);\n\t}\n\n\tif (valid_layout_server_exports.has(key)) {\n\t\tsupported_files.push(`+layout.server${ext}`);\n\t}\n\n\tif (valid_page_server_exports.has(key)) {\n\t\tsupported_files.push(`+page.server${ext}`);\n\t}\n\n\tif (valid_server_exports.has(key)) {\n\t\tsupported_files.push(`+server${ext}`);\n\t}\n\n\tif (supported_files.length > 0) {\n\t\treturn `'${key}' is a valid export in ${supported_files.slice(0, -1).join(', ')}${\n\t\t\tsupported_files.length > 1 ? ' or ' : ''\n\t\t}${supported_files.at(-1)}`;\n\t}\n}\n\nconst valid_layout_exports = new Set([\n\t'load',\n\t'prerender',\n\t'csr',\n\t'ssr',\n\t'trailingSlash',\n\t'config'\n]);\nconst valid_page_exports = new Set([...valid_layout_exports, 'entries']);\nconst valid_layout_server_exports = new Set([...valid_layout_exports]);\nconst valid_page_server_exports = new Set([...valid_layout_server_exports, 'actions', 'entries']);\nconst valid_server_exports = new Set([\n\t'GET',\n\t'POST',\n\t'PATCH',\n\t'PUT',\n\t'DELETE',\n\t'OPTIONS',\n\t'HEAD',\n\t'fallback',\n\t'prerender',\n\t'trailingSlash',\n\t'config',\n\t'entries'\n]);\n\nexport const validate_layout_exports = validator(valid_layout_exports);\nexport const validate_page_exports = validator(valid_page_exports);\nexport const validate_layout_server_exports = validator(valid_layout_server_exports);\nexport const validate_page_server_exports = validator(valid_page_server_exports);\nexport const validate_server_exports = validator(valid_server_exports);\n","/**\n * Removes nullish values from an array.\n *\n * @template T\n * @param {Array} arr\n */\nexport function compact(arr) {\n\treturn arr.filter(/** @returns {val is NonNullable} */ (val) => val != null);\n}\n","export class HttpError {\n\t/**\n\t * @param {number} status\n\t * @param {{message: string} extends App.Error ? (App.Error | string | undefined) : App.Error} body\n\t */\n\tconstructor(status, body) {\n\t\tthis.status = status;\n\t\tif (typeof body === 'string') {\n\t\t\tthis.body = { message: body };\n\t\t} else if (body) {\n\t\t\tthis.body = body;\n\t\t} else {\n\t\t\tthis.body = { message: `Error: ${status}` };\n\t\t}\n\t}\n\n\ttoString() {\n\t\treturn JSON.stringify(this.body);\n\t}\n}\n\nexport class Redirect {\n\t/**\n\t * @param {300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308} status\n\t * @param {string} location\n\t */\n\tconstructor(status, location) {\n\t\tthis.status = status;\n\t\tthis.location = location;\n\t}\n}\n\n/**\n * An error that was thrown from within the SvelteKit runtime that is not fatal and doesn't result in a 500, such as a 404.\n * `SvelteKitError` goes through `handleError`.\n * @extends Error\n */\nexport class SvelteKitError extends Error {\n\t/**\n\t * @param {number} status\n\t * @param {string} text\n\t * @param {string} message\n\t */\n\tconstructor(status, text, message) {\n\t\tsuper(message);\n\t\tthis.status = status;\n\t\tthis.text = text;\n\t}\n}\n\n/**\n * @template {Record | undefined} [T=undefined]\n */\nexport class ActionFailure {\n\t/**\n\t * @param {number} status\n\t * @param {T} data\n\t */\n\tconstructor(status, data) {\n\t\tthis.status = status;\n\t\tthis.data = data;\n\t}\n}\n","/**\n * @param {string} route_id\n * @param {string} dep\n */\nexport function validate_depends(route_id, dep) {\n\tconst match = /^(moz-icon|view-source|jar):/.exec(dep);\n\tif (match) {\n\t\tconsole.warn(\n\t\t\t`${route_id}: Calling \\`depends('${dep}')\\` will throw an error in Firefox because \\`${match[1]}\\` is a special URI scheme`\n\t\t);\n\t}\n}\n\nexport const INVALIDATED_PARAM = 'x-sveltekit-invalidated';\n\nexport const TRAILING_SLASH_PARAM = 'x-sveltekit-trailing-slash';\n","import { HttpError, SvelteKitError } from '../runtime/control.js';\n\n/**\n * @param {unknown} err\n * @return {Error}\n */\nexport function coalesce_to_error(err) {\n\treturn err instanceof Error ||\n\t\t(err && /** @type {any} */ (err).name && /** @type {any} */ (err).message)\n\t\t? /** @type {Error} */ (err)\n\t\t: new Error(JSON.stringify(err));\n}\n\n/**\n * This is an identity function that exists to make TypeScript less\n * paranoid about people throwing things that aren't errors, which\n * frankly is not something we should care about\n * @param {unknown} error\n */\nexport function normalize_error(error) {\n\treturn /** @type {import('../runtime/control.js').Redirect | HttpError | SvelteKitError | Error} */ (\n\t\terror\n\t);\n}\n\n/**\n * @param {unknown} error\n */\nexport function get_status(error) {\n\treturn error instanceof HttpError || error instanceof SvelteKitError ? error.status : 500;\n}\n\n/**\n * @param {unknown} error\n */\nexport function get_message(error) {\n\treturn error instanceof SvelteKitError ? error.text : 'Internal Error';\n}\n","import { onMount } from 'svelte';\nimport { updated_listener } from './utils.js';\n\n/** @type {import('@sveltejs/kit').Page} */\nexport let page;\n\n/** @type {{ current: import('@sveltejs/kit').Navigation | null }} */\nexport let navigating;\n\n/** @type {{ current: boolean }} */\nexport let updated;\n\n// this is a bootleg way to tell if we're in old svelte or new svelte\nconst is_legacy =\n\tonMount.toString().includes('$$') || /function \\w+\\(\\) \\{\\}/.test(onMount.toString());\n\nif (is_legacy) {\n\tpage = {\n\t\tdata: {},\n\t\tform: null,\n\t\terror: null,\n\t\tparams: {},\n\t\troute: { id: null },\n\t\tstate: {},\n\t\tstatus: -1,\n\t\turl: new URL('https://example.com')\n\t};\n\tnavigating = { current: null };\n\tupdated = { current: false };\n} else {\n\tpage = new (class Page {\n\t\tdata = $state.raw({});\n\t\tform = $state.raw(null);\n\t\terror = $state.raw(null);\n\t\tparams = $state.raw({});\n\t\troute = $state.raw({ id: null });\n\t\tstate = $state.raw({});\n\t\tstatus = $state.raw(-1);\n\t\turl = $state.raw(new URL('https://example.com'));\n\t})();\n\n\tnavigating = new (class Navigating {\n\t\tcurrent = $state.raw(null);\n\t})();\n\n\tupdated = new (class Updated {\n\t\tcurrent = $state.raw(false);\n\t})();\n\tupdated_listener.v = () => (updated.current = true);\n}\n\n/**\n * @param {import('@sveltejs/kit').Page} new_page\n */\nexport function update(new_page) {\n\tObject.assign(page, new_page);\n}\n","const DATA_SUFFIX = '/__data.json';\nconst HTML_DATA_SUFFIX = '.html__data.json';\n\n/** @param {string} pathname */\nexport function has_data_suffix(pathname) {\n\treturn pathname.endsWith(DATA_SUFFIX) || pathname.endsWith(HTML_DATA_SUFFIX);\n}\n\n/** @param {string} pathname */\nexport function add_data_suffix(pathname) {\n\tif (pathname.endsWith('.html')) return pathname.replace(/\\.html$/, HTML_DATA_SUFFIX);\n\treturn pathname.replace(/\\/$/, '') + DATA_SUFFIX;\n}\n\n/** @param {string} pathname */\nexport function strip_data_suffix(pathname) {\n\tif (pathname.endsWith(HTML_DATA_SUFFIX)) {\n\t\treturn pathname.slice(0, -HTML_DATA_SUFFIX.length) + '.html';\n\t}\n\n\treturn pathname.slice(0, -DATA_SUFFIX.length);\n}\n\nconst ROUTE_SUFFIX = '/__route.js';\n\n/**\n * @param {string} pathname\n * @returns {boolean}\n */\nexport function has_resolution_suffix(pathname) {\n\treturn pathname.endsWith(ROUTE_SUFFIX);\n}\n\n/**\n * Convert a regular URL to a route to send to SvelteKit's server-side route resolution endpoint\n * @param {string} pathname\n * @returns {string}\n */\nexport function add_resolution_suffix(pathname) {\n\treturn pathname.replace(/\\/$/, '') + ROUTE_SUFFIX;\n}\n\n/**\n * @param {string} pathname\n * @returns {string}\n */\nexport function strip_resolution_suffix(pathname) {\n\treturn pathname.slice(0, -ROUTE_SUFFIX.length);\n}\n","import { BROWSER, DEV } from 'esm-env';\nimport * as svelte from 'svelte';\nconst { onMount, tick } = svelte;\n// Svelte 4 and under don't have `untrack`, so we have to fallback if `untrack` is not exported\nconst untrack = svelte.untrack ?? ((value) => value());\nimport {\n\tdecode_params,\n\tdecode_pathname,\n\tstrip_hash,\n\tmake_trackable,\n\tnormalize_path\n} from '../../utils/url.js';\nimport { dev_fetch, initial_fetch, lock_fetch, subsequent_fetch, unlock_fetch } from './fetcher.js';\nimport { parse, parse_server_route } from './parse.js';\nimport * as storage from './session-storage.js';\nimport {\n\tfind_anchor,\n\tresolve_url,\n\tget_link_info,\n\tget_router_options,\n\tis_external_url,\n\torigin,\n\tscroll_state,\n\tnotifiable_store,\n\tcreate_updated_store,\n\tload_css\n} from './utils.js';\nimport { base } from '__sveltekit/paths';\nimport * as devalue from 'devalue';\nimport {\n\tHISTORY_INDEX,\n\tNAVIGATION_INDEX,\n\tPRELOAD_PRIORITIES,\n\tSCROLL_KEY,\n\tSTATES_KEY,\n\tSNAPSHOT_KEY,\n\tPAGE_URL_KEY\n} from './constants.js';\nimport { validate_page_exports } from '../../utils/exports.js';\nimport { compact } from '../../utils/array.js';\nimport { HttpError, Redirect, SvelteKitError } from '../control.js';\nimport { INVALIDATED_PARAM, TRAILING_SLASH_PARAM, validate_depends } from '../shared.js';\nimport { get_message, get_status } from '../../utils/error.js';\nimport { writable } from 'svelte/store';\nimport { page, update, navigating } from './state.svelte.js';\nimport { add_data_suffix, add_resolution_suffix } from '../pathname.js';\n\nexport { load_css };\n\nconst ICON_REL_ATTRIBUTES = new Set(['icon', 'shortcut icon', 'apple-touch-icon']);\n\nlet errored = false;\n\n// We track the scroll position associated with each history entry in sessionStorage,\n// rather than on history.state itself, because when navigation is driven by\n// popstate it's too late to update the scroll position associated with the\n// state we're navigating from\n/**\n * history index -> { x, y }\n * @type {Record}\n */\nconst scroll_positions = storage.get(SCROLL_KEY) ?? {};\n\n/**\n * navigation index -> any\n * @type {Record}\n */\nconst snapshots = storage.get(SNAPSHOT_KEY) ?? {};\n\nif (DEV && BROWSER) {\n\tlet warned = false;\n\n\tconst current_module_url = import.meta.url.split('?')[0]; // remove query params that vite adds to the URL when it is loaded from node_modules\n\n\tconst warn = () => {\n\t\tif (warned) return;\n\n\t\t// Rather than saving a pointer to the original history methods, which would prevent monkeypatching by other libs,\n\t\t// inspect the stack trace to see if we're being called from within SvelteKit.\n\t\tlet stack = new Error().stack?.split('\\n');\n\t\tif (!stack) return;\n\t\tif (!stack[0].includes('https:') && !stack[0].includes('http:')) stack = stack.slice(1); // Chrome includes the error message in the stack\n\t\tstack = stack.slice(2); // remove `warn` and the place where `warn` was called\n\t\t// Can be falsy if was called directly from an anonymous function\n\t\tif (stack[0]?.includes(current_module_url)) return;\n\n\t\twarned = true;\n\n\t\tconsole.warn(\n\t\t\t\"Avoid using `history.pushState(...)` and `history.replaceState(...)` as these will conflict with SvelteKit's router. Use the `pushState` and `replaceState` imports from `$app/navigation` instead.\"\n\t\t);\n\t};\n\n\tconst push_state = history.pushState;\n\thistory.pushState = (...args) => {\n\t\twarn();\n\t\treturn push_state.apply(history, args);\n\t};\n\n\tconst replace_state = history.replaceState;\n\thistory.replaceState = (...args) => {\n\t\twarn();\n\t\treturn replace_state.apply(history, args);\n\t};\n}\n\nexport const stores = {\n\turl: /* @__PURE__ */ notifiable_store({}),\n\tpage: /* @__PURE__ */ notifiable_store({}),\n\tnavigating: /* @__PURE__ */ writable(\n\t\t/** @type {import('@sveltejs/kit').Navigation | null} */ (null)\n\t),\n\tupdated: /* @__PURE__ */ create_updated_store()\n};\n\n/** @param {number} index */\nfunction update_scroll_positions(index) {\n\tscroll_positions[index] = scroll_state();\n}\n\n/**\n * @param {number} current_history_index\n * @param {number} current_navigation_index\n */\nfunction clear_onward_history(current_history_index, current_navigation_index) {\n\t// if we navigated back, then pushed a new state, we can\n\t// release memory by pruning the scroll/snapshot lookup\n\tlet i = current_history_index + 1;\n\twhile (scroll_positions[i]) {\n\t\tdelete scroll_positions[i];\n\t\ti += 1;\n\t}\n\n\ti = current_navigation_index + 1;\n\twhile (snapshots[i]) {\n\t\tdelete snapshots[i];\n\t\ti += 1;\n\t}\n}\n\n/**\n * Loads `href` the old-fashioned way, with a full page reload.\n * Returns a `Promise` that never resolves (to prevent any\n * subsequent work, e.g. history manipulation, from happening)\n * @param {URL} url\n */\nfunction native_navigation(url) {\n\tlocation.href = url.href;\n\treturn new Promise(() => {});\n}\n\n/**\n * Checks whether a service worker is registered, and if it is,\n * tries to update it.\n */\nasync function update_service_worker() {\n\tif ('serviceWorker' in navigator) {\n\t\tconst registration = await navigator.serviceWorker.getRegistration(base || '/');\n\t\tif (registration) {\n\t\t\tawait registration.update();\n\t\t}\n\t}\n}\n\nfunction noop() {}\n\n/** @type {import('types').CSRRoute[]} All routes of the app. Only available when kit.router.resolution=client */\nlet routes;\n/** @type {import('types').CSRPageNodeLoader} */\nlet default_layout_loader;\n/** @type {import('types').CSRPageNodeLoader} */\nlet default_error_loader;\n/** @type {HTMLElement} */\nlet container;\n/** @type {HTMLElement} */\nlet target;\n/** @type {import('./types.js').SvelteKitApp} */\nexport let app;\n\n/** @type {Array<((url: URL) => boolean)>} */\nconst invalidated = [];\n\n/**\n * An array of the `+layout.svelte` and `+page.svelte` component instances\n * that currently live on the page — used for capturing and restoring snapshots.\n * It's updated/manipulated through `bind:this` in `Root.svelte`.\n * @type {import('svelte').SvelteComponent[]}\n */\nconst components = [];\n\n/** @type {{id: string, token: {}, promise: Promise} | null} */\nlet load_cache = null;\n\n/**\n * @type {Map>}\n * Cache for client-side rerouting, since it could contain async calls which we want to\n * avoid running multiple times which would slow down navigations (e.g. else preloading\n * wouldn't help because on navigation it would be called again). Since `reroute` should be\n * a pure function (i.e. always return the same) value it's safe to cache across navigations.\n * The server reroute calls don't need to be cached because they are called using `import(...)`\n * which is cached per the JS spec.\n */\nconst reroute_cache = new Map();\n\n/**\n * Note on before_navigate_callbacks, on_navigate_callbacks and after_navigate_callbacks:\n * do not re-assign as some closures keep references to these Sets\n */\n/** @type {Set<(navigation: import('@sveltejs/kit').BeforeNavigate) => void>} */\nconst before_navigate_callbacks = new Set();\n\n/** @type {Set<(navigation: import('@sveltejs/kit').OnNavigate) => import('types').MaybePromise<(() => void) | void>>} */\nconst on_navigate_callbacks = new Set();\n\n/** @type {Set<(navigation: import('@sveltejs/kit').AfterNavigate) => void>} */\nconst after_navigate_callbacks = new Set();\n\n/** @type {import('./types.js').NavigationState} */\nlet current = {\n\tbranch: [],\n\terror: null,\n\t// @ts-ignore - we need the initial value to be null\n\turl: null\n};\n\n/** this being true means we SSR'd */\nlet hydrated = false;\nlet started = false;\nlet autoscroll = true;\nlet updating = false;\nlet is_navigating = false;\nlet hash_navigating = false;\n/** True as soon as there happened one client-side navigation (excluding the SvelteKit-initialized initial one when in SPA mode) */\nlet has_navigated = false;\n\nlet force_invalidation = false;\n\n/** @type {import('svelte').SvelteComponent} */\nlet root;\n\n/** @type {number} keeping track of the history index in order to prevent popstate navigation events if needed */\nlet current_history_index;\n\n/** @type {number} */\nlet current_navigation_index;\n\n/** @type {{}} */\nlet token;\n\n/**\n * A set of tokens which are associated to current preloads.\n * If a preload becomes a real navigation, it's removed from the set.\n * If a preload token is in the set and the preload errors, the error\n * handling logic (for example reloading) is skipped.\n */\nconst preload_tokens = new Set();\n\n/** @type {Promise | null} */\nlet pending_invalidate;\n\n/**\n * @param {import('./types.js').SvelteKitApp} _app\n * @param {HTMLElement} _target\n * @param {Parameters[1]} [hydrate]\n */\nexport async function start(_app, _target, hydrate) {\n\tif (DEV && _target === document.body) {\n\t\tconsole.warn(\n\t\t\t'Placing %sveltekit.body% directly inside is not recommended, as your app may break for users who have certain browser extensions installed.\\n\\nConsider wrapping it in an element:\\n\\n
\\n %sveltekit.body%\\n
'\n\t\t);\n\t}\n\n\t// detect basic auth credentials in the current URL\n\t// https://github.com/sveltejs/kit/pull/11179\n\t// if so, refresh the page without credentials\n\tif (document.URL !== location.href) {\n\t\t// eslint-disable-next-line no-self-assign\n\t\tlocation.href = location.href;\n\t}\n\n\tapp = _app;\n\n\tawait _app.hooks.init?.();\n\n\troutes = __SVELTEKIT_CLIENT_ROUTING__ ? parse(_app) : [];\n\tcontainer = __SVELTEKIT_EMBEDDED__ ? _target : document.documentElement;\n\ttarget = _target;\n\n\t// we import the root layout/error nodes eagerly, so that\n\t// connectivity errors after initialisation don't nuke the app\n\tdefault_layout_loader = _app.nodes[0];\n\tdefault_error_loader = _app.nodes[1];\n\tvoid default_layout_loader();\n\tvoid default_error_loader();\n\n\tcurrent_history_index = history.state?.[HISTORY_INDEX];\n\tcurrent_navigation_index = history.state?.[NAVIGATION_INDEX];\n\n\tif (!current_history_index) {\n\t\t// we use Date.now() as an offset so that cross-document navigations\n\t\t// within the app don't result in data loss\n\t\tcurrent_history_index = current_navigation_index = Date.now();\n\n\t\t// create initial history entry, so we can return here\n\t\thistory.replaceState(\n\t\t\t{\n\t\t\t\t...history.state,\n\t\t\t\t[HISTORY_INDEX]: current_history_index,\n\t\t\t\t[NAVIGATION_INDEX]: current_navigation_index\n\t\t\t},\n\t\t\t''\n\t\t);\n\t}\n\n\t// if we reload the page, or Cmd-Shift-T back to it,\n\t// recover scroll position\n\tconst scroll = scroll_positions[current_history_index];\n\tfunction restore_scroll() {\n\t\tif (scroll) {\n\t\t\thistory.scrollRestoration = 'manual';\n\t\t\tscrollTo(scroll.x, scroll.y);\n\t\t}\n\t}\n\n\tif (hydrate) {\n\t\trestore_scroll();\n\n\t\tawait _hydrate(target, hydrate);\n\t} else {\n\t\tawait navigate({\n\t\t\ttype: 'enter',\n\t\t\turl: resolve_url(app.hash ? decode_hash(new URL(location.href)) : location.href),\n\t\t\treplace_state: true\n\t\t});\n\n\t\trestore_scroll();\n\t}\n\n\t_start_router();\n}\n\nasync function _invalidate() {\n\t// Accept all invalidations as they come, don't swallow any while another invalidation\n\t// is running because subsequent invalidations may make earlier ones outdated,\n\t// but batch multiple synchronous invalidations.\n\tawait (pending_invalidate ||= Promise.resolve());\n\tif (!pending_invalidate) return;\n\tpending_invalidate = null;\n\n\tconst nav_token = (token = {});\n\tconst intent = await get_navigation_intent(current.url, true);\n\n\t// Clear preload, it might be affected by the invalidation.\n\t// Also solves an edge case where a preload is triggered, the navigation for it\n\t// was then triggered and is still running while the invalidation kicks in,\n\t// at which point the invalidation should take over and \"win\".\n\tload_cache = null;\n\n\tconst navigation_result = intent && (await load_route(intent));\n\tif (!navigation_result || nav_token !== token) return;\n\n\tif (navigation_result.type === 'redirect') {\n\t\treturn _goto(new URL(navigation_result.location, current.url).href, {}, 1, nav_token);\n\t}\n\n\tif (navigation_result.props.page) {\n\t\tObject.assign(page, navigation_result.props.page);\n\t}\n\tcurrent = navigation_result.state;\n\treset_invalidation();\n\troot.$set(navigation_result.props);\n\tupdate(navigation_result.props.page);\n}\n\nfunction reset_invalidation() {\n\tinvalidated.length = 0;\n\tforce_invalidation = false;\n}\n\n/** @param {number} index */\nfunction capture_snapshot(index) {\n\tif (components.some((c) => c?.snapshot)) {\n\t\tsnapshots[index] = components.map((c) => c?.snapshot?.capture());\n\t}\n}\n\n/** @param {number} index */\nfunction restore_snapshot(index) {\n\tsnapshots[index]?.forEach((value, i) => {\n\t\tcomponents[i]?.snapshot?.restore(value);\n\t});\n}\n\nfunction persist_state() {\n\tupdate_scroll_positions(current_history_index);\n\tstorage.set(SCROLL_KEY, scroll_positions);\n\n\tcapture_snapshot(current_navigation_index);\n\tstorage.set(SNAPSHOT_KEY, snapshots);\n}\n\n/**\n * @param {string | URL} url\n * @param {{ replaceState?: boolean; noScroll?: boolean; keepFocus?: boolean; invalidateAll?: boolean; invalidate?: Array boolean)>; state?: Record }} options\n * @param {number} redirect_count\n * @param {{}} [nav_token]\n */\nasync function _goto(url, options, redirect_count, nav_token) {\n\treturn navigate({\n\t\ttype: 'goto',\n\t\turl: resolve_url(url),\n\t\tkeepfocus: options.keepFocus,\n\t\tnoscroll: options.noScroll,\n\t\treplace_state: options.replaceState,\n\t\tstate: options.state,\n\t\tredirect_count,\n\t\tnav_token,\n\t\taccept: () => {\n\t\t\tif (options.invalidateAll) {\n\t\t\t\tforce_invalidation = true;\n\t\t\t}\n\n\t\t\tif (options.invalidate) {\n\t\t\t\toptions.invalidate.forEach(push_invalidated);\n\t\t\t}\n\t\t}\n\t});\n}\n\n/** @param {import('./types.js').NavigationIntent} intent */\nasync function _preload_data(intent) {\n\t// Reuse the existing pending preload if it's for the same navigation.\n\t// Prevents an edge case where same preload is triggered multiple times,\n\t// then a later one is becoming the real navigation and the preload tokens\n\t// get out of sync.\n\tif (intent.id !== load_cache?.id) {\n\t\tconst preload = {};\n\t\tpreload_tokens.add(preload);\n\t\tload_cache = {\n\t\t\tid: intent.id,\n\t\t\ttoken: preload,\n\t\t\tpromise: load_route({ ...intent, preload }).then((result) => {\n\t\t\t\tpreload_tokens.delete(preload);\n\t\t\t\tif (result.type === 'loaded' && result.state.error) {\n\t\t\t\t\t// Don't cache errors, because they might be transient\n\t\t\t\t\tload_cache = null;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t})\n\t\t};\n\t}\n\n\treturn load_cache.promise;\n}\n\n/**\n * @param {URL} url\n * @returns {Promise}\n */\nasync function _preload_code(url) {\n\tconst route = (await get_navigation_intent(url, false))?.route;\n\n\tif (route) {\n\t\tawait Promise.all([...route.layouts, route.leaf].map((load) => load?.[1]()));\n\t}\n}\n\n/**\n * @param {import('./types.js').NavigationFinished} result\n * @param {HTMLElement} target\n * @param {boolean} hydrate\n */\nfunction initialize(result, target, hydrate) {\n\tif (DEV && result.state.error && document.querySelector('vite-error-overlay')) return;\n\n\tcurrent = result.state;\n\n\tconst style = document.querySelector('style[data-sveltekit]');\n\tif (style) style.remove();\n\n\tObject.assign(page, /** @type {import('@sveltejs/kit').Page} */ (result.props.page));\n\n\troot = new app.root({\n\t\ttarget,\n\t\tprops: { ...result.props, stores, components },\n\t\thydrate,\n\t\t// @ts-ignore Svelte 5 specific: asynchronously instantiate the component, i.e. don't call flushSync\n\t\tsync: false\n\t});\n\n\trestore_snapshot(current_navigation_index);\n\n\tif (hydrate) {\n\t\t/** @type {import('@sveltejs/kit').AfterNavigate} */\n\t\tconst navigation = {\n\t\t\tfrom: null,\n\t\t\tto: {\n\t\t\t\tparams: current.params,\n\t\t\t\troute: { id: current.route?.id ?? null },\n\t\t\t\turl: new URL(location.href)\n\t\t\t},\n\t\t\twillUnload: false,\n\t\t\ttype: 'enter',\n\t\t\tcomplete: Promise.resolve()\n\t\t};\n\n\t\tafter_navigate_callbacks.forEach((fn) => fn(navigation));\n\t}\n\n\tstarted = true;\n}\n\n/**\n *\n * @param {{\n * url: URL;\n * params: Record;\n * branch: Array;\n * status: number;\n * error: App.Error | null;\n * route: import('types').CSRRoute | null;\n * form?: Record | null;\n * }} opts\n */\nfunction get_navigation_result_from_branch({ url, params, branch, status, error, route, form }) {\n\t/** @type {import('types').TrailingSlash} */\n\tlet slash = 'never';\n\n\t// if `paths.base === '/a/b/c`, then the root route is always `/a/b/c/`, regardless of\n\t// the `trailingSlash` route option, so that relative paths to JS and CSS work\n\tif (base && (url.pathname === base || url.pathname === base + '/')) {\n\t\tslash = 'always';\n\t} else {\n\t\tfor (const node of branch) {\n\t\t\tif (node?.slash !== undefined) slash = node.slash;\n\t\t}\n\t}\n\n\turl.pathname = normalize_path(url.pathname, slash);\n\n\t// eslint-disable-next-line\n\turl.search = url.search; // turn `/?` into `/`\n\n\t/** @type {import('./types.js').NavigationFinished} */\n\tconst result = {\n\t\ttype: 'loaded',\n\t\tstate: {\n\t\t\turl,\n\t\t\tparams,\n\t\t\tbranch,\n\t\t\terror,\n\t\t\troute\n\t\t},\n\t\tprops: {\n\t\t\t// @ts-ignore Somehow it's getting SvelteComponent and SvelteComponentDev mixed up\n\t\t\tconstructors: compact(branch).map((branch_node) => branch_node.node.component),\n\t\t\tpage: clone_page(page)\n\t\t}\n\t};\n\n\tif (form !== undefined) {\n\t\tresult.props.form = form;\n\t}\n\n\tlet data = {};\n\tlet data_changed = !page;\n\n\tlet p = 0;\n\n\tfor (let i = 0; i < Math.max(branch.length, current.branch.length); i += 1) {\n\t\tconst node = branch[i];\n\t\tconst prev = current.branch[i];\n\n\t\tif (node?.data !== prev?.data) data_changed = true;\n\t\tif (!node) continue;\n\n\t\tdata = { ...data, ...node.data };\n\n\t\t// Only set props if the node actually updated. This prevents needless rerenders.\n\t\tif (data_changed) {\n\t\t\tresult.props[`data_${p}`] = data;\n\t\t}\n\n\t\tp += 1;\n\t}\n\n\tconst page_changed =\n\t\t!current.url ||\n\t\turl.href !== current.url.href ||\n\t\tcurrent.error !== error ||\n\t\t(form !== undefined && form !== page.form) ||\n\t\tdata_changed;\n\n\tif (page_changed) {\n\t\tresult.props.page = {\n\t\t\terror,\n\t\t\tparams,\n\t\t\troute: {\n\t\t\t\tid: route?.id ?? null\n\t\t\t},\n\t\t\tstate: {},\n\t\t\tstatus,\n\t\t\turl: new URL(url),\n\t\t\tform: form ?? null,\n\t\t\t// The whole page store is updated, but this way the object reference stays the same\n\t\t\tdata: data_changed ? data : page.data\n\t\t};\n\t}\n\n\treturn result;\n}\n\n/**\n * Call the universal load function of the given node, if it exists.\n *\n * @param {{\n * loader: import('types').CSRPageNodeLoader;\n * \t parent: () => Promise>;\n * url: URL;\n * params: Record;\n * route: { id: string | null };\n * \t server_data_node: import('./types.js').DataNode | null;\n * }} options\n * @returns {Promise}\n */\nasync function load_node({ loader, parent, url, params, route, server_data_node }) {\n\t/** @type {Record | null} */\n\tlet data = null;\n\n\tlet is_tracking = true;\n\n\t/** @type {import('types').Uses} */\n\tconst uses = {\n\t\tdependencies: new Set(),\n\t\tparams: new Set(),\n\t\tparent: false,\n\t\troute: false,\n\t\turl: false,\n\t\tsearch_params: new Set()\n\t};\n\n\tconst node = await loader();\n\n\tif (DEV) {\n\t\tvalidate_page_exports(node.universal);\n\n\t\tif (node.universal && app.hash) {\n\t\t\tconst options = Object.keys(node.universal).filter((o) => o !== 'load');\n\n\t\t\tif (options.length > 0) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Page options are ignored when \\`router.type === 'hash'\\` (${route.id} has ${options\n\t\t\t\t\t\t.filter((o) => o !== 'load')\n\t\t\t\t\t\t.map((o) => `'${o}'`)\n\t\t\t\t\t\t.join(', ')})`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (node.universal?.load) {\n\t\t/** @param {string[]} deps */\n\t\tfunction depends(...deps) {\n\t\t\tfor (const dep of deps) {\n\t\t\t\tif (DEV) validate_depends(/** @type {string} */ (route.id), dep);\n\n\t\t\t\tconst { href } = new URL(dep, url);\n\t\t\t\tuses.dependencies.add(href);\n\t\t\t}\n\t\t}\n\n\t\t/** @type {import('@sveltejs/kit').LoadEvent} */\n\t\tconst load_input = {\n\t\t\troute: new Proxy(route, {\n\t\t\t\tget: (target, key) => {\n\t\t\t\t\tif (is_tracking) {\n\t\t\t\t\t\tuses.route = true;\n\t\t\t\t\t}\n\t\t\t\t\treturn target[/** @type {'id'} */ (key)];\n\t\t\t\t}\n\t\t\t}),\n\t\t\tparams: new Proxy(params, {\n\t\t\t\tget: (target, key) => {\n\t\t\t\t\tif (is_tracking) {\n\t\t\t\t\t\tuses.params.add(/** @type {string} */ (key));\n\t\t\t\t\t}\n\t\t\t\t\treturn target[/** @type {string} */ (key)];\n\t\t\t\t}\n\t\t\t}),\n\t\t\tdata: server_data_node?.data ?? null,\n\t\t\turl: make_trackable(\n\t\t\t\turl,\n\t\t\t\t() => {\n\t\t\t\t\tif (is_tracking) {\n\t\t\t\t\t\tuses.url = true;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t(param) => {\n\t\t\t\t\tif (is_tracking) {\n\t\t\t\t\t\tuses.search_params.add(param);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tapp.hash\n\t\t\t),\n\t\t\tasync fetch(resource, init) {\n\t\t\t\tif (resource instanceof Request) {\n\t\t\t\t\t// we're not allowed to modify the received `Request` object, so in order\n\t\t\t\t\t// to fixup relative urls we create a new equivalent `init` object instead\n\t\t\t\t\tinit = {\n\t\t\t\t\t\t// the request body must be consumed in memory until browsers\n\t\t\t\t\t\t// implement streaming request bodies and/or the body getter\n\t\t\t\t\t\tbody:\n\t\t\t\t\t\t\tresource.method === 'GET' || resource.method === 'HEAD'\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: await resource.blob(),\n\t\t\t\t\t\tcache: resource.cache,\n\t\t\t\t\t\tcredentials: resource.credentials,\n\t\t\t\t\t\t// the server sets headers to `undefined` if there are no headers but\n\t\t\t\t\t\t// the client defaults to an empty Headers object in the Request object.\n\t\t\t\t\t\t// To keep the two values in sync, we explicitly set the headers to `undefined`.\n\t\t\t\t\t\t// Also, not sure why, but sometimes 0 is evaluated as truthy so we need to\n\t\t\t\t\t\t// explicitly compare the headers length to a number here\n\t\t\t\t\t\theaders: [...resource.headers].length > 0 ? resource?.headers : undefined,\n\t\t\t\t\t\tintegrity: resource.integrity,\n\t\t\t\t\t\tkeepalive: resource.keepalive,\n\t\t\t\t\t\tmethod: resource.method,\n\t\t\t\t\t\tmode: resource.mode,\n\t\t\t\t\t\tredirect: resource.redirect,\n\t\t\t\t\t\treferrer: resource.referrer,\n\t\t\t\t\t\treferrerPolicy: resource.referrerPolicy,\n\t\t\t\t\t\tsignal: resource.signal,\n\t\t\t\t\t\t...init\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst { resolved, promise } = resolve_fetch_url(resource, init, url);\n\n\t\t\t\tif (is_tracking) {\n\t\t\t\t\tdepends(resolved.href);\n\t\t\t\t}\n\n\t\t\t\treturn promise;\n\t\t\t},\n\t\t\tsetHeaders: () => {}, // noop\n\t\t\tdepends,\n\t\t\tparent() {\n\t\t\t\tif (is_tracking) {\n\t\t\t\t\tuses.parent = true;\n\t\t\t\t}\n\t\t\t\treturn parent();\n\t\t\t},\n\t\t\tuntrack(fn) {\n\t\t\t\tis_tracking = false;\n\t\t\t\ttry {\n\t\t\t\t\treturn fn();\n\t\t\t\t} finally {\n\t\t\t\t\tis_tracking = true;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (DEV) {\n\t\t\ttry {\n\t\t\t\tlock_fetch();\n\t\t\t\tdata = (await node.universal.load.call(null, load_input)) ?? null;\n\t\t\t\tif (data != null && Object.getPrototypeOf(data) !== Object.prototype) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`a load function related to route '${route.id}' returned ${\n\t\t\t\t\t\t\ttypeof data !== 'object'\n\t\t\t\t\t\t\t\t? `a ${typeof data}`\n\t\t\t\t\t\t\t\t: data instanceof Response\n\t\t\t\t\t\t\t\t\t? 'a Response object'\n\t\t\t\t\t\t\t\t\t: Array.isArray(data)\n\t\t\t\t\t\t\t\t\t\t? 'an array'\n\t\t\t\t\t\t\t\t\t\t: 'a non-plain object'\n\t\t\t\t\t\t}, but must return a plain object at the top level (i.e. \\`return {...}\\`)`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tunlock_fetch();\n\t\t\t}\n\t\t} else {\n\t\t\tdata = (await node.universal.load.call(null, load_input)) ?? null;\n\t\t}\n\t}\n\n\treturn {\n\t\tnode,\n\t\tloader,\n\t\tserver: server_data_node,\n\t\tuniversal: node.universal?.load ? { type: 'data', data, uses } : null,\n\t\tdata: data ?? server_data_node?.data ?? null,\n\t\tslash: node.universal?.trailingSlash ?? server_data_node?.slash\n\t};\n}\n\n/**\n * @param {Request | string | URL} input\n * @param {RequestInit | undefined} init\n * @param {URL} url\n */\nfunction resolve_fetch_url(input, init, url) {\n\tlet requested = input instanceof Request ? input.url : input;\n\n\t// we must fixup relative urls so they are resolved from the target page\n\tconst resolved = new URL(requested, url);\n\n\t// match ssr serialized data url, which is important to find cached responses\n\tif (resolved.origin === url.origin) {\n\t\trequested = resolved.href.slice(url.origin.length);\n\t}\n\n\t// prerendered pages may be served from any origin, so `initial_fetch` urls shouldn't be resolved\n\tconst promise = started\n\t\t? subsequent_fetch(requested, resolved.href, init)\n\t\t: initial_fetch(requested, init);\n\n\treturn { resolved, promise };\n}\n\n/**\n * @param {boolean} parent_changed\n * @param {boolean} route_changed\n * @param {boolean} url_changed\n * @param {Set} search_params_changed\n * @param {import('types').Uses | undefined} uses\n * @param {Record} params\n */\nfunction has_changed(\n\tparent_changed,\n\troute_changed,\n\turl_changed,\n\tsearch_params_changed,\n\tuses,\n\tparams\n) {\n\tif (force_invalidation) return true;\n\n\tif (!uses) return false;\n\n\tif (uses.parent && parent_changed) return true;\n\tif (uses.route && route_changed) return true;\n\tif (uses.url && url_changed) return true;\n\n\tfor (const tracked_params of uses.search_params) {\n\t\tif (search_params_changed.has(tracked_params)) return true;\n\t}\n\n\tfor (const param of uses.params) {\n\t\tif (params[param] !== current.params[param]) return true;\n\t}\n\n\tfor (const href of uses.dependencies) {\n\t\tif (invalidated.some((fn) => fn(new URL(href)))) return true;\n\t}\n\n\treturn false;\n}\n\n/**\n * @param {import('types').ServerDataNode | import('types').ServerDataSkippedNode | null} node\n * @param {import('./types.js').DataNode | null} [previous]\n * @returns {import('./types.js').DataNode | null}\n */\nfunction create_data_node(node, previous) {\n\tif (node?.type === 'data') return node;\n\tif (node?.type === 'skip') return previous ?? null;\n\treturn null;\n}\n\n/**\n * @param {URL | null} old_url\n * @param {URL} new_url\n */\nfunction diff_search_params(old_url, new_url) {\n\tif (!old_url) return new Set(new_url.searchParams.keys());\n\n\tconst changed = new Set([...old_url.searchParams.keys(), ...new_url.searchParams.keys()]);\n\n\tfor (const key of changed) {\n\t\tconst old_values = old_url.searchParams.getAll(key);\n\t\tconst new_values = new_url.searchParams.getAll(key);\n\n\t\tif (\n\t\t\told_values.every((value) => new_values.includes(value)) &&\n\t\t\tnew_values.every((value) => old_values.includes(value))\n\t\t) {\n\t\t\tchanged.delete(key);\n\t\t}\n\t}\n\n\treturn changed;\n}\n\n/**\n * @param {Omit & { error: App.Error }} opts\n * @returns {import('./types.js').NavigationFinished}\n */\nfunction preload_error({ error, url, route, params }) {\n\treturn {\n\t\ttype: 'loaded',\n\t\tstate: {\n\t\t\terror,\n\t\t\turl,\n\t\t\troute,\n\t\t\tparams,\n\t\t\tbranch: []\n\t\t},\n\t\tprops: {\n\t\t\tpage: clone_page(page),\n\t\t\tconstructors: []\n\t\t}\n\t};\n}\n\n/**\n * @param {import('./types.js').NavigationIntent & { preload?: {} }} intent\n * @returns {Promise}\n */\nasync function load_route({ id, invalidating, url, params, route, preload }) {\n\tif (load_cache?.id === id) {\n\t\t// the preload becomes the real navigation\n\t\tpreload_tokens.delete(load_cache.token);\n\t\treturn load_cache.promise;\n\t}\n\n\tconst { errors, layouts, leaf } = route;\n\n\tconst loaders = [...layouts, leaf];\n\n\t// preload modules to avoid waterfall, but handle rejections\n\t// so they don't get reported to Sentry et al (we don't need\n\t// to act on the failures at this point)\n\terrors.forEach((loader) => loader?.().catch(() => {}));\n\tloaders.forEach((loader) => loader?.[1]().catch(() => {}));\n\n\t/** @type {import('types').ServerNodesResponse | import('types').ServerRedirectNode | null} */\n\tlet server_data = null;\n\tconst url_changed = current.url ? id !== get_page_key(current.url) : false;\n\tconst route_changed = current.route ? route.id !== current.route.id : false;\n\tconst search_params_changed = diff_search_params(current.url, url);\n\n\tlet parent_invalid = false;\n\tconst invalid_server_nodes = loaders.map((loader, i) => {\n\t\tconst previous = current.branch[i];\n\n\t\tconst invalid =\n\t\t\t!!loader?.[0] &&\n\t\t\t(previous?.loader !== loader[1] ||\n\t\t\t\thas_changed(\n\t\t\t\t\tparent_invalid,\n\t\t\t\t\troute_changed,\n\t\t\t\t\turl_changed,\n\t\t\t\t\tsearch_params_changed,\n\t\t\t\t\tprevious.server?.uses,\n\t\t\t\t\tparams\n\t\t\t\t));\n\n\t\tif (invalid) {\n\t\t\t// For the next one\n\t\t\tparent_invalid = true;\n\t\t}\n\n\t\treturn invalid;\n\t});\n\n\tif (invalid_server_nodes.some(Boolean)) {\n\t\ttry {\n\t\t\tserver_data = await load_data(url, invalid_server_nodes);\n\t\t} catch (error) {\n\t\t\tconst handled_error = await handle_error(error, { url, params, route: { id } });\n\n\t\t\tif (preload_tokens.has(preload)) {\n\t\t\t\treturn preload_error({ error: handled_error, url, params, route });\n\t\t\t}\n\n\t\t\treturn load_root_error_page({\n\t\t\t\tstatus: get_status(error),\n\t\t\t\terror: handled_error,\n\t\t\t\turl,\n\t\t\t\troute\n\t\t\t});\n\t\t}\n\n\t\tif (server_data.type === 'redirect') {\n\t\t\treturn server_data;\n\t\t}\n\t}\n\n\tconst server_data_nodes = server_data?.nodes;\n\n\tlet parent_changed = false;\n\n\tconst branch_promises = loaders.map(async (loader, i) => {\n\t\tif (!loader) return;\n\n\t\t/** @type {import('./types.js').BranchNode | undefined} */\n\t\tconst previous = current.branch[i];\n\n\t\tconst server_data_node = server_data_nodes?.[i];\n\n\t\t// re-use data from previous load if it's still valid\n\t\tconst valid =\n\t\t\t(!server_data_node || server_data_node.type === 'skip') &&\n\t\t\tloader[1] === previous?.loader &&\n\t\t\t!has_changed(\n\t\t\t\tparent_changed,\n\t\t\t\troute_changed,\n\t\t\t\turl_changed,\n\t\t\t\tsearch_params_changed,\n\t\t\t\tprevious.universal?.uses,\n\t\t\t\tparams\n\t\t\t);\n\t\tif (valid) return previous;\n\n\t\tparent_changed = true;\n\n\t\tif (server_data_node?.type === 'error') {\n\t\t\t// rethrow and catch below\n\t\t\tthrow server_data_node;\n\t\t}\n\n\t\treturn load_node({\n\t\t\tloader: loader[1],\n\t\t\turl,\n\t\t\tparams,\n\t\t\troute,\n\t\t\tparent: async () => {\n\t\t\t\tconst data = {};\n\t\t\t\tfor (let j = 0; j < i; j += 1) {\n\t\t\t\t\tObject.assign(data, (await branch_promises[j])?.data);\n\t\t\t\t}\n\t\t\t\treturn data;\n\t\t\t},\n\t\t\tserver_data_node: create_data_node(\n\t\t\t\t// server_data_node is undefined if it wasn't reloaded from the server;\n\t\t\t\t// and if current loader uses server data, we want to reuse previous data.\n\t\t\t\tserver_data_node === undefined && loader[0] ? { type: 'skip' } : (server_data_node ?? null),\n\t\t\t\tloader[0] ? previous?.server : undefined\n\t\t\t)\n\t\t});\n\t});\n\n\t// if we don't do this, rejections will be unhandled\n\tfor (const p of branch_promises) p.catch(() => {});\n\n\t/** @type {Array} */\n\tconst branch = [];\n\n\tfor (let i = 0; i < loaders.length; i += 1) {\n\t\tif (loaders[i]) {\n\t\t\ttry {\n\t\t\t\tbranch.push(await branch_promises[i]);\n\t\t\t} catch (err) {\n\t\t\t\tif (err instanceof Redirect) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'redirect',\n\t\t\t\t\t\tlocation: err.location\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (preload_tokens.has(preload)) {\n\t\t\t\t\treturn preload_error({\n\t\t\t\t\t\terror: await handle_error(err, { params, url, route: { id: route.id } }),\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tparams,\n\t\t\t\t\t\troute\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tlet status = get_status(err);\n\t\t\t\t/** @type {App.Error} */\n\t\t\t\tlet error;\n\n\t\t\t\tif (server_data_nodes?.includes(/** @type {import('types').ServerErrorNode} */ (err))) {\n\t\t\t\t\t// this is the server error rethrown above, reconstruct but don't invoke\n\t\t\t\t\t// the client error handler; it should've already been handled on the server\n\t\t\t\t\tstatus = /** @type {import('types').ServerErrorNode} */ (err).status ?? status;\n\t\t\t\t\terror = /** @type {import('types').ServerErrorNode} */ (err).error;\n\t\t\t\t} else if (err instanceof HttpError) {\n\t\t\t\t\terror = err.body;\n\t\t\t\t} else {\n\t\t\t\t\t// Referenced node could have been removed due to redeploy, check\n\t\t\t\t\tconst updated = await stores.updated.check();\n\t\t\t\t\tif (updated) {\n\t\t\t\t\t\t// Before reloading, try to update the service worker if it exists\n\t\t\t\t\t\tawait update_service_worker();\n\t\t\t\t\t\treturn await native_navigation(url);\n\t\t\t\t\t}\n\n\t\t\t\t\terror = await handle_error(err, { params, url, route: { id: route.id } });\n\t\t\t\t}\n\n\t\t\t\tconst error_load = await load_nearest_error_page(i, branch, errors);\n\t\t\t\tif (error_load) {\n\t\t\t\t\treturn get_navigation_result_from_branch({\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tparams,\n\t\t\t\t\t\tbranch: branch.slice(0, error_load.idx).concat(error_load.node),\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\terror,\n\t\t\t\t\t\troute\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn await server_fallback(url, { id: route.id }, error, status);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// push an empty slot so we can rewind past gaps to the\n\t\t\t// layout that corresponds with an +error.svelte page\n\t\t\tbranch.push(undefined);\n\t\t}\n\t}\n\n\treturn get_navigation_result_from_branch({\n\t\turl,\n\t\tparams,\n\t\tbranch,\n\t\tstatus: 200,\n\t\terror: null,\n\t\troute,\n\t\t// Reset `form` on navigation, but not invalidation\n\t\tform: invalidating ? undefined : null\n\t});\n}\n\n/**\n * @param {number} i Start index to backtrack from\n * @param {Array} branch Branch to backtrack\n * @param {Array} errors All error pages for this branch\n * @returns {Promise<{idx: number; node: import('./types.js').BranchNode} | undefined>}\n */\nasync function load_nearest_error_page(i, branch, errors) {\n\twhile (i--) {\n\t\tif (errors[i]) {\n\t\t\tlet j = i;\n\t\t\twhile (!branch[j]) j -= 1;\n\t\t\ttry {\n\t\t\t\treturn {\n\t\t\t\t\tidx: j + 1,\n\t\t\t\t\tnode: {\n\t\t\t\t\t\tnode: await /** @type {import('types').CSRPageNodeLoader } */ (errors[i])(),\n\t\t\t\t\t\tloader: /** @type {import('types').CSRPageNodeLoader } */ (errors[i]),\n\t\t\t\t\t\tdata: {},\n\t\t\t\t\t\tserver: null,\n\t\t\t\t\t\tuniversal: null\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @param {{\n * status: number;\n * error: App.Error;\n * url: URL;\n * route: { id: string | null }\n * }} opts\n * @returns {Promise}\n */\nasync function load_root_error_page({ status, error, url, route }) {\n\t/** @type {Record} */\n\tconst params = {}; // error page does not have params\n\n\t/** @type {import('types').ServerDataNode | null} */\n\tlet server_data_node = null;\n\n\tconst default_layout_has_server_load = app.server_loads[0] === 0;\n\n\tif (default_layout_has_server_load) {\n\t\t// TODO post-https://github.com/sveltejs/kit/discussions/6124 we can use\n\t\t// existing root layout data\n\t\ttry {\n\t\t\tconst server_data = await load_data(url, [true]);\n\n\t\t\tif (\n\t\t\t\tserver_data.type !== 'data' ||\n\t\t\t\t(server_data.nodes[0] && server_data.nodes[0].type !== 'data')\n\t\t\t) {\n\t\t\t\tthrow 0;\n\t\t\t}\n\n\t\t\tserver_data_node = server_data.nodes[0] ?? null;\n\t\t} catch {\n\t\t\t// at this point we have no choice but to fall back to the server, if it wouldn't\n\t\t\t// bring us right back here, turning this into an endless loop\n\t\t\tif (url.origin !== origin || url.pathname !== location.pathname || hydrated) {\n\t\t\t\tawait native_navigation(url);\n\t\t\t}\n\t\t}\n\t}\n\n\ttry {\n\t\tconst root_layout = await load_node({\n\t\t\tloader: default_layout_loader,\n\t\t\turl,\n\t\t\tparams,\n\t\t\troute,\n\t\t\tparent: () => Promise.resolve({}),\n\t\t\tserver_data_node: create_data_node(server_data_node)\n\t\t});\n\n\t\t/** @type {import('./types.js').BranchNode} */\n\t\tconst root_error = {\n\t\t\tnode: await default_error_loader(),\n\t\t\tloader: default_error_loader,\n\t\t\tuniversal: null,\n\t\t\tserver: null,\n\t\t\tdata: null\n\t\t};\n\n\t\treturn get_navigation_result_from_branch({\n\t\t\turl,\n\t\t\tparams,\n\t\t\tbranch: [root_layout, root_error],\n\t\t\tstatus,\n\t\t\terror,\n\t\t\troute: null\n\t\t});\n\t} catch (error) {\n\t\tif (error instanceof Redirect) {\n\t\t\treturn _goto(new URL(error.location, location.href), {}, 0);\n\t\t}\n\n\t\t// TODO: this falls back to the server when a server exists, but what about SPA mode?\n\t\tthrow error;\n\t}\n}\n\n/**\n * Resolve the relative rerouted URL for a client-side navigation\n * @param {URL} url\n * @returns {Promise}\n */\nasync function get_rerouted_url(url) {\n\tconst href = url.href;\n\n\tif (reroute_cache.has(href)) {\n\t\treturn reroute_cache.get(href);\n\t}\n\n\tlet rerouted;\n\n\ttry {\n\t\tconst promise = (async () => {\n\t\t\t// reroute could alter the given URL, so we pass a copy\n\t\t\tlet rerouted =\n\t\t\t\t(await app.hooks.reroute({\n\t\t\t\t\turl: new URL(url),\n\t\t\t\t\tfetch: async (input, init) => {\n\t\t\t\t\t\treturn resolve_fetch_url(input, init, url).promise;\n\t\t\t\t\t}\n\t\t\t\t})) ?? url;\n\n\t\t\tif (typeof rerouted === 'string') {\n\t\t\t\tconst tmp = new URL(url); // do not mutate the incoming URL\n\n\t\t\t\tif (app.hash) {\n\t\t\t\t\ttmp.hash = rerouted;\n\t\t\t\t} else {\n\t\t\t\t\ttmp.pathname = rerouted;\n\t\t\t\t}\n\n\t\t\t\trerouted = tmp;\n\t\t\t}\n\n\t\t\treturn rerouted;\n\t\t})();\n\n\t\treroute_cache.set(href, promise);\n\t\trerouted = await promise;\n\t} catch (e) {\n\t\treroute_cache.delete(href);\n\t\tif (DEV) {\n\t\t\t// in development, print the error...\n\t\t\tconsole.error(e);\n\n\t\t\t// ...and pause execution, since otherwise we will immediately reload the page\n\t\t\tdebugger; // eslint-disable-line\n\t\t}\n\n\t\t// fall back to native navigation\n\t\treturn;\n\t}\n\n\treturn rerouted;\n}\n\n/**\n * Resolve the full info (which route, params, etc.) for a client-side navigation from the URL,\n * taking the reroute hook into account. If this isn't a client-side-navigation (or the URL is undefined),\n * returns undefined.\n * @param {URL | undefined} url\n * @param {boolean} invalidating\n * @returns {Promise}\n */\nasync function get_navigation_intent(url, invalidating) {\n\tif (!url) return;\n\tif (is_external_url(url, base, app.hash)) return;\n\n\tif (__SVELTEKIT_CLIENT_ROUTING__) {\n\t\tconst rerouted = await get_rerouted_url(url);\n\t\tif (!rerouted) return;\n\n\t\tconst path = get_url_path(rerouted);\n\n\t\tfor (const route of routes) {\n\t\t\tconst params = route.exec(path);\n\n\t\t\tif (params) {\n\t\t\t\treturn {\n\t\t\t\t\tid: get_page_key(url),\n\t\t\t\t\tinvalidating,\n\t\t\t\t\troute,\n\t\t\t\t\tparams: decode_params(params),\n\t\t\t\t\turl\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t} else {\n\t\t/** @type {{ route?: import('types').CSRRouteServer, params: Record}} */\n\t\tconst { route, params } = await import(\n\t\t\t/* @vite-ignore */\n\t\t\tadd_resolution_suffix(url.pathname)\n\t\t);\n\n\t\tif (!route) return;\n\n\t\treturn {\n\t\t\tid: get_page_key(url),\n\t\t\tinvalidating,\n\t\t\troute: parse_server_route(route, app.nodes),\n\t\t\tparams,\n\t\t\turl\n\t\t};\n\t}\n}\n\n/** @param {URL} url */\nfunction get_url_path(url) {\n\treturn (\n\t\tdecode_pathname(\n\t\t\tapp.hash ? url.hash.replace(/^#/, '').replace(/[?#].+/, '') : url.pathname.slice(base.length)\n\t\t) || '/'\n\t);\n}\n\n/** @param {URL} url */\nfunction get_page_key(url) {\n\treturn (app.hash ? url.hash.replace(/^#/, '') : url.pathname) + url.search;\n}\n\n/**\n * @param {{\n * url: URL;\n * type: import('@sveltejs/kit').Navigation[\"type\"];\n * intent?: import('./types.js').NavigationIntent;\n * delta?: number;\n * }} opts\n */\nfunction _before_navigate({ url, type, intent, delta }) {\n\tlet should_block = false;\n\n\tconst nav = create_navigation(current, intent, url, type);\n\n\tif (delta !== undefined) {\n\t\tnav.navigation.delta = delta;\n\t}\n\n\tconst cancellable = {\n\t\t...nav.navigation,\n\t\tcancel: () => {\n\t\t\tshould_block = true;\n\t\t\tnav.reject(new Error('navigation cancelled'));\n\t\t}\n\t};\n\n\tif (!is_navigating) {\n\t\t// Don't run the event during redirects\n\t\tbefore_navigate_callbacks.forEach((fn) => fn(cancellable));\n\t}\n\n\treturn should_block ? null : nav;\n}\n\n/**\n * @param {{\n * type: import('@sveltejs/kit').NavigationType;\n * url: URL;\n * popped?: {\n * state: Record;\n * scroll: { x: number, y: number };\n * delta: number;\n * };\n * keepfocus?: boolean;\n * noscroll?: boolean;\n * replace_state?: boolean;\n * state?: Record;\n * redirect_count?: number;\n * nav_token?: {};\n * accept?: () => void;\n * block?: () => void;\n * }} opts\n */\nasync function navigate({\n\ttype,\n\turl,\n\tpopped,\n\tkeepfocus,\n\tnoscroll,\n\treplace_state,\n\tstate = {},\n\tredirect_count = 0,\n\tnav_token = {},\n\taccept = noop,\n\tblock = noop\n}) {\n\tconst prev_token = token;\n\ttoken = nav_token;\n\n\tconst intent = await get_navigation_intent(url, false);\n\tconst nav =\n\t\ttype === 'enter'\n\t\t\t? create_navigation(current, intent, url, type)\n\t\t\t: _before_navigate({ url, type, delta: popped?.delta, intent });\n\n\tif (!nav) {\n\t\tblock();\n\t\tif (token === nav_token) token = prev_token;\n\t\treturn;\n\t}\n\n\t// store this before calling `accept()`, which may change the index\n\tconst previous_history_index = current_history_index;\n\tconst previous_navigation_index = current_navigation_index;\n\n\taccept();\n\n\tis_navigating = true;\n\n\tif (started && nav.navigation.type !== 'enter') {\n\t\tstores.navigating.set((navigating.current = nav.navigation));\n\t}\n\n\tlet navigation_result = intent && (await load_route(intent));\n\n\tif (!navigation_result) {\n\t\tif (is_external_url(url, base, app.hash)) {\n\t\t\tif (DEV && app.hash) {\n\t\t\t\t// Special case for hash mode during DEV: If someone accidentally forgets to use a hash for the link,\n\t\t\t\t// they would end up here in an endless loop. Fall back to error page in that case\n\t\t\t\tnavigation_result = await server_fallback(\n\t\t\t\t\turl,\n\t\t\t\t\t{ id: null },\n\t\t\t\t\tawait handle_error(\n\t\t\t\t\t\tnew SvelteKitError(\n\t\t\t\t\t\t\t404,\n\t\t\t\t\t\t\t'Not Found',\n\t\t\t\t\t\t\t`Not found: ${url.pathname} (did you forget the hash?)`\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\tparams: {},\n\t\t\t\t\t\t\troute: { id: null }\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t404\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn await native_navigation(url);\n\t\t\t}\n\t\t} else {\n\t\t\tnavigation_result = await server_fallback(\n\t\t\t\turl,\n\t\t\t\t{ id: null },\n\t\t\t\tawait handle_error(new SvelteKitError(404, 'Not Found', `Not found: ${url.pathname}`), {\n\t\t\t\t\turl,\n\t\t\t\t\tparams: {},\n\t\t\t\t\troute: { id: null }\n\t\t\t\t}),\n\t\t\t\t404\n\t\t\t);\n\t\t}\n\t}\n\n\t// if this is an internal navigation intent, use the normalized\n\t// URL for the rest of the function\n\turl = intent?.url || url;\n\n\t// abort if user navigated during update\n\tif (token !== nav_token) {\n\t\tnav.reject(new Error('navigation aborted'));\n\t\treturn false;\n\t}\n\n\tif (navigation_result.type === 'redirect') {\n\t\t// whatwg fetch spec https://fetch.spec.whatwg.org/#http-redirect-fetch says to error after 20 redirects\n\t\tif (redirect_count >= 20) {\n\t\t\tnavigation_result = await load_root_error_page({\n\t\t\t\tstatus: 500,\n\t\t\t\terror: await handle_error(new Error('Redirect loop'), {\n\t\t\t\t\turl,\n\t\t\t\t\tparams: {},\n\t\t\t\t\troute: { id: null }\n\t\t\t\t}),\n\t\t\t\turl,\n\t\t\t\troute: { id: null }\n\t\t\t});\n\t\t} else {\n\t\t\tawait _goto(new URL(navigation_result.location, url).href, {}, redirect_count + 1, nav_token);\n\t\t\treturn false;\n\t\t}\n\t} else if (/** @type {number} */ (navigation_result.props.page.status) >= 400) {\n\t\tconst updated = await stores.updated.check();\n\t\tif (updated) {\n\t\t\t// Before reloading, try to update the service worker if it exists\n\t\t\tawait update_service_worker();\n\t\t\tawait native_navigation(url);\n\t\t}\n\t}\n\n\t// reset invalidation only after a finished navigation. If there are redirects or\n\t// additional invalidations, they should get the same invalidation treatment\n\treset_invalidation();\n\n\tupdating = true;\n\n\tupdate_scroll_positions(previous_history_index);\n\tcapture_snapshot(previous_navigation_index);\n\n\t// ensure the url pathname matches the page's trailing slash option\n\tif (navigation_result.props.page.url.pathname !== url.pathname) {\n\t\turl.pathname = navigation_result.props.page.url.pathname;\n\t}\n\n\tstate = popped ? popped.state : state;\n\n\tif (!popped) {\n\t\t// this is a new navigation, rather than a popstate\n\t\tconst change = replace_state ? 0 : 1;\n\n\t\tconst entry = {\n\t\t\t[HISTORY_INDEX]: (current_history_index += change),\n\t\t\t[NAVIGATION_INDEX]: (current_navigation_index += change),\n\t\t\t[STATES_KEY]: state\n\t\t};\n\n\t\tconst fn = replace_state ? history.replaceState : history.pushState;\n\t\tfn.call(history, entry, '', url);\n\n\t\tif (!replace_state) {\n\t\t\tclear_onward_history(current_history_index, current_navigation_index);\n\t\t}\n\t}\n\n\t// reset preload synchronously after the history state has been set to avoid race conditions\n\tload_cache = null;\n\n\tnavigation_result.props.page.state = state;\n\n\tif (started) {\n\t\tcurrent = navigation_result.state;\n\n\t\t// reset url before updating page store\n\t\tif (navigation_result.props.page) {\n\t\t\tnavigation_result.props.page.url = url;\n\t\t}\n\n\t\tconst after_navigate = (\n\t\t\tawait Promise.all(\n\t\t\t\tArray.from(on_navigate_callbacks, (fn) =>\n\t\t\t\t\tfn(/** @type {import('@sveltejs/kit').OnNavigate} */ (nav.navigation))\n\t\t\t\t)\n\t\t\t)\n\t\t).filter(/** @returns {value is () => void} */ (value) => typeof value === 'function');\n\n\t\tif (after_navigate.length > 0) {\n\t\t\tfunction cleanup() {\n\t\t\t\tafter_navigate.forEach((fn) => {\n\t\t\t\t\tafter_navigate_callbacks.delete(fn);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tafter_navigate.push(cleanup);\n\n\t\t\tafter_navigate.forEach((fn) => {\n\t\t\t\tafter_navigate_callbacks.add(fn);\n\t\t\t});\n\t\t}\n\n\t\troot.$set(navigation_result.props);\n\t\tupdate(navigation_result.props.page);\n\t\thas_navigated = true;\n\t} else {\n\t\tinitialize(navigation_result, target, false);\n\t}\n\n\tconst { activeElement } = document;\n\n\t// need to render the DOM before we can scroll to the rendered elements and do focus management\n\tawait tick();\n\n\t// we reset scroll before dealing with focus, to avoid a flash of unscrolled content\n\tconst scroll = popped ? popped.scroll : noscroll ? scroll_state() : null;\n\n\tif (autoscroll) {\n\t\tconst deep_linked = url.hash && document.getElementById(get_id(url));\n\t\tif (scroll) {\n\t\t\tscrollTo(scroll.x, scroll.y);\n\t\t} else if (deep_linked) {\n\t\t\t// Here we use `scrollIntoView` on the element instead of `scrollTo`\n\t\t\t// because it natively supports the `scroll-margin` and `scroll-behavior`\n\t\t\t// CSS properties.\n\t\t\tdeep_linked.scrollIntoView();\n\t\t} else {\n\t\t\tscrollTo(0, 0);\n\t\t}\n\t}\n\n\tconst changed_focus =\n\t\t// reset focus only if any manual focus management didn't override it\n\t\tdocument.activeElement !== activeElement &&\n\t\t// also refocus when activeElement is body already because the\n\t\t// focus event might not have been fired on it yet\n\t\tdocument.activeElement !== document.body;\n\n\tif (!keepfocus && !changed_focus) {\n\t\treset_focus(url);\n\t}\n\n\tautoscroll = true;\n\n\tif (navigation_result.props.page) {\n\t\tObject.assign(page, navigation_result.props.page);\n\t}\n\n\tis_navigating = false;\n\n\tif (type === 'popstate') {\n\t\trestore_snapshot(current_navigation_index);\n\t}\n\n\tnav.fulfil(undefined);\n\n\tafter_navigate_callbacks.forEach((fn) =>\n\t\tfn(/** @type {import('@sveltejs/kit').AfterNavigate} */ (nav.navigation))\n\t);\n\n\tstores.navigating.set((navigating.current = null));\n\n\tupdating = false;\n}\n\n/**\n * Does a full page reload if it wouldn't result in an endless loop in the SPA case\n * @param {URL} url\n * @param {{ id: string | null }} route\n * @param {App.Error} error\n * @param {number} status\n * @returns {Promise}\n */\nasync function server_fallback(url, route, error, status) {\n\tif (url.origin === origin && url.pathname === location.pathname && !hydrated) {\n\t\t// We would reload the same page we're currently on, which isn't hydrated,\n\t\t// which means no SSR, which means we would end up in an endless loop\n\t\treturn await load_root_error_page({\n\t\t\tstatus,\n\t\t\terror,\n\t\t\turl,\n\t\t\troute\n\t\t});\n\t}\n\n\tif (DEV && status !== 404) {\n\t\tconsole.error(\n\t\t\t'An error occurred while loading the page. This will cause a full page reload. (This message will only appear during development.)'\n\t\t);\n\n\t\tdebugger; // eslint-disable-line\n\t}\n\n\treturn await native_navigation(url);\n}\n\nif (import.meta.hot) {\n\timport.meta.hot.on('vite:beforeUpdate', () => {\n\t\tif (current.error) location.reload();\n\t});\n}\n\n/** @typedef {(typeof PRELOAD_PRIORITIES)['hover'] | (typeof PRELOAD_PRIORITIES)['tap']} PreloadDataPriority */\n\nfunction setup_preload() {\n\t/** @type {NodeJS.Timeout} */\n\tlet mousemove_timeout;\n\t/** @type {Element} */\n\tlet current_a;\n\t/** @type {PreloadDataPriority} */\n\tlet current_priority;\n\n\tcontainer.addEventListener('mousemove', (event) => {\n\t\tconst target = /** @type {Element} */ (event.target);\n\n\t\tclearTimeout(mousemove_timeout);\n\t\tmousemove_timeout = setTimeout(() => {\n\t\t\tvoid preload(target, PRELOAD_PRIORITIES.hover);\n\t\t}, 20);\n\t});\n\n\t/** @param {Event} event */\n\tfunction tap(event) {\n\t\tif (event.defaultPrevented) return;\n\t\tvoid preload(/** @type {Element} */ (event.composedPath()[0]), PRELOAD_PRIORITIES.tap);\n\t}\n\n\tcontainer.addEventListener('mousedown', tap);\n\tcontainer.addEventListener('touchstart', tap, { passive: true });\n\n\tconst observer = new IntersectionObserver(\n\t\t(entries) => {\n\t\t\tfor (const entry of entries) {\n\t\t\t\tif (entry.isIntersecting) {\n\t\t\t\t\tvoid _preload_code(new URL(/** @type {HTMLAnchorElement} */ (entry.target).href));\n\t\t\t\t\tobserver.unobserve(entry.target);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ threshold: 0 }\n\t);\n\n\t/**\n\t * @param {Element} element\n\t * @param {PreloadDataPriority} priority\n\t */\n\tasync function preload(element, priority) {\n\t\tconst a = find_anchor(element, container);\n\n\t\t// we don't want to preload data again if the user has already hovered/tapped\n\t\tconst interacted = a === current_a && priority >= current_priority;\n\t\tif (!a || interacted) return;\n\n\t\tconst { url, external, download } = get_link_info(a, base, app.hash);\n\t\tif (external || download) return;\n\n\t\tconst options = get_router_options(a);\n\n\t\t// we don't want to preload data for a page we're already on\n\t\tconst same_url = url && get_page_key(current.url) === get_page_key(url);\n\t\tif (options.reload || same_url) return;\n\n\t\tif (priority <= options.preload_data) {\n\t\t\tcurrent_a = a;\n\t\t\t// we don't want to preload data again on tap if we've already preloaded it on hover\n\t\t\tcurrent_priority = PRELOAD_PRIORITIES.tap;\n\n\t\t\tconst intent = await get_navigation_intent(url, false);\n\t\t\tif (!intent) return;\n\n\t\t\tif (DEV) {\n\t\t\t\tvoid _preload_data(intent).then((result) => {\n\t\t\t\t\tif (result.type === 'loaded' && result.state.error) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t`Preloading data for ${intent.url.pathname} failed with the following error: ${result.state.error.message}\\n` +\n\t\t\t\t\t\t\t\t'If this error is transient, you can ignore it. Otherwise, consider disabling preloading for this route. ' +\n\t\t\t\t\t\t\t\t'This route was preloaded due to a data-sveltekit-preload-data attribute. ' +\n\t\t\t\t\t\t\t\t'See https://svelte.dev/docs/kit/link-options for more info'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tvoid _preload_data(intent);\n\t\t\t}\n\t\t} else if (priority <= options.preload_code) {\n\t\t\tcurrent_a = a;\n\t\t\tcurrent_priority = priority;\n\t\t\tvoid _preload_code(/** @type {URL} */ (url));\n\t\t}\n\t}\n\n\tfunction after_navigate() {\n\t\tobserver.disconnect();\n\n\t\tfor (const a of container.querySelectorAll('a')) {\n\t\t\tconst { url, external, download } = get_link_info(a, base, app.hash);\n\t\t\tif (external || download) continue;\n\n\t\t\tconst options = get_router_options(a);\n\t\t\tif (options.reload) continue;\n\n\t\t\tif (options.preload_code === PRELOAD_PRIORITIES.viewport) {\n\t\t\t\tobserver.observe(a);\n\t\t\t}\n\n\t\t\tif (options.preload_code === PRELOAD_PRIORITIES.eager) {\n\t\t\t\tvoid _preload_code(/** @type {URL} */ (url));\n\t\t\t}\n\t\t}\n\t}\n\n\tafter_navigate_callbacks.add(after_navigate);\n\tafter_navigate();\n}\n\n/**\n * @param {unknown} error\n * @param {import('@sveltejs/kit').NavigationEvent} event\n * @returns {import('types').MaybePromise}\n */\nfunction handle_error(error, event) {\n\tif (error instanceof HttpError) {\n\t\treturn error.body;\n\t}\n\n\tif (DEV) {\n\t\terrored = true;\n\t\tconsole.warn('The next HMR update will cause the page to reload');\n\t}\n\n\tconst status = get_status(error);\n\tconst message = get_message(error);\n\n\treturn (\n\t\tapp.hooks.handleError({ error, event, status, message }) ?? /** @type {any} */ ({ message })\n\t);\n}\n\n/**\n * @template {Function} T\n * @param {Set} callbacks\n * @param {T} callback\n */\nfunction add_navigation_callback(callbacks, callback) {\n\tonMount(() => {\n\t\tcallbacks.add(callback);\n\n\t\treturn () => {\n\t\t\tcallbacks.delete(callback);\n\t\t};\n\t});\n}\n\n/**\n * A lifecycle function that runs the supplied `callback` when the current component mounts, and also whenever we navigate to a URL.\n *\n * `afterNavigate` must be called during a component initialization. It remains active as long as the component is mounted.\n * @param {(navigation: import('@sveltejs/kit').AfterNavigate) => void} callback\n * @returns {void}\n */\nexport function afterNavigate(callback) {\n\tadd_navigation_callback(after_navigate_callbacks, callback);\n}\n\n/**\n * A navigation interceptor that triggers before we navigate to a URL, whether by clicking a link, calling `goto(...)`, or using the browser back/forward controls.\n *\n * Calling `cancel()` will prevent the navigation from completing. If `navigation.type === 'leave'` — meaning the user is navigating away from the app (or closing the tab) — calling `cancel` will trigger the native browser unload confirmation dialog. In this case, the navigation may or may not be cancelled depending on the user's response.\n *\n * When a navigation isn't to a SvelteKit-owned route (and therefore controlled by SvelteKit's client-side router), `navigation.to.route.id` will be `null`.\n *\n * If the navigation will (if not cancelled) cause the document to unload — in other words `'leave'` navigations and `'link'` navigations where `navigation.to.route === null` — `navigation.willUnload` is `true`.\n *\n * `beforeNavigate` must be called during a component initialization. It remains active as long as the component is mounted.\n * @param {(navigation: import('@sveltejs/kit').BeforeNavigate) => void} callback\n * @returns {void}\n */\nexport function beforeNavigate(callback) {\n\tadd_navigation_callback(before_navigate_callbacks, callback);\n}\n\n/**\n * A lifecycle function that runs the supplied `callback` immediately before we navigate to a new URL except during full-page navigations.\n *\n * If you return a `Promise`, SvelteKit will wait for it to resolve before completing the navigation. This allows you to — for example — use `document.startViewTransition`. Avoid promises that are slow to resolve, since navigation will appear stalled to the user.\n *\n * If a function (or a `Promise` that resolves to a function) is returned from the callback, it will be called once the DOM has updated.\n *\n * `onNavigate` must be called during a component initialization. It remains active as long as the component is mounted.\n * @param {(navigation: import('@sveltejs/kit').OnNavigate) => import('types').MaybePromise<(() => void) | void>} callback\n * @returns {void}\n */\nexport function onNavigate(callback) {\n\tadd_navigation_callback(on_navigate_callbacks, callback);\n}\n\n/**\n * If called when the page is being updated following a navigation (in `onMount` or `afterNavigate` or an action, for example), this disables SvelteKit's built-in scroll handling.\n * This is generally discouraged, since it breaks user expectations.\n * @returns {void}\n */\nexport function disableScrollHandling() {\n\tif (!BROWSER) {\n\t\tthrow new Error('Cannot call disableScrollHandling() on the server');\n\t}\n\n\tif (DEV && started && !updating) {\n\t\tthrow new Error('Can only disable scroll handling during navigation');\n\t}\n\n\tif (updating || !started) {\n\t\tautoscroll = false;\n\t}\n}\n\n/**\n * Allows you to navigate programmatically to a given route, with options such as keeping the current element focused.\n * Returns a Promise that resolves when SvelteKit navigates (or fails to navigate, in which case the promise rejects) to the specified `url`.\n *\n * For external URLs, use `window.location = url` instead of calling `goto(url)`.\n *\n * @param {string | URL} url Where to navigate to. Note that if you've set [`config.kit.paths.base`](https://svelte.dev/docs/kit/configuration#paths) and the URL is root-relative, you need to prepend the base path if you want to navigate within the app.\n * @param {Object} [opts] Options related to the navigation\n * @param {boolean} [opts.replaceState] If `true`, will replace the current `history` entry rather than creating a new one with `pushState`\n * @param {boolean} [opts.noScroll] If `true`, the browser will maintain its scroll position rather than scrolling to the top of the page after navigation\n * @param {boolean} [opts.keepFocus] If `true`, the currently focused element will retain focus after navigation. Otherwise, focus will be reset to the body\n * @param {boolean} [opts.invalidateAll] If `true`, all `load` functions of the page will be rerun. See https://svelte.dev/docs/kit/load#rerunning-load-functions for more info on invalidation.\n * @param {Array boolean)>} [opts.invalidate] Causes any load functions to re-run if they depend on one of the urls\n * @param {App.PageState} [opts.state] An optional object that will be available as `page.state`\n * @returns {Promise}\n */\nexport function goto(url, opts = {}) {\n\tif (!BROWSER) {\n\t\tthrow new Error('Cannot call goto(...) on the server');\n\t}\n\n\turl = new URL(resolve_url(url));\n\n\tif (url.origin !== origin) {\n\t\treturn Promise.reject(\n\t\t\tnew Error(\n\t\t\t\tDEV\n\t\t\t\t\t? `Cannot use \\`goto\\` with an external URL. Use \\`window.location = \"${url}\"\\` instead`\n\t\t\t\t\t: 'goto: invalid URL'\n\t\t\t)\n\t\t);\n\t}\n\n\treturn _goto(url, opts, 0);\n}\n\n/**\n * Causes any `load` functions belonging to the currently active page to re-run if they depend on the `url` in question, via `fetch` or `depends`. Returns a `Promise` that resolves when the page is subsequently updated.\n *\n * If the argument is given as a `string` or `URL`, it must resolve to the same URL that was passed to `fetch` or `depends` (including query parameters).\n * To create a custom identifier, use a string beginning with `[a-z]+:` (e.g. `custom:state`) — this is a valid URL.\n *\n * The `function` argument can be used define a custom predicate. It receives the full `URL` and causes `load` to rerun if `true` is returned.\n * This can be useful if you want to invalidate based on a pattern instead of a exact match.\n *\n * ```ts\n * // Example: Match '/path' regardless of the query parameters\n * import { invalidate } from '$app/navigation';\n *\n * invalidate((url) => url.pathname === '/path');\n * ```\n * @param {string | URL | ((url: URL) => boolean)} resource The invalidated URL\n * @returns {Promise}\n */\nexport function invalidate(resource) {\n\tif (!BROWSER) {\n\t\tthrow new Error('Cannot call invalidate(...) on the server');\n\t}\n\n\tpush_invalidated(resource);\n\n\treturn _invalidate();\n}\n\n/**\n * @param {string | URL | ((url: URL) => boolean)} resource The invalidated URL\n */\nfunction push_invalidated(resource) {\n\tif (typeof resource === 'function') {\n\t\tinvalidated.push(resource);\n\t} else {\n\t\tconst { href } = new URL(resource, location.href);\n\t\tinvalidated.push((url) => url.href === href);\n\t}\n}\n\n/**\n * Causes all `load` functions belonging to the currently active page to re-run. Returns a `Promise` that resolves when the page is subsequently updated.\n * @returns {Promise}\n */\nexport function invalidateAll() {\n\tif (!BROWSER) {\n\t\tthrow new Error('Cannot call invalidateAll() on the server');\n\t}\n\n\tforce_invalidation = true;\n\treturn _invalidate();\n}\n\n/**\n * Programmatically preloads the given page, which means\n * 1. ensuring that the code for the page is loaded, and\n * 2. calling the page's load function with the appropriate options.\n *\n * This is the same behaviour that SvelteKit triggers when the user taps or mouses over an `` element with `data-sveltekit-preload-data`.\n * If the next navigation is to `href`, the values returned from load will be used, making navigation instantaneous.\n * Returns a Promise that resolves with the result of running the new route's `load` functions once the preload is complete.\n *\n * @param {string} href Page to preload\n * @returns {Promise<{ type: 'loaded'; status: number; data: Record } | { type: 'redirect'; location: string }>}\n */\nexport async function preloadData(href) {\n\tif (!BROWSER) {\n\t\tthrow new Error('Cannot call preloadData(...) on the server');\n\t}\n\n\tconst url = resolve_url(href);\n\tconst intent = await get_navigation_intent(url, false);\n\n\tif (!intent) {\n\t\tthrow new Error(`Attempted to preload a URL that does not belong to this app: ${url}`);\n\t}\n\n\tconst result = await _preload_data(intent);\n\tif (result.type === 'redirect') {\n\t\treturn {\n\t\t\ttype: result.type,\n\t\t\tlocation: result.location\n\t\t};\n\t}\n\n\tconst { status, data } = result.props.page ?? page;\n\treturn { type: result.type, status, data };\n}\n\n/**\n * Programmatically imports the code for routes that haven't yet been fetched.\n * Typically, you might call this to speed up subsequent navigation.\n *\n * You can specify routes by any matching pathname such as `/about` (to match `src/routes/about/+page.svelte`) or `/blog/*` (to match `src/routes/blog/[slug]/+page.svelte`).\n *\n * Unlike `preloadData`, this won't call `load` functions.\n * Returns a Promise that resolves when the modules have been imported.\n *\n * @param {string} pathname\n * @returns {Promise}\n */\nexport async function preloadCode(pathname) {\n\tif (!BROWSER) {\n\t\tthrow new Error('Cannot call preloadCode(...) on the server');\n\t}\n\n\tconst url = new URL(pathname, current.url);\n\n\tif (DEV) {\n\t\tif (!pathname.startsWith('/')) {\n\t\t\tthrow new Error(\n\t\t\t\t'argument passed to preloadCode must be a pathname (i.e. \"/about\" rather than \"http://example.com/about\"'\n\t\t\t);\n\t\t}\n\n\t\tif (!pathname.startsWith(base)) {\n\t\t\tthrow new Error(\n\t\t\t\t`pathname passed to preloadCode must start with \\`paths.base\\` (i.e. \"${base}${pathname}\" rather than \"${pathname}\")`\n\t\t\t);\n\t\t}\n\n\t\tif (__SVELTEKIT_CLIENT_ROUTING__) {\n\t\t\tconst rerouted = await get_rerouted_url(url);\n\t\t\tif (!rerouted || !routes.find((route) => route.exec(get_url_path(rerouted)))) {\n\t\t\t\tthrow new Error(`'${pathname}' did not match any routes`);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn _preload_code(url);\n}\n\n/**\n * Programmatically create a new history entry with the given `page.state`. To use the current URL, you can pass `''` as the first argument. Used for [shallow routing](https://svelte.dev/docs/kit/shallow-routing).\n *\n * @param {string | URL} url\n * @param {App.PageState} state\n * @returns {void}\n */\nexport function pushState(url, state) {\n\tif (!BROWSER) {\n\t\tthrow new Error('Cannot call pushState(...) on the server');\n\t}\n\n\tif (DEV) {\n\t\tif (!started) {\n\t\t\tthrow new Error('Cannot call pushState(...) before router is initialized');\n\t\t}\n\n\t\ttry {\n\t\t\t// use `devalue.stringify` as a convenient way to ensure we exclude values that can't be properly rehydrated, such as custom class instances\n\t\t\tdevalue.stringify(state);\n\t\t} catch (error) {\n\t\t\t// @ts-expect-error\n\t\t\tthrow new Error(`Could not serialize state${error.path}`);\n\t\t}\n\t}\n\n\tupdate_scroll_positions(current_history_index);\n\n\tconst opts = {\n\t\t[HISTORY_INDEX]: (current_history_index += 1),\n\t\t[NAVIGATION_INDEX]: current_navigation_index,\n\t\t[PAGE_URL_KEY]: page.url.href,\n\t\t[STATES_KEY]: state\n\t};\n\n\thistory.pushState(opts, '', resolve_url(url));\n\thas_navigated = true;\n\n\tpage.state = state;\n\troot.$set({\n\t\t// we need to assign a new page object so that subscribers are correctly notified\n\t\tpage: untrack(() => clone_page(page))\n\t});\n\n\tclear_onward_history(current_history_index, current_navigation_index);\n}\n\n/**\n * Programmatically replace the current history entry with the given `page.state`. To use the current URL, you can pass `''` as the first argument. Used for [shallow routing](https://svelte.dev/docs/kit/shallow-routing).\n *\n * @param {string | URL} url\n * @param {App.PageState} state\n * @returns {void}\n */\nexport function replaceState(url, state) {\n\tif (!BROWSER) {\n\t\tthrow new Error('Cannot call replaceState(...) on the server');\n\t}\n\n\tif (DEV) {\n\t\tif (!started) {\n\t\t\tthrow new Error('Cannot call replaceState(...) before router is initialized');\n\t\t}\n\n\t\ttry {\n\t\t\t// use `devalue.stringify` as a convenient way to ensure we exclude values that can't be properly rehydrated, such as custom class instances\n\t\t\tdevalue.stringify(state);\n\t\t} catch (error) {\n\t\t\t// @ts-expect-error\n\t\t\tthrow new Error(`Could not serialize state${error.path}`);\n\t\t}\n\t}\n\n\tconst opts = {\n\t\t[HISTORY_INDEX]: current_history_index,\n\t\t[NAVIGATION_INDEX]: current_navigation_index,\n\t\t[PAGE_URL_KEY]: page.url.href,\n\t\t[STATES_KEY]: state\n\t};\n\n\thistory.replaceState(opts, '', resolve_url(url));\n\n\tpage.state = state;\n\troot.$set({\n\t\tpage: untrack(() => clone_page(page))\n\t});\n}\n\n/**\n * This action updates the `form` property of the current page with the given data and updates `page.status`.\n * In case of an error, it redirects to the nearest error page.\n * @template {Record | undefined} Success\n * @template {Record | undefined} Failure\n * @param {import('@sveltejs/kit').ActionResult} result\n * @returns {Promise}\n */\nexport async function applyAction(result) {\n\tif (!BROWSER) {\n\t\tthrow new Error('Cannot call applyAction(...) on the server');\n\t}\n\n\tif (result.type === 'error') {\n\t\tconst url = new URL(location.href);\n\n\t\tconst { branch, route } = current;\n\t\tif (!route) return;\n\n\t\tconst error_load = await load_nearest_error_page(current.branch.length, branch, route.errors);\n\t\tif (error_load) {\n\t\t\tconst navigation_result = get_navigation_result_from_branch({\n\t\t\t\turl,\n\t\t\t\tparams: current.params,\n\t\t\t\tbranch: branch.slice(0, error_load.idx).concat(error_load.node),\n\t\t\t\tstatus: result.status ?? 500,\n\t\t\t\terror: result.error,\n\t\t\t\troute\n\t\t\t});\n\n\t\t\tcurrent = navigation_result.state;\n\n\t\t\troot.$set(navigation_result.props);\n\t\t\tupdate(navigation_result.props.page);\n\n\t\t\tvoid tick().then(() => reset_focus(current.url));\n\t\t}\n\t} else if (result.type === 'redirect') {\n\t\tawait _goto(result.location, { invalidateAll: true }, 0);\n\t} else {\n\t\tpage.form = result.data;\n\t\tpage.status = result.status;\n\n\t\t/** @type {Record} */\n\t\troot.$set({\n\t\t\t// this brings Svelte's view of the world in line with SvelteKit's\n\t\t\t// after use:enhance reset the form....\n\t\t\tform: null,\n\t\t\tpage: clone_page(page)\n\t\t});\n\n\t\t// ...so that setting the `form` prop takes effect and isn't ignored\n\t\tawait tick();\n\t\troot.$set({ form: result.data });\n\n\t\tif (result.type === 'success') {\n\t\t\treset_focus(page.url);\n\t\t}\n\t}\n}\n\nfunction _start_router() {\n\thistory.scrollRestoration = 'manual';\n\n\t// Adopted from Nuxt.js\n\t// Reset scrollRestoration to auto when leaving page, allowing page reload\n\t// and back-navigation from other pages to use the browser to restore the\n\t// scrolling position.\n\taddEventListener('beforeunload', (e) => {\n\t\tlet should_block = false;\n\n\t\tpersist_state();\n\n\t\tif (!is_navigating) {\n\t\t\tconst nav = create_navigation(current, undefined, null, 'leave');\n\n\t\t\t// If we're navigating, beforeNavigate was already called. If we end up in here during navigation,\n\t\t\t// it's due to an external or full-page-reload link, for which we don't want to call the hook again.\n\t\t\t/** @type {import('@sveltejs/kit').BeforeNavigate} */\n\t\t\tconst navigation = {\n\t\t\t\t...nav.navigation,\n\t\t\t\tcancel: () => {\n\t\t\t\t\tshould_block = true;\n\t\t\t\t\tnav.reject(new Error('navigation cancelled'));\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tbefore_navigate_callbacks.forEach((fn) => fn(navigation));\n\t\t}\n\n\t\tif (should_block) {\n\t\t\te.preventDefault();\n\t\t\te.returnValue = '';\n\t\t} else {\n\t\t\thistory.scrollRestoration = 'auto';\n\t\t}\n\t});\n\n\taddEventListener('visibilitychange', () => {\n\t\tif (document.visibilityState === 'hidden') {\n\t\t\tpersist_state();\n\t\t}\n\t});\n\n\t// @ts-expect-error this isn't supported everywhere yet\n\tif (!navigator.connection?.saveData) {\n\t\tsetup_preload();\n\t}\n\n\t/** @param {MouseEvent} event */\n\tcontainer.addEventListener('click', async (event) => {\n\t\t// Adapted from https://github.com/visionmedia/page.js\n\t\t// MIT license https://github.com/visionmedia/page.js#license\n\t\tif (event.button || event.which !== 1) return;\n\t\tif (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;\n\t\tif (event.defaultPrevented) return;\n\n\t\tconst a = find_anchor(/** @type {Element} */ (event.composedPath()[0]), container);\n\t\tif (!a) return;\n\n\t\tconst { url, external, target, download } = get_link_info(a, base, app.hash);\n\t\tif (!url) return;\n\n\t\t// bail out before `beforeNavigate` if link opens in a different tab\n\t\tif (target === '_parent' || target === '_top') {\n\t\t\tif (window.parent !== window) return;\n\t\t} else if (target && target !== '_self') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst options = get_router_options(a);\n\t\tconst is_svg_a_element = a instanceof SVGAElement;\n\n\t\t// Ignore URL protocols that differ to the current one and are not http(s) (e.g. `mailto:`, `tel:`, `myapp:`, etc.)\n\t\t// This may be wrong when the protocol is x: and the link goes to y:.. which should be treated as an external\n\t\t// navigation, but it's not clear how to handle that case and it's not likely to come up in practice.\n\t\t// MEMO: Without this condition, firefox will open mailer twice.\n\t\t// See:\n\t\t// - https://github.com/sveltejs/kit/issues/4045\n\t\t// - https://github.com/sveltejs/kit/issues/5725\n\t\t// - https://github.com/sveltejs/kit/issues/6496\n\t\tif (\n\t\t\t!is_svg_a_element &&\n\t\t\turl.protocol !== location.protocol &&\n\t\t\t!(url.protocol === 'https:' || url.protocol === 'http:')\n\t\t)\n\t\t\treturn;\n\n\t\tif (download) return;\n\n\t\tconst [nonhash, hash] = (app.hash ? url.hash.replace(/^#/, '') : url.href).split('#');\n\t\tconst same_pathname = nonhash === strip_hash(location);\n\n\t\t// Ignore the following but fire beforeNavigate\n\t\tif (external || (options.reload && (!same_pathname || !hash))) {\n\t\t\tif (_before_navigate({ url, type: 'link' })) {\n\t\t\t\t// set `navigating` to `true` to prevent `beforeNavigate` callbacks\n\t\t\t\t// being called when the page unloads\n\t\t\t\tis_navigating = true;\n\t\t\t} else {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if new url only differs by hash and use the browser default behavior in that case\n\t\t// This will ensure the `hashchange` event is fired\n\t\t// Removing the hash does a full page navigation in the browser, so make sure a hash is present\n\t\tif (hash !== undefined && same_pathname) {\n\t\t\t// If we are trying to navigate to the same hash, we should only\n\t\t\t// attempt to scroll to that element and avoid any history changes.\n\t\t\t// Otherwise, this can cause Firefox to incorrectly assign a null\n\t\t\t// history state value without any signal that we can detect.\n\t\t\tconst [, current_hash] = current.url.href.split('#');\n\t\t\tif (current_hash === hash) {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t// We're already on /# and click on a link that goes to /#, or we're on\n\t\t\t\t// /#top and click on a link that goes to /#top. In those cases just go to\n\t\t\t\t// the top of the page, and avoid a history change.\n\t\t\t\tif (hash === '' || (hash === 'top' && a.ownerDocument.getElementById('top') === null)) {\n\t\t\t\t\twindow.scrollTo({ top: 0 });\n\t\t\t\t} else {\n\t\t\t\t\tconst element = a.ownerDocument.getElementById(decodeURIComponent(hash));\n\t\t\t\t\tif (element) {\n\t\t\t\t\t\telement.scrollIntoView();\n\t\t\t\t\t\telement.focus();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// set this flag to distinguish between navigations triggered by\n\t\t\t// clicking a hash link and those triggered by popstate\n\t\t\thash_navigating = true;\n\n\t\t\tupdate_scroll_positions(current_history_index);\n\n\t\t\tupdate_url(url);\n\n\t\t\tif (!options.replace_state) return;\n\n\t\t\t// hashchange event shouldn't occur if the router is replacing state.\n\t\t\thash_navigating = false;\n\t\t}\n\n\t\tevent.preventDefault();\n\n\t\t// allow the browser to repaint before navigating —\n\t\t// this prevents INP scores being penalised\n\t\tawait new Promise((fulfil) => {\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tsetTimeout(fulfil, 0);\n\t\t\t});\n\n\t\t\tsetTimeout(fulfil, 100); // fallback for edge case where rAF doesn't fire because e.g. tab was backgrounded\n\t\t});\n\n\t\tawait navigate({\n\t\t\ttype: 'link',\n\t\t\turl,\n\t\t\tkeepfocus: options.keepfocus,\n\t\t\tnoscroll: options.noscroll,\n\t\t\treplace_state: options.replace_state ?? url.href === location.href\n\t\t});\n\t});\n\n\tcontainer.addEventListener('submit', (event) => {\n\t\tif (event.defaultPrevented) return;\n\n\t\tconst form = /** @type {HTMLFormElement} */ (\n\t\t\tHTMLFormElement.prototype.cloneNode.call(event.target)\n\t\t);\n\n\t\tconst submitter = /** @type {HTMLButtonElement | HTMLInputElement | null} */ (event.submitter);\n\n\t\tconst target = submitter?.formTarget || form.target;\n\n\t\tif (target === '_blank') return;\n\n\t\tconst method = submitter?.formMethod || form.method;\n\n\t\tif (method !== 'get') return;\n\n\t\t// It is impossible to use form actions with hash router, so we just ignore handling them here\n\t\tconst url = new URL(\n\t\t\t(submitter?.hasAttribute('formaction') && submitter?.formAction) || form.action\n\t\t);\n\n\t\tif (is_external_url(url, base, false)) return;\n\n\t\tconst event_form = /** @type {HTMLFormElement} */ (event.target);\n\n\t\tconst options = get_router_options(event_form);\n\t\tif (options.reload) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tconst data = new FormData(event_form);\n\n\t\tconst submitter_name = submitter?.getAttribute('name');\n\t\tif (submitter_name) {\n\t\t\tdata.append(submitter_name, submitter?.getAttribute('value') ?? '');\n\t\t}\n\n\t\t// @ts-expect-error `URLSearchParams(fd)` is kosher, but typescript doesn't know that\n\t\turl.search = new URLSearchParams(data).toString();\n\n\t\tvoid navigate({\n\t\t\ttype: 'form',\n\t\t\turl,\n\t\t\tkeepfocus: options.keepfocus,\n\t\t\tnoscroll: options.noscroll,\n\t\t\treplace_state: options.replace_state ?? url.href === location.href\n\t\t});\n\t});\n\n\taddEventListener('popstate', async (event) => {\n\t\tif (resetting_focus) return;\n\n\t\tif (event.state?.[HISTORY_INDEX]) {\n\t\t\tconst history_index = event.state[HISTORY_INDEX];\n\t\t\ttoken = {};\n\n\t\t\t// if a popstate-driven navigation is cancelled, we need to counteract it\n\t\t\t// with history.go, which means we end up back here, hence this check\n\t\t\tif (history_index === current_history_index) return;\n\n\t\t\tconst scroll = scroll_positions[history_index];\n\t\t\tconst state = event.state[STATES_KEY] ?? {};\n\t\t\tconst url = new URL(event.state[PAGE_URL_KEY] ?? location.href);\n\t\t\tconst navigation_index = event.state[NAVIGATION_INDEX];\n\t\t\tconst is_hash_change = current.url ? strip_hash(location) === strip_hash(current.url) : false;\n\t\t\tconst shallow =\n\t\t\t\tnavigation_index === current_navigation_index && (has_navigated || is_hash_change);\n\n\t\t\tif (shallow) {\n\t\t\t\t// We don't need to navigate, we just need to update scroll and/or state.\n\t\t\t\t// This happens with hash links and `pushState`/`replaceState`. The\n\t\t\t\t// exception is if we haven't navigated yet, since we could have\n\t\t\t\t// got here after a modal navigation then a reload\n\t\t\t\tif (state !== page.state) {\n\t\t\t\t\tpage.state = state;\n\t\t\t\t}\n\n\t\t\t\tupdate_url(url);\n\n\t\t\t\tscroll_positions[current_history_index] = scroll_state();\n\t\t\t\tif (scroll) scrollTo(scroll.x, scroll.y);\n\n\t\t\t\tcurrent_history_index = history_index;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst delta = history_index - current_history_index;\n\n\t\t\tawait navigate({\n\t\t\t\ttype: 'popstate',\n\t\t\t\turl,\n\t\t\t\tpopped: {\n\t\t\t\t\tstate,\n\t\t\t\t\tscroll,\n\t\t\t\t\tdelta\n\t\t\t\t},\n\t\t\t\taccept: () => {\n\t\t\t\t\tcurrent_history_index = history_index;\n\t\t\t\t\tcurrent_navigation_index = navigation_index;\n\t\t\t\t},\n\t\t\t\tblock: () => {\n\t\t\t\t\thistory.go(-delta);\n\t\t\t\t},\n\t\t\t\tnav_token: token\n\t\t\t});\n\t\t} else {\n\t\t\t// since popstate event is also emitted when an anchor referencing the same\n\t\t\t// document is clicked, we have to check that the router isn't already handling\n\t\t\t// the navigation. otherwise we would be updating the page store twice.\n\t\t\tif (!hash_navigating) {\n\t\t\t\tconst url = new URL(location.href);\n\t\t\t\tupdate_url(url);\n\n\t\t\t\t// if the user edits the hash via the browser URL bar, trigger a full-page\n\t\t\t\t// reload to align with pathname router behavior\n\t\t\t\tif (app.hash) {\n\t\t\t\t\tlocation.reload();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\taddEventListener('hashchange', () => {\n\t\t// if the hashchange happened as a result of clicking on a link,\n\t\t// we need to update history, otherwise we have to leave it alone\n\t\tif (hash_navigating) {\n\t\t\thash_navigating = false;\n\t\t\thistory.replaceState(\n\t\t\t\t{\n\t\t\t\t\t...history.state,\n\t\t\t\t\t[HISTORY_INDEX]: ++current_history_index,\n\t\t\t\t\t[NAVIGATION_INDEX]: current_navigation_index\n\t\t\t\t},\n\t\t\t\t'',\n\t\t\t\tlocation.href\n\t\t\t);\n\t\t}\n\t});\n\n\t// fix link[rel=icon], because browsers will occasionally try to load relative\n\t// URLs after a pushState/replaceState, resulting in a 404 — see\n\t// https://github.com/sveltejs/kit/issues/3748#issuecomment-1125980897\n\tfor (const link of document.querySelectorAll('link')) {\n\t\tif (ICON_REL_ATTRIBUTES.has(link.rel)) {\n\t\t\tlink.href = link.href; // eslint-disable-line\n\t\t}\n\t}\n\n\taddEventListener('pageshow', (event) => {\n\t\t// If the user navigates to another site and then uses the back button and\n\t\t// bfcache hits, we need to set navigating to null, the site doesn't know\n\t\t// the navigation away from it was successful.\n\t\t// Info about bfcache here: https://web.dev/bfcache\n\t\tif (event.persisted) {\n\t\t\tstores.navigating.set((navigating.current = null));\n\t\t}\n\t});\n\n\t/**\n\t * @param {URL} url\n\t */\n\tfunction update_url(url) {\n\t\tcurrent.url = page.url = url;\n\t\tstores.page.set(clone_page(page));\n\t\tstores.page.notify();\n\t}\n}\n\n/**\n * @param {HTMLElement} target\n * @param {import('./types.js').HydrateOptions} opts\n */\nasync function _hydrate(\n\ttarget,\n\t{ status = 200, error, node_ids, params, route, server_route, data: server_data_nodes, form }\n) {\n\thydrated = true;\n\n\tconst url = new URL(location.href);\n\n\t/** @type {import('types').CSRRoute | undefined} */\n\tlet parsed_route;\n\n\tif (__SVELTEKIT_CLIENT_ROUTING__) {\n\t\tif (!__SVELTEKIT_EMBEDDED__) {\n\t\t\t// See https://github.com/sveltejs/kit/pull/4935#issuecomment-1328093358 for one motivation\n\t\t\t// of determining the params on the client side.\n\t\t\t({ params = {}, route = { id: null } } = (await get_navigation_intent(url, false)) || {});\n\t\t}\n\n\t\tparsed_route = routes.find(({ id }) => id === route.id);\n\t} else {\n\t\t// undefined in case of 404\n\t\tif (server_route) {\n\t\t\tparsed_route = route = parse_server_route(server_route, app.nodes);\n\t\t} else {\n\t\t\troute = { id: null };\n\t\t\tparams = {};\n\t\t}\n\t}\n\n\t/** @type {import('./types.js').NavigationFinished | undefined} */\n\tlet result;\n\tlet hydrate = true;\n\n\ttry {\n\t\tconst branch_promises = node_ids.map(async (n, i) => {\n\t\t\tconst server_data_node = server_data_nodes[i];\n\t\t\t// Type isn't completely accurate, we still need to deserialize uses\n\t\t\tif (server_data_node?.uses) {\n\t\t\t\tserver_data_node.uses = deserialize_uses(server_data_node.uses);\n\t\t\t}\n\n\t\t\treturn load_node({\n\t\t\t\tloader: app.nodes[n],\n\t\t\t\turl,\n\t\t\t\tparams,\n\t\t\t\troute,\n\t\t\t\tparent: async () => {\n\t\t\t\t\tconst data = {};\n\t\t\t\t\tfor (let j = 0; j < i; j += 1) {\n\t\t\t\t\t\tObject.assign(data, (await branch_promises[j]).data);\n\t\t\t\t\t}\n\t\t\t\t\treturn data;\n\t\t\t\t},\n\t\t\t\tserver_data_node: create_data_node(server_data_node)\n\t\t\t});\n\t\t});\n\n\t\t/** @type {Array} */\n\t\tconst branch = await Promise.all(branch_promises);\n\n\t\t// server-side will have compacted the branch, reinstate empty slots\n\t\t// so that error boundaries can be lined up correctly\n\t\tif (parsed_route) {\n\t\t\tconst layouts = parsed_route.layouts;\n\t\t\tfor (let i = 0; i < layouts.length; i++) {\n\t\t\t\tif (!layouts[i]) {\n\t\t\t\t\tbranch.splice(i, 0, undefined);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tresult = get_navigation_result_from_branch({\n\t\t\turl,\n\t\t\tparams,\n\t\t\tbranch,\n\t\t\tstatus,\n\t\t\terror,\n\t\t\tform,\n\t\t\troute: parsed_route ?? null\n\t\t});\n\t} catch (error) {\n\t\tif (error instanceof Redirect) {\n\t\t\t// this is a real edge case — `load` would need to return\n\t\t\t// a redirect but only in the browser\n\t\t\tawait native_navigation(new URL(error.location, location.href));\n\t\t\treturn;\n\t\t}\n\n\t\tresult = await load_root_error_page({\n\t\t\tstatus: get_status(error),\n\t\t\terror: await handle_error(error, { url, params, route }),\n\t\t\turl,\n\t\t\troute\n\t\t});\n\n\t\ttarget.textContent = '';\n\t\thydrate = false;\n\t}\n\n\tif (result.props.page) {\n\t\tresult.props.page.state = {};\n\t}\n\n\tinitialize(result, target, hydrate);\n}\n\n/**\n * @param {URL} url\n * @param {boolean[]} invalid\n * @returns {Promise}\n */\nasync function load_data(url, invalid) {\n\tconst data_url = new URL(url);\n\tdata_url.pathname = add_data_suffix(url.pathname);\n\tif (url.pathname.endsWith('/')) {\n\t\tdata_url.searchParams.append(TRAILING_SLASH_PARAM, '1');\n\t}\n\tif (DEV && url.searchParams.has(INVALIDATED_PARAM)) {\n\t\tthrow new Error(`Cannot used reserved query parameter \"${INVALIDATED_PARAM}\"`);\n\t}\n\tdata_url.searchParams.append(INVALIDATED_PARAM, invalid.map((i) => (i ? '1' : '0')).join(''));\n\n\t// use window.fetch directly to allow using a 3rd party-patched fetch implementation\n\tconst fetcher = DEV ? dev_fetch : window.fetch;\n\tconst res = await fetcher(data_url.href, {});\n\n\tif (!res.ok) {\n\t\t// error message is a JSON-stringified string which devalue can't handle at the top level\n\t\t// turn it into a HttpError to not call handleError on the client again (was already handled on the server)\n\t\t// if `__data.json` doesn't exist or the server has an internal error,\n\t\t// avoid parsing the HTML error page as a JSON\n\t\t/** @type {string | undefined} */\n\t\tlet message;\n\t\tif (res.headers.get('content-type')?.includes('application/json')) {\n\t\t\tmessage = await res.json();\n\t\t} else if (res.status === 404) {\n\t\t\tmessage = 'Not Found';\n\t\t} else if (res.status === 500) {\n\t\t\tmessage = 'Internal Error';\n\t\t}\n\t\tthrow new HttpError(res.status, message);\n\t}\n\n\t// TODO: fix eslint error / figure out if it actually applies to our situation\n\t// eslint-disable-next-line\n\treturn new Promise(async (resolve) => {\n\t\t/**\n\t\t * Map of deferred promises that will be resolved by a subsequent chunk of data\n\t\t * @type {Map}\n\t\t */\n\t\tconst deferreds = new Map();\n\t\tconst reader = /** @type {ReadableStream} */ (res.body).getReader();\n\t\tconst decoder = new TextDecoder();\n\n\t\t/**\n\t\t * @param {any} data\n\t\t */\n\t\tfunction deserialize(data) {\n\t\t\treturn devalue.unflatten(data, {\n\t\t\t\t...app.decoders,\n\t\t\t\tPromise: (id) => {\n\t\t\t\t\treturn new Promise((fulfil, reject) => {\n\t\t\t\t\t\tdeferreds.set(id, { fulfil, reject });\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet text = '';\n\n\t\twhile (true) {\n\t\t\t// Format follows ndjson (each line is a JSON object) or regular JSON spec\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done && !text) break;\n\n\t\t\ttext += !value && text ? '\\n' : decoder.decode(value, { stream: true }); // no value -> final chunk -> add a new line to trigger the last parse\n\n\t\t\twhile (true) {\n\t\t\t\tconst split = text.indexOf('\\n');\n\t\t\t\tif (split === -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst node = JSON.parse(text.slice(0, split));\n\t\t\t\ttext = text.slice(split + 1);\n\n\t\t\t\tif (node.type === 'redirect') {\n\t\t\t\t\treturn resolve(node);\n\t\t\t\t}\n\n\t\t\t\tif (node.type === 'data') {\n\t\t\t\t\t// This is the first (and possibly only, if no pending promises) chunk\n\t\t\t\t\tnode.nodes?.forEach((/** @type {any} */ node) => {\n\t\t\t\t\t\tif (node?.type === 'data') {\n\t\t\t\t\t\t\tnode.uses = deserialize_uses(node.uses);\n\t\t\t\t\t\t\tnode.data = deserialize(node.data);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tresolve(node);\n\t\t\t\t} else if (node.type === 'chunk') {\n\t\t\t\t\t// This is a subsequent chunk containing deferred data\n\t\t\t\t\tconst { id, data, error } = node;\n\t\t\t\t\tconst deferred = /** @type {import('types').Deferred} */ (deferreds.get(id));\n\t\t\t\t\tdeferreds.delete(id);\n\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\tdeferred.reject(deserialize(error));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.fulfil(deserialize(data));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// TODO edge case handling necessary? stream() read fails?\n}\n\n/**\n * @param {any} uses\n * @return {import('types').Uses}\n */\nfunction deserialize_uses(uses) {\n\treturn {\n\t\tdependencies: new Set(uses?.dependencies ?? []),\n\t\tparams: new Set(uses?.params ?? []),\n\t\tparent: !!uses?.parent,\n\t\troute: !!uses?.route,\n\t\turl: !!uses?.url,\n\t\tsearch_params: new Set(uses?.search_params ?? [])\n\t};\n}\n\n/**\n * This flag is used to avoid client-side navigation when we're only using\n * `location.replace()` to set focus.\n */\nlet resetting_focus = false;\n\n/**\n * @param {URL} url\n */\nfunction reset_focus(url) {\n\tconst autofocus = document.querySelector('[autofocus]');\n\tif (autofocus) {\n\t\t// @ts-ignore\n\t\tautofocus.focus();\n\t} else {\n\t\t// Reset page selection and focus\n\n\t\t// Mimic the browsers' behaviour and set the sequential focus navigation\n\t\t// starting point to the fragment identifier.\n\t\tconst id = get_id(url);\n\t\tif (id && document.getElementById(id)) {\n\t\t\tconst { x, y } = scroll_state();\n\n\t\t\t// `element.focus()` doesn't work on Safari and Firefox Ubuntu so we need\n\t\t\t// to use this hack with `location.replace()` instead.\n\t\t\tsetTimeout(() => {\n\t\t\t\tconst history_state = history.state;\n\n\t\t\t\tresetting_focus = true;\n\t\t\t\tlocation.replace(`#${id}`);\n\n\t\t\t\t// if we're using hash routing, we need to restore the original hash after\n\t\t\t\t// setting the focus with `location.replace()`. Although we're calling\n\t\t\t\t// `location.replace()` again, the focus won't shift to the new hash\n\t\t\t\t// unless there's an element with the ID `/pathname#hash`, etc.\n\t\t\t\tif (app.hash) {\n\t\t\t\t\tlocation.replace(url.hash);\n\t\t\t\t}\n\n\t\t\t\t// but Firefox has a bug that sets the history state to `null` so we\n\t\t\t\t// need to restore it after.\n\t\t\t\t// See https://bugzilla.mozilla.org/show_bug.cgi?id=1199924\n\t\t\t\thistory.replaceState(history_state, '', url.hash);\n\n\t\t\t\t// Scroll management has already happened earlier so we need to restore\n\t\t\t\t// the scroll position after setting the sequential focus navigation starting point\n\t\t\t\tscrollTo(x, y);\n\t\t\t\tresetting_focus = false;\n\t\t\t});\n\t\t} else {\n\t\t\t// If the ID doesn't exist, we try to mimic browsers' behaviour as closely\n\t\t\t// as possible by targeting the first scrollable region. Unfortunately, it's\n\t\t\t// not a perfect match — e.g. shift-tabbing won't immediately cycle up from\n\t\t\t// the end of the page on Chromium\n\t\t\t// See https://html.spec.whatwg.org/multipage/interaction.html#get-the-focusable-area\n\t\t\tconst root = document.body;\n\t\t\tconst tabindex = root.getAttribute('tabindex');\n\n\t\t\troot.tabIndex = -1;\n\t\t\t// @ts-expect-error options.focusVisible is only supported in Firefox\n\t\t\t// See https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus#browser_compatibility\n\t\t\troot.focus({ preventScroll: true, focusVisible: false });\n\n\t\t\t// restore `tabindex` as to prevent `root` from stealing input from elements\n\t\t\tif (tabindex !== null) {\n\t\t\t\troot.setAttribute('tabindex', tabindex);\n\t\t\t} else {\n\t\t\t\troot.removeAttribute('tabindex');\n\t\t\t}\n\t\t}\n\n\t\t// capture current selection, so we can compare the state after\n\t\t// snapshot restoration and afterNavigate callbacks have run\n\t\tconst selection = getSelection();\n\n\t\tif (selection && selection.type !== 'None') {\n\t\t\t/** @type {Range[]} */\n\t\t\tconst ranges = [];\n\n\t\t\tfor (let i = 0; i < selection.rangeCount; i += 1) {\n\t\t\t\tranges.push(selection.getRangeAt(i));\n\t\t\t}\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (selection.rangeCount !== ranges.length) return;\n\n\t\t\t\tfor (let i = 0; i < selection.rangeCount; i += 1) {\n\t\t\t\t\tconst a = ranges[i];\n\t\t\t\t\tconst b = selection.getRangeAt(i);\n\n\t\t\t\t\t// we need to do a deep comparison rather than just `a !== b` because\n\t\t\t\t\t// Safari behaves differently to other browsers\n\t\t\t\t\tif (\n\t\t\t\t\t\ta.commonAncestorContainer !== b.commonAncestorContainer ||\n\t\t\t\t\t\ta.startContainer !== b.startContainer ||\n\t\t\t\t\t\ta.endContainer !== b.endContainer ||\n\t\t\t\t\t\ta.startOffset !== b.startOffset ||\n\t\t\t\t\t\ta.endOffset !== b.endOffset\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if the selection hasn't changed (as a result of an element being (auto)focused,\n\t\t\t\t// or a programmatic selection, we reset everything as part of the navigation)\n\t\t\t\t// fixes https://github.com/sveltejs/kit/issues/8439\n\t\t\t\tselection.removeAllRanges();\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * @template {import('@sveltejs/kit').NavigationType} T\n * @param {import('./types.js').NavigationState} current\n * @param {import('./types.js').NavigationIntent | undefined} intent\n * @param {URL | null} url\n * @param {T} type\n */\nfunction create_navigation(current, intent, url, type) {\n\t/** @type {(value: any) => void} */\n\tlet fulfil;\n\n\t/** @type {(error: any) => void} */\n\tlet reject;\n\n\tconst complete = new Promise((f, r) => {\n\t\tfulfil = f;\n\t\treject = r;\n\t});\n\n\t// Handle any errors off-chain so that it doesn't show up as an unhandled rejection\n\tcomplete.catch(() => {});\n\n\t/** @type {Omit & { type: T }} */\n\tconst navigation = {\n\t\tfrom: {\n\t\t\tparams: current.params,\n\t\t\troute: { id: current.route?.id ?? null },\n\t\t\turl: current.url\n\t\t},\n\t\tto: url && {\n\t\t\tparams: intent?.params ?? null,\n\t\t\troute: { id: intent?.route?.id ?? null },\n\t\t\turl\n\t\t},\n\t\twillUnload: !intent,\n\t\ttype,\n\t\tcomplete\n\t};\n\n\treturn {\n\t\tnavigation,\n\t\t// @ts-expect-error\n\t\tfulfil,\n\t\t// @ts-expect-error\n\t\treject\n\t};\n}\n\n/**\n * TODO: remove this in 3.0 when the page store is also removed\n *\n * We need to assign a new page object so that subscribers are correctly notified.\n * However, spreading `{ ...page }` returns an empty object so we manually\n * assign to each property instead.\n *\n * @param {import('@sveltejs/kit').Page} page\n */\nfunction clone_page(page) {\n\treturn {\n\t\tdata: page.data,\n\t\terror: page.error,\n\t\tform: page.form,\n\t\tparams: page.params,\n\t\troute: page.route,\n\t\tstate: page.state,\n\t\tstatus: page.status,\n\t\turl: page.url\n\t};\n}\n\n/**\n * @param {URL} url\n * @returns {URL}\n */\nfunction decode_hash(url) {\n\tconst new_url = new URL(url);\n\t// Safari, for some reason, does change # to %23, when entered through the address bar\n\tnew_url.hash = decodeURIComponent(url.hash);\n\treturn new_url;\n}\n\n/**\n * @param {URL} url\n * @returns {string}\n */\nfunction get_id(url) {\n\tlet id;\n\n\tif (app.hash) {\n\t\tconst [, , second] = url.hash.split('#', 3);\n\t\tid = second ?? '';\n\t} else {\n\t\tid = url.hash.slice(1);\n\t}\n\n\treturn decodeURIComponent(id);\n}\n\nif (DEV) {\n\t// Nasty hack to silence harmless warnings the user can do nothing about\n\tconst console_warn = console.warn;\n\tconsole.warn = function warn(...args) {\n\t\tif (\n\t\t\targs.length === 1 &&\n\t\t\t/<(Layout|Page|Error)(_[\\w$]+)?> was created (with unknown|without expected) prop '(data|form)'/.test(\n\t\t\t\targs[0]\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tconsole_warn(...args);\n\t};\n\n\tif (import.meta.hot) {\n\t\timport.meta.hot.on('vite:beforeUpdate', () => {\n\t\t\tif (errored) {\n\t\t\t\tlocation.reload();\n\t\t\t}\n\t\t});\n\t}\n}\n"],"names":["SvelteComponentDev","SvelteComponent","options","__publicField","SvelteComponentTyped","normalize_path","path","trailing_slash","decode_pathname","pathname","decode_params","params","key","strip_hash","href","make_trackable","url","callback","search_params_callback","allow_hash","tracked","obj","param","value","tracked_url_properties","property","hash","values","i","buffer","b64_decode","text","d","u8","native_fetch","input","init","cache","build_selector","initial_fetch","resource","opts","selector","script","body","ttl","subsequent_fetch","resolved","cached","param_pattern","parse_route_id","id","get_route_segments","segment","rest_match","optional_match","parts","content","escape","code","match","is_optional","is_rest","name","matcher","affects_path","route","exec","matchers","result","values_needing_match","buffered","s","next_param","next_value","str","parse","nodes","server_loads","dictionary","layouts_with_server_load","leaf","layouts","errors","pattern","n","create_layout_loader","create_leaf_loader","uses_server_data","get","set","stringify","data","subscriber_queue","readable","start","writable","noop","stop","subscribers","new_value","safe_not_equal","run_queue","subscriber","update","fn","subscribe","run","invalidate","derived","stores","initial_value","single","stores_array","auto","started","pending","cleanup","sync","is_function","unsubscribers","store","run_all","SNAPSHOT_KEY","SCROLL_KEY","STATES_KEY","PAGE_URL_KEY","HISTORY_INDEX","NAVIGATION_INDEX","PRELOAD_PRIORITIES","origin","resolve_url","baseURI","baseTags","scroll_state","link_option","element","levels","parent_element","parent","find_anchor","target","get_link_info","a","base","uses_hash_router","external","is_external_url","download","get_router_options","keepfocus","noscroll","preload_code","preload_data","reload","replace_state","el","get_option_state","notifiable_store","ready","notify","val","old_value","updated_listener","create_updated_store","timeout","check","res","assets","updated","version","hash_routing","load_css","deps","decode64","string","binaryString","asciiToBinary","arraybuffer","dv","KEY_STRING","output","accumulatedBits","UNDEFINED","HOLE","NAN","POSITIVE_INFINITY","NEGATIVE_INFINITY","NEGATIVE_ZERO","unflatten","parsed","revivers","hydrate","hydrated","index","standalone","type","reviver","map","TypedArrayConstructor","base64","typedArray","array","object","valid_layout_exports","valid_layout_server_exports","compact","arr","HttpError","status","Redirect","location","SvelteKitError","message","INVALIDATED_PARAM","TRAILING_SLASH_PARAM","get_status","error","get_message","page","navigating","is_legacy","onMount","new_page","DATA_SUFFIX","HTML_DATA_SUFFIX","add_data_suffix","tick","svelte","ICON_REL_ATTRIBUTES","scroll_positions","storage.get","snapshots","update_scroll_positions","clear_onward_history","current_history_index","current_navigation_index","native_navigation","update_service_worker","registration","routes","default_layout_loader","default_error_loader","container","app","invalidated","components","load_cache","reroute_cache","before_navigate_callbacks","on_navigate_callbacks","after_navigate_callbacks","current","autoscroll","is_navigating","hash_navigating","has_navigated","force_invalidation","root","token","preload_tokens","_app","_target","_b","_a","_c","_d","scroll","restore_scroll","_hydrate","navigate","decode_hash","_start_router","reset_invalidation","capture_snapshot","c","restore_snapshot","persist_state","storage.set","_goto","redirect_count","nav_token","push_invalidated","_preload_data","intent","preload","load_route","_preload_code","get_navigation_intent","load","initialize","style","navigation","get_navigation_result_from_branch","branch","form","slash","node","branch_node","clone_page","data_changed","p","prev","load_node","loader","server_data_node","is_tracking","uses","depends","dep","load_input","promise","resolve_fetch_url","requested","has_changed","parent_changed","route_changed","url_changed","search_params_changed","tracked_params","create_data_node","previous","diff_search_params","old_url","new_url","changed","old_values","new_values","preload_error","invalidating","loaders","server_data","get_page_key","parent_invalid","invalid_server_nodes","invalid","load_data","handled_error","handle_error","load_root_error_page","server_data_nodes","branch_promises","j","err","error_load","load_nearest_error_page","server_fallback","root_layout","root_error","get_rerouted_url","rerouted","tmp","get_url_path","_before_navigate","delta","should_block","nav","create_navigation","cancellable","popped","state","accept","block","prev_token","previous_history_index","previous_navigation_index","navigation_result","change","entry","after_navigate","activeElement","deep_linked","get_id","changed_focus","reset_focus","setup_preload","mousemove_timeout","current_a","current_priority","event","tap","observer","entries","priority","interacted","same_url","add_navigation_callback","callbacks","afterNavigate","beforeNavigate","goto","e","nonhash","same_pathname","current_hash","update_url","fulfil","submitter","event_form","submitter_name","resetting_focus","history_index","navigation_index","is_hash_change","link","node_ids","server_route","parsed_route","deserialize_uses","data_url","fetcher","resolve","deferreds","reader","decoder","deserialize","devalue.unflatten","reject","done","split","deferred","autofocus","x","y","history_state","tabindex","selection","ranges","b","complete","f","r","second"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]}