UNPKG

195 kBSource Map (JSON)View Raw
1{"version":3,"file":"turbo.es2017-umd.js","sources":["../src/polyfills/custom-elements-native-shim.ts","../src/polyfills/submit-event.ts","../src/elements/frame_element.ts","../src/core/url.ts","../src/http/fetch_response.ts","../src/util.ts","../src/http/fetch_request.ts","../src/observers/appearance_observer.ts","../src/core/streams/stream_message.ts","../src/core/drive/form_submission.ts","../src/core/snapshot.ts","../src/core/frames/form_interceptor.ts","../src/core/view.ts","../src/core/frames/frame_view.ts","../src/core/frames/link_interceptor.ts","../src/core/bardo.ts","../src/core/renderer.ts","../src/core/frames/frame_renderer.ts","../src/core/drive/progress_bar.ts","../src/core/drive/head_snapshot.ts","../src/core/drive/page_snapshot.ts","../src/core/drive/visit.ts","../src/core/native/browser_adapter.ts","../src/observers/cache_observer.ts","../src/observers/form_submit_observer.ts","../src/core/frames/frame_redirector.ts","../src/core/drive/history.ts","../src/observers/link_click_observer.ts","../src/core/types.ts","../src/core/drive/navigator.ts","../src/observers/page_observer.ts","../src/observers/scroll_observer.ts","../src/observers/stream_observer.ts","../src/core/drive/error_renderer.ts","../src/core/drive/page_renderer.ts","../src/core/drive/snapshot_cache.ts","../src/core/drive/page_view.ts","../src/core/session.ts","../src/core/frames/frame_controller.ts","../src/core/streams/stream_actions.ts","../src/elements/stream_element.ts","../src/elements/index.ts","../src/script_warning.ts","../src/core/index.ts","../src/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This shim allows elements written in, or compiled to, ES5 to work on native\n * implementations of Custom Elements v1. It sets new.target to the value of\n * this.constructor so that the native HTMLElement constructor can access the\n * current under-construction element's definition.\n */\n(function() {\n if (\n // No Reflect, no classes, no need for shim because native custom elements\n // require ES2015 classes or Reflect.\n window.Reflect === undefined || window.customElements === undefined ||\n // The webcomponentsjs custom elements polyfill doesn't require\n // ES2015-compatible construction (`super()` or `Reflect.construct`).\n (window.customElements as any).polyfillWrapFlushCallback) {\n return;\n }\n const BuiltInHTMLElement = HTMLElement;\n\n /**\n * With jscompiler's RECOMMENDED_FLAGS the function name will be optimized away.\n * However, if we declare the function as a property on an object literal, and\n * use quotes for the property name, then closure will leave that much intact,\n * which is enough for the JS VM to correctly set Function.prototype.name.\n */\n const wrapperForTheName = {\n 'HTMLElement': function HTMLElement(this: HTMLElement) {\n return Reflect.construct(BuiltInHTMLElement, [], this.constructor);\n }\n };\n window.HTMLElement =\n wrapperForTheName['HTMLElement'] as unknown as typeof HTMLElement;\n HTMLElement.prototype = BuiltInHTMLElement.prototype;\n HTMLElement.prototype.constructor = HTMLElement;\n Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\n })();\n","type FormSubmitter = HTMLElement & { form?: HTMLFormElement, type?: string }\n\nconst submittersByForm: WeakMap<HTMLFormElement, HTMLElement> = new WeakMap\n\nfunction findSubmitterFromClickTarget(target: EventTarget | null): FormSubmitter | null {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null\n const candidate = element ? element.closest(\"input, button\") as FormSubmitter | null : null\n return candidate?.type == \"submit\" ? candidate : null\n}\n\nfunction clickCaptured(event: Event) {\n const submitter = findSubmitterFromClickTarget(event.target)\n\n if (submitter && submitter.form) {\n submittersByForm.set(submitter.form, submitter)\n }\n}\n\n(function() {\n if (\"SubmitEvent\" in window) return\n\n addEventListener(\"click\", clickCaptured, true)\n\n Object.defineProperty(Event.prototype, \"submitter\", {\n get(): HTMLElement | undefined {\n if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n return submittersByForm.get(this.target)\n }\n }\n })\n})()\n","import { FetchResponse } from \"../http/fetch_response\"\n\nexport enum FrameLoadingStyle { eager = \"eager\", lazy = \"lazy\" }\n\nexport interface FrameElementDelegate {\n connect(): void\n disconnect(): void\n loadingStyleChanged(): void\n sourceURLChanged(): void\n disabledChanged(): void\n formSubmissionIntercepted(element: HTMLFormElement, submitter?: HTMLElement): void\n loadResponse(response: FetchResponse): void\n isLoading: boolean\n}\n\nexport class FrameElement extends HTMLElement {\n static delegateConstructor: new (element: FrameElement) => FrameElementDelegate\n\n loaded: Promise<FetchResponse | void> = Promise.resolve()\n readonly delegate: FrameElementDelegate\n\n static get observedAttributes() {\n return [\"disabled\", \"loading\", \"src\"]\n }\n\n constructor() {\n super()\n this.delegate = new FrameElement.delegateConstructor(this)\n }\n\n connectedCallback() {\n this.delegate.connect()\n }\n\n disconnectedCallback() {\n this.delegate.disconnect()\n }\n\n attributeChangedCallback(name: string) {\n if (name == \"loading\") {\n this.delegate.loadingStyleChanged()\n } else if (name == \"src\") {\n this.delegate.sourceURLChanged()\n } else {\n this.delegate.disabledChanged()\n }\n }\n\n get src() {\n return this.getAttribute(\"src\")\n }\n\n set src(value: string | null) {\n if (value) {\n this.setAttribute(\"src\", value)\n } else {\n this.removeAttribute(\"src\")\n }\n }\n\n get loading(): FrameLoadingStyle {\n return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\")\n }\n\n set loading(value: FrameLoadingStyle) {\n if (value) {\n this.setAttribute(\"loading\", value)\n } else {\n this.removeAttribute(\"loading\")\n }\n }\n\n get disabled() {\n return this.hasAttribute(\"disabled\")\n }\n\n set disabled(value: boolean) {\n if (value) {\n this.setAttribute(\"disabled\", \"\")\n } else {\n this.removeAttribute(\"disabled\")\n }\n }\n\n get autoscroll() {\n return this.hasAttribute(\"autoscroll\")\n }\n\n set autoscroll(value: boolean) {\n if (value) {\n this.setAttribute(\"autoscroll\", \"\")\n } else {\n this.removeAttribute(\"autoscroll\")\n }\n }\n\n get complete() {\n return !this.delegate.isLoading\n }\n\n get isActive() {\n return this.ownerDocument === document && !this.isPreview\n }\n\n get isPreview() {\n return this.ownerDocument?.documentElement?.hasAttribute(\"data-turbo-preview\")\n }\n}\n\nfunction frameLoadingStyleFromString(style: string) {\n switch (style.toLowerCase()) {\n case \"lazy\": return FrameLoadingStyle.lazy\n default: return FrameLoadingStyle.eager\n }\n}\n","export type Locatable = URL | string\n\nexport function expandURL(locatable: Locatable) {\n return new URL(locatable.toString(), document.baseURI)\n}\n\nexport function getAnchor(url: URL) {\n let anchorMatch\n if (url.hash) {\n return url.hash.slice(1)\n } else if (anchorMatch = url.href.match(/#(.*)$/)) {\n return anchorMatch[1]\n } else {\n return \"\"\n }\n}\n\nexport function getExtension(url: URL) {\n return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\"\n}\n\nexport function isHTML(url: URL) {\n return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml))$/)\n}\n\nexport function isPrefixedBy(baseURL: URL, url: URL) {\n const prefix = getPrefix(url)\n return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix)\n}\n\nexport function toCacheKey(url: URL) {\n const anchorLength = url.hash.length\n if (anchorLength < 2) {\n return url.href\n } else {\n return url.href.slice(0, -anchorLength)\n }\n}\n\nexport function urlsAreEqual(left: string, right: string) {\n return expandURL(left).href == expandURL(right).href\n}\n\nfunction getPathComponents(url: URL) {\n return url.pathname.split(\"/\").slice(1)\n}\n\nfunction getLastPathComponent(url: URL) {\n return getPathComponents(url).slice(-1)[0]\n}\n\nfunction getPrefix(url: URL) {\n return addTrailingSlash(url.origin + url.pathname)\n}\n\nfunction addTrailingSlash(value: string) {\n return value.endsWith(\"/\") ? value : value + \"/\"\n}\n","import { expandURL } from \"../core/url\"\n\nexport class FetchResponse {\n readonly response: Response\n\n constructor(response: Response) {\n this.response = response\n }\n\n get succeeded() {\n return this.response.ok\n }\n\n get failed() {\n return !this.succeeded\n }\n\n get clientError() {\n return this.statusCode >= 400 && this.statusCode <= 499\n }\n\n get serverError() {\n return this.statusCode >= 500 && this.statusCode <= 599\n }\n\n get redirected() {\n return this.response.redirected\n }\n\n get location(): URL {\n return expandURL(this.response.url)\n }\n\n get isHTML() {\n return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/)\n }\n\n get statusCode() {\n return this.response.status\n }\n\n get contentType() {\n return this.header(\"Content-Type\")\n }\n\n get responseText(): Promise<string> {\n return this.response.text()\n }\n\n get responseHTML(): Promise<string | undefined> {\n if (this.isHTML) {\n return this.response.text()\n } else {\n return Promise.resolve(undefined)\n }\n }\n\n header(name: string) {\n return this.response.headers.get(name)\n }\n}\n","export type DispatchOptions = { target: EventTarget, cancelable: boolean, detail: any }\n\nexport function dispatch(eventName: string, { target, cancelable, detail }: Partial<DispatchOptions> = {}) {\n const event = new CustomEvent(eventName, { cancelable, bubbles: true, detail })\n void (target || document.documentElement).dispatchEvent(event)\n return event\n}\n\nexport function nextAnimationFrame() {\n return new Promise<void>(resolve => requestAnimationFrame(() => resolve()))\n}\n\nexport function nextEventLoopTick() {\n return new Promise<void>(resolve => setTimeout(() => resolve(), 0))\n}\n\nexport function nextMicrotask() {\n return Promise.resolve()\n}\n\nexport function parseHTMLDocument(html = \"\") {\n return new DOMParser().parseFromString(html, \"text/html\")\n}\n\nexport function unindent(strings: TemplateStringsArray, ...values: any[]): string {\n const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\")\n const match = lines[0].match(/^\\s+/)\n const indent = match ? match[0].length : 0\n return lines.map(line => line.slice(indent)).join(\"\\n\")\n}\n\nfunction interpolate(strings: TemplateStringsArray, values: any[]) {\n return strings.reduce((result, string, i) => {\n const value = values[i] == undefined ? \"\" : values[i]\n return result + string + value\n }, \"\")\n}\n\nexport function uuid() {\n return Array.apply(null, { length: 36 } as any).map((_, i) => {\n if (i == 8 || i == 13 || i == 18 || i == 23) {\n return \"-\"\n } else if (i == 14) {\n return \"4\"\n } else if (i == 19) {\n return (Math.floor(Math.random() * 4) + 8).toString(16)\n } else {\n return Math.floor(Math.random() * 15).toString(16)\n }\n }).join(\"\")\n}\n","import { FetchResponse } from \"./fetch_response\"\nimport { dispatch } from \"../util\"\n\nexport interface FetchRequestDelegate {\n prepareHeadersForRequest?(headers: FetchRequestHeaders, request: FetchRequest): void\n requestStarted(request: FetchRequest): void\n requestPreventedHandlingResponse(request: FetchRequest, response: FetchResponse): void\n requestSucceededWithResponse(request: FetchRequest, response: FetchResponse): void\n requestFailedWithResponse(request: FetchRequest, response: FetchResponse): void\n requestErrored(request: FetchRequest, error: Error): void\n requestFinished(request: FetchRequest): void\n}\n\nexport enum FetchMethod {\n get,\n post,\n put,\n patch,\n delete\n}\n\nexport function fetchMethodFromString(method: string) {\n switch (method.toLowerCase()) {\n case \"get\": return FetchMethod.get\n case \"post\": return FetchMethod.post\n case \"put\": return FetchMethod.put\n case \"patch\": return FetchMethod.patch\n case \"delete\": return FetchMethod.delete\n }\n}\n\nexport type FetchRequestBody = FormData | URLSearchParams\n\nexport type FetchRequestHeaders = { [header: string]: string }\n\nexport interface FetchRequestOptions {\n headers: FetchRequestHeaders\n body: FetchRequestBody\n followRedirects: boolean\n}\n\nexport class FetchRequest {\n readonly delegate: FetchRequestDelegate\n readonly method: FetchMethod\n readonly headers: FetchRequestHeaders\n readonly url: URL\n readonly body?: FetchRequestBody\n readonly abortController = new AbortController\n\n constructor(delegate: FetchRequestDelegate, method: FetchMethod, location: URL, body: FetchRequestBody = new URLSearchParams) {\n this.delegate = delegate\n this.method = method\n this.headers = this.defaultHeaders\n if (this.isIdempotent) {\n this.url = mergeFormDataEntries(location, [ ...body.entries() ])\n } else {\n this.body = body\n this.url = location\n }\n }\n\n get location(): URL {\n return this.url\n }\n\n get params(): URLSearchParams {\n return this.url.searchParams\n }\n\n get entries() {\n return this.body ? Array.from(this.body.entries()) : []\n }\n\n cancel() {\n this.abortController.abort()\n }\n\n async perform(): Promise<FetchResponse> {\n const { fetchOptions } = this\n this.delegate.prepareHeadersForRequest?.(this.headers, this)\n dispatch(\"turbo:before-fetch-request\", { detail: { fetchOptions } })\n try {\n this.delegate.requestStarted(this)\n const response = await fetch(this.url.href, fetchOptions)\n return await this.receive(response)\n } catch (error) {\n this.delegate.requestErrored(this, error)\n throw error\n } finally {\n this.delegate.requestFinished(this)\n }\n }\n\n async receive(response: Response): Promise<FetchResponse> {\n const fetchResponse = new FetchResponse(response)\n const event = dispatch(\"turbo:before-fetch-response\", { cancelable: true, detail: { fetchResponse } })\n if (event.defaultPrevented) {\n this.delegate.requestPreventedHandlingResponse(this, fetchResponse)\n } else if (fetchResponse.succeeded) {\n this.delegate.requestSucceededWithResponse(this, fetchResponse)\n } else {\n this.delegate.requestFailedWithResponse(this, fetchResponse)\n }\n return fetchResponse\n }\n\n get fetchOptions(): RequestInit {\n return {\n method: FetchMethod[this.method].toUpperCase(),\n credentials: \"same-origin\",\n headers: this.headers,\n redirect: \"follow\",\n body: this.body,\n signal: this.abortSignal\n }\n }\n\n get defaultHeaders() {\n return {\n \"Accept\": \"text/html, application/xhtml+xml\"\n }\n }\n\n get isIdempotent() {\n return this.method == FetchMethod.get\n }\n\n get abortSignal() {\n return this.abortController.signal\n }\n}\n\nfunction mergeFormDataEntries(url: URL, entries: [string, FormDataEntryValue][]): URL {\n const currentSearchParams = new URLSearchParams(url.search)\n\n for (const [ name, value ] of entries) {\n if (value instanceof File) continue\n\n if (currentSearchParams.has(name)) {\n currentSearchParams.delete(name)\n url.searchParams.set(name, value)\n } else {\n url.searchParams.append(name, value)\n }\n }\n\n return url\n}\n","export interface AppearanceObserverDelegate {\n elementAppearedInViewport(element: Element): void\n}\n\nexport class AppearanceObserver {\n readonly delegate: AppearanceObserverDelegate\n readonly element: Element\n readonly intersectionObserver: IntersectionObserver\n started = false\n\n constructor(delegate: AppearanceObserverDelegate, element: Element) {\n this.delegate = delegate\n this.element = element\n this.intersectionObserver = new IntersectionObserver(this.intersect)\n }\n\n start() {\n if (!this.started) {\n this.started = true\n this.intersectionObserver.observe(this.element)\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false\n this.intersectionObserver.unobserve(this.element)\n }\n }\n\n intersect: IntersectionObserverCallback = entries => {\n const lastEntry = entries.slice(-1)[0]\n if (lastEntry?.isIntersecting) {\n this.delegate.elementAppearedInViewport(this.element)\n }\n }\n}\n","import { StreamElement } from \"../../elements/stream_element\"\n\nexport class StreamMessage {\n static readonly contentType = \"text/vnd.turbo-stream.html\"\n readonly templateElement = document.createElement(\"template\")\n\n static wrap(message: StreamMessage | string) {\n if (typeof message == \"string\") {\n return new this(message)\n } else {\n return message\n }\n }\n\n constructor(html: string) {\n this.templateElement.innerHTML = html\n }\n\n get fragment() {\n const fragment = document.createDocumentFragment()\n for (const element of this.foreignElements) {\n fragment.appendChild(document.importNode(element, true))\n }\n return fragment\n }\n\n get foreignElements() {\n return this.templateChildren.reduce((streamElements, child) => {\n if (child.tagName.toLowerCase() == \"turbo-stream\") {\n return [ ...streamElements, child as StreamElement ]\n } else {\n return streamElements\n }\n }, [] as StreamElement[])\n }\n\n get templateChildren() {\n return Array.from(this.templateElement.content.children)\n }\n}\n","import { FetchRequest, FetchMethod, fetchMethodFromString, FetchRequestHeaders } from \"../../http/fetch_request\"\nimport { FetchResponse } from \"../../http/fetch_response\"\nimport { expandURL } from \"../url\"\nimport { dispatch } from \"../../util\"\nimport { StreamMessage } from \"../streams/stream_message\"\n\nexport interface FormSubmissionDelegate {\n formSubmissionStarted(formSubmission: FormSubmission): void\n formSubmissionSucceededWithResponse(formSubmission: FormSubmission, fetchResponse: FetchResponse): void\n formSubmissionFailedWithResponse(formSubmission: FormSubmission, fetchResponse: FetchResponse): void\n formSubmissionErrored(formSubmission: FormSubmission, error: Error): void\n formSubmissionFinished(formSubmission: FormSubmission): void\n}\n\nexport type FormSubmissionResult\n = { success: boolean, fetchResponse: FetchResponse }\n | { success: false, error: Error }\n\nexport enum FormSubmissionState {\n initialized,\n requesting,\n waiting,\n receiving,\n stopping,\n stopped,\n}\n\nenum FormEnctype {\n urlEncoded = \"application/x-www-form-urlencoded\",\n multipart = \"multipart/form-data\",\n plain = \"text/plain\"\n}\n\nfunction formEnctypeFromString(encoding: string): FormEnctype {\n switch(encoding.toLowerCase()) {\n case FormEnctype.multipart: return FormEnctype.multipart\n case FormEnctype.plain: return FormEnctype.plain\n default: return FormEnctype.urlEncoded\n }\n}\n\nexport class FormSubmission {\n readonly delegate: FormSubmissionDelegate\n readonly formElement: HTMLFormElement\n readonly submitter?: HTMLElement\n readonly formData: FormData\n readonly fetchRequest: FetchRequest\n readonly mustRedirect: boolean\n state = FormSubmissionState.initialized\n result?: FormSubmissionResult\n\n constructor(delegate: FormSubmissionDelegate, formElement: HTMLFormElement, submitter?: HTMLElement, mustRedirect = false) {\n this.delegate = delegate\n this.formElement = formElement\n this.submitter = submitter\n this.formData = buildFormData(formElement, submitter)\n this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body)\n this.mustRedirect = mustRedirect\n }\n\n get method(): FetchMethod {\n const method = this.submitter?.getAttribute(\"formmethod\") || this.formElement.getAttribute(\"method\") || \"\"\n return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get\n }\n\n get action(): string {\n return this.submitter?.getAttribute(\"formaction\") || this.formElement.action\n }\n\n get location(): URL {\n return expandURL(this.action)\n }\n\n get body() {\n if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {\n return new URLSearchParams(this.stringFormData)\n } else {\n return this.formData\n }\n }\n\n get enctype(): FormEnctype {\n return formEnctypeFromString(this.submitter?.getAttribute(\"formenctype\") || this.formElement.enctype)\n }\n\n get isIdempotent() {\n return this.fetchRequest.isIdempotent\n }\n\n get stringFormData() {\n return [ ...this.formData ].reduce((entries, [ name, value ]) => {\n return entries.concat(typeof value == \"string\" ? [[ name, value ]] : [])\n }, [] as [string, string][])\n }\n\n // The submission process\n\n async start() {\n const { initialized, requesting } = FormSubmissionState\n if (this.state == initialized) {\n this.state = requesting\n return this.fetchRequest.perform()\n }\n }\n\n stop() {\n const { stopping, stopped } = FormSubmissionState\n if (this.state != stopping && this.state != stopped) {\n this.state = stopping\n this.fetchRequest.cancel()\n return true\n }\n }\n\n // Fetch request delegate\n\n prepareHeadersForRequest(headers: FetchRequestHeaders, request: FetchRequest) {\n if (!request.isIdempotent) {\n const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\")\n if (token) {\n headers[\"X-CSRF-Token\"] = token\n }\n headers[\"Accept\"] = [ StreamMessage.contentType, headers[\"Accept\"] ].join(\", \")\n }\n }\n\n requestStarted(request: FetchRequest) {\n this.state = FormSubmissionState.waiting\n dispatch(\"turbo:submit-start\", { target: this.formElement, detail: { formSubmission: this } })\n this.delegate.formSubmissionStarted(this)\n }\n\n requestPreventedHandlingResponse(request: FetchRequest, response: FetchResponse) {\n this.result = { success: response.succeeded, fetchResponse: response }\n }\n\n requestSucceededWithResponse(request: FetchRequest, response: FetchResponse) {\n if (response.clientError || response.serverError) {\n this.delegate.formSubmissionFailedWithResponse(this, response)\n } else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n const error = new Error(\"Form responses must redirect to another location\")\n this.delegate.formSubmissionErrored(this, error)\n } else {\n this.state = FormSubmissionState.receiving\n this.result = { success: true, fetchResponse: response }\n this.delegate.formSubmissionSucceededWithResponse(this, response)\n }\n }\n\n requestFailedWithResponse(request: FetchRequest, response: FetchResponse) {\n this.result = { success: false, fetchResponse: response }\n this.delegate.formSubmissionFailedWithResponse(this, response)\n }\n\n requestErrored(request: FetchRequest, error: Error) {\n this.result = { success: false, error }\n this.delegate.formSubmissionErrored(this, error)\n }\n\n requestFinished(request: FetchRequest) {\n this.state = FormSubmissionState.stopped\n dispatch(\"turbo:submit-end\", { target: this.formElement, detail: { formSubmission: this, ...this.result }})\n this.delegate.formSubmissionFinished(this)\n }\n\n requestMustRedirect(request: FetchRequest) {\n return !request.isIdempotent && this.mustRedirect\n }\n}\n\nfunction buildFormData(formElement: HTMLFormElement, submitter?: HTMLElement): FormData {\n const formData = new FormData(formElement)\n const name = submitter?.getAttribute(\"name\")\n const value = submitter?.getAttribute(\"value\")\n\n if (name && value != null && formData.get(name) != value) {\n formData.append(name, value)\n }\n\n return formData\n}\n\nfunction getCookieValue(cookieName: string | null) {\n if (cookieName != null) {\n const cookies = document.cookie ? document.cookie.split(\"; \") : []\n const cookie = cookies.find((cookie) => cookie.startsWith(cookieName))\n if (cookie) {\n const value = cookie.split(\"=\").slice(1).join(\"=\")\n return value ? decodeURIComponent(value) : undefined\n }\n }\n}\n\nfunction getMetaContent(name: string) {\n const element: HTMLMetaElement | null = document.querySelector(`meta[name=\"${name}\"]`)\n return element && element.content\n}\n\nfunction responseSucceededWithoutRedirect(response: FetchResponse) {\n return response.statusCode == 200 && !response.redirected\n}\n","export class Snapshot<E extends Element = Element> {\n readonly element: E\n\n constructor(element: E) {\n this.element = element\n }\n\n get children() {\n return [ ...this.element.children ]\n }\n\n hasAnchor(anchor: string) {\n return this.getElementForAnchor(anchor) != null\n }\n\n getElementForAnchor(anchor: string) {\n try {\n return this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`)\n } catch {\n return null\n }\n }\n\n get isConnected() {\n return this.element.isConnected\n }\n\n get firstAutofocusableElement() {\n return this.element.querySelector(\"[autofocus]\")\n }\n\n get permanentElements() {\n return [ ...this.element.querySelectorAll(\"[id][data-turbo-permanent]\") ]\n }\n\n getPermanentElementById(id: string) {\n return this.element.querySelector(`#${id}[data-turbo-permanent]`)\n }\n\n getPermanentElementMapForSnapshot(snapshot: Snapshot) {\n const permanentElementMap: PermanentElementMap = {}\n\n for (const currentPermanentElement of this.permanentElements) {\n const { id } = currentPermanentElement\n const newPermanentElement = snapshot.getPermanentElementById(id)\n if (newPermanentElement) {\n permanentElementMap[id] = [ currentPermanentElement, newPermanentElement ]\n }\n }\n\n return permanentElementMap\n }\n}\n\nexport type PermanentElementMap = Record<string, [Element, Element]>\n","export interface FormInterceptorDelegate {\n shouldInterceptFormSubmission(element: HTMLFormElement, submitter?: HTMLElement): boolean\n formSubmissionIntercepted(element: HTMLFormElement, submitter?: HTMLElement): void\n}\n\nexport class FormInterceptor {\n readonly delegate: FormInterceptorDelegate\n readonly element: Element\n\n constructor(delegate: FormInterceptorDelegate, element: Element) {\n this.delegate = delegate\n this.element = element\n }\n\n start() {\n this.element.addEventListener(\"submit\", this.submitBubbled)\n }\n\n stop() {\n this.element.removeEventListener(\"submit\", this.submitBubbled)\n }\n\n submitBubbled = <EventListener>((event: SubmitEvent) => {\n if (event.target instanceof HTMLFormElement) {\n const form = event.target\n const submitter = event.submitter || undefined\n if (this.delegate.shouldInterceptFormSubmission(form, submitter)) {\n event.preventDefault()\n event.stopImmediatePropagation()\n this.delegate.formSubmissionIntercepted(form, submitter)\n }\n }\n })\n}\n","import { Renderer } from \"./renderer\"\nimport { Snapshot } from \"./snapshot\"\nimport { Position } from \"./types\"\n\nexport interface ViewDelegate<S extends Snapshot> {\n viewWillRenderSnapshot(snapshot: S, isPreview: boolean): void\n viewRenderedSnapshot(snapshot: S, isPreview: boolean): void\n viewInvalidated(): void\n}\n\nexport abstract class View<E extends Element, S extends Snapshot<E> = Snapshot<E>, R extends Renderer<E, S> = Renderer<E, S>, D extends ViewDelegate<S> = ViewDelegate<S>> {\n readonly delegate: D\n readonly element: E\n renderer?: R\n abstract readonly snapshot: S\n\n constructor(delegate: D, element: E) {\n this.delegate = delegate\n this.element = element\n }\n\n // Scrolling\n\n scrollToAnchor(anchor: string) {\n const element = this.snapshot.getElementForAnchor(anchor)\n if (element) {\n this.scrollToElement(element)\n } else {\n this.scrollToPosition({ x: 0, y: 0 })\n }\n }\n\n scrollToElement(element: Element) {\n element.scrollIntoView()\n }\n\n scrollToPosition({ x, y }: Position) {\n this.scrollRoot.scrollTo(x, y)\n }\n\n get scrollRoot(): { scrollTo(x: number, y: number): void } {\n return window\n }\n\n // Rendering\n\n async render(renderer: R) {\n if (this.renderer) {\n throw new Error(\"rendering is already in progress\")\n }\n\n const { isPreview, shouldRender, newSnapshot: snapshot } = renderer\n if (shouldRender) {\n try {\n this.renderer = renderer\n this.prepareToRenderSnapshot(renderer)\n this.delegate.viewWillRenderSnapshot(snapshot, isPreview)\n await this.renderSnapshot(renderer)\n this.delegate.viewRenderedSnapshot(snapshot, isPreview)\n this.finishRenderingSnapshot(renderer)\n } finally {\n delete this.renderer\n }\n } else {\n this.invalidate()\n }\n }\n\n invalidate() {\n this.delegate.viewInvalidated()\n }\n\n prepareToRenderSnapshot(renderer: R) {\n this.markAsPreview(renderer.isPreview)\n renderer.prepareToRender()\n }\n\n markAsPreview(isPreview: boolean) {\n if (isPreview) {\n this.element.setAttribute(\"data-turbo-preview\", \"\")\n } else {\n this.element.removeAttribute(\"data-turbo-preview\")\n }\n }\n\n async renderSnapshot(renderer: R) {\n await renderer.render()\n }\n\n finishRenderingSnapshot(renderer: R) {\n renderer.finishRendering()\n }\n}\n","import { FrameElement } from \"../../elements\"\nimport { Snapshot } from \"../snapshot\"\nimport { View } from \"../view\"\n\nexport class FrameView extends View<FrameElement> {\n invalidate() {\n this.element.innerHTML = \"\"\n }\n\n get snapshot() {\n return new Snapshot(this.element)\n }\n}\n","import { dispatch } from \"../../util\"\n\nexport interface LinkInterceptorDelegate {\n shouldInterceptLinkClick(element: Element, url: string): boolean\n linkClickIntercepted(element: Element, url: string): void\n}\n\nexport class LinkInterceptor {\n readonly delegate: LinkInterceptorDelegate\n readonly element: Element\n private clickEvent?: Event\n\n constructor(delegate: LinkInterceptorDelegate, element: Element) {\n this.delegate = delegate\n this.element = element\n }\n\n start() {\n this.element.addEventListener(\"click\", this.clickBubbled)\n document.addEventListener(\"turbo:click\", this.linkClicked)\n document.addEventListener(\"turbo:before-visit\", this.willVisit)\n }\n\n stop() {\n this.element.removeEventListener(\"click\", this.clickBubbled)\n document.removeEventListener(\"turbo:click\", this.linkClicked)\n document.removeEventListener(\"turbo:before-visit\", this.willVisit)\n }\n\n clickBubbled = (event: Event) => {\n if (this.respondsToEventTarget(event.target)) {\n this.clickEvent = event\n } else {\n delete this.clickEvent\n }\n }\n\n linkClicked = <EventListener>((event: CustomEvent) => {\n if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {\n if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url)) {\n this.clickEvent.preventDefault()\n event.preventDefault()\n \n this.convertLinkWithMethodClickToFormSubmission(event.target) || \n this.delegate.linkClickIntercepted(event.target, event.detail.url)\n }\n }\n delete this.clickEvent\n })\n\n willVisit = () => {\n delete this.clickEvent\n }\n\n convertLinkWithMethodClickToFormSubmission(link: Element) {\n const linkMethod = link.getAttribute(\"data-turbo-method\") || link.getAttribute(\"data-method\")\n\n if (linkMethod) {\n const form = document.createElement(\"form\")\n form.method = linkMethod\n form.action = link.getAttribute(\"href\") || \"undefined\"\n\n link.parentNode?.insertBefore(form, link)\n return dispatch(\"submit\", { target: form })\n } else {\n return false\n }\n }\n\n respondsToEventTarget(target: EventTarget | null) {\n const element\n = target instanceof Element\n ? target\n : target instanceof Node\n ? target.parentElement\n : null\n return element && element.closest(\"turbo-frame, html\") == this.element\n }\n}\n","import { PermanentElementMap } from \"./snapshot\"\n\nexport class Bardo {\n readonly permanentElementMap: PermanentElementMap\n\n static preservingPermanentElements(permanentElementMap: PermanentElementMap, callback: () => void) {\n const bardo = new this(permanentElementMap)\n bardo.enter()\n callback()\n bardo.leave()\n }\n\n constructor(permanentElementMap: PermanentElementMap) {\n this.permanentElementMap = permanentElementMap\n }\n\n enter() {\n for (const id in this.permanentElementMap) {\n const [, newPermanentElement ] = this.permanentElementMap[id]\n this.replaceNewPermanentElementWithPlaceholder(newPermanentElement)\n }\n }\n\n leave() {\n for (const id in this.permanentElementMap) {\n const [ currentPermanentElement ] = this.permanentElementMap[id]\n this.replaceCurrentPermanentElementWithClone(currentPermanentElement)\n this.replacePlaceholderWithPermanentElement(currentPermanentElement)\n }\n }\n\n replaceNewPermanentElementWithPlaceholder(permanentElement: Element) {\n const placeholder = createPlaceholderForPermanentElement(permanentElement)\n permanentElement.replaceWith(placeholder)\n }\n\n replaceCurrentPermanentElementWithClone(permanentElement: Element) {\n const clone = permanentElement.cloneNode(true)\n permanentElement.replaceWith(clone)\n }\n\n replacePlaceholderWithPermanentElement(permanentElement: Element) {\n const placeholder = this.getPlaceholderById(permanentElement.id)\n placeholder?.replaceWith(permanentElement)\n }\n\n getPlaceholderById(id: string) {\n return this.placeholders.find(element => element.content == id)\n }\n\n get placeholders(): HTMLMetaElement[] {\n return [ ...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\") ] as any\n }\n}\n\nfunction createPlaceholderForPermanentElement(permanentElement: Element) {\n const element = document.createElement(\"meta\")\n element.setAttribute(\"name\", \"turbo-permanent-placeholder\")\n element.setAttribute(\"content\", permanentElement.id)\n return element\n}\n","import { Bardo } from \"./bardo\"\nimport { Snapshot } from \"./snapshot\"\n\ntype ResolvingFunctions<T = unknown> = {\n resolve(value: T | PromiseLike<T>): void\n reject(reason?: any): void\n}\n\nexport abstract class Renderer<E extends Element, S extends Snapshot<E> = Snapshot<E>> {\n readonly currentSnapshot: S\n readonly newSnapshot: S\n readonly isPreview: boolean\n readonly promise: Promise<void>\n private resolvingFunctions?: ResolvingFunctions<void>\n\n constructor(currentSnapshot: S, newSnapshot: S, isPreview: boolean) {\n this.currentSnapshot = currentSnapshot\n this.newSnapshot = newSnapshot\n this.isPreview = isPreview\n this.promise = new Promise((resolve, reject) => this.resolvingFunctions = { resolve, reject })\n }\n\n get shouldRender() {\n return true\n }\n\n prepareToRender() {\n return\n }\n\n abstract render(): Promise<void>\n\n finishRendering() {\n if (this.resolvingFunctions) {\n this.resolvingFunctions.resolve()\n delete this.resolvingFunctions\n }\n }\n\n createScriptElement(element: Element) {\n if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n return element\n } else {\n const createdScriptElement = document.createElement(\"script\")\n createdScriptElement.textContent = element.textContent\n createdScriptElement.async = false\n copyElementAttributes(createdScriptElement, element)\n return createdScriptElement\n }\n }\n\n preservingPermanentElements(callback: () => void) {\n Bardo.preservingPermanentElements(this.permanentElementMap, callback)\n }\n\n focusFirstAutofocusableElement() {\n const element = this.connectedSnapshot.firstAutofocusableElement\n if (elementIsFocusable(element)) {\n element.focus()\n }\n }\n\n get connectedSnapshot() {\n return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot\n }\n\n get currentElement() {\n return this.currentSnapshot.element\n }\n\n get newElement() {\n return this.newSnapshot.element\n }\n\n get permanentElementMap() {\n return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)\n }\n}\n\nfunction copyElementAttributes(destinationElement: Element, sourceElement: Element) {\n for (const { name, value } of [ ...sourceElement.attributes ]) {\n destinationElement.setAttribute(name, value)\n }\n}\n\nfunction elementIsFocusable(element: any): element is { focus: () => void } {\n return element && typeof element.focus == \"function\"\n}\n","import { FrameElement } from \"../../elements/frame_element\"\nimport { nextAnimationFrame } from \"../../util\"\nimport { Renderer } from \"../renderer\"\n\nexport class FrameRenderer extends Renderer<FrameElement> {\n get shouldRender() {\n return true\n }\n\n async render() {\n await nextAnimationFrame()\n this.preservingPermanentElements(() => {\n this.loadFrameElement()\n })\n this.scrollFrameIntoView()\n await nextAnimationFrame()\n this.focusFirstAutofocusableElement()\n }\n\n loadFrameElement() {\n const destinationRange = document.createRange()\n destinationRange.selectNodeContents(this.currentElement)\n destinationRange.deleteContents()\n\n const frameElement = this.newElement\n const sourceRange = frameElement.ownerDocument?.createRange()\n if (sourceRange) {\n sourceRange.selectNodeContents(frameElement)\n this.currentElement.appendChild(sourceRange.extractContents())\n }\n }\n\n scrollFrameIntoView() {\n if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n const element = this.currentElement.firstElementChild\n const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\")\n\n if (element) {\n element.scrollIntoView({ block })\n return true\n }\n }\n return false\n }\n}\n\nfunction readScrollLogicalPosition(value: string | null, defaultValue: ScrollLogicalPosition): ScrollLogicalPosition {\n if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n return value\n } else {\n return defaultValue\n }\n}\n","import { unindent } from \"../../util\"\n\nexport class ProgressBar {\n static animationDuration = 300/*ms*/\n\n static get defaultCSS() {\n return unindent`\n .turbo-progress-bar {\n position: fixed;\n display: block;\n top: 0;\n left: 0;\n height: 3px;\n background: #0076ff;\n z-index: 9999;\n transition:\n width ${ProgressBar.animationDuration}ms ease-out,\n opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n transform: translate3d(0, 0, 0);\n }\n `\n }\n\n readonly stylesheetElement: HTMLStyleElement\n readonly progressElement: HTMLDivElement\n\n hiding = false\n trickleInterval?: number\n value = 0\n visible = false\n\n constructor() {\n this.stylesheetElement = this.createStylesheetElement()\n this.progressElement = this.createProgressElement()\n this.installStylesheetElement()\n this.setValue(0)\n }\n\n show() {\n if (!this.visible) {\n this.visible = true\n this.installProgressElement()\n this.startTrickling()\n }\n }\n\n hide() {\n if (this.visible && !this.hiding) {\n this.hiding = true\n this.fadeProgressElement(() => {\n this.uninstallProgressElement()\n this.stopTrickling()\n this.visible = false\n this.hiding = false\n })\n }\n }\n\n setValue(value: number) {\n this.value = value\n this.refresh()\n }\n\n // Private\n\n installStylesheetElement() {\n document.head.insertBefore(this.stylesheetElement, document.head.firstChild)\n }\n\n installProgressElement() {\n this.progressElement.style.width = \"0\"\n this.progressElement.style.opacity = \"1\"\n document.documentElement.insertBefore(this.progressElement, document.body)\n this.refresh()\n }\n\n fadeProgressElement(callback: () => void) {\n this.progressElement.style.opacity = \"0\"\n setTimeout(callback, ProgressBar.animationDuration * 1.5)\n }\n\n uninstallProgressElement() {\n if (this.progressElement.parentNode) {\n document.documentElement.removeChild(this.progressElement)\n }\n }\n\n startTrickling() {\n if (!this.trickleInterval) {\n this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration)\n }\n }\n\n stopTrickling() {\n window.clearInterval(this.trickleInterval)\n delete this.trickleInterval\n }\n\n trickle = () => {\n this.setValue(this.value + Math.random() / 100)\n }\n\n refresh() {\n requestAnimationFrame(() => {\n this.progressElement.style.width = `${10 + (this.value * 90)}%`\n })\n }\n\n createStylesheetElement() {\n const element = document.createElement(\"style\")\n element.type = \"text/css\"\n element.textContent = ProgressBar.defaultCSS\n return element\n }\n\n createProgressElement() {\n const element = document.createElement(\"div\")\n element.className = \"turbo-progress-bar\"\n return element\n }\n}\n","import { Snapshot } from \"../snapshot\"\n\ntype ElementDetailMap = { [outerHTML: string]: ElementDetails }\n\ntype ElementDetails = { type?: ElementType, tracked: boolean, elements: Element[] }\n\ntype ElementType = \"script\" | \"stylesheet\"\n\nexport class HeadSnapshot extends Snapshot<HTMLHeadElement> {\n readonly detailsByOuterHTML = this.children.reduce((result, element) => {\n const { outerHTML } = element\n const details: ElementDetails\n = outerHTML in result\n ? result[outerHTML]\n : {\n type: elementType(element),\n tracked: elementIsTracked(element),\n elements: []\n }\n return {\n ...result,\n [outerHTML]: {\n ...details,\n elements: [ ...details.elements, element ]\n }\n }\n }, {} as ElementDetailMap)\n\n get trackedElementSignature(): string {\n return Object.keys(this.detailsByOuterHTML)\n .filter(outerHTML => this.detailsByOuterHTML[outerHTML].tracked)\n .join(\"\")\n }\n\n getScriptElementsNotInSnapshot(snapshot: HeadSnapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot)\n }\n\n getStylesheetElementsNotInSnapshot(snapshot: HeadSnapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot)\n }\n\n getElementsMatchingTypeNotInSnapshot(matchedType: ElementType, snapshot: HeadSnapshot) {\n return Object.keys(this.detailsByOuterHTML)\n .filter(outerHTML => !(outerHTML in snapshot.detailsByOuterHTML))\n .map(outerHTML => this.detailsByOuterHTML[outerHTML])\n .filter(({ type }) => type == matchedType)\n .map(({ elements: [element] }) => element)\n }\n\n get provisionalElements(): Element[] {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML]\n if (type == null && !tracked) {\n return [ ...result, ...elements ]\n } else if (elements.length > 1) {\n return [ ...result, ...elements.slice(1) ]\n } else {\n return result\n }\n }, [] as Element[])\n }\n\n getMetaValue(name: string): string | null {\n const element = this.findMetaElementByName(name)\n return element\n ? element.getAttribute(\"content\")\n : null\n }\n\n findMetaElementByName(name: string) {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { elements: [element] } = this.detailsByOuterHTML[outerHTML]\n return elementIsMetaElementWithName(element, name) ? element : result\n }, undefined as Element | undefined)\n }\n}\n\nfunction elementType(element: Element) {\n if (elementIsScript(element)) {\n return \"script\"\n } else if (elementIsStylesheet(element)) {\n return \"stylesheet\"\n }\n}\n\nfunction elementIsTracked(element: Element) {\n return element.getAttribute(\"data-turbo-track\") == \"reload\"\n}\n\nfunction elementIsScript(element: Element) {\n const tagName = element.tagName.toLowerCase()\n return tagName == \"script\"\n}\n\nfunction elementIsStylesheet(element: Element) {\n const tagName = element.tagName.toLowerCase()\n return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n}\n\nfunction elementIsMetaElementWithName(element: Element, name: string) {\n const tagName = element.tagName.toLowerCase()\n return tagName == \"meta\" && element.getAttribute(\"name\") == name\n}\n","import { parseHTMLDocument } from \"../../util\"\nimport { Snapshot } from \"../snapshot\"\nimport { expandURL } from \"../url\"\nimport { HeadSnapshot } from \"./head_snapshot\"\n\nexport class PageSnapshot extends Snapshot<HTMLBodyElement> {\n static fromHTMLString(html = \"\") {\n return this.fromDocument(parseHTMLDocument(html))\n }\n\n static fromElement(element: Element) {\n return this.fromDocument(element.ownerDocument)\n }\n\n static fromDocument({ head, body }: Document) {\n return new this(body as HTMLBodyElement, new HeadSnapshot(head))\n }\n\n readonly headSnapshot: HeadSnapshot\n\n constructor(element: HTMLBodyElement, headSnapshot: HeadSnapshot) {\n super(element)\n this.headSnapshot = headSnapshot\n }\n\n clone() {\n return new PageSnapshot(this.element.cloneNode(true), this.headSnapshot)\n }\n\n get headElement() {\n return this.headSnapshot.element\n }\n\n get rootLocation() {\n const root = this.getSetting(\"root\") ?? \"/\"\n return expandURL(root)\n }\n\n get cacheControlValue() {\n return this.getSetting(\"cache-control\")\n }\n\n get isPreviewable() {\n return this.cacheControlValue != \"no-preview\"\n }\n\n get isCacheable() {\n return this.cacheControlValue != \"no-cache\"\n }\n\n get isVisitable() {\n return this.getSetting(\"visit-control\") != \"reload\"\n }\n\n // Private\n\n getSetting(name: string) {\n return this.headSnapshot.getMetaValue(`turbo-${name}`)\n }\n}\n","import { Adapter } from \"../native/adapter\"\nimport { FetchMethod, FetchRequest, FetchRequestDelegate } from \"../../http/fetch_request\"\nimport { FetchResponse } from \"../../http/fetch_response\"\nimport { History } from \"./history\"\nimport { getAnchor } from \"../url\"\nimport { PageSnapshot } from \"./page_snapshot\"\nimport { Action } from \"../types\"\nimport { uuid } from \"../../util\"\nimport { PageView } from \"./page_view\"\n\nexport interface VisitDelegate {\n readonly adapter: Adapter\n readonly history: History\n readonly view: PageView\n\n visitStarted(visit: Visit): void\n visitCompleted(visit: Visit): void\n}\n\nexport enum TimingMetric {\n visitStart = \"visitStart\",\n requestStart = \"requestStart\",\n requestEnd = \"requestEnd\",\n visitEnd = \"visitEnd\"\n}\n\nexport type TimingMetrics = Partial<{ [metric in TimingMetric]: any }>\n\nexport enum VisitState {\n initialized = \"initialized\",\n started = \"started\",\n canceled = \"canceled\",\n failed = \"failed\",\n completed = \"completed\"\n}\n\nexport type VisitOptions = {\n action: Action,\n historyChanged: boolean,\n referrer?: URL,\n snapshotHTML?: string,\n response?: VisitResponse\n}\n\nconst defaultOptions: VisitOptions = {\n action: \"advance\",\n historyChanged: false\n}\n\nexport type VisitResponse = {\n statusCode: number,\n responseHTML?: string\n}\n\nexport enum SystemStatusCode {\n networkFailure = 0,\n timeoutFailure = -1,\n contentTypeMismatch = -2\n}\n\nexport class Visit implements FetchRequestDelegate {\n readonly delegate: VisitDelegate\n readonly identifier = uuid()\n readonly restorationIdentifier: string\n readonly action: Action\n readonly referrer?: URL\n readonly timingMetrics: TimingMetrics = {}\n\n followedRedirect = false\n frame?: number\n historyChanged = false\n location: URL\n redirectedToLocation?: URL\n request?: FetchRequest\n response?: VisitResponse\n scrolled = false\n snapshotHTML?: string\n snapshotCached = false\n state = VisitState.initialized\n\n constructor(delegate: VisitDelegate, location: URL, restorationIdentifier: string | undefined, options: Partial<VisitOptions> = {}) {\n this.delegate = delegate\n this.location = location\n this.restorationIdentifier = restorationIdentifier || uuid()\n\n const { action, historyChanged, referrer, snapshotHTML, response } = { ...defaultOptions, ...options }\n this.action = action\n this.historyChanged = historyChanged\n this.referrer = referrer\n this.snapshotHTML = snapshotHTML\n this.response = response\n }\n\n get adapter() {\n return this.delegate.adapter\n }\n\n get view() {\n return this.delegate.view\n }\n\n get history() {\n return this.delegate.history\n }\n\n get restorationData() {\n return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)\n }\n\n start() {\n if (this.state == VisitState.initialized) {\n this.recordTimingMetric(TimingMetric.visitStart)\n this.state = VisitState.started\n this.adapter.visitStarted(this)\n this.delegate.visitStarted(this)\n }\n }\n\n cancel() {\n if (this.state == VisitState.started) {\n if (this.request) {\n this.request.cancel()\n }\n this.cancelRender()\n this.state = VisitState.canceled\n }\n }\n\n complete() {\n if (this.state == VisitState.started) {\n this.recordTimingMetric(TimingMetric.visitEnd)\n this.state = VisitState.completed\n this.adapter.visitCompleted(this)\n this.delegate.visitCompleted(this)\n }\n }\n\n fail() {\n if (this.state == VisitState.started) {\n this.state = VisitState.failed\n this.adapter.visitFailed(this)\n }\n }\n\n changeHistory() {\n if (!this.historyChanged) {\n const actionForHistory = this.location.href === this.referrer?.href ? \"replace\" : this.action\n const method = this.getHistoryMethodForAction(actionForHistory)\n this.history.update(method, this.location, this.restorationIdentifier)\n this.historyChanged = true\n }\n }\n\n issueRequest() {\n if (this.hasPreloadedResponse()) {\n this.simulateRequest()\n } else if (this.shouldIssueRequest() && !this.request) {\n this.request = new FetchRequest(this, FetchMethod.get, this.location)\n this.request.perform()\n }\n }\n\n simulateRequest() {\n if (this.response) {\n this.startRequest()\n this.recordResponse()\n this.finishRequest()\n }\n }\n\n startRequest() {\n this.recordTimingMetric(TimingMetric.requestStart)\n this.adapter.visitRequestStarted(this)\n }\n\n recordResponse(response = this.response) {\n this.response = response\n if (response) {\n const { statusCode } = response\n if (isSuccessful(statusCode)) {\n this.adapter.visitRequestCompleted(this)\n } else {\n this.adapter.visitRequestFailedWithStatusCode(this, statusCode)\n }\n }\n }\n\n finishRequest() {\n this.recordTimingMetric(TimingMetric.requestEnd)\n this.adapter.visitRequestFinished(this)\n }\n\n loadResponse() {\n if (this.response) {\n const { statusCode, responseHTML } = this.response\n this.render(async () => {\n this.cacheSnapshot()\n if (isSuccessful(statusCode) && responseHTML != null) {\n await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML))\n this.adapter.visitRendered(this)\n this.complete()\n } else {\n await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML))\n this.adapter.visitRendered(this)\n this.fail()\n }\n })\n }\n }\n\n getCachedSnapshot() {\n const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot()\n\n if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n if (this.action == \"restore\" || snapshot.isPreviewable) {\n return snapshot\n }\n }\n }\n\n getPreloadedSnapshot() {\n if (this.snapshotHTML) {\n return PageSnapshot.fromHTMLString(this.snapshotHTML)\n }\n }\n\n hasCachedSnapshot() {\n return this.getCachedSnapshot() != null\n }\n\n loadCachedSnapshot() {\n const snapshot = this.getCachedSnapshot()\n if (snapshot) {\n const isPreview = this.shouldIssueRequest()\n this.render(async () => {\n this.cacheSnapshot()\n await this.view.renderPage(snapshot, isPreview)\n this.adapter.visitRendered(this)\n if (!isPreview) {\n this.complete()\n }\n })\n }\n }\n\n followRedirect() {\n if (this.redirectedToLocation && !this.followedRedirect) {\n this.location = this.redirectedToLocation\n this.history.replace(this.redirectedToLocation, this.restorationIdentifier)\n this.followedRedirect = true\n }\n }\n\n // Fetch request delegate\n\n requestStarted() {\n this.startRequest()\n }\n\n requestPreventedHandlingResponse(request: FetchRequest, response: FetchResponse) {\n\n }\n\n async requestSucceededWithResponse(request: FetchRequest, response: FetchResponse) {\n const responseHTML = await response.responseHTML\n if (responseHTML == undefined) {\n this.recordResponse({ statusCode: SystemStatusCode.contentTypeMismatch })\n } else {\n this.redirectedToLocation = response.redirected ? response.location : undefined\n this.recordResponse({ statusCode: response.statusCode, responseHTML })\n }\n }\n\n async requestFailedWithResponse(request: FetchRequest, response: FetchResponse) {\n const responseHTML = await response.responseHTML\n if (responseHTML == undefined) {\n this.recordResponse({ statusCode: SystemStatusCode.contentTypeMismatch })\n } else {\n this.recordResponse({ statusCode: response.statusCode, responseHTML })\n }\n }\n\n requestErrored(request: FetchRequest, error: Error) {\n this.recordResponse({ statusCode: SystemStatusCode.networkFailure })\n }\n\n requestFinished() {\n this.finishRequest()\n }\n\n // Scrolling\n\n performScroll() {\n if (!this.scrolled) {\n if (this.action == \"restore\") {\n this.scrollToRestoredPosition() || this.scrollToTop()\n } else {\n this.scrollToAnchor() || this.scrollToTop()\n }\n this.scrolled = true\n }\n }\n\n scrollToRestoredPosition() {\n const { scrollPosition } = this.restorationData\n if (scrollPosition) {\n this.view.scrollToPosition(scrollPosition)\n return true\n }\n }\n\n scrollToAnchor() {\n if (getAnchor(this.location)) {\n this.view.scrollToAnchor(getAnchor(this.location))\n return true\n }\n }\n\n scrollToTop() {\n this.view.scrollToPosition({ x: 0, y: 0 })\n }\n\n // Instrumentation\n\n recordTimingMetric(metric: TimingMetric) {\n this.timingMetrics[metric] = new Date().getTime()\n }\n\n getTimingMetrics(): TimingMetrics {\n return { ...this.timingMetrics }\n }\n\n // Private\n\n getHistoryMethodForAction(action: Action) {\n switch (action) {\n case \"replace\": return history.replaceState\n case \"advance\":\n case \"restore\": return history.pushState\n }\n }\n\n hasPreloadedResponse() {\n return typeof this.response == \"object\"\n }\n\n shouldIssueRequest() {\n return this.action == \"restore\"\n ? !this.hasCachedSnapshot()\n : true\n }\n\n cacheSnapshot() {\n if (!this.snapshotCached) {\n this.view.cacheSnapshot()\n this.snapshotCached = true\n }\n }\n\n async render(callback: () => Promise<void>) {\n this.cancelRender()\n await new Promise<void>(resolve => {\n this.frame = requestAnimationFrame(() => resolve())\n })\n callback()\n delete this.frame\n this.performScroll()\n }\n\n cancelRender() {\n if (this.frame) {\n cancelAnimationFrame(this.frame)\n delete this.frame\n }\n }\n}\n\nfunction isSuccessful(statusCode: number) {\n return statusCode >= 200 && statusCode < 300\n}\n","import { Adapter } from \"./adapter\"\nimport { ProgressBar } from \"../drive/progress_bar\"\nimport { SystemStatusCode, Visit, VisitOptions } from \"../drive/visit\"\nimport { Session } from \"../session\"\nimport { uuid } from \"../../util\"\n\nexport class BrowserAdapter implements Adapter {\n readonly session: Session\n readonly progressBar = new ProgressBar\n\n progressBarTimeout?: number\n\n constructor(session: Session) {\n this.session = session\n }\n\n visitProposedToLocation(location: URL, options?: Partial<VisitOptions>) {\n this.navigator.startVisit(location, uuid(), options)\n }\n\n visitStarted(visit: Visit) {\n visit.issueRequest()\n visit.changeHistory()\n visit.loadCachedSnapshot()\n }\n\n visitRequestStarted(visit: Visit) {\n this.progressBar.setValue(0)\n if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n this.showProgressBarAfterDelay()\n } else {\n this.showProgressBar()\n }\n }\n\n visitRequestCompleted(visit: Visit) {\n visit.loadResponse()\n }\n\n visitRequestFailedWithStatusCode(visit: Visit, statusCode: number) {\n switch (statusCode) {\n case SystemStatusCode.networkFailure:\n case SystemStatusCode.timeoutFailure:\n case SystemStatusCode.contentTypeMismatch:\n return this.reload()\n default:\n return visit.loadResponse()\n }\n }\n\n visitRequestFinished(visit: Visit) {\n this.progressBar.setValue(1)\n this.hideProgressBar()\n }\n\n visitCompleted(visit: Visit) {\n visit.followRedirect()\n }\n\n pageInvalidated() {\n this.reload()\n }\n\n visitFailed(visit: Visit) {\n\n }\n\n visitRendered(visit: Visit) {\n\n }\n\n // Private\n\n showProgressBarAfterDelay() {\n this.progressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay)\n }\n\n showProgressBar = () => {\n this.progressBar.show()\n }\n\n hideProgressBar() {\n this.progressBar.hide()\n if (this.progressBarTimeout != null) {\n window.clearTimeout(this.progressBarTimeout)\n delete this.progressBarTimeout\n }\n }\n\n reload() {\n window.location.reload()\n }\n\n get navigator() {\n return this.session.navigator\n }\n}\n","export class CacheObserver {\n started = false\n\n start() {\n if (!this.started) {\n this.started = true\n addEventListener(\"turbo:before-cache\", this.removeStaleElements, false)\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false\n removeEventListener(\"turbo:before-cache\", this.removeStaleElements, false)\n }\n }\n\n removeStaleElements() {\n const staleElements = [ ...document.querySelectorAll('[data-turbo-cache=\"false\"]') ]\n\n for (const element of staleElements) {\n element.remove()\n }\n }\n}\n","export interface FormSubmitObserverDelegate {\n willSubmitForm(form: HTMLFormElement, submitter?: HTMLElement): boolean\n formSubmitted(form: HTMLFormElement, submitter?: HTMLElement): void\n}\n\nexport class FormSubmitObserver {\n readonly delegate: FormSubmitObserverDelegate\n started = false\n\n constructor(delegate: FormSubmitObserverDelegate) {\n this.delegate = delegate\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"submit\", this.submitCaptured, true)\n this.started = true\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"submit\", this.submitCaptured, true)\n this.started = false\n }\n }\n\n submitCaptured = () => {\n removeEventListener(\"submit\", this.submitBubbled, false)\n addEventListener(\"submit\", this.submitBubbled, false)\n }\n\n submitBubbled = <EventListener>((event: SubmitEvent) => {\n if (!event.defaultPrevented) {\n const form = event.target instanceof HTMLFormElement ? event.target : undefined\n const submitter = event.submitter || undefined\n\n if (form) {\n const method = submitter?.getAttribute(\"formmethod\") || form.method\n\n if (method != \"dialog\" && this.delegate.willSubmitForm(form, submitter)) {\n event.preventDefault()\n this.delegate.formSubmitted(form, submitter)\n }\n }\n }\n })\n}\n","import { FormInterceptor, FormInterceptorDelegate } from \"./form_interceptor\"\nimport { FrameElement } from \"../../elements/frame_element\"\nimport { LinkInterceptor, LinkInterceptorDelegate } from \"./link_interceptor\"\n\nexport class FrameRedirector implements LinkInterceptorDelegate, FormInterceptorDelegate {\n readonly element: Element\n readonly linkInterceptor: LinkInterceptor\n readonly formInterceptor: FormInterceptor\n\n constructor(element: Element) {\n this.element = element\n this.linkInterceptor = new LinkInterceptor(this, element)\n this.formInterceptor = new FormInterceptor(this, element)\n }\n\n start() {\n this.linkInterceptor.start()\n this.formInterceptor.start()\n }\n\n stop() {\n this.linkInterceptor.stop()\n this.formInterceptor.stop()\n }\n\n shouldInterceptLinkClick(element: Element, url: string) {\n return this.shouldRedirect(element)\n }\n\n linkClickIntercepted(element: Element, url: string) {\n const frame = this.findFrameElement(element)\n if (frame) {\n frame.src = url\n }\n }\n\n shouldInterceptFormSubmission(element: HTMLFormElement, submitter?: HTMLElement) {\n return this.shouldRedirect(element, submitter)\n }\n\n formSubmissionIntercepted(element: HTMLFormElement, submitter?: HTMLElement) {\n const frame = this.findFrameElement(element)\n if (frame) {\n frame.delegate.formSubmissionIntercepted(element, submitter)\n }\n }\n\n private shouldRedirect(element: Element, submitter?: HTMLElement) {\n const frame = this.findFrameElement(element)\n return frame ? frame != element.closest(\"turbo-frame\") : false\n }\n\n private findFrameElement(element: Element) {\n const id = element.getAttribute(\"data-turbo-frame\")\n if (id && id != \"_top\") {\n const frame = this.element.querySelector(`#${id}:not([disabled])`)\n if (frame instanceof FrameElement) {\n return frame\n }\n }\n }\n}\n","import { Position } from \"../types\"\nimport { nextMicrotask, uuid } from \"../../util\"\n\nexport interface HistoryDelegate {\n historyPoppedToLocationWithRestorationIdentifier(location: URL, restorationIdentifier: string): void\n}\n\ntype HistoryMethod = (this: typeof history, state: any, title: string, url?: string | null | undefined) => void\n\nexport type RestorationData = { scrollPosition?: Position }\n\nexport type RestorationDataMap = { [restorationIdentifier: string]: RestorationData }\n\nexport class History {\n readonly delegate: HistoryDelegate\n location!: URL\n restorationIdentifier = uuid()\n restorationData: RestorationDataMap = {}\n started = false\n pageLoaded = false\n previousScrollRestoration?: ScrollRestoration\n\n constructor(delegate: HistoryDelegate) {\n this.delegate = delegate\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"popstate\", this.onPopState, false)\n addEventListener(\"load\", this.onPageLoad, false)\n this.started = true\n this.replace(new URL(window.location.href))\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"popstate\", this.onPopState, false)\n removeEventListener(\"load\", this.onPageLoad, false)\n this.started = false\n }\n }\n\n push(location: URL, restorationIdentifier?: string) {\n this.update(history.pushState, location, restorationIdentifier)\n }\n\n replace(location: URL, restorationIdentifier?: string) {\n this.update(history.replaceState, location, restorationIdentifier)\n }\n\n update(method: HistoryMethod, location: URL, restorationIdentifier = uuid()) {\n const state = { turbo: { restorationIdentifier } }\n method.call(history, state, \"\", location.href)\n this.location = location\n this.restorationIdentifier = restorationIdentifier\n }\n\n // Restoration data\n\n getRestorationDataForIdentifier(restorationIdentifier: string): RestorationData {\n return this.restorationData[restorationIdentifier] || {}\n }\n\n updateRestorationData(additionalData: Partial<RestorationData>) {\n const { restorationIdentifier } = this\n const restorationData = this.restorationData[restorationIdentifier]\n this.restorationData[restorationIdentifier] = { ...restorationData, ...additionalData }\n }\n\n // Scroll restoration\n\n assumeControlOfScrollRestoration() {\n if (!this.previousScrollRestoration) {\n this.previousScrollRestoration = history.scrollRestoration ?? \"auto\"\n history.scrollRestoration = \"manual\"\n }\n }\n\n relinquishControlOfScrollRestoration() {\n if (this.previousScrollRestoration) {\n history.scrollRestoration = this.previousScrollRestoration\n delete this.previousScrollRestoration\n }\n }\n\n // Event handlers\n\n onPopState = (event: PopStateEvent) => {\n if (this.shouldHandlePopState()) {\n const { turbo } = event.state || {}\n if (turbo) {\n this.location = new URL(window.location.href)\n const { restorationIdentifier } = turbo\n this.restorationIdentifier = restorationIdentifier\n this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location, restorationIdentifier)\n }\n }\n }\n\n onPageLoad = async (event: Event) => {\n await nextMicrotask()\n this.pageLoaded = true\n }\n\n // Private\n\n shouldHandlePopState() {\n // Safari dispatches a popstate event after window's load event, ignore it\n return this.pageIsLoaded()\n }\n\n pageIsLoaded() {\n return this.pageLoaded || document.readyState == \"complete\"\n }\n}\n","import { expandURL } from \"../core/url\"\n\nexport interface LinkClickObserverDelegate {\n willFollowLinkToLocation(link: Element, location: URL): boolean\n followedLinkToLocation(link: Element, location: URL): void\n}\n\nexport class LinkClickObserver {\n readonly delegate: LinkClickObserverDelegate\n started = false\n\n constructor(delegate: LinkClickObserverDelegate) {\n this.delegate = delegate\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"click\", this.clickCaptured, true)\n this.started = true\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"click\", this.clickCaptured, true)\n this.started = false\n }\n }\n\n clickCaptured = () => {\n removeEventListener(\"click\", this.clickBubbled, false)\n addEventListener(\"click\", this.clickBubbled, false)\n }\n\n clickBubbled = (event: MouseEvent) => {\n if (this.clickEventIsSignificant(event)) {\n const link = this.findLinkFromClickTarget(event.target)\n if (link) {\n const location = this.getLocationForLink(link)\n if (this.delegate.willFollowLinkToLocation(link, location)) {\n event.preventDefault()\n this.delegate.followedLinkToLocation(link, location)\n }\n }\n }\n }\n\n clickEventIsSignificant(event: MouseEvent) {\n return !(\n (event.target && (event.target as any).isContentEditable)\n || event.defaultPrevented\n || event.which > 1\n || event.altKey\n || event.ctrlKey\n || event.metaKey\n || event.shiftKey\n )\n }\n\n findLinkFromClickTarget(target: EventTarget | null) {\n if (target instanceof Element) {\n return target.closest(\"a[href]:not([target^=_]):not([download])\")\n }\n }\n\n getLocationForLink(link: Element): URL {\n return expandURL(link.getAttribute(\"href\") || \"\")\n }\n}\n","export type Action = \"advance\" | \"replace\" | \"restore\"\n\nexport function isAction(action: any): action is Action {\n return action == \"advance\" || action == \"replace\" || action == \"restore\"\n}\n\nexport type Position = { x: number, y: number }\n\nexport type StreamSource = {\n addEventListener(type: \"message\", listener: (event: MessageEvent) => void, options?: boolean | AddEventListenerOptions): void\n removeEventListener(type: \"message\", listener: (event: MessageEvent) => void, options?: boolean | EventListenerOptions): void\n}\n","import { Action, isAction } from \"../types\"\nimport { FetchMethod } from \"../../http/fetch_request\"\nimport { FetchResponse } from \"../../http/fetch_response\"\nimport { FormSubmission } from \"./form_submission\"\nimport { expandURL, Locatable } from \"../url\"\nimport { Visit, VisitDelegate, VisitOptions } from \"./visit\"\nimport { PageSnapshot } from \"./page_snapshot\"\n\nexport type NavigatorDelegate = VisitDelegate & {\n allowsVisitingLocation(location: URL): boolean\n visitProposedToLocation(location: URL, options: Partial<VisitOptions>): void\n}\n\nexport class Navigator {\n readonly delegate: NavigatorDelegate\n formSubmission?: FormSubmission\n currentVisit?: Visit\n\n constructor(delegate: NavigatorDelegate) {\n this.delegate = delegate\n }\n\n proposeVisit(location: URL, options: Partial<VisitOptions> = {}) {\n if (this.delegate.allowsVisitingLocation(location)) {\n this.delegate.visitProposedToLocation(location, options)\n }\n }\n\n startVisit(locatable: Locatable, restorationIdentifier: string, options: Partial<VisitOptions> = {}) {\n this.stop()\n this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, {\n referrer: this.location,\n ...options\n })\n this.currentVisit.start()\n }\n\n submitForm(form: HTMLFormElement, submitter?: HTMLElement) {\n this.stop()\n this.formSubmission = new FormSubmission(this, form, submitter, true)\n\n if (this.formSubmission.isIdempotent) {\n this.proposeVisit(this.formSubmission.fetchRequest.url, { action: this.getActionForFormSubmission(this.formSubmission) })\n } else {\n this.formSubmission.start()\n }\n }\n\n stop() {\n if (this.formSubmission) {\n this.formSubmission.stop()\n delete this.formSubmission\n }\n\n if (this.currentVisit) {\n this.currentVisit.cancel()\n delete this.currentVisit\n }\n }\n\n get adapter() {\n return this.delegate.adapter\n }\n\n get view() {\n return this.delegate.view\n }\n\n get history() {\n return this.delegate.history\n }\n\n // Form submission delegate\n\n formSubmissionStarted(formSubmission: FormSubmission) {\n\n }\n\n async formSubmissionSucceededWithResponse(formSubmission: FormSubmission, fetchResponse: FetchResponse) {\n if (formSubmission == this.formSubmission) {\n const responseHTML = await fetchResponse.responseHTML\n if (responseHTML) {\n if (formSubmission.method != FetchMethod.get) {\n this.view.clearSnapshotCache()\n }\n\n const { statusCode } = fetchResponse\n const visitOptions = { response: { statusCode, responseHTML } }\n this.proposeVisit(fetchResponse.location, visitOptions)\n }\n }\n }\n\n async formSubmissionFailedWithResponse(formSubmission: FormSubmission, fetchResponse: FetchResponse) {\n const responseHTML = await fetchResponse.responseHTML\n\n if (responseHTML) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML)\n await this.view.renderPage(snapshot)\n this.view.clearSnapshotCache()\n }\n }\n\n formSubmissionErrored(formSubmission: FormSubmission, error: Error) {\n console.error(error)\n }\n\n formSubmissionFinished(formSubmission: FormSubmission) {\n\n }\n\n // Visit delegate\n\n visitStarted(visit: Visit) {\n this.delegate.visitStarted(visit)\n }\n\n visitCompleted(visit: Visit) {\n this.delegate.visitCompleted(visit)\n }\n\n // Visits\n\n get location() {\n return this.history.location\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier\n }\n\n getActionForFormSubmission(formSubmission: FormSubmission): Action {\n const { formElement, submitter } = formSubmission\n const action = submitter?.getAttribute(\"data-turbo-action\") || formElement.getAttribute(\"data-turbo-action\")\n return isAction(action) ? action : \"advance\"\n }\n}\n","export interface PageObserverDelegate {\n pageBecameInteractive(): void\n pageLoaded(): void\n pageWillUnload(): void\n}\n\nexport enum PageStage {\n initial,\n loading,\n interactive,\n complete\n}\n\nexport class PageObserver {\n readonly delegate: PageObserverDelegate\n stage = PageStage.initial\n started = false\n\n constructor(delegate: PageObserverDelegate) {\n this.delegate = delegate\n }\n\n start() {\n if (!this.started) {\n if (this.stage == PageStage.initial) {\n this.stage = PageStage.loading\n }\n document.addEventListener(\"readystatechange\", this.interpretReadyState, false)\n addEventListener(\"pagehide\", this.pageWillUnload, false)\n this.started = true\n }\n }\n\n stop() {\n if (this.started) {\n document.removeEventListener(\"readystatechange\", this.interpretReadyState, false)\n removeEventListener(\"pagehide\", this.pageWillUnload, false)\n this.started = false\n }\n }\n\n interpretReadyState = () => {\n const { readyState } = this\n if (readyState == \"interactive\") {\n this.pageIsInteractive()\n } else if (readyState == \"complete\") {\n this.pageIsComplete()\n }\n }\n\n pageIsInteractive() {\n if (this.stage == PageStage.loading) {\n this.stage = PageStage.interactive\n this.delegate.pageBecameInteractive()\n }\n }\n\n pageIsComplete() {\n this.pageIsInteractive()\n if (this.stage == PageStage.interactive) {\n this.stage = PageStage.complete\n this.delegate.pageLoaded()\n }\n }\n\n pageWillUnload = () => {\n this.delegate.pageWillUnload()\n }\n\n get readyState() {\n return document.readyState\n }\n}\n","import { Position } from \"../core/types\"\n\nexport interface ScrollObserverDelegate {\n scrollPositionChanged(position: Position): void\n}\n\nexport class ScrollObserver {\n readonly delegate: ScrollObserverDelegate\n started = false\n\n constructor(delegate: ScrollObserverDelegate) {\n this.delegate = delegate\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"scroll\", this.onScroll, false)\n this.onScroll()\n this.started = true\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"scroll\", this.onScroll, false)\n this.started = false\n }\n }\n\n onScroll = () => {\n this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset })\n }\n\n // Private\n\n updatePosition(position: Position) {\n this.delegate.scrollPositionChanged(position)\n }\n}\n","import { FetchResponse } from \"../http/fetch_response\"\nimport { StreamMessage } from \"../core/streams/stream_message\"\nimport { StreamSource } from \"../core/types\"\n\nexport interface StreamObserverDelegate {\n receivedMessageFromStream(message: StreamMessage): void\n}\n\nexport class StreamObserver {\n readonly delegate: StreamObserverDelegate\n readonly sources: Set<StreamSource> = new Set\n private started = false\n\n constructor(delegate: StreamObserverDelegate) {\n this.delegate = delegate\n }\n\n start() {\n if (!this.started) {\n this.started = true\n addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false)\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false\n removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false)\n }\n }\n\n connectStreamSource(source: StreamSource) {\n if (!this.streamSourceIsConnected(source)) {\n this.sources.add(source)\n source.addEventListener(\"message\", this.receiveMessageEvent, false)\n }\n }\n\n disconnectStreamSource(source: StreamSource) {\n if (this.streamSourceIsConnected(source)) {\n this.sources.delete(source)\n source.removeEventListener(\"message\", this.receiveMessageEvent, false)\n }\n }\n\n streamSourceIsConnected(source: StreamSource) {\n return this.sources.has(source)\n }\n\n inspectFetchResponse = <EventListener>((event: CustomEvent) => {\n const response = fetchResponseFromEvent(event)\n if (response && fetchResponseIsStream(response)) {\n event.preventDefault()\n this.receiveMessageResponse(response)\n }\n })\n\n receiveMessageEvent = (event: MessageEvent) => {\n if (this.started && typeof event.data == \"string\") {\n this.receiveMessageHTML(event.data)\n }\n }\n\n async receiveMessageResponse(response: FetchResponse) {\n const html = await response.responseHTML\n if (html) {\n this.receiveMessageHTML(html)\n }\n }\n\n receiveMessageHTML(html: string) {\n this.delegate.receivedMessageFromStream(new StreamMessage(html))\n }\n}\n\nfunction fetchResponseFromEvent(event: CustomEvent) {\n const fetchResponse = event.detail?.fetchResponse\n if (fetchResponse instanceof FetchResponse) {\n return fetchResponse\n }\n}\n\nfunction fetchResponseIsStream(response: FetchResponse) {\n const contentType = response.contentType ?? \"\"\n return contentType.startsWith(StreamMessage.contentType)\n}\n","import { PageSnapshot } from \"./page_snapshot\"\nimport { Renderer } from \"../renderer\"\n\nexport class ErrorRenderer extends Renderer<HTMLBodyElement, PageSnapshot> {\n async render() {\n this.replaceHeadAndBody()\n this.activateScriptElements()\n }\n\n replaceHeadAndBody() {\n const { documentElement, head, body } = document\n documentElement.replaceChild(this.newHead, head)\n documentElement.replaceChild(this.newElement, body)\n }\n\n activateScriptElements() {\n for (const replaceableElement of this.scriptElements) {\n const parentNode = replaceableElement.parentNode\n if (parentNode) {\n const element = this.createScriptElement(replaceableElement)\n parentNode.replaceChild(element, replaceableElement)\n }\n }\n }\n\n get newHead() {\n return this.newSnapshot.headSnapshot.element\n }\n\n get scriptElements() {\n return [ ...document.documentElement.querySelectorAll(\"script\") ]\n }\n}\n","import { Renderer } from \"../renderer\"\nimport { PageSnapshot } from \"./page_snapshot\"\n\nexport class PageRenderer extends Renderer<HTMLBodyElement, PageSnapshot> {\n get shouldRender() {\n return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical\n }\n\n prepareToRender() {\n this.mergeHead()\n }\n\n async render() {\n this.replaceBody()\n }\n\n finishRendering() {\n super.finishRendering()\n if (!this.isPreview) {\n this.focusFirstAutofocusableElement()\n }\n }\n\n get currentHeadSnapshot() {\n return this.currentSnapshot.headSnapshot\n }\n\n get newHeadSnapshot() {\n return this.newSnapshot.headSnapshot\n }\n\n get newElement() {\n return this.newSnapshot.element\n }\n\n mergeHead() {\n this.copyNewHeadStylesheetElements()\n this.copyNewHeadScriptElements()\n this.removeCurrentHeadProvisionalElements()\n this.copyNewHeadProvisionalElements()\n }\n\n replaceBody() {\n this.preservingPermanentElements(() => {\n this.activateNewBody()\n this.assignNewBody()\n })\n }\n\n get trackedElementsAreIdentical() {\n return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature\n }\n\n copyNewHeadStylesheetElements() {\n for (const element of this.newHeadStylesheetElements) {\n document.head.appendChild(element)\n }\n }\n\n copyNewHeadScriptElements() {\n for (const element of this.newHeadScriptElements) {\n document.head.appendChild(this.createScriptElement(element))\n }\n }\n\n removeCurrentHeadProvisionalElements() {\n for (const element of this.currentHeadProvisionalElements) {\n document.head.removeChild(element)\n }\n }\n\n copyNewHeadProvisionalElements() {\n for (const element of this.newHeadProvisionalElements) {\n document.head.appendChild(element)\n }\n }\n\n activateNewBody() {\n document.adoptNode(this.newElement)\n this.activateNewBodyScriptElements()\n }\n\n activateNewBodyScriptElements() {\n for (const inertScriptElement of this.newBodyScriptElements) {\n const activatedScriptElement = this.createScriptElement(inertScriptElement)\n inertScriptElement.replaceWith(activatedScriptElement)\n }\n }\n\n assignNewBody() {\n if (document.body && this.newElement instanceof HTMLBodyElement) {\n document.body.replaceWith(this.newElement)\n } else {\n document.documentElement.appendChild(this.newElement)\n }\n }\n\n get newHeadStylesheetElements() {\n return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)\n }\n\n get newHeadScriptElements() {\n return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)\n }\n\n get currentHeadProvisionalElements() {\n return this.currentHeadSnapshot.provisionalElements\n }\n\n get newHeadProvisionalElements() {\n return this.newHeadSnapshot.provisionalElements\n }\n\n get newBodyScriptElements() {\n return [ ...this.newElement.querySelectorAll(\"script\") ]\n }\n}\n","import { toCacheKey } from \"../url\"\nimport { PageSnapshot } from \"./page_snapshot\"\n\nexport class SnapshotCache {\n readonly keys: string[] = []\n readonly size: number\n snapshots: { [url: string]: PageSnapshot } = {}\n\n constructor(size: number) {\n this.size = size\n }\n\n has(location: URL) {\n return toCacheKey(location) in this.snapshots\n }\n\n get(location: URL): PageSnapshot | undefined {\n if (this.has(location)) {\n const snapshot = this.read(location)\n this.touch(location)\n return snapshot\n }\n }\n\n put(location: URL, snapshot: PageSnapshot) {\n this.write(location, snapshot)\n this.touch(location)\n return snapshot\n }\n\n clear() {\n this.snapshots = {}\n }\n\n // Private\n\n read(location: URL) {\n return this.snapshots[toCacheKey(location)]\n }\n\n write(location: URL, snapshot: PageSnapshot) {\n this.snapshots[toCacheKey(location)] = snapshot\n }\n\n touch(location: URL) {\n const key = toCacheKey(location)\n const index = this.keys.indexOf(key)\n if (index > -1) this.keys.splice(index, 1)\n this.keys.unshift(key)\n this.trim()\n }\n\n trim() {\n for (const key of this.keys.splice(this.size)) {\n delete this.snapshots[key]\n }\n }\n}\n","import { nextEventLoopTick } from \"../../util\"\nimport { View, ViewDelegate } from \"../view\"\nimport { ErrorRenderer } from \"./error_renderer\"\nimport { PageRenderer } from \"./page_renderer\"\nimport { PageSnapshot } from \"./page_snapshot\"\nimport { SnapshotCache } from \"./snapshot_cache\"\n\nexport interface PageViewDelegate extends ViewDelegate<PageSnapshot> {\n viewWillCacheSnapshot(): void\n}\n\ntype PageViewRenderer = PageRenderer | ErrorRenderer\n\nexport class PageView extends View<Element, PageSnapshot, PageViewRenderer, PageViewDelegate> {\n readonly snapshotCache = new SnapshotCache(10)\n lastRenderedLocation = new URL(location.href)\n\n renderPage(snapshot: PageSnapshot, isPreview = false) {\n const renderer = new PageRenderer(this.snapshot, snapshot, isPreview)\n return this.render(renderer)\n }\n\n renderError(snapshot: PageSnapshot) {\n const renderer = new ErrorRenderer(this.snapshot, snapshot, false)\n this.render(renderer)\n }\n\n clearSnapshotCache() {\n this.snapshotCache.clear()\n }\n\n async cacheSnapshot() {\n if (this.shouldCacheSnapshot) {\n this.delegate.viewWillCacheSnapshot()\n const { snapshot, lastRenderedLocation: location } = this\n await nextEventLoopTick()\n this.snapshotCache.put(location, snapshot.clone())\n }\n }\n\n getCachedSnapshotForLocation(location: URL) {\n return this.snapshotCache.get(location)\n }\n\n get snapshot() {\n return PageSnapshot.fromElement(this.element)\n }\n\n get shouldCacheSnapshot() {\n return this.snapshot.isCacheable\n }\n}\n","import { Adapter } from \"./native/adapter\"\nimport { BrowserAdapter } from \"./native/browser_adapter\"\nimport { CacheObserver } from \"../observers/cache_observer\"\nimport { FormSubmitObserver, FormSubmitObserverDelegate } from \"../observers/form_submit_observer\"\nimport { FrameRedirector } from \"./frames/frame_redirector\"\nimport { History, HistoryDelegate } from \"./drive/history\"\nimport { LinkClickObserver, LinkClickObserverDelegate } from \"../observers/link_click_observer\"\nimport { expandURL, isPrefixedBy, isHTML, Locatable } from \"./url\"\nimport { Navigator, NavigatorDelegate } from \"./drive/navigator\"\nimport { PageObserver, PageObserverDelegate } from \"../observers/page_observer\"\nimport { ScrollObserver } from \"../observers/scroll_observer\"\nimport { StreamMessage } from \"./streams/stream_message\"\nimport { StreamObserver } from \"../observers/stream_observer\"\nimport { Action, Position, StreamSource, isAction } from \"./types\"\nimport { dispatch } from \"../util\"\nimport { PageView, PageViewDelegate } from \"./drive/page_view\"\nimport { Visit, VisitOptions } from \"./drive/visit\"\nimport { PageSnapshot } from \"./drive/page_snapshot\"\n\nexport type TimingData = {}\n\nexport class Session implements FormSubmitObserverDelegate, HistoryDelegate, LinkClickObserverDelegate, NavigatorDelegate, PageObserverDelegate, PageViewDelegate {\n readonly navigator = new Navigator(this)\n readonly history = new History(this)\n readonly view = new PageView(this, document.documentElement)\n adapter: Adapter = new BrowserAdapter(this)\n\n readonly pageObserver = new PageObserver(this)\n readonly cacheObserver = new CacheObserver()\n readonly linkClickObserver = new LinkClickObserver(this)\n readonly formSubmitObserver = new FormSubmitObserver(this)\n readonly scrollObserver = new ScrollObserver(this)\n readonly streamObserver = new StreamObserver(this)\n\n readonly frameRedirector = new FrameRedirector(document.documentElement)\n\n enabled = true\n progressBarDelay = 500\n started = false\n\n start() {\n if (!this.started) {\n this.pageObserver.start()\n this.cacheObserver.start()\n this.linkClickObserver.start()\n this.formSubmitObserver.start()\n this.scrollObserver.start()\n this.streamObserver.start()\n this.frameRedirector.start()\n this.history.start()\n this.started = true\n this.enabled = true\n }\n }\n\n disable() {\n this.enabled = false\n }\n\n stop() {\n if (this.started) {\n this.pageObserver.stop()\n this.cacheObserver.stop()\n this.linkClickObserver.stop()\n this.formSubmitObserver.stop()\n this.scrollObserver.stop()\n this.streamObserver.stop()\n this.frameRedirector.stop()\n this.history.stop()\n this.started = false\n }\n }\n\n registerAdapter(adapter: Adapter) {\n this.adapter = adapter\n }\n\n visit(location: Locatable, options: Partial<VisitOptions> = {}) {\n this.navigator.proposeVisit(expandURL(location), options)\n }\n\n connectStreamSource(source: StreamSource) {\n this.streamObserver.connectStreamSource(source)\n }\n\n disconnectStreamSource(source: StreamSource) {\n this.streamObserver.disconnectStreamSource(source)\n }\n\n renderStreamMessage(message: StreamMessage | string) {\n document.documentElement.appendChild(StreamMessage.wrap(message).fragment)\n }\n\n clearCache() {\n this.view.clearSnapshotCache()\n }\n\n setProgressBarDelay(delay: number) {\n this.progressBarDelay = delay\n }\n\n get location() {\n return this.history.location\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier\n }\n\n // History delegate\n\n historyPoppedToLocationWithRestorationIdentifier(location: URL) {\n if (this.enabled) {\n this.navigator.proposeVisit(location, { action: \"restore\", historyChanged: true })\n } else {\n this.adapter.pageInvalidated()\n }\n }\n\n // Scroll observer delegate\n\n scrollPositionChanged(position: Position) {\n this.history.updateRestorationData({ scrollPosition: position })\n }\n\n // Link click observer delegate\n\n willFollowLinkToLocation(link: Element, location: URL) {\n return elementIsNavigable(link)\n && this.locationIsVisitable(location)\n && this.applicationAllowsFollowingLinkToLocation(link, location)\n }\n\n followedLinkToLocation(link: Element, location: URL) {\n const action = this.getActionForLink(link)\n this.visit(location.href, { action })\n }\n\n // Navigator delegate\n\n allowsVisitingLocation(location: URL) {\n return this.applicationAllowsVisitingLocation(location)\n }\n\n visitProposedToLocation(location: URL, options: Partial<VisitOptions>) {\n extendURLWithDeprecatedProperties(location)\n this.adapter.visitProposedToLocation(location, options)\n }\n\n visitStarted(visit: Visit) {\n extendURLWithDeprecatedProperties(visit.location)\n this.notifyApplicationAfterVisitingLocation(visit.location)\n }\n\n visitCompleted(visit: Visit) {\n this.notifyApplicationAfterPageLoad(visit.getTimingMetrics())\n }\n\n // Form submit observer delegate\n\n willSubmitForm(form: HTMLFormElement, submitter?: HTMLElement): boolean {\n return elementIsNavigable(form) && elementIsNavigable(submitter)\n }\n\n formSubmitted(form: HTMLFormElement, submitter?: HTMLElement) {\n this.navigator.submitForm(form, submitter)\n }\n\n // Page observer delegate\n\n pageBecameInteractive() {\n this.view.lastRenderedLocation = this.location\n this.notifyApplicationAfterPageLoad()\n }\n\n pageLoaded() {\n this.history.assumeControlOfScrollRestoration()\n }\n\n pageWillUnload() {\n this.history.relinquishControlOfScrollRestoration()\n }\n\n // Stream observer delegate\n\n receivedMessageFromStream(message: StreamMessage) {\n this.renderStreamMessage(message)\n }\n\n // Page view delegate\n\n viewWillCacheSnapshot() {\n this.notifyApplicationBeforeCachingSnapshot()\n }\n\n viewWillRenderSnapshot({ element }: PageSnapshot, isPreview: boolean) {\n this.notifyApplicationBeforeRender(element)\n }\n\n viewRenderedSnapshot(snapshot: PageSnapshot, isPreview: boolean) {\n this.view.lastRenderedLocation = this.history.location\n this.notifyApplicationAfterRender()\n }\n\n viewInvalidated() {\n this.adapter.pageInvalidated()\n }\n\n // Application events\n\n applicationAllowsFollowingLinkToLocation(link: Element, location: URL) {\n const event = this.notifyApplicationAfterClickingLinkToLocation(link, location)\n return !event.defaultPrevented\n }\n\n applicationAllowsVisitingLocation(location: URL) {\n const event = this.notifyApplicationBeforeVisitingLocation(location)\n return !event.defaultPrevented\n }\n\n notifyApplicationAfterClickingLinkToLocation(link: Element, location: URL) {\n return dispatch(\"turbo:click\", { target: link, detail: { url: location.href }, cancelable: true })\n }\n\n notifyApplicationBeforeVisitingLocation(location: URL) {\n return dispatch(\"turbo:before-visit\", { detail: { url: location.href }, cancelable: true })\n }\n\n notifyApplicationAfterVisitingLocation(location: URL) {\n return dispatch(\"turbo:visit\", { detail: { url: location.href } })\n }\n\n notifyApplicationBeforeCachingSnapshot() {\n return dispatch(\"turbo:before-cache\")\n }\n\n notifyApplicationBeforeRender(newBody: HTMLBodyElement) {\n return dispatch(\"turbo:before-render\", { detail: { newBody }})\n }\n\n notifyApplicationAfterRender() {\n return dispatch(\"turbo:render\")\n }\n\n notifyApplicationAfterPageLoad(timing: TimingData = {}) {\n return dispatch(\"turbo:load\", { detail: { url: this.location.href, timing }})\n }\n\n // Private\n\n getActionForLink(link: Element): Action {\n const action = link.getAttribute(\"data-turbo-action\")\n return isAction(action) ? action : \"advance\"\n }\n\n locationIsVisitable(location: URL) {\n return isPrefixedBy(location, this.snapshot.rootLocation) && isHTML(location)\n }\n\n get snapshot() {\n return this.view.snapshot\n }\n}\n\nexport function elementIsNavigable(element?: Element) {\n const container = element?.closest(\"[data-turbo]\")\n if (container) {\n return container.getAttribute(\"data-turbo\") != \"false\"\n } else {\n return true\n }\n}\n\n// Older versions of the Turbo Native adapters referenced the\n// `Location#absoluteURL` property in their implementations of\n// the `Adapter#visitProposedToLocation()` and `#visitStarted()`\n// methods. The Location class has since been removed in favor\n// of the DOM URL API, and accordingly all Adapter methods now\n// receive URL objects.\n//\n// We alias #absoluteURL to #toString() here to avoid crashing\n// older adapters which do not expect URL objects. We should\n// consider removing this support at some point in the future.\n\nfunction extendURLWithDeprecatedProperties(url: URL) {\n Object.defineProperties(url, deprecatedLocationPropertyDescriptors)\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n absoluteURL: {\n get() {\n return this.toString()\n }\n }\n}\n","import { FrameElement, FrameElementDelegate, FrameLoadingStyle } from \"../../elements/frame_element\"\nimport { FetchMethod, FetchRequest, FetchRequestDelegate, FetchRequestHeaders } from \"../../http/fetch_request\"\nimport { FetchResponse } from \"../../http/fetch_response\"\nimport { AppearanceObserver, AppearanceObserverDelegate } from \"../../observers/appearance_observer\"\nimport { parseHTMLDocument } from \"../../util\"\nimport { FormSubmission, FormSubmissionDelegate } from \"../drive/form_submission\"\nimport { Snapshot } from \"../snapshot\"\nimport { ViewDelegate } from \"../view\"\nimport { expandURL, urlsAreEqual, Locatable } from \"../url\"\nimport { FormInterceptor, FormInterceptorDelegate } from \"./form_interceptor\"\nimport { FrameView } from \"./frame_view\"\nimport { LinkInterceptor, LinkInterceptorDelegate } from \"./link_interceptor\"\nimport { FrameRenderer } from \"./frame_renderer\"\nimport { elementIsNavigable } from \"../session\"\n\nexport class FrameController implements AppearanceObserverDelegate, FetchRequestDelegate, FormInterceptorDelegate, FormSubmissionDelegate, FrameElementDelegate, LinkInterceptorDelegate, ViewDelegate<Snapshot<FrameElement>> {\n readonly element: FrameElement\n readonly view: FrameView\n readonly appearanceObserver: AppearanceObserver\n readonly linkInterceptor: LinkInterceptor\n readonly formInterceptor: FormInterceptor\n currentURL?: string | null\n formSubmission?: FormSubmission\n private resolveVisitPromise = () => {}\n private connected = false\n private hasBeenLoaded = false\n private settingSourceURL = false\n\n constructor(element: FrameElement) {\n this.element = element\n this.view = new FrameView(this, this.element)\n this.appearanceObserver = new AppearanceObserver(this, this.element)\n this.linkInterceptor = new LinkInterceptor(this, this.element)\n this.formInterceptor = new FormInterceptor(this, this.element)\n }\n\n connect() {\n if (!this.connected) {\n this.connected = true\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start()\n }\n this.linkInterceptor.start()\n this.formInterceptor.start()\n this.sourceURLChanged()\n }\n }\n\n disconnect() {\n if (this.connected) {\n this.connected = false\n this.appearanceObserver.stop()\n this.linkInterceptor.stop()\n this.formInterceptor.stop()\n }\n }\n\n disabledChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager) {\n this.loadSourceURL()\n }\n }\n\n sourceURLChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n this.loadSourceURL()\n }\n }\n\n loadingStyleChanged() {\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start()\n } else {\n this.appearanceObserver.stop()\n this.loadSourceURL()\n }\n }\n\n async loadSourceURL() {\n if (!this.settingSourceURL && this.enabled && this.isActive && this.sourceURL != this.currentURL) {\n const previousURL = this.currentURL\n this.currentURL = this.sourceURL\n if (this.sourceURL) {\n try {\n this.element.loaded = this.visit(this.sourceURL)\n this.appearanceObserver.stop()\n await this.element.loaded\n this.hasBeenLoaded = true\n } catch (error) {\n this.currentURL = previousURL\n throw error\n }\n }\n }\n }\n\n async loadResponse(fetchResponse: FetchResponse) {\n if (fetchResponse.redirected) {\n this.sourceURL = fetchResponse.response.url\n }\n\n try {\n const html = await fetchResponse.responseHTML\n if (html) {\n const { body } = parseHTMLDocument(html)\n const snapshot = new Snapshot(await this.extractForeignFrameElement(body))\n const renderer = new FrameRenderer(this.view.snapshot, snapshot, false)\n await this.view.render(renderer)\n }\n } catch (error) {\n console.error(error)\n this.view.invalidate()\n }\n }\n\n // Appearance observer delegate\n\n elementAppearedInViewport(element: Element) {\n this.loadSourceURL()\n }\n\n // Link interceptor delegate\n\n shouldInterceptLinkClick(element: Element, url: string) {\n return this.shouldInterceptNavigation(element)\n }\n\n linkClickIntercepted(element: Element, url: string) {\n this.navigateFrame(element, url)\n }\n\n // Form interceptor delegate\n\n shouldInterceptFormSubmission(element: HTMLFormElement, submitter?: Element) {\n return this.shouldInterceptNavigation(element, submitter)\n }\n\n formSubmissionIntercepted(element: HTMLFormElement, submitter?: HTMLElement) {\n if (this.formSubmission) {\n this.formSubmission.stop()\n }\n\n this.formSubmission = new FormSubmission(this, element, submitter)\n if (this.formSubmission.fetchRequest.isIdempotent) {\n this.navigateFrame(element, this.formSubmission.fetchRequest.url.href)\n } else {\n const { fetchRequest } = this.formSubmission\n this.prepareHeadersForRequest(fetchRequest.headers, fetchRequest)\n this.formSubmission.start()\n }\n }\n\n // Fetch request delegate\n\n prepareHeadersForRequest(headers: FetchRequestHeaders, request: FetchRequest) {\n headers[\"Turbo-Frame\"] = this.id\n }\n\n requestStarted(request: FetchRequest) {\n this.element.setAttribute(\"busy\", \"\")\n }\n\n requestPreventedHandlingResponse(request: FetchRequest, response: FetchResponse) {\n this.resolveVisitPromise()\n }\n\n async requestSucceededWithResponse(request: FetchRequest, response: FetchResponse) {\n await this.loadResponse(response)\n this.resolveVisitPromise()\n }\n\n requestFailedWithResponse(request: FetchRequest, response: FetchResponse) {\n console.error(response)\n this.resolveVisitPromise()\n }\n\n requestErrored(request: FetchRequest, error: Error) {\n console.error(error)\n this.resolveVisitPromise()\n }\n\n requestFinished(request: FetchRequest) {\n this.element.removeAttribute(\"busy\")\n }\n\n // Form submission delegate\n\n formSubmissionStarted(formSubmission: FormSubmission) {\n const frame = this.findFrameElement(formSubmission.formElement)\n frame.setAttribute(\"busy\", \"\")\n }\n\n formSubmissionSucceededWithResponse(formSubmission: FormSubmission, response: FetchResponse) {\n const frame = this.findFrameElement(formSubmission.formElement)\n frame.delegate.loadResponse(response)\n }\n\n formSubmissionFailedWithResponse(formSubmission: FormSubmission, fetchResponse: FetchResponse) {\n this.element.delegate.loadResponse(fetchResponse)\n }\n\n formSubmissionErrored(formSubmission: FormSubmission, error: Error) {\n console.error(error)\n }\n\n formSubmissionFinished(formSubmission: FormSubmission) {\n const frame = this.findFrameElement(formSubmission.formElement)\n frame.removeAttribute(\"busy\")\n }\n\n // View delegate\n\n viewWillRenderSnapshot(snapshot: Snapshot, isPreview: boolean) {\n\n }\n\n viewRenderedSnapshot(snapshot: Snapshot, isPreview: boolean) {\n\n }\n\n viewInvalidated() {\n\n }\n\n // Private\n\n private async visit(url: Locatable) {\n const request = new FetchRequest(this, FetchMethod.get, expandURL(url))\n\n return new Promise<void>(resolve => {\n this.resolveVisitPromise = () => {\n this.resolveVisitPromise = () => {}\n resolve()\n }\n request.perform()\n })\n }\n\n private navigateFrame(element: Element, url: string) {\n const frame = this.findFrameElement(element)\n frame.src = url\n }\n\n private findFrameElement(element: Element) {\n const id = element.getAttribute(\"data-turbo-frame\") || this.element.getAttribute(\"target\")\n return getFrameElementById(id) ?? this.element\n }\n\n async extractForeignFrameElement(container: ParentNode): Promise<FrameElement> {\n let element\n const id = CSS.escape(this.id)\n\n try {\n if (element = activateElement(container.querySelector(`turbo-frame#${id}`), this.currentURL)) {\n return element\n }\n\n if (element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.currentURL)) {\n await element.loaded\n return await this.extractForeignFrameElement(element)\n }\n\n console.error(`Response has no matching <turbo-frame id=\"${id}\"> element`)\n } catch (error) {\n console.error(error)\n }\n\n return new FrameElement()\n }\n\n private shouldInterceptNavigation(element: Element, submitter?: Element) {\n const id = element.getAttribute(\"data-turbo-frame\") || this.element.getAttribute(\"target\")\n\n if (!this.enabled || id == \"_top\") {\n return false\n }\n\n if (id) {\n const frameElement = getFrameElementById(id)\n if (frameElement) {\n return !frameElement.disabled\n }\n }\n\n if (!elementIsNavigable(element)) {\n return false\n }\n\n if (submitter && !elementIsNavigable(submitter)) {\n return false\n }\n\n return true\n }\n\n // Computed properties\n\n get id() {\n return this.element.id\n }\n\n get enabled() {\n return !this.element.disabled\n }\n\n get sourceURL() {\n if (this.element.src) {\n return this.element.src\n }\n }\n\n set sourceURL(sourceURL: string | undefined) {\n this.settingSourceURL = true\n this.element.src = sourceURL ?? null\n this.currentURL = this.element.src\n this.settingSourceURL = false\n }\n\n get loadingStyle() {\n return this.element.loading\n }\n\n get isLoading() {\n return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined\n }\n\n get isActive() {\n return this.element.isActive && this.connected\n }\n}\n\nfunction getFrameElementById(id: string | null) {\n if (id != null) {\n const element = document.getElementById(id)\n if (element instanceof FrameElement) {\n return element\n }\n }\n}\n\nfunction activateElement(element: Element | null, currentURL?: string | null) {\n if (element) {\n const src = element.getAttribute(\"src\")\n if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`)\n }\n if (element.ownerDocument !== document) {\n element = document.importNode(element, true)\n }\n\n if (element instanceof FrameElement) {\n element.connectedCallback()\n return element\n }\n }\n}\n","import { StreamElement } from \"../../elements/stream_element\"\n\nexport const StreamActions: { [action: string]: (this: StreamElement) => void } = {\n after() {\n this.targetElements.forEach(e => e.parentElement?.insertBefore(this.templateContent, e.nextSibling))\n },\n\n append() {\n this.removeDuplicateTargetChildren()\n this.targetElements.forEach(e => e.append(this.templateContent))\n },\n\n before() {\n this.targetElements.forEach(e => e.parentElement?.insertBefore(this.templateContent, e))\n },\n\n prepend() {\n this.removeDuplicateTargetChildren()\n this.targetElements.forEach(e => e.prepend(this.templateContent))\n },\n\n remove() {\n this.targetElements.forEach(e => e.remove())\n },\n\n replace() {\n this.targetElements.forEach(e => e.replaceWith(this.templateContent))\n },\n\n update() {\n this.targetElements.forEach(e => { \n e.innerHTML = \"\"\n e.append(this.templateContent)\n })\n }\n}\n","import { StreamActions } from \"../core/streams/stream_actions\"\nimport { nextAnimationFrame } from \"../util\"\n\n// <turbo-stream action=replace target=id><template>...\n\nexport class StreamElement extends HTMLElement {\n async connectedCallback() {\n try {\n await this.render()\n } catch (error) {\n console.error(error)\n } finally {\n this.disconnect()\n }\n }\n\n private renderPromise?: Promise<void>\n\n async render() {\n return this.renderPromise ??= (async () => {\n if (this.dispatchEvent(this.beforeRenderEvent)) {\n await nextAnimationFrame()\n this.performAction()\n }\n })()\n }\n\n disconnect() {\n try { this.remove() } catch {}\n }\n \n removeDuplicateTargetChildren() {\n this.duplicateChildren.forEach(c => c.remove())\n }\n \n get duplicateChildren() {\n const existingChildren = this.targetElements.flatMap(e => [...e.children]).filter(c => !!c.id)\n const newChildrenIds = [...this.templateContent?.children].filter(c => !!c.id).map(c => c.id)\n \n return existingChildren.filter(c => newChildrenIds.includes(c.id))\n }\n \n get performAction() {\n if (this.action) {\n const actionFunction = StreamActions[this.action]\n if (actionFunction) {\n return actionFunction\n }\n this.raise(\"unknown action\")\n }\n this.raise(\"action attribute is missing\")\n }\n\n get targetElements() {\n if (this.target) { \n return this.targetElementsById\n } else if (this.targets) {\n return this.targetElementsByQuery\n } else {\n this.raise(\"target or targets attribute is missing\")\n }\n }\n\n get templateContent() {\n return this.templateElement.content.cloneNode(true)\n }\n\n get templateElement() {\n if (this.firstElementChild instanceof HTMLTemplateElement) {\n return this.firstElementChild\n }\n this.raise(\"first child element must be a <template> element\")\n }\n\n get action() {\n return this.getAttribute(\"action\")\n }\n\n get target() {\n return this.getAttribute(\"target\")\n }\n\n get targets() {\n return this.getAttribute(\"targets\")\n }\n\n private raise(message: string): never {\n throw new Error(`${this.description}: ${message}`)\n }\n\n private get description() {\n return (this.outerHTML.match(/<[^>]+>/) ?? [])[0] ?? \"<turbo-stream>\"\n }\n\n private get beforeRenderEvent() {\n return new CustomEvent(\"turbo:before-stream-render\", { bubbles: true, cancelable: true })\n }\n\n private get targetElementsById() {\n const element = this.ownerDocument?.getElementById(this.target!)\n\n if (element !== null) {\n return [ element ]\n } else {\n return []\n }\n }\n\n private get targetElementsByQuery() {\n const elements = this.ownerDocument?.querySelectorAll(this.targets!)\n\n if (elements.length !== 0) {\n return Array.prototype.slice.call(elements)\n } else {\n return []\n }\n }\n}\n","import { FrameController } from \"../core/frames/frame_controller\"\nimport { FrameElement } from \"./frame_element\"\nimport { StreamElement } from \"./stream_element\"\n\nFrameElement.delegateConstructor = FrameController\n\nexport * from \"./frame_element\"\nexport * from \"./stream_element\"\n\ncustomElements.define(\"turbo-frame\", FrameElement)\ncustomElements.define(\"turbo-stream\", StreamElement)\n","import { unindent } from \"./util\"\n\n(() => {\n let element: Element | null = document.currentScript\n if (!element) return\n if (element.hasAttribute(\"data-turbo-suppress-warning\")) return\n\n while (element = element.parentElement) {\n if (element == document.body) {\n return console.warn(unindent`\n You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n Load your application’s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n For more information, see: https://turbo.hotwire.dev/handbook/building#working-with-script-elements\n\n ——\n Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n `, element.outerHTML)\n }\n }\n})()\n","import { Adapter } from \"./native/adapter\"\nimport { Session } from \"./session\"\nimport { Locatable } from \"./url\"\nimport { StreamMessage } from \"./streams/stream_message\"\nimport { StreamSource } from \"./types\"\nimport { VisitOptions } from \"./drive/visit\"\n\nconst session = new Session\nconst { navigator } = session\nexport { navigator }\n\nexport function start() {\n session.start()\n}\n\nexport function registerAdapter(adapter: Adapter) {\n session.registerAdapter(adapter)\n}\n\nexport function visit(location: Locatable, options?: Partial<VisitOptions>) {\n session.visit(location, options)\n}\n\nexport function connectStreamSource(source: StreamSource) {\n session.connectStreamSource(source)\n}\n\nexport function disconnectStreamSource(source: StreamSource) {\n session.disconnectStreamSource(source)\n}\n\nexport function renderStreamMessage(message: StreamMessage | string) {\n session.renderStreamMessage(message)\n}\n\nexport function clearCache() {\n session.clearCache()\n}\n\nexport function setProgressBarDelay(delay: number) {\n session.setProgressBarDelay(delay)\n}\n","import \"./polyfills\"\nimport \"./elements\"\nimport \"./script_warning\"\n\nexport * from \"./core\"\nimport * as Turbo from \"./core\"\nwindow.Turbo = Turbo\nTurbo.start()\n"],"names":["Turbo.start"],"mappings":";;;;;;;;;;IAiBA,CAAC;QACC,IAGI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS;YAGlE,MAAM,CAAC,cAAsB,CAAC,yBAAyB,EAAE;YAC5D,OAAO;SACR;QACD,MAAM,kBAAkB,GAAG,WAAW,CAAC;QAQvC,MAAM,iBAAiB,GAAG;YACxB,aAAa,EAAE,SAAS,WAAW;gBACjC,OAAO,OAAO,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;aACpE;SACF,CAAC;QACF,MAAM,CAAC,WAAW;YACd,iBAAiB,CAAC,aAAa,CAAkC,CAAC;QACtE,WAAW,CAAC,SAAS,GAAG,kBAAkB,CAAC,SAAS,CAAC;QACrD,WAAW,CAAC,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;QAChD,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IACvD,CAAC,GAAG;;IC3CN,MAAM,gBAAgB,GAA0C,IAAI,OAAO,CAAA;IAE3E,SAAS,4BAA4B,CAAC,MAA0B;QAC9D,MAAM,OAAO,GAAG,MAAM,YAAY,OAAO,GAAG,MAAM,GAAG,MAAM,YAAY,IAAI,GAAG,MAAM,CAAC,aAAa,GAAG,IAAI,CAAA;QACzG,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAyB,GAAG,IAAI,CAAA;QAC3F,OAAO,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,KAAI,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAA;IACvD,CAAC;IAED,SAAS,aAAa,CAAC,KAAY;QACjC,MAAM,SAAS,GAAG,4BAA4B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAE5D,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE;YAC/B,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;SAChD;IACH,CAAC;IAED,CAAC;QACC,IAAI,aAAa,IAAI,MAAM;YAAE,OAAM;QAEnC,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,CAAA;QAE9C,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE;YAClD,GAAG;gBACD,IAAI,IAAI,CAAC,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM,YAAY,eAAe,EAAE;oBACnE,OAAO,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;iBACzC;aACF;SACF,CAAC,CAAA;IACJ,CAAC,GAAG;;IC5BJ,IAAY,iBAAoD;IAAhE,WAAY,iBAAiB;QAAG,oCAAe,CAAA;QAAE,kCAAa,CAAA;IAAC,CAAC,EAApD,iBAAiB,KAAjB,iBAAiB,QAAmC;UAanD,YAAa,SAAQ,WAAW;QAU3C;YACE,KAAK,EAAE,CAAA;YART,WAAM,GAAkC,OAAO,CAAC,OAAO,EAAE,CAAA;YASvD,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;SAC3D;QAPD,WAAW,kBAAkB;YAC3B,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;SACtC;QAOD,iBAAiB;YACf,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;SACxB;QAED,oBAAoB;YAClB,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAA;SAC3B;QAED,wBAAwB,CAAC,IAAY;YACnC,IAAI,IAAI,IAAI,SAAS,EAAE;gBACrB,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAA;aACpC;iBAAM,IAAI,IAAI,IAAI,KAAK,EAAE;gBACxB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAA;aACjC;iBAAM;gBACL,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAA;aAChC;SACF;QAED,IAAI,GAAG;YACL,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;SAChC;QAED,IAAI,GAAG,CAAC,KAAoB;YAC1B,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;aAChC;iBAAM;gBACL,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;aAC5B;SACF;QAED,IAAI,OAAO;YACT,OAAO,2BAA2B,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAA;SACvE;QAED,IAAI,OAAO,CAAC,KAAwB;YAClC,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;aACpC;iBAAM;gBACL,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;aAChC;SACF;QAED,IAAI,QAAQ;YACV,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;SACrC;QAED,IAAI,QAAQ,CAAC,KAAc;YACzB,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;aAClC;iBAAM;gBACL,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;aACjC;SACF;QAED,IAAI,UAAU;YACZ,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;SACvC;QAED,IAAI,UAAU,CAAC,KAAc;YAC3B,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;aACpC;iBAAM;gBACL,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;aACnC;SACF;QAED,IAAI,QAAQ;YACV,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAA;SAChC;QAED,IAAI,QAAQ;YACV,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAA;SAC1D;QAED,IAAI,SAAS;;YACX,mBAAO,IAAI,CAAC,aAAa,0CAAE,eAAe,0CAAE,YAAY,CAAC,oBAAoB,EAAC;SAC/E;KACF;IAED,SAAS,2BAA2B,CAAC,KAAa;QAChD,QAAQ,KAAK,CAAC,WAAW,EAAE;YACzB,KAAK,MAAM,EAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;YAC3C,SAAc,OAAO,iBAAiB,CAAC,KAAK,CAAA;SAC7C;IACH;;aChHgB,SAAS,CAAC,SAAoB;QAC5C,OAAO,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IACxD,CAAC;aAEe,SAAS,CAAC,GAAQ;QAChC,IAAI,WAAW,CAAA;QACf,IAAI,GAAG,CAAC,IAAI,EAAE;YACZ,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;SACzB;aAAM,IAAI,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACjD,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;SACtB;aAAM;YACL,OAAO,EAAE,CAAA;SACV;IACH,CAAC;aAEe,YAAY,CAAC,GAAQ;QACnC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACrE,CAAC;aAEe,MAAM,CAAC,GAAQ;QAC7B,OAAO,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;IACjE,CAAC;aAEe,YAAY,CAAC,OAAY,EAAE,GAAQ;QACjD,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;QAC7B,OAAO,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IACnF,CAAC;aAEe,UAAU,CAAC,GAAQ;QACjC,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAA;QACpC,IAAI,YAAY,GAAG,CAAC,EAAE;YACpB,OAAO,GAAG,CAAC,IAAI,CAAA;SAChB;aAAM;YACL,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAA;SACxC;IACH,CAAC;aAEe,YAAY,CAAC,IAAY,EAAE,KAAa;QACtD,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAA;IACtD,CAAC;IAED,SAAS,iBAAiB,CAAC,GAAQ;QACjC,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACzC,CAAC;IAED,SAAS,oBAAoB,CAAC,GAAQ;QACpC,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC;IAED,SAAS,SAAS,CAAC,GAAQ;QACzB,OAAO,gBAAgB,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAA;IACpD,CAAC;IAED,SAAS,gBAAgB,CAAC,KAAa;QACrC,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,CAAA;IAClD;;UCvDa,aAAa;QAGxB,YAAY,QAAkB;YAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;SACzB;QAED,IAAI,SAAS;YACX,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;SACxB;QAED,IAAI,MAAM;YACR,OAAO,CAAC,IAAI,CAAC,SAAS,CAAA;SACvB;QAED,IAAI,WAAW;YACb,OAAO,IAAI,CAAC,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,IAAI,GAAG,CAAA;SACxD;QAED,IAAI,WAAW;YACb,OAAO,IAAI,CAAC,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,IAAI,GAAG,CAAA;SACxD;QAED,IAAI,UAAU;YACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAA;SAChC;QAED,IAAI,QAAQ;YACV,OAAO,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;SACpC;QAED,IAAI,MAAM;YACR,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAA;SAC5G;QAED,IAAI,UAAU;YACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAA;SAC5B;QAED,IAAI,WAAW;YACb,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;SACnC;QAED,IAAI,YAAY;YACd,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;SAC5B;QAED,IAAI,YAAY;YACd,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;aAC5B;iBAAM;gBACL,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;aAClC;SACF;QAED,MAAM,CAAC,IAAY;YACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;SACvC;;;aCzDa,QAAQ,CAAC,SAAiB,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAA+B,EAAE;QACvG,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QAC/E,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,KAAK,CAAC,CAAA;QAC9D,OAAO,KAAK,CAAA;IACd,CAAC;aAEe,kBAAkB;QAChC,OAAO,IAAI,OAAO,CAAO,OAAO,IAAI,qBAAqB,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,CAAA;IAC7E,CAAC;aAEe,iBAAiB;QAC/B,OAAO,IAAI,OAAO,CAAO,OAAO,IAAI,UAAU,CAAC,MAAM,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IACrE,CAAC;aAEe,aAAa;QAC3B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;IAC1B,CAAC;aAEe,iBAAiB,CAAC,IAAI,GAAG,EAAE;QACzC,OAAO,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;IAC3D,CAAC;aAEe,QAAQ,CAAC,OAA6B,EAAE,GAAG,MAAa;QACtE,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACzE,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACpC,MAAM,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;QAC1C,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzD,CAAC;IAED,SAAS,WAAW,CAAC,OAA6B,EAAE,MAAa;QAC/D,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YACrD,OAAO,MAAM,GAAG,MAAM,GAAG,KAAK,CAAA;SAC/B,EAAE,EAAE,CAAC,CAAA;IACR,CAAC;aAEe,IAAI;QAClB,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE;gBAC3C,OAAO,GAAG,CAAA;aACX;iBAAM,IAAI,CAAC,IAAI,EAAE,EAAE;gBAClB,OAAO,GAAG,CAAA;aACX;iBAAM,IAAI,CAAC,IAAI,EAAE,EAAE;gBAClB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;aACxD;iBAAM;gBACL,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;aACnD;SACF,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACb;;ICrCA,IAAY,WAMX;IAND,WAAY,WAAW;QACrB,2CAAG,CAAA;QACH,6CAAI,CAAA;QACJ,2CAAG,CAAA;QACH,+CAAK,CAAA;QACL,iDAAM,CAAA;IACR,CAAC,EANW,WAAW,KAAX,WAAW,QAMtB;aAEe,qBAAqB,CAAC,MAAc;QAClD,QAAQ,MAAM,CAAC,WAAW,EAAE;YAC1B,KAAK,KAAK,EAAK,OAAO,WAAW,CAAC,GAAG,CAAA;YACrC,KAAK,MAAM,EAAI,OAAO,WAAW,CAAC,IAAI,CAAA;YACtC,KAAK,KAAK,EAAK,OAAO,WAAW,CAAC,GAAG,CAAA;YACrC,KAAK,OAAO,EAAG,OAAO,WAAW,CAAC,KAAK,CAAA;YACvC,KAAK,QAAQ,EAAE,OAAO,WAAW,CAAC,MAAM,CAAA;SACzC;IACH,CAAC;UAYY,YAAY;QAQvB,YAAY,QAA8B,EAAE,MAAmB,EAAE,QAAa,EAAE,OAAyB,IAAI,eAAe;YAFnH,oBAAe,GAAG,IAAI,eAAe,CAAA;YAG5C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;YACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;YACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAA;YAClC,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,IAAI,CAAC,GAAG,GAAG,oBAAoB,CAAC,QAAQ,EAAE,CAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAE,CAAC,CAAA;aACjE;iBAAM;gBACL,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;gBAChB,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAA;aACpB;SACF;QAED,IAAI,QAAQ;YACV,OAAO,IAAI,CAAC,GAAG,CAAA;SAChB;QAED,IAAI,MAAM;YACR,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAA;SAC7B;QAED,IAAI,OAAO;YACT,OAAO,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,CAAA;SACxD;QAED,MAAM;YACJ,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;SAC7B;QAED,MAAM,OAAO;;YACX,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAA;YAC7B,MAAA,MAAA,IAAI,CAAC,QAAQ,EAAC,wBAAwB,mDAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAC;YAC5D,QAAQ,CAAC,4BAA4B,EAAE,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAA;YACpE,IAAI;gBACF,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;gBAClC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;gBACzD,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;aACpC;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;gBACzC,MAAM,KAAK,CAAA;aACZ;oBAAS;gBACR,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;aACpC;SACF;QAED,MAAM,OAAO,CAAC,QAAkB;YAC9B,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAA;YACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,6BAA6B,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAA;YACtG,IAAI,KAAK,CAAC,gBAAgB,EAAE;gBAC1B,IAAI,CAAC,QAAQ,CAAC,gCAAgC,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;aACpE;iBAAM,IAAI,aAAa,CAAC,SAAS,EAAE;gBAClC,IAAI,CAAC,QAAQ,CAAC,4BAA4B,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;aAChE;iBAAM;gBACL,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;aAC7D;YACD,OAAO,aAAa,CAAA;SACrB;QAED,IAAI,YAAY;YACd,OAAO;gBACL,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;gBAC9C,WAAW,EAAE,aAAa;gBAC1B,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,WAAW;aACzB,CAAA;SACF;QAED,IAAI,cAAc;YAChB,OAAO;gBACL,QAAQ,EAAE,kCAAkC;aAC7C,CAAA;SACF;QAED,IAAI,YAAY;YACd,OAAO,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,GAAG,CAAA;SACtC;QAED,IAAI,WAAW;YACb,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAA;SACnC;KACF;IAED,SAAS,oBAAoB,CAAC,GAAQ,EAAE,OAAuC;QAC7E,MAAM,mBAAmB,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAE3D,KAAK,MAAM,CAAE,IAAI,EAAE,KAAK,CAAE,IAAI,OAAO,EAAE;YACrC,IAAI,KAAK,YAAY,IAAI;gBAAE,SAAQ;YAEnC,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACjC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;gBAChC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;aAClC;iBAAM;gBACL,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;aACrC;SACF;QAED,OAAO,GAAG,CAAA;IACZ;;UC/Ia,kBAAkB;QAM7B,YAAY,QAAoC,EAAE,OAAgB;YAFlE,YAAO,GAAG,KAAK,CAAA;YAsBf,cAAS,GAAiC,OAAO;gBAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBACtC,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,cAAc,EAAE;oBAC7B,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;iBACtD;aACF,CAAA;YAxBC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;YACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;YACtB,IAAI,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;SACrE;QAED,KAAK;YACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;gBACnB,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;aAChD;SACF;QAED,IAAI;YACF,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;gBACpB,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;aAClD;SACF;;;UC1BU,aAAa;QAYxB,YAAY,IAAY;YAVf,oBAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;YAW3D,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,IAAI,CAAA;SACtC;QAVD,OAAO,IAAI,CAAC,OAA+B;YACzC,IAAI,OAAO,OAAO,IAAI,QAAQ,EAAE;gBAC9B,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAA;aACzB;iBAAM;gBACL,OAAO,OAAO,CAAA;aACf;SACF;QAMD,IAAI,QAAQ;YACV,MAAM,QAAQ,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAA;YAClD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,eAAe,EAAE;gBAC1C,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;aACzD;YACD,OAAO,QAAQ,CAAA;SAChB;QAED,IAAI,eAAe;YACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,KAAK;gBACxD,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,cAAc,EAAE;oBACjD,OAAO,CAAE,GAAG,cAAc,EAAE,KAAsB,CAAE,CAAA;iBACrD;qBAAM;oBACL,OAAO,cAAc,CAAA;iBACtB;aACF,EAAE,EAAqB,CAAC,CAAA;SAC1B;QAED,IAAI,gBAAgB;YAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;SACzD;;IAnCe,yBAAW,GAAG,4BAA4B;;ICe5D,IAAY,mBAOX;IAPD,WAAY,mBAAmB;QAC7B,2EAAW,CAAA;QACX,yEAAU,CAAA;QACV,mEAAO,CAAA;QACP,uEAAS,CAAA;QACT,qEAAQ,CAAA;QACR,mEAAO,CAAA;IACT,CAAC,EAPW,mBAAmB,KAAnB,mBAAmB,QAO9B;IAED,IAAK,WAIJ;IAJD,WAAK,WAAW;QACd,+DAAgD,CAAA;QAChD,gDAAkC,CAAA;QAClC,mCAAyB,CAAA;IAC3B,CAAC,EAJI,WAAW,KAAX,WAAW,QAIf;IAED,SAAS,qBAAqB,CAAC,QAAgB;QAC7C,QAAO,QAAQ,CAAC,WAAW,EAAE;YAC3B,KAAK,WAAW,CAAC,SAAS,EAAE,OAAO,WAAW,CAAC,SAAS,CAAA;YACxD,KAAK,WAAW,CAAC,KAAK,EAAM,OAAO,WAAW,CAAC,KAAK,CAAA;YACpD,SAA4B,OAAO,WAAW,CAAC,UAAU,CAAA;SAC1D;IACH,CAAC;UAEY,cAAc;QAUzB,YAAY,QAAgC,EAAE,WAA4B,EAAE,SAAuB,EAAE,YAAY,GAAG,KAAK;YAHzH,UAAK,GAAG,mBAAmB,CAAC,WAAW,CAAA;YAIrC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;YACxB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;YAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;YAC1B,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;YACrD,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;YACjF,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;SACjC;QAED,IAAI,MAAM;;YACR,MAAM,MAAM,GAAG,OAAA,IAAI,CAAC,SAAS,0CAAE,YAAY,CAAC,YAAY,MAAK,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;YAC1G,OAAO,qBAAqB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,WAAW,CAAC,GAAG,CAAA;SACtE;QAED,IAAI,MAAM;;YACR,OAAO,OAAA,IAAI,CAAC,SAAS,0CAAE,YAAY,CAAC,YAAY,MAAK,IAAI,CAAC,WAAW,CAAC,MAAM,CAAA;SAC7E;QAED,IAAI,QAAQ;YACV,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;SAC9B;QAED,IAAI,IAAI;YACN,IAAI,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE;gBAC5E,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;aAChD;iBAAM;gBACL,OAAO,IAAI,CAAC,QAAQ,CAAA;aACrB;SACF;QAED,IAAI,OAAO;;YACT,OAAO,qBAAqB,CAAC,OAAA,IAAI,CAAC,SAAS,0CAAE,YAAY,CAAC,aAAa,MAAK,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;SACtG;QAED,IAAI,YAAY;YACd,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAA;SACtC;QAED,IAAI,cAAc;YAChB,OAAO,CAAE,GAAG,IAAI,CAAC,QAAQ,CAAE,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAE,IAAI,EAAE,KAAK,CAAE;gBAC1D,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI,QAAQ,GAAG,CAAC,CAAE,IAAI,EAAE,KAAK,CAAE,CAAC,GAAG,EAAE,CAAC,CAAA;aACzE,EAAE,EAAwB,CAAC,CAAA;SAC7B;QAID,MAAM,KAAK;YACT,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAAA;YACvD,IAAI,IAAI,CAAC,KAAK,IAAI,WAAW,EAAE;gBAC7B,IAAI,CAAC,KAAK,GAAG,UAAU,CAAA;gBACvB,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAA;aACnC;SACF;QAED,IAAI;YACF,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAA;YACjD,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE;gBACnD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAA;gBACrB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAA;gBAC1B,OAAO,IAAI,CAAA;aACZ;SACF;QAID,wBAAwB,CAAC,OAA4B,EAAE,OAAqB;YAC1E,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;gBACzB,MAAM,KAAK,GAAG,cAAc,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,IAAI,cAAc,CAAC,YAAY,CAAC,CAAA;gBAC1F,IAAI,KAAK,EAAE;oBACT,OAAO,CAAC,cAAc,CAAC,GAAG,KAAK,CAAA;iBAChC;gBACD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAE,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aAChF;SACF;QAED,cAAc,CAAC,OAAqB;YAClC,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAA;YACxC,QAAQ,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;YAC9F,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;SAC1C;QAED,gCAAgC,CAAC,OAAqB,EAAE,QAAuB;YAC7E,IAAI,CAAC,MAAM,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAA;SACvE;QAED,4BAA4B,CAAC,OAAqB,EAAE,QAAuB;YACzE,IAAI,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW,EAAE;gBAChD,IAAI,CAAC,QAAQ,CAAC,gCAAgC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;aAC/D;iBAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,gCAAgC,CAAC,QAAQ,CAAC,EAAE;gBAC1F,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;gBAC3E,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;aACjD;iBAAM;gBACL,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC,SAAS,CAAA;gBAC1C,IAAI,CAAC,MAAM,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAA;gBACxD,IAAI,CAAC,QAAQ,CAAC,mCAAmC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;aAClE;SACF;QAED,yBAAyB,CAAC,OAAqB,EAAE,QAAuB;YACtE,IAAI,CAAC,MAAM,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAA;YACzD,IAAI,CAAC,QAAQ,CAAC,gCAAgC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;SAC/D;QAED,cAAc,CAAC,OAAqB,EAAE,KAAY;YAChD,IAAI,CAAC,MAAM,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;YACvC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;SACjD;QAED,eAAe,CAAC,OAAqB;YACnC,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAA;YACxC,QAAQ,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,kBAAI,cAAc,EAAE,IAAI,IAAK,IAAI,CAAC,MAAM,CAAE,EAAC,CAAC,CAAA;YAC3G,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAA;SAC3C;QAED,mBAAmB,CAAC,OAAqB;YACvC,OAAO,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAA;SAClD;KACF;IAED,SAAS,aAAa,CAAC,WAA4B,EAAE,SAAuB;QAC1E,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAA;QAC1C,MAAM,IAAI,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,YAAY,CAAC,MAAM,CAAC,CAAA;QAC5C,MAAM,KAAK,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,YAAY,CAAC,OAAO,CAAC,CAAA;QAE9C,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE;YACxD,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;SAC7B;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,SAAS,cAAc,CAAC,UAAyB;QAC/C,IAAI,UAAU,IAAI,IAAI,EAAE;YACtB,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;YAClE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAA;YACtE,IAAI,MAAM,EAAE;gBACV,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAClD,OAAO,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAA;aACrD;SACF;IACH,CAAC;IAED,SAAS,cAAc,CAAC,IAAY;QAClC,MAAM,OAAO,GAA2B,QAAQ,CAAC,aAAa,CAAC,cAAc,IAAI,IAAI,CAAC,CAAA;QACtF,OAAO,OAAO,IAAI,OAAO,CAAC,OAAO,CAAA;IACnC,CAAC;IAED,SAAS,gCAAgC,CAAC,QAAuB;QAC/D,OAAO,QAAQ,CAAC,UAAU,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAA;IAC3D;;UCxMa,QAAQ;QAGnB,YAAY,OAAU;YACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;SACvB;QAED,IAAI,QAAQ;YACV,OAAO,CAAE,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAE,CAAA;SACpC;QAED,SAAS,CAAC,MAAc;YACtB,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,IAAI,CAAA;SAChD;QAED,mBAAmB,CAAC,MAAc;YAChC,IAAI;gBACF,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,MAAM,eAAe,MAAM,IAAI,CAAC,CAAA;aAC3E;YAAC,WAAM;gBACN,OAAO,IAAI,CAAA;aACZ;SACF;QAED,IAAI,WAAW;YACb,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAA;SAChC;QAED,IAAI,yBAAyB;YAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAA;SACjD;QAED,IAAI,iBAAiB;YACnB,OAAO,CAAE,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,CAAE,CAAA;SAC1E;QAED,uBAAuB,CAAC,EAAU;YAChC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAA;SAClE;QAED,iCAAiC,CAAC,QAAkB;YAClD,MAAM,mBAAmB,GAAwB,EAAE,CAAA;YAEnD,KAAK,MAAM,uBAAuB,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBAC5D,MAAM,EAAE,EAAE,EAAE,GAAG,uBAAuB,CAAA;gBACtC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAA;gBAChE,IAAI,mBAAmB,EAAE;oBACvB,mBAAmB,CAAC,EAAE,CAAC,GAAG,CAAE,uBAAuB,EAAE,mBAAmB,CAAE,CAAA;iBAC3E;aACF;YAED,OAAO,mBAAmB,CAAA;SAC3B;;;UC9CU,eAAe;QAI1B,YAAY,QAAiC,EAAE,OAAgB;YAa/D,kBAAa,IAAmB,CAAC,KAAkB;gBACjD,IAAI,KAAK,CAAC,MAAM,YAAY,eAAe,EAAE;oBAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAA;oBACzB,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,SAAS,CAAA;oBAC9C,IAAI,IAAI,CAAC,QAAQ,CAAC,6BAA6B,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE;wBAChE,KAAK,CAAC,cAAc,EAAE,CAAA;wBACtB,KAAK,CAAC,wBAAwB,EAAE,CAAA;wBAChC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;qBACzD;iBACF;aACF,CAAC,CAAA;YAtBA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;YACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;SACvB;QAED,KAAK;YACH,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;SAC5D;QAED,IAAI;YACF,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;SAC/D;;;UCVmB,IAAI;QAMxB,YAAY,QAAW,EAAE,OAAU;YACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;YACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;SACvB;QAID,cAAc,CAAC,MAAc;YAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;YACzD,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;aAC9B;iBAAM;gBACL,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;aACtC;SACF;QAED,eAAe,CAAC,OAAgB;YAC9B,OAAO,CAAC,cAAc,EAAE,CAAA;SACzB;QAED,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAY;YACjC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;SAC/B;QAED,IAAI,UAAU;YACZ,OAAO,MAAM,CAAA;SACd;QAID,MAAM,MAAM,CAAC,QAAW;YACtB,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;aACpD;YAED,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAA;YACnE,IAAI,YAAY,EAAE;gBAChB,IAAI;oBACF,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;oBACxB,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAA;oBACtC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;oBACzD,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;oBACnC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;oBACvD,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAA;iBACvC;wBAAS;oBACR,OAAO,IAAI,CAAC,QAAQ,CAAA;iBACrB;aACF;iBAAM;gBACL,IAAI,CAAC,UAAU,EAAE,CAAA;aAClB;SACF;QAED,UAAU;YACR,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAA;SAChC;QAED,uBAAuB,CAAC,QAAW;YACjC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;YACtC,QAAQ,CAAC,eAAe,EAAE,CAAA;SAC3B;QAED,aAAa,CAAC,SAAkB;YAC9B,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAA;aACpD;iBAAM;gBACL,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAA;aACnD;SACF;QAED,MAAM,cAAc,CAAC,QAAW;YAC9B,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAA;SACxB;QAED,uBAAuB,CAAC,QAAW;YACjC,QAAQ,CAAC,eAAe,EAAE,CAAA;SAC3B;;;UCvFU,SAAU,SAAQ,IAAkB;QAC/C,UAAU;YACR,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE,CAAA;SAC5B;QAED,IAAI,QAAQ;YACV,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;SAClC;;;UCJU,eAAe;QAK1B,YAAY,QAAiC,EAAE,OAAgB;YAiB/D,iBAAY,GAAG,CAAC,KAAY;gBAC1B,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;oBAC5C,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;iBACxB;qBAAM;oBACL,OAAO,IAAI,CAAC,UAAU,CAAA;iBACvB;aACF,CAAA;YAED,gBAAW,IAAmB,CAAC,KAAkB;gBAC/C,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,YAAY,OAAO,EAAE;oBAClG,IAAI,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;wBAC1E,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAA;wBAChC,KAAK,CAAC,cAAc,EAAE,CAAA;wBAEtB,IAAI,CAAC,0CAA0C,CAAC,KAAK,CAAC,MAAM,CAAC;4BAC3D,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;qBACrE;iBACF;gBACD,OAAO,IAAI,CAAC,UAAU,CAAA;aACvB,CAAC,CAAA;YAEF,cAAS,GAAG;gBACV,OAAO,IAAI,CAAC,UAAU,CAAA;aACvB,CAAA;YAvCC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;YACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;SACvB;QAED,KAAK;YACH,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;YACzD,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;YAC1D,QAAQ,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;SAChE;QAED,IAAI;YACF,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;YAC5D,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;YAC7D,QAAQ,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;SACnE;QA2BD,0CAA0C,CAAC,IAAa;;YACtD,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;YAE7F,IAAI,UAAU,EAAE;gBACd,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;gBAC3C,IAAI,CAAC,MAAM,GAAG,UAAU,CAAA;gBACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,WAAW,CAAA;gBAEtD,MAAA,IAAI,CAAC,UAAU,0CAAE,YAAY,CAAC,IAAI,EAAE,IAAI,EAAC;gBACzC,OAAO,QAAQ,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;aAC5C;iBAAM;gBACL,OAAO,KAAK,CAAA;aACb;SACF;QAED,qBAAqB,CAAC,MAA0B;YAC9C,MAAM,OAAO,GACT,MAAM,YAAY,OAAO;kBACzB,MAAM;kBACJ,MAAM,YAAY,IAAI;sBACtB,MAAM,CAAC,aAAa;sBAClB,IAAI,CAAA;YACZ,OAAO,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,OAAO,CAAA;SACvE;;;UC3EU,KAAK;QAUhB,YAAY,mBAAwC;YAClD,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAA;SAC/C;QATD,OAAO,2BAA2B,CAAC,mBAAwC,EAAE,QAAoB;YAC/F,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,mBAAmB,CAAC,CAAA;YAC3C,KAAK,CAAC,KAAK,EAAE,CAAA;YACb,QAAQ,EAAE,CAAA;YACV,KAAK,CAAC,KAAK,EAAE,CAAA;SACd;QAMD,KAAK;YACH,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,mBAAmB,EAAE;gBACzC,MAAM,GAAG,mBAAmB,CAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAA;gBAC7D,IAAI,CAAC,yCAAyC,CAAC,mBAAmB,CAAC,CAAA;aACpE;SACF;QAED,KAAK;YACH,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,mBAAmB,EAAE;gBACzC,MAAM,CAAE,uBAAuB,CAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAA;gBAChE,IAAI,CAAC,uCAAuC,CAAC,uBAAuB,CAAC,CAAA;gBACrE,IAAI,CAAC,sCAAsC,CAAC,uBAAuB,CAAC,CAAA;aACrE;SACF;QAED,yCAAyC,CAAC,gBAAyB;YACjE,MAAM,WAAW,GAAG,oCAAoC,CAAC,gBAAgB,CAAC,CAAA;YAC1E,gBAAgB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;SAC1C;QAED,uCAAuC,CAAC,gBAAyB;YAC/D,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YAC9C,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;SACpC;QAED,sCAAsC,CAAC,gBAAyB;YAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAA;YAChE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,WAAW,CAAC,gBAAgB,EAAC;SAC3C;QAED,kBAAkB,CAAC,EAAU;YAC3B,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;SAChE;QAED,IAAI,YAAY;YACd,OAAO,CAAE,GAAG,QAAQ,CAAC,gBAAgB,CAAC,iDAAiD,CAAC,CAAS,CAAA;SAClG;KACF;IAED,SAAS,oCAAoC,CAAC,gBAAyB;QACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC9C,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAA;QAC3D,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAA;QACpD,OAAO,OAAO,CAAA;IAChB;;UCpDsB,QAAQ;QAO5B,YAAY,eAAkB,EAAE,WAAc,EAAE,SAAkB;YAChE,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;YACtC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;YAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;YAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,kBAAkB,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;SAC/F;QAED,IAAI,YAAY;YACd,OAAO,IAAI,CAAA;SACZ;QAED,eAAe;YACb,OAAM;SACP;QAID,eAAe;YACb,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBAC3B,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAA;gBACjC,OAAO,IAAI,CAAC,kBAAkB,CAAA;aAC/B;SACF;QAED,mBAAmB,CAAC,OAAgB;YAClC,IAAI,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,OAAO,EAAE;gBACtD,OAAO,OAAO,CAAA;aACf;iBAAM;gBACL,MAAM,oBAAoB,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;gBAC7D,oBAAoB,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;gBACtD,oBAAoB,CAAC,KAAK,GAAG,KAAK,CAAA;gBAClC,qBAAqB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAA;gBACpD,OAAO,oBAAoB,CAAA;aAC5B;SACF;QAED,2BAA2B,CAAC,QAAoB;YAC9C,KAAK,CAAC,2BAA2B,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAA;SACtE;QAED,8BAA8B;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,CAAA;YAChE,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE;gBAC/B,OAAO,CAAC,KAAK,EAAE,CAAA;aAChB;SACF;QAED,IAAI,iBAAiB;YACnB,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAA;SAC9E;QAED,IAAI,cAAc;YAChB,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAA;SACpC;QAED,IAAI,UAAU;YACZ,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAA;SAChC;QAED,IAAI,mBAAmB;YACrB,OAAO,IAAI,CAAC,eAAe,CAAC,iCAAiC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;SAChF;KACF;IAED,SAAS,qBAAqB,CAAC,kBAA2B,EAAE,aAAsB;QAChF,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAE,GAAG,aAAa,CAAC,UAAU,CAAE,EAAE;YAC7D,kBAAkB,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;SAC7C;IACH,CAAC;IAED,SAAS,kBAAkB,CAAC,OAAY;QACtC,OAAO,OAAO,IAAI,OAAO,OAAO,CAAC,KAAK,IAAI,UAAU,CAAA;IACtD;;UCnFa,aAAc,SAAQ,QAAsB;QACvD,IAAI,YAAY;YACd,OAAO,IAAI,CAAA;SACZ;QAED,MAAM,MAAM;YACV,MAAM,kBAAkB,EAAE,CAAA;YAC1B,IAAI,CAAC,2BAA2B,CAAC;gBAC/B,IAAI,CAAC,gBAAgB,EAAE,CAAA;aACxB,CAAC,CAAA;YACF,IAAI,CAAC,mBAAmB,EAAE,CAAA;YAC1B,MAAM,kBAAkB,EAAE,CAAA;YAC1B,IAAI,CAAC,8BAA8B,EAAE,CAAA;SACtC;QAED,gBAAgB;;YACd,MAAM,gBAAgB,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;YAC/C,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YACxD,gBAAgB,CAAC,cAAc,EAAE,CAAA;YAEjC,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAA;YACpC,MAAM,WAAW,SAAG,YAAY,CAAC,aAAa,0CAAE,WAAW,EAAE,CAAA;YAC7D,IAAI,WAAW,EAAE;gBACf,WAAW,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAA;gBAC5C,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,CAAA;aAC/D;SACF;QAED,mBAAmB;YACjB,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;gBAChE,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAA;gBACrD,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,uBAAuB,CAAC,EAAE,KAAK,CAAC,CAAA;gBAEzG,IAAI,OAAO,EAAE;oBACX,OAAO,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;oBACjC,OAAO,IAAI,CAAA;iBACZ;aACF;YACD,OAAO,KAAK,CAAA;SACb;KACF;IAED,SAAS,yBAAyB,CAAC,KAAoB,EAAE,YAAmC;QAC1F,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,SAAS,EAAE;YACjF,OAAO,KAAK,CAAA;SACb;aAAM;YACL,OAAO,YAAY,CAAA;SACpB;IACH;;UClDa,WAAW;QA6BtB;YALA,WAAM,GAAG,KAAK,CAAA;YAEd,UAAK,GAAG,CAAC,CAAA;YACT,YAAO,GAAG,KAAK,CAAA;YAqEf,YAAO,GAAG;gBACR,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAA;aAChD,CAAA;YApEC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAA;YACvD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAA;YACnD,IAAI,CAAC,wBAAwB,EAAE,CAAA;YAC/B,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;SACjB;QA/BD,WAAW,UAAU;YACnB,OAAO,QAAQ,CAAA;;;;;;;;;;kBAUD,WAAW,CAAC,iBAAiB;oBAC3B,WAAW,CAAC,iBAAiB,GAAG,CAAC,MAAM,WAAW,CAAC,iBAAiB,GAAG,CAAC;;;KAGvF,CAAA;SACF;QAiBD,IAAI;YACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;gBACnB,IAAI,CAAC,sBAAsB,EAAE,CAAA;gBAC7B,IAAI,CAAC,cAAc,EAAE,CAAA;aACtB;SACF;QAED,IAAI;YACF,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;gBAClB,IAAI,CAAC,mBAAmB,CAAC;oBACvB,IAAI,CAAC,wBAAwB,EAAE,CAAA;oBAC/B,IAAI,CAAC,aAAa,EAAE,CAAA;oBACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;oBACpB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;iBACpB,CAAC,CAAA;aACH;SACF;QAED,QAAQ,CAAC,KAAa;YACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;YAClB,IAAI,CAAC,OAAO,EAAE,CAAA;SACf;QAID,wBAAwB;YACtB,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;SAC7E;QAED,sBAAsB;YACpB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAA;YACtC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAA;YACxC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;YAC1E,IAAI,CAAC,OAAO,EAAE,CAAA;SACf;QAED,mBAAmB,CAAC,QAAoB;YACtC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAA;YACxC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,iBAAiB,GAAG,GAAG,CAAC,CAAA;SAC1D;QAED,wBAAwB;YACtB,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;gBACnC,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;aAC3D;SACF;QAED,cAAc;YACZ,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;gBACzB,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAA;aACvF;SACF;QAED,aAAa;YACX,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;YAC1C,OAAO,IAAI,CAAC,eAAe,CAAA;SAC5B;QAMD,OAAO;YACL,qBAAqB,CAAC;gBACpB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAA;aAChE,CAAC,CAAA;SACH;QAED,uBAAuB;YACrB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;YAC/C,OAAO,CAAC,IAAI,GAAG,UAAU,CAAA;YACzB,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,UAAU,CAAA;YAC5C,OAAO,OAAO,CAAA;SACf;QAED,qBAAqB;YACnB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;YAC7C,OAAO,CAAC,SAAS,GAAG,oBAAoB,CAAA;YACxC,OAAO,OAAO,CAAA;SACf;;IApHM,6BAAiB,GAAG,GAAG;;UCKnB,YAAa,SAAQ,QAAyB;QAA3D;;YACW,uBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO;gBACjE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;gBAC7B,MAAM,OAAO,GACT,SAAS,IAAI,MAAM;sBACnB,MAAM,CAAC,SAAS,CAAC;sBACjB;wBACA,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC;wBAC1B,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC;wBAClC,QAAQ,EAAE,EAAE;qBACb,CAAA;gBACH,uCACK,MAAM,KACT,CAAC,SAAS,mCACL,OAAO,KACV,QAAQ,EAAE,CAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAE,OAE7C;aACF,EAAE,EAAsB,CAAC,CAAA;SAkD3B;QAhDC,IAAI,uBAAuB;YACzB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;iBACxC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;iBAC/D,IAAI,CAAC,EAAE,CAAC,CAAA;SACZ;QAED,8BAA8B,CAAC,QAAsB;YACnD,OAAO,IAAI,CAAC,oCAAoC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;SACrE;QAED,kCAAkC,CAAC,QAAsB;YACvD,OAAO,IAAI,CAAC,oCAAoC,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;SACzE;QAED,oCAAoC,CAAC,WAAwB,EAAE,QAAsB;YACnF,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;iBACxC,MAAM,CAAC,SAAS,IAAI,EAAE,SAAS,IAAI,QAAQ,CAAC,kBAAkB,CAAC,CAAC;iBAChE,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;iBACpD,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,WAAW,CAAC;iBACzC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,CAAA;SAC7C;QAED,IAAI,mBAAmB;YACrB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,SAAS;gBACnE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAA;gBACtE,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;oBAC5B,OAAO,CAAE,GAAG,MAAM,EAAE,GAAG,QAAQ,CAAE,CAAA;iBAClC;qBAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC9B,OAAO,CAAE,GAAG,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,CAAA;iBAC3C;qBAAM;oBACL,OAAO,MAAM,CAAA;iBACd;aACF,EAAE,EAAe,CAAC,CAAA;SACpB;QAED,YAAY,CAAC,IAAY;YACvB,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;YAChD,OAAO,OAAO;kBACV,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC;kBAC/B,IAAI,CAAA;SACT;QAED,qBAAqB,CAAC,IAAY;YAChC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,SAAS;gBACnE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAA;gBAClE,OAAO,4BAA4B,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,OAAO,GAAG,MAAM,CAAA;aACtE,EAAE,SAAgC,CAAC,CAAA;SACrC;KACF;IAED,SAAS,WAAW,CAAC,OAAgB;QACnC,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE;YAC5B,OAAO,QAAQ,CAAA;SAChB;aAAM,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE;YACvC,OAAO,YAAY,CAAA;SACpB;IACH,CAAC;IAED,SAAS,gBAAgB,CAAC,OAAgB;QACxC,OAAO,OAAO,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,QAAQ,CAAA;IAC7D,CAAC;IAED,SAAS,eAAe,CAAC,OAAgB;QACvC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;QAC7C,OAAO,OAAO,IAAI,QAAQ,CAAA;IAC5B,CAAC;IAED,SAAS,mBAAmB,CAAC,OAAgB;QAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;QAC7C,OAAO,OAAO,IAAI,OAAO,KAAK,OAAO,IAAI,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,CAAA;IACjG,CAAC;IAED,SAAS,4BAA4B,CAAC,OAAgB,EAAE,IAAY;QAClE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;QAC7C,OAAO,OAAO,IAAI,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,CAAA;IAClE;;UClGa,YAAa,SAAQ,QAAyB;QAezD,YAAY,OAAwB,EAAE,YAA0B;YAC9D,KAAK,CAAC,OAAO,CAAC,CAAA;YACd,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;SACjC;QAjBD,OAAO,cAAc,CAAC,IAAI,GAAG,EAAE;YAC7B,OAAO,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAA;SAClD;QAED,OAAO,WAAW,CAAC,OAAgB;YACjC,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;SAChD;QAED,OAAO,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAY;YAC1C,OAAO,IAAI,IAAI,CAAC,IAAuB,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA;SACjE;QASD,KAAK;YACH,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;SACzE;QAED,IAAI,WAAW;YACb,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAA;SACjC;QAED,IAAI,YAAY;;YACd,MAAM,IAAI,SAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,mCAAI,GAAG,CAAA;YAC3C,OAAO,SAAS,CAAC,IAAI,CAAC,CAAA;SACvB;QAED,IAAI,iBAAiB;YACnB,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAA;SACxC;QAED,IAAI,aAAa;YACf,OAAO,IAAI,CAAC,iBAAiB,IAAI,YAAY,CAAA;SAC9C;QAED,IAAI,WAAW;YACb,OAAO,IAAI,CAAC,iBAAiB,IAAI,UAAU,CAAA;SAC5C;QAED,IAAI,WAAW;YACb,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,QAAQ,CAAA;SACpD;QAID,UAAU,CAAC,IAAY;YACrB,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,SAAS,IAAI,EAAE,CAAC,CAAA;SACvD;;;ICvCH,IAAY,YAKX;IALD,WAAY,YAAY;QACtB,yCAAyB,CAAA;QACzB,6CAA6B,CAAA;QAC7B,yCAAyB,CAAA;QACzB,qCAAqB,CAAA;IACvB,CAAC,EALW,YAAY,KAAZ,YAAY,QAKvB;IAID,IAAY,UAMX;IAND,WAAY,UAAU;QACpB,yCAA2B,CAAA;QAC3B,iCAAmB,CAAA;QACnB,mCAAqB,CAAA;QACrB,+BAAiB,CAAA;QACjB,qCAAuB,CAAA;IACzB,CAAC,EANW,UAAU,KAAV,UAAU,QAMrB;IAUD,MAAM,cAAc,GAAiB;QACnC,MAAM,EAAE,SAAS;QACjB,cAAc,EAAE,KAAK;KACtB,CAAA;IAOD,IAAY,gBAIX;IAJD,WAAY,gBAAgB;QAC1B,2EAAkB,CAAA;QAClB,4EAAmB,CAAA;QACnB,sFAAwB,CAAA;IAC1B,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;UAEY,KAAK;QAoBhB,YAAY,QAAuB,EAAE,QAAa,EAAE,qBAAyC,EAAE,UAAiC,EAAE;YAlBzH,eAAU,GAAG,IAAI,EAAE,CAAA;YAInB,kBAAa,GAAkB,EAAE,CAAA;YAE1C,qBAAgB,GAAG,KAAK,CAAA;YAExB,mBAAc,GAAG,KAAK,CAAA;YAKtB,aAAQ,GAAG,KAAK,CAAA;YAEhB,mBAAc,GAAG,KAAK,CAAA;YACtB,UAAK,GAAG,UAAU,CAAC,WAAW,CAAA;YAG5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;YACxB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;YACxB,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,IAAI,IAAI,EAAE,CAAA;YAE5D,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,mCAAQ,cAAc,GAAK,OAAO,CAAE,CAAA;YACtG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;YACpB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;YACpC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;YACxB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;YAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;SACzB;QAED,IAAI,OAAO;YACT,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAA;SAC7B;QAED,IAAI,IAAI;YACN,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA;SAC1B;QAED,IAAI,OAAO;YACT,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAA;SAC7B;QAED,IAAI,eAAe;YACjB,OAAO,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;SAChF;QAED,KAAK;YACH,IAAI,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,WAAW,EAAE;gBACxC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;gBAChD,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,OAAO,CAAA;gBAC/B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;gBAC/B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;aACjC;SACF;QAED,MAAM;YACJ,IAAI,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,OAAO,EAAE;gBACpC,IAAI,IAAI,CAAC,OAAO,EAAE;oBAChB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA;iBACtB;gBACD,IAAI,CAAC,YAAY,EAAE,CAAA;gBACnB,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAA;aACjC;SACF;QAED,QAAQ;YACN,IAAI,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,OAAO,EAAE;gBACpC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;gBAC9C,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,SAAS,CAAA;gBACjC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;gBACjC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;aACnC;SACF;QAED,IAAI;YACF,IAAI,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,OAAO,EAAE;gBACpC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,CAAA;gBAC9B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;aAC/B;SACF;QAED,aAAa;;YACX,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACxB,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,YAAK,IAAI,CAAC,QAAQ,0CAAE,IAAI,CAAA,GAAG,SAAS,GAAG,IAAI,CAAC,MAAM,CAAA;gBAC7F,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,gBAAgB,CAAC,CAAA;gBAC/D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAA;gBACtE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;aAC3B;SACF;QAED,YAAY;YACV,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;gBAC/B,IAAI,CAAC,eAAe,EAAE,CAAA;aACvB;iBAAM,IAAI,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACrD,IAAI,CAAC,OAAO,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACrE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;aACvB;SACF;QAED,eAAe;YACb,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,YAAY,EAAE,CAAA;gBACnB,IAAI,CAAC,cAAc,EAAE,CAAA;gBACrB,IAAI,CAAC,aAAa,EAAE,CAAA;aACrB;SACF;QAED,YAAY;YACV,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;YAClD,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;SACvC;QAED,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;YACrC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;YACxB,IAAI,QAAQ,EAAE;gBACZ,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAA;gBAC/B,IAAI,YAAY,CAAC,UAAU,CAAC,EAAE;oBAC5B,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;iBACzC;qBAAM;oBACL,IAAI,CAAC,OAAO,CAAC,gCAAgC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;iBAChE;aACF;SACF;QAED,aAAa;YACX,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;YAChD,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;SACxC;QAED,YAAY;YACV,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAA;gBAClD,IAAI,CAAC,MAAM,CAAC;oBACV,IAAI,CAAC,aAAa,EAAE,CAAA;oBACpB,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,YAAY,IAAI,IAAI,EAAE;wBACpD,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAA;wBACrE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;wBAChC,IAAI,CAAC,QAAQ,EAAE,CAAA;qBAChB;yBAAM;wBACL,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAA;wBACtE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;wBAChC,IAAI,CAAC,IAAI,EAAE,CAAA;qBACZ;iBACF,CAAC,CAAA;aACH;SACF;QAED,iBAAiB;YACf,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAA;YAErG,IAAI,QAAQ,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;gBAC3F,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,IAAI,QAAQ,CAAC,aAAa,EAAE;oBACtD,OAAO,QAAQ,CAAA;iBAChB;aACF;SACF;QAED,oBAAoB;YAClB,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,OAAO,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;aACtD;SACF;QAED,iBAAiB;YACf,OAAO,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAA;SACxC;QAED,kBAAkB;YAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAA;YACzC,IAAI,QAAQ,EAAE;gBACZ,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA;gBAC3C,IAAI,CAAC,MAAM,CAAC;oBACV,IAAI,CAAC,aAAa,EAAE,CAAA;oBACpB,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;oBAC/C,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;oBAChC,IAAI,CAAC,SAAS,EAAE;wBACd,IAAI,CAAC,QAAQ,EAAE,CAAA;qBAChB;iBACF,CAAC,CAAA;aACH;SACF;QAED,cAAc;YACZ,IAAI,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACvD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAA;gBACzC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAA;gBAC3E,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;aAC7B;SACF;QAID,cAAc;YACZ,IAAI,CAAC,YAAY,EAAE,CAAA;SACpB;QAED,gCAAgC,CAAC,OAAqB,EAAE,QAAuB;SAE9E;QAED,MAAM,4BAA4B,CAAC,OAAqB,EAAE,QAAuB;YAC/E,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAA;YAChD,IAAI,YAAY,IAAI,SAAS,EAAE;gBAC7B,IAAI,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,CAAA;aAC1E;iBAAM;gBACL,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAA;gBAC/E,IAAI,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,CAAA;aACvE;SACF;QAED,MAAM,yBAAyB,CAAC,OAAqB,EAAE,QAAuB;YAC5E,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAA;YAChD,IAAI,YAAY,IAAI,SAAS,EAAE;gBAC7B,IAAI,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,CAAA;aAC1E;iBAAM;gBACL,IAAI,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,CAAA;aACvE;SACF;QAED,cAAc,CAAC,OAAqB,EAAE,KAAY;YAChD,IAAI,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAA;SACrE;QAED,eAAe;YACb,IAAI,CAAC,aAAa,EAAE,CAAA;SACrB;QAID,aAAa;YACX,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAClB,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE;oBAC5B,IAAI,CAAC,wBAAwB,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAA;iBACtD;qBAAM;oBACL,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAA;iBAC5C;gBACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;aACrB;SACF;QAED,wBAAwB;YACtB,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,eAAe,CAAA;YAC/C,IAAI,cAAc,EAAE;gBAClB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAA;gBAC1C,OAAO,IAAI,CAAA;aACZ;SACF;QAED,cAAc;YACZ,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAC5B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;gBAClD,OAAO,IAAI,CAAA;aACZ;SACF;QAED,WAAW;YACT,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;SAC3C;QAID,kBAAkB,CAAC,MAAoB;YACrC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;SAClD;QAED,gBAAgB;YACd,yBAAY,IAAI,CAAC,aAAa,EAAE;SACjC;QAID,yBAAyB,CAAC,MAAc;YACtC,QAAQ,MAAM;gBACZ,KAAK,SAAS,EAAE,OAAO,OAAO,CAAC,YAAY,CAAA;gBAC3C,KAAK,SAAS,CAAC;gBACf,KAAK,SAAS,EAAE,OAAO,OAAO,CAAC,SAAS,CAAA;aACzC;SACF;QAED,oBAAoB;YAClB,OAAO,OAAO,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAA;SACxC;QAED,kBAAkB;YAChB,OAAO,IAAI,CAAC,MAAM,IAAI,SAAS;kBAC3B,CAAC,IAAI,CAAC,iBAAiB,EAAE;kBACzB,IAAI,CAAA;SACT;QAED,aAAa;YACX,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACxB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAA;gBACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;aAC3B;SACF;QAED,MAAM,MAAM,CAAC,QAA6B;YACxC,IAAI,CAAC,YAAY,EAAE,CAAA;YACnB,MAAM,IAAI,OAAO,CAAO,OAAO;gBAC7B,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,MAAM,OAAO,EAAE,CAAC,CAAA;aACpD,CAAC,CAAA;YACF,QAAQ,EAAE,CAAA;YACV,OAAO,IAAI,CAAC,KAAK,CAAA;YACjB,IAAI,CAAC,aAAa,EAAE,CAAA;SACrB;QAED,YAAY;YACV,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAChC,OAAO,IAAI,CAAC,KAAK,CAAA;aAClB;SACF;KACF;IAED,SAAS,YAAY,CAAC,UAAkB;QACtC,OAAO,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG,CAAA;IAC9C;;UCrXa,cAAc;QAMzB,YAAY,OAAgB;YAJnB,gBAAW,GAAG,IAAI,WAAW,CAAA;YAqEtC,oBAAe,GAAG;gBAChB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;aACxB,CAAA;YAlEC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;SACvB;QAED,uBAAuB,CAAC,QAAa,EAAE,OAA+B;YACpE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAA;SACrD;QAED,YAAY,CAAC,KAAY;YACvB,KAAK,CAAC,YAAY,EAAE,CAAA;YACpB,KAAK,CAAC,aAAa,EAAE,CAAA;YACrB,KAAK,CAAC,kBAAkB,EAAE,CAAA;SAC3B;QAED,mBAAmB,CAAC,KAAY;YAC9B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAC5B,IAAI,KAAK,CAAC,iBAAiB,EAAE,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE;gBAC1D,IAAI,CAAC,yBAAyB,EAAE,CAAA;aACjC;iBAAM;gBACL,IAAI,CAAC,eAAe,EAAE,CAAA;aACvB;SACF;QAED,qBAAqB,CAAC,KAAY;YAChC,KAAK,CAAC,YAAY,EAAE,CAAA;SACrB;QAED,gCAAgC,CAAC,KAAY,EAAE,UAAkB;YAC/D,QAAQ,UAAU;gBAChB,KAAK,gBAAgB,CAAC,cAAc,CAAC;gBACrC,KAAK,gBAAgB,CAAC,cAAc,CAAC;gBACrC,KAAK,gBAAgB,CAAC,mBAAmB;oBACvC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;gBACtB;oBACE,OAAO,KAAK,CAAC,YAAY,EAAE,CAAA;aAC9B;SACF;QAED,oBAAoB,CAAC,KAAY;YAC/B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAC5B,IAAI,CAAC,eAAe,EAAE,CAAA;SACvB;QAED,cAAc,CAAC,KAAY;YACzB,KAAK,CAAC,cAAc,EAAE,CAAA;SACvB;QAED,eAAe;YACb,IAAI,CAAC,MAAM,EAAE,CAAA;SACd;QAED,WAAW,CAAC,KAAY;SAEvB;QAED,aAAa,CAAC,KAAY;SAEzB;QAID,yBAAyB;YACvB,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;SACjG;QAMD,eAAe;YACb,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;YACvB,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,EAAE;gBACnC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;gBAC5C,OAAO,IAAI,CAAC,kBAAkB,CAAA;aAC/B;SACF;QAED,MAAM;YACJ,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAA;SACzB;QAED,IAAI,SAAS;YACX,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAA;SAC9B;;;UC/FU,aAAa;QAA1B;YACE,YAAO,GAAG,KAAK,CAAA;SAuBhB;QArBC,KAAK;YACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;gBACnB,gBAAgB,CAAC,oBAAoB,EAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAA;aACxE;SACF;QAED,IAAI;YACF,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;gBACpB,mBAAmB,CAAC,oBAAoB,EAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAA;aAC3E;SACF;QAED,mBAAmB;YACjB,MAAM,aAAa,GAAG,CAAE,GAAG,QAAQ,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,CAAE,CAAA;YAEpF,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE;gBAClC,OAAO,CAAC,MAAM,EAAE,CAAA;aACjB;SACH;;;UClBU,kBAAkB;QAI7B,YAAY,QAAoC;YAFhD,YAAO,GAAG,KAAK,CAAA;YAoBf,mBAAc,GAAG;gBACf,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;gBACxD,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;aACtD,CAAA;YAED,kBAAa,IAAmB,CAAC,KAAkB;gBACjD,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;oBAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,YAAY,eAAe,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,CAAA;oBAC/E,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,SAAS,CAAA;oBAE9C,IAAI,IAAI,EAAE;wBACR,MAAM,MAAM,GAAG,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,YAAY,CAAC,YAAY,MAAK,IAAI,CAAC,MAAM,CAAA;wBAEnE,IAAI,MAAM,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE;4BACvE,KAAK,CAAC,cAAc,EAAE,CAAA;4BACtB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;yBAC7C;qBACF;iBACF;aACF,CAAC,CAAA;YApCA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;SACzB;QAED,KAAK;YACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;gBACrD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;aACpB;SACF;QAED,IAAI;YACF,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;gBACxD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;aACrB;SACF;;;UCrBU,eAAe;QAK1B,YAAY,OAAgB;YAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;YACtB,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YACzD,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;SAC1D;QAED,KAAK;YACH,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;YAC5B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;SAC7B;QAED,IAAI;YACF,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAA;YAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAA;SAC5B;QAED,wBAAwB,CAAC,OAAgB,EAAE,GAAW;YACpD,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;SACpC;QAED,oBAAoB,CAAC,OAAgB,EAAE,GAAW;YAChD,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;YAC5C,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,GAAG,GAAG,GAAG,CAAA;aAChB;SACF;QAED,6BAA6B,CAAC,OAAwB,EAAE,SAAuB;YAC7E,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;SAC/C;QAED,yBAAyB,CAAC,OAAwB,EAAE,SAAuB;YACzE,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;YAC5C,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,QAAQ,CAAC,yBAAyB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;aAC7D;SACF;QAEO,cAAc,CAAC,OAAgB,EAAE,SAAuB;YAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;YAC5C,OAAO,KAAK,GAAG,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,KAAK,CAAA;SAC/D;QAEO,gBAAgB,CAAC,OAAgB;YACvC,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAA;YACnD,IAAI,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE;gBACtB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAA;gBAClE,IAAI,KAAK,YAAY,YAAY,EAAE;oBACjC,OAAO,KAAK,CAAA;iBACb;aACF;SACF;;;UC/CU,OAAO;QASlB,YAAY,QAAyB;YANrC,0BAAqB,GAAG,IAAI,EAAE,CAAA;YAC9B,oBAAe,GAAuB,EAAE,CAAA;YACxC,YAAO,GAAG,KAAK,CAAA;YACf,eAAU,GAAG,KAAK,CAAA;YAqElB,eAAU,GAAG,CAAC,KAAoB;gBAChC,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;oBAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAA;oBACnC,IAAI,KAAK,EAAE;wBACT,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;wBAC7C,MAAM,EAAE,qBAAqB,EAAE,GAAG,KAAK,CAAA;wBACvC,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAA;wBAClD,IAAI,CAAC,QAAQ,CAAC,gDAAgD,CAAC,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAA;qBACrG;iBACF;aACF,CAAA;YAED,eAAU,GAAG,OAAO,KAAY;gBAC9B,MAAM,aAAa,EAAE,CAAA;gBACrB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;aACvB,CAAA;YAhFC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;SACzB;QAED,KAAK;YACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;gBACpD,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;gBAChD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;gBACnB,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;aAC5C;SACF;QAED,IAAI;YACF,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;gBACvD,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;gBACnD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;aACrB;SACF;QAED,IAAI,CAAC,QAAa,EAAE,qBAA8B;YAChD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAA;SAChE;QAED,OAAO,CAAC,QAAa,EAAE,qBAA8B;YACnD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAA;SACnE;QAED,MAAM,CAAC,MAAqB,EAAE,QAAa,EAAE,qBAAqB,GAAG,IAAI,EAAE;YACzE,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,qBAAqB,EAAE,EAAE,CAAA;YAClD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;YAC9C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;YACxB,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAA;SACnD;QAID,+BAA+B,CAAC,qBAA6B;YAC3D,OAAO,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAA;SACzD;QAED,qBAAqB,CAAC,cAAwC;YAC5D,MAAM,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAA;YACtC,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAA;YACnE,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,mCAAQ,eAAe,GAAK,cAAc,CAAE,CAAA;SACxF;QAID,gCAAgC;;YAC9B,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE;gBACnC,IAAI,CAAC,yBAAyB,SAAG,OAAO,CAAC,iBAAiB,mCAAI,MAAM,CAAA;gBACpE,OAAO,CAAC,iBAAiB,GAAG,QAAQ,CAAA;aACrC;SACF;QAED,oCAAoC;YAClC,IAAI,IAAI,CAAC,yBAAyB,EAAE;gBAClC,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,yBAAyB,CAAA;gBAC1D,OAAO,IAAI,CAAC,yBAAyB,CAAA;aACtC;SACF;QAuBD,oBAAoB;YAElB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAA;SAC3B;QAED,YAAY;YACV,OAAO,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,IAAI,UAAU,CAAA;SAC5D;;;UC3GU,iBAAiB;QAI5B,YAAY,QAAmC;YAF/C,YAAO,GAAG,KAAK,CAAA;YAoBf,kBAAa,GAAG;gBACd,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;gBACtD,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;aACpD,CAAA;YAED,iBAAY,GAAG,CAAC,KAAiB;gBAC/B,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE;oBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;oBACvD,IAAI,IAAI,EAAE;wBACR,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;wBAC9C,IAAI,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;4BAC1D,KAAK,CAAC,cAAc,EAAE,CAAA;4BACtB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;yBACrD;qBACF;iBACF;aACF,CAAA;YAjCC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;SACzB;QAED,KAAK;YACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;gBACnD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;aACpB;SACF;QAED,IAAI;YACF,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;gBACtD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;aACrB;SACF;QAoBD,uBAAuB,CAAC,KAAiB;YACvC,OAAO,EACL,CAAC,KAAK,CAAC,MAAM,IAAK,KAAK,CAAC,MAAc,CAAC,iBAAiB;mBACrD,KAAK,CAAC,gBAAgB;mBACtB,KAAK,CAAC,KAAK,GAAG,CAAC;mBACf,KAAK,CAAC,MAAM;mBACZ,KAAK,CAAC,OAAO;mBACb,KAAK,CAAC,OAAO;mBACb,KAAK,CAAC,QAAQ,CAClB,CAAA;SACF;QAED,uBAAuB,CAAC,MAA0B;YAChD,IAAI,MAAM,YAAY,OAAO,EAAE;gBAC7B,OAAO,MAAM,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAA;aAClE;SACF;QAED,kBAAkB,CAAC,IAAa;YAC9B,OAAO,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;SAClD;;;aCjEa,QAAQ,CAAC,MAAW;QAClC,OAAO,MAAM,IAAI,SAAS,IAAI,MAAM,IAAI,SAAS,IAAI,MAAM,IAAI,SAAS,CAAA;IAC1E;;UCSa,SAAS;QAKpB,YAAY,QAA2B;YACrC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;SACzB;QAED,YAAY,CAAC,QAAa,EAAE,UAAiC,EAAE;YAC7D,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAE;gBAClD,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;aACzD;SACF;QAED,UAAU,CAAC,SAAoB,EAAE,qBAA6B,EAAE,UAAiC,EAAE;YACjG,IAAI,CAAC,IAAI,EAAE,CAAA;YACX,IAAI,CAAC,YAAY,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,EAAE,qBAAqB,kBAC7E,QAAQ,EAAE,IAAI,CAAC,QAAQ,IACpB,OAAO,EACV,CAAA;YACF,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;SAC1B;QAED,UAAU,CAAC,IAAqB,EAAE,SAAuB;YACvD,IAAI,CAAC,IAAI,EAAE,CAAA;YACX,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;YAErE,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;gBACpC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;aAC1H;iBAAM;gBACL,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;aAC5B;SACF;QAED,IAAI;YACF,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;gBAC1B,OAAO,IAAI,CAAC,cAAc,CAAA;aAC3B;YAED,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAA;gBAC1B,OAAO,IAAI,CAAC,YAAY,CAAA;aACzB;SACF;QAED,IAAI,OAAO;YACT,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAA;SAC7B;QAED,IAAI,IAAI;YACN,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA;SAC1B;QAED,IAAI,OAAO;YACT,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAA;SAC7B;QAID,qBAAqB,CAAC,cAA8B;SAEnD;QAED,MAAM,mCAAmC,CAAC,cAA8B,EAAE,aAA4B;YACpG,IAAI,cAAc,IAAI,IAAI,CAAC,cAAc,EAAE;gBACzC,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,YAAY,CAAA;gBACrD,IAAI,YAAY,EAAE;oBAChB,IAAI,cAAc,CAAC,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE;wBAC5C,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAA;qBAC/B;oBAED,MAAM,EAAE,UAAU,EAAE,GAAG,aAAa,CAAA;oBACpC,MAAM,YAAY,GAAG,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,CAAA;oBAC/D,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;iBACxD;aACF;SACF;QAED,MAAM,gCAAgC,CAAC,cAA8B,EAAE,aAA4B;YACjG,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,YAAY,CAAA;YAErD,IAAI,YAAY,EAAE;gBAChB,MAAM,QAAQ,GAAG,YAAY,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;gBAC1D,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;gBACpC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAA;aAC/B;SACF;QAED,qBAAqB,CAAC,cAA8B,EAAE,KAAY;YAChE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;SACrB;QAED,sBAAsB,CAAC,cAA8B;SAEpD;QAID,YAAY,CAAC,KAAY;YACvB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;SAClC;QAED,cAAc,CAAC,KAAY;YACzB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;SACpC;QAID,IAAI,QAAQ;YACV,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;SAC7B;QAED,IAAI,qBAAqB;YACvB,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAA;SAC1C;QAED,0BAA0B,CAAC,cAA8B;YACvD,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,cAAc,CAAA;YACjD,MAAM,MAAM,GAAG,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,YAAY,CAAC,mBAAmB,MAAK,WAAW,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAA;YAC5G,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS,CAAA;SAC7C;;;ICjIH,IAAY,SAKX;IALD,WAAY,SAAS;QACnB,+CAAO,CAAA;QACP,+CAAO,CAAA;QACP,uDAAW,CAAA;QACX,iDAAQ,CAAA;IACV,CAAC,EALW,SAAS,KAAT,SAAS,QAKpB;UAEY,YAAY;QAKvB,YAAY,QAA8B;YAH1C,UAAK,GAAG,SAAS,CAAC,OAAO,CAAA;YACzB,YAAO,GAAG,KAAK,CAAA;YAyBf,wBAAmB,GAAG;gBACpB,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAA;gBAC3B,IAAI,UAAU,IAAI,aAAa,EAAE;oBAC/B,IAAI,CAAC,iBAAiB,EAAE,CAAA;iBACzB;qBAAM,IAAI,UAAU,IAAI,UAAU,EAAE;oBACnC,IAAI,CAAC,cAAc,EAAE,CAAA;iBACtB;aACF,CAAA;YAiBD,mBAAc,GAAG;gBACf,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAA;aAC/B,CAAA;YAhDC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;SACzB;QAED,KAAK;YACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,IAAI,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,OAAO,EAAE;oBACnC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,OAAO,CAAA;iBAC/B;gBACD,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAA;gBAC9E,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;gBACxD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;aACpB;SACF;QAED,IAAI;YACF,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAA;gBACjF,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;gBAC3D,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;aACrB;SACF;QAWD,iBAAiB;YACf,IAAI,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,OAAO,EAAE;gBACnC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,WAAW,CAAA;gBAClC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAA;aACtC;SACF;QAED,cAAc;YACZ,IAAI,CAAC,iBAAiB,EAAE,CAAA;YACxB,IAAI,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,WAAW,EAAE;gBACvC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAA;gBAC/B,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAA;aAC3B;SACF;QAMD,IAAI,UAAU;YACZ,OAAO,QAAQ,CAAC,UAAU,CAAA;SAC3B;;;UCjEU,cAAc;QAIzB,YAAY,QAAgC;YAF5C,YAAO,GAAG,KAAK,CAAA;YAqBf,aAAQ,GAAG;gBACT,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;aACtE,CAAA;YApBC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;SACzB;QAED,KAAK;YACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;gBAChD,IAAI,CAAC,QAAQ,EAAE,CAAA;gBACf,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;aACpB;SACF;QAED,IAAI;YACF,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;gBACnD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;aACrB;SACF;QAQD,cAAc,CAAC,QAAkB;YAC/B,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAA;SAC9C;;;UC7BU,cAAc;QAKzB,YAAY,QAAgC;YAHnC,YAAO,GAAsB,IAAI,GAAG,CAAA;YACrC,YAAO,GAAG,KAAK,CAAA;YAsCvB,yBAAoB,IAAmB,CAAC,KAAkB;gBACxD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAA;gBAC9C,IAAI,QAAQ,IAAI,qBAAqB,CAAC,QAAQ,CAAC,EAAE;oBAC/C,KAAK,CAAC,cAAc,EAAE,CAAA;oBACtB,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAA;iBACtC;aACF,CAAC,CAAA;YAEF,wBAAmB,GAAG,CAAC,KAAmB;gBACxC,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,CAAC,IAAI,IAAI,QAAQ,EAAE;oBACjD,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;iBACpC;aACF,CAAA;YA/CC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;SACzB;QAED,KAAK;YACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;gBACnB,gBAAgB,CAAC,6BAA6B,EAAE,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAA;aAClF;SACF;QAED,IAAI;YACF,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;gBACpB,mBAAmB,CAAC,6BAA6B,EAAE,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAA;aACrF;SACF;QAED,mBAAmB,CAAC,MAAoB;YACtC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE;gBACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;gBACxB,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAA;aACpE;SACF;QAED,sBAAsB,CAAC,MAAoB;YACzC,IAAI,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE;gBACxC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;gBAC3B,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAA;aACvE;SACF;QAED,uBAAuB,CAAC,MAAoB;YAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;SAChC;QAgBD,MAAM,sBAAsB,CAAC,QAAuB;YAClD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAA;YACxC,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;aAC9B;SACF;QAED,kBAAkB,CAAC,IAAY;YAC7B,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAA;SACjE;KACF;IAED,SAAS,sBAAsB,CAAC,KAAkB;;QAChD,MAAM,aAAa,SAAG,KAAK,CAAC,MAAM,0CAAE,aAAa,CAAA;QACjD,IAAI,aAAa,YAAY,aAAa,EAAE;YAC1C,OAAO,aAAa,CAAA;SACrB;IACH,CAAC;IAED,SAAS,qBAAqB,CAAC,QAAuB;;QACpD,MAAM,WAAW,SAAG,QAAQ,CAAC,WAAW,mCAAI,EAAE,CAAA;QAC9C,OAAO,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,CAAA;IAC1D;;UClFa,aAAc,SAAQ,QAAuC;QACxE,MAAM,MAAM;YACV,IAAI,CAAC,kBAAkB,EAAE,CAAA;YACzB,IAAI,CAAC,sBAAsB,EAAE,CAAA;SAC9B;QAED,kBAAkB;YAChB,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAA;YAChD,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YAChD,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;SACpD;QAED,sBAAsB;YACpB,KAAK,MAAM,kBAAkB,IAAI,IAAI,CAAC,cAAc,EAAE;gBACpD,MAAM,UAAU,GAAG,kBAAkB,CAAC,UAAU,CAAA;gBAChD,IAAI,UAAU,EAAE;oBACd,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAA;oBAC5D,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAA;iBACrD;aACF;SACF;QAED,IAAI,OAAO;YACT,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,CAAA;SAC7C;QAED,IAAI,cAAc;YAChB,OAAO,CAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAE,CAAA;SAClE;;;UC5BU,YAAa,SAAQ,QAAuC;QACvE,IAAI,YAAY;YACd,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,IAAI,IAAI,CAAC,2BAA2B,CAAA;SACxE;QAED,eAAe;YACb,IAAI,CAAC,SAAS,EAAE,CAAA;SACjB;QAED,MAAM,MAAM;YACV,IAAI,CAAC,WAAW,EAAE,CAAA;SACnB;QAED,eAAe;YACb,KAAK,CAAC,eAAe,EAAE,CAAA;YACvB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACnB,IAAI,CAAC,8BAA8B,EAAE,CAAA;aACtC;SACF;QAED,IAAI,mBAAmB;YACrB,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,CAAA;SACzC;QAED,IAAI,eAAe;YACjB,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAA;SACrC;QAED,IAAI,UAAU;YACZ,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAA;SAChC;QAED,SAAS;YACP,IAAI,CAAC,6BAA6B,EAAE,CAAA;YACpC,IAAI,CAAC,yBAAyB,EAAE,CAAA;YAChC,IAAI,CAAC,oCAAoC,EAAE,CAAA;YAC3C,IAAI,CAAC,8BAA8B,EAAE,CAAA;SACtC;QAED,WAAW;YACT,IAAI,CAAC,2BAA2B,CAAC;gBAC/B,IAAI,CAAC,eAAe,EAAE,CAAA;gBACtB,IAAI,CAAC,aAAa,EAAE,CAAA;aACrB,CAAC,CAAA;SACH;QAED,IAAI,2BAA2B;YAC7B,OAAO,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,IAAI,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAA;SACxG;QAED,6BAA6B;YAC3B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,yBAAyB,EAAE;gBACpD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;aACnC;SACF;QAED,yBAAyB;YACvB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,qBAAqB,EAAE;gBAChD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAA;aAC7D;SACF;QAED,oCAAoC;YAClC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,8BAA8B,EAAE;gBACzD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;aACnC;SACF;QAED,8BAA8B;YAC5B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,0BAA0B,EAAE;gBACrD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;aACnC;SACF;QAED,eAAe;YACb,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACnC,IAAI,CAAC,6BAA6B,EAAE,CAAA;SACrC;QAED,6BAA6B;YAC3B,KAAK,MAAM,kBAAkB,IAAI,IAAI,CAAC,qBAAqB,EAAE;gBAC3D,MAAM,sBAAsB,GAAG,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAA;gBAC3E,kBAAkB,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAA;aACvD;SACF;QAED,aAAa;YACX,IAAI,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,YAAY,eAAe,EAAE;gBAC/D,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;aAC3C;iBAAM;gBACL,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;aACtD;SACF;QAED,IAAI,yBAAyB;YAC3B,OAAO,IAAI,CAAC,eAAe,CAAC,kCAAkC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;SACzF;QAED,IAAI,qBAAqB;YACvB,OAAO,IAAI,CAAC,eAAe,CAAC,8BAA8B,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;SACrF;QAED,IAAI,8BAA8B;YAChC,OAAO,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAA;SACpD;QAED,IAAI,0BAA0B;YAC5B,OAAO,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAA;SAChD;QAED,IAAI,qBAAqB;YACvB,OAAO,CAAE,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAE,CAAA;SACzD;;;UChHU,aAAa;QAKxB,YAAY,IAAY;YAJf,SAAI,GAAa,EAAE,CAAA;YAE5B,cAAS,GAAoC,EAAE,CAAA;YAG7C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;SACjB;QAED,GAAG,CAAC,QAAa;YACf,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,CAAA;SAC9C;QAED,GAAG,CAAC,QAAa;YACf,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACpC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;gBACpB,OAAO,QAAQ,CAAA;aAChB;SACF;QAED,GAAG,CAAC,QAAa,EAAE,QAAsB;YACvC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YAC9B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YACpB,OAAO,QAAQ,CAAA;SAChB;QAED,KAAK;YACH,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;SACpB;QAID,IAAI,CAAC,QAAa;YAChB,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAA;SAC5C;QAED,KAAK,CAAC,QAAa,EAAE,QAAsB;YACzC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAA;SAChD;QAED,KAAK,CAAC,QAAa;YACjB,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;YAChC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YACpC,IAAI,KAAK,GAAG,CAAC,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YACtB,IAAI,CAAC,IAAI,EAAE,CAAA;SACZ;QAED,IAAI;YACF,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC7C,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;aAC3B;SACF;;;UC3CU,QAAS,SAAQ,IAA+D;QAA7F;;YACW,kBAAa,GAAG,IAAI,aAAa,CAAC,EAAE,CAAC,CAAA;YAC9C,yBAAoB,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;SAoC9C;QAlCC,UAAU,CAAC,QAAsB,EAAE,SAAS,GAAG,KAAK;YAClD,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;YACrE,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;SAC7B;QAED,WAAW,CAAC,QAAsB;YAChC,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;YAClE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;SACtB;QAED,kBAAkB;YAChB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAA;SAC3B;QAED,MAAM,aAAa;YACjB,IAAI,IAAI,CAAC,mBAAmB,EAAE;gBAC5B,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAA;gBACrC,MAAM,EAAE,QAAQ,EAAE,oBAAoB,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;gBACzD,MAAM,iBAAiB,EAAE,CAAA;gBACzB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;aACnD;SACF;QAED,4BAA4B,CAAC,QAAa;YACxC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;SACxC;QAED,IAAI,QAAQ;YACV,OAAO,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;SAC9C;QAED,IAAI,mBAAmB;YACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAA;SACjC;;;UC7BU,OAAO;QAApB;YACW,cAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAA;YAC/B,YAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;YAC3B,SAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAA;YAC5D,YAAO,GAAY,IAAI,cAAc,CAAC,IAAI,CAAC,CAAA;YAElC,iBAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAA;YACrC,kBAAa,GAAG,IAAI,aAAa,EAAE,CAAA;YACnC,sBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAA;YAC/C,uBAAkB,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAA;YACjD,mBAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAA;YACzC,mBAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAA;YAEzC,oBAAe,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA;YAExE,YAAO,GAAG,IAAI,CAAA;YACd,qBAAgB,GAAG,GAAG,CAAA;YACtB,YAAO,GAAG,KAAK,CAAA;SAgOhB;QA9NC,KAAK;YACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;gBACzB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAA;gBAC1B,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAA;gBAC9B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAA;gBAC/B,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;gBAC3B,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;gBAC3B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;gBAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;gBACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;gBACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;aACpB;SACF;QAED,OAAO;YACL,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;SACrB;QAED,IAAI;YACF,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA;gBACxB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;gBACzB,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAA;gBAC7B,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAA;gBAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;gBAC1B,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;gBAC1B,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAA;gBAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;gBACnB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;aACrB;SACF;QAED,eAAe,CAAC,OAAgB;YAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;SACvB;QAED,KAAK,CAAC,QAAmB,EAAE,UAAiC,EAAE;YAC5D,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAA;SAC1D;QAED,mBAAmB,CAAC,MAAoB;YACtC,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;SAChD;QAED,sBAAsB,CAAC,MAAoB;YACzC,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAA;SACnD;QAED,mBAAmB,CAAC,OAA+B;YACjD,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAA;SAC3E;QAED,UAAU;YACR,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAA;SAC/B;QAED,mBAAmB,CAAC,KAAa;YAC/B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAA;SAC9B;QAED,IAAI,QAAQ;YACV,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;SAC7B;QAED,IAAI,qBAAqB;YACvB,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAA;SAC1C;QAID,gDAAgD,CAAC,QAAa;YAC5D,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAA;aACnF;iBAAM;gBACL,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAA;aAC/B;SACF;QAID,qBAAqB,CAAC,QAAkB;YACtC,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAA;SACjE;QAID,wBAAwB,CAAC,IAAa,EAAE,QAAa;YACnD,OAAO,kBAAkB,CAAC,IAAI,CAAC;mBAC1B,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;mBAClC,IAAI,CAAC,wCAAwC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;SACnE;QAED,sBAAsB,CAAC,IAAa,EAAE,QAAa;YACjD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;YAC1C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;SACtC;QAID,sBAAsB,CAAC,QAAa;YAClC,OAAO,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC,CAAA;SACxD;QAED,uBAAuB,CAAC,QAAa,EAAE,OAA8B;YACnE,iCAAiC,CAAC,QAAQ,CAAC,CAAA;YAC3C,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;SACxD;QAED,YAAY,CAAC,KAAY;YACvB,iCAAiC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YACjD,IAAI,CAAC,sCAAsC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;SAC5D;QAED,cAAc,CAAC,KAAY;YACzB,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAA;SAC9D;QAID,cAAc,CAAC,IAAqB,EAAE,SAAuB;YAC3D,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAA;SACjE;QAED,aAAa,CAAC,IAAqB,EAAE,SAAuB;YAC1D,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;SAC3C;QAID,qBAAqB;YACnB,IAAI,CAAC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAA;YAC9C,IAAI,CAAC,8BAA8B,EAAE,CAAA;SACtC;QAED,UAAU;YACR,IAAI,CAAC,OAAO,CAAC,gCAAgC,EAAE,CAAA;SAChD;QAED,cAAc;YACZ,IAAI,CAAC,OAAO,CAAC,oCAAoC,EAAE,CAAA;SACpD;QAID,yBAAyB,CAAC,OAAsB;YAC9C,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;SAClC;QAID,qBAAqB;YACnB,IAAI,CAAC,sCAAsC,EAAE,CAAA;SAC9C;QAED,sBAAsB,CAAC,EAAE,OAAO,EAAgB,EAAE,SAAkB;YAClE,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAA;SAC5C;QAED,oBAAoB,CAAC,QAAsB,EAAE,SAAkB;YAC7D,IAAI,CAAC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;YACtD,IAAI,CAAC,4BAA4B,EAAE,CAAA;SACpC;QAED,eAAe;YACb,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAA;SAC/B;QAID,wCAAwC,CAAC,IAAa,EAAE,QAAa;YACnE,MAAM,KAAK,GAAG,IAAI,CAAC,4CAA4C,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;YAC/E,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAA;SAC/B;QAED,iCAAiC,CAAC,QAAa;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,uCAAuC,CAAC,QAAQ,CAAC,CAAA;YACpE,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAA;SAC/B;QAED,4CAA4C,CAAC,IAAa,EAAE,QAAa;YACvE,OAAO,QAAQ,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;SACnG;QAED,uCAAuC,CAAC,QAAa;YACnD,OAAO,QAAQ,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;SAC5F;QAED,sCAAsC,CAAC,QAAa;YAClD,OAAO,QAAQ,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;SACnE;QAED,sCAAsC;YACpC,OAAO,QAAQ,CAAC,oBAAoB,CAAC,CAAA;SACtC;QAED,6BAA6B,CAAC,OAAwB;YACpD,OAAO,QAAQ,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAC,CAAC,CAAA;SAC/D;QAED,4BAA4B;YAC1B,OAAO,QAAQ,CAAC,cAAc,CAAC,CAAA;SAChC;QAED,8BAA8B,CAAC,SAAqB,EAAE;YACpD,OAAO,QAAQ,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAC,CAAC,CAAA;SAC9E;QAID,gBAAgB,CAAC,IAAa;YAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAA;YACrD,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS,CAAA;SAC7C;QAED,mBAAmB,CAAC,QAAa;YAC/B,OAAO,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAA;SAC9E;QAED,IAAI,QAAQ;YACV,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAA;SAC1B;KACF;aAEe,kBAAkB,CAAC,OAAiB;QAClD,MAAM,SAAS,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,CAAC,cAAc,CAAC,CAAA;QAClD,IAAI,SAAS,EAAE;YACb,OAAO,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,OAAO,CAAA;SACvD;aAAM;YACL,OAAO,IAAI,CAAA;SACZ;IACH,CAAC;IAaD,SAAS,iCAAiC,CAAC,GAAQ;QACjD,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,qCAAqC,CAAC,CAAA;IACrE,CAAC;IAED,MAAM,qCAAqC,GAAG;QAC5C,WAAW,EAAE;YACX,GAAG;gBACD,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;aACvB;SACF;KACF;;UCvRY,eAAe;QAa1B,YAAY,OAAqB;YALzB,wBAAmB,GAAG,SAAQ,CAAA;YAC9B,cAAS,GAAG,KAAK,CAAA;YACjB,kBAAa,GAAG,KAAK,CAAA;YACrB,qBAAgB,GAAG,KAAK,CAAA;YAG9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;YACtB,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;YAC7C,IAAI,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;YACpE,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;YAC9D,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;SAC/D;QAED,OAAO;YACL,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;gBACrB,IAAI,IAAI,CAAC,YAAY,IAAI,iBAAiB,CAAC,IAAI,EAAE;oBAC/C,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAA;iBAChC;gBACD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;gBAC5B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;gBAC5B,IAAI,CAAC,gBAAgB,EAAE,CAAA;aACxB;SACF;QAED,UAAU;YACR,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;gBACtB,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAA;gBAC9B,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAA;gBAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAA;aAC5B;SACF;QAED,eAAe;YACb,IAAI,IAAI,CAAC,YAAY,IAAI,iBAAiB,CAAC,KAAK,EAAE;gBAChD,IAAI,CAAC,aAAa,EAAE,CAAA;aACrB;SACF;QAED,gBAAgB;YACd,IAAI,IAAI,CAAC,YAAY,IAAI,iBAAiB,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE;gBACtE,IAAI,CAAC,aAAa,EAAE,CAAA;aACrB;SACF;QAED,mBAAmB;YACjB,IAAI,IAAI,CAAC,YAAY,IAAI,iBAAiB,CAAC,IAAI,EAAE;gBAC/C,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAA;aAChC;iBAAM;gBACL,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAA;gBAC9B,IAAI,CAAC,aAAa,EAAE,CAAA;aACrB;SACF;QAED,MAAM,aAAa;YACjB,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;gBAChG,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAA;gBACnC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAA;gBAChC,IAAI,IAAI,CAAC,SAAS,EAAE;oBAClB,IAAI;wBACF,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;wBAChD,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAA;wBAC9B,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA;wBACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;qBAC1B;oBAAC,OAAO,KAAK,EAAE;wBACd,IAAI,CAAC,UAAU,GAAG,WAAW,CAAA;wBAC7B,MAAM,KAAK,CAAA;qBACZ;iBACF;aACF;SACF;QAED,MAAM,YAAY,CAAC,aAA4B;YAC7C,IAAI,aAAa,CAAC,UAAU,EAAE;gBAC5B,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAA;aAC5C;YAED,IAAI;gBACF,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,YAAY,CAAA;gBAC7C,IAAI,IAAI,EAAE;oBACR,MAAM,EAAE,IAAI,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;oBACxC,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAA;oBAC1E,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;oBACvE,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;iBACjC;aACF;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;gBACpB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAA;aACvB;SACF;QAID,yBAAyB,CAAC,OAAgB;YACxC,IAAI,CAAC,aAAa,EAAE,CAAA;SACrB;QAID,wBAAwB,CAAC,OAAgB,EAAE,GAAW;YACpD,OAAO,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAA;SAC/C;QAED,oBAAoB,CAAC,OAAgB,EAAE,GAAW;YAChD,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;SACjC;QAID,6BAA6B,CAAC,OAAwB,EAAE,SAAmB;YACzE,OAAO,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;SAC1D;QAED,yBAAyB,CAAC,OAAwB,EAAE,SAAuB;YACzE,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;aAC3B;YAED,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA;YAClE,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,EAAE;gBACjD,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;aACvE;iBAAM;gBACL,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,cAAc,CAAA;gBAC5C,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;gBACjE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;aAC5B;SACF;QAID,wBAAwB,CAAC,OAA4B,EAAE,OAAqB;YAC1E,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,EAAE,CAAA;SACjC;QAED,cAAc,CAAC,OAAqB;YAClC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;SACtC;QAED,gCAAgC,CAAC,OAAqB,EAAE,QAAuB;YAC7E,IAAI,CAAC,mBAAmB,EAAE,CAAA;SAC3B;QAED,MAAM,4BAA4B,CAAC,OAAqB,EAAE,QAAuB;YAC/E,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;YACjC,IAAI,CAAC,mBAAmB,EAAE,CAAA;SAC3B;QAED,yBAAyB,CAAC,OAAqB,EAAE,QAAuB;YACtE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YACvB,IAAI,CAAC,mBAAmB,EAAE,CAAA;SAC3B;QAED,cAAc,CAAC,OAAqB,EAAE,KAAY;YAChD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YACpB,IAAI,CAAC,mBAAmB,EAAE,CAAA;SAC3B;QAED,eAAe,CAAC,OAAqB;YACnC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;SACrC;QAID,qBAAqB,CAAC,cAA8B;YAClD,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;YAC/D,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;SAC/B;QAED,mCAAmC,CAAC,cAA8B,EAAE,QAAuB;YACzF,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;YAC/D,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;SACtC;QAED,gCAAgC,CAAC,cAA8B,EAAE,aAA4B;YAC3F,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;SAClD;QAED,qBAAqB,CAAC,cAA8B,EAAE,KAAY;YAChE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;SACrB;QAED,sBAAsB,CAAC,cAA8B;YACnD,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;YAC/D,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;SAC9B;QAID,sBAAsB,CAAC,QAAkB,EAAE,SAAkB;SAE5D;QAED,oBAAoB,CAAC,QAAkB,EAAE,SAAkB;SAE1D;QAED,eAAe;SAEd;QAIO,MAAM,KAAK,CAAC,GAAc;YAChC,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;YAEvE,OAAO,IAAI,OAAO,CAAO,OAAO;gBAC9B,IAAI,CAAC,mBAAmB,GAAG;oBACzB,IAAI,CAAC,mBAAmB,GAAG,SAAQ,CAAA;oBACnC,OAAO,EAAE,CAAA;iBACV,CAAA;gBACD,OAAO,CAAC,OAAO,EAAE,CAAA;aAClB,CAAC,CAAA;SACH;QAEO,aAAa,CAAC,OAAgB,EAAE,GAAW;YACjD,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;YAC5C,KAAK,CAAC,GAAG,GAAG,GAAG,CAAA;SAChB;QAEO,gBAAgB,CAAC,OAAgB;;YACvC,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;YAC1F,aAAO,mBAAmB,CAAC,EAAE,CAAC,mCAAI,IAAI,CAAC,OAAO,CAAA;SAC/C;QAED,MAAM,0BAA0B,CAAC,SAAqB;YACpD,IAAI,OAAO,CAAA;YACX,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAE9B,IAAI;gBACF,IAAI,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC,aAAa,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;oBAC5F,OAAO,OAAO,CAAA;iBACf;gBAED,IAAI,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC,aAAa,CAAC,6BAA6B,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;oBAC3G,MAAM,OAAO,CAAC,MAAM,CAAA;oBACpB,OAAO,MAAM,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAA;iBACtD;gBAED,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,YAAY,CAAC,CAAA;aAC3E;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;aACrB;YAED,OAAO,IAAI,YAAY,EAAE,CAAA;SAC1B;QAEO,yBAAyB,CAAC,OAAgB,EAAE,SAAmB;YACrE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;YAE1F,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,IAAI,MAAM,EAAE;gBACjC,OAAO,KAAK,CAAA;aACb;YAED,IAAI,EAAE,EAAE;gBACN,MAAM,YAAY,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAA;gBAC5C,IAAI,YAAY,EAAE;oBAChB,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAA;iBAC9B;aACF;YAED,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE;gBAChC,OAAO,KAAK,CAAA;aACb;YAED,IAAI,SAAS,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE;gBAC/C,OAAO,KAAK,CAAA;aACb;YAED,OAAO,IAAI,CAAA;SACZ;QAID,IAAI,EAAE;YACJ,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA;SACvB;QAED,IAAI,OAAO;YACT,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;SAC9B;QAED,IAAI,SAAS;YACX,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;gBACpB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAA;aACxB;SACF;QAED,IAAI,SAAS,CAAC,SAA6B;YACzC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;YAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,IAAI,CAAA;YACpC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAA;YAClC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAA;SAC9B;QAED,IAAI,YAAY;YACd,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA;SAC5B;QAED,IAAI,SAAS;YACX,OAAO,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,mBAAmB,EAAE,KAAK,SAAS,CAAA;SACrF;QAED,IAAI,QAAQ;YACV,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAA;SAC/C;KACF;IAED,SAAS,mBAAmB,CAAC,EAAiB;QAC5C,IAAI,EAAE,IAAI,IAAI,EAAE;YACd,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;YAC3C,IAAI,OAAO,YAAY,YAAY,EAAE;gBACnC,OAAO,OAAO,CAAA;aACf;SACF;IACH,CAAC;IAED,SAAS,eAAe,CAAC,OAAuB,EAAE,UAA0B;QAC1E,IAAI,OAAO,EAAE;YACX,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;YACvC,IAAI,GAAG,IAAI,IAAI,IAAI,UAAU,IAAI,IAAI,IAAI,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE;gBACtE,MAAM,IAAI,KAAK,CAAC,6BAA6B,OAAO,CAAC,EAAE,qDAAqD,CAAC,CAAA;aAC9G;YACD,IAAI,OAAO,CAAC,aAAa,KAAK,QAAQ,EAAE;gBACtC,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;aAC7C;YAED,IAAI,OAAO,YAAY,YAAY,EAAE;gBACnC,OAAO,CAAC,iBAAiB,EAAE,CAAA;gBAC3B,OAAO,OAAO,CAAA;aACf;SACF;IACH;;ICjWO,MAAM,aAAa,GAAwD;QAChF,KAAK;YACH,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,2BAAI,CAAC,CAAC,aAAa,0CAAE,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,WAAW,IAAC,CAAC,CAAA;SACrG;QAED,MAAM;YACJ,IAAI,CAAC,6BAA6B,EAAE,CAAA;YACpC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAA;SACjE;QAED,MAAM;YACJ,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,2BAAI,CAAC,CAAC,aAAa,0CAAE,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,IAAC,CAAC,CAAA;SACzF;QAED,OAAO;YACL,IAAI,CAAC,6BAA6B,EAAE,CAAA;YACpC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAA;SAClE;QAED,MAAM;YACJ,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;SAC7C;QAED,OAAO;YACL,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAA;SACtE;QAED,MAAM;YACJ,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;gBAC3B,CAAC,CAAC,SAAS,GAAG,EAAE,CAAA;gBAChB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;aAC/B,CAAC,CAAA;SACH;KACF;;UC9BY,aAAc,SAAQ,WAAW;QAC5C,MAAM,iBAAiB;YACrB,IAAI;gBACF,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;aACpB;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;aACrB;oBAAS;gBACR,IAAI,CAAC,UAAU,EAAE,CAAA;aAClB;SACF;QAID,MAAM,MAAM;;YACV,aAAO,IAAI,CAAC,aAAa,oCAAlB,IAAI,CAAC,aAAa,GAAK,CAAC;gBAC7B,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;oBAC9C,MAAM,kBAAkB,EAAE,CAAA;oBAC1B,IAAI,CAAC,aAAa,EAAE,CAAA;iBACrB;aACF,GAAG,EAAA;SACL;QAED,UAAU;YACR,IAAI;gBAAE,IAAI,CAAC,MAAM,EAAE,CAAA;aAAE;YAAC,WAAM,GAAE;SAC/B;QAED,6BAA6B;YAC3B,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;SAChD;QAED,IAAI,iBAAiB;;YACnB,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YAC9F,MAAM,cAAc,GAAK,CAAC,SAAG,IAAI,CAAC,eAAe,0CAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAA;YAE/F,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;SACnE;QAED,IAAI,aAAa;YACf,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBACjD,IAAI,cAAc,EAAE;oBAClB,OAAO,cAAc,CAAA;iBACtB;gBACD,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;aAC7B;YACD,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;SAC1C;QAED,IAAI,cAAc;YAChB,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,OAAO,IAAI,CAAC,kBAAkB,CAAA;aAC/B;iBAAM,IAAI,IAAI,CAAC,OAAO,EAAE;gBACvB,OAAO,IAAI,CAAC,qBAAqB,CAAA;aAClC;iBAAM;gBACL,IAAI,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAA;aACrD;SACF;QAED,IAAI,eAAe;YACjB,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;SACpD;QAED,IAAI,eAAe;YACjB,IAAI,IAAI,CAAC,iBAAiB,YAAY,mBAAmB,EAAE;gBACzD,OAAO,IAAI,CAAC,iBAAiB,CAAA;aAC9B;YACD,IAAI,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAA;SAC/D;QAED,IAAI,MAAM;YACR,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;SACnC;QAED,IAAI,MAAM;YACR,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;SACnC;QAED,IAAI,OAAO;YACT,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;SACpC;QAEO,KAAK,CAAC,OAAe;YAC3B,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC,CAAA;SACnD;QAED,IAAY,WAAW;;YACrB,aAAO,OAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,mCAAI,EAAE,EAAE,CAAC,CAAC,mCAAI,gBAAgB,CAAA;SACtE;QAED,IAAY,iBAAiB;YAC3B,OAAO,IAAI,WAAW,CAAC,4BAA4B,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;SAC1F;QAED,IAAY,kBAAkB;;YAC5B,MAAM,OAAO,SAAG,IAAI,CAAC,aAAa,0CAAE,cAAc,CAAC,IAAI,CAAC,MAAO,CAAC,CAAA;YAEhE,IAAI,OAAO,KAAK,IAAI,EAAE;gBACpB,OAAO,CAAE,OAAO,CAAE,CAAA;aACnB;iBAAM;gBACL,OAAO,EAAE,CAAA;aACV;SACF;QAED,IAAY,qBAAqB;;YAC/B,MAAM,QAAQ,SAAG,IAAI,CAAC,aAAa,0CAAE,gBAAgB,CAAC,IAAI,CAAC,OAAQ,CAAC,CAAA;YAEpE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;gBACzB,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;aAC5C;iBAAM;gBACL,OAAO,EAAE,CAAA;aACV;SACF;;;IChHH,YAAY,CAAC,mBAAmB,GAAG,eAAe,CAAA;IAKlD,cAAc,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAAA;IAClD,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,aAAa,CAAC;;ICRpD,CAAC;QACC,IAAI,OAAO,GAAmB,QAAQ,CAAC,aAAa,CAAA;QACpD,IAAI,CAAC,OAAO;YAAE,OAAM;QACpB,IAAI,OAAO,CAAC,YAAY,CAAC,6BAA6B,CAAC;YAAE,OAAM;QAE/D,OAAO,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE;YACtC,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;gBAC5B,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAA;;;;;;;;;OAS3B,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;aACtB;SACF;IACH,CAAC,GAAG;;ICdJ,MAAM,OAAO,GAAG,IAAI,OAAO,CAAA;UACrB,EAAE,SAAS,EAAE,GAAG,QAAO;aAGb,KAAK;QACnB,OAAO,CAAC,KAAK,EAAE,CAAA;IACjB,CAAC;aAEe,eAAe,CAAC,OAAgB;QAC9C,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;aAEe,KAAK,CAAC,QAAmB,EAAE,OAA+B;QACxE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAClC,CAAC;aAEe,mBAAmB,CAAC,MAAoB;QACtD,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACrC,CAAC;aAEe,sBAAsB,CAAC,MAAoB;QACzD,OAAO,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAA;IACxC,CAAC;aAEe,mBAAmB,CAAC,OAA+B;QACjE,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;IACtC,CAAC;aAEe,UAAU;QACxB,OAAO,CAAC,UAAU,EAAE,CAAA;IACtB,CAAC;aAEe,mBAAmB,CAAC,KAAa;QAC/C,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA;IACpC;;;;;;;;;;;;;;;ICnCA,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;AACpBA,SAAW,EAAE;;;;;;;;;;;;;;;;;;"}
\No newline at end of file