{ "version": 3, "sources": ["../../../../../../../src/node_modules/@cahmoraes93/maybe/src/index.ts", "../../../../../../../src/node_modules/@cahmoraes93/maybe/src/maybe/index.ts", "../../../../../../../src/node_modules/print-js/dist/webpack:/printJS/webpack/universalModuleDefinition", "../../../../../../../src/node_modules/print-js/dist/webpack:/printJS/webpack/bootstrap", "../../../../../../../src/node_modules/print-js/dist/webpack:/printJS/src/index.js", "../../../../../../../src/node_modules/print-js/dist/webpack:/printJS/src/js/browser.js", "../../../../../../../src/node_modules/print-js/dist/webpack:/printJS/src/js/functions.js", "../../../../../../../src/node_modules/print-js/dist/webpack:/printJS/src/js/html.js", "../../../../../../../src/node_modules/print-js/dist/webpack:/printJS/src/js/image.js", "../../../../../../../src/node_modules/print-js/dist/webpack:/printJS/src/js/init.js", "../../../../../../../src/node_modules/print-js/dist/webpack:/printJS/src/js/json.js", "../../../../../../../src/node_modules/print-js/dist/webpack:/printJS/src/js/modal.js", "../../../../../../../src/node_modules/print-js/dist/webpack:/printJS/src/js/pdf.js", "../../../../../../../src/node_modules/print-js/dist/webpack:/printJS/src/js/print.js", "../../../../../../../src/node_modules/print-js/dist/webpack:/printJS/src/js/raw-html.js", "../../../../../../../src/node_modules/print-js/dist/webpack:/printJS/src/sass/index.scss", "../../../../../../../src/js/i18n/datepicker/jquery.ui.datepicker-nl.js", "../../../../../../../src/js/lib/gettext.js", "../../../../../../../src/js/i18n/nl.js", "../../../../../../../src/js/lib/polyfills/url-search-params.js", "../../../../../../../src/js/lib/text-utils.js", "../../../../../../../src/js/lib/errors.js", "../../../../../../../src/js/lib/tokens.js", "../../../../../../../src/js/lib/baby-lisp.js", "../../../../../../../src/js/lib/lenses.js", "../../../../../../../src/js/lib/functional.js", "../../../../../../../src/js/lib/baby-lisp-apply.js", "../../../../../../../src/js/lib/booleanbucket.js", "../../../../../../../src/js/lib/mode.js", "../../../../../../../src/js/lib/collect-values.js", "../../../../../../../src/js/lib/vars.js", "../../../../../../../src/js/lib/case-exit.js", "../../../../../../../src/js/lib/a11y-user-detect.js", "../../../../../../../src/js/lib/a11y.js", "../../../../../../../src/js/lib/escape.js", "../../../../../../../src/js/lib/notify.js", "../../../../../../../src/js/lib/conf.js", "../../../../../../../src/js/lib/location.js", "../../../../../../../src/js/lib/ajax.js", "../../../../../../../src/js/lib/settled.js", "../../../../../../../src/js/lib/bbi.js", "../../../../../../../src/js/lib/control-helpers.js", "../../../../../../../src/js/lib/quotable.js", "../../../../../../../src/js/lib/dates.js", "../../../../../../../src/js/lib/feature-queries.js", "../../../../../../../src/js/lib/form-widgets.js", "../../../../../../../src/js/lib/dynprops.js", "../../../../../../../src/js/lib/hooks.js", "../../../../../../../src/js/lib/control.js", "../../../../../../../src/js/lib/types.js", "../../../../../../../src/js/lib/control-validation.js", "../../../../../../../src/js/lib/groupings.js", "../../../../../../../src/js/lib/font-classes.js", "../../../../../../../src/js/lib/names.js", "../../../../../../../src/js/lib/form-groups.js", "../../../../../../../src/node_modules/lit-html/src/lit-html.ts", "../../../../../../../src/node_modules/@lit/reactive-element/src/css-tag.ts", "../../../../../../../src/node_modules/@lit/reactive-element/src/reactive-element.ts", "../../../../../../../src/node_modules/lit-element/src/lit-element.ts", "../../../../../../../src/js/lib/form-widgets-definitions.js", "../../../../../../../src/js/lib/numerals.js", "../../../../../../../src/js/lib/url-utils.js", "../../../../../../../src/js/lib/utils.js", "../../../../../../../src/js/lib/jumplist.js", "../../../../../../../src/js/lib/user-info.js", "../../../../../../../src/js/lib/permissions.js", "../../../../../../../src/js/lib/$.scrollTo.js", "../../../../../../../src/js/json.js", "../../../../../../../src/plugins/Dialogue/Dialogue.js", "../../../../../../../src/plugins/a11y-describedby/a11y-describedby.js", "../../../../../../../src/custom/rijks-cyberscan/plugins/a11y-errors/a11y-errors.js", "../../../../../../../src/js/lib/getcurrentchapterid.js", "../../../../../../../src/js/lib/getmetadata.js", "../../../../../../../src/node_modules/proxy-polyfill/proxy.min.js", "../../../../../../../src/js/lib/store.js", "../../../../../../../src/custom/rijks-cyberscan/plugins/actielijst/actielijst.js", "../../../../../../../src/plugins/auto-scroll/auto-scroll.js", "../../../../../../../src/plugins/change-title-on-tab-blur/change-title-on-tab-blur.js", "../../../../../../../src/custom/rijks-cyberscan/plugins/chapters-helper/chapters-helper.js", "../../../../../../../src/plugins/custom-radios/custom-radios.js", "../../../../../../../src/plugins/end-tools/end-tools.js", "../../../../../../../src/plugins/has-no-next-meta/has-no-next-meta.js", "../../../../../../../src/plugins/headings/headings.js", "../../../../../../../src/plugins/history/history.js", "../../../../../../../src/plugins/showdown/showdown.js", "../../../../../../../src/plugins/showdown-converter/showdown-converter.js", "../../../../../../../src/custom/rijks-cyberscan/plugins/info-sources/info-sources.js", "../../../../../../../src/custom/rijks-cyberscan/plugins/infographics/infographics.js", "../../../../../../../src/plugins/md-labels/md-labels.js", "../../../../../../../src/plugins/metadata-change-navtext/metadata-change-navtext.js", "../../../../../../../src/plugins/metadata-scoring/metadata-scoring.js", "../../../../../../../src/plugins/metaprogress/metaprogress.js", "../../../../../../../src/node_modules/ramda/es/internal/_isPlaceholder.js", "../../../../../../../src/node_modules/ramda/es/internal/_curry1.js", "../../../../../../../src/node_modules/ramda/es/internal/_curry2.js", "../../../../../../../src/node_modules/ramda/es/internal/_has.js", "../../../../../../../src/node_modules/ramda/es/hasPath.js", "../../../../../../../src/node_modules/ramda/es/has.js", "../../../../../../../src/plugins/mis-click-count/mis-click-count.js", "../../../../../../../src/plugins/mustache/mustache.js", "../../../../../../../src/plugins/nodename-css/nodename-css.js", "../../../../../../../src/plugins/non-indenting-jumplist/non-indenting-jumplist.js", "../../../../../../../src/custom/nta/plugins/dynamic-menu-items/clearmenu.js", "../../../../../../../src/custom/nta/plugins/dynamic-menu-items/createmenu.js", "../../../../../../../src/custom/nta/plugins/dynamic-menu-items/dynamic-menu-items.js", "../../../../../../../src/custom/nta/plugins/mopinion/mopinion.js", "../../../../../../../src/custom/nta/plugins/proxymap/proxymap.js", "../../../../../../../src/custom/nta/plugins/path-to-modelname/path-to-modelname.js", "../../../../../../../src/custom/nta/plugins/rijksoverheidshuisstijlfonts/rijksoverheidshuisstijlfonts.js", "../../../../../../../src/plugins/questionlabelgroup-ng/questionlabelgroup-ng.js", "../../../../../../../src/custom/rijks-cyberscan/plugins/record-link/record-link.js", "../../../../../../../src/plugins/savecase-email-link-popup/savecase-email-link-popup.js"], "sourcesContent": ["export { default as Maybe } from './maybe'\r\n", "type CallbackM = (value: T) => K\ntype CallbackChainM = (value: T) => Maybe\n\nexport default class Maybe {\n constructor(private value: T) {}\n\n public static of(value: T): Maybe {\n return new Maybe(value)\n }\n\n public map(callbackMap: CallbackM): Maybe {\n if (this.isEmpty()) return Maybe.of(null) as Maybe\n return Maybe.of(callbackMap(this.value))\n }\n\n public chain(callbackChain: CallbackChainM): Maybe {\n const chained = this.map(callbackChain).join() as Maybe\n if (chained === null) return Maybe.of(null) as Maybe\n return chained\n }\n\n public getOrElse(defaultValue: K): T | K {\n return this.isEmpty() ? defaultValue : this.value\n }\n\n private join(): T {\n return this.value\n }\n\n private isEmpty(): boolean {\n return this.value === null || this.value === undefined\n }\n}\n", "(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"printJS\"] = factory();\n\telse\n\t\troot[\"printJS\"] = factory();\n})(window, function() {\nreturn ", " \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n", "import './sass/index.scss'\nimport print from './js/init'\n\nconst printJS = print.init\n\nif (typeof window !== 'undefined') {\n window.printJS = printJS\n}\n\nexport default printJS\n", "const Browser = {\n // Firefox 1.0+\n isFirefox: () => {\n return typeof InstallTrigger !== 'undefined'\n },\n // Internet Explorer 6-11\n isIE: () => {\n return navigator.userAgent.indexOf('MSIE') !== -1 || !!document.documentMode\n },\n // Edge 20+\n isEdge: () => {\n return !Browser.isIE() && !!window.StyleMedia\n },\n // Chrome 1+\n isChrome: (context = window) => {\n return !!context.chrome\n },\n // At least Safari 3+: \"[object HTMLElementConstructor]\"\n isSafari: () => {\n return Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0 ||\n navigator.userAgent.toLowerCase().indexOf('safari') !== -1\n },\n // IOS Chrome\n isIOSChrome: () => {\n return navigator.userAgent.toLowerCase().indexOf('crios') !== -1\n }\n}\n\nexport default Browser\n", "import Modal from './modal'\nimport Browser from './browser'\n\nexport function addWrapper (htmlData, params) {\n const bodyStyle = 'font-family:' + params.font + ' !important; font-size: ' + params.font_size + ' !important; width:100%;'\n return '
' + htmlData + '
'\n}\n\nexport function capitalizePrint (obj) {\n return obj.charAt(0).toUpperCase() + obj.slice(1)\n}\n\nexport function collectStyles (element, params) {\n const win = document.defaultView || window\n\n // String variable to hold styling for each element\n let elementStyle = ''\n\n // Loop over computed styles\n const styles = win.getComputedStyle(element, '')\n\n for (let key = 0; key < styles.length; key++) {\n // Check if style should be processed\n if (params.targetStyles.indexOf('*') !== -1 || params.targetStyle.indexOf(styles[key]) !== -1 || targetStylesMatch(params.targetStyles, styles[key])) {\n if (styles.getPropertyValue(styles[key])) elementStyle += styles[key] + ':' + styles.getPropertyValue(styles[key]) + ';'\n }\n }\n\n // Print friendly defaults (deprecated)\n elementStyle += 'max-width: ' + params.maxWidth + 'px !important; font-size: ' + params.font_size + ' !important;'\n\n return elementStyle\n}\n\nfunction targetStylesMatch (styles, value) {\n for (let i = 0; i < styles.length; i++) {\n if (typeof value === 'object' && value.indexOf(styles[i]) !== -1) return true\n }\n return false\n}\n\nexport function addHeader (printElement, params) {\n // Create the header container div\n const headerContainer = document.createElement('div')\n\n // Check if the header is text or raw html\n if (isRawHTML(params.header)) {\n headerContainer.innerHTML = params.header\n } else {\n // Create header element\n const headerElement = document.createElement('h1')\n\n // Create header text node\n const headerNode = document.createTextNode(params.header)\n\n // Build and style\n headerElement.appendChild(headerNode)\n headerElement.setAttribute('style', params.headerStyle)\n headerContainer.appendChild(headerElement)\n }\n\n printElement.insertBefore(headerContainer, printElement.childNodes[0])\n}\n\nexport function cleanUp (params) {\n // If we are showing a feedback message to user, remove it\n if (params.showModal) Modal.close()\n\n // Check for a finished loading hook function\n if (params.onLoadingEnd) params.onLoadingEnd()\n\n // If preloading pdf files, clean blob url\n if (params.showModal || params.onLoadingStart) window.URL.revokeObjectURL(params.printable)\n\n // Run onPrintDialogClose callback\n let event = 'mouseover'\n\n if (Browser.isChrome() || Browser.isFirefox()) {\n // Ps.: Firefox will require an extra click in the document to fire the focus event.\n event = 'focus'\n }\n\n const handler = () => {\n // Make sure the event only happens once.\n window.removeEventListener(event, handler)\n\n params.onPrintDialogClose()\n\n // Remove iframe from the DOM\n const iframe = document.getElementById(params.frameId)\n\n if (iframe) {\n iframe.remove()\n }\n }\n\n window.addEventListener(event, handler)\n}\n\nexport function isRawHTML (raw) {\n const regexHtml = new RegExp('<([A-Za-z][A-Za-z0-9]*)\\\\b[^>]*>(.*?)')\n return regexHtml.test(raw)\n}\n", "import { collectStyles, addHeader } from './functions'\nimport Print from './print'\n\nexport default {\n print: (params, printFrame) => {\n // Get the DOM printable element\n const printElement = isHtmlElement(params.printable) ? params.printable : document.getElementById(params.printable)\n\n // Check if the element exists\n if (!printElement) {\n window.console.error('Invalid HTML element id: ' + params.printable)\n return\n }\n\n // Clone the target element including its children (if available)\n params.printableElement = cloneElement(printElement, params)\n\n // Add header\n if (params.header) {\n addHeader(params.printableElement, params)\n }\n\n // Print html element contents\n Print.send(params, printFrame)\n }\n}\n\nfunction cloneElement (element, params) {\n // Clone the main node (if not already inside the recursion process)\n const clone = element.cloneNode()\n\n // Loop over and process the children elements / nodes (including text nodes)\n const childNodesArray = Array.prototype.slice.call(element.childNodes)\n for (let i = 0; i < childNodesArray.length; i++) {\n // Check if we are skipping the current element\n if (params.ignoreElements.indexOf(childNodesArray[i].id) !== -1) {\n continue\n }\n\n // Clone the child element\n const clonedChild = cloneElement(childNodesArray[i], params)\n\n // Attach the cloned child to the cloned parent node\n clone.appendChild(clonedChild)\n }\n\n // Get all styling for print element (for nodes of type element only)\n if (params.scanStyles && element.nodeType === 1) {\n clone.setAttribute('style', collectStyles(element, params))\n }\n\n // Check if the element needs any state processing (copy user input data)\n switch (element.tagName) {\n case 'SELECT':\n // Copy the current selection value to its clone\n clone.value = element.value\n break\n case 'CANVAS':\n // Copy the canvas content to its clone\n clone.getContext('2d').drawImage(element, 0, 0)\n break\n }\n\n return clone\n}\n\nfunction isHtmlElement (printable) {\n // Check if element is instance of HTMLElement or has nodeType === 1 (for elements in iframe)\n return typeof printable === 'object' && printable && (printable instanceof HTMLElement || printable.nodeType === 1)\n}\n", "import { addHeader } from './functions'\nimport Print from './print'\nimport Browser from './browser'\n\nexport default {\n print: (params, printFrame) => {\n // Check if we are printing one image or multiple images\n if (params.printable.constructor !== Array) {\n // Create array with one image\n params.printable = [params.printable]\n }\n\n // Create printable element (container)\n params.printableElement = document.createElement('div')\n\n // Create all image elements and append them to the printable container\n params.printable.forEach(src => {\n // Create the image element\n const img = document.createElement('img')\n img.setAttribute('style', params.imageStyle)\n\n // Set image src with the file url\n img.src = src\n\n // The following block is for Firefox, which for some reason requires the image's src to be fully qualified in\n // order to print it\n if (Browser.isFirefox()) {\n const fullyQualifiedSrc = img.src\n img.src = fullyQualifiedSrc\n }\n\n // Create the image wrapper\n const imageWrapper = document.createElement('div')\n\n // Append image to the wrapper element\n imageWrapper.appendChild(img)\n\n // Append wrapper to the printable element\n params.printableElement.appendChild(imageWrapper)\n })\n\n // Check if we are adding a print header\n if (params.header) addHeader(params.printableElement, params)\n\n // Print image\n Print.send(params, printFrame)\n }\n}\n", "'use strict'\n\nimport Browser from './browser'\nimport Modal from './modal'\nimport Pdf from './pdf'\nimport Html from './html'\nimport RawHtml from './raw-html'\nimport Image from './image'\nimport Json from './json'\n\nconst printTypes = ['pdf', 'html', 'image', 'json', 'raw-html']\n\nexport default {\n init () {\n const params = {\n printable: null,\n fallbackPrintable: null,\n type: 'pdf',\n header: null,\n headerStyle: 'font-weight: 300;',\n maxWidth: 800,\n properties: null,\n gridHeaderStyle: 'font-weight: bold; padding: 5px; border: 1px solid #dddddd;',\n gridStyle: 'border: 1px solid lightgray; margin-bottom: -1px;',\n showModal: false,\n onError: (error) => { throw error },\n onLoadingStart: null,\n onLoadingEnd: null,\n onPrintDialogClose: () => {},\n onIncompatibleBrowser: () => {},\n modalMessage: 'Retrieving Document...',\n frameId: 'printJS',\n printableElement: null,\n documentTitle: 'Document',\n targetStyle: ['clear', 'display', 'width', 'min-width', 'height', 'min-height', 'max-height'],\n targetStyles: ['border', 'box', 'break', 'text-decoration'],\n ignoreElements: [],\n repeatTableHeader: true,\n css: null,\n style: null,\n scanStyles: true,\n base64: false,\n\n // Deprecated\n onPdfOpen: null,\n font: 'TimesNewRoman',\n font_size: '12pt',\n honorMarginPadding: true,\n honorColor: false,\n imageStyle: 'max-width: 100%;'\n }\n\n // Check if a printable document or object was supplied\n const args = arguments[0]\n if (args === undefined) {\n throw new Error('printJS expects at least 1 attribute.')\n }\n\n // Process parameters\n switch (typeof args) {\n case 'string':\n params.printable = encodeURI(args)\n params.fallbackPrintable = params.printable\n params.type = arguments[1] || params.type\n break\n case 'object':\n params.printable = args.printable\n params.fallbackPrintable = typeof args.fallbackPrintable !== 'undefined' ? args.fallbackPrintable : params.printable\n params.fallbackPrintable = params.base64 ? `data:application/pdf;base64,${params.fallbackPrintable}` : params.fallbackPrintable\n for (var k in params) {\n if (k === 'printable' || k === 'fallbackPrintable') continue\n\n params[k] = typeof args[k] !== 'undefined' ? args[k] : params[k]\n }\n break\n default:\n throw new Error('Unexpected argument type! Expected \"string\" or \"object\", got ' + typeof args)\n }\n\n // Validate printable\n if (!params.printable) throw new Error('Missing printable information.')\n\n // Validate type\n if (!params.type || typeof params.type !== 'string' || printTypes.indexOf(params.type.toLowerCase()) === -1) {\n throw new Error('Invalid print type. Available types are: pdf, html, image and json.')\n }\n\n // Check if we are showing a feedback message to the user (useful for large files)\n if (params.showModal) Modal.show(params)\n\n // Check for a print start hook function\n if (params.onLoadingStart) params.onLoadingStart()\n\n // To prevent duplication and issues, remove any used printFrame from the DOM\n const usedFrame = document.getElementById(params.frameId)\n\n if (usedFrame) usedFrame.parentNode.removeChild(usedFrame)\n\n // Create a new iframe for the print job\n const printFrame = document.createElement('iframe')\n\n if (Browser.isFirefox()) {\n // Set the iframe to be is visible on the page (guaranteed by fixed position) but hidden using opacity 0, because\n // this works in Firefox. The height needs to be sufficient for some part of the document other than the PDF\n // viewer's toolbar to be visible in the page\n printFrame.setAttribute('style', 'width: 1px; height: 100px; position: fixed; left: 0; top: 0; opacity: 0; border-width: 0; margin: 0; padding: 0')\n } else {\n // Hide the iframe in other browsers\n printFrame.setAttribute('style', 'visibility: hidden; height: 0; width: 0; position: absolute; border: 0')\n }\n\n // Set iframe element id\n printFrame.setAttribute('id', params.frameId)\n\n // For non pdf printing, pass an html document string to srcdoc (force onload callback)\n if (params.type !== 'pdf') {\n printFrame.srcdoc = '' + params.documentTitle + ''\n\n // Attach css files\n if (params.css) {\n // Add support for single file\n if (!Array.isArray(params.css)) params.css = [params.css]\n\n // Create link tags for each css file\n params.css.forEach(file => {\n printFrame.srcdoc += ''\n })\n }\n\n printFrame.srcdoc += ''\n }\n\n // Check printable type\n switch (params.type) {\n case 'pdf':\n // Check browser support for pdf and if not supported we will just open the pdf file instead\n if (Browser.isIE()) {\n try {\n console.info('Print.js doesn\\'t support PDF printing in Internet Explorer.')\n const win = window.open(params.fallbackPrintable, '_blank')\n win.focus()\n params.onIncompatibleBrowser()\n } catch (error) {\n params.onError(error)\n } finally {\n // Make sure there is no loading modal opened\n if (params.showModal) Modal.close()\n if (params.onLoadingEnd) params.onLoadingEnd()\n }\n } else {\n Pdf.print(params, printFrame)\n }\n break\n case 'image':\n Image.print(params, printFrame)\n break\n case 'html':\n Html.print(params, printFrame)\n break\n case 'raw-html':\n RawHtml.print(params, printFrame)\n break\n case 'json':\n Json.print(params, printFrame)\n break\n }\n }\n}\n", "import { capitalizePrint, addHeader } from './functions'\nimport Print from './print'\n\nexport default {\n print: (params, printFrame) => {\n // Check if we received proper data\n if (typeof params.printable !== 'object') {\n throw new Error('Invalid javascript data object (JSON).')\n }\n\n // Validate repeatTableHeader\n if (typeof params.repeatTableHeader !== 'boolean') {\n throw new Error('Invalid value for repeatTableHeader attribute (JSON).')\n }\n\n // Validate properties\n if (!params.properties || !Array.isArray(params.properties)) {\n throw new Error('Invalid properties array for your JSON data.')\n }\n\n // We will format the property objects to keep the JSON api compatible with older releases\n params.properties = params.properties.map(property => {\n return {\n field: typeof property === 'object' ? property.field : property,\n displayName: typeof property === 'object' ? property.displayName : property,\n columnSize: typeof property === 'object' && property.columnSize ? property.columnSize + ';' : 100 / params.properties.length + '%;'\n }\n })\n\n // Create a print container element\n params.printableElement = document.createElement('div')\n\n // Check if we are adding a print header\n if (params.header) {\n addHeader(params.printableElement, params)\n }\n\n // Build the printable html data\n params.printableElement.innerHTML += jsonToHTML(params)\n\n // Print the json data\n Print.send(params, printFrame)\n }\n}\n\nfunction jsonToHTML (params) {\n // Get the row and column data\n const data = params.printable\n const properties = params.properties\n\n // Create a html table\n let htmlData = ''\n\n // Check if the header should be repeated\n if (params.repeatTableHeader) {\n htmlData += ''\n }\n\n // Add the table header row\n htmlData += ''\n\n // Add the table header columns\n for (let a = 0; a < properties.length; a++) {\n htmlData += ''\n }\n\n // Add the closing tag for the table header row\n htmlData += ''\n\n // If the table header is marked as repeated, add the closing tag\n if (params.repeatTableHeader) {\n htmlData += ''\n }\n\n // Create the table body\n htmlData += ''\n\n // Add the table data rows\n for (let i = 0; i < data.length; i++) {\n // Add the row starting tag\n htmlData += ''\n\n // Print selected properties only\n for (let n = 0; n < properties.length; n++) {\n let stringData = data[i]\n\n // Support nested objects\n const property = properties[n].field.split('.')\n if (property.length > 1) {\n for (let p = 0; p < property.length; p++) {\n stringData = stringData[property[p]]\n }\n } else {\n stringData = stringData[properties[n].field]\n }\n\n // Add the row contents and styles\n htmlData += ''\n }\n\n // Add the row closing tag\n htmlData += ''\n }\n\n // Add the table and body closing tags\n htmlData += '
' + capitalizePrint(properties[a].displayName) + '
' + stringData + '
'\n\n return htmlData\n}\n", "const Modal = {\n show (params) {\n // Build modal\n const modalStyle = 'font-family:sans-serif; ' +\n 'display:table; ' +\n 'text-align:center; ' +\n 'font-weight:300; ' +\n 'font-size:30px; ' +\n 'left:0; top:0;' +\n 'position:fixed; ' +\n 'z-index: 9990;' +\n 'color: #0460B5; ' +\n 'width: 100%; ' +\n 'height: 100%; ' +\n 'background-color:rgba(255,255,255,.9);' +\n 'transition: opacity .3s ease;'\n\n // Create wrapper\n const printModal = document.createElement('div')\n printModal.setAttribute('style', modalStyle)\n printModal.setAttribute('id', 'printJS-Modal')\n\n // Create content div\n const contentDiv = document.createElement('div')\n contentDiv.setAttribute('style', 'display:table-cell; vertical-align:middle; padding-bottom:100px;')\n\n // Add close button (requires print.css)\n const closeButton = document.createElement('div')\n closeButton.setAttribute('class', 'printClose')\n closeButton.setAttribute('id', 'printClose')\n contentDiv.appendChild(closeButton)\n\n // Add spinner (requires print.css)\n const spinner = document.createElement('span')\n spinner.setAttribute('class', 'printSpinner')\n contentDiv.appendChild(spinner)\n\n // Add message\n const messageNode = document.createTextNode(params.modalMessage)\n contentDiv.appendChild(messageNode)\n\n // Add contentDiv to printModal\n printModal.appendChild(contentDiv)\n\n // Append print modal element to document body\n document.getElementsByTagName('body')[0].appendChild(printModal)\n\n // Add event listener to close button\n document.getElementById('printClose').addEventListener('click', function () {\n Modal.close()\n })\n },\n close () {\n const printModal = document.getElementById('printJS-Modal')\n\n if (printModal) {\n printModal.parentNode.removeChild(printModal)\n }\n }\n}\n\nexport default Modal\n", "import Print from './print'\nimport { cleanUp } from './functions'\n\nexport default {\n print: (params, printFrame) => {\n // Check if we have base64 data\n if (params.base64) {\n const bytesArray = Uint8Array.from(atob(params.printable), c => c.charCodeAt(0))\n createBlobAndPrint(params, printFrame, bytesArray)\n return\n }\n\n // Format pdf url\n params.printable = /^(blob|http|\\/\\/)/i.test(params.printable)\n ? params.printable\n : window.location.origin + (params.printable.charAt(0) !== '/' ? '/' + params.printable : params.printable)\n\n // Get the file through a http request (Preload)\n const req = new window.XMLHttpRequest()\n req.responseType = 'arraybuffer'\n\n req.addEventListener('error', () => {\n cleanUp(params)\n params.onError(req.statusText, req)\n\n // Since we don't have a pdf document available, we will stop the print job\n })\n\n req.addEventListener('load', () => {\n // Check for errors\n if ([200, 201].indexOf(req.status) === -1) {\n cleanUp(params)\n params.onError(req.statusText, req)\n\n // Since we don't have a pdf document available, we will stop the print job\n return\n }\n\n // Print requested document\n createBlobAndPrint(params, printFrame, req.response)\n })\n\n req.open('GET', params.printable, true)\n req.send()\n }\n}\n\nfunction createBlobAndPrint (params, printFrame, data) {\n // Pass response or base64 data to a blob and create a local object url\n let localPdf = new window.Blob([data], { type: 'application/pdf' })\n localPdf = window.URL.createObjectURL(localPdf)\n\n // Set iframe src with pdf document url\n printFrame.setAttribute('src', localPdf)\n\n Print.send(params, printFrame)\n}\n", "import Browser from './browser'\nimport { cleanUp } from './functions'\n\nconst Print = {\n send: (params, printFrame) => {\n // Append iframe element to document body\n document.getElementsByTagName('body')[0].appendChild(printFrame)\n\n // Get iframe element\n const iframeElement = document.getElementById(params.frameId)\n\n // Wait for iframe to load all content\n iframeElement.onload = () => {\n if (params.type === 'pdf') {\n // Add a delay for Firefox. In my tests, 1000ms was sufficient but 100ms was not\n if (Browser.isFirefox()) {\n setTimeout(() => performPrint(iframeElement, params), 1000)\n } else {\n performPrint(iframeElement, params)\n }\n return\n }\n\n // Get iframe element document\n let printDocument = (iframeElement.contentWindow || iframeElement.contentDocument)\n if (printDocument.document) printDocument = printDocument.document\n\n // Append printable element to the iframe body\n printDocument.body.appendChild(params.printableElement)\n\n // Add custom style\n if (params.type !== 'pdf' && params.style) {\n // Create style element\n const style = document.createElement('style')\n style.innerHTML = params.style\n\n // Append style element to iframe's head\n printDocument.head.appendChild(style)\n }\n\n // If printing images, wait for them to load inside the iframe\n const images = printDocument.getElementsByTagName('img')\n\n if (images.length > 0) {\n loadIframeImages(Array.from(images)).then(() => performPrint(iframeElement, params))\n } else {\n performPrint(iframeElement, params)\n }\n }\n }\n}\n\nfunction performPrint (iframeElement, params) {\n try {\n iframeElement.focus()\n\n // If Edge or IE, try catch with execCommand\n if (Browser.isEdge() || Browser.isIE()) {\n try {\n iframeElement.contentWindow.document.execCommand('print', false, null)\n } catch (e) {\n iframeElement.contentWindow.print()\n }\n } else {\n // Other browsers\n iframeElement.contentWindow.print()\n }\n } catch (error) {\n params.onError(error)\n } finally {\n if (Browser.isFirefox()) {\n // Move the iframe element off-screen and make it invisible\n iframeElement.style.visibility = 'hidden'\n iframeElement.style.left = '-1px'\n }\n\n cleanUp(params)\n }\n}\n\nfunction loadIframeImages (images) {\n const promises = images.map(image => {\n if (image.src && image.src !== window.location.href) {\n return loadIframeImage(image)\n }\n })\n\n return Promise.all(promises)\n}\n\nfunction loadIframeImage (image) {\n return new Promise(resolve => {\n const pollImage = () => {\n !image || typeof image.naturalWidth === 'undefined' || image.naturalWidth === 0 || !image.complete\n ? setTimeout(pollImage, 500)\n : resolve()\n }\n pollImage()\n })\n}\n\nexport default Print\n", "import Print from './print'\n\nexport default {\n print: (params, printFrame) => {\n // Create printable element (container)\n params.printableElement = document.createElement('div')\n params.printableElement.setAttribute('style', 'width:100%')\n\n // Set our raw html as the printable element inner html content\n params.printableElement.innerHTML = params.printable\n\n // Print html contents\n Print.send(params, printFrame)\n }\n}\n", "// extracted by mini-css-extract-plugin", "/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */\n/* Written by Mathias Bynens */\njQuery(function($){\n\t$.datepicker.regional.nl = {\n\t\tcloseText: 'Sluiten',\n\t\tprevText: '\u2190',\n\t\tnextText: '\u2192',\n\t\tcurrentText: 'Vandaag',\n\t\tmonthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',\n\t\t'juli', 'augustus', 'september', 'oktober', 'november', 'december'],\n\t\tmonthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',\n\t\t'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],\n\t\tdayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],\n\t\tdayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],\n\t\tdayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],\n\t\tweekHeader: 'Wk',\n\t\tdateFormat: 'dd-mm-yy',\n\t\tfirstDay: 1,\n\t\tisRTL: false,\n\t\tshowMonthAfterYear: false,\n\t\tyearSuffix: ''};\n\t$.datepicker.setDefaults($.datepicker.regional.nl);\n});\n", "/******* Translations ******/\n\nconst dicts = {};\n\nlet dict = {};\n\n// gettext stub\nfunction _(s, fb) {\n return dict[s] || fb || s;\n}\n\n_.tagged = (strings, ...values) =>\n strings.reduce((acc, cur, idx) => acc + cur + _(values[idx] || \"\"), \"\");\n\n_.taggedWithin =\n prefix =>\n (strings, ...values) =>\n strings.reduce(\n (acc, cur, idx) =>\n acc +\n cur +\n (_(prefix, { [values[idx]]: values[idx] })[values[idx]] ||\n values[idx] ||\n \"\"),\n \"\"\n );\n\n_.set = function (ob) {\n const lang = ob[\"lang\"] || _(\"lang\"); // Either provided or current lang?\n if (!dicts[lang]) {\n dicts[lang] = {};\n }\n for (let [key, val] of Object.entries(ob)) {\n // Set only if not set before (by _.set, or by _.addTranslations)\n dicts[lang][key] || (dicts[lang][key] = val);\n }\n dict = dicts[lang];\n};\n\n_.addTranslations = function (translations) {\n for (var term in translations) {\n if (translations.hasOwnProperty(term))\n for (var lang in translations[term]) {\n if (!dicts[lang]) dicts[lang] = {};\n // Always override what has been set before\n dicts[lang][term] = translations[term][lang];\n }\n }\n};\n\nObject.freeze(_);\n\nexport { _ };\n", "import { _ } from \"$json/lib/gettext\";\n\nconst strings = {\n \"lang\": \"nl\",\n \"Doubleclick to go back to this question\":\n \"Dubbelklikken om naar deze vraag terug te springen\",\n \"create a new case\": \"maak een nieuwe casus aan\",\n \"new\": \"nieuw\",\n \"Delete\": \"Verwijder\",\n \"case\": \"casus\",\n \"cases\": \"casus\",\n \"Last opened\": \"Laatst geopend\",\n \"created\": \"gemaakt\",\n \"report\": \"rapport\",\n \"Sun\": \"Zo\",\n \"Mon\": \"Ma\",\n \"Tue\": \"Di\",\n \"Wed\": \"Wo\",\n \"Thu\": \"Do\",\n \"Fri\": \"Vr\",\n \"Sat\": \"Za\",\n \"Jan\": \"Jan\",\n \"Feb\": \"Feb\",\n \"Mar\": \"Maart\",\n \"Apr\": \"April\",\n \"May\": \"Mei\",\n \"June\": \"Juni\",\n \"July\": \"Juli\",\n \"Aug\": \"Aug\",\n \"Sep\": \"Sep\",\n \"Oct\": \"Okt\",\n \"Nov\": \"Nov\",\n \"Dec\": \"Dec\",\n \"press enter to accept\": \"accepteer met ENTER\",\n \"filter cases by name\": \"zoek casus op naam\",\n \"field--value\": \"deze waarde\",\n \"field--date\": \"deze datum\",\n \"field--field\": \"dit veld\",\n \"field--list\": \"deze opties\",\n \"quoted--value\": \"de waarde \u201C{quotable}\u201D\",\n \"quoted--date\": \"de datum \u201C{quotable}\u201D\",\n \"quoted--field\": \"het veld \u201C{quotable}\u201D\",\n \"quoted--list\": \"de opties in \u201C{quotable}\u201D\",\n \"Date required\":\n \"{quotable--init} is verplicht; gebruik het formaat dd\u200A-\u200Amm\u200A-\u200Aj\u200Aj\u200Aj\u200Aj.\",\n \"Input required\": \"{quotable--init} is verplicht\",\n \"Choice required\": \"Keuze uit {quotable} is verplicht\",\n \"Field required\": \"{quotable--init} is verplicht\",\n \"Value has to lie between {minimum} and {maximum}\":\n \"{quotable--init} moet tussen {minimum} en {maximum} liggen\",\n \"Date has to lie between {minimum} and {maximum}\":\n \"{quotable--init} moet tussen {minimum} en {maximum} liggen; gebruik het formaat dd-mm-jjjj.\",\n \"Negative number or zero expected\":\n \"{quotable--init} moet negatief zijn of nul\",\n \"Negative number expected\": \"{quotable--init} moet negatief zijn\",\n \"Value has to lie below {maximum}\":\n \"{quotable--init} moet lager zijn dan {maximum+1}\",\n \"Positive number or zero expected\": \"{quotable} moet positief zijn of nul\",\n \"Positive number expected\": \"{quotable} moet hoger zijn dan nul\",\n \"Value has to lie above {minimum}\":\n \"{quotable--init} moet hoger zijn dan {minimum-1}\",\n \"A date after {maximum} is not allowed\":\n \"{quotable--init} n\u00E1 {maximum} is niet toegestaan; gebruik het formaat dd-mm-jjjj.\",\n \"A date before {minimum} is not allowed\":\n \"{quotable--init} v\u00F3\u00F3r {minimum} is niet toegestaan; gebruik het formaat dd-mm-jjjj.\",\n \"Invalid date\":\n \"{quotable--init} is ongeldig; gebruik het formaat dd-mm-jjjj.\",\n \"Invalid number\": \"{quotable--init} is geen getal\",\n \"Text length exceeds the maximum of {0} characters\":\n \"{quotable--init} mag maximaal {maxlength} karakters bevatten\",\n \"click for more...\": \"klik voor meer...\",\n \" (click to open link)\": \" (klik om link te openen)\",\n \"Are you sure? This will reset all values.\":\n \"Weet u het zeker? Dit zal alle ingevulde velden leegmaken.\",\n \"Yesterday\": \"Gisteren\",\n \"No valid session\": \"Ongeldige gebruikersnaam of wachtwoord\",\n \"Maximum allowed characters: {0}\": \"Maximaal {0} karakters toegestaan\",\n \"No interfaces to show\":\n \"Geen zichtbare elementen (vragen, tekstvelden) gedefinieerd\",\n // feedback\n \"Feedback\": \"Feedback\",\n \"describe the problem\": \"omschrijf het probleem\",\n \"Please do not collate issues.\": \"Een melding per keer!\",\n \"Please send only feedback about the currently visible question or questions; information about these will be sent back to the developers.\":\n \"Geef alleen feedback over de vraag of vragen die je op dit moment op je scherm ziet; informatie over die vragen wordt namelijk meegezonden naar de ontwikkelaars.\",\n \"send\": \"verstuur\",\n \"Thanks for your feedback!\": \"Bedankt voor uw melding!\",\n \"Interface has failed (probably a failing SOAP or database connection)\":\n \"Interface gefaald (waarschijnlijk een falende SOAP- of databasekoppeling)\",\n \"Choose...\": \"Kies...\",\n \"Choose or type...\": \"Kies of typ...\",\n \"cUMWrongUserNamePassword\": \"Ongeldige gebruikersnaam of wachtwoord\",\n \"cWebCaseIsRunning\":\n \"Casus laden is niet gelukt; deze casus wordt al gedraaid in een andere sessie\",\n \"The model you are trying to open does not exist\":\n \"Het beslismodel dat u probeert te openen bestaat niet\",\n \"cWebIllegalAccess\": \"Je mag deze casus niet starten of openen.\",\n \"You may now safely close this window\": \"U kunt het venster nu sluiten\",\n \"user name\": \"gebruikersnaam\",\n \"password\": \"wachtwoord\",\n \"Your models\": \"Uw modellen\",\n \"Your sessions\": \"Uw sessies\",\n \"log in\": \"inloggen\",\n \"load session\": \"Lees uw gegevens in\",\n \"load\": \"inlezen\",\n \"Choose the session file you saved earlier\":\n \"Kies het gegevensbestand dat u de vorige keer hebt opgeslagen\",\n \"Error loading session (wrong data)\":\n \"Inlezen gegevens mislukt (verkeerde gegevens).\",\n \"Please login\": \"Gelieve in te loggen\",\n \"open\": \"open\",\n \"copy\": \"kopie\",\n 'You have no tickets left for model \"{0}\"':\n 'Uw strippenkaart voor model \"{0}\" is op',\n \"__digitgroupingchar__\": \".\",\n \"__radixpoint__\": \",\",\n \"__digitgroupingrules__\": [3],\n \"attachments\": \"bijlagen\",\n \"your documents\": \"uw documenten\",\n \"saved sessions\": \"bewaarde sessies\",\n \"We are currently updating. Please try again later.\":\n \"Er is momenteel een update aan de gang, probeert u het binnenkort nogmaals.\",\n \"case name\": \"casusnaam\",\n \"dateplaceholder\": \"dd\u200A-\u200Amm\u200A-\u200Aj\u200Aj\u200Aj\u200Aj\",\n \"Error: No response from server, server probably down\":\n \"Fout: Server is tijdelijk buiten gebruik. U moet zich opnieuw aanmelden.\",\n \"Session has timed out. Please log in again.\":\n \"De sessie is afgelopen. U moet zich opnieuw aanmelden.\",\n \"first {0} results\": \"eerste {0} resultaten\",\n \"previous {0} results\": \"vorige {0} resultaten\",\n \"next {0} results\": \"volgende {0} resultaten\",\n \"last {0} results\": \"laatste {0} resultaten\",\n \"results {0} to {1} from {2}\": \"resultaten {0} tot {1} van {2}\",\n \"add row\": \"Voeg rij toe\",\n \"insert row\": \"voeg rij in\",\n \"delete row\": \"verwijder rij\",\n \"There are errors, please double check your answers.\":\n \"Er zijn nog fouten, gelieve uw antwoorden nogmaals na te gaan.\",\n \"cancel\": \"annuleer\",\n \"Something went wrong; see the server log for more information.\":\n \"Er is iets misgegaan; bekijk de server log voor meer informatie\"\n};\n\n_.set(strings);\n\nexport { strings };\n", "/*! (c) Andrea Giammarchi - ISC */\nvar self = window || /* istanbul ignore next */ {};\ntry {\n (function (URLSearchParams, plus) {\n if (\n new URLSearchParams(\"q=%2B\").get(\"q\") !== plus ||\n new URLSearchParams({ q: plus }).get(\"q\") !== plus ||\n new URLSearchParams([[\"q\", plus]]).get(\"q\") !== plus ||\n new URLSearchParams(\"q=\\n\").toString() !== \"q=%0A\" ||\n new URLSearchParams({ q: \" &\" }).toString() !== \"q=+%26\" ||\n new URLSearchParams({ q: \"%zx\" }).toString() !== \"q=%25zx\"\n )\n throw URLSearchParams;\n self.URLSearchParams = URLSearchParams;\n })(URLSearchParams, \"+\");\n} catch (URLSearchParams) {\n (function (Object, String, isArray) {\n \"use strict\";\n var create = Object.create;\n var defineProperty = Object.defineProperty;\n var find = /[!'\\(\\)~]|%20|%00/g;\n var findPercentSign = /%(?![0-9a-fA-F]{2})/g;\n var plus = /\\+/g;\n var replace = {\n \"!\": \"%21\",\n \"'\": \"%27\",\n \"(\": \"%28\",\n \")\": \"%29\",\n \"~\": \"%7E\",\n \"%20\": \"+\",\n \"%00\": \"\\x00\"\n };\n var proto = {\n append: function (key, value) {\n appendTo(this._ungap, key, value);\n },\n delete: function (key) {\n delete this._ungap[key];\n },\n get: function (key) {\n return this.has(key) ? this._ungap[key][0] : null;\n },\n getAll: function (key) {\n return this.has(key) ? this._ungap[key].slice(0) : [];\n },\n has: function (key) {\n return key in this._ungap;\n },\n set: function (key, value) {\n this._ungap[key] = [String(value)];\n },\n forEach: function (callback, thisArg) {\n var self = this;\n for (var key in self._ungap) self._ungap[key].forEach(invoke, key);\n function invoke(value) {\n callback.call(thisArg, value, String(key), self);\n }\n },\n toJSON: function () {\n return {};\n },\n toString: function () {\n var query = [];\n for (var key in this._ungap) {\n var encoded = encode(key);\n for (var i = 0, value = this._ungap[key]; i < value.length; i++) {\n query.push(encoded + \"=\" + encode(value[i]));\n }\n }\n return query.join(\"&\");\n }\n };\n for (var key in proto)\n defineProperty(URLSearchParams.prototype, key, {\n configurable: true,\n writable: true,\n value: proto[key]\n });\n self.URLSearchParams = URLSearchParams;\n function URLSearchParams(query) {\n var dict = create(null);\n defineProperty(this, \"_ungap\", { value: dict });\n switch (true) {\n case !query:\n break;\n case typeof query === \"string\":\n if (query.charAt(0) === \"?\") {\n query = query.slice(1);\n }\n for (\n var pairs = query.split(\"&\"), i = 0, length = pairs.length;\n i < length;\n i++\n ) {\n var value = pairs[i];\n var index = value.indexOf(\"=\");\n if (-1 < index) {\n appendTo(\n dict,\n decode(value.slice(0, index)),\n decode(value.slice(index + 1))\n );\n } else if (value.length) {\n appendTo(dict, decode(value), \"\");\n }\n }\n break;\n case isArray(query):\n for (var i = 0, length = query.length; i < length; i++) {\n var value = query[i];\n appendTo(dict, value[0], value[1]);\n }\n break;\n case \"forEach\" in query:\n query.forEach(addEach, dict);\n break;\n default:\n for (var key in query) appendTo(dict, key, query[key]);\n }\n }\n\n function addEach(value, key) {\n appendTo(this, key, value);\n }\n\n function appendTo(dict, key, value) {\n var res = isArray(value) ? value.join(\",\") : value;\n if (key in dict) dict[key].push(res);\n else dict[key] = [res];\n }\n\n function decode(str) {\n return decodeURIComponent(\n str.replace(findPercentSign, \"%25\").replace(plus, \" \")\n );\n }\n\n function encode(str) {\n return encodeURIComponent(str).replace(find, replacer);\n }\n\n function replacer(match) {\n return replace[match];\n }\n })(Object, String, Array.isArray);\n}\n\n(function (URLSearchParamsProto) {\n var iterable = false;\n try {\n iterable = !!Symbol.iterator;\n } catch (o_O) {}\n\n /* istanbul ignore else */\n if (!(\"forEach\" in URLSearchParamsProto)) {\n URLSearchParamsProto.forEach = function forEach(callback, thisArg) {\n var self = this;\n var names = Object.create(null);\n this.toString()\n .replace(/=[\\s\\S]*?(?:&|$)/g, \"=\")\n .split(\"=\")\n .forEach(function (name) {\n if (!name.length || name in names) return;\n (names[name] = self.getAll(name)).forEach(function (value) {\n callback.call(thisArg, value, name, self);\n });\n });\n };\n }\n\n /* istanbul ignore else */\n if (!(\"keys\" in URLSearchParamsProto)) {\n URLSearchParamsProto.keys = function keys() {\n return iterator(this, function (value, key) {\n this.push(key);\n });\n };\n }\n\n /* istanbul ignore else */\n if (!(\"values\" in URLSearchParamsProto)) {\n URLSearchParamsProto.values = function values() {\n return iterator(this, function (value, key) {\n this.push(value);\n });\n };\n }\n\n /* istanbul ignore else */\n if (!(\"entries\" in URLSearchParamsProto)) {\n URLSearchParamsProto.entries = function entries() {\n return iterator(this, function (value, key) {\n this.push([key, value]);\n });\n };\n }\n\n /* istanbul ignore else */\n if (iterable && !(Symbol.iterator in URLSearchParamsProto)) {\n URLSearchParamsProto[Symbol.iterator] = URLSearchParamsProto.entries;\n }\n\n /* istanbul ignore else */\n if (!(\"sort\" in URLSearchParamsProto)) {\n URLSearchParamsProto.sort = function sort() {\n var entries = this.entries(),\n entry = entries.next(),\n done = entry.done,\n keys = [],\n values = Object.create(null),\n i,\n key,\n value;\n while (!done) {\n value = entry.value;\n key = value[0];\n keys.push(key);\n if (!(key in values)) {\n values[key] = [];\n }\n values[key].push(value[1]);\n entry = entries.next();\n done = entry.done;\n }\n // not the champion in efficiency\n // but these two bits just do the job\n keys.sort();\n for (i = 0; i < keys.length; i++) {\n this.delete(keys[i]);\n }\n for (i = 0; i < keys.length; i++) {\n key = keys[i];\n this.append(key, values[key].shift());\n }\n };\n }\n\n function iterator(self, callback) {\n var items = [];\n self.forEach(callback, items);\n return iterable\n ? items[Symbol.iterator]()\n : {\n next: function () {\n var value = items.shift();\n return { done: value === undefined, value: value };\n }\n };\n }\n\n /* istanbul ignore next */\n (function (Object) {\n var dP = Object.defineProperty,\n gOPD = Object.getOwnPropertyDescriptor,\n createSearchParamsPollute = function (search) {\n function append(name, value) {\n URLSearchParamsProto.append.call(this, name, value);\n name = this.toString();\n search.set.call(this._usp, name ? \"?\" + name : \"\");\n }\n function del(name) {\n URLSearchParamsProto.delete.call(this, name);\n name = this.toString();\n search.set.call(this._usp, name ? \"?\" + name : \"\");\n }\n function set(name, value) {\n URLSearchParamsProto.set.call(this, name, value);\n name = this.toString();\n search.set.call(this._usp, name ? \"?\" + name : \"\");\n }\n return function (sp, value) {\n sp.append = append;\n sp.delete = del;\n sp.set = set;\n return dP(sp, \"_usp\", {\n configurable: true,\n writable: true,\n value: value\n });\n };\n },\n createSearchParamsCreate = function (polluteSearchParams) {\n return function (obj, sp) {\n dP(obj, \"_searchParams\", {\n configurable: true,\n writable: true,\n value: polluteSearchParams(sp, obj)\n });\n return sp;\n };\n },\n updateSearchParams = function (sp) {\n var append = sp.append;\n sp.append = URLSearchParamsProto.append;\n URLSearchParams.call(sp, sp._usp.search.slice(1));\n sp.append = append;\n },\n verifySearchParams = function (obj, Class) {\n if (!(obj instanceof Class))\n throw new TypeError(\n \"'searchParams' accessed on an object that \" +\n \"does not implement interface \" +\n Class.name\n );\n },\n upgradeClass = function (Class) {\n var ClassProto = Class.prototype,\n searchParams = gOPD(ClassProto, \"searchParams\"),\n href = gOPD(ClassProto, \"href\"),\n search = gOPD(ClassProto, \"search\"),\n createSearchParams;\n if (!searchParams && search && search.set) {\n createSearchParams = createSearchParamsCreate(\n createSearchParamsPollute(search)\n );\n Object.defineProperties(ClassProto, {\n href: {\n get: function () {\n return href.get.call(this);\n },\n set: function (value) {\n var sp = this._searchParams;\n href.set.call(this, value);\n if (sp) updateSearchParams(sp);\n }\n },\n search: {\n get: function () {\n return search.get.call(this);\n },\n set: function (value) {\n var sp = this._searchParams;\n search.set.call(this, value);\n if (sp) updateSearchParams(sp);\n }\n },\n searchParams: {\n get: function () {\n verifySearchParams(this, Class);\n return (\n this._searchParams ||\n createSearchParams(\n this,\n new URLSearchParams(this.search.slice(1))\n )\n );\n },\n set: function (sp) {\n verifySearchParams(this, Class);\n createSearchParams(this, sp);\n }\n }\n });\n }\n };\n try {\n upgradeClass(HTMLAnchorElement);\n if (/^function|object$/.test(typeof URL) && URL.prototype)\n upgradeClass(URL);\n } catch (meh) {}\n })(Object);\n})(self.URLSearchParams.prototype, Object);\nexport default self.URLSearchParams;\n", "/******* positionalFormat() BEGIN ******/\n\n/* https://github.com/pft/javascript/blob/master/positionalformat.js\n *\n * Copyright (C) 2006-2013 Niels Giesen.\n *\n * Contact: \n *\n * Author: Niels Giesen\n * Keywords: JavaScript, formatting, String\n *\n * This file is dual-licensed under either the BSD license or the\n * GNU Affero General Public License.\n *\n * positionalFormat enables you to replace numbers enclosed in curly braces (C# format\n * apparently) with positional arguments (that can be reused), like\n * this:\n *\n * positionalFormat('argument { 1 } (or is it { 2 }, or { 0 }?) comes { 1 }',3,'first',1)\n *\n * evals to:\n *\n * \"argument first (or is it 1, or 3?) comes first\"\n */\n\nexport function positionalFormat(str) {\n var args = arguments;\n return str.replace(/{\\s*(\\d+)\\s*}/g, function (match, num) {\n return args[parseInt(num) + 1] !== undefined\n ? args[parseInt(num) + 1]\n : match;\n });\n}\n\n/******* positionalFormat() END ******/\n\nexport function format(str, ob = {}) {\n return str.replace(/{\\s*([^{]+?)\\s*}/g, function (match, sub) {\n return ob[sub] !== undefined ? ob[sub] : sub;\n });\n}\n\n// export function formatPlus(str, ob = {}) {\n// return str.replace(/{\\s*([^{]+?)\\s*}/g, function (match, subwithstuff) {\n// const subs = subwithstuff.split(/\\|/);\n// console.log(subs);\n// return subs.reduce((acc, cur) => {\n// if (ob[cur] === undefined) return acc;\n// return ob[cur];\n// }, subs[0]);\n// // if (ob[sub] === undefined) return sub;\n// // if (!directives) return ob[sub] !== undefined ? ob[sub] : sub;\n// // if (\n// // directives.startsWith(\"+\") &&\n// // !Number.isNaN(ob[sub]) &&\n// // !Number.isNaN(Number(directives.slice(1)))\n// // )\n// // return Number(ob[sub]) + Number(directives.slice(1));\n// // if (\n// // directives.startsWith(\"-\") &&\n// // !Number.isNaN(ob[sub]) &&\n// // !Number.isNaN(Number(directives.slice(1)))\n// // )\n// // return Number(ob[sub]) + Number(directives.slice(1));\n// // const [sub, directives] = subwithstuff.split(/\\|/);\n// // if (ob[sub] === undefined) return sub;\n// // if (!directives) return ob[sub] !== undefined ? ob[sub] : sub;\n// // if (\n// // directives.startsWith(\"+\") &&\n// // !Number.isNaN(ob[sub]) &&\n// // !Number.isNaN(Number(directives.slice(1)))\n// // )\n// // return Number(ob[sub]) + Number(directives.slice(1));\n// // if (\n// // directives.startsWith(\"-\") &&\n// // !Number.isNaN(ob[sub]) &&\n// // !Number.isNaN(Number(directives.slice(1)))\n// // )\n// // return Number(ob[sub]) + Number(directives.slice(1));\n// return ob[sub];\n// });\n// }\n\nexport const formatPlus = format;\n\n// (str, ob = {}) {\n// return str.replace(/{\\s*([^{]+?)\\s*}/g, function (match, subwithstuff) {\n// const subs = subwithstuff.split(/\\|/);\n// console.log(subs);\n// return subs.reduceRight((acc, cur) => {\n// if (ob[cur] === undefined) return acc;\n// return ob[cur];\n// }, subs[0]);\n// // if (ob[sub] === undefined) return sub;\n// // if (!directives) return ob[sub] !== undefined ? ob[sub] : sub;\n// // if (\n// // directives.startsWith(\"+\") &&\n// // !Number.isNaN(ob[sub]) &&\n// // !Number.isNaN(Number(directives.slice(1)))\n// // )\n// // return Number(ob[sub]) + Number(directives.slice(1));\n// // if (\n// // directives.startsWith(\"-\") &&\n// // !Number.isNaN(ob[sub]) &&\n// // !Number.isNaN(Number(directives.slice(1)))\n// // )\n// // return Number(ob[sub]) + Number(directives.slice(1));\n// // const [sub, directives] = subwithstuff.split(/\\|/);\n// // if (ob[sub] === undefined) return sub;\n// // if (!directives) return ob[sub] !== undefined ? ob[sub] : sub;\n// // if (\n// // directives.startsWith(\"+\") &&\n// // !Number.isNaN(ob[sub]) &&\n// // !Number.isNaN(Number(directives.slice(1)))\n// // )\n// // return Number(ob[sub]) + Number(directives.slice(1));\n// // if (\n// // directives.startsWith(\"-\") &&\n// // !Number.isNaN(ob[sub]) &&\n// // !Number.isNaN(Number(directives.slice(1)))\n// // )\n// // return Number(ob[sub]) + Number(directives.slice(1));\n// return ob[sub];\n// });\n// }\n", "import { positionalFormat } from \"./text-utils.js\";\nimport { _ } from \"./gettext.js\";\n\nconst CODES = {\n cException: 1,\n cHTMLFormLoadCaseNotFound: 2,\n cHTMLMenuFileNotFound: 3,\n cWebModelIDDifferent: 4,\n cWebPleaseLogin: 5,\n cGetFileNotAllowed: 6,\n cGetDocumentNotFound: 7,\n cUMWrongUserNamePassword: 8,\n cWebSessionTimeOut: 9,\n cWebNoModelID: 10,\n cWebIllegalAccess: 11,\n cWebModelNotFound: 12,\n cWebCaseIsRunning: 13,\n cEngineLoadCaseFailed: 14, // Was: 3\n cEngineUpgrading: 15,\n cEngineNoInterfacesToShow: 16,\n cEngineLoadCaseFailedNotFound: 17,\n cEngineLoadCaseFailedWrongType: 18,\n cEngineLoadCaseFailedWrongData: 19,\n cWebOpenIsCalledWithUniqueID: 20,\n cTechGraphVizNotInstalled: 21,\n cGraphVizSessionNotFound: 22,\n cUMUserNotFound: 23,\n cUMModelNotFound: 24,\n cUMCaseNotFound: 25,\n cWebAdminNotAllowed: 26,\n cEngineGotoNodeFailed: 27,\n cPreviewNoCaseFound: 28,\n cTechUploadedFileToLarge: 29,\n cWebSaveCaseNotAllowed: 30,\n cWebSaveCaseFailed: 31,\n cInvalidUpload: 53\n};\n\nconst CODESREV = Object.fromEntries(\n Object.entries(CODES).map(([key, value]) => [value, key])\n);\n\n// Translate error - put translation in message property, return\n// error.\nfunction translate(_error) {\n const error = Object.assign({}, _error);\n // New API\n switch (error.code) {\n case CODES.cException:\n error.message = _(\n \"Something went wrong; see the server log for more information.\"\n );\n break;\n case CODES.cWebSessionTimeOut:\n error.message = _(\"Session has timed out. Please log in again.\");\n break;\n case CODES.cEngineLoadCaseFailed:\n switch (error.subcode) {\n case 1004:\n error.message = positionalFormat(\n _('You have no tickets left for model \"{0}\"'),\n error.summary\n .substring(56, error.summary.length - 1)\n .replace(/_/g, \" \")\n );\n break;\n default:\n error.message = error.summary; // Won't translate for now, may be st. like \"Loading case failed (xxx.mdl)\"\n }\n break;\n case CODES.cEngineLoadCaseFailedWrongData:\n error.message = _(\"Error loading session (wrong data)\");\n break;\n default:\n switch (error.subcode) {\n case 1002:\n error.message = _(\n \"We are currently updating. Please try again later.\"\n );\n break;\n case 1009:\n case 1025:\n error.message = positionalFormat(\n _('Infinite loop detected in {0}\"'),\n // Might be embedded though (in 1 or in 14...)\n error.summary.slice(18, error.summary.indexOf(\", infinite\"))\n );\n break;\n case 1010:\n error.message = _(\n \"Interface has failed (probably a failing SOAP or database connection)\"\n );\n break;\n default:\n error.message = _(CODESREV[error.code], _(error.summary));\n }\n }\n return error;\n}\n\nexport { CODES, translate };\n", "let _token;\n\nexport const setToken = token => {\n _token = token;\n};\n\nexport async function digestMessage(message) {\n if (!(\"crypto\" in window)) return null;\n const msgUint8 = new TextEncoder().encode(message); // encode as (utf-8) Uint8Array\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", msgUint8); // hash the message\n const hashArray = Array.from(new Uint8Array(hashBuffer)); // convert buffer to byte array\n const hashHex = hashArray.map(b => b.toString(16).padStart(2, \"0\")).join(\"\"); // convert bytes to hex string\n return hashHex;\n}\n\nexport const tokenChannel =\n \"BroadcastChannel\" in window ? new BroadcastChannel(\"token\") : \"\";\n\nexport const token = {\n addEventListener: (...args) =>\n tokenChannel && tokenChannel.addEventListener(...args),\n removeEventListener: (...args) =>\n tokenChannel && tokenChannel.removeEventListener(...args),\n getHash: () => digestMessage(_token),\n setToken,\n postMessage: message =>\n token.getHash().then(\n tokenHash =>\n // digestMessage will return null on missing crypto on older\n // browsers\n tokenHash &&\n tokenChannel &&\n tokenChannel.postMessage({ tokenHash, ...message })\n )\n};\n", "// https://gist.github.com/jameslaneconkling/24acb8ea326a1c8fdf64225aa7d0f44e\nconst rules = [\n { type: \"space\", regex: /^\\s/ },\n { type: \"lParen\", regex: /^\\(/ },\n { type: \"rParen\", regex: /^\\)/ },\n { type: \"number\", regex: /^[0-9.]+/ },\n { type: \"string\", regex: /^\".*?\"/ },\n { type: \"variable\", regex: /^[^\\s()]+/ } // take from the beginning 1+ characters until you hit a ' ', '(', or ')' // TODO - support escaped double quote\n];\n\nconst tokenizer = rules => input => {\n for (let i = 0; i < rules.length; i += 1) {\n let tokenized = rules[i].regex.exec(input);\n if (tokenized) {\n return {\n token: tokenized[0],\n type: rules[i].type,\n rest: input.slice(tokenized[0].length)\n };\n }\n }\n\n throw new Error(`no matching tokenize rule for ${JSON.stringify(input)}`);\n};\n\nconst parser = tokenize =>\n function parse(input, ast, parents = []) {\n if (input === \"\") {\n return ast;\n }\n\n const { token, type, rest } = tokenize(input);\n\n if (type === \"space\") {\n // do nothing\n return parse(rest, ast, parents);\n } else if (type === \"variable\") {\n ast.push(token);\n return parse(rest, ast, parents);\n } else if (type === \"number\") {\n ast.push(Number(token));\n return parse(rest, ast, parents);\n } else if (type === \"string\") {\n ast.push(token.replace(/(^\"|\"$)/g, \"'\"));\n return parse(rest, ast, parents);\n } else if (type === \"lParen\") {\n parents.push(ast);\n return parse(rest, [], parents);\n } else if (type === \"rParen\") {\n const parentAst = parents.pop();\n if (parentAst) {\n parentAst.push(ast);\n return parse(rest, parentAst, parents);\n }\n\n return parse(rest, ast, parents);\n }\n\n throw new Error(`Missing parse logic for rule ${JSON.stringify(type)}`);\n };\n\nexport default parser(tokenizer(rules));\n", "const Identity = x => ({ x, map: fn => Identity(fn(x)) });\n\nconst Const = x => ({ x, map: fn => Const(x) });\n\nconst lens = (getter, setter) => functor => target =>\n functor(getter(target)).map(focus => setter(focus, target));\n\nconst over = (lens, fn, obj) => lens(x => Identity(fn(x)))(obj).x;\n\nconst set = (lens, val, obj) => over(lens, () => val, obj);\n\nconst view = (lens, obj) => lens(Const)(obj).x;\n\nexport { lens, over, set, view };\n", "/** Map fn on array, then join it with joiner */\nimport * as Lenses from \"./lenses.js\";\n\nexport const applyTo = arg => fn => fn(arg);\n\nconst _apply = (fn, args) => fn(...args);\n\nexport const dec = arg => arg - 1;\n\nexport const inc = arg => arg + 1;\n\nexport function mapConcat(arr, fn, joiner) {\n return arr.map(fn).join(joiner);\n}\n\nexport const identity = x => x;\n\nexport const isNil = x => x == null;\n\nexport const not = a => !a;\n\n/**\n Differs from Ramda in that the first function in the pipe chain is\n called with a single argument.\n */\nexport const pipe =\n (...fns) =>\n value =>\n fns.reduce((acc, cur) => cur(acc), value);\n\n/**\n Differs from Ramda in that the first function in the compose chain is\n called with a single argument.\n */\nexport const compose =\n (...fns) =>\n value =>\n fns.reduceRight((acc, cur) => cur(acc), value);\n\n/**\n Same as Ramda compose() in that the first function in the compose\n chain may be called with more than one argument.\n */\nexport const composeX =\n (...fns) =>\n (...value) =>\n fns.reduceRight((acc, cur) => [cur.apply(null, acc)], value);\n\nexport const curry = (fn, ...args) => {\n if (args.length >= fn.length) return fn(...args);\n return (...args2) => curry(fn, ...[...args, ...args2]);\n};\n\nexport const join = curry((sep, arr) => arr.join(sep));\n\nexport const split = curry((sep, arr) => arr.split(sep));\n\nexport const reverse = arr => [...arr].reverse();\n\nexport const type = compose(\n s => s.slice(8, -1),\n ob => Object.prototype.toString.call(ob)\n);\n\nexport const always = value => () => value;\n\nexport const F = always(false);\n\nexport const T = always(true);\n\nexport const propOr = curry((or, prop, obj) => {\n try {\n return ifElse(isNil, () => or, identity)(obj[prop]);\n } catch (_) {\n return or;\n }\n});\n\nexport const prop = propOr(undefined);\nexport const pathOr = curry((or, pathArg, obj) =>\n reduce((acc, cur) => propOr(or, cur, acc), obj, pathArg)\n);\n\nexport const path = pathOr(undefined);\n\nexport const tail = arr => Array.prototype.slice.call(arr, 1);\n\nconst _nth = (i, arr) => arr[i];\n\nexport const head = arr => arr[0];\n\nexport const last = arr => arr[arr.length - 1];\n\nexport const cond = curry((rules, ob) => {\n const cur = rules[0];\n if (!cur) return undefined;\n return ifElse(cur[0], cur[1], cond(tail(rules)))(ob);\n});\n\nexport const choose = curry((rules, ob) => {\n const cur = rules[0];\n if (!cur) return undefined;\n return cur[0](ob) ? cur[1] : choose(tail(rules))(ob);\n});\n\nexport const length = prop(\"length\");\n\nexport const strictUniq = arr =>\n reduce((acc, cur) => (acc.indexOf(cur) > -1 ? acc : [...acc, cur]), [])(arr);\n\nexport const any = curry((fn, arr) => {\n return arr.length === 0\n ? false\n : compose(fn, head)(arr)\n ? true\n : any(fn, tail(arr));\n});\n\nexport const find = curry((fn, arr) => {\n return arr.length === 0\n ? undefined\n : fn(head(arr))\n ? head(arr)\n : find(fn, tail(arr));\n});\n\nconst _findIndex = (fn, arr) => arr.findIndex(fn);\n/**\n * Returns a function applying all arguments to a *manually* curried function.\n *\n * Behaves a bit strange (see tests), so keeping it private-ish\n **/\nexport const _uncurry =\n fn =>\n (...args) =>\n args.reduce((acc, cur) => {\n return acc(cur);\n }, fn);\n\n/** Curriable functions **/\n\n/**\n * Takes a function and two values and returns true if the values map\n * to the same value; false otherwise.\n */\nconst _eqBy = (fn, a, b) => _equals(fn(a), fn(b));\n\nconst _all = (fn, arr) =>\n reduce((acc, cur) => (acc ? fn(cur) : acc), true, arr);\n\nconst _none = (fn, arr) =>\n reduce((acc, cur) => (fn(cur) ? false : acc), true, arr);\n\nconst _append = (arg, arr) => [...((arr instanceof Array && arr) || []), arg];\n\nconst _test = (regex, string) => regex.test(string);\n\nconst _match = (regex, string) => string.match(regex) || [];\n\n// https://raphacmartin.medium.com/deep-equality-in-javascript-objects-1eea8abb3649\n/**\n *\n * @param a Object\n * @param b Object\n * @returns {boolean}\n */\nfunction _equals(a, b) {\n if (!(a instanceof Object) || !(b instanceof Object)) return a === b;\n // if the number of keys is different, they are different\n if (Object.keys(a).length !== Object.keys(b).length) {\n return false;\n }\n\n for (const key in a) {\n const a_value = a[key];\n const b_value = b[key];\n // If the value is an object, check if they're different objects\n // If it isn't, uses !== to check\n if (\n (a_value instanceof Object && !_equals(a_value, b_value)) ||\n (!(a_value instanceof Object) && a_value !== b_value)\n ) {\n return false;\n }\n }\n return true;\n}\n\nconst _eqProps = (prop, a, b) => _equals(a[prop], b[prop]);\n\nconst _hasPath = (p, ob) => {\n if (p.length === 0) return true;\n return has(p[0], ob) && _hasPath(tail(p), prop(p[0], ob));\n};\n\n/** Associate prop with val in obj */\nfunction _assoc(prop, val, obj) {\n var result = {};\n for (var p in obj) {\n result[p] = obj[p];\n }\n result[prop] = val;\n return result;\n}\n\nconst _assocPath = (path, val, obj) => {\n if (path.length === 0) {\n return val;\n }\n var idx = path[0];\n if (path.length > 1) {\n var nextObj =\n !isNil(obj) && Object.prototype.hasOwnProperty.call(obj, idx)\n ? obj[idx]\n : Number.isInteger(path[1])\n ? []\n : {};\n val = assocPath(Array.prototype.slice.call(path, 1), val, nextObj);\n }\n if (Number.isInteger(idx) && Array.isArray(obj)) {\n var arr = [].concat(obj);\n arr[idx] = val;\n return arr;\n } else {\n return assoc(idx, val, obj);\n }\n};\n\n/**\n * Apply fun to all but first argN args */\nconst _consume =\n (fn, argN) =>\n (...args) => {\n return fn(...args.slice(argN));\n };\n\nconst _propEq = (key, value, ob) => _equals(prop(key, ob), value);\n\nconst _propSatisfies = (fn, key, ob) => fn(prop(key, ob));\n\nconst _pathEq = (key, value, ob) => _equals(path(key, ob), value);\n\nconst _has = (prop, ob) =>\n complement(isNil)(ob) && Object.prototype.hasOwnProperty.call(ob, prop);\n\nconst _tryCatch = (tryer, catcher) => arg => {\n try {\n return tryer(arg);\n } catch (e) {\n return catcher(e, arg);\n }\n};\n\n/**\n Call arr.map(fn)\n\n Note: differs from Ramda, in that the callback will receive both the item, the index and the list.\n\n If you want the callback function `fn` to read only the first parameter, wrap `fn` in `unary(fn)`.\n */\nconst _map = (fn, arr) => arr.map(fn);\n\n/**\n Call arr.filter(fn)\n\n Note: differs from Ramda, in that the callback will receive both the item, the index and the list.\n\n If you want the callback function `fn` to read only the first parameter, wrap `fn` in `unary(fn)`.\n */\nconst _filter = (fn, arr) => arr.filter(fn);\n\nconst _when = (predicate, whenTrueFn, arg) =>\n predicate(arg) ? whenTrueFn(arg) : arg;\n\nconst _ifElse = (predicate, whenTrueFn, whenFalseFn, arg) =>\n predicate(arg) ? whenTrueFn(arg) : whenFalseFn(arg);\n\nconst _either = (fn1, fn2, arg) => fn1(arg) || fn2(arg);\n\nconst _allPass = (fns, arg) =>\n fns.reduce((mem, cur) => (!mem ? false : cur(arg)), true);\n\nconst _anyPass = (fns, arg) =>\n fns.reduce((mem, cur) => (mem ? true : cur(arg)), false);\n\nconst _both = (fn1, fn2, arg) => _allPass([fn1, fn2], arg);\n\nconst _complement = (fn, arg) => !fn(arg);\n\nconst _includes = (item, c) => c.includes(item);\n\nconst _lte = (first, second) => first <= second;\n\nconst _lt = (first, second) => first < second;\n\nconst _gte = (first, second) => first >= second;\n\nconst _gt = (first, second) => first > second;\n\n/**\n Call arr.reduce(fn, into);\n\n Note: differs from Ramda, in that the callback will receive the\n accumular, the item, the index and the list.\n\n If you want the callback function `fn` to read only the first two\n parameters, as with Ramda, wrap `fn` in `binary(fn)`.\n */\nconst _reduce = (fn, into, arr) => arr.reduce(fn, into);\n\nconst _tap = (fn, value) => (fn(value), value);\n\nconst _groupWith = (fn, arr) =>\n reduce(\n (acc, cur, index, arr) =>\n index === 0 || !fn(cur, arr[index - 1])\n ? [...acc, [cur]]\n : [...acc.slice(0, acc.length - 1), [...acc[acc.length - 1], cur]],\n []\n )(arr);\n\nconst _groupBy = (fn, arr) =>\n reduce((acc, cur) => over(lensProp(fn(cur)), append(cur), acc), {})(arr);\n\nconst _nthArg = (n, arg1, ...args) => [arg1, ...args][n];\n\n/** Dissociate props from obj */\nconst _omit = (props, obj) => {\n var result = {};\n for (var p in obj) {\n if (!props.includes(p)) result[p] = obj[p];\n }\n return result;\n};\n\nconst _pickBy = (pred, obj) => {\n var result = {};\n for (var k in obj) {\n if (pred(obj[k], k)) result[k] = obj[k];\n }\n return result;\n};\n\nconst _pick = (props, obj) => {\n var result = {};\n props.forEach(prop => {\n if (prop in obj) result[prop] = obj[prop];\n });\n return result;\n};\n\nconst _pickAll = (props, obj) => {\n var result = {};\n props.forEach(prop => {\n result[prop] = obj[prop];\n });\n return result;\n};\n\nfunction _dissoc(prop, obj) {\n return _omit([prop], obj);\n}\n\nconst _infichain = (fns, arg) =>\n fns.reduce(\n (acc, cur, index) => (index === 0 ? cur(arg) : cur(acc, arg)),\n null\n );\n\nconst _mergeRight = (ob1, ob2) => Object.assign({}, ob1, ob2);\n\nconst _mergeLeft = (ob1, ob2) => Object.assign({}, ob2, ob1);\n\nconst _strictWithout = (items, list) =>\n list.reduce((acc, cur) => (items.includes(cur) ? acc : [...acc, cur]), []);\n\nconst _unary = fn => arg => fn(arg);\n\nconst _binary = fn => (arg1, arg2) => fn(arg1, arg2);\n\nconst _strictDifference = (list1, list2) => {\n const out = new Set();\n const s1 = new Set(list1);\n const s2 = new Set(list2);\n for (let item of s1) {\n if (!s2.has(item)) out.add(item);\n }\n return [...out];\n};\n\nconst _mapWithRest = (fn, arr, rest1, ...rest) =>\n arr.map((cur, i, list) => fn(cur, i, list, rest1, ...rest));\n\nconst _andThen = (fn, promise) => Promise.resolve(promise).then(fn);\nconst _otherwise = (fn, promise) => promise.then(null, fn);\n\n/**\n * @param {Funcion} f f(await g(val), val)\n * @param {Funtion} g g(val) => Promise\n * @return Promise\n */\nconst _fChain = (f, g, val) => g(val).then(x => f(x, val));\n\nconst _chain = (f, g, val) => f(g(val), val);\n\nconst _juxt = (arr, arg1, ...argN) => {\n return arr.map(fn => fn(arg1, ...argN));\n};\n\nconst _slice = (from, to, arr) => arr.slice(from, to);\n\nexport const toLower = s => s.toLowerCase();\nexport const toUpper = s => s.toUpperCase();\n\nexport const maybeNumber = string =>\n Number.isInteger(Number(string)) ? Number(string) : string;\n\nconst _applySpec =\n specs =>\n (...args) => {\n if (specs instanceof Function) {\n return specs(...args);\n }\n if (specs instanceof Array) {\n return specs.map(fn => _applySpec(fn)(...args));\n }\n const out = {};\n for (let [key, value] of Object.entries(specs)) {\n out[key] = _applySpec(value)(...args);\n }\n return out;\n };\n\nexport const applySpec = curry((specs, arg, ...args) =>\n _applySpec(specs)(arg, ...args)\n);\n\nexport const all = curry(_all),\n nthArg = curry(_nthArg),\n andThen = curry(_andThen),\n append = curry(_append),\n apply = curry(_apply),\n assoc = curry(_assoc),\n assocPath = curry(_assocPath),\n anyPass = curry(_anyPass),\n both = curry(_both),\n consume = curry(_consume),\n chain = curry(_chain),\n strictDifference = curry(_strictDifference),\n dissoc = curry(_dissoc),\n eqProps = curry(_eqProps),\n equals = curry(_equals),\n filter = curry(_filter),\n has = curry(_has),\n hasPath = curry(_hasPath),\n juxt = curry(_juxt),\n map = curry(_map),\n nth = curry(_nth),\n otherwise = curry(_otherwise),\n propEq = curry(_propEq),\n propSatisfies = curry(_propSatisfies),\n tryCatch = curry(_tryCatch),\n when = curry(_when),\n ifElse = curry(_ifElse),\n either = curry(_either),\n allPass = curry(_allPass),\n complement = curry(_complement),\n includes = curry(_includes),\n infichain = curry(_infichain),\n mapWithRest = curry(_mapWithRest),\n mergeLeft = curry(_mergeLeft),\n mergeRight = curry(_mergeRight),\n omit = curry(_omit),\n pathEq = curry(_pathEq),\n pick = curry(_pick),\n pickBy = curry(_pickBy),\n pickAll = curry(_pickAll),\n lt = curry(_lt),\n lte = curry(_lte),\n fChain = curry(_fChain),\n gt = curry(_gt),\n gte = curry(_gte),\n reduce = curry(_reduce),\n groupBy = curry(_groupBy),\n groupWith = curry(_groupWith),\n tap = curry(_tap),\n eqBy = curry(_eqBy),\n lens = curry(Lenses.lens),\n over = curry(Lenses.over),\n set = curry(Lenses.set),\n view = curry(Lenses.view),\n test = curry(_test),\n match = curry(_match),\n none = curry(_none),\n findIndex = curry(_findIndex),\n slice = curry(_slice),\n strictWithout = curry(_strictWithout),\n unary = curry(_unary),\n binary = curry(_binary),\n lensPath = p => Lenses.lens(path(p), assocPath(p)),\n lensProp = p => Lenses.lens(prop(p), assoc(p));\n\nexport const uncurried = {\n all: _all,\n apply: _apply,\n append: _append,\n assoc: _assoc,\n assocPath: _assocPath,\n both: _both,\n filter: _filter,\n propEq: _propEq,\n consume: _consume,\n tryCatch: _tryCatch,\n when: _when,\n ifElse: _ifElse,\n either: _either,\n allPass: _allPass,\n complement: _complement,\n includes: _includes,\n lt: _lt,\n lte: _lte,\n gt: _gt,\n gte: _gte,\n has: _has,\n hasPath: _hasPath,\n tap: _tap,\n groupBy: _groupBy,\n groupWith: _groupWith,\n nth: _nth,\n eqBy: _eqBy,\n eqProps: _eqProps,\n equals: _equals,\n omit: _omit,\n pathEq: _pathEq,\n pick: _pick,\n pickBy: _pickBy,\n pickAll: _pickAll,\n dissoc: _dissoc,\n test: _test,\n match: _match,\n mergeLeft: _mergeLeft,\n mergeRight: _mergeRight,\n strictWithout: _strictWithout,\n unary: _unary,\n binary: _binary,\n slice: _slice,\n findIndex: _findIndex,\n toLower,\n toUpper,\n ...Lenses\n};\n", "import parse from \"./baby-lisp.js\";\nimport * as L from \"./functional.js\";\n\n/**\n * @typedef {Object} Bucket\n * @property {method} get Method to get key\n */\n\n/**\n * Test string against a bucket's contents\n * @function\n * @param {Bucket} bucket with a get(key) method returning a Boolean\n * or undefined.\n * @param {String} string Lispy string to test against the bucket\n */\nexport const stringSaysDo = (bucket, string) => {\n const ast = parse(`(${string})`);\n return astSaysDo(bucket)(ast);\n};\n\n/**\n * Test ast against bucket's contents\n * @function\n * @param {Bucket} bucket with a get(key) method returning a Boolean\n * or undefined.\n * @param {Object} AST Lispy AST (nested array of strings) to test against the bucket\n */\nconst astSaysDo = bucket => ast => {\n if (ast instanceof Array) {\n if (ast[0] === \"and\") {\n return L.compose(L.all(astSaysDo(bucket)), L.tail)(ast);\n }\n if (ast[0] === \"or\") {\n return L.compose(L.any(astSaysDo(bucket)), L.tail)(ast);\n }\n if (ast[0] === \"not\") {\n return L.compose(L.not, L.any(astSaysDo(bucket)), L.tail)(ast);\n }\n return L.compose(L.any(astSaysDo(bucket)))(ast);\n } else {\n return bucket.get(ast);\n }\n};\n", "export class BooleanBucket {\n constructor() {\n this.booleans = [];\n }\n /**\n * @param {String} key Key to get\n */\n get(key) {\n return this.booleans[key];\n }\n /**\n * @param {String} key Key to set\n */\n set(key) {\n return this.toggle(key, true);\n }\n /**\n * @param {String} key Key to unset\n */\n unset(key) {\n return this.toggle(key, false);\n }\n /**\n * @param {String} key Key to toggle\n * @param {Boolean} [bool] New value\n */\n toggle(key, bool) {\n bool = typeof bool === \"boolean\" ? bool : !this.get(key);\n if (bool !== this.get(key)) {\n this.booleans[key] = bool;\n return [true, bool];\n } else {\n return [false, bool];\n }\n }\n}\n", "/* global $ */\nimport { stringSaysDo } from \"./baby-lisp-apply.js\";\nimport { BooleanBucket } from \"./booleanbucket.js\";\n\nclass BucketWithConsequences extends BooleanBucket {\n /**\n * @param {String} key Key to toggle\n * @param {Boolean} [bool] New value\n * @param {Boolean} [reflect] Reflect the key as a class in the \n\n * Will hide or show any element which has somewhere inside data-when or data-hide-when attribute.\n * Whether or not to show or hide is based on the parsing of those attributes.\n *\n * See baby-lisp.test.js for examples.\n */\n toggle(mode, bool, reflect = true) {\n if (mode.includes('\"')) {\n console.warn(\n \"Mode contains a double quote, that is not allowed - used in querySelectorAll\"\n );\n return this;\n }\n const [changedOrAdded, bool2] = super.toggle(mode, bool);\n // Refrain from unnecessary redraw (by checking previous value):\n if (changedOrAdded) {\n $(document).trigger(\"bb:mode:\" + mode, bool2);\n if (reflect) $(\"body\").toggleClass(mode, bool2);\n {\n [\n ...document.querySelectorAll(\n '[data-when*=\"' + mode + '\"], [data-hide-when*=\"' + mode + '\"]'\n )\n ].forEach(elt => {\n let hidden = false;\n const hideWhen = elt.dataset[\"hideWhen\"];\n if (hideWhen) {\n hidden = stringSaysDo(this, hideWhen);\n }\n // hideWhen is absent or yields false, so still shown, and\n // when becomes the judge:\n if (!hidden) {\n const when = elt.dataset[\"when\"];\n // If there is no when, still show.\n if (when) {\n hidden = !stringSaysDo(this, when);\n }\n }\n elt.hidden = hidden;\n });\n }\n }\n return this;\n }\n}\n\nconst Mode = new BucketWithConsequences();\n\nexport { Mode };\n", "/* global URLSearchParams FormData */\n\nimport { mapConcat, either, when } from \"./functional.js\";\n\nconst ATTR_SNAME = \"data-server-name\";\nconst ATTR_SVALUE = \"data-server-value\";\nconst CONTAINER_SELECTOR = \"#bb-q .group.selected\";\n\nconst INPUT_SELECTOR = mapConcat(\n [\"input\", \"textarea\", \"select\"],\n function (c) {\n return c + \"[name]:not([disabled])\";\n },\n \", \"\n);\n\nconst inputsOf = container => container.querySelectorAll(INPUT_SELECTOR);\n\nconst isEmptyRadioValue = val => val === null;\nconst isEmptyCheckboxValue = val => val === false;\nconst isCheckedCheckboxValue = val => val === true;\n\nfunction collectWithin({\n params = null, // Object with an .append method, taking two params\n flavor = URLSearchParams, // Constructor for an object with an .append method, taking two params, used when params is not provided\n container = document.querySelector(CONTAINER_SELECTOR),\n omitFn = isEmptyCheckboxValue,\n changeFn = when(isCheckedCheckboxValue, () => \"on\"),\n collector = inputsOf\n} = {}) {\n return _collectAll(\n collector(container),\n params || new flavor(),\n omitFn,\n changeFn\n );\n}\n\nfunction _collectAll(nodeList, params, omitFn, changeFn) {\n for (const node of nodeList) {\n const val = valueOf(node),\n name = node.getAttribute(ATTR_SNAME) || node.getAttribute(\"name\");\n if (!either(isEmptyRadioValue, omitFn, val)) {\n params.append(name, changeFn(val));\n }\n }\n return params;\n}\n\nfunction valueOf(node) {\n if (node.hasAttribute(ATTR_SVALUE)) return node.getAttribute(ATTR_SVALUE);\n switch (node.type) {\n case \"radio\":\n return node.checked ? node.value : null; // Do not collect unchecked radios -- stripped in collectAll.\n case \"checkbox\":\n /* Collect unchecked checkboxes as false -- goes against usual form submission,\n but we need this for Studio API (using JSON). Stripped out by collectAll() unless provided with a omitFn. */\n if (!node.checked) return false;\n return node.hasAttribute(\"value\") // NOT the property -- this would still be \"on\".\n ? node.value // A checkbox should send either its value or\n : true; // Return Boolean true instead of \"on\", to be changed by collectAll() with changeFn,\n // or leave it at true (for JSON communication for instance) */\n default:\n return String(node.value).replace(/\\r?\\n/g, \"\\r\\n\");\n }\n}\n\nconst serializeQuestions = () =>\n collectWithin({}).toString().replace(/\\r?\\n/g, \"%0D%0A\");\n\nexport { valueOf, serializeQuestions, collectWithin };\n", "/* global $ FormData URLSearchParams */\nlet _vars = {};\n\nconst SESSION_KEYS = [\"dbname\", \"sessionid\", \"uniqueid\"];\nconst NAV_KEYS = [\"screenid\", ...SESSION_KEYS];\n\nObject.freeze(SESSION_KEYS);\nObject.freeze(NAV_KEYS);\n\nfunction setValueInVars(data, key) {\n if (typeof data[key] != \"undefined\") _vars[key] = data[key];\n}\n\nexport function setVars(data) {\n setValueInVars(data, \"version\");\n setValueInVars(data, \"uniqueid\");\n setValueInVars(data, \"replyserveraddress\");\n setValueInVars(data, \"replyserverport\");\n setValueInVars(data, \"proxyredirect\");\n setValueInVars(data, \"sessionid\");\n setValueInVars(data, \"modelname\");\n setValueInVars(data, \"dbname\");\n setValueInVars(data, \"modelid\");\n setValueInVars(data, \"showdeleteinmenu\");\n setValueInVars(data, \"showdatecreated\");\n setValueInVars(data, \"showreport\");\n setValueInVars(data, \"userinfo\");\n setValueInVars(data, \"showcopycase\");\n setValueInVars(data, \"screenid\");\n var version = getVar(\"version\");\n if (typeof version === \"string\") _vars[\"version\"] = version.split(\".\");\n}\n\nexport function getVar(string, obj) {\n return $.extend({}, _vars, obj)[string];\n}\n\n/**\n * Unset either all vars, or only those present in param vars\n *\n * @param {Array} vars An array of variable keys to delete\n *\n **/\nfunction unsetVars(arr) {\n if (!arr) return (_vars = {});\n arr.forEach(function (key) {\n delete _vars[key];\n });\n return _vars;\n}\n\nfunction collect(keys, collector = new FormData(), obj) {\n function append(key) {\n const val = getVar(key, obj);\n if (val !== undefined) collector.append(key, getVar(key, obj));\n }\n if (Array.isArray(keys)) {\n keys.forEach(append);\n } else {\n append(keys);\n }\n return collector;\n}\n\nfunction querify(keys, obj) {\n const usp = collect(keys, new URLSearchParams(), obj);\n return usp.toString();\n}\n\nexport default {\n querify,\n setVars,\n getVar,\n unsetVars,\n collect,\n NAV_KEYS,\n SESSION_KEYS\n};\n", "/* global URLSearchParams */\nimport \"./polyfills/url-search-params.js\";\nimport { Mode } from \"./mode.js\";\nimport { serializeQuestions } from \"./collect-values.js\";\nimport Vars from \"./vars.js\";\n\nexport const shouldExit = () =>\n Mode.get(\"hasModel\") && Boolean(Vars.getVar(\"sessionid\"));\n\nexport const onEnd = () => {\n if (!shouldExit()) return;\n if (!navigator.sendBeacon) return;\n const data = [\n \"step=exitdelayed\",\n Vars.querify(Vars.NAV_KEYS),\n \"fmt=json\",\n serializeQuestions()\n ]\n .filter(Boolean)\n .join(\"&\");\n\n const usp = new URLSearchParams(data);\n\n navigator.sendBeacon(\"/action\", usp);\n};\n\nfunction addEndListener() {\n // Update state before navigating away, but do not logout\n if (\"onpagehide\" in window) {\n window.addEventListener(\"pagehide\", onEnd);\n } else {\n window.addEventListener(\"unload\", onEnd, false);\n }\n}\n\nexport function removeEndListener() {\n // Update state before navigating away, but do not logout\n if (\"onpagehide\" in window) {\n window.removeEventListener(\"pagehide\", onEnd);\n } else {\n window.removeEventListener(\"unload\", onEnd, false);\n }\n}\n\naddEndListener();\n", "/* a11y-user-detect:\n *\n * \"User Detect\" will dynamically toggle between\n * a-keyboard-user & a-mouse-user (described in a11y.less)\n * depending on user interaction on document.\n *\n * The idea is to give keyboard users more visual queues,\n * without effecting the aesthetics for non-keyboard users.\n *\n * Author: Tim Bauwens\n * Copyright 2017 Berkeley Bridge\n *\n */\n\nimport { Mode } from \"$json/lib/mode\";\n\nexport const isKeyboardUser = () => Mode.get(\"a-keyboard-user\");\n\nexport const isMouseUser = () => Mode.get(\"a-mouse-user\");\n\nexport const setKeyboardUser = () => {\n Mode.set(\"a-keyboard-user\");\n Mode.unset(\"a-mouse-user\");\n};\n\nexport const setMouseUser = () => {\n Mode.unset(\"a-keyboard-user\");\n Mode.set(\"a-mouse-user\");\n};\n\n$(function () {\n let openingMatch, mouse;\n try {\n // Could have no opener, or opener could be X-Origin\n if (window.opener.document.body) {\n openingMatch = window.opener.document.body.className.match(\n /\\ba-(keyboard|mouse)-user\\b/\n );\n if (openingMatch) mouse = openingMatch[1] === \"mouse\";\n }\n } catch (e) {\n mouse = false;\n }\n if (mouse) {\n setMouseUser();\n } else {\n setKeyboardUser();\n }\n $(document.body).on(\"mousedown touchstart\", function () {\n setMouseUser();\n });\n $(document.body).on(\"keydown\", function (e) {\n if (\n e.key === \"Tab\" ||\n e.target.matches(`input[type=\"radio\"], input[type=\"checkbox\"]`)\n ) {\n setKeyboardUser();\n }\n });\n});\n", "/* global $ */\nimport \"./a11y-user-detect.js\";\nimport { _ } from \"./gettext.js\";\n\n/*** A11y BEGIN ***/\nexport const A11y = {\n log: function (message) {\n var logdiv = document.getElementById(\"a-logdiv\");\n if (logdiv) logdiv.innerHTML = \"
\" + message + \"
\";\n }\n};\n\n/**\n * Datepicker a11y enhancements\n */\nexport const observeDatepickers = (function () {\n var init = false;\n return function initDateObservance() {\n var picker, observer;\n\n if (init || !(\"MutationObserver\" in window)) {\n init = true;\n return;\n }\n\n $(document).on(\"blur\", '[data-type=\"datetimepicker\"]', function () {\n A11y.log(\"\");\n });\n\n function observation(records, instance) {\n try {\n var infocus =\n document.activeElement.className.split(\" \").indexOf(\"hasDatepicker\") >\n -1;\n } catch (e) {\n // there mayn't be an activeElement, in which case className is undefined.\n }\n if (infocus) {\n var message = [\n $(\".ui-state-hover\").text(),\n $(\".ui-datepicker-month [selected]\").text(),\n $(\".ui-datepicker-year [selected]\").text()\n ].join(\" \");\n A11y.log(message + \", \" + _(\"press enter to accept\"));\n }\n }\n\n picker = document.getElementById(\"ui-datepicker-div\");\n\n if (picker) {\n observer = new window.MutationObserver(observation);\n observer.observe(picker, { attributes: true });\n init = true;\n }\n };\n})();\n", "let escapeHTML = (function () {\n var entityMap = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\",\n \"/\": \"/\"\n };\n var re = new RegExp(\"[&<>\\\"'/]\", \"g\");\n return function escapeHTML(string) {\n return String(string).replace(re, function (s) {\n return entityMap[s];\n });\n };\n})();\n\nconst escaped = (strings, ...values) =>\n strings.reduce(\n (acc, cur, idx) =>\n acc + cur + (values.length > idx ? escapeHTML(values[idx]) : \"\"),\n \"\"\n );\n\nexport { escapeHTML, escaped };\n", "import { Mode } from \"./mode.js\";\n\n/*** NOTIFICATIONS BEGIN ***/\nlet message;\n// Notification can either be a String or an object with a message\n// property. When supplying an object, the message property will be\n// shown to the user, but the entire object will be given to\n// console.error.\nfunction notify(options = { keepalive: false, html: false }, notification) {\n if (!notification) return;\n var text = notification.message || notification,\n timeout = 5000;\n if (\n typeof console !== \"undefined\" &&\n console &&\n typeof console.error === \"function\"\n )\n console.error(notification);\n message = { notification, options };\n Mode.set(\"hasMessage\");\n if (options.html) {\n document\n .querySelectorAll(\".bb-notification\")\n .forEach(area => (area.innerHTML = text));\n } else {\n document\n .querySelectorAll(\".bb-notification\")\n .forEach(area => (area.textContent = text));\n }\n if (!options.keepalive)\n window.setTimeout(Mode.unset.bind(Mode, \"hasMessage\"), timeout);\n}\n\nexport { notify, message };\n/*** NOTIFICATIONS END ***/\n", "/*** CONFIG BEGIN ***/\n\nimport conf from \"$conf.json\";\nimport { has } from \"./functional.js\";\n\nconf.a11y = Object.assign(\n {\n captions: false,\n optionfieldsets: false,\n strictlegends: false\n },\n conf.a11y\n);\n\nfunction propFinder(ob, prefix) {\n if (prefix) ob = find(prefix);\n\n function find(prop, fallback) {\n if (ob === undefined) return fallback;\n if (prop === undefined) return fallback;\n var leafs = prop.split(\".\").filter(Boolean),\n leaf = ob;\n while (has(leafs[0], leaf)) {\n leaf = leaf[leafs.shift()];\n }\n if (leafs.length === 0) return leaf;\n return fallback;\n }\n\n return find;\n}\n\nexport { conf, propFinder };\n\n/*** CONFIG END ***/\n", "import { conf } from \"./conf\";\nexport const fromApiServer = s =>\n s.startsWith(\"http://\") || s.startsWith(\"https://\")\n ? s\n : [conf.apiserver, s].filter(Boolean).join(\"/\");\n", "/* global jQuery */\nlet $ = jQuery;\n\nimport { escapeHTML } from \"./escape.js\";\nimport { notify } from \"./notify.js\";\nimport { _ } from \"./gettext.js\";\nimport { fromApiServer } from \"./location.js\";\n\n/**\n * Keep track of ajax requests + some convenience\n *\n * Exports busy and replace to bb.ajax object for plugins to use.\n */\nvar Ajax = {\n busy: false,\n last: null,\n direction: null,\n\n defaultOptions: {\n dataType: \"json\",\n type: \"POST\",\n url: \"action\",\n cache: false,\n async: true,\n success: checkJSON,\n error: onJSONError\n },\n\n post: function (options) {\n const _options = Object.assign({}, Ajax.defaultOptions, options, {\n url: fromApiServer(options.url || Ajax.defaultOptions.url)\n });\n $(document).trigger(\"bb:prePost\", _options);\n return $.ajax(_options);\n },\n\n replace: function (obj) {\n Ajax.last && Ajax.last.abort();\n Ajax.last = Ajax.post(obj);\n return Ajax.last;\n },\n\n release: function () {\n Ajax.busy = false;\n $(\".group.selected\").prop(\"disabled\", false);\n }\n};\n\n/**\n * Convenience method, like getJSON, but with POST\n *\n * @param {String} url URL where we POST to\n * @param {Object|String} data POST data\n *\n * Use Ajax.post instead if you want to overrule any default\n * settings from Ajax.defaultOptions.\n */\n$.postJSON = function (url, data) {\n return Ajax.post({ url: url, data: data });\n};\n\n/**\n * The default JSON error handler.\n *\n * Set appropriate flags, let user now what went wrong (as good as\n * possible).\n *\n * Trigger custom 'bb:jsonError' event on document.\n *\n * @param {Object} data XMLHTTPRequest object\n * @param {String} err Error message\n */\nfunction onJSONError(data, err) {\n Ajax.release();\n $(document).trigger(\"bb:jsonError\", data, err);\n if (data.responseText === undefined) {\n if (data.statusText === \"abort\");\n else {\n notify(\n { html: false, keepalive: true },\n _(\"Error: No response from server, server probably down\")\n );\n }\n } else if ($.trim(data.responseText) === \"\") {\n notify(\n { html: false, keepalive: true },\n _(\"Error: No response from server, server probably down\")\n );\n } else {\n notify(\n { html: true, keepalive: true },\n \"Error: \" +\n escapeHTML(err) +\n \"
Response was:
\" +\n \"
\" +\n        escapeHTML(data.responseText) +\n        \"
\"\n );\n }\n}\n\n/**\n * Indicate further processing ought to be skipped when this symbol is\n * set on JSON data.\n * @example\n import { stopDispatches } from \"$json/lib/ajax\";\n $(document).on(\"bb:preHandleData\", (event, data) => {\n event.stopImmediatePropagation(); // prevent further bb:preHandleData handlers.\n data[stopDispatches] = true;\n })\n * @constant\n * @type {Symbol}\n */\nexport const stopDispatches = Symbol(\"Skip all further dispatches\");\n\n/**\n Set this symbol to a promise on ajax data, and it shall be awaited\n before the next *handleData is run.\n*/\nconst awaiting = Symbol(\"awaiting promise\");\n\n/**\n * The default AJAX success handler. Perform actions on data.\n\n *\n * If data is not a JSON object, do nothing.\n *\n * @todo Either check data against JSON API, in some way or the\n * other, or make sure this function doesn't get called in the\n * first place when we're dealing with a non-core request; as\n * checkJSON is currently bound to ALL $.ajax requests,\n * this function may also fire for non-core requests.\n *\n * @param {Object} data 'JSON object according to BB JSON API'\n * @param {String} status Status of XHR\n * @param {Object} req The XHR object retrieving the resource\n *\n * @return undefined\n */\nasync function checkJSON(data, status, req) {\n if (typeof req.responseJSON !== \"undefined\") {\n // Since subsequent events may mess with the responseJSON\n // object, give (debuggers) the option to see the raw stuff.\n // Could be solved with a service worker instead.\n $(document).trigger(\"bb:responseText\", req.responseText);\n // use bb:preHandleData to change the JSON object for later invocations\n $(document).trigger(\"bb:preHandleData\", data);\n if (data[stopDispatches]) return;\n await data[awaiting];\n // handleData has the main stuff - the core rendering\n $(document).trigger(\"bb:handleData\", data);\n if (data[stopDispatches]) return;\n await data[awaiting];\n\n // use bb:postHandleData to change the DOM after initial rendering\n $(document).trigger(\"bb:postHandleData\", data);\n if (data[stopDispatches]) return;\n await data[awaiting];\n\n // finalHandleData may not change the DOM, but set focus for instance.\n $(document).trigger(\"bb:finalHandleData\", data);\n if (data[stopDispatches]) return;\n }\n}\n\nexport { Ajax, checkJSON, awaiting };\n", "import { Mode } from \"./mode.js\";\n\nexport const setSettled = () => Mode.set(\"isSettled\");\n", "/* global $, URLSearchParams */\nimport { setSettled } from \"./settled.js\";\nimport { removeEndListener } from \"./case-exit.js\";\n\nfunction BBI(options) {\n options = options || {};\n if (options.redirect_uri) {\n /** Example response:\n *\n * {\n * \"bbis\" : \"test\",\n * \"authid\" : \"Stubby\",\n * \"redirect_uri\" : \"https:\\/\\/HOST:8078\\/login?returnurl=http%3A%2F%2Fhost%3A80%2Fbbisreturns%3Fbbis%3Dtest&state=1507301556%3AGUID&authid=Stubby\",\n * \"url\": \"http:\\/\\/HOST:80\\/bbisreturns?bbis=test\",\n * \"state\": \"1507301556:6F2146D3-E0E6-4EB2-9DE4-2F31670B80D6\"\n * }\n *\n */\n var path = window.location.pathname.split(\"/\"),\n template = path.pop() || \"inlog.html\",\n returnurl =\n window.location.origin +\n path.concat(template).join(\"/\") +\n \"?\" +\n $.param({ bbis: options.bbis }),\n server = options.redirect_uri.split(\"?\")[0]; // The identity server sans params\n this.params = Object.assign({}, options.extraparams, {\n returnurl,\n authid: options.authid,\n // Add specific HTML page to state:\n state: options.state\n });\n this.url = server + \"?\" + $.param(this.params);\n this.stage = 1;\n } else {\n this.params = $.extend($.parseQuery(), { fmt: \"json\" });\n this.stage = 2;\n }\n return this;\n}\n\nBBI.prototype.authenticate = function () {\n if (!this.stage) throw \"BBI was not properly initialized\";\n if (this.stage === 1) {\n removeEndListener();\n window.location.href = this.url;\n } else if (this.stage === 2) {\n $.postJSON(\"bbisreturns\", this.params).then(setSettled);\n }\n};\n\nexport { BBI };\n", "import { escapeHTML } from \"./escape.js\";\nimport {\n allPass,\n anyPass,\n both,\n complement,\n compose,\n either,\n F,\n has,\n ifElse,\n pipe,\n prop,\n propEq,\n type\n} from \"./functional.js\";\nexport const isOptional = allPass([\n complement(prop(\"notnull\")),\n either(\n complement(prop(\"stringmask\")),\n pipe(prop(\"stringmask\"), RegExp, re => re.test(\"\"))\n )\n]);\n\nexport const isVisible = prop(\"visible\");\n\nexport const isLabel = either(\n propEq(\"name\", \"label\"),\n propEq(\"controltype\", \"label\")\n);\n\nexport const isOption = either(\n propEq(\"controltype\", \"radio\"),\n propEq(\"controltype\", \"checkbox\")\n);\n\nexport const isLink = propEq(\"name\", \"linklabel\");\n\nexport const isTextual = either(isLabel, isLink);\n\nexport const isPicture = propEq(\"controltype\", \"picture\");\n\nexport const isQuestion = complement(either(isTextual, isPicture));\n\nexport const isReadOnly = both(\n isQuestion,\n either(\n ifElse(has(\"originalreadonly\"), prop(\"originalreadonly\"), prop(\"readonly\")),\n propEq(\"visible\", false)\n )\n);\n\nexport const isValidatable = ifElse(\n either(isReadOnly, propEq(\"visible\", false)),\n F,\n anyPass([\n has(\"minimum\"),\n has(\"maximum\"),\n both(has(\"maxlength\"), complement(propEq(\"maxlength\", 0))),\n prop(\"notnull\"),\n compose(s => s === \"string\", type, prop(\"stringmask\"))\n ])\n);\n\nexport const renderAttribs = attr =>\n Object.entries(attr).reduce(\n (acc, [key, value]) => acc + ` ${key}=\"${escapeHTML(value)}\"`,\n \"\"\n );\n\nexport const setAttribs = (elt, attr) =>\n Object.entries(attr).forEach(([key, value]) => elt.setAttribute(key, value));\n\nexport const bbmClass = stylename =>\n `bbm-${stylename.toLowerCase().replace(/[^a-z0-9]/g, \"-\")}`;\n", "import {\n assoc,\n hasPath,\n chain,\n compose,\n either,\n path,\n prop,\n toLower,\n toUpper,\n ifElse,\n juxt,\n when\n} from \"./functional.js\";\nimport { format } from \"./text-utils.js\";\nimport { _ } from \"./gettext.js\";\n\nconst fieldDesignators = {\n datetimepicker: \"field--date\",\n numedit: \"field--value\",\n radio: \"field--list\",\n checkmultilist: \"field--list\",\n customlist: \"field--list\",\n combobox: \"field--list\",\n listbox: \"field--list\",\n multilist: \"field--list\",\n any: \"field--field\"\n};\n\nconst fieldKey = compose(\n controltype => fieldDesignators[controltype] || fieldDesignators[\"any\"],\n prop(\"controltype\")\n);\n\nconst generic = compose(key => _(key), fieldKey);\n\nconst genericQuoted = compose(\n key => _(key), // Runtime!\n key => key.replace(\"field--\", \"quoted--\"),\n fieldKey\n);\nexport const quotable = compose(\n when(\n prop(\"quotable\"),\n chain(\n assoc(\"quotable--init\"),\n compose(s => s.slice(0, 1).toUpperCase() + s.slice(1), prop(\"quotable\"))\n )\n ),\n when(\n prop(\"quotable\"),\n chain(assoc(\"quotable--upper\"), compose(toUpper, prop(\"quotable\")))\n ),\n when(\n prop(\"quotable\"),\n chain(assoc(\"quotable--lower\"), compose(toLower, prop(\"quotable\")))\n ),\n chain(assoc(\"quotable\"), either(path([\"metadata\", \"quotable\"]), generic)),\n ifElse(\n hasPath([\"metadata\", \"quotable\"]),\n compose(assoc(\"<<\", _(\"<<\", \"\u00AB\")), assoc(\">>\", _(\">>\", \"\u00BB\"))),\n compose(assoc(\"<<\", \"\"), assoc(\">>\", \"\"))\n ),\n chain(\n assoc(\"quoted--init\"),\n compose(s => s.slice(0, 1).toUpperCase() + s.slice(1), prop(\"quoted\"))\n ),\n ifElse(\n hasPath([\"metadata\", \"quotable\"]),\n chain(\n assoc(\"quoted\"),\n compose(\n arr => format(...arr),\n juxt([\n genericQuoted,\n compose(quotable => ({ quotable }), path([\"metadata\", \"quotable\"]))\n ])\n )\n ),\n chain(assoc(\"quoted\"), generic)\n )\n);\n", "/* global $ */\nimport { quotable } from \"./quotable.js\";\nimport {\n apply,\n assoc,\n cond,\n compose,\n dec,\n equals,\n identity,\n lensPath,\n mergeLeft,\n match,\n over,\n path,\n pipe,\n tail,\n test,\n T\n} from \"./functional.js\";\nimport { _ } from \"./gettext.js\";\nimport { format, formatPlus } from \"./text-utils.js\";\n\n/*** DATE UTILITIES BEGIN ***/\nDate.prototype.toHoursAndMinutes = function () {\n var hours = this.getHours();\n var minutes = this.getMinutes();\n if (hours < 10) hours = \"0\" + hours;\n if (minutes < 10) minutes = \"0\" + minutes;\n return hours + \":\" + minutes;\n};\nconst dateTimeRe = /^\\/Date\\((-?\\d+)\\)\\/$/,\n pureDateRe = /^(\\d{4})-(\\d{2})-(\\d{2})$/,\n ISO8601DateTimeInZuluRe =\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?Z$/;\n\n/*\n * Convert JSON date string to a Date object and return it.\n *\n * @{datestring}:\n *\n * An ISO-8601 datetime string in Zulu Time\n *\n * OR\n *\n * a JSON date string of the form\n *\n * \"/Date(102938293293)/\"\n *\n * where the numerical part is\n * seconds from epoch\n *\n * OR:\n *\n * a date formatted as \"yyyy-mm-dd\"\n *\n * OR:\n *\n * undefined -> undefined\n *\n */\nconst date = (...args) => new Date(...args);\n\nexport const parseDate = cond([\n [equals(0), () => undefined],\n [equals(undefined), identity],\n [equals(\"\"), identity],\n [\n test(pureDateRe),\n // Note if we were to pass pureDates to new Date as a valid\n // DateStamp, the engine will interpret it as 0:00 Zulu\n // time. Which, in this very case, is probably not what we\n // want. We want the date as in the minds of the case (min/max in\n // a calendar etc). It should be represented 'as is' to the user,\n // so 2022-02-09 may never become 2022-02-08 in users TZ, so\n // interpret it according in users TZ.\n pipe(match(pureDateRe), tail, over(lensPath([1]), dec), apply(date))\n ],\n [test(ISO8601DateTimeInZuluRe), date],\n [test(dateTimeRe), pipe(match(dateTimeRe), path([1]), parseInt, date)],\n [\n T,\n thing => {\n throw `Not a date in our book: ${thing}`;\n }\n ]\n]);\n\nexport const leadWithZeroes = string =>\n string.replace(/([^0-9]|^)([0-9]{3})([^0-9]|$)/, \"$10$2$3\");\n\n/**\n *\n * @param {Object} spec Object describing a control conforming to the BB json api.\n * @param {String} value The value to be checked\n * @returns {Boolean|Error} true when value is according to spec\n * @throws Localized error message\n */\nexport function checkDate(spec = { notnull: false }, value) {\n const UIFormat = $.datepicker._defaults.dateFormat;\n const formatDate = $.datepicker.formatDate.bind($.datepicker);\n var date, mindate, maxdate;\n if (!spec.notnull && value.trim() === \"\") {\n return true;\n }\n const metadata = spec.metadata || {};\n try {\n date = valueToDate(UIFormat, value); // $.datepicker.parseDate(UIFormat, value); // This line may throw an error.\n } catch (e) {\n //couldn't parse - throw a translatable error message\n throw formatPlus(\n metadata.errdateinvalid || _(\"Invalid date\"),\n compose(assoc(\"value\", value), quotable)(spec)\n );\n }\n if (date === null) {\n if (spec.notnull) {\n throw format(\n metadata.errrequired || _(\"Date required\"),\n compose(assoc(\"value\", value), quotable)(spec)\n );\n }\n return true;\n }\n (mindate = parseDate(spec.minimum)), (maxdate = parseDate(spec.maximum));\n if (!(mindate || maxdate)) return true; // Neither is set\n const fmindate = formatDate(UIFormat, mindate),\n fmaxdate = formatDate(UIFormat, maxdate);\n const quotableDate = compose(\n mergeLeft({\n value,\n minimum: fmindate,\n maximum: fmaxdate\n }),\n quotable\n )(spec);\n try {\n if (mindate && !maxdate && date < mindate)\n throw (\n metadata.errdatebeforemimimum ||\n _(\"A date before {minimum} is not allowed\")\n );\n else if (mindate && maxdate && (date < mindate || maxdate < date))\n throw (\n metadata.errdatenotinrange ||\n _(\"Date has to lie between {minimum} and {maximum}\")\n );\n else if (maxdate && !mindate && maxdate < date)\n throw (\n metadata.errdateaftermaximum ||\n _(\"A date after {maximum} is not allowed\")\n );\n } catch (e) {\n throw format(e, quotableDate);\n }\n return true;\n}\n\nexport const valueToDate = (format, value) => {\n let date;\n try {\n date = $.datepicker.parseDate(format, value);\n } catch (e) {\n const yyyycleanformat = format.replace(/[^mdy]/g, \"\").replace(\"yy\", \"yyyy\"),\n clean = value.replace(/[^0-9]/g, \"\");\n date = new Date();\n const yearindex = yyyycleanformat.indexOf(\"yyyy\");\n // If year was less than 4 digits, and not at end, adjust indices of other fields.\n const adjustment = yearindex === 0 ? clean.length - 8 : 0;\n let year = Number(clean.substr(yearindex, 4 + adjustment));\n if (year <= 99) {\n const cutoffyear = Number.isInteger(\n $.datepicker._defaults.shortYearCutoff\n )\n ? $.datepicker._defaults.shortYearCutoff\n : (date.getYear() % 100) +\n Number($.datepicker._defaults.shortYearCutoff);\n // Note: this will become odd if current year approaches end of\n // century. Let's say we live in 2099. User enters 98 -> fine.\n // Is below 109. User enters 02 => not fine. Still below 109.\n // But jQuery UI should also fix this. And it's still a long time.\n const century = (date.getFullYear() / 100) >> 0;\n if (year <= cutoffyear) {\n year += century * 100;\n } else {\n year += (century - 1) * 100;\n }\n }\n const month = Math.max(\n 0,\n Number(clean.substr(yyyycleanformat.indexOf(\"mm\") + adjustment, 2)) - 1\n );\n const dom = Number(\n clean.substr(yyyycleanformat.indexOf(\"dd\") + adjustment, 2)\n );\n date.setFullYear(year);\n date.setMonth(month);\n date.setDate(dom);\n if (\n date.getFullYear() !== year ||\n date.getMonth() !== month ||\n date.getDate() !== dom\n ) {\n throw \"invalid date\";\n }\n }\n return date;\n};\n\nexport const onChangeDate = ev => {\n let date;\n try {\n date = valueToDate($.datepicker._defaults.dateFormat, ev.target.value);\n } catch (e) {\n // ignore\n } finally {\n if (date) {\n ev.target.value = leadWithZeroes(\n $.datepicker.formatDate($.datepicker._defaults.dateFormat, date)\n );\n }\n }\n};\n\nexport const humanDate = (function () {\n var now = new Date();\n var hour0 = now.setHours(0, 0, 0, 0);\n var dayinms = 1000 * 60 * 60 * 24;\n var hour24 = hour0 + dayinms;\n var thisyear = now.getYear();\n var daysofweek = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"].map(\n function (day) {\n return _(day);\n }\n );\n var monthsofyear = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"June\",\n \"July\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\"\n ].map(function (month) {\n return _(month);\n });\n function isToday(ms) {\n return ms > hour0 && ms < hour24;\n }\n function isYesterday(ms) {\n return hour0 > ms && ms > hour0 - dayinms;\n }\n function isLastWeek(ms) {\n return ms > hour0 - dayinms * 6;\n }\n function isThisYear(date) {\n return thisyear == date.getYear();\n }\n function humanDate(date) {\n if (!(date instanceof Date)) throw \"Expects a Date object\";\n var ms = date.valueOf();\n var hm = \"\";\n hm = date.toHoursAndMinutes();\n if (isToday(ms)) {\n return hm;\n }\n if (isYesterday(ms)) {\n return _(\"Yesterday\") + \", \" + hm;\n }\n if (isLastWeek(ms)) {\n return daysofweek[date.getDay()] + \" \" + hm;\n }\n return (\n date.getDate() +\n \" \" +\n monthsofyear[date.getMonth()] +\n (isThisYear(date) ? \"\" : \" \" + date.getFullYear()) +\n \", \" +\n hm\n );\n }\n return humanDate;\n})();\n", "import { compose, either, isNil, not, path } from \"./functional.js\";\n\n/* editPolicy may be \"return\", \"stay\", or undefined, meaning off */\nexport const editPolicy = path([\"arbitrary\", \"core\", \"editPolicy\"]);\n\nexport const canEditEarlier = compose(not, isNil, editPolicy);\n\nconst isLabelValueDynamic = compose(\n value => value === true,\n path([\"arbitrary\", \"core\", \"isLabelValueDynamic\"])\n);\n\nconst preferUpdate = compose(\n value => value === true,\n path([\"arbitrary\", \"core\", \"preferUpdate\"])\n);\n\nexport const mustUpdate = either(preferUpdate, canEditEarlier);\n\nexport const updateLabels = either(mustUpdate, isLabelValueDynamic);\n", "const _Widgets = {};\n\nexport function registerWidget(options) {\n _Widgets[options.name] = options;\n}\nexport function getWidget(name) {\n return _Widgets[name];\n}\n", "/* global $ */\n\nimport { parseDate } from \"./dates\";\nimport { isReadOnly, isValidatable } from \"./control-helpers\";\nimport { updateLabels } from \"./feature-queries.js\";\nimport { conf } from \"./conf.js\";\nimport { getWidget } from \"./form-widgets.js\";\nimport { anyPass, has, prop } from \"./functional.js\";\nconst Dynprops = {};\n\n// Update the control element\nDynprops.update = function ($widget, control, Updates, requestor) {\n if (!$widget.get(0)) return;\n const oldval = $widget.val();\n\n const updates = Object.keys(Updates);\n const definition = getWidget(control.controltype);\n $widget.removeData([\"validated\"]);\n\n /** isForNotNull **/\n if (has(\"isForNotNull\", Updates)) {\n $widget.toggleClass(\"bb-for-required\", Boolean(control.isForNotNull));\n $widget.toggleClass(\"bb-for-optional\", !control.isForNotNull);\n }\n\n /** Placeholder **/\n if (has(\"placeholder\", Updates) > -1) {\n $widget.attr(\"placeholder\", control.placeholder);\n }\n\n /** Visible **/\n if (has(\"visible\", Updates)) {\n if (control.identifier === \"gformulier.gegevens.geschil_partner\")\n $widget.attr(\"aria-hidden\", !control.visible);\n $widget.attr(\"data-visible\", control.visible);\n\n if (control.visible) {\n window.setTimeout(function () {\n $widget.removeAttr(\"hidden\");\n }, 80);\n } else {\n window.setTimeout(function () {\n $widget.attr(\"hidden\", !control.visible);\n }, 80);\n }\n }\n\n /** Value **/\n if (has(\"value\", Updates)) {\n if (updateLabels(conf)) {\n /**\n @done: linklabel, listlabel, checkmultilist, memo, combobox, radio,\n checkbox, numedit, datetimepicker, edit, grid, multilist(?), listbox(?)\n @todo: freebox.\n\n NOTE: A widget currently can change itself *only* if\n they are registered with allowUpdatingSelf : true\n\n Widgets within a grid can update other widgets in a grid.\n */\n if (definition.setValue) {\n definition.setValue($widget.get(0), control.value, requestor, Updates);\n }\n }\n }\n\n /** Readonly **/\n if (\n anyPass([has(\"readonly\"), has(\"originalreadonly\"), has(\"visible\")], Updates)\n ) {\n const readonly = isReadOnly(control);\n if (typeof definition.onreadonly === \"function\") {\n definition.onreadonly($widget.get(0), readonly);\n } else {\n $widget.prop(\"disabled\", readonly);\n }\n }\n\n /** Minimum **/\n if (has(\"minimum\", Updates)) {\n $widget.attr(\"min\", control.minimum);\n if (control.controltype === \"datetimepicker\") {\n if (control.minimum) {\n $widget.datepicker(\"option\", \"minDate\", parseDate(control.minimum));\n }\n }\n }\n\n /** Maximum **/\n if (has(\"maximum\", Updates)) {\n $widget.attr(\"max\", control.maximum);\n if (control.controltype === \"datetimepicker\") {\n if (control.maximum) {\n $widget.datepicker(\"option\", \"maxDate\", parseDate(control.maximum));\n }\n }\n }\n\n /** Maxlength **/\n if (has(\"maxlength\", Updates)) {\n if (control.maxlength === 0) $widget.removeAttr(\"maxlength\");\n else $widget.attr(\"maxlength\", control.maxlength);\n }\n\n /** Let user know something changed perhaps against their intent. **/\n if (oldval !== $widget.val()) {\n $widget.addClass(\"bb-programmatically-changed\");\n $widget.trigger(\"change\", { programmatically: true });\n self.setTimeout(function () {\n $widget.removeClass(\"bb-programmatically-changed\");\n }, 1000);\n }\n\n /** Notnull **/\n if (has(\"notnull\", Updates)) {\n if (typeof definition.onrequired === \"function\") {\n definition.onrequired($widget.get(0), control.notnull);\n } else {\n $widget.attr(\"aria-required\", control.notnull);\n }\n if (control.notnull) {\n $widget.addClass(\"notnull\");\n } else {\n $widget.removeClass(\"notnull\");\n }\n }\n\n if (isValidatable(control)) {\n $widget.attr(\"aria-errormessage\", `${control.id}--error`);\n $widget.addClass(\"validatable\");\n } else {\n $widget.removeAttr(\"aria-errormessage\");\n $widget.removeClass(\"validatable\");\n }\n\n if (updates.length > 0) {\n const event = new CustomEvent(\"bb:updatedControl\", {\n detail: { control, Updates },\n bubbles: true\n });\n $widget.get(0).dispatchEvent(event);\n $(document).trigger(\"bb:updated\", [$widget, control, updates]);\n }\n};\n\n$.fn.extend({\n updateControl: function (controls, requestor) {\n return this.each(function () {\n const $this = $(this),\n control = $this.data(\"control\");\n if (\n this === requestor &&\n !prop(\"allowUpdatingSelf\", getWidget(control.controltype))\n ) {\n // This was the one requesting an update\n return this;\n }\n if (!control) throw (\"No updateControl defined for\", $this);\n const id = control.id,\n update = controls.find(function (c) {\n return c.id === id;\n }),\n // updates = [],\n Updates = {},\n props = [\n \"maxlength\",\n \"isForNotNull\",\n \"minimum\",\n \"maximum\",\n \"notnull\",\n \"readonly\",\n \"originalreadonly\",\n \"placeholder\",\n \"precision\",\n \"stringmask\",\n \"errortext\",\n \"visible\",\n \"value\",\n \"columns\",\n \"text\"\n ];\n // Caron-syntax used in label, therefore no (text) interface\n // returned -- should not mix and match dynprops with empty\n // labels! Do not allow this to error on the user though!\n\n // Does also handle (cause to ignore) labels within a grid!\n if (typeof update === \"undefined\") {\n return this;\n // update = $.extend({}, control, {visible: false});\n }\n for (var i in props) {\n if (control[props[i]] !== update[props[i]]) {\n Updates[props[i]] = { from: control[props[i]], to: update[props[i]] };\n control[props[i]] = update[props[i]];\n // updates.push(props[i]);\n }\n }\n Dynprops.update($this, control, Updates, requestor);\n return this;\n });\n }\n});\n\nexport { Dynprops };\n", "const Hooks = new Map();\n\nexport const registerHook = key => hook => {\n if (typeof hook !== \"function\") throw \"Can only add a function as a hook\";\n Hooks.set(key, hook);\n};\n\nexport const runHook =\n key =>\n (...args) => {\n if (Hooks.has(key)) Hooks.get(key)(...args);\n };\n", "/* global $ */\nimport { bbmClass, isReadOnly, renderAttribs } from \"./control-helpers\";\nimport { Dynprops } from \"./dynprops\";\nimport { escaped, escapeHTML } from \"./escape.js\";\nimport { conf, propFinder } from \"./conf\";\nimport { getWidget } from \"./form-widgets.js\";\nimport {\n assoc,\n both,\n compose,\n complement,\n has,\n hasPath,\n isNil,\n not,\n prop\n} from \"./functional.js\";\nimport { runHook } from \"./hooks.js\";\nimport { Mode } from \"./mode.js\";\n\nconst arbitraryCoreProp = propFinder(conf, \"arbitrary.core\");\n\n/**\n * Create a control widget, then insert it into the DOM\n *\n * @param {Object} control A control object as defined in the JSON API. The one to render + add.\n * @param {Object} group The group object to which this control belongs.\n * @param {Element} wGroup Element whereto this control should be added. *NOTE* that this need not be a .bb-group\n *\n * @return undefined\n *\n * @todo Simplify parameter list.\n */\nfunction wControl(control, group, wGroup) {\n control._group = group;\n let attribs = {};\n let widget;\n const enabled = group.current || complement(isReadOnly)(control);\n // Has been rendered\n if (control.$elt) {\n $(wGroup).append(control.$elt);\n return control.$elt;\n }\n if (compose(has(\"fixup\"), getWidget)(control.controltype))\n compose(fn => fn(control), prop(\"fixup\"), getWidget)(control.controltype);\n\n if (control.datatype) attribs[\"data-datatype\"] = control.datatype;\n\n if (control.meta)\n for (let d in control.meta) {\n if (both(has(d), compose(not, isNil, prop(d)))(control.meta))\n attribs[\"data-\" + d] = escape(control.meta[d]);\n }\n if (control.metadata) {\n attribs[\"data-metadata-keys\"] = Object.keys(control.metadata)\n .map(s => s.replace(/\\s/g, \"-\"))\n .join(\" \");\n }\n if (control.aria)\n for (let a in control.aria) {\n if (has(a, control.aria)) attribs[\"aria-\" + a] = control.aria[a];\n }\n\n if (control.name) {\n attribs[\"name\"] = control.name;\n }\n\n const wdef = getWidget(control.controltype);\n if (!wdef) {\n console.warn(`No widget definition for ${control.controltype}`);\n return null;\n }\n const tagName = wdef.tagName;\n attribs = wdef.attribs(attribs, control, enabled);\n\n attribs[\"data-type\"] = control.controltype;\n if (tagName) {\n widget = $(\"<\" + tagName + \" \" + renderAttribs(attribs) + \"/>\");\n } else {\n widget = $(wdef.render(control, group, attribs));\n if (!widget) return null;\n }\n\n if (control.className) {\n widget.addClass(control.className);\n }\n control.$elt = widget;\n control._elt = widget.get(0);\n\n if (wdef && wdef.tagName) {\n /**\n Okay, some (older) definitions have a tagName definition ->\n from which a quite empty skeleton widget is created.\n\n Afterwards, they fill that very widget with a render function\n of a different signature than usual:\n\n Instead of (control (plain object), group (plain object), attribs (array)), they get\n (control (plain object), widget (jQuery collection), group (plain object))).\n\n */\n wdef.render(control, widget, group);\n }\n\n // attach an id whenever meaningful:\n // if (control.id && /\\d+$/.test(control.id))\n if (control.id) {\n // id used not to be safe, but now we prepend the groupid, making it safe.\n widget.attr(\"id\", control.id);\n }\n if (control._originalid) {\n // Use data-id for stuff refering to the interface, no matter in which group it is, such as informationsources.\n widget.attr(\"data-id\", control._originalid);\n }\n\n if (hasPath([\"metadata\", \"autocomplete\"], control)) {\n widget\n .attr(\"data-server-name\", control.name)\n .attr(\"name\", control.metadata.autocomplete)\n .attr(\"autocomplete\", control.metadata.autocomplete);\n }\n\n $(wGroup).append(widget);\n\n /* Insert a space between elements so that elements are reasonably\n * well-placed when CSS is disabled.\n */\n $(wGroup).append(\" \");\n\n // Tooltips:\n if (control.hint) {\n if (enabled) Mode.set(\"hasHints\");\n runHook(\"hinter\")(widget, assoc(\"enabled\", enabled, control));\n }\n widget.data(\"control\", control);\n\n /**\n * Dynamic properties\n */\n var dynprops = [\n \"maxlength\",\n \"minimum\",\n \"maximum\",\n \"notnull\",\n \"isForNotNull\",\n \"readonly\",\n \"precision\",\n \"stringmask\",\n \"errortext\",\n \"placeholder\"\n ],\n dynpropsforus = {};\n\n for (var ii in dynprops) {\n if (has(dynprops[ii], control))\n dynpropsforus[dynprops[ii]] = { to: control[dynprops[ii]] }; // .push(dynprops[ii]);\n }\n\n if (has(\"visible\", control) && control.visible === false) {\n dynpropsforus[\"visible\"] = { to: false }; // .push(dynprops[ii]);\n }\n // dynpropsforus.push(\"visible\");\n\n widget.data(\"anchor\", widget);\n\n if (wdef && wdef.afterRender) {\n wdef.afterRender(widget, control);\n }\n\n if (shouldWrap(control)) {\n wrapInlineInput(widget);\n }\n\n /* Allow class-based styling */\n if (control[\"font-class\"]) {\n widget.addClass(bbmClass(control[\"font-class\"]));\n }\n\n /**\n * Two things:\n * - Put control tags in data-tags of Element.\n * - Make TAG known to CSS as bb-tagged-TAG.\n */\n if (control[\"tags\"] instanceof Array) {\n $(widget).data(\"tags\", control[\"tags\"]);\n $.each(control[\"tags\"], function (i, tag) {\n widget.addClass(\"bb-tagged-\" + tag);\n });\n }\n\n Dynprops.update(widget, control, dynpropsforus);\n\n return widget;\n}\n\nfunction shouldWrap(control) {\n return (\n control.prelabel ||\n control.postlabel ||\n (arbitraryCoreProp(\"wrapAllSingleLiners\") === true &&\n compose(prop(\"couldWrap\"), getWidget)(control.controltype)) ||\n (control.placeholder &&\n arbitraryCoreProp(\"accessiblePlaceholders\") === true &&\n compose(prop(\"couldWrap\"), getWidget)(control.controltype))\n );\n}\n\nfunction wrapInlineInput(widget) {\n var control = widget.data(\"control\"),\n prelabel = control.prelabel,\n postlabel = control.postlabel;\n var anchor = widget.data(\"anchor\");\n var wraptag = \"span\";\n if (anchor.get(0).nodeName === \"DIV\") wraptag = \"div\";\n anchor.wrapAll(\n \"<\" +\n wraptag +\n ' data-wraps-type=\"' +\n control.controltype +\n '\" class=\"bb-input-wrap\">\"\n );\n anchor = anchor.parent();\n widget.data(\"anchor\", anchor);\n anchor.data({\n control: control,\n type: control.controltype\n });\n if (prelabel)\n anchor.prepend(\n '' +\n escapeHTML(prelabel) +\n \"\"\n );\n if (control.placeholder && arbitraryCoreProp(\"accessiblePlaceholders\")) {\n widget\n .get(0)\n .setAttribute(\n \"aria-describedby\",\n (\n (widget.get(0).getAttribute(\"aria-describedby\") || \"\") +\n ` ${control.id}--placeholder`\n ).trim()\n );\n anchor.append(\n `${escapeHTML(control.placeholder)}`\n );\n }\n if (postlabel)\n anchor.append(\n '' +\n escapeHTML(postlabel) +\n \"\"\n );\n}\n\nconst getControl = elt => $.data(elt, \"control\");\n\nexport { getControl, wControl };\n", "export const listtypes = {\n radio: \"LIST\",\n checkmultilist: \"LIST\",\n customlist: \"LIST\",\n combobox: \"BOX\",\n listbox: \"BOX\",\n multilist: \"BOX\"\n};\n", "/* global $ */\nimport { getWidget } from \"./form-widgets.js\";\nimport {\n always,\n assoc,\n either,\n tap,\n cond,\n path,\n propEq,\n T\n} from \"./functional.js\";\nimport { _ } from \"./gettext.js\";\nimport { format, formatPlus } from \"./text-utils.js\";\nimport { listtypes } from \"./types.js\";\nimport { compose } from \"./functional.js\";\nimport { quotable } from \"./quotable.js\";\n\n// Validate actual input, return true if it's ok, throw an error otherwise.\nexport function validateInput(node) {\n const $node = $(node),\n control = $node.data(\"control\");\n let ok = true,\n re,\n errortext,\n val,\n category;\n\n if (control === undefined) {\n throw \"Not a BB widget\";\n }\n\n if (control.visible === false) {\n return true;\n }\n category = listtypes[control.controltype];\n\n val = $node.val();\n\n if (control.stringmask) {\n re = new RegExp(control.stringmask);\n if (!re.test(val))\n throw format(\n control.errortext,\n compose(assoc(\"value\", val), quotable)(control)\n );\n }\n if (control.notnull) {\n if (category === \"LIST\") {\n ok = $node.is(\":has(:checked)\");\n } else if (category === \"BOX\") {\n // There could be a faux, checked, option telling us to\n // fill in the field. That is the second check here.\n ok = val !== null && val !== \"\";\n } else if (control.controltype == \"checkbox\") {\n ok = $node.is(\":checked\");\n } else if (control.controltype === \"grid\") {\n if (control.addallowed === false) {\n const checkable = control.columns.find(\n either(\n propEq(\"controltype\", \"radiobutton\"),\n propEq(\"controltype\", \"checkbox\")\n )\n );\n if (checkable) {\n ok = $node.is(\":has(:checked)\");\n }\n } else {\n // A required grid should have at least one row.\n // But if no rows **can** be added it would be rude and confusing to complain to the end-user.\n ok = control.value.length > 0 || control.addallowed === false;\n }\n } else {\n re = /\\S/;\n ok = re.test(val);\n }\n if (!ok) {\n throw cond([\n [path([\"metadata\", \"errrequired\"]), path([\"metadata\", \"errrequired\"])],\n [\n propEq(\"controltype\", \"datetimepicker\"),\n compose(c => formatPlus(_(\"Date required\"), c), quotable)\n ],\n [\n always([\"BOX\", \"LIST\"].indexOf(category) > -1),\n compose(c => format(_(\"Choice required\"), c), quotable)\n ],\n [T, compose(c => format(_(\"Field required\"), c), quotable)]\n ])(control);\n }\n }\n if (control.maxlength && control.maxlength > 0) {\n ok = val.length <= control.maxlength;\n if (!ok) {\n throw format(\n path([\"metadata\", \"errtexttoolong\"])(control) ||\n _(\"Text length exceeds the maximum of {maxlength} characters\"),\n quotable(control)\n );\n }\n }\n if (getWidget(control.controltype).validate) {\n return getWidget(control.controltype).validate(control, val);\n }\n return true;\n}\n", "import {\n groupWith,\n map,\n filter,\n pipe,\n path,\n strictUniq,\n lensPath\n} from \"./functional.js\";\n\nconst pathToGroup = [\"metadata\", \"group\"];\nexport const pathGroup = path(pathToGroup);\nexport const lensGroup = lensPath([\"metadata\", \"group\"]);\n\nconst areOfOneQuestion = (a, b) => a.isfor === b.id || b.isfor === a.id;\n\nexport const groupInner = groupWith(areOfOneQuestion);\n\nconst InfinityIfMinus1 = num => (num + 1 || Infinity) - 1;\nconst indexOfOrInfinity = (sub, s) => InfinityIfMinus1(s.indexOf(sub));\nexport const baseGroup = s => s.substr(0, indexOfOrInfinity(\".\", s));\nexport const tailGroup = s => s.substr(indexOfOrInfinity(\".\", s) + 1);\n\nconst belongTogether = (a, b) =>\n areOfOneQuestion(a, b) ||\n (pathGroup(a) &&\n pathGroup(b) &&\n baseGroup(pathGroup(a)) === baseGroup(pathGroup(b)));\n\nexport const groupOuter = groupWith(belongTogether);\n\nexport const groupClasses = pipe(\n map(path[(\"metadata\", \"groupClasses\")]),\n filter(Boolean),\n strictUniq\n);\n\nexport const doGrouping = path([\"arbitrary\", \"core\", \"form-group\", \"on\"]);\n", "export const normalize = s => s.toLowerCase().replace(/[^a-z0-9]/g, \"-\");\n", "import { path, either, compose, prop } from \"./functional.js\";\nimport { conf } from \"./conf.js\";\n\n/**\n\nName keys follow this pattern:\n\n__\n\n is any of:\n\n- GROUPING: subgroup of questions and/or texts and/or links\n- ITEM: a question and/or text and/or link\n- QUESTION: a question (is also an item)\n- TEXT: a top level text (not a label for a question)\n- LINK: a top level link (so: not inside markdown)\n- PICTURE: a top level image (so : nto inside markdown)\n\nGROUPING ::= ITEM+\nITEM ::= QUESTION | TEXT | LINK | PICTURE\n\n is any of:\n\n- _CLASS_ : the css class to put on this type \n- _PREFIX_: a css class prefix\n- _DATA_: a data- attribute\n\nwhere can be anything.\n\nThe default values for those keys, thus the strings that willl be used\nin the generated DOM, are provided in nameDefaults. They can be\noverwritten in the `conf.json` file in the property\n`core.form-group.names` in order to retrofit older or other naming\nschemes.\n\n*/\n\nexport const /* A grouping groups items */\n GROUPING_CLASS = \"grouping-class\", // Class of grouping\n GROUPING_PREFIX_TYPE = \"grouping-prefix-type\", // prefix for -question, -text or -author\n GROUPING_DATA_NAME = \"grouping-data-name\", // data attribute conveying author provided group name\n GROUPING_DATA_LEVEL = \"grouping-data-level\", // grouping level, 1-based\n ITEM_PREFIX_AUTHORCLASS = \"item-prefix-authorclass\", // prefix for author class set with cssclasses on the metadata\n QUESTION_CLASS = \"question-class\", //: \"bb-questionlabelgroup\",\n QUESTION_PREFIX_TYPE = \"question-prefix-type\", //: \"bb-itype\",\n QUESTION_PREFIX_PROPERTY = \"question-prefix-property\", //: \"bb-itype\",\n QUESTION_DATA_LAYOUT = \"question-data-layout\", //: \"data-form-group-layout\",\n QUESTION_PREFIX_AUTHORSTYLE = \"question-prefix-authorstyle\", //: \"bb-g-\",\n QUESTION_CLASS_NOLABEL = \"question-class-nolabel\"; //: \"form-group__question--no-label\",\n\nconst nameDefaults = {\n [GROUPING_CLASS]: \"form-group\",\n [GROUPING_PREFIX_TYPE]: \"form-group-\",\n [GROUPING_DATA_NAME]: \"data-form-group-name\",\n [GROUPING_DATA_LEVEL]: \"data-form-group-level\",\n [ITEM_PREFIX_AUTHORCLASS]: \"form-group__item--author-class-\",\n [QUESTION_CLASS]: \"bb-questionlabelgroup\",\n [QUESTION_PREFIX_TYPE]: \"bb-itype\",\n [QUESTION_PREFIX_PROPERTY]: \"question-\", //: \"bb-itype\",\n [QUESTION_DATA_LAYOUT]: \"data-form-group-layout\",\n [QUESTION_PREFIX_AUTHORSTYLE]: \"bb-g-\",\n [QUESTION_CLASS_NOLABEL]: \"form-group__question--no-label\"\n};\n\n// const fg = {\n// [GROUPING_CLASS]: \"no-form-group-outer\",\n// [GROUPING_PREFIX_TYPE]: \"form-group-\",\n// [QUESTION_CLASS]: \"bb-questionlabelgroup p-form-group\",\n// [QUESTION_PREFIX_TYPE]: \"bb-itype-\",\n// [QUESTION_DATA_LAYOUT]: \"data-p-form-group-layout-type\",\n// [QUESTION_CLASS_NOLABEL]: \"p-form-group-orphaned\"\n// };\n\n// const bem_example = {\n// [GROUPING_CLASS]: \"form-group\",\n// [GROUPING_PREFIX_TYPE]: \"form-group-\",\n// [ITEM_PREFIX_AUTHORCLASS]: \"form-group__item--author-class-\",\n// [QUESTION_CLASS]: \"bb-questionlabelgroup\",\n// [QUESTION_PREFIX_TYPE]: \"form-group__question-\",\n// [QUESTION_DATA_LAYOUT]: \"data-form-group-layout\",\n// [QUESTION_PREFIX_AUTHORSTYLE]: \"form-group__question--author-style-\"\n// };\n\nconst pathToNames = path([\"arbitrary\", \"core\", \"form-group\", \"names\"]);\n\nexport const names = propArg =>\n either(compose(prop(propArg), pathToNames), _ => prop(propArg, nameDefaults))(\n conf\n );\n", "/* global $ */\nimport {\n all,\n both,\n curry,\n filter,\n has,\n compose,\n ifElse,\n head,\n path,\n prop,\n propEq,\n any,\n find,\n pathOr,\n split,\n join,\n map,\n when,\n tap,\n cond,\n not\n} from \"./functional.js\";\nimport {\n isTextual,\n isPicture,\n isQuestion,\n isVisible\n} from \"./control-helpers.js\";\nimport { groupOuter, baseGroup, tailGroup, pathGroup } from \"./groupings\";\nimport { normalize } from \"./font-classes\";\nimport { getWidget } from \"./form-widgets.js\";\nimport { conf } from \"./conf\";\nimport * as n from \"./names.js\";\nimport { names } from \"./names.js\";\n\nconst doTopLevel = pathOr(true, [\n \"arbitrary\",\n \"core\",\n \"form-group\",\n \"toplevel\"\n]);\n\nconst doLegends = pathOr(true, [\n \"arbitrary\",\n \"core\",\n \"form-group\",\n \"doLegends\"\n]);\n\nconst getLayout = type =>\n pathOr(compose(prop(\"layout\"), getWidget)(type), [\n \"arbitrary\",\n \"form-group\",\n type\n ]);\n\nconst getGroupName = compose(when(Boolean, baseGroup), pathGroup, head);\n\n// Interface Font Style\nconst questionGroupClass = compose(\n s => names(n.QUESTION_PREFIX_AUTHORSTYLE) + s,\n normalize,\n prop(\"font-class\")\n);\n\n// interface metadata: cssclasses=\nexport const extraClasses = prefix =>\n compose(\n when(\n Boolean,\n compose(\n join(\" \"),\n map(compose(s => names(prefix) + s, normalize)),\n split(\" \")\n )\n ),\n path([\"metadata\", \"cssclasses\"])\n );\n\nconst asciify = s => s.replace(/[^a-z-]/g, \"-\");\n\nconst areAllInvisible = compose(not, any(isVisible));\nconst areAllReadonly = both(\n any(both(isQuestion, isVisible)),\n compose(all(prop(\"originalreadonly\")), filter(both(isQuestion, isVisible)))\n);\n\nconst areAllNotNull = both(\n any(both(isQuestion, isVisible)),\n compose(all(prop(\"notnull\")), filter(both(isQuestion, isVisible)))\n);\n\nconst updateClassWhen = curry((className, fn, controls, elt) => {\n elt.classList.toggle(className, fn(controls));\n});\n\nconst setReadonlyFGClass = updateClassWhen(\n names(n.GROUPING_PREFIX_TYPE) + \"-readonly\",\n areAllReadonly\n);\nconst setEmptyFGClass = updateClassWhen(\n names(n.GROUPING_PREFIX_TYPE) + \"-empty\",\n areAllInvisible\n);\nconst setRequiredFGClass = updateClassWhen(\n names(n.GROUPING_PREFIX_TYPE) + \"-required\",\n areAllNotNull\n);\n\nconst setReadonlyQClass = updateClassWhen(\n names(n.QUESTION_PREFIX_PROPERTY) + \"-readonly\",\n areAllReadonly\n);\nconst setEmptyQClass = updateClassWhen(\n names(n.QUESTION_PREFIX_PROPERTY) + \"-empty\",\n areAllInvisible\n);\nconst setRequiredQClass = updateClassWhen(\n names(n.QUESTION_PREFIX_PROPERTY) + \"-required\",\n areAllNotNull\n);\n\nexport const createFormGroup = (wControl, group, level) => c => {\n let formGroup;\n const groupName = getGroupName(c);\n\n if (\n groupName ||\n (doTopLevel(conf) &&\n (doLegends(conf) || !all(propEq(\"controltype\", \"legend\"))(c)))\n ) {\n formGroup = document.createElement(\"div\");\n formGroup.className = names(n.GROUPING_CLASS);\n formGroup.setAttribute(names(n.GROUPING_DATA_LEVEL), level);\n setEmptyFGClass(c, formGroup);\n setReadonlyFGClass(c, formGroup);\n setRequiredFGClass(c, formGroup);\n formGroup.addEventListener(\"bb:updatedControl\", ({ detail }) => {\n if (has(\"visible\", detail.Updates)) {\n setEmptyFGClass(c, formGroup);\n }\n if (has(\"readonly\", detail.Updates)) {\n setReadonlyFGClass(c, formGroup);\n }\n if (has(\"notnull\", detail.Updates)) {\n setRequiredFGClass(c, formGroup);\n }\n });\n if (groupName) {\n formGroup.setAttribute(names(n.GROUPING_DATA_NAME), asciify(groupName));\n formGroup.classList.add(names(n.GROUPING_PREFIX_TYPE) + \"-author\");\n } else if (find(isQuestion, c)) {\n formGroup.classList.add(names(n.GROUPING_PREFIX_TYPE) + \"-interface\");\n } else if (compose(isPicture, head)(c)) {\n formGroup.classList.add(names(n.GROUPING_PREFIX_TYPE) + \"-picture\");\n } else if (compose(isTextual, head)(c)) {\n formGroup.classList.add(names(n.GROUPING_PREFIX_TYPE) + \"-text\");\n }\n } else {\n formGroup = document.createDocumentFragment();\n }\n\n const cWithin = compose(\n groupOuter,\n map(\n when(\n pathGroup,\n tap(control =>\n compose(\n ifElse(\n s => s === \"\",\n () => delete control.metadata.group,\n group => (control.metadata.group = group)\n ),\n tailGroup\n )(control.metadata.group)\n )\n )\n )\n )(c);\n cWithin.forEach(\n cond([\n [\n getGroupName,\n compose(\n n => formGroup.appendChild(n),\n createFormGroup(wControl, group, level + 1)\n )\n ],\n [\n any(isQuestion),\n controls => {\n const answer = find(isQuestion, controls);\n const classes = [\n names(n.QUESTION_CLASS),\n `${names(n.QUESTION_PREFIX_TYPE)}-${answer.controltype}`,\n questionGroupClass(answer),\n extraClasses(n.ITEM_PREFIX_AUTHORCLASS)(answer),\n controls.length === 1 && names(n.QUESTION_CLASS_NOLABEL)\n ].filter(Boolean);\n const qlg = document.createElement(\"div\");\n qlg.setAttribute(\n names(n.QUESTION_DATA_LAYOUT),\n answer._layout || getLayout(answer.controltype)(conf)\n );\n qlg.className = classes.join(\" \");\n setEmptyQClass(controls, qlg);\n setReadonlyQClass(controls, qlg);\n setRequiredQClass(controls, qlg);\n qlg.addEventListener(\"bb:updatedControl\", ({ detail }) => {\n if (has(\"visible\", detail.Updates)) {\n setEmptyQClass(controls, qlg);\n }\n if (has(\"readonly\", detail.Updates)) {\n setReadonlyQClass(controls, qlg);\n }\n if (has(\"notnull\", detail.Updates)) {\n setRequiredQClass(controls, qlg);\n }\n });\n controls.forEach(c => wControl(c, group, $(qlg)));\n formGroup.appendChild(qlg);\n }\n ],\n [\n () => true,\n map(c => {\n const $widget = wControl(c, group, $(formGroup));\n if ($widget)\n $widget.addClass(extraClasses(n.ITEM_PREFIX_AUTHORCLASS)(c));\n })\n ]\n ])\n );\n return formGroup;\n};\n", "/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\n// IMPORTANT: these imports must be type-only\nimport type {Directive, DirectiveResult, PartInfo} from './directive.js';\n\nconst DEV_MODE = true;\nconst ENABLE_EXTRA_SECURITY_HOOKS = true;\nconst ENABLE_SHADYDOM_NOPATCH = true;\n\nif (DEV_MODE) {\n console.warn('lit-html is in dev mode. Not recommended for production!');\n}\n\nconst wrap =\n ENABLE_SHADYDOM_NOPATCH &&\n window.ShadyDOM?.inUse &&\n window.ShadyDOM?.noPatch === true\n ? window.ShadyDOM!.wrap\n : (node: Node) => node;\n\nconst trustedTypes = ((globalThis as unknown) as Partial).trustedTypes;\n\n/**\n * Our TrustedTypePolicy for HTML which is declared using the html template\n * tag function.\n *\n * That HTML is a developer-authored constant, and is parsed with innerHTML\n * before any untrusted expressions have been mixed in. Therefor it is\n * considered safe by construction.\n */\nconst policy = trustedTypes\n ? trustedTypes.createPolicy('lit-html', {\n createHTML: (s) => s,\n })\n : undefined;\n\n/**\n * Used to sanitize any value before it is written into the DOM. This can be\n * used to implement a security policy of allowed and disallowed values in\n * order to prevent XSS attacks.\n *\n * One way of using this callback would be to check attributes and properties\n * against a list of high risk fields, and require that values written to such\n * fields be instances of a class which is safe by construction. Closure's Safe\n * HTML Types is one implementation of this technique (\n * https://github.com/google/safe-html-types/blob/master/doc/safehtml-types.md).\n * The TrustedTypes polyfill in API-only mode could also be used as a basis\n * for this technique (https://github.com/WICG/trusted-types).\n *\n * @param node The HTML node (usually either a #text node or an Element) that\n * is being written to. Note that this is just an exemplar node, the write\n * may take place against another instance of the same class of node.\n * @param name The name of an attribute or property (for example, 'href').\n * @param type Indicates whether the write that's about to be performed will\n * be to a property or a node.\n * @return A function that will sanitize this class of writes.\n */\nexport type SanitizerFactory = (\n node: Node,\n name: string,\n type: 'property' | 'attribute'\n) => ValueSanitizer;\n\n/**\n * A function which can sanitize values that will be written to a specific kind\n * of DOM sink.\n *\n * See SanitizerFactory.\n *\n * @param value The value to sanitize. Will be the actual value passed into\n * the lit-html template literal, so this could be of any type.\n * @return The value to write to the DOM. Usually the same as the input value,\n * unless sanitization is needed.\n */\nexport type ValueSanitizer = (value: unknown) => unknown;\n\nconst identityFunction: ValueSanitizer = (value: unknown) => value;\nconst noopSanitizer: SanitizerFactory = (\n _node: Node,\n _name: string,\n _type: 'property' | 'attribute'\n) => identityFunction;\n\n/** Sets the global sanitizer factory. */\nconst setSanitizer = (newSanitizer: SanitizerFactory) => {\n if (!ENABLE_EXTRA_SECURITY_HOOKS) {\n return;\n }\n if (sanitizerFactoryInternal !== noopSanitizer) {\n throw new Error(\n `Attempted to overwrite existing lit-html security policy.` +\n ` setSanitizeDOMValueFactory should be called at most once.`\n );\n }\n sanitizerFactoryInternal = newSanitizer;\n};\n\n/**\n * Only used in internal tests, not a part of the public API.\n */\nconst _testOnlyClearSanitizerFactoryDoNotCallOrElse = () => {\n sanitizerFactoryInternal = noopSanitizer;\n};\n\nconst createSanitizer: SanitizerFactory = (node, name, type) => {\n return sanitizerFactoryInternal(node, name, type);\n};\n\n// Added to an attribute name to mark the attribute as bound so we can find\n// it easily.\nconst boundAttributeSuffix = '$lit$';\n\n// This marker is used in many syntactic positions in HTML, so it must be\n// a valid element name and attribute name. We don't support dynamic names (yet)\n// but this at least ensures that the parse tree is closer to the template\n// intention.\nconst marker = `lit$${String(Math.random()).slice(9)}$`;\n\n// String used to tell if a comment is a marker comment\nconst markerMatch = '?' + marker;\n\n// Text used to insert a comment marker node. We use processing instruction\n// syntax because it's slightly smaller, but parses as a comment node.\nconst nodeMarker = `<${markerMatch}>`;\n\nconst d = document;\n\n// Creates a dynamic marker. We never have to search for these in the DOM.\nconst createMarker = (v = '') => d.createComment(v);\n\n// https://tc39.github.io/ecma262/#sec-typeof-operator\ntype Primitive = null | undefined | boolean | number | string | symbol | bigint;\nconst isPrimitive = (value: unknown): value is Primitive =>\n value === null || (typeof value != 'object' && typeof value != 'function');\nconst isArray = Array.isArray;\nconst isIterable = (value: unknown): value is Iterable =>\n isArray(value) ||\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typeof (value as any)?.[Symbol.iterator] === 'function';\n\nconst SPACE_CHAR = `[ \\t\\n\\f\\r]`;\nconst ATTR_VALUE_CHAR = `[^ \\t\\n\\f\\r\"'\\`<>=]`;\nconst NAME_CHAR = `[^\\\\s\"'>=/]`;\n\n// These regexes represent the five parsing states that we care about in the\n// Template's HTML scanner. They match the *end* of the state they're named\n// after.\n// Depending on the match, we transition to a new state. If there's no match,\n// we stay in the same state.\n// Note that the regexes are stateful. We utilize lastIndex and sync it\n// across the multiple regexes used. In addition to the five regexes below\n// we also dynamically create a regex to find the matching end tags for raw\n// text elements.\n\n/**\n * End of text is: `<` followed by:\n * (comment start) or (tag) or (dynamic tag binding)\n */\nconst textEndRegex = /<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g;\nconst COMMENT_START = 1;\nconst TAG_NAME = 2;\nconst DYNAMIC_TAG_NAME = 3;\n\nconst commentEndRegex = /-->/g;\n/**\n * Comments not started with a Map() containing a single entry per metadata property\n * with it's respective value of that metadata.\n *\n * groups --> a Map() containing a single property per group\n * which has metadata, and the value of that metadata.\n *\n * controls --> a Map() containing a single property per control\n * which has metadata, and the value of that metadata.\n */\n\nconst getmetadata = data => {\n let fromnode = {\n props: new Map(),\n groups: new Map(),\n controls: new Map()\n };\n\n try {\n data.groups.forEach(group => {\n if (group.metadata !== undefined) {\n fromnode.groups.set(group.groupid, group.metadata);\n Object.keys(group.metadata).forEach(metaprop => {\n fromnode.props.set(metaprop, group.metadata[metaprop]);\n });\n }\n group.controls !== undefined &&\n group.controls.forEach(control => {\n Object.keys(control).forEach(prop => {\n if (prop === \"metadata\") {\n fromnode.controls.set([control.id], control.metadata);\n Object.keys(control.metadata).forEach(metaprop => {\n fromnode.props.set(metaprop, control.metadata[metaprop]);\n });\n }\n });\n });\n });\n return fromnode;\n } catch (err) {\n window.console && window.console.warn(err);\n return fromnode;\n }\n};\n\nexport { getmetadata };\n", "(function(){function n(){function v(){return null}function l(a){return a?\"object\"===typeof a||\"function\"===typeof a:!1}function p(a){if(null!==a&&!l(a))throw new TypeError(\"Object prototype may only be an Object or null: \"+a);}var q=null,e=Object,w=!!e.create||!({__proto__:null}instanceof e),A=e.create||(w?function(a){p(a);return{__proto__:a}}:function(a){function c(){}p(a);if(null===a)throw new SyntaxError(\"Native Object.create is required to create objects with null prototype\");c.prototype=a;return new c}),\nB=e.getPrototypeOf||([].__proto__===Array.prototype?function(a){a=a.__proto__;return l(a)?a:null}:v);var m=function(a,c){function k(){}if(void 0===(this&&this instanceof m?this.constructor:void 0))throw new TypeError(\"Constructor Proxy requires 'new'\");if(!l(a)||!l(c))throw new TypeError(\"Cannot create proxy with a non-object as target or handler\");q=function(){a=null;k=function(b){throw new TypeError(\"Cannot perform '\"+b+\"' on a proxy that has been revoked\");}};setTimeout(function(){q=null},0);var g=\nc;c={get:null,set:null,apply:null,construct:null};for(var h in g){if(!(h in c))throw new TypeError(\"Proxy polyfill does not support trap '\"+h+\"'\");c[h]=g[h]}\"function\"===typeof g&&(c.apply=g.apply.bind(g));g=B(a);var r=!1,t=!1;if(\"function\"===typeof a){var f=function(){var b=this&&this.constructor===f,d=Array.prototype.slice.call(arguments);k(b?\"construct\":\"apply\");return b&&c.construct?c.construct.call(this,a,d):!b&&c.apply?c.apply(a,this,d):b?(d.unshift(a),new (a.bind.apply(a,d))):a.apply(this,\nd)};r=!0}else a instanceof Array?(f=[],t=!0):f=w||null!==g?A(g):{};var x=c.get?function(b){k(\"get\");return c.get(this,b,f)}:function(b){k(\"get\");return this[b]},C=c.set?function(b,d){k(\"set\");c.set(this,b,d,f)}:function(b,d){k(\"set\");this[b]=d},y={};e.getOwnPropertyNames(a).forEach(function(b){if(!((r||t)&&b in f)){var d=e.getOwnPropertyDescriptor(a,b);e.defineProperty(f,b,{enumerable:!!d.enumerable,get:x.bind(a,b),set:C.bind(a,b)});y[b]=!0}});h=!0;if(r||t){var D=e.setPrototypeOf||([].__proto__===\nArray.prototype?function(b,d){p(d);b.__proto__=d;return b}:v);g&&D(f,g)||(h=!1)}if(c.get||!h)for(var u in a)y[u]||e.defineProperty(f,u,{get:x.bind(a,u)});e.seal(a);e.seal(f);return f};m.revocable=function(a,c){return{proxy:new m(a,c),revoke:q}};return m};var z=\"undefined\"!==typeof process&&\"[object process]\"==={}.toString.call(process)||\"undefined\"!==typeof navigator&&\"ReactNative\"===navigator.product?global:self;z.Proxy||(z.Proxy=n(),z.Proxy.revocable=z.Proxy.revocable);})();\n", "/*\n\n 'Store' module can be used by any plugin\n which requires state retention that\n can not be derived from the data in the\n current data in any given JSON res.\n\n Import the Map() 'state' and use the state\n to record data as the user progresses\n through the model. The state map is recorded\n in the session data 'uistates' every time it changes.\n\n If the user refreshes the page, or opens\n the session on a new tab/browser or at another\n time, the store module will make sure that\n state is updated with the recorded one - and\n an event wil be triggered 'bb:stateChange'\n\n NB: The state is shared over all other\n plugins which require it, so please namespace\n your entries.\n\n NB: The state is stringified to be stored\n as JSON - so don't get too fancy with your\n properties or values.\n\n Author: Tim Bauwens 2021\n\n*/\n\nimport \"proxy-polyfill/proxy.min.js\";\nimport { bb } from \"$json\";\nimport { has } from \"$json/lib/functional\";\n\nvar innerState, state;\n\nconst store = {\n sessionid: \"\",\n fresh: true,\n pushing: false,\n push: function () {\n if (!this.fresh && !this.pushing) {\n this.pushing = true;\n // Wait for the innserState to finish setting.\n window.setTimeout(() => {\n var form = new URLSearchParams();\n form.set(\"fmt\", \"json\");\n form.set(\"dbname\", bb.getVar(\"dbname\"));\n form.set(\"uniqueid\", bb.getVar(\"uniqueid\"));\n form.set(\"sessionid\", bb.getVar(\"sessionid\"));\n form.set(\"uistates\", JSON.stringify(Object.fromEntries(state)));\n\n form.get(\"uniqueid\") &&\n fetch(\"uistates\", {\n method: \"post\",\n headers: {\n \"Accept\": \"application/json, text/plain, */*\",\n \"Content-Type\": \"application/x-www-form-urlencoded;charset=UTF-8\"\n },\n body: form\n });\n store.pushing = false;\n }, 100);\n }\n }\n};\n\n$(document).on(\"bb:preHandleData\", (e, data) => {\n if (data && data.sessionid) {\n if (store.sessionid !== data.sessionid) {\n store.fresh = true;\n store.sessionid = data.sessionid;\n state = null;\n }\n\n if (store.fresh) {\n // Page refreshed, or case opened.\n\n if (data && has(\"uistates\")(data)) {\n innerState = data.uistates\n ? new Map(Object.entries(JSON.parse(data.uistates)))\n : new Map();\n state = new Proxy(innerState, {\n get(target, prop, receiver) {\n var value = Reflect.get(target, prop, receiver);\n if (typeof value === \"function\") {\n const origSet = value;\n value = function (key, value) {\n if (prop === \"set\" || prop === \"clear\") {\n store.push();\n }\n return origSet.apply(innerState, arguments);\n };\n }\n return value;\n }\n });\n $(document).trigger(\"bb:stateChange\");\n } else {\n innerState = new Map();\n }\n store.fresh = false;\n }\n }\n});\n\nexport { state };\n", "/*\n actielijst.js\n\n A local helper to form the final \"Actielijst\"\n into the grid as per design.\n\n Author: Tim Bauwens\n Copyright: xxllnc 2022\n\n*/\n\nimport { getCurrentChapterID } from \"$json/lib/getcurrentchapterid\";\nimport { getmetadata } from \"$json/lib/getmetadata\";\nimport { state } from \"$json/lib/store\";\nimport { bb } from \"$json\";\n\n((win, doc, $) => {\n let continueLink;\n\n function uid() {\n return `id-${Date.now()}-${Math.floor(Math.random() * 1000)}`;\n }\n\n function newRow(original) {\n let saved = state.has(\"p-chapters-helper\")\n ? state.get(\"p-chapters-helper\")\n : {};\n\n let id = uid();\n let imageName = original.querySelector(\"td:nth-of-type(7)\").innerText;\n let chapterid =\n saved.chaptermap[\n original.querySelector(\"td:nth-of-type(8)\").innerText.trim()\n ];\n let ariaLabel =\n original.querySelector(\"td:nth-of-type(1)\").innerText.trim() === \"1\"\n ? `Uit uw antwoorden op ${\n original.querySelector(\"td:nth-of-type(2)\").innerText\n } blijkt dat er geen actie vereist is`\n : `Uit uw antwoorden op ${\n original.querySelector(\"td:nth-of-type(2)\").innerText\n } blijkt dat er actie nodig is`;\n let rowset = doc.createElement(\"tbody\");\n rowset.setAttribute(\"tabIndex\", \"0\");\n rowset.setAttribute(\"ariaLabel\", ariaLabel);\n rowset.className = \"p-actielijst-grid--rowset\";\n rowset.innerHTML = `\n \n \n \n ${\n original.querySelector(\"td:nth-of-type(2)\").innerText\n }\n \n \n \n \n \n \n \n ${original.querySelector(\"td:nth-of-type(3)\").innerHTML}\n ${original.querySelector(\"td:nth-of-type(4)\").innerHTML}\n
\n
${\n original.querySelector(\"td:nth-of-type(6)\").innerHTML\n }
\n ${\n original.querySelector(\"td:nth-of-type(5)\").innerText.trim() ===\n \"\"\n ? \"\"\n : `
\n ${original.querySelector(\"td:nth-of-type(5)\").innerHTML}\n
`\n }\n\n
\n \n \n \n `;\n\n rowset\n .querySelector(\".p-actielijst-grid--check\")\n .addEventListener(\"click\", e =>\n e.target.parentNode.querySelector(\"button.edit\").click()\n );\n\n rowset\n .querySelector(\".accordion-toggle\")\n .addEventListener(\"click\", e =>\n e.target.setAttribute(\"aria-selected\", e.target.checked)\n );\n\n return rowset;\n }\n\n function dateString(date, withdashes = false) {\n let year = date.getFullYear();\n let month = date.getMonth() + 1;\n if (String(month).length === 1) month = \"0\" + month;\n let day = date.getDate();\n if (String(day).length === 1) day = \"0\" + day;\n\n return withdashes ? `${year}-${month}-${day}` : `${year}${month}${day}`;\n }\n\n function UTCStamp(h = 0) {\n let now = new Date();\n now.setHours(h, 0, 0);\n return `T${now.getUTCHours()}000000Z`;\n }\n\n function msUTCStamp(h = 0) {\n // T12:00:00+00:00\n let now = new Date();\n now.setHours(h, 0, 0);\n return encodeURIComponent(`T${now.getUTCHours()}:00:00+00:00`);\n }\n\n function gglDate() {\n let target = new Date();\n target.setDate(target.getDate() + 3);\n let string = `${dateString(target)}${UTCStamp(12)}`;\n string += `/${dateString(target)}${UTCStamp(13)}`;\n string = encodeURIComponent(string);\n return string;\n }\n\n function datesStrings() {\n let target = new Date();\n target.setDate(target.getDate() + 3);\n let strings = {\n normal: dateString(target),\n dashes: dateString(target, true)\n };\n return strings;\n }\n\n function createHref(e) {\n // Useful: https://parcel.io/tools/calendar\n\n let href;\n\n const msgText = encodeURIComponent(`\n Deze reminder in je agenda leidt je terug naar de CyberVeilig Check van het Digital Trust Center.\n Vink af wat je gedaan hebt en check welke maatregelen je nog moet nemen om je beter te beschermen tegen cyberaanvallen.\n\n De link naar je eigen actielijst is:\n ${decodeURIComponent(continueLink)}\n\n Heb je vragen? Neem contact met ons op:\n digitaltrust@minezk.nl\n\n Veel succes,\n\n Team Digital Trust Center\n\n www.digitaltrustcenter.nl\n `);\n\n const msgTextICS = encodeURIComponent(\n `Deze reminder in je agenda leidt je terug naar de CyberVeiligCheck van het Digital Trust Center. Vink af wat je gedaan hebt en check welke maatregelen je nog moet nemen om je beter te beschermen tegen cyberaanvallen. De link naar je eigen actielijst is: ${decodeURIComponent(\n continueLink\n )} Heb je vragen? Neem contact met ons op: mailto:digitaltrust@minezk.nl?subject=Vraag%20over%20CyberVeilig%20Check Veel succes, Team Digital Trust Center www.digitaltrustcenter.nl`\n );\n const titleText = encodeURIComponent(`Doorgaan met de CyberVeiligCheck`);\n let strings = datesStrings();\n\n e.target.parentNode.querySelector(\"a.agenda\").target = \"_blank\";\n\n switch (e.target.value) {\n case \"none\":\n href = \"\";\n break;\n\n case \"google\":\n //https://calendar.google.com/calendar/render?action=TEMPLATE&dates=20230119T110000Z%2F20230120T120000Z&details=ddddd&location=llll&text=ttttt\n href = `https://calendar.google.com/calendar/render?action=TEMPLATE&dates=${gglDate()}&location=${continueLink}&details=${msgText}&text=${titleText}`;\n break;\n\n case \"outlook\":\n //https://outlook.live.com/calendar/0/deeplink/compose?body=ddddd&enddt=2023-01-20T12%3A00%3A00%2B00%3A00&location=llll&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2023-01-20T11%3A00%3A00%2B00%3A00&subject=ttttt\n href = `https://outlook.live.com/calendar/0/deeplink/compose?body=${msgText}&enddt=${\n strings.dashes\n }${msUTCStamp(\n 13\n )}&location=${continueLink}&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=${\n strings.dashes\n }${msUTCStamp(12)}&subject=${titleText}`;\n break;\n\n case \"office\":\n //https://outlook.office.com/calendar/0/deeplink/compose?body=ddddd&enddt=2023-01-20T12%3A00%3A00%2B00%3A00&location=llll&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2023-01-20T11%3A00%3A00%2B00%3A00&subject=ttttt\n href = `https://outlook.office.com/calendar/0/deeplink/compose?body=${msgText}&enddt=${\n strings.dashes\n }${msUTCStamp(\n 13\n )}&location=${continueLink}&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=${\n strings.dashes\n }${msUTCStamp(13)}&subject=${titleText}`;\n break;\n\n case \"yahoo\":\n //https://outlook.live.com/calendar/0/deeplink/compose?body=ddddd&enddt=2023-01-20T12%3A00%3A00%2B00%3A00&location=llll&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2023-01-19T11%3A00%3A00%2B00%3A00&subject=ttttt\n href = `https://calendar.yahoo.com/?desc=${msgText}&et=${\n strings.dashes\n }${msUTCStamp(13)}&in_loc=${continueLink}&st=${\n strings.dashes\n }${msUTCStamp(12)}&title=${titleText}&v=60`;\n break;\n\n case \"ics\":\n //data:text/calendar;charset=utf8,BEGIN:VCALENDAR%0AVERSION:2.0%0ABEGIN:VEVENT%0ADTSTART:20230119T110000Z%0ADTEND:20230120T120000Z%0ASUMMARY:ttttt%0ADESCRIPTION:ddddd%0ALOCATION:llll%0AEND:VEVENT%0AEND:VCALENDAR%0A\n href = `data:text/calendar;charset=utf8,BEGIN:VCALENDAR%0AVERSION:2.0%0ABEGIN:VEVENT%0ADTSTART:${\n strings.normal\n }${UTCStamp(12)}%0ADTEND:${strings.normal}${UTCStamp(\n 13\n )}%0ASUMMARY:${titleText}%0ADESCRIPTION;ENCODING=QUOTED-PRINTABLE:${msgTextICS}%0ALOCATION:${continueLink}%0AEND:VEVENT%0AEND:VCALENDAR%0A`;\n e.target.parentNode.querySelector(\"a.agenda\").target = \"\";\n break;\n\n default:\n href = \"\";\n break;\n }\n\n // Now set the href\n e.target.parentNode.querySelector(\"a.agenda\").href = href;\n if (href !== \"\") {\n e.target.parentNode.querySelector(\"a.agenda\").removeAttribute(\"tabindex\");\n } else {\n e.target.parentNode\n .querySelector(\"a.agenda\")\n .setAttribute(\"tabindex\", \"-1\");\n }\n }\n\n function calanderInvites() {\n let html = `\n \n
\n

\n Plan hier tijd voor over 3 dagen:\n

\n \n \n Zet in mijn agenda\n \n
\n `;\n return html;\n }\n\n $(doc).on(\"bb:finalHandleData\", (_e, data) => {\n if (data && data.groups && data.groups.length) {\n const props = getmetadata(data).props;\n if (props.has(\"p-actielijst-show\")) {\n bb.Mode.set(\"hasActielijst\");\n // Store the chapterID for the jump back button\n let saved = state.has(\"p-chapters-helper\")\n ? state.get(\"p-chapters-helper\")\n : {};\n saved.actielijstID = getCurrentChapterID(data.groups);\n state.set(\"p-chapters-helper\", saved);\n\n // Grab some values for continue later link in agenda:\n const location = bb.propFinder(bb.conf)(\n \"arbitrary.savecase-email-link-popup.location\",\n window.location.href\n );\n const sessionid = data.sessionid;\n continueLink = encodeURIComponent(\n `${location}?modelid=${data.dbname}&sessionid=${sessionid}`\n );\n try {\n // Move some things arround in the DOM to support the design.\n let fieldset = doc.querySelector(\"#bb-q fieldset\");\n let legend = fieldset.querySelector(\"legend\");\n let text = fieldset.querySelector(\".bb-text\");\n let toggler = fieldset.querySelector(\n '[data-metadata-keys=\"expanderToggle\"]'\n );\n let togglerText = fieldset.querySelector(\n '[data-metadata-keys=\"expanderText\"]'\n );\n let download = fieldset.querySelector('a[type=\"application/pdf\"]');\n let newContainer = doc.createElement(\"div\");\n newContainer.className = \"p-actielijst-head\";\n newContainer.innerHTML = `\n
\n ${legend.outerHTML}\n ${text.outerHTML}\n \n \n ${togglerText.outerHTML}\n
\n
\n ${download.outerHTML}\n \n ${calanderInvites()}\n
\n `;\n fieldset.removeChild(legend);\n fieldset.removeChild(text);\n fieldset.removeChild(toggler);\n fieldset.removeChild(togglerText);\n fieldset.removeChild(download);\n fieldset.prepend(newContainer);\n let clonebtns = doc.querySelector(\".btns\").cloneNode(true);\n clonebtns.classList.add(\"final\");\n clonebtns.querySelector('a[type=\"application/pdf\"]').id = \"\";\n fieldset.append(clonebtns);\n doc.querySelectorAll(\"select.href-selector\").forEach(select => {\n select.addEventListener(\"change\", createHref);\n });\n doc\n .querySelectorAll(\".btns:not(.final) .p-actielijst--agenda-header\")\n .forEach(agenda => {\n agenda.addEventListener(\"click\", _e => {\n bb.Mode.toggle(\"showAgendaAdd\");\n });\n });\n } catch (err) {\n win.console && win.console.warn(err);\n }\n try {\n // let originalGrid = doc.querySelector(\"table.bbm-actielijst\");\n // originalGrid.querySelectorAll(\"tr\").forEach(row => {\n // row.replaceWith(newRow(row));\n // });\n let originalGrid = doc.querySelectorAll(\"table.bbm-actielijst\");\n originalGrid.forEach(grid => {\n grid.querySelectorAll(\"tr\").forEach(row => {\n row.replaceWith(newRow(row));\n });\n });\n } catch (err) {\n win.console && win.console.warn(err);\n }\n // Add some mis recording for clicks on add to agenda...\n let recorder = doc.querySelector(\n 'input[data-metadata-keys^=\"p-mis-click-count-agenda-field\"]'\n );\n\n if (recorder) {\n recorder.closest(\".bb-questionlabelgroup\").style.display = \"none\";\n doc\n .querySelectorAll(\".p-actielijst--agenda-content a.agenda\")\n .forEach(btn => {\n btn.addEventListener(\"click\", _e => {\n try {\n recorder.value = \"true\";\n bb.updatemis();\n } catch (err) {\n window.console && window.console.warn(err);\n }\n });\n });\n }\n } else {\n bb.Mode.unset(\"hasActielijst\");\n }\n }\n });\n})(window, document, jQuery);\n", "/*\n auto-scroll.js\n \n A plugin to scroll the window to either a\n specified selector, or #bb-q with a possible\n offset.\n \n e.g. config:\n\n conf.template: {\n \"auto-scroll\": {\n \"offset\": \"-30\", (This is a px value)\n \"custom-selector\": \"#bb-q\",\n \"scroller-selector\": \"#some-parent\" (If not provided, 'html' is considered the parent to scroll)\n }\n }\n\n If no directive is given, default is:\n\n conf.template: {\n \"auto-scroll\": {\n \"offset\": \"-30\"\n \"custom-selector\": \"#bb-q\",\n \"scroller-selector\": \"html\"\n }\n }\n \n If scroller-selector is html (default), then the\n position of the custom selector is determined\n relative to the document. Otherwise it will be\n determined reletive to the scroller-selector.\n\n NB: This probably won't work without:\n\n conf.core: {\n \"scrollToSelectedGroup\": false\n }\n\n auto-scroll also exports it's CONFIG object.\n The object has a setter for props, which will\n fall back to the default if set to \"default\"\n or if your config fails the sanitycheck.\n You may need this for e.g. if a plugin \n changes the layout and makes the auto scroll \n position no longer valid etc...\n\n Usage example:\n\n import { CONFIG as scrollconfig } from \"[relative path]/plugins/auto-scroll/auto-scroll\";\n ...\n if (window.innerWidth <= 943) {\n scrollconfig.props = { selector: \".l-content--left\" };\n } else {\n scrollconfig.props = \"default\";\n }\n\n Please don't skirt the sanitycheck:\n scrollconfig.props.selector = ...\n\n Author: Tim Bauwens\n Copyright xxllnc 2023\n*/\n\nimport { bb } from \"$json\";\nimport { has, allPass } from \"$json/lib/functional\";\n\nconst CONFIG = {\n default: {},\n internal: {},\n get props() {\n return this.internal;\n },\n set props(provided) {\n this.internal =\n provided === \"default\"\n ? Object.assign({}, this.default)\n : this.sanitycheck(provided);\n },\n sanitycheck: provided => {\n if (typeof provided !== \"object\") return Object.assign({}, CONFIG.default);\n provided = Object.assign(CONFIG.internal, provided);\n let check = has(CONFIG.props);\n return allPass([\n check(\"offset\") && !isNaN(props.offset),\n check(\"selector\") && document.querySelectorAll(props.selector).length,\n check(\"scrollerSelector\") &&\n document.querySelectorAll(props[\"scroller-selector\"]).length\n ])\n ? provided\n : Object.assign({}, CONFIG.default);\n }\n};\n\nexport { CONFIG };\n\n((doc, $) => {\n const directives = bb.propFinder(bb.conf, \"template\")(\"auto-scroll\", {});\n let newprops = {\n \"offset\": directives.hasOwnProperty(\"offset\")\n ? Number(directives.offset)\n : -30,\n \"selector\": directives.hasOwnProperty(\"custom-selector\")\n ? directives[\"custom-selector\"]\n : \"#bb-q\",\n \"scroller-selector\": directives.hasOwnProperty(\"scroller-selector\")\n ? directives[\"scroller-selector\"]\n : \"html\"\n };\n\n CONFIG.default = newprops;\n CONFIG.props = \"default\";\n\n $(doc).on(\"bb:finalHandleData\", (_e, data) => {\n if (\n data &&\n data.groups &&\n data.groups[data.groups.length - 1].screenmode !== \"addbottom\"\n ) {\n if (data.hasprevious) {\n window.setTimeout(_e => {\n let config = CONFIG.props;\n let offsetHeight =\n config[\"scroller-selector\"] === \"html\"\n ? $(config.selector).offset().top\n : $(config.selector).position().top;\n $(config[\"scroller-selector\"]).animate(\n {\n scrollTop: offsetHeight + config.offset\n },\n 200\n );\n }, 500);\n } else {\n window.scrollTo(0, 0);\n }\n }\n });\n})(document, jQuery);\n", "/*\n A small plugin to annoy people into returning\n to a tab which lost focus.\n\n Author: Tim Bauwens 2023\n*/\n\nimport { bb } from \"$json\";\n\n(doc => {\n const change = e => {\n let title = e.type === \"blur\" ? newTitle : originalTitle;\n doc.querySelector(\"head title\").innerText = title;\n };\n const props = bb.propFinder(bb.conf.template, \"change-title-on-tab-blur\");\n const newTitle = props(\"new-title\", \"Come back!\");\n\n const originalTitle = props(\n \"original-title\",\n doc.querySelector(\"head title\").innerText\n );\n\n try {\n window.addEventListener(\"blur\", change);\n window.addEventListener(\"focus\", change);\n } catch (err) {\n window.console && window.console.error(err);\n }\n})(document);\n", "/*\n chapter-helper.js\n\n A local helper to set display props\n for chapter items.\n\n Author: Tim Bauwens\n Copyright: xxllnc 2022\n*/\n\nimport { getCurrentChapterID } from \"$json/lib/getcurrentchapterid\";\nimport { getmetadata } from \"$json/lib/getmetadata\";\nimport { state } from \"$json/lib/store\";\nimport { has } from \"$json/lib/functional\";\nimport { CONFIG as scrollconfig } from \"../../../../plugins/auto-scroll/auto-scroll\";\n\n((_win, doc, $) => {\n var lastKnownScrollPos = 0;\n\n const applystate = () => {\n if (state.has(\"p-chapters-helper\")) {\n let saved = state.get(\"p-chapters-helper\");\n let toshow = saved.toshow || [];\n bb.Mode.toggle(\"hasSpecialChapters\", Boolean(toshow.length));\n let currentChapter = saved.currentChapter || \"\";\n let jl = doc.querySelector(\".bb-jumplist ul\");\n if (jl !== null) {\n jl.querySelectorAll(\"li\").forEach(chapter => {\n let title = chapter\n .querySelector(\"button > span\")\n .innerText.replace(/\\s/g, \"\");\n\n let bgpath = has(\"finalScore\")(\n chapter.querySelector(\"button[data-groupid]\").dataset\n )\n ? `url('../../rijks-cyberscan/plugins/chapters-helper/live/chapter_icons/${title}Actief.svg?v=20230117')`\n : `url('../../rijks-cyberscan/plugins/chapters-helper/live/chapter_icons/${title}Normaal.svg?v=20230117')`;\n\n let ariaLabel = has(\"finalScore\")(\n chapter.querySelector(\"button[data-groupid]\").dataset\n )\n ? chapter.querySelector(\"button[data-groupid]\").dataset\n .finalScore == 1\n ? \"Voltooid\"\n : `Huidige stap`\n : `Nog niet voltooid`;\n\n let selected =\n chapter\n .querySelector(\"button[data-groupid]\")\n .getAttribute(\"data-groupid\") === currentChapter\n ? true\n : false;\n\n chapter.classList.toggle(\"show\", toshow.includes(title));\n chapter.setAttribute(\"aria-hidden\", !toshow.includes(title));\n chapter.setAttribute(\"aria-label\", ariaLabel);\n chapter.classList.toggle(\"selected\", selected);\n chapter.style.setProperty(\"--bg\", bgpath);\n });\n }\n let actielijstID = saved.actielijstID || false;\n let btn = doc.querySelector(\"nav button.actielijst\");\n if (actielijstID) {\n btn.setAttribute(\"value\", actielijstID);\n btn.dataset.groupid = actielijstID;\n } else {\n btn.setAttribute(\"value\", \"\");\n btn.dataset.groupid = \"\";\n }\n }\n };\n\n $(doc).on(\"bb:stateChange\", () => {\n applystate();\n });\n\n $(doc).on(\"bb:preHandleData\", (_e, data) => {\n if (data && data.groups && data.groups.length) {\n lastKnownScrollPos = doc.querySelector(\".column--chapters\").scrollTop;\n }\n });\n\n $(doc).on(\"bb:postHandleData\", (_e, data) => {\n if (data && data.groups && data.groups.length) {\n let saved = state.has(\"p-chapters-helper\")\n ? state.get(\"p-chapters-helper\")\n : {};\n saved.currentChapter = getCurrentChapterID(data.groups);\n if (!has(\"chaptermap\")(saved)) saved.chaptermap = {};\n const props = getmetadata(data).props;\n if (props.has(\"p-chapters-helper-show\")) {\n let toshow = props.get(\"p-chapters-helper-show\").split(\"|\");\n saved.toshow = toshow.map(title => title.replace(/\\s/g, \"\"));\n saved.toshow = saved.toshow.filter(title => title !== \"false\");\n }\n if (props.has(\"p-chapters-helper-chapterid\")) {\n saved.chaptermap[props.get(\"p-chapters-helper-chapterid\")] =\n saved.currentChapter;\n }\n\n state.set(\"p-chapters-helper\", saved);\n\n // A small helper for the auto-scroll in case of small window size:\n if (window.innerWidth <= 943) {\n scrollconfig.props = { selector: \".l-content--left\" };\n } else {\n scrollconfig.props = \"default\";\n }\n }\n });\n\n $(doc).on(\"bb:finalHandleData\", (_e, data) => {\n if (data && data.groups && data.groups.length) {\n applystate();\n // Finally, scroll the jumplist to the right place.\n //let currentChapter = doc.querySelector(\".bb-jumplist li.selected\");\n let scrollSection = doc.querySelector(\".column--chapters\");\n scrollSection.scrollTo(0, lastKnownScrollPos);\n\n /*\n The desired scroll Y pos is the half the\n height of the column minus the selected\n icons total height offset (plus half \n it's own height).\n */\n let height = scrollSection.offsetHeight;\n let middle = height / 2;\n let posInList = Array.from(doc.querySelectorAll(\".bb-jumplist li.show\"))\n .map(item => item.className.includes(\"selected\"))\n .indexOf(true);\n let avgIconHeight = 110; // Guestimate magic number.\n let currentChapterIconOffset =\n avgIconHeight * posInList + avgIconHeight / 2;\n let desiredY = -1 * (middle - currentChapterIconOffset);\n\n window.setTimeout(e => {\n // Scroll to the desiredY\n scrollSection.scrollTo({\n top: desiredY,\n left: 0,\n behavior: \"smooth\"\n });\n }, 100);\n }\n });\n})(window, document, jQuery);\n", "// custom-radios.js\n\n/*\n * A simple plugin to replace\n * radios with a custom design.\n * Cross-browser and working with all\n * forms of output: grids and radios\n *\n * Note you'll have to provide your own styling to the faux .p-custom-radios-label\n *\n * Author: Niels Giesen\n * Copyright Berkeley Bridge 2019\n *\n */\n\n((doc, $) => {\n $(doc).on(\"bb:postHandleData\", (e, data) => {\n // If there are any checkboxes, deal with them\n let checkboxes = $(\"#bb-q\").find(\n 'input[type=\"radio\"]:not(.p-custom-radios)'\n );\n checkboxes.each((i, checkbox) => {\n checkbox.className += \" a-offscreen p-custom-radios\";\n checkbox.insertAdjacentHTML(\n \"afterEnd\",\n `\n \n `\n );\n });\n });\n})(document, jQuery);\n", "/*\n * end-tools:\n *\n * Place up to four functions in the\n * top or bottom of bb-q on any node.\n *\n * 1) A download report button\n * 2) An email report widget\n * 3) A print option.\n * 4) A feedback widget.\n *\n * Author: Tim Bauwens\n * Copyright 2020 Berkeley Bridge\n *\n */\n\nimport print from \"print-js\";\nimport { gt, bb, _ } from \"$json\";\nimport { getmetadata } from \"../../js/lib/getmetadata\";\n\n(($, win, doc) => {\n var translations = {\n \"Rapport downloaden\": {\n nl: \"Rapport downloaden\",\n en: \"Download report\"\n },\n \"Verzend rapport via e-mail\": {\n nl: \"Verzend rapport via e-mail\",\n en: \"Send report via e-mail\"\n },\n \"Was dit nuttig?\": {\n nl: \"Was dit nuttig?\",\n en: \"Was this useful?\"\n },\n \"Verzend\": {\n nl: \"Verzend\",\n en: \"Send\"\n },\n \"vul hier uw e-mail in\": {\n nl: \"vul hier uw e-mail in\",\n en: \"provide your e-mail here\"\n },\n \"jouw@email.com\": {\n nl: \"jouw@email.com\",\n en: \"your@email.com\"\n },\n \"E-mail is verzonden...\": {\n nl: \"E-mail is verzonden.\",\n en: \"E-mail has been sent.\"\n },\n \"Bedankt voor uw feedback\": {\n nl: \"Bedankt voor uw feedback\",\n en: \"Thanks for your feedback\"\n },\n \"Ja\": {\n nl: \"Ja\",\n en: \"Yes\"\n },\n \"Nee\": {\n nl: \"Nee\",\n en: \"No\"\n },\n \"prepping\": {\n nl: \"voorbereiden...\",\n en: \"preparing...\"\n },\n \"impossible\": {\n nl: \"niet mogelijk.\",\n en: \"not posssible.\"\n }\n };\n\n gt.addTranslations(translations);\n\n var metadata,\n emailSent,\n REPORTDOC = \"\", // Because there could be multiple, but we only handle one.\n SHOWONTOP = \"true\",\n DESIRED_TOOLS = [];\n\n $(function () {\n $(doc).on(\"bb:preHandleData\", (event, data) => {\n if (data && data.groups && data.groups.length && data.sessionid) {\n // Check in case metadata has been added or changed\n metadata = getmetadata(data).props;\n\n if (\n metadata.has(\"reportdoc\") &&\n metadata.get(\"reportdoc\").split(\".\").pop() === \"pdf\"\n ) {\n REPORTDOC = metadata.get(\"reportdoc\");\n }\n if (metadata.has(\"desiredtools\")) {\n DESIRED_TOOLS.length = 0;\n metadata\n .get(\"desiredtools\")\n .split(\"|\")\n .forEach(entry => {\n DESIRED_TOOLS.push(entry);\n });\n }\n if (metadata.has(\"showontop\")) {\n SHOWONTOP = metadata.get(\"showontop\");\n } else {\n SHOWONTOP = \"true\";\n }\n\n emailSent = emailSent || false;\n }\n });\n });\n\n $(function () {\n $(doc).on(\"bb:postHandleData\", function (event, data) {\n // Unset mode for hooks\n bb.Mode.unset(\"hasThreeInOne\");\n if (data && data.groups && data.groups.length && data.sessionid) {\n if (metadata.has(\"end-tools\") && metadata.get(\"end-tools\")) {\n // Set mode for hooks\n bb.Mode.set(\"hasThreeInOne\");\n\n // Hide and reset the support inputs.\n $(\".bb-g-endtools-feedback-vote\").hide();\n $(\".bb-g-endtools-email\").hide();\n $(\".bbm-endtools-email\").val(\"\");\n\n // Create the container for the functions.\n var $container = $('
');\n\n if (DESIRED_TOOLS.indexOf(\"download\") > -1 && REPORTDOC.length) {\n // Make a download report button\n var $download = $(\n '
'\n );\n $download.append(`\n \n \n ${_(\"Rapport downloaden\")}\n \n `);\n $container.append($download);\n }\n\n if (DESIRED_TOOLS.indexOf(\"print\") > -1 && REPORTDOC.length) {\n // Make the print button.\n var $print = $(\n '
'\n );\n var $printbtn = $(`\n \n `).on(\"click\", e => {\n printJS({\n printable: `${REPORTDOC}?guid=${data.uniqueid}:${data.dbname}:${data.sessionid}`,\n type: \"pdf\",\n showModal: false\n });\n });\n $print.append($printbtn);\n $container.append($print);\n }\n\n if (DESIRED_TOOLS.indexOf(\"email\") > -1) {\n // Make the email widget\n var $email = $('
');\n\n if (emailSent) {\n $email.append(\n '\"\n );\n emailSent = false;\n } else {\n $email.append(\n ''\n ).append(`\n \n `);\n\n // Handler\n $(doc).off(\".end-tools-events\", \".opt-for-email\");\n $(doc).on(\n \"click.end-tools-events\",\n \".opt-for-email\",\n function (e) {\n $(\".opt-for-email\")\n .html(_(\"Verzend\") + ' ')\n .attr(\"class\", \"email-send bb-next\")\n .prop(\"disabled\", \"disabled\");\n $(\".email-address\")\n .attr(\"class\", \"email-address set\")\n .focus();\n }\n );\n $(doc).off(\".end-tools-events\", \".email-address\");\n $(doc).on(\n \"\\\n propertychange.end-tools \\\n change.end-tools-events \\\n click.end-tools-events \\\n keyup.end-tools-events \\\n input.end-tools-events \\\n paste.end-tools-events\",\n \".email-address\",\n function () {\n var input = $(\"input.email-address\").val();\n var regex =\n /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n if (regex.test(input)) {\n $(\"button.email-send\")\n .addClass(\"validated\")\n .removeAttr(\"disabled\");\n emailSent = true;\n $(\".bbm-endtools-email\").val(input);\n } else {\n $(\"button.email-send\")\n .removeClass(\"validated\")\n .prop(\"disabled\", \"disabled\");\n $(\".bbm-endtools-email\").val(\"\");\n }\n }\n );\n }\n $container.append($email);\n }\n\n if (DESIRED_TOOLS.indexOf(\"feedback\") > -1) {\n // Make the feedback buttons.\n var $feedback = $(\n '
'\n );\n $feedback\n .append(\n `\n \n `\n )\n .append(\"\").append(`\n \n `);\n\n // Handler\n var group;\n if (data && data.userinfo)\n $feedback.data(\"userinfo\", data.userinfo);\n group = data.groups.filter(function (g) {\n return g.current;\n })[0];\n $feedback.data(\"nodename\", group.name);\n if (data && data.modelname)\n $feedback.data(\"modelname\", data.modelname);\n if (data && data.modelversion)\n $feedback.data(\"modelversion\", data.modelversion);\n $(doc).off(\".end-tools-events\", \".feedback-button\");\n $(doc).one(\n \"click.end-tools-events\",\n \".feedback-button\",\n function (e) {\n var vote =\n $(e.target).data(\"value\") !== undefined\n ? $(e.target).data(\"value\")\n : $(e.target).parents(\"button\").data(\"value\");\n\n // Add the vote to the hiddden interface.\n $(\"input.bbm-endtools-feedback-vote\").attr(\"value\", vote);\n $feedback.html(\n '\"\n );\n bb.updatemis();\n }\n );\n $container.append($feedback);\n }\n\n // Reveal top or bottom depending on conf.\n if (SHOWONTOP === \"false\") {\n $(\"fieldset.selected\").append($container);\n setTimeout(function () {\n $container.toggleClass(\"showing\");\n }, 800);\n } else {\n $(\"#bb-q\").prepend($container);\n $(\"html,body\").animate({ scrollTop: 0 });\n setTimeout(function () {\n $container.toggleClass(\"showing\");\n }, 800);\n }\n }\n }\n });\n });\n})(jQuery, window, document);\n", "/*\n has-no-next-meta:\n\n Toggle data.hasnext when metadata\n prop 'no-next' is present.\n\n Copyright: Berkeley Bridge 2021\n Author: Tim Bauwens\n\n */\n\nimport { getmetadata } from \"$json/lib/getmetadata\";\n\n((doc, $) => {\n $(doc).on(\"bb:preHandleData\", (e, data) => {\n if (data && data.groups) {\n const md = getmetadata(data).props;\n data.hasnext = data.hasnext ? !md.has(\"no-next\") : data.hasnext;\n }\n });\n})(document, jQuery);\n", "import { bb } from \"$json\";\n/* headings:\n *\n * Turn labels whose font class (as provided the JSON object) match the\n * regular expression /^Standard title$|^Heading[^1-6]*([1-6]?)/ into headings.\n *\n * If the class has no numbering (e.g. 'Standard Title' instead of\n * 'Heading 2'), level 1 will be presumed.\n *\n * Since a model can run anywhere, it is possible to set a base level\n * for headings in arbitrary.headings.baseLevel (in\n * conf.json).\n *\n * If you want to force titles in 'addtobottom' nodes to duck below\n * the top ('cleared') node, declare arbitrary.headings.duck = true in\n * conf.json\n *\n * Author: Niels Giesen\n * Copyright 2016, 2018 Berkeley Bridge\n *\n */\n(function ($, win, doc) {\n var duck = false,\n baseLevel,\n topLevel,\n re = /^Standard title$|^Heading[^1-6]*([1-6]?)/;\n\n $(function () {\n try {\n baseLevel = bb.conf.arbitrary.headings.baseLevel;\n if (baseLevel === undefined) throw \"baseLevel is not defined\";\n topLevel = baseLevel - 1;\n } catch (err) {\n topLevel = 0;\n }\n\n try {\n duck = bb.conf.arbitrary.headings.duck;\n } catch (err) {}\n\n $(doc).on(\"bb:preHandleData\", function (event, data) {\n if (data && data.groups && data.groups.length) {\n $.each(data.groups, function (_, group) {\n $.each(group.controls, function (_, ctl) {\n var klass = ctl[\"font-class\"],\n _level,\n m;\n if (ctl.controltype === \"label\" && ((m = klass.match(re)), m)) {\n _level = Number(m[1]) || 1;\n ctl._subtype = \"heading\";\n ctl._level =\n duck && group.screenmode !== \"clear\"\n ? _level + 1 + topLevel\n : _level + topLevel;\n }\n });\n });\n }\n });\n });\n})(jQuery, window, document);\n", "/* history:\n *\n * Manage history using the html5 history api and sessionStorage\n *\n * Could have support for crunchbang ( #!modelname=thisandthat )\n *\n * Author: Niels Giesen\n * Copyright 2013, 2014, 2015 Berkeley Bridge\n *\n */\nimport { bb, _ } from \"$json\";\nimport { has } from \"$json/lib/functional\";\nimport { setSettled } from \"$json/lib/settled\";\n\n(function ($, win, history, location) {\n var crunchbang = false;\n\n if (history && history.pushState) {\n if (!location.origin) {\n location.origin =\n location.protocol +\n \"//\" +\n location.hostname +\n (location.port ? \":\" + location.port : \"\");\n }\n\n $(function () {\n var apinav,\n storage,\n params = $.parseQuery(location.hash.slice(2)),\n _title_sep = \" \",\n _title = document.title;\n\n try {\n storage = window.sessionStorage;\n } catch (err) {\n storage = null;\n }\n\n function directory(loc) {\n return loc.origin + loc.pathname.replace(/[^/]+$/, \"\");\n }\n\n function restoreState(state) {\n if (state.sessionid) {\n // restore case\n bb.ajax\n .post({\n url: \"action\",\n data: state\n })\n .then(setSettled);\n } else if (bb.getVar(\"sessionid\")) {\n // exit running case and restore model view\n bb.exit(() => bb.menu(state).then(setSettled));\n } else {\n // restore model view\n bb.menu(state).then(setSettled);\n }\n }\n\n function ditchState() {\n storage && storage.removeItem(\"state\");\n history.replaceState(null, null, null);\n setSettled();\n }\n\n if (location.search !== \"\") ditchState();\n\n var initial_state =\n history.state || (storage && JSON.parse(storage.getItem(\"state\")));\n\n if (initial_state) {\n // Detect explicit edit of the crunchbang - this should\n // override the dbname parameter and instead use the modelname\n if (params.modelname && params.modelname !== initial_state.modelname) {\n initial_state.modelname = params.modelname;\n delete initial_state.dbname;\n delete initial_state.sessionid;\n }\n\n if (initial_state.directory === directory(location)) {\n bb.Mode.set(\"isLoggedIn\"); // Yes, just an assumption it will go allright.\n restoreState(initial_state);\n } else {\n ditchState();\n }\n } else if (params.modelname) {\n // Bookmarked with crunchbang, but no state\n bb.Router(params);\n } else {\n setSettled();\n }\n\n $(document).on(\"bb:jsonError\", ditchState);\n\n $(document).on(\"bb:preHandleData\", function (event, data) {\n if (data && data.uniqueid) {\n var title,\n state = {\n fmt: \"json\",\n uniqueid: data.uniqueid,\n // Save the 'directory part'\n directory: directory(location)\n };\n if (has(\"dbname\", data) && data.sessionid) {\n state.dbname = data.dbname;\n state.sessionid = data.sessionid;\n state.modelname = data.modelname; // Needed to get interpret explicit change to location\n\n if (data.modeldescription) {\n title = [_title, data.modeldescription.replace(/_/g, \" \")].join(\n _title_sep\n );\n }\n } else if (data.models) {\n var model = $.grep(data.models, function (m) {\n return m.selected;\n })[0],\n dbname = model ? model.dbname : null;\n if (dbname !== null) {\n state.dbname = dbname;\n title = [_title, model.modelname, \"-\", _(\"overview\")].join(\n _title_sep\n );\n } else {\n title = [_title, _(\"Your models\")].join(_title_sep);\n }\n }\n if (!apinav) {\n try {\n storage && storage.setItem(\"state\", JSON.stringify(state));\n } catch (e) {\n // Guard against QuotaExceededError (which always happens on Safari Private Browsing on iOS)\n }\n if (history.state && history.state.sessionid && state.sessionid) {\n history.replaceState(\n state,\n null,\n location.origin +\n location.pathname +\n ((crunchbang && \"#!modelname=\" + data.modelname) || \"\")\n );\n } else {\n if (data.modelname && crunchbang) {\n history.pushState(\n state,\n null,\n location.origin +\n location.pathname +\n \"#!modelname=\" +\n data.modelname\n );\n } else {\n history.pushState(\n state,\n null,\n location.origin + location.pathname\n );\n }\n }\n }\n if (title && document.title !== title) {\n document.title = title;\n }\n }\n // Something went miserably wrong. Clear history to get out of this mess.\n if (\n data &&\n ((data.error && data.error.summary) ||\n (data.groups && !data.groups.length) ||\n data.status === \"logout successful\")\n ) {\n // Extra check - may be we are but updating\n if (\n data &&\n data.error &&\n data.error.code &&\n data.error.code === 14 && // Error loading case\n data.error.subcode === 1002\n )\n // Updating\n return;\n ditchState();\n }\n apinav = false;\n });\n\n win.addEventListener(\"popstate\", function (e) {\n apinav = true;\n if (e.state) {\n if (e.state.directory === directory(location)) restoreState(e.state);\n else ditchState();\n }\n });\n });\n }\n})(jQuery, window, window.history, window.location);\n", "//\n// showdown.js -- A javascript port of Markdown.\n//\n// Copyright (c) 2007 John Fraser.\n//\n// Original Markdown Copyright (c) 2004-2005 John Gruber\n// \n//\n// Redistributable under a BSD-style open source license.\n// See license.txt for more information.\n//\n// The full source distribution is at:\n//\n//\t\t\t\tA A L\n//\t\t\t\tT C A\n//\t\t\t\tT K B\n//\n// \n//\n\n//\n// Wherever possible, Showdown is a straight, line-by-line port\n// of the Perl version of Markdown.\n//\n// This is not a normal parser design; it's basically just a\n// series of string substitutions. It's hard to read and\n// maintain this way, but keeping Showdown close to the original\n// design makes it easier to port new features.\n//\n// More importantly, Showdown behaves like markdown.pl in most\n// edge cases. So web applications can do client-side preview\n// in Javascript, and then build identical HTML on the server.\n//\n// This port needs the new RegExp functionality of ECMA 262,\n// 3rd Edition (i.e. Javascript 1.5). Most modern web browsers\n// should do fine. Even with the new regular expression features,\n// We do a lot of work to emulate Perl's regex functionality.\n// The tricky changes in this file mostly have the \"attacklab:\"\n// label. Major or self-explanatory changes don't.\n//\n// Smart diff tools like Araxis Merge will be able to match up\n// this file with markdown.pl in a useful way. A little tweaking\n// helps: in a copy of markdown.pl, replace \"#\" with \"//\" and\n// replace \"$text\" with \"text\". Be sure to ignore whitespace\n// and line endings.\n//\n\n//\n// Showdown usage:\n//\n// var text = \"Markdown *rocks*.\";\n//\n// var converter = new Showdown.converter();\n// var html = converter.makeHtml(text);\n//\n// alert(html);\n//\n// Note: move the sample code to the bottom of this\n// file before uncommenting it.\n//\n\n//\n// Showdown namespace\n//\nvar Showdown = {};\n\n//\n// converter\n//\n// Wraps all \"globals\" so that the only thing\n// exposed is makeHtml().\n//\nShowdown.converter = function () {\n //\n // Globals:\n //\n\n // Global hashes, used by various utility routines\n var g_urls;\n var g_titles;\n var g_html_blocks;\n\n // Used to track when we're inside an ordered or unordered list\n // (see _ProcessListItems() for details):\n var g_list_level = 0;\n\n this.makeHtml = function (text, inline_only) {\n //\n // Main function. The order in which other subs are called here is\n // essential. Link and image substitutions need to happen before\n // _EscapeSpecialCharsWithinTagAttributes(), so that any *'s or _'s in the \n // and tags get encoded.\n //\n\n // Clear the global hashes. If we don't clear these, you get conflicts\n // from other articles when generating a page which contains more than\n // one article (e.g. an index page that shows the N most recent\n // articles):\n g_urls = new Array();\n g_titles = new Array();\n g_html_blocks = new Array();\n\n // attacklab: Replace ~ with ~T\n // This lets us use tilde as an escape char to avoid md5 hashes\n // The choice of character is arbitray; anything that isn't\n // magic in Markdown will work.\n text = text.replace(/~/g, \"~T\");\n\n // attacklab: Replace $ with ~D\n // RegExp interprets $ as a special character\n // when it's in a replacement string\n text = text.replace(/\\$/g, \"~D\");\n\n // Standardize line endings\n text = text.replace(/\\r\\n/g, \"\\n\"); // DOS to Unix\n text = text.replace(/\\r/g, \"\\n\"); // Mac to Unix\n\n // Make sure text begins and ends with a couple of newlines:\n text = \"\\n\\n\" + text + \"\\n\\n\";\n\n // Convert all tabs to spaces.\n text = _Detab(text);\n\n // Strip any lines consisting only of spaces and tabs.\n // This makes subsequent regexen easier to write, because we can\n // match consecutive blank lines with /\\n+/ instead of something\n // contorted like /[ \\t]*\\n+/ .\n text = text.replace(/^[ \\t]+$/gm, \"\");\n\n // Turn block-level HTML blocks into hash entries\n text = _HashHTMLBlocks(text);\n\n // Strip link definitions, store in hashes.\n text = _StripLinkDefinitions(text);\n\n if (inline_only) text = _RunSpanGamut(text);\n else text = _RunBlockGamut(text);\n\n text = _UnescapeSpecialChars(text);\n\n // attacklab: Restore dollar signs\n text = text.replace(/~D/g, \"$$\");\n\n // attacklab: Restore tildes\n text = text.replace(/~T/g, \"~\");\n\n return text;\n };\n\n var _StripLinkDefinitions = function (text) {\n //\n // Strips link definitions from text, stores the URLs and titles in\n // hash references.\n //\n\n // Link defs are in the form: ^[id]: url \"optional title\"\n\n /*\n var text = text.replace(/\n ^[ ]{0,3}\\[(.+)\\]: // id = $1 attacklab: g_tab_width - 1\n [ \\t]*\n \\n?\t\t\t\t// maybe *one* newline\n [ \\t]*\n ?\t\t\t// url = $2\n [ \\t]*\n \\n?\t\t\t\t// maybe one newline\n [ \\t]*\n (?:\n (\\n*)\t\t\t\t// any lines skipped = $3 attacklab: lookbehind removed\n [\"(]\n (.+?)\t\t\t\t// title = $4\n [\")]\n [ \\t]*\n )?\t\t\t\t\t// title is optional\n (?:\\n+|$)\n /gm,\n function(){...});\n */\n var text = text.replace(\n /^[ ]{0,3}\\[(.+)\\]:[ \\t]*\\n?[ \\t]*?[ \\t]*\\n?[ \\t]*(?:(\\n*)[\"(](.+?)[\")][ \\t]*)?(?:\\n+|\\Z)/gm,\n function (wholeMatch, m1, m2, m3, m4) {\n m1 = m1.toLowerCase();\n g_urls[m1] = _EncodeAmpsAndAngles(m2); // Link IDs are case-insensitive\n if (m3) {\n // Oops, found blank lines, so it's not a title.\n // Put back the parenthetical statement we stole.\n return m3 + m4;\n } else if (m4) {\n g_titles[m1] = m4.replace(/\"/g, \""\");\n }\n\n // Completely remove the definition from the text\n return \"\";\n }\n );\n\n return text;\n };\n\n var _HashHTMLBlocks = function (text) {\n // attacklab: Double up blank lines to reduce lookaround\n text = text.replace(/\\n/g, \"\\n\\n\");\n\n // Hashify HTML blocks:\n // We only want to do this for block-level HTML tags, such as headers,\n // lists, and tables. That's because we still want to wrap

s around\n // \"paragraphs\" that are wrapped in non-block-level tags, such as anchors,\n // phrase emphasis, and spans. The list of tags we're looking for is\n // hard-coded:\n var block_tags_a =\n \"p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del\";\n var block_tags_b =\n \"p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math\";\n\n // First, look for nested blocks, e.g.:\n //

\n //
\n // tags for inner block must be indented.\n //
\n //
\n //\n // The outermost tags must start at the left margin for this to match, and\n // the inner nested divs must be indented.\n // We need to do this before the next, more liberal match, because the next\n // match will start at the first `
` and stop at the first `
`.\n\n // attacklab: This regex can be expensive when it fails.\n /*\n var text = text.replace(/\n (\t\t\t\t\t\t// save in $1\n ^\t\t\t\t\t// start of line (with /m)\n <($block_tags_a)\t// start tag = $2\n \\b\t\t\t\t\t// word break\n // attacklab: hack around khtml/pcre bug...\n [^\\r]*?\\n\t\t\t// any number of lines, minimally matching\n \t\t\t\t// the matching end tag\n [ \\t]*\t\t\t\t// trailing spaces/tabs\n (?=\\n+)\t\t\t\t// followed by a newline\n )\t\t\t\t\t\t// attacklab: there are sentinel newlines at end of document\n /gm,function(){...}};\n */\n text = text.replace(\n /^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\\b[^\\r]*?\\n<\\/\\2>[ \\t]*(?=\\n+))/gm,\n hashElement\n );\n\n //\n // Now match more liberally, simply from `\\n` to `\\n`\n //\n\n /*\n var text = text.replace(/\n (\t\t\t\t\t\t// save in $1\n ^\t\t\t\t\t// start of line (with /m)\n <($block_tags_b)\t// start tag = $2\n \\b\t\t\t\t\t// word break\n // attacklab: hack around khtml/pcre bug...\n [^\\r]*?\t\t\t\t// any number of lines, minimally matching\n .*\t\t\t\t// the matching end tag\n [ \\t]*\t\t\t\t// trailing spaces/tabs\n (?=\\n+)\t\t\t\t// followed by a newline\n )\t\t\t\t\t\t// attacklab: there are sentinel newlines at end of document\n /gm,function(){...}};\n */\n text = text.replace(\n /^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math)\\b[^\\r]*?.*<\\/\\2>[ \\t]*(?=\\n+)\\n)/gm,\n hashElement\n );\n\n // Special case just for
. It was easier to make a special case than\n // to make the other regex more complicated.\n\n /*\n text = text.replace(/\n (\t\t\t\t\t\t// save in $1\n \\n\\n\t\t\t\t// Starting after a blank line\n [ ]{0,3}\n (<(hr)\t\t\t\t// start tag = $2\n \\b\t\t\t\t\t// word break\n ([^<>])*?\t\t\t//\n \\/?>)\t\t\t\t// the matching end tag\n [ \\t]*\n (?=\\n{2,})\t\t\t// followed by a blank line\n )\n /g,hashElement);\n */\n text = text.replace(\n /(\\n[ ]{0,3}(<(hr)\\b([^<>])*?\\/?>)[ \\t]*(?=\\n{2,}))/g,\n hashElement\n );\n\n // Special case for standalone HTML comments:\n\n /*\n text = text.replace(/\n (\t\t\t\t\t\t// save in $1\n \\n\\n\t\t\t\t// Starting after a blank line\n [ ]{0,3}\t\t\t// attacklab: g_tab_width - 1\n \n [ \\t]*\n (?=\\n{2,})\t\t\t// followed by a blank line\n )\n /g,hashElement);\n */\n text = text.replace(\n /(\\n\\n[ ]{0,3}[ \\t]*(?=\\n{2,}))/g,\n hashElement\n );\n\n // PHP and ASP-style processor instructions ( and <%...%>)\n\n /*\n text = text.replace(/\n (?:\n \\n\\n\t\t\t\t// Starting after a blank line\n )\n (\t\t\t\t\t\t// save in $1\n [ ]{0,3}\t\t\t// attacklab: g_tab_width - 1\n (?:\n <([?%])\t\t\t// $2\n [^\\r]*?\n \\2>\n )\n [ \\t]*\n (?=\\n{2,})\t\t\t// followed by a blank line\n )\n /g,hashElement);\n */\n text = text.replace(\n /(?:\\n\\n)([ ]{0,3}(?:<([?%])[^\\r]*?\\2>)[ \\t]*(?=\\n{2,}))/g,\n hashElement\n );\n\n // attacklab: Undo double lines (see comment at top of this function)\n text = text.replace(/\\n\\n/g, \"\\n\");\n return text;\n };\n\n var hashElement = function (wholeMatch, m1) {\n var blockText = m1;\n\n // Undo double lines\n blockText = blockText.replace(/\\n\\n/g, \"\\n\");\n blockText = blockText.replace(/^\\n/, \"\");\n\n // strip trailing blank lines\n blockText = blockText.replace(/\\n+$/g, \"\");\n\n // Replace the element text with a marker (\"~KxK\" where x is its key)\n blockText = \"\\n\\n~K\" + (g_html_blocks.push(blockText) - 1) + \"K\\n\\n\";\n\n return blockText;\n };\n\n var _RunBlockGamut = function (text) {\n //\n // These are all the transformations that form block-level\n // tags like paragraphs, headers, and list items.\n //\n text = _DoHeaders(text);\n\n // Do Horizontal Rules:\n var key = hashBlock(\"
\");\n text = text.replace(/^[ ]{0,2}([ ]?\\*[ ]?){3,}[ \\t]*$/gm, key);\n text = text.replace(/^[ ]{0,2}([ ]?\\-[ ]?){3,}[ \\t]*$/gm, key);\n text = text.replace(/^[ ]{0,2}([ ]?\\_[ ]?){3,}[ \\t]*$/gm, key);\n\n text = _DoLists(text);\n text = _DoCodeBlocks(text);\n text = _DoBlockQuotes(text);\n\n // We already ran _HashHTMLBlocks() before, in Markdown(), but that\n // was to escape raw HTML in the original Markdown source. This time,\n // we're escaping the markup we've just created, so that we don't wrap\n //

tags around block-level tags.\n text = _HashHTMLBlocks(text);\n text = _FormParagraphs(text);\n\n return text;\n };\n\n var _RunSpanGamut = function (text) {\n //\n // These are all the transformations that occur *within* block-level\n // tags like paragraphs, headers, and list items.\n //\n\n text = _DoCodeSpans(text);\n text = _EscapeSpecialCharsWithinTagAttributes(text);\n text = _EncodeBackslashEscapes(text);\n\n // Process anchor and image tags. Images must come first,\n // because ![foo][f] looks like an anchor.\n text = _DoImages(text);\n text = _DoAnchors(text);\n\n // Make links out of things like ``\n // Must come after _DoAnchors(), because you can use < and >\n // delimiters in inline links like [this]().\n text = _DoAutoLinks(text);\n text = _EncodeAmpsAndAngles(text);\n text = _DoItalicsAndBold(text);\n\n // Do hard breaks:\n text = text.replace(/ +\\n/g, \"
\\n\");\n\n return text;\n };\n\n var _EscapeSpecialCharsWithinTagAttributes = function (text) {\n //\n // Within tags -- meaning between < and > -- encode [\\ ` * _] so they\n // don't conflict with their use in Markdown for code, italics and strong.\n //\n\n // Build a regex to find HTML tags and comments. See Friedl's\n // \"Mastering Regular Expressions\", 2nd Ed., pp. 200-201.\n var regex = /(<[a-z\\/!$](\"[^\"]*\"|'[^']*'|[^'\">])*>|)/gi;\n\n text = text.replace(regex, function (wholeMatch) {\n var tag = wholeMatch.replace(/(.)<\\/?code>(?=.)/g, \"$1`\");\n tag = escapeCharacters(tag, \"\\\\`*_\");\n return tag;\n });\n\n return text;\n };\n\n var _DoAnchors = function (text) {\n //\n // Turn Markdown link shortcuts into XHTML
tags.\n //\n //\n // First, handle reference-style links: [link text] [id]\n //\n\n /*\n text = text.replace(/\n (\t\t\t\t\t\t\t// wrap whole match in $1\n \\[\n (\n (?:\n \\[[^\\]]*\\]\t\t// allow brackets nested one level\n |\n [^\\[]\t\t\t// or anything else\n )*\n )\n \\]\n\n [ ]?\t\t\t\t\t// one optional space\n (?:\\n[ ]*)?\t\t\t\t// one optional newline followed by spaces\n\n \\[\n (.*?)\t\t\t\t\t// id = $3\n \\]\n )()()()()\t\t\t\t\t// pad remaining backreferences\n /g,_DoAnchors_callback);\n */\n text = text.replace(\n /(\\[((?:\\[[^\\]]*\\]|[^\\[\\]])*)\\][ ]?(?:\\n[ ]*)?\\[(.*?)\\])()()()()/g,\n writeAnchorTag\n );\n\n //\n // Next, inline-style links: [link text](url \"optional title\")\n //\n\n /*\n text = text.replace(/\n (\t\t\t\t\t\t// wrap whole match in $1\n \\[\n (\n (?:\n \\[[^\\]]*\\]\t// allow brackets nested one level\n |\n [^\\[\\]]\t\t\t// or anything else\n )\n )\n \\]\n \\(\t\t\t\t\t\t// literal paren\n [ \\t]*\n ()\t\t\t\t\t\t// no id, so leave $3 empty\n ?\t\t\t\t// href = $4\n [ \\t]*\n (\t\t\t\t\t\t// $5\n (['\"])\t\t\t\t// quote char = $6\n (.*?)\t\t\t\t// Title = $7\n \\6\t\t\t\t\t// matching quote\n [ \\t]*\t\t\t\t// ignore any spaces/tabs between closing quote and )\n )?\t\t\t\t\t\t// title is optional\n \\)\n )\n /g,writeAnchorTag);\n */\n text = text.replace(\n /(\\[((?:\\[[^\\]]*\\]|[^\\[\\]])*)\\]\\([ \\t]*()?[ \\t]*((['\"])(.*?)\\6[ \\t]*)?\\))/g,\n writeAnchorTag\n );\n\n //\n // Last, handle reference-style shortcuts: [link text]\n // These must come last in case you've also got [link test][1]\n // or [link test](/foo)\n //\n\n /*\n text = text.replace(/\n ( // wrap whole match in $1\n \\[\n ([^\\[\\]]+)\t\t\t\t// link text = $2; can't contain '[' or ']'\n \\]\n )()()()()()\t\t\t\t\t// pad rest of backreferences\n /g, writeAnchorTag);\n */\n text = text.replace(/(\\[([^\\[\\]]+)\\])()()()()()/g, writeAnchorTag);\n\n return text;\n };\n\n var writeAnchorTag = function (wholeMatch, m1, m2, m3, m4, m5, m6, m7) {\n if (m7 == undefined) m7 = \"\";\n var whole_match = m1;\n var link_text = m2;\n var link_id = m3.toLowerCase();\n var url = m4;\n var title = m7;\n\n if (url == \"\") {\n if (link_id == \"\") {\n // lower-case and turn embedded newlines into spaces\n link_id = link_text.toLowerCase().replace(/ ?\\n/g, \" \");\n }\n url = \"#\" + link_id;\n\n if (g_urls[link_id] != undefined) {\n url = g_urls[link_id];\n if (g_titles[link_id] != undefined) {\n title = g_titles[link_id];\n }\n } else {\n if (whole_match.search(/\\(\\s*\\)$/m) > -1) {\n // Special case for explicit empty url\n url = \"\";\n } else {\n return whole_match;\n }\n }\n }\n\n url = escapeCharacters(url, \"*_\");\n var result = '\" + _EncodeBackslashEscapes(link_text) + \"\";\n\n return result;\n };\n\n var _DoImages = function (text) {\n //\n // Turn Markdown image shortcuts into tags.\n //\n\n //\n // First, handle reference-style labeled images: ![alt text][id]\n //\n\n /*\n text = text.replace(/\n (\t\t\t\t\t\t// wrap whole match in $1\n !\\[\n (.*?)\t\t\t\t// alt text = $2\n \\]\n\n [ ]?\t\t\t\t// one optional space\n (?:\\n[ ]*)?\t\t\t// one optional newline followed by spaces\n\n \\[\n (.*?)\t\t\t\t// id = $3\n \\]\n )()()()()\t\t\t\t// pad rest of backreferences\n /g,writeImageTag);\n */\n text = text.replace(\n /(!\\[(.*?)\\][ ]?(?:\\n[ ]*)?\\[(.*?)\\])()()()()/g,\n writeImageTag\n );\n\n //\n // Next, handle inline images: ![alt text](url \"optional title\")\n // Don't forget: encode * and _\n\n /*\n text = text.replace(/\n (\t\t\t\t\t\t// wrap whole match in $1\n !\\[\n (.*?)\t\t\t\t// alt text = $2\n \\]\n \\s?\t\t\t\t\t// One optional whitespace character\n \\(\t\t\t\t\t// literal paren\n [ \\t]*\n ()\t\t\t\t\t// no id, so leave $3 empty\n ?\t\t\t// src url = $4\n [ \\t]*\n (\t\t\t\t\t// $5\n (['\"])\t\t\t// quote char = $6\n (.*?)\t\t\t// title = $7\n \\6\t\t\t\t// matching quote\n [ \\t]*\n )?\t\t\t\t\t// title is optional\n \\)\n )\n /g,writeImageTag);\n */\n text = text.replace(\n /(!\\[(.*?)\\]\\s?\\([ \\t]*()?[ \\t]*((['\"])(.*?)\\6[ \\t]*)?\\))/g,\n writeImageTag\n );\n\n return text;\n };\n\n var writeImageTag = function (wholeMatch, m1, m2, m3, m4, m5, m6, m7) {\n var whole_match = m1;\n var alt_text = m2;\n var link_id = m3.toLowerCase();\n var url = m4;\n var title = m7;\n\n if (!title) title = \"\";\n\n if (url == \"\") {\n if (link_id == \"\") {\n // lower-case and turn embedded newlines into spaces\n link_id = alt_text.toLowerCase().replace(/ ?\\n/g, \" \");\n }\n url = \"#\" + link_id;\n\n if (g_urls[link_id] != undefined) {\n url = g_urls[link_id];\n if (g_titles[link_id] != undefined) {\n title = g_titles[link_id];\n }\n } else {\n return whole_match;\n }\n }\n\n alt_text = alt_text.replace(/\"/g, \""\");\n url = escapeCharacters(url, \"*_\");\n var result = '\"'\";\n\n return result;\n };\n\n var _DoHeaders = function (text) {\n // Setext-style headers:\n //\tHeader 1\n //\t========\n //\n //\tHeader 2\n //\t--------\n //\n text = text.replace(\n /^(.+)[ \\t]*\\n=+[ \\t]*\\n+/gm,\n function (wholeMatch, m1) {\n return hashBlock(\"

\" + _RunSpanGamut(m1) + \"

\");\n }\n );\n\n text = text.replace(\n /^(.+)[ \\t]*\\n-+[ \\t]*\\n+/gm,\n function (matchFound, m1) {\n return hashBlock(\"

\" + _RunSpanGamut(m1) + \"

\");\n }\n );\n\n // atx-style headers:\n // # Header 1\n // ## Header 2\n // ## Header 2 with closing hashes ##\n // ...\n // ###### Header 6\n //\n\n /*\n text = text.replace(/\n ^(\\#{1,6})\t\t\t\t// $1 = string of #'s\n [ \\t]*\n (.+?)\t\t\t\t\t// $2 = Header text\n [ \\t]*\n \\#*\t\t\t\t\t\t// optional closing #'s (not counted)\n \\n+\n /gm, function() {...});\n */\n\n text = text.replace(\n /^(\\#{1,6})[ \\t]*(.+?)[ \\t]*\\#*\\n+/gm,\n function (wholeMatch, m1, m2) {\n var h_level = m1.length;\n return hashBlock(\n \"\" + _RunSpanGamut(m2) + \"\"\n );\n }\n );\n\n return text;\n };\n\n // This declaration keeps Dojo compressor from outputting garbage:\n var _ProcessListItems;\n\n var _DoLists = function (text) {\n //\n // Form HTML ordered (numbered) and unordered (bulleted) lists.\n //\n\n // attacklab: add sentinel to hack around khtml/safari bug:\n // http://bugs.webkit.org/show_bug.cgi?id=11231\n text += \"~0\";\n\n // Re-usable pattern to match any entirel ul or ol list:\n\n /*\n var whole_list = /\n (\t\t\t\t\t\t\t\t\t// $1 = whole list\n (\t\t\t\t\t\t\t\t// $2\n [ ]{0,3}\t\t\t\t\t// attacklab: g_tab_width - 1\n ([*+-]|\\d+[.])\t\t\t\t// $3 = first list item marker\n [ \\t]+\n )\n [^\\r]+?\n (\t\t\t\t\t\t\t\t// $4\n ~0\t\t\t\t\t\t\t// sentinel for workaround; should be $\n |\n \\n{2,}\n (?=\\S)\n (?!\t\t\t\t\t\t\t// Negative lookahead for another list item marker\n [ \\t]*\n (?:[*+-]|\\d+[.])[ \\t]+\n )\n )\n )/g\n */\n var whole_list =\n /^(([ ]{0,3}([*+-]|\\d+[.])[ \\t]+)[^\\r]+?(~0|\\n{2,}(?=\\S)(?![ \\t]*(?:[*+-]|\\d+[.])[ \\t]+)))/gm;\n\n if (g_list_level) {\n text = text.replace(whole_list, function (wholeMatch, m1, m2) {\n var list = m1;\n var list_type = m2.search(/[*+-]/g) > -1 ? \"ul\" : \"ol\";\n\n // Turn double returns into triple returns, so that we can make a\n // paragraph for the last item in a list, if necessary:\n list = list.replace(/\\n{2,}/g, \"\\n\\n\\n\");\n var result = _ProcessListItems(list);\n\n // Trim any trailing whitespace, to put the closing ``\n // up on the preceding line, to get it past the current stupid\n // HTML block parser. This is a hack to work around the terrible\n // hack that is the HTML block parser.\n result = result.replace(/\\s+$/, \"\");\n result = \"<\" + list_type + \">\" + result + \"\\n\";\n return result;\n });\n } else {\n whole_list =\n /(\\n\\n|^\\n?)(([ ]{0,3}([*+-]|\\d+[.])[ \\t]+)[^\\r]+?(~0|\\n{2,}(?=\\S)(?![ \\t]*(?:[*+-]|\\d+[.])[ \\t]+)))/g;\n text = text.replace(whole_list, function (wholeMatch, m1, m2, m3) {\n var runup = m1;\n var list = m2;\n\n var list_type = m3.search(/[*+-]/g) > -1 ? \"ul\" : \"ol\";\n // Turn double returns into triple returns, so that we can make a\n // paragraph for the last item in a list, if necessary:\n var list = list.replace(/\\n{2,}/g, \"\\n\\n\\n\");\n var result = _ProcessListItems(list);\n result =\n runup + \"<\" + list_type + \">\\n\" + result + \"\\n\";\n return result;\n });\n }\n\n // attacklab: strip sentinel\n text = text.replace(/~0/, \"\");\n\n return text;\n };\n\n _ProcessListItems = function (list_str) {\n //\n // Process the contents of a single ordered or unordered list, splitting it\n // into individual list items.\n //\n // The $g_list_level global keeps track of when we're inside a list.\n // Each time we enter a list, we increment it; when we leave a list,\n // we decrement. If it's zero, we're not in a list anymore.\n //\n // We do this because when we're not inside a list, we want to treat\n // something like this:\n //\n // I recommend upgrading to version\n // 8. Oops, now this line is treated\n // as a sub-list.\n //\n // As a single paragraph, despite the fact that the second line starts\n // with a digit-period-space sequence.\n //\n // Whereas when we're inside a list (or sub-list), that line will be\n // treated as the start of a sub-list. What a kludge, huh? This is\n // an aspect of Markdown's syntax that's hard to parse perfectly\n // without resorting to mind-reading. Perhaps the solution is to\n // change the syntax rules such that sub-lists must start with a\n // starting cardinal number; e.g. \"1.\" or \"a.\".\n\n g_list_level++;\n\n // trim trailing blank lines:\n list_str = list_str.replace(/\\n{2,}$/, \"\\n\");\n\n // attacklab: add sentinel to emulate \\z\n list_str += \"~0\";\n\n /*\n list_str = list_str.replace(/\n (\\n)?\t\t\t\t\t\t\t// leading line = $1\n (^[ \\t]*)\t\t\t\t\t\t// leading whitespace = $2\n ([*+-]|\\d+[.]) [ \\t]+\t\t\t// list marker = $3\n ([^\\r]+?\t\t\t\t\t\t// list item text = $4\n (\\n{1,2}))\n (?= \\n* (~0 | \\2 ([*+-]|\\d+[.]) [ \\t]+))\n /gm, function(){...});\n */\n list_str = list_str.replace(\n /(\\n)?(^[ \\t]*)([*+-]|\\d+[.])[ \\t]+([^\\r]+?(\\n{1,2}))(?=\\n*(~0|\\2([*+-]|\\d+[.])[ \\t]+))/gm,\n function (wholeMatch, m1, m2, m3, m4) {\n var item = m4;\n var leading_line = m1;\n var leading_space = m2;\n\n if (leading_line || item.search(/\\n{2,}/) > -1) {\n item = _RunBlockGamut(_Outdent(item));\n } else {\n // Recursion for sub-lists:\n item = _DoLists(_Outdent(item));\n item = item.replace(/\\n$/, \"\"); // chomp(item)\n item = _RunSpanGamut(item);\n }\n\n return \"
  • \" + item + \"
  • \\n\";\n }\n );\n\n // attacklab: strip sentinel\n list_str = list_str.replace(/~0/g, \"\");\n\n g_list_level--;\n return list_str;\n };\n\n var _DoCodeBlocks = function (text) {\n //\n // Process Markdown `
    ` blocks.\n    //\n\n    /*\n    text = text.replace(text,\n      /(?:\\n\\n|^)\n      (\t\t\t\t\t\t\t\t// $1 = the code block -- one or more lines, starting with a space/tab\n        (?:\n          (?:[ ]{4}|\\t)\t\t\t// Lines must start with a tab or a tab-width of spaces - attacklab: g_tab_width\n          .*\\n+\n        )+\n      )\n      (\\n*[ ]{0,3}[^ \\t\\n]|(?=~0))\t// attacklab: g_tab_width\n    /g,function(){...});\n  */\n\n    // attacklab: sentinel workarounds for lack of \\A and \\Z, safari\\khtml bug\n    text += \"~0\";\n\n    text = text.replace(\n      /(?:\\n\\n|^)((?:(?:[ ]{4}|\\t).*\\n+)+)(\\n*[ ]{0,3}[^ \\t\\n]|(?=~0))/g,\n      function (wholeMatch, m1, m2) {\n        var codeblock = m1;\n        var nextChar = m2;\n\n        codeblock = _EncodeCode(_Outdent(codeblock));\n        codeblock = _Detab(codeblock);\n        codeblock = codeblock.replace(/^\\n+/g, \"\"); // trim leading newlines\n        codeblock = codeblock.replace(/\\n+$/g, \"\"); // trim trailing whitespace\n\n        codeblock = \"
    \" + codeblock + \"\\n
    \";\n\n return hashBlock(codeblock) + nextChar;\n }\n );\n\n // attacklab: strip sentinel\n text = text.replace(/~0/, \"\");\n\n return text;\n };\n\n var hashBlock = function (text) {\n text = text.replace(/(^\\n+|\\n+$)/g, \"\");\n return \"\\n\\n~K\" + (g_html_blocks.push(text) - 1) + \"K\\n\\n\";\n };\n\n var _DoCodeSpans = function (text) {\n //\n // * Backtick quotes are used for spans.\n //\n // * You can use multiple backticks as the delimiters if you want to\n // include literal backticks in the code span. So, this input:\n //\n // Just type ``foo `bar` baz`` at the prompt.\n //\n // Will translate to:\n //\n //

    Just type foo `bar` baz at the prompt.

    \n //\n //\tThere's no arbitrary limit to the number of backticks you\n //\tcan use as delimters. If you need three consecutive backticks\n //\tin your code, use four for delimiters, etc.\n //\n // * You can use spaces to get literal backticks at the edges:\n //\n // ... type `` `bar` `` ...\n //\n // Turns to:\n //\n // ... type `bar` ...\n //\n\n /*\n text = text.replace(/\n (^|[^\\\\])\t\t\t\t\t// Character before opening ` can't be a backslash\n (`+)\t\t\t\t\t\t// $2 = Opening run of `\n (\t\t\t\t\t\t\t// $3 = The code block\n [^\\r]*?\n [^`]\t\t\t\t\t// attacklab: work around lack of lookbehind\n )\n \\2\t\t\t\t\t\t\t// Matching closer\n (?!`)\n /gm, function(){...});\n */\n\n text = text.replace(\n /(^|[^\\\\])(`+)([^\\r]*?[^`])\\2(?!`)/gm,\n function (wholeMatch, m1, m2, m3, m4) {\n var c = m3;\n c = c.replace(/^([ \\t]*)/g, \"\"); // leading whitespace\n c = c.replace(/[ \\t]*$/g, \"\"); // trailing whitespace\n c = _EncodeCode(c);\n return m1 + \"\" + c + \"\";\n }\n );\n\n return text;\n };\n\n var _EncodeCode = function (text) {\n //\n // Encode/escape certain characters inside Markdown code runs.\n // The point is that in code, these characters are literals,\n // and lose their special Markdown meanings.\n //\n // Encode all ampersands; HTML entities are not\n // entities within a Markdown code span.\n text = text.replace(/&/g, \"&\");\n\n // Do the angle bracket song and dance:\n text = text.replace(//g, \">\");\n\n // Now, escape characters that are magic in Markdown:\n text = escapeCharacters(text, \"*_{}[]\\\\\", false);\n\n // jj the line above breaks this:\n //---\n\n //* Item\n\n // 1. Subitem\n\n // special char: *\n //---\n\n return text;\n };\n\n var _DoItalicsAndBold = function (text) {\n // must go first:\n text = text.replace(\n /(\\*\\*|__)(?=\\S)([^\\r]*?\\S[*_]*)\\1/g,\n \"$2\"\n );\n\n text = text.replace(/(\\*|_)(?=\\S)([^\\r]*?\\S)\\1/g, \"$2\");\n\n return text;\n };\n\n var _DoBlockQuotes = function (text) {\n /*\n text = text.replace(/\n (\t\t\t\t\t\t\t\t// Wrap whole match in $1\n (\n ^[ \\t]*>[ \\t]?\t\t\t// '>' at the start of a line\n .+\\n\t\t\t\t\t// rest of the first line\n (.+\\n)*\t\t\t\t\t// subsequent consecutive lines\n \\n*\t\t\t\t\t\t// blanks\n )+\n )\n /gm, function(){...});\n */\n\n text = text.replace(\n /((^[ \\t]*>[ \\t]?.+\\n(.+\\n)*\\n*)+)/gm,\n function (wholeMatch, m1) {\n var bq = m1;\n\n // attacklab: hack around Konqueror 3.5.4 bug:\n // \"----------bug\".replace(/^-/g,\"\") == \"bug\"\n\n bq = bq.replace(/^[ \\t]*>[ \\t]?/gm, \"~0\"); // trim one level of quoting\n\n // attacklab: clean up hack\n bq = bq.replace(/~0/g, \"\");\n\n bq = bq.replace(/^[ \\t]+$/gm, \"\"); // trim whitespace-only lines\n bq = _RunBlockGamut(bq); // recurse\n\n bq = bq.replace(/(^|\\n)/g, \"$1 \");\n // These leading spaces screw with
     content, so we need to fix that:\n        bq = bq.replace(\n          /(\\s*
    [^\\r]+?<\\/pre>)/gm,\n          function (wholeMatch, m1) {\n            var pre = m1;\n            // attacklab: hack around Konqueror 3.5.4 bug:\n            pre = pre.replace(/^  /gm, \"~0\");\n            pre = pre.replace(/~0/g, \"\");\n            return pre;\n          }\n        );\n\n        return hashBlock(\"
    \\n\" + bq + \"\\n
    \");\n }\n );\n return text;\n };\n\n var _FormParagraphs = function (text) {\n //\n // Params:\n // $text - string to process with html

    tags\n //\n\n // Strip leading and trailing lines:\n text = text.replace(/^\\n+/g, \"\");\n text = text.replace(/\\n+$/g, \"\");\n\n var grafs = text.split(/\\n{2,}/g);\n var grafsOut = new Array();\n\n //\n // Wrap

    tags.\n //\n var end = grafs.length;\n for (var i = 0; i < end; i++) {\n var str = grafs[i];\n\n // if this is an HTML marker, copy it\n if (str.search(/~K(\\d+)K/g) >= 0) {\n grafsOut.push(str);\n } else if (str.search(/\\S/) >= 0) {\n str = _RunSpanGamut(str);\n str = str.replace(/^([ \\t]*)/g, \"

    \");\n str += \"

    \";\n grafsOut.push(str);\n }\n }\n\n //\n // Unhashify HTML blocks\n //\n end = grafsOut.length;\n for (var i = 0; i < end; i++) {\n // if this is a marker for an html block...\n while (grafsOut[i].search(/~K(\\d+)K/) >= 0) {\n var blockText = g_html_blocks[RegExp.$1];\n blockText = blockText.replace(/\\$/g, \"$$$$\"); // Escape any dollar signs\n grafsOut[i] = grafsOut[i].replace(/~K\\d+K/, blockText);\n }\n }\n\n return grafsOut.join(\"\\n\\n\");\n };\n\n var _EncodeAmpsAndAngles = function (text) {\n // Smart processing for ampersands and angle brackets that need to be encoded.\n\n // Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin:\n // http://bumppo.net/projects/amputator/\n text = text.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\\w+);)/g, \"&\");\n\n // Encode naked <'s\n text = text.replace(/<(?![a-z\\/?\\$!])/gi, \"<\");\n\n return text;\n };\n\n var _EncodeBackslashEscapes = function (text) {\n //\n // Parameter: String.\n // Returns:\tThe string, with after processing the following backslash\n // escape sequences.\n //\n\n // attacklab: The polite way to do this is with the new\n // escapeCharacters() function:\n //\n // text = escapeCharacters(text,\"\\\\\",true);\n // text = escapeCharacters(text,\"`*_{}[]()>#+-.!\",true);\n //\n // ...but we're sidestepping its use of the (slow) RegExp constructor\n // as an optimization for Firefox. This function gets called a LOT.\n\n text = text.replace(/\\\\(\\\\)/g, escapeCharacters_callback);\n text = text.replace(/\\\\([`*_{}\\[\\]()>#+-.!])/g, escapeCharacters_callback);\n return text;\n };\n\n var _DoAutoLinks = function (text) {\n text = text.replace(\n /<((https?|ftp|dict):[^'\">\\s]+)>/gi,\n '$1'\n );\n\n // Email addresses: \n\n /*\n text = text.replace(/\n <\n (?:mailto:)?\n (\n [-.\\w]+\n \\@\n [-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]+\n )\n >\n /gi, _DoAutoLinks_callback());\n */\n text = text.replace(\n /<(?:mailto:)?([-.\\w]+\\@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]+)>/gi,\n function (wholeMatch, m1) {\n return _EncodeEmailAddress(_UnescapeSpecialChars(m1));\n }\n );\n\n return text;\n };\n\n var _EncodeEmailAddress = function (addr) {\n //\n // Input: an email address, e.g. \"foo@example.com\"\n //\n // Output: the email address as a mailto link, with each character\n //\tof the address encoded as either a decimal or hex entity, in\n //\tthe hopes of foiling most address harvesting spam bots. E.g.:\n //\n //\tfoo\n // @example.com\n //\n // Based on a filter by Matthew Wickline, posted to the BBEdit-Talk\n // mailing list: \n //\n\n // attacklab: why can't javascript speak hex?\n function char2hex(ch) {\n var hexDigits = \"0123456789ABCDEF\";\n var dec = ch.charCodeAt(0);\n return hexDigits.charAt(dec >> 4) + hexDigits.charAt(dec & 15);\n }\n\n var encode = [\n function (ch) {\n return \"&#\" + ch.charCodeAt(0) + \";\";\n },\n function (ch) {\n return \"&#x\" + char2hex(ch) + \";\";\n },\n function (ch) {\n return ch;\n }\n ];\n\n addr = \"mailto:\" + addr;\n\n addr = addr.replace(/./g, function (ch) {\n if (ch == \"@\") {\n // this *must* be encoded. I insist.\n ch = encode[Math.floor(Math.random() * 2)](ch);\n } else if (ch != \":\") {\n // leave ':' alone (to spot mailto: later)\n var r = Math.random();\n // roughly 10% raw, 45% hex, 45% dec\n ch = r > 0.9 ? encode[2](ch) : r > 0.45 ? encode[1](ch) : encode[0](ch);\n }\n return ch;\n });\n\n addr = '' + addr + \"\";\n addr = addr.replace(/\">.+:/g, '\">'); // strip the mailto: from the visible part\n\n return addr;\n };\n\n var _UnescapeSpecialChars = function (text) {\n //\n // Swap back in all the special characters we've hidden.\n //\n text = text.replace(/~E(\\d+)E/g, function (wholeMatch, m1) {\n var charCodeToReplace = parseInt(m1);\n return String.fromCharCode(charCodeToReplace);\n });\n return text;\n };\n\n var _Outdent = function (text) {\n //\n // Remove one level of line-leading tabs or spaces\n //\n\n // attacklab: hack around Konqueror 3.5.4 bug:\n // \"----------bug\".replace(/^-/g,\"\") == \"bug\"\n\n text = text.replace(/^(\\t|[ ]{1,4})/gm, \"~0\"); // attacklab: g_tab_width\n\n // attacklab: clean up hack\n text = text.replace(/~0/g, \"\");\n\n return text;\n };\n\n var _Detab = function (text) {\n // attacklab: Detab's completely rewritten for speed.\n // In perl we could fix it by anchoring the regexp with \\G.\n // In javascript we're less fortunate.\n\n // expand first n-1 tabs\n text = text.replace(/\\t(?=\\t)/g, \" \"); // attacklab: g_tab_width\n\n // replace the nth with two sentinels\n text = text.replace(/\\t/g, \"~A~B\");\n\n // use the sentinel to anchor our regex so it doesn't explode\n text = text.replace(/~B(.+?)~A/g, function (wholeMatch, m1, m2) {\n var leadingText = m1;\n var numSpaces = 4 - (leadingText.length % 4); // attacklab: g_tab_width\n\n // there *must* be a better way to do this:\n for (var i = 0; i < numSpaces; i++) leadingText += \" \";\n\n return leadingText;\n });\n\n // clean up sentinels\n text = text.replace(/~A/g, \" \"); // attacklab: g_tab_width\n text = text.replace(/~B/g, \"\");\n\n return text;\n };\n\n //\n // attacklab: Utility functions\n //\n\n var escapeCharacters = function (text, charsToEscape, afterBackslash) {\n // First we have to escape the escape characters so that\n // we can build a character class out of them\n var regexString =\n \"([\" + charsToEscape.replace(/([\\[\\]\\\\])/g, \"\\\\$1\") + \"])\";\n\n if (afterBackslash) {\n regexString = \"\\\\\\\\\" + regexString;\n }\n\n var regex = new RegExp(regexString, \"g\");\n text = text.replace(regex, escapeCharacters_callback);\n\n return text;\n };\n\n var escapeCharacters_callback = function (wholeMatch, m1) {\n var charCodeToEscape = m1.charCodeAt(0);\n return \"~E\" + charCodeToEscape + \"E\";\n };\n}; // end of Showdown.converter\n\nexport default Showdown;\n", "import { default as Showdown } from \"$showdown\";\nexport { converter };\n\nconst converter = new Showdown.converter();\n\nconst orig = converter.makeHtml.bind(converter);\nconverter.makeHtml = (text, inline) =>\n orig(text, inline).replace(/ {\n const container = doc.querySelector(\".p-info-sources--content\");\n const infoButton = doc.createElement(\"span\");\n infoButton.className = \"p-info-sources--toggleSpan\";\n infoButton.innerHTML = `\n \n meer informatie\n \n `;\n\n $(doc).on(\"bb:postHandleData\", (_e, data) => {\n toggleInfosource(null, false);\n if (data && data.informationsources && data.informationsources.length) {\n container.querySelectorAll(\".p-info-source--item\").forEach(old => {\n container.removeChild(old);\n });\n const info = data.informationsources.map(getInfo);\n info.forEach(item => {\n let template = `\n
    ${converter.makeHtml(\n escapeHTML(item),\n false\n )}
    \n `;\n container.insertAdjacentHTML(\"afterbegin\", template);\n });\n // Now place the button - always on 1st question.\n let currentButton = doc.querySelector(\n \"#bb-q .bb-questionlabelgroup .p-info-sources--toggle\"\n );\n if (currentButton) {\n currentButton.parentNode.removeChild(currentButton);\n }\n let pos =\n doc.querySelector(\"#bb-q .bb-questionlabelgroup\") !== null\n ? doc.querySelector(\"#bb-q .bb-questionlabelgroup\")\n : doc.querySelector(\"#bb-q\");\n pos.prepend(infoButton);\n infoButton.addEventListener(\"click\", toggleInfosource);\n }\n });\n\n // Handler\n doc\n .querySelector(\".p-info-sources--toggle\")\n .addEventListener(\"click\", toggleInfosource);\n})(document, jQuery);\n", "/*\n inforgraphics.js\n\n A local plugin to place infographic images\n in the right place at the right time.\n\n Author: Tim Bauwens\n*/\n\nimport { bb } from \"$json\";\nimport { getmetadata } from \"$json/lib/getmetadata\";\n\n((doc, $) => {\n $(doc).on(\"bb:postHandleData\", (e, data) => {\n if (data && data.groups && data.groups.length) {\n const props = getmetadata(data).props;\n if (props.has(\"p-infographics-img\")) {\n const path = `../../rijks-cyberscan/plugins/infographics/live/images/${props.get(\n \"p-infographics-img\"\n )}`;\n const cssUrl = `url(\"${path}?v=20230117\")`;\n doc\n .querySelector(\".l-content--left--art\")\n .style.setProperty(\"--artwork\", cssUrl);\n bb.Mode.set(\"hasArt\");\n } else {\n // remove old one.\n bb.Mode.unset(\"hasArt\");\n doc\n .querySelector(\".l-content--left--art\")\n .style.setProperty(\"--artwork\", \"\");\n }\n }\n });\n})(document, jQuery);\n", "import { converter } from \"$md-converter\";\nimport { conf } from \"$json/lib/conf\";\nimport { updateLabels } from \"$json/lib/feature-queries\";\nimport { isLabel } from \"$json/lib/control-helpers\";\nimport { has } from \"$json/lib/functional\";\n\n/* md-labels.js:\n * Markdown all labels after insertion into the DOM\n *\n *\n *\n * Author: Niels Giesen\n * Copyright 2013, 2015, 2019 Berkeley Bridge\n *\n */\n\n(function ($) {\n $(function () {\n var topLevel, policy;\n\n try {\n var baseLevel = conf.arbitrary.headings.baseLevel;\n if (baseLevel === undefined) throw \"baseLevel is not defined\";\n topLevel = baseLevel - 1;\n } catch (err) {\n topLevel = 0;\n }\n\n try {\n policy = conf.arbitrary.showdown.policy;\n if ([\"legacy\"].indexOf(policy) === -1)\n throw \"showdown.policy is not 'legacy'\";\n } catch (err) {}\n\n const newline = conf.plugins.includes(\"showdown\") ? \"\\n\\n\" : \"\\n\";\n const newlineGlobRe = new RegExp(newline, \"g\");\n\n /**\n * Regular expression for paragraph open/end tags.\n * We don't want them.\n *\n **/\n var br_re = /
    /gi,\n onlyPhrasingInside = [\n \"P\",\n \"H1\",\n \"H2\",\n \"H3\",\n \"H4\",\n \"H5\",\n \"H6\",\n \"SPAN\",\n \"LABEL\",\n \"LEGEND\",\n \"CAPTION\"\n ];\n\n if (policy === \"legacy\") {\n onlyPhrasingInside.splice(9);\n }\n\n $.fn.showdown = function () {\n return this.each(function (i, e) {\n if (e.classList.contains(\"bb-p-showdown-labels\")) return;\n e = $(e);\n var html_in, html_out;\n var onlyPhrasing = allowOnlyPhrasing(e);\n let newline = \"\\n\";\n\n html_in = e.html().replace(br_re, newline);\n html_out = converter.makeHtml(html_in, onlyPhrasing);\n if (onlyPhrasing)\n html_out = html_out.trim().replace(newlineGlobRe, \"
    \");\n\n if (topLevel !== 0)\n html_out = html_out.replace(/(<\\/?h)([1-6])/g, demoteHeading);\n\n e.html(html_out).addClass(\"bb-p-showdown-labels\");\n });\n };\n\n function allowOnlyPhrasing(e) {\n return (\n onlyPhrasingInside.indexOf(e.get(0).nodeName) > -1 ||\n (policy !== \"legacy\" && e.hasClass(\"bb-label\"))\n );\n }\n\n function demoteHeading(m, m1, m2) {\n return m1 + Math.min(6, topLevel + Number(m2));\n }\n\n $(document).on(\"bb:postHandleData\", function (event, data) {\n if (data && data.groups) {\n $(\".bb-md-able\").showdown();\n $(document).trigger(\"bb:md-done\");\n $(document).trigger(\"bb:resized\");\n }\n });\n });\n\n document.addEventListener(\n \"bb:updatedControl\",\n ({ detail: { control, Updates } }) => {\n if (has(\"value\", Updates) && isLabel(control) && updateLabels(conf)) {\n control._elt.classList.remove(\"bb-p-showdown-labels\");\n control.$elt.showdown();\n }\n if (\n has(\"value\", Updates) &&\n control.controltype === \"grid\" &&\n updateLabels(conf)\n ) {\n control.$elt.find(\".bb-md-able\").showdown();\n }\n }\n );\n})(jQuery);\n", "/*\n * metadata-change-navtext\n *\n * Checks for metadata per node, specifically for\n * keys to change the nav button texts.\n *\n * Author: Tim Bauwens\n * Copyright: Berkeley Bridge 2020\n */\n\nimport { has } from \"$json/lib/functional\";\nimport { getmetadata } from \"$json/lib/getmetadata\";\n\n$(document).ready(() => {\n ((doc, $) => {\n let classes = [\"bb-next\", \"bb-prior\", \"bb-skip\", \"bb-restart\"];\n\n let originals = {};\n\n let flagged = [];\n\n classes.forEach(cls => {\n let button = doc.querySelector(`.${cls}`);\n if (!button) {\n // Remove this class, the button doesn't exist.\n flagged.push(cls);\n } else {\n let affected = button.querySelector(\".text\");\n if (!affected) {\n // Remove this class, and warn the user the template is not supportive.\n flagged.push(cls);\n window.console &&\n window.console.warn(\n `Using metadata-change-navtext with a non-supporting template.\n Please wrap nav strings with \"`\n );\n } else {\n originals[cls] = affected.innerText.trim();\n }\n }\n });\n\n classes = classes.filter(cls => !flagged.includes(cls));\n\n const reset = () => {\n // Reset strings to orig. values.\n classes.forEach(cls => {\n replace(cls, originals[cls]);\n });\n };\n\n const replace = (cls, string) => {\n doc.querySelectorAll(`.${cls}`).forEach(btn => {\n btn.querySelector(\".text\").innerText = string;\n });\n };\n\n $(doc).on(\"bb:finalHandleData\", (e, data) => {\n if (data && data.groups && data.groups.length) {\n reset();\n const groups = getmetadata(data).groups;\n let currentgroupid = data.groups.reduce(\n (id, group) => (group.current ? group.groupid : false),\n false\n );\n groups.forEach((group, id) => {\n if (id === currentgroupid) {\n classes.forEach(cls => {\n has(cls)(group) && replace(cls, group[cls]);\n });\n }\n });\n }\n });\n })(document, jQuery);\n});\n", "/*\n metadata-scoring.js\n A plugin to add scoring data.\n*/\n\nimport { state } from \"$json/lib/store\";\nimport { getmetadata } from \"$json/lib/getmetadata\";\n\nvar scoreMap = new Map();\n\nconst getAverage = scoresobj => {\n let scores = Object.values(scoresobj);\n if (scores.length) {\n let total = scores.reduce(\n (accumulator, currentValue) => accumulator + currentValue\n );\n return total / scores.length;\n } else {\n return 0;\n }\n};\n\nclass Chapter {\n constructor() {\n this.scores = {};\n this.average = 0;\n }\n}\n\n((doc, $) => {\n const applystate = () => {\n // Run through the jumplist(s) (incl. fake ones) and add scores.\n let jumplist = doc.querySelectorAll(\".bb-jumplist li, .faux-jumplist li\");\n jumplist.forEach(li => {\n let btn = li.querySelector(\"button\");\n if (btn !== null) {\n let groupid = btn.getAttribute(\"data-groupid\");\n if (groupid !== null) {\n if (groupid.includes(\".\")) {\n // This is a chapter.\n if (scoreMap.has(groupid)) {\n btn.setAttribute(\n \"data-average-score\",\n scoreMap.get(groupid).average\n );\n if (scoreMap.get(groupid).hasOwnProperty(\"final\"))\n btn.setAttribute(\n \"data-final-score\",\n scoreMap.get(groupid).final\n );\n }\n } else {\n btn.setAttribute(\"data-score\", scoreMap.get(groupid));\n }\n }\n }\n });\n // Trigger an event for other plugins to react to score changes.\n $(doc).trigger(\"bb:scoresUpdated\", [scoreMap]);\n };\n\n $(doc).on(\"bb:stateChange\", _e => {\n let statescores = state.has(\"scoreMap\")\n ? new Map(Object.entries(state.get(\"scoreMap\")))\n : new Map();\n scoreMap = new Map(statescores);\n applystate();\n });\n\n $(doc).on(\"bb:postHandleData bb:hasUpdated\", (_e, data) => {\n if (data && data.groups && data.groups.length) {\n let md = getmetadata(data).props;\n let group = data.groups[data.groups.length - 1];\n let groupid = group.groupid;\n let chapterid = group.chapterid;\n\n // Grab scores from md and add to scoreMap.\n if (md.has(\"score\") && md.get(\"score\") !== \"initial\") {\n scoreMap.set(groupid, Number(md.get(\"score\")));\n // Also maintain chapter average scores.\n if (chapterid !== \"\") {\n let chapterobj = scoreMap.has(chapterid)\n ? scoreMap.get(chapterid)\n : new Chapter();\n\n chapterobj.scores[groupid] = Number(md.get(\"score\"));\n chapterobj.average = getAverage(chapterobj.scores);\n scoreMap.set(chapterid, chapterobj);\n }\n }\n\n // Also grab chapter scores if the model wishes to provide them.\n if (md.has(\"chapterscore\")) {\n // In case the modeler provides a chapter score from outside the chapter, ignore it.\n if (chapterid !== \"\") {\n let chapterobj = scoreMap.has(chapterid)\n ? scoreMap.get(chapterid)\n : new Chapter();\n\n chapterobj.final = Number(md.get(\"chapterscore\"));\n scoreMap.set(chapterid, chapterobj);\n }\n }\n if (scoreMap.size) {\n state.set(\"scoreMap\", Object.fromEntries(scoreMap));\n applystate();\n }\n }\n });\n})(document, jQuery);\n", "/*\n * metaprogress.js\n *\n * A plugin to create and maintain a\n * progress indicator, updated by\n * metadata.\n *\n * NB: Layer requires at least one\n * element of class 'p-metaprogress'\n *\n * Tip:\n * You can provide a range, e.g. \"setmetadata('progress','3:5')\"\n * This will cause the plugin to fill the element(s) with\n * 5 spans, the first two will have class 'complete'\n * the third will have class 'current' and the last\n * two will have class 'future'.\n *\n * If you need all steps to be 'complete', you can:\n * setmetadata('progress', 'n+1:n');\n */\n\nimport { getmetadata } from \"$json/lib/getmetadata\";\nimport { _, bb } from \"$json\";\n\nconst DICTIONARY = {\n \"Your progress so far is\": {\n \"en\": \"Your progress so far is\",\n \"nl\": \"Je voortgang tot nu toe is\",\n \"en-GB\": \"Your progress so far is\"\n },\n \"You are currently on step\": {\n \"en\": \"You are currently on step\",\n \"nl\": \"U bevindt zich momenteel bij stap\",\n \"en-GB\": \"You are currently on step\"\n },\n \"of\": {\n \"en\": \"of\",\n \"nl\": \"van\",\n \"en-GB\": \"of\"\n }\n};\n_.addTranslations(DICTIONARY);\n\n((doc, $) => {\n // Add a ARIA notify block for read-aloud progress reports.\n const topIndicator = doc.querySelector(\".p-metaprogress\");\n const notifier = doc.createElement(\"span\");\n notifier.setAttribute(\"aria-live\", \"assertive\");\n notifier.setAttribute(\"aria-atomic\", \"true\");\n notifier.setAttribute(\"aria-relevant\", \"additions\");\n notifier.classList.add(\"a-offscreen\");\n topIndicator.insertAdjacentElement(\"afterend\", notifier);\n\n $(doc).on(\"bb:postHandleData\", (e, data) => {\n notifier.textContent = \"\"; // Wipe\n if (data && data.groups && data.groups.length) {\n const md = getmetadata(data).props;\n const indicators = doc.querySelectorAll(\".p-metaprogress\");\n if (md.has(\"progress\")) {\n bb.Mode.set(\"hasProgress\");\n let progress = md.get(\"progress\");\n indicators.innerHTML = \"\";\n let inner = false;\n let announcement = \"\";\n if (progress === \"hide\") {\n bb.Mode.unset(\"hasProgress\");\n }\n if (progress.includes(\":\")) {\n // The model is trying to give a range. Add spans for each potential step.\n inner = doc.createElement(\"div\");\n inner.className = \"steps\";\n let range = Number(progress.split(\":\").pop());\n let current = Number(progress.split(\":\")[0]);\n announcement = `${_(\"You are currently on step\")} ${current} ${_(\n \"of\"\n )} ${range}`;\n try {\n for (let i = range; i > 0; i--) {\n let span = doc.createElement(\"span\");\n span.className = \"step\";\n i < current && span.classList.add(\"complete\");\n i === current && span.classList.add(\"current\");\n i > current && span.classList.add(\"future\");\n span.setAttribute(\"data-step\", i);\n inner.prepend(span);\n }\n } catch (err) {\n return;\n }\n } else {\n announcement = `${_(\"Your progress so far is\")}: ${progress}%`;\n }\n indicators.forEach(indicator => {\n indicator.innerText = progress;\n if (inner) {\n indicator.innerHTML = \"\";\n indicator.append(inner);\n }\n indicator.setAttribute(\"data-progress\", md.get(\"progress\"));\n indicator.style.setProperty(\"--progress\", md.get(\"progress\"));\n });\n // Announce\n notifier.textContent = announcement;\n }\n }\n });\n})(document, jQuery);\n", "export default function _isPlaceholder(a) {\n return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true;\n}", "import _isPlaceholder from './_isPlaceholder.js';\n\n/**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry1(fn) {\n return function f1(a) {\n if (arguments.length === 0 || _isPlaceholder(a)) {\n return f1;\n } else {\n return fn.apply(this, arguments);\n }\n };\n}", "import _curry1 from './_curry1.js';\nimport _isPlaceholder from './_isPlaceholder.js';\n\n/**\n * Optimized internal two-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry2(fn) {\n return function f2(a, b) {\n switch (arguments.length) {\n case 0:\n return f2;\n case 1:\n return _isPlaceholder(a) ? f2 : _curry1(function (_b) {\n return fn(a, _b);\n });\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b);\n }) : fn(a, b);\n }\n };\n}", "export default function _has(prop, obj) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}", "import _curry2 from './internal/_curry2.js';\nimport _has from './internal/_has.js';\n\n/**\n * Returns whether or not a path exists in an object. Only the object's\n * own properties are checked.\n *\n * @func\n * @memberOf R\n * @since v0.26.0\n * @category Object\n * @typedefn Idx = String | Int\n * @sig [Idx] -> {a} -> Boolean\n * @param {Array} path The path to use.\n * @param {Object} obj The object to check the path in.\n * @return {Boolean} Whether the path exists.\n * @see R.has\n * @example\n *\n * R.hasPath(['a', 'b'], {a: {b: 2}}); // => true\n * R.hasPath(['a', 'b'], {a: {b: undefined}}); // => true\n * R.hasPath(['a', 'b'], {a: {c: 2}}); // => false\n * R.hasPath(['a', 'b'], {}); // => false\n */\nvar hasPath = /*#__PURE__*/_curry2(function hasPath(_path, obj) {\n if (_path.length === 0) {\n return false;\n }\n var val = obj;\n var idx = 0;\n while (idx < _path.length) {\n if (_has(_path[idx], val)) {\n val = val[_path[idx]];\n idx += 1;\n } else {\n return false;\n }\n }\n return true;\n});\nexport default hasPath;", "import _curry2 from './internal/_curry2.js';\nimport hasPath from './hasPath.js';\n\n/**\n * Returns whether or not an object has an own property with the specified name\n *\n * @func\n * @memberOf R\n * @since v0.7.0\n * @category Object\n * @sig s -> {s: x} -> Boolean\n * @param {String} prop The name of the property to check for.\n * @param {Object} obj The object to query.\n * @return {Boolean} Whether the property exists.\n * @example\n *\n * const hasName = R.has('name');\n * hasName({name: 'alice'}); //=> true\n * hasName({name: 'bob'}); //=> true\n * hasName({}); //=> false\n *\n * const point = {x: 0, y: 0};\n * const pointHas = R.has(R.__, point);\n * pointHas('x'); //=> true\n * pointHas('y'); //=> true\n * pointHas('z'); //=> false\n */\nvar has = /*#__PURE__*/_curry2(function has(prop, obj) {\n return hasPath([prop], obj);\n});\nexport default has;", "/*\n mis-click-count.js\n\n Give a model the ability to count\n every time a specifed element is\n clicked by recording it in MIS\n by means of a hidden field in the model.\n\n Copyright: Berkeley Bridge 2021\n Author: Tim Bauwens\n*/\n\nimport * as R from \"ramda\";\nimport { bb } from \"$json\";\nimport { getmetadata } from \"$json/lib/getmetadata\";\n\nconst getIDbykey = (items = [], key = \"\") => {\n const arr = [...items];\n if (!arr.length) return null;\n const item = arr.pop();\n if (item.length) {\n return R.has(key)(item[1]) ? item[0][0] : getIDbykey(arr, key);\n } else {\n return null;\n }\n};\n\n((doc, $) => {\n let clickelem = false;\n let clickfield = false;\n\n const clicked = e => {\n try {\n doc.querySelector(`[data-id=\"${clickfield}\"]`).value = \"true\";\n bb.updatemis();\n } catch (err) {\n window.console && window.console.warn(err);\n }\n };\n\n $(doc).on(\"bb:preHandleData\", (e, data) => {\n if (data && data.groups && data.groups.length) {\n const mdprops = getmetadata(data).props;\n const mdcontrols = getmetadata(data).controls;\n if (\n mdprops.has(\"p-mis-click-count\") &&\n mdprops.has(\"p-mis-click-count-field\")\n ) {\n const items = [...mdcontrols];\n if (mdprops.get(\"p-mis-click-count\") === \"end-tools-document\") {\n clickelem = \"end-tools-document\";\n } else {\n clickelem = getIDbykey(items, \"p-mis-click-count\");\n }\n clickfield = getIDbykey(items, \"p-mis-click-count-field\");\n } else {\n clickelem = clickfield = false;\n }\n }\n });\n\n $(doc).on(\"bb:finalHandleData\", (e, data) => {\n if (data && data.groups && data.groups.length) {\n if (clickelem && clickfield) {\n // First switch values from ID to data-id, which are no longer the same.\n clickfield = doc.getElementById(clickfield).getAttribute(\"data-id\");\n\n if (clickelem === \"end-tools-document\") {\n doc\n .querySelector(\".bb-p-end-tools-container .download-container a\")\n .addEventListener(\"click\", clicked);\n } else {\n // First switch values from ID to data-id, which are no longer the same.\n clickelem = doc.getElementById(clickelem).getAttribute(\"data-id\");\n\n doc.querySelectorAll(`[data-id=\"${clickelem}\"]`).forEach(elem => {\n elem.addEventListener(\"click\", clicked);\n });\n }\n\n try {\n doc\n .querySelector(`[data-id=\"${clickfield}\"]`)\n .closest(\".bb-questionlabelgroup\").style.display = \"none\";\n } catch (err) {\n // Probably this is not in a bb-questionlabelgroup...\n doc\n .querySelector(`[data-id=\"${clickfield}\"]`)\n .closest(\".bb-input-wrap\")\n .setAttribute(\"style\", \"display:none !important\");\n }\n }\n }\n });\n})(document, jQuery);\n", "/*!\n * mustache.js - Logic-less {{mustache}} templates with JavaScript\n * http://github.com/janl/mustache.js\n */\n\n/*global define: false Mustache: true*/\n\nfunction mustacheFactory(mustache) {\n var objectToString = Object.prototype.toString;\n var isArray =\n Array.isArray ||\n function isArrayPolyfill(object) {\n return objectToString.call(object) === \"[object Array]\";\n };\n\n function isFunction(object) {\n return typeof object === \"function\";\n }\n\n /**\n * More correct typeof string handling array\n * which normally returns typeof 'object'\n */\n function typeStr(obj) {\n return isArray(obj) ? \"array\" : typeof obj;\n }\n\n function escapeRegExp(string) {\n return string.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n }\n\n /**\n * Null safe way of checking whether or not an object,\n * including its prototype, has a given property\n */\n function hasProperty(obj, propName) {\n return obj != null && typeof obj === \"object\" && propName in obj;\n }\n\n // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577\n // See https://github.com/janl/mustache.js/issues/189\n var regExpTest = RegExp.prototype.test;\n function testRegExp(re, string) {\n return regExpTest.call(re, string);\n }\n\n var nonSpaceRe = /\\S/;\n function isWhitespace(string) {\n return !testRegExp(nonSpaceRe, string);\n }\n\n var entityMap = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\",\n \"/\": \"/\",\n \"`\": \"`\",\n \"=\": \"=\"\n };\n\n function escapeHtml(string) {\n return String(string).replace(/[&<>\"'`=\\/]/g, function fromEntityMap(s) {\n return entityMap[s];\n });\n }\n\n var whiteRe = /\\s*/;\n var spaceRe = /\\s+/;\n var equalsRe = /\\s*=/;\n var curlyRe = /\\s*\\}/;\n var tagRe = /#|\\^|\\/|>|\\{|&|=|!/;\n\n /**\n * Breaks up the given `template` string into a tree of tokens. If the `tags`\n * argument is given here it must be an array with two string values: the\n * opening and closing tags used in the template (e.g. [ \"<%\", \"%>\" ]). Of\n * course, the default is to use mustaches (i.e. mustache.tags).\n *\n * A token is an array with at least 4 elements. The first element is the\n * mustache symbol that was used inside the tag, e.g. \"#\" or \"&\". If the tag\n * did not contain a symbol (i.e. {{myValue}}) this element is \"name\". For\n * all text that appears outside a symbol this element is \"text\".\n *\n * The second element of a token is its \"value\". For mustache tags this is\n * whatever else was inside the tag besides the opening symbol. For text tokens\n * this is the text itself.\n *\n * The third and fourth elements of the token are the start and end indices,\n * respectively, of the token in the original template.\n *\n * Tokens that are the root node of a subtree contain two more elements: 1) an\n * array of tokens in the subtree and 2) the index in the original template at\n * which the closing tag for that section begins.\n */\n function parseTemplate(template, tags) {\n if (!template) return [];\n\n var sections = []; // Stack to hold section tokens\n var tokens = []; // Buffer to hold the tokens\n var spaces = []; // Indices of whitespace tokens on the current line\n var hasTag = false; // Is there a {{tag}} on the current line?\n var nonSpace = false; // Is there a non-space char on the current line?\n\n // Strips all whitespace tokens array for the current line\n // if there was a {{#tag}} on it and otherwise only space.\n function stripSpace() {\n if (hasTag && !nonSpace) {\n while (spaces.length) delete tokens[spaces.pop()];\n } else {\n spaces = [];\n }\n\n hasTag = false;\n nonSpace = false;\n }\n\n var openingTagRe, closingTagRe, closingCurlyRe;\n function compileTags(tagsToCompile) {\n if (typeof tagsToCompile === \"string\")\n tagsToCompile = tagsToCompile.split(spaceRe, 2);\n\n if (!isArray(tagsToCompile) || tagsToCompile.length !== 2)\n throw new Error(\"Invalid tags: \" + tagsToCompile);\n\n openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + \"\\\\s*\");\n closingTagRe = new RegExp(\"\\\\s*\" + escapeRegExp(tagsToCompile[1]));\n closingCurlyRe = new RegExp(\n \"\\\\s*\" + escapeRegExp(\"}\" + tagsToCompile[1])\n );\n }\n\n compileTags(tags || mustache.tags);\n\n var scanner = new Scanner(template);\n\n var start, type, value, chr, token, openSection;\n while (!scanner.eos()) {\n start = scanner.pos;\n\n // Match any text between tags.\n value = scanner.scanUntil(openingTagRe);\n\n if (value) {\n for (var i = 0, valueLength = value.length; i < valueLength; ++i) {\n chr = value.charAt(i);\n\n if (isWhitespace(chr)) {\n spaces.push(tokens.length);\n } else {\n nonSpace = true;\n }\n\n tokens.push([\"text\", chr, start, start + 1]);\n start += 1;\n\n // Check for whitespace on the current line.\n if (chr === \"\\n\") stripSpace();\n }\n }\n\n // Match the opening tag.\n if (!scanner.scan(openingTagRe)) break;\n\n hasTag = true;\n\n // Get the tag type.\n type = scanner.scan(tagRe) || \"name\";\n scanner.scan(whiteRe);\n\n // Get the tag value.\n if (type === \"=\") {\n value = scanner.scanUntil(equalsRe);\n scanner.scan(equalsRe);\n scanner.scanUntil(closingTagRe);\n } else if (type === \"{\") {\n value = scanner.scanUntil(closingCurlyRe);\n scanner.scan(curlyRe);\n scanner.scanUntil(closingTagRe);\n type = \"&\";\n } else {\n value = scanner.scanUntil(closingTagRe);\n }\n\n // Match the closing tag.\n if (!scanner.scan(closingTagRe))\n throw new Error(\"Unclosed tag at \" + scanner.pos);\n\n token = [type, value, start, scanner.pos];\n tokens.push(token);\n\n if (type === \"#\" || type === \"^\") {\n sections.push(token);\n } else if (type === \"/\") {\n // Check section nesting.\n openSection = sections.pop();\n\n if (!openSection)\n throw new Error('Unopened section \"' + value + '\" at ' + start);\n\n if (openSection[1] !== value)\n throw new Error(\n 'Unclosed section \"' + openSection[1] + '\" at ' + start\n );\n } else if (type === \"name\" || type === \"{\" || type === \"&\") {\n nonSpace = true;\n } else if (type === \"=\") {\n // Set the tags for the next time around.\n compileTags(value);\n }\n }\n\n // Make sure there are no open sections when we're done.\n openSection = sections.pop();\n\n if (openSection)\n throw new Error(\n 'Unclosed section \"' + openSection[1] + '\" at ' + scanner.pos\n );\n\n return nestTokens(squashTokens(tokens));\n }\n\n /**\n * Combines the values of consecutive text tokens in the given `tokens` array\n * to a single token.\n */\n function squashTokens(tokens) {\n var squashedTokens = [];\n\n var token, lastToken;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n if (token) {\n if (token[0] === \"text\" && lastToken && lastToken[0] === \"text\") {\n lastToken[1] += token[1];\n lastToken[3] = token[3];\n } else {\n squashedTokens.push(token);\n lastToken = token;\n }\n }\n }\n\n return squashedTokens;\n }\n\n /**\n * Forms the given array of `tokens` into a nested tree structure where\n * tokens that represent a section have two additional items: 1) an array of\n * all tokens that appear in that section and 2) the index in the original\n * template that represents the end of that section.\n */\n function nestTokens(tokens) {\n var nestedTokens = [];\n var collector = nestedTokens;\n var sections = [];\n\n var token, section;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n switch (token[0]) {\n case \"#\":\n case \"^\":\n collector.push(token);\n sections.push(token);\n collector = token[4] = [];\n break;\n case \"/\":\n section = sections.pop();\n section[5] = token[2];\n collector =\n sections.length > 0\n ? sections[sections.length - 1][4]\n : nestedTokens;\n break;\n default:\n collector.push(token);\n }\n }\n\n return nestedTokens;\n }\n\n /**\n * A simple string scanner that is used by the template parser to find\n * tokens in template strings.\n */\n function Scanner(string) {\n this.string = string;\n this.tail = string;\n this.pos = 0;\n }\n\n /**\n * Returns `true` if the tail is empty (end of string).\n */\n Scanner.prototype.eos = function eos() {\n return this.tail === \"\";\n };\n\n /**\n * Tries to match the given regular expression at the current position.\n * Returns the matched text if it can match, the empty string otherwise.\n */\n Scanner.prototype.scan = function scan(re) {\n var match = this.tail.match(re);\n\n if (!match || match.index !== 0) return \"\";\n\n var string = match[0];\n\n this.tail = this.tail.substring(string.length);\n this.pos += string.length;\n\n return string;\n };\n\n /**\n * Skips all text until the given regular expression can be matched. Returns\n * the skipped string, which is the entire tail if no match can be made.\n */\n Scanner.prototype.scanUntil = function scanUntil(re) {\n var index = this.tail.search(re),\n match;\n\n switch (index) {\n case -1:\n match = this.tail;\n this.tail = \"\";\n break;\n case 0:\n match = \"\";\n break;\n default:\n match = this.tail.substring(0, index);\n this.tail = this.tail.substring(index);\n }\n\n this.pos += match.length;\n\n return match;\n };\n\n /**\n * Represents a rendering context by wrapping a view object and\n * maintaining a reference to the parent context.\n */\n function Context(view, parentContext) {\n this.view = view;\n this.cache = { \".\": this.view };\n this.parent = parentContext;\n }\n\n /**\n * Creates a new context using the given view with this context\n * as the parent.\n */\n Context.prototype.push = function push(view) {\n return new Context(view, this);\n };\n\n /**\n * Returns the value of the given name in this context, traversing\n * up the context hierarchy if the value is absent in this context's view.\n */\n Context.prototype.lookup = function lookup(name) {\n var cache = this.cache;\n\n var value;\n if (cache.hasOwnProperty(name)) {\n value = cache[name];\n } else {\n var context = this,\n names,\n index,\n lookupHit = false;\n\n while (context) {\n if (name.indexOf(\".\") > 0) {\n value = context.view;\n names = name.split(\".\");\n index = 0;\n\n /**\n * Using the dot notion path in `name`, we descend through the\n * nested objects.\n *\n * To be certain that the lookup has been successful, we have to\n * check if the last object in the path actually has the property\n * we are looking for. We store the result in `lookupHit`.\n *\n * This is specially necessary for when the value has been set to\n * `undefined` and we want to avoid looking up parent contexts.\n **/\n while (value != null && index < names.length) {\n if (index === names.length - 1)\n lookupHit = hasProperty(value, names[index]);\n\n value = value[names[index++]];\n }\n } else {\n value = context.view[name];\n lookupHit = hasProperty(context.view, name);\n }\n\n if (lookupHit) break;\n\n context = context.parent;\n }\n\n cache[name] = value;\n }\n\n if (isFunction(value)) value = value.call(this.view);\n\n return value;\n };\n\n /**\n * A Writer knows how to take a stream of tokens and render them to a\n * string, given a context. It also maintains a cache of templates to\n * avoid the need to parse the same template twice.\n */\n function Writer() {\n this.cache = {};\n }\n\n /**\n * Clears all cached templates in this writer.\n */\n Writer.prototype.clearCache = function clearCache() {\n this.cache = {};\n };\n\n /**\n * Parses and caches the given `template` and returns the array of tokens\n * that is generated from the parse.\n */\n Writer.prototype.parse = function parse(template, tags) {\n var cache = this.cache;\n var tokens = cache[template];\n\n if (tokens == null)\n tokens = cache[template] = parseTemplate(template, tags);\n\n return tokens;\n };\n\n /**\n * High-level method that is used to render the given `template` with\n * the given `view`.\n *\n * The optional `partials` argument may be an object that contains the\n * names and templates of partials that are used in the template. It may\n * also be a function that is used to load partial templates on the fly\n * that takes a single argument: the name of the partial.\n */\n Writer.prototype.render = function render(template, view, partials) {\n var tokens = this.parse(template);\n var context = view instanceof Context ? view : new Context(view);\n return this.renderTokens(tokens, context, partials, template);\n };\n\n /**\n * Low-level method that renders the given array of `tokens` using\n * the given `context` and `partials`.\n *\n * Note: The `originalTemplate` is only ever used to extract the portion\n * of the original template that was contained in a higher-order section.\n * If the template doesn't use higher-order sections, this argument may\n * be omitted.\n */\n Writer.prototype.renderTokens = function renderTokens(\n tokens,\n context,\n partials,\n originalTemplate\n ) {\n var buffer = \"\";\n\n var token, symbol, value;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n value = undefined;\n token = tokens[i];\n symbol = token[0];\n\n if (symbol === \"#\")\n value = this.renderSection(token, context, partials, originalTemplate);\n else if (symbol === \"^\")\n value = this.renderInverted(token, context, partials, originalTemplate);\n else if (symbol === \">\")\n value = this.renderPartial(token, context, partials, originalTemplate);\n else if (symbol === \"&\") value = this.unescapedValue(token, context);\n else if (symbol === \"name\") value = this.escapedValue(token, context);\n else if (symbol === \"text\") value = this.rawValue(token);\n\n if (value !== undefined) buffer += value;\n }\n\n return buffer;\n };\n\n Writer.prototype.renderSection = function renderSection(\n token,\n context,\n partials,\n originalTemplate\n ) {\n var self = this;\n var buffer = \"\";\n var value = context.lookup(token[1]);\n\n // This function is used to render an arbitrary template\n // in the current context by higher-order sections.\n function subRender(template) {\n return self.render(template, context, partials);\n }\n\n if (!value) return;\n\n if (isArray(value)) {\n for (var j = 0, valueLength = value.length; j < valueLength; ++j) {\n buffer += this.renderTokens(\n token[4],\n context.push(value[j]),\n partials,\n originalTemplate\n );\n }\n } else if (\n typeof value === \"object\" ||\n typeof value === \"string\" ||\n typeof value === \"number\"\n ) {\n buffer += this.renderTokens(\n token[4],\n context.push(value),\n partials,\n originalTemplate\n );\n } else if (isFunction(value)) {\n if (typeof originalTemplate !== \"string\")\n throw new Error(\n \"Cannot use higher-order sections without the original template\"\n );\n\n // Extract the portion of the original template that the section contains.\n value = value.call(\n context.view,\n originalTemplate.slice(token[3], token[5]),\n subRender\n );\n\n if (value != null) buffer += value;\n } else {\n buffer += this.renderTokens(\n token[4],\n context,\n partials,\n originalTemplate\n );\n }\n return buffer;\n };\n\n Writer.prototype.renderInverted = function renderInverted(\n token,\n context,\n partials,\n originalTemplate\n ) {\n var value = context.lookup(token[1]);\n\n // Use JavaScript's definition of falsy. Include empty arrays.\n // See https://github.com/janl/mustache.js/issues/186\n if (!value || (isArray(value) && value.length === 0))\n return this.renderTokens(token[4], context, partials, originalTemplate);\n };\n\n Writer.prototype.renderPartial = function renderPartial(\n token,\n context,\n partials\n ) {\n if (!partials) return;\n\n var value = isFunction(partials) ? partials(token[1]) : partials[token[1]];\n if (value != null)\n return this.renderTokens(this.parse(value), context, partials, value);\n };\n\n Writer.prototype.unescapedValue = function unescapedValue(token, context) {\n var value = context.lookup(token[1]);\n if (value != null) return value;\n };\n\n Writer.prototype.escapedValue = function escapedValue(token, context) {\n var value = context.lookup(token[1]);\n if (value != null) return mustache.escape(value);\n };\n\n Writer.prototype.rawValue = function rawValue(token) {\n return token[1];\n };\n\n mustache.name = \"mustache.js\";\n mustache.version = \"2.2.1\";\n mustache.tags = [\"{{\", \"}}\"];\n\n // All high-level mustache.* functions use this writer.\n var defaultWriter = new Writer();\n\n /**\n * Clears all cached templates in the default writer.\n */\n mustache.clearCache = function clearCache() {\n return defaultWriter.clearCache();\n };\n\n /**\n * Parses and caches the given template in the default writer and returns the\n * array of tokens it contains. Doing this ahead of time avoids the need to\n * parse templates on the fly as they are rendered.\n */\n mustache.parse = function parse(template, tags) {\n return defaultWriter.parse(template, tags);\n };\n\n /**\n * Renders the `template` with the given `view` and `partials` using the\n * default writer.\n */\n mustache.render = function render(template, view, partials) {\n if (typeof template !== \"string\") {\n throw new TypeError(\n 'Invalid template! Template should be a \"string\" ' +\n 'but \"' +\n typeStr(template) +\n '\" was given as the first ' +\n \"argument for mustache#render(template, view, partials)\"\n );\n }\n\n return defaultWriter.render(template, view, partials);\n };\n\n // This is here for backwards compatibility with 0.4.x.,\n /*eslint-disable */ // eslint wants camel cased function name\n mustache.to_html = function to_html(template, view, partials, send) {\n /*eslint-enable*/\n\n var result = mustache.render(template, view, partials);\n\n if (isFunction(send)) {\n send(result);\n } else {\n return result;\n }\n };\n\n // Export the escaping function so that the user may override it.\n // See https://github.com/janl/mustache.js/issues/244\n mustache.escape = escapeHtml;\n\n // Export these mainly for testing, but also for advanced usage.\n mustache.Scanner = Scanner;\n mustache.Context = Context;\n mustache.Writer = Writer;\n}\n\nlet Mustache = {};\n\nmustacheFactory(Mustache);\n\nexport default Mustache;\nexport { Mustache };\n", "/* nodename-css:\n *\n * Many times I wished the node name would be\n * accessible from the body down, so I could\n * create CSS rules based on the nodename.\n *\n *\n * Author: Tim Bauwens\n * Copyright 2022 xxllnc\n *\n */\n\n((doc, $) => {\n $(doc).on(\"bb:finalHandleData\", (e, data) => {\n if (data && data.groups && data.groups.length) {\n try {\n let currentGroup = data.groups[data.groups.length - 1];\n let nodename = currentGroup.name;\n doc.body.dataset.node = nodename;\n } catch (err) {\n window.console && window.console.warn(err);\n }\n }\n });\n})(document, jQuery);\n", "/* non-indenting-jumplist:\n *\n * Throw away indentation level information of the jumplist, so that a\n * flat jumplist will be created.\n *\n * This can be useful for horizontally layed-out jumplists.\n *\n * Copyright (C) 2010, 2011, 2015 by Berkeley Bridge\n *\n */\n\n(function ($) {\n $(document).on(\"bb:preHandleData\", function (event, data) {\n if (data.jumplist) {\n $.each(data.jumplist, function (group) {\n data.jumplist[group].level = 0;\n data.jumplist[group].screentitle =\n data.jumplist[group].screentitle.trim();\n });\n }\n });\n})(jQuery);\n", "export function clearMenu() {\n document\n .querySelectorAll(\".p-dynamic-menu-item\")\n .forEach((el, i) => el.remove());\n}\n", "import { clearMenu } from \"./clearmenu.js\";\nimport { state } from \"$json/lib/store\";\nimport Dialogue from \"$Dialogue\";\n\nconst show = new Dialogue();\nconst done = new Event(\"dmi-complete\");\n\nfunction htmlDecode(input) {\n var doc = new DOMParser().parseFromString(input, \"text/html\");\n return doc.documentElement.textContent;\n}\n\nexport function createMenu() {\n clearMenu();\n let items = state.has(\"p-dynamic-menu\") ? state.get(\"p-dynamic-menu\") : {};\n\n function showtime(e) {\n let info = document.createElement(\"div\");\n let html = items[e.target.getAttribute(\"data-textid\")];\n info.innerHTML = htmlDecode(html);\n show.render(info);\n }\n\n Object.keys(items).forEach(title => {\n let item = document.createElement(\"li\");\n item.className = \"p-dynamic-menu-item\";\n let button = document.createElement(\"button\");\n button.innerText = title;\n button.setAttribute(\"data-textid\", title);\n item.append(button);\n try {\n let menuItem = item.cloneNode(true);\n menuItem.querySelector(\"button\").addEventListener(\"click\", showtime);\n document.getElementById(\"p-dynamic-menu\").append(menuItem);\n // Support class based for duplicate menus.\n document.querySelectorAll(\".p-dynamic-menu\").forEach(menu => {\n let menuItem = item.cloneNode(true);\n menuItem.querySelector(\"button\").addEventListener(\"click\", showtime);\n menu.append(menuItem);\n });\n } catch (err) {\n window.console &&\n window.console.warn(`\n Seems like the layer doesn't support dynamic-menu...\n Please make sure that the top menu (UL) has [id|class]=\"p-dynamic-menu\"\n `);\n window.console && window.console.warn(err);\n }\n });\n document.dispatchEvent(done);\n}\n", "/*\n dynamic-menu-items.js\n\n Based on text-interfaces inside models, create\n menu items in the top menu with popups containing\n the content from the model.\n*/\n\nimport { state } from \"$json/lib/store\";\nimport { clearMenu } from \"./clearmenu.js\";\nimport { createMenu } from \"./createmenu.js\";\nimport { getmetadata } from \"$json/lib/getmetadata\";\n\n((doc, $) => {\n let render = false;\n var items = {};\n var session = false;\n\n var escape = document.createElement(\"textarea\");\n function escapeHTML(html) {\n escape.textContent = html;\n return escape.innerHTML;\n }\n\n $(doc).on(\"bb:finalHandleData\", (e, data) => {\n if (data && data.groups && data.groups.length) {\n if (session && session !== data.sessionid) {\n clearMenu();\n items = {};\n }\n session = data.sessionid;\n const controls = getmetadata(data).controls;\n controls.forEach((props, id) => {\n Object.keys(props).forEach(key => {\n if (key.startsWith(\"dmi-\")) {\n let elem = doc.getElementById(id[0]);\n items[props[key]] = escapeHTML(elem.outerHTML);\n elem.style.display = \"none\";\n render = true;\n }\n });\n });\n }\n if (render) {\n state.set(\"p-dynamic-menu\", items);\n render = false;\n createMenu();\n }\n if (data && data.models) {\n clearMenu();\n items = {};\n }\n if (data && data.status && data.status === \"logout successful\") {\n clearMenu();\n items = {};\n }\n });\n\n $(doc).on(\"bb:stateChange\", e => {\n if (state.has(\"p-dynamic-menu\")) {\n // Only recreate the menu if the state doesn't match what we already have.\n if (\n JSON.stringify(items) !== JSON.stringify(state.get(\"p-dynamic-menu\"))\n ) {\n items = state.get(\"p-dynamic-menu\");\n createMenu();\n }\n }\n });\n})(document, jQuery);\n", "import { bb } from \"$json\";\nimport { has } from \"$json/lib/functional\";\nimport { getmetadata } from \"$json/lib/getmetadata\";\n\n((doc, $) => {\n let id = \"\";\n let current = \"\";\n window.mopinionNodeName = \"\";\n var js = document.createElement(\"script\");\n js.setAttribute(\"type\", \"text/javascript\");\n js.setAttribute(\"src\", \"//deploy.mopinion.com/js/pastease.js\");\n js.async = true;\n document.getElementsByTagName(\"head\")[0].appendChild(js);\n\n function kill() {\n current = \"\";\n\n let mopinion = doc.getElementById(\"surveyContent\");\n mopinion && mopinion.parentNode.removeChild(mopinion);\n\n let mopinionMask = doc.getElementById(\"surveyMask\");\n mopinionMask && mopinionMask.parentNode.removeChild(mopinionMask);\n\n let mopinionModal = doc.querySelector(\".mopinion-survey-content\");\n mopinionModal && mopinionModal.parentNode.removeChild(mopinionModal);\n\n let headscript = doc.getElementById(\"mopinionFeedbackScript\");\n headscript && doc.head.removeChild(headscript);\n }\n\n $(doc).on(\"bb:preHandleData\", (e, data) => {\n if (data && has(\"modelname\", data)) {\n if (current !== data.modelname) {\n if (current !== \"\") kill();\n current = data.modelname;\n\n var arbitrary = bb.propFinder(bb.conf, \"arbitrary\");\n var config = arbitrary(\"mopinion\", {});\n if (config && has(data.modelname, config)) {\n id = config[data.modelname].id;\n let t = setInterval(() => {\n try {\n Pastease.load(id);\n clearInterval(t);\n } catch (e) {}\n }, 50);\n }\n }\n } else if (data && has(\"models\", data)) {\n kill();\n }\n });\n\n $(doc).on(\"bb:finalHandleData\", (e, data) => {\n if (data && data.groups && data.groups.length) {\n let selected = doc.querySelector(\"fieldset.group.selected\");\n window.mopinionNodeName = selected.dataset.node;\n const md = getmetadata(data).props;\n if (md.has(\"p-mopinion-trigger-show\")) {\n window.showMopinion = true;\n kill();\n if (has(\"config\")(Pastease)) {\n Pastease.config(id);\n window.setTimeout(e => (window.showMopinion = false), 1e4);\n }\n }\n }\n });\n})(document, jQuery);\n", "import { bb } from \"$json\";\n\nvar arbitrary = bb.propFinder(bb.conf, \"arbitrary\");\n/**\n * Get the part of pathname with which we can match our model,\n * case-insensitively\n *\n * @param {String} pathname\n *\n * @return {String} (when found)\n * @return {undefined} (when not found)\n */\nfunction getIdentifyingPartOfPath(pathname) {\n var chunks = pathname.split(\"/\"),\n path,\n i = 0;\n while (\n ((path = chunks.pop()), typeof path !== undefined && /(\\.|^$)/.test(path))\n );\n return (path && path.toLowerCase()) || arbitrary(\"proxymap.default\");\n}\n\n/**\n * Export the Usabilla function\n */\n\nexport function getSetting(key, fallback) {\n return arbitrary(\n [\"proxymap\", getIdentifyingPartOfPath(window.location.pathname), key]\n .filter(Boolean)\n .join(\".\"),\n fallback\n );\n}\n\nexport function getProxyString() {\n return getIdentifyingPartOfPath(window.location.pathname);\n}\n", "import { bb } from \"$json\";\nimport { getSetting, getProxyString } from \"$proxymap\";\nimport { notify } from \"$json/lib/notify\";\n\n/* path-to-modelname:\n *\n * Open modelname based on path.\n *\n * This allows bookmarking and nice links\n *\n * Author: Niels Giesen\n * Copyright 2016, 2018 Berkeley Bridge\n *\n */\n(function ($, window, doc, location) {\n var props = bb.propFinder(bb.conf, \"arbitrary.path-to-modelname\");\n\n if (!location.origin) {\n location.origin =\n location.protocol +\n \"//\" +\n location.hostname +\n (location.port ? \":\" + location.port : \"\");\n }\n\n function open() {\n /*\n Calling 'getSetting' with empty key results in\n full proxymap object. With this we can loop\n through all additional props as query params.\n Not only modelname.\n */\n // var modelname = getSetting(\"modelname\");\n var params = getSetting(\"\", {});\n var postdata = {\n url: \"open\",\n data: {\n fmt: \"json\"\n }\n };\n Object.keys(params).forEach(param => {\n postdata.data[param] = params[param];\n });\n\n if (postdata.data.modelname) {\n bb.ajax.post(postdata);\n document.body.setAttribute(\"data-p-path-to-modelname\", getProxyString());\n } else {\n notify({ html: true, keepalive: true }, props(\"notfoundthen.message\"));\n }\n }\n\n function getState() {\n return (\n window.history &&\n window.history.pushState &&\n (window.history.state ||\n (window.sessionStorage &&\n \"JSON\" in window &&\n JSON.parse(window.sessionStorage.getItem(\"state\"))))\n );\n }\n\n function directory(loc) {\n return loc.origin + loc.pathname.replace(/[^/]+$/, \"\");\n }\n\n function hasOurState() {\n var state = getState();\n if (!state) return false;\n else return directory(location) === state.directory;\n }\n\n if (\n (location.pathname.match(/\\/$/) || location.search.length === 0) &&\n !hasOurState()\n ) {\n $(open);\n } else {\n $(doc).one(\"bb:postHandleData\", function (event, data) {\n if (\n (data && data.error && data.error.summary) ||\n (data && data.groups && !data.groups.length)\n ) {\n open();\n }\n });\n }\n})(jQuery, window, document, window.location);\n", "/* rijksoverheidshuisstijlfonts:\n *\n * Supply Rijksoverheidshuisstijl fonts + definitions\n *\n * Author: Niels Giesen\n * Copyright 2017 Berkeley Bridge\n *\n */\n(function ($, win, doc) {\n $(function () {});\n})(jQuery, window, document);\n", "import { bb } from \"$json\";\n/* questionlabelgroup-ng:\n *\n * Next-generation questionlabelgroup plugin.\n *\n * It will eventually probably replace the default implementation.\n *\n * Author: Niels Giesen\n * Copyright 2013 Berkeley Bridge\n *\n */\n(function ($) {\n $(document).off(\"bb:questionlabelgroup\");\n\n bb.questionlabelgroup = function () {\n $(\".group:not(:has(.bb-questionlabelgroup))>.bb-label\").each(function () {\n var $this = $(this),\n input = $this.prev(\"[type=checkbox]\"),\n itype,\n control = $(this).data(\"control\"),\n fieldset =\n bb.conf.a11y.optionfieldsets && control.controltype === \"legend\",\n $inner,\n $outer,\n classNames;\n\n if (!input.length)\n input = $this.nextUntil(\n \".bb-label, .bb-text, a, [type=checkbox], img, .clearfix,\" +\n \"*[data-datatype]+ul\" +\n (bb.conf.a11y.captions ? \", table\" : \"\")\n );\n\n itype = input.data(\"type\");\n $inner = $this.add(input);\n\n $outer = $(document.createElement(fieldset ? \"fieldset\" : \"div\"));\n\n if ($inner.length > 1) {\n classNames = [\n \"bb-questionlabelgroup\",\n \"bb-itype-\" + itype,\n \"bb-fields-\" + $inner.length\n ];\n\n // Direct children\n $.each($inner.filter(\"[data-type]\"), function () {\n var $this = $(this);\n if ($this.attr(\"class\")) {\n var classname = $this.attr(\"class\").match(/\\bbbm-[a-z0-9-]+\\b/);\n if (classname) {\n classname = classname[0].replace(/\\bbbm-/, \"bb-g-\");\n classNames.push(classname);\n }\n }\n });\n\n // Further offspring\n $.each($inner.find(\"[data-type]\"), function () {\n var $this = $(this);\n if ($this.attr(\"class\")) {\n var classname = $this.attr(\"class\").match(/\\bbbm-[a-z0-9-]+\\b/);\n if (classname) {\n classname = classname[0].replace(/\\bbbm-/, \"bb-g-\");\n classNames.push(classname);\n }\n }\n });\n\n // Propagate tags of immediate children to $outer\n $.each($inner, function (_, elt) {\n $.each($(elt).data(\"tags\") || [], function (_, tag) {\n classNames.push(\"bb-child-tagged-\" + tag);\n });\n });\n\n $outer.addClass(classNames.join(\" \"));\n $inner.wrapAll($outer);\n }\n });\n };\n})(jQuery);\n", "/*\n record-link.js\n\n A local helper to record the\n continue later link in a given\n input field, so the model has\n access to it as well.\n\n Author: Tim Bauwens\n Copyright: xxllnc 2023\n*/\n\nimport { bb } from \"$json\";\nimport { getmetadata } from \"$json/lib/getmetadata\";\n\n((_win, doc, $) => {\n $(doc).on(\"bb:finalHandleData\", (_e, data) => {\n if (data && data.groups && data.groups.length) {\n let props = getmetadata(data).props;\n if (props.has(\"session-link-for-pdf\")) {\n // Record the continue link in this field.\n const location = bb.propFinder(bb.conf)(\n \"arbitrary.savecase-email-link-popup.location\",\n window.location.href\n );\n const sessionid = data.sessionid;\n let continueLink = `${location}?modelid=${data.dbname}&sessionid=${sessionid}`;\n let input = doc.querySelector(\n 'input[data-metadata-keys=\"session-link-for-pdf\"]'\n );\n input.value = continueLink;\n input.closest(\".bb-questionlabelgroup\").style.display = \"none\";\n }\n }\n });\n})(window, document, jQuery);\n", "/* savecase-email-link-popup\n *\n * Handle clicks on a button in the layer\n * to \"send email link to continue case later\"\n * Use a alternate model for actual sending of email.\n *\n * NB: The model must be anon. access.\n *\n * Dependencies:\n * Dialogue.js\n * A model on the same server with the name:\n * \"{conf.template.savecase-email-link-popup.modelname} || emailsavecase\"\n * A layer on the same server with the name:\n * \"{conf.template.savecase-email-link-popup.layer}\" || emailsavecase.html\n *\n * Author: Tim Bauwens\n * Copyright 2022 Berkeley Bridge\n *\n */\n\nimport { _, bb } from \"$json\";\nimport Dialogue from \"$Dialogue\";\n\n((doc, $) => {\n let template;\n let sessionid;\n const DICTIONARY = {\n \"One moment please...\": {\n \"en\": \"One moment please...\",\n \"nl\": \"Een ogenblik alstublieft...\",\n \"en-GB\": \"One moment please...\"\n },\n \"Send continue later link\": {\n \"en\": \"Send continue later link\",\n \"nl\": \"Stuur link om later verder te gaan\",\n \"en-GB\": \"Send continue later link\"\n },\n \"A dialogue popup to retrieve your link to continue later, or email it to yourself\":\n {\n \"en\": \"A dialogue popup to retrieve your link to continue later, or email it to yourself\",\n \"nl\": \"Een dialoogpop-up om uw link op te halen om later verder te gaan, of deze naar uzelf te e-mailen\",\n \"en-GB\":\n \"A dialogue popup to retrieve your link to continue later, or email it to yourself\"\n }\n };\n const dialogue = new Dialogue({\n \"class\": \"p-savecase-email-popup-link-dialogue\",\n \"aria-label\": _(\n \"A dialogue popup to retrieve your link to continue later, or email it to yourself\"\n )\n });\n const model = bb.propFinder(bb.conf)(\n \"arbitrary.savecase-email-link-popup.modelname\",\n \"emailsavecase\"\n );\n const layer = bb.propFinder(bb.conf)(\n \"arbitrary.savecase-email-link-popup.layer\",\n \"emailsavecase.html\"\n );\n const location = bb.propFinder(bb.conf)(\n \"arbitrary.savecase-email-link-popup.location\",\n `${window.location.protocol}//${window.location.host}${window.location.pathname}`\n );\n const handler = e => {\n if (\n e.target.classList.contains(\"p-savecase-email-link-popup-button\") ||\n e.target.id === \"p-savecase-email-link-popup-button\"\n ) {\n e.stopPropagation();\n dialogue.render(template);\n }\n };\n\n _.addTranslations(DICTIONARY);\n\n document.addEventListener(\"click\", handler);\n\n $(doc).on(\"bb:finalHandleData\", (e, data) => {\n if (data && data.groups && data.groups.length) {\n if (data.sessionid && data.sessionid !== sessionid) {\n sessionid = data.sessionid;\n let continuelink = encodeURIComponent(\n `${location}?modelid=${data.dbname}&sessionid=${sessionid}`\n );\n const callingmodel = bb.getVar(\"modelname\");\n template = new DOMParser()\n .parseFromString(\n `\n \n `,\n \"text/html\"\n )\n .body.querySelector(\".p-savecase-email-link-popup\");\n }\n }\n });\n})(document, jQuery);\n"], "mappings": "2lCAAA,GAAA,GAAA,GAAA,GAAA,CAAA,MAAA,IAAA,KAAA,GAAA,QAAA,GAAA,ICGA,GAAqB,IAArB,KAA8B,CAC5B,YAAoB,EAAU,CAAV,KAAA,MAAA,QAEN,IAAM,EAAoB,CACtC,MAAO,IAAI,IAAS,GAGf,IAAO,EAAwC,CACpD,MAAI,MAAK,UAAkB,GAAM,GAAG,MAC7B,GAAM,GAAG,EAAY,KAAK,QAG5B,MAAS,EAA+C,CAC7D,GAAM,GAAU,KAAK,IAAI,GAAe,OACxC,MAAI,KAAY,KAAa,GAAM,GAAG,MAC/B,EAGF,UAAa,EAAwB,CAC1C,MAAO,MAAK,UAAY,EAAe,KAAK,MAGtC,MAAU,CAChB,MAAO,MAAK,MAGN,SAAmB,CACzB,MAAO,MAAK,QAAU,MAAQ,KAAK,QAAU,WC9BjD,oBAAA,UAAA,EAAA,EAAA,CACA,AAAA,MAAA,KAAA,UAAA,MAAA,KAAA,SACA,GAAA,QAAA,IACA,AAAA,MAAA,SAAA,YAAA,OAAA,IACA,OAAA,GAAA,GACA,AAAA,MAAA,KAAA,SACA,GAAA,QAAA,IAEA,EAAA,QAAA,MACC,OAAA,UAAA,CACD,MAAA,UAAA,EAAA,CCTA,GAAA,GAAA,GAGA,WAAA,EAAA,CAGA,GAAA,EAAA,GACA,MAAA,GAAA,GAAA,QAGA,GAAA,GAAA,EAAA,GAAA,CACA,EAAA,EACA,EAAA,GACA,QAAA,IAIA,SAAA,GAAA,KAAA,EAAA,QAAA,EAAA,EAAA,QAAA,GAGA,EAAA,EAAA,GAGA,EAAA,QAKA,SAAA,EAAA,EAGA,EAAA,EAAA,EAGA,EAAA,EAAA,SAAA,EAAA,EAAA,EAAA,CACA,AAAA,EAAA,EAAA,EAAA,IACA,OAAA,eAAA,EAAA,EAAA,CAA0C,WAAA,GAAA,IAAA,KAK1C,EAAA,EAAA,SAAA,EAAA,CACA,AAAA,MAAA,SAAA,aAAA,OAAA,aACA,OAAA,eAAA,EAAA,OAAA,YAAA,CAAwD,MAAA,WAExD,OAAA,eAAA,EAAA,aAAA,CAAiD,MAAA,MAQjD,EAAA,EAAA,SAAA,EAAA,EAAA,CAGA,GAFA,EAAA,GAAA,GAAA,EAAA,IACA,EAAA,GACA,EAAA,GAAA,MAAA,IAAA,UAAA,GAAA,EAAA,WAAA,MAAA,GACA,GAAA,GAAA,OAAA,OAAA,MAGA,GAFA,EAAA,EAAA,GACA,OAAA,eAAA,EAAA,UAAA,CAAyC,WAAA,GAAA,MAAA,IACzC,EAAA,GAAA,MAAA,IAAA,SAAA,OAAA,KAAA,GAAA,EAAA,EAAA,EAAA,EAAA,SAAA,EAAA,CAAgH,MAAA,GAAA,IAAqB,KAAA,KAAA,IACrI,MAAA,IAIA,EAAA,EAAA,SAAA,EAAA,CACA,GAAA,GAAA,GAAA,EAAA,WACA,UAAA,CAA2B,MAAA,GAAA,SAC3B,UAAA,CAAiC,MAAA,IACjC,SAAA,EAAA,EAAA,IAAA,GACA,GAIA,EAAA,EAAA,SAAA,EAAA,EAAA,CAAsD,MAAA,QAAA,UAAA,eAAA,KAAA,EAAA,IAGtD,EAAA,EAAA,GAIA,EAAA,EAAA,EAAA,mDClFA,EAAA,EAAA,GAAA,GAAA,GAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,GAAA,EAAA,EAAA,oBAGM,EAAU,EAAA,QAAM,KAEtB,AAAI,MAAO,SAAW,aACpB,QAAO,QAAU,GAGJ,EAAA,QAAA,sDCTf,EAAA,EAAA,GAAA,GAAM,GAAU,CAEd,UAAW,UAAM,CACf,MAAO,OAAO,iBAAmB,aAGnC,KAAM,UAAM,CACV,MAAO,WAAU,UAAU,QAAQ,UAAY,IAAM,CAAC,CAAC,SAAS,cAGlE,OAAQ,UAAM,CACZ,MAAO,CAAC,EAAQ,QAAU,CAAC,CAAC,OAAO,YAGrC,SAAU,UAAsB,CAAA,GAArB,GAAqB,UAAA,OAAA,GAAA,UAAA,KAAA,OAAA,UAAA,GAAX,OACnB,MAAO,CAAC,CAAC,EAAQ,QAGnB,SAAU,UAAM,CACd,MAAO,QAAO,UAAU,SAAS,KAAK,OAAO,aAAa,QAAQ,eAAiB,GAC/E,UAAU,UAAU,cAAc,QAAQ,YAAc,IAG9D,YAAa,UAAM,CACjB,MAAO,WAAU,UAAU,cAAc,QAAQ,WAAa,KAInD,EAAA,QAAA,wlBCzBR,WAAqB,EAAU,EAAQ,CAC5C,GAAM,GAAY,eAAiB,EAAO,KAAO,2BAA6B,EAAO,UAAY,2BACjG,MAAO,eAAiB,EAAY,KAAO,EAAW,SAGjD,WAA0B,EAAK,CACpC,MAAO,GAAI,OAAO,GAAG,cAAgB,EAAI,MAAM,GAG1C,WAAwB,EAAS,EAAQ,CAS9C,OARM,GAAM,SAAS,aAAe,OAGhC,EAAe,GAGb,EAAS,EAAI,iBAAiB,EAAS,IAEpC,EAAM,EAAG,EAAM,EAAO,OAAQ,IAErC,AAAI,GAAO,aAAa,QAAQ,OAAS,IAAM,EAAO,YAAY,QAAQ,EAAO,MAAU,IAAM,EAAkB,EAAO,aAAc,EAAO,MACzI,EAAO,iBAAiB,EAAO,KAAO,IAAgB,EAAO,GAAO,IAAM,EAAO,iBAAiB,EAAO,IAAQ,KAKzH,UAAgB,cAAgB,EAAO,SAAW,6BAA+B,EAAO,UAAY,eAE7F,EAGT,WAA4B,EAAQ,EAAO,CACzC,OAAS,GAAI,EAAG,EAAI,EAAO,OAAQ,IACjC,GAAI,EAAO,KAAU,UAAY,EAAM,QAAQ,EAAO,MAAQ,GAAI,MAAO,GAE3E,MAAO,GAGF,WAAoB,EAAc,EAAQ,CAE/C,GAAM,GAAkB,SAAS,cAAc,OAG/C,GAAI,EAAU,EAAO,QACnB,EAAgB,UAAY,EAAO,WAC9B,CAEL,GAAM,GAAgB,SAAS,cAAc,MAGvC,EAAa,SAAS,eAAe,EAAO,QAGlD,EAAc,YAAY,GAC1B,EAAc,aAAa,QAAS,EAAO,aAC3C,EAAgB,YAAY,GAG9B,EAAa,aAAa,EAAiB,EAAa,WAAW,IAG9D,WAAkB,EAAQ,CAE/B,AAAI,EAAO,WAAW,EAAA,QAAM,QAGxB,EAAO,cAAc,EAAO,eAG5B,GAAO,WAAa,EAAO,iBAAgB,OAAO,IAAI,gBAAgB,EAAO,WAGjF,GAAI,GAAQ,YAEZ,AAAI,GAAA,QAAQ,YAAc,EAAA,QAAQ,cAEhC,GAAQ,SAGV,GAAM,GAAU,YAAM,CAEpB,OAAO,oBAAoB,EAAO,GAElC,EAAO,qBAGP,GAAM,GAAS,SAAS,eAAe,EAAO,SAE9C,AAAI,GACF,EAAO,UAIX,OAAO,iBAAiB,EAAO,GAG1B,WAAoB,EAAK,CAC9B,GAAM,GAAY,GAAI,QAAO,+CAC7B,MAAO,GAAU,KAAK,8VClGT,EAAA,QAAA,CACb,MAAO,SAAC,EAAQ,EAAe,CAE7B,GAAM,GAAe,EAAc,EAAO,WAAa,EAAO,UAAY,SAAS,eAAe,EAAO,WAGzG,GAAI,CAAC,EAAc,CACjB,OAAO,QAAQ,MAAM,4BAA8B,EAAO,WAC1D,OAIF,EAAO,iBAAmB,EAAa,EAAc,GAGjD,EAAO,QACT,OAAA,EAAA,WAAU,EAAO,iBAAkB,GAIrC,EAAA,QAAM,KAAK,EAAQ,KAIvB,WAAuB,EAAS,EAAQ,CAMtC,OAJM,GAAQ,EAAQ,YAGhB,EAAkB,MAAM,UAAU,MAAM,KAAK,EAAQ,YAClD,EAAI,EAAG,EAAI,EAAgB,OAAQ,IAE1C,GAAI,EAAO,eAAe,QAAQ,EAAgB,GAAG,MAAQ,GAK7D,IAAM,GAAc,EAAa,EAAgB,GAAI,GAGrD,EAAM,YAAY,GASpB,OALI,EAAO,YAAc,EAAQ,WAAa,GAC5C,EAAM,aAAa,QAAS,OAAA,EAAA,eAAc,EAAS,IAI7C,EAAQ,aACT,SAEH,EAAM,MAAQ,EAAQ,MACtB,UACG,SAEH,EAAM,WAAW,MAAM,UAAU,EAAS,EAAG,GAC7C,MAGJ,MAAO,GAGT,WAAwB,EAAW,CAEjC,MAAO,GAAO,KAAc,UAAY,GAAc,aAAqB,cAAe,EAAU,WAAa,sDCpEnH,EAAA,EAAA,GAAA,GAAA,GAAA,EAAA,yBAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,uBAIe,EAAA,QAAA,CACb,MAAO,SAAC,EAAQ,EAAe,CAE7B,AAAI,EAAO,UAAU,cAAgB,OAEnC,GAAO,UAAY,CAAC,EAAO,YAI7B,EAAO,iBAAmB,SAAS,cAAc,OAGjD,EAAO,UAAU,QAAQ,SAAA,EAAO,CAE9B,GAAM,GAAM,SAAS,cAAc,OAQnC,GAPA,EAAI,aAAa,QAAS,EAAO,YAGjC,EAAI,IAAM,EAIN,EAAA,QAAQ,YAAa,CACvB,GAAM,GAAoB,EAAI,IAC9B,EAAI,IAAM,EAIZ,GAAM,GAAe,SAAS,cAAc,OAG5C,EAAa,YAAY,GAGzB,EAAO,iBAAiB,YAAY,KAIlC,EAAO,QAAQ,OAAA,EAAA,WAAU,EAAO,iBAAkB,GAGtD,EAAA,QAAM,KAAK,EAAQ,sDC7CvB,EAAA,EAAA,GAAA,GAAA,GAAA,EAAA,uBAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,wBAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,4PAUA,GAAM,GAAa,CAAC,MAAO,OAAQ,QAAS,OAAQ,YAErC,EAAA,QAAA,CACb,KADa,UACL,CACN,GAAM,GAAS,CACb,UAAW,KACX,kBAAmB,KACnB,KAAM,MACN,OAAQ,KACR,YAAa,oBACb,SAAU,IACV,WAAY,KACZ,gBAAiB,8DACjB,UAAW,oDACX,UAAW,GACX,QAAS,SAAC,EAAU,CAAE,KAAM,IAC5B,eAAgB,KAChB,aAAc,KACd,mBAAoB,UAAM,GAC1B,sBAAuB,UAAM,GAC7B,aAAc,yBACd,QAAS,UACT,iBAAkB,KAClB,cAAe,WACf,YAAa,CAAC,QAAS,UAAW,QAAS,YAAa,SAAU,aAAc,cAChF,aAAc,CAAC,SAAU,MAAO,QAAS,mBACzC,eAAgB,GAChB,kBAAmB,GACnB,IAAK,KACL,MAAO,KACP,WAAY,GACZ,OAAQ,GAGR,UAAW,KACX,KAAM,gBACN,UAAW,OACX,mBAAoB,GACpB,WAAY,GACZ,WAAY,oBAIR,EAAO,UAAU,GACvB,GAAI,IAAS,OACX,KAAM,IAAI,OAAM,yCAIlB,OAAA,EAAe,QACR,SACH,EAAO,UAAY,UAAU,GAC7B,EAAO,kBAAoB,EAAO,UAClC,EAAO,KAAO,UAAU,IAAM,EAAO,KACrC,UACG,SACH,EAAO,UAAY,EAAK,UACxB,EAAO,kBAAoB,MAAO,GAAK,mBAAsB,YAAc,EAAK,kBAAoB,EAAO,UAC3G,EAAO,kBAAoB,EAAO,OAAP,+BAAA,OAA+C,EAAO,mBAAsB,EAAO,kBAC9G,OAAS,KAAK,GACZ,AAAI,IAAM,aAAe,IAAM,qBAE/B,GAAO,GAAK,MAAO,GAAK,IAAO,YAAc,EAAK,GAAK,EAAO,IAEhE,cAEA,KAAM,IAAI,OAAM,gEAAA,EAAyE,IAI7F,GAAI,CAAC,EAAO,UAAW,KAAM,IAAI,OAAM,kCAGvC,GAAI,CAAC,EAAO,MAAQ,MAAO,GAAO,MAAS,UAAY,EAAW,QAAQ,EAAO,KAAK,iBAAmB,GACvG,KAAM,IAAI,OAAM,uEAIlB,AAAI,EAAO,WAAW,EAAA,QAAM,KAAK,GAG7B,EAAO,gBAAgB,EAAO,iBAGlC,GAAM,GAAY,SAAS,eAAe,EAAO,SAEjD,AAAI,GAAW,EAAU,WAAW,YAAY,GAGhD,GAAM,GAAa,SAAS,cAAc,UAkC1C,OAhCA,AAAI,EAAA,QAAQ,YAIV,EAAW,aAAa,QAAS,mHAGjC,EAAW,aAAa,QAAS,0EAInC,EAAW,aAAa,KAAM,EAAO,SAGjC,EAAO,OAAS,OAClB,GAAW,OAAS,sBAAwB,EAAO,cAAgB,WAG/D,EAAO,KAEJ,OAAM,QAAQ,EAAO,MAAM,GAAO,IAAM,CAAC,EAAO,MAGrD,EAAO,IAAI,QAAQ,SAAA,EAAQ,CACzB,EAAW,QAAU,gCAAkC,EAAO,QAIlE,EAAW,QAAU,+BAIf,EAAO,UACR,MAEH,GAAI,EAAA,QAAQ,OACV,GAAI,CACF,QAAQ,KAAK,+DACb,GAAM,GAAM,OAAO,KAAK,EAAO,kBAAmB,UAClD,EAAI,QACJ,EAAO,8BACA,EAAP,CACA,EAAO,QAAQ,UANjB,CASE,AAAI,EAAO,WAAW,EAAA,QAAM,QACxB,EAAO,cAAc,EAAO,mBAGlC,GAAA,QAAI,MAAM,EAAQ,GAEpB,UACG,QACH,EAAA,QAAM,MAAM,EAAQ,GACpB,UACG,OACH,EAAA,QAAK,MAAM,EAAQ,GACnB,UACG,WACH,EAAA,QAAQ,MAAM,EAAQ,GACtB,UACG,OACH,EAAA,QAAK,MAAM,EAAQ,GACnB,mWCjKO,EAAA,QAAA,CACb,MAAO,SAAC,EAAQ,EAAe,CAE7B,GAAI,EAAO,EAAO,aAAc,SAC9B,KAAM,IAAI,OAAM,0CAIlB,GAAI,MAAO,GAAO,mBAAsB,UACtC,KAAM,IAAI,OAAM,yDAIlB,GAAI,CAAC,EAAO,YAAc,CAAC,MAAM,QAAQ,EAAO,YAC9C,KAAM,IAAI,OAAM,gDAIlB,EAAO,WAAa,EAAO,WAAW,IAAI,SAAA,EAAY,CACpD,MAAO,CACL,MAAO,EAAO,KAAa,SAAW,EAAS,MAAQ,EACvD,YAAa,EAAO,KAAa,SAAW,EAAS,YAAc,EACnE,WAAY,EAAO,KAAa,UAAY,EAAS,WAAa,EAAS,WAAa,IAAM,IAAM,EAAO,WAAW,OAAS,QAKnI,EAAO,iBAAmB,SAAS,cAAc,OAG7C,EAAO,QACT,OAAA,EAAA,WAAU,EAAO,iBAAkB,GAIrC,EAAO,iBAAiB,WAAa,EAAW,GAGhD,EAAA,QAAM,KAAK,EAAQ,KAIvB,WAAqB,EAAQ,CAE3B,GAAM,GAAO,EAAO,UACd,EAAa,EAAO,WAGtB,EAAW,0DAGf,AAAI,EAAO,mBACT,IAAY,WAId,GAAY,OAGZ,OAAS,GAAI,EAAG,EAAI,EAAW,OAAQ,IACrC,GAAY,oBAAsB,EAAW,GAAG,WAAa,IAAM,EAAO,gBAAkB,KAAO,OAAA,EAAA,iBAAgB,EAAW,GAAG,aAAe,QAIlJ,GAAY,QAGR,EAAO,mBACT,IAAY,YAId,GAAY,UAGZ,OAAS,GAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CAEpC,GAAY,OAGZ,OAAS,GAAI,EAAG,EAAI,EAAW,OAAQ,IAAK,CAC1C,GAAI,GAAa,EAAK,GAGhB,EAAW,EAAW,GAAG,MAAM,MAAM,KAC3C,GAAI,EAAS,OAAS,EACpB,OAAS,GAAI,EAAG,EAAI,EAAS,OAAQ,IACnC,EAAa,EAAW,EAAS,QAGnC,GAAa,EAAW,EAAW,GAAG,OAIxC,GAAY,oBAAsB,EAAW,GAAG,WAAa,EAAO,UAAY,KAAO,EAAa,QAItG,GAAY,QAId,UAAY,mBAEL,qDC3GT,EAAA,EAAA,GAAA,GAAM,GAAQ,CACZ,KADY,SACN,EAAQ,CAEZ,GAAM,GAAa,wPAeb,EAAa,SAAS,cAAc,OAC1C,EAAW,aAAa,QAAS,GACjC,EAAW,aAAa,KAAM,iBAG9B,GAAM,GAAa,SAAS,cAAc,OAC1C,EAAW,aAAa,QAAS,oEAGjC,GAAM,GAAc,SAAS,cAAc,OAC3C,EAAY,aAAa,QAAS,cAClC,EAAY,aAAa,KAAM,cAC/B,EAAW,YAAY,GAGvB,GAAM,GAAU,SAAS,cAAc,QACvC,EAAQ,aAAa,QAAS,gBAC9B,EAAW,YAAY,GAGvB,GAAM,GAAc,SAAS,eAAe,EAAO,cACnD,EAAW,YAAY,GAGvB,EAAW,YAAY,GAGvB,SAAS,qBAAqB,QAAQ,GAAG,YAAY,GAGrD,SAAS,eAAe,cAAc,iBAAiB,QAAS,UAAY,CAC1E,EAAM,WAGV,MApDY,UAoDH,CACP,GAAM,GAAa,SAAS,eAAe,iBAE3C,AAAI,GACF,EAAW,WAAW,YAAY,KAKzB,EAAA,QAAA,kDC7Df,EAAA,EAAA,GAAA,GAAA,GAAA,EAAA,qBAAA,EAAA,EAAA,yBAGe,EAAA,QAAA,CACb,MAAO,SAAC,EAAQ,EAAe,CAE7B,GAAI,EAAO,OAAQ,CACjB,GAAM,GAAa,WAAW,KAAK,KAAK,EAAO,WAAY,SAAA,EAAC,CAAA,MAAI,GAAE,WAAW,KAC7E,EAAmB,EAAQ,EAAY,GACvC,OAIF,EAAO,UAAY,qBAAqB,KAAK,EAAO,WAChD,EAAO,UACP,OAAO,SAAS,OAAU,GAAO,UAAU,OAAO,KAAO,IAAM,IAAM,EAAO,UAAY,EAAO,WAGnG,GAAM,GAAM,GAAI,QAAO,eACvB,EAAI,aAAe,cAEnB,EAAI,iBAAiB,QAAS,UAAM,CAClC,OAAA,EAAA,SAAQ,GACR,EAAO,QAAQ,EAAI,WAAY,KAKjC,EAAI,iBAAiB,OAAQ,UAAM,CAEjC,GAAI,CAAC,IAAK,KAAK,QAAQ,EAAI,UAAY,GAAI,CACzC,OAAA,EAAA,SAAQ,GACR,EAAO,QAAQ,EAAI,WAAY,GAG/B,OAIF,EAAmB,EAAQ,EAAY,EAAI,YAG7C,EAAI,KAAK,MAAO,EAAO,UAAW,IAClC,EAAI,SAIR,WAA6B,EAAQ,EAAY,EAAM,CAErD,GAAI,GAAW,GAAI,QAAO,KAAK,CAAC,GAAO,CAAE,KAAM,oBAC/C,EAAW,OAAO,IAAI,gBAAgB,GAGtC,EAAW,aAAa,MAAO,GAE/B,EAAA,QAAM,KAAK,EAAQ,sDCvDrB,EAAA,EAAA,GAAA,GAAA,GAAA,EAAA,uBAAA,EAAA,EAAA,yBAGM,EAAQ,CACZ,KAAM,SAAC,EAAQ,EAAe,CAE5B,SAAS,qBAAqB,QAAQ,GAAG,YAAY,GAGrD,GAAM,GAAgB,SAAS,eAAe,EAAO,SAGrD,EAAc,OAAS,UAAM,CAC3B,GAAI,EAAO,OAAS,MAAO,CAEzB,AAAI,EAAA,QAAQ,YACV,WAAW,UAAA,CAAA,MAAM,GAAa,EAAe,IAAS,KAEtD,EAAa,EAAe,GAE9B,OAIF,GAAI,GAAiB,EAAc,eAAiB,EAAc,gBAOlE,GANI,EAAc,UAAU,GAAgB,EAAc,UAG1D,EAAc,KAAK,YAAY,EAAO,kBAGlC,EAAO,OAAS,OAAS,EAAO,MAAO,CAEzC,GAAM,GAAQ,SAAS,cAAc,SACrC,EAAM,UAAY,EAAO,MAGzB,EAAc,KAAK,YAAY,GAIjC,GAAM,GAAS,EAAc,qBAAqB,OAElD,AAAI,EAAO,OAAS,EAClB,EAAiB,MAAM,KAAK,IAAS,KAAK,UAAA,CAAA,MAAM,GAAa,EAAe,KAE5E,EAAa,EAAe,MAMpC,WAAuB,EAAe,EAAQ,CAC5C,GAAI,CAIF,GAHA,EAAc,QAGV,EAAA,QAAQ,UAAY,EAAA,QAAQ,OAC9B,GAAI,CACF,EAAc,cAAc,SAAS,YAAY,QAAS,GAAO,WACjE,CACA,EAAc,cAAc,YAI9B,GAAc,cAAc,cAEvB,EAAP,CACA,EAAO,QAAQ,UAfjB,CAiBE,AAAI,EAAA,QAAQ,aAEV,GAAc,MAAM,WAAa,SACjC,EAAc,MAAM,KAAO,QAG7B,OAAA,EAAA,SAAQ,IAIZ,WAA2B,EAAQ,CACjC,GAAM,GAAW,EAAO,IAAI,SAAA,EAAS,CACnC,GAAI,EAAM,KAAO,EAAM,MAAQ,OAAO,SAAS,KAC7C,MAAO,GAAgB,KAI3B,MAAO,SAAQ,IAAI,GAGrB,WAA0B,EAAO,CAC/B,MAAO,IAAI,SAAQ,SAAA,EAAW,CAC5B,GAAM,GAAY,YAAM,CACtB,CAAC,GAAS,MAAO,GAAM,cAAiB,aAAe,EAAM,eAAiB,GAAK,CAAC,EAAM,SACtF,WAAW,EAAW,KACtB,KAEN,MAIW,EAAA,QAAA,uDCrGf,EAAA,EAAA,GAAA,GAAA,GAAA,EAAA,qBAEe,EAAA,QAAA,CACb,MAAO,SAAC,EAAQ,EAAe,CAE7B,EAAO,iBAAmB,SAAS,cAAc,OACjD,EAAO,iBAAiB,aAAa,QAAS,cAG9C,EAAO,iBAAiB,UAAY,EAAO,UAG3C,EAAA,QAAM,KAAK,EAAQ,+GEVvB,OAAO,SAAS,EAAE,CACjB,EAAE,WAAW,SAAS,GAAK,CAC1B,UAAW,UACX,SAAU,SACV,SAAU,SACV,YAAa,UACb,WAAY,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAC7D,OAAQ,WAAY,YAAa,UAAW,WAAY,YACxD,gBAAiB,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MACrD,MAAO,MAAO,MAAO,MAAO,MAAO,OACnC,SAAU,CAAC,SAAU,UAAW,UAAW,WAAY,YAAa,UAAW,YAC/E,cAAe,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC1D,YAAa,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAClD,WAAY,KACZ,WAAY,WACZ,SAAU,EACV,MAAO,GACP,mBAAoB,GACpB,WAAY,IACb,EAAE,WAAW,YAAY,EAAE,WAAW,SAAS,MCnBhD,GAAM,IAAQ,GAEV,GAAO,GAGX,WAAW,EAAG,EAAI,CAChB,MAAO,IAAK,IAAM,GAAM,EAG1B,EAAE,OAAS,CAAC,KAAY,IACtB,EAAQ,OAAO,CAAC,EAAK,EAAK,IAAQ,EAAM,EAAM,EAAE,EAAO,IAAQ,IAAK,IAEtE,EAAE,aACA,GACA,CAAC,KAAY,IACX,EAAQ,OACN,CAAC,EAAK,EAAK,IACT,EACA,EACC,GAAE,EAAQ,EAAG,EAAO,IAAO,EAAO,KAAQ,EAAO,KAChD,EAAO,IACP,IACJ,IAGN,EAAE,IAAM,SAAU,EAAI,CACpB,GAAM,GAAO,EAAG,MAAW,EAAE,QAC7B,AAAK,GAAM,IACT,IAAM,GAAQ,IAEhB,OAAS,CAAC,EAAK,IAAQ,QAAO,QAAQ,GAEpC,GAAM,GAAM,IAAS,IAAM,GAAM,GAAO,GAE1C,GAAO,GAAM,IAGf,EAAE,gBAAkB,SAAU,EAAc,CAC1C,OAAS,KAAQ,GACf,GAAI,EAAa,eAAe,GAC9B,OAAS,KAAQ,GAAa,GAC5B,AAAK,GAAM,IAAO,IAAM,GAAQ,IAEhC,GAAM,GAAM,GAAQ,EAAa,GAAM,IAK/C,OAAO,OAAO,GChDd,GAAM,IAAU,CACd,KAAQ,KACR,0CACE,qDACF,oBAAqB,4BACrB,IAAO,QACP,OAAU,YACV,KAAQ,QACR,MAAS,QACT,cAAe,iBACf,QAAW,UACX,OAAU,UACV,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,QACP,IAAO,QACP,IAAO,MACP,KAAQ,OACR,KAAQ,OACR,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,wBAAyB,sBACzB,uBAAwB,qBACxB,eAAgB,cAChB,cAAe,aACf,eAAgB,WAChB,cAAe,cACf,gBAAiB,mCACjB,eAAgB,kCAChB,gBAAiB,kCACjB,eAAgB,sCAChB,gBACE,2GACF,iBAAkB,gCAClB,kBAAmB,oCACnB,iBAAkB,gCAClB,mDACE,6DACF,kDACE,8FACF,mCACE,6CACF,2BAA4B,sCAC5B,mCACE,mDACF,mCAAoC,uCACpC,2BAA4B,qCAC5B,mCACE,mDACF,wCACE,uFACF,yCACE,4FACF,eACE,gEACF,iBAAkB,iCAClB,oDACE,+DACF,oBAAqB,oBACrB,wBAAyB,4BACzB,4CACE,6DACF,UAAa,WACb,mBAAoB,yCACpB,kCAAmC,oCACnC,wBACE,8DAEF,SAAY,WACZ,uBAAwB,yBACxB,gCAAiC,wBACjC,4IACE,oKACF,KAAQ,WACR,4BAA6B,2BAC7B,wEACE,4EACF,YAAa,UACb,oBAAqB,iBACrB,yBAA4B,yCAC5B,kBACE,gFACF,kDACE,wDACF,kBAAqB,4CACrB,uCAAwC,gCACxC,YAAa,iBACb,SAAY,aACZ,cAAe,cACf,gBAAiB,aACjB,SAAU,WACV,eAAgB,sBAChB,KAAQ,UACR,4CACE,gEACF,qCACE,iDACF,eAAgB,uBAChB,KAAQ,OACR,KAAQ,QACR,2CACE,0CACF,sBAAyB,IACzB,eAAkB,IAClB,uBAA0B,CAAC,GAC3B,YAAe,WACf,iBAAkB,gBAClB,iBAAkB,mBAClB,qDACE,8EACF,YAAa,YACb,gBAAmB,uDACnB,uDACE,2EACF,8CACE,yDACF,oBAAqB,wBACrB,uBAAwB,wBACxB,mBAAoB,0BACpB,mBAAoB,yBACpB,8BAA+B,iCAC/B,UAAW,eACX,aAAc,cACd,aAAc,gBACd,sDACE,iEACF,OAAU,WACV,iEACE,mEAGJ,EAAE,IAAI,IC/IN,AACA,GAAI,IAAO,QAAqC,GAChD,GAAI,CACF,AAAC,UAAU,EAAiB,EAAM,CAChC,GACE,GAAI,GAAgB,SAAS,IAAI,OAAS,GAC1C,GAAI,GAAgB,CAAE,EAAG,IAAQ,IAAI,OAAS,GAC9C,GAAI,GAAgB,CAAC,CAAC,IAAK,KAAQ,IAAI,OAAS,GAChD,GAAI,GAAgB;AAAA,GAAQ,aAAe,SAC3C,GAAI,GAAgB,CAAE,EAAG,OAAQ,aAAe,UAChD,GAAI,GAAgB,CAAE,EAAG,QAAS,aAAe,UAEjD,KAAM,GACR,GAAK,gBAAkB,IACtB,gBAAiB,UACpB,CACA,AAAC,UAAU,EAAQ,EAAQ,EAAS,CAClC,aACA,GAAI,GAAS,EAAO,OAChB,EAAiB,EAAO,eACxB,EAAO,qBACP,EAAkB,uBAClB,EAAO,MACP,EAAU,CACZ,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,MAAO,IACP,MAAO,MAEL,EAAQ,CACV,OAAQ,SAAU,EAAK,EAAO,CAC5B,EAAS,KAAK,OAAQ,EAAK,IAE7B,OAAQ,SAAU,EAAK,CACrB,MAAO,MAAK,OAAO,IAErB,IAAK,SAAU,EAAK,CAClB,MAAO,MAAK,IAAI,GAAO,KAAK,OAAO,GAAK,GAAK,MAE/C,OAAQ,SAAU,EAAK,CACrB,MAAO,MAAK,IAAI,GAAO,KAAK,OAAO,GAAK,MAAM,GAAK,IAErD,IAAK,SAAU,EAAK,CAClB,MAAO,KAAO,MAAK,QAErB,IAAK,SAAU,EAAK,EAAO,CACzB,KAAK,OAAO,GAAO,CAAC,EAAO,KAE7B,QAAS,SAAU,EAAU,EAAS,CACpC,GAAI,GAAO,KACX,OAAS,KAAO,GAAK,OAAQ,EAAK,OAAO,GAAK,QAAQ,EAAQ,GAC9D,WAAgB,EAAO,CACrB,EAAS,KAAK,EAAS,EAAO,EAAO,GAAM,KAG/C,OAAQ,UAAY,CAClB,MAAO,IAET,SAAU,UAAY,CACpB,GAAI,GAAQ,GACZ,OAAS,KAAO,MAAK,OAEnB,OADI,GAAU,EAAO,GACZ,EAAI,EAAG,EAAQ,KAAK,OAAO,GAAM,EAAI,EAAM,OAAQ,IAC1D,EAAM,KAAK,EAAU,IAAM,EAAO,EAAM,KAG5C,MAAO,GAAM,KAAK,OAGtB,OAAS,KAAO,GACd,EAAe,EAAgB,UAAW,EAAK,CAC7C,aAAc,GACd,SAAU,GACV,MAAO,EAAM,KAEjB,GAAK,gBAAkB,EACvB,WAAyB,EAAO,CAC9B,GAAI,GAAO,EAAO,MAElB,OADA,EAAe,KAAM,SAAU,CAAE,MAAO,IAChC,QACD,CAAC,EACJ,UACG,OAAO,IAAU,SACpB,AAAI,EAAM,OAAO,KAAO,KACtB,GAAQ,EAAM,MAAM,IAEtB,OACM,GAAQ,EAAM,MAAM,KAAM,EAAI,EAAG,EAAS,EAAM,OACpD,EAAI,EACJ,IACA,CACA,GAAI,GAAQ,EAAM,GACd,EAAQ,EAAM,QAAQ,KAC1B,AAAI,GAAK,EACP,EACE,EACA,EAAO,EAAM,MAAM,EAAG,IACtB,EAAO,EAAM,MAAM,EAAQ,KAEpB,EAAM,QACf,EAAS,EAAM,EAAO,GAAQ,IAGlC,UACG,GAAQ,GACX,OAAS,GAAI,EAAG,EAAS,EAAM,OAAQ,EAAI,EAAQ,IAAK,CACtD,GAAI,GAAQ,EAAM,GAClB,EAAS,EAAM,EAAM,GAAI,EAAM,IAEjC,UACG,WAAa,GAChB,EAAM,QAAQ,EAAS,GACvB,cAEA,OAAS,KAAO,GAAO,EAAS,EAAM,EAAK,EAAM,KAIvD,WAAiB,EAAO,EAAK,CAC3B,EAAS,KAAM,EAAK,GAGtB,WAAkB,EAAM,EAAK,EAAO,CAClC,GAAI,GAAM,EAAQ,GAAS,EAAM,KAAK,KAAO,EAC7C,AAAI,IAAO,GAAM,EAAK,GAAK,KAAK,GAC3B,EAAK,GAAO,CAAC,GAGpB,WAAgB,EAAK,CACnB,MAAO,oBACL,EAAI,QAAQ,EAAiB,OAAO,QAAQ,EAAM,MAItD,WAAgB,EAAK,CACnB,MAAO,oBAAmB,GAAK,QAAQ,EAAM,GAG/C,WAAkB,EAAO,CACvB,MAAO,GAAQ,MAEhB,OAAQ,OAAQ,MAAM,SAG3B,AAAC,UAAU,EAAsB,CAC/B,GAAI,GAAW,GACf,GAAI,CACF,EAAW,CAAC,CAAC,OAAO,cACpB,EAGF,AAAM,WAAa,IACjB,GAAqB,QAAU,SAAiB,EAAU,EAAS,CACjE,GAAI,GAAO,KACP,EAAQ,OAAO,OAAO,MAC1B,KAAK,WACF,QAAQ,oBAAqB,KAC7B,MAAM,KACN,QAAQ,SAAU,EAAM,CACvB,AAAI,CAAC,EAAK,QAAU,IAAQ,IAC3B,GAAM,GAAQ,EAAK,OAAO,IAAO,QAAQ,SAAU,EAAO,CACzD,EAAS,KAAK,EAAS,EAAO,EAAM,SAOxC,QAAU,IACd,GAAqB,KAAO,UAAgB,CAC1C,MAAO,GAAS,KAAM,SAAU,EAAO,EAAK,CAC1C,KAAK,KAAK,OAMV,UAAY,IAChB,GAAqB,OAAS,UAAkB,CAC9C,MAAO,GAAS,KAAM,SAAU,EAAO,EAAK,CAC1C,KAAK,KAAK,OAMV,WAAa,IACjB,GAAqB,QAAU,UAAmB,CAChD,MAAO,GAAS,KAAM,SAAU,EAAO,EAAK,CAC1C,KAAK,KAAK,CAAC,EAAK,QAMlB,GAAY,CAAE,QAAO,WAAY,KACnC,GAAqB,OAAO,UAAY,EAAqB,SAIzD,QAAU,IACd,GAAqB,KAAO,UAAgB,CAS1C,OARI,GAAU,KAAK,UACjB,EAAQ,EAAQ,OAChB,EAAO,EAAM,KACb,EAAO,GACP,EAAS,OAAO,OAAO,MACvB,EACA,EACA,EACK,CAAC,GACN,EAAQ,EAAM,MACd,EAAM,EAAM,GACZ,EAAK,KAAK,GACJ,IAAO,IACX,GAAO,GAAO,IAEhB,EAAO,GAAK,KAAK,EAAM,IACvB,EAAQ,EAAQ,OAChB,EAAO,EAAM,KAKf,IADA,EAAK,OACA,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC3B,KAAK,OAAO,EAAK,IAEnB,IAAK,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC3B,EAAM,EAAK,GACX,KAAK,OAAO,EAAK,EAAO,GAAK,WAKnC,WAAkB,EAAM,EAAU,CAChC,GAAI,GAAQ,GACZ,SAAK,QAAQ,EAAU,GAChB,EACH,EAAM,OAAO,YACb,CACE,KAAM,UAAY,CAChB,GAAI,GAAQ,EAAM,QAClB,MAAO,CAAE,KAAM,IAAU,OAAW,MAAO,KAMrD,AAAC,UAAU,EAAQ,CACjB,GAAI,GAAK,EAAO,eACd,EAAO,EAAO,yBACd,EAA4B,SAAU,EAAQ,CAC5C,WAAgB,EAAM,EAAO,CAC3B,EAAqB,OAAO,KAAK,KAAM,EAAM,GAC7C,EAAO,KAAK,WACZ,EAAO,IAAI,KAAK,KAAK,KAAM,EAAO,IAAM,EAAO,IAEjD,WAAa,EAAM,CACjB,EAAqB,OAAO,KAAK,KAAM,GACvC,EAAO,KAAK,WACZ,EAAO,IAAI,KAAK,KAAK,KAAM,EAAO,IAAM,EAAO,IAEjD,WAAa,EAAM,EAAO,CACxB,EAAqB,IAAI,KAAK,KAAM,EAAM,GAC1C,EAAO,KAAK,WACZ,EAAO,IAAI,KAAK,KAAK,KAAM,EAAO,IAAM,EAAO,IAEjD,MAAO,UAAU,EAAI,EAAO,CAC1B,SAAG,OAAS,EACZ,EAAG,OAAS,EACZ,EAAG,IAAM,EACF,EAAG,EAAI,OAAQ,CACpB,aAAc,GACd,SAAU,GACV,MAAO,MAIb,EAA2B,SAAU,EAAqB,CACxD,MAAO,UAAU,EAAK,EAAI,CACxB,SAAG,EAAK,gBAAiB,CACvB,aAAc,GACd,SAAU,GACV,MAAO,EAAoB,EAAI,KAE1B,IAGX,EAAqB,SAAU,EAAI,CACjC,GAAI,GAAS,EAAG,OAChB,EAAG,OAAS,EAAqB,OACjC,gBAAgB,KAAK,EAAI,EAAG,KAAK,OAAO,MAAM,IAC9C,EAAG,OAAS,GAEd,EAAqB,SAAU,EAAK,EAAO,CACzC,GAAI,CAAE,aAAe,IACnB,KAAM,IAAI,WACR,0EAEE,EAAM,OAGd,EAAe,SAAU,EAAO,CAC9B,GAAI,GAAa,EAAM,UACrB,EAAe,EAAK,EAAY,gBAChC,EAAO,EAAK,EAAY,QACxB,EAAS,EAAK,EAAY,UAC1B,EACF,AAAI,CAAC,GAAgB,GAAU,EAAO,KACpC,GAAqB,EACnB,EAA0B,IAE5B,EAAO,iBAAiB,EAAY,CAClC,KAAM,CACJ,IAAK,UAAY,CACf,MAAO,GAAK,IAAI,KAAK,OAEvB,IAAK,SAAU,EAAO,CACpB,GAAI,GAAK,KAAK,cACd,EAAK,IAAI,KAAK,KAAM,GAChB,GAAI,EAAmB,KAG/B,OAAQ,CACN,IAAK,UAAY,CACf,MAAO,GAAO,IAAI,KAAK,OAEzB,IAAK,SAAU,EAAO,CACpB,GAAI,GAAK,KAAK,cACd,EAAO,IAAI,KAAK,KAAM,GAClB,GAAI,EAAmB,KAG/B,aAAc,CACZ,IAAK,UAAY,CACf,SAAmB,KAAM,GAEvB,KAAK,eACL,EACE,KACA,GAAI,iBAAgB,KAAK,OAAO,MAAM,MAI5C,IAAK,SAAU,EAAI,CACjB,EAAmB,KAAM,GACzB,EAAmB,KAAM,SAMrC,GAAI,CACF,EAAa,mBACT,oBAAoB,KAAK,MAAO,OAAQ,IAAI,WAC9C,EAAa,UACf,KACD,UACF,GAAK,gBAAgB,UAAW,QACnC,GAAO,IAAQ,GAAK,gBCjVb,YAA0B,EAAK,CACpC,GAAI,GAAO,UACX,MAAO,GAAI,QAAQ,iBAAkB,SAAU,EAAO,EAAK,CACzD,MAAO,GAAK,SAAS,GAAO,KAAO,OAC/B,EAAK,SAAS,GAAO,GACrB,IAMD,YAAgB,EAAK,EAAK,GAAI,CACnC,MAAO,GAAI,QAAQ,oBAAqB,SAAU,EAAO,EAAK,CAC5D,MAAO,GAAG,KAAS,OAAY,EAAG,GAAO,IA6CtC,GAAM,IAAa,GChF1B,GAAM,IAAQ,CACZ,WAAY,EACZ,0BAA2B,EAC3B,sBAAuB,EACvB,qBAAsB,EACtB,gBAAiB,EACjB,mBAAoB,EACpB,qBAAsB,EACtB,yBAA0B,EAC1B,mBAAoB,EACpB,cAAe,GACf,kBAAmB,GACnB,kBAAmB,GACnB,kBAAmB,GACnB,sBAAuB,GACvB,iBAAkB,GAClB,0BAA2B,GAC3B,8BAA+B,GAC/B,+BAAgC,GAChC,+BAAgC,GAChC,6BAA8B,GAC9B,0BAA2B,GAC3B,yBAA0B,GAC1B,gBAAiB,GACjB,iBAAkB,GAClB,gBAAiB,GACjB,oBAAqB,GACrB,sBAAuB,GACvB,oBAAqB,GACrB,yBAA0B,GAC1B,uBAAwB,GACxB,mBAAoB,GACpB,eAAgB,IAGZ,GAAW,OAAO,YACtB,OAAO,QAAQ,IAAO,IAAI,CAAC,CAAC,EAAK,KAAW,CAAC,EAAO,KAKtD,YAAmB,EAAQ,CACzB,GAAM,GAAQ,OAAO,OAAO,GAAI,GAEhC,OAAQ,EAAM,UACP,IAAM,WACT,EAAM,QAAU,EACd,kEAEF,UACG,IAAM,mBACT,EAAM,QAAU,EAAE,+CAClB,UACG,IAAM,sBACT,OAAQ,EAAM,aACP,MACH,EAAM,QAAU,GACd,EAAE,4CACF,EAAM,QACH,UAAU,GAAI,EAAM,QAAQ,OAAS,GACrC,QAAQ,KAAM,MAEnB,cAEA,EAAM,QAAU,EAAM,QAE1B,UACG,IAAM,+BACT,EAAM,QAAU,EAAE,sCAClB,cAEA,OAAQ,EAAM,aACP,MACH,EAAM,QAAU,EACd,sDAEF,UACG,UACA,MACH,EAAM,QAAU,GACd,EAAE,kCAEF,EAAM,QAAQ,MAAM,GAAI,EAAM,QAAQ,QAAQ,gBAEhD,UACG,MACH,EAAM,QAAU,EACd,yEAEF,cAEA,EAAM,QAAU,EAAE,GAAS,EAAM,MAAO,EAAE,EAAM,WAGxD,MAAO,GCjGT,GAAI,IAES,GAAW,GAAS,CAC/B,GAAS,GAGX,kBAAoC,EAAS,CAC3C,GAAI,CAAE,WAAY,SAAS,MAAO,MAClC,GAAM,GAAW,GAAI,eAAc,OAAO,GACpC,EAAa,KAAM,QAAO,OAAO,OAAO,UAAW,GAGzD,MADgB,AADE,OAAM,KAAK,GAAI,YAAW,IAClB,IAAI,GAAK,EAAE,SAAS,IAAI,SAAS,EAAG,MAAM,KAAK,IAIpE,GAAM,IACX,oBAAsB,QAAS,GAAI,kBAAiB,SAAW,GAEpD,GAAQ,CACnB,iBAAkB,IAAI,IACpB,IAAgB,GAAa,iBAAiB,GAAG,GACnD,oBAAqB,IAAI,IACvB,IAAgB,GAAa,oBAAoB,GAAG,GACtD,QAAS,IAAM,GAAc,IAC7B,YACA,YAAa,GACX,GAAM,UAAU,KACd,GAGE,GACA,IACA,GAAa,YAAY,CAAE,eAAc,MC/BjD,GAAM,IAAQ,CACZ,CAAE,KAAM,QAAS,MAAO,OACxB,CAAE,KAAM,SAAU,MAAO,OACzB,CAAE,KAAM,SAAU,MAAO,OACzB,CAAE,KAAM,SAAU,MAAO,YACzB,CAAE,KAAM,SAAU,MAAO,UACzB,CAAE,KAAM,WAAY,MAAO,cAGvB,GAAY,GAAS,GAAS,CAClC,OAAS,GAAI,EAAG,EAAI,EAAM,OAAQ,GAAK,EAAG,CACxC,GAAI,GAAY,EAAM,GAAG,MAAM,KAAK,GACpC,GAAI,EACF,MAAO,CACL,MAAO,EAAU,GACjB,KAAM,EAAM,GAAG,KACf,KAAM,EAAM,MAAM,EAAU,GAAG,SAKrC,KAAM,IAAI,OAAM,iCAAiC,KAAK,UAAU,OAG5D,GAAS,GACb,WAAe,EAAO,EAAK,EAAU,GAAI,CACvC,GAAI,IAAU,GACZ,MAAO,GAGT,GAAM,CAAE,QAAO,OAAM,QAAS,EAAS,GAEvC,GAAI,IAAS,QAEX,MAAO,GAAM,EAAM,EAAK,GACnB,GAAI,IAAS,WAClB,SAAI,KAAK,GACF,EAAM,EAAM,EAAK,GACnB,GAAI,IAAS,SAClB,SAAI,KAAK,OAAO,IACT,EAAM,EAAM,EAAK,GACnB,GAAI,IAAS,SAClB,SAAI,KAAK,EAAM,QAAQ,WAAY,MAC5B,EAAM,EAAM,EAAK,GACnB,GAAI,IAAS,SAClB,SAAQ,KAAK,GACN,EAAM,EAAM,GAAI,GAClB,GAAI,IAAS,SAAU,CAC5B,GAAM,GAAY,EAAQ,MAC1B,MAAI,GACF,GAAU,KAAK,GACR,EAAM,EAAM,EAAW,IAGzB,EAAM,EAAM,EAAK,GAG1B,KAAM,IAAI,OAAM,gCAAgC,KAAK,UAAU,OAG5D,GAAQ,GAAO,GAAU,KC7DhC,qEAAM,IAAW,GAAM,EAAE,IAAG,IAAK,GAAM,GAAS,EAAG,MAE7C,GAAQ,GAAM,EAAE,IAAG,IAAK,GAAM,GAAM,KAEpC,GAAO,CAAC,EAAQ,IAAW,GAAW,GAC1C,EAAQ,EAAO,IAAS,IAAI,GAAS,EAAO,EAAO,IAE/C,GAAO,CAAC,EAAM,EAAI,IAAQ,EAAK,GAAK,GAAS,EAAG,KAAK,GAAK,EAE1D,GAAM,CAAC,EAAM,EAAK,IAAQ,GAAK,EAAM,IAAM,EAAK,GAEhD,GAAO,CAAC,EAAM,IAAQ,EAAK,IAAO,GAAK,ECRtC,GAAM,IAAU,GAAO,GAAM,EAAG,GAEjC,GAAS,CAAC,EAAI,IAAS,EAAG,GAAG,GAEtB,GAAM,GAAO,EAAM,EAEnB,GAAM,GAAO,EAAM,EAEzB,YAAmB,EAAK,EAAI,EAAQ,CACzC,MAAO,GAAI,IAAI,GAAI,KAAK,GAGnB,GAAM,IAAW,GAAK,EAEhB,GAAQ,GAAK,GAAK,KAElB,GAAM,GAAK,CAAC,EAMZ,GACX,IAAI,IACJ,GACE,EAAI,OAAO,CAAC,EAAK,IAAQ,EAAI,GAAM,GAM1B,EACX,IAAI,IACJ,GACE,EAAI,YAAY,CAAC,EAAK,IAAQ,EAAI,GAAM,GAWrC,GAAM,GAAQ,CAAC,KAAO,IACvB,EAAK,QAAU,EAAG,OAAe,EAAG,GAAG,GACpC,IAAI,IAAU,EAAM,EAAQ,GAAG,EAAM,GAAG,GAGpC,GAAO,EAAM,CAAC,EAAK,IAAQ,EAAI,KAAK,IAEpC,GAAQ,EAAM,CAAC,EAAK,IAAQ,EAAI,MAAM,IAEtC,GAAU,GAAO,CAAC,GAAG,GAAK,UAE1B,GAAO,EAClB,GAAK,EAAE,MAAM,EAAG,IAChB,GAAM,OAAO,UAAU,SAAS,KAAK,IAG1B,GAAS,GAAS,IAAM,EAExB,GAAI,GAAO,IAEX,GAAI,GAAO,IAEX,GAAS,EAAM,CAAC,EAAI,EAAM,IAAQ,CAC7C,GAAI,CACF,MAAO,IAAO,GAAO,IAAM,EAAI,IAAU,EAAI,SAC7C,CACA,MAAO,MAIE,EAAO,GAAO,QACd,GAAS,EAAM,CAAC,EAAI,EAAS,IACxC,GAAO,CAAC,EAAK,IAAQ,GAAO,EAAI,EAAK,GAAM,EAAK,IAGrC,GAAO,GAAO,QAEd,GAAO,GAAO,MAAM,UAAU,MAAM,KAAK,EAAK,GAErD,GAAO,CAAC,EAAG,IAAQ,EAAI,GAEhB,GAAO,GAAO,EAAI,GAIxB,GAAM,IAAO,EAAM,CAAC,EAAO,IAAO,CACvC,GAAM,GAAM,EAAM,GAClB,GAAI,EAAC,EACL,MAAO,IAAO,EAAI,GAAI,EAAI,GAAI,GAAK,GAAK,KAAS,KAGtC,GAAS,EAAM,CAAC,EAAO,IAAO,CACzC,GAAM,GAAM,EAAM,GAClB,GAAI,EAAC,EACL,MAAO,GAAI,GAAG,GAAM,EAAI,GAAK,GAAO,GAAK,IAAQ,KAGtC,GAAS,EAAK,UAEd,GAAa,GACxB,GAAO,CAAC,EAAK,IAAS,EAAI,QAAQ,GAAO,GAAK,EAAM,CAAC,GAAG,EAAK,GAAO,IAAI,GAE7D,GAAM,EAAM,CAAC,EAAI,IACrB,EAAI,SAAW,EAClB,GACA,EAAQ,EAAI,IAAM,GAChB,GACA,GAAI,EAAI,GAAK,KAGR,GAAO,EAAM,CAAC,EAAI,IACtB,EAAI,SAAW,EAClB,OACA,EAAG,GAAK,IACN,GAAK,GACL,GAAK,EAAI,GAAK,KAGhB,GAAa,CAAC,EAAI,IAAQ,EAAI,UAAU,GAmB9C,GAAM,IAAQ,CAAC,EAAI,EAAG,IAAM,GAAQ,EAAG,GAAI,EAAG,IAExC,GAAO,CAAC,EAAI,IAChB,GAAO,CAAC,EAAK,IAAS,GAAM,EAAG,GAAa,GAAM,GAE9C,GAAQ,CAAC,EAAI,IACjB,GAAO,CAAC,EAAK,IAAS,EAAG,GAAO,GAAQ,EAAM,GAAM,GAEhD,GAAU,CAAC,EAAK,IAAQ,CAAC,GAAK,YAAe,QAAS,GAAQ,GAAK,GAEnE,GAAQ,CAAC,EAAO,IAAW,EAAM,KAAK,GAEtC,GAAS,CAAC,EAAO,IAAW,EAAO,MAAM,IAAU,GASzD,YAAiB,EAAG,EAAG,CACrB,GAAI,CAAE,aAAa,UAAW,CAAE,aAAa,SAAS,MAAO,KAAM,EAEnE,GAAI,OAAO,KAAK,GAAG,SAAW,OAAO,KAAK,GAAG,OAC3C,MAAO,GAGT,OAAW,KAAO,GAAG,CACnB,GAAM,GAAU,EAAE,GACZ,EAAU,EAAE,GAGlB,GACG,YAAmB,SAAU,CAAC,GAAQ,EAAS,IAC/C,CAAE,aAAmB,UAAW,IAAY,EAE7C,MAAO,GAGX,MAAO,GAGT,GAAM,IAAW,CAAC,EAAM,EAAG,IAAM,GAAQ,EAAE,GAAO,EAAE,IAE9C,GAAW,CAAC,EAAG,IACf,EAAE,SAAW,EAAU,GACpB,EAAI,EAAE,GAAI,IAAO,GAAS,GAAK,GAAI,EAAK,EAAE,GAAI,IAIvD,YAAgB,EAAM,EAAK,EAAK,CAC9B,GAAI,GAAS,GACb,OAAS,KAAK,GACZ,EAAO,GAAK,EAAI,GAElB,SAAO,GAAQ,EACR,EAGT,GAAM,IAAa,CAAC,EAAM,EAAK,IAAQ,CACrC,GAAI,EAAK,SAAW,EAClB,MAAO,GAET,GAAI,GAAM,EAAK,GACf,GAAI,EAAK,OAAS,EAAG,CACnB,GAAI,GACF,CAAC,GAAM,IAAQ,OAAO,UAAU,eAAe,KAAK,EAAK,GACrD,EAAI,GACJ,OAAO,UAAU,EAAK,IACpB,GACA,GACR,EAAM,GAAU,MAAM,UAAU,MAAM,KAAK,EAAM,GAAI,EAAK,GAE5D,GAAI,OAAO,UAAU,IAAQ,MAAM,QAAQ,GAAM,CAC/C,GAAI,GAAM,GAAG,OAAO,GACpB,SAAI,GAAO,EACJ,MAEP,OAAO,GAAM,EAAK,EAAK,IAMrB,GACJ,CAAC,EAAI,IACL,IAAI,IACK,EAAG,GAAG,EAAK,MAAM,IAGtB,GAAU,CAAC,EAAK,EAAO,IAAO,GAAQ,EAAK,EAAK,GAAK,GAErD,GAAiB,CAAC,EAAI,EAAK,IAAO,EAAG,EAAK,EAAK,IAE/C,GAAU,CAAC,EAAK,EAAO,IAAO,GAAQ,GAAK,EAAK,GAAK,GAErD,GAAO,CAAC,EAAM,IAClB,GAAW,IAAO,IAAO,OAAO,UAAU,eAAe,KAAK,EAAI,GAE9D,GAAY,CAAC,EAAO,IAAY,GAAO,CAC3C,GAAI,CACF,MAAO,GAAM,SACN,EAAP,CACA,MAAO,GAAQ,EAAG,KAWhB,GAAO,CAAC,EAAI,IAAQ,EAAI,IAAI,GAS5B,GAAU,CAAC,EAAI,IAAQ,EAAI,OAAO,GAElC,GAAQ,CAAC,EAAW,EAAY,IACpC,EAAU,GAAO,EAAW,GAAO,EAE/B,GAAU,CAAC,EAAW,EAAY,EAAa,IACnD,EAAU,GAAO,EAAW,GAAO,EAAY,GAE3C,GAAU,CAAC,EAAK,EAAK,IAAQ,EAAI,IAAQ,EAAI,GAE7C,GAAW,CAAC,EAAK,IACrB,EAAI,OAAO,CAAC,EAAK,IAAS,AAAC,EAAc,EAAI,GAAZ,GAAmB,IAEhD,GAAW,CAAC,EAAK,IACrB,EAAI,OAAO,CAAC,EAAK,IAAS,EAAM,GAAO,EAAI,GAAO,IAE9C,GAAQ,CAAC,EAAK,EAAK,IAAQ,GAAS,CAAC,EAAK,GAAM,GAEhD,GAAc,CAAC,EAAI,IAAQ,CAAC,EAAG,GAE/B,GAAY,CAAC,EAAM,IAAM,EAAE,SAAS,GAEpC,GAAO,CAAC,EAAO,IAAW,GAAS,EAEnC,GAAM,CAAC,EAAO,IAAW,EAAQ,EAEjC,GAAO,CAAC,EAAO,IAAW,GAAS,EAEnC,GAAM,CAAC,EAAO,IAAW,EAAQ,EAWjC,GAAU,CAAC,EAAI,EAAM,IAAQ,EAAI,OAAO,EAAI,GAE5C,GAAO,CAAC,EAAI,IAAW,GAAG,GAAQ,GAElC,GAAa,CAAC,EAAI,IACtB,GACE,CAAC,EAAK,EAAK,EAAO,IAChB,IAAU,GAAK,CAAC,EAAG,EAAK,EAAI,EAAQ,IAChC,CAAC,GAAG,EAAK,CAAC,IACV,CAAC,GAAG,EAAI,MAAM,EAAG,EAAI,OAAS,GAAI,CAAC,GAAG,EAAI,EAAI,OAAS,GAAI,IACjE,IACA,GAEE,GAAW,CAAC,EAAI,IACpB,GAAO,CAAC,EAAK,IAAQ,GAAK,GAAS,EAAG,IAAO,GAAO,GAAM,GAAM,IAAI,GAEhE,GAAU,CAAC,EAAG,KAAS,IAAS,CAAC,EAAM,GAAG,GAAM,GAGhD,GAAQ,CAAC,EAAO,IAAQ,CAC5B,GAAI,GAAS,GACb,OAAS,KAAK,GACZ,AAAK,EAAM,SAAS,IAAI,GAAO,GAAK,EAAI,IAE1C,MAAO,IAGH,GAAU,CAAC,EAAM,IAAQ,CAC7B,GAAI,GAAS,GACb,OAAS,KAAK,GACZ,AAAI,EAAK,EAAI,GAAI,IAAI,GAAO,GAAK,EAAI,IAEvC,MAAO,IAGH,GAAQ,CAAC,EAAO,IAAQ,CAC5B,GAAI,GAAS,GACb,SAAM,QAAQ,GAAQ,CACpB,AAAI,IAAQ,IAAK,GAAO,GAAQ,EAAI,MAE/B,GAGH,GAAW,CAAC,EAAO,IAAQ,CAC/B,GAAI,GAAS,GACb,SAAM,QAAQ,GAAQ,CACpB,EAAO,GAAQ,EAAI,KAEd,GAGT,YAAiB,EAAM,EAAK,CAC1B,MAAO,IAAM,CAAC,GAAO,GAGvB,GAAM,IAAa,CAAC,EAAK,IACvB,EAAI,OACF,CAAC,EAAK,EAAK,IAAW,IAAU,EAAI,EAAI,GAAO,EAAI,EAAK,GACxD,MAGE,GAAc,CAAC,EAAK,IAAQ,OAAO,OAAO,GAAI,EAAK,GAEnD,GAAa,CAAC,EAAK,IAAQ,OAAO,OAAO,GAAI,EAAK,GAElD,GAAiB,CAAC,EAAO,IAC7B,EAAK,OAAO,CAAC,EAAK,IAAS,EAAM,SAAS,GAAO,EAAM,CAAC,GAAG,EAAK,GAAO,IAEnE,GAAS,GAAM,GAAO,EAAG,GAEzB,GAAU,GAAM,CAAC,EAAM,IAAS,EAAG,EAAM,GAEzC,GAAoB,CAAC,EAAO,IAAU,CAC1C,GAAM,GAAM,GAAI,KACV,EAAK,GAAI,KAAI,GACb,EAAK,GAAI,KAAI,GACnB,OAAS,KAAQ,GACf,AAAK,EAAG,IAAI,IAAO,EAAI,IAAI,GAE7B,MAAO,CAAC,GAAG,IAGP,GAAe,CAAC,EAAI,EAAK,KAAU,IACvC,EAAI,IAAI,CAAC,EAAK,EAAG,IAAS,EAAG,EAAK,EAAG,EAAM,EAAO,GAAG,IAEjD,GAAW,CAAC,EAAI,IAAY,QAAQ,QAAQ,GAAS,KAAK,GAC1D,GAAa,CAAC,EAAI,IAAY,EAAQ,KAAK,KAAM,GAOjD,GAAU,CAAC,EAAG,EAAG,IAAQ,EAAE,GAAK,KAAK,GAAK,EAAE,EAAG,IAE/C,GAAS,CAAC,EAAG,EAAG,IAAQ,EAAE,EAAE,GAAM,GAElC,GAAQ,CAAC,EAAK,KAAS,IACpB,EAAI,IAAI,GAAM,EAAG,EAAM,GAAG,IAG7B,GAAS,CAAC,EAAM,EAAI,IAAQ,EAAI,MAAM,EAAM,GAErC,GAAU,GAAK,EAAE,cACjB,GAAU,GAAK,EAAE,cAK9B,GAAM,IACJ,GACA,IAAI,IAAS,CACX,GAAI,YAAiB,UACnB,MAAO,GAAM,GAAG,GAElB,GAAI,YAAiB,OACnB,MAAO,GAAM,IAAI,GAAM,GAAW,GAAI,GAAG,IAE3C,GAAM,GAAM,GACZ,OAAS,CAAC,EAAK,IAAU,QAAO,QAAQ,GACtC,EAAI,GAAO,GAAW,GAAO,GAAG,GAElC,MAAO,IAGE,GAAY,EAAM,CAAC,EAAO,KAAQ,IAC7C,GAAW,GAAO,EAAK,GAAG,IAGf,GAAM,EAAM,IACvB,GAAS,EAAM,IACf,GAAU,EAAM,IAChB,GAAS,EAAM,IACf,GAAQ,EAAM,IACd,EAAQ,EAAM,IACd,GAAY,EAAM,IAClB,GAAU,EAAM,IAChB,GAAO,EAAM,IACb,GAAU,EAAM,IAChB,GAAQ,EAAM,IACd,GAAmB,EAAM,IACzB,GAAS,EAAM,IACf,GAAU,EAAM,IAChB,GAAS,EAAM,IACf,GAAS,EAAM,IACf,EAAM,EAAM,IACZ,GAAU,EAAM,IAChB,GAAO,EAAM,IACb,GAAM,EAAM,IACZ,GAAM,EAAM,IACZ,GAAY,EAAM,IAClB,EAAS,EAAM,IACf,GAAgB,EAAM,IACtB,GAAW,EAAM,IACjB,GAAO,EAAM,IACb,GAAS,EAAM,IACf,GAAS,EAAM,IACf,GAAU,EAAM,IAChB,GAAa,EAAM,IACnB,GAAW,EAAM,IACjB,GAAY,EAAM,IAClB,GAAc,EAAM,IACpB,GAAY,EAAM,IAClB,GAAa,EAAM,IACnB,GAAO,EAAM,IACb,GAAS,EAAM,IACf,GAAO,EAAM,IACb,GAAS,EAAM,IACf,GAAU,EAAM,IAChB,GAAK,EAAM,IACX,GAAM,EAAM,IACZ,GAAS,EAAM,IACf,GAAK,EAAM,IACX,GAAM,EAAM,IACZ,GAAS,EAAM,IACf,GAAU,EAAM,IAChB,GAAY,EAAM,IAClB,GAAM,EAAM,IACZ,GAAO,EAAM,IACb,GAAO,EAAa,IACpB,GAAO,EAAa,IACpB,GAAM,EAAa,IACnB,GAAO,EAAa,IACpB,GAAO,EAAM,IACb,GAAQ,EAAM,IACd,GAAO,EAAM,IACb,GAAY,EAAM,IAClB,GAAQ,EAAM,IACd,GAAgB,EAAM,IACtB,GAAQ,EAAM,IACd,GAAS,EAAM,IACf,GAAW,GAAK,AAAO,GAAK,GAAK,GAAI,GAAU,IAC/C,GAAW,GAAK,AAAO,GAAK,EAAK,GAAI,EAAM,IAEhC,GAAY,CACvB,IAAK,GACL,MAAO,GACP,OAAQ,GACR,MAAO,GACP,UAAW,GACX,KAAM,GACN,OAAQ,GACR,OAAQ,GACR,QAAS,GACT,SAAU,GACV,KAAM,GACN,OAAQ,GACR,OAAQ,GACR,QAAS,GACT,WAAY,GACZ,SAAU,GACV,GAAI,GACJ,IAAK,GACL,GAAI,GACJ,IAAK,GACL,IAAK,GACL,QAAS,GACT,IAAK,GACL,QAAS,GACT,UAAW,GACX,IAAK,GACL,KAAM,GACN,QAAS,GACT,OAAQ,GACR,KAAM,GACN,OAAQ,GACR,KAAM,GACN,OAAQ,GACR,QAAS,GACT,OAAQ,GACR,KAAM,GACN,MAAO,GACP,UAAW,GACX,WAAY,GACZ,cAAe,GACf,MAAO,GACP,OAAQ,GACR,MAAO,GACP,UAAW,GACX,WACA,cACG,ICthBE,GAAM,IAAe,CAAC,EAAQ,IAAW,CAC9C,GAAM,GAAM,GAAM,IAAI,MACtB,MAAO,IAAU,GAAQ,IAUrB,GAAY,GAAU,GACtB,YAAe,OACb,EAAI,KAAO,MACN,AAAE,EAAQ,AAAE,GAAI,GAAU,IAAY,IAAM,GAEjD,EAAI,KAAO,KACN,AAAE,EAAQ,AAAE,GAAI,GAAU,IAAY,IAAM,GAEjD,EAAI,KAAO,MACN,AAAE,EAAU,GAAK,AAAE,GAAI,GAAU,IAAY,IAAM,GAErD,AAAE,EAAQ,AAAE,GAAI,GAAU,KAAU,GAEpC,EAAO,IAAI,GCxCf,YAAoB,CACzB,aAAc,CACZ,KAAK,SAAW,GAKlB,IAAI,EAAK,CACP,MAAO,MAAK,SAAS,GAKvB,IAAI,EAAK,CACP,MAAO,MAAK,OAAO,EAAK,IAK1B,MAAM,EAAK,CACT,MAAO,MAAK,OAAO,EAAK,IAM1B,OAAO,EAAK,EAAM,CAEhB,MADA,GAAO,MAAO,IAAS,UAAY,EAAO,CAAC,KAAK,IAAI,GAChD,IAAS,KAAK,IAAI,GACpB,MAAK,SAAS,GAAO,EACd,CAAC,GAAM,IAEP,CAAC,GAAO,KC5BrB,oBAAqC,GAAc,CAWjD,OAAO,EAAM,EAAM,EAAU,GAAM,CACjC,GAAI,EAAK,SAAS,KAChB,eAAQ,KACN,gFAEK,KAET,GAAM,CAAC,EAAgB,GAAS,MAAM,OAAO,EAAM,GAEnD,MAAI,IACF,GAAE,UAAU,QAAQ,WAAa,EAAM,GACnC,GAAS,EAAE,QAAQ,YAAY,EAAM,GAEvC,CACE,GAAG,SAAS,iBACV,gBAAkB,EAAO,yBAA2B,EAAO,OAE7D,QAAQ,GAAO,CACf,GAAI,GAAS,GACP,EAAW,EAAI,QAAQ,SAM7B,GALI,GACF,GAAS,GAAa,KAAM,IAI1B,CAAC,EAAQ,CACX,GAAM,GAAO,EAAI,QAAQ,KAEzB,AAAI,GACF,GAAS,CAAC,GAAa,KAAM,IAGjC,EAAI,OAAS,KAIZ,OAIL,EAAO,GAAI,ICnDjB,GAAM,IAAa,mBACb,GAAc,oBACd,GAAqB,wBAErB,GAAiB,GACrB,CAAC,QAAS,WAAY,UACtB,SAAU,EAAG,CACX,MAAO,GAAI,0BAEb,MAGI,GAAW,GAAa,EAAU,iBAAiB,IAEnD,GAAoB,GAAO,IAAQ,KACnC,GAAuB,GAAO,IAAQ,GACtC,GAAyB,GAAO,IAAQ,GAE9C,YAAuB,CACrB,SAAS,KACT,SAAS,gBACT,YAAY,SAAS,cAAc,IACnC,SAAS,GACT,WAAW,GAAK,GAAwB,IAAM,MAC9C,YAAY,IACV,GAAI,CACN,MAAO,IACL,EAAU,GACV,GAAU,GAAI,GACd,EACA,GAIJ,YAAqB,EAAU,EAAQ,EAAQ,EAAU,CACvD,OAAW,KAAQ,GAAU,CAC3B,GAAM,GAAM,GAAQ,GAClB,EAAO,EAAK,aAAa,KAAe,EAAK,aAAa,QAC5D,AAAK,GAAO,GAAmB,EAAQ,IACrC,EAAO,OAAO,EAAM,EAAS,IAGjC,MAAO,GAGT,YAAiB,EAAM,CACrB,GAAI,EAAK,aAAa,IAAc,MAAO,GAAK,aAAa,IAC7D,OAAQ,EAAK,UACN,QACH,MAAO,GAAK,QAAU,EAAK,MAAQ,SAChC,WAGH,MAAK,GAAK,QACH,EAAK,aAAa,SACrB,EAAK,MACL,GAHsB,WAM1B,MAAO,QAAO,EAAK,OAAO,QAAQ,SAAU;AAAA,IAIlD,GAAM,IAAqB,IACzB,GAAc,IAAI,WAAW,QAAQ,SAAU,UCnEjD,GAAI,IAAQ,GAEN,GAAe,CAAC,SAAU,YAAa,YACvC,GAAW,CAAC,WAAY,GAAG,IAEjC,OAAO,OAAO,IACd,OAAO,OAAO,IAEd,YAAwB,EAAM,EAAK,CACjC,AAAI,MAAO,GAAK,IAAQ,aAAa,IAAM,GAAO,EAAK,IAGlD,YAAiB,EAAM,CAC5B,GAAe,EAAM,WACrB,GAAe,EAAM,YACrB,GAAe,EAAM,sBACrB,GAAe,EAAM,mBACrB,GAAe,EAAM,iBACrB,GAAe,EAAM,aACrB,GAAe,EAAM,aACrB,GAAe,EAAM,UACrB,GAAe,EAAM,WACrB,GAAe,EAAM,oBACrB,GAAe,EAAM,mBACrB,GAAe,EAAM,cACrB,GAAe,EAAM,YACrB,GAAe,EAAM,gBACrB,GAAe,EAAM,YACrB,GAAI,GAAU,GAAO,WACrB,AAAI,MAAO,IAAY,UAAU,IAAM,QAAa,EAAQ,MAAM,MAG7D,YAAgB,EAAQ,EAAK,CAClC,MAAO,GAAE,OAAO,GAAI,GAAO,GAAK,GASlC,YAAmB,EAAK,CACtB,MAAK,GACL,GAAI,QAAQ,SAAU,EAAK,CACzB,MAAO,IAAM,KAER,IAJW,GAAQ,GAO5B,YAAiB,EAAM,EAAY,GAAI,UAAY,EAAK,CACtD,WAAgB,EAAK,CAEnB,AAAI,AADQ,GAAO,EAAK,KACZ,QAAW,EAAU,OAAO,EAAK,GAAO,EAAK,IAE3D,MAAI,OAAM,QAAQ,GAChB,EAAK,QAAQ,GAEb,EAAO,GAEF,EAGT,YAAiB,EAAM,EAAK,CAE1B,MAAO,AADK,IAAQ,EAAM,GAAI,iBAAmB,GACtC,WAGb,GAAO,GAAQ,CACb,WACA,WACA,UACA,aACA,WACA,YACA,iBCtEK,GAAM,IAAa,IACxB,EAAK,IAAI,aAAe,QAAQ,EAAK,OAAO,cAEjC,GAAQ,IAAM,CAEzB,GADI,CAAC,MACD,CAAC,UAAU,WAAY,OAC3B,GAAM,GAAO,CACX,mBACA,EAAK,QAAQ,EAAK,UAClB,WACA,MAEC,OAAO,SACP,KAAK,KAEF,EAAM,GAAI,iBAAgB,GAEhC,UAAU,WAAW,UAAW,IAGlC,aAA0B,CAExB,AAAI,cAAgB,QAClB,OAAO,iBAAiB,WAAY,IAEpC,OAAO,iBAAiB,SAAU,GAAO,IAItC,aAA6B,CAElC,AAAI,cAAgB,QAClB,OAAO,oBAAoB,WAAY,IAEvC,OAAO,oBAAoB,SAAU,GAAO,IAIhD,KCxBO,GAAM,IAAkB,IAAM,CACnC,EAAK,IAAI,mBACT,EAAK,MAAM,iBAGA,GAAe,IAAM,CAChC,EAAK,MAAM,mBACX,EAAK,IAAI,iBAGX,EAAE,UAAY,CACZ,GAAI,GAAc,EAClB,GAAI,CAEF,AAAI,OAAO,OAAO,SAAS,MACzB,GAAe,OAAO,OAAO,SAAS,KAAK,UAAU,MACnD,+BAEE,GAAc,GAAQ,EAAa,KAAO,eAEhD,CACA,EAAQ,GAEV,AAAI,EACF,KAEA,KAEF,EAAE,SAAS,MAAM,GAAG,uBAAwB,UAAY,CACtD,OAEF,EAAE,SAAS,MAAM,GAAG,UAAW,SAAU,EAAG,CAC1C,AACE,GAAE,MAAQ,OACV,EAAE,OAAO,QAAQ,iDAEjB,SCnDC,GAAM,IAAO,CAClB,IAAK,SAAU,EAAS,CACtB,GAAI,GAAS,SAAS,eAAe,YACrC,AAAI,GAAQ,GAAO,UAAY,QAAU,EAAU,YAO1C,GAAsB,UAAY,CAC7C,GAAI,GAAO,GACX,MAAO,WAA8B,CACnC,GAAI,GAAQ,EAEZ,GAAI,GAAQ,CAAE,qBAAsB,SAAS,CAC3C,EAAO,GACP,OAGF,EAAE,UAAU,GAAG,OAAQ,+BAAgC,UAAY,CACjE,GAAK,IAAI,MAGX,WAAqB,EAAS,EAAU,CACtC,GAAI,CACF,GAAI,GACF,SAAS,cAAc,UAAU,MAAM,KAAK,QAAQ,iBACpD,QACF,EAGF,GAAI,EAAS,CACX,GAAI,GAAU,CACZ,EAAE,mBAAmB,OACrB,EAAE,mCAAmC,OACrC,EAAE,kCAAkC,QACpC,KAAK,KACP,GAAK,IAAI,EAAU,KAAO,EAAE,2BAIhC,EAAS,SAAS,eAAe,qBAE7B,GACF,GAAW,GAAI,QAAO,iBAAiB,GACvC,EAAS,QAAQ,EAAQ,CAAE,WAAY,KACvC,EAAO,QCpDb,GAAI,IAAc,UAAY,CAC5B,GAAI,GAAY,CACd,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,QACL,IAAK,UAEH,EAAK,GAAI,QAAO,WAAa,KACjC,MAAO,UAAoB,EAAQ,CACjC,MAAO,QAAO,GAAQ,QAAQ,EAAI,SAAU,EAAG,CAC7C,MAAO,GAAU,SCTvB,GAAI,IAKJ,YAAgB,EAAU,CAAE,UAAW,GAAO,KAAM,IAAS,EAAc,CACzE,GAAI,EAAC,EACL,IAAI,GAAO,EAAa,SAAW,EACjC,EAAU,IACZ,AACE,MAAO,UAAY,aACnB,SACA,MAAO,SAAQ,OAAU,YAEzB,QAAQ,MAAM,GAChB,GAAU,CAAE,eAAc,WAC1B,EAAK,IAAI,cACT,AAAI,EAAQ,KACV,SACG,iBAAiB,oBACjB,QAAQ,GAAS,EAAK,UAAY,GAErC,SACG,iBAAiB,oBACjB,QAAQ,GAAS,EAAK,YAAc,GAEpC,EAAQ,WACX,OAAO,WAAW,EAAK,MAAM,KAAK,EAAM,cAAe,u5DCzB3D,EAAK,KAAO,OAAO,OACjB,CACE,SAAU,GACV,gBAAiB,GACjB,cAAe,IAEjB,EAAK,MAGP,YAAoB,EAAI,EAAQ,CAC9B,AAAI,GAAQ,GAAK,EAAK,IAEtB,WAAc,EAAM,EAAU,CAE5B,GADI,IAAO,QACP,IAAS,OAAW,MAAO,GAG/B,OAFI,GAAQ,EAAK,MAAM,KAAK,OAAO,SACjC,EAAO,EACF,EAAI,EAAM,GAAI,IACnB,EAAO,EAAK,EAAM,SAEpB,MAAI,GAAM,SAAW,EAAU,EACxB,EAGT,MAAO,GC5BF,GAAM,IAAgB,GAC3B,EAAE,WAAW,YAAc,EAAE,WAAW,YACpC,EACA,CAAC,EAAK,UAAW,GAAG,OAAO,SAAS,KAAK,KCH/C,GAAI,IAAI,OAYJ,EAAO,CACT,KAAM,GACN,KAAM,KACN,UAAW,KAEX,eAAgB,CACd,SAAU,OACV,KAAM,OACN,IAAK,SACL,MAAO,GACP,MAAO,GACP,QAAS,GACT,MAAO,IAGT,KAAM,SAAU,EAAS,CACvB,GAAM,GAAW,OAAO,OAAO,GAAI,EAAK,eAAgB,EAAS,CAC/D,IAAK,GAAc,EAAQ,KAAO,EAAK,eAAe,OAExD,UAAE,UAAU,QAAQ,aAAc,GAC3B,GAAE,KAAK,IAGhB,QAAS,SAAU,EAAK,CACtB,SAAK,MAAQ,EAAK,KAAK,QACvB,EAAK,KAAO,EAAK,KAAK,GACf,EAAK,MAGd,QAAS,UAAY,CACnB,EAAK,KAAO,GACZ,GAAE,mBAAmB,KAAK,WAAY,MAa1C,GAAE,SAAW,SAAU,EAAK,EAAM,CAChC,MAAO,GAAK,KAAK,CAAE,IAAK,EAAK,KAAM,KAcrC,YAAqB,EAAM,EAAK,CAC9B,EAAK,UACL,GAAE,UAAU,QAAQ,eAAgB,EAAM,GAC1C,AAAI,EAAK,eAAiB,OACpB,EAAK,aAAe,SAEtB,GACE,CAAE,KAAM,GAAO,UAAW,IAC1B,EAAE,yDAGD,AAAI,GAAE,KAAK,EAAK,gBAAkB,GACvC,GACE,CAAE,KAAM,GAAO,UAAW,IAC1B,EAAE,yDAGJ,GACE,CAAE,KAAM,GAAM,UAAW,IACzB,UACE,GAAW,GACX,+BAEA,GAAW,EAAK,cAChB,UAiBD,GAAM,IAAiB,OAAO,+BAM/B,GAAW,OAAO,oBAoBxB,kBAAyB,EAAM,EAAQ,EAAK,CAC1C,AAAI,QAAO,GAAI,cAAiB,aAI9B,IAAE,UAAU,QAAQ,kBAAmB,EAAI,cAE3C,GAAE,UAAU,QAAQ,mBAAoB,GACpC,EAAK,KACT,MAAM,GAAK,IAEX,GAAE,UAAU,QAAQ,gBAAiB,GACjC,EAAK,MACT,MAAM,GAAK,IAGX,GAAE,UAAU,QAAQ,oBAAqB,GACrC,EAAK,MACT,MAAM,GAAK,IAGX,GAAE,UAAU,QAAQ,qBAAsB,GACtC,EAAK,OC/JN,GAAM,IAAa,IAAM,EAAK,IAAI,aCEzC,YAAa,EAAS,CAEpB,GADA,EAAU,GAAW,GACjB,EAAQ,aAAc,CAYxB,GAAI,GAAO,OAAO,SAAS,SAAS,MAAM,KACxC,EAAW,EAAK,OAAS,aACzB,EACE,OAAO,SAAS,OAChB,EAAK,OAAO,GAAU,KAAK,KAC3B,IACA,EAAE,MAAM,CAAE,KAAM,EAAQ,OAC1B,EAAS,EAAQ,aAAa,MAAM,KAAK,GAC3C,KAAK,OAAS,OAAO,OAAO,GAAI,EAAQ,YAAa,CACnD,YACA,OAAQ,EAAQ,OAEhB,MAAO,EAAQ,QAEjB,KAAK,IAAM,EAAS,IAAM,EAAE,MAAM,KAAK,QACvC,KAAK,MAAQ,MAEb,MAAK,OAAS,EAAE,OAAO,EAAE,aAAc,CAAE,IAAK,SAC9C,KAAK,MAAQ,EAEf,MAAO,MAGT,GAAI,UAAU,aAAe,UAAY,CACvC,GAAI,CAAC,KAAK,MAAO,KAAM,mCACvB,AAAI,KAAK,QAAU,EACjB,MACA,OAAO,SAAS,KAAO,KAAK,KACnB,KAAK,QAAU,GACxB,EAAE,SAAS,cAAe,KAAK,QAAQ,KAAK,KC/BzC,GAAM,IAAa,GAAQ,CAChC,GAAW,EAAK,YAChB,GACE,GAAW,EAAK,eAChB,GAAK,EAAK,cAAe,OAAQ,GAAM,EAAG,KAAK,QAItC,GAAY,EAAK,WAEjB,GAAU,GACrB,EAAO,OAAQ,SACf,EAAO,cAAe,UAGX,GAAW,GACtB,EAAO,cAAe,SACtB,EAAO,cAAe,aAGX,GAAS,EAAO,OAAQ,aAExB,GAAY,GAAO,GAAS,IAE5B,GAAY,EAAO,cAAe,WAElC,GAAa,GAAW,GAAO,GAAW,KAE1C,GAAa,GACxB,GACA,GACE,GAAO,EAAI,oBAAqB,EAAK,oBAAqB,EAAK,aAC/D,EAAO,UAAW,MAIT,GAAgB,GAC3B,GAAO,GAAY,EAAO,UAAW,KACrC,GACA,GAAQ,CACN,EAAI,WACJ,EAAI,WACJ,GAAK,EAAI,aAAc,GAAW,EAAO,YAAa,KACtD,EAAK,WACL,EAAQ,GAAK,IAAM,SAAU,GAAM,EAAK,kBAI/B,GAAgB,GAC3B,OAAO,QAAQ,GAAM,OACnB,CAAC,EAAK,CAAC,EAAK,KAAW,EAAM,IAAI,MAAQ,GAAW,MACpD,IAGS,GAAa,CAAC,EAAK,IAC9B,OAAO,QAAQ,GAAM,QAAQ,CAAC,CAAC,EAAK,KAAW,EAAI,aAAa,EAAK,IAE1D,GAAW,GACtB,OAAO,EAAU,cAAc,QAAQ,aAAc,OCzDvD,GAAM,IAAmB,CACvB,eAAgB,cAChB,QAAS,eACT,MAAO,cACP,eAAgB,cAChB,WAAY,cACZ,SAAU,cACV,QAAS,cACT,UAAW,cACX,IAAK,gBAGD,GAAW,EACf,GAAe,GAAiB,IAAgB,GAAiB,IACjE,EAAK,gBAGD,GAAU,EAAQ,GAAO,EAAE,GAAM,IAEjC,GAAgB,EACpB,GAAO,EAAE,GACT,GAAO,EAAI,QAAQ,UAAW,YAC9B,IAEW,GAAW,EACtB,GACE,EAAK,YACL,GACE,EAAM,kBACN,EAAQ,GAAK,EAAE,MAAM,EAAG,GAAG,cAAgB,EAAE,MAAM,GAAI,EAAK,eAGhE,GACE,EAAK,YACL,GAAM,EAAM,mBAAoB,EAAQ,GAAS,EAAK,eAExD,GACE,EAAK,YACL,GAAM,EAAM,mBAAoB,EAAQ,GAAS,EAAK,eAExD,GAAM,EAAM,YAAa,GAAO,GAAK,CAAC,WAAY,aAAc,KAChE,GACE,GAAQ,CAAC,WAAY,aACrB,EAAQ,EAAM,KAAM,EAAE,KAAM,SAAO,EAAM,KAAM,EAAE,KAAM,UACvD,EAAQ,EAAM,KAAM,IAAK,EAAM,KAAM,MAEvC,GACE,EAAM,gBACN,EAAQ,GAAK,EAAE,MAAM,EAAG,GAAG,cAAgB,EAAE,MAAM,GAAI,EAAK,YAE9D,GACE,GAAQ,CAAC,WAAY,aACrB,GACE,EAAM,UACN,EACE,GAAO,GAAO,GAAG,GACjB,GAAK,CACH,GACA,EAAQ,GAAa,EAAE,aAAa,GAAK,CAAC,WAAY,kBAI5D,GAAM,EAAM,UAAW,MCvD3B,KAAK,UAAU,kBAAoB,UAAY,CAC7C,GAAI,GAAQ,KAAK,WACb,EAAU,KAAK,aACnB,MAAI,GAAQ,IAAI,GAAQ,IAAM,GAC1B,EAAU,IAAI,GAAU,IAAM,GAC3B,EAAQ,IAAM,GAEvB,GAAM,IAAa,wBACjB,GAAa,4BACb,GACE,sDA2BE,GAAO,IAAI,IAAS,GAAI,MAAK,GAAG,GAEzB,GAAY,GAAK,CAC5B,CAAC,GAAO,GAAI,IAAG,IACf,CAAC,GAAO,QAAY,IACpB,CAAC,GAAO,IAAK,IACb,CACE,GAAK,IAQL,GAAK,GAAM,IAAa,GAAM,GAAK,GAAS,CAAC,IAAK,IAAM,GAAM,MAEhE,CAAC,GAAK,IAA0B,IAChC,CAAC,GAAK,IAAa,GAAK,GAAM,IAAa,GAAK,CAAC,IAAK,SAAU,KAChE,CACE,GACA,GAAS,CACP,KAAM,2BAA2B,QAK1B,GAAiB,GAC5B,EAAO,QAAQ,iCAAkC,WAS5C,YAAmB,EAAO,CAAE,QAAS,IAAS,EAAO,CAC1D,GAAM,GAAW,EAAE,WAAW,UAAU,WAClC,EAAa,EAAE,WAAW,WAAW,KAAK,EAAE,YAClD,GAAI,GAAM,EAAS,EACnB,GAAI,CAAC,EAAK,SAAW,EAAM,SAAW,GACpC,MAAO,GAET,GAAM,GAAW,EAAK,UAAY,GAClC,GAAI,CACF,EAAO,GAAY,EAAU,QAC7B,CAEA,KAAM,IACJ,EAAS,gBAAkB,EAAE,gBAC7B,EAAQ,EAAM,QAAS,GAAQ,IAAU,IAG7C,GAAI,IAAS,KAAM,CACjB,GAAI,EAAK,QACP,KAAM,IACJ,EAAS,aAAe,EAAE,iBAC1B,EAAQ,EAAM,QAAS,GAAQ,IAAU,IAG7C,MAAO,GAGT,GADC,EAAU,GAAU,EAAK,SAAY,EAAU,GAAU,EAAK,SAC3D,CAAE,IAAW,GAAU,MAAO,GAClC,GAAM,GAAW,EAAW,EAAU,GACpC,EAAW,EAAW,EAAU,GAC5B,EAAe,EACnB,GAAU,CACR,QACA,QAAS,EACT,QAAS,IAEX,IACA,GACF,GAAI,CACF,GAAI,GAAW,CAAC,GAAW,EAAO,EAChC,KACE,GAAS,sBACT,EAAE,0CAED,GAAI,GAAW,GAAY,GAAO,GAAW,EAAU,GAC1D,KACE,GAAS,mBACT,EAAE,mDAED,GAAI,GAAW,CAAC,GAAW,EAAU,EACxC,KACE,GAAS,qBACT,EAAE,+CAEC,EAAP,CACA,KAAM,IAAO,EAAG,GAElB,MAAO,GAGF,GAAM,IAAc,CAAC,EAAQ,IAAU,CAC5C,GAAI,GACJ,GAAI,CACF,EAAO,EAAE,WAAW,UAAU,EAAQ,QACtC,CACA,GAAM,GAAkB,EAAO,QAAQ,UAAW,IAAI,QAAQ,KAAM,QAClE,EAAQ,EAAM,QAAQ,UAAW,IACnC,EAAO,GAAI,MACX,GAAM,GAAY,EAAgB,QAAQ,QAEpC,EAAa,IAAc,EAAI,EAAM,OAAS,EAAI,EACpD,EAAO,OAAO,EAAM,OAAO,EAAW,EAAI,IAC9C,GAAI,GAAQ,GAAI,CACd,GAAM,GAAa,OAAO,UACxB,EAAE,WAAW,UAAU,iBAErB,EAAE,WAAW,UAAU,gBACtB,EAAK,UAAY,IAClB,OAAO,EAAE,WAAW,UAAU,iBAK5B,EAAW,EAAK,cAAgB,KAAQ,EAC9C,AAAI,GAAQ,EACV,GAAQ,EAAU,IAElB,GAAS,GAAU,GAAK,IAG5B,GAAM,GAAQ,KAAK,IACjB,EACA,OAAO,EAAM,OAAO,EAAgB,QAAQ,MAAQ,EAAY,IAAM,GAElE,EAAM,OACV,EAAM,OAAO,EAAgB,QAAQ,MAAQ,EAAY,IAK3D,GAHA,EAAK,YAAY,GACjB,EAAK,SAAS,GACd,EAAK,QAAQ,GAEX,EAAK,gBAAkB,GACvB,EAAK,aAAe,GACpB,EAAK,YAAc,EAEnB,KAAM,eAGV,MAAO,IAGI,GAAe,GAAM,CAChC,GAAI,GACJ,GAAI,CACF,EAAO,GAAY,EAAE,WAAW,UAAU,WAAY,EAAG,OAAO,YAChE,SAEA,CACA,AAAI,GACF,GAAG,OAAO,MAAQ,GAChB,EAAE,WAAW,WAAW,EAAE,WAAW,UAAU,WAAY,OAMtD,GAAa,UAAY,CACpC,GAAI,GAAM,GAAI,MACV,EAAQ,EAAI,SAAS,EAAG,EAAG,EAAG,GAC9B,EAAU,IAAO,GAAK,GAAK,GAC3B,EAAS,EAAQ,EACjB,EAAW,EAAI,UACf,EAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAAO,IACjE,SAAU,EAAK,CACb,MAAO,GAAE,KAGT,EAAe,CACjB,MACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,OACA,IAAI,SAAU,EAAO,CACrB,MAAO,GAAE,KAEX,WAAiB,EAAI,CACnB,MAAO,GAAK,GAAS,EAAK,EAE5B,WAAqB,EAAI,CACvB,MAAO,GAAQ,GAAM,EAAK,EAAQ,EAEpC,WAAoB,EAAI,CACtB,MAAO,GAAK,EAAQ,EAAU,EAEhC,WAAoB,EAAM,CACxB,MAAO,IAAY,EAAK,UAE1B,WAAmB,EAAM,CACvB,GAAI,CAAE,aAAgB,OAAO,KAAM,wBACnC,GAAI,GAAK,EAAK,UACV,EAAK,GAET,MADA,GAAK,EAAK,oBACN,EAAQ,GACH,EAEL,EAAY,GACP,EAAE,aAAe,KAAO,EAE7B,EAAW,GACN,EAAW,EAAK,UAAY,IAAM,EAGzC,EAAK,UACL,IACA,EAAa,EAAK,YACjB,GAAW,GAAQ,GAAK,IAAM,EAAK,eACpC,KACA,EAGJ,MAAO,MC3RF,GAAM,IAAa,GAAK,CAAC,YAAa,OAAQ,eAExC,GAAiB,EAAQ,GAAK,GAAO,IAE5C,GAAsB,EAC1B,GAAS,IAAU,GACnB,GAAK,CAAC,YAAa,OAAQ,yBAGvB,GAAe,EACnB,GAAS,IAAU,GACnB,GAAK,CAAC,YAAa,OAAQ,kBAGhB,GAAa,GAAO,GAAc,IAElC,GAAe,GAAO,GAAY,ICnB/C,GAAM,IAAW,GAEV,YAAwB,EAAS,CACtC,GAAS,EAAQ,MAAQ,EAEpB,YAAmB,EAAM,CAC9B,MAAO,IAAS,GCElB,GAAM,IAAW,GAGjB,GAAS,OAAS,SAAU,EAAS,EAAS,EAAS,EAAW,CAChE,GAAI,CAAC,EAAQ,IAAI,GAAI,OACrB,GAAM,GAAS,EAAQ,MAEjB,EAAU,OAAO,KAAK,GACtB,EAAa,GAAU,EAAQ,aAmDrC,GAlDA,EAAQ,WAAW,CAAC,cAGhB,EAAI,eAAgB,IACtB,GAAQ,YAAY,kBAAmB,QAAQ,EAAQ,eACvD,EAAQ,YAAY,kBAAmB,CAAC,EAAQ,eAI9C,EAAI,cAAe,GAAW,IAChC,EAAQ,KAAK,cAAe,EAAQ,aAIlC,EAAI,UAAW,IACb,GAAQ,aAAe,uCACzB,EAAQ,KAAK,cAAe,CAAC,EAAQ,SACvC,EAAQ,KAAK,eAAgB,EAAQ,SAErC,AAAI,EAAQ,QACV,OAAO,WAAW,UAAY,CAC5B,EAAQ,WAAW,WAClB,IAEH,OAAO,WAAW,UAAY,CAC5B,EAAQ,KAAK,SAAU,CAAC,EAAQ,UAC/B,KAKH,EAAI,QAAS,IACX,GAAa,IAWX,EAAW,UACb,EAAW,SAAS,EAAQ,IAAI,GAAI,EAAQ,MAAO,EAAW,GAOlE,GAAQ,CAAC,EAAI,YAAa,EAAI,oBAAqB,EAAI,YAAa,GACpE,CACA,GAAM,GAAW,GAAW,GAC5B,AAAI,MAAO,GAAW,YAAe,WACnC,EAAW,WAAW,EAAQ,IAAI,GAAI,GAEtC,EAAQ,KAAK,WAAY,GA6D7B,GAxDI,EAAI,UAAW,IACjB,GAAQ,KAAK,MAAO,EAAQ,SACxB,EAAQ,cAAgB,kBACtB,EAAQ,SACV,EAAQ,WAAW,SAAU,UAAW,GAAU,EAAQ,WAM5D,EAAI,UAAW,IACjB,GAAQ,KAAK,MAAO,EAAQ,SACxB,EAAQ,cAAgB,kBACtB,EAAQ,SACV,EAAQ,WAAW,SAAU,UAAW,GAAU,EAAQ,WAM5D,EAAI,YAAa,IACnB,CAAI,EAAQ,YAAc,EAAG,EAAQ,WAAW,aAC3C,EAAQ,KAAK,YAAa,EAAQ,YAIrC,IAAW,EAAQ,OACrB,GAAQ,SAAS,+BACjB,EAAQ,QAAQ,SAAU,CAAE,iBAAkB,KAC9C,KAAK,WAAW,UAAY,CAC1B,EAAQ,YAAY,gCACnB,MAID,EAAI,UAAW,IACjB,CAAI,MAAO,GAAW,YAAe,WACnC,EAAW,WAAW,EAAQ,IAAI,GAAI,EAAQ,SAE9C,EAAQ,KAAK,gBAAiB,EAAQ,SAExC,AAAI,EAAQ,QACV,EAAQ,SAAS,WAEjB,EAAQ,YAAY,YAIxB,AAAI,GAAc,GAChB,GAAQ,KAAK,oBAAqB,GAAG,EAAQ,aAC7C,EAAQ,SAAS,gBAEjB,GAAQ,WAAW,qBACnB,EAAQ,YAAY,gBAGlB,EAAQ,OAAS,EAAG,CACtB,GAAM,GAAQ,GAAI,aAAY,oBAAqB,CACjD,OAAQ,CAAE,UAAS,WACnB,QAAS,KAEX,EAAQ,IAAI,GAAG,cAAc,GAC7B,EAAE,UAAU,QAAQ,aAAc,CAAC,EAAS,EAAS,MAIzD,EAAE,GAAG,OAAO,CACV,cAAe,SAAU,EAAU,EAAW,CAC5C,MAAO,MAAK,KAAK,UAAY,CAC3B,GAAM,GAAQ,EAAE,MACd,EAAU,EAAM,KAAK,WACvB,GACE,OAAS,GACT,CAAC,EAAK,oBAAqB,GAAU,EAAQ,cAG7C,MAAO,MAET,GAAI,CAAC,EAAS,KAAuC,GACrD,GAAM,GAAK,EAAQ,GACjB,EAAS,EAAS,KAAK,SAAU,EAAG,CAClC,MAAO,GAAE,KAAO,IAGlB,EAAU,GACV,EAAQ,CACN,YACA,eACA,UACA,UACA,UACA,WACA,mBACA,cACA,YACA,aACA,YACA,UACA,QACA,UACA,QAOJ,GAAI,MAAO,IAAW,YACpB,MAAO,MAGT,OAAS,KAAK,GACZ,AAAI,EAAQ,EAAM,MAAQ,EAAO,EAAM,KACrC,GAAQ,EAAM,IAAM,CAAE,KAAM,EAAQ,EAAM,IAAK,GAAI,EAAO,EAAM,KAChE,EAAQ,EAAM,IAAM,EAAO,EAAM,KAIrC,UAAS,OAAO,EAAO,EAAS,EAAS,GAClC,UCtMb,GAAM,IAAQ,GAAI,KAOX,GAAM,IACX,GACA,IAAI,IAAS,CACX,AAAI,GAAM,IAAI,IAAM,GAAM,IAAI,GAAK,GAAG,ICU1C,GAAM,IAAoB,GAAW,EAAM,kBAa3C,YAAkB,EAAS,EAAO,EAAQ,CACxC,EAAQ,OAAS,EACjB,GAAI,GAAU,GACV,EACE,EAAU,EAAM,SAAW,GAAW,IAAY,GAExD,GAAI,EAAQ,KACV,SAAE,GAAQ,OAAO,EAAQ,MAClB,EAAQ,KAOjB,GALI,EAAQ,EAAI,SAAU,IAAW,EAAQ,cAC3C,EAAQ,GAAM,EAAG,GAAU,EAAK,SAAU,IAAW,EAAQ,aAE3D,EAAQ,UAAU,GAAQ,iBAAmB,EAAQ,UAErD,EAAQ,KACV,OAAS,KAAK,GAAQ,KACpB,AAAI,GAAK,EAAI,GAAI,EAAQ,GAAK,GAAO,EAAK,KAAK,EAAQ,OACrD,GAAQ,QAAU,GAAK,OAAO,EAAQ,KAAK,KAOjD,GALI,EAAQ,UACV,GAAQ,sBAAwB,OAAO,KAAK,EAAQ,UACjD,IAAI,GAAK,EAAE,QAAQ,MAAO,MAC1B,KAAK,MAEN,EAAQ,KACV,OAAS,KAAK,GAAQ,KACpB,AAAI,EAAI,EAAG,EAAQ,OAAO,GAAQ,QAAU,GAAK,EAAQ,KAAK,IAGlE,AAAI,EAAQ,MACV,GAAQ,KAAU,EAAQ,MAG5B,GAAM,GAAO,GAAU,EAAQ,aAC/B,GAAI,CAAC,EACH,eAAQ,KAAK,4BAA4B,EAAQ,eAC1C,KAET,GAAM,GAAU,EAAK,QAIrB,GAHA,EAAU,EAAK,QAAQ,EAAS,EAAS,GAEzC,EAAQ,aAAe,EAAQ,YAC3B,EACF,EAAS,EAAE,IAAM,EAAU,IAAM,GAAc,GAAW,cAE1D,EAAS,EAAE,EAAK,OAAO,EAAS,EAAO,IACnC,CAAC,EAAQ,MAAO,MAGtB,AAAI,EAAQ,WACV,EAAO,SAAS,EAAQ,WAE1B,EAAQ,KAAO,EACf,EAAQ,KAAO,EAAO,IAAI,GAEtB,GAAQ,EAAK,SAYf,EAAK,OAAO,EAAS,EAAQ,GAK3B,EAAQ,IAEV,EAAO,KAAK,KAAM,EAAQ,IAExB,EAAQ,aAEV,EAAO,KAAK,UAAW,EAAQ,aAG7B,GAAQ,CAAC,WAAY,gBAAiB,IACxC,EACG,KAAK,mBAAoB,EAAQ,MACjC,KAAK,OAAQ,EAAQ,SAAS,cAC9B,KAAK,eAAgB,EAAQ,SAAS,cAG3C,EAAE,GAAQ,OAAO,GAKjB,EAAE,GAAQ,OAAO,KAGb,EAAQ,MACN,IAAS,EAAK,IAAI,YACtB,GAAQ,UAAU,EAAQ,EAAM,UAAW,EAAS,KAEtD,EAAO,KAAK,UAAW,GAKvB,GAAI,GAAW,CACX,YACA,UACA,UACA,UACA,eACA,WACA,YACA,aACA,YACA,eAEF,EAAgB,GAElB,OAAS,KAAM,GACb,AAAI,EAAI,EAAS,GAAK,IACpB,GAAc,EAAS,IAAO,CAAE,GAAI,EAAQ,EAAS,MAGzD,MAAI,GAAI,UAAW,IAAY,EAAQ,UAAY,IACjD,GAAc,QAAa,CAAE,GAAI,KAInC,EAAO,KAAK,SAAU,GAElB,GAAQ,EAAK,aACf,EAAK,YAAY,EAAQ,GAGvB,GAAW,IACb,GAAgB,GAId,EAAQ,eACV,EAAO,SAAS,GAAS,EAAQ,gBAQ/B,EAAQ,eAAmB,QAC7B,GAAE,GAAQ,KAAK,OAAQ,EAAQ,MAC/B,EAAE,KAAK,EAAQ,KAAS,SAAU,EAAG,EAAK,CACxC,EAAO,SAAS,aAAe,MAInC,GAAS,OAAO,EAAQ,EAAS,GAE1B,EAGT,YAAoB,EAAS,CAC3B,MACE,GAAQ,UACR,EAAQ,WACP,GAAkB,yBAA2B,IAC5C,EAAQ,EAAK,aAAc,IAAW,EAAQ,cAC/C,EAAQ,aACP,GAAkB,4BAA8B,IAChD,EAAQ,EAAK,aAAc,IAAW,EAAQ,aAIpD,YAAyB,EAAQ,CAC/B,GAAI,GAAU,EAAO,KAAK,WACxB,EAAW,EAAQ,SACnB,EAAY,EAAQ,UAClB,EAAS,EAAO,KAAK,UACrB,EAAU,OACd,AAAI,EAAO,IAAI,GAAG,WAAa,OAAO,GAAU,OAChD,EAAO,QACL,IACE,EACA,qBACA,EAAQ,YACR,6BACA,EACA,KAEJ,EAAS,EAAO,SAChB,EAAO,KAAK,SAAU,GACtB,EAAO,KAAK,CACV,QAAS,EACT,KAAM,EAAQ,cAEZ,GACF,EAAO,QACL,kDACE,GAAW,GACX,WAEF,EAAQ,aAAe,GAAkB,2BAC3C,GACG,IAAI,GACJ,aACC,mBAEG,IAAO,IAAI,GAAG,aAAa,qBAAuB,IACnD,IAAI,EAAQ,mBACZ,QAEN,EAAO,OACL,0CACE,EAAQ,oBACQ,GAAW,EAAQ,wBAGrC,GACF,EAAO,OACL,mDACE,GAAW,GACX,WAIR,GAAM,IAAa,GAAO,EAAE,KAAK,EAAK,WCnQ/B,GAAM,IAAY,CACvB,MAAO,OACP,eAAgB,OAChB,WAAY,OACZ,SAAU,MACV,QAAS,MACT,UAAW,OCaN,YAAuB,EAAM,CAClC,GAAM,GAAQ,EAAE,GACd,EAAU,EAAM,KAAK,WACnB,EAAK,GACP,EACA,EACA,EACA,EAEF,GAAI,IAAY,OACd,KAAM,kBAGR,GAAI,EAAQ,UAAY,GACtB,MAAO,GAMT,GAJA,EAAW,GAAU,EAAQ,aAE7B,EAAM,EAAM,MAER,EAAQ,YACV,GAAK,GAAI,QAAO,EAAQ,YACpB,CAAC,EAAG,KAAK,IACX,KAAM,IACJ,EAAQ,UACR,EAAQ,EAAM,QAAS,GAAM,IAAU,IAG7C,GAAI,EAAQ,SACV,CAAI,IAAa,OACf,EAAK,EAAM,GAAG,kBACT,AAAI,IAAa,MAGtB,EAAK,IAAQ,MAAQ,IAAQ,GACxB,AAAI,EAAQ,aAAe,WAChC,EAAK,EAAM,GAAG,YACT,AAAI,EAAQ,cAAgB,OACjC,AAAI,EAAQ,aAAe,GAOrB,AANc,EAAQ,QAAQ,KAChC,GACE,EAAO,cAAe,eACtB,EAAO,cAAe,eAIxB,GAAK,EAAM,GAAG,mBAKhB,EAAK,EAAQ,MAAM,OAAS,GAAK,EAAQ,aAAe,GAG1D,GAAK,KACL,EAAK,EAAG,KAAK,IAEX,CAAC,GACH,KAAM,IAAK,CACT,CAAC,GAAK,CAAC,WAAY,gBAAiB,GAAK,CAAC,WAAY,iBACtD,CACE,EAAO,cAAe,kBACtB,EAAQ,GAAK,GAAW,EAAE,iBAAkB,GAAI,KAElD,CACE,GAAO,CAAC,MAAO,QAAQ,QAAQ,GAAY,IAC3C,EAAQ,GAAK,GAAO,EAAE,mBAAoB,GAAI,KAEhD,CAAC,GAAG,EAAQ,GAAK,GAAO,EAAE,kBAAmB,GAAI,OAChD,GAGP,GAAI,EAAQ,WAAa,EAAQ,UAAY,GAC3C,GAAK,EAAI,QAAU,EAAQ,UACvB,CAAC,GACH,KAAM,IACJ,GAAK,CAAC,WAAY,mBAAmB,IACnC,EAAE,6DACJ,GAAS,IAIf,MAAI,IAAU,EAAQ,aAAa,SAC1B,GAAU,EAAQ,aAAa,SAAS,EAAS,GAEnD,GC9FT,GAAM,IAAc,CAAC,WAAY,SACpB,GAAY,GAAK,IACjB,GAAY,GAAS,CAAC,WAAY,UAEzC,GAAmB,CAAC,EAAG,IAAM,EAAE,QAAU,EAAE,IAAM,EAAE,QAAU,EAAE,GAExD,GAAa,GAAU,IAE9B,GAAmB,GAAQ,GAAM,GAAK,KAAY,EAClD,GAAoB,CAAC,EAAK,IAAM,GAAiB,EAAE,QAAQ,IACpD,GAAY,GAAK,EAAE,OAAO,EAAG,GAAkB,IAAK,IACpD,GAAY,GAAK,EAAE,OAAO,GAAkB,IAAK,GAAK,GAE7D,GAAiB,CAAC,EAAG,IACzB,GAAiB,EAAG,IACnB,GAAU,IACT,GAAU,IACV,GAAU,GAAU,MAAQ,GAAU,GAAU,IAEvC,GAAa,GAAU,IAEvB,GAAe,GAC1B,GAAI,GAAkB,iBACtB,GAAO,SACP,IAGW,GAAa,GAAK,CAAC,YAAa,OAAQ,aAAc,OCrC5D,GAAM,IAAY,GAAK,EAAE,cAAc,QAAQ,aAAc,KCqC7D,GACL,IAAiB,iBACjB,GAAuB,uBACvB,GAAqB,qBACrB,GAAsB,sBACtB,GAA0B,0BAC1B,GAAiB,iBACjB,GAAuB,uBACvB,GAA2B,2BAC3B,GAAuB,uBACvB,GAA8B,8BAC9B,GAAyB,yBAErB,GAAe,EAClB,IAAiB,cACjB,IAAuB,eACvB,IAAqB,wBACrB,IAAsB,yBACtB,IAA0B,mCAC1B,IAAiB,yBACjB,IAAuB,YACvB,IAA2B,aAC3B,IAAuB,0BACvB,IAA8B,SAC9B,IAAyB,kCAsBtB,GAAc,GAAK,CAAC,YAAa,OAAQ,aAAc,UAEhD,GAAQ,GACnB,GAAO,EAAQ,EAAK,GAAU,IAAc,GAAK,EAAK,EAAS,KAC7D,GClDJ,GAAM,IAAa,GAAO,GAAM,CAC9B,YACA,OACA,aACA,aAGI,GAAY,GAAO,GAAM,CAC7B,YACA,OACA,aACA,cAGI,GAAY,GAChB,GAAO,EAAQ,EAAK,UAAW,IAAW,GAAO,CAC/C,YACA,aACA,IAGE,GAAe,EAAQ,GAAK,QAAS,IAAY,GAAW,IAG5D,GAAqB,EACzB,GAAK,GAAQ,IAA+B,EAC5C,GACA,EAAK,eAIM,GAAe,GAC1B,EACE,GACE,QACA,EACE,GAAK,KACL,GAAI,EAAQ,GAAK,GAAM,GAAU,EAAG,KACpC,GAAM,OAGV,GAAK,CAAC,WAAY,gBAGhB,GAAU,GAAK,EAAE,QAAQ,WAAY,KAErC,GAAkB,EAAQ,GAAK,GAAI,KACnC,GAAiB,GACrB,GAAI,GAAK,GAAY,KACrB,EAAQ,GAAI,EAAK,qBAAsB,GAAO,GAAK,GAAY,OAG3D,GAAgB,GACpB,GAAI,GAAK,GAAY,KACrB,EAAQ,GAAI,EAAK,YAAa,GAAO,GAAK,GAAY,OAGlD,GAAkB,EAAM,CAAC,EAAW,EAAI,EAAU,IAAQ,CAC9D,EAAI,UAAU,OAAO,EAAW,EAAG,MAG/B,GAAqB,GACzB,GAAQ,IAAwB,YAChC,IAEI,GAAkB,GACtB,GAAQ,IAAwB,SAChC,IAEI,GAAqB,GACzB,GAAQ,IAAwB,YAChC,IAGI,GAAoB,GACxB,GAAQ,IAA4B,YACpC,IAEI,GAAiB,GACrB,GAAQ,IAA4B,SACpC,IAEI,GAAoB,GACxB,GAAQ,IAA4B,YACpC,IAGW,GAAkB,CAAC,EAAU,EAAO,IAAU,GAAK,CAC9D,GAAI,GACE,EAAY,GAAa,GAE/B,MACE,IACC,GAAW,IACT,IAAU,IAAS,CAAC,GAAI,EAAO,cAAe,WAAW,IAE5D,GAAY,SAAS,cAAc,OACnC,EAAU,UAAY,GAAQ,IAC9B,EAAU,aAAa,GAAQ,IAAsB,GACrD,GAAgB,EAAG,GACnB,GAAmB,EAAG,GACtB,GAAmB,EAAG,GACtB,EAAU,iBAAiB,oBAAqB,CAAC,CAAE,YAAa,CAC9D,AAAI,EAAI,UAAW,EAAO,UACxB,GAAgB,EAAG,GAEjB,EAAI,WAAY,EAAO,UACzB,GAAmB,EAAG,GAEpB,EAAI,UAAW,EAAO,UACxB,GAAmB,EAAG,KAG1B,AAAI,EACF,GAAU,aAAa,GAAQ,IAAqB,GAAQ,IAC5D,EAAU,UAAU,IAAI,GAAQ,IAAwB,YACnD,AAAI,GAAK,GAAY,GAC1B,EAAU,UAAU,IAAI,GAAQ,IAAwB,cACnD,AAAI,EAAQ,GAAW,IAAM,GAClC,EAAU,UAAU,IAAI,GAAQ,IAAwB,YAC/C,EAAQ,GAAW,IAAM,IAClC,EAAU,UAAU,IAAI,GAAQ,IAAwB,UAG1D,EAAY,SAAS,yBAqBvB,AAlBgB,EACd,GACA,GACE,GACE,GACA,GAAI,GACF,EACE,GACE,GAAK,IAAM,GACX,IAAM,MAAO,GAAQ,SAAS,MAC9B,GAAU,EAAQ,SAAS,MAAQ,GAErC,IACA,EAAQ,SAAS,WAIzB,GACM,QACN,GAAK,CACH,CACE,GACA,EACE,GAAK,EAAU,YAAY,GAC3B,GAAgB,EAAU,EAAO,EAAQ,KAG7C,CACE,GAAI,IACJ,GAAY,CACV,GAAM,GAAS,GAAK,GAAY,GAC1B,EAAU,CACd,GAAQ,IACR,GAAG,GAAQ,OAAyB,EAAO,cAC3C,GAAmB,GACnB,GAAe,IAAyB,GACxC,EAAS,SAAW,GAAK,GAAQ,KACjC,OAAO,SACH,EAAM,SAAS,cAAc,OACnC,EAAI,aACF,GAAQ,IACR,EAAO,SAAW,GAAU,EAAO,aAAa,IAElD,EAAI,UAAY,EAAQ,KAAK,KAC7B,GAAe,EAAU,GACzB,GAAkB,EAAU,GAC5B,GAAkB,EAAU,GAC5B,EAAI,iBAAiB,oBAAqB,CAAC,CAAE,YAAa,CACxD,AAAI,EAAI,UAAW,EAAO,UACxB,GAAe,EAAU,GAEvB,EAAI,WAAY,EAAO,UACzB,GAAkB,EAAU,GAE1B,EAAI,UAAW,EAAO,UACxB,GAAkB,EAAU,KAGhC,EAAS,QAAQ,GAAK,EAAS,EAAG,EAAO,EAAE,KAC3C,EAAU,YAAY,KAG1B,CACE,IAAM,GACN,GAAI,GAAK,CACP,GAAM,GAAU,EAAS,EAAG,EAAO,EAAE,IACrC,AAAI,GACF,EAAQ,SAAS,GAAe,IAAyB,UAK5D,mBCpNH,GAAiB,WAA2C,aAU5D,GAAS,GACX,GAAa,aAAa,WAAY,CACpC,WAAa,GAAM,IAAA,OAoFnB,GAAS,OAAc,MAAK,SAAZ,IAAsB,MAAM,MAG5C,GAAc,IAAM,GAIpB,GAAa,IAAI,MAEjB,GAAI,SAGJ,GAAe,CAAC,EAAI,KAAO,GAAE,cAAc,GAI3C,GAAe,GACT,AAAV,IAAU,MAAyB,AAAA,MAAT,IAAS,UAA4B,AAAA,MAAT,IAAS,WAC3D,GAAU,MAAM,QAChB,GAAc,GAAA,CAAA,GAAA,GAClB,MAAA,IAAQ,IAEqC,AAAA,MAAA,CAAA,GAArC,KAAqC,MAArC,AAAA,IAAA,OAAA,OAAA,EAAgB,OAAO,YAAc,YAoBzC,GAAe,sDAKf,GAAkB,OAIlB,GAAmB,KAwBnB,GAAc,oFASd,GAA0B,KAC1B,GAA0B,KAO1B,GAAiB,+BAsDjB,GAA6B,GAAkB,CACnD,KACG,IAAA,EAEH,WAAA,EACA,QAAA,EACA,OAAA,IAOW,GAAO,GAhEA,GAsEP,GAAM,GArEA,GA2EN,GAAW,OAAO,IAAI,gBAKtB,GAAU,OAAO,IAAI,eAS5B,GAAgB,GAAI,SA0Bb,GAAS,CACpB,EACA,EACA,IAAA,CAAA,GAAA,GAAA,EAEA,GAAM,GAAA,AAAA,GAAgB,AAAA,GAAA,KAAA,OAAA,EAAS,gBAAzB,MAAyB,AAAA,IAAA,OAAA,EAAgB,EAE3C,EAAmB,EAAsB,WAC7C,GAAA,AAAI,IAAJ,OAAwB,CACtB,GAAM,GAAA,AAAA,GAAU,AAAA,GAAA,KAAA,OAAA,EAAS,gBAAnB,MAAmB,AAAA,IAAA,OAAA,EAAgB,KAExC,EAAsB,WAAa,EAAO,GAAI,IAC7C,EAAU,aAAa,KAAgB,GACvC,EAAA,OAEA,GAIJ,MADA,GAAK,EAAW,GACT,GAWH,GAAS,GAAE,iBACf,GACA,IACA,KAAA,IAiCI,GAAkB,CACtB,EACA,IAAA,CAQA,GAAM,GAAI,EAAQ,OAAS,EAIrB,EAAuC,GAMzC,EALA,EApMa,AAoMN,IApMM,EAoMgB,QAAU,GASvC,EAAQ,GAEZ,OAAS,GAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,GAAM,GAAI,EAAQ,GAOd,EAEA,EAHA,EAAA,GAEA,EAAY,EAKhB,KAAO,EAAY,EAAE,QAEnB,GAAM,UAAY,EAClB,EAAQ,EAAM,KAAK,GACL,AAAV,IAAU,OAGd,EAAY,EAAM,UACd,IAAU,GACiB,AAAzB,EA3RU,KA2Re,MAC3B,EAAQ,GAAA,AACC,EA7RG,KA4RJ,OAGR,EAAQ,GAAA,AACC,EA/RF,KA8RC,OAEJ,IAAe,KAAK,EAhSjB,KAmSL,GAAsB,OAAO,KAAK,EAnS7B,GAmSgD,MAEvD,EAAQ,IAAA,AACC,EArSM,KAoSP,QAGR,GAAQ,IAED,IAAU,GACS,AAAxB,EAxQS,KAwQe,IAG1B,GAAQ,GAAmB,GAG3B,EAAA,IAAoB,AACX,EA9QI,KA6QO,OAGpB,EAAA,GAEA,GAAmB,EAAM,UAAY,EAjRrB,GAiR8C,OAC9D,EAAW,EAnRE,GAoRb,EAAA,AACE,EAnRO,KAkRT,OAEM,GACsB,AAAtB,EArRG,KAqRmB,IACtB,GACA,IAGR,IAAU,IACV,IAAU,GAEV,EAAQ,GACC,IAAU,IAAmB,IAAU,GAChD,EAAQ,GAIR,GAAQ,GACR,EAAA,QA8BJ,GAAM,GACJ,IAAU,IAAe,EAAQ,EAAI,GAAG,WAAW,MAAQ,IAAM,GACnE,GACE,IAAU,GACN,EAAI,GACJ,GAAoB,EACnB,GAAU,KAAK,GAChB,EAAE,MAAM,EAAG,GAjaQ,QAmajB,EAAE,MAAM,GACV,GACA,GACA,EACA,GAAA,CACC,IADD,GAC4B,GAAU,KAAA,QAAiB,GAAK,GAGpE,GAAM,GACJ,EAAQ,GAAQ,IAAM,OAtUP,CAsUiB,IAtUjB,EAsUuC,SAAW,IAGnE,MAAO,CAAA,AACL,KADK,OAED,GAAO,WAAW,GAChB,EACN,IAMJ,QAAM,CAMJ,YAAA,CACE,QAAC,EAAS,WAAY,GACtB,EAAA,CAEA,GAAI,GANN,KAAA,MAA6B,GAO3B,GAAI,GAAY,EACZ,EAAgB,EACd,EAAY,EAAQ,OAAS,EAC7B,EAAQ,KAAK,MAAA,CAGZ,EAAM,GAAa,GAAgB,EAAS,GAKnD,GAJA,KAAK,GAAK,GAAS,cAAc,EAAM,GACvC,GAAO,YAAc,KAAK,GAAG,QAtWd,AAyWX,IAzWW,EAyWU,CACvB,GAAM,GAAU,KAAK,GAAG,QAClB,EAAa,EAAQ,WAC3B,EAAW,SACX,EAAQ,OAAA,GAAU,EAAW,YAI/B,KAAsC,AAA9B,GAAO,GAAO,cAAgB,MAAQ,EAAM,OAAS,GAAW,CACtE,GAAsB,AAAlB,EAAK,WAAa,EAAG,CAIvB,GAAK,EAAiB,gBAAiB,CAIrC,GAAM,GAAgB,GACtB,OAAW,KAAS,GAAiB,oBAQnC,GACE,EAAK,SA1eU,UA2ef,EAAK,WAAW,IAChB,CACA,GAAM,GAAW,EAAU,KAE3B,GADA,EAAc,KAAK,GAAA,AACf,IADe,OACS,CAE1B,GAGM,GAHS,EAAiB,aAC9B,EAAS,cAlfE,SAofS,MAAM,IACtB,EAAI,eAAe,KAAK,GAC9B,EAAM,KAAK,CACT,KA3YK,EA4YL,MAAO,EACP,KAAM,EAAE,GACR,QAAS,EACT,KACW,AAAT,EAAE,KAAO,IACL,GACS,AAAT,EAAE,KAAO,IACT,GACS,AAAT,EAAE,KAAO,IACT,GACA,SAGR,GAAM,KAAK,CACT,KArZG,EAsZH,MAAO,IAKf,OAAW,KAAQ,GAChB,EAAiB,gBAAgB,GAKtC,GAAI,GAAe,KAAM,EAAiB,SAAU,CAIlD,GAAM,GAAW,EAAiB,YAAa,MAAM,IAC/C,EAAY,EAAQ,OAAS,EACnC,GAAI,EAAY,EAAG,CAChB,EAAiB,YAAc,GAC1B,GAAa,YACf,GAKJ,OAAS,GAAI,EAAG,EAAI,EAAW,IAC5B,EAAiB,OAAO,EAAQ,GAAI,MAErC,GAAO,WACP,EAAM,KAAK,CAAC,KAvbP,EAubyB,MAAA,EAAS,IAKxC,EAAiB,OAAO,EAAQ,GAAY,gBAGtB,AAAlB,EAAK,WAAa,EAE3B,GADc,EAAiB,OAClB,GACX,EAAM,KAAK,CAAC,KAlcH,EAkcqB,MAAO,QAChC,CACL,GAAI,GAAA,GACJ,KAAA,AAAQ,GAAK,EAAiB,KAAK,QAAQ,GAAQ,EAAI,MAAvD,IAKE,EAAM,KAAK,CAAC,KArcH,EAqcuB,MAAO,IAEvC,GAAK,GAAO,OAAS,EAI3B,WAKJ,eAAqB,EAAmB,EAAA,CACtC,GAAM,GAAK,GAAE,cAAc,YAE3B,MADA,GAAG,UAAa,EACT,IASX,YACE,EACA,EACA,EAA0B,EAC1B,EAAA,CAAA,GAAA,GAAA,EAAA,EAAA,EAIA,GAAI,IAAU,GACZ,MAAO,GAET,GAAI,GAAA,AACF,IADE,OACF,AAAA,GACK,EAAyB,WAD9B,MAC8B,AAAA,IAAA,OAAA,OAAA,EAAe,GACxC,EAA+C,QAChD,EAA2B,GAAY,GAAA,OAExC,EAA0B,gBAyB/B,MAxBI,CAAA,GAAA,KAAA,OAAA,EAAkB,eAAgB,GAAA,CAAA,GACpC,AAAA,GAAA,KAAA,OAAA,EAAkB,KADkB,MAClB,AAAA,IAAA,QAAA,EAAA,KAAlB,EAAA,IAA4C,AACxC,IADwC,OAE1C,EAAA,OAEA,GAAmB,GAAI,GAAyB,GAChD,EAAiB,EAAa,EAAM,EAAQ,IAAA,AAE1C,IAF0C,OAE1C,CAAA,GAAA,GACA,GAAyB,WADzB,MACyB,AAAA,IAAA,OAAA,EAAA,EAAA,QAAiB,IAC1C,GACE,EAEH,EAAiC,QAAc,GAAA,AAGhD,IAHgD,QAIlD,GAAQ,GACN,EACA,EAAiB,EAAU,EAAO,EAA0B,QAC5D,EACA,IAGG,EAOT,YAAM,CAWJ,YAAY,EAAoB,EAAA,CAPhC,KAAA,EAAkC,GAKlC,KAAA,EAAA,OAGE,KAAK,EAAa,EAClB,KAAK,EAAW,EAKlB,EAAO,EAAA,CAAA,GAAA,GACL,GAAA,CACE,GAAA,CAAI,QAAC,GACL,MAAO,GACL,KAAK,EACH,EAAA,CAAA,GAAY,AAAA,GAAA,KAAA,OAAA,EAAS,iBAArB,MAAqB,AAAA,IAAA,OAAA,EAAiB,IAAG,WAAW,EAAA,IAC1D,GAAO,YAAc,EAErB,GAAI,GAAO,GAAO,WACd,EAAY,EACZ,EAAY,EACZ,EAAe,EAAM,GAEzB,KAAA,AAAO,IAAP,QAAmC,CACjC,GAAI,IAAc,EAAa,MAAO,CACpC,GAAI,GAnjBO,AAojBP,EAAa,OApjBN,EAqjBT,EAAO,GAAI,IACT,EACA,EAAK,YACL,KACA,GA1jBW,AA4jBJ,EAAa,OA5jBT,EA6jBb,EAAO,GAAI,GAAa,KACtB,EACA,EAAa,KACb,EAAa,QACb,KACA,GA7jBS,AA+jBF,EAAa,OA/jBX,GAgkBX,GAAO,GAAI,IAAY,EAAqB,KAAM,IAEpD,KAAK,EAAO,KAAK,GACjB,EAAe,EAAA,EAAQ,GAErB,IAAc,CAAA,GAAA,KAAA,OAAA,EAAc,QAC9B,GAAO,GAAO,WACd,KAGJ,MAAO,GAGT,EAAQ,EAAA,CACN,GAAI,GAAI,EACR,OAAW,KAAQ,MAAK,EAAA,AAClB,IADkB,QAClB,CACG,EAAuB,UAD1B,OAEC,GAAuB,EAAW,EAAQ,EAAuB,GAIlE,GAAM,EAAuB,QAAS,OAAS,GAE/C,EAAK,EAAW,EAAO,KAG3B,MAkDN,QAAM,CA2BJ,YACE,EACA,EACA,EACA,EAAA,CA9BO,KAAA,KAlpBQ,EAkqBjB,KAAA,EAAA,OAgBE,KAAK,EAAc,EACnB,KAAK,EAAY,EACjB,KAAK,EAAW,EAChB,KAAK,QAAU,EAYjB,aAAa,EAAA,CAAA,GAAA,GAAA,AAAA,GACX,KAAK,KADM,MACN,AAAA,IAAA,QAAA,EAAA,KAAL,KAA+B,MAqBjC,aAAA,CACE,MAAY,MAAK,EAAa,cAOhC,YAAA,CACE,MAAO,MAAK,KAOd,UAAA,CACE,MAAO,MAAK,EAGd,EAAW,EAAgB,EAAmC,KAAA,CAC5D,EAAQ,GAAiB,KAAM,EAAO,GAClC,GAAY,GAIV,IAAU,IAAoB,AAAT,GAAS,MAAkB,AAAV,IAAU,GAC9C,MAAK,IAAqB,IAC5B,KAAK,IAEP,KAAK,EAAmB,IACf,IAAU,KAAK,GAAoB,IAAU,IACtD,KAAK,EAAY,GAAA,AAET,EAAyB,aAFhB,OAGnB,KAAK,EAAsB,GAAA,AACjB,EAAe,WADE,OAE3B,KAAK,EAAY,GACR,GAAW,GACpB,KAAK,EAAgB,GAGrB,KAAK,EAAY,GAIb,EAAwB,EAAS,EAAM,KAAK,EAAA,CAClD,MAAiB,MAAK,EAAa,WAAa,aAAa,EAAM,GAG7D,EAAY,EAAA,CACd,KAAK,IAAqB,GAC5B,MAAK,IAgBL,KAAK,EAAmB,KAAK,EAAQ,IAIjC,EAAY,EAAA,CAClB,GAAM,GAAY,KAAK,EAAa,YAGzB,AAAT,IAAS,MACS,AAAlB,EAAK,WAAa,GACE,CAAnB,KAAK,IAAc,KACW,AAAtB,EAAM,cAAgB,KAC3B,IAAc,KAAK,EAAW,iBAUjC,EAAc,KAAO,EAepB,KAAK,EAAY,GAAE,eAAe,IAGtC,KAAK,EAAmB,EAGlB,EACN,EAAA,CAAA,GAAA,GAEA,GAAA,CAAM,OAAC,EAAM,WAAE,GAAc,EAKvB,EACkB,AAAA,MAAf,IAAe,SAClB,KAAK,EAAc,GAAA,CAClB,EAAW,KADO,QAEhB,GAAW,GAAK,GAAS,cACxB,EAAW,EACX,KAAK,UAET,GAEN,GAAA,CAAA,GAAK,KAAK,KAAV,MAAU,AAAA,IAAA,OAAA,OAAA,EAAuC,KAAe,EAC7D,KAAK,EAAsC,EAAQ,OAC/C,CACL,GAAM,GAAW,GAAI,IAAiB,EAAsB,MACtD,EAAW,EAAS,EAAO,KAAK,SACtC,EAAS,EAAQ,GACjB,KAAK,EAAY,GACjB,KAAK,EAAmB,GAM5B,EAAc,EAAA,CACZ,GAAI,GAAW,GAAc,IAAI,EAAO,SAIxC,MAAA,AAHI,KAGJ,QAFE,GAAc,IAAI,EAAO,QAAU,EAAW,GAAI,IAAS,IAEtD,EAGD,EAAgB,EAAA,CAWjB,GAAQ,KAAK,IAChB,MAAK,EAAmB,GACxB,KAAK,KAKP,GAAM,GAAY,KAAK,EAEnB,EADA,EAAY,EAGhB,OAAW,KAAQ,GACb,IAAc,EAAU,OAK1B,EAAU,KACP,EAAW,GAAI,IACd,KAAK,EAAQ,MACb,KAAK,EAAQ,MACb,KACA,KAAK,UAKT,EAAW,EAAU,GAEvB,EAAS,EAAW,GACpB,IAGE,EAAY,EAAU,QAExB,MAAK,EACH,GAAiB,EAAS,EAAY,YACtC,GAGF,EAAU,OAAS,GAevB,EACE,EAA+B,KAAK,EAAa,YACjD,EAAA,CAAA,GAAA,GAGA,IAAA,AAAA,GADA,KAAK,KACL,MADK,AAAA,IAAA,QAAA,EAAA,KAAL,KAAA,GAA+B,GAAa,GACrC,GAAS,IAAU,KAAK,GAAW,CACxC,GAAM,GAAS,EAAQ,YACjB,EAAoB,SAC1B,EAAQ,KAMd,QAAM,CAqCJ,YACE,EACA,EACA,EACA,EACA,EAAA,CAzCO,KAAA,KA/7BY,EA+8BrB,KAAA,EAA6C,GAM7C,KAAA,EAAA,OAIA,KAAA,EAAA,OAiBE,KAAK,QAAU,EACf,KAAK,KAAO,EACZ,KAAK,EAAW,EAChB,KAAK,QAAU,EACX,EAAQ,OAAS,GAAoB,AAAf,EAAQ,KAAO,IAAqB,AAAf,EAAQ,KAAO,GAC5D,MAAK,EAAuB,MAAM,EAAQ,OAAS,GAAG,KAAK,IAC3D,KAAK,QAAU,GAEf,KAAK,EAAmB,MAnB5B,UAAA,CACE,MAAO,MAAK,QAAQ,QA+CtB,EACE,EACA,EAAmC,KACnC,EACA,EAAA,CAEA,GAAM,GAAU,KAAK,QAGjB,EAAA,GAEJ,GAAA,AAAI,IAAJ,OAEE,EAAQ,GAAiB,KAAM,EAAO,EAAiB,GACvD,EAAA,CACG,GAAY,IACZ,IAAU,KAAK,GAAoB,IAAU,GAC5C,GACF,MAAK,EAAmB,OAErB,CAEL,GAAM,GAAS,EAGX,EAAG,EACP,IAHA,EAAQ,EAAQ,GAGX,EAAI,EAAG,EAAI,EAAQ,OAAS,EAAG,IAClC,EAAI,GAAiB,KAAM,EAAO,EAAc,GAAI,EAAiB,GAEjE,IAAM,IAER,GAAK,KAAK,EAAoC,IAEhD,GAAA,GAAA,CACG,GAAY,IAAM,IAAO,KAAK,EAAoC,IACjE,IAAM,GACR,EAAQ,GACC,IAAU,IACnB,IAAU,AAAA,IAAK,IAAM,EAAQ,EAAI,IAIlC,KAAK,EAAoC,GAAK,EAG/C,GAAA,CAAW,GACb,KAAK,EAAa,GAKtB,EAAa,EAAA,CACP,IAAU,GACN,KAAK,QAAqB,gBAAgB,KAAK,MAY/C,KAAK,QAAqB,aAC9B,KAAK,KACJ,GAAS,MAOlB,gBAA2B,GAAA,CAA3B,aAAA,CAAA,MAAA,GAAA,WACW,KAAA,KAxlCW,EA2lCpB,EAAa,EAAA,CAYV,KAAK,QAAgB,KAAK,MAAQ,IAAU,GAAA,OAAsB,IAKvE,gBAAmC,GAAA,CAAnC,aAAA,CAAA,MAAA,GAAA,WACW,KAAA,KA5mCoB,EA+mC7B,EAAa,EAAA,CACP,GAAS,IAAU,GACf,KAAK,QAAqB,aAAa,KAAK,KAAM,IAElD,KAAK,QAAqB,gBAAgB,KAAK,QAoB3D,gBAAwB,GAAA,CAAxB,aAAA,CAAA,MAAA,GAAA,WACW,KAAA,KAvoCQ,EA4oCjB,EAAW,EAAsB,EAAmC,KAAA,CAAA,GAAA,GAGlE,GAFA,GAAA,AAAA,GACE,GAAiB,KAAM,EAAa,EAAiB,MADvD,MACuD,AAAA,IAAA,OAAA,EAAM,MACzC,GAClB,OAEF,GAAM,GAAc,KAAK,EAInB,EACH,IAAgB,IAAW,IAAgB,IAC3C,EAAyC,UACvC,EAAyC,SAC3C,EAAyC,OACvC,EAAyC,MAC3C,EAAyC,UACvC,EAAyC,QAIxC,EACJ,IAAgB,IACf,KAAgB,IAAW,GAE1B,GACF,KAAK,QAAQ,oBACX,KAAK,KACL,KACA,GAGA,GAIF,KAAK,QAAQ,iBACX,KAAK,KACL,KACA,GAGJ,KAAK,EAAmB,EAG1B,YAAY,EAAA,CAAA,GAAA,GAAA,EAC2B,AAAA,MAA1B,MAAK,GAAqB,WAGnC,KAAK,EAAiB,KAAA,AAAA,GAAA,AAAA,GAAK,KAAK,WAAV,MAAU,AAAA,IAAA,OAAA,OAAA,EAAS,QAAnB,MAAmB,AAAA,IAAA,OAAA,EAAQ,KAAK,QAAS,GAE9D,KAAK,EAAyC,YAAY,KAMjE,QAAM,CAwBJ,YACS,EACP,EACA,EAAA,CAFO,KAAA,QAAA,EAxBA,KAAA,KArsCU,EAitCnB,KAAA,EAAA,OAGA,KAAA,EAAA,OAaE,KAAK,EAAW,EAChB,KAAK,QAAU,EAGjB,EAAW,EAAA,CACT,GAAiB,KAAM,KAuCX,AAAA,IAAA,IAKf,YAA2C,0BAL5B,MAK4B,AAAA,KAAA,QAAA,GAAA,KAAA,GAAI,GAAU,IAAA,CAAA,IAAA,IAMxD,YAAoC,mBANoB,MAMpB,AAAA,KAAA,OAAA,GAAA,GAAA,gBAAM,IAAI,KAAK,iBCl/CxC,IACX,OAAO,YAAA,CACN,OAAO,WADD,QAC2B,OAAO,SAAS,eAClD,sBAAwB,UAAS,WACjC,WAAa,eAAc,UAUvB,GAAoB,SAAA,QAEb,CAIX,YAAY,EAAiB,EAAA,CAC3B,GAAI,IAAc,GAChB,KAAU,OACR,qEAGJ,KAAK,QAAU,KAKjB,aAAA,CAOE,MAJI,KAAA,AAA+B,KAAK,IAApC,QACF,MAAK,EAAc,GAAI,eACvB,KAAK,EAAY,YAAY,KAAK,UAE7B,KAAK,EAGd,UAAA,CACE,MAAO,MAAK,UAWH,GAAa,GACjB,GAAI,IAAiB,EAAP,GAAe,IAgBhC,GAAiB,GAAI,KA5BX,GA+DH,IAAc,CACzB,EACA,IAAA,CAEI,GACD,EAA0B,mBAAqB,EAAO,IAAK,GAC1D,YAAa,eAAgB,EAAI,EAAE,YAGrC,EAAO,QAAS,GAAA,CACd,GAAM,GAAQ,SAAS,cAAc,SACrC,EAAM,YAAe,EAAgB,QACrC,EAAW,YAAY,MAahB,GAAqB,GAC7B,GAAyB,EACzB,GACC,YAAa,eAXc,IAAA,CAC/B,GAAI,GAAU,GACd,OAAW,KAAQ,GAAM,SACvB,GAAW,EAAK,QAElB,MAAO,IAAU,KAMwC,GAAK,kBCyDnD,GAA8C,CACzD,YAAY,EAAgB,EAAA,CAC1B,OAAQ,OACD,SACH,EAAQ,EAAQ,GAAK,KACrB,UACG,YACA,OAGH,EAAiB,AAAT,GAAS,KAAO,EAAQ,KAAK,UAAU,GAGnD,MAAO,IAGT,cAAc,EAAsB,EAAA,CAClC,GAAI,GAAqB,EACzB,OAAQ,OACD,SACH,EAAsB,AAAV,IAAU,KACtB,UACG,QACH,EAAsB,AAAV,IAAU,KAAO,KAAO,OAAO,GAC3C,UACG,YACA,OAIH,GAAA,CAEE,EAAY,KAAK,MAAM,QACvB,CACA,EAAY,MAIlB,MAAO,KAYE,GAAuB,CAAC,EAAgB,IAE5C,IAAQ,GAAU,IAAQ,GAAO,GAAU,GAG9C,GAAkD,CACtD,UAAA,GACA,KAAM,OACN,UAAW,GACX,QAAA,GACA,WAAY,IAAA,gBAsBJ,YAAA,CAwZR,aAAA,CACE,QA1CM,KAAA,QAAwC,GAAI,KAK5C,KAAA,QAAA,OACA,KAAA,QAAA,OAKR,KAAA,gBAAA,GAKA,KAAA,WAAA,GAkBQ,KAAA,QAA2C,KASjD,KAAK,UAlYP,gBAAsB,EAAA,CAAA,GAAA,GAAA,AAAA,GACpB,KAAK,KADe,MACf,AAAA,IAAA,QAAL,MAAK,EAAkB,IACvB,KAAK,EAAc,KAAK,aAgF1B,qBAAA,CAEE,KAAK,WACL,GAAM,GAAuB,GAU7B,MAPA,MAAK,kBAAmB,QAAQ,CAAC,EAAG,IAAA,CAClC,GAAM,GAAO,KAAK,QAA2B,EAAG,GAAA,AAC5C,IAD4C,QAE9C,MAAK,QAAyB,IAAI,EAAM,GACxC,EAAW,KAAK,MAGb,QA0BT,gBACE,EACA,EAA+B,GAAA,CAiB/B,GAdI,EAAQ,OAGT,GAAgB,UAAA,IAInB,KAAK,WACL,KAAK,kBAAmB,IAAI,EAAM,GAAA,CAM7B,EAAQ,YAAA,CAAe,KAAK,UAAU,eAAe,GAAO,CAC/D,GAAM,GAAsB,AAAA,MAAT,IAAS,SAAW,SAAW,KAAK,EACjD,EAAa,KAAK,sBAAsB,EAAM,EAAK,GAAA,AACrD,IADqD,QAEvD,OAAO,eAAe,KAAK,UAAW,EAAM,UA8BxC,uBACR,EACA,EACA,EAAA,CAEA,MAAO,CAEL,KAAA,CACE,MAAQ,MAAkC,IAE5C,IAA2B,EAAA,CACzB,GAAM,GAAa,KACjB,GAEA,KAAyC,GAAiB,EAC1D,KAAqC,cACrC,EACA,EACA,IAGJ,aAAA,GACA,WAAA,UAiBM,oBAA0B,EAAA,CAClC,MAAO,MAAK,kBAAmB,IAAI,IAAS,SASpC,WAAA,CACR,GAAI,KAAK,eArQK,aAsQZ,MAAA,GAEF,KAAc,UAAA,GAEd,GAAM,GAAY,OAAO,eAAe,MASxC,GARA,EAAU,WACV,KAAK,kBAAoB,GAAI,KAAI,EAAU,mBAE3C,KAAK,QAA2B,GAAI,KAKhC,KAAK,eAAyC,cAAsB,CACtE,GAAM,GAAQ,KAAK,WAEb,EAAW,CAAA,GACZ,OAAO,oBAAoB,GAAA,GAC3B,OAAO,sBAAsB,IAGlC,OAAW,KAAK,GAId,KAAK,eAAe,EAAI,EAAc,IAsB1C,MAnBA,MAAK,cAAgB,KAAK,eAAe,KAAK,QAAA,SAgDtC,gBAAsB,EAAA,CAC9B,GAAM,GAAgB,GACtB,GAAI,MAAM,QAAQ,GAAS,CAIzB,GAAM,GAAM,GAAI,KAAK,EAA0B,KAAK,EAAA,GAAU,WAE9D,OAAW,KAAK,GACd,EAAc,QAAQ,GAAmB,QAAA,AAElC,KAFkC,QAG3C,EAAc,KAAK,GAAmB,IAExC,MAAO,SAcD,SACN,EACA,EAAA,CAEA,GAAM,GAAY,EAAQ,UAC1B,MAAA,AAAO,KAAP,GAAO,OAEkB,AAAA,MAAd,IAAc,SACrB,EACgB,AAAA,MAAT,IAAS,SAChB,EAAK,cAAA,OAwDX,GAAA,CAAA,GAAA,GACE,KAAK,QAAkB,GAAI,SACxB,GAAS,KAAK,eAAiB,GAElC,KAAK,EAAsB,GAAI,KAC/B,KAAK,UAGL,KAAK,gBAAA,AAAA,GACJ,KAAK,YAAuC,KADxC,MACwC,AAAA,IAAA,QAAA,EAAe,QAAS,GACnE,EAAE,OAON,cAAc,EAAA,CAAA,GAAA,GAAA,EAAA,AAAA,CAAA,GACX,KAAK,WADM,MACN,AAAA,IAAA,OAAA,EAAL,KAAK,QAAkB,IAAI,KAAK,GAAA,AAK7B,KAAK,aALwB,QAKI,KAAK,aAAA,CAAA,GACxC,EAAW,iBAD6B,MAC7B,AAAA,IAAA,QAAA,EAAA,KAAX,IAOJ,iBAAiB,EAAA,CAAA,GAAA,GAAA,AAAA,GAGf,KAAK,WAHU,MAGV,AAAA,IAAA,QAAA,EAAe,OAAO,KAAK,QAAc,QAAQ,KAAgB,EAAG,GAenE,SAAA,CAGL,KAAK,YAAuC,kBAAmB,QAC9D,CAAC,EAAI,IAAA,CACC,KAAK,eAAe,IACtB,MAAK,QAAsB,IAAI,EAAG,KAAK,IAAA,MAChC,MAAK,MAeV,kBAAA,CAAA,GAAA,GACR,GAAM,GAAA,AAAA,GACJ,KAAK,cADD,MACC,AAAA,IAAA,OAAA,EACL,KAAK,aACF,KAAK,YAAuC,mBAMjD,MAJA,IACE,EACC,KAAK,YAAuC,eAExC,EAQT,mBAAA,CAAA,GAAA,GAAA,AAEM,KAAK,aAFX,QAGK,MAEE,WAAa,KAAK,oBAEvB,KAAK,eAAA,IAAe,AAAA,GACpB,KAAK,WADe,MACf,AAAA,IAAA,QAAA,EAAe,QAAS,GAAA,CAAA,GAAA,GAAA,MAAA,AAAA,GAAM,EAAE,iBAAR,MAAQ,AAAA,IAAA,OAAA,OAAA,EAAA,KAAF,KAG/B,KAAK,SACP,MAAK,UACL,KAAK,QAA6B,KAAK,QAAA,QAUjC,eAAe,EAAA,EAQzB,sBAAA,CAAA,GAAA,GAAA,AAAA,GACE,KAAK,WADP,MACO,AAAA,IAAA,QAAA,EAAe,QAAS,GAAA,CAAA,GAAA,GAAA,MAAA,AAAA,GAAM,EAAE,oBAAR,MAAQ,AAAA,IAAA,OAAA,OAAA,EAAA,KAAF,KACnC,KAAK,QAA6B,GAAI,SACnC,GAAO,KAAK,QAAqB,GAQtC,yBACE,EACA,EACA,EAAA,CAEA,KAAK,EAAsB,EAAM,GAG3B,QACN,EACA,EACA,EAA+B,GAAA,CAAA,GAAA,GAAA,EAE/B,GAAM,GAAQ,KACX,YAAuC,QACxC,EACA,GAEF,GAAA,AAAI,IAAJ,QAAI,AAAsB,EAAQ,UAA9B,GAAgD,CAClD,GAGM,GAAA,CAAA,GAAA,AAAA,GAFH,EAAQ,aAEL,MAFK,AAAA,IAAA,OAAA,OAAA,EAAyC,eAE9C,MAF8C,AAAA,IAAA,OAAA,EAClD,GAAiB,aACY,EAAO,EAAQ,MAuB9C,KAAK,QAAuB,EACX,AAAb,GAAa,KACf,KAAK,gBAAgB,GAErB,KAAK,aAAa,EAAM,GAG1B,KAAK,QAAuB,MAKhC,EAAsB,EAAc,EAAA,CAAA,GAAA,GAAA,EAAA,EAClC,GAAM,GAAO,KAAK,YAGZ,EAAY,EAAK,QAA0C,IAAI,GAGrE,GAAA,AAAI,IAAJ,QAA8B,KAAK,UAAyB,EAAU,CACpE,GAAM,GAAU,EAAK,mBAAmB,GAClC,EAAY,EAAQ,UACpB,EAAA,AAAA,GAAA,AAAA,GAAA,AAAA,GACH,KADG,MACH,AAAA,IAAA,OAAA,OAAA,EAAyC,iBADtC,MACsC,AAAA,IAAA,OAAA,EACpB,AAAA,MAAd,IAAc,WACjB,EACD,QAJA,MAIA,AAAA,IAAA,OAAA,EACJ,GAAiB,cAEnB,KAAK,QAAuB,EAE5B,KAAK,GAA0B,EAAe,EAAO,EAAQ,MAE7D,KAAK,QAAuB,MAkBhC,cACE,EACA,EACA,EAAA,CAEA,GAAI,GAAA,GAAsB,AAEtB,IAFsB,QAGxB,KACE,GACC,KAAK,YAAuC,mBAAmB,IACvC,YAAc,IAC1B,KAAK,GAAqB,GAClC,MAAK,EAAoB,IAAI,IAChC,KAAK,EAAoB,IAAI,EAAM,GAAA,AAMjC,EAAQ,UANyB,IAML,KAAK,UAAyB,GAAA,CACxD,KAAK,UADmD,QAE1D,MAAK,QAAyB,GAAI,MAEpC,KAAK,QAAuB,IAAI,EAAM,KAIxC,EAAA,IAAsB,CAGrB,KAAK,iBAAmB,GAC3B,MAAK,QAAkB,KAAK,gBAUxB,UAAA,CACN,KAAK,gBAAA,GACL,GAAA,CAKE,IAAA,KAFM,MAAK,QAEJ,KAAK,SAAA,KACJ,MAAK,cAEN,EAAP,CAKA,QAAQ,OAAO,GAEjB,GAAM,GAAS,KAAK,gBAOpB,MAHc,AAAV,IAAU,MAAV,KACI,GAAA,CAEA,KAAK,gBAoBL,eAAA,CAAA,GAAA,GAIR,GAAA,CAAK,KAAK,gBACR,OAGG,KAAK,WA2BN,KAAK,SAIP,MAAK,QAAsB,QAAQ,CAAC,EAAG,IAAQ,KAAa,GAAK,GACjE,KAAK,QAAA,QAEP,GAAI,GAAA,GACE,EAAoB,KAAK,EAC/B,GAAA,CACE,EAAe,KAAK,aAAa,GAC7B,EACF,MAAK,WAAW,GAAA,AAAA,GAChB,KAAK,WADW,MACX,AAAA,IAAA,QAAA,EAAe,QAAS,GAAA,CAAA,GAAA,GAAA,MAAA,AAAA,GAAM,EAAE,cAAR,MAAQ,AAAA,IAAA,OAAA,OAAA,EAAA,KAAF,KACnC,KAAK,OAAO,IAEZ,KAAK,gBAEA,EAAP,CAMA,KAHA,GAAA,GAEA,KAAK,UACC,EAGJ,GACF,KAAK,EAAY,GAOrB,WAAW,EAAA,EAIX,EAAY,EAAA,CAAA,GAAA,GAAA,AAAA,GACV,KAAK,WADK,MACL,AAAA,IAAA,QAAA,EAAe,QAAS,GAAA,CAAA,GAAA,GAAA,MAAA,AAAA,GAAM,EAAE,eAAR,MAAQ,AAAA,IAAA,OAAA,OAAA,EAAA,KAAF,KAC9B,KAAK,YACR,MAAK,WAAA,GACL,KAAK,aAAa,IAEpB,KAAK,QAAQ,GAiBP,SAAA,CACN,KAAK,EAAsB,GAAI,KAC/B,KAAK,gBAAA,MAmBP,iBAAA,CACE,MAAO,MAAK,oBAoBJ,mBAAA,CACR,MAAO,MAAK,QAWJ,aAAa,EAAA,CACrB,MAAA,GAYQ,OAAO,EAAA,CAAA,AACX,KAAK,UADM,QAIb,MAAK,QAAuB,QAAQ,CAAC,EAAG,IACtC,KAAK,QAAsB,EAAG,KAAK,GAAkB,IAEvD,KAAK,QAAA,QAEP,KAAK,UAaG,QAAQ,EAAA,EAYR,aAAa,EAAA,IAl3BN,GAAA,UAAA,GAqQV,GAAA,kBAAoC,CAAC,KAAM,QAAA,AAAA,IAAA,IAknBnD,YAAmD,kCAlnBA,MAknBA,AAAA,KAAA,QAAA,GAAA,KAAA,GAAI,CAAC,gBAAA,KAAA,CAAA,IAAA,IA4CvD,YAA4C,2BA5CW,MA4CX,AAAA,KAAA,OAAA,GAAA,GAAA,wBAAM,IAAI,KAAK,oCCrrC9B,AAAA,CAAA,IAAA,IAc7B,YAAuC,sBAdV,MAcU,AAAA,KAAA,OAAA,GAAA,GAAA,mBAAM,IAAI,KAAK,cAAA,oBAUxB,GAAA,CAAhC,aAAA,CAAA,MAAA,GAAA,WAeW,KAAA,cAA+B,CAAC,KAAM,MAEvC,KAAA,QAAA,OAKE,kBAAA,CAAA,GAAA,GAAA,EACR,GAAM,GAAa,MAAM,mBAOzB,MAAA,AAAA,GAAA,GADA,KAAK,eAAc,gBACnB,MADmB,AAAA,IAAA,QAAA,GAAA,aAAiB,EAAY,YACzC,EAUC,OAAO,EAAA,CAIf,GAAM,GAAQ,KAAK,SACnB,MAAM,OAAO,GACb,KAAK,QAAc,GAAO,EAAO,KAAK,WAAY,KAAK,eASzD,mBAAA,CAAA,GAAA,GACE,MAAM,oBAAA,AAAA,GACN,KAAK,WADC,MACD,AAAA,IAAA,QAAA,EAAa,aAAA,IAMpB,sBAAA,CAAA,GAAA,GACE,MAAM,uBAAA,AAAA,GACN,KAAK,WADC,MACD,AAAA,IAAA,QAAA,EAAa,aAAA,IAUV,QAAA,CACR,MAAO,MApEQ,GAAY,UAAA,GAEtB,GAAA,cAAA,GAAgB,AAAA,IAAA,IAwExB,YAA6C,4BAxErB,MAwEqB,AAAA,KAAA,QAAA,GAAA,KAAA,GAAI,CAAC,WAAA,KAAA,AAAA,IAAA,IAIlD,YAA8C,6BAJI,MAIJ,AAAA,KAAA,QAAA,GAAA,KAAA,GAAI,CAAC,WAAA,KCnKpD,OAAsB,SCEf,YAAsB,EAAK,EAAK,EAAK,CAC1C,MAAI,OAAO,IAAO,aAAe,MAAO,IAAO,YAAoB,EAC/D,MAAO,IAAO,YAAoB,KAAK,IAAI,EAAK,GAChD,MAAO,IAAO,YAAoB,KAAK,IAAI,EAAK,GAChD,IAAQ,EAAY,EACjB,KAAK,IAAI,KAAK,IAAI,EAAK,GAAM,GAG/B,GAAM,IAAY,UAAY,CAQnC,WAA8B,EAAK,CACjC,GAAI,GAAK,EAAI,QACT,EACJ,MAAO,WAAmB,CACxB,SAAQ,EAAG,SAAW,EACf,GAuBX,WAAuB,EAAY,EAAc,EAAe,CAC9D,MAAO,UAAmB,EAAK,CAC7B,GAAI,GAAM,EAAqB,GAAiB,CAAC,IAC7C,EAAQ,EAAI,WAAW,MAAM,KAC7B,EAAe,EAAM,GACrB,EAAiB,EAAM,GACvB,EAAO,EAAa,KAAO,KAAO,KAAQ,GAC9C,AAAI,GAAK,GAAe,EAAa,OAAO,IAC5C,GAAI,GACF,EAAM,GACR,GAAI,EAEF,GAAI,CAAC,GAAkB,EAAa,SAAW,EAAG,EAAM,MAGtD,KADA,EAAe,EAAa,MAAM,IAAI,UAC9B,GAAK,EAAa,OAAO,EAAG,MAAQ,IAC1C,EAAM,EAAG,UAAU,KAAK,IAAO,GAAM,EAAe,IAAM,EAIhE,MAAI,GAAuB,EAAM,EAAM,EAAa,EAC7C,EAAM,GAGjB,WAAoB,EAAY,EAAc,CAI5C,GAAI,GAAO,WAKP,EAAS,GAAI,QAAO,aAAe,EAAa,EAAe,OAEnE,MAAO,UAAgB,EAAG,CACxB,GAAI,CAAC,EAAO,KAAK,GAAI,KAAM,IAAI,OAAM,EAAE,mBACvC,GAAI,GAAQ,EAAE,MAAM,GAChB,EAAe,EAAM,GAAG,QAAQ,EAAM,IAC1C,GAAI,CAAC,aAAa,KAAK,GACrB,KAAM,IAAI,OAAM,EAAE,mBACpB,GAAI,GAAiB,EAAM,GAG3B,GAFI,GAAgB,GAAiB,EAAe,QAAQ,MAAO,KAC9D,GAAgB,GAAiB,KAClC,CAAC,WAAW,KAAK,GACnB,KAAM,IAAI,OAAM,EAAE,mBAEpB,MAAO,IAAI,QAAO,EAAe,IAAM,GAAkB,GAI7D,MAAO,CACL,OAAQ,EACN,EAAE,iBAAkB,KACpB,EAAE,wBAAyB,MAE7B,UAAW,EACT,EAAE,iBAAkB,KACpB,EAAE,wBAAyB,KAC3B,EAAE,yBAA0B,CAAC,KAE/B,cAAe,EACf,UAAW,EACX,QAAS,IAAM,CAEb,GAAS,OAAS,EAChB,EAAE,iBAAkB,KACpB,EAAE,wBAAyB,MAE7B,GAAS,UAAY,EACnB,EAAE,iBAAkB,KACpB,EAAE,wBAAyB,KAC3B,EAAE,yBAA0B,CAAC,UCrHrC,AAAK,OAAO,SAAS,QACnB,QAAO,SAAS,OACd,OAAO,SAAS,SAChB,KACA,OAAO,SAAS,SACf,QAAO,SAAS,KAAO,IAAM,OAAO,SAAS,KAAO,KAIlD,GAAM,IAAY,UAAY,CACnC,GAAI,GAAY,CACd,IAAK,YACL,KAAM,YACN,KAAM,qBACN,IAAK,kBACL,IAAK,0CACL,IAAK,kBACL,IAAK,qBACL,IAAK,aACL,KAAM,aACN,IAAK,aAEP,WAAoB,EAAO,CACzB,MAAO,IAAc,UAAY,EAAK,QAAQ,EAAK,aAAc,IAEnE,WAAkB,EAAO,CACvB,MAAO,YAAc,EAAK,QAAQ,EAAK,aAAc,GAEvD,WAAc,EAAK,CACjB,MAAO,GAAI,MAAM,eAEnB,WAAoB,EAAK,CACvB,MAAO,GAAI,KAAO,IAEpB,GAAI,GACF;AAAA,+PAOF,MAAO,CACL,OACA,aACA,iBACA,WACA,aACA,SAAU,SAAU,EAAK,CACvB,GAAM,GAAc,GAAI,KACtB,GAAc,GACd,GAAG,SAAS,WAAW,SAAS,OAAO,SAAS,YAE5C,EAAW,EAAY,SAAS,SAAS,YAC3C,GAAI,iBAAgB,EAAY,QAAQ,IAAI,YAC5C,EAAY,SAAS,MAAM,KAAK,MACpC,GAAI,CAAC,EAAU,MAAO,MACtB,GAAM,GAAM,EAAS,MAAM,eACzB,EAAW,GAAO,EAAU,EAAI,IAClC,MAAK,GACE,CACL,SAAU,EACV,IAAK,EAAI,IAHW,UFE5B,GAAM,IAAoB,GAAW,EAAM,kBAE3C,YAAyB,CAAE,QAAO,QAAO,SAAS,GAAK,GAAK,CAC1D,EAAM,aAAa,oBAAqB,GACxC,EAAE,GAAO,GAAG,SAAU,UAAY,CAChC,GAAI,CACF,GAAI,GAAS,EAAO,EAAM,MAAO,QACjC,SAEA,CACA,AAAI,MAAO,IAAW,aACpB,EAAM,aAAa,oBAAqB,MAMhD,GAAM,IAAY,GAAO,IAEnB,GAAW,GAAO,QAClB,GAAe,GAAO,iBAEtB,GAAW,CAAC,EAAS,IAAY,CACrC,GAAM,GAAM,SAAS,cAAc,GACnC,UAAW,EAAK,GACT,GAEH,GAAc,CAAC,EAAS,EAAS,IAAY,CACjD,GAAM,GAAM,GAAS,EAAS,GAC9B,MAAI,KAAY,WACd,EAAI,MAAQ,EAAQ,MAEpB,EAAI,UACF,EAAQ,MAAQ,GAAW,EAAQ,OAAO,QAAQ,SAAU,SAEzD,GAGH,GAAW,CACf,KAAM,WACN,OAAQ,CAAC,EAAS,EAAO,IAChB,GAAS,QAAS,GAE3B,QAAS,CAAC,EAAM,EAAS,IACvB,OAAO,OACL,GACA,EACA,CACE,KAAM,YAIR,EAAQ,OAAS,CAAE,QAAS,KAEhC,SAAU,CAAC,EAAO,EAAO,IAAc,CACrC,EAAM,QAAU,GAElB,OAAQ,UAGV,GAAe,IAEf,GAAM,IAAU,CACd,KAAM,UACN,OAAQ,CAAC,EAAS,EAAO,IAAY,GAAS,MAAO,GACrD,QAAS,CAAC,EAAM,EAAS,IACvB,OAAO,OAAO,GAAI,EAAM,CACtB,IAAK,EAAQ,QACb,IAAK,GAAc,EAAQ,aAIjC,GAAe,IAER,GAAM,IAAO,CAClB,KAAM,OACN,UAAW,GACX,QAAS,CAAC,EAAM,EAAS,IACvB,OAAO,OAAO,GAAI,EAAM,CACtB,KAAM,OACN,aAAc,MACd,MAAO,EAAQ,QAEnB,OAAQ,CAAC,EAAS,EAAO,IAAY,GAAS,QAAS,GACvD,SAAU,CAAC,EAAO,IAAU,CAC1B,EAAM,MAAQ,GAEhB,OAAQ,SAGV,GAAe,IAEf,GAAM,IAAO,CACX,KAAM,OACN,QAAS,CAAC,EAAM,EAAS,IAOhB,EAET,OAAQ,CAAC,EAAS,EAAO,IAChB,GAAY,EAAS,EAAS,YAEvC,SAAU,GAAK,SACf,OAAQ,SAGV,GAAe,IAEf,GAAM,IAAQ,CACZ,KAAM,QACN,MAAO,GACL,GAAQ,MAAS,GAAQ,OAAS,IAAI,QAAQ,QAAS;AAAA,GAChD,GAET,QAAS,CAAC,EAAM,EAAS,IACvB,OAAO,OACL,GAAS,GACT,GAAW,EAAQ,OAAS,CAAE,IAAK,EAAQ,OAC3C,CACE,MAAO,GACL,EAAQ,OAAS,EAAI,UAAW,GAAW,WAAa,yBAIhE,OAAQ,CAAC,EAAS,EAAO,IAChB,GACL,EACA,EACA,EAAQ,WAAa,UACjB,IAAM,KAAK,IAAI,EAAG,EAAQ,QAAU,GACpC,EAAQ,MACN,QACA,OAGV,SAAU,CAAC,EAAO,IAAU,CAC1B,EAAM,UAAY,GAAW,GAAO,QAAQ,SAAU,WAI1D,GAAe,IAER,GAAM,IAAY,CACvB,KAAM,YACN,MAAO,GACL,GAAQ,MAAQ,EAAQ,MAAM,OAE1B,IAAS,WAAW,EAAQ,MAAQ,GAAS,KAAK,EAAQ,OACxD,IAAS,KAAK,EAAQ,MAAM,GAAQ,MAAQ,GAAS,gBACzD,MAAO,GAAQ,KAEV,GAET,QAAS,CAAC,EAAM,EAAS,IAAY,CACnC,GAAI,GAAgB,GAEpB,GAAI,EAAQ,IAAK,CAEf,GADA,EAAK,KAAU,GAAc,EAAQ,KACjC,EAAQ,IAAI,MAAM,WACpB,EAAK,KAAU,QACf,EAAgB,WACX,CACL,EAAgB,cACZ,EAAQ,UAAU,IAAiB,WACvC,GAAI,GAAW,EAAQ,UAAY,GAAS,SAAS,EAAQ,KAC7D,AAAI,GACF,GAAK,KAAU,EAAS,SACxB,GAAiB,IAAM,EAAS,KAGpC,AAAI,EAAQ,IAAI,KAAO,KAAK,GAAK,OAAY,UAE/C,UAAiB,WACjB,EAAK,MAAW,EACT,GAAS,IAElB,OAAQ,CAAC,EAAS,EAAO,IAChB,GAAY,EAAS,EAAS,KAEvC,SAAU,CAAC,EAAO,IAAU,CAC1B,EAAM,UAAY,GAAW,GAAO,QAAQ,SAAU,UAExD,OAAQ,SAGV,GAAe,IAEf,GAAM,IAAY,CAChB,KAAM,YACN,QAAS,EACP,GACA,GACA,GAAU,CACR,KAAM,YACN,MAAO,eAGX,KAAM,GACJ,0BAA0B,GAAW,GAAM,QAAQ,OAAQ,gBAC7D,OAAQ,CAAC,EAAS,EAAO,IAAY,CACnC,GAAM,GAAQ,EAAQ,MAChB,EAAQ,EAAQ,GAAK,IAAK,GAAI,GAAU,OAAO,GAC/C,EAAS,OAAO,GAAc;AAAA,EACtC,SACE,MAAO,GAAE,IAEX,SAAU,CAAC,EAAO,EAAO,IAAc,CACrC,EAAM,UAAY,EAAQ,GAAK,IAAK,GAAI,GAAU,OAAO,GACzD,EAAE,GAAG,UAAY,EAAE,GAAO,KAAK,MAAM,YAEvC,OAAQ,SAGV,GAAe,IAEf,GAAM,IAAY,CAChB,OAAQ,CAAC,EAAS,EAAO,IAAY,CACnC,GAAM,GAAQ,EAAQ,MAChB,EAAS,EAAE,WAAW,GAAc,gBAS1C,MACE,GAAQ,cAAgB,YACxB,EAAM,OAAS,GACf,EAAM,GAAG,QAAU,IACnB,CAAC,EAAM,KAAK,SAAU,EAAO,CAC3B,MAAO,GAAM,WAAa,MAG5B,EAAM,QAAQ,CAAE,OAAQ,GAAI,MAAO,KAErC,GAAU,SAAS,EAAO,IAAI,GAAI,GAC3B,GAET,SAAU,CAAC,EAAO,IAAU,CAC1B,GAAM,GAAU,CAAC,GAAG,EAAM,iBAAiB,WACrC,EAAM,EAAQ,OACd,EAAS,EAAM,OACf,EAAa,EAAM,OAAS,GAAK,KACnC,EAAgB,GACpB,OAAS,GAAI,EAAG,EAAI,EAAQ,IAAK,CAC/B,GAAM,GAAS,EAAM,GACf,EAAY,EAAQ,IAAM,SAAS,cAAc,UACvD,EAAU,MAAQ,EAAO,MACzB,EAAU,YACR,EAAM,GAAG,QAAU,GAAK,EAAE,aAAe,EAAO,OAClD,EAAU,UAAU,OAAO,eAAgB,EAAO,QAAU,IACxD,EAAO,UACT,GAAgB,EAAO,OAErB,EAAI,EAAM,GACZ,CAAI,EACF,EAAW,KAAK,GAEhB,EAAM,YAAY,IAIxB,AAAI,EAAW,OACb,EAAM,OAAO,GAAG,GACP,EAAS,GAClB,CAAC,GAAG,EAAM,iBAAiB,uBAAuB,EAAS,OAAO,QAChE,GAAS,EAAM,WAAW,YAAY,IAG1C,EAAM,MAAQ,IAIZ,GAAW,CACf,KAAM,WAYN,MAAO,GACD,GAAQ,WAAa,IACvB,GAAQ,YAAc,WAQjB,GAET,UAAW,GACX,QAAS,CAAC,EAAM,EAAS,IACvB,OAAO,OAAO,GAAI,EAAM,CACtB,KAAM,EAAQ,KACd,KAAM,IAEV,OAAQ,GAAU,OAClB,SAAU,GAAU,SACpB,OAAQ,SAGV,GAAe,IAEf,GAAM,IAAU,CACd,KAAM,UACN,QAAS,CAAC,EAAM,EAAS,IACvB,OAAO,OAAO,GAAI,EAAM,CACtB,KAAM,EAAQ,KACd,KAAM,EAAQ,MAAM,SAExB,OAAQ,GAAU,OAClB,SAAU,GAAU,SACpB,OAAQ,SAGV,GAAe,IAEf,GAAM,IAAY,CAChB,KAAM,YACN,QAAS,CAAC,EAAM,EAAS,IACvB,OAAO,OAAO,GAAI,EAAM,CACtB,KAAM,EAAQ,KACd,KAAM,EAAQ,MAAM,OACpB,SAAU,aAEd,OAAQ,GAAU,OAClB,SAAU,CAAC,EAAO,EAAO,IAAc,CACrC,GAAM,GAAW,EAAM,KAAK,GAAU,EAAO,WAAa,IAC1D,EAAM,MAAQ,EAAS,OAEzB,OAAQ,SAGV,GAAe,IAEf,GAAM,IAAa,CACjB,OAAQ,CAAC,EAAS,EAAO,IAAY,CACnC,GAAM,GAAQ,EAAQ,MACtB,GAAI,EAAM,SAAW,EAAG,MAAO,MAC/B,GAAM,GAAS,EAAE,OAAO,GAAc,YACtC,OAAS,GAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,GAAI,GAAK,EAAQ,GAAK,IAAM,EAC5B,GAAI,GAAS,EAAE;AAAA;AAAA,YAET,EAAM,GAAG,SAAW,YAAc;AAAA,iDACG;AAAA;AAAA,sBAE3B,EAAQ,aAAe,QAAU,QAAU;AAAA,sBAC3C,EAAQ;AAAA,oBACV;AAAA,gBAEJ,EAAQ,MAAQ,EAAQ,KAAK,WACzB,qBAAqB,EAAQ,KAAK,cAClC;AAAA,gBAEJ,EAAM,GAAG,SAAW,qBAAuB;AAAA;AAAA;AAAA,gBAG3C,GAAW,EAAM,GAAG,QAAQ,QAAQ,OAAQ;AAAA;AAAA;AAAA;AAAA,SAKtD,EAAO,OAAO,GACd,EAAO,KAAK,cAAc,IAAI,EAAM,GAAG,OAEzC,MAAO,IAET,WAAY,CAAC,EAAO,IAAa,GAGjC,WAAY,CAAC,EAAM,IAAa,CAC9B,EAAK,UAAU,OAAO,cAAe,GACrC,CAAC,GAAG,EAAK,iBAAiB,UAAU,QAAQ,GAAS,CACnD,EAAM,SAAW,MAKjB,GAAY,CAChB,KAAM,iBACN,QAAS,EAAQ,GAAc,EAAM,QAAS,6BAC9C,OAAQ,GAAW,OACnB,WAAY,GAAW,WACvB,WAAY,GAAW,WACvB,kBAAmB,GACnB,SAAU,CAAC,EAAO,EAAO,IAAc,CACrC,GAAM,GAAU,EAAE,GAAO,KAAK,WAC9B,EAAM,QAAQ,CAAC,CAAE,YAAY,IAAU,CACrC,GAAM,GAAS,EAAM,cAAc,QAAQ,EAAQ,MAAM,OACzD,AAAI,CAAC,GACD,GAAO,UAAY,GAAU,GAAO,QAAU,GAClD,EAAE,GAAQ,QAAQ,gCAGtB,OAAQ,SAGV,GAAe,IAEf,GAAM,IAAY,CAChB,KAAM,QACN,QAAS,EAAQ,GAAc,EAAM,QAAS,8BAC9C,OAAQ,GAAW,OACnB,kBAAmB,GACnB,WAAY,GAAW,WACvB,WAAY,GAAW,WACvB,SAAU,CAAC,EAAO,EAAO,IAAc,CACrC,GAAM,GAAU,EAAE,GAAO,KAAK,WACxB,EAAQ,EAAM,UAAU,GAAU,EAAO,WAAa,IAC5D,GAAI,IAAU,GAAI,CAChB,EAAM,iBAAiB,SAAS,EAAQ,QAAQ,QAAQ,GAAK,CAC3D,EAAE,QAAU,GACZ,EAAE,QAAQ,cAAc,UAAU,OAAO,aAE3C,OAEF,GAAM,GAAS,EAAM,cAAc,QAAQ,EAAQ,MAAM,OACzD,EAAO,QAAU,GACjB,EAAE,GAAQ,QAAQ,6BAEpB,OAAQ,SAGV,GAAe,IAEf,GAAM,IAAa,CACjB,KAAM,iBACN,UAAW,GACX,MAAO,GACL,GAAQ,YAAc,EAAE,mBACjB,GAET,oBAAqB,GACnB,EAAE,WAAW,WACX,EAAE,WAAW,UAAU,WACvB,GAAU,IAEd,oBAAqB,GACnB,GACE,EAAE,WAAW,WAAW,WAAY,EAAE,GAAO,WAAW,aAE5D,QAAS,CAAC,EAAM,EAAS,IACvB,OAAO,OAAO,GAAI,EAAM,CACtB,MAAO,GAAW,oBAAoB,EAAQ,OAC9C,aAAc,MACd,YAAa,EAAE,kBAAmB,EAAE,gBACpC,KAAM,SAEV,OAAQ,CAAC,EAAS,EAAO,IAChB,GAAS,QAAS,GAE3B,YAAa,CAAC,EAAQ,IAAY,CAChC,AAAI,EAAC,EAAQ,kBAAoB,EAAQ,UACvC,GAAO,aACP,KAEA,EAAQ,KAAK,iBAAiB,SAAU,IACxC,EAAQ,KAAK,iBACX,UACA,GAAK,EAAO,MAAO,SAAU,IAAM,CACjC,GAAM,GAAK,GAAI,YAAW,SAAU,CAClC,QAAS,GACT,WAAY,GACZ,KAAM,SAER,EAAQ,KAAK,cAAc,MAI/B,GAAgB,CACd,MAAO,EAAO,IAAI,GAClB,OAAQ,SAAU,EAAO,EAAO,CAC9B,MAAO,IAAW,oBAAoB,IAExC,MAAO,EAAQ,QAEjB,EAAO,WAAW,UAAU,SAGhC,SAAU,CAAC,EAAO,IAAU,CAC1B,EAAM,aAAa,oBAAqB,GACxC,EAAM,MAAQ,GAAW,oBAAoB,IAE/C,SAAU,CAAC,EAAS,IACd,EAAC,EAAQ,SAAY,IAAS,IAAI,SAAW,IAE/C,EAAE,EAAE,EAAQ,MAAM,WAAW,SAAU,aAAa,KAAK,QAAS,IAE7D,GAAU,EAAS,IAE5B,OAAQ,SAGV,GAAe,IAEf,GAAM,IAAU,CACd,KAAM,UACN,UAAW,GACX,YAAa,GAAW,CACtB,GAAI,GAAK,EAST,GARI,EAAI,UAAW,IACjB,GAAM,GAAS,UACb,EAAQ,QAAQ,QAAQ,EAAQ,YAChC,QACA,EAAI,UAAW,IACjB,GAAM,GAAS,UACb,EAAQ,QAAQ,QAAQ,EAAQ,YAChC,QACA,MAAO,IAAQ,YAAa,MAAO,GACvC,GAAI,MAAO,IAAQ,YACnB,MAAO,MAAK,IAAI,EAAK,IAEvB,oBAAqB,GAAS,GAAS,UAAU,GAEjD,QAAS,CAAC,EAAM,EAAS,IAAY,CACnC,GAAM,GAAW,GAAQ,YAAY,GACrC,MAAO,QAAO,OACZ,GACA,EACA,CACE,KAAM,OACN,MAAO,UACP,aAAc,MACd,KAAM,EAAQ,KAEd,MAAO,WAAW,EAAQ,OAAS,GAAG,QAAQ,EAAQ,YAIxD,GAAY,CAAE,gBAAiB,KAGnC,OAAQ,CAAC,EAAS,EAAO,IAAY,GAAS,QAAS,GACvD,YAAa,CAAC,EAAQ,IAAY,CAChC,EAAO,KAAK,SAAU,EAAO,QAAQ,KAEvC,SAAU,CAAC,EAAO,IAAU,CAC1B,GAAM,GAAU,EAAE,KAAK,EAAO,WAC9B,EAAM,MAAQ,GAAQ,oBACpB,WAAW,GAAS,GAAG,QAAQ,EAAQ,aAG3C,SAAU,SAAU,EAAS,EAAO,CAClC,GAAI,EAAQ,cAAgB,UAC1B,KAAM,mDACR,GAAM,GAAW,EAAQ,UAAY,GACrC,GAAI,GACJ,GAAI,CACF,EAAM,GAAS,OAAO,QACtB,CACA,KAAM,IAAI,OACR,GACE,EAAS,eAAiB,EAAE,kBAC5B,EAAQ,EAAM,QAAS,GAAQ,GAAQ,UAAU,KAIvD,EAAQ,OAAS,EAAI,UAAW,GAChC,EAAQ,OAAS,EAAI,UAAW,GAChC,GAAI,CACF,GAAI,MAAO,IAAQ,SACjB,KAAM,GAAS,eAAiB,EAAE,kBACpC,GAAI,EAAQ,QAAU,EAAQ,QAC5B,GAAI,EAAM,EAAQ,SAAW,EAAM,EAAQ,QACzC,KACE,GAAS,kBACT,EAAE,4DAGG,EAAQ,QACjB,GAAI,EAAM,EAAQ,QAChB,KAAI,GAAQ,UAAY,EAEpB,EAAS,yBACT,EAAE,oCAEG,EAAQ,UAAY,GACrB,EAAS,mBAAqB,EAAE,4BAGpC,EAAS,oBACT,EAAE,4CAGC,EAAQ,QACb,EAAM,EAAQ,QAChB,KAAI,GAAQ,UAAY,EAEpB,EAAS,yBACT,EAAE,oCAEG,EAAQ,UAAY,EACrB,EAAS,mBAAqB,EAAE,4BAGpC,EAAS,oBACT,EAAE,0CAIH,EAAP,CACA,KAAM,IACJ,EACA,EAAQ,EAAM,QAAS,GAAQ,GAAQ,UAAU,IAIrD,MAAO,IAET,SAAU,EACR,GAAK,EAAI,WAAY,GAAK,GAAS,WAAY,GAAS,YACxD,GAAK,EAAI,WAAY,GAAK,GAAS,WAAY,GAAS,YACxD,GACE,EAAI,WACJ,GAAM,EAAM,aAAc,EAAQ,GAAK,EAAK,cAE9C,GACE,EAAI,WACJ,GAAM,EAAM,aAAc,EAAQ,GAAK,EAAK,cAE9C,IAEF,OAAQ,SAGV,GAAe,IAEf,GAAM,IAAU,CACd,KAAM,UACN,UAAW,GACX,QAAS,CAAC,EAAM,EAAS,IACvB,OAAO,OAAO,GAAI,EAAM,CACtB,KAAQ,OACR,YAAa,EAAQ,YACrB,KAAQ,GAAG,EAAQ,UACnB,YAAe,EAAE,aACjB,MAAS,GAAQ,WAAW,EAAQ,SAExC,WAAY,EAAQ,GAAO,GAAI,UAAW,GAAK,EAAK,cACpD,SAAU,SAAU,EAAO,EAAO,EAAW,CAC3C,EAAM,MAAQ,GAAQ,WAAW,IAEnC,OAAQ,CAAC,EAAS,EAAO,IAAY,GAAS,QAAS,GACvD,YAAa,CAAC,EAAQ,IAAY,CAChC,EAAQ,KAAK,mBACX,WACA,iBAAiB,EAAQ;AAAA,EAC7B,EAAQ,MACP,IAAI,CAAC,CAAE,YAAa,kBAAkB,GAAW,QACjD,KAAK;AAAA;AAAA,IAKN,OAAQ,SAGV,GAAe,IAEf,GAAM,IAAqB,CACzB,KAAM,cACN,QAAS,QACT,QAAS,CAAC,EAAM,EAAS,IACvB,OAAO,OACL,GACA,EACA,CAAE,KAAM,QAAS,MAAO,EAAQ,OAChC,EAAQ,UAAY,CAAE,QAAS,YAEnC,OAAQ,EAAE,MAGZ,GAAe,IAEf,GAAM,IAAe,CACnB,KAAM,QACN,QAAS,QACT,QAAS,CAAC,EAAM,EAAS,IACvB,OAAO,OAAO,GAAI,EAAM,CACtB,KAAM,QACN,MAAO,EAAQ,QAEnB,OAAQ,EAAE,KACV,OAAQ,SAGV,GAAe,IAEf,GAAM,IAAgB,CACpB,KAAM,SACN,QAAS,CAAC,EAAM,EAAS,IACvB,OAAO,OACL,GACA,EACA,CAAE,KAAM,SAAU,MAAO,EAAQ,OACjC,EAAQ,OAAS,CAAE,aAAc,EAAQ,QAE7C,OAAQ,CAAC,EAAS,EAAO,IAAY,GAAY,EAAS,EAAS,UACnE,SAAU,CAAC,EAAK,EAAO,EAAW,IAAY,CAC5C,AAAI,EAAI,OAAQ,IAAU,GAAI,UAAY,EAAQ,KAAK,IACnD,EAAI,QAAS,IAAU,GAAI,MAAQ,EAAQ,MAAM,IACrD,EAAI,UAAU,OAAO,gBAAiB,EAAQ,MAAM,GAAG,SAAS,MAChE,EAAI,UAAU,OAAO,gBAAiB,EAAQ,MAAM,GAAG,SAAS,QAIpE,GAAe,IAEf,GAAM,IAAgB,CACpB,KAAM,SACN,QAAS,SACT,QAAS,GAET,OAAQ,SAAU,EAAS,EAAQ,EAAO,CACxC,GAAI,GACJ,AAAI,CAAC,EAAK,KAAK,eAAiB,EAAQ,WAAa,UACnD,GAAQ,KAAK,IAAI,EAAG,EAAQ,QAAU,GAEtC,EAAO,KACL,KACE,EACA,uBACA,GAAW,EAAQ,MAAM,QACzB,MACA,EACA,MAGJ,GAAO,KAAK,EAAQ,OACpB,EAAO,SAAS,iBAKtB,GAAe,IAEf,GAAM,IAAiB,CACrB,KAAM,UACN,QAAS,UACT,QAAS,GACT,OAAQ,SAAU,EAAS,EAAQ,EAAO,CACxC,EAAO,KAAK,EAAQ,MAAM,QAC1B,EAAO,SAAS,gBAIpB,GAAe,IAEf,GAAM,IAAe,CACnB,KAAM,QACN,QAAS,IACT,QAAS,GACT,OAAQ,SAAU,EAAS,EAAQ,EAAO,CACxC,EAAO,KAAK,EAAQ,OAKpB,GAAK,IAAI,EAAQ,SAIrB,GAAe,IAER,GAAM,IAAO,CAClB,KAAM,OACN,QAAS,EAAQ,GAAc,IAC/B,KAAM,GACJ,0BAA0B,GAAW,GAAM,QAAQ,OAAQ,gBAC7D,WAAY,GAAW,CACrB,GAAM,GAAO,EACX,eACA,AAAC,EAAQ,WAEL,EAAQ,MAAM,SAAW,GACvB,GAAkB,4BAClB,QACA,SAJF,OAKJ,GAEF,MAAO,IACL,GACE,EAAO,eAAgB,UACvB,EACE,GACE,GAAS,WACT,GAAO,CACL,YAAa,SACb,KAAM,wCACH,EAAQ,UAAY,EAAQ,SAAS,kBACtC,EAAE,gFAEJ,KAAM,SACN,UAAW,gBACX,SAAU,GACV,MAAO,EAAE,iBAGb,GACE,GAAS,SACT,GAAI,CAAC,EAAK,IACR,GACE,CACE,MACE,EAAQ,KACR,IACE,IAAQ,QAAU,GAAK,EAAI,GAC7B,MAGJ,OAMV,GACE,EAAO,gBAAiB,IACxB,EACE,GACE,GAAS,WACT,GAAO,CACL,YAAa,SACb,KAAM,SACN,UAAW,gBACX,SACE,GAAC,EAAQ,SACT,EAAQ,MAAM,OAAS,GACtB,EAAQ,aAAe,EAAQ,YAGlC,KAAM,wCACH,EAAQ,UAAY,EAAQ,SAAS,kBACtC,EAAE,mFAIR,GACE,GAAS,SACT,GAAI,CAAC,EAAK,IACR,GACE,CACE,MACE,EAAQ,KAAO,IAAQ,IAAQ,QAAU,GAAK,GAAK,MAEvD,OAMV,GAAU,CACR,EAAK,WACL,CAAC,EAAS,IACD,GACL,GAAS,SACT,GAAI,CAAC,EAAK,IACR,GAAI,CAAC,EAAM,IACT,EACE,GACE,GAAK,EAAK,WAAY,IACtB,EAAM,OAAQ,CAAE,WAAY,GAAG,EAAQ,UAAU,OAEnD,GAAK,EAAK,WAAY,GACpB,EAAM,OAAQ,CAAE,MAAO,EAAK,SAAW,IAEzC,GACE,OAAO,OACL,GACA,EAAQ,GACR,CACE,GACE,EAAQ,GACR,IACE,IAAQ,QAAU,GAAK,GACzB,IACA,GAEJ,GAEJ,EAAM,aAAe,GAAQ,QAAU,GAAK,GAC5C,EAAM,cAAe,IACrB,IACF,IAEJ,KAIN,GACE,GAAS,WACT,GAAI,CAAC,EAAK,IAAU,EAAM,KAAM,GAAG,EAAQ,UAAU,IAAS,KAEhE,GACE,GAAS,SACT,GACE,GAAI,CAAC,EAAM,EAAQ,IACjB,EACE,EAAM,OAAQ,GAAK,QAAQ,EAAM,IACjC,GACE,GAAQ,CACN,GACA,GAAK,EAAK,eAAgB,GAAI,GAAQ,IACtC,IAAM,GAAS,EAAM,EAAS,MAEhC,GAAQ,EAAM,QAAS,EAAM,EAAS,GAAG,GAAI,IAE/C,GACE,GAAQ,CACN,GACA,EAAO,cAAe,GACtB,IAAM,GAAQ,EAAM,EAAS,MAE/B,GACE,GACE,GAAS,CAAC,OAAQ,eAClB,GAAU,GAAG,EAAM,EAAS,GAAG,MAAM,GAAU,KAC/C,KAGN,OAIR,IAEJ,QAAS,CAAC,EAAM,IACP,EAAK,QAAU,KAClB,KACA,EAAK,UAAY,EAAK,cAAgB,GAAK,EAAI,OAAS,EACtD,KACA,KAER,aAAc,GAAU,CACtB,GAAM,GAAS,SAAS,cAAc,MACtC,SAAO,UAAU,IAAI,cACrB,EAAO,aAAa,eAAgB,EAAO,aAC3C,EAAO,aAAa,mBAAoB,QAAQ,EAAO,WACnD,EAAI,UAAW,IACjB,GAAO,UAAY,EAAO,QAC1B,EAAO,GAAK,EAAO,IAEd,GAET,aAAc,GACZ,EAAK,eACL,EACE,GAAI,GAAO,EAAO,cAAe,UAAW,GAAG,EAAK,QACpD,EAAK,YAEP,EAAQ,GAAI,IAAI,EAAK,aAEvB,YAAa,CAAC,EAAM,IAAM,CACxB,GAAM,GAAkB,EAAK,MAAM,EAAG,EAAI,GAC1C,MAAO,GACL,EAAK,SACL,GAAI,EAAQ,GAAM,GAAG,UAAY,EAAK,MAAO,KAC7C,SAAM,GACN,GAAK,GAAO,CAAC,EAAG,QAAS,OACzB,IACA,IAEJ,KAAM,GAAQ,CACZ,GAAM,GAAM,EAAK,KACX,EACJ,IAAQ,KACJ,SAAS,cAAc,cACvB,SAAS,cAAc,GAC7B,MAAI,KAAQ,MACV,GAAO,GAAK,GAAG,EAAK,YAEf,GAET,kBAAmB,CAAC,EAAQ,IACtB,GAAK,OAAS,MACd,GAAK,OAAS,MAAM,EAAO,aAAa,QAAS,OACrD,AAAI,EAAK,SAAW,EAAG,EAAO,aAAa,UAAW,EAAK,UACtD,EAAO,gBAAgB,WAC5B,AAAI,EAAK,QAAS,EAAO,aAAa,UAAW,EAAK,SACjD,EAAO,gBAAgB,WAC5B,AAAI,MAAO,GAAK,SAAY,YAC1B,EAAO,aAAa,cAAe,EAAK,SACrC,EAAO,gBAAgB,eAC5B,EAAO,UAAU,IAAI,aAAgB,GAAK,YAAc,IACpD,EAAK,QAAU,IACjB,EAAO,UAAU,OACf,QACA,EAAK,cAAgB,SAAW,EAAK,QAAU,IAGnD,EAAO,UAAU,IAAI,eAAiB,EAAK,cACpC,GAET,OAAQ,CAAC,EAAS,EAAO,IAAY,CACnC,GAAM,GAAS,EAAE,UAAU,GAAc,eAYzC,GAXA,EAAU,GAAK,WAAW,GACtB,EAAQ,MAAM,SAAW,GAC3B,EAAO,SAAS,YAEd,EAAQ,SACV,GACE,EAAQ,QACR,EACA,GAGA,EAAQ,YAAa,CAEvB,GAAM,GAAQ,SAAS,cAAc,SAC/B,EAAK,SAAS,cAAc,MAClC,EAAM,OAAO,GACb,EAAO,OAAO,GACV,EAAQ,MAAM,OAAS,GACzB,EAAG,OAAO,GAAG,EAAQ,QAAQ,IAAI,GAAK,eAE1C,GAAM,GAAS,SAAS,cAAc,SACtC,EAAO,OAAO,GACd,GAAM,GAAa,GAAK,aAAa,GACrC,SAAQ,MAAM,QAAQ,SAAU,EAAK,EAAG,EAAM,CAG5C,GAAM,GAAwB,GAAK,YAAY,EAAM,GAC/C,EAAQ,SAAS,cAAc,MACrC,AAAI,EAAI,SAAW,GACnB,GAAM,UAAU,OAAO,cAAe,EAAI,GAAG,OAAS,MACtD,EAAO,YAAY,GACnB,EAAI,QAAQ,SAAU,EAAM,EAAM,CAEhC,GAAM,GAAU,CADE,EAAK,OAAS,KAAO,EAAwB,GACnC,EAAW,IAAO,OAAO,SAAS,KAAK,KAC7D,EAAkB,IACnB,EACH,WAEF,GAAI,EAAK,QAAU,KAAM,CACvB,GAAM,GAAS,GAAK,KAAK,GACzB,GAAK,kBAAkB,EAAQ,GAC/B,EAAM,YAAY,GAClB,GACE,EACA,EAAQ,OACR,OAGF,GAAM,YAAY,SAAS,cAAc,oBAKxC,EAAE,IAEX,YAAa,CAAC,EAAQ,IAAY,CAOhC,GAAI,AANiB,CAAC,EAAQ,WAE1B,EAAQ,MAAM,SAAW,GACvB,GAAkB,4BAClB,QACA,SAJF,UAKiB,QAAS,CAC5B,GAAM,GAAgB,oEACpB,EAAQ,OACP,UAAU,gBACV,EAAQ,UAAY,EAAQ,SAAS,eAAkB,EAAE,6BAE5D,EAAO,IAAI,GAAG,mBAAmB,WAAY,KAIjD,SAAU,CAAC,EAAQ,EAAO,EAAW,IAAY,CAE/C,GAAM,GAAU,EAAE,KAAK,EAAQ,WACzB,EAAM,EACV,GAAK,WACL,EAAM,QAAS,EAAQ,MAAS,MAChC,EAAM,UAAW,EAAQ,QAAW,OACpC,GAEI,EAAM,GAAK,WAAW,GAE5B,CACE,GAAG,EAAO,iBACR,2BAA2B,EAAI,MAAM,OAAS,OAEhD,QAAQ,GAAO,EAAI,UAErB,CAAC,GAAG,EAAO,iBAAiB,aAAa,QAAQ,GAAO,CACtD,GAAI,GACJ,KAAS,EAAO,EAAI,WAAW,EAAI,QAAQ,QAAU,GACnD,EAAK,WAKP,EAAC,GAAO,EAAI,QAAS,EAAI,UACxB,EAAI,MAAM,SAAW,GAAK,EAAI,MAAM,SAAW,GAC/C,EAAI,MAAM,SAAW,GAAK,EAAI,MAAM,SAAW,IAGhD,EAAC,GAAG,EAAO,iBAAiB,gBAAgB,QAAQ,GAClD,EAAU,UAGR,EAAI,aAAe,EAAI,MAAM,OAAS,GACxC,EAAI,QACD,QAAQ,SAAU,EAAQ,CACzB,EAAO,cAAc,YAAY,OAAO,GAAK,aAAa,OAIlE,GAAM,GAAa,GAAK,aAAa,GACrC,EAAI,MAAM,QAAQ,CAAC,EAAK,EAAM,IAAS,CACrC,GAAI,GAAQ,EAAO,cAAc,sBAAsB,EAAO,MAC9D,AAAI,IAAU,MACZ,GAAQ,SAAS,cAAc,MAC/B,EAAO,QAAQ,GAAG,OAAO,IAE3B,EAAM,UAAU,OAAO,cAAe,EAAI,GAAG,OAAS,MACtD,GAAM,GAAwB,GAAK,YAAY,EAAM,GACrD,EAAI,QAAQ,CAAC,EAAM,IAAS,CAC1B,GAAM,GAAY,EAAO,cAAc,QAAQ,EAAK,QAC9C,EAAU,EAAI,MAAM,IAAS,EAAI,MAAM,GAAM,GAE7C,EAAU,CADE,EAAK,OAAS,KAAO,EAAwB,GACnC,EAAW,IAAO,OAAO,SAAS,KAAK,KAC7D,EAAkB,IACnB,EACH,WAEI,EAAO,EAAM,WAAW,GAC9B,GAAI,CAAC,EAAM,CAET,GAAM,GAAS,GAAK,KAAK,GACzB,GAAK,kBAAkB,EAAQ,GAC/B,EAAM,YAAY,GAClB,GAAS,EAAM,EAAQ,OAAQ,GAC/B,OAEF,GACE,EAAK,cAAgB,EAAQ,aAC7B,EAAK,OAAS,EAAQ,KACtB,CAEA,GAAI,GACJ,AAAI,EAAK,OAAS,EAAQ,KACxB,GAAS,GAAK,KAAK,GACnB,EAAK,YAAY,IAGjB,GAAS,EACL,EAAK,OAAS,MAChB,GAAO,UAAU,OAAO,eAAiB,EAAQ,aACjD,EAAO,UAAY,KAGnB,EAAK,OAAS,MAChB,IAAK,kBAAkB,EAAQ,GAC/B,GAAS,EAAM,EAAQ,OAAQ,IAEjC,OAEF,GAAI,EAAK,OAAS,KAAM,OAExB,GAAK,kBAAkB,EAAM,GAC7B,GAAM,GAAc,EAAE,KAAK,EAAW,WACtC,AAAI,CAAC,GACD,EAAK,QAAU,EAAY,OAC7B,EAAE,GAAW,cACX,CACE,OAAO,OAAO,GAAI,EAAa,CAC7B,MAAO,EAAK,MACZ,KAAM,EAAK,QAGf,QAMV,WAAY,CAAC,EAAM,IAAa,GAChC,WAAY,CAAC,EAAM,IAAa,CAC9B,EAAK,UAAU,OAAO,cAAe,GACrC,CAAC,GAAG,EAAK,iBAAiB,4BAA4B,QAAQ,GAAS,CACrE,EAAM,SACJ,GAAY,EAAQ,GAAO,QAAS,GAAY,IAAI,IAAY,MAGtE,OAAQ,SAGV,GAAe,IAEf,EAAE,GAAG,OAAO,CAIV,QAAS,SAAU,EAAS,CAC1B,EAAU,GAAW,GACrB,GAAI,GAAY,IACd,EAAW,EACX,EAAQ,KACR,EAAK,KACL,EAAM,GAAS,UAAU,EAAG,OAC5B,EAAQ,EAAE,MACV,EAAU,EAEZ,YAA0B,CACxB,MAAS,IAAkB,oBAAsB,GAGnD,WAAoB,EAAQ,EAAS,CACnC,GAAI,GACF,gGAIF,SACG,QAAQ,kDACR,MAAM,GACT,EAAO,QAAQ,WAAW,KAAK,UAAW,GAC1C,EACG,OACA,KAAK,4BACL,GAAG,QAAS,GACZ,GAAG,YAAa,GAChB,GAAG,mBAAoB,GAEnB,EAAO,SAGhB,WAAgB,EAAM,CACpB,GAAI,GAAQ,EACZ,GAAI,CACF,EAAS,GAAS,OAAO,EAAG,YAC5B,CACA,EAAM,WAGR,AAAI,MAAO,IAAW,aAGtB,GACE,KAAS,EACL,WAAW,EAAS,GACpB,GACE,WAAW,EAAS,GACpB,EAAQ,QACR,EAAQ,UAEd,QAAQ,EAAQ,WAAa,GAE/B,EAAG,IAAI,GAAS,UAAU,IAG1B,EAAM,WAGF,EAAG,KAAK,YAAc,EAAG,OAAO,EAAG,QAAQ,UAC/C,EAAM,KAAK,SAAU,EAAM,QAG7B,EACG,KAAK,SAAU,GACf,IAAI,GACJ,GAAG,UAAW,SAAU,EAAG,CAC1B,GAAI,GAAM,EAAE,QACZ,GAAI,IAAQ,IAAM,IAAQ,GAAI,CAC5B,GAAI,GAAO,IAAQ,GAAK,GAAK,EAC7B,EAAO,GAET,AAAI,IAAQ,IACV,EAAO,KAGV,GAAG,QAAS,UAAY,CACvB,GAAI,GACJ,GAAI,CACF,EAAS,GAAS,OAAO,EAAG,YAC5B,SAEA,CACA,AAAI,IAAW,GAAG,EAAM,IAAI,OAG/B,GAAG,OAAQ,UAAY,CACtB,GAAI,GAAS,EAAM,MACnB,EAAO,GACH,EAAM,QAAU,GAClB,GAAM,SAAS,+BACf,OAAO,WAAW,UAAY,CAC5B,EAAM,YAAY,gCACjB,MAGL,EAAM,KAAK,SAAU,EAAM,SAG/B,YAAyB,CACvB,GAAI,GAAQ,EAAE,MACV,EAAO,EAAM,SAAS,eAAiB,EAAI,GAC/C,EAAQ,OAAO,WAAW,UAAY,CACpC,EAAO,GACH,EAAW,IAAI,GAAW,EAAW,IACzC,EAAM,QAAQ,cACb,GAGL,YAAsB,CACpB,GAAI,GAAO,EAAE,MAAM,SAAS,eAAiB,EAAI,GACjD,EAAO,GAGT,YAAyB,CACvB,cAAO,aAAa,GACpB,EAAW,EACJ,GAGT,MAAI,MAAkB,GAAU,EAAW,EAAO,IAElD,GAAgB,CACd,MAAO,EAAM,IAAI,GACjB,OAAQ,GAAS,OACjB,MAAO,EAAQ,QAEjB,EAAM,GAAG,SAAU,SAAU,EAAQ,EAAM,CACzC,AAAK,EAAK,mBAAoB,IAAO,EAAM,aAEtC,KG33CJ,GAAM,IAAoB,CAAC,EAAQ,IACxC,EACE,OAAO,YACP,GAAI,CAAC,CAAE,OAAM,WAAY,CAAC,EAAK,OAAO,EAAO,QAAS,IACtD,GAAO,CAAC,CAAE,OAAM,WAAY,EAAK,WAAW,IAC5C,GAAK,CAAC,GAAG,IACT,EAAI,YAEK,GAAe,EAC1B,GAAK,QAAS,GAAK,EAAO,UAAW,MACrC,EAAK,WCDP,GAAM,IAAQ,CAAC,EAAQ,IAAY,EAAO,OAAO,GAGjD,YAA+B,EAAU,EAAO,CAE9C,MADI,GAAS,QAAU,GACnB,EAAS,GAAG,OAAS,EAAc,GACnC,EAAS,GAAG,QAAU,WAAmB,GACtC,GAAsB,EAAS,MAAM,GAAI,EAAS,GAAG,OAE9D,YAA0B,EAAU,CAClC,MAAO,IAAsB,EAAS,MAAM,GAAI,EAAS,GAAG,OAG9D,GAAM,IAAoB,GACxB,EAAS,SAAW,WAAa,uBAAyB,GAEtD,GAAoB,GACxB,AAAC,EAAS,UAAiB,sBAAsB,EAAS,gBAApC,GAExB,YAAuB,EAAU,EAAQ,EAAG,EAAmB,CAC7D,MAAM,aAAoB,OAgCtB,EAAS,QAAU,EACd,QAAU,GAAM,KAAK,GAAS,aAAc,GAEnD,GACE,EAAS,GACT,EACA,GAAiB,EAAU,EAAS,GAAG,QACrC,GAAc,EAAS,MAAM,GAAI,EAAS,GAAG,OArC9C,GAAS,MAAQ,EACd,GACE,IAAI,GAAS,YAAY,GAAkB,aAAoB,CAC7D,EAAoB,oBAAsB,GAC1C,EAAS,QAER,OAAO,SACP,KAAK,QAAQ,GAAkB,MAClC,EAAS,MAAQ,GAEnB,EAAS,MAAQ,EACf,GAAM,UAAU,GAAS,QAAS,EAAQ,EAAS,OACnD,OAAO,GAAkB,aAAoB,EAAS,UAAU,GAAkB,MAClF,OAAO,GAAkB,aAAoB,CAC3C,EAAoB,oBAAsB,GAC1C,EAAS,QAER,OAAO,SACP,KAAK,QAAQ,GAAkB,OACxC,UACE,EAAS,UAAY,KAAO,YAAc,8DAE1C,EAAS,YACN,GAAkB,aAAoB,EAAS,mBAClD,EAAS,oCACmB,GAC5B,EAAS,YAAY,0BActB,GAAM,IAAkB,GAAY,CACzC,GAAI,GAAO,GAAc,GAEzB,MAAI,CAAC,IAAK,KAAK,SAAS,EAAK,OAAO,IAC3B,cAAiB,GAAS,QAAU,IAAM,KAAO,EAAO,QAC1D,GAET,YAAwB,EAAU,EAAQ,EAAG,EAAmB,CAE9D,MAAM,aAAoB,OAsBtB,EAAS,QAAU,EAAU,GAE/B,GACE,EAAS,GACT,EACA,GAAiB,EAAU,EAAS,GAAG,QACrC,GAAe,EAAS,MAAM,GAAI,EAAS,GAAG,OA1BhD,UACC,GAAS,UAAY,KAAO,YAAc,IAC3C,WACA,EAAS,OACT,cAEA,EAAS,QACT,YAEA,EAAS,QACT,KACC,IAAqB,EAAS,SAAW,WAAa,WAAa,IACpE,IACC,GAAS,SAAW,WAAa,WAAa,IAC/C,IACA,GAAM,SAAU,EAAQ,GACxB,GAAW,EAAS,YAAY,QAChC,YAaN,GAAM,IAAmB,EACvB,GAAM,IAAM,GAAK,IAAW,EAC5B,GAAU,CAAC,CAAE,YAAa,IAAW,WAG5B,GAAW,GAAK,WAAY,CACrC,GAAI,GAAY,GAChB,KAAK,KAAO,KACZ,KAAK,KAAO,SAAc,EAAU,CAClC,EAAW,GAAY,EACnB,GAAU,GAAY,GAC1B,EACE,gBAAgB,GAAS,uDACzB,SACE,EAAS,QACX,CACE,EAAE,uDAAuD,SAAW,EAIpE,GAAW,GACX,EAAe,IAGX,GAAE,gBAAgB,GAAG,aAAa,EAAW,GAE7C,EAAE,yBAAyB,GAAG,aAAa,EAAe,MAKpE,WAAoB,EAAU,CAC5B,GAAM,GAAe,GAAiB,GACtC,EAAE,gBAAgB,IAAI,CAAC,EAAG,IAAM,CAC9B,GAAM,GAAY,EAAE,QAAQ,MACtB,EAAW,GAAO,CACtB,CAAC,GAAO,UAAW,GAAM,EAAG,IAC5B,CAAC,GAAO,SAAU,GAAM,EAAc,MACtC,CAAC,GAAG,MACH,GAEG,EAAO,GAAgB,EAAS,IACtC,EAAE,GAAG,OACH,IAAI,GAAS,4CAA4C,MAAS,GAAS,WAG/E,EAAE,uBAAuB,SAAS,QAClC,EAAE,8BAA8B,SAAS,cAE3C,WAAwB,EAAU,CAChC,GAAI,EAAS,OAAQ,CACnB,GAAI,GAAO,GAAe,EAAU,GACpC,EAAE,yBAAyB,OAAO,WAAa,EAAO,cAI1D,MAAO,OCxKF,GAAM,IAAW,IAAM,GAAO,aAAe,GCO7C,GAAM,IAAuB,kBAElC,GAAwB,mBAExB,GAAkC,6BAJ7B,GAUL,IAAyB,oBAEzB,GAAyB,oBAZpB,GAmBL,IAAmB,cAEnB,GAAyB,oBAEzB,GAAsB,iBAEtB,GAAwB,mBAGxB,GAAqB,gBA5BhB,GAiCL,IAAuB,kBAEvB,GAAoB,eAnCf,GA2CL,IAAqB,gBAErB,GAAoB,eAEpB,GAAsB,iBAEtB,GAAqB,gBAjDhB,GAqDL,IAAsB,iBAEtB,GAAmB,cAQrB,GAAM,IAAW,CACf,MAAO,CAAC,IACR,KAAM,CACJ,GACA,GACA,GACA,GACA,GACA,GACA,IAIF,cAAe,CACb,GACA,GACA,GACA,GACA,GACA,GACA,GAEA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GAKA,IAGF,OAAQ,CAAC,IACT,QAAS,CACP,GACA,GACA,GACA,GACA,GACA,IAGF,YAAa,CAAC,GAAkB,GAAqB,IACrD,IAAK,IAGM,GAAc,IACzB,EACE,GACE,EAAK,eACL,EAAQ,GAAQ,GAAS,IAAS,GAAS,IAAQ,EAAK,UAE1D,IACA,MAOG,GAAM,IAAqB,GAChC,EAAY,KAAK,GAAQ,EAAK,WAAW,WCnI3C,AAAC,UAAU,EAAG,CACZ,GAAI,GAAK,EAAE,SAAW,SAAU,EAAG,EAAG,EAAG,CACvC,EAAE,QAAQ,SAAS,EAAG,EAAG,IAE3B,EAAE,SAAW,CACX,KAAM,KACN,SAAU,WAAW,EAAE,GAAG,SAAW,IAAM,EAAI,EAC/C,MAAO,IAET,EAAE,OAAS,SAAU,EAAG,CACtB,MAAO,GAAE,QAAQ,eAEnB,EAAE,GAAG,YAAc,UAAY,CAC7B,MAAO,MAAK,IAAI,UAAY,CAC1B,GAAI,GAAI,KACN,EACE,CAAC,EAAE,UACH,EAAE,QAAQ,EAAE,SAAS,cAAe,CAClC,SACA,YACA,OACA,UACI,GACV,GAAI,CAAC,EAAO,MAAO,GACnB,GAAI,GAAK,GAAE,eAAiB,GAAG,UAAY,EAAE,eAAiB,EAC9D,MAAO,UAAU,KAAK,UAAU,YAAc,EAAE,YAAc,aAC1D,EAAE,KACF,EAAE,mBAGV,EAAE,GAAG,SAAW,SAAU,EAAG,EAAG,EAAG,CACjC,MAAI,OAAO,IAAK,UACd,GAAI,EACJ,EAAI,GAEF,MAAO,IAAK,YAAY,GAAI,CAAE,QAAS,IACvC,GAAK,OAAO,GAAI,KACpB,EAAI,EAAE,OAAO,GAAI,EAAE,SAAU,GAC7B,EAAI,GAAK,EAAE,SACX,EAAE,MAAQ,EAAE,OAAS,EAAE,KAAK,OAAS,EACjC,EAAE,OAAO,IAAK,GAClB,EAAE,OAAS,EAAK,EAAE,QAClB,EAAE,KAAO,EAAK,EAAE,MACT,KAAK,cACT,KAAK,UAAY,CAChB,GAAI,GAAK,KAAM,OACf,GAAI,GAAI,KACN,EAAQ,EAAE,GACV,EAAO,EACP,EACA,EAAO,GACP,EAAM,EAAM,GAAG,aACjB,OAAQ,MAAO,QACR,aACA,SACH,GAAI,gCAAgC,KAAK,GAAO,CAC9C,EAAO,EAAK,GACZ,MAGF,GADA,EAAO,EAAE,EAAM,MACX,CAAC,EAAK,OAAQ,WACf,SACH,AAAI,GAAK,IAAM,EAAK,QAAO,GAAQ,GAAO,EAAE,IAAO,UAEvD,EAAE,KAAK,EAAE,KAAK,MAAM,IAAK,SAAU,EAAG,EAAG,CACvC,GAAI,GAAI,GAAK,IAAM,OAAS,MAC1B,EAAM,EAAE,cACR,EAAM,SAAW,EACjB,EAAM,EAAE,GACR,EAAM,EAAE,IAAI,EAAG,GACjB,GAAI,EACF,EAAK,GAAO,EAAK,GAAQ,GAAM,EAAI,EAAM,EAAM,SAAS,IACpD,EAAE,QACJ,GAAK,IAAQ,SAAS,EAAK,IAAI,SAAW,KAAO,EACjD,EAAK,IAAQ,SAAS,EAAK,IAAI,SAAW,EAAI,WAAa,GAE7D,EAAK,IAAQ,EAAE,OAAO,IAAQ,EAC1B,EAAE,KAAK,IACT,GAAK,IAAQ,EAAK,GAAK,IAAM,QAAU,YAAc,EAAE,KAAK,QACzD,CACL,GAAI,GAAI,EAAK,GACb,EAAK,GACH,EAAE,OAAS,EAAE,MAAM,KAAO,IAAO,WAAW,GAAK,IAAO,EAAM,EAElE,AAAI,EAAE,OAAS,QAAQ,KAAK,EAAK,KAC/B,GAAK,GAAO,EAAK,IAAQ,EAAI,EAAI,KAAK,IAAI,EAAK,GAAM,IACnD,CAAC,GAAK,EAAE,OACN,IAAO,EAAK,IAAM,EAAQ,EAAE,cAChC,MAAO,GAAK,MAGhB,EAAQ,EAAE,SACV,WAAiB,EAAG,CAClB,EAAM,QACJ,EACA,EACA,EAAE,OACF,GACE,UAAY,CACV,EAAE,KAAK,KAAM,EAAM,QAK5B,OAEL,EAAE,IAAM,SAAU,EAAG,EAAG,CACtB,GAAI,GAAI,GAAK,IAAM,QAAU,SAC3B,EAAS,SAAW,EACtB,GAAI,CAAC,EAAE,GAAG,GAAG,aAAc,MAAO,GAAE,GAAU,EAAE,GAAG,EAAE,iBACrD,GAAI,GAAI,SAAW,EACjB,EAAO,EAAE,cAAc,gBACvB,EAAO,EAAE,cAAc,KACzB,MAAO,MAAK,IAAI,EAAK,GAAS,EAAK,IAAW,KAAK,IAAI,EAAK,GAAI,EAAK,KAEvE,WAAc,EAAG,CACf,MAAO,OAAO,IAAK,SAAW,EAAI,CAAE,IAAK,EAAG,KAAM,MAEnD,QC3HH,GAAI,MAAQ,QACV,KAAM,wBAwDR,EAAE,QAAQ,YAAY,SAEtB,GAAM,IAAoB,GAAW,EAAM,kBAS3C,EAAE,WAAa,SAAU,EAAS,CAChC,GAAI,GAAS,CAAE,MAAO,OAAO,SAAS,QAAU,IAC9C,EAAS,GAEX,MAAI,OAAO,IAAY,UACrB,GAAU,CAAE,MAAO,IAErB,EAAE,OAAO,EAAQ,EAAE,WAAY,GAC/B,EAAO,MAAQ,EAAO,MAAM,QAAQ,MAAO,IAE3C,EAAE,KAAK,EAAO,MAAM,MAAM,EAAO,WAAY,SAAU,EAAG,EAAO,CAC/D,GAAI,GAAO,EAAM,MAAM,KACrB,EAAM,EAAO,OAAO,EAAK,QAAS,MAAM,WACxC,EAAQ,EAAO,OAAO,EAAK,OAAS,EAAK,KAAK,KAAO,KAAM,GAE7D,AACE,GAAO,WAAW,KACd,EAAO,WAAW,KAAK,GACvB,EAAO,WAAW,IAEtB,GAAO,GAAO,EAAO,IAAQ,GAC7B,EAAO,GAAK,KAAK,IAEjB,EAAO,GAAO,IAGlB,MAAO,GAAO,IACP,GAET,EAAE,WAAW,OAAS,EAAE,WAAW,eAAiB,SAAU,EAAQ,CACpE,MAAO,oBAAoB,IAAU,IAAI,QAAQ,MAAO,OAE1D,EAAE,WAAW,WAAa,UAAY,CACpC,MAAO,IAET,EAAE,WAAW,UAAY,IAGzB,EAAE,UAAU,GAAG,QAAS,sBAAuB,UAAY,CACzD,GAAI,GAAQ,EAAE,MAEV,EAAQ,SAAS,EAAM,KAAK,cAE5B,EAAO,EAAM,MAEb,EAAQ,EAAK,OAGjB,GAAI,EAAQ,EAAO,CAEjB,GAAI,GAAW,EAAK,OAAO,EAAG,GAG9B,EAAM,IAAI,GACV,EAAM,SAAS,+BACf,OAAO,WAAW,UAAY,CAC5B,EAAM,YAAY,gCACjB,QAIP,GAAI,GAAK,CAAE,OAAM,QAKjB,YAAyB,EAAG,EAAG,CAC7B,GAAI,GAAG,EAAG,EAMV,IAJA,EAAI,EAAE,cAAc,MAAM,SAC1B,EAAI,EAAE,cAAc,MAAM,SAC1B,EAAI,KAAK,IAAI,EAAE,OAAQ,EAAE,QAEpB,EAAI,EAAG,EAAI,EAAG,IAQjB,GAPA,EAAI,EAAE,GAAK,EAAE,GACT,MAAM,IACR,CAAI,EAAE,KAAO,EAAE,GAAI,EAAI,EAClB,AAAI,EAAE,GAAK,EAAE,GAChB,EAAI,GACC,EAAI,GAET,IAAM,EAAG,MAAO,GAGtB,MAAO,GAAE,OAAS,EAAE,OAGtB,YAA2B,EAAM,EAAG,EAAG,CACrC,MAAO,IAAgB,OAAO,EAAE,IAAQ,OAAO,EAAE,KAOnD,EAAE,UAAY,CACZ,EAAE,WAAW,YACX,EAAE,OACA,GACA,EAAE,WAAW,UACb,CACE,SAAU,GACV,WAAY,GACZ,YAAa,GACb,UAAW,eAEb,GAAkB,wBAA0B,GAC5C,CAAE,UAAW,gBAWnB,EAAE,GAAG,MAAQ,SAAU,EAAG,CACxB,MAAO,MAAK,MAAM,UAAY,CAC5B,GAAI,GAAK,KACT,OAAO,WAAW,UAAY,CAC5B,MAAO,GAAE,GAAI,WACZ,MAIP,EAAE,GAAG,KAAO,UAAY,CACtB,MAAO,MAAK,UAAU,EAAE,UAAU,GAAG,KAAK,MAAM,KAAM,cAGxD,EAAE,GAAG,OAAO,CACV,cAAe,SAAU,EAAS,CAChC,MAAO,MAAK,KAAK,UAAY,CAC3B,GAAI,SAAS,UAAW,CAEtB,KAAK,QACL,GAAI,GAAM,SAAS,UAAU,cAC7B,EAAI,KAAO,EACX,KAAK,gBACI,KAAK,gBAAkB,KAAK,gBAAkB,IAAK,CAE5D,GAAI,GAAW,KAAK,eAChB,EAAS,KAAK,aACd,EAAY,KAAK,UACrB,KAAK,MACH,KAAK,MAAM,UAAU,EAAG,GACxB,EACA,KAAK,MAAM,UAAU,EAAQ,KAAK,MAAM,QAC1C,KAAK,QACL,KAAK,eAAiB,EAAW,EAAQ,OACzC,KAAK,aAAe,EAAW,EAAQ,OACvC,KAAK,UAAY,MAEjB,MAAK,OAAS,EACd,KAAK,QAEP,MAAO,SAGX,cAAe,UAAY,CACzB,GAAI,GAAK,KAAK,IAAI,GAClB,GAAI,GACF,GAAI,MAAO,GAAG,gBAAmB,SAC/B,AAAC,EAAG,eAAiB,EAAK,EAAG,aAAe,EAAG,MAAM,eAC5C,MAAO,GAAG,iBAAoB,YAAa,CACpD,EAAG,QACH,GAAI,GAAQ,EAAG,kBACf,EAAM,UAGV,MAAO,SAaX,AAAC,WAAY,CACX,GAAI,GAAM,KACR,EAAS,IACX,EAAE,QAAQ,GAAG,SAAU,UAAY,CACjC,AAAI,GAAK,OAAO,aAAa,GAC7B,EAAM,OAAO,WAAW,UAAY,CAClC,EAAE,MAAM,QAAQ,cACf,SAMP,GAAI,IAAO,CACT,UAAW,EACX,IAAK,EACL,MAAO,GACP,MAAO,GACP,IAAK,GACL,GAAI,GACJ,KAAM,GACN,SAAU,KAIR,GAAO,CACT,UAAW,SAAU,EAAI,CACvB,GAAI,EAAC,EAAK,IAAI,YACd,IAAI,EAAG,cAAc,QAAU,EAAG,cAAc,OAAO,UAAY,MAC7D,CAAC,GAAS,GAAK,MAAO,GAE5B,GAAI,GAAU,EAAE,EAAG,QACnB,OAAQ,EAAG,aACJ,IAAK,MACR,GAAI,EAAQ,SAAS,YACnB,UAAK,SACE,GAET,GAAI,EAAQ,SAAS,WACnB,UAAK,QACE,GAET,GAAI,CAAC,EAAK,IAAI,aAAc,CAC1B,GACE,EAAG,UACH,EAAQ,SAAS,YACjB,EAAQ,GAAG,uBACX,EAAQ,GAAG,wBACX,EAAQ,GAAG,2BACX,EAAQ,GAAG,2BACX,EAAQ,GAAG,gCACX,EAAQ,GAAG,YAEX,UAAK,QACE,GAET,GAAI,EAAG,OAAO,UAAY,WAAY,CACpC,EAAG,2BACH,OAGJ,GAAI,EAAG,OAAO,UAAY,KACpB,EAAG,OAAO,KAAK,OAAO,MAAQ,IAEhC,MAEJ,UACG,IAAK,MACR,GAAI,EAAQ,GAAG,mBACb,SAAQ,QAAQ,SACT,GAET,UACG,IAAK,UACR,MAAO,IAAkB,OAEtB,IAAK,IACR,EAAE,aAAa,OACf,UACG,IAAK,SACR,GAAI,EAAQ,KAAK,UAAY,UAC3B,SAAQ,cAAc,EAAE,iBAAkB,MACnC,OAOjB,YAAkB,EAAI,CACpB,GAAI,GAAS,EAAG,cAAc,OAC5B,EAAU,EAAE,GACd,OAAQ,EAAG,aACJ,IAAK,GACR,SAAE,EAAG,QAAQ,OAAO,QAAQ,SACrB,OACJ,IAAK,SACL,IAAK,IAIR,MAHI,GAAQ,KAAK,aAAa,SAAW,GAIvC,EAAQ,KACN,wDACA,OAEK,GAET,CAAI,EAAG,SAAU,EAAQ,OAAO,QAAQ,SACnC,EAAQ,OAAO,QAAQ,SACrB,QACJ,IAAK,MACR,GAAI,GAAU,EAAQ,KAClB,+CAEF,EAAS,EAAQ,OAAO,WAC1B,MAAI,GAAQ,OAAS,EAAU,GAC1B,GAAO,KAAK,UAAW,CAAC,EAAO,GAAG,aAChC,IAEX,MAAO,GAGT,YAAyB,EAAI,CAC3B,MAAO,GAAG,OAAS,WAAa,EAAG,UAAY,GAAK,MAGtD,YAA2B,EAAI,CAC7B,MAAK,GAAG,SACJ,GAAK,IAAI,eACb,IAAK,SACL,EAAG,iBACH,EAAG,4BACI,IALkB,GAQ3B,EAAE,UAAU,GAAG,UAAW,GAAK,WAE/B,EAAE,UAAU,GAAG,UAAW,UAAW,SAAU,EAAI,CACjD,MAAI,GAAG,UAAY,GAEjB,GAAE,MAAM,QAAQ,SACT,IAEF,KAMT,aAAmB,CACjB,GAAI,GAAW,EAAK,OAAO,aAAe,GAE1C,EAAK,OAAO,UAAW,EAAS,OAAS,iBACzC,EAAK,OAAO,SAAU,EAAS,OAAS,QACxC,EAAK,OAAO,WAAY,EAAS,OAAS,UAC1C,EAAK,OAAO,gBAAiB,EAAS,OAAS,eAC/C,EAAK,OAAO,UAAW,EAAS,OAAS,SACzC,EAAK,OAAO,cAAe,EAAS,WAAa,aACjD,GAAM,GAAQ,KACd,EAAM,QAAQ,GAAK,CACjB,EAAK,OAAO,EAAG,GAAM,MAEvB,EAAK,OAAO,qBAAsB,GAAmB,GAAQ,IAO/D,EAAE,UAAY,CACZ,EAAE,QAAQ,KAAK,aAAc,QAE7B,SAAS,iBAAiB,SAAU,SAAU,EAAI,CAChD,GAAI,GAAS,EAAG,OAAO,aAAa,UACpC,GAAI,CAAC,EACH,SAAG,iBACI,KAKX,EAAE,UAAU,GAAG,SAAU,gBAAiB,UAAY,CAEpD,GAAI,GAAS,EAAE,MAAM,iBACnB,EAAS,KAAK,aAAa,UAE7B,SAAE,KAAK,EAAQ,SAAU,EAAG,EAAK,CAC/B,AAAI,EAAI,OAAS,MAAO,EAAI,MAAQ,OAC/B,EAAI,MAAS,GAAI,OAAS,IAAI,SAErC,EAAE,SACA,EACA,CAAC,EAAE,MAAM,GAAS,OAAO,SAAS,OAAO,UAAU,IAAI,KAAK,MAEvD,KAGT,GAAI,GAAY,OAAO,WAAW,UAAY,CAC5C,EAAE,sCAAsC,QAAQ,UAC/C,GAEH,EAAG,OAAS,SAAgB,EAAQ,CAClC,GACG,MAAO,GAAO,UAAa,aAC1B,MAAO,GAAO,UAAa,aAC7B,EAAO,UACP,EAAO,SACP,EAAO,WACP,EAAO,QACP,EAAO,OACP,EAAO,SACP,EAAO,KACP,CAGA,GAFA,EAAK,IAAI,gBACT,KACI,EAAO,KAAM,GAAI,MAAM,uBAClB,CAAC,EAAG,mBAAoB,CAC/B,GAAI,GACJ,AACE,MAAO,GAAO,UAAa,aAC3B,MAAO,GAAO,UAAa,aAE3B,GAAS,SACP,EAAO,UAAU,GAAS,QAE1B,MAAO,GAAO,UAAa,aAAe,EAAO,SACnD,GAAS,QACP,EAAO,UAAa,GAAO,SAAW,EAAO,SAC/C,GAAS,UACP,EAAO,WAAW,GAAS,QAC3B,EAAO,SACT,GAAS,EAAO,QAChB,MAAO,GAAO,SAEhB,EAAE,SAAS,EAAQ,EAAE,MAAM,GAAU,aAAa,KAAK,IAEzD,OAAO,aAAa,KAIxB,AAAI,OAAO,SAAS,OAAO,OAAS,EAClC,EAAG,OAAO,EAAE,cACP,KAEP,EAAE,UAAU,GAAG,qBAAsB,MAQvC,YAAyB,EAAS,YAAa,CAC7C,MAAI,OAAO,IAAW,SACpB,SAAQ,KAAK,sCACN,aAEJ,4BAA4B,KAAK,GAI/B,EAHL,SAAQ,KAAK,mBAAqB,GAC3B,aAKX,GAAW,OAAS,GAClB,GAAkB,mBAAoB,cAGxC,aAAsB,CACpB,EAAE,aAAa,GAAW,UAK5B,EAAE,UAAU,GAAG,SAAU,+BAAgC,UAAY,CACnE,EAAG,SAAS,EAAE,MAAM,SAGtB,EAAE,UAAU,GAAG,QAAS,iBAAkB,UAAY,CACpD,GAAI,GAAQ,EAAE,MACZ,EAAU,EAAM,KAAK,gBACvB,EAAG,SAAS,KAMd,EAAE,GAAG,SAAW,UAAY,CAC1B,MACE,SACE,EAAE,UAAY,IAAO,MAAK,QAAU,EAAI,EAAE,QAAU,EAAE,UAAY,KAG7D,KAAK,KAAK,UAAY,CAC3B,GAAI,GAAK,EAAE,MACX,GAAI,EAAG,SAAS,WAAY,CAC1B,GAAI,GAAQ,CACV,OAAQ,EAAG,KAAK,UAChB,UAAW,EAAG,KAAK,cAErB,GAAW,EAAM,OAAQ,EAAM,UAAW,EAAK,OAAO,aAClD,GAAc,IAChB,GAAE,SAAS,QACX,EAAK,MAAM,gBAKZ,MAGT,GAAI,IAAS,UAAY,CACvB,GAAI,GAAS,GACT,EAAmB,GACnB,EAAO,GACP,EAAO,EACP,EAAc,EAAE,wBAEpB,WAAgB,EAAO,CAGrB,GAFA,EAAmB,GAAS,GAC5B,EAAS,GAAS,GACd,GAAS,EAAM,OAAS,EAAG,CAC7B,EAAM,KAAK,SAAU,EAAG,EAAG,CACzB,MAAO,GAAE,UAAY,EAAE,UAAY,GAAK,IAE1C,GAAI,GAAY,EAAE,sBAClB,AAAI,EAAU,GAAG,WACf,GAAU,KACR,wBACE,GAAiB,EAAE,qBAAsB,GACzC,gEAEA,GAAiB,EAAE,wBAAyB,GAC5C,qHAGA,GAAiB,EAAE,oBAAqB,GACxC,2DAEA,GAAiB,EAAE,oBAAqB,GACxC,mFAGA,EACA,iBAEA,EACA,uCAGJ,EAAU,KAAK,eAAgB,KAE7B,EAAU,KAAK,iBACjB,GAAU,WAAW,gBACrB,EAAE,kBAAkB,MAAM,GAC1B,EAAE,kBAAkB,MAAM,GAC1B,EAAE,mBAAmB,MAAM,EAAU,KAAK,KAAM,IAChD,EAAE,kBAAkB,MAClB,EAAU,KAAK,KAAM,KAAK,MAAO,GAAO,OAAS,GAAK,KAGxD,EAAE,mBAAoB,GAAW,MAAM,SAAU,EAAI,CACnD,GAAI,EAAG,UAAY,GAAK,IAAK,MAAO,GACpC,GAAI,GAAQ,EAAE,MACZ,EAAO,GAAM,OAAS,IAAI,OAC5B,GAAI,GAAO,GAAI,CACb,GAAI,GAAK,GAAI,QAAO,EAAK,KACzB,EAAS,EAAiB,OAAO,SAAU,EAAG,CAC5C,MAAO,GAAG,KAAK,EAAE,YAEd,GAAS,EAChB,SAAU,GACH,MAGX,EAAU,OAEV,KAGJ,WAAmB,EAAK,CACtB,EAAO,EACP,GAAI,GAAU,EAAO,OAErB,EAAE,sBAAsB,SAExB,EAAE,EAAO,MAAM,EAAO,EAAO,GAAO,GAAK,IAAO,KAAK,SAAU,EAAG,CAChE,GAAO,EAAO,EAAI,EAAO,IAAO,SAAS,qBAEvC,EAAO,QACT,GACE,gEAEE,KACA,gDACA,EAAO,GAAG,OACV,KACA,EAAE,qBACF,sBAGC,GAAG,QAAQ,QACR,mEAEA,KACA,wDAEA,EAAE,aACF,gBAGA,IACJ,YACF,UAAU,mBAIZ,EAAE,+BAA+B,UAGnC,EAAE,0BACC,KACC,EAAO,EACL,EACA,IACA,KAAK,IAAI,EAAU,GAAO,GAAK,GAC/B,IACA,GAEH,KACC,aACA,GACE,EAAE,+BACF,EAAO,EAAO,EACd,KAAK,IAAI,EAAU,GAAO,GAAK,GAC/B,IAIN,EAAE,mCAAmC,KAAK,WAAY,GAAQ,GAC9D,GAAI,GAAY,GAAQ,KAAK,MAAO,GAAU,GAAK,GACnD,EAAE,kCAAkC,KAAK,WAAY,GAErD,EAAE,aAAa,QAAQ,eAEzB,YAAqB,CACnB,GAAI,GAAW,KAAK,MAAM,EAAO,OAAS,GAC1C,EAAU,KAAK,IAAI,EAAO,EAAG,IAE/B,YAAqB,CACnB,EAAU,KAAK,IAAI,EAAO,EAAG,IAE/B,YAAiB,CACf,EAAE,mBAAmB,QAEvB,MAAO,CACL,MAAO,EACP,OAAQ,MAIZ,aAA0B,CACxB,GAAI,GAAO,EACX,MACE,GAAE,KAAK,CAAC,aAAc,mBAAoB,gBAAiB,EAAK,QAC7D,OAAS,EAIhB,YAAgB,EAAO,CACrB,GAAI,GAAM,EAAE,OACV,GACA,EAEA,CACE,UAAW,EAAM,WAAa,GAAU,EAAM,WAC9C,WACE,EAAK,OAAO,oBACZ,EAAM,YACN,GAAU,EAAM,aAEpB,CACE,aAAc,EAAK,OAAO,gBAC1B,iBAAkB,EAAK,OAAO,sBAGlC,AAAI,EAAK,OAAO,eAAe,GAAI,UAAY,GAAS,WAAW,IAE/D,EAAI,YAAY,GAAI,SAAW,GAAU,EAAI,aAC7C,EAAI,WAAW,GAAI,WAAa,GAAU,EAAI,YAClD,GAAI,GAAO,EAAG,eAAe,GAEzB,EAAQ,EAAE,GAEd,SAAM,KAAK,iBAAiB,KAAK,gBAAiB,SAAU,EAAI,CAC9D,AAAI,GAAgB,IACpB,EAAK,QAAQ,CACX,IAAK,SACL,KAAM,CACJ,OAAQ,EAAM,OACd,UAAW,EAAM,UACjB,SAAU,EAAK,OAAO,YACtB,IAAK,YAIX,EAAM,KAAK,iBAAiB,KAAK,gBAAiB,SAAU,EAAI,CAC9D,AAAI,GAAgB,IACpB,EAAK,QAAQ,CACX,IAAK,SACL,KAAM,CACJ,OAAQ,EAAM,OACd,cAAe,EAAM,UACrB,SAAU,EAAK,OAAO,YACtB,IAAK,YAIX,EAAM,KAAK,YAAa,EAAM,WAC9B,EAAM,KAAK,SAAU,EAAM,QACpB,EAGT,EAAG,eACD,EAAG,gBACH,SAAU,EAAO,CACf,GAAI,GACF,EAAW,GACX,EAAW,GACX,EAAa,GACb,EAAa,GACb,EAAU,CAAC,WACb,SAAY,EAAE,eAAiB,KAAO,EAAM,WACxC,EAAK,OAAO,oBACd,IAAa,KAAO,EAAE,WAAa,KAAO,EAAM,UAElD,EACE,2BACA,EACA,KACA,EAAM,WACN,QACE,EAAK,OAAO,eACd,GACE,+CAEA,EAAM,UAAU,QAAQ,KAAM,SAC9B,0DAEA,EAAE,UACF,aAEA,EAAK,OAAO,qBACd,GACE,4FAIA,EAAE,UACF,kBAIA,EAAK,OAAO,iBACd,GACE,+DAIA,EAAE,QACF,kBAIA,GAAc,IAChB,EAAQ,KAAK,WAIb,cACA,EAAQ,KAAK,KACb,+DAGA,EACA,KACA,EAAE,aACF,KACA,EAAM,KACN,KACC,GAAM,MAAQ,EAAE,SACjB,iBACA,EACA,EACA,EACA,EACA,SAIN,YAAuB,EAAO,CAC5B,MACE,GAAM,WAAa,EAAK,OAAO,cAC/B,EAAM,QAAU,EAAK,OAAO,UAIhC,YAAoB,EAAQ,EAAW,EAAU,CAG/C,EAAK,KAAK,CACR,IAAK,SACL,KAAM,CACJ,SACA,YACA,WACA,IAAK,UAKX,EAAE,UAAU,GAAG,gBAAiB,kBAAmB,SAAU,EAAI,CAC/D,AAAI,EAAG,OAAS,WAAa,EAAG,UAAY,GAAK,OACjD,EAAE,MAAM,QAAQ,YAAY,aAG9B,YAAiB,EAAQ,EAAS,EAAS,GAAI,CAC7C,GAAM,GAAO,OAAO,OAClB,GACA,OAAO,KAAY,GAAU,EAC7B,CACE,OAAQ,EACR,SAAU,EAAK,OAAO,YACtB,KAAM,OACN,IAAK,QAEP,GAAW,CAAE,YAEf,AAAI,EAAK,OAAO,aACd,GAAK,OAAQ,SAAU,EAAU,CAC/B,EAAK,KAAO,GACR,EAAS,SAAW,SACtB,EAAK,QAAQ,CAAE,KAAM,MAIzB,EAAK,QAAQ,CAAE,KAAM,IAIzB,EAAE,UAAU,GAAG,gBAAiB,cAAe,SAAU,EAAI,CAC3D,MAAI,GAAG,OAAS,SAAW,GAAgB,KAAK,EAAG,kBAC5C,KAGT,EAAE,UAAU,GAAG,gBAAiB,cAAe,SAAU,EAAI,CAC3D,GAAI,GAAgB,GAAK,MAAO,GAChC,GAAM,GAAQ,EAAE,MACd,EACE,KAAK,aAAa,mBAClB,EAAM,QAAQ,aAAa,KAAK,kBAClC,EAAU,EAAM,KAAK,eAAe,MACpC,EAAS,GAAkB,kBAAmB,MAChD,UAAQ,EAAQ,EAAS,GAClB,KAMT,GAAI,IAAS,CACX,SAAU,aACV,UAAW,SAAU,EAAO,CAC1B,SAAM,SAAW,EAAK,OAAO,YAE1B,EAAG,iBAAmB,EAAG,gBAAgB,IACzC,SAAU,EAAO,CAChB,GAAI,GAAS,EAAM,OACnB,MACE,uBACA,EAAM,eACN,aACA,EAAM,MACN,cACA,EACA,qBACA,EACA,sDAGA,EAAG,WAAW,EAAM,WACpB,gEAGA,EACA,KACA,EAAE,OACF,uBAGD,IAIP,aAAc,SAAU,EAAO,CAC7B,SAAM,eAAiB,EAAM,SAAW,WAAa,GACrD,EAAM,UAAY,EAAM,UAAU,QAAQ,KAAM,KAC5C,EAAM,YACR,GAAM,MAAQ,GAAU,EAAM,YAC9B,EAAM,WAAa,GAAU,EAAM,QAEjC,EAAM,WACR,GAAM,aAAe,EAAM,UAAU,MAAM,yBAEzC,EAAM,YACR,GAAM,cAAgB,EAAM,WAAW,MAAM,yBAExC,GAET,OAAQ,SAAU,EAAM,CACtB,GAAI,GAAS,EAAK,OAClB,EAAO,KAAK,GAAkB,KAAK,KAAM,cAEzC,GAAI,GAAW,EAAO,OAAO,SAAU,EAAG,CACxC,MAAO,OAAO,GAAE,OAAa,WAE/B,AAAI,EAAS,IACX,GAAS,KAAK,SAAU,EAAG,EAAG,CAC5B,MACE,GAAE,MAAW,EAAE,OACf,GAAgB,OAAO,EAAE,OAAW,OAAO,EAAE,UAGjD,EAAS,EAAO,OAAO,SAAU,EAAG,CAElC,MAAO,OAAO,GAAE,OAAa,WAE/B,EAAS,EAAS,OAAO,IAG3B,KAAK,QACL,GAAI,GAAO,KACX,EAAE,KAAK,UAAU,OACf,EAAE,IAAI,EAAQ,SAAU,EAAO,CAC7B,MAAO,GAAK,UAAU,EAAK,aAAa,QAI9C,MAAO,UAAY,CACjB,EAAE,KAAK,UAAU,UAIrB,EAAE,UAAU,GAAG,gBAAiB,kBAAmB,SAAU,EAAI,CAC/D,GAAI,IAAgB,GACpB,IAAI,GAAQ,EAAE,MACZ,EACE,KAAK,aAAa,mBAClB,EAAM,QAAQ,aAAa,KAAK,kBACpC,EAAK,QAAQ,CACX,IAAK,OACL,KAAM,CACJ,OAAQ,EACR,SAAU,EAAK,OAAO,YACtB,IAAK,QAEP,SAAU,YAgBd,YAAc,EAAW,EAAI,EAAU,GAAI,CAEzC,GADA,GAAW,QACP,GAAK,KAET,GAAK,MAAQ,EAAK,KAAK,QACvB,EAAK,UAAY,EACjB,EAAK,IAAM,EAAK,YAAc,UAAY,GAAW,EAAQ,OAE7D,GAAI,CACF,GACE,CAAC,OAAQ,QAAQ,SAAS,IAC1B,EAAE,qDACC,SAAS,CAAE,OAAQ,GAAO,SAAU,GAAO,cAAe,KAC1D,OAAO,uBAAuB,OAAS,EAE1C,KAAM,IAAI,OAAM,uDAElB,GAAM,GAAY,GAAO,EAAK,YAAa,IACzC,SAAS,cAAc,oBACvB,GACI,EAAW,EAAK,OAAO,YACvB,EAAU,EAAE,KAAK,GAAW,QAIlC,GAHA,EAAK,QAAU,EAGX,CAAE,KAAc,SAAW,EAAK,IAAI,eAAgB,CACtD,GAAM,GAAc,CAClB,MAAgB,CAAC,GAAW,CAAC,EAAQ,KACrC,KAAM,CACJ,QAAU,EACV,IAAc,UAAY,GAAW,EAAQ,OACzC,UAAY,mBAAmB,EAAQ,QACvC,GACJ,IAAc,YACV,gBAAkB,EAAQ,aAC1B,GACJ,IAAc,WAAa,WAAa,EAAQ,QAAU,GAC1D,EAAK,QAAQ,EAAK,cAClB,YAAc,EACd,WACA,GAAc,CACZ,YACA,OAAQ,GAAI,iBAAgB,EAAQ,eAEnC,WACA,QAAQ,SAAU,WAEpB,OAAO,SACP,KAAK,KACR,QAAS,SAAU,EAAM,EAAQ,EAAK,CACpC,EAAK,WAAa,EAClB,EAAK,QAAU,GAAW,EAAQ,KAClC,EAAK,UAAY,EAAO,WAAY,GAAM,GAW1C,AAAI,IAAY,GAAY,GAAW,KAAU,SAK/C,GAAK,UACL,EAAK,QAAQ,IACR,AAAI,GAAW,EAAQ,eAC5B,GAAQ,iBAAmB,UAAY,GAAM,EAAG,EAAM,EAAQ,GAC9D,GAAU,EAAM,EAAQ,GACxB,EAAQ,iBAAmB,UAAY,GAAM,EAAG,EAAM,EAAQ,IAE7D,IAAM,IAAW,EAAM,EAAQ,GAGhC,EAAK,KACL,IAAY,GACZ,EACE,GAAK,QAAS,GAAI,EAAO,UAAW,MACpC,EAAK,WACL,IAEF,SAAQ,KACN,gFAEF,OAAO,WAAW,EAAG,OAAQ,MAKnC,AACE,IAAa,QACb,IAAc,UACd,IAAY,GAEZ,QAAQ,KACN,WAAW,iCAAuC,kCAGtD,AAAI,IAAc,UAAY,IAAY,EAExC,EAAG,SAED,EACA,GAAQ,CACN,EAAK,UACL,EAAK,QAAQ,GACb,EAAK,UAAY,EAEjB,EAAK,IAAM,IAAc,UAAY,GAAW,EAAQ,OACxD,EAAK,QAAU,EACf,GAAM,GAAM,EAAK,KAAK,GACtB,AAAI,GAAW,KAAU,UACvB,EAAI,KAAK,GAAQ,CACf,EAAK,UACL,EAAK,QAAQ,GAEb,EAAG,SACD,EACA,IAAM,CAEJ,EAAK,UAAY,EACjB,EAAK,IACH,IAAc,UAAY,GAAW,EAAQ,OAC1C,EAAK,KAAK,GAAM,KAEvB,CACE,eAAgB,SAChB,SAAU,EACV,SAAU,QAKpB,CAAE,KAAM,GAAO,eAAgB,KAGjC,EAAK,KAAK,UAGP,EAAP,CACA,EAAE,UAAU,QAAQ,eAAgB,EAAE,SACtC,GAAK,IAAI,EAAE,EAAE,YAIjB,GAAI,IAEJ,YAAyB,EAAO,CAC9B,GAAI,EAAK,KAAM,OAEf,GAAI,GAEJ,EAAK,MAAQ,EAAK,KAAK,QACvB,EAAK,UAAY,SAGjB,GAAM,GAAc,CAClB,MAAO,GACP,KAAM,CACJ,cACA,EAAK,QAAQ,EAAK,UAClB,WACA,MAEC,OAAO,SACP,KAAK,KACR,QAAS,IAAI,IAAS,CACpB,AAAI,IAAsB,IACxB,GAAE,UAAU,QAAQ,mBAAoB,GAAG,GAC3C,GAAe,EAAK,GAAI,MAI9B,GAAoB,EAAoB,EAAK,KAAK,GAIpD,EAAE,UAAU,GAAG,aAAc,SAAU,EAAO,EAAS,CACrD,AAAI,GAAS,EAAQ,IAAK,CAAC,SAAU,OAAQ,iBACtC,IAAS,EAAK,UAAW,CAAC,SAAU,eACvC,EAAE,UAAU,QAAQ,aAAc,MAKxC,EAAE,UAAU,GAAG,aAAc,UAAY,CACvC,EAAK,KAAO,GAEZ,EAAE,kCAAkC,WAAW,QAC/C,GAAK,IAAI,MAIX,EAAE,UAAU,GAAG,QAAS,WAAY,UAAY,CAC9C,GAAK,OAAQ,QAIf,EAAE,UAAU,GAAG,QAAS,gBAAiB,SAAU,EAAI,CACrD,GAAK,SAAU,KAAM,CACnB,OAAQ,EAAE,MAAM,MAChB,SAAU,EAAG,OAAO,QAAQ,cAKhC,EAAE,UAAU,GAAG,QAAS,YAAa,UAAY,CAC/C,GAAK,WAIP,EAAE,UAAU,GAAG,QAAS,WAAY,SAAU,EAAI,CAChD,SAAG,OACH,EAAG,iBACH,EAAG,2BACI,KAIT,EAAE,UAAU,GAAG,QAAS,WAAY,SAAU,EAAI,CAChD,SAAG,OACH,EAAG,iBACH,EAAG,2BACI,KAGT,EAAE,UAAU,GAAG,UAAW,WAAY,SAAU,EAAI,CAClD,MACE,GAAG,UACH,EAAG,UAAY,GAAK,OACpB,EAAG,OAAO,KAAK,OAAO,MAAQ,IAG9B,GAAG,OACH,EAAG,iBACH,EAAG,2BACI,IAEF,KAIT,EAAE,UAAU,GAAG,QAAS,YAAa,UAAY,CAC/C,KACA,KAAK,QACL,EAAE,QAAQ,KAAK,EAAE,2CAInB,EAAE,UAAU,GAAG,QAAS,cAAe,SAAU,EAAO,CACtD,MACE,cAAe,GAAM,cAAc,SACnC,QAAQ,EAAE,gDAEV,EAAG,UACE,KAWT,GAAM,IAAmB,IAAO,EAC9B,MAAO,CACL,KAAM,KAIV,YAAgB,EAAI,EAAI,CACtB,GAAI,EAAK,OAAO,YACd,GAAK,UAAY,CACf,GAAM,GAAU,CACd,IAAK,SACL,KAAM,YAAc,EAAK,QAAQ,YACjC,MAAO,IAGT,AAAI,YAAc,WAChB,GAAQ,QAAU,EAAQ,MAAQ,GAEpC,EAAK,KAAK,SAEP,CACL,SAAW,QAAQ,MAAQ,QAAQ,KAAK,mCACxC,GAAM,GAAe,KACrB,AAAE,aAAc,WAAY,GAAO,IAAW,EAAc,IAAK,CAC/D,aAAc,EACd,aAAc,KAAK,UAAU,KAGjC,MAAO,GAGT,EAAE,UAAU,GAAG,QAAS,aAAc,IACtC,EAAE,UAAU,GAAG,UAAW,aAAc,SAAU,EAAI,CACpD,MAAI,GAAG,UAAY,GAAK,OAAS,EAAG,UAAY,GAAK,MAAc,GACnE,IAAO,GACA,MAST,YAAc,EAAK,EAAO,GAAM,CAC9B,AAAI,MAAO,IAAQ,YAEjB,GAAM,QACR,AAAI,KACF,GAAK,OAAQ,EAAK,CAAE,SACf,GAAO,IAGhB,EAAE,UAAU,GAAG,QAAS,WAAY,IAGpC,aAAuB,CACrB,EAAE,SAAS,cAAe,EAAK,QAAQ,YAAc,aAOvD,aAAqB,CACnB,EAAE,gBAAgB,KAAK,CAAE,OAAQ,UAInC,aAAwB,CACtB,GAAI,GAAO,GAAc,YAAmB,EAAK,QAAQ,aACzD,cAAO,KAAK,GACL,GAGT,EAAE,UAAU,GAAG,QAAS,eAAgB,IACxC,EAAE,UAAU,GAAG,UAAW,eAAgB,SAAU,EAAI,CACtD,MAAI,GAAG,UAAY,GAAK,OAAS,EAAG,UAAY,GAAK,MAAc,GACnE,IAAa,GACN,MAST,YAAc,EAAO,CACnB,MAAO,GAAE,SACP,OACA,GAAS,CACP,IAAK,OACL,SAAU,EAAK,OAAO,cAU5B,YAAsB,EAAI,CACxB,GAAK,UAAY,CACf,OAEF,GAAM,EAAG,iBAAmB,EAAG,kBAGjC,EAAE,UAAU,GAAG,QAAS,iBAAkB,IAC1C,EAAE,UAAU,GAAG,UAAW,iBAAkB,SAAU,EAAI,CACxD,AAAI,EAAG,UAAY,GAAK,OACxB,GAAa,KAOf,aAAqB,CACnB,EAAE,iBAAiB,OASrB,EAAE,UAAU,GAAG,gBAAiB,gCAAiC,SAAU,EAAI,CAC7E,MAAI,IAAgB,IAAO,EAAG,SAAiB,GAC/C,GAAE,MACC,QAAQ,mBACR,YAAY,gBACZ,QAAQ,iBACJ,MAkBT,EAAE,UAAU,GAAG,mBAAoB,SAAU,EAAO,EAAM,CACxD,AAAI,GAAQ,EAAK,QACf,EAAK,OAAO,QAAQ,SAAU,EAAO,CACnC,GAAM,GAAU,EAAM,QACtB,EAAM,SAAS,QAAQ,SAAU,EAAS,CACxC,EAAQ,YAAc,EAAQ,GAC9B,EAAQ,GAAK,EAAU,IAAM,EAAQ,GACjC,EAAQ,OACV,GAAQ,eAAiB,EAAQ,MACjC,EAAQ,MAAQ,EAAU,IAAM,EAAQ,OAEtC,EAAQ,cAAgB,SAC1B,GAAQ,MAAQ,EAAQ,MAAM,OAC1B,EAAQ,OAAS,EAAQ,OAC3B,GAAQ,MAAQ,EAAQ,MAAQ,MAGlC,EAAQ,cAAgB,QACxB,EAAQ,UAAY,GACpB,CAAC,EAAQ,aAET,GAAQ,YAAc,GACpB,EAAE,mCACF,EAAQ,kBAapB,YAAsB,EAAO,EAAM,CAEjC,GAAI,GAAQ,EAAE,QAAQ,KAAK,cAG3B,GADA,EAAK,MAAM,cACP,MAAO,IAAQ,YACnB,IAAI,MAAO,UAAS,WAAa,YAC/B,GAAI,CACF,SAAS,UAAU,uBACnB,EAcJ,GARI,EAAK,OACP,GAAK,MAAQ,AAAO,GAAU,EAAK,QAKrC,EAAK,QAAQ,GAET,EAAK,SAAU,CACjB,EAAK,IAAI,cACT,KACA,KACA,OAGF,GACE,IAAK,OACJ,EACC,AAAO,GAAM,gBACb,AAAO,GAAM,yBACb,AAAO,GAAM,oBACb,QAAQ,EAAK,MAAM,MAAQ,IAC3B,EAAK,MAAM,OAAS,iBAGjB,GAAI,EAAI,OAAQ,GAAO,CAE5B,GAAI,IAAI,GAAM,eACd,WACK,AAAI,GAAK,OAAO,aAErB,MACK,EAAK,OAAO,aAEf,MAQJ,GAAI,EAAK,QAAU,EAAK,QAAU,EAAK,OAAS,EAAK,QAAU,EAAK,MAAO,CAgCzE,GA/BA,AAAI,EAAK,OAAQ,EAAQ,QACpB,AACH,EAAK,QACL,EAAK,OACJ,EAAK,QAAU,EAAK,QAAU,QAE/B,EAAQ,OACH,AAAI,EAAK,QAAU,EAAK,QAAU,qBAE9B,EAAK,OAAS,EAAK,MAAM,OAAS,AAAO,GAAM,iBAGxD,EAAK,OACL,EAAK,MAAM,OAAS,AAAO,GAAM,0BAIjC,EAAK,OACL,EAAK,MAAM,OAAS,AAAO,GAAM,mBAVjC,EAAQ,OAaC,EAAK,OAAS,EAAK,MAAM,OAAS,SAC3C,GAAQ,QAEV,EAAE,QAAQ,KAAK,aAAc,GAIzB,IAAU,QACZ,EAAK,UAAU,CAAC,YAAa,aAE3B,IAAU,OAAQ,CACpB,GAAM,GAAQ,KACd,EAAK,YACL,EAAM,QAAQ,GAAK,CACjB,EAAK,OAAO,EAAG,GAAO,MAK1B,EAAK,MAAM,YAEN,EAAK,OACR,EAAK,OAAO,mBAAoB,IAAU,QAEvC,OAAO,WAAY,IAAU,SAE7B,OAAO,UAAW,IAAU,QAE5B,OACC,YACA,IAAU,QAAU,CAAC,CAAC,EAAK,QAAU,CAAC,CAAC,EAAK,OAAO,QAGpD,OACC,WACA,IAAU,QAAU,CAAC,CAAC,EAAK,OAAS,CAAC,CAAC,EAAK,MAAM,QAGlD,OACC,cACA,IAAU,SAAW,CAAC,CAAC,EAAK,UAAY,CAAC,CAAC,EAAK,SAAS,QAGzD,OACC,wBACA,IAAU,SACR,EAAK,oBACL,CAAC,CAAC,EAAK,mBAAmB,QAG7B,OAAO,aAAc,IAAU,SAAW,CAAC,EAAK,aAEhD,OAAO,YAAa,IAAU,SAAW,CAAC,EAAK,SAEpD,EAAK,OAAO,aAAc,IAAU,QAEhC,IAAU,QACZ,GAAK,MAAM,gBACX,MAEE,IAAU,SACZ,EAAK,MAAM,eAIf,AACE,EAAK,OACL,CAAC,GAAS,EAAK,MAAM,KAAM,GAAO,GAAI,oBAAqB,KAE3D,GACE,CACE,UAAW,GAAK,CAAC,YAAa,OAAQ,SAAU,aAAc,GAC9D,KAAM,IAER,EAAK,OAKT,AAAI,EAAK,iBACP,EAAE,iBACC,KAAK,EAAK,iBAAiB,QAAQ,KAAM,MACzC,KAAK,OAAQ,EAAK,eACZ,IAAU,SACnB,EAAE,iBAAiB,KAAK,IAGtB,IAAU,SACZ,EAAE,SAAS,QAGT,IAAU,QACZ,IAAM,QACN,GAAO,SAGL,IAAU,QACZ,KAGE,IAAU,QACZ,EAAK,MAAM,YACR,MAAM,oBACN,MAAM,WACN,MAAM,aACN,MAAM,YACN,MAAM,eACN,MAAM,yBACN,MAAM,cACN,MAAM,aAGP,IAAU,QACR,GAAK,QAAU,CAAC,CAAC,EAAK,OAAO,QAC/B,GAAO,OAAO,GAEZ,EAAK,OAAS,CAAC,CAAC,EAAK,MAAM,QAC7B,GAAM,OAAO,EAAK,QAIlB,IAAU,SACR,GAAK,QACP,IAAW,QACX,EAAE,UAAU,QAAQ,qBAAsB,IAE5C,GAAW,UAEX,EAAE,uBAAuB,KAAK,OAAQ,GAAS,YAK3C,EAAK,UACP,IAAS,KAAO,GAAkB,kBAAoB,KACtD,GAAS,KAAK,EAAK,aAKzB,EAAE,UAAU,GAAG,gBAAiB,IAWhC,EAAE,UAAU,GAAG,qBAAsB,UAAY,CAC/C,EAAG,KAAK,YAGV,GAAI,IAAe,GAEb,GAAY,EAAE,UAEpB,GAAU,GAAG,QAAS,SAAU,GAAM,CACpC,GAAM,GAAgB,EAAG,OACzB,GAAgB,EAAc,aAAa,MACvC,EAAc,OAChB,IAAkB,CAChB,eAAgB,EAChB,aAAc,EAAc,MAAM,OAClC,mBAAoB,cAI1B,GAAU,GAAG,UAAW,SAAU,GAAM,CACtC,GAAM,GAAgB,EAAG,OACnB,CAAE,iBAAgB,eAAc,sBAAuB,EAC7D,GAAkB,CAAE,iBAAgB,eAAc,wBAGpD,aAAuB,CACrB,GAAI,CACF,GAAI,GAAM,SAAS,cAAc,QAAQ,QACzC,GAAI,EAAK,CACP,EAAI,QACA,EAAI,UAAU,SAAS,kBACzB,EAAE,GAAK,WAAW,UAAU,OAE9B,GAAI,CAAE,iBAAgB,eAAc,sBAClC,GACF,EAAI,kBAAkB,EAAgB,EAAc,UAE/C,EAAP,CAKA,SAAE,QAAU,EAAE,SACP,GAET,MAAO,GAGT,YAAsB,EAAO,EAAM,CACjC,GAAI,EAAK,OAAQ,CACf,OAAO,WAAW,UAAY,CAC5B,GAAM,CAAC,EAAM,GAAQ,GAAK,KAAO,IAAI,MAAM,KAC3C,GAAI,GACF,EAAc,8CAChB,GAAI,EACF,AAAI,IAAQ,IAEV,EAAS,EAAE,iCAAiC,SAE5C,GAAS,EACP,iBACE,EACA,mBACA,EACA,KACA,GAGC,EAAO,QACV,GAAS,EACP,iBACE,EACA,mBACC,UAAS,GAAO,GACjB,KACA,IAGD,EAAO,QACV,GAAS,EAAE,iCAAiC,WAE5C,EAAO,QACT,EAAO,QAAQ,iBAKf,GACE,GAAW,EAAO,YAAa,KAC/B,GAAW,EAAO,aAAc,YAChC,IACD,EAAK,IAAI,oBACR,SAAS,gBAAkB,SAAS,MACpC,CAAC,KACH,CACA,EAAE,mBAAmB,QAAQ,SAC7B,GAAM,GAAU,SAAS,cAAc,mBACvC,GAAI,IAAY,KAAM,OACtB,EAAQ,QACJ,GAAmB,IACjB,EAAQ,wBACV,EAAQ,eAAe,CACrB,SAAU,OAAO,WAAW,oCACzB,QACC,OACA,aAMb,GACH,OAEF,GAAI,EAAK,QAAW,EAAC,EAAK,OAAS,CAAC,EAAK,MAAM,QAAS,CACtD,EAAE,wBAAwB,QAAQ,SAClC,EAAE,2CAA2C,QAAQ,SACrD,OAEF,GAAI,EAAK,MAAO,CACd,EAAE,gDAAgD,QAAQ,SAC1D,OAEF,EAAE,sCAAsC,QAAQ,SAGlD,YAA2B,EAAO,EAAM,CACtC,AAAI,EAAK,UACP,GAAE,UAAU,GAAG,qBAAsB,IACrC,EAAE,UAAU,IAAI,qBAAsB,KAI1C,EAAE,UAAU,GAAG,qBAAsB,IAErC,YAAwB,EAAU,EAAO,CACvC,GAAI,GAAO,CACT,OAAQ,EAAS,QAGnB,GADA,EAAE,UAAU,QAAQ,gBAAiB,GACjC,GAAQ,EAAK,OAAQ,CACvB,GAAI,GAAQ,EAAK,OAAO,OAAO,SAAU,EAAO,CAC9C,MAAO,GAAM,UACZ,GACH,GAAI,GAAW,GAAa,EAAM,SAAS,MAAM,GAAI,IACrD,EACE,kEACA,cAAc,EAAU,GAC1B,GAAW,UAEb,EAAE,UAAU,QAAQ,gBAAiB,GAGvC,EAAE,UAAU,GAAG,aAAc,SAAU,EAAO,EAAS,EAAS,EAAS,CACvE,GAAI,EAAQ,QAAQ,WAAa,IAAM,EAAQ,WAAY,CACzD,GAAI,GAAU,EAAQ,QAAQ,0BAC9B,AAAI,EAAQ,QACV,GAAQ,KAAK,eAAgB,EAAQ,SACrC,OAAO,WAAW,UAAY,CAC5B,EAAQ,WAAW,UAAU,KAAK,eAAgB,EAAQ,UACzD,KAEH,GAAQ,KAAK,eAAgB,EAAQ,SACrC,OAAO,WAAW,UAAY,CAC5B,EAAQ,KAAK,SAAU,KACtB,QAaT,GAAI,IAAa,CAIf,OAAQ,GAKR,MAAO,UAAY,CACjB,KAAK,OAAS,IAMhB,KAAM,UAAY,CAChB,MAAO,MAAK,OAAO,OAMrB,IAAK,SAAU,EAAI,CACjB,KAAK,OAAO,KAAK,KAQrB,GAAW,SAAW,UAAY,CAChC,MACE,GAAE,KACA,EACE,2FAEC,SAAS,CAAE,OAAQ,KACnB,IAAI,UAAY,CACf,MAAO,GAAE,MAAM,KAAK,eAExB,SAAU,EAAK,CACb,MAAO,KAAQ,KAEjB,SAAW,GAQjB,GAAW,QAAU,UAAY,CAC/B,EAAK,OAAO,cAAe,GAAW,aAMxC,EAAE,UAAU,GAAG,eAAgB,gBAAiB,GAAW,SAG3D,EAAE,UAAU,GAAG,WAAY,4BAA6B,UAAY,CAClE,GAAI,GAAK,EAAE,MACX,GAAW,IAAI,EAAG,MAGpB,EAAE,GAAG,OAAO,CACV,YAAa,UAAY,CACvB,GAAI,GAAQ,EAAE,MACd,MAAO,GAAM,KAAK,WAAa,KAEjC,eAAgB,SAAU,EAAS,EAAI,EAAO,CAC5C,GAAI,GAAQ,EAAE,MACZ,EAAO,EAAM,IAAI,GAEf,EAIJ,GAHA,AAAI,YAAiB,OAAO,EAAY,EAAM,QACzC,EAAY,EAEb,EAAC,SAAS,KAAK,SAAS,GAM5B,GAFA,EAAM,KAAK,YAAa,GAEnB,EAmCH,EAAM,KAAK,eAAgB,IAC3B,EAAM,cAAc,SACpB,EAAM,YAAY,iBAClB,EAAM,SAAS,aAEf,EAAM,QAAQ,eAEV,CAAC,EAAQ,QAAU,EAAQ,eACzB,EAAK,IAAI,yBACX,GAAgB,OA5Cb,CACP,GAAI,GAAS,EAAM,cACjB,EAAU,EAAM,GAAG,wBACf,EAAM,OACN,EAAM,KAAK,UAEjB,EAAM,KAAK,eAAgB,IAEvB,EAAO,SAAW,GAChB,CAAC,EAAQ,QAAU,CAAC,EAAQ,UAC9B,GAAS,EACP,eAAe,EAAM,KAAK,6EAE5B,EAAM,KAAK,SAAU,IAMrB,EAAO,OAAS,GACd,EAAO,KAAK,mBAAqB,GACnC,GAAO,KAAK,gBAAiB,GAC7B,EAAO,KAAK,IAGZ,CAAC,EAAQ,QAAU,CAAC,EAAQ,UAC9B,GAAM,SAAS,iBAEf,EAAQ,MAAM,GAEd,EAAE,iBAAiB,SAAS,GAE5B,EAAM,QAAQ,aAAc,CAAC,EAAW,EAAS,OAmBvD,SAAU,SAAU,EAAS,CAC3B,MAAK,IACH,GAAU,IAER,EAAQ,SAAW,QACrB,GAAQ,OAAS,IAEf,EAAQ,WAAa,QACvB,GAAQ,SAAW,IAOjB,EAAQ,gBAAkB,QAC5B,GAAQ,cAAgB,IAInB,EAAE,MAAM,KAAK,UAAY,CAC9B,GAAI,GAAQ,EAAE,MACZ,EAAK,GACL,EAEF,GAAI,CAEF,EAAK,GAAc,SACZ,EAAP,CACA,EAAK,GACL,EAAY,EAGd,MAAO,GAAM,eAAe,EAAS,EAAI,QAQ/C,EAAE,UAAU,GAAG,UAAW,SAAU,UAAY,CAC9C,GAAI,GACJ,KAAQ,EAAc,GAAW,QAC/B,EAAc,EAAE,GAChB,AAAI,EAAE,MAAM,GAAG,UAER,EAAE,MAAM,OAAO,eAAe,IAAI,IACrC,EAAY,SAAS,CAAE,cAAe,KAEpC,EAAY,IAAI,IAAM,EAAE,MAAM,IAAI,IACpC,EAAY,SAAS,CAAE,cAAe,OAK9C,EAAE,UAAU,GACV,SACA,2CACA,UAAY,CACV,GAAI,GAAQ,EAAE,MACZ,EAAU,CAAE,OAAQ,GAAO,SAAU,IACvC,AAAI,EAAM,GAAG,UAEX,EAAM,QAAQ,eAAe,SAAS,GAEtC,EAAM,SAAS,KAMrB,EAAE,UAAU,GAAG,SAAU,yBAA0B,UAAY,CAC7D,EAAE,MAAM,QAAQ,cAAc,aAGhC,YAAkB,EAAM,EAAM,EAAW,CACvC,GAAI,GACJ,MAAO,WAAY,CACjB,GAAI,GAAU,KACZ,EAAO,UACL,EAAQ,UAAY,CACtB,EAAU,KACL,GAAW,EAAK,MAAM,EAAS,IAElC,EAAU,GAAa,CAAC,EAC5B,OAAO,aAAa,GACpB,EAAU,OAAO,WAAW,EAAO,GAC/B,GAAS,EAAK,MAAM,EAAS,IAIrC,GAAM,IAAiB,EAAQ,EAAK,eAAgB,IAE9C,GAAoB,GAAO,CAC/B,GAAM,GAAU,GAAK,CAAC,YAAa,OAAQ,qBAAqB,GAChE,MACE,KAAY,UACX,YAAmB,QAAS,GAAS,GAAe,GAAM,IAI/D,aAAmB,CACjB,AAAI,GAAkB,OAAO,EAAE,MAAM,KAAK,YAAa,EAAE,MAAM,OAGjE,EAAE,UAAU,GACV,UACA,2CACA,GAAS,GAAS,GAAI,KAGxB,EAAE,UAAU,GACV,QACA,2CACA,UAAY,CACV,GAAI,GAAkB,MAAO,CAC3B,GAAI,GAAQ,EAAE,MACZ,EAAS,EAAM,KAAK,aACpB,EAAM,EAAM,MACd,AAAI,IAAW,QAAa,IAAW,GACrC,GAAM,QAAQ,UACd,EAAM,WAAW,iBAYzB,GAAM,IAAqB,EACzB,GAAO,IAAQ,GACf,GAAK,CAAC,YAAa,OAAQ,2BAEvB,GAAiB,GACrB,GACE,EAAM,SAAW,EAAK,OAAO,uBAAwB,QAAQ,EAAM,WAYvE,YAAsB,EAAI,EAAM,CAE9B,GAAI,GAAS,EAAE,yBAA8B,KAAK,WAChD,EAAS,EAAK,OACd,EAAO,EAAE,SAWX,GADA,EAAO,QAAQ,IACX,CAAC,CAAC,OAAQ,QAAQ,SAAS,EAAK,YAAc,GAAW,GAAO,CAElE,OAAS,KAAS,UAAS,iBAAiB,UAC1C,GAAI,GAAW,GAAI,EAAO,UAAW,EAAM,QAAQ,OAAU,GAE3D,EAAM,WAAW,YAAY,WACpB,EAAK,KAAO,EAAM,QAAQ,MAAW,EAAK,QAAS,CAG5D,GAAM,GAAM,GAAK,EAAO,UAAW,EAAM,QAAQ,MAAS,GACpD,EAAW,SAAS,cAAc,SACxC,EAAM,WAAW,aAAa,EAAU,GACxC,EAAI,UAAY,EAGpB,EACE,GACE,EACE,GACE,CAAC,CAAE,aACD,SAAS,cAAc,oBAAoB,OAC7C,GAAS,CACP,GAAe,CACb,OAAQ,CAAC,CAAE,QAAS,GAAM,SAAU,EAAM,aAE5C,GAAM,GAAM,SAAS,cACnB,oBAAoB,EAAM,aAE5B,GAA2B,EAAK,IAElC,IAEF,KAGJ,IACA,OAGF,GAAE,kBAAmB,GAAM,SAC3B,AAAI,EAAK,WAAa,QAAU,EAAO,OAAS,EAE9C,EAAS,EAAO,OAAO,SAAU,EAAO,CACtC,MAAO,GAAM,SAAW,EAAM,UAAY,IAEvC,AACL,EAAK,WAAa,SAClB,EAAE,gBAAgB,OAAS,GAC3B,EAAO,OAAS,EAGhB,EAAS,EAAO,OAAO,SAAU,EAAO,CACtC,MAAO,GAAM,UAEV,EAAK,QAGZ,EAAK,OACL,EAAQ,GAAI,EAAQ,GAAa,KAAkB,IAAY,GAEjE,EAAK,KAAK,OAAQ,EAAK,eAAe,OAGjC,GAAW,IACb,IAAG,oBAAsB,MAE1B,EAAE,qEAAqE,KACrE,CACE,eAAgB,GAChB,OAAU,MAMlB,YAAoB,EAAQ,CAE1B,MAAO,GAAO,KAAK,SAAU,EAAG,EAAG,CACjC,MAAO,GAAE,MAAQ,EAAE,QAIvB,YAAsB,EAAG,EAAG,CAC1B,GAAI,CAAC,EAAE,GAAI,MAAO,GAAE,UACpB,GAAI,GAAK,EAAE,QACT,EAAK,EAAE,GACT,MACE,IACA,EAAG,cAAgB,SACnB,CAAC,EAAG,UACJ,EAAG,UAAY,QACf,EAAG,cAAgB,SAClB,GAAG,cAAgB,aAAe,EAAG,WACtC,EAAG,cAAgB,WAGnB,GAAE,QACF,EAAG,QAAU,GACT,EAAI,UAAW,IAAK,GAAG,aAAe,EAAG,SACzC,EAAI,WAAY,IAAK,GAAG,SAAW,EAAG,UAC1C,EAAG,QAAU,EAAG,QAAU,YAAY,KAAK,EAAG,UAC9C,EAAG,SAAW,OAAO,OAAO,GAAI,EAAG,SAAU,EAAG,UAChD,EAAG,KAAO,EAAG,MAAQ,GACrB,EAAG,KAAK,MAAS,GAAG,OAAS,IAAI,OACjC,EAAG,KAAO,EAAG,MAAQ,GACjB,EAAG,SAAS,GAAG,KAAK,SAAW,IAC/B,EAAG,SAAS,GAAG,KAAK,SAAW,IAEnC,AACE,CAAC,QAAS,iBAAkB,UAAW,aAAa,SAClD,EAAG,aAGL,AAAI,EAAG,KAAK,KAAK,gBACf,GAAG,YAAc,SACjB,EAAG,UAAY,YAEf,EAAG,KAAK,WAAa,EAAG,GAErB,AAAI,EAAG,cAAgB,OAC5B,AAAI,EAAG,KAAK,KAAK,SACf,GAAG,YAAc,UACjB,EAAG,QAAU,GAEb,EAAG,KAAK,WAAa,EAAG,GAG1B,EAAG,MAAQ,EAAG,GAET,GAAa,EAAG,CAAC,EAAI,GAAI,OAAO,KAGrC,IACA,EAAG,cAAgB,SACnB,CAAC,EAAG,UACJ,EAAG,cAAgB,YAEnB,GAAG,MAAQ,EAAG,GACV,EAAI,UAAW,IAAK,GAAG,aAAe,EAAG,SACzC,EAAI,WAAY,IAAK,GAAG,SAAW,EAAG,UAC1C,EAAG,QAAU,YAAY,KAAK,EAAG,UACjC,EAAG,SAAW,OAAO,OAAO,GAAI,EAAG,SAAU,EAAG,UAChD,EAAG,KAAO,EAAG,MAAQ,GACrB,EAAG,KAAK,MAAS,GAAG,OAAS,IAAI,OACjC,EAAG,KAAO,EAAG,MAAQ,GACjB,EAAG,SAAS,GAAG,KAAK,SAAW,IAC/B,EAAG,SAAS,GAAG,KAAK,SAAW,KAE9B,GAAa,EAAG,CAAC,GAAI,OAAO,KAIvC,YAAuB,EAAO,CAC5B,GAAI,GAAW,EAAM,SAGrB,AACE,EAAS,IACT,EAAS,GAAG,cAAgB,SAC5B,CAAC,EAAS,GAAG,UACb,CAAC,EAAS,GAAG,OAEb,GAAS,GAAG,YAAc,SAC1B,EAAM,YAAc,EAAS,GAAG,OAIpC,GAAM,IAA6B,CAAC,EAAK,IAAU,CACjD,EAAI,UAAU,OAAO,WAAY,EAAM,SACvC,EAAI,UAAU,OAAO,aAAc,CAAC,EAAM,SAC1C,AAAI,EAAM,SAAW,GAAe,GAClC,GAAI,gBAAgB,eACpB,EAAI,gBAAgB,aAEpB,GAAI,aAAa,cAAe,IAChC,EAAI,aAAa,WAAY,cAI3B,GAAgB,GAAO,CAAC,WAAY,QAAS,UAEnD,YAAqB,EAAO,CAC1B,GAAI,GAAW,EAAM,SACnB,EAAS,EACP,2BACG,IAAc,GAAS,gBAAkB,iBACzC,GAAM,MAAQ,EAAM,KAAK,YACtB,sBAAwB,EAAM,KAAK,YAAc,IACjD,IACJ,gBAIN,EAAE,UAAU,KAAK,UAAY,CAC3B,AAAI,EAAE,MAAM,KAAK,aAAe,EAAM,SAAS,EAAE,MAAM,WAGzD,GAAM,GAAM,EAAO,IAAI,GACvB,EAAI,QAAQ,IAAS,EAAM,QAC3B,EAAO,KAAK,UAAW,EAAM,SAE7B,EAAW,GAAa,EAAS,MAAM,GAAI,IAEvC,GAAW,IAAO,GAAW,GAAW,IAE5C,EAAE,GAAU,KAAK,SAAU,EAAG,EAAG,CAC/B,AAAI,GAAW,GACb,EAAI,YAAY,GAAgB,GAAU,EAAO,GAAG,IAC/C,GAAS,EAAG,EAAO,KAG5B,EAAI,UAAU,IAAI,iBAAmB,EAAM,YAC3C,EAAI,aAAa,YAAa,EAAM,MAC/B,EAAG,OAAO,eAAe,EAAI,aAAa,gBAAiB,EAAM,OAEtE,GAA2B,EAAK,GAEhC,AAAI,EAAM,UACR,GAAM,UAAU,WAAW,aAAa,EAAK,EAAM,WACnD,MAAO,GAAM,WAEb,AAAI,EAAM,YAAc,SAAU,EAAE,SAAS,QAAQ,GAChD,EAAE,SAAS,OAAO,GAY3B,aAA8B,CAC5B,EAAE,sDAAsD,KAAK,UAAY,CACvE,GAAI,GAAQ,EAAE,MACV,EAAQ,EAAM,KAChB,mEAEE,EAAQ,EAAM,KAAK,QACnB,EAAmB,EAAM,IAAI,GAEjC,AAAI,EAAiB,OAAS,EAC5B,EAAiB,QACf,8CAAgD,EAAQ,YAG1D,GAAmB,EAAM,KAAK,mBAAmB,IAAI,MACjD,EAAiB,OAAS,GAC5B,EAAiB,QACf,gEAGN,EACG,OAAO,0BACP,OAAO,gCACV,EAAE,KACA,EAAiB,OAAO,0BAA0B,KAAK,eACvD,UAAY,CACV,GAAI,GAAQ,EAAE,MACd,GAAI,EAAM,KAAK,SAAU,CACvB,GAAI,GAAY,EAAM,KAAK,SAAS,MAAM,sBAC1C,AAAI,GACF,GAAY,EAAU,GAAG,QAAQ,SAAU,SAC3C,EAAM,QAAQ,0BAA0B,SAAS,SAgB7D,EAAE,UACC,GAAG,kCAAmC,aAAc,SAAU,EAAI,CACjE,GAAI,GAAQ,EAAE,MACd,EAAM,YAAY,UAAW,EAAG,OAAO,SACnC,EAAG,OAAO,OAAS,SAAW,EAAG,OAAO,SAC1C,EAAM,WAAW,YAAY,aAGhC,GAAG,QAAS,aAAc,SAAU,EAAI,CAEvC,MADA,GAAE,MAAM,SAAS,SACb,EAAG,OAAO,OAAS,QACrB,GAAG,iBACH,EAAG,2BACI,IAEF,KAER,GAAG,OAAQ,aAAc,UAAY,CACpC,EAAE,MAAM,YAAY,WAErB,GACC,UACA,yBAEA,SAAU,EAAI,CACZ,GAAI,GACF,EAAQ,CAAC,GAAI,GAAI,GAAI,IAErB,EAAM,EAAM,QAAQ,EAAG,SACzB,MAAI,KAAQ,GAAW,GAEvB,GACE,EAAM,EACF,EAAE,MAAM,OAAO,KAAK,uBACpB,EAAE,MAAM,OAAO,KAAK,uBAGrB,EAAO,QACV,GACE,EAAM,EACF,EAAE,MAAM,WAAW,OAAO,KAAK,uBAC/B,EAAE,MAAM,WAAW,QAAQ,KAAK,wBAEpC,EAAO,OACT,GAAO,QAAQ,SACf,EAAG,iBACH,EAAG,2BACI,IAEF,MAiBb,EAAE,UAAU,GAAG,mBAAoB,CAAC,EAAG,IAAS,CAC9C,AAAI,EAAI,WAAY,IAClB,GAAM,SAAS,EAAK,WAAY,MAIpC,EAAE,UAAU,GAAG,mBAAoB,CAAC,EAAG,IAAS,CAE9C,AAAI,EAAI,WAAY,IAClB,GAAM,SAAS,EAAK,WAAY,MAIpC,EAAE,UAAU,GAAG,qBAAsB,CAAC,EAAQ,IAAS,CACrD,AAAK,GACH,GACG,UACA,KAAK,GAAa,GAAM,YAAY,CAAE,YAAW,KAAM,iBAI9D,GAAM,iBAAiB,UAAW,GAAW,CAC3C,GAAM,UAAU,KAAK,GAAQ,CAC3B,AAAI,EAAQ,KAAK,YAAc,GACzB,EAAQ,KAAK,OAAS,aAAa,QAAO,SAAW,UAS/D,EAAG,WAAa,GAChB,EAAG,KAAO,GACV,EAAG,WAAa,GAChB,EAAG,OAAS,GACZ,EAAG,KAAO,GAEV,EAAG,aAAe,GAAS,EAAK,QAAQ,CAAE,SAAU,IACpD,EAAG,QAAU,GACb,EAAG,KAAO,GACV,EAAG,QAAU,UAAmB,CAC9B,GAAQ,EAAK,OAAO,YAEtB,EAAG,OAAS,SAAgB,EAAI,EAAS,CACvC,GAAK,SAAU,EAAI,IAErB,EAAG,OAAS,SAAgB,EAAI,EAAS,CACvC,GAAK,SAAU,EAAI,IAErB,EAAG,UAAY,SAAmB,EAAS,CACzC,GAAK,YAAa,EAAE,KAAM,IAE5B,EAAG,KAAO,SAAc,EAAI,EAAS,CACnC,GAAK,OAAQ,EAAI,IAEnB,EAAG,MAAQ,SAAe,EAAI,EAAS,CACrC,GAAK,QAAS,EAAI,IAEpB,EAAG,KAAO,SAAc,EAAI,EAAS,CACnC,GAAK,OAAQ,EAAI,IAEnB,EAAG,SAAW,SAAkB,EAAS,EAAI,EAAU,KAAM,CAC3D,GAAK,WAAY,EAAI,OAAO,OAAO,GAAI,CAAE,WAAW,KAEtD,EAAG,UAAY,SAAmB,EAAU,EAAI,CAC9C,GAAK,YAAa,EAAI,CAAE,aAAc,KAExC,EAAG,OAAS,EAAK,OACjB,EAAG,OAAS,GAAO,KAAK,KAAM,IAC9B,EAAG,KAAO,CACR,QAAS,EAAK,QACd,KAAM,UAAY,CAChB,MAAO,GAAK,MAEd,QAAS,EAAK,QACd,KAAM,EAAK,KACX,UAAW,UAAY,CACrB,MAAO,GAAK,YAGhB,EAAG,IAAM,GACT,EAAG,SAAW,GACd,EAAG,QAAU,EAAG,SAAW,GAC3B,EAAG,WAAa,GAChB,EAAG,iBAAmB,GACtB,EAAG,UAAY,GACf,EAAG,WAAa,GAChB,EAAG,gBAAkB,GAErB,OAAO,GAAK,CACV,QAAS,EAAG,QACZ,OAAQ,EAAG,OACX,gBAAiB,EAAG,gBACpB,OACA,SC3lFF,GAAM,IAAa,CACjB,4BAA6B,CAC3B,GAAM,4BACN,GAAM,0BACN,QAAS,6BAEX,kBAAmB,CACjB,GAAM,kBACN,GAAM,kCACN,QAAS,oBAIb,EAAE,gBAAgB,IAElB,YAAe,CACb,YAAY,EAAI,CACd,KAAK,GAAM,GAAS,CAClB,AAAI,EAAM,aAAe,EAAM,UAAY,IAIzC,MAAM,KAAK,SAAS,iBAAiB,0BAClC,MACA,WAMX,QAA8B,CAC5B,YAAY,EAAQ,GAAI,EAAQ,CAC9B,KAAK,GAAK,YAAY,KAAK,SAAS,KAAK,MAAM,KAAK,SAAW,OAC/D,KAAK,OACH,IAAW,QAAa,MAAO,IAAW,UAAY,YAAc,GAChE,EACA,SAAS,qBAAqB,QAAQ,GAC5C,KAAK,UAAY,EACjB,KAAK,SAAW,SAAS,SAAS,GAGpC,QAAQ,EAAQ,GAAM,CACpB,GAAI,GAAK,SAAS,eAAe,KAAK,IACtC,AAAI,GAAI,KAAK,OAAO,YAAY,GAGhC,KAAK,SACH,SAAS,oBAAoB,QAAS,KAAK,QAAQ,KAAK,IAAK,IAG/D,SAAS,iBAAiB,6BAA6B,QAAQ,GAAQ,CACrE,GAAI,GAAO,EAAK,aAAa,0BAC7B,EAAK,gBAAgB,YACjB,IAAS,QACX,EAAK,aAAa,WAAY,GAEhC,EAAK,gBAAgB,0BACrB,EAAK,gBAAgB,6BAIvB,SACG,iBAAiB,kCACjB,QAAQ,GAAQ,CACf,GAAI,GAAO,EAAK,aAAa,sBAC7B,EAAK,gBAAgB,eACjB,IAAS,QACX,EAAK,aAAa,cAAe,GAEnC,EAAK,gBAAgB,sBACrB,EAAK,gBAAgB,kCAMzB,GAAS,KAAK,SAAS,QAGzB,OAAO,EAAM,CAEX,KAAK,QAAQ,IAKb,SACG,iBACC,gLAED,QAAQ,GAAQ,CACf,EAAK,aAAa,0BAA2B,IAC7C,EAAK,aACH,yBACA,EAAK,aAAa,aAAe,QAEnC,EAAK,aAAa,WAAY,QAKlC,SAAS,iBAAiB,yBAAyB,QAAQ,GAAQ,CACjE,EAAK,aAAa,+BAAgC,IAClD,EAAK,aACH,qBACA,EAAK,aAAa,gBAAkB,QAEtC,EAAK,aAAa,cAAe,UAInC,GAAI,GAAY,SAAS,cAAc,OACvC,EAAU,UAAY,uBACtB,EAAU,MAAM,QAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAU1B,EAAU,GAAK,KAAK,GACpB,EAAU,aAAa,OAAQ,UAE/B,OAAO,KAAK,KAAK,WAAW,QAAQ,GAAQ,CAC1C,IAAS,QACJ,EAAU,WAAa,IAAM,KAAK,UAAU,GAC7C,EAAU,aAAa,EAAM,KAAK,UAAU,MAElD,EAAU,iBAAiB,QAAS,GAAK,CACvC,KAAK,YAGP,GAAI,GAAQ,SAAS,cAAc,OACnC,EAAM,UAAY,QAClB,EAAM,MAAM,QAAU;AAAA;AAAA;AAAA;AAAA,MAKtB,EAAM,iBAAiB,QAAS,GAAK,CACnC,EAAE,oBAGJ,GAAI,GAAS,SAAS,cAAc,UAChC,EAAI,SAAS,eAAe,KAChC,EAAO,OAAO,GACd,EAAO,UAAY,iBACnB,EAAO,MAAM,QAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUvB,EAAO,iBAAiB,QAAS,GAAK,KAAK,WAC3C,EAAO,aAAa,aAAc,EAAE,8BAGpC,EAAM,YAAY,GAClB,EAAM,YAAY,GAClB,EAAU,YAAY,GACtB,KAAK,OAAO,YAAY,GAGxB,KAAK,SAAW,SAAS,cACzB,EAAO,QAEP,KAAK,QAAU,GAAI,IAAS,KAAK,IAEjC,SAAS,iBAAiB,QAAS,KAAK,QAAQ,KAAK,IAAK,MCrK9D,EAAE,UAAU,GAAG,mBAAoB,SAAU,EAAO,EAAM,CACxD,AAAI,GAAQ,EAAK,QACf,EAAE,KAAK,EAAK,OAAQ,SAAU,EAAG,EAAO,CACtC,GAAI,GAAU,GACZ,EAAW,GACb,EAAE,KAAK,EAAM,SAAU,SAAU,EAAK,EAAS,CAC7C,AAAI,EAAQ,cAAc,gBAAkB,kBAC1C,EAAQ,KAAK,EAAQ,IACZ,EAAQ,UAAY,EAAQ,cAAgB,SACrD,EAAS,KAAK,EAAQ,IAExB,GAAM,GAAa,GAAK,CAAC,WAAY,eAAgB,GACrD,AAAI,GACF,EACE,GACE,QACA,EAAQ,GAAM,EAAS,KAAK,GAAK,EAAK,QAExC,GAAK,GAAK,EAAE,YAAc,EAAE,WAAW,SAAS,IAAI,MACpD,EAAK,aACL,GAEA,EAAQ,UAAY,EAAQ,cAAgB,SAC9C,IAAoB,EAAS,GAC7B,EAAW,MAGf,GAAoB,EAAO,OAKjC,YAA6B,EAAO,EAAiB,CACnD,AAAI,EAAgB,QAClB,GAAM,KAAO,EAAM,MAAQ,GAC3B,EAAM,KAAK,YAAc,EAAgB,KAAK,MCpClD,AAAC,UAAU,EAAG,CACZ,GAAI,GAAe,CACjB,uCAAwC,CACtC,GAAI,kCAEN,cAAe,CACb,GAAI,iBAEN,gBAAiB,CACf,GAAI,gBAEN,uDAAwD,CACtD,GAAI,2EAEN,8CAA+C,CAC7C,GAAI,yDAEN,iBAAkB,CAChB,GAAI,qDACJ,GAAI,kDAEN,kBAAmB,CACjB,GAAI,oEACJ,GAAI,yEAEN,mDAAoD,CAClD,GAAI,mJACJ,GAAI,yDAEN,kDAAmD,CACjD,GAAI,wIACJ,GAAI,oDAEN,mCAAoC,CAClC,GAAI,wIACJ,GAAI,oCAEN,2BAA4B,CAC1B,GAAI,iHACJ,GAAI,4BAEN,mCAAoC,CAClC,GAAI,kHACJ,GAAI,sCAEN,mCAAoC,CAClC,GAAI,qIACJ,GAAI,oCAEN,2BAA4B,CAC1B,GAAI,uHACJ,GAAI,4BAEN,mCAAoC,CAClC,GAAI,kHACJ,GAAI,sCAEN,wCAAyC,CACvC,GAAI,2FACJ,GAAI,yCAEN,yCAA0C,CACxC,GAAI,gGACJ,GAAI,0CAEN,eAAgB,CACd,GAAI,yFACJ,GAAI,gBAEN,4DAA6D,CAC3D,GAAI,sEACJ,GAAI,6DAEN,kCAAmC,CACjC,GAAI,8DACJ,GAAI,oCAIR,EAAE,UAAY,CACZ,EAAG,gBAAgB,OAEpB,QC7FH,GAAM,IAAsB,CAAC,EAAS,KAC7B,EAAO,OACZ,CAAC,EAAM,IACE,EAAK,QAAU,EAAK,UAAY,GAEzC,CAAE,QAAS,GAAO,UAAW,ICWjC,GAAM,IAAc,GAAQ,CAC1B,GAAI,GAAW,CACb,MAAO,GAAI,KACX,OAAQ,GAAI,KACZ,SAAU,GAAI,MAGhB,GAAI,CACF,SAAK,OAAO,QAAQ,GAAS,CAC3B,AAAI,EAAM,WAAa,QACrB,GAAS,OAAO,IAAI,EAAM,QAAS,EAAM,UACzC,OAAO,KAAK,EAAM,UAAU,QAAQ,GAAY,CAC9C,EAAS,MAAM,IAAI,EAAU,EAAM,SAAS,OAGhD,EAAM,WAAa,QACjB,EAAM,SAAS,QAAQ,GAAW,CAChC,OAAO,KAAK,GAAS,QAAQ,GAAQ,CACnC,AAAI,IAAS,YACX,GAAS,SAAS,IAAI,CAAC,EAAQ,IAAK,EAAQ,UAC5C,OAAO,KAAK,EAAQ,UAAU,QAAQ,GAAY,CAChD,EAAS,MAAM,IAAI,EAAU,EAAQ,SAAS,aAMnD,QACA,EAAP,CACA,cAAO,SAAW,OAAO,QAAQ,KAAK,GAC/B,IC9CX,AAAC,WAAU,CAAC,YAAY,CAAC,YAAY,CAAC,MAAO,MAAK,WAAW,EAAE,CAAC,MAAO,GAAE,AAAW,MAAO,IAAlB,UAAqB,AAAa,MAAO,IAApB,WAAsB,GAAG,WAAW,EAAE,CAAC,GAAG,AAAO,IAAP,MAAU,CAAC,EAAE,GAAG,KAAM,IAAI,WAAU,mDAAmD,GAAI,GAAI,GAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAE,EAAC,UAAU,eAAgB,IAAG,EAAE,EAAE,QAAS,GAAE,SAAS,EAAE,CAAC,SAAE,GAAS,CAAC,UAAU,IAAI,SAAS,EAAE,CAAC,YAAY,EAAO,GAAL,EAAE,GAAM,AAAO,IAAP,KAAS,KAAM,IAAI,aAAY,0EAA0E,SAAE,UAAU,EAAS,GAAI,KAC9f,EAAE,EAAE,gBAAiB,IAAG,YAAY,MAAM,UAAU,SAAS,EAAE,CAAC,SAAE,EAAE,UAAiB,EAAE,GAAG,EAAE,MAAM,GAAO,EAAE,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,GAAG,AAAU,OAAM,eAAgB,GAAE,KAAK,YAAY,UAAnD,OAA2D,KAAM,IAAI,WAAU,oCAAoC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,KAAM,IAAI,WAAU,8DAA8D,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,KAAM,IAAI,WAAU,mBAAmB,EAAE,wCAAyC,WAAW,UAAU,CAAC,EAAE,MAAM,GAAG,GAAI,GACxf,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,KAAK,MAAM,KAAK,UAAU,MAAM,OAAQ,KAAK,GAAE,CAAC,GAAG,CAAE,KAAK,IAAG,KAAM,IAAI,WAAU,yCAAyC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,AAAa,MAAO,IAApB,YAAwB,GAAE,MAAM,EAAE,MAAM,KAAK,IAAI,EAAE,EAAE,GAAG,GAAI,GAAE,GAAG,EAAE,GAAG,GAAG,AAAa,MAAO,IAApB,WAAsB,CAAC,GAAI,GAAE,UAAU,CAAC,GAAI,GAAE,MAAM,KAAK,cAAc,EAAE,EAAE,MAAM,UAAU,MAAM,KAAK,WAAW,SAAE,EAAE,YAAY,SAAgB,GAAG,EAAE,UAAU,EAAE,UAAU,KAAK,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,GAAG,EAAG,GAAE,QAAQ,GAAG,GAAK,GAAE,KAAK,MAAM,EAAE,KAAK,EAAE,MAAM,KAChf,IAAI,EAAE,OAAQ,aAAa,OAAO,GAAE,GAAG,EAAE,IAAI,EAAE,GAAG,AAAO,IAAP,KAAS,EAAE,GAAG,GAAG,GAAI,GAAE,EAAE,IAAI,SAAS,EAAE,CAAC,SAAE,OAAc,EAAE,IAAI,KAAK,EAAE,IAAI,SAAS,EAAE,CAAC,SAAE,OAAc,KAAK,IAAI,EAAE,EAAE,IAAI,SAAS,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,KAAK,EAAE,EAAE,IAAI,SAAS,EAAE,EAAE,CAAC,EAAE,OAAO,KAAK,GAAG,GAAG,EAAE,GAA8M,GAA3M,EAAE,oBAAoB,GAAG,QAAQ,SAAS,EAAE,CAAC,GAAG,CAAG,KAAG,IAAI,IAAK,IAAG,CAAC,GAAI,GAAE,EAAE,yBAAyB,EAAE,GAAG,EAAE,eAAe,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,GAAM,GAAG,EAAE,CAAC,GAAI,GAAE,EAAE,gBAAiB,IAAG,YAC1e,MAAM,UAAU,SAAS,EAAE,EAAE,CAAC,SAAE,GAAG,EAAE,UAAU,EAAS,GAAG,GAAG,GAAG,EAAE,EAAE,IAAK,GAAE,IAAI,GAAG,EAAE,KAAK,CAAC,EAAE,OAAQ,KAAK,GAAE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,SAAE,KAAK,GAAG,EAAE,KAAK,GAAU,GAAG,SAAE,UAAU,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,GAAI,GAAE,EAAE,GAAG,OAAO,IAAW,EAAG,GAAI,GAAE,AAAc,MAAO,UAArB,aAA8B,AAAqB,GAAG,SAAS,KAAK,WAAtC,oBAAgD,AAAc,MAAO,YAArB,aAAgC,AAAgB,UAAU,UAA1B,cAAkC,OAAO,KAAK,EAAE,OAAQ,GAAE,MAAM,IAAI,EAAE,MAAM,UAAU,EAAE,MAAM,eC8Bjd,GAAI,IAAY,GAEV,GAAQ,CACZ,UAAW,GACX,MAAO,GACP,QAAS,GACT,KAAM,UAAY,CAChB,AAAI,CAAC,KAAK,OAAS,CAAC,KAAK,SACvB,MAAK,QAAU,GAEf,OAAO,WAAW,IAAM,CACtB,GAAI,GAAO,GAAI,iBACf,EAAK,IAAI,MAAO,QAChB,EAAK,IAAI,SAAU,EAAG,OAAO,WAC7B,EAAK,IAAI,WAAY,EAAG,OAAO,aAC/B,EAAK,IAAI,YAAa,EAAG,OAAO,cAChC,EAAK,IAAI,WAAY,KAAK,UAAU,OAAO,YAAY,MAEvD,EAAK,IAAI,aACP,MAAM,WAAY,CAChB,OAAQ,OACR,QAAS,CACP,OAAU,oCACV,eAAgB,mDAElB,KAAM,IAEV,GAAM,QAAU,IACf,QAKT,EAAE,UAAU,GAAG,mBAAoB,CAAC,EAAG,IAAS,CAC9C,AAAI,GAAQ,EAAK,WACX,IAAM,YAAc,EAAK,WAC3B,IAAM,MAAQ,GACd,GAAM,UAAY,EAAK,UACvB,GAAQ,MAGN,GAAM,OAGR,CAAI,GAAQ,EAAI,YAAY,GAC1B,IAAa,EAAK,SACd,GAAI,KAAI,OAAO,QAAQ,KAAK,MAAM,EAAK,YACvC,GAAI,KACR,GAAQ,GAAI,OAAM,GAAY,CAC5B,IAAI,EAAQ,EAAM,EAAU,CAC1B,GAAI,GAAQ,QAAQ,IAAI,EAAQ,EAAM,GACtC,GAAI,MAAO,IAAU,WAAY,CAC/B,GAAM,GAAU,EAChB,EAAQ,SAAU,EAAK,EAAO,CAC5B,MAAI,KAAS,OAAS,IAAS,UAC7B,GAAM,OAED,EAAQ,MAAM,GAAY,YAGrC,MAAO,MAGX,EAAE,UAAU,QAAQ,mBAEpB,GAAa,GAAI,KAEnB,GAAM,MAAQ,OCrFpB,AAAC,EAAC,EAAK,EAAK,IAAM,CAChB,GAAI,GAEJ,YAAe,CACb,MAAO,MAAM,KAAK,SAAS,KAAK,MAAM,KAAK,SAAW,OAGxD,WAAgB,EAAU,CACxB,GAAI,GAAQ,GAAM,IAAI,qBAClB,GAAM,IAAI,qBACV,GAEA,EAAK,IACL,EAAY,EAAS,cAAc,qBAAqB,UACxD,EACF,EAAM,WACJ,EAAS,cAAc,qBAAqB,UAAU,QAEtD,EACF,EAAS,cAAc,qBAAqB,UAAU,SAAW,IAC7D,wBACE,EAAS,cAAc,qBAAqB,gDAE9C,wBACE,EAAS,cAAc,qBAAqB,yCAEhD,EAAS,EAAI,cAAc,SAC/B,SAAO,aAAa,WAAY,KAChC,EAAO,aAAa,YAAa,GACjC,EAAO,UAAY,4BACnB,EAAO,UAAY;AAAA,mBACJ,sBACb,EAAS,cAAc,qBAAqB,UAAU,SAAW,IAC7D,UACA,oBAEJ,EAAS,cAAc,qBAAqB,UAAU,SAAW,IAC7D,OACA,0BACa;AAAA;AAAA;AAAA,8CAIb,EAAS,cAAc,qBAAqB,UAAU,SAAW;AAAA,+CAGjE,EAAS,cAAc,qBAAqB;AAAA;AAAA,4EAGsB,aAAqB;AAAA,wCACzD;AAAA;AAAA;AAAA,sDAGc;AAAA;AAAA,cAExC,EAAS,cAAc,qBAAqB;AAAA,cAC5C,EAAS,cAAc,qBAAqB;AAAA;AAAA,kCAG5C,EAAS,cAAc,qBAAqB;AAAA,cAG5C,EAAS,cAAc,qBAAqB,UAAU,SACtD,GACI,GACA;AAAA,oBACE,EAAS,cAAc,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,yHAMyD,EAAU;AAAA;AAAA,MAI/H,EACG,cAAc,6BACd,iBAAiB,QAAS,GACzB,EAAE,OAAO,WAAW,cAAc,eAAe,SAGrD,EACG,cAAc,qBACd,iBAAiB,QAAS,GACzB,EAAE,OAAO,aAAa,gBAAiB,EAAE,OAAO,UAG7C,EAGT,WAAoB,EAAM,EAAa,GAAO,CAC5C,GAAI,GAAO,EAAK,cACZ,EAAQ,EAAK,WAAa,EAC9B,AAAI,OAAO,GAAO,SAAW,GAAG,GAAQ,IAAM,GAC9C,GAAI,GAAM,EAAK,UACf,MAAI,QAAO,GAAK,SAAW,GAAG,GAAM,IAAM,GAEnC,EAAa,GAAG,KAAQ,KAAS,IAAQ,GAAG,IAAO,IAAQ,IAGpE,WAAkB,EAAI,EAAG,CACvB,GAAI,GAAM,GAAI,MACd,SAAI,SAAS,EAAG,EAAG,GACZ,IAAI,EAAI,uBAGjB,WAAoB,EAAI,EAAG,CAEzB,GAAI,GAAM,GAAI,MACd,SAAI,SAAS,EAAG,EAAG,GACZ,mBAAmB,IAAI,EAAI,6BAGpC,YAAmB,CACjB,GAAI,GAAS,GAAI,MACjB,EAAO,QAAQ,EAAO,UAAY,GAClC,GAAI,GAAS,GAAG,EAAW,KAAU,EAAS,MAC9C,UAAU,IAAI,EAAW,KAAU,EAAS,MAC5C,EAAS,mBAAmB,GACrB,EAGT,YAAwB,CACtB,GAAI,GAAS,GAAI,MACjB,SAAO,QAAQ,EAAO,UAAY,GACpB,CACZ,OAAQ,EAAW,GACnB,OAAQ,EAAW,EAAQ,KAK/B,WAAoB,EAAG,CAGrB,GAAI,GAEE,EAAU,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKjC,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAYf,EAAa,mBACjB,iQAAiQ,mBAC/P,wLAGE,EAAY,mBAAmB,oCACjC,EAAU,IAId,OAFA,EAAE,OAAO,WAAW,cAAc,YAAY,OAAS,SAE/C,EAAE,OAAO,WACV,OACH,EAAO,GACP,UAEG,SAEH,EAAO,qEAAqE,gBAAsB,aAAwB,UAAgB,IAC1I,UAEG,UAEH,EAAO,6DAA6D,WAClE,EAAQ,SACP,EACD,gBACY,8DACZ,EAAQ,SACP,EAAW,eAAe,IAC7B,UAEG,SAEH,EAAO,+DAA+D,WACpE,EAAQ,SACP,EACD,gBACY,8DACZ,EAAQ,SACP,EAAW,eAAe,IAC7B,UAEG,QAEH,EAAO,oCAAoC,QACzC,EAAQ,SACP,EAAW,cAAc,QAC1B,EAAQ,SACP,EAAW,aAAa,SAC3B,UAEG,MAEH,EAAO,0FACL,EAAQ,SACP,EAAS,eAAe,EAAQ,SAAS,EAC1C,iBACa,6CAAqD,gBAAyB,oCAC7F,EAAE,OAAO,WAAW,cAAc,YAAY,OAAS,GACvD,cAGA,EAAO,GACP,MAIJ,EAAE,OAAO,WAAW,cAAc,YAAY,KAAO,EACrD,AAAI,IAAS,GACX,EAAE,OAAO,WAAW,cAAc,YAAY,gBAAgB,YAE9D,EAAE,OAAO,WACN,cAAc,YACd,aAAa,WAAY,MAIhC,YAA2B,CAsBzB,MArBW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAwBb,EAAE,GAAK,GAAG,qBAAsB,CAAC,EAAI,IAAS,CAC5C,GAAI,GAAQ,EAAK,QAAU,EAAK,OAAO,OAErC,GAAI,AADU,GAAY,GAAM,MACtB,IAAI,qBAAsB,CAClC,EAAG,KAAK,IAAI,iBAEZ,GAAI,GAAQ,GAAM,IAAI,qBAClB,GAAM,IAAI,qBACV,GACJ,EAAM,aAAe,GAAoB,EAAK,QAC9C,GAAM,IAAI,oBAAqB,GAG/B,GAAM,GAAW,EAAG,WAAW,EAAG,MAChC,+CACA,OAAO,SAAS,MAEZ,EAAY,EAAK,UACvB,EAAe,mBACb,GAAG,aAAoB,EAAK,oBAAoB,KAElD,GAAI,CAEF,GAAI,GAAW,EAAI,cAAc,kBAC7B,EAAS,EAAS,cAAc,UAChC,EAAO,EAAS,cAAc,YAC9B,EAAU,EAAS,cACrB,yCAEE,EAAc,EAAS,cACzB,uCAEE,EAAW,EAAS,cAAc,6BAClC,EAAe,EAAI,cAAc,OACrC,EAAa,UAAY,oBACzB,EAAa,UAAY;AAAA;AAAA,gBAEnB,EAAO;AAAA,gBACP,EAAK;AAAA;AAAA,qCAEgB,EAAQ;AAAA,gBAC7B,EAAY;AAAA;AAAA;AAAA,gBAGZ,EAAS;AAAA;AAAA,wBAED;AAAA;AAAA;AAAA;AAAA;AAAA,gBAKR;AAAA;AAAA,YAGN,EAAS,YAAY,GACrB,EAAS,YAAY,GACrB,EAAS,YAAY,GACrB,EAAS,YAAY,GACrB,EAAS,YAAY,GACrB,EAAS,QAAQ,GACjB,GAAI,GAAY,EAAI,cAAc,SAAS,UAAU,IACrD,EAAU,UAAU,IAAI,SACxB,EAAU,cAAc,6BAA6B,GAAK,GAC1D,EAAS,OAAO,GAChB,EAAI,iBAAiB,wBAAwB,QAAQ,GAAU,CAC7D,EAAO,iBAAiB,SAAU,KAEpC,EACG,iBAAiB,kDACjB,QAAQ,GAAU,CACjB,EAAO,iBAAiB,QAAS,GAAM,CACrC,EAAG,KAAK,OAAO,2BAGd,EAAP,CACA,EAAI,SAAW,EAAI,QAAQ,KAAK,GAElC,GAAI,CAMF,AADmB,EAAI,iBAAiB,wBAC3B,QAAQ,GAAQ,CAC3B,EAAK,iBAAiB,MAAM,QAAQ,GAAO,CACzC,EAAI,YAAY,EAAO,cAGpB,EAAP,CACA,EAAI,SAAW,EAAI,QAAQ,KAAK,GAGlC,GAAI,GAAW,EAAI,cACjB,+DAGF,AAAI,GACF,GAAS,QAAQ,0BAA0B,MAAM,QAAU,OAC3D,EACG,iBAAiB,0CACjB,QAAQ,GAAO,CACd,EAAI,iBAAiB,QAAS,GAAM,CAClC,GAAI,CACF,EAAS,MAAQ,OACjB,EAAG,kBACI,EAAP,CACA,OAAO,SAAW,OAAO,QAAQ,KAAK,aAMhD,GAAG,KAAK,MAAM,qBAInB,OAAQ,SAAU,QCnUrB,GAAM,IAAS,CACb,QAAS,GACT,SAAU,MACN,QAAQ,CACV,MAAO,MAAK,aAEV,OAAM,EAAU,CAClB,KAAK,SACH,IAAa,UACT,OAAO,OAAO,GAAI,KAAK,SACvB,KAAK,YAAY,IAEzB,YAAa,GAAY,CACvB,GAAI,MAAO,IAAa,SAAU,MAAO,QAAO,OAAO,GAAI,GAAO,SAClE,EAAW,OAAO,OAAO,GAAO,SAAU,GAC1C,GAAI,GAAQ,EAAI,GAAO,OACvB,MAAO,IAAQ,CACb,EAAM,WAAa,CAAC,MAAM,MAAM,QAChC,EAAM,aAAe,SAAS,iBAAiB,MAAM,UAAU,OAC/D,EAAM,qBACJ,SAAS,iBAAiB,MAAM,sBAAsB,SAEtD,EACA,OAAO,OAAO,GAAI,GAAO,WAMjC,AAAC,EAAC,EAAK,IAAM,CACX,GAAM,GAAa,EAAG,WAAW,EAAG,KAAM,YAAY,cAAe,IACjE,EAAW,CACb,OAAU,EAAW,eAAe,UAChC,OAAO,EAAW,QAClB,IACJ,SAAY,EAAW,eAAe,mBAClC,EAAW,mBACX,QACJ,oBAAqB,EAAW,eAAe,qBAC3C,EAAW,qBACX,QAGN,GAAO,QAAU,EACjB,GAAO,MAAQ,UAEf,EAAE,GAAK,GAAG,qBAAsB,CAAC,EAAI,IAAS,CAC5C,AACE,GACA,EAAK,QACL,EAAK,OAAO,EAAK,OAAO,OAAS,GAAG,aAAe,aAEnD,CAAI,EAAK,YACP,OAAO,WAAW,GAAM,CACtB,GAAI,GAAS,GAAO,MAChB,EACF,EAAO,uBAAyB,OAC5B,EAAE,EAAO,UAAU,SAAS,IAC5B,EAAE,EAAO,UAAU,WAAW,IACpC,EAAE,EAAO,sBAAsB,QAC7B,CACE,UAAW,EAAe,EAAO,QAEnC,MAED,KAEH,OAAO,SAAS,EAAG,QAIxB,SAAU,QChIb,AAAC,IAAO,CACN,GAAM,GAAS,GAAK,CAClB,GAAI,GAAQ,EAAE,OAAS,OAAS,EAAW,EAC3C,EAAI,cAAc,cAAc,UAAY,GAExC,EAAQ,EAAG,WAAW,EAAG,KAAK,SAAU,4BACxC,EAAW,EAAM,YAAa,cAE9B,EAAgB,EACpB,iBACA,EAAI,cAAc,cAAc,WAGlC,GAAI,CACF,OAAO,iBAAiB,OAAQ,GAChC,OAAO,iBAAiB,QAAS,SAC1B,EAAP,CACA,OAAO,SAAW,OAAO,QAAQ,MAAM,MAExC,UCZH,AAAC,EAAC,EAAM,EAAK,IAAM,CACjB,GAAI,GAAqB,EAEzB,GAAM,GAAa,IAAM,CACvB,GAAI,GAAM,IAAI,qBAAsB,CAClC,GAAI,GAAQ,GAAM,IAAI,qBAClB,EAAS,EAAM,QAAU,GAC7B,GAAG,KAAK,OAAO,qBAAsB,QAAQ,EAAO,SACpD,GAAI,GAAiB,EAAM,gBAAkB,GACzC,EAAK,EAAI,cAAc,mBAC3B,AAAI,IAAO,MACT,EAAG,iBAAiB,MAAM,QAAQ,GAAW,CAC3C,GAAI,GAAQ,EACT,cAAc,iBACd,UAAU,QAAQ,MAAO,IAExB,EAAS,EAAI,cACf,EAAQ,cAAc,wBAAwB,SAE5C,yEAAyE,2BACzE,yEAAyE,4BAEzE,EAAY,EAAI,cAClB,EAAQ,cAAc,wBAAwB,SAE5C,EAAQ,cAAc,wBAAwB,QAC3C,YAAc,EACf,WACA,eACF,oBAEA,EACF,EACG,cAAc,wBACd,aAAa,kBAAoB,EAItC,EAAQ,UAAU,OAAO,OAAQ,EAAO,SAAS,IACjD,EAAQ,aAAa,cAAe,CAAC,EAAO,SAAS,IACrD,EAAQ,aAAa,aAAc,GACnC,EAAQ,UAAU,OAAO,WAAY,GACrC,EAAQ,MAAM,YAAY,OAAQ,KAGtC,GAAI,GAAe,EAAM,cAAgB,GACrC,EAAM,EAAI,cAAc,yBAC5B,AAAI,EACF,GAAI,aAAa,QAAS,GAC1B,EAAI,QAAQ,QAAU,GAEtB,GAAI,aAAa,QAAS,IAC1B,EAAI,QAAQ,QAAU,MAK5B,EAAE,GAAK,GAAG,iBAAkB,IAAM,CAChC,MAGF,EAAE,GAAK,GAAG,mBAAoB,CAAC,EAAI,IAAS,CAC1C,AAAI,GAAQ,EAAK,QAAU,EAAK,OAAO,QACrC,GAAqB,EAAI,cAAc,qBAAqB,aAIhE,EAAE,GAAK,GAAG,oBAAqB,CAAC,EAAI,IAAS,CAC3C,GAAI,GAAQ,EAAK,QAAU,EAAK,OAAO,OAAQ,CAC7C,GAAI,GAAQ,GAAM,IAAI,qBAClB,GAAM,IAAI,qBACV,GACJ,EAAM,eAAiB,GAAoB,EAAK,QAC3C,EAAI,cAAc,IAAQ,GAAM,WAAa,IAClD,GAAM,GAAQ,GAAY,GAAM,MAChC,GAAI,EAAM,IAAI,0BAA2B,CACvC,GAAI,GAAS,EAAM,IAAI,0BAA0B,MAAM,KACvD,EAAM,OAAS,EAAO,IAAI,GAAS,EAAM,QAAQ,MAAO,KACxD,EAAM,OAAS,EAAM,OAAO,OAAO,GAAS,IAAU,SAExD,AAAI,EAAM,IAAI,gCACZ,GAAM,WAAW,EAAM,IAAI,gCACzB,EAAM,gBAGV,GAAM,IAAI,oBAAqB,GAG/B,AAAI,OAAO,YAAc,IACvB,GAAa,MAAQ,CAAE,SAAU,oBAEjC,GAAa,MAAQ,aAK3B,EAAE,GAAK,GAAG,qBAAsB,CAAC,EAAI,IAAS,CAC5C,GAAI,GAAQ,EAAK,QAAU,EAAK,OAAO,OAAQ,CAC7C,IAGA,GAAI,GAAgB,EAAI,cAAc,qBACtC,EAAc,SAAS,EAAG,GAS1B,GAAI,GAAS,AADA,EAAc,aACL,EAClB,EAAY,MAAM,KAAK,EAAI,iBAAiB,yBAC7C,IAAI,GAAQ,EAAK,UAAU,SAAS,aACpC,QAAQ,IACP,EAAgB,IAChB,EACF,EAAgB,EAAY,EAAgB,EAC1C,EAAW,GAAM,GAAS,GAE9B,OAAO,WAAW,GAAK,CAErB,EAAc,SAAS,CACrB,IAAK,EACL,KAAM,EACN,SAAU,YAEX,UAGN,OAAQ,SAAU,QCnIrB,AAAC,EAAC,EAAK,IAAM,CACX,EAAE,GAAK,GAAG,oBAAqB,CAAC,EAAG,IAAS,CAK1C,AAHiB,EAAE,SAAS,KAC1B,6CAES,KAAK,CAAC,EAAG,IAAa,CAC/B,EAAS,WAAa,+BACtB,EAAS,mBACP,WACA;AAAA;AAAA;AAAA,iBAGS,EAAS;AAAA;AAAA,gBAMvB,SAAU,QClBb,OAAkB,SAIlB,AAAC,EAAC,EAAG,EAAK,IAAQ,CAChB,GAAI,GAAe,CACjB,qBAAsB,CACpB,GAAI,qBACJ,GAAI,mBAEN,6BAA8B,CAC5B,GAAI,6BACJ,GAAI,0BAEN,kBAAmB,CACjB,GAAI,kBACJ,GAAI,oBAEN,QAAW,CACT,GAAI,UACJ,GAAI,QAEN,wBAAyB,CACvB,GAAI,wBACJ,GAAI,4BAEN,iBAAkB,CAChB,GAAI,iBACJ,GAAI,kBAEN,yBAA0B,CACxB,GAAI,uBACJ,GAAI,yBAEN,2BAA4B,CAC1B,GAAI,2BACJ,GAAI,4BAEN,GAAM,CACJ,GAAI,KACJ,GAAI,OAEN,IAAO,CACL,GAAI,MACJ,GAAI,MAEN,SAAY,CACV,GAAI,kBACJ,GAAI,gBAEN,WAAc,CACZ,GAAI,iBACJ,GAAI,mBAIR,EAAG,gBAAgB,GAEnB,GAAI,GACF,EACA,EAAY,GACZ,EAAY,OACZ,EAAgB,GAElB,EAAE,UAAY,CACZ,EAAE,GAAK,GAAG,mBAAoB,CAAC,EAAO,IAAS,CAC7C,AAAI,GAAQ,EAAK,QAAU,EAAK,OAAO,QAAU,EAAK,WAEpD,GAAW,GAAY,GAAM,MAG3B,EAAS,IAAI,cACb,EAAS,IAAI,aAAa,MAAM,KAAK,QAAU,OAE/C,GAAY,EAAS,IAAI,cAEvB,EAAS,IAAI,iBACf,GAAc,OAAS,EACvB,EACG,IAAI,gBACJ,MAAM,KACN,QAAQ,GAAS,CAChB,EAAc,KAAK,MAGzB,AAAI,EAAS,IAAI,aACf,EAAY,EAAS,IAAI,aAEzB,EAAY,OAGd,EAAY,GAAa,QAK/B,EAAE,UAAY,CACZ,EAAE,GAAK,GAAG,oBAAqB,SAAU,EAAO,EAAM,CAGpD,GADA,EAAG,KAAK,MAAM,iBACV,GAAQ,EAAK,QAAU,EAAK,OAAO,QAAU,EAAK,WAChD,EAAS,IAAI,cAAgB,EAAS,IAAI,aAAc,CAE1D,EAAG,KAAK,IAAI,iBAGZ,EAAE,gCAAgC,OAClC,EAAE,wBAAwB,OAC1B,EAAE,uBAAuB,IAAI,IAG7B,GAAI,GAAa,EAAE,gDAEnB,GAAI,EAAc,QAAQ,YAAc,IAAM,EAAU,OAAQ,CAE9D,GAAI,GAAY,EACd,oDAEF,EAAU,OAAO;AAAA;AAAA;AAAA,wBAGL,UAAkB,EAAK,YAAY,EAAK,UAClD,EAAK;AAAA;AAAA;AAAA,4BAIS;AAAA;AAAA;AAAA,oBAGR,EAAE;AAAA;AAAA,eAGV,EAAW,OAAO,GAGpB,GAAI,EAAc,QAAQ,SAAW,IAAM,EAAU,OAAQ,CAE3D,GAAI,GAAS,EACX,2EAEE,EAAY,EAAE;AAAA,kEACoC,EAChD,sCAC0B,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBA0E7B,GAAG,QAAS,GAAK,CACpB,QAAQ,CACN,UAAW,GAAG,UAAkB,EAAK,YAAY,EAAK,UAAU,EAAK,YACrE,KAAM,MACN,UAAW,OAGf,EAAO,OAAO,GACd,EAAW,OAAO,GAGpB,GAAI,EAAc,QAAQ,SAAW,GAAI,CAEvC,GAAI,GAAS,EAAE,iDAEf,AAAI,EACF,GAAO,OACL,2BACE,EAAE,0BACF,YAEJ,EAAY,IAEZ,GAAO,OACL,sBACE,EAAE,yBACF,0DACA,EAAE,kBACF,QACF,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKH,EAAE;AAAA;AAAA,iBAKR,EAAE,GAAK,IAAI,oBAAqB,kBAChC,EAAE,GAAK,GACL,yBACA,iBACA,SAAU,EAAG,CACX,EAAE,kBACC,KAAK,EAAE,WAAa,uCACpB,KAAK,QAAS,sBACd,KAAK,WAAY,YACpB,EAAE,kBACC,KAAK,QAAS,qBACd,UAGP,EAAE,GAAK,IAAI,oBAAqB,kBAChC,EAAE,GAAK,GACL,+OAOA,iBACA,UAAY,CACV,GAAI,GAAQ,EAAE,uBAAuB,MACjC,EACF,yJACF,AAAI,EAAM,KAAK,GACb,GAAE,qBACC,SAAS,aACT,WAAW,YACd,EAAY,GACZ,EAAE,uBAAuB,IAAI,IAE7B,GAAE,qBACC,YAAY,aACZ,KAAK,WAAY,YACpB,EAAE,uBAAuB,IAAI,QAKrC,EAAW,OAAO,GAGpB,GAAI,EAAc,QAAQ,YAAc,GAAI,CAE1C,GAAI,GAAY,EACd,iFAEF,EACG,OACC;AAAA;AAAA,8CAE8B,EAAE;AAAA;AAAA;AAAA,iBAKjC,OAAO,UAAY,EAAE,mBAAqB,YAAY,OAAO;AAAA;AAAA,8CAE9B,EAAE;AAAA;AAAA;AAAA,iBAMpC,GAAI,GACJ,AAAI,GAAQ,EAAK,UACf,EAAU,KAAK,WAAY,EAAK,UAClC,EAAQ,EAAK,OAAO,OAAO,SAAU,EAAG,CACtC,MAAO,GAAE,UACR,GACH,EAAU,KAAK,WAAY,EAAM,MAC7B,GAAQ,EAAK,WACf,EAAU,KAAK,YAAa,EAAK,WAC/B,GAAQ,EAAK,cACf,EAAU,KAAK,eAAgB,EAAK,cACtC,EAAE,GAAK,IAAI,oBAAqB,oBAChC,EAAE,GAAK,IACL,yBACA,mBACA,SAAU,EAAG,CACX,GAAI,GACF,EAAE,EAAE,QAAQ,KAAK,WAAa,OAC1B,EAAE,EAAE,QAAQ,KAAK,SACjB,EAAE,EAAE,QAAQ,QAAQ,UAAU,KAAK,SAGzC,EAAE,oCAAoC,KAAK,QAAS,GACpD,EAAU,KACR,2BACE,EAAE,4BACF,YAEJ,EAAG,cAGP,EAAW,OAAO,GAIpB,AAAI,IAAc,QAChB,GAAE,qBAAqB,OAAO,GAC9B,WAAW,UAAY,CACrB,EAAW,YAAY,YACtB,MAEH,GAAE,SAAS,QAAQ,GACnB,EAAE,aAAa,QAAQ,CAAE,UAAW,IACpC,WAAW,UAAY,CACrB,EAAW,YAAY,YACtB,aAMZ,OAAQ,OAAQ,UC1XnB,AAAC,EAAC,EAAK,IAAM,CACX,EAAE,GAAK,GAAG,mBAAoB,CAAC,EAAG,IAAS,CACzC,GAAI,GAAQ,EAAK,OAAQ,CACvB,GAAM,GAAK,GAAY,GAAM,MAC7B,EAAK,QAAU,EAAK,QAAU,CAAC,EAAG,IAAI,WAAa,EAAK,aAG3D,SAAU,QCCb,AAAC,UAAU,EAAG,EAAK,EAAK,CACtB,GAAI,GAAO,GACT,EACA,EACA,EAAK,2CAEP,EAAE,UAAY,CACZ,GAAI,CAEF,GADA,EAAY,EAAG,KAAK,UAAU,SAAS,UACnC,IAAc,OAAW,KAAM,2BACnC,EAAW,EAAY,OACvB,CACA,EAAW,EAGb,GAAI,CACF,EAAO,EAAG,KAAK,UAAU,SAAS,UAClC,EAEF,EAAE,GAAK,GAAG,mBAAoB,SAAU,EAAO,EAAM,CACnD,AAAI,GAAQ,EAAK,QAAU,EAAK,OAAO,QACrC,EAAE,KAAK,EAAK,OAAQ,SAAU,EAAG,EAAO,CACtC,EAAE,KAAK,EAAM,SAAU,SAAU,EAAG,EAAK,CACvC,GAAI,GAAQ,EAAI,cACd,EACA,EACF,AAAI,EAAI,cAAgB,SAAa,GAAI,EAAM,MAAM,GAAM,IACzD,GAAS,OAAO,EAAE,KAAO,EACzB,EAAI,SAAW,UACf,EAAI,OACF,GAAQ,EAAM,aAAe,QACzB,EAAS,EAAI,EACb,EAAS,aAO1B,OAAQ,OAAQ,UC9CnB,AAAC,UAAU,EAAG,EAAK,EAAS,EAAU,CACpC,GAAI,GAAa,GAEjB,AAAI,GAAW,EAAQ,WAChB,GAAS,QACZ,GAAS,OACP,EAAS,SACT,KACA,EAAS,SACR,GAAS,KAAO,IAAM,EAAS,KAAO,KAG3C,EAAE,UAAY,CACZ,GAAI,GACF,EACA,EAAS,EAAE,WAAW,EAAS,KAAK,MAAM,IAC1C,EAAa,IACb,EAAS,SAAS,MAEpB,GAAI,CACF,EAAU,OAAO,oBACjB,CACA,EAAU,KAGZ,WAAmB,EAAK,CACtB,MAAO,GAAI,OAAS,EAAI,SAAS,QAAQ,SAAU,IAGrD,WAAsB,EAAO,CAC3B,AAAI,EAAM,UAER,EAAG,KACA,KAAK,CACJ,IAAK,SACL,KAAM,IAEP,KAAK,IACH,AAAI,EAAG,OAAO,aAEnB,EAAG,KAAK,IAAM,EAAG,KAAK,GAAO,KAAK,KAGlC,EAAG,KAAK,GAAO,KAAK,IAIxB,YAAsB,CACpB,GAAW,EAAQ,WAAW,SAC9B,EAAQ,aAAa,KAAM,KAAM,MACjC,KAGF,AAAI,EAAS,SAAW,IAAI,IAE5B,GAAI,GACF,EAAQ,OAAU,GAAW,KAAK,MAAM,EAAQ,QAAQ,UAE1D,AAAI,EAGE,GAAO,WAAa,EAAO,YAAc,EAAc,WACzD,GAAc,UAAY,EAAO,UACjC,MAAO,GAAc,OACrB,MAAO,GAAc,WAGvB,AAAI,EAAc,YAAc,EAAU,GACxC,GAAG,KAAK,IAAI,cACZ,EAAa,IAEb,KAEG,AAAI,EAAO,UAEhB,EAAG,OAAO,GAEV,KAGF,EAAE,UAAU,GAAG,eAAgB,GAE/B,EAAE,UAAU,GAAG,mBAAoB,SAAU,EAAO,EAAM,CACxD,GAAI,GAAQ,EAAK,SAAU,CACzB,GAAI,GACF,EAAQ,CACN,IAAK,OACL,SAAU,EAAK,SAEf,UAAW,EAAU,IAEzB,GAAI,EAAI,SAAU,IAAS,EAAK,UAC9B,EAAM,OAAS,EAAK,OACpB,EAAM,UAAY,EAAK,UACvB,EAAM,UAAY,EAAK,UAEnB,EAAK,kBACP,GAAQ,CAAC,EAAQ,EAAK,iBAAiB,QAAQ,KAAM,MAAM,KACzD,YAGK,EAAK,OAAQ,CACtB,GAAI,GAAQ,EAAE,KAAK,EAAK,OAAQ,SAAU,EAAG,CACzC,MAAO,GAAE,WACR,GACH,EAAS,EAAQ,EAAM,OAAS,KAClC,AAAI,IAAW,KACb,GAAM,OAAS,EACf,EAAQ,CAAC,EAAQ,EAAM,UAAW,IAAK,EAAE,aAAa,KACpD,IAGF,EAAQ,CAAC,EAAQ,EAAE,gBAAgB,KAAK,GAG5C,GAAI,CAAC,EAAQ,CACX,GAAI,CACF,GAAW,EAAQ,QAAQ,QAAS,KAAK,UAAU,SACnD,EAGF,AAAI,EAAQ,OAAS,EAAQ,MAAM,WAAa,EAAM,UACpD,EAAQ,aACN,EACA,KACA,EAAS,OACP,EAAS,SACP,IAAc,eAAiB,EAAK,WAAc,KAGxD,AAAI,EAAK,WAAa,EACpB,EAAQ,UACN,EACA,KACA,EAAS,OACP,EAAS,SACT,eACA,EAAK,WAGT,EAAQ,UACN,EACA,KACA,EAAS,OAAS,EAAS,UAKnC,AAAI,GAAS,SAAS,QAAU,GAC9B,UAAS,MAAQ,GAIrB,GACE,GACE,GAAK,OAAS,EAAK,MAAM,SACxB,EAAK,QAAU,CAAC,EAAK,OAAO,QAC7B,EAAK,SAAW,qBAClB,CAEA,GACE,GACA,EAAK,OACL,EAAK,MAAM,MACX,EAAK,MAAM,OAAS,IACpB,EAAK,MAAM,UAAY,KAGvB,OACF,IAEF,EAAS,KAGX,EAAI,iBAAiB,WAAY,SAAU,EAAG,CAC5C,EAAS,GACL,EAAE,OACJ,CAAI,EAAE,MAAM,YAAc,EAAU,GAAW,EAAa,EAAE,OACzD,YAKZ,OAAQ,OAAQ,OAAO,QAAS,OAAO,UCrI1C,GAAI,IAAW,GAQf,GAAS,UAAY,UAAY,CAM/B,GAAI,GACA,EACA,EAIA,EAAe,EAEnB,KAAK,SAAW,SAAU,EAAM,EAAa,CAY3C,SAAS,GAAI,OACb,EAAW,GAAI,OACf,EAAgB,GAAI,OAMpB,EAAO,EAAK,QAAQ,KAAM,MAK1B,EAAO,EAAK,QAAQ,MAAO,MAG3B,EAAO,EAAK,QAAQ,QAAS;AAAA,GAC7B,EAAO,EAAK,QAAQ,MAAO;AAAA,GAG3B,EAAO;AAAA;AAAA,EAAS,EAAO;AAAA;AAAA,EAGvB,EAAO,EAAO,GAMd,EAAO,EAAK,QAAQ,aAAc,IAGlC,EAAO,EAAgB,GAGvB,EAAO,EAAsB,GAE7B,AAAI,EAAa,EAAO,EAAc,GACjC,EAAO,EAAe,GAE3B,EAAO,EAAsB,GAG7B,EAAO,EAAK,QAAQ,MAAO,MAG3B,EAAO,EAAK,QAAQ,MAAO,KAEpB,GAGT,GAAI,GAAwB,SAAU,EAAM,CA6B1C,GAAI,GAAO,EAAK,QACd,sGACA,SAAU,EAAY,EAAI,EAAI,EAAI,EAAI,CAGpC,MAFA,GAAK,EAAG,cACR,EAAO,GAAM,EAAqB,GAC9B,EAGK,EAAK,EACH,IACT,GAAS,GAAM,EAAG,QAAQ,KAAM,WAI3B,MAIX,MAAO,IAGL,EAAkB,SAAU,EAAM,CAEpC,EAAO,EAAK,QAAQ,MAAO;AAAA;AAAA,GAQ3B,GAAI,GACF,+FACE,EACF,uFA6BF,SAAO,EAAK,QACV,qIACA,GAqBF,EAAO,EAAK,QACV,+HACA,GAoBF,EAAO,EAAK,QACV,sDACA,GAkBF,EAAO,EAAK,QACV,sDACA,GAsBF,EAAO,EAAK,QACV,2DACA,GAIF,EAAO,EAAK,QAAQ,QAAS;AAAA,GACtB,GAGL,EAAc,SAAU,EAAY,EAAI,CAC1C,GAAI,GAAY,EAGhB,SAAY,EAAU,QAAQ,QAAS;AAAA,GACvC,EAAY,EAAU,QAAQ,MAAO,IAGrC,EAAY,EAAU,QAAQ,QAAS,IAGvC,EAAY;AAAA;AAAA,IAAY,GAAc,KAAK,GAAa,GAAK;AAAA;AAAA,EAEtD,GAGL,EAAiB,SAAU,EAAM,CAKnC,EAAO,EAAW,GAGlB,GAAI,GAAM,EAAU,UACpB,SAAO,EAAK,QAAQ,qCAAsC,GAC1D,EAAO,EAAK,QAAQ,qCAAsC,GAC1D,EAAO,EAAK,QAAQ,qCAAsC,GAE1D,EAAO,EAAS,GAChB,EAAO,EAAc,GACrB,EAAO,EAAe,GAMtB,EAAO,EAAgB,GACvB,EAAO,EAAgB,GAEhB,GAGL,EAAgB,SAAU,EAAM,CAMlC,SAAO,EAAa,GACpB,EAAO,EAAuC,GAC9C,EAAO,EAAwB,GAI/B,EAAO,EAAU,GACjB,EAAO,EAAW,GAKlB,EAAO,EAAa,GACpB,EAAO,EAAqB,GAC5B,EAAO,EAAkB,GAGzB,EAAO,EAAK,QAAQ,SAAU;AAAA,GAEvB,GAGL,EAAyC,SAAU,EAAM,CAQ3D,GAAI,GAAQ,4DAEZ,SAAO,EAAK,QAAQ,EAAO,SAAU,EAAY,CAC/C,GAAI,GAAM,EAAW,QAAQ,qBAAsB,OACnD,SAAM,EAAiB,EAAK,SACrB,IAGF,GAGL,EAAa,SAAU,EAAM,CA8B/B,SAAO,EAAK,QACV,mEACA,GAkCF,EAAO,EAAK,QACV,oFACA,GAkBF,EAAO,EAAK,QAAQ,8BAA+B,GAE5C,GAGL,EAAiB,SAAU,EAAY,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,CACrE,AAAI,GAAM,MAAW,GAAK,IAC1B,GAAI,IAAc,EACd,GAAY,EACZ,GAAU,EAAG,cACb,GAAM,EACN,GAAQ,EAEZ,GAAI,IAAO,GAOT,GANI,IAAW,IAEb,IAAU,GAAU,cAAc,QAAQ,QAAS,MAErD,GAAM,IAAM,GAER,EAAO,KAAY,KACrB,GAAM,EAAO,IACT,EAAS,KAAY,MACvB,IAAQ,EAAS,aAGf,GAAY,OAAO,aAAe,GAEpC,GAAM,OAEN,OAAO,IAKb,GAAM,EAAiB,GAAK,MAC5B,GAAI,IAAS,YAAc,GAAM,IAEjC,MAAI,KAAS,IACX,IAAQ,GAAM,QAAQ,KAAM,UAC5B,GAAQ,EAAiB,GAAO,MAChC,IAAU,WAAa,GAAQ,KAGjC,IAAU,IAAM,EAAwB,IAAa,OAE9C,IAGL,EAAY,SAAU,EAAM,CAyB9B,SAAO,EAAK,QACV,gDACA,GA6BF,EAAO,EAAK,QACV,qEACA,GAGK,GAGL,EAAgB,SAAU,EAAY,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,CACpE,GAAI,IAAc,EACd,GAAW,EACX,GAAU,EAAG,cACb,GAAM,EACN,GAAQ,EAIZ,GAFK,IAAO,IAAQ,IAEhB,IAAO,GAOT,GANI,IAAW,IAEb,IAAU,GAAS,cAAc,QAAQ,QAAS,MAEpD,GAAM,IAAM,GAER,EAAO,KAAY,KACrB,GAAM,EAAO,IACT,EAAS,KAAY,MACvB,IAAQ,EAAS,SAGnB,OAAO,IAIX,GAAW,GAAS,QAAQ,KAAM,UAClC,GAAM,EAAiB,GAAK,MAC5B,GAAI,IAAS,aAAe,GAAM,UAAY,GAAW,IAMzD,UAAQ,GAAM,QAAQ,KAAM,UAC5B,GAAQ,EAAiB,GAAO,MAChC,IAAU,WAAa,GAAQ,IAG/B,IAAU,MAEH,IAGL,EAAa,SAAU,EAAM,CAQ/B,SAAO,EAAK,QACV,6BACA,SAAU,EAAY,EAAI,CACxB,MAAO,GAAU,OAAS,EAAc,GAAM,WAIlD,EAAO,EAAK,QACV,6BACA,SAAU,EAAY,EAAI,CACxB,MAAO,GAAU,OAAS,EAAc,GAAM,WAuBlD,EAAO,EAAK,QACV,sCACA,SAAU,EAAY,EAAI,EAAI,CAC5B,GAAI,GAAU,EAAG,OACjB,MAAO,GACL,KAAO,EAAU,IAAM,EAAc,GAAM,MAAQ,EAAU,OAK5D,GAIL,EAEA,EAAW,SAAU,EAAM,CAO7B,GAAQ,KAyBR,GAAI,GACF,8FAEF,MAAI,GACF,EAAO,EAAK,QAAQ,EAAY,SAAU,EAAY,EAAI,EAAI,CAC5D,GAAI,GAAO,EACP,EAAY,EAAG,OAAO,UAAY,GAAK,KAAO,KAIlD,EAAO,EAAK,QAAQ,UAAW;AAAA;AAAA;AAAA,GAC/B,GAAI,GAAS,EAAkB,GAM/B,SAAS,EAAO,QAAQ,OAAQ,IAChC,EAAS,IAAM,EAAY,IAAM,EAAS,KAAO,EAAY;AAAA,EACtD,IAGT,GACE,uGACF,EAAO,EAAK,QAAQ,EAAY,SAAU,EAAY,EAAI,EAAI,EAAI,CAChE,GAAI,GAAQ,EACR,EAAO,EAEP,GAAY,EAAG,OAAO,UAAY,GAAK,KAAO,KAG9C,EAAO,EAAK,QAAQ,UAAW;AAAA;AAAA;AAAA,GAC/B,GAAS,EAAkB,GAC/B,UACE,EAAQ,IAAM,GAAY;AAAA,EAAQ,GAAS,KAAO,GAAY;AAAA,EACzD,MAKX,EAAO,EAAK,QAAQ,KAAM,IAEnB,GAGT,EAAoB,SAAU,EAAU,CA0BtC,WAGA,EAAW,EAAS,QAAQ,UAAW;AAAA,GAGvC,GAAY,KAYZ,EAAW,EAAS,QAClB,2FACA,SAAU,EAAY,EAAI,EAAI,EAAI,EAAI,CACpC,GAAI,GAAO,EACP,EAAe,EACf,GAAgB,EAEpB,MAAI,IAAgB,EAAK,OAAO,UAAY,GAC1C,EAAO,EAAe,EAAS,IAG/B,GAAO,EAAS,EAAS,IACzB,EAAO,EAAK,QAAQ,MAAO,IAC3B,EAAO,EAAc,IAGhB,OAAS,EAAO;AAAA,IAK3B,EAAW,EAAS,QAAQ,MAAO,IAEnC,IACO,GAGT,GAAI,GAAgB,SAAU,EAAM,CAmBlC,UAAQ,KAER,EAAO,EAAK,QACV,mEACA,SAAU,EAAY,EAAI,EAAI,CAC5B,GAAI,GAAY,EACZ,EAAW,EAEf,SAAY,EAAY,EAAS,IACjC,EAAY,EAAO,GACnB,EAAY,EAAU,QAAQ,QAAS,IACvC,EAAY,EAAU,QAAQ,QAAS,IAEvC,EAAY,cAAgB,EAAY;AAAA,eAEjC,EAAU,GAAa,IAKlC,EAAO,EAAK,QAAQ,KAAM,IAEnB,GAGL,EAAY,SAAU,EAAM,CAC9B,SAAO,EAAK,QAAQ,eAAgB,IAC7B;AAAA;AAAA,IAAY,GAAc,KAAK,GAAQ,GAAK;AAAA;AAAA,GAGjD,EAAe,SAAU,EAAM,CAuCjC,SAAO,EAAK,QACV,sCACA,SAAU,EAAY,EAAI,EAAI,EAAI,EAAI,CACpC,GAAI,GAAI,EACR,SAAI,EAAE,QAAQ,aAAc,IAC5B,EAAI,EAAE,QAAQ,WAAY,IAC1B,EAAI,EAAY,GACT,EAAK,SAAW,EAAI,YAIxB,GAGL,EAAc,SAAU,EAAM,CAQhC,SAAO,EAAK,QAAQ,KAAM,SAG1B,EAAO,EAAK,QAAQ,KAAM,QAC1B,EAAO,EAAK,QAAQ,KAAM,QAG1B,EAAO,EAAiB,EAAM,WAAY,IAYnC,GAGL,EAAoB,SAAU,EAAM,CAEtC,SAAO,EAAK,QACV,qCACA,uBAGF,EAAO,EAAK,QAAQ,6BAA8B,eAE3C,GAGL,EAAiB,SAAU,EAAM,CAcnC,SAAO,EAAK,QACV,sCACA,SAAU,EAAY,EAAI,CACxB,GAAI,GAAK,EAKT,SAAK,EAAG,QAAQ,mBAAoB,MAGpC,EAAK,EAAG,QAAQ,MAAO,IAEvB,EAAK,EAAG,QAAQ,aAAc,IAC9B,EAAK,EAAe,GAEpB,EAAK,EAAG,QAAQ,UAAW,QAE3B,EAAK,EAAG,QACN,6BACA,SAAU,EAAY,EAAI,CACxB,GAAI,GAAM,EAEV,SAAM,EAAI,QAAQ,QAAS,MAC3B,EAAM,EAAI,QAAQ,MAAO,IAClB,IAIJ,EAAU;AAAA,EAAmB,EAAK;AAAA,kBAGtC,GAGL,EAAkB,SAAU,EAAM,CAOpC,EAAO,EAAK,QAAQ,QAAS,IAC7B,EAAO,EAAK,QAAQ,QAAS,IAS7B,OAPI,GAAQ,EAAK,MAAM,WACnB,EAAW,GAAI,OAKf,EAAM,EAAM,OACP,EAAI,EAAG,EAAI,EAAK,IAAK,CAC5B,GAAI,GAAM,EAAM,GAGhB,AAAI,EAAI,OAAO,cAAgB,EAC7B,EAAS,KAAK,GACL,EAAI,OAAO,OAAS,GAC7B,GAAM,EAAc,GACpB,EAAM,EAAI,QAAQ,aAAc,OAChC,GAAO,OACP,EAAS,KAAK,IAOlB,EAAM,EAAS,OACf,OAAS,GAAI,EAAG,EAAI,EAAK,IAEvB,KAAO,EAAS,GAAG,OAAO,aAAe,GAAG,CAC1C,GAAI,GAAY,EAAc,OAAO,IACrC,EAAY,EAAU,QAAQ,MAAO,QACrC,EAAS,GAAK,EAAS,GAAG,QAAQ,SAAU,GAIhD,MAAO,GAAS,KAAK;AAAA;AAAA,IAGnB,EAAuB,SAAU,EAAM,CAKzC,SAAO,EAAK,QAAQ,qCAAsC,SAG1D,EAAO,EAAK,QAAQ,qBAAsB,QAEnC,GAGL,EAA0B,SAAU,EAAM,CAgB5C,SAAO,EAAK,QAAQ,UAAW,GAC/B,EAAO,EAAK,QAAQ,2BAA4B,GACzC,GAGL,EAAe,SAAU,EAAM,CACjC,SAAO,EAAK,QACV,oCACA,uBAiBF,EAAO,EAAK,QACV,+DACA,SAAU,EAAY,EAAI,CACxB,MAAO,GAAoB,EAAsB,MAI9C,GAGL,EAAsB,SAAU,EAAM,CAiBxC,WAAkB,EAAI,CACpB,GAAI,GAAY,mBACZ,EAAM,EAAG,WAAW,GACxB,MAAO,GAAU,OAAO,GAAO,GAAK,EAAU,OAAO,EAAM,IAG7D,GAAI,GAAS,CACX,SAAU,EAAI,CACZ,MAAO,KAAO,EAAG,WAAW,GAAK,KAEnC,SAAU,EAAI,CACZ,MAAO,MAAQ,EAAS,GAAM,KAEhC,SAAU,EAAI,CACZ,MAAO,KAIX,SAAO,UAAY,EAEnB,EAAO,EAAK,QAAQ,KAAM,SAAU,EAAI,CACtC,GAAI,GAAM,IAER,EAAK,EAAO,KAAK,MAAM,KAAK,SAAW,IAAI,WAClC,GAAM,IAAK,CAEpB,GAAI,GAAI,KAAK,SAEb,EAAK,EAAI,GAAM,EAAO,GAAG,GAAM,EAAI,IAAO,EAAO,GAAG,GAAM,EAAO,GAAG,GAEtE,MAAO,KAGT,EAAO,YAAc,EAAO,KAAO,EAAO,OAC1C,EAAO,EAAK,QAAQ,SAAU,MAEvB,GAGL,EAAwB,SAAU,EAAM,CAI1C,SAAO,EAAK,QAAQ,YAAa,SAAU,EAAY,EAAI,CACzD,GAAI,GAAoB,SAAS,GACjC,MAAO,QAAO,aAAa,KAEtB,GAGL,EAAW,SAAU,EAAM,CAQ7B,SAAO,EAAK,QAAQ,mBAAoB,MAGxC,EAAO,EAAK,QAAQ,MAAO,IAEpB,GAGL,EAAS,SAAU,EAAM,CAM3B,SAAO,EAAK,QAAQ,YAAa,QAGjC,EAAO,EAAK,QAAQ,MAAO,QAG3B,EAAO,EAAK,QAAQ,aAAc,SAAU,EAAY,EAAI,EAAI,CAK9D,OAJI,GAAc,EACd,EAAY,EAAK,EAAY,OAAS,EAGjC,EAAI,EAAG,EAAI,EAAW,IAAK,GAAe,IAEnD,MAAO,KAIT,EAAO,EAAK,QAAQ,MAAO,QAC3B,EAAO,EAAK,QAAQ,MAAO,IAEpB,GAOL,EAAmB,SAAU,EAAM,EAAe,EAAgB,CAGpE,GAAI,GACF,KAAO,EAAc,QAAQ,cAAe,QAAU,KAExD,AAAI,GACF,GAAc,OAAS,GAGzB,GAAI,GAAQ,GAAI,QAAO,EAAa,KACpC,SAAO,EAAK,QAAQ,EAAO,GAEpB,GAGL,EAA4B,SAAU,EAAY,EAAI,CACxD,GAAI,GAAmB,EAAG,WAAW,GACrC,MAAO,KAAO,EAAmB,MAIrC,GAAO,IAAQ,GCryCf,GAAM,IAAY,GAAI,IAAS,UAEzB,GAAO,GAAU,SAAS,KAAK,IACrC,GAAU,SAAW,CAAC,EAAM,IAC1B,GAAK,EAAM,GAAQ,QAAQ,mBAAoB,+BCKjD,YAAiB,EAAM,CACrB,MAAO,AAAC,GAAK,MAAuB,GAAf,EAAK,QAG5B,YAA0B,EAAI,EAAO,CACnC,GAAG,KAAK,OAAO,uBAAwB,GAGzC,AAAC,EAAC,EAAK,IAAM,CACX,GAAM,GAAY,EAAI,cAAc,4BAC9B,EAAa,EAAI,cAAc,QACrC,EAAW,UAAY,6BACvB,EAAW,UAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQvB,EAAE,GAAK,GAAG,oBAAqB,CAAC,EAAI,IAAS,CAE3C,GADA,GAAiB,KAAM,IACnB,GAAQ,EAAK,oBAAsB,EAAK,mBAAmB,OAAQ,CACrE,EAAU,iBAAiB,wBAAwB,QAAQ,GAAO,CAChE,EAAU,YAAY,KAGxB,AADa,EAAK,mBAAmB,IAAI,IACpC,QAAQ,GAAQ,CACnB,GAAI,GAAW;AAAA,2CACoB,GAAU,SAC3C,GAAW,GACX;AAAA,QAGF,EAAU,mBAAmB,aAAc,KAG7C,GAAI,GAAgB,EAAI,cACtB,wDAEF,AAAI,GACF,EAAc,WAAW,YAAY,GAMvC,AAHE,GAAI,cAAc,kCAAoC,KAClD,EAAI,cAAc,gCAClB,EAAI,cAAc,UACpB,QAAQ,GACZ,EAAW,iBAAiB,QAAS,OAKzC,EACG,cAAc,2BACd,iBAAiB,QAAS,MAC5B,SAAU,QCxDb,AAAC,EAAC,EAAK,IAAM,CACX,EAAE,GAAK,GAAG,oBAAqB,CAAC,EAAG,IAAS,CAC1C,GAAI,GAAQ,EAAK,QAAU,EAAK,OAAO,OAAQ,CAC7C,GAAM,GAAQ,GAAY,GAAM,MAChC,GAAI,EAAM,IAAI,sBAAuB,CAInC,GAAM,GAAS,QAHF,0DAA0D,EAAM,IAC3E,uCAGF,EACG,cAAc,yBACd,MAAM,YAAY,YAAa,GAClC,EAAG,KAAK,IAAI,cAGZ,GAAG,KAAK,MAAM,UACd,EACG,cAAc,yBACd,MAAM,YAAY,YAAa,SAIvC,SAAU,QClBb,AAAC,UAAU,EAAG,CACZ,EAAE,UAAY,CACZ,GAAI,GAAU,EAEd,GAAI,CACF,GAAI,GAAY,EAAK,UAAU,SAAS,UACxC,GAAI,IAAc,OAAW,KAAM,2BACnC,EAAW,EAAY,OACvB,CACA,EAAW,EAGb,GAAI,CAEF,GADA,EAAS,EAAK,UAAU,SAAS,OAC7B,CAAC,UAAU,QAAQ,KAAY,GACjC,KAAM,uCACR,EAEF,GAAM,GAAU,EAAK,QAAQ,SAAS,YAAc;AAAA;AAAA,EAAS;AAAA,EACvD,EAAgB,GAAI,QAAO,EAAS,KAO1C,GAAI,GAAQ,cACV,EAAqB,CACnB,IACA,KACA,KACA,KACA,KACA,KACA,KACA,OACA,QACA,SACA,WAGJ,AAAI,IAAW,UACb,EAAmB,OAAO,GAG5B,EAAE,GAAG,SAAW,UAAY,CAC1B,MAAO,MAAK,KAAK,SAAU,EAAG,EAAG,CAC/B,GAAI,EAAE,UAAU,SAAS,wBAAyB,OAClD,EAAI,EAAE,GACN,GAAI,GAAS,EACT,EAAe,EAAkB,GACrC,GAAI,GAAU;AAAA,EAEd,EAAU,EAAE,OAAO,QAAQ,EAAO,GAClC,EAAW,GAAU,SAAS,EAAS,GACnC,GACF,GAAW,EAAS,OAAO,QAAQ,EAAe,UAEhD,IAAa,GACf,GAAW,EAAS,QAAQ,kBAAmB,IAEjD,EAAE,KAAK,GAAU,SAAS,2BAI9B,WAA2B,EAAG,CAC5B,MACE,GAAmB,QAAQ,EAAE,IAAI,GAAG,UAAY,IAC/C,IAAW,UAAY,EAAE,SAAS,YAIvC,WAAuB,EAAG,EAAI,EAAI,CAChC,MAAO,GAAK,KAAK,IAAI,EAAG,EAAW,OAAO,IAG5C,EAAE,UAAU,GAAG,oBAAqB,SAAU,EAAO,EAAM,CACzD,AAAI,GAAQ,EAAK,QACf,GAAE,eAAe,WACjB,EAAE,UAAU,QAAQ,cACpB,EAAE,UAAU,QAAQ,mBAK1B,SAAS,iBACP,oBACA,CAAC,CAAE,OAAQ,CAAE,UAAS,cAAgB,CACpC,AAAI,EAAI,QAAS,IAAY,GAAQ,IAAY,GAAa,IAC5D,GAAQ,KAAK,UAAU,OAAO,wBAC9B,EAAQ,KAAK,YAGb,EAAI,QAAS,IACb,EAAQ,cAAgB,QACxB,GAAa,IAEb,EAAQ,KAAK,KAAK,eAAe,eAItC,QCxGH,EAAE,UAAU,MAAM,IAAM,CACtB,AAAC,EAAC,EAAK,IAAM,CACX,GAAI,GAAU,CAAC,UAAW,WAAY,UAAW,cAE7C,EAAY,GAEZ,EAAU,GAEd,EAAQ,QAAQ,GAAO,CACrB,GAAI,GAAS,EAAI,cAAc,IAAI,KACnC,GAAI,CAAC,EAEH,EAAQ,KAAK,OACR,CACL,GAAI,GAAW,EAAO,cAAc,SACpC,AAAK,EASH,EAAU,GAAO,EAAS,UAAU,OAPpC,GAAQ,KAAK,GACb,OAAO,SACL,OAAO,QAAQ,KACb;AAAA,4EASV,EAAU,EAAQ,OAAO,GAAO,CAAC,EAAQ,SAAS,IAElD,GAAM,GAAQ,IAAM,CAElB,EAAQ,QAAQ,GAAO,CACrB,EAAQ,EAAK,EAAU,OAIrB,EAAU,CAAC,EAAK,IAAW,CAC/B,EAAI,iBAAiB,IAAI,KAAO,QAAQ,GAAO,CAC7C,EAAI,cAAc,SAAS,UAAY,KAI3C,EAAE,GAAK,GAAG,qBAAsB,CAAC,EAAG,IAAS,CAC3C,GAAI,GAAQ,EAAK,QAAU,EAAK,OAAO,OAAQ,CAC7C,IACA,GAAM,GAAS,GAAY,GAAM,OAC7B,EAAiB,EAAK,OAAO,OAC/B,CAAC,EAAI,IAAW,EAAM,QAAU,EAAM,QAAU,GAChD,IAEF,EAAO,QAAQ,CAAC,EAAO,IAAO,CAC5B,AAAI,IAAO,GACT,EAAQ,QAAQ,GAAO,CACrB,EAAI,GAAK,IAAU,EAAQ,EAAK,EAAM,aAM/C,SAAU,UClEf,GAAI,IAAW,GAAI,KAEb,GAAa,GAAa,CAC9B,GAAI,GAAS,OAAO,OAAO,GAC3B,MAAI,GAAO,OAIF,AAHK,EAAO,OACjB,CAAC,EAAa,IAAiB,EAAc,GAEhC,EAAO,OAEf,GAIX,QAAc,CACZ,aAAc,CACZ,KAAK,OAAS,GACd,KAAK,QAAU,IAInB,AAAC,EAAC,EAAK,IAAM,CACX,GAAM,GAAa,IAAM,CAGvB,AADe,EAAI,iBAAiB,sCAC3B,QAAQ,GAAM,CACrB,GAAI,GAAM,EAAG,cAAc,UAC3B,GAAI,IAAQ,KAAM,CAChB,GAAI,GAAU,EAAI,aAAa,gBAC/B,AAAI,IAAY,MACd,CAAI,EAAQ,SAAS,KAEf,GAAS,IAAI,IACf,GAAI,aACF,qBACA,GAAS,IAAI,GAAS,SAEpB,GAAS,IAAI,GAAS,eAAe,UACvC,EAAI,aACF,mBACA,GAAS,IAAI,GAAS,QAI5B,EAAI,aAAa,aAAc,GAAS,IAAI,QAMpD,EAAE,GAAK,QAAQ,mBAAoB,CAAC,MAGtC,EAAE,GAAK,GAAG,iBAAkB,GAAM,CAChC,GAAI,GAAc,GAAM,IAAI,YACxB,GAAI,KAAI,OAAO,QAAQ,GAAM,IAAI,cACjC,GAAI,KACR,GAAW,GAAI,KAAI,GACnB,MAGF,EAAE,GAAK,GAAG,kCAAmC,CAAC,EAAI,IAAS,CACzD,GAAI,GAAQ,EAAK,QAAU,EAAK,OAAO,OAAQ,CAC7C,GAAI,GAAK,GAAY,GAAM,MACvB,EAAQ,EAAK,OAAO,EAAK,OAAO,OAAS,GACzC,EAAU,EAAM,QAChB,EAAY,EAAM,UAGtB,GAAI,EAAG,IAAI,UAAY,EAAG,IAAI,WAAa,WACzC,IAAS,IAAI,EAAS,OAAO,EAAG,IAAI,WAEhC,IAAc,IAAI,CACpB,GAAI,GAAa,GAAS,IAAI,GAC1B,GAAS,IAAI,GACb,GAAI,IAER,EAAW,OAAO,GAAW,OAAO,EAAG,IAAI,UAC3C,EAAW,QAAU,GAAW,EAAW,QAC3C,GAAS,IAAI,EAAW,GAK5B,GAAI,EAAG,IAAI,iBAEL,IAAc,GAAI,CACpB,GAAI,GAAa,GAAS,IAAI,GAC1B,GAAS,IAAI,GACb,GAAI,IAER,EAAW,MAAQ,OAAO,EAAG,IAAI,iBACjC,GAAS,IAAI,EAAW,GAG5B,AAAI,GAAS,MACX,IAAM,IAAI,WAAY,OAAO,YAAY,KACzC,UAIL,SAAU,QCrFb,GAAM,IAAa,CACjB,0BAA2B,CACzB,GAAM,0BACN,GAAM,6BACN,QAAS,2BAEX,4BAA6B,CAC3B,GAAM,4BACN,GAAM,oCACN,QAAS,6BAEX,GAAM,CACJ,GAAM,KACN,GAAM,MACN,QAAS,OAGb,EAAE,gBAAgB,IAElB,AAAC,EAAC,EAAK,IAAM,CAEX,GAAM,GAAe,EAAI,cAAc,mBACjC,EAAW,EAAI,cAAc,QACnC,EAAS,aAAa,YAAa,aACnC,EAAS,aAAa,cAAe,QACrC,EAAS,aAAa,gBAAiB,aACvC,EAAS,UAAU,IAAI,eACvB,EAAa,sBAAsB,WAAY,GAE/C,EAAE,GAAK,GAAG,oBAAqB,CAAC,EAAG,IAAS,CAE1C,GADA,EAAS,YAAc,GACnB,GAAQ,EAAK,QAAU,EAAK,OAAO,OAAQ,CAC7C,GAAM,GAAK,GAAY,GAAM,MACvB,EAAa,EAAI,iBAAiB,mBACxC,GAAI,EAAG,IAAI,YAAa,CACtB,EAAG,KAAK,IAAI,eACZ,GAAI,GAAW,EAAG,IAAI,YACtB,EAAW,UAAY,GACvB,GAAI,GAAQ,GACR,EAAe,GAInB,GAHI,IAAa,QACf,EAAG,KAAK,MAAM,eAEZ,EAAS,SAAS,KAAM,CAE1B,EAAQ,EAAI,cAAc,OAC1B,EAAM,UAAY,QAClB,GAAI,GAAQ,OAAO,EAAS,MAAM,KAAK,OACnC,EAAU,OAAO,EAAS,MAAM,KAAK,IACzC,EAAe,GAAG,EAAE,gCAAgC,KAAW,EAC7D,SACG,IACL,GAAI,CACF,OAAS,GAAI,EAAO,EAAI,EAAG,IAAK,CAC9B,GAAI,GAAO,EAAI,cAAc,QAC7B,EAAK,UAAY,OACjB,EAAI,GAAW,EAAK,UAAU,IAAI,YAClC,IAAM,GAAW,EAAK,UAAU,IAAI,WACpC,EAAI,GAAW,EAAK,UAAU,IAAI,UAClC,EAAK,aAAa,YAAa,GAC/B,EAAM,QAAQ,SAEhB,CACA,YAGF,GAAe,GAAG,EAAE,+BAA+B,KAErD,EAAW,QAAQ,GAAa,CAC9B,EAAU,UAAY,EAClB,GACF,GAAU,UAAY,GACtB,EAAU,OAAO,IAEnB,EAAU,aAAa,gBAAiB,EAAG,IAAI,aAC/C,EAAU,MAAM,YAAY,aAAc,EAAG,IAAI,eAGnD,EAAS,YAAc,QAI5B,SAAU,QC1GE,YAAwB,EAAG,CACnC,MAAO,IAAK,MAAQ,MAAO,IAAM,UAAY,EAAE,8BAAgC,GCSvE,YAAiB,EAAI,CAClC,MAAO,YAAY,EAAG,CACpB,MAAI,WAAU,SAAW,GAAK,GAAe,GACpC,EAEA,EAAG,MAAM,KAAM,YCJb,YAAiB,EAAI,CAClC,MAAO,YAAY,EAAG,EAAG,CACvB,OAAQ,UAAU,YACX,GACH,MAAO,OACJ,GACH,MAAO,IAAe,GAAK,EAAK,GAAQ,SAAU,EAAI,CACpD,MAAO,GAAG,EAAG,aAGf,MAAO,IAAe,IAAM,GAAe,GAAK,EAAK,GAAe,GAAK,GAAQ,SAAU,EAAI,CAC7F,MAAO,GAAG,EAAI,KACX,GAAe,GAAK,GAAQ,SAAU,EAAI,CAC7C,MAAO,GAAG,EAAG,KACV,EAAG,EAAG,KCzBJ,YAAc,EAAM,EAAK,CACtC,MAAO,QAAO,UAAU,eAAe,KAAK,EAAK,GCuBnD,GAAI,IAAuB,GAAQ,SAAiB,EAAO,EAAK,CAC9D,GAAI,EAAM,SAAW,EACnB,MAAO,GAIT,OAFI,GAAM,EACN,EAAM,EACH,EAAM,EAAM,QACjB,GAAI,GAAK,EAAM,GAAM,GACnB,EAAM,EAAI,EAAM,IAChB,GAAO,MAEP,OAAO,GAGX,MAAO,KAEF,GAAQ,GCbf,GAAI,IAAmB,GAAQ,SAAa,EAAM,EAAK,CACrD,MAAO,IAAQ,CAAC,GAAO,KAElB,GAAQ,GCdf,GAAM,IAAa,CAAC,EAAQ,GAAI,EAAM,KAAO,CAC3C,GAAM,GAAM,CAAC,GAAG,GAChB,GAAI,CAAC,EAAI,OAAQ,MAAO,MACxB,GAAM,GAAO,EAAI,MACjB,MAAI,GAAK,OACA,AAAE,GAAI,GAAK,EAAK,IAAM,EAAK,GAAG,GAAK,GAAW,EAAK,GAEnD,MAIX,AAAC,EAAC,EAAK,IAAM,CACX,GAAI,GAAY,GACZ,EAAa,GAEX,EAAU,GAAK,CACnB,GAAI,CACF,EAAI,cAAc,aAAa,OAAgB,MAAQ,OACvD,EAAG,kBACI,EAAP,CACA,OAAO,SAAW,OAAO,QAAQ,KAAK,KAI1C,EAAE,GAAK,GAAG,mBAAoB,CAAC,EAAG,IAAS,CACzC,GAAI,GAAQ,EAAK,QAAU,EAAK,OAAO,OAAQ,CAC7C,GAAM,GAAU,GAAY,GAAM,MAC5B,EAAa,GAAY,GAAM,SACrC,GACE,EAAQ,IAAI,sBACZ,EAAQ,IAAI,2BACZ,CACA,GAAM,GAAQ,CAAC,GAAG,GAClB,AAAI,EAAQ,IAAI,uBAAyB,qBACvC,EAAY,qBAEZ,EAAY,GAAW,EAAO,qBAEhC,EAAa,GAAW,EAAO,+BAE/B,GAAY,EAAa,MAK/B,EAAE,GAAK,GAAG,qBAAsB,CAAC,EAAG,IAAS,CAC3C,GAAI,GAAQ,EAAK,QAAU,EAAK,OAAO,QACjC,GAAa,EAAY,CAE3B,EAAa,EAAI,eAAe,GAAY,aAAa,WAEzD,AAAI,IAAc,qBAChB,EACG,cAAc,mDACd,iBAAiB,QAAS,GAG7B,GAAY,EAAI,eAAe,GAAW,aAAa,WAEvD,EAAI,iBAAiB,aAAa,OAAe,QAAQ,GAAQ,CAC/D,EAAK,iBAAiB,QAAS,MAInC,GAAI,CACF,EACG,cAAc,aAAa,OAC3B,QAAQ,0BAA0B,MAAM,QAAU,YACrD,CAEA,EACG,cAAc,aAAa,OAC3B,QAAQ,kBACR,aAAa,QAAS,iCAKhC,SAAU,QC9Fb,AAOA,YAAyB,EAAU,CACjC,GAAI,GAAiB,OAAO,UAAU,SAClC,EACF,MAAM,SACN,SAAyB,EAAQ,CAC/B,MAAO,GAAe,KAAK,KAAY,kBAG3C,WAAoB,EAAQ,CAC1B,MAAO,OAAO,IAAW,WAO3B,WAAiB,EAAK,CACpB,MAAO,GAAQ,GAAO,QAAU,MAAO,GAGzC,WAAsB,EAAQ,CAC5B,MAAO,GAAO,QAAQ,8BAA+B,QAOvD,WAAqB,EAAK,EAAU,CAClC,MAAO,IAAO,MAAQ,MAAO,IAAQ,UAAY,IAAY,GAK/D,GAAI,GAAa,OAAO,UAAU,KAClC,WAAoB,EAAI,EAAQ,CAC9B,MAAO,GAAW,KAAK,EAAI,GAG7B,GAAI,GAAa,KACjB,WAAsB,EAAQ,CAC5B,MAAO,CAAC,EAAW,EAAY,GAGjC,GAAI,GAAY,CACd,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,UAGP,WAAoB,EAAQ,CAC1B,MAAO,QAAO,GAAQ,QAAQ,eAAgB,SAAuB,EAAG,CACtE,MAAO,GAAU,KAIrB,GAAI,GAAU,MACV,EAAU,MACV,EAAW,OACX,EAAU,QACV,EAAQ,qBAwBZ,WAAuB,EAAU,EAAM,CACrC,GAAI,CAAC,EAAU,MAAO,GAEtB,GAAI,GAAW,GACX,EAAS,GACT,EAAS,GACT,EAAS,GACT,EAAW,GAIf,YAAsB,CACpB,GAAI,GAAU,CAAC,EACb,KAAO,EAAO,QAAQ,MAAO,GAAO,EAAO,WAE3C,GAAS,GAGX,EAAS,GACT,EAAW,GAGb,GAAI,GAAc,EAAc,EAChC,WAAqB,GAAe,CAIlC,GAHI,MAAO,KAAkB,UAC3B,IAAgB,GAAc,MAAM,EAAS,IAE3C,CAAC,EAAQ,KAAkB,GAAc,SAAW,EACtD,KAAM,IAAI,OAAM,iBAAmB,IAErC,EAAe,GAAI,QAAO,EAAa,GAAc,IAAM,QAC3D,EAAe,GAAI,QAAO,OAAS,EAAa,GAAc,KAC9D,EAAiB,GAAI,QACnB,OAAS,EAAa,IAAM,GAAc,KAI9C,EAAY,GAAQ,EAAS,MAK7B,OAHI,GAAU,GAAI,GAAQ,GAEtB,EAAO,EAAM,EAAO,GAAK,GAAO,GAC7B,CAAC,EAAQ,OAAO,CAMrB,GALA,EAAQ,EAAQ,IAGhB,EAAQ,EAAQ,UAAU,GAEtB,EACF,OAAS,IAAI,EAAG,GAAc,EAAM,OAAQ,GAAI,GAAa,EAAE,GAC7D,GAAM,EAAM,OAAO,IAEnB,AAAI,EAAa,IACf,EAAO,KAAK,EAAO,QAEnB,EAAW,GAGb,EAAO,KAAK,CAAC,OAAQ,GAAK,EAAO,EAAQ,IACzC,GAAS,EAGL,KAAQ;AAAA,GAAM,IAKtB,GAAI,CAAC,EAAQ,KAAK,GAAe,MAuBjC,GArBA,EAAS,GAGT,EAAO,EAAQ,KAAK,IAAU,OAC9B,EAAQ,KAAK,GAGb,AAAI,IAAS,IACX,GAAQ,EAAQ,UAAU,GAC1B,EAAQ,KAAK,GACb,EAAQ,UAAU,IACb,AAAI,IAAS,IAClB,GAAQ,EAAQ,UAAU,GAC1B,EAAQ,KAAK,GACb,EAAQ,UAAU,GAClB,EAAO,KAEP,EAAQ,EAAQ,UAAU,GAIxB,CAAC,EAAQ,KAAK,GAChB,KAAM,IAAI,OAAM,mBAAqB,EAAQ,KAK/C,GAHA,GAAQ,CAAC,EAAM,EAAO,EAAO,EAAQ,KACrC,EAAO,KAAK,IAER,IAAS,KAAO,IAAS,IAC3B,EAAS,KAAK,YACL,IAAS,IAAK,CAIvB,GAFA,GAAc,EAAS,MAEnB,CAAC,GACH,KAAM,IAAI,OAAM,qBAAuB,EAAQ,QAAU,GAE3D,GAAI,GAAY,KAAO,EACrB,KAAM,IAAI,OACR,qBAAuB,GAAY,GAAK,QAAU,OAEjD,AAAI,KAAS,QAAU,IAAS,KAAO,IAAS,IACrD,EAAW,GACF,IAAS,KAElB,EAAY,GAOhB,GAFA,GAAc,EAAS,MAEnB,GACF,KAAM,IAAI,OACR,qBAAuB,GAAY,GAAK,QAAU,EAAQ,KAG9D,MAAO,GAAW,EAAa,IAOjC,WAAsB,EAAQ,CAI5B,OAHI,GAAiB,GAEjB,EAAO,EACF,EAAI,EAAG,EAAY,EAAO,OAAQ,EAAI,EAAW,EAAE,EAC1D,EAAQ,EAAO,GAEX,GACF,CAAI,EAAM,KAAO,QAAU,GAAa,EAAU,KAAO,OACvD,GAAU,IAAM,EAAM,GACtB,EAAU,GAAK,EAAM,IAErB,GAAe,KAAK,GACpB,EAAY,IAKlB,MAAO,GAST,WAAoB,EAAQ,CAM1B,OALI,GAAe,GACf,EAAY,EACZ,EAAW,GAEX,EAAO,EACF,EAAI,EAAG,EAAY,EAAO,OAAQ,EAAI,EAAW,EAAE,EAG1D,OAFA,EAAQ,EAAO,GAEP,EAAM,QACP,QACA,IACH,EAAU,KAAK,GACf,EAAS,KAAK,GACd,EAAY,EAAM,GAAK,GACvB,UACG,IACH,EAAU,EAAS,MACnB,EAAQ,GAAK,EAAM,GACnB,EACE,EAAS,OAAS,EACd,EAAS,EAAS,OAAS,GAAG,GAC9B,EACN,cAEA,EAAU,KAAK,GAIrB,MAAO,GAOT,WAAiB,EAAQ,CACvB,KAAK,OAAS,EACd,KAAK,KAAO,EACZ,KAAK,IAAM,EAMb,EAAQ,UAAU,IAAM,UAAe,CACrC,MAAO,MAAK,OAAS,IAOvB,EAAQ,UAAU,KAAO,SAAc,EAAI,CACzC,GAAI,GAAQ,KAAK,KAAK,MAAM,GAE5B,GAAI,CAAC,GAAS,EAAM,QAAU,EAAG,MAAO,GAExC,GAAI,GAAS,EAAM,GAEnB,YAAK,KAAO,KAAK,KAAK,UAAU,EAAO,QACvC,KAAK,KAAO,EAAO,OAEZ,GAOT,EAAQ,UAAU,UAAY,SAAmB,EAAI,CACnD,GAAI,GAAQ,KAAK,KAAK,OAAO,GAC3B,EAEF,OAAQ,OACD,GACH,EAAQ,KAAK,KACb,KAAK,KAAO,GACZ,UACG,GACH,EAAQ,GACR,cAEA,EAAQ,KAAK,KAAK,UAAU,EAAG,GAC/B,KAAK,KAAO,KAAK,KAAK,UAAU,GAGpC,YAAK,KAAO,EAAM,OAEX,GAOT,WAAiB,EAAM,EAAe,CACpC,KAAK,KAAO,EACZ,KAAK,MAAQ,CAAE,IAAK,KAAK,MACzB,KAAK,OAAS,EAOhB,EAAQ,UAAU,KAAO,SAAc,EAAM,CAC3C,MAAO,IAAI,GAAQ,EAAM,OAO3B,EAAQ,UAAU,OAAS,SAAgB,EAAM,CAC/C,GAAI,GAAQ,KAAK,MAEb,EACJ,GAAI,EAAM,eAAe,GACvB,EAAQ,EAAM,OACT,CAML,OALI,GAAU,KACZ,EACA,EACA,EAAY,GAEP,GAAS,CACd,GAAI,EAAK,QAAQ,KAAO,EAgBtB,IAfA,EAAQ,EAAQ,KAChB,EAAQ,EAAK,MAAM,KACnB,EAAQ,EAaD,GAAS,MAAQ,EAAQ,EAAM,QACpC,AAAI,IAAU,EAAM,OAAS,GAC3B,GAAY,EAAY,EAAO,EAAM,KAEvC,EAAQ,EAAM,EAAM,UAGtB,GAAQ,EAAQ,KAAK,GACrB,EAAY,EAAY,EAAQ,KAAM,GAGxC,GAAI,EAAW,MAEf,EAAU,EAAQ,OAGpB,EAAM,GAAQ,EAGhB,MAAI,GAAW,IAAQ,GAAQ,EAAM,KAAK,KAAK,OAExC,GAQT,YAAkB,CAChB,KAAK,MAAQ,GAMf,EAAO,UAAU,WAAa,UAAsB,CAClD,KAAK,MAAQ,IAOf,EAAO,UAAU,MAAQ,SAAe,EAAU,EAAM,CACtD,GAAI,GAAQ,KAAK,MACb,EAAS,EAAM,GAEnB,MAAI,IAAU,MACZ,GAAS,EAAM,GAAY,EAAc,EAAU,IAE9C,GAYT,EAAO,UAAU,OAAS,SAAgB,EAAU,EAAM,EAAU,CAClE,GAAI,GAAS,KAAK,MAAM,GACpB,EAAU,YAAgB,GAAU,EAAO,GAAI,GAAQ,GAC3D,MAAO,MAAK,aAAa,EAAQ,EAAS,EAAU,IAYtD,EAAO,UAAU,aAAe,SAC9B,EACA,EACA,EACA,EACA,CAIA,OAHI,GAAS,GAET,EAAO,EAAQ,EACV,EAAI,EAAG,EAAY,EAAO,OAAQ,EAAI,EAAW,EAAE,EAC1D,EAAQ,OACR,EAAQ,EAAO,GACf,EAAS,EAAM,GAEf,AAAI,IAAW,IACb,EAAQ,KAAK,cAAc,EAAO,EAAS,EAAU,GAClD,AAAI,IAAW,IAClB,EAAQ,KAAK,eAAe,EAAO,EAAS,EAAU,GACnD,AAAI,IAAW,IAClB,EAAQ,KAAK,cAAc,EAAO,EAAS,EAAU,GAClD,AAAI,IAAW,IAAK,EAAQ,KAAK,eAAe,EAAO,GACvD,AAAI,IAAW,OAAQ,EAAQ,KAAK,aAAa,EAAO,GACpD,IAAW,QAAQ,GAAQ,KAAK,SAAS,IAE9C,IAAU,QAAW,IAAU,GAGrC,MAAO,IAGT,EAAO,UAAU,cAAgB,SAC/B,EACA,EACA,EACA,EACA,CACA,GAAI,GAAO,KACP,EAAS,GACT,EAAQ,EAAQ,OAAO,EAAM,IAIjC,WAAmB,EAAU,CAC3B,MAAO,GAAK,OAAO,EAAU,EAAS,GAGxC,GAAI,EAAC,EAEL,IAAI,EAAQ,GACV,OAAS,GAAI,EAAG,EAAc,EAAM,OAAQ,EAAI,EAAa,EAAE,EAC7D,GAAU,KAAK,aACb,EAAM,GACN,EAAQ,KAAK,EAAM,IACnB,EACA,WAIJ,MAAO,IAAU,UACjB,MAAO,IAAU,UACjB,MAAO,IAAU,SAEjB,GAAU,KAAK,aACb,EAAM,GACN,EAAQ,KAAK,GACb,EACA,WAEO,EAAW,GAAQ,CAC5B,GAAI,MAAO,IAAqB,SAC9B,KAAM,IAAI,OACR,kEAIJ,EAAQ,EAAM,KACZ,EAAQ,KACR,EAAiB,MAAM,EAAM,GAAI,EAAM,IACvC,GAGE,GAAS,MAAM,IAAU,OAE7B,IAAU,KAAK,aACb,EAAM,GACN,EACA,EACA,GAGJ,MAAO,KAGT,EAAO,UAAU,eAAiB,SAChC,EACA,EACA,EACA,EACA,CACA,GAAI,GAAQ,EAAQ,OAAO,EAAM,IAIjC,GAAI,CAAC,GAAU,EAAQ,IAAU,EAAM,SAAW,EAChD,MAAO,MAAK,aAAa,EAAM,GAAI,EAAS,EAAU,IAG1D,EAAO,UAAU,cAAgB,SAC/B,EACA,EACA,EACA,CACA,GAAI,EAAC,EAEL,IAAI,GAAQ,EAAW,GAAY,EAAS,EAAM,IAAM,EAAS,EAAM,IACvE,GAAI,GAAS,KACX,MAAO,MAAK,aAAa,KAAK,MAAM,GAAQ,EAAS,EAAU,KAGnE,EAAO,UAAU,eAAiB,SAAwB,EAAO,EAAS,CACxE,GAAI,GAAQ,EAAQ,OAAO,EAAM,IACjC,GAAI,GAAS,KAAM,MAAO,IAG5B,EAAO,UAAU,aAAe,SAAsB,EAAO,EAAS,CACpE,GAAI,GAAQ,EAAQ,OAAO,EAAM,IACjC,GAAI,GAAS,KAAM,MAAO,GAAS,OAAO,IAG5C,EAAO,UAAU,SAAW,SAAkB,EAAO,CACnD,MAAO,GAAM,IAGf,EAAS,KAAO,cAChB,EAAS,QAAU,QACnB,EAAS,KAAO,CAAC,KAAM,MAGvB,GAAI,GAAgB,GAAI,GAKxB,EAAS,WAAa,UAAsB,CAC1C,MAAO,GAAc,cAQvB,EAAS,MAAQ,SAAe,EAAU,EAAM,CAC9C,MAAO,GAAc,MAAM,EAAU,IAOvC,EAAS,OAAS,SAAgB,EAAU,EAAM,EAAU,CAC1D,GAAI,MAAO,IAAa,SACtB,KAAM,IAAI,WACR,wDAEE,EAAQ,GACR,mFAKN,MAAO,GAAc,OAAO,EAAU,EAAM,IAK9C,EAAS,QAAU,SAAiB,EAAU,EAAM,EAAU,EAAM,CAGlE,GAAI,GAAS,EAAS,OAAO,EAAU,EAAM,GAE7C,GAAI,EAAW,GACb,EAAK,OAEL,OAAO,IAMX,EAAS,OAAS,EAGlB,EAAS,QAAU,EACnB,EAAS,QAAU,EACnB,EAAS,OAAS,EAGpB,GAAI,IAAW,GAEf,GAAgB,ICxpBhB,AAAC,EAAC,EAAK,IAAM,CACX,EAAE,GAAK,GAAG,qBAAsB,CAAC,EAAG,IAAS,CAC3C,GAAI,GAAQ,EAAK,QAAU,EAAK,OAAO,OACrC,GAAI,CAEF,GAAI,GAAW,AADI,EAAK,OAAO,EAAK,OAAO,OAAS,GACxB,KAC5B,EAAI,KAAK,QAAQ,KAAO,QACjB,EAAP,CACA,OAAO,SAAW,OAAO,QAAQ,KAAK,QAI3C,SAAU,QCbb,AAAC,UAAU,EAAG,CACZ,EAAE,UAAU,GAAG,mBAAoB,SAAU,EAAO,EAAM,CACxD,AAAI,EAAK,UACP,EAAE,KAAK,EAAK,SAAU,SAAU,EAAO,CACrC,EAAK,SAAS,GAAO,MAAQ,EAC7B,EAAK,SAAS,GAAO,YACnB,EAAK,SAAS,GAAO,YAAY,aAIxC,QCrBI,aAAqB,CAC1B,SACG,iBAAiB,wBACjB,QAAQ,CAAC,EAAI,IAAM,EAAG,UCC3B,GAAM,IAAO,GAAI,IACX,GAAO,GAAI,OAAM,gBAEvB,YAAoB,EAAO,CACzB,GAAI,GAAM,GAAI,aAAY,gBAAgB,EAAO,aACjD,MAAO,GAAI,gBAAgB,YAGtB,aAAsB,CAC3B,KACA,GAAI,GAAQ,GAAM,IAAI,kBAAoB,GAAM,IAAI,kBAAoB,GAExE,WAAkB,EAAG,CACnB,GAAI,GAAO,SAAS,cAAc,OAC9B,EAAO,EAAM,EAAE,OAAO,aAAa,gBACvC,EAAK,UAAY,GAAW,GAC5B,GAAK,OAAO,GAGd,OAAO,KAAK,GAAO,QAAQ,GAAS,CAClC,GAAI,GAAO,SAAS,cAAc,MAClC,EAAK,UAAY,sBACjB,GAAI,GAAS,SAAS,cAAc,UACpC,EAAO,UAAY,EACnB,EAAO,aAAa,cAAe,GACnC,EAAK,OAAO,GACZ,GAAI,CACF,GAAI,GAAW,EAAK,UAAU,IAC9B,EAAS,cAAc,UAAU,iBAAiB,QAAS,GAC3D,SAAS,eAAe,kBAAkB,OAAO,GAEjD,SAAS,iBAAiB,mBAAmB,QAAQ,GAAQ,CAC3D,GAAI,GAAW,EAAK,UAAU,IAC9B,EAAS,cAAc,UAAU,iBAAiB,QAAS,GAC3D,EAAK,OAAO,WAEP,EAAP,CACA,OAAO,SACL,OAAO,QAAQ,KAAK;AAAA;AAAA;AAAA,SAItB,OAAO,SAAW,OAAO,QAAQ,KAAK,MAG1C,SAAS,cAAc,ICpCzB,AAAC,EAAC,EAAK,IAAM,CACX,GAAI,GAAS,GACb,GAAI,GAAQ,GACR,EAAU,GAEV,EAAS,SAAS,cAAc,YACpC,WAAoB,EAAM,CACxB,SAAO,YAAc,EACd,EAAO,UAGhB,EAAE,GAAK,GAAG,qBAAsB,CAAC,EAAG,IAAS,CAC3C,AAAI,GAAQ,EAAK,QAAU,EAAK,OAAO,QACjC,IAAW,IAAY,EAAK,WAC9B,MACA,EAAQ,IAEV,EAAU,EAAK,UAEf,AADiB,GAAY,GAAM,SAC1B,QAAQ,CAAC,EAAO,IAAO,CAC9B,OAAO,KAAK,GAAO,QAAQ,GAAO,CAChC,GAAI,EAAI,WAAW,QAAS,CAC1B,GAAI,GAAO,EAAI,eAAe,EAAG,IACjC,EAAM,EAAM,IAAQ,EAAW,EAAK,WACpC,EAAK,MAAM,QAAU,OACrB,EAAS,SAKb,GACF,IAAM,IAAI,iBAAkB,GAC5B,EAAS,GACT,MAEE,GAAQ,EAAK,QACf,MACA,EAAQ,IAEN,GAAQ,EAAK,QAAU,EAAK,SAAW,qBACzC,MACA,EAAQ,MAIZ,EAAE,GAAK,GAAG,iBAAkB,GAAK,CAC/B,AAAI,GAAM,IAAI,mBAGV,KAAK,UAAU,KAAW,KAAK,UAAU,GAAM,IAAI,oBAEnD,GAAQ,GAAM,IAAI,kBAClB,UAIL,SAAU,QCjEb,AAAC,EAAC,EAAK,IAAM,CACX,GAAI,GAAK,GACL,EAAU,GACd,OAAO,iBAAmB,GAC1B,GAAI,GAAK,SAAS,cAAc,UAChC,EAAG,aAAa,OAAQ,mBACxB,EAAG,aAAa,MAAO,wCACvB,EAAG,MAAQ,GACX,SAAS,qBAAqB,QAAQ,GAAG,YAAY,GAErD,YAAgB,CACd,EAAU,GAEV,GAAI,GAAW,EAAI,eAAe,iBAClC,GAAY,EAAS,WAAW,YAAY,GAE5C,GAAI,GAAe,EAAI,eAAe,cACtC,GAAgB,EAAa,WAAW,YAAY,GAEpD,GAAI,GAAgB,EAAI,cAAc,4BACtC,GAAiB,EAAc,WAAW,YAAY,GAEtD,GAAI,GAAa,EAAI,eAAe,0BACpC,GAAc,EAAI,KAAK,YAAY,GAGrC,EAAE,GAAK,GAAG,mBAAoB,CAAC,EAAG,IAAS,CACzC,GAAI,GAAQ,EAAI,YAAa,IAC3B,GAAI,IAAY,EAAK,UAAW,CAC9B,AAAI,IAAY,IAAI,IACpB,EAAU,EAAK,UAEf,GAAI,GAAY,EAAG,WAAW,EAAG,KAAM,aACnC,EAAS,EAAU,WAAY,IACnC,GAAI,GAAU,EAAI,EAAK,UAAW,GAAS,CACzC,EAAK,EAAO,EAAK,WAAW,GAC5B,GAAI,GAAI,YAAY,IAAM,CACxB,GAAI,CACF,SAAS,KAAK,GACd,cAAc,QACd,IACD,UAGF,AAAI,IAAQ,EAAI,SAAU,IAC/B,MAIJ,EAAE,GAAK,GAAG,qBAAsB,CAAC,EAAG,IAAS,CAC3C,GAAI,GAAQ,EAAK,QAAU,EAAK,OAAO,OAAQ,CAC7C,GAAI,GAAW,EAAI,cAAc,2BACjC,OAAO,iBAAmB,EAAS,QAAQ,KAEvC,AADO,GAAY,GAAM,MACtB,IAAI,4BACT,QAAO,aAAe,GACtB,IACI,EAAI,UAAU,WAChB,UAAS,OAAO,GAChB,OAAO,WAAW,GAAM,OAAO,aAAe,GAAQ,YAK7D,SAAU,QClEb,GAAI,IAAY,EAAG,WAAW,EAAG,KAAM,aAUvC,YAAkC,EAAU,CAI1C,OAHI,GAAS,EAAS,MAAM,KAC1B,EACA,EAAI,EAEF,EAAO,EAAO,MAAQ,MAAO,KAAS,QAAa,UAAU,KAAK,IACrE,CACD,MAAQ,IAAQ,EAAK,eAAkB,GAAU,oBAO5C,YAAoB,EAAK,EAAU,CACxC,MAAO,IACL,CAAC,WAAY,GAAyB,OAAO,SAAS,UAAW,GAC9D,OAAO,SACP,KAAK,KACR,GAIG,aAA0B,CAC/B,MAAO,IAAyB,OAAO,SAAS,UCtBlD,AAAC,UAAU,EAAG,EAAQ,EAAK,EAAU,CACnC,GAAI,GAAQ,EAAG,WAAW,EAAG,KAAM,+BAEnC,AAAK,EAAS,QACZ,GAAS,OACP,EAAS,SACT,KACA,EAAS,SACR,GAAS,KAAO,IAAM,EAAS,KAAO,KAG3C,YAAgB,CAQd,GAAI,GAAS,GAAW,GAAI,IACxB,EAAW,CACb,IAAK,OACL,KAAM,CACJ,IAAK,SAGT,OAAO,KAAK,GAAQ,QAAQ,GAAS,CACnC,EAAS,KAAK,GAAS,EAAO,KAGhC,AAAI,EAAS,KAAK,UAChB,GAAG,KAAK,KAAK,GACb,SAAS,KAAK,aAAa,2BAA4B,OAEvD,GAAO,CAAE,KAAM,GAAM,UAAW,IAAQ,EAAM,yBAIlD,YAAoB,CAClB,MACE,GAAO,SACP,EAAO,QAAQ,WACd,GAAO,QAAQ,OACb,EAAO,gBACN,QAAU,IACV,KAAK,MAAM,EAAO,eAAe,QAAQ,WAIjD,WAAmB,EAAK,CACtB,MAAO,GAAI,OAAS,EAAI,SAAS,QAAQ,SAAU,IAGrD,YAAuB,CACrB,GAAI,GAAQ,IACZ,MAAK,GACO,EAAU,KAAc,EAAM,UADvB,GAIrB,AACG,GAAS,SAAS,MAAM,QAAU,EAAS,OAAO,SAAW,IAC9D,CAAC,IAED,EAAE,GAEF,EAAE,GAAK,IAAI,oBAAqB,SAAU,EAAO,EAAM,CACrD,AACG,IAAQ,EAAK,OAAS,EAAK,MAAM,SACjC,GAAQ,EAAK,QAAU,CAAC,EAAK,OAAO,SAErC,QAIL,OAAQ,OAAQ,SAAU,OAAO,UChFpC,AAAC,UAAU,EAAG,EAAK,EAAK,CACtB,EAAE,UAAY,MACb,OAAQ,OAAQ,UCCnB,AAAC,UAAU,EAAG,CACZ,EAAE,UAAU,IAAI,yBAEhB,EAAG,mBAAqB,UAAY,CAClC,EAAE,sDAAsD,KAAK,UAAY,CACvE,GAAI,GAAQ,EAAE,MACZ,EAAQ,EAAM,KAAK,mBACnB,EACA,EAAU,EAAE,MAAM,KAAK,WACvB,EACE,EAAG,KAAK,KAAK,iBAAmB,EAAQ,cAAgB,SAC1D,EACA,EACA,EAEF,AAAK,EAAM,QACT,GAAQ,EAAM,UACZ,8EAEG,GAAG,KAAK,KAAK,SAAW,UAAY,MAG3C,EAAQ,EAAM,KAAK,QACnB,EAAS,EAAM,IAAI,GAEnB,EAAS,EAAE,SAAS,cAAc,EAAW,WAAa,QAEtD,EAAO,OAAS,GAClB,GAAa,CACX,wBACA,YAAc,EACd,aAAe,EAAO,QAIxB,EAAE,KAAK,EAAO,OAAO,eAAgB,UAAY,CAC/C,GAAI,GAAQ,EAAE,MACd,GAAI,EAAM,KAAK,SAAU,CACvB,GAAI,GAAY,EAAM,KAAK,SAAS,MAAM,sBAC1C,AAAI,GACF,GAAY,EAAU,GAAG,QAAQ,SAAU,SAC3C,EAAW,KAAK,OAMtB,EAAE,KAAK,EAAO,KAAK,eAAgB,UAAY,CAC7C,GAAI,GAAQ,EAAE,MACd,GAAI,EAAM,KAAK,SAAU,CACvB,GAAI,GAAY,EAAM,KAAK,SAAS,MAAM,sBAC1C,AAAI,GACF,GAAY,EAAU,GAAG,QAAQ,SAAU,SAC3C,EAAW,KAAK,OAMtB,EAAE,KAAK,EAAQ,SAAU,EAAG,EAAK,CAC/B,EAAE,KAAK,EAAE,GAAK,KAAK,SAAW,GAAI,SAAU,EAAG,EAAK,CAClD,EAAW,KAAK,mBAAqB,OAIzC,EAAO,SAAS,EAAW,KAAK,MAChC,EAAO,QAAQ,SAIpB,QClEH,AAAC,EAAC,EAAM,EAAK,IAAM,CACjB,EAAE,GAAK,GAAG,qBAAsB,CAAC,EAAI,IAAS,CAC5C,GAAI,GAAQ,EAAK,QAAU,EAAK,OAAO,QAEjC,AADQ,GAAY,GAAM,MACpB,IAAI,wBAAyB,CAErC,GAAM,GAAW,EAAG,WAAW,EAAG,MAChC,+CACA,OAAO,SAAS,MAEZ,EAAY,EAAK,UACnB,EAAe,GAAG,aAAoB,EAAK,oBAAoB,IAC/D,EAAQ,EAAI,cACd,oDAEF,EAAM,MAAQ,EACd,EAAM,QAAQ,0BAA0B,MAAM,QAAU,YAI7D,OAAQ,SAAU,QCZrB,AAAC,EAAC,EAAK,IAAM,CACX,GAAI,GACA,EACE,EAAa,CACjB,uBAAwB,CACtB,GAAM,uBACN,GAAM,8BACN,QAAS,wBAEX,2BAA4B,CAC1B,GAAM,2BACN,GAAM,qCACN,QAAS,4BAEX,oFACE,CACE,GAAM,oFACN,GAAM,mGACN,QACE,sFAGF,EAAW,GAAI,IAAS,CAC5B,MAAS,uCACT,aAAc,EACZ,uFAGE,EAAQ,EAAG,WAAW,EAAG,MAC7B,gDACA,iBAEI,EAAQ,EAAG,WAAW,EAAG,MAC7B,4CACA,sBAEI,EAAW,EAAG,WAAW,EAAG,MAChC,+CACA,GAAG,OAAO,SAAS,aAAa,OAAO,SAAS,OAAO,OAAO,SAAS,YAEnE,EAAU,GAAK,CACnB,AACE,GAAE,OAAO,UAAU,SAAS,uCAC5B,EAAE,OAAO,KAAO,uCAEhB,GAAE,kBACF,EAAS,OAAO,KAIpB,EAAE,gBAAgB,GAElB,SAAS,iBAAiB,QAAS,GAEnC,EAAE,GAAK,GAAG,qBAAsB,CAAC,EAAG,IAAS,CAC3C,GAAI,GAAQ,EAAK,QAAU,EAAK,OAAO,QACjC,EAAK,WAAa,EAAK,YAAc,EAAW,CAClD,EAAY,EAAK,UACjB,GAAI,GAAe,mBACjB,GAAG,aAAoB,EAAK,oBAAoB,KAE5C,EAAe,EAAG,OAAO,aAC/B,EAAW,GAAI,aACZ,gBACC;AAAA;AAAA,6BAEiB,EACf,qCACS,eAAmB,UAAc,kBAA6B,MAAiB,EACxF;AAAA;AAAA,UAIF,aAED,KAAK,cAAc,qCAI3B,SAAU", "names": [] }