diff --git a/.gitignore b/.gitignore index 19d5b3c..168e6ff 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ -# Ignore all .xlsx files -# *.xlsx + +# powershell +.ps1 # Logs logs diff --git a/build/bundle.js b/build/bundle.js index 1ed0848..31adca8 100644 --- a/build/bundle.js +++ b/build/bundle.js @@ -1 +1 @@ -(()=>{"use strict";var __webpack_modules__={496:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n uV: () => (/* binding */ DATA_ROOT),\n P5: () => (/* binding */ FISCAL_YEAR),\n zu: () => (/* binding */ REVENUE),\n Qn: () => (/* binding */ TARGET),\n I9: () => (/* binding */ cola),\n aF: () => (/* binding */ fringe),\n Wr: () => (/* binding */ merit)\n});\n\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\nvar injectStylesIntoStyleTag = __webpack_require__(72);\nvar injectStylesIntoStyleTag_default = /*#__PURE__*/__webpack_require__.n(injectStylesIntoStyleTag);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleDomAPI.js\nvar styleDomAPI = __webpack_require__(825);\nvar styleDomAPI_default = /*#__PURE__*/__webpack_require__.n(styleDomAPI);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertBySelector.js\nvar insertBySelector = __webpack_require__(659);\nvar insertBySelector_default = /*#__PURE__*/__webpack_require__.n(insertBySelector);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\nvar setAttributesWithoutAttributes = __webpack_require__(56);\nvar setAttributesWithoutAttributes_default = /*#__PURE__*/__webpack_require__.n(setAttributesWithoutAttributes);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertStyleElement.js\nvar insertStyleElement = __webpack_require__(540);\nvar insertStyleElement_default = /*#__PURE__*/__webpack_require__.n(insertStyleElement);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleTagTransform.js\nvar styleTagTransform = __webpack_require__(113);\nvar styleTagTransform_default = /*#__PURE__*/__webpack_require__.n(styleTagTransform);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/css/common.css\nvar common = __webpack_require__(404);\n;// CONCATENATED MODULE: ./src/css/common.css\n\n \n \n \n \n \n \n \n \n \n\nvar options = {};\n\noptions.styleTagTransform = (styleTagTransform_default());\noptions.setAttributes = (setAttributesWithoutAttributes_default());\noptions.insert = insertBySelector_default().bind(null, \"head\");\noptions.domAPI = (styleDomAPI_default());\noptions.insertStyleElement = (insertStyleElement_default());\n\nvar update = injectStylesIntoStyleTag_default()(common/* default */.A, options);\n\n\n\n\n /* harmony default export */ const css_common = (common/* default */.A && common/* default */.A.locals ? common/* default */.A.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/js/utils/data_utils/local_storage_handlers.js\n/**\n * Saves employee table data and budget counters in local storage.\n */\nfunction saveTableData(table_id = \"employee-table\", save_as = 'employeeTableData') {\n var table = document.getElementById(table_id);\n var rows = table.rows;\n var tableData = [];\n for (var i = 0; i < rows.length; i++) {\n var cols = rows[i].cells;\n var rowData = [];\n for (var j = 0; j < cols.length; j++) {\n // for the action buttons, save the chosen action, not the button text\n if (cols[j].querySelector('button')) {\n rowData.push(rows[i].className);\n } else {\n rowData.push(cols[j].innerText);\n }\n }\n tableData.push(rowData);\n }\n\n // Save JSON string to localStorage\n localStorage.setItem(save_as, JSON.stringify(tableData));\n saveCounters();\n}\n\n/**\n * Loads employee table data and budget counters from local storage.\n * \n */\nfunction loadTableData(table_name_in_storage = \"employeeTableData\") {\n var data = localStorage.getItem(table_name_in_storage);\n if (data) {\n var tableData = JSON.parse(data);\n var table = document.getElementById(\"employee-table\");\n\n // It's good practice to empty the existing table first\n while (table.rows.length > 1) {\n table.deleteRow(1);\n }\n\n // Now, add the loaded rows to the table\n for (var i = 1; i < tableData.length; i++) {\n var newRow = table.insertRow(-1);\n var ncols = tableData[i].length;\n for (var j = 0; j < ncols - 1; j++) {\n var newCell = newRow.insertCell(j);\n newCell.innerText = tableData[i][j];\n // Add the cost column \n if (j == ncols - 2) {\n newCell.classList.add('cost');\n newCell.setAttribute('cost', unformatCurrency(tableData[i][j]));\n }\n }\n // Add the action buttons and load saved class\n var lastCell = newRow.insertCell(ncols - 1);\n lastCell.innerHTML = `\n
\n \n \n \n
\n `;\n newRow.classList.add(tableData[i][ncols - 1]);\n }\n\n //retrieve counter values\n loadCounters();\n }\n}\n\n// also save counters in sidebar\nfunction saveCounters() {\n localStorage.setItem('personnel_baseline', personnel_baseline.toString());\n localStorage.setItem('personnel_supp', personnel_supp.toString());\n // Add more here\n}\n\n// load counters in sidebar\nfunction loadCounters() {\n personnel_baseline = parseInt(localStorage.getItem('personnel_baseline'), 10);\n personnel_supp = parseInt(localStorage.getItem('personnel_supp'), 10);\n updateDisplay();\n}\n\n// save page state\nfunction updatePageState(page) {\n localStorage.setItem('page_state', page);\n}\n\n// load page state\nfunction loadPageState(page) {\n const pageState = localStorage.getItem('page_state');\n return pageState !== null ? pageState : 'welcome';\n}\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/js/components/header/header.css\nvar header = __webpack_require__(107);\n;// CONCATENATED MODULE: ./src/js/components/header/header.css\n\n \n \n \n \n \n \n \n \n \n\nvar header_options = {};\n\nheader_options.styleTagTransform = (styleTagTransform_default());\nheader_options.setAttributes = (setAttributesWithoutAttributes_default());\nheader_options.insert = insertBySelector_default().bind(null, \"head\");\nheader_options.domAPI = (styleDomAPI_default());\nheader_options.insertStyleElement = (insertStyleElement_default());\n\nvar header_update = injectStylesIntoStyleTag_default()(header/* default */.A, header_options);\n\n\n\n\n /* harmony default export */ const header_header = (header/* default */.A && header/* default */.A.locals ? header/* default */.A.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/js/components/header/header.js\n\nconst Subtitle = {\n update: function (subtitle) {\n // get current fund\n var fund = localStorage.getItem(\"fund\");\n if (fund) {\n var subtitle = `${subtitle}: ${fund}`;\n }\n document.getElementById(\"subtitle\").textContent = subtitle;\n }\n};\n/* harmony default export */ const components_header_header = (Subtitle);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/js/components/welcome/welcome.css\nvar welcome = __webpack_require__(235);\n;// CONCATENATED MODULE: ./src/js/components/welcome/welcome.css\n\n \n \n \n \n \n \n \n \n \n\nvar welcome_options = {};\n\nwelcome_options.styleTagTransform = (styleTagTransform_default());\nwelcome_options.setAttributes = (setAttributesWithoutAttributes_default());\nwelcome_options.insert = insertBySelector_default().bind(null, \"head\");\nwelcome_options.domAPI = (styleDomAPI_default());\nwelcome_options.insertStyleElement = (insertStyleElement_default());\n\nvar welcome_update = injectStylesIntoStyleTag_default()(welcome/* default */.A, welcome_options);\n\n\n\n\n /* harmony default export */ const welcome_welcome = (welcome/* default */.A && welcome/* default */.A.locals ? welcome/* default */.A.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/js/components/welcome/welcome.js\n\n\n// Hide and unhide welcome buttons\nfunction unhideWelcomeButtons() {\n document.getElementById(\"welcome-page\").style.display = \"block\";\n}\nfunction hideWelcomeButtons() {\n document.getElementById(\"welcome-page\").style.display = \"none\";\n}\nconst Welcome = {\n show: unhideWelcomeButtons,\n hide: hideWelcomeButtons\n};\n/* harmony default export */ const components_welcome_welcome = (Welcome);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/js/components/body/body.css\nvar body = __webpack_require__(9);\n;// CONCATENATED MODULE: ./src/js/components/body/body.css\n\n \n \n \n \n \n \n \n \n \n\nvar body_options = {};\n\nbody_options.styleTagTransform = (styleTagTransform_default());\nbody_options.setAttributes = (setAttributesWithoutAttributes_default());\nbody_options.insert = insertBySelector_default().bind(null, \"head\");\nbody_options.domAPI = (styleDomAPI_default());\nbody_options.insertStyleElement = (insertStyleElement_default());\n\nvar body_update = injectStylesIntoStyleTag_default()(body/* default */.A, body_options);\n\n\n\n\n /* harmony default export */ const body_body = (body/* default */.A && body/* default */.A.locals ? body/* default */.A.locals : undefined);\n\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/js/components/modal/modal.css\nvar modal = __webpack_require__(95);\n;// CONCATENATED MODULE: ./src/js/components/modal/modal.css\n\n \n \n \n \n \n \n \n \n \n\nvar modal_options = {};\n\nmodal_options.styleTagTransform = (styleTagTransform_default());\nmodal_options.setAttributes = (setAttributesWithoutAttributes_default());\nmodal_options.insert = insertBySelector_default().bind(null, \"head\");\nmodal_options.domAPI = (styleDomAPI_default());\nmodal_options.insertStyleElement = (insertStyleElement_default());\n\nvar modal_update = injectStylesIntoStyleTag_default()(modal/* default */.A, modal_options);\n\n\n\n\n /* harmony default export */ const modal_modal = (modal/* default */.A && modal/* default */.A.locals ? modal/* default */.A.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/js/components/modal/modal.js\n\nfunction clearModal() {\n updateModalTitle('');\n document.getElementById('modal-body').innerHTML = '';\n //removeAllModalLinks()\n}\n\n// function removeAllModalLinks(){\n// TODO\n// }\n\nfunction hideModal(modal_id) {\n $('#' + modal_id).modal('hide');\n}\nfunction showModal(modal_id) {\n $('#' + modal_id).modal('show');\n}\nfunction showModalHandler() {\n showModal('main-modal');\n}\nconst Link = {\n add: function (button_id) {\n document.getElementById(button_id).addEventListener('click', showModalHandler);\n },\n remove: function (button_id) {\n document.getElementById(button_id).removeEventListener('click', showModalHandler);\n }\n};\nfunction updateModalTitle(title) {\n document.getElementById('modal-title').textContent = title;\n}\nconst Title = {\n update: function (title) {\n updateModalTitle(title);\n }\n};\nconst Modal = {\n hide: function () {\n hideModal('main-modal');\n },\n show: function () {\n showModal('main-modal');\n },\n clear: clearModal,\n Title: Title,\n Link: Link\n};\n/* harmony default export */ const components_modal_modal = (Modal);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/js/components/nav_buttons/nav_buttons.css\nvar nav_buttons = __webpack_require__(595);\n;// CONCATENATED MODULE: ./src/js/components/nav_buttons/nav_buttons.css\n\n \n \n \n \n \n \n \n \n \n\nvar nav_buttons_options = {};\n\nnav_buttons_options.styleTagTransform = (styleTagTransform_default());\nnav_buttons_options.setAttributes = (setAttributesWithoutAttributes_default());\nnav_buttons_options.insert = insertBySelector_default().bind(null, \"head\");\nnav_buttons_options.domAPI = (styleDomAPI_default());\nnav_buttons_options.insertStyleElement = (insertStyleElement_default());\n\nvar nav_buttons_update = injectStylesIntoStyleTag_default()(nav_buttons/* default */.A, nav_buttons_options);\n\n\n\n\n /* harmony default export */ const nav_buttons_nav_buttons = (nav_buttons/* default */.A && nav_buttons/* default */.A.locals ? nav_buttons/* default */.A.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/js/components/nav_buttons/nav_buttons.js\n\n\nfunction initializeNavButtons() {\n // initialize last button\n const last_btn = document.getElementById('btn-last');\n last_btn.addEventListener('click', lastPage);\n // initialize next button\n const next_btn = document.getElementById('btn-next');\n next_btn.addEventListener('click', nextPage);\n disable('btn-next');\n}\nfunction hideNavButtons() {\n document.getElementById('nav-btns').style.display = 'none';\n}\nfunction showNavButtons() {\n document.getElementById('nav-btns').style.display = 'block';\n initializeNavButtons();\n}\nfunction disable(button_id) {\n document.getElementById(button_id).classList.add('disabled');\n}\nfunction enable(button_id) {\n document.getElementById(button_id).classList.remove('disabled');\n}\nconst Next = {\n disable: function () {\n disable('btn-next');\n },\n enable: function () {\n enable('btn-next');\n }\n};\nconst Last = {\n disable: function () {\n disable('btn-last');\n },\n enable: function () {\n enable('btn-last');\n }\n};\nconst NavButtons = {\n hide: hideNavButtons,\n show: showNavButtons,\n Next: Next,\n Last: Last\n};\n/* harmony default export */ const components_nav_buttons_nav_buttons = (NavButtons);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/js/components/prompt/prompt.css\nvar prompt_prompt = __webpack_require__(225);\n;// CONCATENATED MODULE: ./src/js/components/prompt/prompt.css\n\n \n \n \n \n \n \n \n \n \n\nvar prompt_options = {};\n\nprompt_options.styleTagTransform = (styleTagTransform_default());\nprompt_options.setAttributes = (setAttributesWithoutAttributes_default());\nprompt_options.insert = insertBySelector_default().bind(null, \"head\");\nprompt_options.domAPI = (styleDomAPI_default());\nprompt_options.insertStyleElement = (insertStyleElement_default());\n\nvar prompt_update = injectStylesIntoStyleTag_default()(prompt_prompt/* default */.A, prompt_options);\n\n\n\n\n /* harmony default export */ const components_prompt_prompt = (prompt_prompt/* default */.A && prompt_prompt/* default */.A.locals ? prompt_prompt/* default */.A.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/js/components/prompt/subcomponents/text.js\nfunction showPrompt() {\n document.getElementById(\"prompt-div\").style.display = \"block\";\n}\nfunction hidePrompt() {\n document.getElementById('prompt-div').style.display = 'none';\n}\nfunction updatePrompt(prompt) {\n document.getElementById('prompt').textContent = prompt;\n showPrompt();\n}\nconst Text = {\n show: showPrompt,\n hide: hidePrompt,\n update: function (text) {\n updatePrompt(text);\n }\n};\n/* harmony default export */ const subcomponents_text = (Text);\n;// CONCATENATED MODULE: ./src/js/components/prompt/subcomponents/buttons.js\nfunction showPromptButton(id) {\n // make buttons visible\n document.getElementById(id).style.display = 'inline';\n}\nfunction updatePromptButton(id, text) {\n document.getElementById(id).textContent = text;\n showPromptButton(id);\n}\nfunction hidePromptButton(id) {\n document.getElementById(id).style.display = 'none';\n}\nfunction unclickAll() {\n document.getElementById('option1').classList.remove('clicked');\n document.getElementById('option2').classList.remove('clicked');\n}\nfunction applyClickedStyle(button) {\n unclickAll();\n button.classList.add('clicked');\n}\nfunction addPromptButtonAction(button_id, action_fn) {\n const buttonElement = document.getElementById(button_id);\n buttonElement.addEventListener('click', action_fn);\n buttonElement.addEventListener('click', function () {\n applyClickedStyle(this);\n });\n}\nfunction removePromptButtonAction(button_id, action_fn) {\n document.getElementById(button_id).removeEventListener('click', action_fn);\n}\nconst Left = {\n show: function () {\n showPromptButton('option1');\n },\n hide: function () {\n hidePromptButton('option1');\n },\n updateText: function (text) {\n updatePromptButton('option1', text);\n },\n addAction: function (action_fn) {\n addPromptButtonAction('option1', action_fn);\n },\n removeAction: function (action_fn) {\n removePromptButtonAction('option1', action_fn);\n }\n};\nconst Right = {\n show: function () {\n showPromptButton('option2');\n },\n hide: function () {\n hidePromptButton('option2');\n },\n updateText: function (text) {\n updatePromptButton('option2', text);\n },\n addAction: function (action_fn) {\n addPromptButtonAction('option2', action_fn);\n },\n removeAction: function (action_fn) {\n removePromptButtonAction('option2', action_fn);\n }\n};\nconst Buttons = {\n Left: Left,\n Right: Right,\n show: function () {\n showPromptButton('option1');\n showPromptButton('option2');\n },\n hide: function () {\n hidePromptButton('option1');\n hidePromptButton('option2');\n },\n reset: unclickAll\n};\n/* harmony default export */ const buttons = (Buttons);\n;// CONCATENATED MODULE: ./src/js/components/prompt/prompt.js\n\n\n\nconst Prompt = {\n Text: subcomponents_text,\n Buttons: buttons,\n hide: function () {\n subcomponents_text.hide();\n buttons.hide();\n },\n show: function () {\n subcomponents_text.show();\n buttons.show();\n }\n};\n/* harmony default export */ const js_components_prompt_prompt = (Prompt);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/js/components/sidebar/sidebar.css\nvar sidebar = __webpack_require__(263);\n;// CONCATENATED MODULE: ./src/js/components/sidebar/sidebar.css\n\n \n \n \n \n \n \n \n \n \n\nvar sidebar_options = {};\n\nsidebar_options.styleTagTransform = (styleTagTransform_default());\nsidebar_options.setAttributes = (setAttributesWithoutAttributes_default());\nsidebar_options.insert = insertBySelector_default().bind(null, \"head\");\nsidebar_options.domAPI = (styleDomAPI_default());\nsidebar_options.insertStyleElement = (insertStyleElement_default());\n\nvar sidebar_update = injectStylesIntoStyleTag_default()(sidebar/* default */.A, sidebar_options);\n\n\n\n\n /* harmony default export */ const sidebar_sidebar = (sidebar/* default */.A && sidebar/* default */.A.locals ? sidebar/* default */.A.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/js/utils/common_utils.js\n// Function to format number as currency\nconst formatCurrency = (amount, return_zero = false) => {\n var amount = Math.round(parseFloat(amount));\n if (amount == NaN) {\n return \"$ -\";\n }\n if (amount < 0) {\n return '($' + amount.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',') + ')';\n } else if (amount == 0) {\n if (return_zero) {\n return '$0';\n }\n return \"$ -\";\n }\n return '$' + amount.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n};\n\n// function to convert formatted number to a float\nconst common_utils_unformatCurrency = formattedAmount => {\n // Remove any currency symbols and commas\n let numericalPart = formattedAmount.replace(/[^0-9.-]+/g, \"\");\n return parseFloat(numericalPart);\n};\nfunction displayWithCommas(value) {\n return formatCurrency(value).replace('$', '');\n}\nfunction delay(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\nasync function pauseExecution(seconds) {\n await delay(seconds * 1000); // convert to milliseconds\n}\n;// CONCATENATED MODULE: ./src/js/components/sidebar/sidebar.js\n\n\n\n\n// Assuming you have a CSS variable --main-color defined on the :root\nconst root = document.documentElement;\nconst sideBarWidth = getComputedStyle(root).getPropertyValue('--sidebar-width').trim();\nfunction hideSidebar() {\n document.getElementById('sidebar-panel').style.display = 'none';\n document.getElementById('main-panel').style.width = '100%';\n document.querySelector('header').style.width = '100%';\n}\nfunction showSidebar() {\n const sidebar = document.getElementById('sidebar-panel');\n const mainPanel = document.getElementById('main-panel');\n const header = document.querySelector('header');\n sidebar.style.display = 'block'; // Show the sidebar\n\n // Calculate the remaining width for the main panel and header\n var contentWidth = document.documentElement.clientWidth;\n mainPanel.style.width = `${contentWidth - parseInt(sideBarWidth, 10)}px`;\n header.style.width = `${contentWidth - parseInt(sideBarWidth, 10)}px`;\n\n // add target to sidebar\n addTarget(TARGET);\n\n // add event listener to resize content if window is adjusted\n window.addEventListener('resize', showSidebar);\n}\nfunction updateSidebarTitle(new_title) {\n document.getElementById('sidebar-title').textContent = new_title;\n}\nfunction updateSidebarStat(stat_id, new_figure) {\n replaceSidebarStat(stat_id, new_figure);\n // TODO: save in memory\n updateTotals();\n}\nfunction replaceSidebarStat(stat_id, new_figure) {\n const span = document.querySelector(`#${stat_id} .stat`);\n span.setAttribute('value', new_figure);\n span.textContent = formatCurrency(new_figure);\n}\nfunction incrementSidebarStat(stat_id, new_figure) {\n updateSidebarStat(stat_id, fetchStat(stat_id) + new_figure);\n}\nfunction fetchStat(stat_id) {\n const stat = document.querySelector(`#${stat_id} .stat`);\n return parseFloat(stat.getAttribute('value')) || 0;\n}\n\n// Function to update the display of the current and supp variables\nfunction updateTotals() {\n // update bottom lines\n let supp_total = -fetchStat('supp-revenue') + fetchStat('supp-personnel') + fetchStat('supp-nonpersonnel');\n let baseline_total = -fetchStat('baseline-revenue') + fetchStat('baseline-personnel') + fetchStat('baseline-nonpersonnel');\n replaceSidebarStat('supp-total', supp_total);\n replaceSidebarStat('baseline-total', baseline_total);\n\n // color code based on target\n var target = fetchStat('target');\n if (baseline_total <= target) {\n document.querySelector('#baseline-total .stat').style.color = \"green\";\n }\n if (baseline_total > target) {\n document.querySelector('#baseline-total .stat').style.color = \"red\";\n }\n}\nfunction addTarget(target) {\n replaceSidebarStat('target', target);\n}\nfunction updateTitle(title) {\n document.querySelector('#sidebar-title').textContent = title;\n}\nconst Sidebar = {\n hide: hideSidebar,\n show: showSidebar,\n updateTitle: updateSidebarTitle,\n updateStat: updateSidebarStat,\n incrementStat: incrementSidebarStat,\n addTarget: addTarget,\n updateTitle: updateTitle\n};\n/* harmony default export */ const components_sidebar_sidebar = (Sidebar);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/js/components/table/table.css\nvar table = __webpack_require__(279);\n;// CONCATENATED MODULE: ./src/js/components/table/table.css\n\n \n \n \n \n \n \n \n \n \n\nvar table_options = {};\n\ntable_options.styleTagTransform = (styleTagTransform_default());\ntable_options.setAttributes = (setAttributesWithoutAttributes_default());\ntable_options.insert = insertBySelector_default().bind(null, \"head\");\ntable_options.domAPI = (styleDomAPI_default());\ntable_options.insertStyleElement = (insertStyleElement_default());\n\nvar table_update = injectStylesIntoStyleTag_default()(table/* default */.A, table_options);\n\n\n\n\n /* harmony default export */ const table_table = (table/* default */.A && table/* default */.A.locals ? table/* default */.A.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/js/components/table/subcomponents/headers.js\nfunction addTableHeaders(header_array) {\n // Get the table element by its ID\n const table = document.getElementById('main-table');\n\n // Create a table header row element\n const headerRow = document.createElement('tr');\n for (const headerText of header_array) {\n // Create a header cell element\n const headerCell = document.createElement('th');\n headerCell.textContent = headerText;\n\n // Append the header cell to the header row\n headerRow.appendChild(headerCell);\n }\n\n // Append the header row to the table header\n let thead = table.querySelector('thead');\n thead.appendChild(headerRow);\n}\nconst Header = {\n add: function (header_array) {\n addTableHeaders(header_array);\n }\n};\n/* harmony default export */ const headers = (Header);\n;// CONCATENATED MODULE: ./src/js/components/table/subcomponents/rows.js\n\n\nfunction addNewRow(data_dictionary) {\n // Get the table element by its ID\n const table = document.getElementById('main-table');\n\n // check if header has already been added\n let header_row = table.querySelector('thead tr');\n if (!header_row) {\n headers.add(Object.keys(data_dictionary));\n }\n\n // add row of data\n const new_row = document.createElement('tr');\n const cell_data_array = Object.values(data_dictionary);\n for (const cell_data of cell_data_array) {\n // Create new cell and add it to the row\n const newCell = document.createElement('td');\n newCell.textContent = cell_data;\n new_row.appendChild(newCell);\n }\n console.log(new_row);\n\n // Append the new row to the table body\n let tbody = table.querySelector('tbody');\n tbody.appendChild(new_row);\n}\nfunction saveRowEdits(row) {\n var cells = row.querySelectorAll('td');\n cells.forEach(cell => {\n // save dropdown values\n if (cell.querySelector('select')) {\n var serviceSelector = cell.querySelector('select');\n cell.textContent = serviceSelector.value;\n } else if (cell.querySelector('input')) {\n // save new entered value in textbox\n var textbox = cell.querySelector('input');\n var enteredValue = textbox.value;\n // update display and format with currency if relevant\n if (cell.classList.contains('cost')) {\n // if cost, remove commas first\n enteredValue = enteredValue.replaceAll(',', '');\n cell.textContent = formatCurrency(enteredValue);\n } else {\n cell.textContent = enteredValue;\n }\n // set value attribute to the new user input\n cell.setAttribute('value', enteredValue);\n }\n });\n}\nconst Rows = {\n add: function (data_dictionary) {\n addNewRow(data_dictionary);\n },\n saveEdits: function (row) {\n saveRowEdits(row);\n }\n};\n/* harmony default export */ const rows = (Rows);\n;// CONCATENATED MODULE: ./src/js/components/table/subcomponents/buttons.js\n\nfunction hideButton(className) {\n return function () {\n var buttons = document.getElementsByClassName(className);\n for (var i = 0; i < buttons.length; i++) {\n buttons[i].style.display = 'none';\n }\n };\n}\nfunction showButton(className) {\n return function () {\n var buttons = document.getElementsByClassName(className);\n for (var i = 0; i < buttons.length; i++) {\n buttons[i].style.display = 'inline';\n }\n };\n}\nfunction updateButtonText(className, text) {\n document.querySelector(`.${className}`).textContent = text;\n}\n\n// EDIT button\n\nfunction handleRowEdit(makeRowEditable, updateCallback) {\n // attach an event listener to each edit button in every row\n var editButtons = document.getElementsByClassName('btn-edit');\n for (var i = 0; i < editButtons.length; i++) {\n editButtons[i].addEventListener('click', async function (event) {\n // Determine what was clicked on within the table\n var rowToEdit = event.target.closest('tr');\n // mark row as being edited\n rowToEdit.classList.add('active-editing');\n\n // turn relevant entries into textboxes\n makeRowEditable();\n\n // hide edit buttons\n Edit.hide();\n initializeConfirmButton(updateCallback);\n });\n }\n ;\n}\n\n// Confirm button\n\nfunction initializeConfirmButton(updateCallback) {\n // get element and add listener for click\n var rowToEdit = document.querySelector('.active-editing');\n const confirm_btn = rowToEdit.querySelector(\".btn-confirm\");\n // show the row's confirm button\n confirm_btn.style.display = 'block';\n confirm_btn.addEventListener('click', function () {\n ;\n // save row edits\n rows.saveEdits(rowToEdit);\n // update values in sidebar\n updateCallback();\n // make row no longer green\n rowToEdit.classList.remove('active-editing');\n // show edit buttons and hide confirm buttons\n Edit.show();\n Confirm.hide();\n });\n}\nconst Edit = {\n html: '',\n hide: hideButton('btn-edit'),\n show: showButton('btn-edit'),\n init: function (makeRowEditable, updateCallback) {\n handleRowEdit(makeRowEditable, updateCallback);\n }\n};\nconst Delete = {\n html: '',\n hide: hideButton('btn-delete'),\n show: showButton('btn-delete')\n};\nconst Confirm = {\n html: '',\n hide: hideButton('btn-confirm'),\n show: showButton('btn-confirm')\n};\nconst AddRow = {\n hide: hideButton('btn-add'),\n show: showButton('btn-add'),\n updateText: function (text) {\n updateButtonText('btn-add', text);\n }\n};\nconst buttons_Buttons = {\n Delete: Delete,\n Edit: Edit,\n Confirm: Confirm,\n AddRow: AddRow,\n edit_confirm_btns: Edit.html + Confirm.html,\n all_btns: Delete.html + Edit.html + Confirm.html\n};\n/* harmony default export */ const subcomponents_buttons = (buttons_Buttons);\n;// CONCATENATED MODULE: ./src/js/components/form/subcomponents/dropdown.js\nasync function createDropdownFromJSON(json_path) {\n // Fetch JSON data from a file asynchronously\n const response = await fetch(json_path);\n const dataArray = await response.json();\n\n // Creating a select element\n const selectElement = document.createElement('select');\n\n // Looping through the array and creating an option for each element\n dataArray.forEach(item => {\n const optionElement = document.createElement('option');\n optionElement.value = item.id; // Setting the option value to the item id\n optionElement.textContent = item.name; // Setting the display text to the item name\n selectElement.appendChild(optionElement); // Appending the option to the select\n });\n\n // Return the select element so it can be appended to the document\n return selectElement;\n}\nconst Dropdown = {\n createFromJSON: function (json_path) {\n return createDropdownFromJSON(json_path);\n }\n};\n/* harmony default export */ const dropdown = (Dropdown);\n;// CONCATENATED MODULE: ./src/js/components/table/subcomponents/cells.js\n\n\n\n// return cell value attribute or 0 if it does not exist\nfunction getCellValue(row, className) {\n var cell = row.querySelector(`.${className}`);\n var cellValue = cell ? cell.getAttribute('value') : null;\n return cellValue ? parseFloat(cellValue) : 0;\n}\n\n// return text in cell\nfunction getCellText(row, className) {\n var cell = row.querySelector(`.${className}`);\n return cell.textContent;\n}\nfunction updateTableCell(row, col_class, new_value) {\n const cell = row.querySelector(`.${col_class}`);\n cell.setAttribute('value', new_value);\n cell.textContent = formatCurrency(new_value);\n}\nfunction createEditableCell(cellClass) {\n // get cell\n const cell = document.querySelector(`.active-editing td.${cellClass}`);\n // Create an input element to edit the value\n var textbox = document.createElement('input');\n textbox.type = 'text';\n textbox.value = cell.textContent;\n // Clear the current content and append the textbox to the cell\n cell.innerHTML = '';\n cell.appendChild(textbox);\n}\nasync function createSelectCell(cellClass, json_filepath) {\n // get cell\n const cell = document.querySelector(`.active-editing td.${cellClass}`);\n // add service dropdown\n const serviceDropdown = await dropdown.createFromJSON(json_filepath);\n serviceDropdown.value = cell.textContent;\n // Clear the current content and append the textbox to the cell\n cell.innerHTML = '';\n cell.appendChild(serviceDropdown);\n}\nconst Cell = {\n getValue: function (row, className) {\n return getCellValue(row, className);\n },\n getText: function (row, className) {\n return getCellText(row, className);\n },\n updateValue: function (row, col_class, new_value) {\n updateTableCell(row, col_class, new_value);\n },\n createTextbox: function (className) {\n createEditableCell(className);\n },\n createDropdown: function (className, json_filepath) {\n createSelectCell(className, json_filepath);\n }\n};\n/* harmony default export */ const cells = (Cell);\n;// CONCATENATED MODULE: ./src/js/components/table/subcomponents/columns.js\n\n\n// position is index at which new column will be inserted\nfunction addCol(position, htmlContent = '', headerTitle = '') {\n // Get the table element by its ID\n let table = document.getElementById('main-table');\n\n // Validate position\n let maxPosition = table.rows[0].cells.length;\n if (position < 0 || position > maxPosition) {\n console.error(`Position ${position} is out of bounds.`);\n return;\n }\n\n // Insert the header if provided\n let thead = table.tHead;\n if (headerTitle && thead) {\n let th = document.createElement('th');\n th.innerHTML = headerTitle; // Use innerHTML to insert HTML content\n thead.rows[0].insertBefore(th, thead.rows[0].cells[position]);\n }\n\n // Insert new cells into each row of the table body\n let tbody = table.tBodies[0];\n if (tbody) {\n for (let i = 0; i < tbody.rows.length; i++) {\n let row = tbody.rows[i];\n let td = document.createElement('td');\n td.innerHTML = htmlContent; // Use innerHTML to insert HTML content\n row.insertBefore(td, row.cells[position]);\n }\n }\n}\nfunction ncols() {\n const table = document.getElementById('main-table');\n // Ensure that the row exists before counting the columns\n return table.rows[0].cells.length;\n}\nfunction addColToEnd(htmlContents = [], headerTitle = '') {\n // count columns and add new column to the end\n const position = ncols('main-table');\n addCol(position, htmlContents, headerTitle);\n}\nfunction assignClassToColumn(headerName, className) {\n // Get the table element by its ID\n let table = document.getElementById('main-table');\n\n // Find the index of the column by its header name\n const thead = table.tHead;\n if (!thead || thead.rows.length === 0) {\n console.error('The table header is not found or has no rows.');\n return;\n }\n let headerCellIndex = -1;\n const headerCells = thead.rows[0].cells; // Assuming the first row contains header cells ()\n for (let i = 0; i < headerCells.length; i++) {\n if (headerCells[i].textContent.trim() === headerName) {\n headerCellIndex = i;\n break;\n }\n }\n if (headerCellIndex === -1) {\n console.error(`No header found with name \"${headerName}\"`);\n return;\n }\n\n // Assign the class to each cell in the specified column index within the tbody\n let tbody = table.tBodies[0];\n if (tbody) {\n let bodyRows = tbody.rows;\n for (let row of bodyRows) {\n if (row.cells[headerCellIndex]) {\n row.cells[headerCellIndex].classList.add(className);\n }\n }\n }\n}\nfunction addCostClass(headerName) {\n assignClassToColumn(headerName, 'cost');\n\n // Get all the cells with the specified class name\n const cells = document.querySelectorAll(`.cost`);\n cells.forEach(cell => {\n // Get the current text content of the cell and assign it to 'value' attribute\n if (!cell.getAttribute('value')) {\n const cellValue = cell.textContent.trim();\n cell.setAttribute('value', cellValue);\n\n // Now format the text content like currency and replace it in the cell\n const formattedCurrency = formatCurrency(parseFloat(cellValue));\n cell.textContent = formattedCurrency;\n }\n });\n}\nfunction assignColumnClasses(columnDefinitions) {\n columnDefinitions.forEach(column => {\n // Assign class to column\n assignClassToColumn(column.title, column.className);\n\n // If the column is a cost column, add the specific cost class\n if (column.isCost) {\n addCostClass(column.title);\n }\n });\n}\nconst Column = {\n add: function (position, htmlContent, headerTitle) {\n return addCol(position, htmlContent, headerTitle);\n },\n addAtEnd: function (htmlContent, headerTitle) {\n return addColToEnd(htmlContent, headerTitle);\n },\n assignClasses: function (column_definitions) {\n return assignColumnClasses(column_definitions);\n }\n};\n/* harmony default export */ const columns = (Column);\n;// CONCATENATED MODULE: ./src/js/utils/data_utils/JSON_data_handlers.js\nasync function fetchJSON(jsonFilePath) {\n return fetch(jsonFilePath).then(response => {\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n return response.json();\n });\n}\n;// CONCATENATED MODULE: ./src/js/components/table/subcomponents/data.js\n\nasync function loadJSONIntoTable(jsonFilePath) {\n const data = await fetchJSON(jsonFilePath);\n try {\n if (Array.isArray(data)) {\n const table = document.getElementById('main-table');\n const thead = table.querySelector('thead');\n const tbody = table.querySelector('tbody');\n\n // clear existing data\n thead.innerHTML = '';\n tbody.innerHTML = '';\n\n // Create table header row\n const headerRow = document.createElement('tr');\n Object.keys(data[0]).forEach(key => {\n const header = document.createElement('th');\n header.textContent = key;\n headerRow.appendChild(header);\n });\n thead.appendChild(headerRow);\n\n // Create table body rows\n data.forEach(item => {\n const row = document.createElement('tr');\n Object.values(item).forEach(val => {\n const cell = document.createElement('td');\n cell.textContent = val;\n row.appendChild(cell);\n });\n tbody.appendChild(row);\n });\n } else {\n console.error('The provided JSON file does not contain an array of objects.');\n }\n } catch (error) {\n console.error('Failed to load and parse the JSON file:', error);\n }\n}\nconst Data = {\n loadFromJSON: loadJSONIntoTable\n};\n/* harmony default export */ const data = (Data);\n;// CONCATENATED MODULE: ./src/js/components/table/table.js\n\n\n\n\n\n\n\nfunction adjustTableWidth(width_pct) {\n const table = document.getElementById('main-table');\n table.style.width = width_pct;\n}\nfunction clearTable() {\n const table = document.getElementById('main-table');\n table.querySelector('thead').innerHTML = '';\n table.querySelector('tbody').innerHTML = '';\n}\nfunction showTable() {\n const table = document.getElementById('main-table');\n table.style.display = 'table';\n}\nfunction hideTable() {\n const table = document.getElementById('main-table');\n table.style.display = 'none';\n subcomponents_buttons.AddRow.hide();\n}\nconst Table = {\n Buttons: subcomponents_buttons,\n Cell: cells,\n Columns: columns,\n Header: headers,\n Rows: rows,\n Data: data,\n // functions\n adjustWidth: function (width_pct) {\n adjustTableWidth(width_pct);\n },\n clear: clearTable,\n hide: hideTable,\n show: showTable\n};\n/* harmony default export */ const components_table_table = (Table);\n;// CONCATENATED MODULE: ./src/js/components/body/body.js\n\n\n\n\n\n\n\nfunction resetPage() {\n // hide everything in the body\n components_welcome_welcome.hide();\n components_modal_modal.clear();\n components_modal_modal.hide();\n components_nav_buttons_nav_buttons.hide();\n js_components_prompt_prompt.hide();\n components_table_table.hide();\n components_sidebar_sidebar.hide();\n // disable next button\n components_nav_buttons_nav_buttons.Next.disable();\n js_components_prompt_prompt.Buttons.reset();\n}\nconst Body = {\n reset: resetPage\n};\n/* harmony default export */ const components_body_body = (Body);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/js/components/form/form.css\nvar form_form = __webpack_require__(109);\n;// CONCATENATED MODULE: ./src/js/components/form/form.css\n\n \n \n \n \n \n \n \n \n \n\nvar form_options = {};\n\nform_options.styleTagTransform = (styleTagTransform_default());\nform_options.setAttributes = (setAttributesWithoutAttributes_default());\nform_options.insert = insertBySelector_default().bind(null, \"head\");\nform_options.domAPI = (styleDomAPI_default());\nform_options.insertStyleElement = (insertStyleElement_default());\n\nvar form_update = injectStylesIntoStyleTag_default()(form_form/* default */.A, form_options);\n\n\n\n\n /* harmony default export */ const components_form_form = (form_form/* default */.A && form_form/* default */.A.locals ? form_form/* default */.A.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/js/components/form/subcomponents/fields.js\n// function to add questions to forms\n// type is 'input' or 'textarea'\n// inputType is for validation ('number' or 'text', etc)\nfunction appendFormElement(type, label, inputId, required, inputType, form_id = 'new-form', cost = false) {\n // change if we want forms elsewhere\n const form = document.getElementById(form_id);\n\n // create outer wrapper for element\n const wrapper = document.createElement('div');\n\n // label question\n const labelEl = document.createElement('label');\n labelEl.textContent = label;\n\n // set type (input or textarea)\n let inputEl;\n if (type === 'input') {\n inputEl = document.createElement('input');\n inputEl.type = inputType;\n } else if (type === 'textarea') {\n inputEl = document.createElement('textarea');\n } else {\n throw new Error('Unsupported element type');\n }\n\n // mark as required if applicable\n inputEl.required = required;\n\n // If an ID is provided, set it on the element\n if (inputId) {\n inputEl.id = inputId;\n }\n\n // add elements\n wrapper.appendChild(labelEl);\n wrapper.appendChild(inputEl);\n form.appendChild(wrapper);\n}\nconst NewField = {\n shortText: function (label, inputId, required = false, form_id = 'new-form', cost = false) {\n appendFormElement('input', label, inputId, required, 'text', form_id);\n },\n longText: function (label, inputId, required = false, form_id = 'new-form', cost = false) {\n appendFormElement('textarea', label, inputId, required, form_id);\n },\n numericInput: function (label, inputId, required = false, form_id = 'new-form', cost = true) {\n appendFormElement('input', label, inputId, required, 'number', form_id);\n }\n};\n/* harmony default export */ const fields = (NewField);\n;// CONCATENATED MODULE: ./src/js/components/form/subcomponents/submit.js\nfunction addSubmitButtonToForm(form_id) {\n // Find the form by its ID\n const form = document.getElementById(form_id);\n\n // Create the container `div` for the button\n const buttonContainer = document.createElement('div');\n buttonContainer.id = 'submit-btn-container';\n\n // Create the submit input\n const submitInput = document.createElement('input');\n submitInput.className = 'btn btn-submit'; // Use appropriate class for your design\n submitInput.type = 'submit';\n submitInput.value = 'Submit';\n\n // Append the submit input to the container\n buttonContainer.appendChild(submitInput);\n\n // Append the container to the form\n form.appendChild(buttonContainer);\n}\nconst SubmitButton = {\n add: function () {\n addSubmitButtonToForm('new-form');\n }\n};\n/* harmony default export */ const subcomponents_submit = (SubmitButton);\n;// CONCATENATED MODULE: ./src/js/components/form/form.js\n\n\n\n\nfunction fetchAllResponses(event) {\n // Assuming `event.target` is the form itself\n const form = event.target;\n\n // Initialize an empty array to hold the input values\n let formData = {};\n\n // Loop through each form element\n for (let i = 0; i < form.elements.length; i++) {\n const element = form.elements[i];\n\n // Exclude elements that aren't inputs, textareas, or select\n if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA' || element.tagName === 'SELECT') {\n // Exclude input types that are not considered for submission (such as `submit`)\n if (element.type !== 'submit' && element.type !== 'button') {\n formData[element.id] = element.value;\n }\n }\n }\n form.reset();\n return formData;\n}\nfunction addForm(element_id = 'modal-body', form_id = 'new-form') {\n const target_elem = document.getElementById(element_id);\n\n // create form\n const form = document.createElement('form');\n form.setAttribute('id', form_id);\n\n // Append the form to the modal body\n target_elem.appendChild(form);\n}\nconst Form = {\n new: function (parent_elem_id) {\n addForm(parent_elem_id, 'new-form');\n },\n fetchAllResponses: function (event) {\n return fetchAllResponses(event);\n },\n NewField: fields,\n Dropdown: dropdown,\n SubmitButton: subcomponents_submit\n};\n/* harmony default export */ const js_components_form_form = (Form);\n;// CONCATENATED MODULE: ./src/js/views/06_new_initiatives/helpers.js\n\n\n\n\n\n\n\n\nfunction initializePageView() {\n // Prepare page view\n components_body_body.reset();\n components_nav_buttons_nav_buttons.show();\n\n // Load text\n components_header_header.update('New Initiatives');\n js_components_prompt_prompt.Text.update('Do you have any new initiatives for FY26?');\n js_components_prompt_prompt.Buttons.Left.updateText('Yes');\n js_components_prompt_prompt.Buttons.Right.updateText('No');\n // clicking 'no new initialitives' will also take us to the next page\n js_components_prompt_prompt.Buttons.Right.addAction(pauseAndContinue);\n js_components_prompt_prompt.Buttons.Left.addAction(components_nav_buttons_nav_buttons.Next.enable);\n}\nfunction setUpModal() {\n // Initialize modal\n components_modal_modal.clear();\n components_modal_modal.Link.add('option1');\n components_modal_modal.Title.update('New initiative');\n components_modal_modal.Link.add('add-btn');\n}\nfunction setUpForm() {\n // Set up form\n js_components_form_form.new('modal-body');\n js_components_form_form.NewField.shortText('Initiative Name:', 'Initiative Name', true);\n js_components_form_form.NewField.longText('Explain why this initiative is necessary and describe its potential impact.', 'Explanation', true);\n js_components_form_form.NewField.numericInput('Estimate of ADDITONAL revenue associated with this initiative?', 'Revenue', true);\n js_components_form_form.NewField.numericInput('Estimate of ADDITONAL personnel cost?', 'Personnel Cost', true);\n js_components_form_form.NewField.numericInput('Estimate of ADDITONAL nonpersonnel cost?', 'Non-personnel Cost', true);\n js_components_form_form.SubmitButton.add();\n // Initialize form submission to table data\n handleFormSubmissions();\n}\nfunction setUpTable() {\n // Set up table\n components_table_table.clear();\n components_table_table.adjustWidth('70%');\n components_table_table.Buttons.AddRow.updateText('Add another new initiative');\n}\nfunction handleFormSubmissions(event) {\n // initialize form submission\n const modal = document.getElementById('main-modal');\n modal.addEventListener('submit', function (event) {\n event.preventDefault();\n // get answers from form, hide form, show answers in table\n const responses = js_components_form_form.fetchAllResponses(event);\n // make sure it's not an empty response\n if (Object.values(responses)[0] != '') {\n // change page view\n components_modal_modal.hide();\n js_components_prompt_prompt.hide();\n\n // add data to table\n components_table_table.Rows.add(responses);\n components_table_table.show();\n components_table_table.Buttons.AddRow.show();\n // TODO: save table data\n // TODO: edit cost to show currency correctly\n }\n });\n}\nfunction removeModalLinks() {\n components_modal_modal.Link.remove('option1');\n components_modal_modal.Link.remove('add-btn');\n}\nfunction removePromptButtonListeners() {\n js_components_prompt_prompt.Buttons.Right.removeAction(pauseAndContinue);\n js_components_prompt_prompt.Buttons.Left.removeAction(components_nav_buttons_nav_buttons.Next.enable);\n}\n;// CONCATENATED MODULE: ./src/js/views/06_new_initiatives/main.js\n\n\n\n// set up page and initialize all buttons\nfunction loadNewInitiatives() {\n updatePageState('new-inits');\n initializePageView();\n setUpModal();\n setUpForm();\n setUpTable();\n}\nfunction cleanUpInitiativesPage() {\n removeModalLinks();\n // remove event listeners on prompt buttons\n removePromptButtonListeners();\n}\n;// CONCATENATED MODULE: ./src/js/views/07_summary/main.js\n\n\n\n\n\n\nfunction loadSummaryPage() {\n //update page state\n updatePageState('summary');\n\n // prepare page view\n components_body_body.reset();\n js_components_prompt_prompt.Buttons.Left.updateText('Download Excel');\n js_components_prompt_prompt.Buttons.Right.updateText('Go back and edit');\n\n // update page text\n components_header_header.update('Summary');\n // TODO: update to make dynamic\n js_components_prompt_prompt.Text.update(`Placeholder for summary and any issues.`);\n js_components_prompt_prompt.Buttons.Right.addAction(returnToWelcome);\n}\nfunction cleanUpSummaryPage() {\n js_components_prompt_prompt.Buttons.Right.removeAction(returnToWelcome);\n}\nconst returnToWelcome = () => {\n visitPage('welcome');\n};\n;// CONCATENATED MODULE: ./src/js/views/02_baseline_landing_page/helpers.js\n\n\n\n\n\n\nconst fundCols = [{\n title: 'ID',\n className: 'fund-id'\n}, {\n title: 'Name',\n className: 'fund-name'\n}];\nfunction preparePageView() {\n localStorage.setItem(\"fund\", '');\n\n // prepare page view\n components_body_body.reset();\n components_nav_buttons_nav_buttons.show();\n\n // update page text\n components_header_header.update('Baseline Budget Request');\n // TODO: update to make dynamic\n js_components_prompt_prompt.Text.update(`We will now ask you a series of questions about your BASELINE budget request.\n At the end, we will ask you about any new initiatives (ie. supplemental requests).\n Select one of your funds to begin.`);\n}\nfunction allowRowSelection() {\n var tableRows = document.querySelectorAll(\"tbody tr\");\n tableRows.forEach(function (row) {\n row.addEventListener('mouseover', function () {\n this.classList.add('hover-effect');\n });\n row.addEventListener('mouseout', function () {\n this.classList.remove('hover-effect');\n });\n row.addEventListener('click', function () {\n selectFund(tableRows, this);\n });\n });\n}\nasync function initializeFundTable() {\n await components_table_table.Data.loadFromJSON(DATA_ROOT + 'funds.json');\n components_table_table.adjustWidth('100%');\n components_table_table.show();\n components_table_table.Columns.assignClasses(fundCols);\n allowRowSelection();\n}\nfunction selectFund(tableRows, selected_row) {\n // remove selected class from any other rows\n tableRows.forEach(function (tableRow) {\n tableRow.classList = '';\n });\n // add selected class to clicked row\n selected_row.classList.add('selected');\n // get fund and save selected fund\n var fund = selected_row.querySelector('.fund-name').textContent;\n localStorage.setItem(\"fund\", fund);\n\n // enable next step\n components_nav_buttons_nav_buttons.Next.enable();\n}\n;// CONCATENATED MODULE: ./src/js/views/02_baseline_landing_page/main.js\n\n\nfunction loadBaselineLandingPage() {\n //update page state\n updatePageState('baseline-landing');\n preparePageView();\n initializeFundTable();\n}\n;// CONCATENATED MODULE: ./src/js/views/01_upload/helpers.js\n\n\n\n\nfunction helpers_initializePageView() {\n // remove fund selection\n localStorage.setItem(\"fund\", '');\n\n // prepare page view\n components_body_body.reset();\n components_nav_buttons_nav_buttons.show();\n\n // update page text\n components_header_header.update('Excel Upload');\n\n // TODO: update to make upload actually work\n js_components_prompt_prompt.Text.update(`Placeholder for Excel Upload`);\n js_components_prompt_prompt.Buttons.Left.updateText('Upload');\n js_components_prompt_prompt.Buttons.Left.show();\n js_components_prompt_prompt.Buttons.Left.addAction(uploadExcelAction);\n}\nfunction uploadExcelAction() {\n components_nav_buttons_nav_buttons.Next.enable();\n}\n;// CONCATENATED MODULE: ./src/js/views/01_upload/main.js\n\n\nfunction loadUploadPage() {\n //update page state\n updatePageState('upload');\n helpers_initializePageView();\n}\n;// CONCATENATED MODULE: ./src/js/views/00_welcome/helpers.js\n\n\n\n\n\n\n\nfunction _00_welcome_helpers_initializePageView() {\n // page set up\n components_body_body.reset();\n components_header_header.update(\"Welcome\");\n components_welcome_welcome.show();\n}\nfunction addLinks() {\n // initialize links in buttons\n document.getElementById('step-upload').addEventListener('click', loadUploadPage);\n document.getElementById('step-initiatives').addEventListener('click', loadNewInitiatives);\n document.getElementById('step-revenue').addEventListener('click', loadBaselineLandingPage);\n document.getElementById('step-finish').addEventListener('click', loadSummaryPage);\n}\n;// CONCATENATED MODULE: ./src/js/views/00_welcome/main.js\n\n\nfunction initializeWelcomePage() {\n updatePageState('welcome');\n _00_welcome_helpers_initializePageView();\n addLinks();\n}\n;// CONCATENATED MODULE: ./src/js/views/03_revenue/main.js\n\n\n\n\n\n\n\n\nfunction loadRevenuePage() {\n //update page state\n updatePageState('revenue');\n\n // prepare page view\n components_body_body.reset();\n components_nav_buttons_nav_buttons.show();\n\n // update page text\n components_header_header.update('Revenue Projections');\n // TODO: update to make dynamic\n js_components_prompt_prompt.Text.update(`Your revenue projection for FY26 is ${formatCurrency(REVENUE, true)}`);\n js_components_prompt_prompt.Buttons.Left.updateText('Confirm');\n js_components_prompt_prompt.Buttons.Right.updateText(\"This doesn't look right\");\n\n // clicking 'confirm' will also take us to the next page\n js_components_prompt_prompt.Buttons.Left.addAction(pauseAndContinue);\n // TODO: allow user to edit revenue here\n js_components_prompt_prompt.Buttons.Right.addAction(handleRevenueEdit);\n}\nfunction handleRevenueEdit() {\n components_nav_buttons_nav_buttons.Next.enable();\n}\nfunction cleanupRevenuePage() {\n // remove event listeners on prompt buttons\n js_components_prompt_prompt.Buttons.Left.removeAction(pauseAndContinue);\n js_components_prompt_prompt.Buttons.Right.removeAction();\n}\n;\n;// CONCATENATED MODULE: ./src/js/views/04_personnel/helpers.js\n\n\n\n\n\n\n\n\n\nfunction helpers_preparePageView() {\n // prepare page view\n components_body_body.reset();\n components_nav_buttons_nav_buttons.show();\n components_sidebar_sidebar.show();\n components_table_table.adjustWidth('90%');\n // just enable next for now\n // TODO only enable when all info is entered\n components_nav_buttons_nav_buttons.Next.enable();\n\n // update page text\n components_header_header.update('Personnel');\n js_components_prompt_prompt.Text.update(`\n This table displays the number of FTEs in each job code for in your department's \n current (amended) FY25 budget. To make edits to the number of positions, click the\n \"Edit\" button on the row you would like to edit. The \"Total Cost\" column and the \n summary sidebar will also update to reflect any edits.\n `);\n}\nfunction assignClasses() {\n // record columns and their classes\n const personnelColumns = [{\n title: 'Job Name (Type)',\n className: 'job-name'\n }, {\n title: `FY${FISCAL_YEAR} FTEs`,\n className: 'baseline-ftes'\n }, {\n title: 'Service',\n className: 'service'\n }, {\n title: 'Total Cost',\n className: 'total-baseline',\n isCost: true\n }, {\n title: 'Average Projected Salary',\n className: 'avg-salary',\n isCost: true\n }];\n\n // assign cost classes\n components_table_table.Columns.assignClasses(personnelColumns);\n}\nfunction personnelRowOnEdit() {\n components_table_table.Cell.createTextbox('baseline-ftes');\n components_table_table.Cell.createDropdown('service', DATA_ROOT + 'services.json');\n}\nasync function initializePersonnelTable() {\n // load table data from json\n await components_table_table.Data.loadFromJSON(DATA_ROOT + 'personnel_data.json');\n //after table is loaded, fill it\n components_table_table.show();\n components_table_table.Columns.addAtEnd('0', 'Total Cost');\n components_table_table.Columns.addAtEnd(components_table_table.Buttons.edit_confirm_btns, ' ');\n ;\n assignClasses();\n // add up the baseline costs and update sidebar\n updateDisplayandTotals();\n // activate edit buttons\n components_table_table.Buttons.Edit.init(personnelRowOnEdit, updateDisplayandTotals);\n initializeRowAddition();\n}\nfunction initializeRowAddition() {\n components_table_table.Buttons.AddRow.updateText(\"Add new job\");\n components_table_table.Buttons.AddRow.show();\n}\nfunction calculateTotalCost(ftes, avg_salary, fringe, cola, merit) {\n return ftes * avg_salary * (1 + fringe) * (1 + cola) * (1 + merit);\n}\n\n// update sidebar and also cost totals when the FTEs are edited\nfunction updateDisplayandTotals() {\n // initialize\n components_sidebar_sidebar.updateStat('baseline-personnel', 0);\n components_sidebar_sidebar.updateStat('supp-personnel', 0);\n // calculate for each row\n let rows = document.getElementsByTagName('tr');\n for (let i = 1; i < rows.length; i++) {\n // fetch values for calculations\n let avg_salary = components_table_table.Cell.getValue(rows[i], 'avg-salary');\n let baseline_ftes = components_table_table.Cell.getText(rows[i], 'baseline-ftes');\n\n // calcuate #FTEs x average salary + COLA adjustments + merit adjustments + fringe\n let total_baseline_cost = calculateTotalCost(baseline_ftes, avg_salary, fringe, cola, merit);\n\n // update counter and total\n components_sidebar_sidebar.incrementStat('baseline-personnel', total_baseline_cost);\n components_table_table.Cell.updateValue(rows[i], 'total-baseline', total_baseline_cost);\n }\n}\nfunction helpers_setUpModal() {\n // Initialize modal\n components_modal_modal.clear();\n components_modal_modal.Link.add('add-btn');\n components_modal_modal.Title.update('New job');\n}\nfunction helpers_setUpForm() {\n // Set up form\n js_components_form_form.new('modal-body');\n js_components_form_form.NewField.shortText('Job Name:', 'job-name', true);\n js_components_form_form.NewField.shortText('Account String:', 'account-string', true);\n js_components_form_form.SubmitButton.add();\n // Initialize form submission to table data\n helpers_handleFormSubmissions();\n}\nfunction helpers_handleFormSubmissions(event) {\n // initialize form submission\n\n const modal = document.getElementById('main-modal');\n modal.addEventListener('submit', function (event) {\n event.preventDefault();\n // get answers from form, hide form, show answers in table\n const responses = js_components_form_form.fetchAllResponses(event);\n // make sure it's not an empty response\n if (Object.values(responses)[0] != '') {\n // change page view\n components_modal_modal.hide();\n\n // add data to table\n components_table_table.Rows.add(responses);\n components_table_table.show();\n components_table_table.Buttons.AddRow.show();\n // TODO: save table data\n // TODO: edit cost to show currency correctly\n }\n });\n}\n;// CONCATENATED MODULE: ./src/js/views/04_personnel/main.js\n\n\nfunction loadPersonnelPage() {\n updatePageState('personnel');\n helpers_preparePageView();\n initializePersonnelTable();\n helpers_setUpModal();\n helpers_setUpForm();\n}\n;// CONCATENATED MODULE: ./src/js/views/04.5_OT/main.js\n\n\n\n\n\n\nfunction loadOTPage() {\n //update page state\n updatePageState('overtime');\n\n // prepare page view\n components_body_body.reset();\n components_nav_buttons_nav_buttons.show();\n components_sidebar_sidebar.show();\n\n // just enable next for now\n // TODO: only enable when all info is entered\n components_nav_buttons_nav_buttons.Next.enable();\n\n // update page text\n components_header_header.update('Overtime Estimates');\n // TODO: update to make dynamic\n js_components_prompt_prompt.Text.update(`This is a placeholder for the OT estimates.`);\n}\n;// CONCATENATED MODULE: ./src/js/views/05_nonpersonnel/helpers.js\n\n\n\n\n\n\n\n\nconst nonPersonnelColumns = [{\n title: 'FY26 Request',\n className: 'request',\n isCost: true\n}, {\n title: 'Amount Remaining',\n className: 'remaining',\n isCost: true\n}];\nfunction _05_nonpersonnel_helpers_preparePageView() {\n // prepare page view\n components_body_body.reset();\n components_nav_buttons_nav_buttons.show();\n components_sidebar_sidebar.show();\n components_table_table.adjustWidth('100%');\n // update page text\n components_header_header.update('Non-Personnel');\n js_components_prompt_prompt.Text.update('Select an action item for each non-personnel line item from last year.');\n\n // just enable next for now\n // TODO: only enable when all info is entered\n components_nav_buttons_nav_buttons.Next.enable();\n}\nasync function initializeNonpersonnelTable() {\n // load table data from json\n await components_table_table.Data.loadFromJSON(DATA_ROOT + 'nonpersonnel_data.json', 'main-table');\n //after table is loaded, fill it\n components_table_table.show();\n components_table_table.Columns.addAtEnd(components_table_table.Buttons.edit_confirm_btns, \" \");\n // assign cost classes\n components_table_table.Columns.assignClasses(nonPersonnelColumns);\n // update sidebar\n helpers_updateDisplayandTotals();\n // enable editing\n components_table_table.Buttons.Edit.init(nonPersonnelRowOnEdit, helpers_updateDisplayandTotals);\n}\nfunction nonPersonnelRowOnEdit() {\n // convert request to numeric from formatted currency\n const request = document.querySelector('.active-editing > td.request');\n request.textContent = request.textContent.replace('$', '');\n // make it editable\n components_table_table.Cell.createTextbox('request');\n}\n\n// update sidebar and also cost totals when the FTEs are edited\nfunction helpers_updateDisplayandTotals() {\n // initialize\n components_sidebar_sidebar.updateStat('baseline-nonpersonnel', 0);\n // calculate for each row\n let rows = document.getElementsByTagName('tr');\n for (let i = 1; i < rows.length; i++) {\n // fetch values for calculations\n let request = components_table_table.Cell.getValue(rows[i], 'request');\n\n // update counters\n components_sidebar_sidebar.incrementStat('baseline-nonpersonnel', request);\n }\n}\n;// CONCATENATED MODULE: ./src/js/views/05_nonpersonnel/main.js\n\n\nfunction loadNonpersonnelPage() {\n updatePageState('nonpersonnel');\n _05_nonpersonnel_helpers_preparePageView();\n initializeNonpersonnelTable();\n}\n;// CONCATENATED MODULE: ./src/js/views/view_logic.js\n\n\n\n\n\n\n\n\n\n\n\nlet PAGES = {\n 'welcome': initializeWelcomePage,\n 'upload': loadUploadPage,\n 'baseline-landing': loadBaselineLandingPage,\n 'revenue': loadRevenuePage,\n 'personnel': loadPersonnelPage,\n 'overtime': loadOTPage,\n 'nonpersonnel': loadNonpersonnelPage,\n 'new-inits': loadNewInitiatives,\n 'summary': loadSummaryPage\n};\nlet CLEANUP = {\n 'new-inits': cleanUpInitiativesPage,\n 'revenue': cleanupRevenuePage,\n 'summary': cleanUpSummaryPage\n};\nfunction visitPage(new_page_key) {\n // clean up from current page\n var page_state = loadPageState();\n if (CLEANUP[page_state]) {\n CLEANUP[page_state]();\n }\n ;\n // Use the page_state to access and call the corresponding function from PAGES\n if (PAGES[new_page_key]) {\n PAGES[new_page_key](); // Invokes the function if it exists in the PAGES map\n } else {\n console.error(`No page initializer found for state: ${new_page_key}`);\n }\n PAGES[new_page_key]();\n}\nfunction nextPage() {\n var page_state = loadPageState();\n const keys = Object.keys(PAGES);\n\n // Find the index of the current key\n const currentIndex = keys.indexOf(page_state);\n\n // clean up current page\n if (CLEANUP[page_state]) {\n CLEANUP[page_state]();\n }\n ;\n\n // Check if there is a next key\n if (currentIndex >= 0 && currentIndex < keys.length - 1) {\n // Get the next key\n const nextKey = keys[currentIndex + 1];\n // go to that page\n visitPage(nextKey);\n }\n}\nfunction lastPage() {\n var page_state = loadPageState();\n const keys = Object.keys(PAGES);\n\n // Find the index of the current key\n const currentIndex = keys.indexOf(page_state);\n\n // clean up current page\n if (CLEANUP[page_state]) {\n CLEANUP[page_state]();\n }\n ;\n\n // Check if there is a next key\n if (currentIndex >= 1) {\n // Get the next key\n const lastKey = keys[currentIndex - 1];\n // go to that page\n visitPage(lastKey);\n }\n}\nasync function pauseAndContinue() {\n await pauseExecution(0.5);\n nextPage();\n}\n;// CONCATENATED MODULE: ./src/js/init.js\n// import styles\n\n\n// import functions\n\n\n\n// path for my laptop\n// export let DATA_ROOT = '../../../data/law_dept_sample/'\n// github path\nlet DATA_ROOT = '../../budget-request-demo/data/law_dept_sample/';\nlet REVENUE = 0;\nlet TARGET = 2000000;\nvar FISCAL_YEAR = '26';\n\n// variables on the salary \nvar fringe = 0.36;\nvar cola = 0.02;\nvar merit = 0.02;\ndocument.addEventListener('DOMContentLoaded', function () {\n var page_state = loadPageState();\n visitPage(page_state);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk2LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDeEJBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN4QkE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN4QkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDeEJBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3hCQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FDbEVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBOztBQ2xDQTtBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FDcEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN4QkE7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FDN0JBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUNqRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQzFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTs7QUN4QkE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FDL0RBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUNqSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTs7QUM5Q0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUMvQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOzs7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUNwREE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBOztBQ3pCQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUNqRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQ1JBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FDdEJBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBOztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTs7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOztBQ3hJQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZGQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9jc3MvY29tbW9uLmNzcz84ZmY2Iiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvdXRpbHMvZGF0YV91dGlscy9sb2NhbF9zdG9yYWdlX2hhbmRsZXJzLmpzP2ZlODEiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIuY3NzPzcyZDciLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIuanM/YTBhNSIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvd2VsY29tZS93ZWxjb21lLmNzcz9kZWUxIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy93ZWxjb21lL3dlbGNvbWUuanM/NTM1YSIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvYm9keS9ib2R5LmNzcz9kMWM3Iiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy9tb2RhbC9tb2RhbC5jc3M/NDBkYiIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvbW9kYWwvbW9kYWwuanM/NTUzMyIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvbmF2X2J1dHRvbnMvbmF2X2J1dHRvbnMuY3NzPzcwN2YiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL25hdl9idXR0b25zL25hdl9idXR0b25zLmpzP2FiZDEiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL3Byb21wdC9wcm9tcHQuY3NzPzMyOGIiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL3Byb21wdC9zdWJjb21wb25lbnRzL3RleHQuanM/ZjZkZiIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvcHJvbXB0L3N1YmNvbXBvbmVudHMvYnV0dG9ucy5qcz84ZDNiIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy9wcm9tcHQvcHJvbXB0LmpzP2E3NzEiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL3NpZGViYXIvc2lkZWJhci5jc3M/M2JjNyIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL3V0aWxzL2NvbW1vbl91dGlscy5qcz80NGYyIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy9zaWRlYmFyL3NpZGViYXIuanM/ODBmMCIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY3NzPzc4NGMiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL3RhYmxlL3N1YmNvbXBvbmVudHMvaGVhZGVycy5qcz8xNjIzIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy90YWJsZS9zdWJjb21wb25lbnRzL3Jvd3MuanM/ZmI3OSIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvdGFibGUvc3ViY29tcG9uZW50cy9idXR0b25zLmpzP2M5OTIiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL2Zvcm0vc3ViY29tcG9uZW50cy9kcm9wZG93bi5qcz9iYTZiIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy90YWJsZS9zdWJjb21wb25lbnRzL2NlbGxzLmpzPzczY2IiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL3RhYmxlL3N1YmNvbXBvbmVudHMvY29sdW1ucy5qcz82NzRhIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvdXRpbHMvZGF0YV91dGlscy9KU09OX2RhdGFfaGFuZGxlcnMuanM/NzY3YSIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvdGFibGUvc3ViY29tcG9uZW50cy9kYXRhLmpzP2Q5YjYiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmpzPzMwNzEiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL2JvZHkvYm9keS5qcz9mOWJhIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy9mb3JtL2Zvcm0uY3NzPzU0MTUiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL2Zvcm0vc3ViY29tcG9uZW50cy9maWVsZHMuanM/NDU5ZiIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvZm9ybS9zdWJjb21wb25lbnRzL3N1Ym1pdC5qcz9jNTk2Iiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy9mb3JtL2Zvcm0uanM/ZDk0MiIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL3ZpZXdzLzA2X25ld19pbml0aWF0aXZlcy9oZWxwZXJzLmpzPzYxNTIiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy92aWV3cy8wNl9uZXdfaW5pdGlhdGl2ZXMvbWFpbi5qcz9kY2NkIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvdmlld3MvMDdfc3VtbWFyeS9tYWluLmpzPzAwNTkiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy92aWV3cy8wMl9iYXNlbGluZV9sYW5kaW5nX3BhZ2UvaGVscGVycy5qcz85NWI2Iiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvdmlld3MvMDJfYmFzZWxpbmVfbGFuZGluZ19wYWdlL21haW4uanM/ZDQ1OCIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL3ZpZXdzLzAxX3VwbG9hZC9oZWxwZXJzLmpzPzVmYmUiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy92aWV3cy8wMV91cGxvYWQvbWFpbi5qcz8yYThmIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvdmlld3MvMDBfd2VsY29tZS9oZWxwZXJzLmpzP2U3OWMiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy92aWV3cy8wMF93ZWxjb21lL21haW4uanM/YmVhNiIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL3ZpZXdzLzAzX3JldmVudWUvbWFpbi5qcz8wNjQ3Iiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvdmlld3MvMDRfcGVyc29ubmVsL2hlbHBlcnMuanM/ODc3YyIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL3ZpZXdzLzA0X3BlcnNvbm5lbC9tYWluLmpzPzUxMjYiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy92aWV3cy8wNC41X09UL21haW4uanM/NjU3OSIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL3ZpZXdzLzA1X25vbnBlcnNvbm5lbC9oZWxwZXJzLmpzP2Y4ODAiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy92aWV3cy8wNV9ub25wZXJzb25uZWwvbWFpbi5qcz9hZmNjIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvdmlld3Mvdmlld19sb2dpYy5qcz80NmM2Iiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvaW5pdC5qcz8xYjJhIl0sInNvdXJjZXNDb250ZW50IjpbIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9jb21tb24uY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5vcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vY29tbW9uLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIi8qKlxuICogU2F2ZXMgZW1wbG95ZWUgdGFibGUgZGF0YSBhbmQgYnVkZ2V0IGNvdW50ZXJzIGluIGxvY2FsIHN0b3JhZ2UuXG4gKi9cbmZ1bmN0aW9uIHNhdmVUYWJsZURhdGEodGFibGVfaWQgPSBcImVtcGxveWVlLXRhYmxlXCIsIHNhdmVfYXMgPSAnZW1wbG95ZWVUYWJsZURhdGEnKSB7XG4gICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVfaWQpO1xuICAgIHZhciByb3dzID0gdGFibGUucm93cztcbiAgICB2YXIgdGFibGVEYXRhID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNvbHMgPSByb3dzW2ldLmNlbGxzO1xuICAgICAgICB2YXIgcm93RGF0YSA9IFtdO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIC8vIGZvciB0aGUgYWN0aW9uIGJ1dHRvbnMsIHNhdmUgdGhlIGNob3NlbiBhY3Rpb24sIG5vdCB0aGUgYnV0dG9uIHRleHRcbiAgICAgICAgICAgIGlmIChjb2xzW2pdLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpKSB7XG4gICAgICAgICAgICAgICAgcm93RGF0YS5wdXNoKHJvd3NbaV0uY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcm93RGF0YS5wdXNoKGNvbHNbal0uaW5uZXJUZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0YWJsZURhdGEucHVzaChyb3dEYXRhKTtcbiAgICB9XG5cbiAgICAvLyBTYXZlIEpTT04gc3RyaW5nIHRvIGxvY2FsU3RvcmFnZVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHNhdmVfYXMsIEpTT04uc3RyaW5naWZ5KHRhYmxlRGF0YSkpO1xuICAgIHNhdmVDb3VudGVycygpO1xufVxuXG4vKipcbiAqIExvYWRzIGVtcGxveWVlIHRhYmxlIGRhdGEgYW5kIGJ1ZGdldCBjb3VudGVycyBmcm9tIGxvY2FsIHN0b3JhZ2UuXG4gKiBcbiAqL1xuZnVuY3Rpb24gbG9hZFRhYmxlRGF0YSh0YWJsZV9uYW1lX2luX3N0b3JhZ2UgPSBcImVtcGxveWVlVGFibGVEYXRhXCIpIHtcbiAgICAgICAgdmFyIGRhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0YWJsZV9uYW1lX2luX3N0b3JhZ2UpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdmFyIHRhYmxlRGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICB2YXIgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImVtcGxveWVlLXRhYmxlXCIpO1xuICAgIFxuICAgICAgICAgICAgLy8gSXQncyBnb29kIHByYWN0aWNlIHRvIGVtcHR5IHRoZSBleGlzdGluZyB0YWJsZSBmaXJzdFxuICAgICAgICAgICAgd2hpbGUgKHRhYmxlLnJvd3MubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHRhYmxlLmRlbGV0ZVJvdygxKTtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIC8vIE5vdywgYWRkIHRoZSBsb2FkZWQgcm93cyB0byB0aGUgdGFibGVcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGFibGVEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5ld1JvdyA9IHRhYmxlLmluc2VydFJvdygtMSk7XG4gICAgICAgICAgICAgICAgdmFyIG5jb2xzID0gdGFibGVEYXRhW2ldLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5jb2xzLTE7IGorKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3Q2VsbCA9IG5ld1Jvdy5pbnNlcnRDZWxsKGopO1xuICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLmlubmVyVGV4dCA9IHRhYmxlRGF0YVtpXVtqXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBjb3N0IGNvbHVtbiAgXG4gICAgICAgICAgICAgICAgICAgIGlmIChqID09IG5jb2xzLTIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2VsbC5jbGFzc0xpc3QuYWRkKCdjb3N0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLnNldEF0dHJpYnV0ZSgnY29zdCcsIHVuZm9ybWF0Q3VycmVuY3kodGFibGVEYXRhW2ldW2pdKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBhY3Rpb24gYnV0dG9ucyBhbmQgbG9hZCBzYXZlZCBjbGFzc1xuICAgICAgICAgICAgICAgIHZhciBsYXN0Q2VsbCA9IG5ld1Jvdy5pbnNlcnRDZWxsKG5jb2xzLTEpO1xuICAgICAgICAgICAgICAgIGxhc3RDZWxsLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ0bnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGVsZXRlXCI+REVMRVRFPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXN1cHBsZW1lbnRhbFwiPlNVUFBMRU1FTlRBTDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1jYXJyeW92ZXJcIj5LRUVQIElOIEZZMjY8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgICAgIG5ld1Jvdy5jbGFzc0xpc3QuYWRkKHRhYmxlRGF0YVtpXVtuY29scy0xXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vcmV0cmlldmUgY291bnRlciB2YWx1ZXNcbiAgICAgICAgICAgIGxvYWRDb3VudGVycygpO1xuICAgICAgICB9XG59XG5cbi8vIGFsc28gc2F2ZSBjb3VudGVycyBpbiBzaWRlYmFyXG5mdW5jdGlvbiBzYXZlQ291bnRlcnMoKXtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncGVyc29ubmVsX2Jhc2VsaW5lJywgcGVyc29ubmVsX2Jhc2VsaW5lLnRvU3RyaW5nKCkpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdwZXJzb25uZWxfc3VwcCcsIHBlcnNvbm5lbF9zdXBwLnRvU3RyaW5nKCkpO1xuICAgIC8vIEFkZCBtb3JlIGhlcmVcbn0gICAgXG4gICAgXG4vLyBsb2FkIGNvdW50ZXJzIGluIHNpZGViYXJcbmZ1bmN0aW9uIGxvYWRDb3VudGVycygpe1xuICAgIHBlcnNvbm5lbF9iYXNlbGluZSA9IHBhcnNlSW50KGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdwZXJzb25uZWxfYmFzZWxpbmUnKSwgMTApO1xuICAgIHBlcnNvbm5lbF9zdXBwID0gcGFyc2VJbnQobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3BlcnNvbm5lbF9zdXBwJyksIDEwKTtcbiAgICB1cGRhdGVEaXNwbGF5KCk7XG59XG5cbi8vIHNhdmUgcGFnZSBzdGF0ZVxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVBhZ2VTdGF0ZShwYWdlKXtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncGFnZV9zdGF0ZScsIHBhZ2UpO1xufVxuXG4vLyBsb2FkIHBhZ2Ugc3RhdGVcbmV4cG9ydCBmdW5jdGlvbiBsb2FkUGFnZVN0YXRlKHBhZ2Upe1xuICAgIGNvbnN0IHBhZ2VTdGF0ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdwYWdlX3N0YXRlJyk7XG4gICAgcmV0dXJuIHBhZ2VTdGF0ZSAhPT0gbnVsbCA/IHBhZ2VTdGF0ZSA6ICd3ZWxjb21lJztcbn0iLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vaGVhZGVyLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xub3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2hlYWRlci5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgJy4vaGVhZGVyLmNzcyc7XG5cbmV4cG9ydCBjb25zdCBTdWJ0aXRsZSA9IHtcbiAgICB1cGRhdGUgOiBmdW5jdGlvbihzdWJ0aXRsZSl7XG4gICAgICAgIC8vIGdldCBjdXJyZW50IGZ1bmRcbiAgICAgICAgdmFyIGZ1bmQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImZ1bmRcIik7XG4gICAgICAgIGlmIChmdW5kKXtcbiAgICAgICAgICAgIHZhciBzdWJ0aXRsZSA9IGAke3N1YnRpdGxlfTogJHtmdW5kfWA7XG4gICAgICAgIH1cbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdWJ0aXRsZVwiKS50ZXh0Q29udGVudCA9IHN1YnRpdGxlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3VidGl0bGU7IiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3dlbGNvbWUuY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5vcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vd2VsY29tZS5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgJy4vd2VsY29tZS5jc3MnO1xuXG4vLyBIaWRlIGFuZCB1bmhpZGUgd2VsY29tZSBidXR0b25zXG5mdW5jdGlvbiB1bmhpZGVXZWxjb21lQnV0dG9ucygpe1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwid2VsY29tZS1wYWdlXCIpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG59XG5mdW5jdGlvbiBoaWRlV2VsY29tZUJ1dHRvbnMoKXtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIndlbGNvbWUtcGFnZVwiKS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG59XG5cbmV4cG9ydCBjb25zdCBXZWxjb21lID0ge1xuICAgIHNob3c6IHVuaGlkZVdlbGNvbWVCdXR0b25zLFxuICAgIGhpZGUgOiBoaWRlV2VsY29tZUJ1dHRvbnNcbn1cblxuZXhwb3J0IGRlZmF1bHQgV2VsY29tZTsiLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vYm9keS5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcbm9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9ib2R5LmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9tb2RhbC5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcbm9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9tb2RhbC5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgJy4vbW9kYWwuY3NzJztcblxuZnVuY3Rpb24gY2xlYXJNb2RhbCgpe1xuICAgIHVwZGF0ZU1vZGFsVGl0bGUoJycpO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbC1ib2R5JykuaW5uZXJIVE1MID0gJyc7XG4gICAgLy9yZW1vdmVBbGxNb2RhbExpbmtzKClcbn1cblxuLy8gZnVuY3Rpb24gcmVtb3ZlQWxsTW9kYWxMaW5rcygpe1xuLy8gICAgIFRPRE9cbi8vIH1cblxuZnVuY3Rpb24gaGlkZU1vZGFsKG1vZGFsX2lkKSB7XG4gICAgJCgnIycgKyBtb2RhbF9pZCkubW9kYWwoJ2hpZGUnKTtcbn1cblxuZnVuY3Rpb24gc2hvd01vZGFsKG1vZGFsX2lkKSB7XG4gICAgJCgnIycgKyBtb2RhbF9pZCkubW9kYWwoJ3Nob3cnKTtcbn1cblxuZnVuY3Rpb24gc2hvd01vZGFsSGFuZGxlcigpIHtcbiAgICBzaG93TW9kYWwoJ21haW4tbW9kYWwnKTtcbn1cblxuY29uc3QgTGluayA9IHtcbiAgICBhZGQgOiBmdW5jdGlvbihidXR0b25faWQpe1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChidXR0b25faWQpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2hvd01vZGFsSGFuZGxlcilcbiAgICB9LFxuICAgIHJlbW92ZSA6IGZ1bmN0aW9uKGJ1dHRvbl9pZCl7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGJ1dHRvbl9pZCkucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzaG93TW9kYWxIYW5kbGVyKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlTW9kYWxUaXRsZSh0aXRsZSkge1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbC10aXRsZScpLnRleHRDb250ZW50ID0gdGl0bGU7XG59XG5cbmNvbnN0IFRpdGxlID0ge1xuICAgIHVwZGF0ZSA6IGZ1bmN0aW9uKHRpdGxlKSB7IHVwZGF0ZU1vZGFsVGl0bGUodGl0bGUpIH1cbn1cblxuZXhwb3J0IGNvbnN0IE1vZGFsID0ge1xuICAgIGhpZGUgOiBmdW5jdGlvbigpIHsgaGlkZU1vZGFsKCdtYWluLW1vZGFsJykgfSxcbiAgICBzaG93IDogZnVuY3Rpb24oKSB7IHNob3dNb2RhbCgnbWFpbi1tb2RhbCcpIH0sXG4gICAgY2xlYXIgOiBjbGVhck1vZGFsLFxuICAgIFRpdGxlIDogVGl0bGUsXG4gICAgTGluayA6IExpbmtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWw7IiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL25hdl9idXR0b25zLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xub3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL25hdl9idXR0b25zLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsImltcG9ydCAnLi9uYXZfYnV0dG9ucy5jc3MnO1xuXG5pbXBvcnQgeyBuZXh0UGFnZSwgbGFzdFBhZ2UgfSBmcm9tICcuLi8uLi92aWV3cy92aWV3X2xvZ2ljLmpzJ1xuXG5mdW5jdGlvbiBpbml0aWFsaXplTmF2QnV0dG9ucygpe1xuICAgIC8vIGluaXRpYWxpemUgbGFzdCBidXR0b25cbiAgICBjb25zdCBsYXN0X2J0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tbGFzdCcpO1xuICAgIGxhc3RfYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgbGFzdFBhZ2UpOyBcbiAgICAvLyBpbml0aWFsaXplIG5leHQgYnV0dG9uXG4gICAgY29uc3QgbmV4dF9idG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLW5leHQnKTtcbiAgICBuZXh0X2J0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG5leHRQYWdlKTsgXG4gICAgZGlzYWJsZSgnYnRuLW5leHQnKTtcbn1cblxuZnVuY3Rpb24gaGlkZU5hdkJ1dHRvbnMoKSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25hdi1idG5zJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbn1cblxuZnVuY3Rpb24gc2hvd05hdkJ1dHRvbnMoKSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25hdi1idG5zJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgaW5pdGlhbGl6ZU5hdkJ1dHRvbnMoKTtcbn1cblxuZnVuY3Rpb24gZGlzYWJsZShidXR0b25faWQpIHtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChidXR0b25faWQpLmNsYXNzTGlzdC5hZGQoJ2Rpc2FibGVkJyk7XG59XG5cbmZ1bmN0aW9uIGVuYWJsZShidXR0b25faWQpIHtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChidXR0b25faWQpLmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2FibGVkJyk7XG59XG5cbmNvbnN0IE5leHQgPSB7XG4gICAgZGlzYWJsZSA6IGZ1bmN0aW9uKCkgeyBkaXNhYmxlKCdidG4tbmV4dCcpIH0sXG4gICAgZW5hYmxlIDogZnVuY3Rpb24oKSB7IGVuYWJsZSgnYnRuLW5leHQnKSB9XG59XG5cbmNvbnN0IExhc3QgPSB7XG4gICAgZGlzYWJsZSA6IGZ1bmN0aW9uKCkgeyBkaXNhYmxlKCdidG4tbGFzdCcpIH0sXG4gICAgZW5hYmxlIDogZnVuY3Rpb24oKSB7IGVuYWJsZSgnYnRuLWxhc3QnKSB9XG59XG5cbmV4cG9ydCBjb25zdCBOYXZCdXR0b25zID0ge1xuICAgIGhpZGUgOiBoaWRlTmF2QnV0dG9ucyxcbiAgICBzaG93IDogc2hvd05hdkJ1dHRvbnMsXG4gICAgTmV4dCA6IE5leHQsXG4gICAgTGFzdCA6IExhc3Rcbn1cblxuZXhwb3J0IGRlZmF1bHQgTmF2QnV0dG9uczsiLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vcHJvbXB0LmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xub3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3Byb21wdC5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJmdW5jdGlvbiBzaG93UHJvbXB0KCl7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwcm9tcHQtZGl2XCIpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG59XG5cbmZ1bmN0aW9uIGhpZGVQcm9tcHQoKXtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJvbXB0LWRpdicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG59XG5cblxuZnVuY3Rpb24gdXBkYXRlUHJvbXB0KHByb21wdCl7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb21wdCcpLnRleHRDb250ZW50ID0gcHJvbXB0O1xuICAgIHNob3dQcm9tcHQoKTtcbn1cblxuZXhwb3J0IGNvbnN0IFRleHQgPSB7XG4gICAgc2hvdyA6IHNob3dQcm9tcHQsXG4gICAgaGlkZSA6IGhpZGVQcm9tcHQsXG4gICAgdXBkYXRlIDogZnVuY3Rpb24odGV4dCkgeyB1cGRhdGVQcm9tcHQodGV4dCkgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZXh0OyIsImZ1bmN0aW9uIHNob3dQcm9tcHRCdXR0b24oaWQpe1xuICAgIC8vIG1ha2UgYnV0dG9ucyB2aXNpYmxlXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJztcbn1cblxuZnVuY3Rpb24gdXBkYXRlUHJvbXB0QnV0dG9uKGlkLCB0ZXh0KXtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgIHNob3dQcm9tcHRCdXR0b24oaWQpO1xufVxuXG5mdW5jdGlvbiBoaWRlUHJvbXB0QnV0dG9uKGlkKXtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbn1cblxuZnVuY3Rpb24gdW5jbGlja0FsbCgpe1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcHRpb24xJykuY2xhc3NMaXN0LnJlbW92ZSgnY2xpY2tlZCcpO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcHRpb24yJykuY2xhc3NMaXN0LnJlbW92ZSgnY2xpY2tlZCcpO1xufVxuXG5mdW5jdGlvbiBhcHBseUNsaWNrZWRTdHlsZShidXR0b24pe1xuICAgIHVuY2xpY2tBbGwoKTtcbiAgICBidXR0b24uY2xhc3NMaXN0LmFkZCgnY2xpY2tlZCcpO1xufVxuXG5mdW5jdGlvbiBhZGRQcm9tcHRCdXR0b25BY3Rpb24oYnV0dG9uX2lkLCBhY3Rpb25fZm4pe1xuICAgIGNvbnN0IGJ1dHRvbkVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChidXR0b25faWQpO1xuICAgIGJ1dHRvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhY3Rpb25fZm4pO1xuICAgIGJ1dHRvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpe1xuICAgICAgICBhcHBseUNsaWNrZWRTdHlsZSh0aGlzKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlUHJvbXB0QnV0dG9uQWN0aW9uKGJ1dHRvbl9pZCwgYWN0aW9uX2ZuKXtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChidXR0b25faWQpLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYWN0aW9uX2ZuKTtcbn1cblxuZXhwb3J0IGNvbnN0IExlZnQgPSB7XG4gICAgc2hvdyA6IGZ1bmN0aW9uKCkgeyBzaG93UHJvbXB0QnV0dG9uKCdvcHRpb24xJykgfSxcbiAgICBoaWRlIDogZnVuY3Rpb24oKSB7IGhpZGVQcm9tcHRCdXR0b24oJ29wdGlvbjEnKSB9LFxuICAgIHVwZGF0ZVRleHQgOiBmdW5jdGlvbih0ZXh0KSB7IHVwZGF0ZVByb21wdEJ1dHRvbignb3B0aW9uMScsIHRleHQpIH0sXG4gICAgYWRkQWN0aW9uIDogZnVuY3Rpb24oYWN0aW9uX2ZuKSB7IGFkZFByb21wdEJ1dHRvbkFjdGlvbignb3B0aW9uMScsIGFjdGlvbl9mbikgfSxcbiAgICByZW1vdmVBY3Rpb24gOiBmdW5jdGlvbihhY3Rpb25fZm4pIHsgcmVtb3ZlUHJvbXB0QnV0dG9uQWN0aW9uKCdvcHRpb24xJywgYWN0aW9uX2ZuKSB9XG59XG5cbmV4cG9ydCBjb25zdCBSaWdodCA9IHtcbiAgICBzaG93IDogZnVuY3Rpb24oKSB7IHNob3dQcm9tcHRCdXR0b24oJ29wdGlvbjInKSB9LFxuICAgIGhpZGUgOiBmdW5jdGlvbigpIHsgaGlkZVByb21wdEJ1dHRvbignb3B0aW9uMicpIH0sXG4gICAgdXBkYXRlVGV4dCA6IGZ1bmN0aW9uKHRleHQpIHsgdXBkYXRlUHJvbXB0QnV0dG9uKCdvcHRpb24yJywgdGV4dCkgfSxcbiAgICBhZGRBY3Rpb24gOiBmdW5jdGlvbihhY3Rpb25fZm4pIHsgYWRkUHJvbXB0QnV0dG9uQWN0aW9uKCdvcHRpb24yJywgYWN0aW9uX2ZuKSB9LFxuICAgIHJlbW92ZUFjdGlvbiA6IGZ1bmN0aW9uKGFjdGlvbl9mbikgeyByZW1vdmVQcm9tcHRCdXR0b25BY3Rpb24oJ29wdGlvbjInLCBhY3Rpb25fZm4pIH1cbn1cblxuZXhwb3J0IGNvbnN0IEJ1dHRvbnMgPSB7XG4gICAgTGVmdCA6IExlZnQsXG4gICAgUmlnaHQgOiBSaWdodCxcbiAgICBzaG93IDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHNob3dQcm9tcHRCdXR0b24oJ29wdGlvbjEnKTtcbiAgICAgICAgc2hvd1Byb21wdEJ1dHRvbignb3B0aW9uMicpO1xuICAgIH0sXG4gICAgaGlkZSA6IGZ1bmN0aW9uKCkge1xuICAgICAgICBoaWRlUHJvbXB0QnV0dG9uKCdvcHRpb24xJyk7XG4gICAgICAgIGhpZGVQcm9tcHRCdXR0b24oJ29wdGlvbjInKTtcbiAgICB9LFxuICAgIHJlc2V0IDogdW5jbGlja0FsbFxufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b25zOyIsImltcG9ydCAnLi9wcm9tcHQuY3NzJztcblxuaW1wb3J0IFRleHQgZnJvbSBcIi4vc3ViY29tcG9uZW50cy90ZXh0LmpzXCI7XG5pbXBvcnQgQnV0dG9ucyBmcm9tIFwiLi9zdWJjb21wb25lbnRzL2J1dHRvbnMuanNcIjtcblxuZXhwb3J0IGNvbnN0IFByb21wdCA9IHtcbiAgICBUZXh0IDogVGV4dCxcbiAgICBCdXR0b25zIDogQnV0dG9ucyxcbiAgICBoaWRlIDogZnVuY3Rpb24oKXtcbiAgICAgICAgVGV4dC5oaWRlKCk7XG4gICAgICAgIEJ1dHRvbnMuaGlkZSgpO1xuICAgIH0sXG4gICAgc2hvdyA6IGZ1bmN0aW9uKCl7XG4gICAgICAgIFRleHQuc2hvdygpO1xuICAgICAgICBCdXR0b25zLnNob3coKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFByb21wdCIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zaWRlYmFyLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xub3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NpZGViYXIuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiLy8gRnVuY3Rpb24gdG8gZm9ybWF0IG51bWJlciBhcyBjdXJyZW5jeVxuZXhwb3J0IGNvbnN0IGZvcm1hdEN1cnJlbmN5ID0gKGFtb3VudCwgcmV0dXJuX3plcm8gPSBmYWxzZSkgPT4ge1xuICAgIHZhciBhbW91bnQgPSBNYXRoLnJvdW5kKHBhcnNlRmxvYXQoYW1vdW50KSk7XG4gICAgaWYgKGFtb3VudCA9PSBOYU4pe1xuICAgICAgICByZXR1cm4gXCIkIC1cIlxuICAgIH1cbiAgICBpZiAoYW1vdW50IDwgMCl7XG4gICAgICAgIHJldHVybiAnKCQnICsgYW1vdW50LnRvU3RyaW5nKCkucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJywnKSArICcpJztcbiAgICB9IGVsc2UgaWYgKGFtb3VudCA9PSAwKSB7XG4gICAgICAgIGlmIChyZXR1cm5femVybyl7XG4gICAgICAgICAgICByZXR1cm4gJyQwJzsgICAgXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiJCAtXCJcbiAgICB9XG4gICAgcmV0dXJuICckJyArIGFtb3VudC50b1N0cmluZygpLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csICcsJyk7XG59IDtcblxuLy8gZnVuY3Rpb24gdG8gY29udmVydCBmb3JtYXR0ZWQgbnVtYmVyIHRvIGEgZmxvYXRcbmV4cG9ydCBjb25zdCB1bmZvcm1hdEN1cnJlbmN5ID0gKGZvcm1hdHRlZEFtb3VudCkgPT4ge1xuICAgIC8vIFJlbW92ZSBhbnkgY3VycmVuY3kgc3ltYm9scyBhbmQgY29tbWFzXG4gICAgbGV0IG51bWVyaWNhbFBhcnQgPSBmb3JtYXR0ZWRBbW91bnQucmVwbGFjZSgvW14wLTkuLV0rL2csIFwiXCIpO1xuICAgIHJldHVybiBwYXJzZUZsb2F0KG51bWVyaWNhbFBhcnQpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BsYXlXaXRoQ29tbWFzKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZvcm1hdEN1cnJlbmN5KHZhbHVlKS5yZXBsYWNlKCckJywgJycpO1xufVxuXG5mdW5jdGlvbiBkZWxheShtcykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhdXNlRXhlY3V0aW9uKHNlY29uZHMpIHtcbiAgICBhd2FpdCBkZWxheShzZWNvbmRzICogMTAwMCk7IC8vIGNvbnZlcnQgdG8gbWlsbGlzZWNvbmRzXG59IiwiaW1wb3J0ICcuL3NpZGViYXIuY3NzJztcblxuaW1wb3J0IHsgZm9ybWF0Q3VycmVuY3kgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY29tbW9uX3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBUQVJHRVQgfSBmcm9tIFwiLi4vLi4vaW5pdC5qc1wiO1xuXG4vLyBBc3N1bWluZyB5b3UgaGF2ZSBhIENTUyB2YXJpYWJsZSAtLW1haW4tY29sb3IgZGVmaW5lZCBvbiB0aGUgOnJvb3RcbmNvbnN0IHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5jb25zdCBzaWRlQmFyV2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHJvb3QpLmdldFByb3BlcnR5VmFsdWUoJy0tc2lkZWJhci13aWR0aCcpLnRyaW0oKTtcblxuZnVuY3Rpb24gaGlkZVNpZGViYXIoKSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NpZGViYXItcGFuZWwnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluLXBhbmVsJykuc3R5bGUud2lkdGggPSAnMTAwJSc7IFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWRlcicpLnN0eWxlLndpZHRoID0gJzEwMCUnXG59XG5cbmZ1bmN0aW9uIHNob3dTaWRlYmFyKCkge1xuICAgIGNvbnN0IHNpZGViYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2lkZWJhci1wYW5lbCcpO1xuICAgIGNvbnN0IG1haW5QYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluLXBhbmVsJyk7XG4gICAgY29uc3QgaGVhZGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZGVyJyk7XG5cbiAgICBzaWRlYmFyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOyAvLyBTaG93IHRoZSBzaWRlYmFyXG4gICAgXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSByZW1haW5pbmcgd2lkdGggZm9yIHRoZSBtYWluIHBhbmVsIGFuZCBoZWFkZXJcbiAgICB2YXIgY29udGVudFdpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgIG1haW5QYW5lbC5zdHlsZS53aWR0aCA9IGAke2NvbnRlbnRXaWR0aCAtIHBhcnNlSW50KHNpZGVCYXJXaWR0aCwgMTApfXB4YDsgXG4gICAgaGVhZGVyLnN0eWxlLndpZHRoID0gYCR7Y29udGVudFdpZHRoIC0gcGFyc2VJbnQoc2lkZUJhcldpZHRoLCAxMCl9cHhgOyBcblxuICAgIC8vIGFkZCB0YXJnZXQgdG8gc2lkZWJhclxuICAgIGFkZFRhcmdldChUQVJHRVQpO1xuXG4gICAgLy8gYWRkIGV2ZW50IGxpc3RlbmVyIHRvIHJlc2l6ZSBjb250ZW50IGlmIHdpbmRvdyBpcyBhZGp1c3RlZFxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBzaG93U2lkZWJhcik7XG59XG5cblxuZnVuY3Rpb24gdXBkYXRlU2lkZWJhclRpdGxlKG5ld190aXRsZSl7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NpZGViYXItdGl0bGUnKS50ZXh0Q29udGVudCA9IG5ld190aXRsZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU2lkZWJhclN0YXQoc3RhdF9pZCwgbmV3X2ZpZ3VyZSl7XG4gICAgcmVwbGFjZVNpZGViYXJTdGF0KHN0YXRfaWQsIG5ld19maWd1cmUpO1xuICAgIC8vIFRPRE86IHNhdmUgaW4gbWVtb3J5XG4gICAgdXBkYXRlVG90YWxzKCk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VTaWRlYmFyU3RhdChzdGF0X2lkLCBuZXdfZmlndXJlKXtcbiAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7c3RhdF9pZH0gLnN0YXRgKTtcbiAgICBzcGFuLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBuZXdfZmlndXJlKTtcbiAgICBzcGFuLnRleHRDb250ZW50ID0gZm9ybWF0Q3VycmVuY3kobmV3X2ZpZ3VyZSk7XG59XG5cbmZ1bmN0aW9uIGluY3JlbWVudFNpZGViYXJTdGF0KHN0YXRfaWQsIG5ld19maWd1cmUpe1xuICAgIHVwZGF0ZVNpZGViYXJTdGF0KHN0YXRfaWQsIGZldGNoU3RhdChzdGF0X2lkKSArIG5ld19maWd1cmUpXG59XG5cbmZ1bmN0aW9uIGZldGNoU3RhdChzdGF0X2lkKXtcbiAgICBjb25zdCBzdGF0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7c3RhdF9pZH0gLnN0YXRgKTtcbiAgICByZXR1cm4gcGFyc2VGbG9hdChzdGF0LmdldEF0dHJpYnV0ZSgndmFsdWUnKSkgfHwgMDtcbn1cblxuLy8gRnVuY3Rpb24gdG8gdXBkYXRlIHRoZSBkaXNwbGF5IG9mIHRoZSBjdXJyZW50IGFuZCBzdXBwIHZhcmlhYmxlc1xuZnVuY3Rpb24gdXBkYXRlVG90YWxzKCkge1xuICAgIC8vIHVwZGF0ZSBib3R0b20gbGluZXNcbiAgICBsZXQgc3VwcF90b3RhbCA9ICAgIC1mZXRjaFN0YXQoJ3N1cHAtcmV2ZW51ZScpICsgXG4gICAgICAgICAgICAgICAgICAgICAgICBmZXRjaFN0YXQoJ3N1cHAtcGVyc29ubmVsJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hTdGF0KCdzdXBwLW5vbnBlcnNvbm5lbCcpO1xuICAgIGxldCBiYXNlbGluZV90b3RhbCA9IC1mZXRjaFN0YXQoJ2Jhc2VsaW5lLXJldmVudWUnKSArIFxuICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hTdGF0KCdiYXNlbGluZS1wZXJzb25uZWwnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBmZXRjaFN0YXQoJ2Jhc2VsaW5lLW5vbnBlcnNvbm5lbCcpO1xuICAgIHJlcGxhY2VTaWRlYmFyU3RhdCgnc3VwcC10b3RhbCcsIHN1cHBfdG90YWwpO1xuICAgIHJlcGxhY2VTaWRlYmFyU3RhdCgnYmFzZWxpbmUtdG90YWwnLCBiYXNlbGluZV90b3RhbCk7XG5cbiAgICAvLyBjb2xvciBjb2RlIGJhc2VkIG9uIHRhcmdldFxuICAgIHZhciB0YXJnZXQgPSBmZXRjaFN0YXQoJ3RhcmdldCcpO1xuICAgIGlmKGJhc2VsaW5lX3RvdGFsIDw9IHRhcmdldCl7XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNiYXNlbGluZS10b3RhbCAuc3RhdCcpLnN0eWxlLmNvbG9yID0gXCJncmVlblwiO1xuICAgIH1cbiAgICBpZihiYXNlbGluZV90b3RhbCA+IHRhcmdldCl7XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNiYXNlbGluZS10b3RhbCAuc3RhdCcpLnN0eWxlLmNvbG9yID0gXCJyZWRcIjtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFkZFRhcmdldCh0YXJnZXQpe1xuICAgIHJlcGxhY2VTaWRlYmFyU3RhdCgndGFyZ2V0JywgdGFyZ2V0KTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVGl0bGUodGl0bGUpe1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzaWRlYmFyLXRpdGxlJykudGV4dENvbnRlbnQgPSB0aXRsZTtcbn1cblxuY29uc3QgU2lkZWJhciA9IHtcbiAgICBoaWRlOiBoaWRlU2lkZWJhcixcbiAgICBzaG93OiBzaG93U2lkZWJhcixcbiAgICB1cGRhdGVUaXRsZTogdXBkYXRlU2lkZWJhclRpdGxlLFxuICAgIHVwZGF0ZVN0YXQ6IHVwZGF0ZVNpZGViYXJTdGF0LFxuICAgIGluY3JlbWVudFN0YXQ6IGluY3JlbWVudFNpZGViYXJTdGF0LFxuICAgIGFkZFRhcmdldDogYWRkVGFyZ2V0LFxuICAgIHVwZGF0ZVRpdGxlOiB1cGRhdGVUaXRsZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgU2lkZWJhcjsiLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vdGFibGUuY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5vcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vdGFibGUuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiZnVuY3Rpb24gYWRkVGFibGVIZWFkZXJzKGhlYWRlcl9hcnJheSl7XG5cbiAgICAvLyBHZXQgdGhlIHRhYmxlIGVsZW1lbnQgYnkgaXRzIElEXG4gICAgY29uc3QgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi10YWJsZScpO1xuICAgIFxuICAgIC8vIENyZWF0ZSBhIHRhYmxlIGhlYWRlciByb3cgZWxlbWVudFxuICAgIGNvbnN0IGhlYWRlclJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XG4gICAgXG4gICAgZm9yIChjb25zdCBoZWFkZXJUZXh0IG9mIGhlYWRlcl9hcnJheSkge1xuXG4gICAgICAgIC8vIENyZWF0ZSBhIGhlYWRlciBjZWxsIGVsZW1lbnRcbiAgICAgICAgY29uc3QgaGVhZGVyQ2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJyk7XG4gICAgICAgIGhlYWRlckNlbGwudGV4dENvbnRlbnQgPSBoZWFkZXJUZXh0O1xuICAgICAgICBcbiAgICAgICAgLy8gQXBwZW5kIHRoZSBoZWFkZXIgY2VsbCB0byB0aGUgaGVhZGVyIHJvd1xuICAgICAgICBoZWFkZXJSb3cuYXBwZW5kQ2hpbGQoaGVhZGVyQ2VsbCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEFwcGVuZCB0aGUgaGVhZGVyIHJvdyB0byB0aGUgdGFibGUgaGVhZGVyXG4gICAgbGV0IHRoZWFkID0gdGFibGUucXVlcnlTZWxlY3RvcigndGhlYWQnKTtcbiAgICB0aGVhZC5hcHBlbmRDaGlsZChoZWFkZXJSb3cpO1xufVxuXG5jb25zdCBIZWFkZXIgPSB7XG4gICAgYWRkOiBmdW5jdGlvbihoZWFkZXJfYXJyYXkpe1xuICAgICAgICBhZGRUYWJsZUhlYWRlcnMoaGVhZGVyX2FycmF5KVxuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRlcjsiLCJpbXBvcnQgSGVhZGVyIGZyb20gXCIuL2hlYWRlcnMuanNcIjtcbmltcG9ydCB7IGZvcm1hdEN1cnJlbmN5IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2NvbW1vbl91dGlscy5qc1wiO1xuXG5mdW5jdGlvbiBhZGROZXdSb3coZGF0YV9kaWN0aW9uYXJ5KXtcbiAgICAvLyBHZXQgdGhlIHRhYmxlIGVsZW1lbnQgYnkgaXRzIElEXG4gICAgY29uc3QgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi10YWJsZScpO1xuXG4gICAgLy8gY2hlY2sgaWYgaGVhZGVyIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWRcbiAgICBsZXQgaGVhZGVyX3JvdyA9IHRhYmxlLnF1ZXJ5U2VsZWN0b3IoJ3RoZWFkIHRyJyk7XG4gICAgaWYgKCFoZWFkZXJfcm93KSB7XG4gICAgICAgIEhlYWRlci5hZGQoT2JqZWN0LmtleXMoZGF0YV9kaWN0aW9uYXJ5KSk7XG4gICAgfVxuXG4gICAgLy8gYWRkIHJvdyBvZiBkYXRhXG4gICAgY29uc3QgbmV3X3JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XG4gICAgY29uc3QgY2VsbF9kYXRhX2FycmF5ID0gT2JqZWN0LnZhbHVlcyhkYXRhX2RpY3Rpb25hcnkpO1xuXG4gICAgZm9yIChjb25zdCBjZWxsX2RhdGEgb2YgY2VsbF9kYXRhX2FycmF5KSB7XG4gICAgICAgIC8vIENyZWF0ZSBuZXcgY2VsbCBhbmQgYWRkIGl0IHRvIHRoZSByb3dcbiAgICAgICAgY29uc3QgbmV3Q2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7XG4gICAgICAgIG5ld0NlbGwudGV4dENvbnRlbnQgPSBjZWxsX2RhdGE7XG4gICAgICAgIG5ld19yb3cuYXBwZW5kQ2hpbGQobmV3Q2VsbCk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2cobmV3X3Jvdyk7XG5cbiAgICAvLyBBcHBlbmQgdGhlIG5ldyByb3cgdG8gdGhlIHRhYmxlIGJvZHlcbiAgICBsZXQgdGJvZHkgPSB0YWJsZS5xdWVyeVNlbGVjdG9yKCd0Ym9keScpO1xuICAgIHRib2R5LmFwcGVuZENoaWxkKG5ld19yb3cpO1xufVxuXG5mdW5jdGlvbiBzYXZlUm93RWRpdHMocm93KXtcbiAgICB2YXIgY2VsbHMgPSByb3cucXVlcnlTZWxlY3RvckFsbCgndGQnKVxuICAgIGNlbGxzLmZvckVhY2goIGNlbGwgPT4ge1xuICAgICAgICAvLyBzYXZlIGRyb3Bkb3duIHZhbHVlc1xuICAgICAgICBpZiAoY2VsbC5xdWVyeVNlbGVjdG9yKCdzZWxlY3QnKSl7XG4gICAgICAgICAgICB2YXIgc2VydmljZVNlbGVjdG9yID0gY2VsbC5xdWVyeVNlbGVjdG9yKCdzZWxlY3QnKTtcbiAgICAgICAgICAgIGNlbGwudGV4dENvbnRlbnQgPSBzZXJ2aWNlU2VsZWN0b3IudmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoY2VsbC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpKSB7XG4gICAgICAgICAgICAvLyBzYXZlIG5ldyBlbnRlcmVkIHZhbHVlIGluIHRleHRib3hcbiAgICAgICAgICAgIHZhciB0ZXh0Ym94ID0gY2VsbC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgICAgICAgICAgdmFyIGVudGVyZWRWYWx1ZSA9IHRleHRib3gudmFsdWU7XG4gICAgICAgICAgICAvLyB1cGRhdGUgZGlzcGxheSBhbmQgZm9ybWF0IHdpdGggY3VycmVuY3kgaWYgcmVsZXZhbnRcbiAgICAgICAgICAgIGlmICggY2VsbC5jbGFzc0xpc3QuY29udGFpbnMoJ2Nvc3QnKSApe1xuICAgICAgICAgICAgICAgIC8vIGlmIGNvc3QsIHJlbW92ZSBjb21tYXMgZmlyc3RcbiAgICAgICAgICAgICAgICBlbnRlcmVkVmFsdWUgPSBlbnRlcmVkVmFsdWUucmVwbGFjZUFsbCgnLCcsICcnKTtcbiAgICAgICAgICAgICAgICBjZWxsLnRleHRDb250ZW50ID0gZm9ybWF0Q3VycmVuY3koZW50ZXJlZFZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2VsbC50ZXh0Q29udGVudCA9IGVudGVyZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNldCB2YWx1ZSBhdHRyaWJ1dGUgdG8gdGhlIG5ldyB1c2VyIGlucHV0XG4gICAgICAgICAgICBjZWxsLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBlbnRlcmVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgfSlcbn1cblxuY29uc3QgUm93cyA9IHtcbiAgICBhZGQgOiBmdW5jdGlvbihkYXRhX2RpY3Rpb25hcnkpe1xuICAgICAgICBhZGROZXdSb3coZGF0YV9kaWN0aW9uYXJ5KVxuICAgIH0sXG4gICAgc2F2ZUVkaXRzIDogZnVuY3Rpb24ocm93KXtcbiAgICAgICAgc2F2ZVJvd0VkaXRzKHJvdylcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvd3M7IiwiaW1wb3J0IFJvd3MgZnJvbSAnLi9yb3dzLmpzJ1xuXG5mdW5jdGlvbiBoaWRlQnV0dG9uKGNsYXNzTmFtZSl7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYnV0dG9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidXR0b25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBidXR0b25zW2ldLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNob3dCdXR0b24oY2xhc3NOYW1lKXtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBidXR0b25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1dHRvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGJ1dHRvbnNbaV0uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVCdXR0b25UZXh0KGNsYXNzTmFtZSwgdGV4dCl7XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7Y2xhc3NOYW1lfWApLnRleHRDb250ZW50ID0gdGV4dDtcbn1cblxuLy8gRURJVCBidXR0b25cblxuZnVuY3Rpb24gaGFuZGxlUm93RWRpdChtYWtlUm93RWRpdGFibGUsIHVwZGF0ZUNhbGxiYWNrKXtcbiAgICAvLyBhdHRhY2ggYW4gZXZlbnQgbGlzdGVuZXIgdG8gZWFjaCBlZGl0IGJ1dHRvbiBpbiBldmVyeSByb3dcbiAgICB2YXIgZWRpdEJ1dHRvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdidG4tZWRpdCcpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWRpdEJ1dHRvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZWRpdEJ1dHRvbnNbaV0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHdoYXQgd2FzIGNsaWNrZWQgb24gd2l0aGluIHRoZSB0YWJsZVxuICAgICAgICAgICAgdmFyIHJvd1RvRWRpdCA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KCd0cicpO1xuICAgICAgICAgICAgLy8gbWFyayByb3cgYXMgYmVpbmcgZWRpdGVkXG4gICAgICAgICAgICByb3dUb0VkaXQuY2xhc3NMaXN0LmFkZCgnYWN0aXZlLWVkaXRpbmcnKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gdHVybiByZWxldmFudCBlbnRyaWVzIGludG8gdGV4dGJveGVzXG4gICAgICAgICAgICBtYWtlUm93RWRpdGFibGUoKTtcblxuICAgICAgICAgICAgLy8gaGlkZSBlZGl0IGJ1dHRvbnNcbiAgICAgICAgICAgIEVkaXQuaGlkZSgpO1xuICAgICAgICAgICAgaW5pdGlhbGl6ZUNvbmZpcm1CdXR0b24odXBkYXRlQ2FsbGJhY2spO1xuICAgIFxuICAgICAgICB9KTtcbiAgICB9O1xufVxuXG4vLyBDb25maXJtIGJ1dHRvblxuXG5mdW5jdGlvbiBpbml0aWFsaXplQ29uZmlybUJ1dHRvbih1cGRhdGVDYWxsYmFjayl7XG4gICAgLy8gZ2V0IGVsZW1lbnQgYW5kIGFkZCBsaXN0ZW5lciBmb3IgY2xpY2tcbiAgICB2YXIgcm93VG9FZGl0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFjdGl2ZS1lZGl0aW5nJyk7XG4gICAgY29uc3QgY29uZmlybV9idG4gPSByb3dUb0VkaXQucXVlcnlTZWxlY3RvcihcIi5idG4tY29uZmlybVwiKTtcbiAgICAvLyBzaG93IHRoZSByb3cncyBjb25maXJtIGJ1dHRvblxuICAgIGNvbmZpcm1fYnRuLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIGNvbmZpcm1fYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXs7XG4gICAgICAgIC8vIHNhdmUgcm93IGVkaXRzXG4gICAgICAgIFJvd3Muc2F2ZUVkaXRzKHJvd1RvRWRpdCk7XG4gICAgICAgIC8vIHVwZGF0ZSB2YWx1ZXMgaW4gc2lkZWJhclxuICAgICAgICB1cGRhdGVDYWxsYmFjaygpO1xuICAgICAgICAvLyBtYWtlIHJvdyBubyBsb25nZXIgZ3JlZW5cbiAgICAgICAgcm93VG9FZGl0LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZS1lZGl0aW5nJyk7XG4gICAgICAgIC8vIHNob3cgZWRpdCBidXR0b25zIGFuZCBoaWRlIGNvbmZpcm0gYnV0dG9uc1xuICAgICAgICBFZGl0LnNob3coKTtcbiAgICAgICAgQ29uZmlybS5oaWRlKCk7XG4gICAgfSk7XG59XG5cbmNvbnN0IEVkaXQgPSB7XG4gICAgaHRtbDogJzxidXR0b24gY2xhc3M9XCJidG4gYnRuLWVkaXRcIj5FZGl0PC9idXR0b24+JyxcbiAgICBoaWRlOiBoaWRlQnV0dG9uKCdidG4tZWRpdCcpLFxuICAgIHNob3c6IHNob3dCdXR0b24oJ2J0bi1lZGl0JyksXG4gICAgaW5pdCA6IGZ1bmN0aW9uKG1ha2VSb3dFZGl0YWJsZSwgdXBkYXRlQ2FsbGJhY2spe1xuICAgICAgICBoYW5kbGVSb3dFZGl0KG1ha2VSb3dFZGl0YWJsZSwgdXBkYXRlQ2FsbGJhY2spXG4gICAgfVxufTtcblxuY29uc3QgRGVsZXRlID0ge1xuICAgIGh0bWw6ICc8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kZWxldGVcIj5EZWxldGU8L2J1dHRvbj4nLFxuICAgIGhpZGU6IGhpZGVCdXR0b24oJ2J0bi1kZWxldGUnKSxcbiAgICBzaG93OiBzaG93QnV0dG9uKCdidG4tZGVsZXRlJylcbn07XG5cbmNvbnN0IENvbmZpcm0gPSB7XG4gICAgaHRtbDogJzxidXR0b24gY2xhc3M9XCJidG4gYnRuLWNvbmZpcm1cIj5Db25maXJtPC9idXR0b24+JyxcbiAgICBoaWRlOiBoaWRlQnV0dG9uKCdidG4tY29uZmlybScpLFxuICAgIHNob3c6IHNob3dCdXR0b24oJ2J0bi1jb25maXJtJylcbn07XG5cbmNvbnN0IEFkZFJvdyA9IHtcbiAgICBoaWRlOiBoaWRlQnV0dG9uKCdidG4tYWRkJyksXG4gICAgc2hvdzogc2hvd0J1dHRvbignYnRuLWFkZCcpLFxuICAgIHVwZGF0ZVRleHQ6IGZ1bmN0aW9uKHRleHQpe1xuICAgICAgICB1cGRhdGVCdXR0b25UZXh0KCdidG4tYWRkJywgdGV4dCk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IEJ1dHRvbnMgPSB7XG4gICAgRGVsZXRlOiBEZWxldGUsXG4gICAgRWRpdCA6IEVkaXQsXG4gICAgQ29uZmlybSA6IENvbmZpcm0sXG4gICAgQWRkUm93IDogQWRkUm93LFxuICAgIGVkaXRfY29uZmlybV9idG5zIDogRWRpdC5odG1sICsgQ29uZmlybS5odG1sICxcbiAgICBhbGxfYnRucyA6IERlbGV0ZS5odG1sICsgRWRpdC5odG1sICsgQ29uZmlybS5odG1sXG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbnM7IiwiYXN5bmMgZnVuY3Rpb24gY3JlYXRlRHJvcGRvd25Gcm9tSlNPTihqc29uX3BhdGgpIHtcbiAgICAvLyBGZXRjaCBKU09OIGRhdGEgZnJvbSBhIGZpbGUgYXN5bmNocm9ub3VzbHlcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGpzb25fcGF0aCk7XG4gICAgY29uc3QgZGF0YUFycmF5ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICBcbiAgICAvLyBDcmVhdGluZyBhIHNlbGVjdCBlbGVtZW50XG4gICAgY29uc3Qgc2VsZWN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpO1xuICBcbiAgICAvLyBMb29waW5nIHRocm91Z2ggdGhlIGFycmF5IGFuZCBjcmVhdGluZyBhbiBvcHRpb24gZm9yIGVhY2ggZWxlbWVudFxuICAgIGRhdGFBcnJheS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgY29uc3Qgb3B0aW9uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuICAgICAgb3B0aW9uRWxlbWVudC52YWx1ZSA9IGl0ZW0uaWQ7IC8vIFNldHRpbmcgdGhlIG9wdGlvbiB2YWx1ZSB0byB0aGUgaXRlbSBpZFxuICAgICAgb3B0aW9uRWxlbWVudC50ZXh0Q29udGVudCA9IGl0ZW0ubmFtZTsgLy8gU2V0dGluZyB0aGUgZGlzcGxheSB0ZXh0IHRvIHRoZSBpdGVtIG5hbWVcbiAgICAgIHNlbGVjdEVsZW1lbnQuYXBwZW5kQ2hpbGQob3B0aW9uRWxlbWVudCk7IC8vIEFwcGVuZGluZyB0aGUgb3B0aW9uIHRvIHRoZSBzZWxlY3RcbiAgICB9KTtcbiAgXG4gICAgLy8gUmV0dXJuIHRoZSBzZWxlY3QgZWxlbWVudCBzbyBpdCBjYW4gYmUgYXBwZW5kZWQgdG8gdGhlIGRvY3VtZW50XG4gICAgcmV0dXJuIHNlbGVjdEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBEcm9wZG93biA9IHtcbiAgICBjcmVhdGVGcm9tSlNPTiA6IGZ1bmN0aW9uKGpzb25fcGF0aCl7IHJldHVybiBjcmVhdGVEcm9wZG93bkZyb21KU09OKGpzb25fcGF0aCkgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEcm9wZG93bjsiLCJpbXBvcnQgeyBmb3JtYXRDdXJyZW5jeSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9jb21tb25fdXRpbHMuanNcIjtcbmltcG9ydCBEcm9wZG93biBmcm9tIFwiLi4vLi4vZm9ybS9zdWJjb21wb25lbnRzL2Ryb3Bkb3duLmpzXCI7XG5cbi8vIHJldHVybiBjZWxsIHZhbHVlIGF0dHJpYnV0ZSBvciAwIGlmIGl0IGRvZXMgbm90IGV4aXN0XG5mdW5jdGlvbiBnZXRDZWxsVmFsdWUocm93LCBjbGFzc05hbWUpIHtcbiAgICB2YXIgY2VsbCA9IHJvdy5xdWVyeVNlbGVjdG9yKGAuJHtjbGFzc05hbWV9YCk7XG4gICAgdmFyIGNlbGxWYWx1ZSA9IGNlbGwgPyBjZWxsLmdldEF0dHJpYnV0ZSgndmFsdWUnKSA6IG51bGw7XG4gICAgcmV0dXJuIGNlbGxWYWx1ZSA/IHBhcnNlRmxvYXQoY2VsbFZhbHVlKSA6IDA7XG59XG5cbi8vIHJldHVybiB0ZXh0IGluIGNlbGxcbmZ1bmN0aW9uIGdldENlbGxUZXh0KHJvdywgY2xhc3NOYW1lKSB7XG4gICAgdmFyIGNlbGwgPSByb3cucXVlcnlTZWxlY3RvcihgLiR7Y2xhc3NOYW1lfWApO1xuICAgIHJldHVybiBjZWxsLnRleHRDb250ZW50O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUYWJsZUNlbGwocm93LCBjb2xfY2xhc3MsIG5ld192YWx1ZSl7XG4gICAgY29uc3QgY2VsbCA9IHJvdy5xdWVyeVNlbGVjdG9yKGAuJHtjb2xfY2xhc3N9YCk7XG4gICAgY2VsbC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgbmV3X3ZhbHVlKTtcbiAgICBjZWxsLnRleHRDb250ZW50ID0gZm9ybWF0Q3VycmVuY3kobmV3X3ZhbHVlKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRWRpdGFibGVDZWxsKGNlbGxDbGFzcyl7XG4gICAgLy8gZ2V0IGNlbGxcbiAgICBjb25zdCBjZWxsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLmFjdGl2ZS1lZGl0aW5nIHRkLiR7Y2VsbENsYXNzfWApO1xuICAgIC8vIENyZWF0ZSBhbiBpbnB1dCBlbGVtZW50IHRvIGVkaXQgdGhlIHZhbHVlXG4gICAgdmFyIHRleHRib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgIHRleHRib3gudHlwZSA9ICd0ZXh0JztcbiAgICB0ZXh0Ym94LnZhbHVlID0gY2VsbC50ZXh0Q29udGVudDtcbiAgICAvLyBDbGVhciB0aGUgY3VycmVudCBjb250ZW50IGFuZCBhcHBlbmQgdGhlIHRleHRib3ggdG8gdGhlIGNlbGxcbiAgICBjZWxsLmlubmVySFRNTCA9ICcnO1xuICAgIGNlbGwuYXBwZW5kQ2hpbGQodGV4dGJveCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVNlbGVjdENlbGwoY2VsbENsYXNzLCBqc29uX2ZpbGVwYXRoKXtcbiAgICAvLyBnZXQgY2VsbFxuICAgIGNvbnN0IGNlbGwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuYWN0aXZlLWVkaXRpbmcgdGQuJHtjZWxsQ2xhc3N9YCk7XG4gICAgLy8gYWRkIHNlcnZpY2UgZHJvcGRvd25cbiAgICBjb25zdCBzZXJ2aWNlRHJvcGRvd24gPSBhd2FpdCBEcm9wZG93bi5jcmVhdGVGcm9tSlNPTihqc29uX2ZpbGVwYXRoKTtcbiAgICBzZXJ2aWNlRHJvcGRvd24udmFsdWUgPSBjZWxsLnRleHRDb250ZW50O1xuICAgIC8vIENsZWFyIHRoZSBjdXJyZW50IGNvbnRlbnQgYW5kIGFwcGVuZCB0aGUgdGV4dGJveCB0byB0aGUgY2VsbFxuICAgIGNlbGwuaW5uZXJIVE1MID0gJyc7XG4gICAgY2VsbC5hcHBlbmRDaGlsZChzZXJ2aWNlRHJvcGRvd24pO1xufVxuXG5jb25zdCBDZWxsID0ge1xuICAgIGdldFZhbHVlOiBmdW5jdGlvbihyb3csIGNsYXNzTmFtZSkge1xuICAgICAgICByZXR1cm4gZ2V0Q2VsbFZhbHVlKHJvdywgY2xhc3NOYW1lKTsgXG4gICAgfSxcbiAgICBnZXRUZXh0OiBmdW5jdGlvbihyb3csIGNsYXNzTmFtZSkge1xuICAgICAgICByZXR1cm4gZ2V0Q2VsbFRleHQocm93LCBjbGFzc05hbWUpOyBcbiAgICB9LFxuICAgIHVwZGF0ZVZhbHVlOiBmdW5jdGlvbihyb3csIGNvbF9jbGFzcywgbmV3X3ZhbHVlKSB7XG4gICAgICAgIHVwZGF0ZVRhYmxlQ2VsbChyb3csIGNvbF9jbGFzcywgbmV3X3ZhbHVlKTsgXG4gICAgfSxcbiAgICBjcmVhdGVUZXh0Ym94IDogZnVuY3Rpb24oY2xhc3NOYW1lKSB7XG4gICAgICAgIGNyZWF0ZUVkaXRhYmxlQ2VsbChjbGFzc05hbWUpXG4gICAgfSxcbiAgICBjcmVhdGVEcm9wZG93biA6IGZ1bmN0aW9uKGNsYXNzTmFtZSwganNvbl9maWxlcGF0aCl7XG4gICAgICAgIGNyZWF0ZVNlbGVjdENlbGwoY2xhc3NOYW1lLCBqc29uX2ZpbGVwYXRoKTtcbiAgICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ2VsbDsiLCJpbXBvcnQgeyBmb3JtYXRDdXJyZW5jeSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9jb21tb25fdXRpbHMuanNcIjtcblxuLy8gcG9zaXRpb24gaXMgaW5kZXggYXQgd2hpY2ggbmV3IGNvbHVtbiB3aWxsIGJlIGluc2VydGVkXG5mdW5jdGlvbiBhZGRDb2wocG9zaXRpb24sIGh0bWxDb250ZW50ID0gJycsIGhlYWRlclRpdGxlID0gJycpIHtcbiAgICAvLyBHZXQgdGhlIHRhYmxlIGVsZW1lbnQgYnkgaXRzIElEXG4gICAgbGV0IHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4tdGFibGUnKTtcblxuICAgIC8vIFZhbGlkYXRlIHBvc2l0aW9uXG4gICAgbGV0IG1heFBvc2l0aW9uID0gdGFibGUucm93c1swXS5jZWxscy5sZW5ndGg7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+IG1heFBvc2l0aW9uKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBQb3NpdGlvbiAke3Bvc2l0aW9ufSBpcyBvdXQgb2YgYm91bmRzLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgXG4gICAgLy8gSW5zZXJ0IHRoZSBoZWFkZXIgaWYgcHJvdmlkZWRcbiAgICBsZXQgdGhlYWQgPSB0YWJsZS50SGVhZDtcbiAgICBpZiAoaGVhZGVyVGl0bGUgJiYgdGhlYWQpIHtcbiAgICAgIGxldCB0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJyk7XG4gICAgICB0aC5pbm5lckhUTUwgPSBoZWFkZXJUaXRsZTsgLy8gVXNlIGlubmVySFRNTCB0byBpbnNlcnQgSFRNTCBjb250ZW50XG4gICAgICB0aGVhZC5yb3dzWzBdLmluc2VydEJlZm9yZSh0aCwgdGhlYWQucm93c1swXS5jZWxsc1twb3NpdGlvbl0pO1xuICAgIH1cbiAgXG4gICAgLy8gSW5zZXJ0IG5ldyBjZWxscyBpbnRvIGVhY2ggcm93IG9mIHRoZSB0YWJsZSBib2R5XG4gICAgbGV0IHRib2R5ID0gdGFibGUudEJvZGllc1swXTtcbiAgICBpZiAodGJvZHkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGJvZHkucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgcm93ID0gdGJvZHkucm93c1tpXTtcbiAgICAgICAgbGV0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTtcbiAgICAgICAgdGQuaW5uZXJIVE1MID0gaHRtbENvbnRlbnQ7IC8vIFVzZSBpbm5lckhUTUwgdG8gaW5zZXJ0IEhUTUwgY29udGVudFxuICAgICAgICByb3cuaW5zZXJ0QmVmb3JlKHRkLCByb3cuY2VsbHNbcG9zaXRpb25dKTtcbiAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5jb2xzKCl7XG4gICAgY29uc3QgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi10YWJsZScpO1xuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSByb3cgZXhpc3RzIGJlZm9yZSBjb3VudGluZyB0aGUgY29sdW1uc1xuICAgIHJldHVybiB0YWJsZS5yb3dzWzBdLmNlbGxzLmxlbmd0aDtcbn1cbiAgXG5mdW5jdGlvbiBhZGRDb2xUb0VuZChodG1sQ29udGVudHMgPSBbXSwgaGVhZGVyVGl0bGUgPSAnJyl7XG4gICAgLy8gY291bnQgY29sdW1ucyBhbmQgYWRkIG5ldyBjb2x1bW4gdG8gdGhlIGVuZFxuICAgIGNvbnN0IHBvc2l0aW9uID0gbmNvbHMoJ21haW4tdGFibGUnKTtcbiAgICBhZGRDb2wocG9zaXRpb24sIGh0bWxDb250ZW50cywgaGVhZGVyVGl0bGUpO1xufVxuXG5mdW5jdGlvbiBhc3NpZ25DbGFzc1RvQ29sdW1uKGhlYWRlck5hbWUsIGNsYXNzTmFtZSkge1xuICAgIC8vIEdldCB0aGUgdGFibGUgZWxlbWVudCBieSBpdHMgSURcbiAgICBsZXQgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi10YWJsZScpO1xuXG4gICAgLy8gRmluZCB0aGUgaW5kZXggb2YgdGhlIGNvbHVtbiBieSBpdHMgaGVhZGVyIG5hbWVcbiAgICBjb25zdCB0aGVhZCA9IHRhYmxlLnRIZWFkO1xuICAgIGlmICghdGhlYWQgfHwgdGhlYWQucm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignVGhlIHRhYmxlIGhlYWRlciBpcyBub3QgZm91bmQgb3IgaGFzIG5vIHJvd3MuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgbGV0IGhlYWRlckNlbGxJbmRleCA9IC0xO1xuICAgIGNvbnN0IGhlYWRlckNlbGxzID0gdGhlYWQucm93c1swXS5jZWxsczsgLy8gQXNzdW1pbmcgdGhlIGZpcnN0IHJvdyBjb250YWlucyBoZWFkZXIgY2VsbHMgKDx0aD4pXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJDZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaGVhZGVyQ2VsbHNbaV0udGV4dENvbnRlbnQudHJpbSgpID09PSBoZWFkZXJOYW1lKSB7XG4gICAgICAgICAgICBoZWFkZXJDZWxsSW5kZXggPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyQ2VsbEluZGV4ID09PSAtMSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBObyBoZWFkZXIgZm91bmQgd2l0aCBuYW1lIFwiJHtoZWFkZXJOYW1lfVwiYCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIFxuICAgIC8vIEFzc2lnbiB0aGUgY2xhc3MgdG8gZWFjaCBjZWxsIGluIHRoZSBzcGVjaWZpZWQgY29sdW1uIGluZGV4IHdpdGhpbiB0aGUgdGJvZHlcbiAgICBsZXQgdGJvZHkgPSB0YWJsZS50Qm9kaWVzWzBdO1xuICAgIGlmICh0Ym9keSkge1xuICAgICAgbGV0IGJvZHlSb3dzID0gdGJvZHkucm93cztcbiAgICAgIGZvciAobGV0IHJvdyBvZiBib2R5Um93cykge1xuICAgICAgICBpZiAocm93LmNlbGxzW2hlYWRlckNlbGxJbmRleF0pIHtcbiAgICAgICAgICByb3cuY2VsbHNbaGVhZGVyQ2VsbEluZGV4XS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuZnVuY3Rpb24gYWRkQ29zdENsYXNzKGhlYWRlck5hbWUpe1xuICAgIGFzc2lnbkNsYXNzVG9Db2x1bW4oIGhlYWRlck5hbWUsICdjb3N0Jyk7XG5cbiAgICAvLyBHZXQgYWxsIHRoZSBjZWxscyB3aXRoIHRoZSBzcGVjaWZpZWQgY2xhc3MgbmFtZVxuICAgIGNvbnN0IGNlbGxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLmNvc3RgKTtcbiAgICAgIFxuICAgIGNlbGxzLmZvckVhY2goY2VsbCA9PiB7XG4gICAgICAgIC8vIEdldCB0aGUgY3VycmVudCB0ZXh0IGNvbnRlbnQgb2YgdGhlIGNlbGwgYW5kIGFzc2lnbiBpdCB0byAndmFsdWUnIGF0dHJpYnV0ZVxuICAgICAgICBpZiAoIWNlbGwuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKXtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxWYWx1ZSA9IGNlbGwudGV4dENvbnRlbnQudHJpbSgpO1xuICAgICAgICAgICAgY2VsbC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgY2VsbFZhbHVlKTtcblxuICAgICAgICAgICAgLy8gTm93IGZvcm1hdCB0aGUgdGV4dCBjb250ZW50IGxpa2UgY3VycmVuY3kgYW5kIHJlcGxhY2UgaXQgaW4gdGhlIGNlbGxcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEN1cnJlbmN5ID0gZm9ybWF0Q3VycmVuY3kocGFyc2VGbG9hdChjZWxsVmFsdWUpKTtcbiAgICAgICAgICAgIGNlbGwudGV4dENvbnRlbnQgPSBmb3JtYXR0ZWRDdXJyZW5jeTtcbiAgICAgICAgfVxuICAgICAgXG4gICAgfSk7XG5cbn1cblxuZnVuY3Rpb24gYXNzaWduQ29sdW1uQ2xhc3Nlcyhjb2x1bW5EZWZpbml0aW9ucykge1xuICBjb2x1bW5EZWZpbml0aW9ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAvLyBBc3NpZ24gY2xhc3MgdG8gY29sdW1uXG4gICAgICBhc3NpZ25DbGFzc1RvQ29sdW1uKGNvbHVtbi50aXRsZSwgY29sdW1uLmNsYXNzTmFtZSk7XG5cbiAgICAgIC8vIElmIHRoZSBjb2x1bW4gaXMgYSBjb3N0IGNvbHVtbiwgYWRkIHRoZSBzcGVjaWZpYyBjb3N0IGNsYXNzXG4gICAgICBpZiAoY29sdW1uLmlzQ29zdCkge1xuICAgICAgICAgIGFkZENvc3RDbGFzcyhjb2x1bW4udGl0bGUpO1xuICAgICAgfVxuICB9KTtcbn1cblxuXG5jb25zdCBDb2x1bW4gPSB7XG4gIGFkZDogZnVuY3Rpb24ocG9zaXRpb24sIGh0bWxDb250ZW50LCBoZWFkZXJUaXRsZSkge1xuICAgICAgcmV0dXJuIGFkZENvbChwb3NpdGlvbiwgaHRtbENvbnRlbnQsIGhlYWRlclRpdGxlKTtcbiAgfSxcbiAgYWRkQXRFbmQ6IGZ1bmN0aW9uKGh0bWxDb250ZW50LCBoZWFkZXJUaXRsZSkge1xuICAgICAgcmV0dXJuIGFkZENvbFRvRW5kKGh0bWxDb250ZW50LCBoZWFkZXJUaXRsZSk7XG4gIH0sXG4gIGFzc2lnbkNsYXNzZXM6IGZ1bmN0aW9uKGNvbHVtbl9kZWZpbml0aW9ucykge1xuICAgICAgcmV0dXJuIGFzc2lnbkNvbHVtbkNsYXNzZXMoY29sdW1uX2RlZmluaXRpb25zKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29sdW1uOyIsImV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaEpTT04oanNvbkZpbGVQYXRoKSB7XG4gIHJldHVybiBmZXRjaChqc29uRmlsZVBhdGgpXG4gICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05ldHdvcmsgcmVzcG9uc2Ugd2FzIG5vdCBvaycpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICB9KTtcbn1cblxuXG4gICIsImltcG9ydCB7IGZldGNoSlNPTiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRhX3V0aWxzL0pTT05fZGF0YV9oYW5kbGVycy5qc1wiO1xuXG5hc3luYyBmdW5jdGlvbiBsb2FkSlNPTkludG9UYWJsZShqc29uRmlsZVBhdGgpIHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKU09OKGpzb25GaWxlUGF0aCk7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgY29uc3QgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi10YWJsZScpO1xuICAgICAgICAgICAgY29uc3QgdGhlYWQgPSB0YWJsZS5xdWVyeVNlbGVjdG9yKCd0aGVhZCcpO1xuICAgICAgICAgICAgY29uc3QgdGJvZHkgPSB0YWJsZS5xdWVyeVNlbGVjdG9yKCd0Ym9keScpO1xuXG4gICAgICAgICAgICAvLyBjbGVhciBleGlzdGluZyBkYXRhXG4gICAgICAgICAgICB0aGVhZC5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgICAgIHRib2R5LmlubmVySFRNTCA9ICcnO1xuICAgIFxuICAgICAgICAgICAgLy8gQ3JlYXRlIHRhYmxlIGhlYWRlciByb3dcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlclJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhkYXRhWzBdKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJyk7XG4gICAgICAgICAgICAgIGhlYWRlci50ZXh0Q29udGVudCA9IGtleTtcbiAgICAgICAgICAgICAgaGVhZGVyUm93LmFwcGVuZENoaWxkKGhlYWRlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoZWFkLmFwcGVuZENoaWxkKGhlYWRlclJvdyk7XG4gICAgXG4gICAgICAgICAgICAvLyBDcmVhdGUgdGFibGUgYm9keSByb3dzXG4gICAgICAgICAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XG4gICAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoaXRlbSkuZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpO1xuICAgICAgICAgICAgICAgIGNlbGwudGV4dENvbnRlbnQgPSB2YWw7XG4gICAgICAgICAgICAgICAgcm93LmFwcGVuZENoaWxkKGNlbGwpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdGJvZHkuYXBwZW5kQ2hpbGQocm93KTtcbiAgICAgICAgICAgIH0pO1xuICAgIFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVGhlIHByb3ZpZGVkIEpTT04gZmlsZSBkb2VzIG5vdCBjb250YWluIGFuIGFycmF5IG9mIG9iamVjdHMuJyk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGFuZCBwYXJzZSB0aGUgSlNPTiBmaWxlOicsIGVycm9yKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBEYXRhID0ge1xuICAgIGxvYWRGcm9tSlNPTiA6IGxvYWRKU09OSW50b1RhYmxlXG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGE7IiwiaW1wb3J0ICcuL3RhYmxlLmNzcyc7XG5cbmltcG9ydCBCdXR0b25zIGZyb20gJy4vc3ViY29tcG9uZW50cy9idXR0b25zLmpzJ1xuaW1wb3J0IENlbGwgZnJvbSAnLi9zdWJjb21wb25lbnRzL2NlbGxzLmpzJ1xuaW1wb3J0IENvbHVtbnMgZnJvbSAnLi9zdWJjb21wb25lbnRzL2NvbHVtbnMuanMnXG5pbXBvcnQgSGVhZGVyIGZyb20gJy4vc3ViY29tcG9uZW50cy9oZWFkZXJzLmpzJ1xuaW1wb3J0IFJvd3MgZnJvbSAnLi9zdWJjb21wb25lbnRzL3Jvd3MuanMnXG5pbXBvcnQgRGF0YSBmcm9tICcuL3N1YmNvbXBvbmVudHMvZGF0YS5qcydcblxuZnVuY3Rpb24gYWRqdXN0VGFibGVXaWR0aCh3aWR0aF9wY3Qpe1xuICAgIGNvbnN0IHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4tdGFibGUnKTtcbiAgICB0YWJsZS5zdHlsZS53aWR0aCA9IHdpZHRoX3BjdDtcbn1cblxuZnVuY3Rpb24gY2xlYXJUYWJsZSgpe1xuICAgIGNvbnN0IHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4tdGFibGUnKTtcbiAgICB0YWJsZS5xdWVyeVNlbGVjdG9yKCd0aGVhZCcpLmlubmVySFRNTCA9ICcnO1xuICAgIHRhYmxlLnF1ZXJ5U2VsZWN0b3IoJ3Rib2R5JykuaW5uZXJIVE1MID0gJyc7XG59XG5cbmZ1bmN0aW9uIHNob3dUYWJsZSgpe1xuICAgIGNvbnN0IHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4tdGFibGUnKTtcbiAgICB0YWJsZS5zdHlsZS5kaXNwbGF5ID0gJ3RhYmxlJztcbn1cblxuZnVuY3Rpb24gaGlkZVRhYmxlKCl7XG4gICAgY29uc3QgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi10YWJsZScpO1xuICAgIHRhYmxlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgQnV0dG9ucy5BZGRSb3cuaGlkZSgpO1xufVxuXG5jb25zdCBUYWJsZSA9IHtcbiAgICBCdXR0b25zIDogQnV0dG9ucyxcbiAgICBDZWxsIDogQ2VsbCxcbiAgICBDb2x1bW5zIDogQ29sdW1ucyxcbiAgICBIZWFkZXIgOiBIZWFkZXIsXG4gICAgUm93cyA6IFJvd3MsXG4gICAgRGF0YSA6IERhdGEsXG4gICAgLy8gZnVuY3Rpb25zXG4gICAgYWRqdXN0V2lkdGggOiBmdW5jdGlvbih3aWR0aF9wY3Qpe1xuICAgICAgICBhZGp1c3RUYWJsZVdpZHRoKHdpZHRoX3BjdClcbiAgICB9LFxuICAgIGNsZWFyIDogY2xlYXJUYWJsZSxcbiAgICBoaWRlIDogaGlkZVRhYmxlLFxuICAgIHNob3cgOiBzaG93VGFibGVcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGU7IiwiaW1wb3J0ICcuL2JvZHkuY3NzJztcblxuaW1wb3J0IFdlbGNvbWUgZnJvbSAnLi4vLi4vY29tcG9uZW50cy93ZWxjb21lL3dlbGNvbWUuanMnXG5pbXBvcnQgTW9kYWwgZnJvbSAnLi4vbW9kYWwvbW9kYWwuanMnO1xuaW1wb3J0IE5hdkJ1dHRvbnMgZnJvbSAnLi4vbmF2X2J1dHRvbnMvbmF2X2J1dHRvbnMuanMnO1xuaW1wb3J0IFByb21wdCBmcm9tICcuLi9wcm9tcHQvcHJvbXB0LmpzJztcbmltcG9ydCBTaWRlYmFyIGZyb20gJy4uL3NpZGViYXIvc2lkZWJhci5qcyc7XG5pbXBvcnQgVGFibGUgZnJvbSAnLi4vdGFibGUvdGFibGUuanMnO1xuXG5mdW5jdGlvbiByZXNldFBhZ2UoKSB7XG4gICAgLy8gaGlkZSBldmVyeXRoaW5nIGluIHRoZSBib2R5XG4gICAgV2VsY29tZS5oaWRlKCk7XG4gICAgTW9kYWwuY2xlYXIoKTtcbiAgICBNb2RhbC5oaWRlKCk7XG4gICAgTmF2QnV0dG9ucy5oaWRlKCk7XG4gICAgUHJvbXB0LmhpZGUoKTtcbiAgICBUYWJsZS5oaWRlKCk7XG4gICAgU2lkZWJhci5oaWRlKCk7XG4gICAgLy8gZGlzYWJsZSBuZXh0IGJ1dHRvblxuICAgIE5hdkJ1dHRvbnMuTmV4dC5kaXNhYmxlKCk7XG4gICAgUHJvbXB0LkJ1dHRvbnMucmVzZXQoKTtcbn1cblxuZXhwb3J0IGNvbnN0IEJvZHkgPSB7XG4gICAgcmVzZXQgOiByZXNldFBhZ2Vcbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9keTsiLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vZm9ybS5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcbm9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9mb3JtLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIi8vIGZ1bmN0aW9uIHRvIGFkZCBxdWVzdGlvbnMgdG8gZm9ybXNcbi8vIHR5cGUgaXMgJ2lucHV0JyBvciAndGV4dGFyZWEnXG4vLyBpbnB1dFR5cGUgaXMgZm9yIHZhbGlkYXRpb24gKCdudW1iZXInIG9yICd0ZXh0JywgZXRjKVxuZnVuY3Rpb24gYXBwZW5kRm9ybUVsZW1lbnQodHlwZSwgbGFiZWwsIGlucHV0SWQsIHJlcXVpcmVkLCBpbnB1dFR5cGUsIGZvcm1faWQgPSAnbmV3LWZvcm0nLCBjb3N0ID0gZmFsc2UpIHtcblxuICAgIC8vIGNoYW5nZSBpZiB3ZSB3YW50IGZvcm1zIGVsc2V3aGVyZVxuICAgIGNvbnN0IGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtX2lkKTtcblxuICAgIC8vIGNyZWF0ZSBvdXRlciB3cmFwcGVyIGZvciBlbGVtZW50XG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyAgXG5cbiAgICAvLyBsYWJlbCBxdWVzdGlvblxuICAgIGNvbnN0IGxhYmVsRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpO1xuICAgIGxhYmVsRWwudGV4dENvbnRlbnQgPSBsYWJlbDtcbiAgXG4gICAgLy8gc2V0IHR5cGUgKGlucHV0IG9yIHRleHRhcmVhKVxuICAgIGxldCBpbnB1dEVsO1xuICAgIGlmICh0eXBlID09PSAnaW5wdXQnKSB7XG4gICAgICBpbnB1dEVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgIGlucHV0RWwudHlwZSA9IGlucHV0VHlwZTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd0ZXh0YXJlYScpIHtcbiAgICAgIGlucHV0RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgdHlwZScpO1xuICAgIH1cbiAgXG4gICAgLy8gbWFyayBhcyByZXF1aXJlZCBpZiBhcHBsaWNhYmxlXG4gICAgaW5wdXRFbC5yZXF1aXJlZCA9IHJlcXVpcmVkO1xuXG4gICAgLy8gSWYgYW4gSUQgaXMgcHJvdmlkZWQsIHNldCBpdCBvbiB0aGUgZWxlbWVudFxuICAgIGlmIChpbnB1dElkKSB7XG4gICAgICAgIGlucHV0RWwuaWQgPSBpbnB1dElkO1xuICAgIH1cbiAgXG4gICAgLy8gYWRkIGVsZW1lbnRzXG4gICAgd3JhcHBlci5hcHBlbmRDaGlsZChsYWJlbEVsKTtcbiAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGlucHV0RWwpO1xuICAgIGZvcm0uYXBwZW5kQ2hpbGQod3JhcHBlcik7XG59IFxuXG5leHBvcnQgY29uc3QgTmV3RmllbGQgPSB7XG4gICAgc2hvcnRUZXh0IDogZnVuY3Rpb24obGFiZWwsIGlucHV0SWQsIHJlcXVpcmVkID0gZmFsc2UsIGZvcm1faWQgPSAnbmV3LWZvcm0nLCBjb3N0ID0gZmFsc2UpIHtcbiAgICAgICAgYXBwZW5kRm9ybUVsZW1lbnQoJ2lucHV0JywgbGFiZWwsIGlucHV0SWQsIHJlcXVpcmVkLCAndGV4dCcsIGZvcm1faWQpO1xuICAgIH0sXG4gICAgbG9uZ1RleHQgOiBmdW5jdGlvbihsYWJlbCwgaW5wdXRJZCwgcmVxdWlyZWQgPSBmYWxzZSwgZm9ybV9pZCA9ICduZXctZm9ybScsIGNvc3QgPSBmYWxzZSkge1xuICAgICAgICBhcHBlbmRGb3JtRWxlbWVudCgndGV4dGFyZWEnLCBsYWJlbCwgaW5wdXRJZCwgcmVxdWlyZWQsIGZvcm1faWQpO1xuICAgIH0sXG4gICAgbnVtZXJpY0lucHV0OiBmdW5jdGlvbihsYWJlbCwgaW5wdXRJZCwgcmVxdWlyZWQgPSBmYWxzZSwgZm9ybV9pZCA9ICduZXctZm9ybScsIGNvc3QgPSB0cnVlKSB7XG4gICAgICAgIGFwcGVuZEZvcm1FbGVtZW50KCdpbnB1dCcsIGxhYmVsLCBpbnB1dElkLCByZXF1aXJlZCwgJ251bWJlcicsIGZvcm1faWQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTmV3RmllbGQ7IiwiZnVuY3Rpb24gYWRkU3VibWl0QnV0dG9uVG9Gb3JtKGZvcm1faWQpIHtcbiAgICAvLyBGaW5kIHRoZSBmb3JtIGJ5IGl0cyBJRFxuICAgIGNvbnN0IGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtX2lkKTtcbiAgXG4gICAgLy8gQ3JlYXRlIHRoZSBjb250YWluZXIgYGRpdmAgZm9yIHRoZSBidXR0b25cbiAgICBjb25zdCBidXR0b25Db250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBidXR0b25Db250YWluZXIuaWQgPSAnc3VibWl0LWJ0bi1jb250YWluZXInO1xuICAgIFxuICAgIC8vIENyZWF0ZSB0aGUgc3VibWl0IGlucHV0XG4gICAgY29uc3Qgc3VibWl0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgIHN1Ym1pdElucHV0LmNsYXNzTmFtZSA9ICdidG4gYnRuLXN1Ym1pdCc7IC8vIFVzZSBhcHByb3ByaWF0ZSBjbGFzcyBmb3IgeW91ciBkZXNpZ25cbiAgICBzdWJtaXRJbnB1dC50eXBlID0gJ3N1Ym1pdCc7XG4gICAgc3VibWl0SW5wdXQudmFsdWUgPSAnU3VibWl0JztcblxuICAgIC8vIEFwcGVuZCB0aGUgc3VibWl0IGlucHV0IHRvIHRoZSBjb250YWluZXJcbiAgICBidXR0b25Db250YWluZXIuYXBwZW5kQ2hpbGQoc3VibWl0SW5wdXQpO1xuICAgIFxuICAgIC8vIEFwcGVuZCB0aGUgY29udGFpbmVyIHRvIHRoZSBmb3JtXG4gICAgZm9ybS5hcHBlbmRDaGlsZChidXR0b25Db250YWluZXIpO1xufVxuXG5leHBvcnQgY29uc3QgU3VibWl0QnV0dG9uID0ge1xuICAgIGFkZCA6IGZ1bmN0aW9uKCkgeyBhZGRTdWJtaXRCdXR0b25Ub0Zvcm0oJ25ldy1mb3JtJykgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTdWJtaXRCdXR0b247IiwiaW1wb3J0ICcuL2Zvcm0uY3NzJztcblxuaW1wb3J0IERyb3Bkb3duIGZyb20gXCIuL3N1YmNvbXBvbmVudHMvZHJvcGRvd24uanNcIjtcbmltcG9ydCBOZXdGaWVsZCBmcm9tIFwiLi9zdWJjb21wb25lbnRzL2ZpZWxkcy5qc1wiO1xuaW1wb3J0IFN1Ym1pdEJ1dHRvbiBmcm9tIFwiLi9zdWJjb21wb25lbnRzL3N1Ym1pdC5qc1wiO1xuXG5mdW5jdGlvbiBmZXRjaEFsbFJlc3BvbnNlcyhldmVudCkge1xuXG4gICAgLy8gQXNzdW1pbmcgYGV2ZW50LnRhcmdldGAgaXMgdGhlIGZvcm0gaXRzZWxmXG4gICAgY29uc3QgZm9ybSA9IGV2ZW50LnRhcmdldDtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGFuIGVtcHR5IGFycmF5IHRvIGhvbGQgdGhlIGlucHV0IHZhbHVlc1xuICAgIGxldCBmb3JtRGF0YSA9IHt9O1xuICAgIFxuICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIGZvcm0gZWxlbWVudFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybS5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGZvcm0uZWxlbWVudHNbaV07XG4gICAgICBcbiAgICAgIC8vIEV4Y2x1ZGUgZWxlbWVudHMgdGhhdCBhcmVuJ3QgaW5wdXRzLCB0ZXh0YXJlYXMsIG9yIHNlbGVjdFxuICAgICAgaWYgKGVsZW1lbnQudGFnTmFtZSA9PT0gJ0lOUFVUJyB8fFxuICAgICAgICAgIGVsZW1lbnQudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyB8fFxuICAgICAgICAgIGVsZW1lbnQudGFnTmFtZSA9PT0gJ1NFTEVDVCcpIHtcbiAgICAgICAgLy8gRXhjbHVkZSBpbnB1dCB0eXBlcyB0aGF0IGFyZSBub3QgY29uc2lkZXJlZCBmb3Igc3VibWlzc2lvbiAoc3VjaCBhcyBgc3VibWl0YClcbiAgICAgICAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ3N1Ym1pdCcgJiYgZWxlbWVudC50eXBlICE9PSAnYnV0dG9uJykge1xuICAgICAgICAgIGZvcm1EYXRhW2VsZW1lbnQuaWRdID0gZWxlbWVudC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBmb3JtLnJlc2V0KCk7XG4gICAgcmV0dXJuIGZvcm1EYXRhO1xufVxuXG5mdW5jdGlvbiBhZGRGb3JtKGVsZW1lbnRfaWQgPSAnbW9kYWwtYm9keScsIGZvcm1faWQgPSAnbmV3LWZvcm0nKSB7XG4gIFxuICBjb25zdCB0YXJnZXRfZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRfaWQpO1xuXG4gIC8vIGNyZWF0ZSBmb3JtXG4gIGNvbnN0IGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7XG4gIGZvcm0uc2V0QXR0cmlidXRlKCdpZCcsIGZvcm1faWQpO1xuXG4gIC8vIEFwcGVuZCB0aGUgZm9ybSB0byB0aGUgbW9kYWwgYm9keVxuICB0YXJnZXRfZWxlbS5hcHBlbmRDaGlsZChmb3JtKTtcblxufVxuXG5leHBvcnQgY29uc3QgRm9ybSA9IHtcbiAgbmV3IDogZnVuY3Rpb24ocGFyZW50X2VsZW1faWQpIHsgYWRkRm9ybShwYXJlbnRfZWxlbV9pZCwgJ25ldy1mb3JtJykgfSxcbiAgZmV0Y2hBbGxSZXNwb25zZXMgOiBmdW5jdGlvbihldmVudCkgeyByZXR1cm4gZmV0Y2hBbGxSZXNwb25zZXMoZXZlbnQpIH0sXG4gIE5ld0ZpZWxkIDogTmV3RmllbGQsXG4gIERyb3Bkb3duIDogRHJvcGRvd24sXG4gIFN1Ym1pdEJ1dHRvbiA6IFN1Ym1pdEJ1dHRvblxufVxuXG5leHBvcnQgZGVmYXVsdCBGb3JtOyIsIlxuaW1wb3J0IFByb21wdCBmcm9tICcuLi8uLi9jb21wb25lbnRzL3Byb21wdC9wcm9tcHQuanMnXG5pbXBvcnQgTW9kYWwgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2RhbC9tb2RhbC5qcydcbmltcG9ydCBGb3JtIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZm9ybS9mb3JtLmpzJ1xuaW1wb3J0IFRhYmxlIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvdGFibGUvdGFibGUuanMnXG5pbXBvcnQgQm9keSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2JvZHkvYm9keS5qcydcbmltcG9ydCBOYXZCdXR0b25zIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbmF2X2J1dHRvbnMvbmF2X2J1dHRvbnMuanMnXG5pbXBvcnQgeyBwYXVzZUFuZENvbnRpbnVlIH0gZnJvbSAnLi4vdmlld19sb2dpYy5qcydcbmltcG9ydCBTdWJ0aXRsZSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplUGFnZVZpZXcoKSB7XG4gICAgLy8gUHJlcGFyZSBwYWdlIHZpZXdcbiAgICBCb2R5LnJlc2V0KCk7XG4gICAgTmF2QnV0dG9ucy5zaG93KCk7XG5cbiAgICAvLyBMb2FkIHRleHRcbiAgICBTdWJ0aXRsZS51cGRhdGUoJ05ldyBJbml0aWF0aXZlcycpO1xuICAgIFByb21wdC5UZXh0LnVwZGF0ZSgnRG8geW91IGhhdmUgYW55IG5ldyBpbml0aWF0aXZlcyBmb3IgRlkyNj8nKTtcbiAgICBQcm9tcHQuQnV0dG9ucy5MZWZ0LnVwZGF0ZVRleHQoJ1llcycpO1xuICAgIFByb21wdC5CdXR0b25zLlJpZ2h0LnVwZGF0ZVRleHQoJ05vJyk7XG4gICAgLy8gY2xpY2tpbmcgJ25vIG5ldyBpbml0aWFsaXRpdmVzJyB3aWxsIGFsc28gdGFrZSB1cyB0byB0aGUgbmV4dCBwYWdlXG4gICAgUHJvbXB0LkJ1dHRvbnMuUmlnaHQuYWRkQWN0aW9uKHBhdXNlQW5kQ29udGludWUpO1xuICAgIFByb21wdC5CdXR0b25zLkxlZnQuYWRkQWN0aW9uKE5hdkJ1dHRvbnMuTmV4dC5lbmFibGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBNb2RhbCgpIHtcbiAgICAvLyBJbml0aWFsaXplIG1vZGFsXG4gICAgTW9kYWwuY2xlYXIoKTtcbiAgICBNb2RhbC5MaW5rLmFkZCgnb3B0aW9uMScpO1xuICAgIE1vZGFsLlRpdGxlLnVwZGF0ZSgnTmV3IGluaXRpYXRpdmUnKTtcbiAgICBNb2RhbC5MaW5rLmFkZCgnYWRkLWJ0bicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBGb3JtKCkge1xuICAgIC8vIFNldCB1cCBmb3JtXG4gICAgRm9ybS5uZXcoJ21vZGFsLWJvZHknKTtcbiAgICBGb3JtLk5ld0ZpZWxkLnNob3J0VGV4dCgnSW5pdGlhdGl2ZSBOYW1lOicsICdJbml0aWF0aXZlIE5hbWUnLCB0cnVlKTsgXG4gICAgRm9ybS5OZXdGaWVsZC5sb25nVGV4dCgnRXhwbGFpbiB3aHkgdGhpcyBpbml0aWF0aXZlIGlzIG5lY2Vzc2FyeSBhbmQgZGVzY3JpYmUgaXRzIHBvdGVudGlhbCBpbXBhY3QuJywgJ0V4cGxhbmF0aW9uJywgdHJ1ZSk7XG4gICAgRm9ybS5OZXdGaWVsZC5udW1lcmljSW5wdXQoJ0VzdGltYXRlIG9mIEFERElUT05BTCByZXZlbnVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGluaXRpYXRpdmU/JywgJ1JldmVudWUnLCB0cnVlKTtcbiAgICBGb3JtLk5ld0ZpZWxkLm51bWVyaWNJbnB1dCgnRXN0aW1hdGUgb2YgQURESVRPTkFMIHBlcnNvbm5lbCBjb3N0PycsICdQZXJzb25uZWwgQ29zdCcsIHRydWUpO1xuICAgIEZvcm0uTmV3RmllbGQubnVtZXJpY0lucHV0KCdFc3RpbWF0ZSBvZiBBRERJVE9OQUwgbm9ucGVyc29ubmVsIGNvc3Q/JywgJ05vbi1wZXJzb25uZWwgQ29zdCcsIHRydWUpO1xuICAgIEZvcm0uU3VibWl0QnV0dG9uLmFkZCgpO1xuICAgIC8vIEluaXRpYWxpemUgZm9ybSBzdWJtaXNzaW9uIHRvIHRhYmxlIGRhdGFcbiAgICBoYW5kbGVGb3JtU3VibWlzc2lvbnMoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFVwVGFibGUoKSB7XG4gICAgLy8gU2V0IHVwIHRhYmxlXG4gICAgVGFibGUuY2xlYXIoKTtcbiAgICBUYWJsZS5hZGp1c3RXaWR0aCgnNzAlJyk7XG4gICAgVGFibGUuQnV0dG9ucy5BZGRSb3cudXBkYXRlVGV4dCgnQWRkIGFub3RoZXIgbmV3IGluaXRpYXRpdmUnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZUZvcm1TdWJtaXNzaW9ucyhldmVudCl7XG4gICAgICAgIC8vIGluaXRpYWxpemUgZm9ybSBzdWJtaXNzaW9uXG4gICAgICAgIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4tbW9kYWwnKTtcbiAgICAgICAgbW9kYWwuYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAvLyBnZXQgYW5zd2VycyBmcm9tIGZvcm0sIGhpZGUgZm9ybSwgc2hvdyBhbnN3ZXJzIGluIHRhYmxlXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZXMgPSBGb3JtLmZldGNoQWxsUmVzcG9uc2VzKGV2ZW50KTtcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBpdCdzIG5vdCBhbiBlbXB0eSByZXNwb25zZVxuICAgICAgICAgICAgaWYgKE9iamVjdC52YWx1ZXMocmVzcG9uc2VzKVswXSAhPSAnJyl7XG4gICAgICAgICAgICAgICAgLy8gY2hhbmdlIHBhZ2Ugdmlld1xuICAgICAgICAgICAgICAgIE1vZGFsLmhpZGUoKTtcbiAgICAgICAgICAgICAgICBQcm9tcHQuaGlkZSgpO1xuICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBhZGQgZGF0YSB0byB0YWJsZVxuICAgICAgICAgICAgICAgIFRhYmxlLlJvd3MuYWRkKHJlc3BvbnNlcyk7XG4gICAgICAgICAgICAgICAgVGFibGUuc2hvdygpO1xuICAgICAgICAgICAgICAgIFRhYmxlLkJ1dHRvbnMuQWRkUm93LnNob3coKTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBzYXZlIHRhYmxlIGRhdGFcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBlZGl0IGNvc3QgdG8gc2hvdyBjdXJyZW5jeSBjb3JyZWN0bHlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU1vZGFsTGlua3MoKXtcbiAgICBNb2RhbC5MaW5rLnJlbW92ZSgnb3B0aW9uMScpO1xuICAgIE1vZGFsLkxpbmsucmVtb3ZlKCdhZGQtYnRuJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQcm9tcHRCdXR0b25MaXN0ZW5lcnMoKXtcbiAgICBQcm9tcHQuQnV0dG9ucy5SaWdodC5yZW1vdmVBY3Rpb24ocGF1c2VBbmRDb250aW51ZSk7XG4gICAgUHJvbXB0LkJ1dHRvbnMuTGVmdC5yZW1vdmVBY3Rpb24oTmF2QnV0dG9ucy5OZXh0LmVuYWJsZSk7XG59IiwiXG5pbXBvcnQgeyBpbml0aWFsaXplUGFnZVZpZXcsIHNldFVwTW9kYWwsIHNldFVwRm9ybSwgc2V0VXBUYWJsZSwgcmVtb3ZlTW9kYWxMaW5rcywgcmVtb3ZlUHJvbXB0QnV0dG9uTGlzdGVuZXJzIH0gZnJvbSAnLi9oZWxwZXJzLmpzJ1xuaW1wb3J0IHsgdXBkYXRlUGFnZVN0YXRlIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGF0YV91dGlscy9sb2NhbF9zdG9yYWdlX2hhbmRsZXJzLmpzJ1xuXG5cbi8vIHNldCB1cCBwYWdlIGFuZCBpbml0aWFsaXplIGFsbCBidXR0b25zXG5leHBvcnQgZnVuY3Rpb24gbG9hZE5ld0luaXRpYXRpdmVzKCkge1xuICAgIHVwZGF0ZVBhZ2VTdGF0ZSgnbmV3LWluaXRzJyk7XG4gICAgaW5pdGlhbGl6ZVBhZ2VWaWV3KCk7XG4gICAgc2V0VXBNb2RhbCgpO1xuICAgIHNldFVwRm9ybSgpO1xuICAgIHNldFVwVGFibGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuVXBJbml0aWF0aXZlc1BhZ2UoKSB7XG4gICAgcmVtb3ZlTW9kYWxMaW5rcygpO1xuICAgIC8vIHJlbW92ZSBldmVudCBsaXN0ZW5lcnMgb24gcHJvbXB0IGJ1dHRvbnNcbiAgICByZW1vdmVQcm9tcHRCdXR0b25MaXN0ZW5lcnMoKTtcbn0iLCJpbXBvcnQgeyB1cGRhdGVQYWdlU3RhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZGF0YV91dGlscy9sb2NhbF9zdG9yYWdlX2hhbmRsZXJzLmpzXCI7XG5pbXBvcnQgUHJvbXB0IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcHJvbXB0L3Byb21wdC5qcydcbmltcG9ydCB7IGluaXRpYWxpemVXZWxjb21lUGFnZSB9IGZyb20gXCIuLi8wMF93ZWxjb21lL21haW4uanNcIjtcbmltcG9ydCBCb2R5IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2JvZHkvYm9keS5qc1wiO1xuaW1wb3J0IFN1YnRpdGxlIGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIuanNcIjtcbmltcG9ydCB7IHZpc2l0UGFnZSB9IGZyb20gXCIuLi92aWV3X2xvZ2ljLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkU3VtbWFyeVBhZ2UoKXtcbiAgICAvL3VwZGF0ZSBwYWdlIHN0YXRlXG4gICAgdXBkYXRlUGFnZVN0YXRlKCdzdW1tYXJ5Jyk7XG5cbiAgICAvLyBwcmVwYXJlIHBhZ2Ugdmlld1xuICAgIEJvZHkucmVzZXQoKTtcbiAgICBQcm9tcHQuQnV0dG9ucy5MZWZ0LnVwZGF0ZVRleHQoJ0Rvd25sb2FkIEV4Y2VsJyk7XG4gICAgUHJvbXB0LkJ1dHRvbnMuUmlnaHQudXBkYXRlVGV4dCgnR28gYmFjayBhbmQgZWRpdCcpO1xuXG4gICAgLy8gdXBkYXRlIHBhZ2UgdGV4dFxuICAgIFN1YnRpdGxlLnVwZGF0ZSgnU3VtbWFyeScpO1xuICAgIC8vIFRPRE86IHVwZGF0ZSB0byBtYWtlIGR5bmFtaWNcbiAgICBQcm9tcHQuVGV4dC51cGRhdGUoYFBsYWNlaG9sZGVyIGZvciBzdW1tYXJ5IGFuZCBhbnkgaXNzdWVzLmApO1xuICAgIFByb21wdC5CdXR0b25zLlJpZ2h0LmFkZEFjdGlvbihyZXR1cm5Ub1dlbGNvbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5VcFN1bW1hcnlQYWdlKCl7XG4gICAgUHJvbXB0LkJ1dHRvbnMuUmlnaHQucmVtb3ZlQWN0aW9uKHJldHVyblRvV2VsY29tZSk7XG59XG5cbmNvbnN0IHJldHVyblRvV2VsY29tZSA9ICgpID0+IHt2aXNpdFBhZ2UoJ3dlbGNvbWUnKX0iLCJcbmltcG9ydCBTdWJ0aXRsZSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIuanMnXG5pbXBvcnQgUHJvbXB0IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcHJvbXB0L3Byb21wdC5qcydcbmltcG9ydCBOYXZCdXR0b25zIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbmF2X2J1dHRvbnMvbmF2X2J1dHRvbnMuanMnXG5pbXBvcnQgVGFibGUgZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvdGFibGUvdGFibGUuanNcIjtcbmltcG9ydCB7IERBVEFfUk9PVCB9IGZyb20gXCIuLi8uLi9pbml0LmpzXCI7XG5pbXBvcnQgQm9keSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9ib2R5L2JvZHkuanNcIjtcblxuY29uc3QgZnVuZENvbHMgPSBbXG4gICAgeyB0aXRsZTogJ0lEJywgY2xhc3NOYW1lOiAnZnVuZC1pZCcgfSxcbiAgICB7IHRpdGxlOiAnTmFtZScsIGNsYXNzTmFtZTogJ2Z1bmQtbmFtZScgfSxcbl07XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUGFnZVZpZXcoKXtcbiAgICBcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImZ1bmRcIiwgJycpO1xuXG4gICAgLy8gcHJlcGFyZSBwYWdlIHZpZXdcbiAgICBCb2R5LnJlc2V0KCk7XG4gICAgTmF2QnV0dG9ucy5zaG93KCk7XG5cbiAgICAvLyB1cGRhdGUgcGFnZSB0ZXh0XG4gICAgU3VidGl0bGUudXBkYXRlKCdCYXNlbGluZSBCdWRnZXQgUmVxdWVzdCcpO1xuICAgIC8vIFRPRE86IHVwZGF0ZSB0byBtYWtlIGR5bmFtaWNcbiAgICBQcm9tcHQuVGV4dC51cGRhdGUoYFdlIHdpbGwgbm93IGFzayB5b3UgYSBzZXJpZXMgb2YgcXVlc3Rpb25zIGFib3V0IHlvdXIgQkFTRUxJTkUgYnVkZ2V0IHJlcXVlc3QuXG4gICAgICAgIEF0IHRoZSBlbmQsIHdlIHdpbGwgYXNrIHlvdSBhYm91dCBhbnkgbmV3IGluaXRpYXRpdmVzIChpZS4gc3VwcGxlbWVudGFsIHJlcXVlc3RzKS5cbiAgICAgICAgU2VsZWN0IG9uZSBvZiB5b3VyIGZ1bmRzIHRvIGJlZ2luLmApO1xufVxuXG5mdW5jdGlvbiBhbGxvd1Jvd1NlbGVjdGlvbigpe1xuICAgIHZhciB0YWJsZVJvd3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwidGJvZHkgdHJcIik7XG4gICAgdGFibGVSb3dzLmZvckVhY2goZnVuY3Rpb24ocm93KSB7XG4gICAgICAgIHJvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMuY2xhc3NMaXN0LmFkZCgnaG92ZXItZWZmZWN0Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICByb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMuY2xhc3NMaXN0LnJlbW92ZSgnaG92ZXItZWZmZWN0Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICByb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHNlbGVjdEZ1bmQodGFibGVSb3dzLCB0aGlzKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0aWFsaXplRnVuZFRhYmxlKCl7XG4gICAgYXdhaXQgVGFibGUuRGF0YS5sb2FkRnJvbUpTT04oREFUQV9ST09UICsgJ2Z1bmRzLmpzb24nKVxuICAgIFRhYmxlLmFkanVzdFdpZHRoKCcxMDAlJyk7XG4gICAgVGFibGUuc2hvdygpO1xuICAgIFRhYmxlLkNvbHVtbnMuYXNzaWduQ2xhc3NlcyhmdW5kQ29scyk7XG4gICAgYWxsb3dSb3dTZWxlY3Rpb24oKTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0RnVuZCh0YWJsZVJvd3MsIHNlbGVjdGVkX3Jvdyl7XG4gICAgLy8gcmVtb3ZlIHNlbGVjdGVkIGNsYXNzIGZyb20gYW55IG90aGVyIHJvd3NcbiAgICB0YWJsZVJvd3MuZm9yRWFjaChmdW5jdGlvbih0YWJsZVJvdykge1xuICAgICAgICB0YWJsZVJvdy5jbGFzc0xpc3QgPSAnJztcbiAgICB9KTtcbiAgICAvLyBhZGQgc2VsZWN0ZWQgY2xhc3MgdG8gY2xpY2tlZCByb3dcbiAgICBzZWxlY3RlZF9yb3cuY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTtcbiAgICAvLyBnZXQgZnVuZCBhbmQgc2F2ZSBzZWxlY3RlZCBmdW5kXG4gICAgdmFyIGZ1bmQgPSBzZWxlY3RlZF9yb3cucXVlcnlTZWxlY3RvcignLmZ1bmQtbmFtZScpLnRleHRDb250ZW50O1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiZnVuZFwiLCBmdW5kKTtcblxuICAgIC8vIGVuYWJsZSBuZXh0IHN0ZXBcbiAgICBOYXZCdXR0b25zLk5leHQuZW5hYmxlKCk7XG59IiwiaW1wb3J0IHsgdXBkYXRlUGFnZVN0YXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2RhdGFfdXRpbHMvbG9jYWxfc3RvcmFnZV9oYW5kbGVycy5qc1wiO1xuaW1wb3J0IHsgcHJlcGFyZVBhZ2VWaWV3LCBpbml0aWFsaXplRnVuZFRhYmxlIH0gZnJvbSBcIi4uLzAyX2Jhc2VsaW5lX2xhbmRpbmdfcGFnZS9oZWxwZXJzLmpzXCI7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRCYXNlbGluZUxhbmRpbmdQYWdlKCl7XG4gICAgLy91cGRhdGUgcGFnZSBzdGF0ZVxuICAgIHVwZGF0ZVBhZ2VTdGF0ZSgnYmFzZWxpbmUtbGFuZGluZycpO1xuICAgIHByZXBhcmVQYWdlVmlldygpO1xuICAgIGluaXRpYWxpemVGdW5kVGFibGUoKTtcbn1cbiIsImltcG9ydCBTdWJ0aXRsZSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIuanMnXG5pbXBvcnQgUHJvbXB0IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcHJvbXB0L3Byb21wdC5qcydcbmltcG9ydCBOYXZCdXR0b25zIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbmF2X2J1dHRvbnMvbmF2X2J1dHRvbnMuanMnXG5pbXBvcnQgQm9keSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9ib2R5L2JvZHkuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVQYWdlVmlldygpIHtcblxuICAgIC8vIHJlbW92ZSBmdW5kIHNlbGVjdGlvblxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiZnVuZFwiLCAnJyk7XG5cbiAgICAvLyBwcmVwYXJlIHBhZ2Ugdmlld1xuICAgIEJvZHkucmVzZXQoKTtcbiAgICBOYXZCdXR0b25zLnNob3coKTtcblxuICAgIC8vIHVwZGF0ZSBwYWdlIHRleHRcbiAgICBTdWJ0aXRsZS51cGRhdGUoJ0V4Y2VsIFVwbG9hZCcpO1xuXG4gICAgLy8gVE9ETzogdXBkYXRlIHRvIG1ha2UgdXBsb2FkIGFjdHVhbGx5IHdvcmtcbiAgICBQcm9tcHQuVGV4dC51cGRhdGUoYFBsYWNlaG9sZGVyIGZvciBFeGNlbCBVcGxvYWRgKTtcbiAgICBQcm9tcHQuQnV0dG9ucy5MZWZ0LnVwZGF0ZVRleHQoJ1VwbG9hZCcpO1xuICAgIFByb21wdC5CdXR0b25zLkxlZnQuc2hvdygpO1xuICAgIFByb21wdC5CdXR0b25zLkxlZnQuYWRkQWN0aW9uKHVwbG9hZEV4Y2VsQWN0aW9uKTtcbn1cblxuZnVuY3Rpb24gdXBsb2FkRXhjZWxBY3Rpb24oKSB7XG4gICAgTmF2QnV0dG9ucy5OZXh0LmVuYWJsZSgpO1xufSIsImltcG9ydCB7IHVwZGF0ZVBhZ2VTdGF0ZSB9IGZyb20gXCIuLi8uLi91dGlscy9kYXRhX3V0aWxzL2xvY2FsX3N0b3JhZ2VfaGFuZGxlcnMuanNcIjtcbmltcG9ydCB7IGluaXRpYWxpemVQYWdlVmlldyB9IGZyb20gXCIuL2hlbHBlcnMuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRVcGxvYWRQYWdlKCl7XG4gICAgLy91cGRhdGUgcGFnZSBzdGF0ZVxuICAgIHVwZGF0ZVBhZ2VTdGF0ZSgndXBsb2FkJyk7XG4gICAgaW5pdGlhbGl6ZVBhZ2VWaWV3KCk7XG4gICAgXG59IiwiaW1wb3J0IFN1YnRpdGxlIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvaGVhZGVyL2hlYWRlci5qcydcbmltcG9ydCBXZWxjb21lIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd2VsY29tZS93ZWxjb21lLmpzJ1xuaW1wb3J0IEJvZHkgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ib2R5L2JvZHkuanMnXG5cbmltcG9ydCB7IGxvYWROZXdJbml0aWF0aXZlcyB9IGZyb20gJy4uLzA2X25ld19pbml0aWF0aXZlcy9tYWluLmpzJ1xuaW1wb3J0IHsgbG9hZFN1bW1hcnlQYWdlIH0gZnJvbSAnLi4vMDdfc3VtbWFyeS9tYWluLmpzJ1xuaW1wb3J0IHsgbG9hZEJhc2VsaW5lTGFuZGluZ1BhZ2UgfSBmcm9tICcuLi8wMl9iYXNlbGluZV9sYW5kaW5nX3BhZ2UvbWFpbi5qcydcbmltcG9ydCB7IGxvYWRVcGxvYWRQYWdlIH0gZnJvbSAnLi4vMDFfdXBsb2FkL21haW4uanMnXG4gXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZVBhZ2VWaWV3KCl7XG4gICAgLy8gcGFnZSBzZXQgdXBcbiAgICBCb2R5LnJlc2V0KCk7XG4gICAgU3VidGl0bGUudXBkYXRlKFwiV2VsY29tZVwiKTtcbiAgICBXZWxjb21lLnNob3coKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZExpbmtzKCl7XG4gICAgLy8gaW5pdGlhbGl6ZSBsaW5rcyBpbiBidXR0b25zXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ZXAtdXBsb2FkJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBsb2FkVXBsb2FkUGFnZSlcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RlcC1pbml0aWF0aXZlcycpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgbG9hZE5ld0luaXRpYXRpdmVzKVxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVwLXJldmVudWUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGxvYWRCYXNlbGluZUxhbmRpbmdQYWdlKVxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVwLWZpbmlzaCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgbG9hZFN1bW1hcnlQYWdlKVxuXG59XG4iLCJcbmltcG9ydCB7IHVwZGF0ZVBhZ2VTdGF0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2RhdGFfdXRpbHMvbG9jYWxfc3RvcmFnZV9oYW5kbGVycy5qcydcbmltcG9ydCB7IGluaXRpYWxpemVQYWdlVmlldywgYWRkTGlua3MgfSBmcm9tICcuL2hlbHBlcnMuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplV2VsY29tZVBhZ2UoKXtcblxuICAgIHVwZGF0ZVBhZ2VTdGF0ZSgnd2VsY29tZScpO1xuICAgIGluaXRpYWxpemVQYWdlVmlldygpO1xuICAgIGFkZExpbmtzKCk7XG5cbn0iLCJpbXBvcnQgeyB1cGRhdGVQYWdlU3RhdGUgfSBmcm9tICcuLi8uLi91dGlscy9kYXRhX3V0aWxzL2xvY2FsX3N0b3JhZ2VfaGFuZGxlcnMuanMnXG5pbXBvcnQgUHJvbXB0IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcHJvbXB0L3Byb21wdC5qcydcbmltcG9ydCB7IGZvcm1hdEN1cnJlbmN5IH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uX3V0aWxzLmpzJ1xuaW1wb3J0IHsgUkVWRU5VRSB9IGZyb20gJy4uLy4uL2luaXQuanMnXG5pbXBvcnQgQm9keSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2JvZHkvYm9keS5qcydcbmltcG9ydCBOYXZCdXR0b25zIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbmF2X2J1dHRvbnMvbmF2X2J1dHRvbnMuanMnXG5pbXBvcnQgeyBwYXVzZUFuZENvbnRpbnVlIH0gZnJvbSAnLi4vdmlld19sb2dpYy5qcydcbmltcG9ydCBTdWJ0aXRsZSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUmV2ZW51ZVBhZ2UoKSB7XG5cbiAgICAvL3VwZGF0ZSBwYWdlIHN0YXRlXG4gICAgdXBkYXRlUGFnZVN0YXRlKCdyZXZlbnVlJyk7XG5cbiAgICAvLyBwcmVwYXJlIHBhZ2Ugdmlld1xuICAgIEJvZHkucmVzZXQoKTtcbiAgICBOYXZCdXR0b25zLnNob3coKTtcblxuICAgIC8vIHVwZGF0ZSBwYWdlIHRleHRcbiAgICBTdWJ0aXRsZS51cGRhdGUoJ1JldmVudWUgUHJvamVjdGlvbnMnKTtcbiAgICAvLyBUT0RPOiB1cGRhdGUgdG8gbWFrZSBkeW5hbWljXG4gICAgUHJvbXB0LlRleHQudXBkYXRlKGBZb3VyIHJldmVudWUgcHJvamVjdGlvbiBmb3IgRlkyNiBpcyAke2Zvcm1hdEN1cnJlbmN5KFJFVkVOVUUsIHRydWUpfWApO1xuICAgIFByb21wdC5CdXR0b25zLkxlZnQudXBkYXRlVGV4dCgnQ29uZmlybScpO1xuICAgIFByb21wdC5CdXR0b25zLlJpZ2h0LnVwZGF0ZVRleHQoXCJUaGlzIGRvZXNuJ3QgbG9vayByaWdodFwiKTtcblxuICAgIC8vIGNsaWNraW5nICdjb25maXJtJyB3aWxsIGFsc28gdGFrZSB1cyB0byB0aGUgbmV4dCBwYWdlXG4gICAgUHJvbXB0LkJ1dHRvbnMuTGVmdC5hZGRBY3Rpb24ocGF1c2VBbmRDb250aW51ZSk7XG4gICAgLy8gVE9ETzogYWxsb3cgdXNlciB0byBlZGl0IHJldmVudWUgaGVyZVxuICAgIFByb21wdC5CdXR0b25zLlJpZ2h0LmFkZEFjdGlvbihoYW5kbGVSZXZlbnVlRWRpdCk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVJldmVudWVFZGl0KCkge1xuICAgIE5hdkJ1dHRvbnMuTmV4dC5lbmFibGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFudXBSZXZlbnVlUGFnZSgpIHtcbiAgICAvLyByZW1vdmUgZXZlbnQgbGlzdGVuZXJzIG9uIHByb21wdCBidXR0b25zXG4gICAgUHJvbXB0LkJ1dHRvbnMuTGVmdC5yZW1vdmVBY3Rpb24ocGF1c2VBbmRDb250aW51ZSk7XG4gICAgUHJvbXB0LkJ1dHRvbnMuUmlnaHQucmVtb3ZlQWN0aW9uKCk7XG59OyIsIlxuaW1wb3J0IHsgREFUQV9ST09ULCBGSVNDQUxfWUVBUiwgZnJpbmdlLCBjb2xhLCBtZXJpdCB9IGZyb20gXCIuLi8uLi9pbml0LmpzXCJcbmltcG9ydCBCb2R5IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2JvZHkvYm9keS5qc1wiO1xuaW1wb3J0IE5hdkJ1dHRvbnMgZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvbmF2X2J1dHRvbnMvbmF2X2J1dHRvbnMuanNcIjtcbmltcG9ydCBTdWJ0aXRsZSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9oZWFkZXIvaGVhZGVyLmpzXCI7XG5pbXBvcnQgRm9ybSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9mb3JtL2Zvcm0uanNcIjtcbmltcG9ydCBNb2RhbCBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9tb2RhbC9tb2RhbC5qc1wiO1xuaW1wb3J0IFByb21wdCBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9wcm9tcHQvcHJvbXB0LmpzXCI7XG5pbXBvcnQgVGFibGUgZnJvbSAnLi4vLi4vY29tcG9uZW50cy90YWJsZS90YWJsZS5qcydcbmltcG9ydCBTaWRlYmFyIGZyb20gXCIuLi8uLi9jb21wb25lbnRzL3NpZGViYXIvc2lkZWJhci5qc1wiO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUGFnZVZpZXcoKXtcbiAgICAvLyBwcmVwYXJlIHBhZ2Ugdmlld1xuICAgIEJvZHkucmVzZXQoKTtcbiAgICBOYXZCdXR0b25zLnNob3coKTtcbiAgICBTaWRlYmFyLnNob3coKTtcbiAgICBUYWJsZS5hZGp1c3RXaWR0aCgnOTAlJyk7XG4gICAgLy8ganVzdCBlbmFibGUgbmV4dCBmb3Igbm93XG4gICAgLy8gVE9ETyBvbmx5IGVuYWJsZSB3aGVuIGFsbCBpbmZvIGlzIGVudGVyZWRcbiAgICBOYXZCdXR0b25zLk5leHQuZW5hYmxlKCk7XG5cbiAgICAvLyB1cGRhdGUgcGFnZSB0ZXh0XG4gICAgU3VidGl0bGUudXBkYXRlKCdQZXJzb25uZWwnKTtcbiAgICBQcm9tcHQuVGV4dC51cGRhdGUoYFxuICAgICAgICBUaGlzIHRhYmxlIGRpc3BsYXlzIHRoZSBudW1iZXIgb2YgRlRFcyBpbiBlYWNoIGpvYiBjb2RlIGZvciBpbiB5b3VyIGRlcGFydG1lbnQncyBcbiAgICAgICAgY3VycmVudCAoYW1lbmRlZCkgRlkyNSBidWRnZXQuIFRvIG1ha2UgZWRpdHMgdG8gdGhlIG51bWJlciBvZiBwb3NpdGlvbnMsIGNsaWNrIHRoZVxuICAgICAgICBcIkVkaXRcIiBidXR0b24gb24gdGhlIHJvdyB5b3Ugd291bGQgbGlrZSB0byBlZGl0LiBUaGUgXCJUb3RhbCBDb3N0XCIgY29sdW1uIGFuZCB0aGUgXG4gICAgICAgIHN1bW1hcnkgc2lkZWJhciB3aWxsIGFsc28gdXBkYXRlIHRvIHJlZmxlY3QgYW55IGVkaXRzLlxuICAgIGApO1xufVxuXG5mdW5jdGlvbiBhc3NpZ25DbGFzc2VzKCkge1xuICAgIC8vIHJlY29yZCBjb2x1bW5zIGFuZCB0aGVpciBjbGFzc2VzXG4gICAgY29uc3QgcGVyc29ubmVsQ29sdW1ucyA9IFtcbiAgICAgICAgeyB0aXRsZTogJ0pvYiBOYW1lIChUeXBlKScsIGNsYXNzTmFtZTogJ2pvYi1uYW1lJyB9LFxuICAgICAgICB7IHRpdGxlOiBgRlkke0ZJU0NBTF9ZRUFSfSBGVEVzYCwgY2xhc3NOYW1lOiAnYmFzZWxpbmUtZnRlcycgfSxcbiAgICAgICAgeyB0aXRsZTogJ1NlcnZpY2UnLCBjbGFzc05hbWU6ICdzZXJ2aWNlJyB9LFxuICAgICAgICB7IHRpdGxlOiAnVG90YWwgQ29zdCcsIGNsYXNzTmFtZTogJ3RvdGFsLWJhc2VsaW5lJywgaXNDb3N0OiB0cnVlIH0sXG4gICAgICAgIHsgdGl0bGU6ICdBdmVyYWdlIFByb2plY3RlZCBTYWxhcnknLCBjbGFzc05hbWU6ICdhdmctc2FsYXJ5JywgaXNDb3N0OiB0cnVlIH1cbiAgICBdO1xuXG4gICAgLy8gYXNzaWduIGNvc3QgY2xhc3Nlc1xuICAgIFRhYmxlLkNvbHVtbnMuYXNzaWduQ2xhc3NlcyhwZXJzb25uZWxDb2x1bW5zKVxufVxuXG5mdW5jdGlvbiBwZXJzb25uZWxSb3dPbkVkaXQoKXtcbiAgICBUYWJsZS5DZWxsLmNyZWF0ZVRleHRib3goJ2Jhc2VsaW5lLWZ0ZXMnKTtcbiAgICBUYWJsZS5DZWxsLmNyZWF0ZURyb3Bkb3duKCdzZXJ2aWNlJywgREFUQV9ST09UICsgJ3NlcnZpY2VzLmpzb24nKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRpYWxpemVQZXJzb25uZWxUYWJsZSgpe1xuICAgIC8vIGxvYWQgdGFibGUgZGF0YSBmcm9tIGpzb25cbiAgICBhd2FpdCBUYWJsZS5EYXRhLmxvYWRGcm9tSlNPTihEQVRBX1JPT1QgKyAncGVyc29ubmVsX2RhdGEuanNvbicpO1xuICAgIC8vYWZ0ZXIgdGFibGUgaXMgbG9hZGVkLCBmaWxsIGl0XG4gICAgVGFibGUuc2hvdygpO1xuICAgIFRhYmxlLkNvbHVtbnMuYWRkQXRFbmQoICcwJywgJ1RvdGFsIENvc3QnKTtcbiAgICBUYWJsZS5Db2x1bW5zLmFkZEF0RW5kKFRhYmxlLkJ1dHRvbnMuZWRpdF9jb25maXJtX2J0bnMsICcgJyk7O1xuICAgIGFzc2lnbkNsYXNzZXMoKTtcbiAgICAvLyBhZGQgdXAgdGhlIGJhc2VsaW5lIGNvc3RzIGFuZCB1cGRhdGUgc2lkZWJhclxuICAgIHVwZGF0ZURpc3BsYXlhbmRUb3RhbHMoKTtcbiAgICAvLyBhY3RpdmF0ZSBlZGl0IGJ1dHRvbnNcbiAgICBUYWJsZS5CdXR0b25zLkVkaXQuaW5pdChwZXJzb25uZWxSb3dPbkVkaXQsIHVwZGF0ZURpc3BsYXlhbmRUb3RhbHMpO1xuICAgIGluaXRpYWxpemVSb3dBZGRpdGlvbigpO1xufVxuXG5mdW5jdGlvbiBpbml0aWFsaXplUm93QWRkaXRpb24oKXtcbiAgICBUYWJsZS5CdXR0b25zLkFkZFJvdy51cGRhdGVUZXh0KFwiQWRkIG5ldyBqb2JcIik7XG4gICAgVGFibGUuQnV0dG9ucy5BZGRSb3cuc2hvdygpO1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVUb3RhbENvc3QoZnRlcywgYXZnX3NhbGFyeSwgZnJpbmdlLCBjb2xhLCBtZXJpdCl7XG4gICAgcmV0dXJuIGZ0ZXMgKiBhdmdfc2FsYXJ5ICogKDEgKyBmcmluZ2UpICogKDEgKyBjb2xhKSAqICgxICsgbWVyaXQpO1xufVxuXG4vLyB1cGRhdGUgc2lkZWJhciBhbmQgYWxzbyBjb3N0IHRvdGFscyB3aGVuIHRoZSBGVEVzIGFyZSBlZGl0ZWRcbmZ1bmN0aW9uIHVwZGF0ZURpc3BsYXlhbmRUb3RhbHMoKXtcbiAgICAvLyBpbml0aWFsaXplXG4gICAgU2lkZWJhci51cGRhdGVTdGF0KCdiYXNlbGluZS1wZXJzb25uZWwnLCAwKTtcbiAgICBTaWRlYmFyLnVwZGF0ZVN0YXQoJ3N1cHAtcGVyc29ubmVsJywgMCk7XG4gICAgLy8gY2FsY3VsYXRlIGZvciBlYWNoIHJvd1xuICAgIGxldCByb3dzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RyJyk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCByb3dzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgLy8gZmV0Y2ggdmFsdWVzIGZvciBjYWxjdWxhdGlvbnNcbiAgICAgICAgbGV0IGF2Z19zYWxhcnkgPSBUYWJsZS5DZWxsLmdldFZhbHVlKHJvd3NbaV0sICdhdmctc2FsYXJ5Jyk7XG4gICAgICAgIGxldCBiYXNlbGluZV9mdGVzID0gVGFibGUuQ2VsbC5nZXRUZXh0KHJvd3NbaV0sICdiYXNlbGluZS1mdGVzJyk7XG5cbiAgICAgICAgLy8gY2FsY3VhdGUgI0ZURXMgeCBhdmVyYWdlIHNhbGFyeSArIENPTEEgYWRqdXN0bWVudHMgKyBtZXJpdCBhZGp1c3RtZW50cyArIGZyaW5nZVxuICAgICAgICBsZXQgdG90YWxfYmFzZWxpbmVfY29zdCA9IGNhbGN1bGF0ZVRvdGFsQ29zdChiYXNlbGluZV9mdGVzLCBhdmdfc2FsYXJ5LCBmcmluZ2UsIGNvbGEsIG1lcml0KTtcblxuICAgICAgICAvLyB1cGRhdGUgY291bnRlciBhbmQgdG90YWxcbiAgICAgICAgU2lkZWJhci5pbmNyZW1lbnRTdGF0KCdiYXNlbGluZS1wZXJzb25uZWwnLCB0b3RhbF9iYXNlbGluZV9jb3N0KTtcbiAgICAgICAgVGFibGUuQ2VsbC51cGRhdGVWYWx1ZShyb3dzW2ldLCAndG90YWwtYmFzZWxpbmUnLCB0b3RhbF9iYXNlbGluZV9jb3N0KTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFVwTW9kYWwoKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBtb2RhbFxuICAgIE1vZGFsLmNsZWFyKCk7XG4gICAgTW9kYWwuTGluay5hZGQoJ2FkZC1idG4nKTtcbiAgICBNb2RhbC5UaXRsZS51cGRhdGUoJ05ldyBqb2InKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFVwRm9ybSgpIHtcbiAgICAvLyBTZXQgdXAgZm9ybVxuICAgIEZvcm0ubmV3KCdtb2RhbC1ib2R5Jyk7XG4gICAgRm9ybS5OZXdGaWVsZC5zaG9ydFRleHQoJ0pvYiBOYW1lOicsICdqb2ItbmFtZScsIHRydWUpOyBcbiAgICBGb3JtLk5ld0ZpZWxkLnNob3J0VGV4dCgnQWNjb3VudCBTdHJpbmc6JywgJ2FjY291bnQtc3RyaW5nJywgdHJ1ZSk7IFxuICAgIEZvcm0uU3VibWl0QnV0dG9uLmFkZCgpO1xuICAgIC8vIEluaXRpYWxpemUgZm9ybSBzdWJtaXNzaW9uIHRvIHRhYmxlIGRhdGFcbiAgICBoYW5kbGVGb3JtU3VibWlzc2lvbnMoKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlRm9ybVN1Ym1pc3Npb25zKGV2ZW50KXtcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBmb3JtIHN1Ym1pc3Npb25cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4tbW9kYWwnKTtcbiAgICAgICAgbW9kYWwuYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAvLyBnZXQgYW5zd2VycyBmcm9tIGZvcm0sIGhpZGUgZm9ybSwgc2hvdyBhbnN3ZXJzIGluIHRhYmxlXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZXMgPSBGb3JtLmZldGNoQWxsUmVzcG9uc2VzKGV2ZW50KTtcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBpdCdzIG5vdCBhbiBlbXB0eSByZXNwb25zZVxuICAgICAgICAgICAgaWYgKE9iamVjdC52YWx1ZXMocmVzcG9uc2VzKVswXSAhPSAnJyl7XG4gICAgICAgICAgICAgICAgLy8gY2hhbmdlIHBhZ2Ugdmlld1xuICAgICAgICAgICAgICAgIE1vZGFsLmhpZGUoKTtcbiAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gYWRkIGRhdGEgdG8gdGFibGVcbiAgICAgICAgICAgICAgICBUYWJsZS5Sb3dzLmFkZChyZXNwb25zZXMpO1xuICAgICAgICAgICAgICAgIFRhYmxlLnNob3coKTtcbiAgICAgICAgICAgICAgICBUYWJsZS5CdXR0b25zLkFkZFJvdy5zaG93KCk7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogc2F2ZSB0YWJsZSBkYXRhXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogZWRpdCBjb3N0IHRvIHNob3cgY3VycmVuY3kgY29ycmVjdGx5XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pXG59XG4iLCJpbXBvcnQgeyB1cGRhdGVQYWdlU3RhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZGF0YV91dGlscy9sb2NhbF9zdG9yYWdlX2hhbmRsZXJzLmpzXCI7XG5pbXBvcnQgeyBwcmVwYXJlUGFnZVZpZXcsIGluaXRpYWxpemVQZXJzb25uZWxUYWJsZSwgc2V0VXBNb2RhbCwgc2V0VXBGb3JtIH0gZnJvbSBcIi4vaGVscGVycy5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gbG9hZFBlcnNvbm5lbFBhZ2UoKXtcblxuICAgIHVwZGF0ZVBhZ2VTdGF0ZSgncGVyc29ubmVsJyk7XG4gICAgcHJlcGFyZVBhZ2VWaWV3KCk7XG4gICAgaW5pdGlhbGl6ZVBlcnNvbm5lbFRhYmxlKCk7XG5cbiAgICBzZXRVcE1vZGFsKCk7XG4gICAgc2V0VXBGb3JtKCk7XG59XG5cbiIsImltcG9ydCBQcm9tcHQgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9wcm9tcHQvcHJvbXB0LmpzJ1xuaW1wb3J0IHsgdXBkYXRlUGFnZVN0YXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2RhdGFfdXRpbHMvbG9jYWxfc3RvcmFnZV9oYW5kbGVycy5qc1wiO1xuaW1wb3J0IEJvZHkgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ib2R5L2JvZHkuanMnO1xuaW1wb3J0IE5hdkJ1dHRvbnMgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9uYXZfYnV0dG9ucy9uYXZfYnV0dG9ucy5qcyc7XG5pbXBvcnQgU3VidGl0bGUgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9oZWFkZXIvaGVhZGVyLmpzJztcbmltcG9ydCBTaWRlYmFyIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc2lkZWJhci9zaWRlYmFyLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRPVFBhZ2UoKXtcbiAgICAvL3VwZGF0ZSBwYWdlIHN0YXRlXG4gICAgdXBkYXRlUGFnZVN0YXRlKCdvdmVydGltZScpO1xuXG4gICAgLy8gcHJlcGFyZSBwYWdlIHZpZXdcbiAgICBCb2R5LnJlc2V0KCk7XG4gICAgTmF2QnV0dG9ucy5zaG93KCk7XG4gICAgU2lkZWJhci5zaG93KCk7XG5cbiAgICAvLyBqdXN0IGVuYWJsZSBuZXh0IGZvciBub3dcbiAgICAvLyBUT0RPOiBvbmx5IGVuYWJsZSB3aGVuIGFsbCBpbmZvIGlzIGVudGVyZWRcbiAgICBOYXZCdXR0b25zLk5leHQuZW5hYmxlKCk7XG5cbiAgICAvLyB1cGRhdGUgcGFnZSB0ZXh0XG4gICAgU3VidGl0bGUudXBkYXRlKCdPdmVydGltZSBFc3RpbWF0ZXMnKTtcbiAgICAvLyBUT0RPOiB1cGRhdGUgdG8gbWFrZSBkeW5hbWljXG4gICAgUHJvbXB0LlRleHQudXBkYXRlKGBUaGlzIGlzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSBPVCBlc3RpbWF0ZXMuYCk7XG59IiwiaW1wb3J0IFByb21wdCBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9wcm9tcHQvcHJvbXB0LmpzXCI7XG5pbXBvcnQgU2lkZWJhciBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9zaWRlYmFyL3NpZGViYXIuanNcIjtcbmltcG9ydCBUYWJsZSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy90YWJsZS90YWJsZS5qc1wiO1xuaW1wb3J0IHsgREFUQV9ST09UIH0gZnJvbSBcIi4uLy4uL2luaXQuanNcIjtcbmltcG9ydCBCb2R5IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2JvZHkvYm9keS5qc1wiO1xuaW1wb3J0IE5hdkJ1dHRvbnMgZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvbmF2X2J1dHRvbnMvbmF2X2J1dHRvbnMuanNcIjtcbmltcG9ydCBTdWJ0aXRsZSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9oZWFkZXIvaGVhZGVyLmpzXCI7XG5pbXBvcnQgeyBkaXNwbGF5V2l0aENvbW1hcywgdW5mb3JtYXRDdXJyZW5jeSB9IGZyb20gXCIuLi8uLi91dGlscy9jb21tb25fdXRpbHMuanNcIjtcblxuY29uc3Qgbm9uUGVyc29ubmVsQ29sdW1ucyA9IFtcbiAgICB7IHRpdGxlOiAnRlkyNiBSZXF1ZXN0JywgY2xhc3NOYW1lOiAncmVxdWVzdCcsIGlzQ29zdDogdHJ1ZSB9LFxuICAgIHsgdGl0bGU6ICdBbW91bnQgUmVtYWluaW5nJywgY2xhc3NOYW1lOiAncmVtYWluaW5nJywgaXNDb3N0OiB0cnVlIH0sXG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVBhZ2VWaWV3KCl7XG4gICAgLy8gcHJlcGFyZSBwYWdlIHZpZXdcbiAgICBCb2R5LnJlc2V0KCk7XG4gICAgTmF2QnV0dG9ucy5zaG93KCk7XG4gICAgU2lkZWJhci5zaG93KCk7XG4gICAgVGFibGUuYWRqdXN0V2lkdGgoJzEwMCUnKTtcbiAgICAvLyB1cGRhdGUgcGFnZSB0ZXh0XG4gICAgU3VidGl0bGUudXBkYXRlKCdOb24tUGVyc29ubmVsJyk7XG4gICAgUHJvbXB0LlRleHQudXBkYXRlKCdTZWxlY3QgYW4gYWN0aW9uIGl0ZW0gZm9yIGVhY2ggbm9uLXBlcnNvbm5lbCBsaW5lIGl0ZW0gZnJvbSBsYXN0IHllYXIuJyk7XG5cbiAgICAvLyBqdXN0IGVuYWJsZSBuZXh0IGZvciBub3dcbiAgICAvLyBUT0RPOiBvbmx5IGVuYWJsZSB3aGVuIGFsbCBpbmZvIGlzIGVudGVyZWRcbiAgICBOYXZCdXR0b25zLk5leHQuZW5hYmxlKCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0aWFsaXplTm9ucGVyc29ubmVsVGFibGUoKXtcbiAgICAvLyBsb2FkIHRhYmxlIGRhdGEgZnJvbSBqc29uXG4gICAgYXdhaXQgVGFibGUuRGF0YS5sb2FkRnJvbUpTT04oREFUQV9ST09UICsgJ25vbnBlcnNvbm5lbF9kYXRhLmpzb24nLCAnbWFpbi10YWJsZScpO1xuICAgIC8vYWZ0ZXIgdGFibGUgaXMgbG9hZGVkLCBmaWxsIGl0XG4gICAgVGFibGUuc2hvdygpO1xuICAgIFRhYmxlLkNvbHVtbnMuYWRkQXRFbmQoVGFibGUuQnV0dG9ucy5lZGl0X2NvbmZpcm1fYnRucywgXCIgXCIpO1xuICAgIC8vIGFzc2lnbiBjb3N0IGNsYXNzZXNcbiAgICBUYWJsZS5Db2x1bW5zLmFzc2lnbkNsYXNzZXMobm9uUGVyc29ubmVsQ29sdW1ucyk7XG4gICAgLy8gdXBkYXRlIHNpZGViYXJcbiAgICB1cGRhdGVEaXNwbGF5YW5kVG90YWxzKCk7XG4gICAgLy8gZW5hYmxlIGVkaXRpbmdcbiAgICBUYWJsZS5CdXR0b25zLkVkaXQuaW5pdChub25QZXJzb25uZWxSb3dPbkVkaXQsIHVwZGF0ZURpc3BsYXlhbmRUb3RhbHMpO1xufVxuXG5mdW5jdGlvbiBub25QZXJzb25uZWxSb3dPbkVkaXQoKXtcbiAgICAvLyBjb252ZXJ0IHJlcXVlc3QgdG8gbnVtZXJpYyBmcm9tIGZvcm1hdHRlZCBjdXJyZW5jeVxuICAgIGNvbnN0IHJlcXVlc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYWN0aXZlLWVkaXRpbmcgPiB0ZC5yZXF1ZXN0Jyk7XG4gICAgcmVxdWVzdC50ZXh0Q29udGVudCA9IHJlcXVlc3QudGV4dENvbnRlbnQucmVwbGFjZSgnJCcsICcnKTtcbiAgICAvLyBtYWtlIGl0IGVkaXRhYmxlXG4gICAgVGFibGUuQ2VsbC5jcmVhdGVUZXh0Ym94KCdyZXF1ZXN0Jyk7XG59XG5cbi8vIHVwZGF0ZSBzaWRlYmFyIGFuZCBhbHNvIGNvc3QgdG90YWxzIHdoZW4gdGhlIEZURXMgYXJlIGVkaXRlZFxuZnVuY3Rpb24gdXBkYXRlRGlzcGxheWFuZFRvdGFscygpe1xuICAgIC8vIGluaXRpYWxpemVcbiAgICBTaWRlYmFyLnVwZGF0ZVN0YXQoJ2Jhc2VsaW5lLW5vbnBlcnNvbm5lbCcsIDApO1xuICAgIC8vIGNhbGN1bGF0ZSBmb3IgZWFjaCByb3dcbiAgICBsZXQgcm93cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0cicpO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcm93cy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIC8vIGZldGNoIHZhbHVlcyBmb3IgY2FsY3VsYXRpb25zXG4gICAgICAgIGxldCByZXF1ZXN0ID0gIFRhYmxlLkNlbGwuZ2V0VmFsdWUocm93c1tpXSwgJ3JlcXVlc3QnKTtcbiAgICAgICAgXG4gICAgICAgIC8vIHVwZGF0ZSBjb3VudGVyc1xuICAgICAgICBTaWRlYmFyLmluY3JlbWVudFN0YXQoJ2Jhc2VsaW5lLW5vbnBlcnNvbm5lbCcsIHJlcXVlc3QpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IHVwZGF0ZVBhZ2VTdGF0ZSB9IGZyb20gXCIuLi8uLi91dGlscy9kYXRhX3V0aWxzL2xvY2FsX3N0b3JhZ2VfaGFuZGxlcnMuanNcIjtcbmltcG9ydCB7IHByZXBhcmVQYWdlVmlldywgaW5pdGlhbGl6ZU5vbnBlcnNvbm5lbFRhYmxlIH0gZnJvbSBcIi4uLzA1X25vbnBlcnNvbm5lbC9oZWxwZXJzLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTm9ucGVyc29ubmVsUGFnZSgpe1xuXG4gICAgdXBkYXRlUGFnZVN0YXRlKCdub25wZXJzb25uZWwnKTtcbiAgICBwcmVwYXJlUGFnZVZpZXcoKTtcbiAgICBpbml0aWFsaXplTm9ucGVyc29ubmVsVGFibGUoKVxufVxuIiwiaW1wb3J0IHsgaW5pdGlhbGl6ZVdlbGNvbWVQYWdlIH0gZnJvbSAnLi8wMF93ZWxjb21lL21haW4uanMnO1xuaW1wb3J0IHsgY2xlYW5VcEluaXRpYXRpdmVzUGFnZSwgbG9hZE5ld0luaXRpYXRpdmVzIH0gZnJvbSAnLi8wNl9uZXdfaW5pdGlhdGl2ZXMvbWFpbi5qcydcbmltcG9ydCB7IGxvYWRSZXZlbnVlUGFnZSwgY2xlYW51cFJldmVudWVQYWdlIH0gZnJvbSAnLi8wM19yZXZlbnVlL21haW4uanMnXG5pbXBvcnQgeyBsb2FkUGVyc29ubmVsUGFnZSB9IGZyb20gJy4vMDRfcGVyc29ubmVsL21haW4uanMnO1xuaW1wb3J0IHsgbG9hZE9UUGFnZSB9IGZyb20gJy4vMDQuNV9PVC9tYWluLmpzJztcbmltcG9ydCB7IGxvYWROb25wZXJzb25uZWxQYWdlIH0gZnJvbSAnLi8wNV9ub25wZXJzb25uZWwvbWFpbi5qcyc7XG5pbXBvcnQgeyBsb2FkQmFzZWxpbmVMYW5kaW5nUGFnZSB9IGZyb20gJy4vMDJfYmFzZWxpbmVfbGFuZGluZ19wYWdlL21haW4uanMnO1xuaW1wb3J0IHsgY2xlYW5VcFN1bW1hcnlQYWdlLCBsb2FkU3VtbWFyeVBhZ2UgfSBmcm9tICcuLzA3X3N1bW1hcnkvbWFpbi5qcyc7XG5pbXBvcnQgeyBsb2FkVXBsb2FkUGFnZSB9IGZyb20gJy4vMDFfdXBsb2FkL21haW4uanMnO1xuaW1wb3J0IHsgcGF1c2VFeGVjdXRpb24gfSBmcm9tICcuLi91dGlscy9jb21tb25fdXRpbHMuanMnO1xuXG5pbXBvcnQgeyBsb2FkUGFnZVN0YXRlIH0gZnJvbSAnLi4vdXRpbHMvZGF0YV91dGlscy9sb2NhbF9zdG9yYWdlX2hhbmRsZXJzLmpzJztcblxuZXhwb3J0IGxldCBQQUdFUyA9IHtcbiAgICAnd2VsY29tZScgOiBpbml0aWFsaXplV2VsY29tZVBhZ2UsXG4gICAgJ3VwbG9hZCcgOiBsb2FkVXBsb2FkUGFnZSxcbiAgICAnYmFzZWxpbmUtbGFuZGluZycgOiBsb2FkQmFzZWxpbmVMYW5kaW5nUGFnZSxcbiAgICAncmV2ZW51ZScgOiBsb2FkUmV2ZW51ZVBhZ2UsXG4gICAgJ3BlcnNvbm5lbCcgOiBsb2FkUGVyc29ubmVsUGFnZSxcbiAgICAnb3ZlcnRpbWUnIDogbG9hZE9UUGFnZSxcbiAgICAnbm9ucGVyc29ubmVsJyA6IGxvYWROb25wZXJzb25uZWxQYWdlLFxuICAgICduZXctaW5pdHMnIDogbG9hZE5ld0luaXRpYXRpdmVzLFxuICAgICdzdW1tYXJ5JyA6IGxvYWRTdW1tYXJ5UGFnZSBcbn1cblxuZXhwb3J0IGxldCBDTEVBTlVQID0ge1xuICAgICduZXctaW5pdHMnIDogY2xlYW5VcEluaXRpYXRpdmVzUGFnZSxcbiAgICAncmV2ZW51ZScgOiBjbGVhbnVwUmV2ZW51ZVBhZ2UsXG4gICAgJ3N1bW1hcnknIDogY2xlYW5VcFN1bW1hcnlQYWdlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2aXNpdFBhZ2UobmV3X3BhZ2Vfa2V5KXtcbiAgICAvLyBjbGVhbiB1cCBmcm9tIGN1cnJlbnQgcGFnZVxuICAgIHZhciBwYWdlX3N0YXRlID0gbG9hZFBhZ2VTdGF0ZSgpO1xuICAgIGlmIChDTEVBTlVQW3BhZ2Vfc3RhdGVdKSB7IENMRUFOVVBbcGFnZV9zdGF0ZV0oKSB9O1xuICAgIC8vIFVzZSB0aGUgcGFnZV9zdGF0ZSB0byBhY2Nlc3MgYW5kIGNhbGwgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gZnJvbSBQQUdFU1xuICAgIGlmIChQQUdFU1tuZXdfcGFnZV9rZXldKSB7XG4gICAgICAgIFBBR0VTW25ld19wYWdlX2tleV0oKTsgLy8gSW52b2tlcyB0aGUgZnVuY3Rpb24gaWYgaXQgZXhpc3RzIGluIHRoZSBQQUdFUyBtYXBcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBObyBwYWdlIGluaXRpYWxpemVyIGZvdW5kIGZvciBzdGF0ZTogJHtuZXdfcGFnZV9rZXl9YCk7XG4gICAgfVxuICAgIFBBR0VTW25ld19wYWdlX2tleV0oKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5leHRQYWdlKCl7XG5cbiAgICB2YXIgcGFnZV9zdGF0ZSA9IGxvYWRQYWdlU3RhdGUoKTtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoUEFHRVMpO1xuICBcbiAgICAvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBrZXlcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSBrZXlzLmluZGV4T2YocGFnZV9zdGF0ZSk7XG5cbiAgICAvLyBjbGVhbiB1cCBjdXJyZW50IHBhZ2VcbiAgICBpZiAoQ0xFQU5VUFtwYWdlX3N0YXRlXSkgeyBDTEVBTlVQW3BhZ2Vfc3RhdGVdKCkgfTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIG5leHQga2V5XG4gICAgaWYgKGN1cnJlbnRJbmRleCA+PSAwICYmIGN1cnJlbnRJbmRleCA8IGtleXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAvLyBHZXQgdGhlIG5leHQga2V5XG4gICAgICAgIGNvbnN0IG5leHRLZXkgPSBrZXlzW2N1cnJlbnRJbmRleCArIDFdO1xuICAgICAgICAvLyBnbyB0byB0aGF0IHBhZ2VcbiAgICAgICAgdmlzaXRQYWdlKG5leHRLZXkpO1xuICAgIH0gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXN0UGFnZSgpe1xuXG4gICAgdmFyIHBhZ2Vfc3RhdGUgPSBsb2FkUGFnZVN0YXRlKCk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKFBBR0VTKTtcbiAgXG4gICAgLy8gRmluZCB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQga2V5XG4gICAgY29uc3QgY3VycmVudEluZGV4ID0ga2V5cy5pbmRleE9mKHBhZ2Vfc3RhdGUpO1xuXG4gICAgLy8gY2xlYW4gdXAgY3VycmVudCBwYWdlXG4gICAgaWYgKENMRUFOVVBbcGFnZV9zdGF0ZV0pIHsgQ0xFQU5VUFtwYWdlX3N0YXRlXSgpIH07XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYSBuZXh0IGtleVxuICAgIGlmIChjdXJyZW50SW5kZXggPj0gMSkge1xuICAgICAgICAvLyBHZXQgdGhlIG5leHQga2V5XG4gICAgICAgIGNvbnN0IGxhc3RLZXkgPSBrZXlzW2N1cnJlbnRJbmRleCAtIDFdO1xuICAgICAgICAvLyBnbyB0byB0aGF0IHBhZ2VcbiAgICAgICAgdmlzaXRQYWdlKGxhc3RLZXkpO1xuICAgIH0gXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXVzZUFuZENvbnRpbnVlKCl7XG4gICAgYXdhaXQgcGF1c2VFeGVjdXRpb24oMC41KTtcbiAgICBuZXh0UGFnZSgpO1xufSIsIi8vIGltcG9ydCBzdHlsZXNcbmltcG9ydCAnLi4vY3NzL2NvbW1vbi5jc3MnO1xuXG4vLyBpbXBvcnQgZnVuY3Rpb25zXG5pbXBvcnQgeyBsb2FkUGFnZVN0YXRlIH0gZnJvbSAnLi91dGlscy9kYXRhX3V0aWxzL2xvY2FsX3N0b3JhZ2VfaGFuZGxlcnMuanMnXG5pbXBvcnQgeyB2aXNpdFBhZ2UgfSBmcm9tICcuL3ZpZXdzL3ZpZXdfbG9naWMuanMnXG5cbi8vIHBhdGggZm9yIG15IGxhcHRvcFxuLy8gZXhwb3J0IGxldCBEQVRBX1JPT1QgPSAnLi4vLi4vLi4vZGF0YS9sYXdfZGVwdF9zYW1wbGUvJ1xuLy8gZ2l0aHViIHBhdGhcbmV4cG9ydCBsZXQgREFUQV9ST09UID0gJy4uLy4uL2J1ZGdldC1yZXF1ZXN0LWRlbW8vZGF0YS9sYXdfZGVwdF9zYW1wbGUvJ1xuXG5leHBvcnQgbGV0IFJFVkVOVUUgPSAwO1xuZXhwb3J0IGxldCBUQVJHRVQgPSAyMDAwMDAwO1xuZXhwb3J0IHZhciBGSVNDQUxfWUVBUiA9ICcyNic7XG5cbi8vIHZhcmlhYmxlcyBvbiB0aGUgc2FsYXJ5IFxuZXhwb3J0IHZhciBmcmluZ2UgPSAwLjM2XG5leHBvcnQgdmFyIGNvbGEgPSAwLjAyXG5leHBvcnQgdmFyIG1lcml0ID0gMC4wMlxuXG5cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhZ2Vfc3RhdGUgPSBsb2FkUGFnZVN0YXRlKCk7XG4gICAgdmlzaXRQYWdlKHBhZ2Vfc3RhdGUpO1xufSk7XG5cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///496\n")},404:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `:root {\n /* colors */\n --orange: #FB6523;\n --yellow: #D99733;\n --blue: #43748E;\n --lightBlue: #b7c9e2;\n --darkGray: #373A37;\n --lightGray: #F2F2F2;\n --white: #FBFDFB;\n --black: #212121;\n --green: #71BC78;\n --citygreen: #004445;\n --spiritgreen: #279989;\n --palegreen: #9FD5B3;\n --verypalegreen: #DFF5E3;\n --accentyellow: #feb70d;\n --nearblack: #18252a;\n /* fonts */\n font-family: \'Nunito\', sans-serif;\n font-size: 14px;\n /* spacing */\n --header-height : 125px;\n --sidebar-width: 250px;\n}\n\n/* Button styling */\n\n.btn {\n cursor: pointer;\n padding: 10px;\n margin-top: 5px;\n margin-right : 2px;\n margin-left: 2px;\n border-radius: 10px;\n background-color: gray;\n color: white; \n}\n\n/* Font application for all text */\nbody, button, input, textarea, select, .sidebar, table {\n font-family: var(--font-family), sans-serif;\n }\n\n#main-panel {\n /* display: flex; */\n /* flex-direction: column; */\n justify-content: center; /* This will center content vertically */\n min-height: calc(100vh - var(--header-height)) ; \n /* max-width: calc(100vw - var(--sidebar-width)); */\n padding-top: 25px;\n padding-bottom: 25px;\n margin: 0;\n}\n\ndiv.row {\n margin: 0px;\n}`, "",{"version":3,"sources":["webpack://./src/css/common.css"],"names":[],"mappings":"AAAA;IACI,WAAW;IACX,iBAAiB;IACjB,iBAAiB;IACjB,eAAe;IACf,oBAAoB;IACpB,mBAAmB;IACnB,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,oBAAoB;IACpB,sBAAsB;IACtB,oBAAoB;IACpB,wBAAwB;IACxB,uBAAuB;IACvB,oBAAoB;IACpB,UAAU;IACV,iCAAiC;IACjC,eAAe;IACf,YAAY;IACZ,uBAAuB;IACvB,sBAAsB;AAC1B;;AAEA,mBAAmB;;AAEnB;IACI,eAAe;IACf,aAAa;IACb,eAAe;IACf,kBAAkB;IAClB,gBAAgB;IAChB,mBAAmB;IACnB,sBAAsB;IACtB,YAAY;AAChB;;AAEA,mCAAmC;AACnC;IACI,2CAA2C;EAC7C;;AAEF;IACI,mBAAmB;IACnB,4BAA4B;IAC5B,uBAAuB,EAAE,wCAAwC;IACjE,+CAA+C;IAC/C,oDAAoD;IACpD,iBAAiB;IACjB,oBAAoB;IACpB,SAAS;AACb;;AAEA;IACI,WAAW;AACf","sourcesContent":[":root {\\n /* colors */\\n --orange: #FB6523;\\n --yellow: #D99733;\\n --blue: #43748E;\\n --lightBlue: #b7c9e2;\\n --darkGray: #373A37;\\n --lightGray: #F2F2F2;\\n --white: #FBFDFB;\\n --black: #212121;\\n --green: #71BC78;\\n --citygreen: #004445;\\n --spiritgreen: #279989;\\n --palegreen: #9FD5B3;\\n --verypalegreen: #DFF5E3;\\n --accentyellow: #feb70d;\\n --nearblack: #18252a;\\n /* fonts */\\n font-family: \'Nunito\', sans-serif;\\n font-size: 14px;\\n /* spacing */\\n --header-height : 125px;\\n --sidebar-width: 250px;\\n}\\n\\n/* Button styling */\\n\\n.btn {\\n cursor: pointer;\\n padding: 10px;\\n margin-top: 5px;\\n margin-right : 2px;\\n margin-left: 2px;\\n border-radius: 10px;\\n background-color: gray;\\n color: white; \\n}\\n\\n/* Font application for all text */\\nbody, button, input, textarea, select, .sidebar, table {\\n font-family: var(--font-family), sans-serif;\\n }\\n\\n#main-panel {\\n /* display: flex; */\\n /* flex-direction: column; */\\n justify-content: center; /* This will center content vertically */\\n min-height: calc(100vh - var(--header-height)) ; \\n /* max-width: calc(100vw - var(--sidebar-width)); */\\n padding-top: 25px;\\n padding-bottom: 25px;\\n margin: 0;\\n}\\n\\ndiv.row {\\n margin: 0px;\\n}"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDA0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvY3NzL2NvbW1vbi5jc3M/ZjdjYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgOnJvb3Qge1xuICAgIC8qIGNvbG9ycyAqL1xuICAgIC0tb3JhbmdlOiAjRkI2NTIzO1xuICAgIC0teWVsbG93OiAjRDk5NzMzO1xuICAgIC0tYmx1ZTogIzQzNzQ4RTtcbiAgICAtLWxpZ2h0Qmx1ZTogI2I3YzllMjtcbiAgICAtLWRhcmtHcmF5OiAjMzczQTM3O1xuICAgIC0tbGlnaHRHcmF5OiAjRjJGMkYyO1xuICAgIC0td2hpdGU6ICNGQkZERkI7XG4gICAgLS1ibGFjazogIzIxMjEyMTtcbiAgICAtLWdyZWVuOiAjNzFCQzc4O1xuICAgIC0tY2l0eWdyZWVuOiAjMDA0NDQ1O1xuICAgIC0tc3Bpcml0Z3JlZW46ICMyNzk5ODk7XG4gICAgLS1wYWxlZ3JlZW46ICM5RkQ1QjM7XG4gICAgLS12ZXJ5cGFsZWdyZWVuOiAjREZGNUUzO1xuICAgIC0tYWNjZW50eWVsbG93OiAjZmViNzBkO1xuICAgIC0tbmVhcmJsYWNrOiAjMTgyNTJhO1xuICAgIC8qIGZvbnRzICovXG4gICAgZm9udC1mYW1pbHk6ICdOdW5pdG8nLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAvKiBzcGFjaW5nICovXG4gICAgLS1oZWFkZXItaGVpZ2h0IDogMTI1cHg7XG4gICAgLS1zaWRlYmFyLXdpZHRoOiAyNTBweDtcbn1cblxuLyogQnV0dG9uIHN0eWxpbmcgKi9cblxuLmJ0biB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgbWFyZ2luLXRvcDogNXB4O1xuICAgIG1hcmdpbi1yaWdodCA6IDJweDtcbiAgICBtYXJnaW4tbGVmdDogMnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogZ3JheTtcbiAgICBjb2xvcjogd2hpdGU7IFxufVxuXG4vKiBGb250IGFwcGxpY2F0aW9uIGZvciBhbGwgdGV4dCAgKi9cbmJvZHksIGJ1dHRvbiwgaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIC5zaWRlYmFyLCB0YWJsZSB7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5KSwgc2Fucy1zZXJpZjtcbiAgfVxuXG4jbWFpbi1wYW5lbCB7XG4gICAgLyogZGlzcGxheTogZmxleDsgKi9cbiAgICAvKiBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyAqL1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOyAvKiBUaGlzIHdpbGwgY2VudGVyIGNvbnRlbnQgdmVydGljYWxseSAqL1xuICAgIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggLSB2YXIoLS1oZWFkZXItaGVpZ2h0KSkgOyBcbiAgICAvKiBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSB2YXIoLS1zaWRlYmFyLXdpZHRoKSk7ICAqL1xuICAgIHBhZGRpbmctdG9wOiAyNXB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAyNXB4O1xuICAgIG1hcmdpbjogMDtcbn1cblxuZGl2LnJvdyB7XG4gICAgbWFyZ2luOiAwcHg7XG59YCwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zcmMvY3NzL2NvbW1vbi5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7SUFDSSxXQUFXO0lBQ1gsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2Ysb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsb0JBQW9CO0lBQ3BCLHNCQUFzQjtJQUN0QixvQkFBb0I7SUFDcEIsd0JBQXdCO0lBQ3hCLHVCQUF1QjtJQUN2QixvQkFBb0I7SUFDcEIsVUFBVTtJQUNWLGlDQUFpQztJQUNqQyxlQUFlO0lBQ2YsWUFBWTtJQUNaLHVCQUF1QjtJQUN2QixzQkFBc0I7QUFDMUI7O0FBRUEsbUJBQW1COztBQUVuQjtJQUNJLGVBQWU7SUFDZixhQUFhO0lBQ2IsZUFBZTtJQUNmLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLHNCQUFzQjtJQUN0QixZQUFZO0FBQ2hCOztBQUVBLG1DQUFtQztBQUNuQztJQUNJLDJDQUEyQztFQUM3Qzs7QUFFRjtJQUNJLG1CQUFtQjtJQUNuQiw0QkFBNEI7SUFDNUIsdUJBQXVCLEVBQUUsd0NBQXdDO0lBQ2pFLCtDQUErQztJQUMvQyxvREFBb0Q7SUFDcEQsaUJBQWlCO0lBQ2pCLG9CQUFvQjtJQUNwQixTQUFTO0FBQ2I7O0FBRUE7SUFDSSxXQUFXO0FBQ2ZcIixcInNvdXJjZXNDb250ZW50XCI6W1wiOnJvb3Qge1xcbiAgICAvKiBjb2xvcnMgKi9cXG4gICAgLS1vcmFuZ2U6ICNGQjY1MjM7XFxuICAgIC0teWVsbG93OiAjRDk5NzMzO1xcbiAgICAtLWJsdWU6ICM0Mzc0OEU7XFxuICAgIC0tbGlnaHRCbHVlOiAjYjdjOWUyO1xcbiAgICAtLWRhcmtHcmF5OiAjMzczQTM3O1xcbiAgICAtLWxpZ2h0R3JheTogI0YyRjJGMjtcXG4gICAgLS13aGl0ZTogI0ZCRkRGQjtcXG4gICAgLS1ibGFjazogIzIxMjEyMTtcXG4gICAgLS1ncmVlbjogIzcxQkM3ODtcXG4gICAgLS1jaXR5Z3JlZW46ICMwMDQ0NDU7XFxuICAgIC0tc3Bpcml0Z3JlZW46ICMyNzk5ODk7XFxuICAgIC0tcGFsZWdyZWVuOiAjOUZENUIzO1xcbiAgICAtLXZlcnlwYWxlZ3JlZW46ICNERkY1RTM7XFxuICAgIC0tYWNjZW50eWVsbG93OiAjZmViNzBkO1xcbiAgICAtLW5lYXJibGFjazogIzE4MjUyYTtcXG4gICAgLyogZm9udHMgKi9cXG4gICAgZm9udC1mYW1pbHk6ICdOdW5pdG8nLCBzYW5zLXNlcmlmO1xcbiAgICBmb250LXNpemU6IDE0cHg7XFxuICAgIC8qIHNwYWNpbmcgKi9cXG4gICAgLS1oZWFkZXItaGVpZ2h0IDogMTI1cHg7XFxuICAgIC0tc2lkZWJhci13aWR0aDogMjUwcHg7XFxufVxcblxcbi8qIEJ1dHRvbiBzdHlsaW5nICovXFxuXFxuLmJ0biB7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgcGFkZGluZzogMTBweDtcXG4gICAgbWFyZ2luLXRvcDogNXB4O1xcbiAgICBtYXJnaW4tcmlnaHQgOiAycHg7XFxuICAgIG1hcmdpbi1sZWZ0OiAycHg7XFxuICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IGdyYXk7XFxuICAgIGNvbG9yOiB3aGl0ZTsgXFxufVxcblxcbi8qIEZvbnQgYXBwbGljYXRpb24gZm9yIGFsbCB0ZXh0ICAqL1xcbmJvZHksIGJ1dHRvbiwgaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIC5zaWRlYmFyLCB0YWJsZSB7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseSksIHNhbnMtc2VyaWY7XFxuICB9XFxuXFxuI21haW4tcGFuZWwge1xcbiAgICAvKiBkaXNwbGF5OiBmbGV4OyAqL1xcbiAgICAvKiBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyAqL1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgLyogVGhpcyB3aWxsIGNlbnRlciBjb250ZW50IHZlcnRpY2FsbHkgKi9cXG4gICAgbWluLWhlaWdodDogY2FsYygxMDB2aCAtIHZhcigtLWhlYWRlci1oZWlnaHQpKSA7IFxcbiAgICAvKiBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSB2YXIoLS1zaWRlYmFyLXdpZHRoKSk7ICAqL1xcbiAgICBwYWRkaW5nLXRvcDogMjVweDtcXG4gICAgcGFkZGluZy1ib3R0b206IDI1cHg7XFxuICAgIG1hcmdpbjogMDtcXG59XFxuXFxuZGl2LnJvdyB7XFxuICAgIG1hcmdpbjogMHB4O1xcbn1cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///404\n')},9:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `body {\n background-color: var(--lightGray);\n margin: 0;\n}`, "",{"version":3,"sources":["webpack://./src/js/components/body/body.css"],"names":[],"mappings":"AAAA;IACI,kCAAkC;IAClC,SAAS;AACb","sourcesContent":["body {\\n background-color: var(--lightGray);\\n margin: 0;\\n}"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy9ib2R5L2JvZHkuY3NzPzM2ZTAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYGJvZHkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWxpZ2h0R3JheSk7XG4gICAgbWFyZ2luOiAwO1xufWAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL2pzL2NvbXBvbmVudHMvYm9keS9ib2R5LmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtJQUNJLGtDQUFrQztJQUNsQyxTQUFTO0FBQ2JcIixcInNvdXJjZXNDb250ZW50XCI6W1wiYm9keSB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWxpZ2h0R3JheSk7XFxuICAgIG1hcmdpbjogMDtcXG59XCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9\n')},109:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `textarea {height: 100px; width: 100%;}\n\ntextarea, input {\n margin-bottom: 20px;\n}\n\n.btn-submit {\n margin-top: 20px;\n width: 60%;\n margin-left: 20%;\n background-color: var(--spiritgreen);\n}`, "",{"version":3,"sources":["webpack://./src/js/components/form/form.css"],"names":[],"mappings":"AAAA,UAAU,aAAa,EAAE,WAAW,CAAC;;AAErC;IACI,mBAAmB;AACvB;;AAEA;IACI,gBAAgB;IAChB,UAAU;IACV,gBAAgB;IAChB,oCAAoC;AACxC","sourcesContent":["textarea {height: 100px; width: 100%;}\\n\\ntextarea, input {\\n margin-bottom: 20px;\\n}\\n\\n.btn-submit {\\n margin-top: 20px;\\n width: 60%;\\n margin-left: 20%;\\n background-color: var(--spiritgreen);\\n}"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA5LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy9mb3JtL2Zvcm0uY3NzP2UzOGEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYHRleHRhcmVhIHtoZWlnaHQ6IDEwMHB4OyB3aWR0aDogMTAwJTt9XG5cbnRleHRhcmVhLCBpbnB1dCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuLmJ0bi1zdWJtaXQge1xuICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgd2lkdGg6IDYwJTtcbiAgICBtYXJnaW4tbGVmdDogMjAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNwaXJpdGdyZWVuKTtcbn1gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3NyYy9qcy9jb21wb25lbnRzL2Zvcm0vZm9ybS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUEsVUFBVSxhQUFhLEVBQUUsV0FBVyxDQUFDOztBQUVyQztJQUNJLG1CQUFtQjtBQUN2Qjs7QUFFQTtJQUNJLGdCQUFnQjtJQUNoQixVQUFVO0lBQ1YsZ0JBQWdCO0lBQ2hCLG9DQUFvQztBQUN4Q1wiLFwic291cmNlc0NvbnRlbnRcIjpbXCJ0ZXh0YXJlYSB7aGVpZ2h0OiAxMDBweDsgd2lkdGg6IDEwMCU7fVxcblxcbnRleHRhcmVhLCBpbnB1dCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XFxufVxcblxcbi5idG4tc3VibWl0IHtcXG4gICAgbWFyZ2luLXRvcDogMjBweDtcXG4gICAgd2lkdGg6IDYwJTtcXG4gICAgbWFyZ2luLWxlZnQ6IDIwJTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc3Bpcml0Z3JlZW4pO1xcbn1cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///109\n')},107:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\nh1 {\n text-align: center;\n}\n\nh2 {\n color: var(--darkGray);\n text-align: center;\n}\n\nheader {\n align-items: center;\n background-color: white;\n padding: 5px;\n border-bottom: 1px solid var(--citygreen); \n /* border: 1px solid var(--citygreen); */\n height: var(--header-height);\n /* width: calc(100vw - var(--sidebar-width)); */\n padding-left: 20px;\n}\n\n/* Logo styling */\n#logo {\n height: 50px; /* Or your desired size */\n margin-right: 20px; /* Optional: space between logo and title */\n margin-bottom: -50px;\n margin-top: 20px;\n}`, "",{"version":3,"sources":["webpack://./src/js/components/header/header.css"],"names":[],"mappings":";AACA;IACI,kBAAkB;AACtB;;AAEA;IACI,sBAAsB;IACtB,kBAAkB;AACtB;;AAEA;IACI,mBAAmB;IACnB,uBAAuB;IACvB,YAAY;IACZ,yCAAyC;IACzC,yCAAyC;IACzC,4BAA4B;IAC5B,+CAA+C;IAC/C,kBAAkB;AACtB;;AAEA,iBAAiB;AACjB;IACI,YAAY,EAAE,yBAAyB;IACvC,kBAAkB,EAAE,2CAA2C;IAC/D,oBAAoB;IACpB,gBAAgB;AACpB","sourcesContent":["\\nh1 {\\n text-align: center;\\n}\\n\\nh2 {\\n color: var(--darkGray);\\n text-align: center;\\n}\\n\\nheader {\\n align-items: center;\\n background-color: white;\\n padding: 5px;\\n border-bottom: 1px solid var(--citygreen); \\n /* border: 1px solid var(--citygreen); */\\n height: var(--header-height);\\n /* width: calc(100vw - var(--sidebar-width)); */\\n padding-left: 20px;\\n}\\n\\n/* Logo styling */\\n#logo {\\n height: 50px; /* Or your desired size */\\n margin-right: 20px; /* Optional: space between logo and title */\\n margin-bottom: -50px;\\n margin-top: 20px;\\n}"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA3LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIuY3NzPzJmNGMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYFxuaDEge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuaDIge1xuICAgIGNvbG9yOiB2YXIoLS1kYXJrR3JheSk7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5oZWFkZXIge1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgcGFkZGluZzogNXB4O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jaXR5Z3JlZW4pOyBcbiAgICAvKiBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jaXR5Z3JlZW4pOyAgKi9cbiAgICBoZWlnaHQ6IHZhcigtLWhlYWRlci1oZWlnaHQpO1xuICAgIC8qIHdpZHRoOiBjYWxjKDEwMHZ3IC0gdmFyKC0tc2lkZWJhci13aWR0aCkpOyAqL1xuICAgIHBhZGRpbmctbGVmdDogMjBweDtcbn1cblxuLyogTG9nbyBzdHlsaW5nICovXG4jbG9nbyB7XG4gICAgaGVpZ2h0OiA1MHB4OyAvKiBPciB5b3VyIGRlc2lyZWQgc2l6ZSAqL1xuICAgIG1hcmdpbi1yaWdodDogMjBweDsgLyogT3B0aW9uYWw6IHNwYWNlIGJldHdlZW4gbG9nbyBhbmQgdGl0bGUgKi9cbiAgICBtYXJnaW4tYm90dG9tOiAtNTBweDtcbiAgICBtYXJnaW4tdG9wOiAyMHB4O1xufWAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL2pzL2NvbXBvbmVudHMvaGVhZGVyL2hlYWRlci5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIjtBQUNBO0lBQ0ksa0JBQWtCO0FBQ3RCOztBQUVBO0lBQ0ksc0JBQXNCO0lBQ3RCLGtCQUFrQjtBQUN0Qjs7QUFFQTtJQUNJLG1CQUFtQjtJQUNuQix1QkFBdUI7SUFDdkIsWUFBWTtJQUNaLHlDQUF5QztJQUN6Qyx5Q0FBeUM7SUFDekMsNEJBQTRCO0lBQzVCLCtDQUErQztJQUMvQyxrQkFBa0I7QUFDdEI7O0FBRUEsaUJBQWlCO0FBQ2pCO0lBQ0ksWUFBWSxFQUFFLHlCQUF5QjtJQUN2QyxrQkFBa0IsRUFBRSwyQ0FBMkM7SUFDL0Qsb0JBQW9CO0lBQ3BCLGdCQUFnQjtBQUNwQlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG5oMSB7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuaDIge1xcbiAgICBjb2xvcjogdmFyKC0tZGFya0dyYXkpO1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbmhlYWRlciB7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xcbiAgICBwYWRkaW5nOiA1cHg7XFxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jaXR5Z3JlZW4pOyBcXG4gICAgLyogYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY2l0eWdyZWVuKTsgICovXFxuICAgIGhlaWdodDogdmFyKC0taGVhZGVyLWhlaWdodCk7XFxuICAgIC8qIHdpZHRoOiBjYWxjKDEwMHZ3IC0gdmFyKC0tc2lkZWJhci13aWR0aCkpOyAqL1xcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XFxufVxcblxcbi8qIExvZ28gc3R5bGluZyAqL1xcbiNsb2dvIHtcXG4gICAgaGVpZ2h0OiA1MHB4OyAvKiBPciB5b3VyIGRlc2lyZWQgc2l6ZSAqL1xcbiAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7IC8qIE9wdGlvbmFsOiBzcGFjZSBiZXR3ZWVuIGxvZ28gYW5kIHRpdGxlICovXFxuICAgIG1hcmdpbi1ib3R0b206IC01MHB4O1xcbiAgICBtYXJnaW4tdG9wOiAyMHB4O1xcbn1cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///107\n')},95:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, ``, "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvbW9kYWwvbW9kYWwuY3NzPzZhY2QiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYGAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W10sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIlwiLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///95\n')},595:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `#nav-btns {\n margin: 20px;\n text-align: center;\n /* margin-top: 100px; */\n /* position: absolute; or \'absolute\' depending on use-case */\n /* top: 100px; Distance from the top of the viewport or the closest positioned ancestor */\n}\n\n#btn-next, #btn-last {\n background-color: var(--darkGray);\n}\n\n#btn-next:hover, #btn-last:hover {\n background-color: var(--yellow);\n color: var(--darkGray);\n}\n\n/* Add style for when you cannot click the next button */\n#btn-next.disabled, #btn-last.disabled,\n#btn-next.disabled:hover, #btn-last.disabled:hover {\n background-color: gray;\n color: white;\n pointer-events: none;\n}`, "",{"version":3,"sources":["webpack://./src/js/components/nav_buttons/nav_buttons.css"],"names":[],"mappings":"AAAA;IACI,YAAY;IACZ,kBAAkB;IAClB,uBAAuB;IACvB,4DAA4D;IAC5D,yFAAyF;AAC7F;;AAEA;IACI,iCAAiC;AACrC;;AAEA;IACI,+BAA+B;IAC/B,sBAAsB;AAC1B;;AAEA,wDAAwD;AACxD;;IAEI,sBAAsB;IACtB,YAAY;IACZ,oBAAoB;AACxB","sourcesContent":["#nav-btns {\\n margin: 20px;\\n text-align: center;\\n /* margin-top: 100px; */\\n /* position: absolute; or \'absolute\' depending on use-case */\\n /* top: 100px; Distance from the top of the viewport or the closest positioned ancestor */\\n}\\n\\n#btn-next, #btn-last {\\n background-color: var(--darkGray);\\n}\\n\\n#btn-next:hover, #btn-last:hover {\\n background-color: var(--yellow);\\n color: var(--darkGray);\\n}\\n\\n/* Add style for when you cannot click the next button */\\n#btn-next.disabled, #btn-last.disabled,\\n#btn-next.disabled:hover, #btn-last.disabled:hover {\\n background-color: gray;\\n color: white;\\n pointer-events: none;\\n}"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTk1LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy9uYXZfYnV0dG9ucy9uYXZfYnV0dG9ucy5jc3M/OTA1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgI25hdi1idG5zIHtcbiAgICBtYXJnaW46IDIwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIC8qIG1hcmdpbi10b3A6IDEwMHB4OyAqL1xuICAgIC8qIHBvc2l0aW9uOiBhYnNvbHV0ZTsgb3IgJ2Fic29sdXRlJyBkZXBlbmRpbmcgb24gdXNlLWNhc2UgKi9cbiAgICAvKiB0b3A6IDEwMHB4OyBEaXN0YW5jZSBmcm9tIHRoZSB0b3Agb2YgdGhlIHZpZXdwb3J0IG9yIHRoZSBjbG9zZXN0IHBvc2l0aW9uZWQgYW5jZXN0b3IgKi9cbn1cblxuI2J0bi1uZXh0LCAjYnRuLWxhc3Qge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRhcmtHcmF5KTtcbn1cblxuI2J0bi1uZXh0OmhvdmVyLCAjYnRuLWxhc3Q6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXllbGxvdyk7XG4gICAgY29sb3I6IHZhcigtLWRhcmtHcmF5KTtcbn1cblxuLyogQWRkIHN0eWxlIGZvciB3aGVuIHlvdSBjYW5ub3QgY2xpY2sgdGhlIG5leHQgYnV0dG9uICovXG4jYnRuLW5leHQuZGlzYWJsZWQsICNidG4tbGFzdC5kaXNhYmxlZCxcbiNidG4tbmV4dC5kaXNhYmxlZDpob3ZlciwgI2J0bi1sYXN0LmRpc2FibGVkOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmF5O1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3NyYy9qcy9jb21wb25lbnRzL25hdl9idXR0b25zL25hdl9idXR0b25zLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtJQUNJLFlBQVk7SUFDWixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLDREQUE0RDtJQUM1RCx5RkFBeUY7QUFDN0Y7O0FBRUE7SUFDSSxpQ0FBaUM7QUFDckM7O0FBRUE7SUFDSSwrQkFBK0I7SUFDL0Isc0JBQXNCO0FBQzFCOztBQUVBLHdEQUF3RDtBQUN4RDs7SUFFSSxzQkFBc0I7SUFDdEIsWUFBWTtJQUNaLG9CQUFvQjtBQUN4QlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIjbmF2LWJ0bnMge1xcbiAgICBtYXJnaW46IDIwcHg7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgLyogbWFyZ2luLXRvcDogMTAwcHg7ICovXFxuICAgIC8qIHBvc2l0aW9uOiBhYnNvbHV0ZTsgb3IgJ2Fic29sdXRlJyBkZXBlbmRpbmcgb24gdXNlLWNhc2UgKi9cXG4gICAgLyogdG9wOiAxMDBweDsgRGlzdGFuY2UgZnJvbSB0aGUgdG9wIG9mIHRoZSB2aWV3cG9ydCBvciB0aGUgY2xvc2VzdCBwb3NpdGlvbmVkIGFuY2VzdG9yICovXFxufVxcblxcbiNidG4tbmV4dCwgI2J0bi1sYXN0IHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGFya0dyYXkpO1xcbn1cXG5cXG4jYnRuLW5leHQ6aG92ZXIsICNidG4tbGFzdDpob3ZlciB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXllbGxvdyk7XFxuICAgIGNvbG9yOiB2YXIoLS1kYXJrR3JheSk7XFxufVxcblxcbi8qIEFkZCBzdHlsZSBmb3Igd2hlbiB5b3UgY2Fubm90IGNsaWNrIHRoZSBuZXh0IGJ1dHRvbiAqL1xcbiNidG4tbmV4dC5kaXNhYmxlZCwgI2J0bi1sYXN0LmRpc2FibGVkLFxcbiNidG4tbmV4dC5kaXNhYmxlZDpob3ZlciwgI2J0bi1sYXN0LmRpc2FibGVkOmhvdmVyIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogZ3JheTtcXG4gICAgY29sb3I6IHdoaXRlO1xcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///595\n')},225:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `#prompt-div {\n display: none;\n text-align: center;\n width: 80%;\n margin: auto;\n}\n\nh3#prompt {\n text-align: center;\n font-size : 1.5em;\n}\n\n#option1, #option2 { \n font-size: 1.5em;\n border-color: var(--citygreen); \n border-width: 2px;\n background-color: var(--white);\n color: var(--citygreen);\n}\n\n#option1:hover, #option2:hover { \n background-color: var(--spiritgreen);\n color: white;\n}\n\n#option2.clicked, #option1.clicked {\n font-weight: bold;\n background-color: var(--spiritgreen);\n color: white;\n border-width: 3;\n}\n`, "",{"version":3,"sources":["webpack://./src/js/components/prompt/prompt.css"],"names":[],"mappings":"AAAA;IACI,aAAa;IACb,kBAAkB;IAClB,UAAU;IACV,YAAY;AAChB;;AAEA;IACI,kBAAkB;IAClB,iBAAiB;AACrB;;AAEA;IACI,gBAAgB;IAChB,8BAA8B;IAC9B,iBAAiB;IACjB,8BAA8B;IAC9B,uBAAuB;AAC3B;;AAEA;IACI,oCAAoC;IACpC,YAAY;AAChB;;AAEA;IACI,iBAAiB;IACjB,oCAAoC;IACpC,YAAY;IACZ,eAAe;AACnB","sourcesContent":["#prompt-div {\\n display: none;\\n text-align: center;\\n width: 80%;\\n margin: auto;\\n}\\n\\nh3#prompt {\\n text-align: center;\\n font-size : 1.5em;\\n}\\n\\n#option1, #option2 { \\n font-size: 1.5em;\\n border-color: var(--citygreen); \\n border-width: 2px;\\n background-color: var(--white);\\n color: var(--citygreen);\\n}\\n\\n#option1:hover, #option2:hover { \\n background-color: var(--spiritgreen);\\n color: white;\\n}\\n\\n#option2.clicked, #option1.clicked {\\n font-weight: bold;\\n background-color: var(--spiritgreen);\\n color: white;\\n border-width: 3;\\n}\\n"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjI1LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvcHJvbXB0L3Byb21wdC5jc3M/ZTY5OSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgI3Byb21wdC1kaXYge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHdpZHRoOiA4MCU7XG4gICAgbWFyZ2luOiBhdXRvO1xufVxuXG5oMyNwcm9tcHQge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LXNpemUgOiAxLjVlbTtcbn1cblxuI29wdGlvbjEsICNvcHRpb24yIHsgXG4gICAgZm9udC1zaXplOiAxLjVlbTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNpdHlncmVlbik7IFxuICAgIGJvcmRlci13aWR0aDogMnB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcbiAgICBjb2xvcjogdmFyKC0tY2l0eWdyZWVuKTtcbn1cblxuI29wdGlvbjE6aG92ZXIsICNvcHRpb24yOmhvdmVyIHsgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc3Bpcml0Z3JlZW4pO1xuICAgIGNvbG9yOiB3aGl0ZTtcbn1cblxuI29wdGlvbjIuY2xpY2tlZCwgI29wdGlvbjEuY2xpY2tlZCB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc3Bpcml0Z3JlZW4pO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBib3JkZXItd2lkdGg6IDM7XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3NyYy9qcy9jb21wb25lbnRzL3Byb21wdC9wcm9tcHQuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0lBQ0ksYUFBYTtJQUNiLGtCQUFrQjtJQUNsQixVQUFVO0lBQ1YsWUFBWTtBQUNoQjs7QUFFQTtJQUNJLGtCQUFrQjtJQUNsQixpQkFBaUI7QUFDckI7O0FBRUE7SUFDSSxnQkFBZ0I7SUFDaEIsOEJBQThCO0lBQzlCLGlCQUFpQjtJQUNqQiw4QkFBOEI7SUFDOUIsdUJBQXVCO0FBQzNCOztBQUVBO0lBQ0ksb0NBQW9DO0lBQ3BDLFlBQVk7QUFDaEI7O0FBRUE7SUFDSSxpQkFBaUI7SUFDakIsb0NBQW9DO0lBQ3BDLFlBQVk7SUFDWixlQUFlO0FBQ25CXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIiNwcm9tcHQtZGl2IHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICB3aWR0aDogODAlO1xcbiAgICBtYXJnaW46IGF1dG87XFxufVxcblxcbmgzI3Byb21wdCB7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgZm9udC1zaXplIDogMS41ZW07XFxufVxcblxcbiNvcHRpb24xLCAjb3B0aW9uMiB7IFxcbiAgICBmb250LXNpemU6IDEuNWVtO1xcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNpdHlncmVlbik7IFxcbiAgICBib3JkZXItd2lkdGg6IDJweDtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbiAgICBjb2xvcjogdmFyKC0tY2l0eWdyZWVuKTtcXG59XFxuXFxuI29wdGlvbjE6aG92ZXIsICNvcHRpb24yOmhvdmVyIHsgXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNwaXJpdGdyZWVuKTtcXG4gICAgY29sb3I6IHdoaXRlO1xcbn1cXG5cXG4jb3B0aW9uMi5jbGlja2VkLCAjb3B0aW9uMS5jbGlja2VkIHtcXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNwaXJpdGdyZWVuKTtcXG4gICAgY29sb3I6IHdoaXRlO1xcbiAgICBib3JkZXItd2lkdGg6IDM7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///225\n')},263:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `#sidebar-panel {\n background-color: lightgrey; \n /* min-height: 100vh; Full height of viewport */\n }\n\n#supp-total .stat {\n color: var(--yellow);\n}\n\n.stat {\n font-weight: bold;\n}\n\n#sidebar-panel {\n height: 100%; /* Full height of the viewport */\n position: fixed; /* Fixed Sidebar (stay in place on scroll) */\n z-index: 1; /* Stay on top */\n top: 0; /* Stay at the top */\n right: 0; /* Sidebar appears on the left */\n background-color: #FFFFFF; /* White background color */\n overflow-x: hidden; /* Disable horizontal scroll */\n padding: 20px;\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); /* Add shadow for some depth */\n border-right: 2px solid #DDDDDD; /* Right border */\n border-radius: 15px 0px 0px 15px; /* Rounded corners on the left */\n /* margin-top: var(--header-height); */\n width: var(--sidebar-width);\n margin: 0px;\n }\n \n.sidebar a {\n padding: 10px 15px;\n text-decoration: none;\n font-size: 18px;\n color: #818181;\n display: block;\n transition: 0.3s;\n}\n\n#sidebar-title {\n color: var(--darkGray);\n font-weight: bold;\n border-bottom: 1px solid var(--citygreen);\n}`, "",{"version":3,"sources":["webpack://./src/js/components/sidebar/sidebar.css"],"names":[],"mappings":"AAAA;IACI,2BAA2B;IAC3B,+CAA+C;EACjD;;AAEF;IACI,oBAAoB;AACxB;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,YAAY,EAAE,gCAAgC;IAC9C,eAAe,EAAE,4CAA4C;IAC7D,UAAU,EAAE,gBAAgB;IAC5B,MAAM,EAAE,oBAAoB;IAC5B,QAAQ,EAAE,gCAAgC;IAC1C,yBAAyB,EAAE,2BAA2B;IACtD,kBAAkB,EAAE,8BAA8B;IAClD,aAAa;IACb,wCAAwC,EAAE,8BAA8B;IACxE,+BAA+B,EAAE,iBAAiB;IAClD,gCAAgC,EAAE,gCAAgC;IAClE,sCAAsC;IACtC,2BAA2B;IAC3B,WAAW;EACb;;AAEF;IACI,kBAAkB;IAClB,qBAAqB;IACrB,eAAe;IACf,cAAc;IACd,cAAc;IACd,gBAAgB;AACpB;;AAEA;EACE,sBAAsB;EACtB,iBAAiB;EACjB,yCAAyC;AAC3C","sourcesContent":["#sidebar-panel {\\n background-color: lightgrey; \\n /* min-height: 100vh; Full height of viewport */\\n }\\n\\n#supp-total .stat {\\n color: var(--yellow);\\n}\\n\\n.stat {\\n font-weight: bold;\\n}\\n\\n#sidebar-panel {\\n height: 100%; /* Full height of the viewport */\\n position: fixed; /* Fixed Sidebar (stay in place on scroll) */\\n z-index: 1; /* Stay on top */\\n top: 0; /* Stay at the top */\\n right: 0; /* Sidebar appears on the left */\\n background-color: #FFFFFF; /* White background color */\\n overflow-x: hidden; /* Disable horizontal scroll */\\n padding: 20px;\\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); /* Add shadow for some depth */\\n border-right: 2px solid #DDDDDD; /* Right border */\\n border-radius: 15px 0px 0px 15px; /* Rounded corners on the left */\\n /* margin-top: var(--header-height); */\\n width: var(--sidebar-width);\\n margin: 0px;\\n }\\n \\n.sidebar a {\\n padding: 10px 15px;\\n text-decoration: none;\\n font-size: 18px;\\n color: #818181;\\n display: block;\\n transition: 0.3s;\\n}\\n\\n#sidebar-title {\\n color: var(--darkGray);\\n font-weight: bold;\\n border-bottom: 1px solid var(--citygreen);\\n}"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvc2lkZWJhci9zaWRlYmFyLmNzcz8zYjAzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAjc2lkZWJhci1wYW5lbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRncmV5OyAgXG4gICAgLyogbWluLWhlaWdodDogMTAwdmg7IEZ1bGwgaGVpZ2h0IG9mIHZpZXdwb3J0ICovXG4gIH1cblxuI3N1cHAtdG90YWwgLnN0YXQge1xuICAgIGNvbG9yOiB2YXIoLS15ZWxsb3cpO1xufVxuXG4uc3RhdCB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbiNzaWRlYmFyLXBhbmVsIHtcbiAgICBoZWlnaHQ6IDEwMCU7IC8qIEZ1bGwgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydCAqL1xuICAgIHBvc2l0aW9uOiBmaXhlZDsgLyogRml4ZWQgU2lkZWJhciAoc3RheSBpbiBwbGFjZSBvbiBzY3JvbGwpICovXG4gICAgei1pbmRleDogMTsgLyogU3RheSBvbiB0b3AgKi9cbiAgICB0b3A6IDA7IC8qIFN0YXkgYXQgdGhlIHRvcCAqL1xuICAgIHJpZ2h0OiAwOyAvKiBTaWRlYmFyIGFwcGVhcnMgb24gdGhlIGxlZnQgKi9cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGOyAvKiBXaGl0ZSBiYWNrZ3JvdW5kIGNvbG9yICovXG4gICAgb3ZlcmZsb3cteDogaGlkZGVuOyAvKiBEaXNhYmxlIGhvcml6b250YWwgc2Nyb2xsICovXG4gICAgcGFkZGluZzogMjBweDtcbiAgICBib3gtc2hhZG93OiAwIDJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEpOyAvKiBBZGQgc2hhZG93IGZvciBzb21lIGRlcHRoICovXG4gICAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgI0RERERERDsgLyogUmlnaHQgYm9yZGVyICovXG4gICAgYm9yZGVyLXJhZGl1czogMTVweCAwcHggMHB4IDE1cHg7IC8qIFJvdW5kZWQgY29ybmVycyBvbiB0aGUgbGVmdCAqL1xuICAgIC8qIG1hcmdpbi10b3A6IHZhcigtLWhlYWRlci1oZWlnaHQpOyAqL1xuICAgIHdpZHRoOiB2YXIoLS1zaWRlYmFyLXdpZHRoKTtcbiAgICBtYXJnaW46IDBweDtcbiAgfVxuICBcbi5zaWRlYmFyIGEge1xuICAgIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGNvbG9yOiAjODE4MTgxO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHRyYW5zaXRpb246IDAuM3M7XG59XG5cbiNzaWRlYmFyLXRpdGxlIHtcbiAgY29sb3I6IHZhcigtLWRhcmtHcmF5KTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jaXR5Z3JlZW4pO1xufWAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL2pzL2NvbXBvbmVudHMvc2lkZWJhci9zaWRlYmFyLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtJQUNJLDJCQUEyQjtJQUMzQiwrQ0FBK0M7RUFDakQ7O0FBRUY7SUFDSSxvQkFBb0I7QUFDeEI7O0FBRUE7SUFDSSxpQkFBaUI7QUFDckI7O0FBRUE7SUFDSSxZQUFZLEVBQUUsZ0NBQWdDO0lBQzlDLGVBQWUsRUFBRSw0Q0FBNEM7SUFDN0QsVUFBVSxFQUFFLGdCQUFnQjtJQUM1QixNQUFNLEVBQUUsb0JBQW9CO0lBQzVCLFFBQVEsRUFBRSxnQ0FBZ0M7SUFDMUMseUJBQXlCLEVBQUUsMkJBQTJCO0lBQ3RELGtCQUFrQixFQUFFLDhCQUE4QjtJQUNsRCxhQUFhO0lBQ2Isd0NBQXdDLEVBQUUsOEJBQThCO0lBQ3hFLCtCQUErQixFQUFFLGlCQUFpQjtJQUNsRCxnQ0FBZ0MsRUFBRSxnQ0FBZ0M7SUFDbEUsc0NBQXNDO0lBQ3RDLDJCQUEyQjtJQUMzQixXQUFXO0VBQ2I7O0FBRUY7SUFDSSxrQkFBa0I7SUFDbEIscUJBQXFCO0lBQ3JCLGVBQWU7SUFDZixjQUFjO0lBQ2QsY0FBYztJQUNkLGdCQUFnQjtBQUNwQjs7QUFFQTtFQUNFLHNCQUFzQjtFQUN0QixpQkFBaUI7RUFDakIseUNBQXlDO0FBQzNDXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIiNzaWRlYmFyLXBhbmVsIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRncmV5OyAgXFxuICAgIC8qIG1pbi1oZWlnaHQ6IDEwMHZoOyBGdWxsIGhlaWdodCBvZiB2aWV3cG9ydCAqL1xcbiAgfVxcblxcbiNzdXBwLXRvdGFsIC5zdGF0IHtcXG4gICAgY29sb3I6IHZhcigtLXllbGxvdyk7XFxufVxcblxcbi5zdGF0IHtcXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxufVxcblxcbiNzaWRlYmFyLXBhbmVsIHtcXG4gICAgaGVpZ2h0OiAxMDAlOyAvKiBGdWxsIGhlaWdodCBvZiB0aGUgdmlld3BvcnQgKi9cXG4gICAgcG9zaXRpb246IGZpeGVkOyAvKiBGaXhlZCBTaWRlYmFyIChzdGF5IGluIHBsYWNlIG9uIHNjcm9sbCkgKi9cXG4gICAgei1pbmRleDogMTsgLyogU3RheSBvbiB0b3AgKi9cXG4gICAgdG9wOiAwOyAvKiBTdGF5IGF0IHRoZSB0b3AgKi9cXG4gICAgcmlnaHQ6IDA7IC8qIFNpZGViYXIgYXBwZWFycyBvbiB0aGUgbGVmdCAqL1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGOyAvKiBXaGl0ZSBiYWNrZ3JvdW5kIGNvbG9yICovXFxuICAgIG92ZXJmbG93LXg6IGhpZGRlbjsgLyogRGlzYWJsZSBob3Jpem9udGFsIHNjcm9sbCAqL1xcbiAgICBwYWRkaW5nOiAyMHB4O1xcbiAgICBib3gtc2hhZG93OiAwIDJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEpOyAvKiBBZGQgc2hhZG93IGZvciBzb21lIGRlcHRoICovXFxuICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICNEREREREQ7IC8qIFJpZ2h0IGJvcmRlciAqL1xcbiAgICBib3JkZXItcmFkaXVzOiAxNXB4IDBweCAwcHggMTVweDsgLyogUm91bmRlZCBjb3JuZXJzIG9uIHRoZSBsZWZ0ICovXFxuICAgIC8qIG1hcmdpbi10b3A6IHZhcigtLWhlYWRlci1oZWlnaHQpOyAqL1xcbiAgICB3aWR0aDogdmFyKC0tc2lkZWJhci13aWR0aCk7XFxuICAgIG1hcmdpbjogMHB4O1xcbiAgfVxcbiAgXFxuLnNpZGViYXIgYSB7XFxuICAgIHBhZGRpbmc6IDEwcHggMTVweDtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgICBmb250LXNpemU6IDE4cHg7XFxuICAgIGNvbG9yOiAjODE4MTgxO1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgdHJhbnNpdGlvbjogMC4zcztcXG59XFxuXFxuI3NpZGViYXItdGl0bGUge1xcbiAgY29sb3I6IHZhcigtLWRhcmtHcmF5KTtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNpdHlncmVlbik7XFxufVwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///263\n')},279:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `thead > tr > th {\n text-align: left;\n}\n\nth {\n background-color: var(--lightGray);\n}\n\ntr {\n border-width: 2px;\n background-color: white;\n}\n\ntr td {\n border-bottom: 1px solid black;\n}\n\n/* textbox width in table */\ninput {\n width: 100%;\n}\n\ndiv.table-container {\n display: table; \n overflow-x: auto; /* Scroll horizontally if the table content is wider than the container */\n overflow-y: auto;\n padding-left: max(100px, 10vh);\n padding-right: max(100px, 10vh);\n max-width: calc(100vw - var(--sidebar-width)); \n margin: auto;\n min-height: 120px;\n\n}\n \n#main-table {\n font-size: calc(0.6vw + 0.5em);\n margin: auto;\n}\n\n/* Add new row button */\n.btn-add { \n background-color: var(--spiritgreen);\n margin-top: 20px;\n display: none;\n}\n\n.btn-delete {\n background-color: var(--orange);\n}\n\n#add-btn-div {\n display: flex;\n justify-content: center; /* Aligns horizontally */\n align-items: center; /* Aligns vertically */\n width: 100%;\n}\n\n.btn-edit {\n background-color: var(--spiritgreen);\n}\n\n.active-editing, .selected {\n background-color: var(--palegreen);\n}\n\n.selected { \n font-weight: bold;\n}\n\n.btn-confirm {\n display: none;\n}\n\n.confirm-btn:hover {\n background-color: var(--green);\n}\n\n.hover-effect:hover {\n cursor: pointer;\n background-color: var(--verypalegreen); /* You can choose any color you like */\n}`, "",{"version":3,"sources":["webpack://./src/js/components/table/table.css"],"names":[],"mappings":"AAAA;IACI,gBAAgB;AACpB;;AAEA;IACI,kCAAkC;AACtC;;AAEA;IACI,iBAAiB;IACjB,uBAAuB;AAC3B;;AAEA;IACI,8BAA8B;AAClC;;AAEA,2BAA2B;AAC3B;IACI,WAAW;AACf;;AAEA;IACI,cAAc;IACd,gBAAgB,EAAE,yEAAyE;IAC3F,gBAAgB;IAChB,8BAA8B;IAC9B,+BAA+B;IAC/B,6CAA6C;IAC7C,YAAY;IACZ,iBAAiB;;AAErB;;AAEA;IACI,8BAA8B;IAC9B,YAAY;AAChB;;AAEA,uBAAuB;AACvB;IACI,oCAAoC;IACpC,gBAAgB;IAChB,aAAa;AACjB;;AAEA;IACI,+BAA+B;AACnC;;AAEA;IACI,aAAa;IACb,uBAAuB,EAAE,wBAAwB;IACjD,mBAAmB,EAAE,sBAAsB;IAC3C,WAAW;AACf;;AAEA;IACI,oCAAoC;AACxC;;AAEA;IACI,kCAAkC;AACtC;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI,8BAA8B;AAClC;;AAEA;IACI,eAAe;IACf,sCAAsC,EAAE,sCAAsC;AAClF","sourcesContent":["thead > tr > th {\\n text-align: left;\\n}\\n\\nth {\\n background-color: var(--lightGray);\\n}\\n\\ntr {\\n border-width: 2px;\\n background-color: white;\\n}\\n\\ntr td {\\n border-bottom: 1px solid black;\\n}\\n\\n/* textbox width in table */\\ninput {\\n width: 100%;\\n}\\n\\ndiv.table-container {\\n display: table; \\n overflow-x: auto; /* Scroll horizontally if the table content is wider than the container */\\n overflow-y: auto;\\n padding-left: max(100px, 10vh);\\n padding-right: max(100px, 10vh);\\n max-width: calc(100vw - var(--sidebar-width)); \\n margin: auto;\\n min-height: 120px;\\n\\n}\\n \\n#main-table {\\n font-size: calc(0.6vw + 0.5em);\\n margin: auto;\\n}\\n\\n/* Add new row button */\\n.btn-add { \\n background-color: var(--spiritgreen);\\n margin-top: 20px;\\n display: none;\\n}\\n\\n.btn-delete {\\n background-color: var(--orange);\\n}\\n\\n#add-btn-div {\\n display: flex;\\n justify-content: center; /* Aligns horizontally */\\n align-items: center; /* Aligns vertically */\\n width: 100%;\\n}\\n\\n.btn-edit {\\n background-color: var(--spiritgreen);\\n}\\n\\n.active-editing, .selected {\\n background-color: var(--palegreen);\\n}\\n\\n.selected { \\n font-weight: bold;\\n}\\n\\n.btn-confirm {\\n display: none;\\n}\\n\\n.confirm-btn:hover {\\n background-color: var(--green);\\n}\\n\\n.hover-effect:hover {\\n cursor: pointer;\\n background-color: var(--verypalegreen); /* You can choose any color you like */\\n}"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc5LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy90YWJsZS90YWJsZS5jc3M/NTIzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgdGhlYWQgPiB0ciA+IHRoIHtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG50aCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbGlnaHRHcmF5KTtcbn1cblxudHIge1xuICAgIGJvcmRlci13aWR0aDogMnB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuXG50ciB0ZCB7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO1xufVxuXG4vKiB0ZXh0Ym94IHdpZHRoIGluIHRhYmxlICovXG5pbnB1dCB7XG4gICAgd2lkdGg6IDEwMCU7XG59XG5cbmRpdi50YWJsZS1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IHRhYmxlOyBcbiAgICBvdmVyZmxvdy14OiBhdXRvOyAvKiBTY3JvbGwgaG9yaXpvbnRhbGx5IGlmIHRoZSB0YWJsZSBjb250ZW50IGlzIHdpZGVyIHRoYW4gdGhlIGNvbnRhaW5lciAqL1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgcGFkZGluZy1sZWZ0OiBtYXgoMTAwcHgsIDEwdmgpO1xuICAgIHBhZGRpbmctcmlnaHQ6IG1heCgxMDBweCwgMTB2aCk7XG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gdmFyKC0tc2lkZWJhci13aWR0aCkpOyBcbiAgICBtYXJnaW46IGF1dG87XG4gICAgbWluLWhlaWdodDogMTIwcHg7XG5cbn1cbiAgXG4jbWFpbi10YWJsZSB7XG4gICAgZm9udC1zaXplOiBjYWxjKDAuNnZ3ICsgMC41ZW0pO1xuICAgIG1hcmdpbjogYXV0bztcbn1cblxuLyogQWRkIG5ldyByb3cgYnV0dG9uICovXG4uYnRuLWFkZCB7IFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNwaXJpdGdyZWVuKTtcbiAgICBtYXJnaW4tdG9wOiAyMHB4O1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5idG4tZGVsZXRlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1vcmFuZ2UpO1xufVxuXG4jYWRkLWJ0bi1kaXYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IC8qIEFsaWducyBob3Jpem9udGFsbHkgKi9cbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyAvKiBBbGlnbnMgdmVydGljYWxseSAqL1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4uYnRuLWVkaXQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNwaXJpdGdyZWVuKTtcbn1cblxuLmFjdGl2ZS1lZGl0aW5nLCAuc2VsZWN0ZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhbGVncmVlbik7XG59XG5cbi5zZWxlY3RlZCB7IFxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4uYnRuLWNvbmZpcm0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5jb25maXJtLWJ0bjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZ3JlZW4pO1xufVxuXG4uaG92ZXItZWZmZWN0OmhvdmVyIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdmVyeXBhbGVncmVlbik7IC8qIFlvdSBjYW4gY2hvb3NlIGFueSBjb2xvciB5b3UgbGlrZSAqL1xufWAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL2pzL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0lBQ0ksZ0JBQWdCO0FBQ3BCOztBQUVBO0lBQ0ksa0NBQWtDO0FBQ3RDOztBQUVBO0lBQ0ksaUJBQWlCO0lBQ2pCLHVCQUF1QjtBQUMzQjs7QUFFQTtJQUNJLDhCQUE4QjtBQUNsQzs7QUFFQSwyQkFBMkI7QUFDM0I7SUFDSSxXQUFXO0FBQ2Y7O0FBRUE7SUFDSSxjQUFjO0lBQ2QsZ0JBQWdCLEVBQUUseUVBQXlFO0lBQzNGLGdCQUFnQjtJQUNoQiw4QkFBOEI7SUFDOUIsK0JBQStCO0lBQy9CLDZDQUE2QztJQUM3QyxZQUFZO0lBQ1osaUJBQWlCOztBQUVyQjs7QUFFQTtJQUNJLDhCQUE4QjtJQUM5QixZQUFZO0FBQ2hCOztBQUVBLHVCQUF1QjtBQUN2QjtJQUNJLG9DQUFvQztJQUNwQyxnQkFBZ0I7SUFDaEIsYUFBYTtBQUNqQjs7QUFFQTtJQUNJLCtCQUErQjtBQUNuQzs7QUFFQTtJQUNJLGFBQWE7SUFDYix1QkFBdUIsRUFBRSx3QkFBd0I7SUFDakQsbUJBQW1CLEVBQUUsc0JBQXNCO0lBQzNDLFdBQVc7QUFDZjs7QUFFQTtJQUNJLG9DQUFvQztBQUN4Qzs7QUFFQTtJQUNJLGtDQUFrQztBQUN0Qzs7QUFFQTtJQUNJLGlCQUFpQjtBQUNyQjs7QUFFQTtJQUNJLGFBQWE7QUFDakI7O0FBRUE7SUFDSSw4QkFBOEI7QUFDbEM7O0FBRUE7SUFDSSxlQUFlO0lBQ2Ysc0NBQXNDLEVBQUUsc0NBQXNDO0FBQ2xGXCIsXCJzb3VyY2VzQ29udGVudFwiOltcInRoZWFkID4gdHIgPiB0aCB7XFxuICAgIHRleHQtYWxpZ246IGxlZnQ7XFxufVxcblxcbnRoIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbGlnaHRHcmF5KTtcXG59XFxuXFxudHIge1xcbiAgICBib3JkZXItd2lkdGg6IDJweDtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XFxufVxcblxcbnRyIHRkIHtcXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO1xcbn1cXG5cXG4vKiB0ZXh0Ym94IHdpZHRoIGluIHRhYmxlICovXFxuaW5wdXQge1xcbiAgICB3aWR0aDogMTAwJTtcXG59XFxuXFxuZGl2LnRhYmxlLWNvbnRhaW5lciB7XFxuICAgIGRpc3BsYXk6IHRhYmxlOyBcXG4gICAgb3ZlcmZsb3cteDogYXV0bzsgLyogU2Nyb2xsIGhvcml6b250YWxseSBpZiB0aGUgdGFibGUgY29udGVudCBpcyB3aWRlciB0aGFuIHRoZSBjb250YWluZXIgKi9cXG4gICAgb3ZlcmZsb3cteTogYXV0bztcXG4gICAgcGFkZGluZy1sZWZ0OiBtYXgoMTAwcHgsIDEwdmgpO1xcbiAgICBwYWRkaW5nLXJpZ2h0OiBtYXgoMTAwcHgsIDEwdmgpO1xcbiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSB2YXIoLS1zaWRlYmFyLXdpZHRoKSk7IFxcbiAgICBtYXJnaW46IGF1dG87XFxuICAgIG1pbi1oZWlnaHQ6IDEyMHB4O1xcblxcbn1cXG4gIFxcbiNtYWluLXRhYmxlIHtcXG4gICAgZm9udC1zaXplOiBjYWxjKDAuNnZ3ICsgMC41ZW0pO1xcbiAgICBtYXJnaW46IGF1dG87XFxufVxcblxcbi8qIEFkZCBuZXcgcm93IGJ1dHRvbiAqL1xcbi5idG4tYWRkIHsgXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNwaXJpdGdyZWVuKTtcXG4gICAgbWFyZ2luLXRvcDogMjBweDtcXG4gICAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLmJ0bi1kZWxldGUge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1vcmFuZ2UpO1xcbn1cXG5cXG4jYWRkLWJ0bi1kaXYge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgLyogQWxpZ25zIGhvcml6b250YWxseSAqL1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyAvKiBBbGlnbnMgdmVydGljYWxseSAqL1xcbiAgICB3aWR0aDogMTAwJTtcXG59XFxuXFxuLmJ0bi1lZGl0IHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc3Bpcml0Z3JlZW4pO1xcbn1cXG5cXG4uYWN0aXZlLWVkaXRpbmcsIC5zZWxlY3RlZCB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhbGVncmVlbik7XFxufVxcblxcbi5zZWxlY3RlZCB7IFxcbiAgICBmb250LXdlaWdodDogYm9sZDtcXG59XFxuXFxuLmJ0bi1jb25maXJtIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLmNvbmZpcm0tYnRuOmhvdmVyIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZ3JlZW4pO1xcbn1cXG5cXG4uaG92ZXItZWZmZWN0OmhvdmVyIHtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS12ZXJ5cGFsZWdyZWVuKTsgLyogWW91IGNhbiBjaG9vc2UgYW55IGNvbG9yIHlvdSBsaWtlICovXFxufVwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///279\n')},235:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* Welcome page (index.html) */\n\n.step {\n width: 60%;\n height: 80px;\n font-size: 1.75em;\n margin-bottom: 0px; /* Adds spacing between buttons */\n margin-left: 20%;\n border-color: var(--citygreen);\n border-width: 2;\n color: var(--citygreen);\n background-color: white;\n}\n\n.step:hover {\n color: white;\n background-color: var(--spiritgreen);\n}\n\n#welcome-page {\n justify-content: center; \n align-items: center; \n padding-top: 20px;\n}\n.step.disabled {\n opacity: 50%;\n}`, "",{"version":3,"sources":["webpack://./src/js/components/welcome/welcome.css"],"names":[],"mappings":"AAAA,8BAA8B;;AAE9B;IACI,UAAU;IACV,YAAY;IACZ,iBAAiB;IACjB,kBAAkB,EAAE,iCAAiC;IACrD,gBAAgB;IAChB,8BAA8B;IAC9B,eAAe;IACf,uBAAuB;IACvB,uBAAuB;AAC3B;;AAEA;IACI,YAAY;IACZ,oCAAoC;AACxC;;AAEA;IACI,uBAAuB;IACvB,mBAAmB;IACnB,iBAAiB;AACrB;AACA;IACI,YAAY;AAChB","sourcesContent":["/* Welcome page (index.html) */\\n\\n.step {\\n width: 60%;\\n height: 80px;\\n font-size: 1.75em;\\n margin-bottom: 0px; /* Adds spacing between buttons */\\n margin-left: 20%;\\n border-color: var(--citygreen);\\n border-width: 2;\\n color: var(--citygreen);\\n background-color: white;\\n}\\n\\n.step:hover {\\n color: white;\\n background-color: var(--spiritgreen);\\n}\\n\\n#welcome-page {\\n justify-content: center; \\n align-items: center; \\n padding-top: 20px;\\n}\\n.step.disabled {\\n opacity: 50%;\\n}"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM1LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy93ZWxjb21lL3dlbGNvbWUuY3NzP2IzNDgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC8qIFdlbGNvbWUgcGFnZSAoaW5kZXguaHRtbCkgKi9cblxuLnN0ZXAge1xuICAgIHdpZHRoOiA2MCU7XG4gICAgaGVpZ2h0OiA4MHB4O1xuICAgIGZvbnQtc2l6ZTogMS43NWVtO1xuICAgIG1hcmdpbi1ib3R0b206IDBweDsgLyogQWRkcyBzcGFjaW5nIGJldHdlZW4gYnV0dG9ucyAqL1xuICAgIG1hcmdpbi1sZWZ0OiAyMCU7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jaXR5Z3JlZW4pO1xuICAgIGJvcmRlci13aWR0aDogMjtcbiAgICBjb2xvcjogdmFyKC0tY2l0eWdyZWVuKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbn1cblxuLnN0ZXA6aG92ZXIge1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zcGlyaXRncmVlbik7XG59XG5cbiN3ZWxjb21lLXBhZ2Uge1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOyBcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyBcbiAgICBwYWRkaW5nLXRvcDogMjBweDtcbn1cbi5zdGVwLmRpc2FibGVkIHtcbiAgICBvcGFjaXR5OiA1MCU7XG59YCwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zcmMvanMvY29tcG9uZW50cy93ZWxjb21lL3dlbGNvbWUuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBLDhCQUE4Qjs7QUFFOUI7SUFDSSxVQUFVO0lBQ1YsWUFBWTtJQUNaLGlCQUFpQjtJQUNqQixrQkFBa0IsRUFBRSxpQ0FBaUM7SUFDckQsZ0JBQWdCO0lBQ2hCLDhCQUE4QjtJQUM5QixlQUFlO0lBQ2YsdUJBQXVCO0lBQ3ZCLHVCQUF1QjtBQUMzQjs7QUFFQTtJQUNJLFlBQVk7SUFDWixvQ0FBb0M7QUFDeEM7O0FBRUE7SUFDSSx1QkFBdUI7SUFDdkIsbUJBQW1CO0lBQ25CLGlCQUFpQjtBQUNyQjtBQUNBO0lBQ0ksWUFBWTtBQUNoQlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIvKiBXZWxjb21lIHBhZ2UgKGluZGV4Lmh0bWwpICovXFxuXFxuLnN0ZXAge1xcbiAgICB3aWR0aDogNjAlO1xcbiAgICBoZWlnaHQ6IDgwcHg7XFxuICAgIGZvbnQtc2l6ZTogMS43NWVtO1xcbiAgICBtYXJnaW4tYm90dG9tOiAwcHg7IC8qIEFkZHMgc3BhY2luZyBiZXR3ZWVuIGJ1dHRvbnMgKi9cXG4gICAgbWFyZ2luLWxlZnQ6IDIwJTtcXG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jaXR5Z3JlZW4pO1xcbiAgICBib3JkZXItd2lkdGg6IDI7XFxuICAgIGNvbG9yOiB2YXIoLS1jaXR5Z3JlZW4pO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcXG59XFxuXFxuLnN0ZXA6aG92ZXIge1xcbiAgICBjb2xvcjogd2hpdGU7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNwaXJpdGdyZWVuKTtcXG59XFxuXFxuI3dlbGNvbWUtcGFnZSB7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOyBcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgXFxuICAgIHBhZGRpbmctdG9wOiAyMHB4O1xcbn1cXG4uc3RlcC5kaXNhYmxlZCB7XFxuICAgIG9wYWNpdHk6IDUwJTtcXG59XCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///235\n')},314:module=>{eval('\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = "";\n var needLayer = typeof item[5] !== "undefined";\n if (item[4]) {\n content += "@supports (".concat(item[4], ") {");\n }\n if (item[2]) {\n content += "@media ".concat(item[2], " {");\n }\n if (needLayer) {\n content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += "}";\n }\n if (item[2]) {\n content += "}";\n }\n if (item[4]) {\n content += "}";\n }\n return content;\n }).join("");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === "string") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== "undefined") {\n if (typeof item[5] === "undefined") {\n item[5] = layer;\n } else {\n item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = "".concat(supports);\n } else {\n item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzE0LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanM/MjRmYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTtcblxuICAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTtcblxuICAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBpZCA9IHRoaXNba11bMF07XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBtb2R1bGVzLmxlbmd0aDsgX2srKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfa10pO1xuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGxpc3Q7XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///314\n')},354:module=>{eval('\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === "function") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);\n var sourceMapping = "/*# ".concat(data, " */");\n return [content].concat([sourceMapping]).join("\\n");\n }\n return [content].join("\\n");\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzU0LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzP2FmMTIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgdmFyIGNvbnRlbnQgPSBpdGVtWzFdO1xuICB2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG4gIGlmICghY3NzTWFwcGluZykge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///354\n')},72:module=>{eval('\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = "".concat(id, " ").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcz8yZGJhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG52YXIgc3R5bGVzSW5ET00gPSBbXTtcbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlc0luRE9NLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0eWxlc0luRE9NW2ldLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgIHJlc3VsdCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV07XG4gICAgdmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG4gICAgdmFyIGNvdW50ID0gaWRDb3VudE1hcFtpZF0gfHwgMDtcbiAgICB2YXIgaWRlbnRpZmllciA9IFwiXCIuY29uY2F0KGlkLCBcIiBcIikuY29uY2F0KGNvdW50KTtcbiAgICBpZENvdW50TWFwW2lkXSA9IGNvdW50ICsgMTtcbiAgICB2YXIgaW5kZXhCeUlkZW50aWZpZXIgPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgY3NzOiBpdGVtWzFdLFxuICAgICAgbWVkaWE6IGl0ZW1bMl0sXG4gICAgICBzb3VyY2VNYXA6IGl0ZW1bM10sXG4gICAgICBzdXBwb3J0czogaXRlbVs0XSxcbiAgICAgIGxheWVyOiBpdGVtWzVdXG4gICAgfTtcbiAgICBpZiAoaW5kZXhCeUlkZW50aWZpZXIgIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHVwZGF0ZXIgPSBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMuYnlJbmRleCA9IGk7XG4gICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoaSwgMCwge1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiB1cGRhdGVyLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWRlbnRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcbiAgfVxuICByZXR1cm4gaWRlbnRpZmllcnM7XG59XG5mdW5jdGlvbiBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBhcGkgPSBvcHRpb25zLmRvbUFQSShvcHRpb25zKTtcbiAgYXBpLnVwZGF0ZShvYmopO1xuICB2YXIgdXBkYXRlciA9IGZ1bmN0aW9uIHVwZGF0ZXIobmV3T2JqKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiYgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiYgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCAmJiBuZXdPYmouc3VwcG9ydHMgPT09IG9iai5zdXBwb3J0cyAmJiBuZXdPYmoubGF5ZXIgPT09IG9iai5sYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhcGkudXBkYXRlKG9iaiA9IG5ld09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZW1vdmUoKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiB1cGRhdGVyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGlzdCA9IGxpc3QgfHwgW107XG4gIHZhciBsYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUobmV3TGlzdCkge1xuICAgIG5ld0xpc3QgPSBuZXdMaXN0IHx8IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tpXTtcbiAgICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhdLnJlZmVyZW5jZXMtLTtcbiAgICB9XG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcbiAgICAgIHZhciBfaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihfaWRlbnRpZmllcik7XG4gICAgICBpZiAoc3R5bGVzSW5ET01bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRE9NW19pbmRleF0udXBkYXRlcigpO1xuICAgICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGFzdElkZW50aWZpZXJzID0gbmV3TGFzdElkZW50aWZpZXJzO1xuICB9O1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///72\n')},659:module=>{eval('\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === "undefined") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error("Couldn\'t find a style target. This probably means that the value for the \'insert\' parameter is invalid.");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjU5LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanM/YjIxNCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIG1lbW8gPSB7fTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBnZXRUYXJnZXQodGFyZ2V0KSB7XG4gIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFyIHN0eWxlVGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpO1xuXG4gICAgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcbiAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuICB9XG4gIHJldHVybiBtZW1vW3RhcmdldF07XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0QnlTZWxlY3RvcihpbnNlcnQsIHN0eWxlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQoaW5zZXJ0KTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydCcgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO1xuICB9XG4gIHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydEJ5U2VsZWN0b3I7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///659\n')},540:module=>{eval('\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement("style");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQwLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qcz9kZTZjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICBvcHRpb25zLnNldEF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucy5hdHRyaWJ1dGVzKTtcbiAgb3B0aW9ucy5pbnNlcnQoZWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydFN0eWxlRWxlbWVudDsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///540\n')},56:(module,__unused_webpack_exports,__webpack_require__)=>{eval('\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = true ? __webpack_require__.nc : 0;\n if (nonce) {\n styleElement.setAttribute("nonce", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzP2RkY2UiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG4gIGlmIChub25jZSkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBub25jZSk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///56\n')},825:module=>{eval('\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = "";\n if (obj.supports) {\n css += "@supports (".concat(obj.supports, ") {");\n }\n if (obj.media) {\n css += "@media ".concat(obj.media, " {");\n }\n var needLayer = typeof obj.layer !== "undefined";\n if (needLayer) {\n css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");\n }\n css += obj.css;\n if (needLayer) {\n css += "}";\n }\n if (obj.media) {\n css += "}";\n }\n if (obj.supports) {\n css += "}";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== "undefined") {\n css += "\\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === "undefined") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODI1LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzP2U0NzkiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gYXBwbHkoc3R5bGVFbGVtZW50LCBvcHRpb25zLCBvYmopIHtcbiAgdmFyIGNzcyA9IFwiXCI7XG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChvYmouc3VwcG9ydHMsIFwiKSB7XCIpO1xuICB9XG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKTtcbiAgfVxuICB2YXIgbmVlZExheWVyID0gdHlwZW9mIG9iai5sYXllciAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIkBsYXllclwiLmNvbmNhdChvYmoubGF5ZXIubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChvYmoubGF5ZXIpIDogXCJcIiwgXCIge1wiKTtcbiAgfVxuICBjc3MgKz0gb2JqLmNzcztcbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpLCBcIiAqL1wiKTtcbiAgfVxuXG4gIC8vIEZvciBvbGQgSUVcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuICBvcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xufVxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCkge1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgaWYgKHN0eWxlRWxlbWVudC5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudCk7XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gZG9tQVBJKG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHt9LFxuICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7fVxuICAgIH07XG4gIH1cbiAgdmFyIHN0eWxlRWxlbWVudCA9IG9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuICByZXR1cm4ge1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKG9iaikge1xuICAgICAgYXBwbHkoc3R5bGVFbGVtZW50LCBvcHRpb25zLCBvYmopO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KTtcbiAgICB9XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGRvbUFQSTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///825\n')},113:module=>{eval("\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTEzLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanM/MWRkZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCkge1xuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKTtcbiAgICB9XG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHN0eWxlVGFnVHJhbnNmb3JtOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///113\n")}},__webpack_module_cache__={};function __webpack_require__(n){var t=__webpack_module_cache__[n];if(void 0!==t)return t.exports;var e=__webpack_module_cache__[n]={id:n,exports:{}};return __webpack_modules__[n](e,e.exports,__webpack_require__),e.exports}__webpack_require__.n=n=>{var t=n&&n.__esModule?()=>n.default:()=>n;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(n,t)=>{for(var e in t)__webpack_require__.o(t,e)&&!__webpack_require__.o(n,e)&&Object.defineProperty(n,e,{enumerable:!0,get:t[e]})},__webpack_require__.o=(n,t)=>Object.prototype.hasOwnProperty.call(n,t),__webpack_require__.nc=void 0;var __webpack_exports__=__webpack_require__(496)})(); \ No newline at end of file +(()=>{"use strict";var __webpack_modules__={934:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n P5: () => (/* binding */ FISCAL_YEAR),\n eG: () => (/* binding */ OT_FRINGE),\n zu: () => (/* binding */ REVENUE),\n XB: () => (/* binding */ SHEETS),\n Qn: () => (/* binding */ TARGET),\n I9: () => (/* binding */ cola),\n aF: () => (/* binding */ fringe),\n Wr: () => (/* binding */ merit)\n});\n\n// UNUSED EXPORTS: DATA_ROOT\n\n// NAMESPACE OBJECT: ./src/js/views/08_summary/main.js\nvar _08_summary_main_namespaceObject = {};\n__webpack_require__.r(_08_summary_main_namespaceObject);\n\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\nvar injectStylesIntoStyleTag = __webpack_require__(72);\nvar injectStylesIntoStyleTag_default = /*#__PURE__*/__webpack_require__.n(injectStylesIntoStyleTag);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleDomAPI.js\nvar styleDomAPI = __webpack_require__(825);\nvar styleDomAPI_default = /*#__PURE__*/__webpack_require__.n(styleDomAPI);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertBySelector.js\nvar insertBySelector = __webpack_require__(659);\nvar insertBySelector_default = /*#__PURE__*/__webpack_require__.n(insertBySelector);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\nvar setAttributesWithoutAttributes = __webpack_require__(56);\nvar setAttributesWithoutAttributes_default = /*#__PURE__*/__webpack_require__.n(setAttributesWithoutAttributes);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertStyleElement.js\nvar insertStyleElement = __webpack_require__(540);\nvar insertStyleElement_default = /*#__PURE__*/__webpack_require__.n(insertStyleElement);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleTagTransform.js\nvar styleTagTransform = __webpack_require__(113);\nvar styleTagTransform_default = /*#__PURE__*/__webpack_require__.n(styleTagTransform);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/css/common.css\nvar common = __webpack_require__(404);\n;// CONCATENATED MODULE: ./src/css/common.css\n\n \n \n \n \n \n \n \n \n \n\nvar options = {};\n\noptions.styleTagTransform = (styleTagTransform_default());\noptions.setAttributes = (setAttributesWithoutAttributes_default());\noptions.insert = insertBySelector_default().bind(null, \"head\");\noptions.domAPI = (styleDomAPI_default());\noptions.insertStyleElement = (insertStyleElement_default());\n\nvar update = injectStylesIntoStyleTag_default()(common/* default */.A, options);\n\n\n\n\n /* harmony default export */ const css_common = (common/* default */.A && common/* default */.A.locals ? common/* default */.A.locals : undefined);\n\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/js/components/sidebar/sidebar.css\nvar sidebar = __webpack_require__(263);\n;// CONCATENATED MODULE: ./src/js/components/sidebar/sidebar.css\n\n \n \n \n \n \n \n \n \n \n\nvar sidebar_options = {};\n\nsidebar_options.styleTagTransform = (styleTagTransform_default());\nsidebar_options.setAttributes = (setAttributesWithoutAttributes_default());\nsidebar_options.insert = insertBySelector_default().bind(null, \"head\");\nsidebar_options.domAPI = (styleDomAPI_default());\nsidebar_options.insertStyleElement = (insertStyleElement_default());\n\nvar sidebar_update = injectStylesIntoStyleTag_default()(sidebar/* default */.A, sidebar_options);\n\n\n\n\n /* harmony default export */ const sidebar_sidebar = (sidebar/* default */.A && sidebar/* default */.A.locals ? sidebar/* default */.A.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/js/utils/common_utils.js\n// Function to format number as currency\nconst formatCurrency = (amount, return_zero = false) => {\n var amount = Math.round(parseFloat(amount));\n if (amount == NaN) {\n return \"$ -\";\n }\n if (amount < 0) {\n return '($' + amount.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',') + ')';\n } else if (amount == 0) {\n if (return_zero) {\n return '$0';\n }\n return \"$ -\";\n }\n return '$' + amount.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n};\n\n// function to convert formatted number to a float\nconst common_utils_unformatCurrency = formattedAmount => {\n // Remove any currency symbols and commas\n let numericalPart = formattedAmount.replace(/[^0-9.-]+/g, \"\");\n if (numericalPart == '-') {\n return 0;\n }\n return parseFloat(numericalPart);\n};\nfunction displayWithCommas(value) {\n if (value == 0) {\n return 0;\n }\n return formatCurrency(value).replace('$', '');\n}\nfunction delay(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\nasync function pauseExecution(seconds) {\n await delay(seconds * 1000); // convert to milliseconds\n}\nfunction cleanString(str) {\n return str.toLowerCase().replaceAll(' ', '-');\n}\nfunction removeNewLines(str) {\n // TODO: ensure there is a space between words on new lines\n return str.replaceAll(/[\\r\\n]+/g, \"\");\n}\n;// CONCATENATED MODULE: ./src/js/components/sidebar/sidebar.js\n\n\n\n\n\n// Assuming you have a CSS variable --main-color defined on the :root\nconst root = document.documentElement;\nconst sideBarWidth = getComputedStyle(root).getPropertyValue('--sidebar-width').trim();\nfunction hideSidebar() {\n document.getElementById('sidebar-panel').style.display = 'none';\n document.getElementById('main-panel').style.width = '100%';\n document.querySelector('header').style.width = '100%';\n}\nfunction showSidebar() {\n const sidebar = document.getElementById('sidebar-panel');\n const mainPanel = document.getElementById('main-panel');\n const header = document.querySelector('header');\n sidebar.style.display = 'block'; // Show the sidebar\n\n // Calculate the remaining width for the main panel and header\n var contentWidth = document.documentElement.clientWidth;\n mainPanel.style.width = `${contentWidth - parseInt(sideBarWidth, 10)}px`;\n header.style.width = `${contentWidth - parseInt(sideBarWidth, 10)}px`;\n\n // add target to sidebar\n addTarget(TARGET);\n\n // add event listener to resize content if window is adjusted\n window.addEventListener('resize', showSidebar);\n}\nfunction updateSidebarTitle(new_title) {\n document.getElementById('sidebar-title').textContent = new_title;\n}\nfunction replaceSidebarStat(stat_id, new_figure) {\n const span = document.querySelector(`#${stat_id} .stat`);\n span.setAttribute('value', new_figure);\n span.textContent = formatCurrency(new_figure);\n}\nfunction fetchStat(stat_id) {\n const stat = document.querySelector(`#${stat_id} .stat`);\n return parseFloat(stat.getAttribute('value')) || 0;\n}\nfunction addTarget(target) {\n replaceSidebarStat('target', target);\n}\n\n// update all stats based on saved data\nasync function updateBaseline() {\n // gather info and update sidebar accordingly\n var baseline = new local_storage_handlers_Baseline();\n replaceSidebarStat('baseline-revenue', baseline.revenue());\n replaceSidebarStat('baseline-personnel', baseline.personnel());\n replaceSidebarStat('baseline-nonpersonnel', baseline.nonpersonnel());\n replaceSidebarStat('baseline-total', baseline.total());\n\n // color code based on target\n var target = fetchStat('target');\n if (baseline.total() <= target) {\n document.querySelector('#baseline-total .stat').style.color = \"green\";\n }\n if (baseline.total() > target) {\n document.querySelector('#baseline-total .stat').style.color = \"red\";\n }\n}\nfunction updateSupp() {\n var supp = new Supplemental();\n replaceSidebarStat('supp-revenue', supp.revenue());\n replaceSidebarStat('supp-expenses', supp.expenses());\n replaceSidebarStat('supp-total', supp.total());\n}\nfunction updateTotals() {\n updateBaseline();\n updateSupp();\n}\nfunction resetAll() {\n // delete everything in local storage\n localStorage.clear();\n // reset all stats to 0\n updateTotals();\n}\nconst Sidebar = {\n hide: hideSidebar,\n show: showSidebar,\n updateTitle: updateSidebarTitle,\n addTarget: addTarget,\n updateTotals: updateTotals,\n reset: resetAll\n};\n/* harmony default export */ const components_sidebar_sidebar = (Sidebar);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/js/components/header/header.css\nvar header = __webpack_require__(107);\n;// CONCATENATED MODULE: ./src/js/components/header/header.css\n\n \n \n \n \n \n \n \n \n \n\nvar header_options = {};\n\nheader_options.styleTagTransform = (styleTagTransform_default());\nheader_options.setAttributes = (setAttributesWithoutAttributes_default());\nheader_options.insert = insertBySelector_default().bind(null, \"head\");\nheader_options.domAPI = (styleDomAPI_default());\nheader_options.insertStyleElement = (insertStyleElement_default());\n\nvar header_update = injectStylesIntoStyleTag_default()(header/* default */.A, header_options);\n\n\n\n\n /* harmony default export */ const header_header = (header/* default */.A && header/* default */.A.locals ? header/* default */.A.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/js/components/header/header.js\n\n\nconst header_Subtitle = {\n update: function (subtitle) {\n // get current fund\n var fund = CurrentFund.name();\n if (fund) {\n var subtitle = `${subtitle}: ${fund}`;\n }\n document.getElementById(\"subtitle\").textContent = subtitle;\n }\n};\n/* harmony default export */ const components_header_header = (header_Subtitle);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/js/components/welcome/welcome.css\nvar welcome = __webpack_require__(235);\n;// CONCATENATED MODULE: ./src/js/components/welcome/welcome.css\n\n \n \n \n \n \n \n \n \n \n\nvar welcome_options = {};\n\nwelcome_options.styleTagTransform = (styleTagTransform_default());\nwelcome_options.setAttributes = (setAttributesWithoutAttributes_default());\nwelcome_options.insert = insertBySelector_default().bind(null, \"head\");\nwelcome_options.domAPI = (styleDomAPI_default());\nwelcome_options.insertStyleElement = (insertStyleElement_default());\n\nvar welcome_update = injectStylesIntoStyleTag_default()(welcome/* default */.A, welcome_options);\n\n\n\n\n /* harmony default export */ const welcome_welcome = (welcome/* default */.A && welcome/* default */.A.locals ? welcome/* default */.A.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/js/components/welcome/welcome.js\n\n\n// Hide and unhide welcome buttons\nfunction unhideWelcomeButtons() {\n document.getElementById(\"welcome-page\").style.display = \"block\";\n}\nfunction hideWelcomeButtons() {\n document.getElementById(\"welcome-page\").style.display = \"none\";\n}\nconst Welcome = {\n show: unhideWelcomeButtons,\n hide: hideWelcomeButtons\n};\n/* harmony default export */ const components_welcome_welcome = (Welcome);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/js/components/body/body.css\nvar body = __webpack_require__(9);\n;// CONCATENATED MODULE: ./src/js/components/body/body.css\n\n \n \n \n \n \n \n \n \n \n\nvar body_options = {};\n\nbody_options.styleTagTransform = (styleTagTransform_default());\nbody_options.setAttributes = (setAttributesWithoutAttributes_default());\nbody_options.insert = insertBySelector_default().bind(null, \"head\");\nbody_options.domAPI = (styleDomAPI_default());\nbody_options.insertStyleElement = (insertStyleElement_default());\n\nvar body_update = injectStylesIntoStyleTag_default()(body/* default */.A, body_options);\n\n\n\n\n /* harmony default export */ const body_body = (body/* default */.A && body/* default */.A.locals ? body/* default */.A.locals : undefined);\n\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/js/components/accordion/accordion.css\nvar accordion = __webpack_require__(995);\n;// CONCATENATED MODULE: ./src/js/components/accordion/accordion.css\n\n \n \n \n \n \n \n \n \n \n\nvar accordion_options = {};\n\naccordion_options.styleTagTransform = (styleTagTransform_default());\naccordion_options.setAttributes = (setAttributesWithoutAttributes_default());\naccordion_options.insert = insertBySelector_default().bind(null, \"head\");\naccordion_options.domAPI = (styleDomAPI_default());\naccordion_options.insertStyleElement = (insertStyleElement_default());\n\nvar accordion_update = injectStylesIntoStyleTag_default()(accordion/* default */.A, accordion_options);\n\n\n\n\n /* harmony default export */ const accordion_accordion = (accordion/* default */.A && accordion/* default */.A.locals ? accordion/* default */.A.locals : undefined);\n\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/js/components/table/table.css\nvar table = __webpack_require__(279);\n;// CONCATENATED MODULE: ./src/js/components/table/table.css\n\n \n \n \n \n \n \n \n \n \n\nvar table_options = {};\n\ntable_options.styleTagTransform = (styleTagTransform_default());\ntable_options.setAttributes = (setAttributesWithoutAttributes_default());\ntable_options.insert = insertBySelector_default().bind(null, \"head\");\ntable_options.domAPI = (styleDomAPI_default());\ntable_options.insertStyleElement = (insertStyleElement_default());\n\nvar table_update = injectStylesIntoStyleTag_default()(table/* default */.A, table_options);\n\n\n\n\n /* harmony default export */ const table_table = (table/* default */.A && table/* default */.A.locals ? table/* default */.A.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/js/components/table/subcomponents/headers.js\nfunction addTableHeaders(header_array) {\n // Get the table element by its ID\n const table = document.getElementById('main-table');\n\n // Create a table header row element\n const headerRow = document.createElement('tr');\n for (const headerText of header_array) {\n // Create a header cell element\n const headerCell = document.createElement('th');\n headerCell.textContent = headerText;\n\n // Append the header cell to the header row\n headerRow.appendChild(headerCell);\n }\n\n // Append the header row to the table header\n let thead = table.querySelector('thead');\n thead.appendChild(headerRow);\n}\nconst Header = {\n add: function (header_array) {\n addTableHeaders(header_array);\n }\n};\n/* harmony default export */ const headers = (Header);\n;// CONCATENATED MODULE: ./src/js/components/table/subcomponents/rows.js\n\n\nasync function addNewRow(data_dictionary) {\n // Get the table element by its ID\n const table = document.getElementById('main-table');\n\n // check if header has already been added\n let header_row = table.querySelector('thead tr');\n if (!header_row) {\n headers.add(Object.keys(data_dictionary));\n }\n\n // add row of data\n const new_row = document.createElement('tr');\n const cell_data_array = Object.values(data_dictionary);\n for (const cell_data of cell_data_array) {\n // Create new cell and add it to the row\n const newCell = document.createElement('td');\n newCell.textContent = cell_data;\n new_row.appendChild(newCell);\n }\n\n // Append the new row to the table body\n let tbody = table.querySelector('tbody');\n tbody.appendChild(new_row);\n}\nfunction saveRowEdits(row) {\n var cells = row.querySelectorAll('td');\n cells.forEach(cell => {\n // save dropdown values\n if (cell.querySelector('select')) {\n var serviceSelector = cell.querySelector('select');\n cell.textContent = serviceSelector.value;\n } else if (cell.querySelector('input')) {\n // save new entered value in textbox\n var textbox = cell.querySelector('input');\n var enteredValue = textbox.value;\n // update display and format with currency if relevant\n if (cell.classList.contains('cost')) {\n // if cost, remove commas first\n enteredValue = enteredValue.replaceAll(',', '');\n cell.textContent = formatCurrency(enteredValue);\n } else {\n cell.textContent = enteredValue;\n }\n // set value attribute to the new user input\n cell.setAttribute('value', enteredValue);\n }\n });\n}\nconst Rows = {\n add: function (data_dictionary) {\n addNewRow(data_dictionary);\n },\n saveEdits: function (row) {\n saveRowEdits(row);\n }\n};\n/* harmony default export */ const rows = (Rows);\n;// CONCATENATED MODULE: ./src/js/components/table/subcomponents/buttons.js\n\nfunction hideButton(className) {\n return function () {\n var buttons = document.getElementsByClassName(className);\n for (var i = 0; i < buttons.length; i++) {\n buttons[i].style.display = 'none';\n }\n };\n}\nfunction showButton(className) {\n return function () {\n var buttons = document.getElementsByClassName(className);\n for (var i = 0; i < buttons.length; i++) {\n buttons[i].style.display = 'inline';\n }\n };\n}\nfunction updateButtonText(className, text) {\n document.querySelector(`.${className}`).textContent = text;\n}\n\n// EDIT button\n\nfunction handleRowEdit(makeRowEditable, updateCallback) {\n // attach an event listener to each edit button in every row\n var editButtons = document.getElementsByClassName('btn-edit');\n for (var i = 0; i < editButtons.length; i++) {\n editButtons[i].addEventListener('click', async function (event) {\n // Determine what was clicked on within the table\n var rowToEdit = event.target.closest('tr');\n // mark row as being edited\n rowToEdit.classList.add('active-editing');\n\n // turn relevant entries into textboxes\n makeRowEditable();\n\n // hide edit buttons\n Edit.hide();\n initializeConfirmButton(updateCallback);\n });\n }\n ;\n}\n\n// Confirm button\n\nfunction initializeConfirmButton(updateCallback) {\n // get element and add listener for click\n var rowToEdit = document.querySelector('.active-editing');\n const confirm_btn = rowToEdit.querySelector(\".btn-confirm\");\n // show the row's confirm button\n confirm_btn.style.display = 'block';\n confirm_btn.addEventListener('click', function () {\n ;\n // save row edits\n rows.saveEdits(rowToEdit);\n // update values in sidebar\n updateCallback();\n // make row no longer green\n rowToEdit.classList.remove('active-editing');\n // show edit buttons and hide confirm buttons\n Edit.show();\n Confirm.hide();\n });\n}\nconst Edit = {\n html: '',\n hide: hideButton('btn-edit'),\n show: showButton('btn-edit'),\n init: function (makeRowEditable, updateCallback) {\n handleRowEdit(makeRowEditable, updateCallback);\n }\n};\nconst Delete = {\n html: '',\n hide: hideButton('btn-delete'),\n show: showButton('btn-delete')\n};\nconst Confirm = {\n html: '',\n hide: hideButton('btn-confirm'),\n show: showButton('btn-confirm')\n};\nconst AddRow = {\n hide: hideButton('btn-add'),\n show: showButton('btn-add'),\n updateText: function (text) {\n updateButtonText('btn-add', text);\n }\n};\nconst Buttons = {\n Delete: Delete,\n Edit: Edit,\n Confirm: Confirm,\n AddRow: AddRow,\n edit_confirm_btns: Edit.html + Confirm.html,\n all_btns: Delete.html + Edit.html + Confirm.html\n};\n/* harmony default export */ const buttons = (Buttons);\n;// CONCATENATED MODULE: ./src/js/utils/data_utils/budget_data_handlers.js\nconst FundLookupTable = {\n retrieve: function () {\n return JSON.parse(localStorage.getItem('fund-lookup-table')) || {};\n },\n save: function (fundDict) {\n localStorage.setItem('fund-lookup-table', JSON.stringify(fundDict));\n },\n update: function (fundData) {\n const table = this.retrieve();\n for (let fund of Object.keys(fundData)) {\n // fund = toString(fund);\n // add to lookup table if not in there already\n if (!table[fund]) {\n // get fund name\n const fundName = fundData[fund][0]['Fund Name'];\n // add fund to dictionary\n table[fund] = fundName;\n }\n }\n // save any updates\n this.save(table);\n },\n reset: function () {\n this.save({});\n },\n getName: function (number) {\n return this.retrieve()[number];\n },\n listFunds: function () {\n return Object.keys(this.retrieve());\n }\n};\n\n// data structure to save the possible service options for the department\nconst Services = {\n save: function (services) {\n localStorage.setItem('services-list', JSON.stringify(services));\n },\n list: function () {\n return JSON.parse(localStorage.getItem('services-list')) || {};\n }\n};\n;// CONCATENATED MODULE: ./src/js/components/form/subcomponents/dropdown.js\nasync function createDropdownFromJSON(json_path) {\n // Fetch JSON data from a file asynchronously\n const response = await fetch(json_path);\n const dataArray = await response.json();\n // create and return element\n return createDropdown(dataArray);\n}\nfunction createDropdown(dataArray) {\n // Creating a select element\n const selectElement = document.createElement('select');\n\n // Looping through the array and creating an option for each element\n dataArray.forEach(item => {\n const optionElement = document.createElement('option');\n optionElement.value = item;\n optionElement.textContent = item;\n selectElement.appendChild(optionElement); // Appending the option to the select\n });\n\n // Return the select element so it can be appended to the document\n return selectElement;\n}\nconst Dropdown = {\n createFromJSON: function (json_path) {\n return createDropdownFromJSON(json_path);\n },\n create: function (dataArray) {\n return createDropdown(dataArray);\n }\n};\n/* harmony default export */ const dropdown = (Dropdown);\n;// CONCATENATED MODULE: ./src/js/components/table/subcomponents/cells.js\n\n\n\n\n// return cell value attribute or 0 if it does not exist\nfunction getCellValue(row, className) {\n var cell = row.querySelector(`.${className}`);\n var cellValue = cell ? cell.getAttribute('value') : null;\n return cellValue ? parseFloat(cellValue) : 0;\n}\n\n// return text in cell\nfunction getCellText(row, className) {\n var cell = row.querySelector(`.${className}`);\n return cell.textContent;\n}\nfunction updateTableCell(row, col_class, new_value) {\n const cell = row.querySelector(`.${col_class}`);\n cell.setAttribute('value', new_value);\n cell.textContent = formatCurrency(new_value);\n}\nfunction createEditableCell(cellClass, isCost) {\n // get cell\n const cell = document.querySelector(`.active-editing td.${cellClass}`);\n // Create an input element to edit the value\n var textbox = document.createElement('input');\n textbox.type = 'text';\n if (isCost) {\n var value = cell.getAttribute('value');\n } else {\n var value = cell.textContent;\n }\n textbox.value = displayWithCommas(value);\n // Clear the current content and append the textbox to the cell\n cell.innerHTML = '';\n cell.appendChild(textbox);\n}\nfunction createServiceDropdown() {\n // get cell\n var cellClass = 'service';\n const cell = document.querySelector(`.active-editing td.${cellClass}`);\n // add service dropdown\n const serviceDropdown = dropdown.create(Services.list());\n serviceDropdown.value = cell.textContent;\n // Clear the current content and append the textbox to the cell\n cell.innerHTML = '';\n cell.appendChild(serviceDropdown);\n}\nconst Cell = {\n getValue: function (row, className) {\n return getCellValue(row, className);\n },\n getText: function (row, className) {\n return getCellText(row, className);\n },\n updateValue: function (row, col_class, new_value) {\n updateTableCell(row, col_class, new_value);\n },\n createTextbox: function (className, isCost) {\n createEditableCell(className, isCost);\n },\n createServiceDropdown: createServiceDropdown\n};\n/* harmony default export */ const cells = (Cell);\n;// CONCATENATED MODULE: ./src/js/components/table/subcomponents/columns.js\n\n\n// position is index at which new column will be inserted\nfunction addCol(position, htmlContent = '', headerTitle = '') {\n // Get the table element by its ID\n let table = document.getElementById('main-table');\n\n // Validate position\n let maxPosition = table.rows[0].cells.length;\n if (position < 0 || position > maxPosition) {\n console.error(`Position ${position} is out of bounds.`);\n return;\n }\n\n // Insert the header if provided\n let thead = table.tHead;\n if (headerTitle && thead) {\n let th = document.createElement('th');\n th.innerHTML = headerTitle; // Use innerHTML to insert HTML content\n thead.rows[0].insertBefore(th, thead.rows[0].cells[position]);\n }\n\n // Insert new cells into each row of the table body\n let tbody = table.tBodies[0];\n if (tbody) {\n for (let i = 0; i < tbody.rows.length; i++) {\n let row = tbody.rows[i];\n let td = document.createElement('td');\n td.innerHTML = htmlContent; // Use innerHTML to insert HTML content\n row.insertBefore(td, row.cells[position]);\n }\n }\n}\nfunction ncols() {\n const table = document.getElementById('main-table');\n // Ensure that the row exists before counting the columns\n return table.rows[0].cells.length;\n}\nfunction addColToEnd(htmlContents = [], headerTitle = '') {\n // count columns and add new column to the end\n const position = ncols('main-table');\n addCol(position, htmlContents, headerTitle);\n}\nfunction assignClassToColumn(headerName, className) {\n // Get the table element by its ID\n let table = document.getElementById('main-table');\n\n // Find the index of the column by its header name\n const thead = table.tHead;\n if (!thead || thead.rows.length === 0) {\n console.error('The table header is not found or has no rows.');\n return;\n }\n let headerCellIndex = -1;\n const headerCells = thead.rows[0].cells; // Assuming the first row contains header cells ()\n for (let i = 0; i < headerCells.length; i++) {\n if (headerCells[i].textContent.trim() === headerName) {\n headerCellIndex = i;\n break;\n }\n }\n if (headerCellIndex === -1) {\n console.error(`No header found with name \"${headerName}\"`);\n return;\n }\n\n // Assign the class to each cell in the specified column index within the tbody\n let tbody = table.tBodies[0];\n if (tbody) {\n let bodyRows = tbody.rows;\n for (let row of bodyRows) {\n if (row.cells[headerCellIndex]) {\n row.cells[headerCellIndex].classList.add(className);\n }\n }\n }\n}\nfunction addCostClass(headerName) {\n assignClassToColumn(headerName, 'cost');\n\n // Get all the cells with the specified class name\n const cells = document.querySelectorAll(`.cost`);\n cells.forEach(cell => {\n // Get the current text content of the cell and assign it to 'value' attribute\n if (!cell.getAttribute('value')) {\n const cellText = cell.textContent.trim();\n const cellValue = isNaN(cellText) || cellText === '' ? 0 : parseFloat(cellText);\n cell.setAttribute('value', cellValue);\n\n // Now format the text content like currency and replace it in the cell\n const formattedCurrency = formatCurrency(parseFloat(cellValue));\n cell.textContent = formattedCurrency;\n }\n });\n}\nfunction assignColumnClasses(columnDefinitions) {\n columnDefinitions.forEach(column => {\n // Assign class to column\n assignClassToColumn(column.title, column.className);\n\n // If the column is a cost column, add the specific cost class\n if (column.isCost) {\n addCostClass(column.title);\n }\n\n // show the column\n showColumnByTitle(column.title);\n });\n}\nfunction hideColumn(index) {\n var table = document.getElementById('main-table');\n var rows = table.rows;\n for (var i = 0; i < rows.length; i++) {\n var cells = rows[i].cells;\n if (cells.length > index) {\n cells[index].style.display = 'none';\n }\n }\n}\n\n// Function to show a specific column\nfunction showColumn(index) {\n var table = document.getElementById('main-table');\n var rows = table.rows;\n for (var i = 0; i < rows.length; i++) {\n var cells = rows[i].cells;\n if (cells.length > index) {\n cells[index].style.display = 'table-cell';\n }\n }\n}\n\n// Function to get the column index by title\nfunction getColumnIndexByTitle(table, title) {\n var headers = table.querySelectorAll('th');\n for (var i = 0; i < headers.length; i++) {\n if (headers[i].innerText === title) {\n return i;\n }\n }\n return -1; // Column not found\n}\n\n// Function to hide a column by title\nfunction hideColumnByTitle(title) {\n var table = document.getElementById('main-table');\n var index = getColumnIndexByTitle(table, title);\n if (index !== -1) {\n hideColumn(index);\n } else {\n console.log(`Column with title \"${title}\" not found.`);\n }\n}\n\n// Function to show a column by title\nfunction showColumnByTitle(title) {\n var table = document.getElementById('main-table');\n var index = getColumnIndexByTitle(table, title);\n if (index !== -1) {\n showColumn(index);\n } else {\n console.log(`Column with title \"${title}\" not found.`);\n }\n}\nconst Column = {\n add: function (position, htmlContent, headerTitle) {\n return addCol(position, htmlContent, headerTitle);\n },\n addAtEnd: function (htmlContent, headerTitle) {\n return addColToEnd(htmlContent, headerTitle);\n },\n assignClasses: function (column_definitions) {\n return assignColumnClasses(column_definitions);\n },\n hide: function (colName) {\n hideColumnByTitle(colName);\n },\n show: function (colName) {\n showColumnByTitle(colName);\n }\n};\n/* harmony default export */ const columns = (Column);\n;// CONCATENATED MODULE: ./src/js/components/table/subcomponents/data.js\n\n\nfunction fillTable(data) {\n try {\n const table = document.getElementById('main-table');\n const thead = table.querySelector('thead');\n const tbody = table.querySelector('tbody');\n\n // clear existing data\n thead.innerHTML = '';\n tbody.innerHTML = '';\n\n // Create table header row\n const headerRow = document.createElement('tr');\n Object.keys(data[0]).forEach(key => {\n const header = document.createElement('th');\n header.textContent = key;\n headerRow.appendChild(header);\n });\n thead.appendChild(headerRow);\n\n // Create table body rows\n data.forEach(item => {\n const row = document.createElement('tr');\n Object.values(item).forEach(val => {\n const cell = document.createElement('td');\n cell.textContent = val;\n row.appendChild(cell);\n });\n tbody.appendChild(row);\n });\n } catch (error) {\n console.error('No table saved in localStorage:', error);\n }\n saveTableData();\n}\nasync function loadFromStorage() {\n // look up table in storage and pass to table load function\\\n if (CurrentFund.number()) {\n var key = `${CurrentPage.load()}_${CurrentFund.number()}`;\n } else {\n var key = CurrentPage.load();\n }\n const data = await loadTableData(key);\n if (!data) {\n // if no table in storage, return 0\n return 0;\n } else {\n fillTable(data);\n return 1;\n }\n}\nfunction loadFunds() {\n // get list of funds from storage\n const fundDict = FundLookupTable.retrieve();\n // build out data in correct format\n const resultArray = [];\n for (const key in fundDict) {\n if (fundDict.hasOwnProperty(key)) {\n resultArray.push({\n Fund: fundDict[key] // Use the value directly\n });\n }\n }\n fillTable(resultArray);\n}\nfunction getColumnIndexByClass(tbody, className) {\n const firstRow = tbody.rows[0];\n if (!firstRow) return -1; // Return -1 if there's no row to examine\n for (let cellIndex = 0; cellIndex < firstRow.cells.length; cellIndex++) {\n if (firstRow.cells[cellIndex].classList.contains(className)) {\n return cellIndex;\n }\n }\n return -1; // Return -1 if class name not found\n}\nfunction sort(primaryClass, secondaryClass) {\n const table = document.getElementById('main-table');\n const tbody = table.tBodies[0];\n const rows = Array.from(tbody.rows);\n\n // Get the column indices by class name\n const primaryColIndex = getColumnIndexByClass(tbody, primaryClass);\n const secondaryColIndex = getColumnIndexByClass(tbody, secondaryClass);\n\n // exit if classes don't exist\n if (primaryColIndex === -1) {\n console.error(`Column class ${classA} not found in table`);\n return;\n } else if (secondaryColIndex === -1) {\n console.error(`Column class ${classB} not found in table`);\n return;\n }\n\n // Sort the rows based on the text content of the cells\n rows.sort((rowA, rowB) => {\n // Primary column comparison\n const primaryA = unformatCurrency(rowA.cells[primaryColIndex].textContent);\n const primaryB = unformatCurrency(rowB.cells[primaryColIndex].textContent);\n if (primaryA < primaryB) return -1;\n if (primaryA > primaryB) return 1;\n\n // Secondary column comparison (if primary is equal)\n const secondaryA = unformatCurrency(rowA.cells[secondaryColIndex].textContent);\n const secondaryB = unformatCurrency(rowB.cells[secondaryColIndex].textContent);\n if (secondaryA < secondaryB) return -1;\n if (secondaryA > secondaryB) return 1;\n\n // If both columns are equal\n return 0;\n });\n\n // Reattach sorted rows to the table body\n rows.forEach(row => tbody.appendChild(row));\n}\nconst Data = {\n load: loadFromStorage,\n loadFunds: loadFunds,\n sort: function (colA, colB) {\n sort(colA, colB);\n }\n};\n/* harmony default export */ const data = (Data);\n;// CONCATENATED MODULE: ./src/js/components/table/table.js\n\n\n\n\n\n\n\n\nfunction adjustTableWidth(width_pct) {\n const table = document.getElementById('main-table');\n table.style.width = width_pct;\n}\nfunction clearTable() {\n const table = document.getElementById('main-table');\n table.querySelector('thead').innerHTML = '';\n table.querySelector('tbody').innerHTML = '';\n}\nfunction showTable() {\n const table = document.getElementById('main-table');\n table.style.display = 'table';\n}\nfunction hideTable() {\n const table = document.getElementById('main-table');\n table.style.display = 'none';\n buttons.AddRow.hide();\n}\nconst Table = {\n Buttons: buttons,\n Cell: cells,\n Columns: columns,\n Header: headers,\n Rows: rows,\n Data: data,\n // functions\n adjustWidth: function (width_pct) {\n adjustTableWidth(width_pct);\n },\n clear: clearTable,\n hide: hideTable,\n show: showTable,\n save: saveTableData\n};\n/* harmony default export */ const components_table_table = (Table);\n;// CONCATENATED MODULE: ./src/js/components/accordion/accordion.js\n\n\n\n\n\nconst FundTable = {\n table_id: fund => {\n return `table-${fund}`;\n },\n init: function (fund) {\n // create empty table and put it in the accordion\n var table = document.createElement('table');\n table.id = this.table_id(fund);\n table.classList.add('accordion-table');\n var parent = document.querySelector(`#fund_${fund}_content .accordion-body`);\n parent.appendChild(table);\n },\n createNewCell: function (content, row) {\n const newCell = document.createElement('td');\n newCell.innerHTML = content;\n row.appendChild(newCell);\n },\n addRow: function (fund, name, number) {\n var table = document.getElementById(this.table_id(fund));\n var new_row = document.createElement('tr');\n table.appendChild(new_row);\n // Create a cell for the line item label\n this.createNewCell(name, new_row);\n // create a cell for the amount\n this.createNewCell(formatCurrency(number), new_row);\n // create Edit button \n var button = '';\n if (name != 'Total') {\n button = components_table_table.Buttons.Edit.html;\n }\n this.createNewCell(button, new_row);\n },\n fill: function (fund) {\n this.init(fund);\n const fundObject = new Fund(fund);\n this.addRow(fund, 'Personnel Expenses', fundObject.getPersonnelCost());\n this.addRow(fund, 'Non-Personnel Expenses', fundObject.getNonPersonnelCost());\n this.addRow(fund, 'Revenue', fundObject.getRevenue());\n this.addRow(fund, 'Net Expenses (Revenues)', fundObject.getTotal());\n }\n};\nconst Item = {\n html: function (fund) {\n var id = fund; // cleanString(fund);\n return `

\n \n

\n
\n
\n
`;\n },\n add: function (fund) {\n // get accordion and add a new item to it\n const parent = document.getElementById('summary-accordion');\n const item_element = document.createElement('div');\n item_element.classList.add('accordion-item');\n item_element.innerHTML = this.html(fund);\n parent.appendChild(item_element);\n FundTable.fill(fund);\n },\n FundTable: FundTable,\n updateHeader: function (fund, new_amount) {\n const header_btn = document.querySelector(`#fund_${fund}_header button`);\n header_btn.querySelector('span.name').textContent = FundLookupTable.getName(fund);\n header_btn.querySelector('span.amount').textContent = formatCurrency(new_amount);\n }\n};\nconst accordion_Accordion = {\n Item: Item,\n hide: function () {\n document.getElementById('accordion-div').style.display = 'none';\n // reset to delete content\n document.getElementById('summary-accordion').innerHTML = '';\n },\n show: function () {\n document.getElementById('accordion-div').style.display = 'block';\n },\n async createFromFunds() {\n var funds = FundLookupTable.listFunds();\n funds.forEach(fund => {\n Item.add(fund);\n const fundObject = new Fund(fund);\n Item.updateHeader(fund, fundObject.getTotal());\n });\n }\n};\n/* harmony default export */ const components_accordion_accordion = ((/* unused pure expression or super */ null && (accordion_Accordion)));\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/js/components/file_upload/file_upload.css\nvar file_upload = __webpack_require__(39);\n;// CONCATENATED MODULE: ./src/js/components/file_upload/file_upload.css\n\n \n \n \n \n \n \n \n \n \n\nvar file_upload_options = {};\n\nfile_upload_options.styleTagTransform = (styleTagTransform_default());\nfile_upload_options.setAttributes = (setAttributesWithoutAttributes_default());\nfile_upload_options.insert = insertBySelector_default().bind(null, \"head\");\nfile_upload_options.domAPI = (styleDomAPI_default());\nfile_upload_options.insertStyleElement = (insertStyleElement_default());\n\nvar file_upload_update = injectStylesIntoStyleTag_default()(file_upload/* default */.A, file_upload_options);\n\n\n\n\n /* harmony default export */ const file_upload_file_upload = (file_upload/* default */.A && file_upload/* default */.A.locals ? file_upload/* default */.A.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/js/utils/data_utils/XLSX_handlers.js\n\n\n\n\nfunction deleteTopRowsUntilFullData(data) {\n // function to try to find the top of the usable data\n let fullDataRowFound = false;\n while (!fullDataRowFound && data.length > 0) {\n const row = data[0]; // Get the top row\n let hasAllData = true;\n for (const cell of row) {\n if (cell == null || cell === '') {\n hasAllData = false;\n break;\n }\n }\n if (hasAllData && row.length > 1) {\n fullDataRowFound = true;\n } else {\n // delete the top row if it's not the header row\n data.shift();\n }\n }\n return data;\n}\nfunction processWorkbook(arrayBuffer) {\n const workbook = XLSX.read(arrayBuffer, {\n type: 'array'\n });\n workbook.SheetNames.forEach(sheetName => {\n // only convert sheets we need\n if (Object.keys(SHEETS).includes(sheetName)) {\n // read in sheets\n const sheet = workbook.Sheets[sheetName];\n const rawData = XLSX.utils.sheet_to_json(sheet, {\n header: 1,\n defval: ''\n });\n\n // Clean the data by removing top rows with incomplete data\n const dataRows = deleteTopRowsUntilFullData(rawData);\n\n // get new headers\n const headers = dataRows[0];\n\n // isolate Fund column to split data\n const fundIndex = headers.indexOf('Fund');\n if (fundIndex === -1) {\n console.error(`No 'Fund' column found in sheet ${sheetName}`);\n return;\n }\n\n // Save a dictionary of data for each fund for each sheet\n const fundData = {};\n dataRows.forEach(row => {\n const fund = row[fundIndex];\n if (fund && fund != \"Fund\") {\n if (!fundData[fund]) {\n fundData[fund] = [];\n }\n const rowData = {};\n headers.forEach((header, index) => {\n rowData[removeNewLines(header)] = row[index];\n });\n fundData[fund].push(rowData);\n }\n });\n\n // save fund number and name as we go along\n FundLookupTable.update(fundData);\n Object.keys(fundData).forEach(fund => {\n const key = `${SHEETS[sheetName]}_${fund}`;\n localStorage.setItem(key, JSON.stringify(fundData[fund]));\n });\n }\n\n // But also save the possible services\n else if (sheetName == 'Drop-Downs') {\n const sheet = workbook.Sheets[sheetName];\n // Convert the sheet to JSON to easily manipulate data\n const sheetData = XLSX.utils.sheet_to_json(sheet, {\n header: 1\n });\n\n // Locate the \"services\" column header in row 0\n const headerRow = sheetData[0];\n const servicesIndex = headerRow.indexOf('Services');\n if (servicesIndex === -1) {\n console.error('Header \"Services\" not found');\n } else {\n // Extract data from the \"services\" column (excluding the header row)\n const servicesColumn = sheetData.slice(1).map(row => row[servicesIndex]);\n const cleanedServicesColumn = servicesColumn.filter(value => value != null);\n // save the data\n Services.save(cleanedServicesColumn);\n }\n }\n });\n console.log('all excel data saved');\n}\n\n// Utility function to append a sheet to the workbook if data is present\nfunction appendSheetToWorkbook(workbook, data, sheetName) {\n if (data.length > 0) {\n const sheet = XLSX.utils.json_to_sheet(data);\n XLSX.utils.book_append_sheet(workbook, sheet, sheetName);\n }\n}\nfunction XLSX_handlers_downloadXLSX() {\n const baseline = new Baseline();\n const workbook = XLSX.utils.book_new(); // Create a new workbook\n\n const dataMap = {\n Personnel: 'personnel',\n Overtime: 'overtime',\n NonPersonnel: 'nonpersonnel',\n Revenue: 'revenue'\n };\n const sheetData = {\n Personnel: [],\n Overtime: [],\n NonPersonnel: [],\n Revenue: []\n };\n baseline.funds.forEach(fund => {\n Object.keys(dataMap).forEach(sheetName => {\n if (fund[dataMap[sheetName]] && fund[dataMap[sheetName]].table) {\n sheetData[sheetName].push(...fund[dataMap[sheetName]].table);\n }\n });\n });\n Object.keys(sheetData).forEach(sheetName => {\n appendSheetToWorkbook(workbook, sheetData[sheetName], sheetName);\n });\n\n // Generate a downloadable file\n const wbout = XLSX.write(workbook, {\n bookType: 'xlsx',\n type: 'array'\n });\n const blob = new Blob([wbout], {\n type: 'application/octet-stream'\n });\n\n // Create a link and trigger the download\n const link = document.createElement(\"a\");\n link.href = URL.createObjectURL(blob);\n link.download = \"baseline_data.xlsx\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n}\n;// CONCATENATED MODULE: ./src/js/components/file_upload/file_upload.js\n\n\nconst FileUpload = {\n init: function () {\n const inputObject = document.getElementById('file-input');\n inputObject.addEventListener('change', function (event) {\n readXL(event);\n });\n },\n show: function () {\n const inputObject = document.getElementById('file-input');\n inputObject.style.display = '';\n },\n hide: function () {\n const inputObject = document.getElementById('file-input');\n inputObject.style.display = 'none';\n }\n};\nfunction readXL(event) {\n const file = event.target.files[0];\n if (file) {\n const reader = new FileReader();\n reader.onload = function (e) {\n const arrayBuffer = e.target.result;\n processWorkbook(arrayBuffer);\n };\n reader.onerror = function (err) {\n console.error('Error reading file:', err);\n };\n reader.readAsArrayBuffer(file); // Read the file as an ArrayBuffer\n }\n}\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/js/components/modal/modal.css\nvar modal = __webpack_require__(95);\n;// CONCATENATED MODULE: ./src/js/components/modal/modal.css\n\n \n \n \n \n \n \n \n \n \n\nvar modal_options = {};\n\nmodal_options.styleTagTransform = (styleTagTransform_default());\nmodal_options.setAttributes = (setAttributesWithoutAttributes_default());\nmodal_options.insert = insertBySelector_default().bind(null, \"head\");\nmodal_options.domAPI = (styleDomAPI_default());\nmodal_options.insertStyleElement = (insertStyleElement_default());\n\nvar modal_update = injectStylesIntoStyleTag_default()(modal/* default */.A, modal_options);\n\n\n\n\n /* harmony default export */ const modal_modal = (modal/* default */.A && modal/* default */.A.locals ? modal/* default */.A.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/js/components/modal/modal.js\n\nfunction clearModal() {\n updateModalTitle('');\n document.getElementById('modal-body').innerHTML = '';\n //removeAllModalLinks()\n}\nfunction hideModal(modal_id) {\n $('#' + modal_id).modal('hide');\n}\nfunction showModal(modal_id) {\n $('#' + modal_id).modal('show');\n}\nfunction showModalHandler() {\n showModal('main-modal');\n}\nconst Submit = {\n handler: null,\n init: function (onSubmit) {\n const modal = document.getElementById('main-modal');\n // add onSubmit function as handler\n this.handler = function (event) {\n event.preventDefault();\n onSubmit(event);\n };\n // Adding the handler reference as the event listener\n modal.addEventListener('submit', this.handler);\n },\n deinit: function () {\n const modal = document.getElementById('main-modal');\n if (this.handler !== null) {\n // Removing the event listener and clear the handler\n modal.removeEventListener('submit', this.handler);\n this.handler = null;\n }\n }\n};\nconst Link = {\n add: function (button_id) {\n document.getElementById(button_id).addEventListener('click', showModalHandler);\n },\n remove: function (button_id) {\n document.getElementById(button_id).removeEventListener('click', showModalHandler);\n }\n};\nfunction updateModalTitle(title) {\n document.getElementById('modal-title').textContent = title;\n}\nconst Title = {\n update: function (title) {\n updateModalTitle(title);\n }\n};\nconst Modal = {\n hide: function () {\n hideModal('main-modal');\n },\n show: function () {\n showModal('main-modal');\n },\n clear: clearModal,\n Title: Title,\n Link: Link,\n Submit: Submit\n};\n/* harmony default export */ const components_modal_modal = (Modal);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/js/components/nav_buttons/nav_buttons.css\nvar nav_buttons = __webpack_require__(595);\n;// CONCATENATED MODULE: ./src/js/components/nav_buttons/nav_buttons.css\n\n \n \n \n \n \n \n \n \n \n\nvar nav_buttons_options = {};\n\nnav_buttons_options.styleTagTransform = (styleTagTransform_default());\nnav_buttons_options.setAttributes = (setAttributesWithoutAttributes_default());\nnav_buttons_options.insert = insertBySelector_default().bind(null, \"head\");\nnav_buttons_options.domAPI = (styleDomAPI_default());\nnav_buttons_options.insertStyleElement = (insertStyleElement_default());\n\nvar nav_buttons_update = injectStylesIntoStyleTag_default()(nav_buttons/* default */.A, nav_buttons_options);\n\n\n\n\n /* harmony default export */ const nav_buttons_nav_buttons = (nav_buttons/* default */.A && nav_buttons/* default */.A.locals ? nav_buttons/* default */.A.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/js/components/nav_buttons/nav_buttons.js\n\n\nfunction initializeNavButtons() {\n // initialize last button\n const last_btn = document.getElementById('btn-last');\n last_btn.addEventListener('click', lastPage);\n // initialize next button\n const next_btn = document.getElementById('btn-next');\n next_btn.addEventListener('click', nextPage);\n disable('btn-next');\n}\nfunction hideNavButtons() {\n document.getElementById('nav-btns').style.display = 'none';\n}\nfunction showNavButtons() {\n document.getElementById('nav-btns').style.display = 'block';\n initializeNavButtons();\n}\nfunction disable(button_id) {\n document.getElementById(button_id).classList.add('disabled');\n}\nfunction enable(button_id) {\n document.getElementById(button_id).classList.remove('disabled');\n}\nconst Next = {\n disable: function () {\n disable('btn-next');\n },\n enable: function () {\n enable('btn-next');\n }\n};\nconst Last = {\n disable: function () {\n disable('btn-last');\n },\n enable: function () {\n enable('btn-last');\n }\n};\nconst NavButtons = {\n hide: hideNavButtons,\n show: showNavButtons,\n Next: Next,\n Last: Last\n};\n/* harmony default export */ const components_nav_buttons_nav_buttons = (NavButtons);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/js/components/prompt/prompt.css\nvar prompt_prompt = __webpack_require__(225);\n;// CONCATENATED MODULE: ./src/js/components/prompt/prompt.css\n\n \n \n \n \n \n \n \n \n \n\nvar prompt_options = {};\n\nprompt_options.styleTagTransform = (styleTagTransform_default());\nprompt_options.setAttributes = (setAttributesWithoutAttributes_default());\nprompt_options.insert = insertBySelector_default().bind(null, \"head\");\nprompt_options.domAPI = (styleDomAPI_default());\nprompt_options.insertStyleElement = (insertStyleElement_default());\n\nvar prompt_update = injectStylesIntoStyleTag_default()(prompt_prompt/* default */.A, prompt_options);\n\n\n\n\n /* harmony default export */ const components_prompt_prompt = (prompt_prompt/* default */.A && prompt_prompt/* default */.A.locals ? prompt_prompt/* default */.A.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/js/components/prompt/subcomponents/text.js\nfunction showPrompt() {\n document.getElementById(\"prompt-div\").style.display = \"block\";\n}\nfunction hidePrompt() {\n document.getElementById('prompt-div').style.display = 'none';\n}\nfunction updatePrompt(prompt) {\n document.getElementById('prompt').textContent = prompt;\n showPrompt();\n}\nconst Text = {\n show: showPrompt,\n hide: hidePrompt,\n update: function (text) {\n updatePrompt(text);\n }\n};\n/* harmony default export */ const subcomponents_text = (Text);\n;// CONCATENATED MODULE: ./src/js/components/prompt/subcomponents/buttons.js\nfunction showPromptButton(id) {\n // make buttons visible\n document.getElementById(id).style.display = 'inline';\n}\nfunction updatePromptButton(id, text) {\n document.getElementById(id).textContent = text;\n showPromptButton(id);\n}\nfunction hidePromptButton(id) {\n document.getElementById(id).style.display = 'none';\n}\nfunction unclickAll() {\n document.getElementById('option1').classList.remove('clicked');\n document.getElementById('option2').classList.remove('clicked');\n}\nfunction applyClickedStyle(button) {\n unclickAll();\n button.classList.add('clicked');\n}\nfunction addPromptButtonAction(button_id, action_fn) {\n const buttonElement = document.getElementById(button_id);\n buttonElement.addEventListener('click', action_fn);\n buttonElement.addEventListener('click', function () {\n applyClickedStyle(this);\n });\n}\nfunction removePromptButtonAction(button_id, action_fn) {\n document.getElementById(button_id).removeEventListener('click', action_fn);\n}\nconst Left = {\n show: function () {\n showPromptButton('option1');\n },\n hide: function () {\n hidePromptButton('option1');\n },\n updateText: function (text) {\n updatePromptButton('option1', text);\n },\n addAction: function (action_fn) {\n addPromptButtonAction('option1', action_fn);\n },\n removeAction: function (action_fn) {\n removePromptButtonAction('option1', action_fn);\n }\n};\nconst Right = {\n show: function () {\n showPromptButton('option2');\n },\n hide: function () {\n hidePromptButton('option2');\n },\n updateText: function (text) {\n updatePromptButton('option2', text);\n },\n addAction: function (action_fn) {\n addPromptButtonAction('option2', action_fn);\n },\n removeAction: function (action_fn) {\n removePromptButtonAction('option2', action_fn);\n }\n};\nconst buttons_Buttons = {\n Left: Left,\n Right: Right,\n show: function () {\n showPromptButton('option1');\n showPromptButton('option2');\n },\n hide: function () {\n hidePromptButton('option1');\n hidePromptButton('option2');\n },\n reset: unclickAll\n};\n/* harmony default export */ const subcomponents_buttons = (buttons_Buttons);\n;// CONCATENATED MODULE: ./src/js/components/prompt/prompt.js\n\n\n\nconst prompt_Prompt = {\n Text: subcomponents_text,\n Buttons: subcomponents_buttons,\n hide: function () {\n subcomponents_text.hide();\n subcomponents_buttons.hide();\n },\n show: function () {\n subcomponents_text.show();\n subcomponents_buttons.show();\n }\n};\n/* harmony default export */ const js_components_prompt_prompt = (prompt_Prompt);\n;// CONCATENATED MODULE: ./src/js/components/body/body.js\n\n\n\n\n\n\n\n\n\nfunction resetPage() {\n // hide everything in the body\n components_welcome_welcome.hide();\n components_modal_modal.clear();\n components_modal_modal.hide();\n components_nav_buttons_nav_buttons.hide();\n js_components_prompt_prompt.hide();\n components_table_table.hide();\n components_sidebar_sidebar.hide();\n accordion_Accordion.hide();\n FileUpload.hide();\n // disable next button\n components_nav_buttons_nav_buttons.Next.disable();\n js_components_prompt_prompt.Buttons.reset();\n // disable submit button\n components_modal_modal.Submit.deinit();\n}\nconst body_Body = {\n reset: resetPage\n};\n/* harmony default export */ const components_body_body = (body_Body);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/js/components/form/form.css\nvar form_form = __webpack_require__(109);\n;// CONCATENATED MODULE: ./src/js/components/form/form.css\n\n \n \n \n \n \n \n \n \n \n\nvar form_options = {};\n\nform_options.styleTagTransform = (styleTagTransform_default());\nform_options.setAttributes = (setAttributesWithoutAttributes_default());\nform_options.insert = insertBySelector_default().bind(null, \"head\");\nform_options.domAPI = (styleDomAPI_default());\nform_options.insertStyleElement = (insertStyleElement_default());\n\nvar form_update = injectStylesIntoStyleTag_default()(form_form/* default */.A, form_options);\n\n\n\n\n /* harmony default export */ const components_form_form = (form_form/* default */.A && form_form/* default */.A.locals ? form_form/* default */.A.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/js/components/form/subcomponents/fields.js\n// function to add questions to forms\n// type is 'input' or 'textarea'\n// inputType is for validation ('number' or 'text', etc)\nfunction appendFormElement(type, label, inputId, required, inputType, form_id = 'new-form', cost = false) {\n // change if we want forms elsewhere\n const form = document.getElementById(form_id);\n\n // create outer wrapper for element\n const wrapper = document.createElement('div');\n\n // label question\n const labelEl = document.createElement('label');\n labelEl.textContent = label;\n\n // set type (input or textarea)\n let inputEl;\n if (type === 'input') {\n inputEl = document.createElement('input');\n inputEl.type = inputType;\n } else if (type === 'textarea') {\n inputEl = document.createElement('textarea');\n } else {\n throw new Error('Unsupported element type');\n }\n\n // mark as required if applicable\n inputEl.required = required;\n\n // If an ID is provided, set it on the element\n if (inputId) {\n inputEl.id = inputId;\n }\n\n // add elements\n wrapper.appendChild(labelEl);\n wrapper.appendChild(inputEl);\n form.appendChild(wrapper);\n}\nconst NewField = {\n shortText: function (label, inputId, required = false, form_id = 'new-form', cost = false) {\n appendFormElement('input', label, inputId, required, 'text', form_id);\n },\n longText: function (label, inputId, required = false, form_id = 'new-form', cost = false) {\n appendFormElement('textarea', label, inputId, required, form_id);\n },\n numericInput: function (label, inputId, required = false, form_id = 'new-form', cost = true) {\n appendFormElement('input', label, inputId, required, 'number', form_id);\n }\n};\n/* harmony default export */ const fields = (NewField);\n;// CONCATENATED MODULE: ./src/js/components/form/subcomponents/submit.js\nfunction addSubmitButtonToForm(form_id) {\n // Find the form by its ID\n const form = document.getElementById(form_id);\n\n // Create the container `div` for the button\n const buttonContainer = document.createElement('div');\n buttonContainer.id = 'submit-btn-container';\n\n // Create the submit input\n const submitInput = document.createElement('input');\n submitInput.className = 'btn btn-submit'; // Use appropriate class for your design\n submitInput.type = 'submit';\n submitInput.value = 'Submit';\n\n // Append the submit input to the container\n buttonContainer.appendChild(submitInput);\n\n // Append the container to the form\n form.appendChild(buttonContainer);\n}\nconst SubmitButton = {\n add: function () {\n addSubmitButtonToForm('new-form');\n }\n};\n/* harmony default export */ const subcomponents_submit = (SubmitButton);\n;// CONCATENATED MODULE: ./src/js/components/form/form.js\n\n\n\n\nfunction fetchAllResponses(event) {\n // Assuming `event.target` is the form itself\n const form = event.target;\n\n // Initialize an empty array to hold the input values\n let formData = {};\n\n // Loop through each form element\n for (let i = 0; i < form.elements.length; i++) {\n const element = form.elements[i];\n\n // Exclude elements that aren't inputs, textareas, or select\n if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA' || element.tagName === 'SELECT') {\n // Exclude input types that are not considered for submission (such as `submit`)\n if (element.type !== 'submit' && element.type !== 'button') {\n formData[element.id] = element.value;\n }\n }\n }\n form.reset();\n return formData;\n}\nfunction addForm(element_id = 'modal-body', form_id = 'new-form') {\n const target_elem = document.getElementById(element_id);\n\n // create form\n const form = document.createElement('form');\n form.setAttribute('id', form_id);\n\n // Append the form to the modal body\n target_elem.appendChild(form);\n}\nconst Form = {\n new: function (parent_elem_id) {\n addForm(parent_elem_id, 'new-form');\n },\n fetchAllResponses: function (event) {\n return fetchAllResponses(event);\n },\n NewField: fields,\n Dropdown: dropdown,\n SubmitButton: subcomponents_submit\n};\n/* harmony default export */ const js_components_form_form = (Form);\n;// CONCATENATED MODULE: ./src/js/views/07_new_initiatives/helpers.js\n\n\n\n\n\n\n\n\n\nfunction initializePageView() {\n // Prepare page view\n components_body_body.reset();\n components_nav_buttons_nav_buttons.show();\n components_sidebar_sidebar.show();\n\n //table appearance\n components_table_table.adjustWidth('70%');\n components_table_table.Buttons.AddRow.updateText('Add another new initiative');\n\n // remove fund selection\n localStorage.setItem(\"fund\", '');\n\n // Load text\n components_header_header.update('New Initiatives');\n js_components_prompt_prompt.Text.update('Do you have any new initiatives for FY26?');\n js_components_prompt_prompt.Buttons.Left.updateText('Yes');\n js_components_prompt_prompt.Buttons.Right.updateText('No');\n // clicking 'no new initialitives' will also take us to the next page\n js_components_prompt_prompt.Buttons.Right.addAction(nextPage);\n js_components_prompt_prompt.Buttons.Left.addAction(components_nav_buttons_nav_buttons.Next.enable);\n}\nfunction setUpModal() {\n // Initialize modal\n components_modal_modal.clear();\n components_modal_modal.Link.add('option1');\n components_modal_modal.Title.update('New initiative');\n components_modal_modal.Link.add('add-btn');\n}\nfunction setUpForm() {\n // Set up form\n js_components_form_form.new('modal-body');\n js_components_form_form.NewField.shortText('Initiative Name:', 'Initiative Name', true);\n js_components_form_form.NewField.longText(`Describe what the Initiative is and why it is needed and should be funded: \n i). What is the business case for the Initiative?\n ii). Why is the initiative needed? What is the value-add to residents? What is the Department’s plan for implementing the Initiative?\n iii). Why can’t the Initiative be funded with the Department’s baseline budget?`, 'Explanation', true);\n js_components_form_form.NewField.numericInput('What is your ballpark estimate of TOTAL ADDITONAL expenses associated with this initiative?', 'Ballpark Total Expenses', false);\n js_components_form_form.NewField.numericInput('Estimate of ADDITONAL personnel cost?', 'Personnel Cost', false);\n js_components_form_form.NewField.numericInput('Estimate of ADDITONAL nonpersonnel cost?', 'Non-personnel Cost', false);\n js_components_form_form.NewField.numericInput('Estimate of ADDITONAL revenue (if applicable)?', 'Revenue', false);\n js_components_form_form.SubmitButton.add();\n // Initialize form submission to table data\n components_modal_modal.Submit.init(handleNewInitSubmission);\n}\nfunction assignClasses() {\n // record columns and their classes\n const initiativesCols = [{\n title: 'Initiative Name',\n className: 'init-name'\n }, {\n title: `Explanation`,\n className: 'explanation'\n }, {\n title: 'Ballpark Total Expenses',\n className: 'total',\n isCost: true\n }, {\n title: 'Revenue',\n className: 'revenue',\n isCost: true\n }, {\n title: 'Personnel Cost',\n className: 'personnel',\n isCost: true\n }, {\n title: 'Non-personnel Cost',\n className: 'nonpersonnel',\n isCost: true\n }];\n\n // assign cost classes\n components_table_table.Columns.assignClasses(initiativesCols);\n}\nasync function initializeInitTable() {\n components_table_table.clear();\n // load table data from storage\n if (await components_table_table.Data.load()) {\n //after table is loaded, fill it\n assignClasses();\n tableView();\n }\n}\nfunction handleNewInitSubmission(event) {\n // get answers from form, hide form, show answers in table\n const responses = js_components_form_form.fetchAllResponses(event);\n // make sure it's not an empty response\n if (Object.values(responses)[0] != '') {\n // add data to table\n components_table_table.Rows.add(responses);\n // save it\n components_table_table.save();\n tableView();\n }\n}\nfunction tableView() {\n // change page view\n components_table_table.show();\n components_modal_modal.hide();\n js_components_prompt_prompt.hide();\n assignClasses();\n components_table_table.Buttons.AddRow.show();\n components_nav_buttons_nav_buttons.Next.enable();\n}\nfunction removeModalLinks() {\n components_modal_modal.Link.remove('option1');\n components_modal_modal.Link.remove('add-btn');\n}\nfunction removePromptButtonListeners() {\n js_components_prompt_prompt.Buttons.Right.removeAction(nextPage);\n js_components_prompt_prompt.Buttons.Left.removeAction(components_nav_buttons_nav_buttons.Next.enable);\n components_modal_modal.clear();\n}\n;// CONCATENATED MODULE: ./src/js/views/07_new_initiatives/main.js\n\n\n\n// set up page and initialize all buttons\nfunction loadNewInitiatives() {\n CurrentPage.update('new-inits');\n initializePageView();\n setUpModal();\n setUpForm();\n initializeInitTable();\n}\nfunction cleanUpInitiativesPage() {\n removeModalLinks();\n // remove event listeners on prompt buttons\n removePromptButtonListeners();\n}\n;// CONCATENATED MODULE: ./src/js/views/08_summary/main.js\n\n\n\n\n\n\nfunction summaryView() {\n Body.reset();\n Accordion.build();\n Accordion.show();\n\n // prompt buttons\n Prompt.Text.update('');\n Prompt.show();\n Prompt.Buttons.Left.updateText('Download Excel');\n Prompt.Buttons.Right.updateText('Go back to home');\n\n // update page text\n Subtitle.update('Summary');\n // add button links\n Prompt.Buttons.Right.addAction(returnToWelcome);\n Prompt.Buttons.Left.addAction(downloadXLSX);\n}\nconst returnToWelcome = () => {\n visitPage('welcome');\n};\nfunction disablePromptButtons() {\n Prompt.Buttons.Right.removeAction(returnToWelcome);\n Prompt.Buttons.Left.removeAction(downloadXLSX);\n}\n;// CONCATENATED MODULE: ./src/js/views/02_baseline_landing_page/helpers.js\n\n\n\n\n\n\nconst fundCols = [{\n title: 'Fund',\n className: 'fund-name'\n}];\nfunction preparePageView() {\n CurrentFund.reset();\n\n // prepare page view\n components_body_body.reset();\n components_nav_buttons_nav_buttons.show();\n\n // update page text\n components_header_header.update('Baseline Budget Request');\n // TODO: update to make dynamic\n js_components_prompt_prompt.Text.update(`We will now ask you a series of questions about your BASELINE budget request.\n At the end, we will ask you about any new initiatives (ie. supplemental requests).\n Select one of your funds to begin.`);\n}\nfunction allowRowSelection() {\n var tableRows = document.querySelectorAll(\"tbody tr\");\n tableRows.forEach(function (row) {\n row.addEventListener('mouseover', function () {\n this.classList.add('hover-effect');\n });\n row.addEventListener('mouseout', function () {\n this.classList.remove('hover-effect');\n });\n row.addEventListener('click', function () {\n selectFund(tableRows, this);\n });\n });\n}\nasync function initializeFundTable() {\n await components_table_table.Data.loadFunds();\n components_table_table.adjustWidth('30%');\n components_table_table.show();\n components_table_table.Columns.assignClasses(fundCols);\n allowRowSelection();\n}\nfunction selectFund(tableRows, selected_row) {\n // remove selected class from any other rows\n tableRows.forEach(function (tableRow) {\n tableRow.classList = '';\n });\n // add selected class to clicked row\n selected_row.classList.add('selected');\n // get fund and save selected fund\n var fund = selected_row.querySelector('.fund-name').textContent;\n var fundNumber = parseInt(fund);\n CurrentFund.update(fundNumber);\n // enable next step\n components_nav_buttons_nav_buttons.Next.enable();\n}\n;// CONCATENATED MODULE: ./src/js/views/02_baseline_landing_page/main.js\n\n\nfunction loadBaselineLandingPage() {\n //update page state\n CurrentPage.update('baseline-landing');\n preparePageView();\n initializeFundTable();\n}\n;// CONCATENATED MODULE: ./src/js/views/01_upload/helpers.js\n\n\n\n\n\n\nfunction helpers_initializePageView() {\n // remove fund selection\n localStorage.setItem(\"fund\", '');\n\n // prepare page view\n components_body_body.reset();\n components_nav_buttons_nav_buttons.show();\n FileUpload.show();\n\n // update page text\n components_header_header.update('Excel Upload');\n js_components_prompt_prompt.Text.update(`Upload the baseline detail sheet given by your budget analyst.`);\n\n // show and initialize file upload; enable continue after file saved in local storage \n FileUpload.init();\n components_nav_buttons_nav_buttons.Next.enable();\n}\n;// CONCATENATED MODULE: ./src/js/views/01_upload/main.js\n\n\nfunction loadUploadPage() {\n //update page state\n CurrentPage.update('upload');\n helpers_initializePageView();\n}\n;// CONCATENATED MODULE: ./src/js/views/00_welcome/helpers.js\n\n\n\n\n\n\n\n\nfunction _00_welcome_helpers_initializePageView() {\n // page set up\n components_body_body.reset();\n components_header_header.update(\"Welcome\");\n components_welcome_welcome.show();\n components_sidebar_sidebar.reset();\n}\nfunction addLinks() {\n // initialize links in buttons\n document.getElementById('step-upload').addEventListener('click', loadUploadPage);\n document.getElementById('step-initiatives').addEventListener('click', loadNewInitiatives);\n document.getElementById('step-revenue').addEventListener('click', loadBaselineLandingPage);\n document.getElementById('step-finish').addEventListener('click', _08_summary_main_namespaceObject.loadSummaryPage);\n}\n;// CONCATENATED MODULE: ./src/js/views/00_welcome/main.js\n\n\nfunction initializeWelcomePage() {\n CurrentPage.update('welcome');\n _00_welcome_helpers_initializePageView();\n addLinks();\n}\n;// CONCATENATED MODULE: ./src/js/views/03_revenue/helpers.js\n\n\n\n\n\n\n\n\n\nfunction helpers_preparePageView() {\n // prepare page view\n components_body_body.reset();\n components_nav_buttons_nav_buttons.show();\n\n // update page text\n components_header_header.update('Revenue Projections');\n // TODO: update to make dynamic\n js_components_prompt_prompt.Text.update(`Your revenue projection for FY26 is ${formatCurrency(REVENUE, true)}`);\n js_components_prompt_prompt.Buttons.Left.updateText('Confirm');\n js_components_prompt_prompt.Buttons.Right.updateText(\"This doesn't look right\");\n}\nfunction setUpNavButtons() {\n // clicking 'confirm' will also take us to the next page\n js_components_prompt_prompt.Buttons.Left.addAction(nextPage);\n // TODO: allow user to edit revenue here\n components_modal_modal.Link.add('option2');\n handleErrorComment();\n}\nfunction removeButtonEvents() {\n // remove event listeners on prompt buttons\n js_components_prompt_prompt.Buttons.Left.removeAction(nextPage);\n components_modal_modal.Link.remove('option2');\n}\nfunction handleErrorComment() {\n var fund = localStorage.getItem(\"fund\");\n components_modal_modal.clear();\n components_modal_modal.Title.update(`Comment on ${fund} Revenue`);\n js_components_form_form.new('modal-body');\n js_components_form_form.NewField.longText('Explain your concerns here. Someone from the revenue team will follow up with you.', 'revenue-comment', true);\n js_components_form_form.SubmitButton.add();\n // save comment on submission\n components_modal_modal.Submit.init(handleRevenueCommentSubmission);\n}\nfunction handleRevenueCommentSubmission(event) {\n // get data from form in modal \n const responses = js_components_form_form.fetchAllResponses(event);\n // TODO: save comment here\n\n // hide modal, update page, and enable continue\n components_modal_modal.hide();\n js_components_prompt_prompt.Buttons.hide();\n js_components_prompt_prompt.Text.update('Your comment has been received.');\n components_nav_buttons_nav_buttons.Next.enable();\n}\n;// CONCATENATED MODULE: ./src/js/views/03_revenue/main.js\n\n\nfunction loadRevenuePage() {\n //update page state\n CurrentPage.update('revenue');\n helpers_preparePageView();\n setUpNavButtons();\n}\nfunction cleanupRevenuePage() {\n removeButtonEvents();\n}\n;\n;// CONCATENATED MODULE: ./src/js/views/04_personnel/helpers.js\n\n\n\n\n\n\n\n\n\n\n\n\nfunction _04_personnel_helpers_preparePageView() {\n // prepare page view\n components_body_body.reset();\n components_nav_buttons_nav_buttons.show();\n components_sidebar_sidebar.show();\n components_table_table.adjustWidth('90%');\n components_nav_buttons_nav_buttons.Next.enable();\n\n // update page text\n components_header_header.update('Personnel');\n js_components_prompt_prompt.Text.update(`\n This table displays the number of FTEs in each job code for in your department's \n current (amended) FY25 budget. To make edits to the number of positions, click the\n \"Edit\" button on the row you would like to edit. The \"Total Cost\" column and the \n summary sidebar will also update to reflect any edits.\n `);\n}\nfunction helpers_assignClasses() {\n // record columns and their classes\n const personnelColumns = [{\n title: 'Job Title',\n className: 'job-name'\n }, {\n title: 'Account String',\n className: 'string'\n }, {\n title: 'Service',\n className: 'service'\n }, {\n title: `FY${FISCAL_YEAR} Requested FTE`,\n className: 'baseline-ftes'\n }, {\n title: `FY${FISCAL_YEAR} Average Projected Salary/Wage`,\n className: 'avg-salary',\n isCost: true\n }, {\n title: 'Total Cost',\n className: 'total-baseline',\n isCost: true\n }, {\n title: 'Edit',\n className: 'edit'\n }];\n\n // assign cost classes\n components_table_table.Columns.assignClasses(personnelColumns);\n}\nfunction personnelRowOnEdit() {\n components_table_table.Cell.createTextbox('baseline-ftes');\n components_table_table.Cell.createServiceDropdown(Services.list());\n}\nasync function initializePersonnelTable() {\n // load table data from local storage\n if (await components_table_table.Data.load()) {\n //after table is loaded, show it\n components_table_table.show();\n components_table_table.Columns.addAtEnd(components_table_table.Buttons.edit_confirm_btns, 'Edit');\n helpers_assignClasses();\n // add up the baseline costs and update sidebar\n updateDisplayandTotals();\n // activate edit buttons\n components_table_table.Buttons.Edit.init(personnelRowOnEdit, updateDisplayandTotals);\n initializeRowAddition();\n } else {\n js_components_prompt_prompt.Text.update('No personnel expenses for this fund.');\n }\n}\nfunction initializeRowAddition() {\n components_table_table.Buttons.AddRow.updateText(\"Add new job\");\n components_table_table.Buttons.AddRow.show();\n}\nfunction calculateTotalCost(ftes, avg_salary, fringe, cola, merit) {\n return ftes * avg_salary * (1 + fringe) * (1 + cola) * (1 + merit);\n}\n\n// update sidebar and also cost totals when the FTEs are edited\nfunction updateDisplayandTotals() {\n // calculate for each row\n let rows = document.getElementsByTagName('tr');\n for (let i = 1; i < rows.length; i++) {\n // fetch values for calculations\n let avg_salary = components_table_table.Cell.getValue(rows[i], 'avg-salary');\n let baseline_ftes = components_table_table.Cell.getText(rows[i], 'baseline-ftes');\n\n // calcuate #FTEs x average salary + COLA adjustments + merit adjustments + fringe\n let total_baseline_cost = calculateTotalCost(baseline_ftes, avg_salary, fringe, cola, merit);\n\n // update total column\n components_table_table.Cell.updateValue(rows[i], 'total-baseline', total_baseline_cost);\n }\n\n // Save the table after all updates are done\n components_table_table.save();\n}\nfunction helpers_setUpModal() {\n // Initialize modal\n components_modal_modal.clear();\n components_modal_modal.Link.add('add-btn');\n components_modal_modal.Title.update('New job');\n}\nfunction helpers_setUpForm() {\n // Set up form\n js_components_form_form.new('modal-body');\n js_components_form_form.NewField.shortText('Job Name:', 'job-name', true);\n js_components_form_form.NewField.shortText('Account String:', 'account-string', true);\n js_components_form_form.SubmitButton.add();\n // Initialize form submission to table data\n components_modal_modal.Submit.init(handleSubmitNewJob);\n}\nfunction handleSubmitNewJob(event) {\n // get answers from form, hide form, show answers in table\n const responses = js_components_form_form.fetchAllResponses(event);\n // make sure it's not an empty response\n if (Object.values(responses)[0] != '') {\n // change page view\n components_modal_modal.hide();\n\n // add data to table\n components_table_table.Rows.add(responses);\n components_table_table.show();\n components_table_table.Buttons.AddRow.show();\n // TODO: save table data\n // TODO: edit cost to show currency correctly\n }\n}\n;// CONCATENATED MODULE: ./src/js/views/04_personnel/main.js\n\n\nfunction loadPersonnelPage() {\n CurrentPage.update('personnel');\n _04_personnel_helpers_preparePageView();\n initializePersonnelTable();\n helpers_setUpModal();\n helpers_setUpForm();\n}\n;// CONCATENATED MODULE: ./src/js/views/05_overtime/helpers.js\n\n\n\n\n\n\n\n\nfunction _05_overtime_helpers_preparePageView() {\n // prepare page view\n components_body_body.reset();\n components_nav_buttons_nav_buttons.show();\n components_sidebar_sidebar.show();\n\n // enable next button\n components_nav_buttons_nav_buttons.Next.enable();\n\n // update page text\n components_header_header.update('Overtime Estimates');\n\n // activate table\n initializeOTTable();\n js_components_prompt_prompt.Text.update(`Please see your baseline overtime / holiday pay / shift premiums in the table below.\n Make any edits and continue.`);\n}\nfunction _05_overtime_helpers_assignClasses() {\n // record columns and their classes\n const OT_cols = [{\n title: 'Account String',\n className: 'string'\n }, {\n title: `Cost Center Name`,\n className: 'cc'\n }, {\n title: 'Service',\n className: 'service'\n }, {\n title: 'Recurring or One-Time',\n className: 'recurring'\n }, {\n title: 'Hourly Employee Overtime (Wages)',\n className: 'OT-wages',\n isCost: true\n }, {\n title: 'Salaried Employee Overtime (Salary)',\n className: 'OT-salary',\n isCost: true\n }, {\n title: 'Total Cost (including benefits)',\n className: 'total',\n isCost: true\n }, {\n title: 'Edit',\n className: 'edit'\n }];\n\n // assign cost classes\n components_table_table.Columns.assignClasses(OT_cols);\n}\nfunction OTRowOnEdit() {\n components_table_table.Cell.createTextbox('OT-wages', true);\n components_table_table.Cell.createTextbox('OT-salary', true);\n components_table_table.Cell.createServiceDropdown(Services.list());\n}\nasync function initializeOTTable() {\n // load table data from local storage\n if (await components_table_table.Data.load()) {\n //after table is loaded, fill it\n components_table_table.show();\n components_table_table.Columns.addAtEnd('0', 'Hourly Employee Overtime (Wages)');\n components_table_table.Columns.addAtEnd('0', 'Salaried Employee Overtime (Salary)');\n // Table.Columns.addAtEnd( '0', 'Total Cost (including benefits)');\n components_table_table.Columns.addAtEnd(components_table_table.Buttons.edit_confirm_btns, 'Edit');\n ;\n _05_overtime_helpers_assignClasses();\n // add up the baseline costs and update sidebar\n helpers_updateDisplayandTotals();\n // activate edit buttons\n components_table_table.Buttons.Edit.init(OTRowOnEdit, helpers_updateDisplayandTotals);\n } else {\n js_components_prompt_prompt.Text.update('No overtime expenses for this fund.');\n }\n}\nfunction helpers_calculateTotalCost(wages, salary, fringe) {\n return (wages + salary) * (1 + fringe);\n}\n\n// update sidebar and also cost totals when the FTEs are edited\nfunction helpers_updateDisplayandTotals() {\n // calculate for each row\n let rows = document.getElementsByTagName('tr');\n for (let i = 1; i < rows.length; i++) {\n // fetch values for calculations\n let OT_salary = components_table_table.Cell.getValue(rows[i], 'OT-salary');\n let OT_wages = components_table_table.Cell.getValue(rows[i], 'OT-wages');\n\n // add salary and wages and fringe benefits (FICA)\n let row_total = helpers_calculateTotalCost(OT_salary, OT_wages, OT_FRINGE);\n\n // update total\n components_table_table.Cell.updateValue(rows[i], 'total', row_total);\n\n //save data\n components_table_table.save();\n }\n}\n;// CONCATENATED MODULE: ./src/js/views/05_overtime/main.js\n\n\nfunction loadOTPage() {\n //update page state\n CurrentPage.update('overtime');\n _05_overtime_helpers_preparePageView();\n}\n;// CONCATENATED MODULE: ./src/js/views/06_nonpersonnel/helpers.js\n\n\n\n\n\n\n\n// \"Vendor\": \"Law Firm LLC\",\n// \"CPA #\" : \"765421\",\n// \"Account String\": \"1000-29320-320010\",\n// \"Object Name\": \"Consulting\",\n// \"End of Contract\": \"12/31/2024\",\n// \"Amount Remaining\" : 50000,\n// \"FY26 Request\": 100000\n\nconst nonPersonnelColumns = [{\n title: 'FY26 Request',\n className: 'request',\n isCost: true\n}, {\n title: 'Amount Remaining on Contract',\n className: 'remaining',\n isCost: true\n}, {\n title: 'Service',\n className: 'service'\n}, {\n title: 'Edit',\n className: 'edit'\n}, {\n title: 'Account String',\n className: 'account-string'\n}, {\n title: 'CPA #',\n className: 'cpa'\n}, {\n title: 'Contract End Date',\n className: 'contract-end'\n}, {\n title: 'Recurring or One-Time',\n className: 'recurring'\n}, {\n title: 'Object Name',\n className: 'object'\n}];\nfunction _06_nonpersonnel_helpers_preparePageView() {\n // prepare page view\n components_body_body.reset();\n components_nav_buttons_nav_buttons.show();\n components_sidebar_sidebar.show();\n components_table_table.adjustWidth('100%');\n // update page text\n components_header_header.update('Non-Personnel');\n js_components_prompt_prompt.Text.update('Select an action item for each non-personnel line item from last year.');\n\n // just enable next for now\n // TODO: only enable when all info is entered\n components_nav_buttons_nav_buttons.Next.enable();\n}\nasync function initializeNonpersonnelTable() {\n // load table data from storage\n if (await components_table_table.Data.load()) {\n //after table is loaded, fill it\n components_table_table.show();\n components_table_table.Columns.addAtEnd(components_table_table.Buttons.edit_confirm_btns, \"Edit\");\n // assign cost classes\n components_table_table.Columns.assignClasses(nonPersonnelColumns);\n // enable editing\n components_table_table.Buttons.Edit.init(nonPersonnelRowOnEdit, components_table_table.save);\n } else {\n js_components_prompt_prompt.Text.update('No personnel expenses for this fund.');\n }\n}\nfunction nonPersonnelRowOnEdit() {\n // make it editable\n components_table_table.Cell.createTextbox('request', true);\n components_table_table.Cell.createServiceDropdown();\n}\n;// CONCATENATED MODULE: ./src/js/views/06_nonpersonnel/main.js\n\n\nfunction loadNonpersonnelPage() {\n CurrentPage.update('nonpersonnel');\n _06_nonpersonnel_helpers_preparePageView();\n initializeNonpersonnelTable();\n}\n;// CONCATENATED MODULE: ./src/js/views/view_logic.js\n\n\n\n\n\n\n\n\n\n\n\nlet view_logic_PAGES = {\n 'welcome': initializeWelcomePage,\n 'upload': loadUploadPage,\n 'baseline-landing': loadBaselineLandingPage,\n 'revenue': loadRevenuePage,\n 'personnel': loadPersonnelPage,\n 'overtime': loadOTPage,\n 'nonpersonnel': loadNonpersonnelPage,\n 'new-inits': loadNewInitiatives,\n 'summary': _08_summary_main_namespaceObject.loadSummaryPage\n};\nlet CLEANUP = {\n 'new-inits': cleanUpInitiativesPage,\n 'revenue': cleanupRevenuePage,\n 'summary': _08_summary_main_namespaceObject.cleanUpSummaryPage\n};\nfunction view_logic_visitPage(new_page_key) {\n // clean up from current page\n var page_state = CurrentPage.load();\n if (CLEANUP[page_state]) {\n CLEANUP[page_state]();\n }\n ;\n // Use the page_state to access and call the corresponding function from PAGES\n if (view_logic_PAGES[new_page_key]) {\n view_logic_PAGES[new_page_key](); // Invokes the function if it exists in the PAGES map\n } else {\n console.error(`No page initializer found for state: ${new_page_key}`);\n }\n}\nfunction nextPage() {\n var page_state = CurrentPage.load();\n const keys = Object.keys(view_logic_PAGES);\n\n // Find the index of the current key\n const currentIndex = keys.indexOf(page_state);\n\n // clean up current page\n if (CLEANUP[page_state]) {\n CLEANUP[page_state]();\n }\n ;\n\n // Check if there is a next key\n if (currentIndex >= 0 && currentIndex < keys.length - 1) {\n // Get the next key\n const nextKey = keys[currentIndex + 1];\n // go to that page\n view_logic_visitPage(nextKey);\n }\n}\nfunction lastPage() {\n var page_state = CurrentPage.load();\n const keys = Object.keys(view_logic_PAGES);\n\n // Find the index of the current key\n const currentIndex = keys.indexOf(page_state);\n\n // clean up current page\n if (CLEANUP[page_state]) {\n CLEANUP[page_state]();\n }\n ;\n\n // Check if there is a next key\n if (currentIndex >= 1) {\n // Get the next key\n const lastKey = keys[currentIndex - 1];\n // go to that page\n view_logic_visitPage(lastKey);\n }\n}\n;// CONCATENATED MODULE: ./src/js/utils/data_utils/JSON_data_handlers.js\nasync function JSON_data_handlers_fetchJSON(jsonFilePath) {\n return fetch(jsonFilePath).then(response => {\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n return response.json();\n });\n}\nfunction convertToJSON(table, colsToRemove = []) {\n const rows = table.rows;\n // Extract headers from the first row\n const headerRow = rows[0].cells;\n const headers = [];\n for (let j = 0; j < headerRow.length; j++) {\n headers.push(headerRow[j].innerText);\n }\n\n // initialize data\n var tableData = [];\n for (var i = 1; i < rows.length; i++) {\n const cols = rows[i].cells;\n const rowData = {};\n headers.forEach((header, index) => {\n if (colsToRemove.includes(header)) {\n return;\n } else if (cols[index].classList.contains('cost')) {\n rowData[header] = cols[index].getAttribute('value');\n } else {\n rowData[header] = cols[index].innerText;\n }\n });\n tableData.push(rowData);\n }\n return JSON.stringify(tableData);\n}\n;// CONCATENATED MODULE: ./src/js/utils/data_utils/local_storage_handlers.js\n\n\n\n\n\n\nconst CurrentPage = {\n update: function (page) {\n localStorage.setItem('page_state', page);\n },\n load: function () {\n const pageState = localStorage.getItem('page_state');\n return pageState !== null ? pageState : 'welcome';\n },\n visit: function () {\n view_logic_visitPage(this.load());\n }\n};\nconst CurrentFund = {\n update: function (fund) {\n localStorage.setItem('fund', fund);\n },\n number: function () {\n return localStorage.getItem(\"fund\");\n },\n name: function () {\n return FundLookupTable.getName(this.number());\n },\n reset: function () {\n this.update('');\n }\n};\n\n// TODO: consider moving this into a const for Current Table (or to the table component)\nfunction saveTableData() {\n var table = document.getElementById('main-table');\n if (CurrentFund.number()) {\n var save_as = `${CurrentPage.load()}_${CurrentFund.number()}`;\n } else {\n var save_as = CurrentPage.load();\n }\n localStorage.setItem(save_as, convertToJSON(table, ['Edit']));\n components_sidebar_sidebar.updateTotals();\n}\nfunction deleteTable(name) {\n localStorage.setItem(name, '');\n}\nasync function deleteAllTables() {\n var funds = await fetchJSON(DATA_ROOT + 'funds.json');\n funds = funds.map(item => {\n return item.Name;\n });\n for (const page in PAGES) {\n for (const i in funds) {\n deleteTable(`${page}_${funds[i]}`);\n }\n }\n deleteTable('new-inits');\n}\nfunction loadTableData(name) {\n const data = localStorage.getItem(name);\n if (data == '') {\n return '';\n }\n return JSON.parse(data);\n}\n\n// Class to hold information on a specific fund and table\nclass StoredTable {\n constructor(page, fund) {\n this.name = `${page}_${fund}`;\n this.page = page;\n this.table = loadTableData(this.name);\n }\n totalCol() {\n switch (this.page) {\n case 'personnel':\n return 'Total Cost';\n case 'overtime':\n return 'Total Cost (including benefits)';\n case 'nonpersonnel':\n return `FY${FISCAL_YEAR} Request`;\n case 'revenue':\n break;\n default:\n break;\n }\n }\n getSum() {\n // fill with zero until there is something saved in storage\n return colSum(this.table, this.totalCol(), this.name);\n }\n}\nfunction colSum(table, colName) {\n // fill with zero until there is something saved in storage\n if (!table || table == '') {\n return 0;\n }\n const headers = Object.keys(table[0]);\n if (headers.includes(colName)) {\n let sum = 0;\n for (let i = 0; i < table.length; i++) {\n sum += Math.round(parseFloat(table[i][colName]));\n }\n return sum;\n } else {\n // console.error(`Could not find expected total column in saved data for ${name}. Returning 0. See StoredTable.totalCol() switch.`);\n return 0;\n }\n}\n\n// Holds all the detailed data for one fund's budget\nclass Fund {\n constructor(fund) {\n this.fund = fund;\n this.personnel = new StoredTable('personnel', fund);\n this.overtime = new StoredTable('overtime', fund);\n this.nonpersonnel = new StoredTable('nonpersonnel', fund);\n this.revenue = new StoredTable('revenue', fund);\n }\n getPersonnelCost() {\n return this.personnel.getSum() + this.overtime.getSum();\n }\n getNonPersonnelCost() {\n return this.nonpersonnel.getSum();\n }\n getRevenue() {\n return this.revenue.getSum();\n }\n getTotal() {\n return this.getNonPersonnelCost() + this.getPersonnelCost() - this.getRevenue();\n }\n}\nclass local_storage_handlers_Baseline {\n // baseline will just contain a list of funds\n constructor() {\n const allFunds = FundLookupTable.listFunds();\n this.funds = [];\n allFunds.forEach(fund => {\n this.funds.push(new Fund(fund));\n });\n }\n personnel() {\n let total = 0;\n this.funds.forEach(fund => {\n total += fund.getPersonnelCost();\n });\n return total;\n }\n nonpersonnel() {\n let total = 0;\n this.funds.forEach(fund => {\n total += fund.getNonPersonnelCost();\n });\n return total;\n }\n revenue() {\n let total = 0;\n this.funds.forEach(fund => {\n total += fund.getRevenue();\n });\n return total;\n }\n total() {\n return this.nonpersonnel() + this.personnel() - this.revenue();\n }\n}\nclass Initiative {\n constructor(row) {\n this.data = row;\n this.name = row['Initiative Name'];\n }\n expenses() {\n return this.data['Ballpark Total Expenses'];\n }\n revenue() {\n return this.data['Revenue'];\n }\n net() {\n return this.expenses() - this.revenue();\n }\n}\nclass Supplemental {\n constructor() {\n this.table = loadTableData('new-inits');\n this.initiatives = [];\n if (this.table) {\n this.table.forEach(row => {\n this.initiatives.push(new Initiative(row));\n });\n }\n }\n getInits() {\n return this.table.map(item => {\n return item['Initiative Name'];\n });\n }\n expenses() {\n return colSum(this.table, 'Ballpark Total Expenses');\n }\n revenue() {\n return colSum(this.table, 'Revenue');\n }\n total() {\n return this.expenses() - this.revenue();\n }\n}\n;// CONCATENATED MODULE: ./src/js/init.js\n// import styles\n\n\n// import functions\n\n\n// path for my laptop\nlet init_DATA_ROOT = '../../../data/law_dept_sample/';\n// github path\n// export let DATA_ROOT = '../../budget-request-demo/data/law_dept_sample/'\n\nlet REVENUE = 0;\nlet TARGET = 14000000;\nvar FISCAL_YEAR = '26';\nvar OT_FRINGE = 0.0765;\n\n// variables on the salary \nvar fringe = 0.36;\nvar cola = 0.02;\nvar merit = 0.02;\n\n// sheets to expect on detail sheet\nconst SHEETS = {\n 'FTE, Salary-Wage, & Benefits': 'personnel',\n 'Overtime & Other Personnel': 'overtime',\n 'Non-Personnel Operating': 'nonpersonnel',\n 'Revenue': 'revenue'\n};\ndocument.addEventListener('DOMContentLoaded', function () {\n CurrentPage.visit();\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQ3RHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDeEJBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3hCQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN4QkE7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FDN0JBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FDL0RBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUMxR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTs7QUMvQkE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQ3BFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUNyTUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBOztBQ3BJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUNqREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNKQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN4QkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDeEJBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3hCQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FDbEVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQ2xCQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7Ozs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQ3BEQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7O0FDekJBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBOztBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SEE7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FDeEJBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBOztBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FDdklBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTs7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FDM0ZBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRkE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7O0FDak9BO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvY3NzL2NvbW1vbi5jc3M/OGZmNiIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvc2lkZWJhci9zaWRlYmFyLmNzcz8zYmM3Iiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvdXRpbHMvY29tbW9uX3V0aWxzLmpzPzQ0ZjIiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL3NpZGViYXIvc2lkZWJhci5qcz84MGYwIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy9oZWFkZXIvaGVhZGVyLmNzcz83MmQ3Iiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy9oZWFkZXIvaGVhZGVyLmpzP2EwYTUiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL3dlbGNvbWUvd2VsY29tZS5jc3M/ZGVlMSIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvd2VsY29tZS93ZWxjb21lLmpzPzUzNWEiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL2JvZHkvYm9keS5jc3M/ZDFjNyIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvYWNjb3JkaW9uL2FjY29yZGlvbi5jc3M/NWE2YyIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY3NzPzc4NGMiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL3RhYmxlL3N1YmNvbXBvbmVudHMvaGVhZGVycy5qcz8xNjIzIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy90YWJsZS9zdWJjb21wb25lbnRzL3Jvd3MuanM/ZmI3OSIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvdGFibGUvc3ViY29tcG9uZW50cy9idXR0b25zLmpzP2M5OTIiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy91dGlscy9kYXRhX3V0aWxzL2J1ZGdldF9kYXRhX2hhbmRsZXJzLmpzPzA3ZjciLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL2Zvcm0vc3ViY29tcG9uZW50cy9kcm9wZG93bi5qcz9iYTZiIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy90YWJsZS9zdWJjb21wb25lbnRzL2NlbGxzLmpzPzczY2IiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL3RhYmxlL3N1YmNvbXBvbmVudHMvY29sdW1ucy5qcz82NzRhIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy90YWJsZS9zdWJjb21wb25lbnRzL2RhdGEuanM/ZDliNiIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvdGFibGUvdGFibGUuanM/MzA3MSIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvYWNjb3JkaW9uL2FjY29yZGlvbi5qcz8xZjM3Iiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy9maWxlX3VwbG9hZC9maWxlX3VwbG9hZC5jc3M/ZGIwOSIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL3V0aWxzL2RhdGFfdXRpbHMvWExTWF9oYW5kbGVycy5qcz9jYTIyIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy9maWxlX3VwbG9hZC9maWxlX3VwbG9hZC5qcz81MTg4Iiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy9tb2RhbC9tb2RhbC5jc3M/NDBkYiIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvbW9kYWwvbW9kYWwuanM/NTUzMyIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvbmF2X2J1dHRvbnMvbmF2X2J1dHRvbnMuY3NzPzcwN2YiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL25hdl9idXR0b25zL25hdl9idXR0b25zLmpzP2FiZDEiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL3Byb21wdC9wcm9tcHQuY3NzPzMyOGIiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL3Byb21wdC9zdWJjb21wb25lbnRzL3RleHQuanM/ZjZkZiIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvcHJvbXB0L3N1YmNvbXBvbmVudHMvYnV0dG9ucy5qcz84ZDNiIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy9wcm9tcHQvcHJvbXB0LmpzP2E3NzEiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL2JvZHkvYm9keS5qcz9mOWJhIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy9mb3JtL2Zvcm0uY3NzPzU0MTUiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL2Zvcm0vc3ViY29tcG9uZW50cy9maWVsZHMuanM/NDU5ZiIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvZm9ybS9zdWJjb21wb25lbnRzL3N1Ym1pdC5qcz9jNTk2Iiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy9mb3JtL2Zvcm0uanM/ZDk0MiIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL3ZpZXdzLzA3X25ld19pbml0aWF0aXZlcy9oZWxwZXJzLmpzP2EyMWUiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy92aWV3cy8wN19uZXdfaW5pdGlhdGl2ZXMvbWFpbi5qcz8yYzVlIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvdmlld3MvMDhfc3VtbWFyeS9tYWluLmpzPzE2NDIiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy92aWV3cy8wMl9iYXNlbGluZV9sYW5kaW5nX3BhZ2UvaGVscGVycy5qcz85NWI2Iiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvdmlld3MvMDJfYmFzZWxpbmVfbGFuZGluZ19wYWdlL21haW4uanM/ZDQ1OCIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL3ZpZXdzLzAxX3VwbG9hZC9oZWxwZXJzLmpzPzVmYmUiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy92aWV3cy8wMV91cGxvYWQvbWFpbi5qcz8yYThmIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvdmlld3MvMDBfd2VsY29tZS9oZWxwZXJzLmpzP2U3OWMiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy92aWV3cy8wMF93ZWxjb21lL21haW4uanM/YmVhNiIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL3ZpZXdzLzAzX3JldmVudWUvaGVscGVycy5qcz82NWYyIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvdmlld3MvMDNfcmV2ZW51ZS9tYWluLmpzPzA2NDciLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy92aWV3cy8wNF9wZXJzb25uZWwvaGVscGVycy5qcz84NzdjIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvdmlld3MvMDRfcGVyc29ubmVsL21haW4uanM/NTEyNiIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL3ZpZXdzLzA1X292ZXJ0aW1lL2hlbHBlcnMuanM/Njc2NiIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL3ZpZXdzLzA1X292ZXJ0aW1lL21haW4uanM/MTMwNSIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL3ZpZXdzLzA2X25vbnBlcnNvbm5lbC9oZWxwZXJzLmpzPzM4NTQiLCJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy92aWV3cy8wNl9ub25wZXJzb25uZWwvbWFpbi5qcz83YTAwIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvdmlld3Mvdmlld19sb2dpYy5qcz80NmM2Iiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvdXRpbHMvZGF0YV91dGlscy9KU09OX2RhdGFfaGFuZGxlcnMuanM/NzY3YSIsIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL3V0aWxzL2RhdGFfdXRpbHMvbG9jYWxfc3RvcmFnZV9oYW5kbGVycy5qcz9mZTgxIiwid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvaW5pdC5qcz8xYjJhIl0sInNvdXJjZXNDb250ZW50IjpbIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9jb21tb24uY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5vcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vY29tbW9uLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zaWRlYmFyLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xub3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NpZGViYXIuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiLy8gRnVuY3Rpb24gdG8gZm9ybWF0IG51bWJlciBhcyBjdXJyZW5jeVxyXG5leHBvcnQgY29uc3QgZm9ybWF0Q3VycmVuY3kgPSAoYW1vdW50LCByZXR1cm5femVybyA9IGZhbHNlKSA9PiB7XHJcbiAgICB2YXIgYW1vdW50ID0gTWF0aC5yb3VuZChwYXJzZUZsb2F0KGFtb3VudCkpO1xyXG4gICAgaWYgKGFtb3VudCA9PSBOYU4pe1xyXG4gICAgICAgIHJldHVybiBcIiQgLVwiXHJcbiAgICB9XHJcbiAgICBpZiAoYW1vdW50IDwgMCl7XHJcbiAgICAgICAgcmV0dXJuICcoJCcgKyBhbW91bnQudG9TdHJpbmcoKS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCAnLCcpICsgJyknO1xyXG4gICAgfSBlbHNlIGlmIChhbW91bnQgPT0gMCkge1xyXG4gICAgICAgIGlmIChyZXR1cm5femVybyl7XHJcbiAgICAgICAgICAgIHJldHVybiAnJDAnOyAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiJCAtXCJcclxuICAgIH1cclxuICAgIHJldHVybiAnJCcgKyBhbW91bnQudG9TdHJpbmcoKS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCAnLCcpO1xyXG59IDtcclxuXHJcbi8vIGZ1bmN0aW9uIHRvIGNvbnZlcnQgZm9ybWF0dGVkIG51bWJlciB0byBhIGZsb2F0XHJcbmV4cG9ydCBjb25zdCB1bmZvcm1hdEN1cnJlbmN5ID0gKGZvcm1hdHRlZEFtb3VudCkgPT4ge1xyXG4gICAgLy8gUmVtb3ZlIGFueSBjdXJyZW5jeSBzeW1ib2xzIGFuZCBjb21tYXNcclxuICAgIGxldCBudW1lcmljYWxQYXJ0ID0gZm9ybWF0dGVkQW1vdW50LnJlcGxhY2UoL1teMC05Li1dKy9nLCBcIlwiKTtcclxuICAgIGlmIChudW1lcmljYWxQYXJ0ID09ICctJyl7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW1lcmljYWxQYXJ0KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5V2l0aENvbW1hcyh2YWx1ZSkge1xyXG4gICAgaWYgKHZhbHVlID09IDApe1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1hdEN1cnJlbmN5KHZhbHVlKS5yZXBsYWNlKCckJywgJycpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBkZWxheShtcykge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGF1c2VFeGVjdXRpb24oc2Vjb25kcykge1xyXG4gICAgYXdhaXQgZGVsYXkoc2Vjb25kcyAqIDEwMDApOyAvLyBjb252ZXJ0IHRvIG1pbGxpc2Vjb25kc1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5TdHJpbmcoc3RyKXtcclxuICAgIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJy0nKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU5ld0xpbmVzKHN0cil7XHJcbiAgICAvLyBUT0RPOiBlbnN1cmUgdGhlcmUgaXMgYSBzcGFjZSBiZXR3ZWVuIHdvcmRzIG9uIG5ldyBsaW5lc1xyXG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlQWxsKC9bXFxyXFxuXSsvZywgXCJcIik7XHJcbn0iLCJpbXBvcnQgJy4vc2lkZWJhci5jc3MnO1xyXG5cclxuaW1wb3J0IHsgZm9ybWF0Q3VycmVuY3kgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY29tbW9uX3V0aWxzLmpzXCI7XHJcbmltcG9ydCB7IFRBUkdFVCB9IGZyb20gXCIuLi8uLi9pbml0LmpzXCI7XHJcbmltcG9ydCB7IEJhc2VsaW5lLCBTdXBwbGVtZW50YWwgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZGF0YV91dGlscy9sb2NhbF9zdG9yYWdlX2hhbmRsZXJzLmpzXCI7XHJcblxyXG4vLyBBc3N1bWluZyB5b3UgaGF2ZSBhIENTUyB2YXJpYWJsZSAtLW1haW4tY29sb3IgZGVmaW5lZCBvbiB0aGUgOnJvb3RcclxuY29uc3Qgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuY29uc3Qgc2lkZUJhcldpZHRoID0gZ2V0Q29tcHV0ZWRTdHlsZShyb290KS5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpZGViYXItd2lkdGgnKS50cmltKCk7XHJcblxyXG5mdW5jdGlvbiBoaWRlU2lkZWJhcigpIHtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaWRlYmFyLXBhbmVsJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluLXBhbmVsJykuc3R5bGUud2lkdGggPSAnMTAwJSc7IFxyXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZGVyJykuc3R5bGUud2lkdGggPSAnMTAwJSdcclxufVxyXG5cclxuZnVuY3Rpb24gc2hvd1NpZGViYXIoKSB7XHJcbiAgICBjb25zdCBzaWRlYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NpZGViYXItcGFuZWwnKTtcclxuICAgIGNvbnN0IG1haW5QYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluLXBhbmVsJyk7XHJcbiAgICBjb25zdCBoZWFkZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkZXInKTtcclxuXHJcbiAgICBzaWRlYmFyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOyAvLyBTaG93IHRoZSBzaWRlYmFyXHJcbiAgICBcclxuICAgIC8vIENhbGN1bGF0ZSB0aGUgcmVtYWluaW5nIHdpZHRoIGZvciB0aGUgbWFpbiBwYW5lbCBhbmQgaGVhZGVyXHJcbiAgICB2YXIgY29udGVudFdpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gICAgbWFpblBhbmVsLnN0eWxlLndpZHRoID0gYCR7Y29udGVudFdpZHRoIC0gcGFyc2VJbnQoc2lkZUJhcldpZHRoLCAxMCl9cHhgOyBcclxuICAgIGhlYWRlci5zdHlsZS53aWR0aCA9IGAke2NvbnRlbnRXaWR0aCAtIHBhcnNlSW50KHNpZGVCYXJXaWR0aCwgMTApfXB4YDsgXHJcblxyXG4gICAgLy8gYWRkIHRhcmdldCB0byBzaWRlYmFyXHJcbiAgICBhZGRUYXJnZXQoVEFSR0VUKTtcclxuXHJcbiAgICAvLyBhZGQgZXZlbnQgbGlzdGVuZXIgdG8gcmVzaXplIGNvbnRlbnQgaWYgd2luZG93IGlzIGFkanVzdGVkXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgc2hvd1NpZGViYXIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVTaWRlYmFyVGl0bGUobmV3X3RpdGxlKXtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaWRlYmFyLXRpdGxlJykudGV4dENvbnRlbnQgPSBuZXdfdGl0bGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlcGxhY2VTaWRlYmFyU3RhdChzdGF0X2lkLCBuZXdfZmlndXJlKXtcclxuICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtzdGF0X2lkfSAuc3RhdGApO1xyXG4gICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgbmV3X2ZpZ3VyZSk7XHJcbiAgICBzcGFuLnRleHRDb250ZW50ID0gZm9ybWF0Q3VycmVuY3kobmV3X2ZpZ3VyZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZldGNoU3RhdChzdGF0X2lkKXtcclxuICAgIGNvbnN0IHN0YXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtzdGF0X2lkfSAuc3RhdGApO1xyXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoc3RhdC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpIHx8IDA7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBhZGRUYXJnZXQodGFyZ2V0KXtcclxuICAgIHJlcGxhY2VTaWRlYmFyU3RhdCgndGFyZ2V0JywgdGFyZ2V0KTtcclxufVxyXG5cclxuLy8gdXBkYXRlIGFsbCBzdGF0cyBiYXNlZCBvbiBzYXZlZCBkYXRhXHJcbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUJhc2VsaW5lKCl7XHJcbiAgICAvLyBnYXRoZXIgaW5mbyBhbmQgdXBkYXRlIHNpZGViYXIgYWNjb3JkaW5nbHlcclxuICAgIHZhciBiYXNlbGluZSA9IG5ldyBCYXNlbGluZSgpO1xyXG4gICAgcmVwbGFjZVNpZGViYXJTdGF0KCdiYXNlbGluZS1yZXZlbnVlJywgYmFzZWxpbmUucmV2ZW51ZSgpKTtcclxuICAgIHJlcGxhY2VTaWRlYmFyU3RhdCgnYmFzZWxpbmUtcGVyc29ubmVsJywgYmFzZWxpbmUucGVyc29ubmVsKCkpO1xyXG4gICAgcmVwbGFjZVNpZGViYXJTdGF0KCdiYXNlbGluZS1ub25wZXJzb25uZWwnLCBiYXNlbGluZS5ub25wZXJzb25uZWwoKSk7XHJcbiAgICByZXBsYWNlU2lkZWJhclN0YXQoJ2Jhc2VsaW5lLXRvdGFsJywgYmFzZWxpbmUudG90YWwoKSk7XHJcblxyXG4gICAgLy8gY29sb3IgY29kZSBiYXNlZCBvbiB0YXJnZXRcclxuICAgIHZhciB0YXJnZXQgPSBmZXRjaFN0YXQoJ3RhcmdldCcpO1xyXG4gICAgaWYoYmFzZWxpbmUudG90YWwoKSA8PSB0YXJnZXQpe1xyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNiYXNlbGluZS10b3RhbCAuc3RhdCcpLnN0eWxlLmNvbG9yID0gXCJncmVlblwiO1xyXG4gICAgfVxyXG4gICAgaWYoYmFzZWxpbmUudG90YWwoKSA+IHRhcmdldCl7XHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2Jhc2VsaW5lLXRvdGFsIC5zdGF0Jykuc3R5bGUuY29sb3IgPSBcInJlZFwiO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVTdXBwKCl7XHJcbiAgICB2YXIgc3VwcCA9IG5ldyBTdXBwbGVtZW50YWw7XHJcbiAgICByZXBsYWNlU2lkZWJhclN0YXQoJ3N1cHAtcmV2ZW51ZScsIHN1cHAucmV2ZW51ZSgpKTtcclxuICAgIHJlcGxhY2VTaWRlYmFyU3RhdCgnc3VwcC1leHBlbnNlcycsIHN1cHAuZXhwZW5zZXMoKSk7XHJcbiAgICByZXBsYWNlU2lkZWJhclN0YXQoJ3N1cHAtdG90YWwnLCBzdXBwLnRvdGFsKCkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVUb3RhbHMoKXtcclxuICAgIHVwZGF0ZUJhc2VsaW5lKCk7XHJcbiAgICB1cGRhdGVTdXBwKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc2V0QWxsKCl7XHJcbiAgICAvLyBkZWxldGUgZXZlcnl0aGluZyBpbiBsb2NhbCBzdG9yYWdlXHJcbiAgICBsb2NhbFN0b3JhZ2UuY2xlYXIoKTtcclxuICAgIC8vIHJlc2V0IGFsbCBzdGF0cyB0byAwXHJcbiAgICB1cGRhdGVUb3RhbHMoKTtcclxufVxyXG5cclxuY29uc3QgU2lkZWJhciA9IHtcclxuICAgIGhpZGU6IGhpZGVTaWRlYmFyLFxyXG4gICAgc2hvdzogc2hvd1NpZGViYXIsXHJcbiAgICB1cGRhdGVUaXRsZTogdXBkYXRlU2lkZWJhclRpdGxlLFxyXG4gICAgYWRkVGFyZ2V0OiBhZGRUYXJnZXQsXHJcbiAgICB1cGRhdGVUb3RhbHM6IHVwZGF0ZVRvdGFscyxcclxuICAgIHJlc2V0OiByZXNldEFsbFxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2lkZWJhcjsiLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vaGVhZGVyLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xub3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2hlYWRlci5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgJy4vaGVhZGVyLmNzcyc7XHJcblxyXG5pbXBvcnQgeyBDdXJyZW50RnVuZCB9IGZyb20gXCIuLi8uLi91dGlscy9kYXRhX3V0aWxzL2xvY2FsX3N0b3JhZ2VfaGFuZGxlcnMuanNcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBTdWJ0aXRsZSA9IHtcclxuICAgIHVwZGF0ZSA6IGZ1bmN0aW9uKHN1YnRpdGxlKXtcclxuICAgICAgICAvLyBnZXQgY3VycmVudCBmdW5kXHJcbiAgICAgICAgdmFyIGZ1bmQgPSBDdXJyZW50RnVuZC5uYW1lKCk7XHJcbiAgICAgICAgaWYgKGZ1bmQpe1xyXG4gICAgICAgICAgICB2YXIgc3VidGl0bGUgPSBgJHtzdWJ0aXRsZX06ICR7ZnVuZH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN1YnRpdGxlXCIpLnRleHRDb250ZW50ID0gc3VidGl0bGU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFN1YnRpdGxlOyIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi93ZWxjb21lLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xub3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3dlbGNvbWUuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiaW1wb3J0ICcuL3dlbGNvbWUuY3NzJztcclxuXHJcbi8vIEhpZGUgYW5kIHVuaGlkZSB3ZWxjb21lIGJ1dHRvbnNcclxuZnVuY3Rpb24gdW5oaWRlV2VsY29tZUJ1dHRvbnMoKXtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwid2VsY29tZS1wYWdlXCIpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XHJcbn1cclxuZnVuY3Rpb24gaGlkZVdlbGNvbWVCdXR0b25zKCl7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIndlbGNvbWUtcGFnZVwiKS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBXZWxjb21lID0ge1xyXG4gICAgc2hvdzogdW5oaWRlV2VsY29tZUJ1dHRvbnMsXHJcbiAgICBoaWRlIDogaGlkZVdlbGNvbWVCdXR0b25zXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFdlbGNvbWU7IiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2JvZHkuY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5vcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vYm9keS5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vYWNjb3JkaW9uLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xub3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2FjY29yZGlvbi5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vdGFibGUuY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5vcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vdGFibGUuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiZnVuY3Rpb24gYWRkVGFibGVIZWFkZXJzKGhlYWRlcl9hcnJheSl7XHJcblxyXG4gICAgLy8gR2V0IHRoZSB0YWJsZSBlbGVtZW50IGJ5IGl0cyBJRFxyXG4gICAgY29uc3QgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi10YWJsZScpO1xyXG4gICAgXHJcbiAgICAvLyBDcmVhdGUgYSB0YWJsZSBoZWFkZXIgcm93IGVsZW1lbnRcclxuICAgIGNvbnN0IGhlYWRlclJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XHJcbiAgICBcclxuICAgIGZvciAoY29uc3QgaGVhZGVyVGV4dCBvZiBoZWFkZXJfYXJyYXkpIHtcclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgaGVhZGVyIGNlbGwgZWxlbWVudFxyXG4gICAgICAgIGNvbnN0IGhlYWRlckNlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aCcpO1xyXG4gICAgICAgIGhlYWRlckNlbGwudGV4dENvbnRlbnQgPSBoZWFkZXJUZXh0O1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIEFwcGVuZCB0aGUgaGVhZGVyIGNlbGwgdG8gdGhlIGhlYWRlciByb3dcclxuICAgICAgICBoZWFkZXJSb3cuYXBwZW5kQ2hpbGQoaGVhZGVyQ2VsbCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIEFwcGVuZCB0aGUgaGVhZGVyIHJvdyB0byB0aGUgdGFibGUgaGVhZGVyXHJcbiAgICBsZXQgdGhlYWQgPSB0YWJsZS5xdWVyeVNlbGVjdG9yKCd0aGVhZCcpO1xyXG4gICAgdGhlYWQuYXBwZW5kQ2hpbGQoaGVhZGVyUm93KTtcclxufVxyXG5cclxuY29uc3QgSGVhZGVyID0ge1xyXG4gICAgYWRkOiBmdW5jdGlvbihoZWFkZXJfYXJyYXkpe1xyXG4gICAgICAgIGFkZFRhYmxlSGVhZGVycyhoZWFkZXJfYXJyYXkpXHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBIZWFkZXI7IiwiaW1wb3J0IEhlYWRlciBmcm9tIFwiLi9oZWFkZXJzLmpzXCI7XHJcbmltcG9ydCB7IGZvcm1hdEN1cnJlbmN5IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2NvbW1vbl91dGlscy5qc1wiO1xyXG5cclxuYXN5bmMgZnVuY3Rpb24gYWRkTmV3Um93KGRhdGFfZGljdGlvbmFyeSl7XHJcbiAgICAvLyBHZXQgdGhlIHRhYmxlIGVsZW1lbnQgYnkgaXRzIElEXHJcbiAgICBjb25zdCB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluLXRhYmxlJyk7XHJcblxyXG4gICAgLy8gY2hlY2sgaWYgaGVhZGVyIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWRcclxuICAgIGxldCBoZWFkZXJfcm93ID0gdGFibGUucXVlcnlTZWxlY3RvcigndGhlYWQgdHInKTtcclxuICAgIGlmICghaGVhZGVyX3Jvdykge1xyXG4gICAgICAgIEhlYWRlci5hZGQoT2JqZWN0LmtleXMoZGF0YV9kaWN0aW9uYXJ5KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYWRkIHJvdyBvZiBkYXRhXHJcbiAgICBjb25zdCBuZXdfcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTtcclxuICAgIGNvbnN0IGNlbGxfZGF0YV9hcnJheSA9IE9iamVjdC52YWx1ZXMoZGF0YV9kaWN0aW9uYXJ5KTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGNlbGxfZGF0YSBvZiBjZWxsX2RhdGFfYXJyYXkpIHtcclxuICAgICAgICAvLyBDcmVhdGUgbmV3IGNlbGwgYW5kIGFkZCBpdCB0byB0aGUgcm93XHJcbiAgICAgICAgY29uc3QgbmV3Q2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7XHJcbiAgICAgICAgbmV3Q2VsbC50ZXh0Q29udGVudCA9IGNlbGxfZGF0YTtcclxuICAgICAgICBuZXdfcm93LmFwcGVuZENoaWxkKG5ld0NlbGwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFwcGVuZCB0aGUgbmV3IHJvdyB0byB0aGUgdGFibGUgYm9keVxyXG4gICAgbGV0IHRib2R5ID0gdGFibGUucXVlcnlTZWxlY3RvcigndGJvZHknKTtcclxuICAgIHRib2R5LmFwcGVuZENoaWxkKG5ld19yb3cpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzYXZlUm93RWRpdHMocm93KXtcclxuICAgIHZhciBjZWxscyA9IHJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpXHJcbiAgICBjZWxscy5mb3JFYWNoKCBjZWxsID0+IHtcclxuICAgICAgICAvLyBzYXZlIGRyb3Bkb3duIHZhbHVlc1xyXG4gICAgICAgIGlmIChjZWxsLnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdCcpKXtcclxuICAgICAgICAgICAgdmFyIHNlcnZpY2VTZWxlY3RvciA9IGNlbGwucXVlcnlTZWxlY3Rvcignc2VsZWN0Jyk7XHJcbiAgICAgICAgICAgIGNlbGwudGV4dENvbnRlbnQgPSBzZXJ2aWNlU2VsZWN0b3IudmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjZWxsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykpIHtcclxuICAgICAgICAgICAgLy8gc2F2ZSBuZXcgZW50ZXJlZCB2YWx1ZSBpbiB0ZXh0Ym94XHJcbiAgICAgICAgICAgIHZhciB0ZXh0Ym94ID0gY2VsbC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xyXG4gICAgICAgICAgICB2YXIgZW50ZXJlZFZhbHVlID0gdGV4dGJveC52YWx1ZTtcclxuICAgICAgICAgICAgLy8gdXBkYXRlIGRpc3BsYXkgYW5kIGZvcm1hdCB3aXRoIGN1cnJlbmN5IGlmIHJlbGV2YW50XHJcbiAgICAgICAgICAgIGlmICggY2VsbC5jbGFzc0xpc3QuY29udGFpbnMoJ2Nvc3QnKSApe1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgY29zdCwgcmVtb3ZlIGNvbW1hcyBmaXJzdFxyXG4gICAgICAgICAgICAgICAgZW50ZXJlZFZhbHVlID0gZW50ZXJlZFZhbHVlLnJlcGxhY2VBbGwoJywnLCAnJyk7XHJcbiAgICAgICAgICAgICAgICBjZWxsLnRleHRDb250ZW50ID0gZm9ybWF0Q3VycmVuY3koZW50ZXJlZFZhbHVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNlbGwudGV4dENvbnRlbnQgPSBlbnRlcmVkVmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2V0IHZhbHVlIGF0dHJpYnV0ZSB0byB0aGUgbmV3IHVzZXIgaW5wdXRcclxuICAgICAgICAgICAgY2VsbC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgZW50ZXJlZFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG59XHJcblxyXG5jb25zdCBSb3dzID0ge1xyXG4gICAgYWRkIDogZnVuY3Rpb24oZGF0YV9kaWN0aW9uYXJ5KXtcclxuICAgICAgICBhZGROZXdSb3coZGF0YV9kaWN0aW9uYXJ5KVxyXG4gICAgfSxcclxuICAgIHNhdmVFZGl0cyA6IGZ1bmN0aW9uKHJvdyl7XHJcbiAgICAgICAgc2F2ZVJvd0VkaXRzKHJvdylcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUm93czsiLCJpbXBvcnQgUm93cyBmcm9tICcuL3Jvd3MuanMnXHJcblxyXG5mdW5jdGlvbiBoaWRlQnV0dG9uKGNsYXNzTmFtZSl7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGJ1dHRvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidXR0b25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGJ1dHRvbnNbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNob3dCdXR0b24oY2xhc3NOYW1lKXtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgYnV0dG9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1dHRvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgYnV0dG9uc1tpXS5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVCdXR0b25UZXh0KGNsYXNzTmFtZSwgdGV4dCl7XHJcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHtjbGFzc05hbWV9YCkudGV4dENvbnRlbnQgPSB0ZXh0O1xyXG59XHJcblxyXG4vLyBFRElUIGJ1dHRvblxyXG5cclxuZnVuY3Rpb24gaGFuZGxlUm93RWRpdChtYWtlUm93RWRpdGFibGUsIHVwZGF0ZUNhbGxiYWNrKXtcclxuICAgIC8vIGF0dGFjaCBhbiBldmVudCBsaXN0ZW5lciB0byBlYWNoIGVkaXQgYnV0dG9uIGluIGV2ZXJ5IHJvd1xyXG4gICAgdmFyIGVkaXRCdXR0b25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYnRuLWVkaXQnKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWRpdEJ1dHRvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBlZGl0QnV0dG9uc1tpXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGF0IHdhcyBjbGlja2VkIG9uIHdpdGhpbiB0aGUgdGFibGVcclxuICAgICAgICAgICAgdmFyIHJvd1RvRWRpdCA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgICAgICAvLyBtYXJrIHJvdyBhcyBiZWluZyBlZGl0ZWRcclxuICAgICAgICAgICAgcm93VG9FZGl0LmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZS1lZGl0aW5nJyk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyB0dXJuIHJlbGV2YW50IGVudHJpZXMgaW50byB0ZXh0Ym94ZXNcclxuICAgICAgICAgICAgbWFrZVJvd0VkaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBoaWRlIGVkaXQgYnV0dG9uc1xyXG4gICAgICAgICAgICBFZGl0LmhpZGUoKTtcclxuICAgICAgICAgICAgaW5pdGlhbGl6ZUNvbmZpcm1CdXR0b24odXBkYXRlQ2FsbGJhY2spO1xyXG4gICAgXHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG59XHJcblxyXG4vLyBDb25maXJtIGJ1dHRvblxyXG5cclxuZnVuY3Rpb24gaW5pdGlhbGl6ZUNvbmZpcm1CdXR0b24odXBkYXRlQ2FsbGJhY2spe1xyXG4gICAgLy8gZ2V0IGVsZW1lbnQgYW5kIGFkZCBsaXN0ZW5lciBmb3IgY2xpY2tcclxuICAgIHZhciByb3dUb0VkaXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYWN0aXZlLWVkaXRpbmcnKTtcclxuICAgIGNvbnN0IGNvbmZpcm1fYnRuID0gcm93VG9FZGl0LnF1ZXJ5U2VsZWN0b3IoXCIuYnRuLWNvbmZpcm1cIik7XHJcbiAgICAvLyBzaG93IHRoZSByb3cncyBjb25maXJtIGJ1dHRvblxyXG4gICAgY29uZmlybV9idG4uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICBjb25maXJtX2J0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7O1xyXG4gICAgICAgIC8vIHNhdmUgcm93IGVkaXRzXHJcbiAgICAgICAgUm93cy5zYXZlRWRpdHMocm93VG9FZGl0KTtcclxuICAgICAgICAvLyB1cGRhdGUgdmFsdWVzIGluIHNpZGViYXJcclxuICAgICAgICB1cGRhdGVDYWxsYmFjaygpO1xyXG4gICAgICAgIC8vIG1ha2Ugcm93IG5vIGxvbmdlciBncmVlblxyXG4gICAgICAgIHJvd1RvRWRpdC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUtZWRpdGluZycpO1xyXG4gICAgICAgIC8vIHNob3cgZWRpdCBidXR0b25zIGFuZCBoaWRlIGNvbmZpcm0gYnV0dG9uc1xyXG4gICAgICAgIEVkaXQuc2hvdygpO1xyXG4gICAgICAgIENvbmZpcm0uaGlkZSgpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmNvbnN0IEVkaXQgPSB7XHJcbiAgICBodG1sOiAnPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZWRpdFwiPkVkaXQ8L2J1dHRvbj4nLFxyXG4gICAgaGlkZTogaGlkZUJ1dHRvbignYnRuLWVkaXQnKSxcclxuICAgIHNob3c6IHNob3dCdXR0b24oJ2J0bi1lZGl0JyksXHJcbiAgICBpbml0IDogZnVuY3Rpb24obWFrZVJvd0VkaXRhYmxlLCB1cGRhdGVDYWxsYmFjayl7XHJcbiAgICAgICAgaGFuZGxlUm93RWRpdChtYWtlUm93RWRpdGFibGUsIHVwZGF0ZUNhbGxiYWNrKVxyXG4gICAgfVxyXG59O1xyXG5cclxuY29uc3QgRGVsZXRlID0ge1xyXG4gICAgaHRtbDogJzxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlbGV0ZVwiPkRlbGV0ZTwvYnV0dG9uPicsXHJcbiAgICBoaWRlOiBoaWRlQnV0dG9uKCdidG4tZGVsZXRlJyksXHJcbiAgICBzaG93OiBzaG93QnV0dG9uKCdidG4tZGVsZXRlJylcclxufTtcclxuXHJcbmNvbnN0IENvbmZpcm0gPSB7XHJcbiAgICBodG1sOiAnPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tY29uZmlybVwiPkNvbmZpcm08L2J1dHRvbj4nLFxyXG4gICAgaGlkZTogaGlkZUJ1dHRvbignYnRuLWNvbmZpcm0nKSxcclxuICAgIHNob3c6IHNob3dCdXR0b24oJ2J0bi1jb25maXJtJylcclxufTtcclxuXHJcbmNvbnN0IEFkZFJvdyA9IHtcclxuICAgIGhpZGU6IGhpZGVCdXR0b24oJ2J0bi1hZGQnKSxcclxuICAgIHNob3c6IHNob3dCdXR0b24oJ2J0bi1hZGQnKSxcclxuICAgIHVwZGF0ZVRleHQ6IGZ1bmN0aW9uKHRleHQpe1xyXG4gICAgICAgIHVwZGF0ZUJ1dHRvblRleHQoJ2J0bi1hZGQnLCB0ZXh0KTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBCdXR0b25zID0ge1xyXG4gICAgRGVsZXRlOiBEZWxldGUsXHJcbiAgICBFZGl0IDogRWRpdCxcclxuICAgIENvbmZpcm0gOiBDb25maXJtLFxyXG4gICAgQWRkUm93IDogQWRkUm93LFxyXG4gICAgZWRpdF9jb25maXJtX2J0bnMgOiBFZGl0Lmh0bWwgKyBDb25maXJtLmh0bWwgLFxyXG4gICAgYWxsX2J0bnMgOiBEZWxldGUuaHRtbCArIEVkaXQuaHRtbCArIENvbmZpcm0uaHRtbFxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCdXR0b25zOyIsImV4cG9ydCBjb25zdCBGdW5kTG9va3VwVGFibGUgPSB7XHJcbiAgICByZXRyaWV2ZSA6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdmdW5kLWxvb2t1cC10YWJsZScpKSB8fCB7fTtcclxuICAgIH0sXHJcbiAgICBzYXZlIDogZnVuY3Rpb24oZnVuZERpY3Qpe1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdmdW5kLWxvb2t1cC10YWJsZScsIEpTT04uc3RyaW5naWZ5KGZ1bmREaWN0KSk7XHJcbiAgICB9LFxyXG4gICAgdXBkYXRlIDogZnVuY3Rpb24oZnVuZERhdGEpe1xyXG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5yZXRyaWV2ZSgpO1xyXG4gICAgICAgIGZvciAobGV0IGZ1bmQgb2YgT2JqZWN0LmtleXMoZnVuZERhdGEpKXtcclxuICAgICAgICAgICAgLy8gZnVuZCA9IHRvU3RyaW5nKGZ1bmQpO1xyXG4gICAgICAgICAgICAvLyBhZGQgdG8gbG9va3VwIHRhYmxlIGlmIG5vdCBpbiB0aGVyZSBhbHJlYWR5XHJcbiAgICAgICAgICAgIGlmICghdGFibGVbZnVuZF0pe1xyXG4gICAgICAgICAgICAgICAgLy8gZ2V0IGZ1bmQgbmFtZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZnVuZE5hbWUgPSBmdW5kRGF0YVtmdW5kXVswXVsnRnVuZCBOYW1lJ107XHJcbiAgICAgICAgICAgICAgICAvLyBhZGQgZnVuZCB0byBkaWN0aW9uYXJ5XHJcbiAgICAgICAgICAgICAgICB0YWJsZVtmdW5kXSA9IGZ1bmROYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNhdmUgYW55IHVwZGF0ZXNcclxuICAgICAgICB0aGlzLnNhdmUodGFibGUpO1xyXG4gICAgfSxcclxuICAgIHJlc2V0IDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy5zYXZlKHt9KTtcclxuICAgIH0sXHJcbiAgICBnZXROYW1lIDogZnVuY3Rpb24obnVtYmVyKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXRyaWV2ZSgpW251bWJlcl07XHJcbiAgICB9LFxyXG4gICAgbGlzdEZ1bmRzIDogZnVuY3Rpb24oKXtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5yZXRyaWV2ZSgpKTtcclxuICAgIH1cclxufVxyXG5cclxuLy8gZGF0YSBzdHJ1Y3R1cmUgdG8gc2F2ZSB0aGUgcG9zc2libGUgc2VydmljZSBvcHRpb25zIGZvciB0aGUgZGVwYXJ0bWVudFxyXG5leHBvcnQgY29uc3QgU2VydmljZXMgPSB7XHJcbiAgICBzYXZlIDogZnVuY3Rpb24oc2VydmljZXMpe1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzZXJ2aWNlcy1saXN0JywgSlNPTi5zdHJpbmdpZnkoc2VydmljZXMpKTtcclxuICAgIH0sXHJcbiAgICBsaXN0IDogZnVuY3Rpb24oKXtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc2VydmljZXMtbGlzdCcpKSB8fCB7fTtcclxuICAgIH1cclxufSIsImFzeW5jIGZ1bmN0aW9uIGNyZWF0ZURyb3Bkb3duRnJvbUpTT04oanNvbl9wYXRoKSB7XHJcbiAgICAvLyBGZXRjaCBKU09OIGRhdGEgZnJvbSBhIGZpbGUgYXN5bmNocm9ub3VzbHlcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goanNvbl9wYXRoKTtcclxuICAgIGNvbnN0IGRhdGFBcnJheSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgIC8vIGNyZWF0ZSBhbmQgcmV0dXJuIGVsZW1lbnRcclxuICAgIHJldHVybiBjcmVhdGVEcm9wZG93bihkYXRhQXJyYXkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVEcm9wZG93bihkYXRhQXJyYXkpIHtcclxuXHJcbiAgLy8gQ3JlYXRpbmcgYSBzZWxlY3QgZWxlbWVudFxyXG4gIGNvbnN0IHNlbGVjdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcclxuXHJcbiAgLy8gTG9vcGluZyB0aHJvdWdoIHRoZSBhcnJheSBhbmQgY3JlYXRpbmcgYW4gb3B0aW9uIGZvciBlYWNoIGVsZW1lbnRcclxuICBkYXRhQXJyYXkuZm9yRWFjaChpdGVtID0+IHtcclxuICAgIGNvbnN0IG9wdGlvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcclxuICAgIG9wdGlvbkVsZW1lbnQudmFsdWUgPSBpdGVtO1xyXG4gICAgb3B0aW9uRWxlbWVudC50ZXh0Q29udGVudCA9IGl0ZW07XHJcbiAgICBzZWxlY3RFbGVtZW50LmFwcGVuZENoaWxkKG9wdGlvbkVsZW1lbnQpOyAvLyBBcHBlbmRpbmcgdGhlIG9wdGlvbiB0byB0aGUgc2VsZWN0XHJcbiAgfSk7XHJcblxyXG4gIC8vIFJldHVybiB0aGUgc2VsZWN0IGVsZW1lbnQgc28gaXQgY2FuIGJlIGFwcGVuZGVkIHRvIHRoZSBkb2N1bWVudFxyXG4gIHJldHVybiBzZWxlY3RFbGVtZW50O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IERyb3Bkb3duID0ge1xyXG4gICAgY3JlYXRlRnJvbUpTT04gOiBmdW5jdGlvbihqc29uX3BhdGgpeyByZXR1cm4gY3JlYXRlRHJvcGRvd25Gcm9tSlNPTihqc29uX3BhdGgpIH0sXHJcbiAgICBjcmVhdGUgOiBmdW5jdGlvbihkYXRhQXJyYXkpIHsgcmV0dXJuIGNyZWF0ZURyb3Bkb3duKGRhdGFBcnJheSkgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEcm9wZG93bjsiLCJpbXBvcnQgeyBmb3JtYXRDdXJyZW5jeSwgZGlzcGxheVdpdGhDb21tYXMgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvY29tbW9uX3V0aWxzLmpzXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VzIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGFfdXRpbHMvYnVkZ2V0X2RhdGFfaGFuZGxlcnMuanNcIjtcclxuaW1wb3J0IERyb3Bkb3duIGZyb20gXCIuLi8uLi9mb3JtL3N1YmNvbXBvbmVudHMvZHJvcGRvd24uanNcIjtcclxuXHJcbi8vIHJldHVybiBjZWxsIHZhbHVlIGF0dHJpYnV0ZSBvciAwIGlmIGl0IGRvZXMgbm90IGV4aXN0XHJcbmZ1bmN0aW9uIGdldENlbGxWYWx1ZShyb3csIGNsYXNzTmFtZSkge1xyXG4gICAgdmFyIGNlbGwgPSByb3cucXVlcnlTZWxlY3RvcihgLiR7Y2xhc3NOYW1lfWApO1xyXG4gICAgdmFyIGNlbGxWYWx1ZSA9IGNlbGwgPyBjZWxsLmdldEF0dHJpYnV0ZSgndmFsdWUnKSA6IG51bGw7XHJcbiAgICByZXR1cm4gY2VsbFZhbHVlID8gcGFyc2VGbG9hdChjZWxsVmFsdWUpIDogMDtcclxufVxyXG5cclxuLy8gcmV0dXJuIHRleHQgaW4gY2VsbFxyXG5mdW5jdGlvbiBnZXRDZWxsVGV4dChyb3csIGNsYXNzTmFtZSkge1xyXG4gICAgdmFyIGNlbGwgPSByb3cucXVlcnlTZWxlY3RvcihgLiR7Y2xhc3NOYW1lfWApO1xyXG4gICAgcmV0dXJuIGNlbGwudGV4dENvbnRlbnQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVwZGF0ZVRhYmxlQ2VsbChyb3csIGNvbF9jbGFzcywgbmV3X3ZhbHVlKXtcclxuICAgIGNvbnN0IGNlbGwgPSByb3cucXVlcnlTZWxlY3RvcihgLiR7Y29sX2NsYXNzfWApO1xyXG4gICAgY2VsbC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgbmV3X3ZhbHVlKTtcclxuICAgIGNlbGwudGV4dENvbnRlbnQgPSBmb3JtYXRDdXJyZW5jeShuZXdfdmFsdWUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVFZGl0YWJsZUNlbGwoY2VsbENsYXNzLCBpc0Nvc3Qpe1xyXG4gICAgLy8gZ2V0IGNlbGxcclxuICAgIGNvbnN0IGNlbGwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuYWN0aXZlLWVkaXRpbmcgdGQuJHtjZWxsQ2xhc3N9YCk7XHJcbiAgICAvLyBDcmVhdGUgYW4gaW5wdXQgZWxlbWVudCB0byBlZGl0IHRoZSB2YWx1ZVxyXG4gICAgdmFyIHRleHRib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xyXG4gICAgdGV4dGJveC50eXBlID0gJ3RleHQnO1xyXG4gICAgaWYgKGlzQ29zdCl7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gY2VsbC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGNlbGwudGV4dENvbnRlbnQ7XHJcbiAgICB9XHJcbiAgICB0ZXh0Ym94LnZhbHVlID0gZGlzcGxheVdpdGhDb21tYXModmFsdWUpO1xyXG4gICAgLy8gQ2xlYXIgdGhlIGN1cnJlbnQgY29udGVudCBhbmQgYXBwZW5kIHRoZSB0ZXh0Ym94IHRvIHRoZSBjZWxsXHJcbiAgICBjZWxsLmlubmVySFRNTCA9ICcnO1xyXG4gICAgY2VsbC5hcHBlbmRDaGlsZCh0ZXh0Ym94KTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlU2VydmljZURyb3Bkb3duKCl7XHJcbiAgICAvLyBnZXQgY2VsbFxyXG4gICAgdmFyIGNlbGxDbGFzcyA9ICdzZXJ2aWNlJztcclxuICAgIGNvbnN0IGNlbGwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuYWN0aXZlLWVkaXRpbmcgdGQuJHtjZWxsQ2xhc3N9YCk7XHJcbiAgICAvLyBhZGQgc2VydmljZSBkcm9wZG93blxyXG4gICAgY29uc3Qgc2VydmljZURyb3Bkb3duID0gRHJvcGRvd24uY3JlYXRlKFNlcnZpY2VzLmxpc3QoKSk7XHJcbiAgICBzZXJ2aWNlRHJvcGRvd24udmFsdWUgPSBjZWxsLnRleHRDb250ZW50O1xyXG4gICAgLy8gQ2xlYXIgdGhlIGN1cnJlbnQgY29udGVudCBhbmQgYXBwZW5kIHRoZSB0ZXh0Ym94IHRvIHRoZSBjZWxsXHJcbiAgICBjZWxsLmlubmVySFRNTCA9ICcnO1xyXG4gICAgY2VsbC5hcHBlbmRDaGlsZChzZXJ2aWNlRHJvcGRvd24pO1xyXG59XHJcblxyXG5jb25zdCBDZWxsID0ge1xyXG4gICAgZ2V0VmFsdWU6IGZ1bmN0aW9uKHJvdywgY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIGdldENlbGxWYWx1ZShyb3csIGNsYXNzTmFtZSk7IFxyXG4gICAgfSxcclxuICAgIGdldFRleHQ6IGZ1bmN0aW9uKHJvdywgY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIGdldENlbGxUZXh0KHJvdywgY2xhc3NOYW1lKTsgXHJcbiAgICB9LFxyXG4gICAgdXBkYXRlVmFsdWU6IGZ1bmN0aW9uKHJvdywgY29sX2NsYXNzLCBuZXdfdmFsdWUpIHtcclxuICAgICAgICB1cGRhdGVUYWJsZUNlbGwocm93LCBjb2xfY2xhc3MsIG5ld192YWx1ZSk7IFxyXG4gICAgfSxcclxuICAgIGNyZWF0ZVRleHRib3ggOiBmdW5jdGlvbihjbGFzc05hbWUsIGlzQ29zdCkge1xyXG4gICAgICAgIGNyZWF0ZUVkaXRhYmxlQ2VsbChjbGFzc05hbWUsIGlzQ29zdClcclxuICAgIH0sXHJcbiAgICBjcmVhdGVTZXJ2aWNlRHJvcGRvd24gOiBjcmVhdGVTZXJ2aWNlRHJvcGRvd25cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENlbGw7IiwiaW1wb3J0IHsgZm9ybWF0Q3VycmVuY3kgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvY29tbW9uX3V0aWxzLmpzXCI7XHJcblxyXG4vLyBwb3NpdGlvbiBpcyBpbmRleCBhdCB3aGljaCBuZXcgY29sdW1uIHdpbGwgYmUgaW5zZXJ0ZWRcclxuZnVuY3Rpb24gYWRkQ29sKHBvc2l0aW9uLCBodG1sQ29udGVudCA9ICcnLCBoZWFkZXJUaXRsZSA9ICcnKSB7XHJcbiAgICAvLyBHZXQgdGhlIHRhYmxlIGVsZW1lbnQgYnkgaXRzIElEXHJcbiAgICBsZXQgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi10YWJsZScpO1xyXG5cclxuICAgIC8vIFZhbGlkYXRlIHBvc2l0aW9uXHJcbiAgICBsZXQgbWF4UG9zaXRpb24gPSB0YWJsZS5yb3dzWzBdLmNlbGxzLmxlbmd0aDtcclxuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPiBtYXhQb3NpdGlvbikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBQb3NpdGlvbiAke3Bvc2l0aW9ufSBpcyBvdXQgb2YgYm91bmRzLmApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgXHJcbiAgICAvLyBJbnNlcnQgdGhlIGhlYWRlciBpZiBwcm92aWRlZFxyXG4gICAgbGV0IHRoZWFkID0gdGFibGUudEhlYWQ7XHJcbiAgICBpZiAoaGVhZGVyVGl0bGUgJiYgdGhlYWQpIHtcclxuICAgICAgbGV0IHRoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGgnKTtcclxuICAgICAgdGguaW5uZXJIVE1MID0gaGVhZGVyVGl0bGU7IC8vIFVzZSBpbm5lckhUTUwgdG8gaW5zZXJ0IEhUTUwgY29udGVudFxyXG4gICAgICB0aGVhZC5yb3dzWzBdLmluc2VydEJlZm9yZSh0aCwgdGhlYWQucm93c1swXS5jZWxsc1twb3NpdGlvbl0pO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgLy8gSW5zZXJ0IG5ldyBjZWxscyBpbnRvIGVhY2ggcm93IG9mIHRoZSB0YWJsZSBib2R5XHJcbiAgICBsZXQgdGJvZHkgPSB0YWJsZS50Qm9kaWVzWzBdO1xyXG4gICAgaWYgKHRib2R5KSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGJvZHkucm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCByb3cgPSB0Ym9keS5yb3dzW2ldO1xyXG4gICAgICAgIGxldCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7XHJcbiAgICAgICAgdGQuaW5uZXJIVE1MID0gaHRtbENvbnRlbnQ7IC8vIFVzZSBpbm5lckhUTUwgdG8gaW5zZXJ0IEhUTUwgY29udGVudFxyXG4gICAgICAgIHJvdy5pbnNlcnRCZWZvcmUodGQsIHJvdy5jZWxsc1twb3NpdGlvbl0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5jb2xzKCl7XHJcbiAgICBjb25zdCB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluLXRhYmxlJyk7XHJcbiAgICAvLyBFbnN1cmUgdGhhdCB0aGUgcm93IGV4aXN0cyBiZWZvcmUgY291bnRpbmcgdGhlIGNvbHVtbnNcclxuICAgIHJldHVybiB0YWJsZS5yb3dzWzBdLmNlbGxzLmxlbmd0aDtcclxufVxyXG4gIFxyXG5mdW5jdGlvbiBhZGRDb2xUb0VuZChodG1sQ29udGVudHMgPSBbXSwgaGVhZGVyVGl0bGUgPSAnJyl7XHJcbiAgICAvLyBjb3VudCBjb2x1bW5zIGFuZCBhZGQgbmV3IGNvbHVtbiB0byB0aGUgZW5kXHJcbiAgICBjb25zdCBwb3NpdGlvbiA9IG5jb2xzKCdtYWluLXRhYmxlJyk7XHJcbiAgICBhZGRDb2wocG9zaXRpb24sIGh0bWxDb250ZW50cywgaGVhZGVyVGl0bGUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhc3NpZ25DbGFzc1RvQ29sdW1uKGhlYWRlck5hbWUsIGNsYXNzTmFtZSkge1xyXG4gICAgLy8gR2V0IHRoZSB0YWJsZSBlbGVtZW50IGJ5IGl0cyBJRFxyXG4gICAgbGV0IHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4tdGFibGUnKTtcclxuXHJcbiAgICAvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGUgY29sdW1uIGJ5IGl0cyBoZWFkZXIgbmFtZVxyXG4gICAgY29uc3QgdGhlYWQgPSB0YWJsZS50SGVhZDtcclxuICAgIGlmICghdGhlYWQgfHwgdGhlYWQucm93cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgdGFibGUgaGVhZGVyIGlzIG5vdCBmb3VuZCBvciBoYXMgbm8gcm93cy4nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGxldCBoZWFkZXJDZWxsSW5kZXggPSAtMTtcclxuICAgIGNvbnN0IGhlYWRlckNlbGxzID0gdGhlYWQucm93c1swXS5jZWxsczsgLy8gQXNzdW1pbmcgdGhlIGZpcnN0IHJvdyBjb250YWlucyBoZWFkZXIgY2VsbHMgKDx0aD4pXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlckNlbGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGhlYWRlckNlbGxzW2ldLnRleHRDb250ZW50LnRyaW0oKSA9PT0gaGVhZGVyTmFtZSkge1xyXG4gICAgICAgICAgICBoZWFkZXJDZWxsSW5kZXggPSBpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhlYWRlckNlbGxJbmRleCA9PT0gLTEpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBObyBoZWFkZXIgZm91bmQgd2l0aCBuYW1lIFwiJHtoZWFkZXJOYW1lfVwiYCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgLy8gQXNzaWduIHRoZSBjbGFzcyB0byBlYWNoIGNlbGwgaW4gdGhlIHNwZWNpZmllZCBjb2x1bW4gaW5kZXggd2l0aGluIHRoZSB0Ym9keVxyXG4gICAgbGV0IHRib2R5ID0gdGFibGUudEJvZGllc1swXTtcclxuICAgIGlmICh0Ym9keSkge1xyXG4gICAgICBsZXQgYm9keVJvd3MgPSB0Ym9keS5yb3dzO1xyXG4gICAgICBmb3IgKGxldCByb3cgb2YgYm9keVJvd3MpIHtcclxuICAgICAgICBpZiAocm93LmNlbGxzW2hlYWRlckNlbGxJbmRleF0pIHtcclxuICAgICAgICAgIHJvdy5jZWxsc1toZWFkZXJDZWxsSW5kZXhdLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5mdW5jdGlvbiBhZGRDb3N0Q2xhc3MoaGVhZGVyTmFtZSl7XHJcbiAgICBhc3NpZ25DbGFzc1RvQ29sdW1uKCBoZWFkZXJOYW1lLCAnY29zdCcpO1xyXG5cclxuICAgIC8vIEdldCBhbGwgdGhlIGNlbGxzIHdpdGggdGhlIHNwZWNpZmllZCBjbGFzcyBuYW1lXHJcbiAgICBjb25zdCBjZWxscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC5jb3N0YCk7XHJcbiAgICAgIFxyXG4gICAgY2VsbHMuZm9yRWFjaChjZWxsID0+IHtcclxuICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgdGV4dCBjb250ZW50IG9mIHRoZSBjZWxsIGFuZCBhc3NpZ24gaXQgdG8gJ3ZhbHVlJyBhdHRyaWJ1dGVcclxuICAgICAgICBpZiAoIWNlbGwuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKXtcclxuICAgICAgICAgICAgY29uc3QgY2VsbFRleHQgPSBjZWxsLnRleHRDb250ZW50LnRyaW0oKTtcclxuICAgICAgICAgICAgY29uc3QgY2VsbFZhbHVlID0gaXNOYU4oY2VsbFRleHQpIHx8IGNlbGxUZXh0ID09PSAnJyA/IDAgOiBwYXJzZUZsb2F0KGNlbGxUZXh0KTtcclxuICAgICAgICAgICAgY2VsbC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgY2VsbFZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIE5vdyBmb3JtYXQgdGhlIHRleHQgY29udGVudCBsaWtlIGN1cnJlbmN5IGFuZCByZXBsYWNlIGl0IGluIHRoZSBjZWxsXHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEN1cnJlbmN5ID0gZm9ybWF0Q3VycmVuY3kocGFyc2VGbG9hdChjZWxsVmFsdWUpKTtcclxuICAgICAgICAgICAgY2VsbC50ZXh0Q29udGVudCA9IGZvcm1hdHRlZEN1cnJlbmN5O1xyXG4gICAgICAgIH1cclxuICAgICAgXHJcbiAgICB9KTtcclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFzc2lnbkNvbHVtbkNsYXNzZXMoY29sdW1uRGVmaW5pdGlvbnMpIHtcclxuICAgIGNvbHVtbkRlZmluaXRpb25zLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgICAvLyBBc3NpZ24gY2xhc3MgdG8gY29sdW1uXHJcbiAgICAgICAgYXNzaWduQ2xhc3NUb0NvbHVtbihjb2x1bW4udGl0bGUsIGNvbHVtbi5jbGFzc05hbWUpO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgY29sdW1uIGlzIGEgY29zdCBjb2x1bW4sIGFkZCB0aGUgc3BlY2lmaWMgY29zdCBjbGFzc1xyXG4gICAgICAgIGlmIChjb2x1bW4uaXNDb3N0KSB7XHJcbiAgICAgICAgICAgIGFkZENvc3RDbGFzcyhjb2x1bW4udGl0bGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2hvdyB0aGUgY29sdW1uXHJcbiAgICAgICAgc2hvd0NvbHVtbkJ5VGl0bGUoY29sdW1uLnRpdGxlKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoaWRlQ29sdW1uKGluZGV4KSB7XHJcbiAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4tdGFibGUnKTtcclxuICB2YXIgcm93cyA9IHRhYmxlLnJvd3M7XHJcblxyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB2YXIgY2VsbHMgPSByb3dzW2ldLmNlbGxzO1xyXG4gICAgICBpZiAoY2VsbHMubGVuZ3RoID4gaW5kZXgpIHtcclxuICAgICAgICAgIGNlbGxzW2luZGV4XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vLyBGdW5jdGlvbiB0byBzaG93IGEgc3BlY2lmaWMgY29sdW1uXHJcbmZ1bmN0aW9uIHNob3dDb2x1bW4oaW5kZXgpIHtcclxuICB2YXIgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi10YWJsZScpO1xyXG4gIHZhciByb3dzID0gdGFibGUucm93cztcclxuXHJcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHZhciBjZWxscyA9IHJvd3NbaV0uY2VsbHM7XHJcbiAgICAgIGlmIChjZWxscy5sZW5ndGggPiBpbmRleCkge1xyXG4gICAgICAgICAgY2VsbHNbaW5kZXhdLnN0eWxlLmRpc3BsYXkgPSAndGFibGUtY2VsbCc7XHJcbiAgICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8vIEZ1bmN0aW9uIHRvIGdldCB0aGUgY29sdW1uIGluZGV4IGJ5IHRpdGxlXHJcbmZ1bmN0aW9uIGdldENvbHVtbkluZGV4QnlUaXRsZSh0YWJsZSwgdGl0bGUpIHtcclxuICB2YXIgaGVhZGVycyA9IHRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoJyk7XHJcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChoZWFkZXJzW2ldLmlubmVyVGV4dCA9PT0gdGl0bGUpIHtcclxuICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICB9XHJcbiAgfVxyXG4gIHJldHVybiAtMTsgLy8gQ29sdW1uIG5vdCBmb3VuZFxyXG59XHJcblxyXG4vLyBGdW5jdGlvbiB0byBoaWRlIGEgY29sdW1uIGJ5IHRpdGxlXHJcbmZ1bmN0aW9uIGhpZGVDb2x1bW5CeVRpdGxlKHRpdGxlKSB7XHJcbiAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4tdGFibGUnKTtcclxuICB2YXIgaW5kZXggPSBnZXRDb2x1bW5JbmRleEJ5VGl0bGUodGFibGUsIHRpdGxlKTtcclxuICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgIGhpZGVDb2x1bW4oaW5kZXgpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGBDb2x1bW4gd2l0aCB0aXRsZSBcIiR7dGl0bGV9XCIgbm90IGZvdW5kLmApO1xyXG4gIH1cclxufVxyXG5cclxuLy8gRnVuY3Rpb24gdG8gc2hvdyBhIGNvbHVtbiBieSB0aXRsZVxyXG5mdW5jdGlvbiBzaG93Q29sdW1uQnlUaXRsZSh0aXRsZSkge1xyXG4gIHZhciB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluLXRhYmxlJyk7XHJcbiAgdmFyIGluZGV4ID0gZ2V0Q29sdW1uSW5kZXhCeVRpdGxlKHRhYmxlLCB0aXRsZSk7XHJcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICBzaG93Q29sdW1uKGluZGV4KTtcclxuICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZyhgQ29sdW1uIHdpdGggdGl0bGUgXCIke3RpdGxlfVwiIG5vdCBmb3VuZC5gKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5jb25zdCBDb2x1bW4gPSB7XHJcbiAgYWRkOiBmdW5jdGlvbihwb3NpdGlvbiwgaHRtbENvbnRlbnQsIGhlYWRlclRpdGxlKSB7XHJcbiAgICAgIHJldHVybiBhZGRDb2wocG9zaXRpb24sIGh0bWxDb250ZW50LCBoZWFkZXJUaXRsZSk7XHJcbiAgfSxcclxuICBhZGRBdEVuZDogZnVuY3Rpb24oaHRtbENvbnRlbnQsIGhlYWRlclRpdGxlKSB7XHJcbiAgICAgIHJldHVybiBhZGRDb2xUb0VuZChodG1sQ29udGVudCwgaGVhZGVyVGl0bGUpO1xyXG4gIH0sXHJcbiAgYXNzaWduQ2xhc3NlczogZnVuY3Rpb24oY29sdW1uX2RlZmluaXRpb25zKSB7XHJcbiAgICAgIHJldHVybiBhc3NpZ25Db2x1bW5DbGFzc2VzKGNvbHVtbl9kZWZpbml0aW9ucyk7XHJcbiAgfSxcclxuICBoaWRlIDogZnVuY3Rpb24oY29sTmFtZSkge1xyXG4gICAgICBoaWRlQ29sdW1uQnlUaXRsZShjb2xOYW1lKTtcclxuICB9LFxyXG4gIHNob3cgOiBmdW5jdGlvbihjb2xOYW1lKSB7XHJcbiAgICAgIHNob3dDb2x1bW5CeVRpdGxlKGNvbE5hbWUpO1xyXG4gIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbHVtbjsiLCJpbXBvcnQgeyBGdW5kTG9va3VwVGFibGUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0YV91dGlscy9idWRnZXRfZGF0YV9oYW5kbGVycy5qc1wiO1xyXG5pbXBvcnQgeyBDdXJyZW50RnVuZCwgQ3VycmVudFBhZ2UsIGxvYWRUYWJsZURhdGEsIHNhdmVUYWJsZURhdGEgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0YV91dGlscy9sb2NhbF9zdG9yYWdlX2hhbmRsZXJzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBmaWxsVGFibGUoZGF0YSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluLXRhYmxlJyk7XHJcbiAgICAgICAgY29uc3QgdGhlYWQgPSB0YWJsZS5xdWVyeVNlbGVjdG9yKCd0aGVhZCcpO1xyXG4gICAgICAgIGNvbnN0IHRib2R5ID0gdGFibGUucXVlcnlTZWxlY3RvcigndGJvZHknKTtcclxuXHJcbiAgICAgICAgLy8gY2xlYXIgZXhpc3RpbmcgZGF0YVxyXG4gICAgICAgIHRoZWFkLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIHRib2R5LmlubmVySFRNTCA9ICcnO1xyXG5cclxuICAgICAgICAvLyBDcmVhdGUgdGFibGUgaGVhZGVyIHJvd1xyXG4gICAgICAgIGNvbnN0IGhlYWRlclJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoZGF0YVswXSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBoZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aCcpO1xyXG4gICAgICAgICAgICBoZWFkZXIudGV4dENvbnRlbnQgPSBrZXk7XHJcbiAgICAgICAgICAgIGhlYWRlclJvdy5hcHBlbmRDaGlsZChoZWFkZXIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoZWFkLmFwcGVuZENoaWxkKGhlYWRlclJvdyk7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSB0YWJsZSBib2R5IHJvd3NcclxuICAgICAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XHJcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoaXRlbSkuZm9yRWFjaCh2YWwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTtcclxuICAgICAgICAgICAgY2VsbC50ZXh0Q29udGVudCA9IHZhbDtcclxuICAgICAgICAgICAgcm93LmFwcGVuZENoaWxkKGNlbGwpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGJvZHkuYXBwZW5kQ2hpbGQocm93KTtcclxuICAgICAgICB9KTtcclxuICAgIH0gY2F0Y2goZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdObyB0YWJsZSBzYXZlZCBpbiBsb2NhbFN0b3JhZ2U6JywgZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgc2F2ZVRhYmxlRGF0YSgpO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBsb2FkRnJvbVN0b3JhZ2UoKXtcclxuICAgIC8vIGxvb2sgdXAgdGFibGUgaW4gc3RvcmFnZSBhbmQgcGFzcyB0byB0YWJsZSBsb2FkIGZ1bmN0aW9uXFxcclxuICAgIGlmIChDdXJyZW50RnVuZC5udW1iZXIoKSl7XHJcbiAgICAgICAgdmFyIGtleSA9IGAke0N1cnJlbnRQYWdlLmxvYWQoKX1fJHtDdXJyZW50RnVuZC5udW1iZXIoKX1gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIga2V5ID0gQ3VycmVudFBhZ2UubG9hZCgpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGxvYWRUYWJsZURhdGEoa2V5KTtcclxuICAgIGlmICghZGF0YSl7XHJcbiAgICAgICAgLy8gaWYgbm8gdGFibGUgaW4gc3RvcmFnZSwgcmV0dXJuIDBcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmlsbFRhYmxlKGRhdGEpO1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gbG9hZEZ1bmRzKCl7XHJcbiAgICAvLyBnZXQgbGlzdCBvZiBmdW5kcyBmcm9tIHN0b3JhZ2VcclxuICAgIGNvbnN0IGZ1bmREaWN0ID0gRnVuZExvb2t1cFRhYmxlLnJldHJpZXZlKCk7XHJcbiAgICAvLyBidWlsZCBvdXQgZGF0YSBpbiBjb3JyZWN0IGZvcm1hdFxyXG4gICAgY29uc3QgcmVzdWx0QXJyYXkgPSBbXTtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIGZ1bmREaWN0KSB7XHJcbiAgICAgICAgaWYgKGZ1bmREaWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgcmVzdWx0QXJyYXkucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBGdW5kOiBmdW5kRGljdFtrZXldICAgICAvLyBVc2UgdGhlIHZhbHVlIGRpcmVjdGx5XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZpbGxUYWJsZShyZXN1bHRBcnJheSk7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBnZXRDb2x1bW5JbmRleEJ5Q2xhc3ModGJvZHksIGNsYXNzTmFtZSkge1xyXG4gIGNvbnN0IGZpcnN0Um93ID0gdGJvZHkucm93c1swXTtcclxuICBpZiAoIWZpcnN0Um93KSByZXR1cm4gLTE7IC8vIFJldHVybiAtMSBpZiB0aGVyZSdzIG5vIHJvdyB0byBleGFtaW5lXHJcbiAgZm9yIChsZXQgY2VsbEluZGV4ID0gMDsgY2VsbEluZGV4IDwgZmlyc3RSb3cuY2VsbHMubGVuZ3RoOyBjZWxsSW5kZXgrKykge1xyXG4gICAgICBpZiAoZmlyc3RSb3cuY2VsbHNbY2VsbEluZGV4XS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGNlbGxJbmRleDtcclxuICAgICAgfVxyXG4gIH1cclxuICByZXR1cm4gLTE7IC8vIFJldHVybiAtMSBpZiBjbGFzcyBuYW1lIG5vdCBmb3VuZFxyXG59XHJcblxyXG5mdW5jdGlvbiBzb3J0KHByaW1hcnlDbGFzcywgc2Vjb25kYXJ5Q2xhc3MpIHtcclxuICBjb25zdCB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluLXRhYmxlJyk7XHJcbiAgY29uc3QgdGJvZHkgPSB0YWJsZS50Qm9kaWVzWzBdO1xyXG4gIGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKHRib2R5LnJvd3MpO1xyXG5cclxuICAvLyBHZXQgdGhlIGNvbHVtbiBpbmRpY2VzIGJ5IGNsYXNzIG5hbWVcclxuICBjb25zdCBwcmltYXJ5Q29sSW5kZXggPSBnZXRDb2x1bW5JbmRleEJ5Q2xhc3ModGJvZHksIHByaW1hcnlDbGFzcyk7XHJcbiAgY29uc3Qgc2Vjb25kYXJ5Q29sSW5kZXggPSBnZXRDb2x1bW5JbmRleEJ5Q2xhc3ModGJvZHksIHNlY29uZGFyeUNsYXNzKTtcclxuXHJcbiAgLy8gZXhpdCBpZiBjbGFzc2VzIGRvbid0IGV4aXN0XHJcbiAgaWYgKHByaW1hcnlDb2xJbmRleCA9PT0gLTEgKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoYENvbHVtbiBjbGFzcyAke2NsYXNzQX0gbm90IGZvdW5kIGluIHRhYmxlYCk7XHJcbiAgICAgIHJldHVybjsgXHJcbiAgfSBlbHNlIGlmIChzZWNvbmRhcnlDb2xJbmRleCA9PT0gLTEpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihgQ29sdW1uIGNsYXNzICR7Y2xhc3NCfSBub3QgZm91bmQgaW4gdGFibGVgKTtcclxuICAgICAgcmV0dXJuOyBcclxuICB9XHJcblxyXG4gIC8vIFNvcnQgdGhlIHJvd3MgYmFzZWQgb24gdGhlIHRleHQgY29udGVudCBvZiB0aGUgY2VsbHNcclxuICByb3dzLnNvcnQoKHJvd0EsIHJvd0IpID0+IHtcclxuICAgICAgLy8gUHJpbWFyeSBjb2x1bW4gY29tcGFyaXNvblxyXG4gICAgICBjb25zdCBwcmltYXJ5QSA9IHVuZm9ybWF0Q3VycmVuY3kocm93QS5jZWxsc1twcmltYXJ5Q29sSW5kZXhdLnRleHRDb250ZW50KTtcclxuICAgICAgY29uc3QgcHJpbWFyeUIgPSB1bmZvcm1hdEN1cnJlbmN5KHJvd0IuY2VsbHNbcHJpbWFyeUNvbEluZGV4XS50ZXh0Q29udGVudCk7XHJcblxyXG4gICAgICBpZiAocHJpbWFyeUEgPCBwcmltYXJ5QikgcmV0dXJuIC0xO1xyXG4gICAgICBpZiAocHJpbWFyeUEgPiBwcmltYXJ5QikgcmV0dXJuIDE7XHJcblxyXG4gICAgICAvLyBTZWNvbmRhcnkgY29sdW1uIGNvbXBhcmlzb24gKGlmIHByaW1hcnkgaXMgZXF1YWwpXHJcbiAgICAgIGNvbnN0IHNlY29uZGFyeUEgPSB1bmZvcm1hdEN1cnJlbmN5KHJvd0EuY2VsbHNbc2Vjb25kYXJ5Q29sSW5kZXhdLnRleHRDb250ZW50KTtcclxuICAgICAgY29uc3Qgc2Vjb25kYXJ5QiA9IHVuZm9ybWF0Q3VycmVuY3kocm93Qi5jZWxsc1tzZWNvbmRhcnlDb2xJbmRleF0udGV4dENvbnRlbnQpO1xyXG5cclxuICAgICAgaWYgKHNlY29uZGFyeUEgPCBzZWNvbmRhcnlCKSByZXR1cm4gLTE7XHJcbiAgICAgIGlmIChzZWNvbmRhcnlBID4gc2Vjb25kYXJ5QikgcmV0dXJuIDE7XHJcblxyXG4gICAgICAvLyBJZiBib3RoIGNvbHVtbnMgYXJlIGVxdWFsXHJcbiAgICAgIHJldHVybiAwO1xyXG4gIH0pO1xyXG5cclxuICAvLyBSZWF0dGFjaCBzb3J0ZWQgcm93cyB0byB0aGUgdGFibGUgYm9keVxyXG4gIHJvd3MuZm9yRWFjaCgocm93KSA9PiB0Ym9keS5hcHBlbmRDaGlsZChyb3cpKTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBEYXRhID0ge1xyXG4gICAgbG9hZCA6IGxvYWRGcm9tU3RvcmFnZSxcclxuICAgIGxvYWRGdW5kcyA6IGxvYWRGdW5kcyxcclxuICAgIHNvcnQgOiBmdW5jdGlvbihjb2xBLCBjb2xCKSB7IHNvcnQoY29sQSwgY29sQikgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEYXRhOyIsImltcG9ydCAnLi90YWJsZS5jc3MnO1xyXG5cclxuaW1wb3J0IEJ1dHRvbnMgZnJvbSAnLi9zdWJjb21wb25lbnRzL2J1dHRvbnMuanMnXHJcbmltcG9ydCBDZWxsIGZyb20gJy4vc3ViY29tcG9uZW50cy9jZWxscy5qcydcclxuaW1wb3J0IENvbHVtbnMgZnJvbSAnLi9zdWJjb21wb25lbnRzL2NvbHVtbnMuanMnXHJcbmltcG9ydCBIZWFkZXIgZnJvbSAnLi9zdWJjb21wb25lbnRzL2hlYWRlcnMuanMnXHJcbmltcG9ydCBSb3dzIGZyb20gJy4vc3ViY29tcG9uZW50cy9yb3dzLmpzJ1xyXG5pbXBvcnQgRGF0YSBmcm9tICcuL3N1YmNvbXBvbmVudHMvZGF0YS5qcydcclxuaW1wb3J0IHsgc2F2ZVRhYmxlRGF0YSB9IGZyb20gJy4uLy4uL3V0aWxzL2RhdGFfdXRpbHMvbG9jYWxfc3RvcmFnZV9oYW5kbGVycy5qcydcclxuXHJcbmZ1bmN0aW9uIGFkanVzdFRhYmxlV2lkdGgod2lkdGhfcGN0KXtcclxuICAgIGNvbnN0IHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4tdGFibGUnKTtcclxuICAgIHRhYmxlLnN0eWxlLndpZHRoID0gd2lkdGhfcGN0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbGVhclRhYmxlKCl7XHJcbiAgICBjb25zdCB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluLXRhYmxlJyk7XHJcbiAgICB0YWJsZS5xdWVyeVNlbGVjdG9yKCd0aGVhZCcpLmlubmVySFRNTCA9ICcnO1xyXG4gICAgdGFibGUucXVlcnlTZWxlY3RvcigndGJvZHknKS5pbm5lckhUTUwgPSAnJztcclxufVxyXG5cclxuZnVuY3Rpb24gc2hvd1RhYmxlKCl7XHJcbiAgICBjb25zdCB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluLXRhYmxlJyk7XHJcbiAgICB0YWJsZS5zdHlsZS5kaXNwbGF5ID0gJ3RhYmxlJztcclxufVxyXG5cclxuZnVuY3Rpb24gaGlkZVRhYmxlKCl7XHJcbiAgICBjb25zdCB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluLXRhYmxlJyk7XHJcbiAgICB0YWJsZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgQnV0dG9ucy5BZGRSb3cuaGlkZSgpO1xyXG59XHJcblxyXG5jb25zdCBUYWJsZSA9IHtcclxuICAgIEJ1dHRvbnMgOiBCdXR0b25zLFxyXG4gICAgQ2VsbCA6IENlbGwsXHJcbiAgICBDb2x1bW5zIDogQ29sdW1ucyxcclxuICAgIEhlYWRlciA6IEhlYWRlcixcclxuICAgIFJvd3MgOiBSb3dzLFxyXG4gICAgRGF0YSA6IERhdGEsXHJcbiAgICAvLyBmdW5jdGlvbnNcclxuICAgIGFkanVzdFdpZHRoIDogZnVuY3Rpb24od2lkdGhfcGN0KXtcclxuICAgICAgICBhZGp1c3RUYWJsZVdpZHRoKHdpZHRoX3BjdClcclxuICAgIH0sXHJcbiAgICBjbGVhciA6IGNsZWFyVGFibGUsXHJcbiAgICBoaWRlIDogaGlkZVRhYmxlLFxyXG4gICAgc2hvdyA6IHNob3dUYWJsZSxcclxuICAgIHNhdmUgOiBzYXZlVGFibGVEYXRhXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRhYmxlOyIsImltcG9ydCAnLi9hY2NvcmRpb24uY3NzJztcclxuXHJcbmltcG9ydCB7IEZ1bmQgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZGF0YV91dGlscy9sb2NhbF9zdG9yYWdlX2hhbmRsZXJzLmpzXCI7XHJcbmltcG9ydCB7IGZvcm1hdEN1cnJlbmN5IH0gZnJvbSBcIi4uLy4uL3V0aWxzL2NvbW1vbl91dGlscy5qc1wiO1xyXG5pbXBvcnQgVGFibGUgZnJvbSBcIi4uL3RhYmxlL3RhYmxlLmpzXCI7XHJcbmltcG9ydCB7IEZ1bmRMb29rdXBUYWJsZSB9IGZyb20gXCIuLi8uLi91dGlscy9kYXRhX3V0aWxzL2J1ZGdldF9kYXRhX2hhbmRsZXJzLmpzXCI7XHJcblxyXG5jb25zdCBGdW5kVGFibGUgPSB7XHJcbiAgICB0YWJsZV9pZCA6IChmdW5kKSA9PiB7IHJldHVybiBgdGFibGUtJHtmdW5kfWAgfSxcclxuICAgIGluaXQgOiBmdW5jdGlvbihmdW5kKSB7XHJcbiAgICAgICAgLy8gY3JlYXRlIGVtcHR5IHRhYmxlIGFuZCBwdXQgaXQgaW4gdGhlIGFjY29yZGlvblxyXG4gICAgICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7XHJcbiAgICAgICAgdGFibGUuaWQgPSB0aGlzLnRhYmxlX2lkKGZ1bmQpO1xyXG4gICAgICAgIHRhYmxlLmNsYXNzTGlzdC5hZGQoJ2FjY29yZGlvbi10YWJsZScpO1xyXG4gICAgICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjZnVuZF8ke2Z1bmR9X2NvbnRlbnQgLmFjY29yZGlvbi1ib2R5YCk7XHJcbiAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKHRhYmxlKTtcclxuICAgIH0sXHJcbiAgICBjcmVhdGVOZXdDZWxsIDogZnVuY3Rpb24oY29udGVudCwgcm93KSB7XHJcbiAgICAgICAgY29uc3QgbmV3Q2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7XHJcbiAgICAgICAgbmV3Q2VsbC5pbm5lckhUTUwgPSBjb250ZW50O1xyXG4gICAgICAgIHJvdy5hcHBlbmRDaGlsZChuZXdDZWxsKTtcclxuICAgIH0sXHJcbiAgICBhZGRSb3cgOiBmdW5jdGlvbihmdW5kLCBuYW1lLCBudW1iZXIpe1xyXG4gICAgICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMudGFibGVfaWQoZnVuZCkpO1xyXG4gICAgICAgIHZhciBuZXdfcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTtcclxuICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChuZXdfcm93KTtcclxuICAgICAgICAvLyBDcmVhdGUgYSBjZWxsIGZvciB0aGUgbGluZSBpdGVtIGxhYmVsXHJcbiAgICAgICAgdGhpcy5jcmVhdGVOZXdDZWxsKG5hbWUsIG5ld19yb3cpO1xyXG4gICAgICAgIC8vIGNyZWF0ZSBhIGNlbGwgZm9yIHRoZSBhbW91bnRcclxuICAgICAgICB0aGlzLmNyZWF0ZU5ld0NlbGwoZm9ybWF0Q3VycmVuY3kobnVtYmVyKSwgbmV3X3Jvdyk7XHJcbiAgICAgICAgLy8gY3JlYXRlIEVkaXQgYnV0dG9uIFxyXG4gICAgICAgIHZhciBidXR0b24gPSAnJztcclxuICAgICAgICBpZiAobmFtZSAhPSAnVG90YWwnKXtcclxuICAgICAgICAgICAgYnV0dG9uID0gVGFibGUuQnV0dG9ucy5FZGl0Lmh0bWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY3JlYXRlTmV3Q2VsbChidXR0b24sIG5ld19yb3cpO1xyXG4gICAgfSxcclxuICAgIGZpbGwgOiBmdW5jdGlvbihmdW5kKSB7XHJcbiAgICAgICAgdGhpcy5pbml0KGZ1bmQpO1xyXG4gICAgICAgIGNvbnN0IGZ1bmRPYmplY3QgPSBuZXcgRnVuZChmdW5kKTtcclxuICAgICAgICB0aGlzLmFkZFJvdyhmdW5kLCAnUGVyc29ubmVsIEV4cGVuc2VzJywgZnVuZE9iamVjdC5nZXRQZXJzb25uZWxDb3N0KCkpO1xyXG4gICAgICAgIHRoaXMuYWRkUm93KGZ1bmQsICdOb24tUGVyc29ubmVsIEV4cGVuc2VzJywgZnVuZE9iamVjdC5nZXROb25QZXJzb25uZWxDb3N0KCkpO1xyXG4gICAgICAgIHRoaXMuYWRkUm93KGZ1bmQsICdSZXZlbnVlJywgZnVuZE9iamVjdC5nZXRSZXZlbnVlKCkpO1xyXG4gICAgICAgIHRoaXMuYWRkUm93KGZ1bmQsICdOZXQgRXhwZW5zZXMgKFJldmVudWVzKScsIGZ1bmRPYmplY3QuZ2V0VG90YWwoKSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IEl0ZW0gPSB7XHJcbiAgICBodG1sIDogZnVuY3Rpb24oZnVuZCkge1xyXG4gICAgICAgIHZhciBpZCA9IGZ1bmQ7IC8vIGNsZWFuU3RyaW5nKGZ1bmQpO1xyXG4gICAgICAgIHJldHVybiBgPGgyIGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlclwiIGlkPVwiZnVuZF8ke2lkfV9oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWNjb3JkaW9uLWJ1dHRvbiBjb2xsYXBzZWRcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI2Z1bmRfJHtpZH1fY29udGVudFwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtY29udHJvbHM9XCJmdW5kXyR7aWR9X2NvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYW1lXCI+PC9zcGFuPjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhbW91bnRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2gyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cImZ1bmRfJHtpZH1fY29udGVudFwiIGNsYXNzPVwiYWNjb3JkaW9uLWNvbGxhcHNlIGNvbGxhcHNlXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZnVuZF8ke2lkfV9oZWFkZXJcIiBkYXRhLWJzLXBhcmVudD1cIiNzdW1tYXJ5LWFjY29yZGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2NvcmRpb24tYm9keVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+YFxyXG4gICAgfSxcclxuICAgIGFkZCA6IGZ1bmN0aW9uKGZ1bmQpIHtcclxuICAgICAgICAvLyBnZXQgYWNjb3JkaW9uIGFuZCBhZGQgYSBuZXcgaXRlbSB0byBpdFxyXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdW1tYXJ5LWFjY29yZGlvbicpO1xyXG4gICAgICAgIGNvbnN0IGl0ZW1fZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIGl0ZW1fZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdhY2NvcmRpb24taXRlbScpO1xyXG4gICAgICAgIGl0ZW1fZWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLmh0bWwoZnVuZCk7XHJcbiAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKGl0ZW1fZWxlbWVudCk7XHJcbiAgICAgICAgRnVuZFRhYmxlLmZpbGwoZnVuZCk7XHJcbiAgICB9LFxyXG4gICAgRnVuZFRhYmxlIDogRnVuZFRhYmxlLFxyXG4gICAgdXBkYXRlSGVhZGVyIDogZnVuY3Rpb24oZnVuZCwgbmV3X2Ftb3VudCkge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlcl9idG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjZnVuZF8ke2Z1bmR9X2hlYWRlciBidXR0b25gKTtcclxuICAgICAgICBoZWFkZXJfYnRuLnF1ZXJ5U2VsZWN0b3IoJ3NwYW4ubmFtZScpLnRleHRDb250ZW50ID0gRnVuZExvb2t1cFRhYmxlLmdldE5hbWUoZnVuZCk7XHJcbiAgICAgICAgaGVhZGVyX2J0bi5xdWVyeVNlbGVjdG9yKCdzcGFuLmFtb3VudCcpLnRleHRDb250ZW50ID0gZm9ybWF0Q3VycmVuY3kobmV3X2Ftb3VudCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBBY2NvcmRpb24gPSB7XHJcbiAgICBJdGVtIDogSXRlbSxcclxuICAgIGhpZGUgOiBmdW5jdGlvbigpe1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2NvcmRpb24tZGl2Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAvLyByZXNldCB0byBkZWxldGUgY29udGVudFxyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdW1tYXJ5LWFjY29yZGlvbicpLmlubmVySFRNTCA9ICcnO1xyXG4gICAgfSxcclxuICAgIHNob3cgOiBmdW5jdGlvbigpe1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2NvcmRpb24tZGl2Jykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICB9LFxyXG4gICAgYXN5bmMgY3JlYXRlRnJvbUZ1bmRzKCl7XHJcbiAgICAgICAgdmFyIGZ1bmRzID0gRnVuZExvb2t1cFRhYmxlLmxpc3RGdW5kcygpO1xyXG5cclxuICAgICAgICBmdW5kcy5mb3JFYWNoKGZ1bmQgPT4ge1xyXG4gICAgICAgICAgICBJdGVtLmFkZChmdW5kKTtcclxuICAgICAgICAgICAgY29uc3QgZnVuZE9iamVjdCA9IG5ldyBGdW5kKGZ1bmQpO1xyXG4gICAgICAgICAgICBJdGVtLnVwZGF0ZUhlYWRlcihmdW5kLCBmdW5kT2JqZWN0LmdldFRvdGFsKCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBY2NvcmRpb247XHJcbiIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9maWxlX3VwbG9hZC5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcbm9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9maWxlX3VwbG9hZC5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJcclxuXHJcbmltcG9ydCB7IFNIRUVUUyB9IGZyb20gJy4uLy4uL2luaXQuanMnO1xyXG5pbXBvcnQgeyBGdW5kTG9va3VwVGFibGUsIFNlcnZpY2VzIH0gZnJvbSAnLi9idWRnZXRfZGF0YV9oYW5kbGVycy5qcyc7XHJcbmltcG9ydCB7IHJlbW92ZU5ld0xpbmVzIH0gZnJvbSAnLi4vY29tbW9uX3V0aWxzLmpzJztcclxuaW1wb3J0IHsgQmFzZWxpbmUgfSBmcm9tICcuL2xvY2FsX3N0b3JhZ2VfaGFuZGxlcnMuanMnO1xyXG5cclxuZnVuY3Rpb24gZGVsZXRlVG9wUm93c1VudGlsRnVsbERhdGEoZGF0YSkge1xyXG4gICAgLy8gZnVuY3Rpb24gdG8gdHJ5IHRvIGZpbmQgdGhlIHRvcCBvZiB0aGUgdXNhYmxlIGRhdGFcclxuICAgIGxldCBmdWxsRGF0YVJvd0ZvdW5kID0gZmFsc2U7XHJcblxyXG4gICAgd2hpbGUgKCFmdWxsRGF0YVJvd0ZvdW5kICYmIGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHJvdyA9IGRhdGFbMF07IC8vIEdldCB0aGUgdG9wIHJvd1xyXG4gICAgICAgIGxldCBoYXNBbGxEYXRhID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBjZWxsIG9mIHJvdykge1xyXG4gICAgICAgICAgICBpZiAoY2VsbCA9PSBudWxsIHx8IGNlbGwgPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICBoYXNBbGxEYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGhhc0FsbERhdGEgJiYgcm93Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgZnVsbERhdGFSb3dGb3VuZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZGVsZXRlIHRoZSB0b3Agcm93IGlmIGl0J3Mgbm90IHRoZSBoZWFkZXIgcm93XHJcbiAgICAgICAgICAgIGRhdGEuc2hpZnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzV29ya2Jvb2soYXJyYXlCdWZmZXIpIHtcclxuICAgIGNvbnN0IHdvcmtib29rID0gWExTWC5yZWFkKGFycmF5QnVmZmVyLCB7IHR5cGU6ICdhcnJheScgfSk7XHJcbiAgICB3b3JrYm9vay5TaGVldE5hbWVzLmZvckVhY2goc2hlZXROYW1lID0+IHtcclxuICAgICAgICAvLyBvbmx5IGNvbnZlcnQgc2hlZXRzIHdlIG5lZWRcclxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoU0hFRVRTKS5pbmNsdWRlcyhzaGVldE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAvLyByZWFkIGluIHNoZWV0c1xyXG4gICAgICAgICAgICBjb25zdCBzaGVldCA9IHdvcmtib29rLlNoZWV0c1tzaGVldE5hbWVdO1xyXG4gICAgICAgICAgICBjb25zdCByYXdEYXRhID0gWExTWC51dGlscy5zaGVldF90b19qc29uKHNoZWV0LCB7IGhlYWRlcjogMSwgZGVmdmFsOiAnJyB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIENsZWFuIHRoZSBkYXRhIGJ5IHJlbW92aW5nIHRvcCByb3dzIHdpdGggaW5jb21wbGV0ZSBkYXRhXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFSb3dzID0gZGVsZXRlVG9wUm93c1VudGlsRnVsbERhdGEocmF3RGF0YSk7XHJcblxyXG4gICAgICAgICAgICAvLyBnZXQgbmV3IGhlYWRlcnNcclxuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IGRhdGFSb3dzWzBdO1xyXG5cclxuICAgICAgICAgICAgLy8gaXNvbGF0ZSBGdW5kIGNvbHVtbiB0byBzcGxpdCBkYXRhXHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bmRJbmRleCA9IGhlYWRlcnMuaW5kZXhPZignRnVuZCcpO1xyXG4gICAgICAgICAgICBpZiAoZnVuZEluZGV4ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgTm8gJ0Z1bmQnIGNvbHVtbiBmb3VuZCBpbiBzaGVldCAke3NoZWV0TmFtZX1gKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gU2F2ZSBhIGRpY3Rpb25hcnkgb2YgZGF0YSBmb3IgZWFjaCBmdW5kIGZvciBlYWNoIHNoZWV0XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bmREYXRhID0ge307XHJcblxyXG4gICAgICAgICAgICBkYXRhUm93cy5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmdW5kID0gcm93W2Z1bmRJbmRleF07XHJcbiAgICAgICAgICAgICAgICBpZihmdW5kICYmIGZ1bmQgIT0gXCJGdW5kXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZnVuZERhdGFbZnVuZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuZERhdGFbZnVuZF0gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93RGF0YSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhW3JlbW92ZU5ld0xpbmVzKGhlYWRlcildID0gcm93W2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBmdW5kRGF0YVtmdW5kXS5wdXNoKHJvd0RhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIHNhdmUgZnVuZCBudW1iZXIgYW5kIG5hbWUgYXMgd2UgZ28gYWxvbmdcclxuICAgICAgICAgICAgRnVuZExvb2t1cFRhYmxlLnVwZGF0ZShmdW5kRGF0YSk7ICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmdW5kRGF0YSkuZm9yRWFjaChmdW5kID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGAke1NIRUVUU1tzaGVldE5hbWVdfV8ke2Z1bmR9YDtcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkoZnVuZERhdGFbZnVuZF0pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBCdXQgYWxzbyBzYXZlIHRoZSBwb3NzaWJsZSBzZXJ2aWNlc1xyXG4gICAgICAgIGVsc2UgaWYgKHNoZWV0TmFtZSA9PSAnRHJvcC1Eb3ducycpe1xyXG4gICAgICAgICAgICBjb25zdCBzaGVldCA9IHdvcmtib29rLlNoZWV0c1tzaGVldE5hbWVdO1xyXG4gICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBzaGVldCB0byBKU09OIHRvIGVhc2lseSBtYW5pcHVsYXRlIGRhdGFcclxuICAgICAgICAgICAgY29uc3Qgc2hlZXREYXRhID0gWExTWC51dGlscy5zaGVldF90b19qc29uKHNoZWV0LCB7IGhlYWRlcjogMSB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIExvY2F0ZSB0aGUgXCJzZXJ2aWNlc1wiIGNvbHVtbiBoZWFkZXIgaW4gcm93IDBcclxuICAgICAgICAgICAgY29uc3QgaGVhZGVyUm93ID0gc2hlZXREYXRhWzBdO1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlc0luZGV4ID0gaGVhZGVyUm93LmluZGV4T2YoJ1NlcnZpY2VzJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VydmljZXNJbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0hlYWRlciBcIlNlcnZpY2VzXCIgbm90IGZvdW5kJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGRhdGEgZnJvbSB0aGUgXCJzZXJ2aWNlc1wiIGNvbHVtbiAoZXhjbHVkaW5nIHRoZSBoZWFkZXIgcm93KVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZXNDb2x1bW4gPSBzaGVldERhdGEuc2xpY2UoMSkubWFwKHJvdyA9PiByb3dbc2VydmljZXNJbmRleF0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xlYW5lZFNlcnZpY2VzQ29sdW1uID0gc2VydmljZXNDb2x1bW4uZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9IG51bGwpO1xyXG4gICAgICAgICAgICAgICAgLy8gc2F2ZSB0aGUgZGF0YVxyXG4gICAgICAgICAgICAgICAgU2VydmljZXMuc2F2ZShjbGVhbmVkU2VydmljZXNDb2x1bW4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc29sZS5sb2coJ2FsbCBleGNlbCBkYXRhIHNhdmVkJyk7XHJcbn1cclxuXHJcbi8vIFV0aWxpdHkgZnVuY3Rpb24gdG8gYXBwZW5kIGEgc2hlZXQgdG8gdGhlIHdvcmtib29rIGlmIGRhdGEgaXMgcHJlc2VudFxyXG5mdW5jdGlvbiBhcHBlbmRTaGVldFRvV29ya2Jvb2sod29ya2Jvb2ssIGRhdGEsIHNoZWV0TmFtZSkge1xyXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHNoZWV0ID0gWExTWC51dGlscy5qc29uX3RvX3NoZWV0KGRhdGEpO1xyXG4gICAgICAgIFhMU1gudXRpbHMuYm9va19hcHBlbmRfc2hlZXQod29ya2Jvb2ssIHNoZWV0LCBzaGVldE5hbWUpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWRYTFNYKCkge1xyXG4gICAgY29uc3QgYmFzZWxpbmUgPSBuZXcgQmFzZWxpbmUoKTtcclxuICAgIGNvbnN0IHdvcmtib29rID0gWExTWC51dGlscy5ib29rX25ldygpOyAvLyBDcmVhdGUgYSBuZXcgd29ya2Jvb2tcclxuXHJcbiAgICBjb25zdCBkYXRhTWFwID0ge1xyXG4gICAgICAgIFBlcnNvbm5lbDogJ3BlcnNvbm5lbCcsXHJcbiAgICAgICAgT3ZlcnRpbWU6ICdvdmVydGltZScsXHJcbiAgICAgICAgTm9uUGVyc29ubmVsOiAnbm9ucGVyc29ubmVsJyxcclxuICAgICAgICBSZXZlbnVlOiAncmV2ZW51ZSdcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc2hlZXREYXRhID0ge1xyXG4gICAgICAgIFBlcnNvbm5lbDogW10sXHJcbiAgICAgICAgT3ZlcnRpbWU6IFtdLFxyXG4gICAgICAgIE5vblBlcnNvbm5lbDogW10sXHJcbiAgICAgICAgUmV2ZW51ZTogW11cclxuICAgIH07XHJcblxyXG4gICAgYmFzZWxpbmUuZnVuZHMuZm9yRWFjaChmdW5kID0+IHtcclxuICAgICAgICBPYmplY3Qua2V5cyhkYXRhTWFwKS5mb3JFYWNoKHNoZWV0TmFtZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmdW5kW2RhdGFNYXBbc2hlZXROYW1lXV0gJiYgZnVuZFtkYXRhTWFwW3NoZWV0TmFtZV1dLnRhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBzaGVldERhdGFbc2hlZXROYW1lXS5wdXNoKC4uLmZ1bmRbZGF0YU1hcFtzaGVldE5hbWVdXS50YWJsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIE9iamVjdC5rZXlzKHNoZWV0RGF0YSkuZm9yRWFjaChzaGVldE5hbWUgPT4ge1xyXG4gICAgICAgIGFwcGVuZFNoZWV0VG9Xb3JrYm9vayh3b3JrYm9vaywgc2hlZXREYXRhW3NoZWV0TmFtZV0sIHNoZWV0TmFtZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBHZW5lcmF0ZSBhIGRvd25sb2FkYWJsZSBmaWxlXHJcbiAgICBjb25zdCB3Ym91dCA9IFhMU1gud3JpdGUod29ya2Jvb2ssIHsgYm9va1R5cGU6ICd4bHN4JywgdHlwZTogJ2FycmF5JyB9KTtcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbd2JvdXRdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nIH0pO1xyXG5cclxuICAgIC8vIENyZWF0ZSBhIGxpbmsgYW5kIHRyaWdnZXIgdGhlIGRvd25sb2FkXHJcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICBsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgbGluay5kb3dubG9hZCA9IFwiYmFzZWxpbmVfZGF0YS54bHN4XCI7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgbGluay5jbGljaygpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcclxufSIsImltcG9ydCAnLi9maWxlX3VwbG9hZC5jc3MnO1xyXG5cclxuaW1wb3J0IHsgcHJvY2Vzc1dvcmtib29rIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2RhdGFfdXRpbHMvWExTWF9oYW5kbGVycy5qc1wiO1xyXG5cclxuZXhwb3J0IGNvbnN0IEZpbGVVcGxvYWQgPSB7XHJcbiAgICBpbml0IDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3QgaW5wdXRPYmplY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZS1pbnB1dCcpO1xyXG4gICAgICAgIGlucHV0T2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKGV2ZW50KSB7cmVhZFhMKGV2ZW50KSB9KTtcclxuICAgIH0sXHJcbiAgICBzaG93IDogZnVuY3Rpb24oKXtcclxuICAgICAgICBjb25zdCBpbnB1dE9iamVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlLWlucHV0Jyk7XHJcbiAgICAgICAgaW5wdXRPYmplY3Quc3R5bGUuZGlzcGxheSA9ICcnO1xyXG4gICAgfSxcclxuICAgIGhpZGUgOiBmdW5jdGlvbigpe1xyXG4gICAgICAgIGNvbnN0IGlucHV0T2JqZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUtaW5wdXQnKTtcclxuICAgICAgICBpbnB1dE9iamVjdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZWFkWEwoZXZlbnQpIHtcclxuICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XHJcblxyXG4gICAgaWYgKGZpbGUpIHtcclxuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgICAgICBwcm9jZXNzV29ya2Jvb2soYXJyYXlCdWZmZXIpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcmVhZGluZyBmaWxlOicsIGVycik7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7IC8vIFJlYWQgdGhlIGZpbGUgYXMgYW4gQXJyYXlCdWZmZXJcclxuICAgIH1cclxufSIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9tb2RhbC5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcbm9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9tb2RhbC5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgJy4vbW9kYWwuY3NzJztcclxuXHJcbmZ1bmN0aW9uIGNsZWFyTW9kYWwoKXtcclxuICAgIHVwZGF0ZU1vZGFsVGl0bGUoJycpO1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsLWJvZHknKS5pbm5lckhUTUwgPSAnJztcclxuICAgIC8vcmVtb3ZlQWxsTW9kYWxMaW5rcygpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhpZGVNb2RhbChtb2RhbF9pZCkge1xyXG4gICAgJCgnIycgKyBtb2RhbF9pZCkubW9kYWwoJ2hpZGUnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2hvd01vZGFsKG1vZGFsX2lkKSB7XHJcbiAgICAkKCcjJyArIG1vZGFsX2lkKS5tb2RhbCgnc2hvdycpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzaG93TW9kYWxIYW5kbGVyKCkge1xyXG4gICAgc2hvd01vZGFsKCdtYWluLW1vZGFsJyk7XHJcbn1cclxuXHJcbmNvbnN0IFN1Ym1pdCA9IHtcclxuICAgIGhhbmRsZXI6IG51bGwsIFxyXG5cclxuICAgIGluaXQ6IGZ1bmN0aW9uKG9uU3VibWl0KSB7XHJcbiAgICAgICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi1tb2RhbCcpO1xyXG4gICAgICAgIC8vIGFkZCBvblN1Ym1pdCBmdW5jdGlvbiBhcyBoYW5kbGVyXHJcbiAgICAgICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgb25TdWJtaXQoZXZlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy8gQWRkaW5nIHRoZSBoYW5kbGVyIHJlZmVyZW5jZSBhcyB0aGUgZXZlbnQgbGlzdGVuZXJcclxuICAgICAgICBtb2RhbC5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCB0aGlzLmhhbmRsZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBkZWluaXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4tbW9kYWwnKTtcclxuICAgICAgICBpZiAodGhpcy5oYW5kbGVyICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIFJlbW92aW5nIHRoZSBldmVudCBsaXN0ZW5lciBhbmQgY2xlYXIgdGhlIGhhbmRsZXJcclxuICAgICAgICAgICAgbW9kYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3VibWl0JywgdGhpcy5oYW5kbGVyKTtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVyID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5jb25zdCBMaW5rID0ge1xyXG4gICAgYWRkIDogZnVuY3Rpb24oYnV0dG9uX2lkKXtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChidXR0b25faWQpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2hvd01vZGFsSGFuZGxlcilcclxuICAgIH0sXHJcbiAgICByZW1vdmUgOiBmdW5jdGlvbihidXR0b25faWQpe1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGJ1dHRvbl9pZCkucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzaG93TW9kYWxIYW5kbGVyKVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVNb2RhbFRpdGxlKHRpdGxlKSB7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWwtdGl0bGUnKS50ZXh0Q29udGVudCA9IHRpdGxlO1xyXG59XHJcblxyXG5jb25zdCBUaXRsZSA9IHtcclxuICAgIHVwZGF0ZSA6IGZ1bmN0aW9uKHRpdGxlKSB7IHVwZGF0ZU1vZGFsVGl0bGUodGl0bGUpIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IE1vZGFsID0ge1xyXG4gICAgaGlkZSA6IGZ1bmN0aW9uKCkgeyBoaWRlTW9kYWwoJ21haW4tbW9kYWwnKSB9LFxyXG4gICAgc2hvdyA6IGZ1bmN0aW9uKCkgeyBzaG93TW9kYWwoJ21haW4tbW9kYWwnKSB9LFxyXG4gICAgY2xlYXIgOiBjbGVhck1vZGFsLFxyXG4gICAgVGl0bGUgOiBUaXRsZSxcclxuICAgIExpbmsgOiBMaW5rLFxyXG4gICAgU3VibWl0OiBTdWJtaXRcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTW9kYWw7IiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL25hdl9idXR0b25zLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xub3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL25hdl9idXR0b25zLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsImltcG9ydCAnLi9uYXZfYnV0dG9ucy5jc3MnO1xyXG5cclxuaW1wb3J0IHsgbmV4dFBhZ2UsIGxhc3RQYWdlIH0gZnJvbSAnLi4vLi4vdmlld3Mvdmlld19sb2dpYy5qcydcclxuXHJcbmZ1bmN0aW9uIGluaXRpYWxpemVOYXZCdXR0b25zKCl7XHJcbiAgICAvLyBpbml0aWFsaXplIGxhc3QgYnV0dG9uXHJcbiAgICBjb25zdCBsYXN0X2J0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tbGFzdCcpO1xyXG4gICAgbGFzdF9idG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBsYXN0UGFnZSk7IFxyXG4gICAgLy8gaW5pdGlhbGl6ZSBuZXh0IGJ1dHRvblxyXG4gICAgY29uc3QgbmV4dF9idG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLW5leHQnKTtcclxuICAgIG5leHRfYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgbmV4dFBhZ2UpOyBcclxuICAgIGRpc2FibGUoJ2J0bi1uZXh0Jyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhpZGVOYXZCdXR0b25zKCkge1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25hdi1idG5zJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxufVxyXG5cclxuZnVuY3Rpb24gc2hvd05hdkJ1dHRvbnMoKSB7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmF2LWJ0bnMnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgIGluaXRpYWxpemVOYXZCdXR0b25zKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRpc2FibGUoYnV0dG9uX2lkKSB7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChidXR0b25faWQpLmNsYXNzTGlzdC5hZGQoJ2Rpc2FibGVkJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVuYWJsZShidXR0b25faWQpIHtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGJ1dHRvbl9pZCkuY2xhc3NMaXN0LnJlbW92ZSgnZGlzYWJsZWQnKTtcclxufVxyXG5cclxuY29uc3QgTmV4dCA9IHtcclxuICAgIGRpc2FibGUgOiBmdW5jdGlvbigpIHsgZGlzYWJsZSgnYnRuLW5leHQnKSB9LFxyXG4gICAgZW5hYmxlIDogZnVuY3Rpb24oKSB7IGVuYWJsZSgnYnRuLW5leHQnKSB9XHJcbn1cclxuXHJcbmNvbnN0IExhc3QgPSB7XHJcbiAgICBkaXNhYmxlIDogZnVuY3Rpb24oKSB7IGRpc2FibGUoJ2J0bi1sYXN0JykgfSxcclxuICAgIGVuYWJsZSA6IGZ1bmN0aW9uKCkgeyBlbmFibGUoJ2J0bi1sYXN0JykgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgTmF2QnV0dG9ucyA9IHtcclxuICAgIGhpZGUgOiBoaWRlTmF2QnV0dG9ucyxcclxuICAgIHNob3cgOiBzaG93TmF2QnV0dG9ucyxcclxuICAgIE5leHQgOiBOZXh0LFxyXG4gICAgTGFzdCA6IExhc3RcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTmF2QnV0dG9uczsiLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vcHJvbXB0LmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xub3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3Byb21wdC5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJmdW5jdGlvbiBzaG93UHJvbXB0KCl7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInByb21wdC1kaXZcIikuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gaGlkZVByb21wdCgpe1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb21wdC1kaXYnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gdXBkYXRlUHJvbXB0KHByb21wdCl7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJvbXB0JykudGV4dENvbnRlbnQgPSBwcm9tcHQ7XHJcbiAgICBzaG93UHJvbXB0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBUZXh0ID0ge1xyXG4gICAgc2hvdyA6IHNob3dQcm9tcHQsXHJcbiAgICBoaWRlIDogaGlkZVByb21wdCxcclxuICAgIHVwZGF0ZSA6IGZ1bmN0aW9uKHRleHQpIHsgdXBkYXRlUHJvbXB0KHRleHQpIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dDsiLCJmdW5jdGlvbiBzaG93UHJvbXB0QnV0dG9uKGlkKXtcclxuICAgIC8vIG1ha2UgYnV0dG9ucyB2aXNpYmxlXHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnO1xyXG59XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVQcm9tcHRCdXR0b24oaWQsIHRleHQpe1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnRleHRDb250ZW50ID0gdGV4dDtcclxuICAgIHNob3dQcm9tcHRCdXR0b24oaWQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoaWRlUHJvbXB0QnV0dG9uKGlkKXtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG59XHJcblxyXG5mdW5jdGlvbiB1bmNsaWNrQWxsKCl7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3B0aW9uMScpLmNsYXNzTGlzdC5yZW1vdmUoJ2NsaWNrZWQnKTtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcHRpb24yJykuY2xhc3NMaXN0LnJlbW92ZSgnY2xpY2tlZCcpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhcHBseUNsaWNrZWRTdHlsZShidXR0b24pe1xyXG4gICAgdW5jbGlja0FsbCgpO1xyXG4gICAgYnV0dG9uLmNsYXNzTGlzdC5hZGQoJ2NsaWNrZWQnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkUHJvbXB0QnV0dG9uQWN0aW9uKGJ1dHRvbl9pZCwgYWN0aW9uX2ZuKXtcclxuICAgIGNvbnN0IGJ1dHRvbkVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChidXR0b25faWQpO1xyXG4gICAgYnV0dG9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFjdGlvbl9mbik7XHJcbiAgICBidXR0b25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXtcclxuICAgICAgICBhcHBseUNsaWNrZWRTdHlsZSh0aGlzKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVQcm9tcHRCdXR0b25BY3Rpb24oYnV0dG9uX2lkLCBhY3Rpb25fZm4pe1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYnV0dG9uX2lkKS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGFjdGlvbl9mbik7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBMZWZ0ID0ge1xyXG4gICAgc2hvdyA6IGZ1bmN0aW9uKCkgeyBzaG93UHJvbXB0QnV0dG9uKCdvcHRpb24xJykgfSxcclxuICAgIGhpZGUgOiBmdW5jdGlvbigpIHsgaGlkZVByb21wdEJ1dHRvbignb3B0aW9uMScpIH0sXHJcbiAgICB1cGRhdGVUZXh0IDogZnVuY3Rpb24odGV4dCkgeyB1cGRhdGVQcm9tcHRCdXR0b24oJ29wdGlvbjEnLCB0ZXh0KSB9LFxyXG4gICAgYWRkQWN0aW9uIDogZnVuY3Rpb24oYWN0aW9uX2ZuKSB7IGFkZFByb21wdEJ1dHRvbkFjdGlvbignb3B0aW9uMScsIGFjdGlvbl9mbikgfSxcclxuICAgIHJlbW92ZUFjdGlvbiA6IGZ1bmN0aW9uKGFjdGlvbl9mbikgeyByZW1vdmVQcm9tcHRCdXR0b25BY3Rpb24oJ29wdGlvbjEnLCBhY3Rpb25fZm4pIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IFJpZ2h0ID0ge1xyXG4gICAgc2hvdyA6IGZ1bmN0aW9uKCkgeyBzaG93UHJvbXB0QnV0dG9uKCdvcHRpb24yJykgfSxcclxuICAgIGhpZGUgOiBmdW5jdGlvbigpIHsgaGlkZVByb21wdEJ1dHRvbignb3B0aW9uMicpIH0sXHJcbiAgICB1cGRhdGVUZXh0IDogZnVuY3Rpb24odGV4dCkgeyB1cGRhdGVQcm9tcHRCdXR0b24oJ29wdGlvbjInLCB0ZXh0KSB9LFxyXG4gICAgYWRkQWN0aW9uIDogZnVuY3Rpb24oYWN0aW9uX2ZuKSB7IGFkZFByb21wdEJ1dHRvbkFjdGlvbignb3B0aW9uMicsIGFjdGlvbl9mbikgfSxcclxuICAgIHJlbW92ZUFjdGlvbiA6IGZ1bmN0aW9uKGFjdGlvbl9mbikgeyByZW1vdmVQcm9tcHRCdXR0b25BY3Rpb24oJ29wdGlvbjInLCBhY3Rpb25fZm4pIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IEJ1dHRvbnMgPSB7XHJcbiAgICBMZWZ0IDogTGVmdCxcclxuICAgIFJpZ2h0IDogUmlnaHQsXHJcbiAgICBzaG93IDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgc2hvd1Byb21wdEJ1dHRvbignb3B0aW9uMScpO1xyXG4gICAgICAgIHNob3dQcm9tcHRCdXR0b24oJ29wdGlvbjInKTtcclxuICAgIH0sXHJcbiAgICBoaWRlIDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaGlkZVByb21wdEJ1dHRvbignb3B0aW9uMScpO1xyXG4gICAgICAgIGhpZGVQcm9tcHRCdXR0b24oJ29wdGlvbjInKTtcclxuICAgIH0sXHJcbiAgICByZXNldCA6IHVuY2xpY2tBbGxcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uczsiLCJpbXBvcnQgJy4vcHJvbXB0LmNzcyc7XHJcblxyXG5pbXBvcnQgVGV4dCBmcm9tIFwiLi9zdWJjb21wb25lbnRzL3RleHQuanNcIjtcclxuaW1wb3J0IEJ1dHRvbnMgZnJvbSBcIi4vc3ViY29tcG9uZW50cy9idXR0b25zLmpzXCI7XHJcblxyXG5leHBvcnQgY29uc3QgUHJvbXB0ID0ge1xyXG4gICAgVGV4dCA6IFRleHQsXHJcbiAgICBCdXR0b25zIDogQnV0dG9ucyxcclxuICAgIGhpZGUgOiBmdW5jdGlvbigpe1xyXG4gICAgICAgIFRleHQuaGlkZSgpO1xyXG4gICAgICAgIEJ1dHRvbnMuaGlkZSgpO1xyXG4gICAgfSxcclxuICAgIHNob3cgOiBmdW5jdGlvbigpe1xyXG4gICAgICAgIFRleHQuc2hvdygpO1xyXG4gICAgICAgIEJ1dHRvbnMuc2hvdygpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQcm9tcHQiLCJpbXBvcnQgJy4vYm9keS5jc3MnO1xyXG5cclxuaW1wb3J0IFdlbGNvbWUgZnJvbSAnLi4vLi4vY29tcG9uZW50cy93ZWxjb21lL3dlbGNvbWUuanMnXHJcbmltcG9ydCB7IEFjY29yZGlvbiB9IGZyb20gJy4uL2FjY29yZGlvbi9hY2NvcmRpb24uanMnO1xyXG5pbXBvcnQgeyBGaWxlVXBsb2FkIH0gZnJvbSAnLi4vZmlsZV91cGxvYWQvZmlsZV91cGxvYWQuanMnO1xyXG5pbXBvcnQgTW9kYWwgZnJvbSAnLi4vbW9kYWwvbW9kYWwuanMnO1xyXG5pbXBvcnQgTmF2QnV0dG9ucyBmcm9tICcuLi9uYXZfYnV0dG9ucy9uYXZfYnV0dG9ucy5qcyc7XHJcbmltcG9ydCBQcm9tcHQgZnJvbSAnLi4vcHJvbXB0L3Byb21wdC5qcyc7XHJcbmltcG9ydCBTaWRlYmFyIGZyb20gJy4uL3NpZGViYXIvc2lkZWJhci5qcyc7XHJcbmltcG9ydCBUYWJsZSBmcm9tICcuLi90YWJsZS90YWJsZS5qcyc7XHJcblxyXG5mdW5jdGlvbiByZXNldFBhZ2UoKSB7XHJcbiAgICAvLyBoaWRlIGV2ZXJ5dGhpbmcgaW4gdGhlIGJvZHlcclxuICAgIFdlbGNvbWUuaGlkZSgpO1xyXG4gICAgTW9kYWwuY2xlYXIoKTtcclxuICAgIE1vZGFsLmhpZGUoKTtcclxuICAgIE5hdkJ1dHRvbnMuaGlkZSgpO1xyXG4gICAgUHJvbXB0LmhpZGUoKTtcclxuICAgIFRhYmxlLmhpZGUoKTtcclxuICAgIFNpZGViYXIuaGlkZSgpO1xyXG4gICAgQWNjb3JkaW9uLmhpZGUoKTtcclxuICAgIEZpbGVVcGxvYWQuaGlkZSgpO1xyXG4gICAgLy8gZGlzYWJsZSBuZXh0IGJ1dHRvblxyXG4gICAgTmF2QnV0dG9ucy5OZXh0LmRpc2FibGUoKTtcclxuICAgIFByb21wdC5CdXR0b25zLnJlc2V0KCk7XHJcbiAgICAvLyBkaXNhYmxlIHN1Ym1pdCBidXR0b25cclxuICAgIE1vZGFsLlN1Ym1pdC5kZWluaXQoKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IEJvZHkgPSB7XHJcbiAgICByZXNldCA6IHJlc2V0UGFnZVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCb2R5OyIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9mb3JtLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xub3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2Zvcm0uY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiLy8gZnVuY3Rpb24gdG8gYWRkIHF1ZXN0aW9ucyB0byBmb3Jtc1xyXG4vLyB0eXBlIGlzICdpbnB1dCcgb3IgJ3RleHRhcmVhJ1xyXG4vLyBpbnB1dFR5cGUgaXMgZm9yIHZhbGlkYXRpb24gKCdudW1iZXInIG9yICd0ZXh0JywgZXRjKVxyXG5mdW5jdGlvbiBhcHBlbmRGb3JtRWxlbWVudCh0eXBlLCBsYWJlbCwgaW5wdXRJZCwgcmVxdWlyZWQsIGlucHV0VHlwZSwgZm9ybV9pZCA9ICduZXctZm9ybScsIGNvc3QgPSBmYWxzZSkge1xyXG5cclxuICAgIC8vIGNoYW5nZSBpZiB3ZSB3YW50IGZvcm1zIGVsc2V3aGVyZVxyXG4gICAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1faWQpO1xyXG5cclxuICAgIC8vIGNyZWF0ZSBvdXRlciB3cmFwcGVyIGZvciBlbGVtZW50XHJcbiAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7ICBcclxuXHJcbiAgICAvLyBsYWJlbCBxdWVzdGlvblxyXG4gICAgY29uc3QgbGFiZWxFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7XHJcbiAgICBsYWJlbEVsLnRleHRDb250ZW50ID0gbGFiZWw7XHJcbiAgXHJcbiAgICAvLyBzZXQgdHlwZSAoaW5wdXQgb3IgdGV4dGFyZWEpXHJcbiAgICBsZXQgaW5wdXRFbDtcclxuICAgIGlmICh0eXBlID09PSAnaW5wdXQnKSB7XHJcbiAgICAgIGlucHV0RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xyXG4gICAgICBpbnB1dEVsLnR5cGUgPSBpbnB1dFR5cGU7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd0ZXh0YXJlYScpIHtcclxuICAgICAgaW5wdXRFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgdHlwZScpO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgLy8gbWFyayBhcyByZXF1aXJlZCBpZiBhcHBsaWNhYmxlXHJcbiAgICBpbnB1dEVsLnJlcXVpcmVkID0gcmVxdWlyZWQ7XHJcblxyXG4gICAgLy8gSWYgYW4gSUQgaXMgcHJvdmlkZWQsIHNldCBpdCBvbiB0aGUgZWxlbWVudFxyXG4gICAgaWYgKGlucHV0SWQpIHtcclxuICAgICAgICBpbnB1dEVsLmlkID0gaW5wdXRJZDtcclxuICAgIH1cclxuICBcclxuICAgIC8vIGFkZCBlbGVtZW50c1xyXG4gICAgd3JhcHBlci5hcHBlbmRDaGlsZChsYWJlbEVsKTtcclxuICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoaW5wdXRFbCk7XHJcbiAgICBmb3JtLmFwcGVuZENoaWxkKHdyYXBwZXIpO1xyXG59IFxyXG5cclxuZXhwb3J0IGNvbnN0IE5ld0ZpZWxkID0ge1xyXG4gICAgc2hvcnRUZXh0IDogZnVuY3Rpb24obGFiZWwsIGlucHV0SWQsIHJlcXVpcmVkID0gZmFsc2UsIGZvcm1faWQgPSAnbmV3LWZvcm0nLCBjb3N0ID0gZmFsc2UpIHtcclxuICAgICAgICBhcHBlbmRGb3JtRWxlbWVudCgnaW5wdXQnLCBsYWJlbCwgaW5wdXRJZCwgcmVxdWlyZWQsICd0ZXh0JywgZm9ybV9pZCk7XHJcbiAgICB9LFxyXG4gICAgbG9uZ1RleHQgOiBmdW5jdGlvbihsYWJlbCwgaW5wdXRJZCwgcmVxdWlyZWQgPSBmYWxzZSwgZm9ybV9pZCA9ICduZXctZm9ybScsIGNvc3QgPSBmYWxzZSkge1xyXG4gICAgICAgIGFwcGVuZEZvcm1FbGVtZW50KCd0ZXh0YXJlYScsIGxhYmVsLCBpbnB1dElkLCByZXF1aXJlZCwgZm9ybV9pZCk7XHJcbiAgICB9LFxyXG4gICAgbnVtZXJpY0lucHV0OiBmdW5jdGlvbihsYWJlbCwgaW5wdXRJZCwgcmVxdWlyZWQgPSBmYWxzZSwgZm9ybV9pZCA9ICduZXctZm9ybScsIGNvc3QgPSB0cnVlKSB7XHJcbiAgICAgICAgYXBwZW5kRm9ybUVsZW1lbnQoJ2lucHV0JywgbGFiZWwsIGlucHV0SWQsIHJlcXVpcmVkLCAnbnVtYmVyJywgZm9ybV9pZCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE5ld0ZpZWxkOyIsImZ1bmN0aW9uIGFkZFN1Ym1pdEJ1dHRvblRvRm9ybShmb3JtX2lkKSB7XHJcbiAgICAvLyBGaW5kIHRoZSBmb3JtIGJ5IGl0cyBJRFxyXG4gICAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1faWQpO1xyXG4gIFxyXG4gICAgLy8gQ3JlYXRlIHRoZSBjb250YWluZXIgYGRpdmAgZm9yIHRoZSBidXR0b25cclxuICAgIGNvbnN0IGJ1dHRvbkNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgYnV0dG9uQ29udGFpbmVyLmlkID0gJ3N1Ym1pdC1idG4tY29udGFpbmVyJztcclxuICAgIFxyXG4gICAgLy8gQ3JlYXRlIHRoZSBzdWJtaXQgaW5wdXRcclxuICAgIGNvbnN0IHN1Ym1pdElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcclxuICAgIHN1Ym1pdElucHV0LmNsYXNzTmFtZSA9ICdidG4gYnRuLXN1Ym1pdCc7IC8vIFVzZSBhcHByb3ByaWF0ZSBjbGFzcyBmb3IgeW91ciBkZXNpZ25cclxuICAgIHN1Ym1pdElucHV0LnR5cGUgPSAnc3VibWl0JztcclxuICAgIHN1Ym1pdElucHV0LnZhbHVlID0gJ1N1Ym1pdCc7XHJcblxyXG4gICAgLy8gQXBwZW5kIHRoZSBzdWJtaXQgaW5wdXQgdG8gdGhlIGNvbnRhaW5lclxyXG4gICAgYnV0dG9uQ29udGFpbmVyLmFwcGVuZENoaWxkKHN1Ym1pdElucHV0KTtcclxuICAgIFxyXG4gICAgLy8gQXBwZW5kIHRoZSBjb250YWluZXIgdG8gdGhlIGZvcm1cclxuICAgIGZvcm0uYXBwZW5kQ2hpbGQoYnV0dG9uQ29udGFpbmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IFN1Ym1pdEJ1dHRvbiA9IHtcclxuICAgIGFkZCA6IGZ1bmN0aW9uKCkgeyBhZGRTdWJtaXRCdXR0b25Ub0Zvcm0oJ25ldy1mb3JtJykgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTdWJtaXRCdXR0b247IiwiaW1wb3J0ICcuL2Zvcm0uY3NzJztcclxuXHJcbmltcG9ydCBEcm9wZG93biBmcm9tIFwiLi9zdWJjb21wb25lbnRzL2Ryb3Bkb3duLmpzXCI7XHJcbmltcG9ydCBOZXdGaWVsZCBmcm9tIFwiLi9zdWJjb21wb25lbnRzL2ZpZWxkcy5qc1wiO1xyXG5pbXBvcnQgU3VibWl0QnV0dG9uIGZyb20gXCIuL3N1YmNvbXBvbmVudHMvc3VibWl0LmpzXCI7XHJcblxyXG5mdW5jdGlvbiBmZXRjaEFsbFJlc3BvbnNlcyhldmVudCkge1xyXG5cclxuICAgIC8vIEFzc3VtaW5nIGBldmVudC50YXJnZXRgIGlzIHRoZSBmb3JtIGl0c2VsZlxyXG4gICAgY29uc3QgZm9ybSA9IGV2ZW50LnRhcmdldDtcclxuICAgIFxyXG4gICAgLy8gSW5pdGlhbGl6ZSBhbiBlbXB0eSBhcnJheSB0byBob2xkIHRoZSBpbnB1dCB2YWx1ZXNcclxuICAgIGxldCBmb3JtRGF0YSA9IHt9O1xyXG4gICAgXHJcbiAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBmb3JtIGVsZW1lbnRcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybS5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gZm9ybS5lbGVtZW50c1tpXTtcclxuICAgICAgXHJcbiAgICAgIC8vIEV4Y2x1ZGUgZWxlbWVudHMgdGhhdCBhcmVuJ3QgaW5wdXRzLCB0ZXh0YXJlYXMsIG9yIHNlbGVjdFxyXG4gICAgICBpZiAoZWxlbWVudC50YWdOYW1lID09PSAnSU5QVVQnIHx8XHJcbiAgICAgICAgICBlbGVtZW50LnRhZ05hbWUgPT09ICdURVhUQVJFQScgfHxcclxuICAgICAgICAgIGVsZW1lbnQudGFnTmFtZSA9PT0gJ1NFTEVDVCcpIHtcclxuICAgICAgICAvLyBFeGNsdWRlIGlucHV0IHR5cGVzIHRoYXQgYXJlIG5vdCBjb25zaWRlcmVkIGZvciBzdWJtaXNzaW9uIChzdWNoIGFzIGBzdWJtaXRgKVxyXG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgIT09ICdzdWJtaXQnICYmIGVsZW1lbnQudHlwZSAhPT0gJ2J1dHRvbicpIHtcclxuICAgICAgICAgIGZvcm1EYXRhW2VsZW1lbnQuaWRdID0gZWxlbWVudC52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgZm9ybS5yZXNldCgpO1xyXG4gICAgcmV0dXJuIGZvcm1EYXRhO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRGb3JtKGVsZW1lbnRfaWQgPSAnbW9kYWwtYm9keScsIGZvcm1faWQgPSAnbmV3LWZvcm0nKSB7XHJcbiAgXHJcbiAgY29uc3QgdGFyZ2V0X2VsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50X2lkKTtcclxuXHJcbiAgLy8gY3JlYXRlIGZvcm1cclxuICBjb25zdCBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpO1xyXG4gIGZvcm0uc2V0QXR0cmlidXRlKCdpZCcsIGZvcm1faWQpO1xyXG5cclxuICAvLyBBcHBlbmQgdGhlIGZvcm0gdG8gdGhlIG1vZGFsIGJvZHlcclxuICB0YXJnZXRfZWxlbS5hcHBlbmRDaGlsZChmb3JtKTtcclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBGb3JtID0ge1xyXG4gIG5ldyA6IGZ1bmN0aW9uKHBhcmVudF9lbGVtX2lkKSB7IGFkZEZvcm0ocGFyZW50X2VsZW1faWQsICduZXctZm9ybScpIH0sXHJcbiAgZmV0Y2hBbGxSZXNwb25zZXMgOiBmdW5jdGlvbihldmVudCkgeyByZXR1cm4gZmV0Y2hBbGxSZXNwb25zZXMoZXZlbnQpIH0sXHJcbiAgTmV3RmllbGQgOiBOZXdGaWVsZCxcclxuICBEcm9wZG93biA6IERyb3Bkb3duLFxyXG4gIFN1Ym1pdEJ1dHRvbiA6IFN1Ym1pdEJ1dHRvblxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGb3JtOyIsIlxyXG5pbXBvcnQgUHJvbXB0IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcHJvbXB0L3Byb21wdC5qcydcclxuaW1wb3J0IE1vZGFsIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9kYWwvbW9kYWwuanMnXHJcbmltcG9ydCBGb3JtIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZm9ybS9mb3JtLmpzJ1xyXG5pbXBvcnQgVGFibGUgZnJvbSAnLi4vLi4vY29tcG9uZW50cy90YWJsZS90YWJsZS5qcydcclxuaW1wb3J0IEJvZHkgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ib2R5L2JvZHkuanMnXHJcbmltcG9ydCBOYXZCdXR0b25zIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbmF2X2J1dHRvbnMvbmF2X2J1dHRvbnMuanMnXHJcbmltcG9ydCBTdWJ0aXRsZSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIuanMnXHJcbmltcG9ydCBTaWRlYmFyIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc2lkZWJhci9zaWRlYmFyLmpzJ1xyXG5pbXBvcnQgeyBuZXh0UGFnZSB9IGZyb20gJy4uL3ZpZXdfbG9naWMuanMnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZVBhZ2VWaWV3KCkge1xyXG4gICAgLy8gUHJlcGFyZSBwYWdlIHZpZXdcclxuICAgIEJvZHkucmVzZXQoKTtcclxuICAgIE5hdkJ1dHRvbnMuc2hvdygpO1xyXG4gICAgU2lkZWJhci5zaG93KCk7XHJcblxyXG4gICAgLy90YWJsZSBhcHBlYXJhbmNlXHJcbiAgICBUYWJsZS5hZGp1c3RXaWR0aCgnNzAlJyk7XHJcbiAgICBUYWJsZS5CdXR0b25zLkFkZFJvdy51cGRhdGVUZXh0KCdBZGQgYW5vdGhlciBuZXcgaW5pdGlhdGl2ZScpO1xyXG5cclxuICAgIC8vIHJlbW92ZSBmdW5kIHNlbGVjdGlvblxyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJmdW5kXCIsICcnKTtcclxuXHJcbiAgICAvLyBMb2FkIHRleHRcclxuICAgIFN1YnRpdGxlLnVwZGF0ZSgnTmV3IEluaXRpYXRpdmVzJyk7XHJcbiAgICBQcm9tcHQuVGV4dC51cGRhdGUoJ0RvIHlvdSBoYXZlIGFueSBuZXcgaW5pdGlhdGl2ZXMgZm9yIEZZMjY/Jyk7XHJcbiAgICBQcm9tcHQuQnV0dG9ucy5MZWZ0LnVwZGF0ZVRleHQoJ1llcycpO1xyXG4gICAgUHJvbXB0LkJ1dHRvbnMuUmlnaHQudXBkYXRlVGV4dCgnTm8nKTtcclxuICAgIC8vIGNsaWNraW5nICdubyBuZXcgaW5pdGlhbGl0aXZlcycgd2lsbCBhbHNvIHRha2UgdXMgdG8gdGhlIG5leHQgcGFnZVxyXG4gICAgUHJvbXB0LkJ1dHRvbnMuUmlnaHQuYWRkQWN0aW9uKG5leHRQYWdlKTtcclxuICAgIFByb21wdC5CdXR0b25zLkxlZnQuYWRkQWN0aW9uKE5hdkJ1dHRvbnMuTmV4dC5lbmFibGUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBNb2RhbCgpIHtcclxuICAgIC8vIEluaXRpYWxpemUgbW9kYWxcclxuICAgIE1vZGFsLmNsZWFyKCk7XHJcbiAgICBNb2RhbC5MaW5rLmFkZCgnb3B0aW9uMScpO1xyXG4gICAgTW9kYWwuVGl0bGUudXBkYXRlKCdOZXcgaW5pdGlhdGl2ZScpO1xyXG4gICAgTW9kYWwuTGluay5hZGQoJ2FkZC1idG4nKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFVwRm9ybSgpIHtcclxuICAgIC8vIFNldCB1cCBmb3JtXHJcbiAgICBGb3JtLm5ldygnbW9kYWwtYm9keScpO1xyXG4gICAgRm9ybS5OZXdGaWVsZC5zaG9ydFRleHQoJ0luaXRpYXRpdmUgTmFtZTonLCAnSW5pdGlhdGl2ZSBOYW1lJywgdHJ1ZSk7IFxyXG4gICAgRm9ybS5OZXdGaWVsZC5sb25nVGV4dChgRGVzY3JpYmUgd2hhdCB0aGUgSW5pdGlhdGl2ZSBpcyBhbmQgd2h5IGl0IGlzIG5lZWRlZCBhbmQgc2hvdWxkIGJlIGZ1bmRlZDogXHJcbiAgICAgICAgaSkuIFdoYXQgaXMgdGhlIGJ1c2luZXNzIGNhc2UgZm9yIHRoZSBJbml0aWF0aXZlP1xyXG4gICAgICAgIGlpKS4gV2h5IGlzIHRoZSBpbml0aWF0aXZlIG5lZWRlZD8gV2hhdCBpcyB0aGUgdmFsdWUtYWRkIHRvIHJlc2lkZW50cz8gV2hhdCBpcyB0aGUgRGVwYXJ0bWVudOKAmXMgcGxhbiBmb3IgaW1wbGVtZW50aW5nIHRoZSBJbml0aWF0aXZlP1xyXG4gICAgICAgIGlpaSkuIFdoeSBjYW7igJl0IHRoZSBJbml0aWF0aXZlIGJlIGZ1bmRlZCB3aXRoIHRoZSBEZXBhcnRtZW504oCZcyBiYXNlbGluZSBidWRnZXQ/YCwgJ0V4cGxhbmF0aW9uJywgdHJ1ZSk7XHJcblxyXG4gICAgRm9ybS5OZXdGaWVsZC5udW1lcmljSW5wdXQoJ1doYXQgaXMgeW91ciBiYWxscGFyayBlc3RpbWF0ZSBvZiBUT1RBTCBBRERJVE9OQUwgZXhwZW5zZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5pdGlhdGl2ZT8nLCAnQmFsbHBhcmsgVG90YWwgRXhwZW5zZXMnLCBmYWxzZSk7XHJcblxyXG4gICAgRm9ybS5OZXdGaWVsZC5udW1lcmljSW5wdXQoJ0VzdGltYXRlIG9mIEFERElUT05BTCBwZXJzb25uZWwgY29zdD8nLCAnUGVyc29ubmVsIENvc3QnLCBmYWxzZSk7XHJcbiAgICBGb3JtLk5ld0ZpZWxkLm51bWVyaWNJbnB1dCgnRXN0aW1hdGUgb2YgQURESVRPTkFMIG5vbnBlcnNvbm5lbCBjb3N0PycsICdOb24tcGVyc29ubmVsIENvc3QnLCBmYWxzZSk7XHJcbiAgICBGb3JtLk5ld0ZpZWxkLm51bWVyaWNJbnB1dCgnRXN0aW1hdGUgb2YgQURESVRPTkFMIHJldmVudWUgKGlmIGFwcGxpY2FibGUpPycsICdSZXZlbnVlJywgZmFsc2UpO1xyXG5cclxuICAgIEZvcm0uU3VibWl0QnV0dG9uLmFkZCgpO1xyXG4gICAgLy8gSW5pdGlhbGl6ZSBmb3JtIHN1Ym1pc3Npb24gdG8gdGFibGUgZGF0YVxyXG4gICAgTW9kYWwuU3VibWl0LmluaXQoaGFuZGxlTmV3SW5pdFN1Ym1pc3Npb24pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhc3NpZ25DbGFzc2VzKCkge1xyXG4gICAgLy8gcmVjb3JkIGNvbHVtbnMgYW5kIHRoZWlyIGNsYXNzZXNcclxuICAgIGNvbnN0IGluaXRpYXRpdmVzQ29scyA9IFtcclxuICAgICAgICB7IHRpdGxlOiAnSW5pdGlhdGl2ZSBOYW1lJywgY2xhc3NOYW1lOiAnaW5pdC1uYW1lJyB9LFxyXG4gICAgICAgIHsgdGl0bGU6IGBFeHBsYW5hdGlvbmAsIGNsYXNzTmFtZTogJ2V4cGxhbmF0aW9uJyB9LFxyXG4gICAgICAgIHsgdGl0bGU6ICdCYWxscGFyayBUb3RhbCBFeHBlbnNlcycsIGNsYXNzTmFtZTogJ3RvdGFsJywgaXNDb3N0OiB0cnVlIH0sXHJcbiAgICAgICAgeyB0aXRsZTogJ1JldmVudWUnLCBjbGFzc05hbWU6ICdyZXZlbnVlJywgaXNDb3N0OiB0cnVlIH0sXHJcbiAgICAgICAgeyB0aXRsZTogJ1BlcnNvbm5lbCBDb3N0JywgY2xhc3NOYW1lOiAncGVyc29ubmVsJywgaXNDb3N0OiB0cnVlIH0sXHJcbiAgICAgICAgeyB0aXRsZTogJ05vbi1wZXJzb25uZWwgQ29zdCcsIGNsYXNzTmFtZTogJ25vbnBlcnNvbm5lbCcsIGlzQ29zdDogdHJ1ZSB9XHJcbiAgICBdO1xyXG5cclxuICAgIC8vIGFzc2lnbiBjb3N0IGNsYXNzZXNcclxuICAgIFRhYmxlLkNvbHVtbnMuYXNzaWduQ2xhc3Nlcyhpbml0aWF0aXZlc0NvbHMpXHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0aWFsaXplSW5pdFRhYmxlKCl7XHJcbiAgICBUYWJsZS5jbGVhcigpO1xyXG4gICAgLy8gbG9hZCB0YWJsZSBkYXRhIGZyb20gc3RvcmFnZVxyXG4gICAgaWYoYXdhaXQgVGFibGUuRGF0YS5sb2FkKCkpIHtcclxuICAgICAgICAvL2FmdGVyIHRhYmxlIGlzIGxvYWRlZCwgZmlsbCBpdFxyXG4gICAgICAgIGFzc2lnbkNsYXNzZXMoKTtcclxuICAgICAgICB0YWJsZVZpZXcoKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaGFuZGxlTmV3SW5pdFN1Ym1pc3Npb24oZXZlbnQpe1xyXG4gICAgLy8gZ2V0IGFuc3dlcnMgZnJvbSBmb3JtLCBoaWRlIGZvcm0sIHNob3cgYW5zd2VycyBpbiB0YWJsZVxyXG4gICAgY29uc3QgcmVzcG9uc2VzID0gRm9ybS5mZXRjaEFsbFJlc3BvbnNlcyhldmVudCk7XHJcbiAgICAvLyBtYWtlIHN1cmUgaXQncyBub3QgYW4gZW1wdHkgcmVzcG9uc2VcclxuICAgIGlmIChPYmplY3QudmFsdWVzKHJlc3BvbnNlcylbMF0gIT0gJycpe1xyXG4gICAgICAgIC8vIGFkZCBkYXRhIHRvIHRhYmxlXHJcbiAgICAgICAgVGFibGUuUm93cy5hZGQocmVzcG9uc2VzKTtcclxuICAgICAgICAvLyBzYXZlIGl0XHJcbiAgICAgICAgVGFibGUuc2F2ZSgpO1xyXG4gICAgICAgIHRhYmxlVmlldygpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB0YWJsZVZpZXcoKSB7XHJcbiAgICAvLyBjaGFuZ2UgcGFnZSB2aWV3XHJcbiAgICBUYWJsZS5zaG93KCk7XHJcbiAgICBNb2RhbC5oaWRlKCk7XHJcbiAgICBQcm9tcHQuaGlkZSgpO1xyXG4gICAgYXNzaWduQ2xhc3NlcygpO1xyXG4gICAgVGFibGUuQnV0dG9ucy5BZGRSb3cuc2hvdygpO1xyXG4gICAgTmF2QnV0dG9ucy5OZXh0LmVuYWJsZSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTW9kYWxMaW5rcygpe1xyXG4gICAgTW9kYWwuTGluay5yZW1vdmUoJ29wdGlvbjEnKTtcclxuICAgIE1vZGFsLkxpbmsucmVtb3ZlKCdhZGQtYnRuJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQcm9tcHRCdXR0b25MaXN0ZW5lcnMoKXtcclxuICAgIFByb21wdC5CdXR0b25zLlJpZ2h0LnJlbW92ZUFjdGlvbihuZXh0UGFnZSk7XHJcbiAgICBQcm9tcHQuQnV0dG9ucy5MZWZ0LnJlbW92ZUFjdGlvbihOYXZCdXR0b25zLk5leHQuZW5hYmxlKTtcclxuICAgIE1vZGFsLmNsZWFyKCk7XHJcbn0iLCJcclxuaW1wb3J0IHsgaW5pdGlhbGl6ZVBhZ2VWaWV3LCBzZXRVcE1vZGFsLCBzZXRVcEZvcm0sIHJlbW92ZU1vZGFsTGlua3MsIHJlbW92ZVByb21wdEJ1dHRvbkxpc3RlbmVycywgaW5pdGlhbGl6ZUluaXRUYWJsZSB9IGZyb20gJy4vaGVscGVycy5qcydcclxuaW1wb3J0IHsgQ3VycmVudFBhZ2UgfSBmcm9tICcuLi8uLi91dGlscy9kYXRhX3V0aWxzL2xvY2FsX3N0b3JhZ2VfaGFuZGxlcnMuanMnXHJcblxyXG5cclxuLy8gc2V0IHVwIHBhZ2UgYW5kIGluaXRpYWxpemUgYWxsIGJ1dHRvbnNcclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWROZXdJbml0aWF0aXZlcygpIHtcclxuICAgIEN1cnJlbnRQYWdlLnVwZGF0ZSgnbmV3LWluaXRzJyk7XHJcbiAgICBpbml0aWFsaXplUGFnZVZpZXcoKTtcclxuICAgIHNldFVwTW9kYWwoKTtcclxuICAgIHNldFVwRm9ybSgpO1xyXG4gICAgaW5pdGlhbGl6ZUluaXRUYWJsZSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5VcEluaXRpYXRpdmVzUGFnZSgpIHtcclxuICAgIHJlbW92ZU1vZGFsTGlua3MoKTtcclxuICAgIC8vIHJlbW92ZSBldmVudCBsaXN0ZW5lcnMgb24gcHJvbXB0IGJ1dHRvbnNcclxuICAgIHJlbW92ZVByb21wdEJ1dHRvbkxpc3RlbmVycygpO1xyXG59IiwiXHJcbmltcG9ydCBQcm9tcHQgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9wcm9tcHQvcHJvbXB0LmpzJ1xyXG5pbXBvcnQgQm9keSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9ib2R5L2JvZHkuanNcIjtcclxuaW1wb3J0IFN1YnRpdGxlIGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIuanNcIjtcclxuaW1wb3J0IHsgdmlzaXRQYWdlIH0gZnJvbSBcIi4uL3ZpZXdfbG9naWMuanNcIjtcclxuaW1wb3J0IHsgQWNjb3JkaW9uIH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvYWNjb3JkaW9uL2FjY29yZGlvbi5qc1wiO1xyXG5pbXBvcnQgeyBkb3dubG9hZFhMU1ggfSBmcm9tIFwiLi4vLi4vdXRpbHMvZGF0YV91dGlscy9YTFNYX2hhbmRsZXJzLmpzXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3VtbWFyeVZpZXcoKXtcclxuICAgIEJvZHkucmVzZXQoKTtcclxuICAgIEFjY29yZGlvbi5idWlsZCgpO1xyXG4gICAgQWNjb3JkaW9uLnNob3coKTtcclxuXHJcbiAgICAvLyBwcm9tcHQgYnV0dG9uc1xyXG4gICAgUHJvbXB0LlRleHQudXBkYXRlKCcnKTtcclxuICAgIFByb21wdC5zaG93KCk7XHJcbiAgICBQcm9tcHQuQnV0dG9ucy5MZWZ0LnVwZGF0ZVRleHQoJ0Rvd25sb2FkIEV4Y2VsJyk7XHJcbiAgICBQcm9tcHQuQnV0dG9ucy5SaWdodC51cGRhdGVUZXh0KCdHbyBiYWNrIHRvIGhvbWUnKTtcclxuXHJcbiAgICAvLyB1cGRhdGUgcGFnZSB0ZXh0XHJcbiAgICBTdWJ0aXRsZS51cGRhdGUoJ1N1bW1hcnknKTtcclxuICAgIC8vIGFkZCBidXR0b24gbGlua3NcclxuICAgIFByb21wdC5CdXR0b25zLlJpZ2h0LmFkZEFjdGlvbihyZXR1cm5Ub1dlbGNvbWUpO1xyXG4gICAgUHJvbXB0LkJ1dHRvbnMuTGVmdC5hZGRBY3Rpb24oZG93bmxvYWRYTFNYKTtcclxuICAgIFxyXG59XHJcblxyXG5jb25zdCByZXR1cm5Ub1dlbGNvbWUgPSAoKSA9PiB7dmlzaXRQYWdlKCd3ZWxjb21lJyl9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZVByb21wdEJ1dHRvbnMoKXtcclxuICAgIFByb21wdC5CdXR0b25zLlJpZ2h0LnJlbW92ZUFjdGlvbihyZXR1cm5Ub1dlbGNvbWUpO1xyXG4gICAgUHJvbXB0LkJ1dHRvbnMuTGVmdC5yZW1vdmVBY3Rpb24oZG93bmxvYWRYTFNYKTtcclxufSIsIlxyXG5pbXBvcnQgU3VidGl0bGUgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9oZWFkZXIvaGVhZGVyLmpzJ1xyXG5pbXBvcnQgUHJvbXB0IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcHJvbXB0L3Byb21wdC5qcydcclxuaW1wb3J0IE5hdkJ1dHRvbnMgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9uYXZfYnV0dG9ucy9uYXZfYnV0dG9ucy5qcydcclxuaW1wb3J0IFRhYmxlIGZyb20gXCIuLi8uLi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmpzXCI7XHJcbmltcG9ydCBCb2R5IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2JvZHkvYm9keS5qc1wiO1xyXG5pbXBvcnQgeyBDdXJyZW50RnVuZCB9IGZyb20gJy4uLy4uL3V0aWxzL2RhdGFfdXRpbHMvbG9jYWxfc3RvcmFnZV9oYW5kbGVycy5qcyc7XHJcblxyXG5jb25zdCBmdW5kQ29scyA9IFtcclxuICAgIHsgdGl0bGU6ICdGdW5kJywgY2xhc3NOYW1lOiAnZnVuZC1uYW1lJyB9LFxyXG5dO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVQYWdlVmlldygpe1xyXG4gICAgXHJcbiAgICBDdXJyZW50RnVuZC5yZXNldCgpO1xyXG5cclxuICAgIC8vIHByZXBhcmUgcGFnZSB2aWV3XHJcbiAgICBCb2R5LnJlc2V0KCk7XHJcbiAgICBOYXZCdXR0b25zLnNob3coKTtcclxuXHJcbiAgICAvLyB1cGRhdGUgcGFnZSB0ZXh0XHJcbiAgICBTdWJ0aXRsZS51cGRhdGUoJ0Jhc2VsaW5lIEJ1ZGdldCBSZXF1ZXN0Jyk7XHJcbiAgICAvLyBUT0RPOiB1cGRhdGUgdG8gbWFrZSBkeW5hbWljXHJcbiAgICBQcm9tcHQuVGV4dC51cGRhdGUoYFdlIHdpbGwgbm93IGFzayB5b3UgYSBzZXJpZXMgb2YgcXVlc3Rpb25zIGFib3V0IHlvdXIgQkFTRUxJTkUgYnVkZ2V0IHJlcXVlc3QuXHJcbiAgICAgICAgQXQgdGhlIGVuZCwgd2Ugd2lsbCBhc2sgeW91IGFib3V0IGFueSBuZXcgaW5pdGlhdGl2ZXMgKGllLiBzdXBwbGVtZW50YWwgcmVxdWVzdHMpLlxyXG4gICAgICAgIFNlbGVjdCBvbmUgb2YgeW91ciBmdW5kcyB0byBiZWdpbi5gKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYWxsb3dSb3dTZWxlY3Rpb24oKXtcclxuICAgIHZhciB0YWJsZVJvd3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwidGJvZHkgdHJcIik7XHJcbiAgICB0YWJsZVJvd3MuZm9yRWFjaChmdW5jdGlvbihyb3cpIHtcclxuICAgICAgICByb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xhc3NMaXN0LmFkZCgnaG92ZXItZWZmZWN0Jyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xhc3NMaXN0LnJlbW92ZSgnaG92ZXItZWZmZWN0Jyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdEZ1bmQodGFibGVSb3dzLCB0aGlzKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZUZ1bmRUYWJsZSgpe1xyXG4gICAgYXdhaXQgVGFibGUuRGF0YS5sb2FkRnVuZHMoKTtcclxuICAgIFRhYmxlLmFkanVzdFdpZHRoKCczMCUnKTtcclxuICAgIFRhYmxlLnNob3coKTtcclxuICAgIFRhYmxlLkNvbHVtbnMuYXNzaWduQ2xhc3NlcyhmdW5kQ29scyk7XHJcbiAgICBhbGxvd1Jvd1NlbGVjdGlvbigpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZWxlY3RGdW5kKHRhYmxlUm93cywgc2VsZWN0ZWRfcm93KXtcclxuICAgIC8vIHJlbW92ZSBzZWxlY3RlZCBjbGFzcyBmcm9tIGFueSBvdGhlciByb3dzXHJcbiAgICB0YWJsZVJvd3MuZm9yRWFjaChmdW5jdGlvbih0YWJsZVJvdykge1xyXG4gICAgICAgIHRhYmxlUm93LmNsYXNzTGlzdCA9ICcnO1xyXG4gICAgfSk7XHJcbiAgICAvLyBhZGQgc2VsZWN0ZWQgY2xhc3MgdG8gY2xpY2tlZCByb3dcclxuICAgIHNlbGVjdGVkX3Jvdy5jbGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcpO1xyXG4gICAgLy8gZ2V0IGZ1bmQgYW5kIHNhdmUgc2VsZWN0ZWQgZnVuZFxyXG4gICAgdmFyIGZ1bmQgPSBzZWxlY3RlZF9yb3cucXVlcnlTZWxlY3RvcignLmZ1bmQtbmFtZScpLnRleHRDb250ZW50O1xyXG4gICAgdmFyIGZ1bmROdW1iZXIgPSBwYXJzZUludChmdW5kKTtcclxuICAgIEN1cnJlbnRGdW5kLnVwZGF0ZShmdW5kTnVtYmVyKTtcclxuICAgIC8vIGVuYWJsZSBuZXh0IHN0ZXBcclxuICAgIE5hdkJ1dHRvbnMuTmV4dC5lbmFibGUoKTtcclxufSIsImltcG9ydCB7IEN1cnJlbnRQYWdlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2RhdGFfdXRpbHMvbG9jYWxfc3RvcmFnZV9oYW5kbGVycy5qc1wiO1xyXG5pbXBvcnQgeyBwcmVwYXJlUGFnZVZpZXcsIGluaXRpYWxpemVGdW5kVGFibGUgfSBmcm9tIFwiLi4vMDJfYmFzZWxpbmVfbGFuZGluZ19wYWdlL2hlbHBlcnMuanNcIjtcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZEJhc2VsaW5lTGFuZGluZ1BhZ2UoKXtcclxuICAgIC8vdXBkYXRlIHBhZ2Ugc3RhdGVcclxuICAgIEN1cnJlbnRQYWdlLnVwZGF0ZSgnYmFzZWxpbmUtbGFuZGluZycpO1xyXG4gICAgcHJlcGFyZVBhZ2VWaWV3KCk7XHJcbiAgICBpbml0aWFsaXplRnVuZFRhYmxlKCk7XHJcbn1cclxuIiwiaW1wb3J0IFN1YnRpdGxlIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvaGVhZGVyL2hlYWRlci5qcydcclxuaW1wb3J0IFByb21wdCBmcm9tICcuLi8uLi9jb21wb25lbnRzL3Byb21wdC9wcm9tcHQuanMnXHJcbmltcG9ydCBOYXZCdXR0b25zIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbmF2X2J1dHRvbnMvbmF2X2J1dHRvbnMuanMnXHJcbmltcG9ydCBCb2R5IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2JvZHkvYm9keS5qc1wiO1xyXG5pbXBvcnQgeyBEQVRBX1JPT1QgfSBmcm9tICcuLi8uLi9pbml0LmpzJztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZmlsZV91cGxvYWQvZmlsZV91cGxvYWQuanMnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVQYWdlVmlldygpIHtcclxuXHJcbiAgICAvLyByZW1vdmUgZnVuZCBzZWxlY3Rpb25cclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiZnVuZFwiLCAnJyk7XHJcblxyXG4gICAgLy8gcHJlcGFyZSBwYWdlIHZpZXdcclxuICAgIEJvZHkucmVzZXQoKTtcclxuICAgIE5hdkJ1dHRvbnMuc2hvdygpO1xyXG4gICAgRmlsZVVwbG9hZC5zaG93KCk7XHJcblxyXG4gICAgLy8gdXBkYXRlIHBhZ2UgdGV4dFxyXG4gICAgU3VidGl0bGUudXBkYXRlKCdFeGNlbCBVcGxvYWQnKTtcclxuICAgIFByb21wdC5UZXh0LnVwZGF0ZShgVXBsb2FkIHRoZSBiYXNlbGluZSBkZXRhaWwgc2hlZXQgZ2l2ZW4gYnkgeW91ciBidWRnZXQgYW5hbHlzdC5gKTtcclxuXHJcbiAgICAvLyBzaG93IGFuZCBpbml0aWFsaXplIGZpbGUgdXBsb2FkOyBlbmFibGUgY29udGludWUgYWZ0ZXIgZmlsZSBzYXZlZCBpbiBsb2NhbCBzdG9yYWdlIFxyXG4gICAgRmlsZVVwbG9hZC5pbml0KCk7XHJcbiAgICBOYXZCdXR0b25zLk5leHQuZW5hYmxlKCk7XHJcbn0iLCJpbXBvcnQgeyBDdXJyZW50UGFnZSB9IGZyb20gXCIuLi8uLi91dGlscy9kYXRhX3V0aWxzL2xvY2FsX3N0b3JhZ2VfaGFuZGxlcnMuanNcIjtcclxuaW1wb3J0IHsgaW5pdGlhbGl6ZVBhZ2VWaWV3IH0gZnJvbSBcIi4vaGVscGVycy5qc1wiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRVcGxvYWRQYWdlKCl7XHJcbiAgICAvL3VwZGF0ZSBwYWdlIHN0YXRlXHJcbiAgICBDdXJyZW50UGFnZS51cGRhdGUoJ3VwbG9hZCcpO1xyXG4gICAgaW5pdGlhbGl6ZVBhZ2VWaWV3KCk7XHJcbiAgICBcclxufSIsImltcG9ydCBTdWJ0aXRsZSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIuanMnXHJcbmltcG9ydCBXZWxjb21lIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd2VsY29tZS93ZWxjb21lLmpzJ1xyXG5pbXBvcnQgQm9keSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2JvZHkvYm9keS5qcydcclxuaW1wb3J0IFNpZGViYXIgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zaWRlYmFyL3NpZGViYXIuanMnXHJcblxyXG5pbXBvcnQgeyBsb2FkTmV3SW5pdGlhdGl2ZXMgfSBmcm9tICcuLi8wN19uZXdfaW5pdGlhdGl2ZXMvbWFpbi5qcydcclxuaW1wb3J0IHsgbG9hZFN1bW1hcnlQYWdlIH0gZnJvbSAnLi4vMDhfc3VtbWFyeS9tYWluLmpzJ1xyXG5pbXBvcnQgeyBsb2FkQmFzZWxpbmVMYW5kaW5nUGFnZSB9IGZyb20gJy4uLzAyX2Jhc2VsaW5lX2xhbmRpbmdfcGFnZS9tYWluLmpzJ1xyXG5pbXBvcnQgeyBsb2FkVXBsb2FkUGFnZSB9IGZyb20gJy4uLzAxX3VwbG9hZC9tYWluLmpzJ1xyXG4gXHJcbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplUGFnZVZpZXcoKXtcclxuICAgIC8vIHBhZ2Ugc2V0IHVwXHJcbiAgICBCb2R5LnJlc2V0KCk7XHJcbiAgICBTdWJ0aXRsZS51cGRhdGUoXCJXZWxjb21lXCIpO1xyXG4gICAgV2VsY29tZS5zaG93KCk7XHJcbiAgICBTaWRlYmFyLnJlc2V0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhZGRMaW5rcygpe1xyXG4gICAgLy8gaW5pdGlhbGl6ZSBsaW5rcyBpbiBidXR0b25zXHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RlcC11cGxvYWQnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGxvYWRVcGxvYWRQYWdlKVxyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ZXAtaW5pdGlhdGl2ZXMnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGxvYWROZXdJbml0aWF0aXZlcylcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVwLXJldmVudWUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGxvYWRCYXNlbGluZUxhbmRpbmdQYWdlKVxyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ZXAtZmluaXNoJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBsb2FkU3VtbWFyeVBhZ2UpXHJcblxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBDdXJyZW50UGFnZSB9IGZyb20gJy4uLy4uL3V0aWxzL2RhdGFfdXRpbHMvbG9jYWxfc3RvcmFnZV9oYW5kbGVycy5qcydcclxuaW1wb3J0IHsgaW5pdGlhbGl6ZVBhZ2VWaWV3LCBhZGRMaW5rcyB9IGZyb20gJy4vaGVscGVycy5qcydcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplV2VsY29tZVBhZ2UoKXtcclxuXHJcbiAgICBDdXJyZW50UGFnZS51cGRhdGUoJ3dlbGNvbWUnKTtcclxuICAgIGluaXRpYWxpemVQYWdlVmlldygpO1xyXG4gICAgYWRkTGlua3MoKTtcclxuXHJcbn0iLCJpbXBvcnQgUHJvbXB0IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcHJvbXB0L3Byb21wdC5qcydcclxuaW1wb3J0IHsgZm9ybWF0Q3VycmVuY3kgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb25fdXRpbHMuanMnXHJcbmltcG9ydCB7IFJFVkVOVUUgfSBmcm9tICcuLi8uLi9pbml0LmpzJ1xyXG5pbXBvcnQgQm9keSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2JvZHkvYm9keS5qcydcclxuaW1wb3J0IE5hdkJ1dHRvbnMgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9uYXZfYnV0dG9ucy9uYXZfYnV0dG9ucy5qcydcclxuaW1wb3J0IHsgbmV4dFBhZ2UgfSBmcm9tICcuLi92aWV3X2xvZ2ljLmpzJ1xyXG5pbXBvcnQgU3VidGl0bGUgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9oZWFkZXIvaGVhZGVyLmpzJ1xyXG5pbXBvcnQgTW9kYWwgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2RhbC9tb2RhbC5qcydcclxuaW1wb3J0IEZvcm0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9mb3JtL2Zvcm0uanMnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVBhZ2VWaWV3KCl7XHJcbiAgICAvLyBwcmVwYXJlIHBhZ2Ugdmlld1xyXG4gICAgQm9keS5yZXNldCgpO1xyXG4gICAgTmF2QnV0dG9ucy5zaG93KCk7XHJcblxyXG4gICAgLy8gdXBkYXRlIHBhZ2UgdGV4dFxyXG4gICAgU3VidGl0bGUudXBkYXRlKCdSZXZlbnVlIFByb2plY3Rpb25zJyk7XHJcbiAgICAvLyBUT0RPOiB1cGRhdGUgdG8gbWFrZSBkeW5hbWljXHJcbiAgICBQcm9tcHQuVGV4dC51cGRhdGUoYFlvdXIgcmV2ZW51ZSBwcm9qZWN0aW9uIGZvciBGWTI2IGlzICR7Zm9ybWF0Q3VycmVuY3koUkVWRU5VRSwgdHJ1ZSl9YCk7XHJcbiAgICBQcm9tcHQuQnV0dG9ucy5MZWZ0LnVwZGF0ZVRleHQoJ0NvbmZpcm0nKTtcclxuICAgIFByb21wdC5CdXR0b25zLlJpZ2h0LnVwZGF0ZVRleHQoXCJUaGlzIGRvZXNuJ3QgbG9vayByaWdodFwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFVwTmF2QnV0dG9ucygpe1xyXG4gICAgLy8gY2xpY2tpbmcgJ2NvbmZpcm0nIHdpbGwgYWxzbyB0YWtlIHVzIHRvIHRoZSBuZXh0IHBhZ2VcclxuICAgIFByb21wdC5CdXR0b25zLkxlZnQuYWRkQWN0aW9uKG5leHRQYWdlKTtcclxuICAgIC8vIFRPRE86IGFsbG93IHVzZXIgdG8gZWRpdCByZXZlbnVlIGhlcmVcclxuICAgIE1vZGFsLkxpbmsuYWRkKCdvcHRpb24yJyk7XHJcbiAgICBoYW5kbGVFcnJvckNvbW1lbnQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUJ1dHRvbkV2ZW50cygpe1xyXG4gICAgLy8gcmVtb3ZlIGV2ZW50IGxpc3RlbmVycyBvbiBwcm9tcHQgYnV0dG9uc1xyXG4gICAgUHJvbXB0LkJ1dHRvbnMuTGVmdC5yZW1vdmVBY3Rpb24obmV4dFBhZ2UpO1xyXG4gICAgTW9kYWwuTGluay5yZW1vdmUoJ29wdGlvbjInKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaGFuZGxlRXJyb3JDb21tZW50KCl7XHJcbiAgICB2YXIgZnVuZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZnVuZFwiKTtcclxuICAgIE1vZGFsLmNsZWFyKCk7XHJcbiAgICBNb2RhbC5UaXRsZS51cGRhdGUoYENvbW1lbnQgb24gJHtmdW5kfSBSZXZlbnVlYCk7XHJcbiAgICBGb3JtLm5ldygnbW9kYWwtYm9keScpO1xyXG4gICAgRm9ybS5OZXdGaWVsZC5sb25nVGV4dCgnRXhwbGFpbiB5b3VyIGNvbmNlcm5zIGhlcmUuIFNvbWVvbmUgZnJvbSB0aGUgcmV2ZW51ZSB0ZWFtIHdpbGwgZm9sbG93IHVwIHdpdGggeW91LicsXHJcbiAgICAgICAgICdyZXZlbnVlLWNvbW1lbnQnLCB0cnVlKTsgXHJcbiAgICBGb3JtLlN1Ym1pdEJ1dHRvbi5hZGQoKTtcclxuICAgIC8vIHNhdmUgY29tbWVudCBvbiBzdWJtaXNzaW9uXHJcbiAgICBNb2RhbC5TdWJtaXQuaW5pdChoYW5kbGVSZXZlbnVlQ29tbWVudFN1Ym1pc3Npb24pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYW5kbGVSZXZlbnVlQ29tbWVudFN1Ym1pc3Npb24oZXZlbnQpe1xyXG4gICAgLy8gZ2V0IGRhdGEgZnJvbSBmb3JtIGluIG1vZGFsICAgICAgICBcclxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IEZvcm0uZmV0Y2hBbGxSZXNwb25zZXMoZXZlbnQpO1xyXG4gICAgLy8gVE9ETzogc2F2ZSBjb21tZW50IGhlcmVcclxuXHJcbiAgICAvLyBoaWRlIG1vZGFsLCB1cGRhdGUgcGFnZSwgYW5kIGVuYWJsZSBjb250aW51ZVxyXG4gICAgTW9kYWwuaGlkZSgpO1xyXG4gICAgUHJvbXB0LkJ1dHRvbnMuaGlkZSgpO1xyXG4gICAgUHJvbXB0LlRleHQudXBkYXRlKCdZb3VyIGNvbW1lbnQgaGFzIGJlZW4gcmVjZWl2ZWQuJyk7XHJcbiAgICBOYXZCdXR0b25zLk5leHQuZW5hYmxlKCk7XHJcbn0iLCJpbXBvcnQgeyBDdXJyZW50UGFnZSB9IGZyb20gJy4uLy4uL3V0aWxzL2RhdGFfdXRpbHMvbG9jYWxfc3RvcmFnZV9oYW5kbGVycy5qcydcclxuaW1wb3J0IHsgcHJlcGFyZVBhZ2VWaWV3LCByZW1vdmVCdXR0b25FdmVudHMsIHNldFVwTmF2QnV0dG9ucyB9IGZyb20gJy4vaGVscGVycy5qcydcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkUmV2ZW51ZVBhZ2UoKSB7XHJcblxyXG4gICAgLy91cGRhdGUgcGFnZSBzdGF0ZVxyXG4gICAgQ3VycmVudFBhZ2UudXBkYXRlKCdyZXZlbnVlJyk7XHJcbiAgICBwcmVwYXJlUGFnZVZpZXcoKTtcclxuICAgIHNldFVwTmF2QnV0dG9ucygpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2xlYW51cFJldmVudWVQYWdlKCkge1xyXG4gICAgcmVtb3ZlQnV0dG9uRXZlbnRzKCk7XHJcbn07IiwiXHJcbmltcG9ydCB7IEZJU0NBTF9ZRUFSLCBmcmluZ2UsIGNvbGEsIG1lcml0IH0gZnJvbSBcIi4uLy4uL2luaXQuanNcIlxyXG5pbXBvcnQgQm9keSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9ib2R5L2JvZHkuanNcIjtcclxuaW1wb3J0IE5hdkJ1dHRvbnMgZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvbmF2X2J1dHRvbnMvbmF2X2J1dHRvbnMuanNcIjtcclxuaW1wb3J0IFN1YnRpdGxlIGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIuanNcIjtcclxuaW1wb3J0IEZvcm0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvZm9ybS9mb3JtLmpzXCI7XHJcbmltcG9ydCBNb2RhbCBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9tb2RhbC9tb2RhbC5qc1wiO1xyXG5pbXBvcnQgUHJvbXB0IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL3Byb21wdC9wcm9tcHQuanNcIjtcclxuaW1wb3J0IFRhYmxlIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvdGFibGUvdGFibGUuanMnXHJcbmltcG9ydCBTaWRlYmFyIGZyb20gXCIuLi8uLi9jb21wb25lbnRzL3NpZGViYXIvc2lkZWJhci5qc1wiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlcyB9IGZyb20gXCIuLi8uLi91dGlscy9kYXRhX3V0aWxzL2J1ZGdldF9kYXRhX2hhbmRsZXJzLmpzXCI7XHJcbmltcG9ydCB7IGNvbnZlcnRUb0pTT04gfSBmcm9tIFwiLi4vLi4vdXRpbHMvZGF0YV91dGlscy9KU09OX2RhdGFfaGFuZGxlcnMuanNcIjtcclxuXHJcbmltcG9ydCB7IEJhc2VsaW5lLCBsb2FkVGFibGVEYXRhIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2RhdGFfdXRpbHMvbG9jYWxfc3RvcmFnZV9oYW5kbGVycy5qc1wiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVQYWdlVmlldygpe1xyXG4gICAgLy8gcHJlcGFyZSBwYWdlIHZpZXdcclxuICAgIEJvZHkucmVzZXQoKTtcclxuICAgIE5hdkJ1dHRvbnMuc2hvdygpO1xyXG4gICAgU2lkZWJhci5zaG93KCk7XHJcbiAgICBUYWJsZS5hZGp1c3RXaWR0aCgnOTAlJyk7XHJcbiAgICBOYXZCdXR0b25zLk5leHQuZW5hYmxlKCk7XHJcblxyXG4gICAgLy8gdXBkYXRlIHBhZ2UgdGV4dFxyXG4gICAgU3VidGl0bGUudXBkYXRlKCdQZXJzb25uZWwnKTtcclxuICAgIFByb21wdC5UZXh0LnVwZGF0ZShgXHJcbiAgICAgICAgVGhpcyB0YWJsZSBkaXNwbGF5cyB0aGUgbnVtYmVyIG9mIEZURXMgaW4gZWFjaCBqb2IgY29kZSBmb3IgaW4geW91ciBkZXBhcnRtZW50J3MgXHJcbiAgICAgICAgY3VycmVudCAoYW1lbmRlZCkgRlkyNSBidWRnZXQuIFRvIG1ha2UgZWRpdHMgdG8gdGhlIG51bWJlciBvZiBwb3NpdGlvbnMsIGNsaWNrIHRoZVxyXG4gICAgICAgIFwiRWRpdFwiIGJ1dHRvbiBvbiB0aGUgcm93IHlvdSB3b3VsZCBsaWtlIHRvIGVkaXQuIFRoZSBcIlRvdGFsIENvc3RcIiBjb2x1bW4gYW5kIHRoZSBcclxuICAgICAgICBzdW1tYXJ5IHNpZGViYXIgd2lsbCBhbHNvIHVwZGF0ZSB0byByZWZsZWN0IGFueSBlZGl0cy5cclxuICAgIGApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhc3NpZ25DbGFzc2VzKCkge1xyXG4gICAgLy8gcmVjb3JkIGNvbHVtbnMgYW5kIHRoZWlyIGNsYXNzZXNcclxuICAgIGNvbnN0IHBlcnNvbm5lbENvbHVtbnMgPSBbXHJcbiAgICAgICAgeyB0aXRsZTogJ0pvYiBUaXRsZScsIGNsYXNzTmFtZTogJ2pvYi1uYW1lJyB9LFxyXG4gICAgICAgIHsgdGl0bGU6ICdBY2NvdW50IFN0cmluZycsIGNsYXNzTmFtZTogJ3N0cmluZycgfSxcclxuICAgICAgICB7IHRpdGxlOiAnU2VydmljZScsIGNsYXNzTmFtZTogJ3NlcnZpY2UnIH0sXHJcbiAgICAgICAgeyB0aXRsZTogYEZZJHtGSVNDQUxfWUVBUn0gUmVxdWVzdGVkIEZURWAsIGNsYXNzTmFtZTogJ2Jhc2VsaW5lLWZ0ZXMnIH0sXHJcbiAgICAgICAgeyB0aXRsZTogYEZZJHtGSVNDQUxfWUVBUn0gQXZlcmFnZSBQcm9qZWN0ZWQgU2FsYXJ5L1dhZ2VgLCBjbGFzc05hbWU6ICdhdmctc2FsYXJ5JywgaXNDb3N0OiB0cnVlIH0sXHJcbiAgICAgICAgeyB0aXRsZTogJ1RvdGFsIENvc3QnLCBjbGFzc05hbWU6ICd0b3RhbC1iYXNlbGluZScsIGlzQ29zdDogdHJ1ZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6ICdFZGl0JywgY2xhc3NOYW1lOiAnZWRpdCcgfVxyXG4gICAgXTtcclxuXHJcbiAgICAvLyBhc3NpZ24gY29zdCBjbGFzc2VzXHJcbiAgICBUYWJsZS5Db2x1bW5zLmFzc2lnbkNsYXNzZXMocGVyc29ubmVsQ29sdW1ucylcclxufVxyXG5cclxuZnVuY3Rpb24gcGVyc29ubmVsUm93T25FZGl0KCl7XHJcbiAgICBUYWJsZS5DZWxsLmNyZWF0ZVRleHRib3goJ2Jhc2VsaW5lLWZ0ZXMnKTtcclxuICAgIFRhYmxlLkNlbGwuY3JlYXRlU2VydmljZURyb3Bkb3duKFNlcnZpY2VzLmxpc3QoKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0aWFsaXplUGVyc29ubmVsVGFibGUoKXtcclxuICAgIC8vIGxvYWQgdGFibGUgZGF0YSBmcm9tIGxvY2FsIHN0b3JhZ2VcclxuICAgIGlmKGF3YWl0IFRhYmxlLkRhdGEubG9hZCgpKSB7XHJcbiAgICAgICAgLy9hZnRlciB0YWJsZSBpcyBsb2FkZWQsIHNob3cgaXRcclxuICAgICAgICBUYWJsZS5zaG93KCk7XHJcbiAgICAgICAgVGFibGUuQ29sdW1ucy5hZGRBdEVuZChUYWJsZS5CdXR0b25zLmVkaXRfY29uZmlybV9idG5zLCAnRWRpdCcpO1xyXG4gICAgICAgIGFzc2lnbkNsYXNzZXMoKTtcclxuICAgICAgICAvLyBhZGQgdXAgdGhlIGJhc2VsaW5lIGNvc3RzIGFuZCB1cGRhdGUgc2lkZWJhclxyXG4gICAgICAgIHVwZGF0ZURpc3BsYXlhbmRUb3RhbHMoKTtcclxuICAgICAgICAvLyBhY3RpdmF0ZSBlZGl0IGJ1dHRvbnNcclxuICAgICAgICBUYWJsZS5CdXR0b25zLkVkaXQuaW5pdChwZXJzb25uZWxSb3dPbkVkaXQsIHVwZGF0ZURpc3BsYXlhbmRUb3RhbHMpO1xyXG4gICAgICAgIGluaXRpYWxpemVSb3dBZGRpdGlvbigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBQcm9tcHQuVGV4dC51cGRhdGUoJ05vIHBlcnNvbm5lbCBleHBlbnNlcyBmb3IgdGhpcyBmdW5kLicpXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluaXRpYWxpemVSb3dBZGRpdGlvbigpe1xyXG4gICAgVGFibGUuQnV0dG9ucy5BZGRSb3cudXBkYXRlVGV4dChcIkFkZCBuZXcgam9iXCIpO1xyXG4gICAgVGFibGUuQnV0dG9ucy5BZGRSb3cuc2hvdygpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhdGVUb3RhbENvc3QoZnRlcywgYXZnX3NhbGFyeSwgZnJpbmdlLCBjb2xhLCBtZXJpdCl7XHJcbiAgICByZXR1cm4gZnRlcyAqIGF2Z19zYWxhcnkgKiAoMSArIGZyaW5nZSkgKiAoMSArIGNvbGEpICogKDEgKyBtZXJpdCk7XHJcbn1cclxuXHJcbi8vIHVwZGF0ZSBzaWRlYmFyIGFuZCBhbHNvIGNvc3QgdG90YWxzIHdoZW4gdGhlIEZURXMgYXJlIGVkaXRlZFxyXG5mdW5jdGlvbiB1cGRhdGVEaXNwbGF5YW5kVG90YWxzKCl7XHJcbiAgICAvLyBjYWxjdWxhdGUgZm9yIGVhY2ggcm93XHJcbiAgICBsZXQgcm93cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0cicpO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCByb3dzLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAvLyBmZXRjaCB2YWx1ZXMgZm9yIGNhbGN1bGF0aW9uc1xyXG4gICAgICAgIGxldCBhdmdfc2FsYXJ5ID0gVGFibGUuQ2VsbC5nZXRWYWx1ZShyb3dzW2ldLCAnYXZnLXNhbGFyeScpO1xyXG4gICAgICAgIGxldCBiYXNlbGluZV9mdGVzID0gVGFibGUuQ2VsbC5nZXRUZXh0KHJvd3NbaV0sICdiYXNlbGluZS1mdGVzJyk7XHJcblxyXG4gICAgICAgIC8vIGNhbGN1YXRlICNGVEVzIHggYXZlcmFnZSBzYWxhcnkgKyBDT0xBIGFkanVzdG1lbnRzICsgbWVyaXQgYWRqdXN0bWVudHMgKyBmcmluZ2VcclxuICAgICAgICBsZXQgdG90YWxfYmFzZWxpbmVfY29zdCA9IGNhbGN1bGF0ZVRvdGFsQ29zdChiYXNlbGluZV9mdGVzLCBhdmdfc2FsYXJ5LCBmcmluZ2UsIGNvbGEsIG1lcml0KTtcclxuXHJcbiAgICAgICAgLy8gdXBkYXRlIHRvdGFsIGNvbHVtblxyXG4gICAgICAgIFRhYmxlLkNlbGwudXBkYXRlVmFsdWUocm93c1tpXSwgJ3RvdGFsLWJhc2VsaW5lJywgdG90YWxfYmFzZWxpbmVfY29zdCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2F2ZSB0aGUgdGFibGUgYWZ0ZXIgYWxsIHVwZGF0ZXMgYXJlIGRvbmVcclxuICAgIFRhYmxlLnNhdmUoKTtcclxuXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBNb2RhbCgpIHtcclxuICAgIC8vIEluaXRpYWxpemUgbW9kYWxcclxuICAgIE1vZGFsLmNsZWFyKCk7XHJcbiAgICBNb2RhbC5MaW5rLmFkZCgnYWRkLWJ0bicpO1xyXG4gICAgTW9kYWwuVGl0bGUudXBkYXRlKCdOZXcgam9iJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRVcEZvcm0oKSB7XHJcbiAgICAvLyBTZXQgdXAgZm9ybVxyXG4gICAgRm9ybS5uZXcoJ21vZGFsLWJvZHknKTtcclxuICAgIEZvcm0uTmV3RmllbGQuc2hvcnRUZXh0KCdKb2IgTmFtZTonLCAnam9iLW5hbWUnLCB0cnVlKTsgXHJcbiAgICBGb3JtLk5ld0ZpZWxkLnNob3J0VGV4dCgnQWNjb3VudCBTdHJpbmc6JywgJ2FjY291bnQtc3RyaW5nJywgdHJ1ZSk7IFxyXG4gICAgRm9ybS5TdWJtaXRCdXR0b24uYWRkKCk7XHJcbiAgICAvLyBJbml0aWFsaXplIGZvcm0gc3VibWlzc2lvbiB0byB0YWJsZSBkYXRhXHJcbiAgICBNb2RhbC5TdWJtaXQuaW5pdChoYW5kbGVTdWJtaXROZXdKb2IpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYW5kbGVTdWJtaXROZXdKb2IoZXZlbnQpeyAgICAgICAgXHJcbiAgICAvLyBnZXQgYW5zd2VycyBmcm9tIGZvcm0sIGhpZGUgZm9ybSwgc2hvdyBhbnN3ZXJzIGluIHRhYmxlXHJcbiAgICBjb25zdCByZXNwb25zZXMgPSBGb3JtLmZldGNoQWxsUmVzcG9uc2VzKGV2ZW50KTtcclxuICAgIC8vIG1ha2Ugc3VyZSBpdCdzIG5vdCBhbiBlbXB0eSByZXNwb25zZVxyXG4gICAgaWYgKE9iamVjdC52YWx1ZXMocmVzcG9uc2VzKVswXSAhPSAnJyl7XHJcbiAgICAgICAgLy8gY2hhbmdlIHBhZ2Ugdmlld1xyXG4gICAgICAgIE1vZGFsLmhpZGUoKTtcclxuXHJcbiAgICAgICAgLy8gYWRkIGRhdGEgdG8gdGFibGVcclxuICAgICAgICBUYWJsZS5Sb3dzLmFkZChyZXNwb25zZXMpO1xyXG4gICAgICAgIFRhYmxlLnNob3coKTtcclxuICAgICAgICBUYWJsZS5CdXR0b25zLkFkZFJvdy5zaG93KCk7XHJcbiAgICAgICAgLy8gVE9ETzogc2F2ZSB0YWJsZSBkYXRhXHJcbiAgICAgICAgLy8gVE9ETzogZWRpdCBjb3N0IHRvIHNob3cgY3VycmVuY3kgY29ycmVjdGx5XHJcbiAgICAgICAgfVxyXG5cclxufVxyXG4iLCJpbXBvcnQgeyBDdXJyZW50UGFnZSB9IGZyb20gXCIuLi8uLi91dGlscy9kYXRhX3V0aWxzL2xvY2FsX3N0b3JhZ2VfaGFuZGxlcnMuanNcIjtcclxuaW1wb3J0IHsgcHJlcGFyZVBhZ2VWaWV3LCBpbml0aWFsaXplUGVyc29ubmVsVGFibGUsIHNldFVwTW9kYWwsIHNldFVwRm9ybSB9IGZyb20gXCIuL2hlbHBlcnMuanNcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkUGVyc29ubmVsUGFnZSgpe1xyXG5cclxuICAgIEN1cnJlbnRQYWdlLnVwZGF0ZSgncGVyc29ubmVsJyk7XHJcbiAgICBwcmVwYXJlUGFnZVZpZXcoKTtcclxuICAgIGluaXRpYWxpemVQZXJzb25uZWxUYWJsZSgpO1xyXG5cclxuICAgIHNldFVwTW9kYWwoKTtcclxuICAgIHNldFVwRm9ybSgpO1xyXG59XHJcblxyXG4iLCJcclxuaW1wb3J0IFByb21wdCBmcm9tICcuLi8uLi9jb21wb25lbnRzL3Byb21wdC9wcm9tcHQuanMnXHJcbmltcG9ydCBCb2R5IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvYm9keS9ib2R5LmpzJztcclxuaW1wb3J0IE5hdkJ1dHRvbnMgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9uYXZfYnV0dG9ucy9uYXZfYnV0dG9ucy5qcyc7XHJcbmltcG9ydCBTdWJ0aXRsZSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIuanMnO1xyXG5pbXBvcnQgU2lkZWJhciBmcm9tICcuLi8uLi9jb21wb25lbnRzL3NpZGViYXIvc2lkZWJhci5qcyc7XHJcbmltcG9ydCBUYWJsZSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmpzJztcclxuaW1wb3J0IHsgU2VydmljZXMgfSBmcm9tICcuLi8uLi91dGlscy9kYXRhX3V0aWxzL2J1ZGdldF9kYXRhX2hhbmRsZXJzLmpzJztcclxuaW1wb3J0IHsgT1RfRlJJTkdFIH0gZnJvbSAnLi4vLi4vaW5pdC5qcyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVBhZ2VWaWV3KCl7XHJcbiAgICAvLyBwcmVwYXJlIHBhZ2Ugdmlld1xyXG4gICAgQm9keS5yZXNldCgpO1xyXG4gICAgTmF2QnV0dG9ucy5zaG93KCk7XHJcbiAgICBTaWRlYmFyLnNob3coKTtcclxuXHJcbiAgICAvLyBlbmFibGUgbmV4dCBidXR0b25cclxuICAgIE5hdkJ1dHRvbnMuTmV4dC5lbmFibGUoKTtcclxuXHJcbiAgICAvLyB1cGRhdGUgcGFnZSB0ZXh0XHJcbiAgICBTdWJ0aXRsZS51cGRhdGUoJ092ZXJ0aW1lIEVzdGltYXRlcycpO1xyXG5cclxuICAgIC8vIGFjdGl2YXRlIHRhYmxlXHJcbiAgICBpbml0aWFsaXplT1RUYWJsZSgpO1xyXG4gICAgUHJvbXB0LlRleHQudXBkYXRlKGBQbGVhc2Ugc2VlIHlvdXIgYmFzZWxpbmUgb3ZlcnRpbWUgLyBob2xpZGF5IHBheSAvIHNoaWZ0IHByZW1pdW1zIGluIHRoZSB0YWJsZSBiZWxvdy5cclxuICAgICAgICBNYWtlIGFueSBlZGl0cyBhbmQgY29udGludWUuYCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFzc2lnbkNsYXNzZXMoKSB7XHJcbiAgICAvLyByZWNvcmQgY29sdW1ucyBhbmQgdGhlaXIgY2xhc3Nlc1xyXG4gICAgY29uc3QgT1RfY29scyA9IFtcclxuICAgICAgICB7IHRpdGxlOiAnQWNjb3VudCBTdHJpbmcnLCBjbGFzc05hbWU6ICdzdHJpbmcnIH0sXHJcbiAgICAgICAgeyB0aXRsZTogYENvc3QgQ2VudGVyIE5hbWVgLCBjbGFzc05hbWU6ICdjYycgfSxcclxuICAgICAgICB7IHRpdGxlOiAnU2VydmljZScsIGNsYXNzTmFtZTogJ3NlcnZpY2UnIH0sXHJcbiAgICAgICAgeyB0aXRsZTogJ1JlY3VycmluZyBvciBPbmUtVGltZScsIGNsYXNzTmFtZTogJ3JlY3VycmluZyd9LFxyXG4gICAgICAgIHsgdGl0bGU6ICdIb3VybHkgRW1wbG95ZWUgT3ZlcnRpbWUgKFdhZ2VzKScsIGNsYXNzTmFtZTogJ09ULXdhZ2VzJywgaXNDb3N0OiB0cnVlIH0sXHJcbiAgICAgICAgeyB0aXRsZTogJ1NhbGFyaWVkIEVtcGxveWVlIE92ZXJ0aW1lIChTYWxhcnkpJywgY2xhc3NOYW1lOiAnT1Qtc2FsYXJ5JywgaXNDb3N0OiB0cnVlIH0sXHJcbiAgICAgICAgeyB0aXRsZTogJ1RvdGFsIENvc3QgKGluY2x1ZGluZyBiZW5lZml0cyknLCBjbGFzc05hbWUgOiAndG90YWwnLCBpc0Nvc3Q6IHRydWV9LFxyXG4gICAgICAgIHsgdGl0bGU6ICdFZGl0JywgY2xhc3NOYW1lOiAnZWRpdCd9XHJcbiAgICBdO1xyXG5cclxuICAgIC8vIGFzc2lnbiBjb3N0IGNsYXNzZXNcclxuICAgIFRhYmxlLkNvbHVtbnMuYXNzaWduQ2xhc3NlcyhPVF9jb2xzKVxyXG59XHJcblxyXG5mdW5jdGlvbiBPVFJvd09uRWRpdCgpe1xyXG4gICAgVGFibGUuQ2VsbC5jcmVhdGVUZXh0Ym94KCdPVC13YWdlcycsIHRydWUpO1xyXG4gICAgVGFibGUuQ2VsbC5jcmVhdGVUZXh0Ym94KCdPVC1zYWxhcnknLCB0cnVlKTtcclxuICAgIFRhYmxlLkNlbGwuY3JlYXRlU2VydmljZURyb3Bkb3duKFNlcnZpY2VzLmxpc3QoKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0aWFsaXplT1RUYWJsZSgpe1xyXG4gICAgLy8gbG9hZCB0YWJsZSBkYXRhIGZyb20gbG9jYWwgc3RvcmFnZVxyXG4gICAgaWYoYXdhaXQgVGFibGUuRGF0YS5sb2FkKCkpIHtcclxuICAgICAgICAvL2FmdGVyIHRhYmxlIGlzIGxvYWRlZCwgZmlsbCBpdFxyXG4gICAgICAgIFRhYmxlLnNob3coKTtcclxuICAgICAgICBUYWJsZS5Db2x1bW5zLmFkZEF0RW5kKCAnMCcsICdIb3VybHkgRW1wbG95ZWUgT3ZlcnRpbWUgKFdhZ2VzKScpO1xyXG4gICAgICAgIFRhYmxlLkNvbHVtbnMuYWRkQXRFbmQoICcwJywgJ1NhbGFyaWVkIEVtcGxveWVlIE92ZXJ0aW1lIChTYWxhcnkpJyk7XHJcbiAgICAgICAgLy8gVGFibGUuQ29sdW1ucy5hZGRBdEVuZCggJzAnLCAnVG90YWwgQ29zdCAoaW5jbHVkaW5nIGJlbmVmaXRzKScpO1xyXG4gICAgICAgIFRhYmxlLkNvbHVtbnMuYWRkQXRFbmQoVGFibGUuQnV0dG9ucy5lZGl0X2NvbmZpcm1fYnRucywgJ0VkaXQnKTs7XHJcbiAgICAgICAgYXNzaWduQ2xhc3NlcygpO1xyXG4gICAgICAgIC8vIGFkZCB1cCB0aGUgYmFzZWxpbmUgY29zdHMgYW5kIHVwZGF0ZSBzaWRlYmFyXHJcbiAgICAgICAgdXBkYXRlRGlzcGxheWFuZFRvdGFscygpO1xyXG4gICAgICAgIC8vIGFjdGl2YXRlIGVkaXQgYnV0dG9uc1xyXG4gICAgICAgIFRhYmxlLkJ1dHRvbnMuRWRpdC5pbml0KE9UUm93T25FZGl0LCB1cGRhdGVEaXNwbGF5YW5kVG90YWxzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUHJvbXB0LlRleHQudXBkYXRlKCdObyBvdmVydGltZSBleHBlbnNlcyBmb3IgdGhpcyBmdW5kLicpXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGF0ZVRvdGFsQ29zdCh3YWdlcywgc2FsYXJ5LCBmcmluZ2Upe1xyXG4gICAgcmV0dXJuICh3YWdlcyArIHNhbGFyeSkgKiAoMSArIGZyaW5nZSkgO1xyXG59XHJcblxyXG4vLyB1cGRhdGUgc2lkZWJhciBhbmQgYWxzbyBjb3N0IHRvdGFscyB3aGVuIHRoZSBGVEVzIGFyZSBlZGl0ZWRcclxuZnVuY3Rpb24gdXBkYXRlRGlzcGxheWFuZFRvdGFscygpe1xyXG4gICAgLy8gY2FsY3VsYXRlIGZvciBlYWNoIHJvd1xyXG4gICAgbGV0IHJvd3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndHInKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcm93cy5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgLy8gZmV0Y2ggdmFsdWVzIGZvciBjYWxjdWxhdGlvbnNcclxuICAgICAgICBsZXQgT1Rfc2FsYXJ5ID0gVGFibGUuQ2VsbC5nZXRWYWx1ZShyb3dzW2ldLCAnT1Qtc2FsYXJ5Jyk7XHJcbiAgICAgICAgbGV0IE9UX3dhZ2VzID0gVGFibGUuQ2VsbC5nZXRWYWx1ZShyb3dzW2ldLCAnT1Qtd2FnZXMnKTtcclxuXHJcbiAgICAgICAgLy8gYWRkIHNhbGFyeSBhbmQgd2FnZXMgYW5kIGZyaW5nZSBiZW5lZml0cyAoRklDQSlcclxuICAgICAgICBsZXQgcm93X3RvdGFsID0gY2FsY3VsYXRlVG90YWxDb3N0KE9UX3NhbGFyeSwgT1Rfd2FnZXMsIE9UX0ZSSU5HRSk7XHJcblxyXG4gICAgICAgIC8vIHVwZGF0ZSB0b3RhbFxyXG4gICAgICAgIFRhYmxlLkNlbGwudXBkYXRlVmFsdWUocm93c1tpXSwgJ3RvdGFsJywgcm93X3RvdGFsKTtcclxuXHJcbiAgICAgICAgLy9zYXZlIGRhdGFcclxuICAgICAgICBUYWJsZS5zYXZlKCk7XHJcbiAgICB9XHJcbn0iLCJcclxuaW1wb3J0IHsgQ3VycmVudFBhZ2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZGF0YV91dGlscy9sb2NhbF9zdG9yYWdlX2hhbmRsZXJzLmpzXCI7XHJcbmltcG9ydCB7IHByZXBhcmVQYWdlVmlldyB9IGZyb20gJy4vaGVscGVycy5qcyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZE9UUGFnZSgpe1xyXG4gICAgLy91cGRhdGUgcGFnZSBzdGF0ZVxyXG4gICAgQ3VycmVudFBhZ2UudXBkYXRlKCdvdmVydGltZScpO1xyXG4gICAgcHJlcGFyZVBhZ2VWaWV3KCk7XHJcbiAgICBcclxufSIsImltcG9ydCBQcm9tcHQgZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvcHJvbXB0L3Byb21wdC5qc1wiO1xyXG5pbXBvcnQgU2lkZWJhciBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9zaWRlYmFyL3NpZGViYXIuanNcIjtcclxuaW1wb3J0IFRhYmxlIGZyb20gXCIuLi8uLi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmpzXCI7XHJcbmltcG9ydCBCb2R5IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2JvZHkvYm9keS5qc1wiO1xyXG5pbXBvcnQgTmF2QnV0dG9ucyBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9uYXZfYnV0dG9ucy9uYXZfYnV0dG9ucy5qc1wiO1xyXG5pbXBvcnQgU3VidGl0bGUgZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvaGVhZGVyL2hlYWRlci5qc1wiO1xyXG5cclxuLy8gXCJWZW5kb3JcIjogXCJMYXcgRmlybSBMTENcIixcclxuLy8gICAgICAgICBcIkNQQSAjXCIgOiBcIjc2NTQyMVwiLFxyXG4vLyAgICAgICAgIFwiQWNjb3VudCBTdHJpbmdcIjogXCIxMDAwLTI5MzIwLTMyMDAxMFwiLFxyXG4vLyAgICAgICAgIFwiT2JqZWN0IE5hbWVcIjogXCJDb25zdWx0aW5nXCIsXHJcbi8vICAgICAgICAgXCJFbmQgb2YgQ29udHJhY3RcIjogXCIxMi8zMS8yMDI0XCIsXHJcbi8vICAgICAgICAgXCJBbW91bnQgUmVtYWluaW5nXCIgOiA1MDAwMCxcclxuLy8gICAgICAgICBcIkZZMjYgUmVxdWVzdFwiOiAxMDAwMDBcclxuXHJcbmNvbnN0IG5vblBlcnNvbm5lbENvbHVtbnMgPSBbXHJcbiAgICB7IHRpdGxlOiAnRlkyNiBSZXF1ZXN0JywgY2xhc3NOYW1lOiAncmVxdWVzdCcsIGlzQ29zdDogdHJ1ZSB9LFxyXG4gICAgeyB0aXRsZTogJ0Ftb3VudCBSZW1haW5pbmcgb24gQ29udHJhY3QnLCBjbGFzc05hbWU6ICdyZW1haW5pbmcnLCBpc0Nvc3Q6IHRydWUgfSxcclxuICAgIHsgdGl0bGU6ICdTZXJ2aWNlJywgY2xhc3NOYW1lIDogJ3NlcnZpY2UnIH0sXHJcbiAgICB7IHRpdGxlOiAnRWRpdCcsIGNsYXNzTmFtZSA6ICdlZGl0JyB9LFxyXG4gICAgeyB0aXRsZSA6ICdBY2NvdW50IFN0cmluZycsIGNsYXNzTmFtZSA6ICdhY2NvdW50LXN0cmluZyd9LFxyXG4gICAgeyB0aXRsZSA6ICdDUEEgIycsIGNsYXNzTmFtZSA6ICdjcGEnfSxcclxuICAgIHsgdGl0bGUgOiAnQ29udHJhY3QgRW5kIERhdGUnLCBjbGFzc05hbWUgOiAnY29udHJhY3QtZW5kJ30sXHJcbiAgICB7IHRpdGxlOiAnUmVjdXJyaW5nIG9yIE9uZS1UaW1lJywgY2xhc3NOYW1lOiAncmVjdXJyaW5nJ30sXHJcbiAgICB7IHRpdGxlOiAnT2JqZWN0IE5hbWUnLCBjbGFzc05hbWU6ICdvYmplY3QnfVxyXG5dO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVQYWdlVmlldygpe1xyXG4gICAgLy8gcHJlcGFyZSBwYWdlIHZpZXdcclxuICAgIEJvZHkucmVzZXQoKTtcclxuICAgIE5hdkJ1dHRvbnMuc2hvdygpO1xyXG4gICAgU2lkZWJhci5zaG93KCk7XHJcbiAgICBUYWJsZS5hZGp1c3RXaWR0aCgnMTAwJScpO1xyXG4gICAgLy8gdXBkYXRlIHBhZ2UgdGV4dFxyXG4gICAgU3VidGl0bGUudXBkYXRlKCdOb24tUGVyc29ubmVsJyk7XHJcbiAgICBQcm9tcHQuVGV4dC51cGRhdGUoJ1NlbGVjdCBhbiBhY3Rpb24gaXRlbSBmb3IgZWFjaCBub24tcGVyc29ubmVsIGxpbmUgaXRlbSBmcm9tIGxhc3QgeWVhci4nKTtcclxuXHJcbiAgICAvLyBqdXN0IGVuYWJsZSBuZXh0IGZvciBub3dcclxuICAgIC8vIFRPRE86IG9ubHkgZW5hYmxlIHdoZW4gYWxsIGluZm8gaXMgZW50ZXJlZFxyXG4gICAgTmF2QnV0dG9ucy5OZXh0LmVuYWJsZSgpO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZU5vbnBlcnNvbm5lbFRhYmxlKCl7XHJcbiAgICAvLyBsb2FkIHRhYmxlIGRhdGEgZnJvbSBzdG9yYWdlXHJcbiAgICBpZihhd2FpdCBUYWJsZS5EYXRhLmxvYWQoKSkge1xyXG4gICAgICAgIC8vYWZ0ZXIgdGFibGUgaXMgbG9hZGVkLCBmaWxsIGl0XHJcbiAgICAgICAgVGFibGUuc2hvdygpO1xyXG4gICAgICAgIFRhYmxlLkNvbHVtbnMuYWRkQXRFbmQoVGFibGUuQnV0dG9ucy5lZGl0X2NvbmZpcm1fYnRucywgXCJFZGl0XCIpO1xyXG4gICAgICAgIC8vIGFzc2lnbiBjb3N0IGNsYXNzZXNcclxuICAgICAgICBUYWJsZS5Db2x1bW5zLmFzc2lnbkNsYXNzZXMobm9uUGVyc29ubmVsQ29sdW1ucyk7XHJcbiAgICAgICAgLy8gZW5hYmxlIGVkaXRpbmdcclxuICAgICAgICBUYWJsZS5CdXR0b25zLkVkaXQuaW5pdChub25QZXJzb25uZWxSb3dPbkVkaXQsIFRhYmxlLnNhdmUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBQcm9tcHQuVGV4dC51cGRhdGUoJ05vIHBlcnNvbm5lbCBleHBlbnNlcyBmb3IgdGhpcyBmdW5kLicpXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5vblBlcnNvbm5lbFJvd09uRWRpdCgpe1xyXG4gICAgLy8gbWFrZSBpdCBlZGl0YWJsZVxyXG4gICAgVGFibGUuQ2VsbC5jcmVhdGVUZXh0Ym94KCdyZXF1ZXN0JywgdHJ1ZSk7XHJcbiAgICBUYWJsZS5DZWxsLmNyZWF0ZVNlcnZpY2VEcm9wZG93bigpO1xyXG59XHJcblxyXG4iLCJpbXBvcnQgeyBDdXJyZW50UGFnZSB9IGZyb20gXCIuLi8uLi91dGlscy9kYXRhX3V0aWxzL2xvY2FsX3N0b3JhZ2VfaGFuZGxlcnMuanNcIjtcclxuaW1wb3J0IHsgcHJlcGFyZVBhZ2VWaWV3LCBpbml0aWFsaXplTm9ucGVyc29ubmVsVGFibGUgfSBmcm9tIFwiLi9oZWxwZXJzLmpzXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZE5vbnBlcnNvbm5lbFBhZ2UoKXtcclxuXHJcbiAgICBDdXJyZW50UGFnZS51cGRhdGUoJ25vbnBlcnNvbm5lbCcpO1xyXG4gICAgcHJlcGFyZVBhZ2VWaWV3KCk7XHJcbiAgICBpbml0aWFsaXplTm9ucGVyc29ubmVsVGFibGUoKVxyXG59XHJcbiIsImltcG9ydCB7IGluaXRpYWxpemVXZWxjb21lUGFnZSB9IGZyb20gJy4vMDBfd2VsY29tZS9tYWluLmpzJztcclxuaW1wb3J0IHsgY2xlYW5VcEluaXRpYXRpdmVzUGFnZSwgbG9hZE5ld0luaXRpYXRpdmVzIH0gZnJvbSAnLi8wN19uZXdfaW5pdGlhdGl2ZXMvbWFpbi5qcydcclxuaW1wb3J0IHsgbG9hZFJldmVudWVQYWdlLCBjbGVhbnVwUmV2ZW51ZVBhZ2UgfSBmcm9tICcuLzAzX3JldmVudWUvbWFpbi5qcydcclxuaW1wb3J0IHsgbG9hZFBlcnNvbm5lbFBhZ2UgfSBmcm9tICcuLzA0X3BlcnNvbm5lbC9tYWluLmpzJztcclxuaW1wb3J0IHsgbG9hZE9UUGFnZSB9IGZyb20gJy4vMDVfb3ZlcnRpbWUvbWFpbi5qcyc7XHJcbmltcG9ydCB7IGxvYWROb25wZXJzb25uZWxQYWdlIH0gZnJvbSAnLi8wNl9ub25wZXJzb25uZWwvbWFpbi5qcyc7XHJcbmltcG9ydCB7IGxvYWRCYXNlbGluZUxhbmRpbmdQYWdlIH0gZnJvbSAnLi8wMl9iYXNlbGluZV9sYW5kaW5nX3BhZ2UvbWFpbi5qcyc7XHJcbmltcG9ydCB7IGNsZWFuVXBTdW1tYXJ5UGFnZSwgbG9hZFN1bW1hcnlQYWdlIH0gZnJvbSAnLi8wOF9zdW1tYXJ5L21haW4uanMnO1xyXG5pbXBvcnQgeyBsb2FkVXBsb2FkUGFnZSB9IGZyb20gJy4vMDFfdXBsb2FkL21haW4uanMnO1xyXG5pbXBvcnQgeyBwYXVzZUV4ZWN1dGlvbiB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbl91dGlscy5qcyc7XHJcblxyXG5pbXBvcnQgeyBDdXJyZW50UGFnZSB9IGZyb20gJy4uL3V0aWxzL2RhdGFfdXRpbHMvbG9jYWxfc3RvcmFnZV9oYW5kbGVycy5qcyc7XHJcblxyXG5leHBvcnQgbGV0IFBBR0VTID0ge1xyXG4gICAgJ3dlbGNvbWUnIDogaW5pdGlhbGl6ZVdlbGNvbWVQYWdlLFxyXG4gICAgJ3VwbG9hZCcgOiBsb2FkVXBsb2FkUGFnZSxcclxuICAgICdiYXNlbGluZS1sYW5kaW5nJyA6IGxvYWRCYXNlbGluZUxhbmRpbmdQYWdlLFxyXG4gICAgJ3JldmVudWUnIDogbG9hZFJldmVudWVQYWdlLFxyXG4gICAgJ3BlcnNvbm5lbCcgOiBsb2FkUGVyc29ubmVsUGFnZSxcclxuICAgICdvdmVydGltZScgOiBsb2FkT1RQYWdlLFxyXG4gICAgJ25vbnBlcnNvbm5lbCcgOiBsb2FkTm9ucGVyc29ubmVsUGFnZSxcclxuICAgICduZXctaW5pdHMnIDogbG9hZE5ld0luaXRpYXRpdmVzLFxyXG4gICAgJ3N1bW1hcnknIDogbG9hZFN1bW1hcnlQYWdlIFxyXG59XHJcblxyXG5leHBvcnQgbGV0IENMRUFOVVAgPSB7XHJcbiAgICAnbmV3LWluaXRzJyA6IGNsZWFuVXBJbml0aWF0aXZlc1BhZ2UsXHJcbiAgICAncmV2ZW51ZScgOiBjbGVhbnVwUmV2ZW51ZVBhZ2UsXHJcbiAgICAnc3VtbWFyeScgOiBjbGVhblVwU3VtbWFyeVBhZ2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZpc2l0UGFnZShuZXdfcGFnZV9rZXkpe1xyXG4gICAgLy8gY2xlYW4gdXAgZnJvbSBjdXJyZW50IHBhZ2VcclxuICAgIHZhciBwYWdlX3N0YXRlID0gQ3VycmVudFBhZ2UubG9hZCgpO1xyXG4gICAgaWYgKENMRUFOVVBbcGFnZV9zdGF0ZV0pIHsgQ0xFQU5VUFtwYWdlX3N0YXRlXSgpIH07XHJcbiAgICAvLyBVc2UgdGhlIHBhZ2Vfc3RhdGUgdG8gYWNjZXNzIGFuZCBjYWxsIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIGZyb20gUEFHRVNcclxuICAgIGlmIChQQUdFU1tuZXdfcGFnZV9rZXldKSB7XHJcbiAgICAgICAgUEFHRVNbbmV3X3BhZ2Vfa2V5XSgpOyAvLyBJbnZva2VzIHRoZSBmdW5jdGlvbiBpZiBpdCBleGlzdHMgaW4gdGhlIFBBR0VTIG1hcFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBObyBwYWdlIGluaXRpYWxpemVyIGZvdW5kIGZvciBzdGF0ZTogJHtuZXdfcGFnZV9rZXl9YCk7XHJcbiAgICB9fVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5leHRQYWdlKCl7XHJcblxyXG4gICAgdmFyIHBhZ2Vfc3RhdGUgPSBDdXJyZW50UGFnZS5sb2FkKCk7XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoUEFHRVMpO1xyXG4gIFxyXG4gICAgLy8gRmluZCB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQga2V5XHJcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSBrZXlzLmluZGV4T2YocGFnZV9zdGF0ZSk7XHJcblxyXG4gICAgLy8gY2xlYW4gdXAgY3VycmVudCBwYWdlXHJcbiAgICBpZiAoQ0xFQU5VUFtwYWdlX3N0YXRlXSkgeyBDTEVBTlVQW3BhZ2Vfc3RhdGVdKCkgfTtcclxuICAgIFxyXG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYSBuZXh0IGtleVxyXG4gICAgaWYgKGN1cnJlbnRJbmRleCA+PSAwICYmIGN1cnJlbnRJbmRleCA8IGtleXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIC8vIEdldCB0aGUgbmV4dCBrZXlcclxuICAgICAgICBjb25zdCBuZXh0S2V5ID0ga2V5c1tjdXJyZW50SW5kZXggKyAxXTtcclxuICAgICAgICAvLyBnbyB0byB0aGF0IHBhZ2VcclxuICAgICAgICB2aXNpdFBhZ2UobmV4dEtleSk7XHJcbiAgICB9IFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbGFzdFBhZ2UoKXtcclxuXHJcbiAgICB2YXIgcGFnZV9zdGF0ZSA9IEN1cnJlbnRQYWdlLmxvYWQoKTtcclxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhQQUdFUyk7XHJcbiAgXHJcbiAgICAvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBrZXlcclxuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGtleXMuaW5kZXhPZihwYWdlX3N0YXRlKTtcclxuXHJcbiAgICAvLyBjbGVhbiB1cCBjdXJyZW50IHBhZ2VcclxuICAgIGlmIChDTEVBTlVQW3BhZ2Vfc3RhdGVdKSB7IENMRUFOVVBbcGFnZV9zdGF0ZV0oKSB9O1xyXG4gICAgXHJcbiAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIG5leHQga2V5XHJcbiAgICBpZiAoY3VycmVudEluZGV4ID49IDEpIHtcclxuICAgICAgICAvLyBHZXQgdGhlIG5leHQga2V5XHJcbiAgICAgICAgY29uc3QgbGFzdEtleSA9IGtleXNbY3VycmVudEluZGV4IC0gMV07XHJcbiAgICAgICAgLy8gZ28gdG8gdGhhdCBwYWdlXHJcbiAgICAgICAgdmlzaXRQYWdlKGxhc3RLZXkpO1xyXG4gICAgfSBcclxufSIsImV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaEpTT04oanNvbkZpbGVQYXRoKSB7XHJcbiAgcmV0dXJuIGZldGNoKGpzb25GaWxlUGF0aClcclxuICAgIC50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTmV0d29yayByZXNwb25zZSB3YXMgbm90IG9rJyk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRvSlNPTih0YWJsZSwgY29sc1RvUmVtb3ZlID0gW10pe1xyXG4gICAgY29uc3Qgcm93cyA9IHRhYmxlLnJvd3M7XHJcbiAgICAvLyBFeHRyYWN0IGhlYWRlcnMgZnJvbSB0aGUgZmlyc3Qgcm93XHJcbiAgICBjb25zdCBoZWFkZXJSb3cgPSByb3dzWzBdLmNlbGxzO1xyXG4gICAgY29uc3QgaGVhZGVycyA9IFtdO1xyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBoZWFkZXJSb3cubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBoZWFkZXJzLnB1c2goaGVhZGVyUm93W2pdLmlubmVyVGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW5pdGlhbGl6ZSBkYXRhXHJcbiAgICB2YXIgdGFibGVEYXRhID0gW107XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgY29scyA9IHJvd3NbaV0uY2VsbHM7XHJcbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IHt9O1xyXG4gICAgICAgICAgICBoZWFkZXJzLmZvckVhY2goKGhlYWRlciwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChjb2xzVG9SZW1vdmUuaW5jbHVkZXMoaGVhZGVyKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sc1tpbmRleF0uY2xhc3NMaXN0LmNvbnRhaW5zKCdjb3N0JykpIHtcclxuICAgICAgICAgICAgICAgICAgICByb3dEYXRhW2hlYWRlcl0gPSBjb2xzW2luZGV4XS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbaGVhZGVyXSA9IGNvbHNbaW5kZXhdLmlubmVyVGV4dDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgdGFibGVEYXRhLnB1c2gocm93RGF0YSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGFibGVEYXRhKTtcclxufVxyXG5cclxuXHJcbiAgIiwiaW1wb3J0IHsgRklTQ0FMX1lFQVIsIERBVEFfUk9PVCB9IGZyb20gXCIuLi8uLi9pbml0LmpzXCI7XHJcbmltcG9ydCBTaWRlYmFyIGZyb20gXCIuLi8uLi9jb21wb25lbnRzL3NpZGViYXIvc2lkZWJhci5qc1wiO1xyXG5pbXBvcnQgeyBQQUdFUywgdmlzaXRQYWdlIH0gZnJvbSBcIi4uLy4uL3ZpZXdzL3ZpZXdfbG9naWMuanNcIjtcclxuaW1wb3J0IHsgZmV0Y2hKU09OIH0gZnJvbSBcIi4vSlNPTl9kYXRhX2hhbmRsZXJzLmpzXCI7XHJcbmltcG9ydCB7IEZ1bmRMb29rdXBUYWJsZSB9IGZyb20gXCIuL2J1ZGdldF9kYXRhX2hhbmRsZXJzLmpzXCI7XHJcbmltcG9ydCB7IGNvbnZlcnRUb0pTT04gfSBmcm9tIFwiLi9KU09OX2RhdGFfaGFuZGxlcnMuanNcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBDdXJyZW50UGFnZSA9IHtcclxuICAgIHVwZGF0ZSA6IGZ1bmN0aW9uKHBhZ2Upe1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdwYWdlX3N0YXRlJywgcGFnZSk7XHJcbiAgICB9LFxyXG4gICAgbG9hZCA6IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgY29uc3QgcGFnZVN0YXRlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3BhZ2Vfc3RhdGUnKTtcclxuICAgICAgICByZXR1cm4gcGFnZVN0YXRlICE9PSBudWxsID8gcGFnZVN0YXRlIDogJ3dlbGNvbWUnO1xyXG4gICAgfSxcclxuICAgIHZpc2l0IDogZnVuY3Rpb24oKXtcclxuICAgICAgICB2aXNpdFBhZ2UodGhpcy5sb2FkKCkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQ3VycmVudEZ1bmQgPSB7XHJcbiAgICB1cGRhdGUgOiBmdW5jdGlvbihmdW5kKXtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZnVuZCcsIGZ1bmQpO1xyXG4gICAgfSxcclxuICAgIG51bWJlciA6IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZnVuZFwiKTtcclxuICAgIH0sXHJcbiAgICBuYW1lIDogZnVuY3Rpb24oKXtcclxuICAgICAgICByZXR1cm4gRnVuZExvb2t1cFRhYmxlLmdldE5hbWUoIHRoaXMubnVtYmVyKCkpO1xyXG4gICAgfSxcclxuICAgIHJlc2V0IDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGUoJycpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBUT0RPOiBjb25zaWRlciBtb3ZpbmcgdGhpcyBpbnRvIGEgY29uc3QgZm9yIEN1cnJlbnQgVGFibGUgKG9yIHRvIHRoZSB0YWJsZSBjb21wb25lbnQpXHJcbmV4cG9ydCBmdW5jdGlvbiBzYXZlVGFibGVEYXRhKCkge1xyXG4gICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4tdGFibGUnKTtcclxuICAgIGlmIChDdXJyZW50RnVuZC5udW1iZXIoKSkge1xyXG4gICAgICAgIHZhciBzYXZlX2FzID0gYCR7Q3VycmVudFBhZ2UubG9hZCgpfV8ke0N1cnJlbnRGdW5kLm51bWJlcigpfWA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciBzYXZlX2FzID0gQ3VycmVudFBhZ2UubG9hZCgpO1xyXG4gICAgfVxyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oc2F2ZV9hcywgY29udmVydFRvSlNPTih0YWJsZSwgWydFZGl0J10pKTtcclxuICAgIFNpZGViYXIudXBkYXRlVG90YWxzKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlbGV0ZVRhYmxlKG5hbWUpe1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgJycpO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlQWxsVGFibGVzKCl7XHJcbiAgICB2YXIgZnVuZHMgPSBhd2FpdCBmZXRjaEpTT04oREFUQV9ST09UICsgJ2Z1bmRzLmpzb24nKTtcclxuICAgIGZ1bmRzID0gZnVuZHMubWFwKChpdGVtKSA9PiB7IHJldHVybiBpdGVtLk5hbWUgfSk7XHJcbiAgICBmb3IgKGNvbnN0IHBhZ2UgaW4gUEFHRVMpe1xyXG4gICAgICAgIGZvcihjb25zdCBpIGluIGZ1bmRzKXtcclxuICAgICAgICAgICAgZGVsZXRlVGFibGUoYCR7cGFnZX1fJHtmdW5kc1tpXX1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkZWxldGVUYWJsZSgnbmV3LWluaXRzJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkVGFibGVEYXRhKG5hbWUpe1xyXG4gICAgY29uc3QgZGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xyXG4gICAgaWYgKCBkYXRhID09ICcnICkge1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xyXG59XHJcblxyXG4vLyBDbGFzcyB0byBob2xkIGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgZnVuZCBhbmQgdGFibGVcclxuY2xhc3MgU3RvcmVkVGFibGUge1xyXG4gICAgY29uc3RydWN0b3IocGFnZSwgZnVuZCl7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gYCR7cGFnZX1fJHtmdW5kfWA7XHJcbiAgICAgICAgdGhpcy5wYWdlID0gcGFnZTtcclxuICAgICAgICB0aGlzLnRhYmxlID0gbG9hZFRhYmxlRGF0YSh0aGlzLm5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvdGFsQ29sKCkge1xyXG4gICAgICAgIHN3aXRjaCh0aGlzLnBhZ2Upe1xyXG4gICAgICAgICAgICBjYXNlICdwZXJzb25uZWwnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdUb3RhbCBDb3N0JztcclxuICAgICAgICAgICAgY2FzZSAnb3ZlcnRpbWUnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdUb3RhbCBDb3N0IChpbmNsdWRpbmcgYmVuZWZpdHMpJztcclxuICAgICAgICAgICAgY2FzZSAnbm9ucGVyc29ubmVsJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBgRlkke0ZJU0NBTF9ZRUFSfSBSZXF1ZXN0YDtcclxuICAgICAgICAgICAgY2FzZSAncmV2ZW51ZSc6XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldFN1bSgpIHtcclxuICAgICAgICAvLyBmaWxsIHdpdGggemVybyB1bnRpbCB0aGVyZSBpcyBzb21ldGhpbmcgc2F2ZWQgaW4gc3RvcmFnZVxyXG4gICAgICAgIHJldHVybiBjb2xTdW0odGhpcy50YWJsZSwgdGhpcy50b3RhbENvbCgpLCB0aGlzLm5hbWUpO1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gY29sU3VtKHRhYmxlLCBjb2xOYW1lKSB7XHJcbiAgICAvLyBmaWxsIHdpdGggemVybyB1bnRpbCB0aGVyZSBpcyBzb21ldGhpbmcgc2F2ZWQgaW4gc3RvcmFnZVxyXG4gICAgaWYoIXRhYmxlIHx8IHRhYmxlID09ICcnKXsgXHJcbiAgICAgICAgcmV0dXJuIDA7IFxyXG4gICAgfVxyXG4gICAgY29uc3QgaGVhZGVycyA9IE9iamVjdC5rZXlzKHRhYmxlWzBdKTtcclxuICAgIGlmIChoZWFkZXJzLmluY2x1ZGVzKGNvbE5hbWUpKSB7XHJcbiAgICAgICAgbGV0IHN1bSA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJsZS5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgIHN1bSArPSBNYXRoLnJvdW5kKHBhcnNlRmxvYXQodGFibGVbaV1bY29sTmFtZV0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1bTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5lcnJvcihgQ291bGQgbm90IGZpbmQgZXhwZWN0ZWQgdG90YWwgY29sdW1uIGluIHNhdmVkIGRhdGEgZm9yICR7bmFtZX0uIFJldHVybmluZyAwLiBTZWUgU3RvcmVkVGFibGUudG90YWxDb2woKSBzd2l0Y2guYCk7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG4vLyBIb2xkcyBhbGwgdGhlIGRldGFpbGVkIGRhdGEgZm9yIG9uZSBmdW5kJ3MgYnVkZ2V0XHJcbmV4cG9ydCBjbGFzcyBGdW5kIHtcclxuICAgIGNvbnN0cnVjdG9yKGZ1bmQpe1xyXG4gICAgICAgIHRoaXMuZnVuZCA9IGZ1bmQ7XHJcbiAgICAgICAgdGhpcy5wZXJzb25uZWwgPSBuZXcgU3RvcmVkVGFibGUoJ3BlcnNvbm5lbCcsIGZ1bmQpO1xyXG4gICAgICAgIHRoaXMub3ZlcnRpbWUgPSBuZXcgU3RvcmVkVGFibGUoJ292ZXJ0aW1lJywgZnVuZCk7XHJcbiAgICAgICAgdGhpcy5ub25wZXJzb25uZWwgPSBuZXcgU3RvcmVkVGFibGUoJ25vbnBlcnNvbm5lbCcsIGZ1bmQpO1xyXG4gICAgICAgIHRoaXMucmV2ZW51ZSA9IG5ldyBTdG9yZWRUYWJsZSgncmV2ZW51ZScsIGZ1bmQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBlcnNvbm5lbENvc3QoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyc29ubmVsLmdldFN1bSgpICsgdGhpcy5vdmVydGltZS5nZXRTdW0oKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXROb25QZXJzb25uZWxDb3N0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5vbnBlcnNvbm5lbC5nZXRTdW0oKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSZXZlbnVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJldmVudWUuZ2V0U3VtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VG90YWwoKSB7IFxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE5vblBlcnNvbm5lbENvc3QoKSArIHRoaXMuZ2V0UGVyc29ubmVsQ29zdCgpIC0gdGhpcy5nZXRSZXZlbnVlKCkgXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBCYXNlbGluZSB7XHJcbiAgICAvLyBiYXNlbGluZSB3aWxsIGp1c3QgY29udGFpbiBhIGxpc3Qgb2YgZnVuZHNcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIGNvbnN0IGFsbEZ1bmRzID0gRnVuZExvb2t1cFRhYmxlLmxpc3RGdW5kcygpO1xyXG4gICAgICAgIHRoaXMuZnVuZHMgPSBbXTtcclxuICAgICAgICBhbGxGdW5kcy5mb3JFYWNoKChmdW5kKSA9PiB7IFxyXG4gICAgICAgICAgICB0aGlzLmZ1bmRzLnB1c2gobmV3IEZ1bmQoZnVuZCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBcclxuXHJcbiAgICBwZXJzb25uZWwoKSB7XHJcbiAgICAgICAgbGV0IHRvdGFsID0gMDtcclxuICAgICAgICB0aGlzLmZ1bmRzLmZvckVhY2goZnVuZCA9PiB7XHJcbiAgICAgICAgICAgIHRvdGFsICs9IGZ1bmQuZ2V0UGVyc29ubmVsQ29zdCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0b3RhbDtcclxuICAgIH1cclxuXHJcbiAgICBub25wZXJzb25uZWwoKSB7XHJcbiAgICAgICAgbGV0IHRvdGFsID0gMDtcclxuICAgICAgICB0aGlzLmZ1bmRzLmZvckVhY2goZnVuZCA9PiB7XHJcbiAgICAgICAgICAgIHRvdGFsICs9IGZ1bmQuZ2V0Tm9uUGVyc29ubmVsQ29zdCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0b3RhbDtcclxuICAgIH1cclxuXHJcbiAgICByZXZlbnVlKCkge1xyXG4gICAgICAgIGxldCB0b3RhbCA9IDA7XHJcbiAgICAgICAgdGhpcy5mdW5kcy5mb3JFYWNoKGZ1bmQgPT4ge1xyXG4gICAgICAgICAgICB0b3RhbCArPSBmdW5kLmdldFJldmVudWUoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdG90YWw7XHJcbiAgICB9XHJcblxyXG4gICAgdG90YWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubm9ucGVyc29ubmVsKCkgKyB0aGlzLnBlcnNvbm5lbCgpIC0gdGhpcy5yZXZlbnVlKCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJbml0aWF0aXZlIHtcclxuICAgIGNvbnN0cnVjdG9yKHJvdykge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IHJvdztcclxuICAgICAgICB0aGlzLm5hbWUgPSByb3dbJ0luaXRpYXRpdmUgTmFtZSddO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cGVuc2VzKCkgeyByZXR1cm4gdGhpcy5kYXRhWydCYWxscGFyayBUb3RhbCBFeHBlbnNlcyddfVxyXG5cclxuICAgIHJldmVudWUoKSB7IHJldHVybiB0aGlzLmRhdGFbJ1JldmVudWUnXSB9XHJcblxyXG4gICAgbmV0KCkgeyByZXR1cm4gdGhpcy5leHBlbnNlcygpIC0gdGhpcy5yZXZlbnVlKCkgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cHBsZW1lbnRhbCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnRhYmxlID0gbG9hZFRhYmxlRGF0YSgnbmV3LWluaXRzJyk7XHJcbiAgICAgICAgdGhpcy5pbml0aWF0aXZlcyA9IFtdO1xyXG4gICAgICAgIGlmKHRoaXMudGFibGUpe1xyXG4gICAgICAgICAgICB0aGlzLnRhYmxlLmZvckVhY2goKHJvdykgPT4geyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhdGl2ZXMucHVzaChuZXcgSW5pdGlhdGl2ZShyb3cpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldEluaXRzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlLm1hcCgoaXRlbSkgPT4geyByZXR1cm4gaXRlbVsnSW5pdGlhdGl2ZSBOYW1lJ10gfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZXhwZW5zZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbFN1bSh0aGlzLnRhYmxlLCAnQmFsbHBhcmsgVG90YWwgRXhwZW5zZXMnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXZlbnVlKCkge1xyXG4gICAgICAgIHJldHVybiBjb2xTdW0odGhpcy50YWJsZSwgJ1JldmVudWUnKTtcclxuICAgIH1cclxuXHJcbiAgICB0b3RhbCgpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmV4cGVuc2VzKCkgLSB0aGlzLnJldmVudWUoKTtcclxuICAgIH1cclxuXHJcbn1cclxuIiwiLy8gaW1wb3J0IHN0eWxlc1xyXG5pbXBvcnQgJy4uL2Nzcy9jb21tb24uY3NzJztcclxuXHJcbi8vIGltcG9ydCBmdW5jdGlvbnNcclxuaW1wb3J0IHsgQ3VycmVudFBhZ2UgfSBmcm9tICcuL3V0aWxzL2RhdGFfdXRpbHMvbG9jYWxfc3RvcmFnZV9oYW5kbGVycy5qcyc7XHJcblxyXG4vLyBwYXRoIGZvciBteSBsYXB0b3BcclxuZXhwb3J0IGxldCBEQVRBX1JPT1QgPSAnLi4vLi4vLi4vZGF0YS9sYXdfZGVwdF9zYW1wbGUvJ1xyXG4vLyBnaXRodWIgcGF0aFxyXG4vLyBleHBvcnQgbGV0IERBVEFfUk9PVCA9ICcuLi8uLi9idWRnZXQtcmVxdWVzdC1kZW1vL2RhdGEvbGF3X2RlcHRfc2FtcGxlLydcclxuXHJcbmV4cG9ydCBsZXQgUkVWRU5VRSA9IDA7XHJcbmV4cG9ydCBsZXQgVEFSR0VUID0gMTQwMDAwMDA7XHJcbmV4cG9ydCB2YXIgRklTQ0FMX1lFQVIgPSAnMjYnO1xyXG5leHBvcnQgdmFyIE9UX0ZSSU5HRSA9IDAuMDc2NTtcclxuXHJcbi8vIHZhcmlhYmxlcyBvbiB0aGUgc2FsYXJ5IFxyXG5leHBvcnQgdmFyIGZyaW5nZSA9IDAuMzZcclxuZXhwb3J0IHZhciBjb2xhID0gMC4wMlxyXG5leHBvcnQgdmFyIG1lcml0ID0gMC4wMlxyXG5cclxuLy8gc2hlZXRzIHRvIGV4cGVjdCBvbiBkZXRhaWwgc2hlZXRcclxuZXhwb3J0IGNvbnN0IFNIRUVUUyA9IHtcclxuICAgICdGVEUsIFNhbGFyeS1XYWdlLCAmIEJlbmVmaXRzJyA6ICdwZXJzb25uZWwnICxcclxuICAgICdPdmVydGltZSAmIE90aGVyIFBlcnNvbm5lbCcgOiAnb3ZlcnRpbWUnLFxyXG4gICAgJ05vbi1QZXJzb25uZWwgT3BlcmF0aW5nJyA6ICdub25wZXJzb25uZWwnLFxyXG4gICAgJ1JldmVudWUnIDogJ3JldmVudWUnXHJcbn1cclxuXHJcbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICBDdXJyZW50UGFnZS52aXNpdCgpO1xyXG59KTtcclxuXHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///934\n")},404:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `:root {\r\n /* colors */\r\n --orange: #FB6523;\r\n --yellow: #D99733;\r\n --blue: #43748E;\r\n --lightBlue: #b7c9e2;\r\n --darkGray: #373A37;\r\n --mediumGray: #D0D0D0;\r\n --lightGray: #F2F2F2;\r\n --white: #FBFDFB;\r\n --black: #212121;\r\n --green: #71BC78;\r\n --citygreen: #004445;\r\n --spiritgreen: #279989;\r\n --palegreen: #9FD5B3;\r\n --verypalegreen: #DFF5E3;\r\n --accentyellow: #feb70d;\r\n --nearblack: #18252a;\r\n /* fonts */\r\n font-family: \'Nunito\', sans-serif;\r\n font-size: 14px;\r\n /* spacing */\r\n --header-height : 125px;\r\n --sidebar-width: 250px;\r\n}\r\n\r\n/* Button styling */\r\n\r\n.btn {\r\n cursor: pointer;\r\n padding: 10px;\r\n margin-top: 5px;\r\n margin-right : 2px;\r\n margin-left: 2px;\r\n border-radius: 10px;\r\n background-color: gray;\r\n color: white; \r\n}\r\n\r\n/* Font application for all text */\r\nbody, button, input, textarea, select, .sidebar, table {\r\n font-family: var(--font-family), sans-serif;\r\n }\r\n\r\n#main-panel {\r\n /* display: flex; */\r\n /* flex-direction: column; */\r\n justify-content: center; /* This will center content vertically */\r\n min-height: calc(100vh - var(--header-height)) ; \r\n /* max-width: calc(100vw - var(--sidebar-width)); */\r\n padding-top: 25px;\r\n padding-bottom: 25px;\r\n margin: 0;\r\n}\r\n\r\ndiv.row {\r\n margin: 0px;\r\n}`, "",{"version":3,"sources":["webpack://./src/css/common.css"],"names":[],"mappings":"AAAA;IACI,WAAW;IACX,iBAAiB;IACjB,iBAAiB;IACjB,eAAe;IACf,oBAAoB;IACpB,mBAAmB;IACnB,qBAAqB;IACrB,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,oBAAoB;IACpB,sBAAsB;IACtB,oBAAoB;IACpB,wBAAwB;IACxB,uBAAuB;IACvB,oBAAoB;IACpB,UAAU;IACV,iCAAiC;IACjC,eAAe;IACf,YAAY;IACZ,uBAAuB;IACvB,sBAAsB;AAC1B;;AAEA,mBAAmB;;AAEnB;IACI,eAAe;IACf,aAAa;IACb,eAAe;IACf,kBAAkB;IAClB,gBAAgB;IAChB,mBAAmB;IACnB,sBAAsB;IACtB,YAAY;AAChB;;AAEA,mCAAmC;AACnC;IACI,2CAA2C;EAC7C;;AAEF;IACI,mBAAmB;IACnB,4BAA4B;IAC5B,uBAAuB,EAAE,wCAAwC;IACjE,+CAA+C;IAC/C,oDAAoD;IACpD,iBAAiB;IACjB,oBAAoB;IACpB,SAAS;AACb;;AAEA;IACI,WAAW;AACf","sourcesContent":[":root {\\r\\n /* colors */\\r\\n --orange: #FB6523;\\r\\n --yellow: #D99733;\\r\\n --blue: #43748E;\\r\\n --lightBlue: #b7c9e2;\\r\\n --darkGray: #373A37;\\r\\n --mediumGray: #D0D0D0;\\r\\n --lightGray: #F2F2F2;\\r\\n --white: #FBFDFB;\\r\\n --black: #212121;\\r\\n --green: #71BC78;\\r\\n --citygreen: #004445;\\r\\n --spiritgreen: #279989;\\r\\n --palegreen: #9FD5B3;\\r\\n --verypalegreen: #DFF5E3;\\r\\n --accentyellow: #feb70d;\\r\\n --nearblack: #18252a;\\r\\n /* fonts */\\r\\n font-family: \'Nunito\', sans-serif;\\r\\n font-size: 14px;\\r\\n /* spacing */\\r\\n --header-height : 125px;\\r\\n --sidebar-width: 250px;\\r\\n}\\r\\n\\r\\n/* Button styling */\\r\\n\\r\\n.btn {\\r\\n cursor: pointer;\\r\\n padding: 10px;\\r\\n margin-top: 5px;\\r\\n margin-right : 2px;\\r\\n margin-left: 2px;\\r\\n border-radius: 10px;\\r\\n background-color: gray;\\r\\n color: white; \\r\\n}\\r\\n\\r\\n/* Font application for all text */\\r\\nbody, button, input, textarea, select, .sidebar, table {\\r\\n font-family: var(--font-family), sans-serif;\\r\\n }\\r\\n\\r\\n#main-panel {\\r\\n /* display: flex; */\\r\\n /* flex-direction: column; */\\r\\n justify-content: center; /* This will center content vertically */\\r\\n min-height: calc(100vh - var(--header-height)) ; \\r\\n /* max-width: calc(100vw - var(--sidebar-width)); */\\r\\n padding-top: 25px;\\r\\n padding-bottom: 25px;\\r\\n margin: 0;\\r\\n}\\r\\n\\r\\ndiv.row {\\r\\n margin: 0px;\\r\\n}"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDA0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9jc3MvY29tbW9uLmNzcz9mN2NhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGA6cm9vdCB7XHJcbiAgICAvKiBjb2xvcnMgKi9cclxuICAgIC0tb3JhbmdlOiAjRkI2NTIzO1xyXG4gICAgLS15ZWxsb3c6ICNEOTk3MzM7XHJcbiAgICAtLWJsdWU6ICM0Mzc0OEU7XHJcbiAgICAtLWxpZ2h0Qmx1ZTogI2I3YzllMjtcclxuICAgIC0tZGFya0dyYXk6ICMzNzNBMzc7XHJcbiAgICAtLW1lZGl1bUdyYXk6ICNEMEQwRDA7XHJcbiAgICAtLWxpZ2h0R3JheTogI0YyRjJGMjtcclxuICAgIC0td2hpdGU6ICNGQkZERkI7XHJcbiAgICAtLWJsYWNrOiAjMjEyMTIxO1xyXG4gICAgLS1ncmVlbjogIzcxQkM3ODtcclxuICAgIC0tY2l0eWdyZWVuOiAjMDA0NDQ1O1xyXG4gICAgLS1zcGlyaXRncmVlbjogIzI3OTk4OTtcclxuICAgIC0tcGFsZWdyZWVuOiAjOUZENUIzO1xyXG4gICAgLS12ZXJ5cGFsZWdyZWVuOiAjREZGNUUzO1xyXG4gICAgLS1hY2NlbnR5ZWxsb3c6ICNmZWI3MGQ7XHJcbiAgICAtLW5lYXJibGFjazogIzE4MjUyYTtcclxuICAgIC8qIGZvbnRzICovXHJcbiAgICBmb250LWZhbWlseTogJ051bml0bycsIHNhbnMtc2VyaWY7XHJcbiAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICAvKiBzcGFjaW5nICovXHJcbiAgICAtLWhlYWRlci1oZWlnaHQgOiAxMjVweDtcclxuICAgIC0tc2lkZWJhci13aWR0aDogMjUwcHg7XHJcbn1cclxuXHJcbi8qIEJ1dHRvbiBzdHlsaW5nICovXHJcblxyXG4uYnRuIHtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgIHBhZGRpbmc6IDEwcHg7XHJcbiAgICBtYXJnaW4tdG9wOiA1cHg7XHJcbiAgICBtYXJnaW4tcmlnaHQgOiAycHg7XHJcbiAgICBtYXJnaW4tbGVmdDogMnB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogMTBweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IGdyYXk7XHJcbiAgICBjb2xvcjogd2hpdGU7IFxyXG59XHJcblxyXG4vKiBGb250IGFwcGxpY2F0aW9uIGZvciBhbGwgdGV4dCAgKi9cclxuYm9keSwgYnV0dG9uLCBpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCwgLnNpZGViYXIsIHRhYmxlIHtcclxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseSksIHNhbnMtc2VyaWY7XHJcbiAgfVxyXG5cclxuI21haW4tcGFuZWwge1xyXG4gICAgLyogZGlzcGxheTogZmxleDsgKi9cclxuICAgIC8qIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47ICovXHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgLyogVGhpcyB3aWxsIGNlbnRlciBjb250ZW50IHZlcnRpY2FsbHkgKi9cclxuICAgIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggLSB2YXIoLS1oZWFkZXItaGVpZ2h0KSkgOyBcclxuICAgIC8qIG1heC13aWR0aDogY2FsYygxMDB2dyAtIHZhcigtLXNpZGViYXItd2lkdGgpKTsgICovXHJcbiAgICBwYWRkaW5nLXRvcDogMjVweDtcclxuICAgIHBhZGRpbmctYm90dG9tOiAyNXB4O1xyXG4gICAgbWFyZ2luOiAwO1xyXG59XHJcblxyXG5kaXYucm93IHtcclxuICAgIG1hcmdpbjogMHB4O1xyXG59YCwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zcmMvY3NzL2NvbW1vbi5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7SUFDSSxXQUFXO0lBQ1gsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2Ysb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQixxQkFBcUI7SUFDckIsb0JBQW9CO0lBQ3BCLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLG9CQUFvQjtJQUNwQixzQkFBc0I7SUFDdEIsb0JBQW9CO0lBQ3BCLHdCQUF3QjtJQUN4Qix1QkFBdUI7SUFDdkIsb0JBQW9CO0lBQ3BCLFVBQVU7SUFDVixpQ0FBaUM7SUFDakMsZUFBZTtJQUNmLFlBQVk7SUFDWix1QkFBdUI7SUFDdkIsc0JBQXNCO0FBQzFCOztBQUVBLG1CQUFtQjs7QUFFbkI7SUFDSSxlQUFlO0lBQ2YsYUFBYTtJQUNiLGVBQWU7SUFDZixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixzQkFBc0I7SUFDdEIsWUFBWTtBQUNoQjs7QUFFQSxtQ0FBbUM7QUFDbkM7SUFDSSwyQ0FBMkM7RUFDN0M7O0FBRUY7SUFDSSxtQkFBbUI7SUFDbkIsNEJBQTRCO0lBQzVCLHVCQUF1QixFQUFFLHdDQUF3QztJQUNqRSwrQ0FBK0M7SUFDL0Msb0RBQW9EO0lBQ3BELGlCQUFpQjtJQUNqQixvQkFBb0I7SUFDcEIsU0FBUztBQUNiOztBQUVBO0lBQ0ksV0FBVztBQUNmXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIjpyb290IHtcXHJcXG4gICAgLyogY29sb3JzICovXFxyXFxuICAgIC0tb3JhbmdlOiAjRkI2NTIzO1xcclxcbiAgICAtLXllbGxvdzogI0Q5OTczMztcXHJcXG4gICAgLS1ibHVlOiAjNDM3NDhFO1xcclxcbiAgICAtLWxpZ2h0Qmx1ZTogI2I3YzllMjtcXHJcXG4gICAgLS1kYXJrR3JheTogIzM3M0EzNztcXHJcXG4gICAgLS1tZWRpdW1HcmF5OiAjRDBEMEQwO1xcclxcbiAgICAtLWxpZ2h0R3JheTogI0YyRjJGMjtcXHJcXG4gICAgLS13aGl0ZTogI0ZCRkRGQjtcXHJcXG4gICAgLS1ibGFjazogIzIxMjEyMTtcXHJcXG4gICAgLS1ncmVlbjogIzcxQkM3ODtcXHJcXG4gICAgLS1jaXR5Z3JlZW46ICMwMDQ0NDU7XFxyXFxuICAgIC0tc3Bpcml0Z3JlZW46ICMyNzk5ODk7XFxyXFxuICAgIC0tcGFsZWdyZWVuOiAjOUZENUIzO1xcclxcbiAgICAtLXZlcnlwYWxlZ3JlZW46ICNERkY1RTM7XFxyXFxuICAgIC0tYWNjZW50eWVsbG93OiAjZmViNzBkO1xcclxcbiAgICAtLW5lYXJibGFjazogIzE4MjUyYTtcXHJcXG4gICAgLyogZm9udHMgKi9cXHJcXG4gICAgZm9udC1mYW1pbHk6ICdOdW5pdG8nLCBzYW5zLXNlcmlmO1xcclxcbiAgICBmb250LXNpemU6IDE0cHg7XFxyXFxuICAgIC8qIHNwYWNpbmcgKi9cXHJcXG4gICAgLS1oZWFkZXItaGVpZ2h0IDogMTI1cHg7XFxyXFxuICAgIC0tc2lkZWJhci13aWR0aDogMjUwcHg7XFxyXFxufVxcclxcblxcclxcbi8qIEJ1dHRvbiBzdHlsaW5nICovXFxyXFxuXFxyXFxuLmJ0biB7XFxyXFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXHJcXG4gICAgcGFkZGluZzogMTBweDtcXHJcXG4gICAgbWFyZ2luLXRvcDogNXB4O1xcclxcbiAgICBtYXJnaW4tcmlnaHQgOiAycHg7XFxyXFxuICAgIG1hcmdpbi1sZWZ0OiAycHg7XFxyXFxuICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IGdyYXk7XFxyXFxuICAgIGNvbG9yOiB3aGl0ZTsgXFxyXFxufVxcclxcblxcclxcbi8qIEZvbnQgYXBwbGljYXRpb24gZm9yIGFsbCB0ZXh0ICAqL1xcclxcbmJvZHksIGJ1dHRvbiwgaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIC5zaWRlYmFyLCB0YWJsZSB7XFxyXFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseSksIHNhbnMtc2VyaWY7XFxyXFxuICB9XFxyXFxuXFxyXFxuI21haW4tcGFuZWwge1xcclxcbiAgICAvKiBkaXNwbGF5OiBmbGV4OyAqL1xcclxcbiAgICAvKiBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyAqL1xcclxcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgLyogVGhpcyB3aWxsIGNlbnRlciBjb250ZW50IHZlcnRpY2FsbHkgKi9cXHJcXG4gICAgbWluLWhlaWdodDogY2FsYygxMDB2aCAtIHZhcigtLWhlYWRlci1oZWlnaHQpKSA7IFxcclxcbiAgICAvKiBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSB2YXIoLS1zaWRlYmFyLXdpZHRoKSk7ICAqL1xcclxcbiAgICBwYWRkaW5nLXRvcDogMjVweDtcXHJcXG4gICAgcGFkZGluZy1ib3R0b206IDI1cHg7XFxyXFxuICAgIG1hcmdpbjogMDtcXHJcXG59XFxyXFxuXFxyXFxuZGl2LnJvdyB7XFxyXFxuICAgIG1hcmdpbjogMHB4O1xcclxcbn1cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///404\n')},995:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.summary-accordion {\r\n width: 60%;\r\n margin: auto;\r\n}\r\n\r\n.accordion-title {\r\n margin-left: 20%;\r\n font-weight: bold;\r\n padding-bottom: 10px;\r\n padding-left: 15px;\r\n padding-top: 30px;\r\n}\r\n\r\n.accordion-button:active, .accordion-button:not(.collapsed) {\r\n background-color: var(--palegreen);\r\n color: var(--citygreen);\r\n}\r\n\r\n.accordion-table { \r\n width: 100%;\r\n font-size: 1.25em;\r\n /* border-collapse: separate; This is required for rounded corners */\r\n}\r\n\r\n.accordion-table td:last-child {\r\n text-align: right;\r\n padding-right: 15px;\r\n padding-bottom: 5px\r\n}\r\n\r\n.accordion-table tr {\r\n border-bottom: 1px solid black;\r\n border-top: none;\r\n border-right: none;\r\n border-left: none;\r\n}\r\n\r\n.accordion-table tr:last-child {\r\n border-bottom: none;\r\n background-color: var(--mediumGray);\r\n height : 50px;\r\n}\r\n\r\nspan.amount {\r\n font-weight: bold;\r\n position: absolute;\r\n right: 0;\r\n margin-right: 60px;\r\n}\r\n\r\n.accordion-header button {\r\n font-size: 0.8em;\r\n}`, "",{"version":3,"sources":["webpack://./src/js/components/accordion/accordion.css"],"names":[],"mappings":"AAAA;IACI,UAAU;IACV,YAAY;AAChB;;AAEA;IACI,gBAAgB;IAChB,iBAAiB;IACjB,oBAAoB;IACpB,kBAAkB;IAClB,iBAAiB;AACrB;;AAEA;IACI,kCAAkC;IAClC,uBAAuB;AAC3B;;AAEA;IACI,WAAW;IACX,iBAAiB;IACjB,oEAAoE;AACxE;;AAEA;IACI,iBAAiB;IACjB,mBAAmB;IACnB;AACJ;;AAEA;IACI,8BAA8B;IAC9B,gBAAgB;IAChB,kBAAkB;IAClB,iBAAiB;AACrB;;AAEA;IACI,mBAAmB;IACnB,mCAAmC;IACnC,aAAa;AACjB;;AAEA;IACI,iBAAiB;IACjB,kBAAkB;IAClB,QAAQ;IACR,kBAAkB;AACtB;;AAEA;IACI,gBAAgB;AACpB","sourcesContent":[".summary-accordion {\\r\\n width: 60%;\\r\\n margin: auto;\\r\\n}\\r\\n\\r\\n.accordion-title {\\r\\n margin-left: 20%;\\r\\n font-weight: bold;\\r\\n padding-bottom: 10px;\\r\\n padding-left: 15px;\\r\\n padding-top: 30px;\\r\\n}\\r\\n\\r\\n.accordion-button:active, .accordion-button:not(.collapsed) {\\r\\n background-color: var(--palegreen);\\r\\n color: var(--citygreen);\\r\\n}\\r\\n\\r\\n.accordion-table { \\r\\n width: 100%;\\r\\n font-size: 1.25em;\\r\\n /* border-collapse: separate; This is required for rounded corners */\\r\\n}\\r\\n\\r\\n.accordion-table td:last-child {\\r\\n text-align: right;\\r\\n padding-right: 15px;\\r\\n padding-bottom: 5px\\r\\n}\\r\\n\\r\\n.accordion-table tr {\\r\\n border-bottom: 1px solid black;\\r\\n border-top: none;\\r\\n border-right: none;\\r\\n border-left: none;\\r\\n}\\r\\n\\r\\n.accordion-table tr:last-child {\\r\\n border-bottom: none;\\r\\n background-color: var(--mediumGray);\\r\\n height : 50px;\\r\\n}\\r\\n\\r\\nspan.amount {\\r\\n font-weight: bold;\\r\\n position: absolute;\\r\\n right: 0;\\r\\n margin-right: 60px;\\r\\n}\\r\\n\\r\\n.accordion-header button {\\r\\n font-size: 0.8em;\\r\\n}"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTk1LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvYWNjb3JkaW9uL2FjY29yZGlvbi5jc3M/ZjBmOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgLnN1bW1hcnktYWNjb3JkaW9uIHtcclxuICAgIHdpZHRoOiA2MCU7XHJcbiAgICBtYXJnaW46IGF1dG87XHJcbn1cclxuXHJcbi5hY2NvcmRpb24tdGl0bGUge1xyXG4gICAgbWFyZ2luLWxlZnQ6IDIwJTtcclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgcGFkZGluZy1ib3R0b206IDEwcHg7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IDE1cHg7XHJcbiAgICBwYWRkaW5nLXRvcDogMzBweDtcclxufVxyXG5cclxuLmFjY29yZGlvbi1idXR0b246YWN0aXZlLCAuYWNjb3JkaW9uLWJ1dHRvbjpub3QoLmNvbGxhcHNlZCkge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFsZWdyZWVuKTtcclxuICAgIGNvbG9yOiB2YXIoLS1jaXR5Z3JlZW4pO1xyXG59XHJcblxyXG4uYWNjb3JkaW9uLXRhYmxlIHsgXHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGZvbnQtc2l6ZTogMS4yNWVtO1xyXG4gICAgLyogYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsgVGhpcyBpcyByZXF1aXJlZCBmb3Igcm91bmRlZCBjb3JuZXJzICovXHJcbn1cclxuXHJcbi5hY2NvcmRpb24tdGFibGUgdGQ6bGFzdC1jaGlsZCB7XHJcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcclxuICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7XHJcbiAgICBwYWRkaW5nLWJvdHRvbTogNXB4XHJcbn1cclxuXHJcbi5hY2NvcmRpb24tdGFibGUgdHIge1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO1xyXG4gICAgYm9yZGVyLXRvcDogbm9uZTtcclxuICAgIGJvcmRlci1yaWdodDogbm9uZTtcclxuICAgIGJvcmRlci1sZWZ0OiBub25lO1xyXG59XHJcblxyXG4uYWNjb3JkaW9uLXRhYmxlIHRyOmxhc3QtY2hpbGQge1xyXG4gICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1lZGl1bUdyYXkpO1xyXG4gICAgaGVpZ2h0IDogNTBweDtcclxufVxyXG5cclxuc3Bhbi5hbW91bnQge1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICByaWdodDogMDtcclxuICAgIG1hcmdpbi1yaWdodDogNjBweDtcclxufVxyXG5cclxuLmFjY29yZGlvbi1oZWFkZXIgYnV0dG9uIHtcclxuICAgIGZvbnQtc2l6ZTogMC44ZW07XHJcbn1gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3NyYy9qcy9jb21wb25lbnRzL2FjY29yZGlvbi9hY2NvcmRpb24uY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0lBQ0ksVUFBVTtJQUNWLFlBQVk7QUFDaEI7O0FBRUE7SUFDSSxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLG9CQUFvQjtJQUNwQixrQkFBa0I7SUFDbEIsaUJBQWlCO0FBQ3JCOztBQUVBO0lBQ0ksa0NBQWtDO0lBQ2xDLHVCQUF1QjtBQUMzQjs7QUFFQTtJQUNJLFdBQVc7SUFDWCxpQkFBaUI7SUFDakIsb0VBQW9FO0FBQ3hFOztBQUVBO0lBQ0ksaUJBQWlCO0lBQ2pCLG1CQUFtQjtJQUNuQjtBQUNKOztBQUVBO0lBQ0ksOEJBQThCO0lBQzlCLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsaUJBQWlCO0FBQ3JCOztBQUVBO0lBQ0ksbUJBQW1CO0lBQ25CLG1DQUFtQztJQUNuQyxhQUFhO0FBQ2pCOztBQUVBO0lBQ0ksaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixRQUFRO0lBQ1Isa0JBQWtCO0FBQ3RCOztBQUVBO0lBQ0ksZ0JBQWdCO0FBQ3BCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5zdW1tYXJ5LWFjY29yZGlvbiB7XFxyXFxuICAgIHdpZHRoOiA2MCU7XFxyXFxuICAgIG1hcmdpbjogYXV0bztcXHJcXG59XFxyXFxuXFxyXFxuLmFjY29yZGlvbi10aXRsZSB7XFxyXFxuICAgIG1hcmdpbi1sZWZ0OiAyMCU7XFxyXFxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcclxcbiAgICBwYWRkaW5nLWJvdHRvbTogMTBweDtcXHJcXG4gICAgcGFkZGluZy1sZWZ0OiAxNXB4O1xcclxcbiAgICBwYWRkaW5nLXRvcDogMzBweDtcXHJcXG59XFxyXFxuXFxyXFxuLmFjY29yZGlvbi1idXR0b246YWN0aXZlLCAuYWNjb3JkaW9uLWJ1dHRvbjpub3QoLmNvbGxhcHNlZCkge1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYWxlZ3JlZW4pO1xcclxcbiAgICBjb2xvcjogdmFyKC0tY2l0eWdyZWVuKTtcXHJcXG59XFxyXFxuXFxyXFxuLmFjY29yZGlvbi10YWJsZSB7IFxcclxcbiAgICB3aWR0aDogMTAwJTtcXHJcXG4gICAgZm9udC1zaXplOiAxLjI1ZW07XFxyXFxuICAgIC8qIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7IFRoaXMgaXMgcmVxdWlyZWQgZm9yIHJvdW5kZWQgY29ybmVycyAqL1xcclxcbn1cXHJcXG5cXHJcXG4uYWNjb3JkaW9uLXRhYmxlIHRkOmxhc3QtY2hpbGQge1xcclxcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcXHJcXG4gICAgcGFkZGluZy1yaWdodDogMTVweDtcXHJcXG4gICAgcGFkZGluZy1ib3R0b206IDVweFxcclxcbn1cXHJcXG5cXHJcXG4uYWNjb3JkaW9uLXRhYmxlIHRyIHtcXHJcXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO1xcclxcbiAgICBib3JkZXItdG9wOiBub25lO1xcclxcbiAgICBib3JkZXItcmlnaHQ6IG5vbmU7XFxyXFxuICAgIGJvcmRlci1sZWZ0OiBub25lO1xcclxcbn1cXHJcXG5cXHJcXG4uYWNjb3JkaW9uLXRhYmxlIHRyOmxhc3QtY2hpbGQge1xcclxcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZWRpdW1HcmF5KTtcXHJcXG4gICAgaGVpZ2h0IDogNTBweDtcXHJcXG59XFxyXFxuXFxyXFxuc3Bhbi5hbW91bnQge1xcclxcbiAgICBmb250LXdlaWdodDogYm9sZDtcXHJcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgICByaWdodDogMDtcXHJcXG4gICAgbWFyZ2luLXJpZ2h0OiA2MHB4O1xcclxcbn1cXHJcXG5cXHJcXG4uYWNjb3JkaW9uLWhlYWRlciBidXR0b24ge1xcclxcbiAgICBmb250LXNpemU6IDAuOGVtO1xcclxcbn1cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///995\n')},9:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `body {\r\n background-color: var(--lightGray);\r\n margin: 0;\r\n}`, "",{"version":3,"sources":["webpack://./src/js/components/body/body.css"],"names":[],"mappings":"AAAA;IACI,kCAAkC;IAClC,SAAS;AACb","sourcesContent":["body {\\r\\n background-color: var(--lightGray);\\r\\n margin: 0;\\r\\n}"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy9ib2R5L2JvZHkuY3NzPzM2ZTAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYGJvZHkge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbGlnaHRHcmF5KTtcclxuICAgIG1hcmdpbjogMDtcclxufWAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL2pzL2NvbXBvbmVudHMvYm9keS9ib2R5LmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtJQUNJLGtDQUFrQztJQUNsQyxTQUFTO0FBQ2JcIixcInNvdXJjZXNDb250ZW50XCI6W1wiYm9keSB7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWxpZ2h0R3JheSk7XFxyXFxuICAgIG1hcmdpbjogMDtcXHJcXG59XCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9\n')},39:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `#file-input {\r\n margin-left: 40%;\r\n}`, "",{"version":3,"sources":["webpack://./src/js/components/file_upload/file_upload.css"],"names":[],"mappings":"AAAA;IACI,gBAAgB;AACpB","sourcesContent":["#file-input {\\r\\n margin-left: 40%;\\r\\n}"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL2ZpbGVfdXBsb2FkL2ZpbGVfdXBsb2FkLmNzcz9jNTU4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAjZmlsZS1pbnB1dCB7XHJcbiAgICBtYXJnaW4tbGVmdDogNDAlO1xyXG59YCwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zcmMvanMvY29tcG9uZW50cy9maWxlX3VwbG9hZC9maWxlX3VwbG9hZC5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7SUFDSSxnQkFBZ0I7QUFDcEJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiI2ZpbGUtaW5wdXQge1xcclxcbiAgICBtYXJnaW4tbGVmdDogNDAlO1xcclxcbn1cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///39\n')},109:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `textarea {height: 100px; width: 100%;}\r\n\r\ntextarea, input {\r\n margin-bottom: 20px;\r\n}\r\n\r\n.btn-submit {\r\n margin-top: 20px;\r\n width: 60%;\r\n margin-left: 20%;\r\n background-color: var(--spiritgreen);\r\n}`, "",{"version":3,"sources":["webpack://./src/js/components/form/form.css"],"names":[],"mappings":"AAAA,UAAU,aAAa,EAAE,WAAW,CAAC;;AAErC;IACI,mBAAmB;AACvB;;AAEA;IACI,gBAAgB;IAChB,UAAU;IACV,gBAAgB;IAChB,oCAAoC;AACxC","sourcesContent":["textarea {height: 100px; width: 100%;}\\r\\n\\r\\ntextarea, input {\\r\\n margin-bottom: 20px;\\r\\n}\\r\\n\\r\\n.btn-submit {\\r\\n margin-top: 20px;\\r\\n width: 60%;\\r\\n margin-left: 20%;\\r\\n background-color: var(--spiritgreen);\\r\\n}"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA5LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy9mb3JtL2Zvcm0uY3NzP2UzOGEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYHRleHRhcmVhIHtoZWlnaHQ6IDEwMHB4OyB3aWR0aDogMTAwJTt9XHJcblxyXG50ZXh0YXJlYSwgaW5wdXQge1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcclxufVxyXG5cclxuLmJ0bi1zdWJtaXQge1xyXG4gICAgbWFyZ2luLXRvcDogMjBweDtcclxuICAgIHdpZHRoOiA2MCU7XHJcbiAgICBtYXJnaW4tbGVmdDogMjAlO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc3Bpcml0Z3JlZW4pO1xyXG59YCwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zcmMvanMvY29tcG9uZW50cy9mb3JtL2Zvcm0uY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBLFVBQVUsYUFBYSxFQUFFLFdBQVcsQ0FBQzs7QUFFckM7SUFDSSxtQkFBbUI7QUFDdkI7O0FBRUE7SUFDSSxnQkFBZ0I7SUFDaEIsVUFBVTtJQUNWLGdCQUFnQjtJQUNoQixvQ0FBb0M7QUFDeENcIixcInNvdXJjZXNDb250ZW50XCI6W1widGV4dGFyZWEge2hlaWdodDogMTAwcHg7IHdpZHRoOiAxMDAlO31cXHJcXG5cXHJcXG50ZXh0YXJlYSwgaW5wdXQge1xcclxcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xcclxcbn1cXHJcXG5cXHJcXG4uYnRuLXN1Ym1pdCB7XFxyXFxuICAgIG1hcmdpbi10b3A6IDIwcHg7XFxyXFxuICAgIHdpZHRoOiA2MCU7XFxyXFxuICAgIG1hcmdpbi1sZWZ0OiAyMCU7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNwaXJpdGdyZWVuKTtcXHJcXG59XCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///109\n')},107:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\r\nh1 {\r\n text-align: center;\r\n}\r\n\r\nh2 {\r\n color: var(--darkGray);\r\n text-align: center;\r\n}\r\n\r\nheader {\r\n align-items: center;\r\n background-color: white;\r\n padding: 5px;\r\n border-bottom: 1px solid var(--citygreen); \r\n /* border: 1px solid var(--citygreen); */\r\n height: var(--header-height);\r\n /* width: calc(100vw - var(--sidebar-width)); */\r\n padding-left: 20px;\r\n}\r\n\r\n/* Logo styling */\r\n#logo {\r\n height: 50px; /* Or your desired size */\r\n margin-right: 20px; /* Optional: space between logo and title */\r\n margin-bottom: -50px;\r\n margin-top: 20px;\r\n}`, "",{"version":3,"sources":["webpack://./src/js/components/header/header.css"],"names":[],"mappings":";AACA;IACI,kBAAkB;AACtB;;AAEA;IACI,sBAAsB;IACtB,kBAAkB;AACtB;;AAEA;IACI,mBAAmB;IACnB,uBAAuB;IACvB,YAAY;IACZ,yCAAyC;IACzC,yCAAyC;IACzC,4BAA4B;IAC5B,+CAA+C;IAC/C,kBAAkB;AACtB;;AAEA,iBAAiB;AACjB;IACI,YAAY,EAAE,yBAAyB;IACvC,kBAAkB,EAAE,2CAA2C;IAC/D,oBAAoB;IACpB,gBAAgB;AACpB","sourcesContent":["\\r\\nh1 {\\r\\n text-align: center;\\r\\n}\\r\\n\\r\\nh2 {\\r\\n color: var(--darkGray);\\r\\n text-align: center;\\r\\n}\\r\\n\\r\\nheader {\\r\\n align-items: center;\\r\\n background-color: white;\\r\\n padding: 5px;\\r\\n border-bottom: 1px solid var(--citygreen); \\r\\n /* border: 1px solid var(--citygreen); */\\r\\n height: var(--header-height);\\r\\n /* width: calc(100vw - var(--sidebar-width)); */\\r\\n padding-left: 20px;\\r\\n}\\r\\n\\r\\n/* Logo styling */\\r\\n#logo {\\r\\n height: 50px; /* Or your desired size */\\r\\n margin-right: 20px; /* Optional: space between logo and title */\\r\\n margin-bottom: -50px;\\r\\n margin-top: 20px;\\r\\n}"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA3LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL3NyYy9qcy9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIuY3NzPzJmNGMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYFxyXG5oMSB7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbn1cclxuXHJcbmgyIHtcclxuICAgIGNvbG9yOiB2YXIoLS1kYXJrR3JheSk7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbn1cclxuXHJcbmhlYWRlciB7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XHJcbiAgICBwYWRkaW5nOiA1cHg7XHJcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY2l0eWdyZWVuKTsgXHJcbiAgICAvKiBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jaXR5Z3JlZW4pOyAgKi9cclxuICAgIGhlaWdodDogdmFyKC0taGVhZGVyLWhlaWdodCk7XHJcbiAgICAvKiB3aWR0aDogY2FsYygxMDB2dyAtIHZhcigtLXNpZGViYXItd2lkdGgpKTsgKi9cclxuICAgIHBhZGRpbmctbGVmdDogMjBweDtcclxufVxyXG5cclxuLyogTG9nbyBzdHlsaW5nICovXHJcbiNsb2dvIHtcclxuICAgIGhlaWdodDogNTBweDsgLyogT3IgeW91ciBkZXNpcmVkIHNpemUgKi9cclxuICAgIG1hcmdpbi1yaWdodDogMjBweDsgLyogT3B0aW9uYWw6IHNwYWNlIGJldHdlZW4gbG9nbyBhbmQgdGl0bGUgKi9cclxuICAgIG1hcmdpbi1ib3R0b206IC01MHB4O1xyXG4gICAgbWFyZ2luLXRvcDogMjBweDtcclxufWAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL2pzL2NvbXBvbmVudHMvaGVhZGVyL2hlYWRlci5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIjtBQUNBO0lBQ0ksa0JBQWtCO0FBQ3RCOztBQUVBO0lBQ0ksc0JBQXNCO0lBQ3RCLGtCQUFrQjtBQUN0Qjs7QUFFQTtJQUNJLG1CQUFtQjtJQUNuQix1QkFBdUI7SUFDdkIsWUFBWTtJQUNaLHlDQUF5QztJQUN6Qyx5Q0FBeUM7SUFDekMsNEJBQTRCO0lBQzVCLCtDQUErQztJQUMvQyxrQkFBa0I7QUFDdEI7O0FBRUEsaUJBQWlCO0FBQ2pCO0lBQ0ksWUFBWSxFQUFFLHlCQUF5QjtJQUN2QyxrQkFBa0IsRUFBRSwyQ0FBMkM7SUFDL0Qsb0JBQW9CO0lBQ3BCLGdCQUFnQjtBQUNwQlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXHJcXG5oMSB7XFxyXFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXHJcXG59XFxyXFxuXFxyXFxuaDIge1xcclxcbiAgICBjb2xvcjogdmFyKC0tZGFya0dyYXkpO1xcclxcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxyXFxufVxcclxcblxcclxcbmhlYWRlciB7XFxyXFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xcclxcbiAgICBwYWRkaW5nOiA1cHg7XFxyXFxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jaXR5Z3JlZW4pOyBcXHJcXG4gICAgLyogYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY2l0eWdyZWVuKTsgICovXFxyXFxuICAgIGhlaWdodDogdmFyKC0taGVhZGVyLWhlaWdodCk7XFxyXFxuICAgIC8qIHdpZHRoOiBjYWxjKDEwMHZ3IC0gdmFyKC0tc2lkZWJhci13aWR0aCkpOyAqL1xcclxcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XFxyXFxufVxcclxcblxcclxcbi8qIExvZ28gc3R5bGluZyAqL1xcclxcbiNsb2dvIHtcXHJcXG4gICAgaGVpZ2h0OiA1MHB4OyAvKiBPciB5b3VyIGRlc2lyZWQgc2l6ZSAqL1xcclxcbiAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7IC8qIE9wdGlvbmFsOiBzcGFjZSBiZXR3ZWVuIGxvZ28gYW5kIHRpdGxlICovXFxyXFxuICAgIG1hcmdpbi1ib3R0b206IC01MHB4O1xcclxcbiAgICBtYXJnaW4tdG9wOiAyMHB4O1xcclxcbn1cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///107\n')},95:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, ``, "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvbW9kYWwvbW9kYWwuY3NzPzZhY2QiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYGAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W10sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIlwiLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///95\n')},595:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `#nav-btns {\r\n margin: 20px;\r\n text-align: center;\r\n /* margin-top: 100px; */\r\n /* position: absolute; or \'absolute\' depending on use-case */\r\n /* top: 100px; Distance from the top of the viewport or the closest positioned ancestor */\r\n}\r\n\r\n#btn-next, #btn-last {\r\n background-color: var(--darkGray);\r\n}\r\n\r\n#btn-next:hover, #btn-last:hover {\r\n background-color: var(--yellow);\r\n color: var(--darkGray);\r\n}\r\n\r\n/* Add style for when you cannot click the next button */\r\n#btn-next.disabled, #btn-last.disabled,\r\n#btn-next.disabled:hover, #btn-last.disabled:hover {\r\n background-color: gray;\r\n color: white;\r\n pointer-events: none;\r\n}`, "",{"version":3,"sources":["webpack://./src/js/components/nav_buttons/nav_buttons.css"],"names":[],"mappings":"AAAA;IACI,YAAY;IACZ,kBAAkB;IAClB,uBAAuB;IACvB,4DAA4D;IAC5D,yFAAyF;AAC7F;;AAEA;IACI,iCAAiC;AACrC;;AAEA;IACI,+BAA+B;IAC/B,sBAAsB;AAC1B;;AAEA,wDAAwD;AACxD;;IAEI,sBAAsB;IACtB,YAAY;IACZ,oBAAoB;AACxB","sourcesContent":["#nav-btns {\\r\\n margin: 20px;\\r\\n text-align: center;\\r\\n /* margin-top: 100px; */\\r\\n /* position: absolute; or \'absolute\' depending on use-case */\\r\\n /* top: 100px; Distance from the top of the viewport or the closest positioned ancestor */\\r\\n}\\r\\n\\r\\n#btn-next, #btn-last {\\r\\n background-color: var(--darkGray);\\r\\n}\\r\\n\\r\\n#btn-next:hover, #btn-last:hover {\\r\\n background-color: var(--yellow);\\r\\n color: var(--darkGray);\\r\\n}\\r\\n\\r\\n/* Add style for when you cannot click the next button */\\r\\n#btn-next.disabled, #btn-last.disabled,\\r\\n#btn-next.disabled:hover, #btn-last.disabled:hover {\\r\\n background-color: gray;\\r\\n color: white;\\r\\n pointer-events: none;\\r\\n}"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTk1LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy9uYXZfYnV0dG9ucy9uYXZfYnV0dG9ucy5jc3M/OTA1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgI25hdi1idG5zIHtcclxuICAgIG1hcmdpbjogMjBweDtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIC8qIG1hcmdpbi10b3A6IDEwMHB4OyAqL1xyXG4gICAgLyogcG9zaXRpb246IGFic29sdXRlOyBvciAnYWJzb2x1dGUnIGRlcGVuZGluZyBvbiB1c2UtY2FzZSAqL1xyXG4gICAgLyogdG9wOiAxMDBweDsgRGlzdGFuY2UgZnJvbSB0aGUgdG9wIG9mIHRoZSB2aWV3cG9ydCBvciB0aGUgY2xvc2VzdCBwb3NpdGlvbmVkIGFuY2VzdG9yICovXHJcbn1cclxuXHJcbiNidG4tbmV4dCwgI2J0bi1sYXN0IHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRhcmtHcmF5KTtcclxufVxyXG5cclxuI2J0bi1uZXh0OmhvdmVyLCAjYnRuLWxhc3Q6aG92ZXIge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0teWVsbG93KTtcclxuICAgIGNvbG9yOiB2YXIoLS1kYXJrR3JheSk7XHJcbn1cclxuXHJcbi8qIEFkZCBzdHlsZSBmb3Igd2hlbiB5b3UgY2Fubm90IGNsaWNrIHRoZSBuZXh0IGJ1dHRvbiAqL1xyXG4jYnRuLW5leHQuZGlzYWJsZWQsICNidG4tbGFzdC5kaXNhYmxlZCxcclxuI2J0bi1uZXh0LmRpc2FibGVkOmhvdmVyLCAjYnRuLWxhc3QuZGlzYWJsZWQ6aG92ZXIge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogZ3JheTtcclxuICAgIGNvbG9yOiB3aGl0ZTtcclxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xyXG59YCwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zcmMvanMvY29tcG9uZW50cy9uYXZfYnV0dG9ucy9uYXZfYnV0dG9ucy5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7SUFDSSxZQUFZO0lBQ1osa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2Qiw0REFBNEQ7SUFDNUQseUZBQXlGO0FBQzdGOztBQUVBO0lBQ0ksaUNBQWlDO0FBQ3JDOztBQUVBO0lBQ0ksK0JBQStCO0lBQy9CLHNCQUFzQjtBQUMxQjs7QUFFQSx3REFBd0Q7QUFDeEQ7O0lBRUksc0JBQXNCO0lBQ3RCLFlBQVk7SUFDWixvQkFBb0I7QUFDeEJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiI25hdi1idG5zIHtcXHJcXG4gICAgbWFyZ2luOiAyMHB4O1xcclxcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxyXFxuICAgIC8qIG1hcmdpbi10b3A6IDEwMHB4OyAqL1xcclxcbiAgICAvKiBwb3NpdGlvbjogYWJzb2x1dGU7IG9yICdhYnNvbHV0ZScgZGVwZW5kaW5nIG9uIHVzZS1jYXNlICovXFxyXFxuICAgIC8qIHRvcDogMTAwcHg7IERpc3RhbmNlIGZyb20gdGhlIHRvcCBvZiB0aGUgdmlld3BvcnQgb3IgdGhlIGNsb3Nlc3QgcG9zaXRpb25lZCBhbmNlc3RvciAqL1xcclxcbn1cXHJcXG5cXHJcXG4jYnRuLW5leHQsICNidG4tbGFzdCB7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRhcmtHcmF5KTtcXHJcXG59XFxyXFxuXFxyXFxuI2J0bi1uZXh0OmhvdmVyLCAjYnRuLWxhc3Q6aG92ZXIge1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS15ZWxsb3cpO1xcclxcbiAgICBjb2xvcjogdmFyKC0tZGFya0dyYXkpO1xcclxcbn1cXHJcXG5cXHJcXG4vKiBBZGQgc3R5bGUgZm9yIHdoZW4geW91IGNhbm5vdCBjbGljayB0aGUgbmV4dCBidXR0b24gKi9cXHJcXG4jYnRuLW5leHQuZGlzYWJsZWQsICNidG4tbGFzdC5kaXNhYmxlZCxcXHJcXG4jYnRuLW5leHQuZGlzYWJsZWQ6aG92ZXIsICNidG4tbGFzdC5kaXNhYmxlZDpob3ZlciB7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IGdyYXk7XFxyXFxuICAgIGNvbG9yOiB3aGl0ZTtcXHJcXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxyXFxufVwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///595\n')},225:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `div#prompt-div {\r\n display: none;\r\n width: 80%;\r\n margin: auto;\r\n text-align: center;\r\n}\r\n\r\nh3#prompt {\r\n text-align: center;\r\n font-size : 1.2em;\r\n}\r\n\r\n#option1, #option2 { \r\n font-size: 1.5em;\r\n border-color: var(--citygreen); \r\n border-width: 2px;\r\n background-color: var(--white);\r\n color: var(--citygreen);\r\n}\r\n\r\n#option1:hover, #option2:hover { \r\n background-color: var(--spiritgreen);\r\n color: white;\r\n}\r\n\r\n#option2.clicked, #option1.clicked {\r\n font-weight: bold;\r\n background-color: var(--spiritgreen);\r\n color: white;\r\n border-width: 3;\r\n}\r\n`, "",{"version":3,"sources":["webpack://./src/js/components/prompt/prompt.css"],"names":[],"mappings":"AAAA;IACI,aAAa;IACb,UAAU;IACV,YAAY;IACZ,kBAAkB;AACtB;;AAEA;IACI,kBAAkB;IAClB,iBAAiB;AACrB;;AAEA;IACI,gBAAgB;IAChB,8BAA8B;IAC9B,iBAAiB;IACjB,8BAA8B;IAC9B,uBAAuB;AAC3B;;AAEA;IACI,oCAAoC;IACpC,YAAY;AAChB;;AAEA;IACI,iBAAiB;IACjB,oCAAoC;IACpC,YAAY;IACZ,eAAe;AACnB","sourcesContent":["div#prompt-div {\\r\\n display: none;\\r\\n width: 80%;\\r\\n margin: auto;\\r\\n text-align: center;\\r\\n}\\r\\n\\r\\nh3#prompt {\\r\\n text-align: center;\\r\\n font-size : 1.2em;\\r\\n}\\r\\n\\r\\n#option1, #option2 { \\r\\n font-size: 1.5em;\\r\\n border-color: var(--citygreen); \\r\\n border-width: 2px;\\r\\n background-color: var(--white);\\r\\n color: var(--citygreen);\\r\\n}\\r\\n\\r\\n#option1:hover, #option2:hover { \\r\\n background-color: var(--spiritgreen);\\r\\n color: white;\\r\\n}\\r\\n\\r\\n#option2.clicked, #option1.clicked {\\r\\n font-weight: bold;\\r\\n background-color: var(--spiritgreen);\\r\\n color: white;\\r\\n border-width: 3;\\r\\n}\\r\\n"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjI1LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvcHJvbXB0L3Byb21wdC5jc3M/ZTY5OSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgZGl2I3Byb21wdC1kaXYge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxuICAgIHdpZHRoOiA4MCU7XHJcbiAgICBtYXJnaW46IGF1dG87XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbn1cclxuXHJcbmgzI3Byb21wdCB7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBmb250LXNpemUgOiAxLjJlbTtcclxufVxyXG5cclxuI29wdGlvbjEsICNvcHRpb24yIHsgXHJcbiAgICBmb250LXNpemU6IDEuNWVtO1xyXG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jaXR5Z3JlZW4pOyBcclxuICAgIGJvcmRlci13aWR0aDogMnB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xyXG4gICAgY29sb3I6IHZhcigtLWNpdHlncmVlbik7XHJcbn1cclxuXHJcbiNvcHRpb24xOmhvdmVyLCAjb3B0aW9uMjpob3ZlciB7IFxyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc3Bpcml0Z3JlZW4pO1xyXG4gICAgY29sb3I6IHdoaXRlO1xyXG59XHJcblxyXG4jb3B0aW9uMi5jbGlja2VkLCAjb3B0aW9uMS5jbGlja2VkIHtcclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc3Bpcml0Z3JlZW4pO1xyXG4gICAgY29sb3I6IHdoaXRlO1xyXG4gICAgYm9yZGVyLXdpZHRoOiAzO1xyXG59XHJcbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL2pzL2NvbXBvbmVudHMvcHJvbXB0L3Byb21wdC5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7SUFDSSxhQUFhO0lBQ2IsVUFBVTtJQUNWLFlBQVk7SUFDWixrQkFBa0I7QUFDdEI7O0FBRUE7SUFDSSxrQkFBa0I7SUFDbEIsaUJBQWlCO0FBQ3JCOztBQUVBO0lBQ0ksZ0JBQWdCO0lBQ2hCLDhCQUE4QjtJQUM5QixpQkFBaUI7SUFDakIsOEJBQThCO0lBQzlCLHVCQUF1QjtBQUMzQjs7QUFFQTtJQUNJLG9DQUFvQztJQUNwQyxZQUFZO0FBQ2hCOztBQUVBO0lBQ0ksaUJBQWlCO0lBQ2pCLG9DQUFvQztJQUNwQyxZQUFZO0lBQ1osZUFBZTtBQUNuQlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJkaXYjcHJvbXB0LWRpdiB7XFxyXFxuICAgIGRpc3BsYXk6IG5vbmU7XFxyXFxuICAgIHdpZHRoOiA4MCU7XFxyXFxuICAgIG1hcmdpbjogYXV0bztcXHJcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcclxcbn1cXHJcXG5cXHJcXG5oMyNwcm9tcHQge1xcclxcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxyXFxuICAgIGZvbnQtc2l6ZSA6IDEuMmVtO1xcclxcbn1cXHJcXG5cXHJcXG4jb3B0aW9uMSwgI29wdGlvbjIgeyBcXHJcXG4gICAgZm9udC1zaXplOiAxLjVlbTtcXHJcXG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jaXR5Z3JlZW4pOyBcXHJcXG4gICAgYm9yZGVyLXdpZHRoOiAycHg7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXHJcXG4gICAgY29sb3I6IHZhcigtLWNpdHlncmVlbik7XFxyXFxufVxcclxcblxcclxcbiNvcHRpb24xOmhvdmVyLCAjb3B0aW9uMjpob3ZlciB7IFxcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zcGlyaXRncmVlbik7XFxyXFxuICAgIGNvbG9yOiB3aGl0ZTtcXHJcXG59XFxyXFxuXFxyXFxuI29wdGlvbjIuY2xpY2tlZCwgI29wdGlvbjEuY2xpY2tlZCB7XFxyXFxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zcGlyaXRncmVlbik7XFxyXFxuICAgIGNvbG9yOiB3aGl0ZTtcXHJcXG4gICAgYm9yZGVyLXdpZHRoOiAzO1xcclxcbn1cXHJcXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///225\n')},263:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `#sidebar-panel {\r\n background-color: lightgrey; \r\n /* min-height: 100vh; Full height of viewport */\r\n }\r\n\r\n#supp-total .stat {\r\n color: var(--yellow);\r\n}\r\n\r\n.stat {\r\n font-weight: bold;\r\n}\r\n\r\n#sidebar-panel {\r\n height: 100%; /* Full height of the viewport */\r\n position: fixed; /* Fixed Sidebar (stay in place on scroll) */\r\n z-index: 1; /* Stay on top */\r\n top: 0; /* Stay at the top */\r\n right: 0; /* Sidebar appears on the left */\r\n background-color: #FFFFFF; /* White background color */\r\n overflow-x: hidden; /* Disable horizontal scroll */\r\n padding: 20px;\r\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); /* Add shadow for some depth */\r\n border-right: 2px solid #DDDDDD; /* Right border */\r\n border-radius: 0px 0px 0px 15px; /* Rounded corners on the left */\r\n /* margin-top: var(--header-height); */\r\n width: var(--sidebar-width);\r\n margin: 0px;\r\n }\r\n \r\n.sidebar a {\r\n padding: 10px 15px;\r\n text-decoration: none;\r\n font-size: 18px;\r\n color: #818181;\r\n display: block;\r\n transition: 0.3s;\r\n}\r\n\r\n#sidebar-title {\r\n color: var(--darkGray);\r\n font-weight: bold;\r\n border-bottom: 1px solid var(--citygreen);\r\n}`, "",{"version":3,"sources":["webpack://./src/js/components/sidebar/sidebar.css"],"names":[],"mappings":"AAAA;IACI,2BAA2B;IAC3B,+CAA+C;EACjD;;AAEF;IACI,oBAAoB;AACxB;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,YAAY,EAAE,gCAAgC;IAC9C,eAAe,EAAE,4CAA4C;IAC7D,UAAU,EAAE,gBAAgB;IAC5B,MAAM,EAAE,oBAAoB;IAC5B,QAAQ,EAAE,gCAAgC;IAC1C,yBAAyB,EAAE,2BAA2B;IACtD,kBAAkB,EAAE,8BAA8B;IAClD,aAAa;IACb,wCAAwC,EAAE,8BAA8B;IACxE,+BAA+B,EAAE,iBAAiB;IAClD,+BAA+B,EAAE,gCAAgC;IACjE,sCAAsC;IACtC,2BAA2B;IAC3B,WAAW;EACb;;AAEF;IACI,kBAAkB;IAClB,qBAAqB;IACrB,eAAe;IACf,cAAc;IACd,cAAc;IACd,gBAAgB;AACpB;;AAEA;EACE,sBAAsB;EACtB,iBAAiB;EACjB,yCAAyC;AAC3C","sourcesContent":["#sidebar-panel {\\r\\n background-color: lightgrey; \\r\\n /* min-height: 100vh; Full height of viewport */\\r\\n }\\r\\n\\r\\n#supp-total .stat {\\r\\n color: var(--yellow);\\r\\n}\\r\\n\\r\\n.stat {\\r\\n font-weight: bold;\\r\\n}\\r\\n\\r\\n#sidebar-panel {\\r\\n height: 100%; /* Full height of the viewport */\\r\\n position: fixed; /* Fixed Sidebar (stay in place on scroll) */\\r\\n z-index: 1; /* Stay on top */\\r\\n top: 0; /* Stay at the top */\\r\\n right: 0; /* Sidebar appears on the left */\\r\\n background-color: #FFFFFF; /* White background color */\\r\\n overflow-x: hidden; /* Disable horizontal scroll */\\r\\n padding: 20px;\\r\\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); /* Add shadow for some depth */\\r\\n border-right: 2px solid #DDDDDD; /* Right border */\\r\\n border-radius: 0px 0px 0px 15px; /* Rounded corners on the left */\\r\\n /* margin-top: var(--header-height); */\\r\\n width: var(--sidebar-width);\\r\\n margin: 0px;\\r\\n }\\r\\n \\r\\n.sidebar a {\\r\\n padding: 10px 15px;\\r\\n text-decoration: none;\\r\\n font-size: 18px;\\r\\n color: #818181;\\r\\n display: block;\\r\\n transition: 0.3s;\\r\\n}\\r\\n\\r\\n#sidebar-title {\\r\\n color: var(--darkGray);\\r\\n font-weight: bold;\\r\\n border-bottom: 1px solid var(--citygreen);\\r\\n}"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vc3JjL2pzL2NvbXBvbmVudHMvc2lkZWJhci9zaWRlYmFyLmNzcz8zYjAzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAjc2lkZWJhci1wYW5lbCB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGdyZXk7ICBcclxuICAgIC8qIG1pbi1oZWlnaHQ6IDEwMHZoOyBGdWxsIGhlaWdodCBvZiB2aWV3cG9ydCAqL1xyXG4gIH1cclxuXHJcbiNzdXBwLXRvdGFsIC5zdGF0IHtcclxuICAgIGNvbG9yOiB2YXIoLS15ZWxsb3cpO1xyXG59XHJcblxyXG4uc3RhdCB7XHJcbiAgICBmb250LXdlaWdodDogYm9sZDtcclxufVxyXG5cclxuI3NpZGViYXItcGFuZWwge1xyXG4gICAgaGVpZ2h0OiAxMDAlOyAvKiBGdWxsIGhlaWdodCBvZiB0aGUgdmlld3BvcnQgKi9cclxuICAgIHBvc2l0aW9uOiBmaXhlZDsgLyogRml4ZWQgU2lkZWJhciAoc3RheSBpbiBwbGFjZSBvbiBzY3JvbGwpICovXHJcbiAgICB6LWluZGV4OiAxOyAvKiBTdGF5IG9uIHRvcCAqL1xyXG4gICAgdG9wOiAwOyAvKiBTdGF5IGF0IHRoZSB0b3AgKi9cclxuICAgIHJpZ2h0OiAwOyAvKiBTaWRlYmFyIGFwcGVhcnMgb24gdGhlIGxlZnQgKi9cclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7IC8qIFdoaXRlIGJhY2tncm91bmQgY29sb3IgKi9cclxuICAgIG92ZXJmbG93LXg6IGhpZGRlbjsgLyogRGlzYWJsZSBob3Jpem9udGFsIHNjcm9sbCAqL1xyXG4gICAgcGFkZGluZzogMjBweDtcclxuICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMSk7IC8qIEFkZCBzaGFkb3cgZm9yIHNvbWUgZGVwdGggKi9cclxuICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICNEREREREQ7IC8qIFJpZ2h0IGJvcmRlciAqL1xyXG4gICAgYm9yZGVyLXJhZGl1czogMHB4IDBweCAwcHggMTVweDsgLyogUm91bmRlZCBjb3JuZXJzIG9uIHRoZSBsZWZ0ICovXHJcbiAgICAvKiBtYXJnaW4tdG9wOiB2YXIoLS1oZWFkZXItaGVpZ2h0KTsgKi9cclxuICAgIHdpZHRoOiB2YXIoLS1zaWRlYmFyLXdpZHRoKTtcclxuICAgIG1hcmdpbjogMHB4O1xyXG4gIH1cclxuICBcclxuLnNpZGViYXIgYSB7XHJcbiAgICBwYWRkaW5nOiAxMHB4IDE1cHg7XHJcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICBmb250LXNpemU6IDE4cHg7XHJcbiAgICBjb2xvcjogIzgxODE4MTtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgdHJhbnNpdGlvbjogMC4zcztcclxufVxyXG5cclxuI3NpZGViYXItdGl0bGUge1xyXG4gIGNvbG9yOiB2YXIoLS1kYXJrR3JheSk7XHJcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNpdHlncmVlbik7XHJcbn1gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3NyYy9qcy9jb21wb25lbnRzL3NpZGViYXIvc2lkZWJhci5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7SUFDSSwyQkFBMkI7SUFDM0IsK0NBQStDO0VBQ2pEOztBQUVGO0lBQ0ksb0JBQW9CO0FBQ3hCOztBQUVBO0lBQ0ksaUJBQWlCO0FBQ3JCOztBQUVBO0lBQ0ksWUFBWSxFQUFFLGdDQUFnQztJQUM5QyxlQUFlLEVBQUUsNENBQTRDO0lBQzdELFVBQVUsRUFBRSxnQkFBZ0I7SUFDNUIsTUFBTSxFQUFFLG9CQUFvQjtJQUM1QixRQUFRLEVBQUUsZ0NBQWdDO0lBQzFDLHlCQUF5QixFQUFFLDJCQUEyQjtJQUN0RCxrQkFBa0IsRUFBRSw4QkFBOEI7SUFDbEQsYUFBYTtJQUNiLHdDQUF3QyxFQUFFLDhCQUE4QjtJQUN4RSwrQkFBK0IsRUFBRSxpQkFBaUI7SUFDbEQsK0JBQStCLEVBQUUsZ0NBQWdDO0lBQ2pFLHNDQUFzQztJQUN0QywyQkFBMkI7SUFDM0IsV0FBVztFQUNiOztBQUVGO0lBQ0ksa0JBQWtCO0lBQ2xCLHFCQUFxQjtJQUNyQixlQUFlO0lBQ2YsY0FBYztJQUNkLGNBQWM7SUFDZCxnQkFBZ0I7QUFDcEI7O0FBRUE7RUFDRSxzQkFBc0I7RUFDdEIsaUJBQWlCO0VBQ2pCLHlDQUF5QztBQUMzQ1wiLFwic291cmNlc0NvbnRlbnRcIjpbXCIjc2lkZWJhci1wYW5lbCB7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0Z3JleTsgIFxcclxcbiAgICAvKiBtaW4taGVpZ2h0OiAxMDB2aDsgRnVsbCBoZWlnaHQgb2Ygdmlld3BvcnQgKi9cXHJcXG4gIH1cXHJcXG5cXHJcXG4jc3VwcC10b3RhbCAuc3RhdCB7XFxyXFxuICAgIGNvbG9yOiB2YXIoLS15ZWxsb3cpO1xcclxcbn1cXHJcXG5cXHJcXG4uc3RhdCB7XFxyXFxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcclxcbn1cXHJcXG5cXHJcXG4jc2lkZWJhci1wYW5lbCB7XFxyXFxuICAgIGhlaWdodDogMTAwJTsgLyogRnVsbCBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0ICovXFxyXFxuICAgIHBvc2l0aW9uOiBmaXhlZDsgLyogRml4ZWQgU2lkZWJhciAoc3RheSBpbiBwbGFjZSBvbiBzY3JvbGwpICovXFxyXFxuICAgIHotaW5kZXg6IDE7IC8qIFN0YXkgb24gdG9wICovXFxyXFxuICAgIHRvcDogMDsgLyogU3RheSBhdCB0aGUgdG9wICovXFxyXFxuICAgIHJpZ2h0OiAwOyAvKiBTaWRlYmFyIGFwcGVhcnMgb24gdGhlIGxlZnQgKi9cXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsgLyogV2hpdGUgYmFja2dyb3VuZCBjb2xvciAqL1xcclxcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47IC8qIERpc2FibGUgaG9yaXpvbnRhbCBzY3JvbGwgKi9cXHJcXG4gICAgcGFkZGluZzogMjBweDtcXHJcXG4gICAgYm94LXNoYWRvdzogMCAycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xKTsgLyogQWRkIHNoYWRvdyBmb3Igc29tZSBkZXB0aCAqL1xcclxcbiAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjREREREREOyAvKiBSaWdodCBib3JkZXIgKi9cXHJcXG4gICAgYm9yZGVyLXJhZGl1czogMHB4IDBweCAwcHggMTVweDsgLyogUm91bmRlZCBjb3JuZXJzIG9uIHRoZSBsZWZ0ICovXFxyXFxuICAgIC8qIG1hcmdpbi10b3A6IHZhcigtLWhlYWRlci1oZWlnaHQpOyAqL1xcclxcbiAgICB3aWR0aDogdmFyKC0tc2lkZWJhci13aWR0aCk7XFxyXFxuICAgIG1hcmdpbjogMHB4O1xcclxcbiAgfVxcclxcbiAgXFxyXFxuLnNpZGViYXIgYSB7XFxyXFxuICAgIHBhZGRpbmc6IDEwcHggMTVweDtcXHJcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcclxcbiAgICBmb250LXNpemU6IDE4cHg7XFxyXFxuICAgIGNvbG9yOiAjODE4MTgxO1xcclxcbiAgICBkaXNwbGF5OiBibG9jaztcXHJcXG4gICAgdHJhbnNpdGlvbjogMC4zcztcXHJcXG59XFxyXFxuXFxyXFxuI3NpZGViYXItdGl0bGUge1xcclxcbiAgY29sb3I6IHZhcigtLWRhcmtHcmF5KTtcXHJcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcclxcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNpdHlncmVlbik7XFxyXFxufVwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///263\n')},279:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `#main-table {\r\n font-size: calc(0.6vw + 0.5em);\r\n margin: auto;\r\n /* width: 100%; */\r\n}\r\n\r\n#main-table thead > tr > th {\r\n text-align: left;\r\n background-color: var(--darkGray);\r\n color: white;\r\n}\r\n\r\nth {\r\n background-color: var(--lightGray);\r\n}\r\n\r\ntr {\r\n border-width: 2px;\r\n background-color: white;\r\n}\r\n\r\ntr td {\r\n border-bottom: 1px solid black;\r\n}\r\n\r\n/* Default to hidden columns */\r\n\r\n#main-table tbody > tr > td {\r\n display : none;\r\n}\r\n#main-table thead > tr > th {\r\n display : none;\r\n}\r\n\r\n/* textbox width in table */\r\ninput {\r\n width: 100%;\r\n}\r\n\r\nselect {\r\n max-width: 100px;\r\n}\r\n\r\ndiv.table-container {\r\n overflow-x: auto; \r\n overflow-y: auto;\r\n margin-left: max(65px, 7vh);\r\n margin-right: max(65px, 7vh);\r\n /* max-width: calc(100vw - var(--sidebar-width)); */\r\n /* margin: auto; */\r\n max-height: max(350px, 6vh);\r\n /* min-height: 350px; */\r\n\r\n}\r\n \r\n/* Buttons */\r\n\r\n/* Add new row button */\r\n.btn-add { \r\n background-color: var(--spiritgreen);\r\n margin-top: 20px;\r\n display: none;\r\n}\r\n\r\n.btn-delete {\r\n background-color: var(--orange);\r\n}\r\n\r\n#add-btn-div {\r\n display: flex;\r\n justify-content: center; /* Aligns horizontally */\r\n align-items: center; /* Aligns vertically */\r\n width: 100%;\r\n}\r\n\r\n.btn-edit {\r\n background-color: var(--spiritgreen);\r\n}\r\n\r\n.active-editing, .selected {\r\n background-color: var(--palegreen);\r\n}\r\n\r\n.selected { \r\n font-weight: bold;\r\n}\r\n\r\n.btn-confirm {\r\n display: none;\r\n}\r\n\r\n.confirm-btn:hover {\r\n background-color: var(--green);\r\n}\r\n\r\n.hover-effect:hover {\r\n cursor: pointer;\r\n background-color: var(--verypalegreen); \r\n}`, "",{"version":3,"sources":["webpack://./src/js/components/table/table.css"],"names":[],"mappings":"AAAA;IACI,8BAA8B;IAC9B,YAAY;IACZ,iBAAiB;AACrB;;AAEA;IACI,gBAAgB;IAChB,iCAAiC;IACjC,YAAY;AAChB;;AAEA;IACI,kCAAkC;AACtC;;AAEA;IACI,iBAAiB;IACjB,uBAAuB;AAC3B;;AAEA;IACI,8BAA8B;AAClC;;AAEA,8BAA8B;;AAE9B;IACI,cAAc;AAClB;AACA;IACI,cAAc;AAClB;;AAEA,2BAA2B;AAC3B;IACI,WAAW;AACf;;AAEA;IACI,gBAAgB;AACpB;;AAEA;IACI,gBAAgB;IAChB,gBAAgB;IAChB,2BAA2B;IAC3B,4BAA4B;IAC5B,oDAAoD;IACpD,kBAAkB;IAClB,2BAA2B;IAC3B,uBAAuB;;AAE3B;;AAEA,YAAY;;AAEZ,uBAAuB;AACvB;IACI,oCAAoC;IACpC,gBAAgB;IAChB,aAAa;AACjB;;AAEA;IACI,+BAA+B;AACnC;;AAEA;IACI,aAAa;IACb,uBAAuB,EAAE,wBAAwB;IACjD,mBAAmB,EAAE,sBAAsB;IAC3C,WAAW;AACf;;AAEA;IACI,oCAAoC;AACxC;;AAEA;IACI,kCAAkC;AACtC;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI,8BAA8B;AAClC;;AAEA;IACI,eAAe;IACf,sCAAsC;AAC1C","sourcesContent":["#main-table {\\r\\n font-size: calc(0.6vw + 0.5em);\\r\\n margin: auto;\\r\\n /* width: 100%; */\\r\\n}\\r\\n\\r\\n#main-table thead > tr > th {\\r\\n text-align: left;\\r\\n background-color: var(--darkGray);\\r\\n color: white;\\r\\n}\\r\\n\\r\\nth {\\r\\n background-color: var(--lightGray);\\r\\n}\\r\\n\\r\\ntr {\\r\\n border-width: 2px;\\r\\n background-color: white;\\r\\n}\\r\\n\\r\\ntr td {\\r\\n border-bottom: 1px solid black;\\r\\n}\\r\\n\\r\\n/* Default to hidden columns */\\r\\n\\r\\n#main-table tbody > tr > td {\\r\\n display : none;\\r\\n}\\r\\n#main-table thead > tr > th {\\r\\n display : none;\\r\\n}\\r\\n\\r\\n/* textbox width in table */\\r\\ninput {\\r\\n width: 100%;\\r\\n}\\r\\n\\r\\nselect {\\r\\n max-width: 100px;\\r\\n}\\r\\n\\r\\ndiv.table-container {\\r\\n overflow-x: auto; \\r\\n overflow-y: auto;\\r\\n margin-left: max(65px, 7vh);\\r\\n margin-right: max(65px, 7vh);\\r\\n /* max-width: calc(100vw - var(--sidebar-width)); */\\r\\n /* margin: auto; */\\r\\n max-height: max(350px, 6vh);\\r\\n /* min-height: 350px; */\\r\\n\\r\\n}\\r\\n \\r\\n/* Buttons */\\r\\n\\r\\n/* Add new row button */\\r\\n.btn-add { \\r\\n background-color: var(--spiritgreen);\\r\\n margin-top: 20px;\\r\\n display: none;\\r\\n}\\r\\n\\r\\n.btn-delete {\\r\\n background-color: var(--orange);\\r\\n}\\r\\n\\r\\n#add-btn-div {\\r\\n display: flex;\\r\\n justify-content: center; /* Aligns horizontally */\\r\\n align-items: center; /* Aligns vertically */\\r\\n width: 100%;\\r\\n}\\r\\n\\r\\n.btn-edit {\\r\\n background-color: var(--spiritgreen);\\r\\n}\\r\\n\\r\\n.active-editing, .selected {\\r\\n background-color: var(--palegreen);\\r\\n}\\r\\n\\r\\n.selected { \\r\\n font-weight: bold;\\r\\n}\\r\\n\\r\\n.btn-confirm {\\r\\n display: none;\\r\\n}\\r\\n\\r\\n.confirm-btn:hover {\\r\\n background-color: var(--green);\\r\\n}\\r\\n\\r\\n.hover-effect:hover {\\r\\n cursor: pointer;\\r\\n background-color: var(--verypalegreen); \\r\\n}"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc5LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy90YWJsZS90YWJsZS5jc3M/NTIzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgI21haW4tdGFibGUge1xyXG4gICAgZm9udC1zaXplOiBjYWxjKDAuNnZ3ICsgMC41ZW0pO1xyXG4gICAgbWFyZ2luOiBhdXRvO1xyXG4gICAgLyogd2lkdGg6IDEwMCU7ICovXHJcbn1cclxuXHJcbiNtYWluLXRhYmxlIHRoZWFkID4gdHIgPiB0aCB7XHJcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGFya0dyYXkpO1xyXG4gICAgY29sb3I6IHdoaXRlO1xyXG59XHJcblxyXG50aCB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1saWdodEdyYXkpO1xyXG59XHJcblxyXG50ciB7XHJcbiAgICBib3JkZXItd2lkdGg6IDJweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xyXG59XHJcblxyXG50ciB0ZCB7XHJcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7XHJcbn1cclxuXHJcbi8qIERlZmF1bHQgdG8gaGlkZGVuIGNvbHVtbnMgKi9cclxuXHJcbiNtYWluLXRhYmxlIHRib2R5ID4gdHIgPiB0ZCB7XHJcbiAgICBkaXNwbGF5IDogbm9uZTtcclxufVxyXG4jbWFpbi10YWJsZSB0aGVhZCA+IHRyID4gdGgge1xyXG4gICAgZGlzcGxheSA6IG5vbmU7XHJcbn1cclxuXHJcbi8qIHRleHRib3ggd2lkdGggaW4gdGFibGUgKi9cclxuaW5wdXQge1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbn1cclxuXHJcbnNlbGVjdCB7XHJcbiAgICBtYXgtd2lkdGg6IDEwMHB4O1xyXG59XHJcblxyXG5kaXYudGFibGUtY29udGFpbmVyIHtcclxuICAgIG92ZXJmbG93LXg6IGF1dG87IFxyXG4gICAgb3ZlcmZsb3cteTogYXV0bztcclxuICAgIG1hcmdpbi1sZWZ0OiBtYXgoNjVweCwgN3ZoKTtcclxuICAgIG1hcmdpbi1yaWdodDogbWF4KDY1cHgsIDd2aCk7XHJcbiAgICAvKiBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSB2YXIoLS1zaWRlYmFyLXdpZHRoKSk7ICAqL1xyXG4gICAgLyogbWFyZ2luOiBhdXRvOyAqL1xyXG4gICAgbWF4LWhlaWdodDogbWF4KDM1MHB4LCA2dmgpO1xyXG4gICAgLyogbWluLWhlaWdodDogMzUwcHg7ICovXHJcblxyXG59XHJcbiAgXHJcbi8qIEJ1dHRvbnMgKi9cclxuXHJcbi8qIEFkZCBuZXcgcm93IGJ1dHRvbiAqL1xyXG4uYnRuLWFkZCB7IFxyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc3Bpcml0Z3JlZW4pO1xyXG4gICAgbWFyZ2luLXRvcDogMjBweDtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuXHJcbi5idG4tZGVsZXRlIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW9yYW5nZSk7XHJcbn1cclxuXHJcbiNhZGQtYnRuLWRpdiB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IC8qIEFsaWducyBob3Jpem9udGFsbHkgKi9cclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IC8qIEFsaWducyB2ZXJ0aWNhbGx5ICovXHJcbiAgICB3aWR0aDogMTAwJTtcclxufVxyXG5cclxuLmJ0bi1lZGl0IHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNwaXJpdGdyZWVuKTtcclxufVxyXG5cclxuLmFjdGl2ZS1lZGl0aW5nLCAuc2VsZWN0ZWQge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFsZWdyZWVuKTtcclxufVxyXG5cclxuLnNlbGVjdGVkIHsgXHJcbiAgICBmb250LXdlaWdodDogYm9sZDtcclxufVxyXG5cclxuLmJ0bi1jb25maXJtIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuXHJcbi5jb25maXJtLWJ0bjpob3ZlciB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ncmVlbik7XHJcbn1cclxuXHJcbi5ob3Zlci1lZmZlY3Q6aG92ZXIge1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdmVyeXBhbGVncmVlbik7IFxyXG59YCwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zcmMvanMvY29tcG9uZW50cy90YWJsZS90YWJsZS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7SUFDSSw4QkFBOEI7SUFDOUIsWUFBWTtJQUNaLGlCQUFpQjtBQUNyQjs7QUFFQTtJQUNJLGdCQUFnQjtJQUNoQixpQ0FBaUM7SUFDakMsWUFBWTtBQUNoQjs7QUFFQTtJQUNJLGtDQUFrQztBQUN0Qzs7QUFFQTtJQUNJLGlCQUFpQjtJQUNqQix1QkFBdUI7QUFDM0I7O0FBRUE7SUFDSSw4QkFBOEI7QUFDbEM7O0FBRUEsOEJBQThCOztBQUU5QjtJQUNJLGNBQWM7QUFDbEI7QUFDQTtJQUNJLGNBQWM7QUFDbEI7O0FBRUEsMkJBQTJCO0FBQzNCO0lBQ0ksV0FBVztBQUNmOztBQUVBO0lBQ0ksZ0JBQWdCO0FBQ3BCOztBQUVBO0lBQ0ksZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQiwyQkFBMkI7SUFDM0IsNEJBQTRCO0lBQzVCLG9EQUFvRDtJQUNwRCxrQkFBa0I7SUFDbEIsMkJBQTJCO0lBQzNCLHVCQUF1Qjs7QUFFM0I7O0FBRUEsWUFBWTs7QUFFWix1QkFBdUI7QUFDdkI7SUFDSSxvQ0FBb0M7SUFDcEMsZ0JBQWdCO0lBQ2hCLGFBQWE7QUFDakI7O0FBRUE7SUFDSSwrQkFBK0I7QUFDbkM7O0FBRUE7SUFDSSxhQUFhO0lBQ2IsdUJBQXVCLEVBQUUsd0JBQXdCO0lBQ2pELG1CQUFtQixFQUFFLHNCQUFzQjtJQUMzQyxXQUFXO0FBQ2Y7O0FBRUE7SUFDSSxvQ0FBb0M7QUFDeEM7O0FBRUE7SUFDSSxrQ0FBa0M7QUFDdEM7O0FBRUE7SUFDSSxpQkFBaUI7QUFDckI7O0FBRUE7SUFDSSxhQUFhO0FBQ2pCOztBQUVBO0lBQ0ksOEJBQThCO0FBQ2xDOztBQUVBO0lBQ0ksZUFBZTtJQUNmLHNDQUFzQztBQUMxQ1wiLFwic291cmNlc0NvbnRlbnRcIjpbXCIjbWFpbi10YWJsZSB7XFxyXFxuICAgIGZvbnQtc2l6ZTogY2FsYygwLjZ2dyArIDAuNWVtKTtcXHJcXG4gICAgbWFyZ2luOiBhdXRvO1xcclxcbiAgICAvKiB3aWR0aDogMTAwJTsgKi9cXHJcXG59XFxyXFxuXFxyXFxuI21haW4tdGFibGUgdGhlYWQgPiB0ciA+IHRoIHtcXHJcXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGFya0dyYXkpO1xcclxcbiAgICBjb2xvcjogd2hpdGU7XFxyXFxufVxcclxcblxcclxcbnRoIHtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbGlnaHRHcmF5KTtcXHJcXG59XFxyXFxuXFxyXFxudHIge1xcclxcbiAgICBib3JkZXItd2lkdGg6IDJweDtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XFxyXFxufVxcclxcblxcclxcbnRyIHRkIHtcXHJcXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO1xcclxcbn1cXHJcXG5cXHJcXG4vKiBEZWZhdWx0IHRvIGhpZGRlbiBjb2x1bW5zICovXFxyXFxuXFxyXFxuI21haW4tdGFibGUgdGJvZHkgPiB0ciA+IHRkIHtcXHJcXG4gICAgZGlzcGxheSA6IG5vbmU7XFxyXFxufVxcclxcbiNtYWluLXRhYmxlIHRoZWFkID4gdHIgPiB0aCB7XFxyXFxuICAgIGRpc3BsYXkgOiBub25lO1xcclxcbn1cXHJcXG5cXHJcXG4vKiB0ZXh0Ym94IHdpZHRoIGluIHRhYmxlICovXFxyXFxuaW5wdXQge1xcclxcbiAgICB3aWR0aDogMTAwJTtcXHJcXG59XFxyXFxuXFxyXFxuc2VsZWN0IHtcXHJcXG4gICAgbWF4LXdpZHRoOiAxMDBweDtcXHJcXG59XFxyXFxuXFxyXFxuZGl2LnRhYmxlLWNvbnRhaW5lciB7XFxyXFxuICAgIG92ZXJmbG93LXg6IGF1dG87IFxcclxcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xcclxcbiAgICBtYXJnaW4tbGVmdDogbWF4KDY1cHgsIDd2aCk7XFxyXFxuICAgIG1hcmdpbi1yaWdodDogbWF4KDY1cHgsIDd2aCk7XFxyXFxuICAgIC8qIG1heC13aWR0aDogY2FsYygxMDB2dyAtIHZhcigtLXNpZGViYXItd2lkdGgpKTsgICovXFxyXFxuICAgIC8qIG1hcmdpbjogYXV0bzsgKi9cXHJcXG4gICAgbWF4LWhlaWdodDogbWF4KDM1MHB4LCA2dmgpO1xcclxcbiAgICAvKiBtaW4taGVpZ2h0OiAzNTBweDsgKi9cXHJcXG5cXHJcXG59XFxyXFxuICBcXHJcXG4vKiBCdXR0b25zICovXFxyXFxuXFxyXFxuLyogQWRkIG5ldyByb3cgYnV0dG9uICovXFxyXFxuLmJ0bi1hZGQgeyBcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc3Bpcml0Z3JlZW4pO1xcclxcbiAgICBtYXJnaW4tdG9wOiAyMHB4O1xcclxcbiAgICBkaXNwbGF5OiBub25lO1xcclxcbn1cXHJcXG5cXHJcXG4uYnRuLWRlbGV0ZSB7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW9yYW5nZSk7XFxyXFxufVxcclxcblxcclxcbiNhZGQtYnRuLWRpdiB7XFxyXFxuICAgIGRpc3BsYXk6IGZsZXg7XFxyXFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOyAvKiBBbGlnbnMgaG9yaXpvbnRhbGx5ICovXFxyXFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IC8qIEFsaWducyB2ZXJ0aWNhbGx5ICovXFxyXFxuICAgIHdpZHRoOiAxMDAlO1xcclxcbn1cXHJcXG5cXHJcXG4uYnRuLWVkaXQge1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zcGlyaXRncmVlbik7XFxyXFxufVxcclxcblxcclxcbi5hY3RpdmUtZWRpdGluZywgLnNlbGVjdGVkIHtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFsZWdyZWVuKTtcXHJcXG59XFxyXFxuXFxyXFxuLnNlbGVjdGVkIHsgXFxyXFxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcclxcbn1cXHJcXG5cXHJcXG4uYnRuLWNvbmZpcm0ge1xcclxcbiAgICBkaXNwbGF5OiBub25lO1xcclxcbn1cXHJcXG5cXHJcXG4uY29uZmlybS1idG46aG92ZXIge1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ncmVlbik7XFxyXFxufVxcclxcblxcclxcbi5ob3Zlci1lZmZlY3Q6aG92ZXIge1xcclxcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXZlcnlwYWxlZ3JlZW4pOyBcXHJcXG59XCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///279\n')},235:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* Welcome page (index.html) */\r\n\r\n.step {\r\n width: 60%;\r\n height: 80px;\r\n font-size: 1.75em;\r\n margin-bottom: 0px; /* Adds spacing between buttons */\r\n margin-left: 20%;\r\n border-color: var(--citygreen);\r\n border-width: 2;\r\n color: var(--citygreen);\r\n background-color: white;\r\n}\r\n\r\n.step:hover {\r\n color: white;\r\n background-color: var(--spiritgreen);\r\n}\r\n\r\n#welcome-page {\r\n justify-content: center; \r\n align-items: center; \r\n padding-top: 20px;\r\n}\r\n.step.disabled {\r\n opacity: 50%;\r\n}`, "",{"version":3,"sources":["webpack://./src/js/components/welcome/welcome.css"],"names":[],"mappings":"AAAA,8BAA8B;;AAE9B;IACI,UAAU;IACV,YAAY;IACZ,iBAAiB;IACjB,kBAAkB,EAAE,iCAAiC;IACrD,gBAAgB;IAChB,8BAA8B;IAC9B,eAAe;IACf,uBAAuB;IACvB,uBAAuB;AAC3B;;AAEA;IACI,YAAY;IACZ,oCAAoC;AACxC;;AAEA;IACI,uBAAuB;IACvB,mBAAmB;IACnB,iBAAiB;AACrB;AACA;IACI,YAAY;AAChB","sourcesContent":["/* Welcome page (index.html) */\\r\\n\\r\\n.step {\\r\\n width: 60%;\\r\\n height: 80px;\\r\\n font-size: 1.75em;\\r\\n margin-bottom: 0px; /* Adds spacing between buttons */\\r\\n margin-left: 20%;\\r\\n border-color: var(--citygreen);\\r\\n border-width: 2;\\r\\n color: var(--citygreen);\\r\\n background-color: white;\\r\\n}\\r\\n\\r\\n.step:hover {\\r\\n color: white;\\r\\n background-color: var(--spiritgreen);\\r\\n}\\r\\n\\r\\n#welcome-page {\\r\\n justify-content: center; \\r\\n align-items: center; \\r\\n padding-top: 20px;\\r\\n}\\r\\n.step.disabled {\\r\\n opacity: 50%;\\r\\n}"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM1LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2J1ZGdldC1yZXF1ZXN0LWZvcm0vLi9zcmMvanMvY29tcG9uZW50cy93ZWxjb21lL3dlbGNvbWUuY3NzP2IzNDgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC8qIFdlbGNvbWUgcGFnZSAoaW5kZXguaHRtbCkgKi9cclxuXHJcbi5zdGVwIHtcclxuICAgIHdpZHRoOiA2MCU7XHJcbiAgICBoZWlnaHQ6IDgwcHg7XHJcbiAgICBmb250LXNpemU6IDEuNzVlbTtcclxuICAgIG1hcmdpbi1ib3R0b206IDBweDsgLyogQWRkcyBzcGFjaW5nIGJldHdlZW4gYnV0dG9ucyAqL1xyXG4gICAgbWFyZ2luLWxlZnQ6IDIwJTtcclxuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY2l0eWdyZWVuKTtcclxuICAgIGJvcmRlci13aWR0aDogMjtcclxuICAgIGNvbG9yOiB2YXIoLS1jaXR5Z3JlZW4pO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XHJcbn1cclxuXHJcbi5zdGVwOmhvdmVyIHtcclxuICAgIGNvbG9yOiB3aGl0ZTtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNwaXJpdGdyZWVuKTtcclxufVxyXG5cclxuI3dlbGNvbWUtcGFnZSB7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgXHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyBcclxuICAgIHBhZGRpbmctdG9wOiAyMHB4O1xyXG59XHJcbi5zdGVwLmRpc2FibGVkIHtcclxuICAgIG9wYWNpdHk6IDUwJTtcclxufWAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL2pzL2NvbXBvbmVudHMvd2VsY29tZS93ZWxjb21lLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQSw4QkFBOEI7O0FBRTlCO0lBQ0ksVUFBVTtJQUNWLFlBQVk7SUFDWixpQkFBaUI7SUFDakIsa0JBQWtCLEVBQUUsaUNBQWlDO0lBQ3JELGdCQUFnQjtJQUNoQiw4QkFBOEI7SUFDOUIsZUFBZTtJQUNmLHVCQUF1QjtJQUN2Qix1QkFBdUI7QUFDM0I7O0FBRUE7SUFDSSxZQUFZO0lBQ1osb0NBQW9DO0FBQ3hDOztBQUVBO0lBQ0ksdUJBQXVCO0lBQ3ZCLG1CQUFtQjtJQUNuQixpQkFBaUI7QUFDckI7QUFDQTtJQUNJLFlBQVk7QUFDaEJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLyogV2VsY29tZSBwYWdlIChpbmRleC5odG1sKSAqL1xcclxcblxcclxcbi5zdGVwIHtcXHJcXG4gICAgd2lkdGg6IDYwJTtcXHJcXG4gICAgaGVpZ2h0OiA4MHB4O1xcclxcbiAgICBmb250LXNpemU6IDEuNzVlbTtcXHJcXG4gICAgbWFyZ2luLWJvdHRvbTogMHB4OyAvKiBBZGRzIHNwYWNpbmcgYmV0d2VlbiBidXR0b25zICovXFxyXFxuICAgIG1hcmdpbi1sZWZ0OiAyMCU7XFxyXFxuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY2l0eWdyZWVuKTtcXHJcXG4gICAgYm9yZGVyLXdpZHRoOiAyO1xcclxcbiAgICBjb2xvcjogdmFyKC0tY2l0eWdyZWVuKTtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XFxyXFxufVxcclxcblxcclxcbi5zdGVwOmhvdmVyIHtcXHJcXG4gICAgY29sb3I6IHdoaXRlO1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zcGlyaXRncmVlbik7XFxyXFxufVxcclxcblxcclxcbiN3ZWxjb21lLXBhZ2Uge1xcclxcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgXFxyXFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IFxcclxcbiAgICBwYWRkaW5nLXRvcDogMjBweDtcXHJcXG59XFxyXFxuLnN0ZXAuZGlzYWJsZWQge1xcclxcbiAgICBvcGFjaXR5OiA1MCU7XFxyXFxufVwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///235\n')},314:module=>{eval('\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = "";\n var needLayer = typeof item[5] !== "undefined";\n if (item[4]) {\n content += "@supports (".concat(item[4], ") {");\n }\n if (item[2]) {\n content += "@media ".concat(item[2], " {");\n }\n if (needLayer) {\n content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += "}";\n }\n if (item[2]) {\n content += "}";\n }\n if (item[4]) {\n content += "}";\n }\n return content;\n }).join("");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === "string") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== "undefined") {\n if (typeof item[5] === "undefined") {\n item[5] = layer;\n } else {\n item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = "".concat(supports);\n } else {\n item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzE0LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanM/MjRmYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTtcblxuICAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTtcblxuICAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBpZCA9IHRoaXNba11bMF07XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBtb2R1bGVzLmxlbmd0aDsgX2srKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfa10pO1xuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGxpc3Q7XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///314\n')},354:module=>{eval('\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === "function") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);\n var sourceMapping = "/*# ".concat(data, " */");\n return [content].concat([sourceMapping]).join("\\n");\n }\n return [content].join("\\n");\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzU0LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzP2FmMTIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgdmFyIGNvbnRlbnQgPSBpdGVtWzFdO1xuICB2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG4gIGlmICghY3NzTWFwcGluZykge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///354\n')},72:module=>{eval('\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = "".concat(id, " ").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcz8yZGJhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG52YXIgc3R5bGVzSW5ET00gPSBbXTtcbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlc0luRE9NLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0eWxlc0luRE9NW2ldLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgIHJlc3VsdCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV07XG4gICAgdmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG4gICAgdmFyIGNvdW50ID0gaWRDb3VudE1hcFtpZF0gfHwgMDtcbiAgICB2YXIgaWRlbnRpZmllciA9IFwiXCIuY29uY2F0KGlkLCBcIiBcIikuY29uY2F0KGNvdW50KTtcbiAgICBpZENvdW50TWFwW2lkXSA9IGNvdW50ICsgMTtcbiAgICB2YXIgaW5kZXhCeUlkZW50aWZpZXIgPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgY3NzOiBpdGVtWzFdLFxuICAgICAgbWVkaWE6IGl0ZW1bMl0sXG4gICAgICBzb3VyY2VNYXA6IGl0ZW1bM10sXG4gICAgICBzdXBwb3J0czogaXRlbVs0XSxcbiAgICAgIGxheWVyOiBpdGVtWzVdXG4gICAgfTtcbiAgICBpZiAoaW5kZXhCeUlkZW50aWZpZXIgIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHVwZGF0ZXIgPSBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMuYnlJbmRleCA9IGk7XG4gICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoaSwgMCwge1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiB1cGRhdGVyLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWRlbnRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcbiAgfVxuICByZXR1cm4gaWRlbnRpZmllcnM7XG59XG5mdW5jdGlvbiBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBhcGkgPSBvcHRpb25zLmRvbUFQSShvcHRpb25zKTtcbiAgYXBpLnVwZGF0ZShvYmopO1xuICB2YXIgdXBkYXRlciA9IGZ1bmN0aW9uIHVwZGF0ZXIobmV3T2JqKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiYgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiYgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCAmJiBuZXdPYmouc3VwcG9ydHMgPT09IG9iai5zdXBwb3J0cyAmJiBuZXdPYmoubGF5ZXIgPT09IG9iai5sYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhcGkudXBkYXRlKG9iaiA9IG5ld09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZW1vdmUoKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiB1cGRhdGVyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGlzdCA9IGxpc3QgfHwgW107XG4gIHZhciBsYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUobmV3TGlzdCkge1xuICAgIG5ld0xpc3QgPSBuZXdMaXN0IHx8IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tpXTtcbiAgICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhdLnJlZmVyZW5jZXMtLTtcbiAgICB9XG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcbiAgICAgIHZhciBfaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihfaWRlbnRpZmllcik7XG4gICAgICBpZiAoc3R5bGVzSW5ET01bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRE9NW19pbmRleF0udXBkYXRlcigpO1xuICAgICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGFzdElkZW50aWZpZXJzID0gbmV3TGFzdElkZW50aWZpZXJzO1xuICB9O1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///72\n')},659:module=>{eval('\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === "undefined") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error("Couldn\'t find a style target. This probably means that the value for the \'insert\' parameter is invalid.");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjU5LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanM/YjIxNCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIG1lbW8gPSB7fTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBnZXRUYXJnZXQodGFyZ2V0KSB7XG4gIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFyIHN0eWxlVGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpO1xuXG4gICAgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcbiAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuICB9XG4gIHJldHVybiBtZW1vW3RhcmdldF07XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0QnlTZWxlY3RvcihpbnNlcnQsIHN0eWxlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQoaW5zZXJ0KTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydCcgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO1xuICB9XG4gIHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydEJ5U2VsZWN0b3I7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///659\n')},540:module=>{eval('\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement("style");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQwLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qcz9kZTZjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICBvcHRpb25zLnNldEF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucy5hdHRyaWJ1dGVzKTtcbiAgb3B0aW9ucy5pbnNlcnQoZWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydFN0eWxlRWxlbWVudDsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///540\n')},56:(module,__unused_webpack_exports,__webpack_require__)=>{eval('\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = true ? __webpack_require__.nc : 0;\n if (nonce) {\n styleElement.setAttribute("nonce", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzP2RkY2UiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG4gIGlmIChub25jZSkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBub25jZSk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///56\n')},825:module=>{eval('\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = "";\n if (obj.supports) {\n css += "@supports (".concat(obj.supports, ") {");\n }\n if (obj.media) {\n css += "@media ".concat(obj.media, " {");\n }\n var needLayer = typeof obj.layer !== "undefined";\n if (needLayer) {\n css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");\n }\n css += obj.css;\n if (needLayer) {\n css += "}";\n }\n if (obj.media) {\n css += "}";\n }\n if (obj.supports) {\n css += "}";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== "undefined") {\n css += "\\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === "undefined") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODI1LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYnVkZ2V0LXJlcXVlc3QtZm9ybS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzP2U0NzkiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gYXBwbHkoc3R5bGVFbGVtZW50LCBvcHRpb25zLCBvYmopIHtcbiAgdmFyIGNzcyA9IFwiXCI7XG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChvYmouc3VwcG9ydHMsIFwiKSB7XCIpO1xuICB9XG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKTtcbiAgfVxuICB2YXIgbmVlZExheWVyID0gdHlwZW9mIG9iai5sYXllciAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIkBsYXllclwiLmNvbmNhdChvYmoubGF5ZXIubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChvYmoubGF5ZXIpIDogXCJcIiwgXCIge1wiKTtcbiAgfVxuICBjc3MgKz0gb2JqLmNzcztcbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpLCBcIiAqL1wiKTtcbiAgfVxuXG4gIC8vIEZvciBvbGQgSUVcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuICBvcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xufVxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCkge1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgaWYgKHN0eWxlRWxlbWVudC5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudCk7XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gZG9tQVBJKG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHt9LFxuICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7fVxuICAgIH07XG4gIH1cbiAgdmFyIHN0eWxlRWxlbWVudCA9IG9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuICByZXR1cm4ge1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKG9iaikge1xuICAgICAgYXBwbHkoc3R5bGVFbGVtZW50LCBvcHRpb25zLCBvYmopO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KTtcbiAgICB9XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGRvbUFQSTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///825\n')},113:module=>{eval("\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTEzLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9idWRnZXQtcmVxdWVzdC1mb3JtLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanM/MWRkZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCkge1xuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKTtcbiAgICB9XG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHN0eWxlVGFnVHJhbnNmb3JtOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///113\n")}},__webpack_module_cache__={};function __webpack_require__(n){var c=__webpack_module_cache__[n];if(void 0!==c)return c.exports;var t=__webpack_module_cache__[n]={id:n,exports:{}};return __webpack_modules__[n](t,t.exports,__webpack_require__),t.exports}__webpack_require__.n=n=>{var c=n&&n.__esModule?()=>n.default:()=>n;return __webpack_require__.d(c,{a:c}),c},__webpack_require__.d=(n,c)=>{for(var t in c)__webpack_require__.o(c,t)&&!__webpack_require__.o(n,t)&&Object.defineProperty(n,t,{enumerable:!0,get:c[t]})},__webpack_require__.o=(n,c)=>Object.prototype.hasOwnProperty.call(n,c),__webpack_require__.r=n=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},__webpack_require__.nc=void 0;var __webpack_exports__=__webpack_require__(934)})(); \ No newline at end of file diff --git a/build/index.html b/build/index.html index 42674bb..d427768 100644 --- a/build/index.html +++ b/build/index.html @@ -1 +1 @@ -Demo Budget Form

FY2026 Budget Form


\ No newline at end of file +Demo Budget Form

FY2026 Budget Form

Baseline

Suplemental


\ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..15327c2 --- /dev/null +++ b/index.html @@ -0,0 +1,194 @@ + + + + + +Demo Budget Form + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +

FY2026 Budget Form

+

+
+ + +
+ + +
+ + + + +
+ + +
+
+

Baseline

+
+
+
+

Suplemental

+
+
+
+ + +
+

+
+ + + + + +
+ + +
+ + + + +
+ +
+ + +
+
+ +
+
+ + +
+
+ +
+
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..23ac96d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,7675 @@ +{ + "name": "budget-request-form", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "budget-request-form", + "license": "MIT", + "devDependencies": { + "@babel/core": "^7.24.9", + "@babel/preset-env": "^7.24.8", + "babel-loader": "^9.1.3", + "css-loader": "^7.1.2", + "html-loader": "^5.0.0", + "html-webpack-plugin": "^5.6.0", + "mini-css-extract-plugin": "^2.9.0", + "optimize-css-assets-webpack-plugin": "^6.0.1", + "style-loader": "^4.0.0", + "webpack": "^5.93.0", + "webpack-cli": "^5.1.4", + "webpack-dev-server": "^5.0.4" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz", + "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", + "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.9", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.9", + "@babel/helpers": "^7.24.8", + "@babel/parser": "^7.24.8", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz", + "integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.9", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz", + "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.8.tgz", + "integrity": "sha512-4f6Oqnmyp2PP3olgUMmOwC3akxSm5aBYraQ6YDdKy7NcAMkDECHWG0DEnV6M2UAkERgIBhYt8S27rURPg7SxWA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz", + "integrity": "sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz", + "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz", + "integrity": "sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-wrap-function": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz", + "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-optimise-call-expression": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz", + "integrity": "sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz", + "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", + "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz", + "integrity": "sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz", + "integrity": "sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz", + "integrity": "sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", + "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz", + "integrity": "sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz", + "integrity": "sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", + "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.8.tgz", + "integrity": "sha512-VXy91c47uujj758ud9wx+OMgheXm4qJfyhj1P18YvlrQkNOSrwsteHk+EFS3OMGfhMhpZa0A+81eE7G4QC+3CA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", + "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz", + "integrity": "sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz", + "integrity": "sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-simple-access": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz", + "integrity": "sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", + "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", + "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", + "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.8.tgz", + "integrity": "sha512-vObvMZB6hNWuDxhSaEPTKCwcqkAIuDtE+bQGn4XMXne1DSLzFVY8Vmj1bm+mUQXYNN8NmaQEO+r8MMbzPr1jBQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.24.8", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.24.7", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.24.7", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.24.8", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.24.7", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.24.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-modules-systemjs": "^7.24.7", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.37.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.8.tgz", + "integrity": "sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz", + "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.8", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.8", + "@babel/types": "^7.24.8", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz", + "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.0.4.tgz", + "integrity": "sha512-aOcSN4MeAtFROysrbqG137b7gaDDSmVrl5mpo6sT/w+kcXpWnzhMjmY/Fh/sDx26NBxyIE7MB1seqLeCAzy9Sg==", + "dev": true, + "dependencies": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.1.2", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.2.0.tgz", + "integrity": "sha512-4B8B+3vFsY4eo33DMKyJPlQ3sBMpPFUZK2dr3O3rXrOGKKbYG44J0XSFkDo1VOQiri5HFEhIeVvItjR2xcazmg==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.14.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", + "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.11", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.11.tgz", + "integrity": "sha512-4+q7P5h3SpJxaBft0Dzpbr6lmMaqh0Jr2tbhJZ/luAwvD7ohSCniYkwz/pLxuT2h0EOa6QADgJj1Ko+TzRfZ+w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001642", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz", + "integrity": "sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/core-js-compat": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", + "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-loader": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dev": true, + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.828", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.828.tgz", + "integrity": "sha512-QOIJiWpQJDHAVO4P58pwb133Cwee0nbvy/MV1CwzZVGpkH1RX33N3vsaWRCpR6bF63AAq366neZrRTu7Qlsbbw==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/envinfo": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-5.0.0.tgz", + "integrity": "sha512-puaGKdjdVVIFRtgIC2n5dt5bt0N5j6heXlAQZ4Do1MLjHmOT1gCE1Ogg7XZNeJlnOVHHsrZKGs5dfh+XwZ3XPw==", + "dev": true, + "dependencies": { + "html-minifier-terser": "^7.2.0", + "parse5": "^7.1.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", + "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/html-webpack-plugin/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "engines": { + "node": ">=10.18" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-network-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", + "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "dev": true, + "dependencies": { + "lodash": "^4.17.5", + "webpack-sources": "^1.1.0" + } + }, + "node_modules/launch-editor": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.0.tgz", + "integrity": "sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.9.3.tgz", + "integrity": "sha512-bsYSSnirtYTWi1+OPMFb0M048evMKyUYe0EbtuGQgq6BVQM1g1W8/KIUJCCvjgI/El0j6Q4WsmMiBwLUBSw8LA==", + "dev": true, + "dependencies": { + "@jsonjoy.com/json-pack": "^1.0.3", + "@jsonjoy.com/util": "^1.1.2", + "tree-dump": "^1.0.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">= 4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", + "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dev": true, + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optimize-css-assets-webpack-plugin": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-6.0.1.tgz", + "integrity": "sha512-BshV2UZPfggZLdUfN3zFBbG4sl/DynUI+YCB6fRRDWaqO2OiWN8GPcp4Y0/fEV6B3k9Hzyk3czve3V/8B/SzKQ==", + "dev": true, + "dependencies": { + "cssnano": "^5.0.2", + "last-call-webpack-plugin": "^3.0.0", + "postcss": "^8.2.1" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz", + "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/postcss": { + "version": "8.4.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", + "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dev": true, + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dev": true, + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dev": true, + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", + "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.9.tgz", + "integrity": "sha512-3i7b8OcswU6CpU8Ej89quJD4O98id7TtVM5U4Mybh84zQXdrFmDLouWBEEaD/QfO3gDDfH+AGFCGsR7kngzQnA==", + "dev": true, + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": "14 >=14.20 || 16 >=16.20 || >=18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/style-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", + "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==", + "dev": true, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.27.0" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.31.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", + "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/thingies": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", + "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "dev": true, + "engines": { + "node": ">=10.18" + }, + "peerDependencies": { + "tslib": "^2" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-dump": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", + "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/webpack": { + "version": "5.93.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", + "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz", + "integrity": "sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^4.6.0", + "mime-types": "^2.1.31", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz", + "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.4.0", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "rimraf": "^5.0.5", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.1.0", + "ws": "^8.16.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack/node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/src/index.html b/src/index.html index c23ad87..4eb97e9 100644 --- a/src/index.html +++ b/src/index.html @@ -48,12 +48,6 @@

- -
-

Baseline

-
-
-

@@ -82,6 +76,29 @@

+ + +
+
+

+ Baseline + +

+
+
+
+

+ Suplemental + +

+
+
+
+ +
+
+ +
@@ -111,7 +128,7 @@
Baseline