{"version":3,"sources":["wwwroot/js/node_modules/browser-pack/_prelude.js","wwwroot/js/Scripts/pages/app.js","wwwroot/js/Scripts/src/api.js","wwwroot/js/Scripts/src/clipboard.js","wwwroot/js/Scripts/src/common.js","wwwroot/js/Scripts/src/debounce.js","wwwroot/js/Scripts/src/emails.js","wwwroot/js/Scripts/src/errors.js","wwwroot/js/Scripts/src/freeze-ui.js","wwwroot/js/Scripts/src/guid.js","wwwroot/js/Scripts/src/imageUpload.js","wwwroot/js/Scripts/src/localStorage.js","wwwroot/js/Scripts/src/mask.js","wwwroot/js/Scripts/src/modals.js","wwwroot/js/Scripts/src/notifications.js","wwwroot/js/Scripts/src/profiles.js","wwwroot/js/Scripts/src/signalr.js","wwwroot/js/Scripts/src/tagify.js","wwwroot/js/Scripts/src/themebuilder.js","wwwroot/js/Scripts/src/tooltips.js","wwwroot/js/Scripts/src/validation.js","wwwroot/js/node_modules/@babel/runtime/helpers/arrayLikeToArray.js","wwwroot/js/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","wwwroot/js/node_modules/@babel/runtime/helpers/asyncToGenerator.js","wwwroot/js/node_modules/@babel/runtime/helpers/classCallCheck.js","wwwroot/js/node_modules/@babel/runtime/helpers/createClass.js","wwwroot/js/node_modules/@babel/runtime/helpers/defineProperty.js","wwwroot/js/node_modules/@babel/runtime/helpers/interopRequireDefault.js","wwwroot/js/node_modules/@babel/runtime/helpers/iterableToArray.js","wwwroot/js/node_modules/@babel/runtime/helpers/nonIterableSpread.js","wwwroot/js/node_modules/@babel/runtime/helpers/toConsumableArray.js","wwwroot/js/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","wwwroot/js/node_modules/@babel/runtime/regenerator/index.js","wwwroot/js/node_modules/regenerator-runtime/runtime.js"],"names":[],"mappings":"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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"app.min.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i {\n document.querySelectorAll(\"[data-datepicker]\").forEach(el => {\n new tempusDominus.TempusDominus(el, {\n localization: {\n hourCycle: \"h23\",\n format: \"dd/MM/yyyy\"\n },\n display: {\n viewMode: \"calendar\",\n components: {\n clock: false,\n hours: false,\n minutes: false,\n seconds: false\n },\n }\n });\n\n if (el.type === \"hidden\")\n return;\n\n const input = el.querySelector(\"input\");\n new Cleave(input, {\n date: true,\n datePattern: ['d', 'm', 'Y'],\n delimiter: '/'\n });\n });\n\n document.querySelectorAll(\"[data-datetimepicker]\").forEach(el => {\n new tempusDominus.TempusDominus(el, {\n localization: {\n hourCycle: \"h23\",\n format: \"dd/MM/yyyy HH:mm\"\n },\n display: {\n viewMode: \"calendar\",\n components: {\n clock: true,\n hours: true,\n minutes: true,\n seconds: false\n },\n }\n });\n\n if (el.type === \"hidden\")\n return;\n });\n }\n\n const initExternalLinks = () => {\n document.querySelectorAll(\".user-content a\").forEach(el => {\n el.setAttribute(\"target\", \"_blank\");\n el.setAttribute(\"rel\", \"external nofollow noopener\");\n });\n }\n\n const initTour = () => {\n const tg = new tourguide.TourGuideClient({\n showStepProgress: false,\n showStepDots: false\n });\n\n if(tg.tourSteps > 0)\n tg.start();\n }\n\n const initToggleOption = () => {\n\n document.querySelectorAll(\"[data-toggle-option]\").forEach(el => {\n const selector = el.dataset.toggleOption;\n if(!selector)\n return;\n\n const bsCollapse = bootstrap.Collapse.getOrCreateInstance(selector, { toggle: false });\n\n el.addEventListener(\"change\", () => {\n bsCollapse.toggle();\n });\n });\n }\n\n return {\n init: function () {\n initFlatPicker();\n initExternalLinks();\n initTooltips(document);\n initTour();\n initToggleOption();\n\n Profiles.init();\n ImageUpload.init();\n Notifications.init();\n ThemeBuilder.init();\n Modals.init();\n Clipboard.init();\n SignalR.init();\n Emails.init();\n Mask.init();\n }\n }\n}();\n\ndocument.addEventListener('DOMContentLoaded', () => {\n ClubPalPalApp.init();\n});\n","import {LocalStorage} from \"./localStorage\";\nimport {requestVerificationToken} from \"./common\";\n\nexport const apiVersion = \"2023-02-21\";\n\nexport const api = axios.create({\n headers: {\n \"RequestVerificationToken\": requestVerificationToken,\n \"x-api-version\": apiVersion\n }\n});\n\nexport const authApi = axios.create({\n headers: {\n \"RequestVerificationToken\": requestVerificationToken,\n \"x-api-version\": apiVersion\n }\n});\n\nauthApi.interceptors.request.use(\n config => {\n const token = LocalStorage.getToken();\n if (token) {\n config.headers['Authorization'] = `Bearer ${token}`;\n }\n return config;\n },\n error => {\n Promise.reject(error)\n });\n\nauthApi.interceptors.response.use((response) => {\n return response\n },\n function (error) {\n const originalRequest = error.config;\n if (error.response.status === 401 && !originalRequest._retry) {\n\n originalRequest._retry = true;\n return axios.post('/api/token', new URLSearchParams({ grant_type: 'client_credentials' }), { headers: {\"x-api-version\": apiVersion}})\n .then(res => {\n if (res.status === 200 && res.data.access_token) {\n LocalStorage.setToken(res.data);\n originalRequest.headers.Authorization = `Bearer ${res.data.access_token}`;\n\n return axios(originalRequest);\n }\n });\n }\n return Promise.reject(error);\n });\n","import {Notifications} from \"./notifications\";\nimport {setAjaxModalContent, setModalContent} from \"./modals\";\n\nexport class Clipboard{\n static init() {\n document.querySelectorAll(\"[data-clipboard-text]\").forEach(target => {\n const clipboard = new ClipboardJS(target);\n\n clipboard.on('success', e => {\n Notifications.showSuccess({ message: \"The URL has been copied to your clipboard.\" })\n });\n });\n\n\n document.addEventListener(\"click\", async e => {\n const target = e.target.closest(\"[data-copy-link]\")\n if (!target)\n return;\n\n e.preventDefault();\n\n const url = target.dataset.copyLink;\n\n await setAjaxModalContent(`/copy-link?url=${encodeURI(url)}`);\n\n document.querySelectorAll(\"[data-clipboard-target]\").forEach(target => {\n const clipboard = new ClipboardJS(target);\n\n clipboard.on('success', e => {\n Notifications.showSuccess({ message: \"The URL has been copied to your clipboard.\" })\n });\n });\n });\n }\n}\n","export const requestVerificationToken = document.querySelector('input[name=\"__RequestVerificationToken\"]')?.value;\n\nexport function addCommas(value) {\n return value.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n}\n\nexport function sanitizeUrl(url) {\n return url.toLowerCase()\n .replace(/ /g, '-')\n .replace(/[^\\w-]+/g, '');\n}\n\nexport function truncateString(str, num) {\n if (str.length <= num) {\n return str;\n }\n return str.slice(0, num) + '...';\n}\n\nexport let pathAndQuery = location.pathname + location.search + location.hash;\n\nexport let returnUrlQueryString = `returnurl=${encodeURIComponent(pathAndQuery)}`;\n\nexport const archivedBadge = \"Archived\";\n\nexport const slideUp = (el, speed, callback) => {\n KTUtil.slideUp(el, speed ?? 250, callback);\n}\n\nexport const slideDown = (el, speed, callback) => {\n KTUtil.slideDown(el, speed ?? 250, callback);\n}\n\nexport const show = (el, display) => {\n if (typeof el !== 'undefined' && el) {\n el.style.display = (display ? display : 'block');\n }\n}\n\nexport const hide = (el) => {\n if (typeof el !== 'undefined' && el) {\n el.style.display = 'none';\n }\n}\n\nexport function createUUID() {\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n}\n\nexport function currentCulture() {\n return document.getElementById(\"currentCulture\")?.value ?? \"en-gb\";\n}\n\nexport function currentCurrency() {\n return document.getElementById(\"currentCurrency\")?.value ?? \"£\";\n}\n\nexport function getCurrencySymbol() {\n return (0).toLocaleString(currentCulture(), {\n style: 'currency',\n currency: currentCurrency(),\n minimumFractionDigits: 0,\n maximumFractionDigits: 0\n }).replace(/\\d/g, '').trim();\n}\n\nexport function formatCurrency(amount) {\n return new Intl.NumberFormat(currentCulture(), {\n style: \"currency\",\n currency: currentCurrency(),\n }).format(amount);\n}\n","export const debounce = function (callback, ms) {\n let timer = 0;\n return function () {\n let context = this, args = arguments;\n clearTimeout(timer);\n timer = setTimeout(function () {\n callback.apply(context, args);\n }, ms || 0);\n };\n};\n\n","import {Notifications} from \"./notifications\";\nimport {authApi, apiVersion} from \"./api\";\nimport {FreezeUI} from \"./freeze-ui\";\nimport {requestVerificationToken} from \"./common\";\nimport {memberSearchTagify} from \"./tagify\";\nimport {Guid} from \"./guid\";\nimport {trackException} from \"./errors\";\n\nlet editor, subjectEl, tagify, attachmentDropzone, id, modal;\nexport const maxFileSize = 5; // Maximum size in MB\nexport const maxAttachments = 5; // Maximum number of attachments allowed per email\n\nexport const parallelUploads = 4;\n\nconst Emails = function () {\n\n return {\n init: async () => {\n document.addEventListener(\"click\", async e => {\n const target = e.target.closest(\"[data-send-email]\")\n if (!target)\n return;\n\n e.preventDefault();\n const memberId = target.dataset.memberId;\n const name = target.dataset.memberName;\n\n await composeEmail([{value: memberId, text: name}]);\n });\n }\n }\n}();\n\nexport const initDropzone = (selector, id) => {\n\n const container = document.querySelector(selector);\n\n const previewNode = container.querySelector(\".dropzone-item\");\n previewNode.id = \"\";\n const previewTemplate = previewNode.parentNode.innerHTML;\n previewNode.parentNode.removeChild(previewNode);\n\n const dropzone = new Dropzone(selector, {\n url: `/api/emails/attachments/${id}`,\n headers: {\n RequestVerificationToken: requestVerificationToken,\n \"x-api-version\": apiVersion\n },\n previewTemplate: previewTemplate,\n parallelUploads: parallelUploads,\n maxFilesize: maxFileSize, // Max filesize in MB\n maxFiles: maxAttachments,\n autoQueue: true,\n previewsContainer: selector + \" .dropzone-items\",\n clickable: \".dropzone-select\", // Define the element that should be used as click trigger to select files.\n });\n\n dropzone.on(\"addedfile\", function (file) {\n const dropzoneItems = container.querySelectorAll('.dropzone-item');\n dropzoneItems.forEach(dropzoneItem => {\n dropzoneItem.style.display = '';\n });\n });\n\n dropzone.on(\"totaluploadprogress\", function (progress) {\n const progressBars = container.querySelectorAll('.progress-bar');\n progressBars.forEach(progressBar => {\n progressBar.style.width = progress + \"%\";\n });\n });\n\n dropzone.on(\"sending\", function (file) {\n // Show the total progress bar when upload starts\n const progressBars = container.querySelectorAll('.progress-bar');\n progressBars.forEach(progressBar => {\n progressBar.style.opacity = \"1\";\n });\n });\n\n dropzone.on(\"complete\", function (progress) {\n const progressBars = container.querySelectorAll('.dz-complete');\n\n setTimeout(function () {\n progressBars.forEach(progressBar => {\n progressBar.querySelector('.progress-bar').style.opacity = \"0\";\n progressBar.querySelector('.progress').style.opacity = \"0\";\n });\n }, 300);\n });\n\n dropzone.on(\"removedfile\", async file => {\n await removeAttachment(id, file);\n });\n\n if(container.dataset.attachments) {\n const attachments = JSON.parse(container.dataset.attachments);\n\n attachments?.forEach(attachment => {\n const mockFile = {\n name: attachment.name,\n size: attachment.size,\n type: attachment.contentType,\n accepted: true\n };\n dropzone.files.push(mockFile);\n dropzone.emit(\"addedfile\", mockFile);\n dropzone.emit(\"complete\", mockFile);\n });\n }\n\n return dropzone;\n}\n\nexport const composeEmail = async (to, subject, body) => {\n id = Guid.newGuid();\n const placeholderEl = document.querySelector(\"#modal-placeholder\");\n const {data} = await axios.get(\"/compose-email\");\n\n const modalHtml = new DOMParser().parseFromString(data, 'text/html');\n placeholderEl.append(...modalHtml.body.children);\n const modalEl = placeholderEl.querySelector(\".modal\");\n modal = new bootstrap.Modal(modalEl);\n\n const recipientsEl = placeholderEl.querySelector(\"#To\");\n subjectEl = placeholderEl.querySelector(\"#Subject\");\n\n subjectEl.value = subject ?? \"\";\n\n initTagify(recipientsEl, to);\n initEditor(modalEl, \"#editor\")\n attachmentDropzone = initDropzone(\"#attachment_dropzone\", id);\n\n placeholderEl.querySelector(\"#send-email\").addEventListener(\"click\", (e) => {\n e.preventDefault();\n\n Notifications.confirm.fire({ text: \"Are you sure you want to send the email?\" })\n .then(async (result) => {\n if (result.isConfirmed) {\n await saveEmail(true);\n }\n });\n });\n\n placeholderEl.querySelector(\"#advanced_editor\")?.addEventListener(\"click\", async (e) => {\n e.preventDefault();\n\n await saveEmail(false);\n });\n\n modal.show();\n\n modalEl.addEventListener('hide.bs.modal', e => {\n placeholderEl.innerHTML = \"\";\n tagify = null;\n editor = null;\n });\n}\n\n//#region Editor\nconst initEditor = (container, selector) => {\n\n // Init editor\n const editorEl = document.querySelector(selector)\n editor = CKEditor.ClassicEditor\n .create(editorEl, {\n toolbar: {\n items: [\n 'heading',\n '|',\n 'bold',\n 'italic',\n 'indent',\n 'outdent',\n 'alignment',\n '|',\n 'link',\n 'bulletedList',\n 'numberedList',\n 'blockQuote',\n 'horizontalLine',\n 'insertTable',\n ]\n }\n })\n .then(e => {\n editor = e;\n })\n .catch(error => {\n console.error(error);\n });\n};\n\n//#endregion\n\n//#region Tagify\n\nconst initTagify = (el, to) => {\n\n tagify = memberSearchTagify(\"#To\", true);\n tagify.whitelist = to;\n tagify.addTags(to);\n};\n\n//#endregion\n\nconst saveEmail = async (sendEmail) => {\n const body = editor.getData();\n const subject = subjectEl.value;\n const recipients = tagify.value.map(x => ({value: x.value, text: x.text}));\n\n if(sendEmail && recipients.length <= 0){\n Notifications.showWarning({ message: \"Please select at least one participant before sending.\" });\n return;\n }\n\n if (sendEmail && subject.length <= 0) {\n Notifications.showWarning({ message: \"Please enter a subject.\" });\n return;\n }\n\n if(sendEmail && body.length <= 1){\n Notifications.showWarning({ message: \"Please enter a message body.\" });\n return;\n }\n\n const values = {\n id,\n subject,\n body,\n recipients,\n status: sendEmail ? \"Queued\" : \"Draft\"\n };\n\n FreezeUI.Freeze();\n\n try{\n const {data} = await authApi.put(`/api/emails/${id}`, values);\n\n if(sendEmail){\n FreezeUI.UnFreeze();\n } else {\n window.location.href = `/admin/emails/compose/${id}`;\n }\n Notifications.showSuccess({ message: \"Your email has been sent.\" });\n modal.hide();\n }\n catch (err) {\n trackException(err);\n Notifications.showError({ message: \"There was a problem saving the email. Please try again later.\" });\n }\n finally {\n FreezeUI.UnFreeze();\n }\n}\n\nconst removeAttachment = async (id, file) => {\n\n const {data} = await authApi.delete(`/api/emails/attachments/${id}`, {\n data: {\n fileName: file.name\n }\n });\n\n console.log(data);\n}\n\nexport default Emails;\n","export const trackException = (err) => {\n if (typeof appInsights !== 'undefined') {\n appInsights.trackException(err);\n } else {\n console.log(err);\n }\n}\n","export class FreezeUI {\n\n static isFrozen = false;\n\n static Freeze = (options) => {\n\n if(this.isFrozen)\n return;\n\n const freezeHtml = document.createElement('div');\n freezeHtml.classList.add('freeze-ui');\n\n let parent = document.querySelector(options?.selector) || document.body;\n freezeHtml.setAttribute('data-text', options?.text || 'Please wait');\n if (document.querySelector(options?.selector)) {\n freezeHtml.style.position = 'absolute';\n\n this.isFrozen = true;\n }\n\n parent.appendChild(freezeHtml);\n };\n\n static UnFreeze = () => {\n let element = document.querySelector('.freeze-ui');\n if (element) {\n element.classList.add('is-unfreezing');\n setTimeout(() => {\n if (element) {\n element.classList.remove('is-unfreezing');\n element.parentElement?.removeChild(element);\n\n this.isFrozen = false;\n }\n }, 250);\n }\n };\n}\n","export class Guid {\n static newGuid() {\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n let r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n}\n","import {api} from \"./api\";\nimport {Notifications} from \"./notifications\";\n\nexport class ImageUpload {\n\n constructor() {\n this.event = new Event('modal.loaded');\n }\n\n static getPlaceholder() {\n let placeholderElement = document.querySelector(\"#modal-placeholder\");\n\n if (!placeholderElement) {\n placeholderElement = document.createElement('div');\n placeholderElement.id = \"modal-placeholder\";\n\n document.body.appendChild(placeholderElement);\n }\n\n return placeholderElement;\n }\n\n static init() {\n document.querySelectorAll(\"input[data-toggle=\\\"upload-image\\\"]\").forEach((el) => {\n el.addEventListener(\"change\", async (e) => {\n const placeholderElement = this.getPlaceholder();\n let cropper;\n\n const uploadUrl = el.dataset.url;\n const messageTitle = el.dataset.messageTitle;\n const successMessage = el.dataset.successMessage;\n const previewClass = el.dataset.previewClass;\n const imageWidth = el.dataset.imageWidth ?? 400;\n const imageHeight = el.dataset.imageHeight ?? 400;\n const aspectRatio = el.dataset.aspectRatio ?? 1;\n const urlInput = el.dataset.urlInput;\n\n const {data} = await axios.get(\"/uploadimage/\");\n\n const modalHtml = new DOMParser().parseFromString(data, 'text/html');\n placeholderElement.append(...modalHtml.body.children);\n const modalEl = placeholderElement.querySelector(\".modal\");\n\n const modal = new bootstrap.Modal(modalEl);\n\n modalEl.addEventListener('show.bs.modal', e => {\n cropper = new Cropper(document.getElementById('image'), {\n aspectRatio: aspectRatio,\n dragMode: 'move',\n cropBoxMovable: false,\n cropBoxResizable: false,\n minContainerWidth: 300,\n minContainerHeight: 300,\n minCanvasWidth: 0,\n minCropBoxWidth: 250,\n autoCropArea: 0.9,\n viewMode: 0,\n });\n\n let buttons = document.getElementById('cropper-buttons');\n let methods = buttons.querySelectorAll('[data-method]');\n methods.forEach(function (button) {\n button.addEventListener('click', function (e) {\n let method = button.getAttribute('data-method');\n let option = button.getAttribute('data-option');\n let option2 = button.getAttribute('data-second-option');\n\n let result;\n if (option2) {\n result = cropper[method](option, option2);\n } else if (option) {\n result = cropper[method](option);\n } else {\n result = cropper[method]();\n }\n\n if (method === 'getCroppedCanvas') {\n const modal = document.getElementById('getCroppedCanvasModal');\n const modalBody = modal.querySelector('.modal-body');\n modalBody.innerHTML = '';\n modalBody.appendChild(result);\n }\n\n const input = document.querySelector('#putData');\n try {\n input.value = JSON.stringify(result);\n } catch (e) {\n if (!result) {\n input.value = result;\n }\n }\n });\n });\n });\n\n modalEl.addEventListener('hide.bs.modal', e => {\n cropper.destroy();\n cropper = null;\n\n placeholderElement.innerHTML = \"\";\n });\n\n const cropButton = placeholderElement.querySelector(\"#crop\");\n cropButton.addEventListener(\"click\", async e => {\n e.preventDefault();\n cropButton.setAttribute(\"data-kt-indicator\", \"on\");\n cropButton.setAttribute(\"disabled\", \"disabled\");\n\n let canvas;\n if (cropper) {\n let imageData = cropper.getImageData();\n canvas = cropper.getCroppedCanvas({\n width: imageWidth,\n height: imageHeight,\n maxWidth: imageData.naturalWidth,\n maxHeight: imageData.naturalHeight,\n imageSmoothingQuality: 'high'\n });\n\n document.querySelectorAll(`.${previewClass}`).forEach(el => {\n el.removeAttribute(\"srcset\");\n el.setAttribute(\"src\", canvas.toDataURL());\n el.removeAttribute(\"style\");\n });\n\n canvas.toBlob(async blob => {\n let formData = new FormData();\n formData.append('upload', blob, file.name);\n\n try {\n const {data} = await api.post(uploadUrl, formData);\n Notifications.showSuccess({ message: successMessage });\n\n if (urlInput && data.url)\n document.getElementById(urlInput).value = data.url;\n\n } catch {\n Notifications.showError({ message: \"There was an error uploading the image.\" });\n } finally {\n modal.hide();\n }\n });\n }\n });\n\n let done = url => {\n e.target.value = '';\n document.getElementById('image').src = url;\n\n modal.show();\n };\n\n const file = e.target.files[0];\n if(file) {\n if (URL) {\n done(URL.createObjectURL(file));\n } else if (FileReader) {\n const reader = new FileReader();\n reader.onload = function (e) {\n done(reader.result);\n };\n reader.readAsDataURL(file);\n }\n }\n });\n });\n }\n\n}\n","// LocalStorageService.js\nexport class LocalStorage {\n\n static setToken(tokenObj) {\n localStorage.setItem(\"token\", tokenObj.access_token);\n localStorage.setItem(\"expires\", tokenObj.expires);\n }\n\n static getToken() {\n return localStorage.getItem(\"token\");\n }\n\n static clearToken() {\n localStorage.removeItem(\"token\");\n localStorage.removeItem(\"expiration\");\n }\n}\n","export class Mask {\n\n static initEl(el){\n const inputType = el.dataset.mask;\n\n switch (inputType) {\n case \"date\":\n new Cleave(el, {\n date: true,\n datePattern: ['d', 'm', 'Y'],\n delimiter: '/'\n });\n break;\n\n case \"time\":\n new Cleave(el, {\n time: true,\n timePattern: ['h', 'm']\n });\n break;\n case \"integer\":\n new Cleave(el, {\n numeral: true,\n numeralThousandsGroupStyle: \"none\",\n numeralDecimalScale: 0,\n numeralDecimalMark: \"\"\n });\n break;\n\n case \"decimal\":\n new Cleave(el, {\n numeral: true,\n numeralThousandsGroupStyle: \"none\"\n });\n break;\n\n case \"duration\":\n const pattern = el.dataset.pattern;\n new Cleave(el, {\n time: true,\n timePattern: pattern.split(\",\")\n });\n break;\n case \"currency\":\n new Cleave(el, {\n numeral: true,\n numeralThousandsGroupStyle: \"none\",\n numeralPositiveOnly: true\n });\n break;\n }\n }\n static init() {\n Array.from(document.querySelectorAll('[data-mask]')).forEach(function (el) {\n Mask.initEl(el);\n });\n }\n}\n","import {FreezeUI} from \"./freeze-ui\";\nimport {trackException} from \"./errors\";\nimport {Notifications} from \"./notifications\";\n\nexport const setModalContent = (html) => {\n const placeholderElement = document.querySelector(\"#modal-placeholder\");\n placeholderElement.innerHTML = \"\"; // Clear just in case it has an old modal in it\n\n const modalHtml = new DOMParser().parseFromString(html, 'text/html');\n placeholderElement.append(...modalHtml.body.children);\n const modalEl = placeholderElement.querySelector(\".modal\");\n\n const modal = new bootstrap.Modal(modalEl);\n modal.show();\n\n return modal;\n}\n\nexport const setAjaxModalContent = async url => {\n\n try {\n FreezeUI.Freeze();\n\n const {data} = await axios.get(url);\n\n return setModalContent(data);\n } catch (error) {\n trackException(error);\n Notifications.showError({ message: \"There was a problem opening the modal.\" });\n } finally {\n FreezeUI.UnFreeze();\n }\n}\n\nconst Modals = function () {\n\n const handleModalLaunchClick = async el =>{\n const url = el.href;\n\n await setAjaxModalContent(url);\n };\n\n return {\n // Public functions\n init: function () {\n document.addEventListener(\"click\", async e => {\n const target = e.target.closest(\"a[data-bs-toggle=\\\"ajax-modal\\\"]\")\n if (!target)\n return;\n\n e.preventDefault();\n await handleModalLaunchClick(target);\n });\n }\n }\n}();\n\nexport default Modals;\n","export class Notifications {\n\n static notificationCookieName = \".clubpal.toast\";\n static alertCookieName = \".clubpal.alert\";\n\n static init() {\n window.addEventListener('load', function () {\n\n const notificationCookie = Notifications.getCookie(Notifications.notificationCookieName);\n if (notificationCookie) {\n\n let values = Notifications.parseQuery(notificationCookie);\n if (values[\"message\"]) {\n showMessage({message: values[\"message\"], type: values[\"type\"]});\n\n Notifications.setCookie(Notifications.notificationCookieName, \"\", -1);\n }\n }\n\n const alertCookie = Notifications.getCookie(Notifications.alertCookieName);\n if (alertCookie) {\n\n let values = Notifications.parseQuery(alertCookie);\n if (values[\"message\"]) {\n Notifications.alert.fire({ title: values[\"title\"], html: values[\"message\"]});\n }\n Notifications.setCookie(Notifications.alertCookieName, \"\", -1);\n }\n });\n }\n\n static setNotificationCookie(title) {\n Notifications.setCookie(btoa(`message=${title}&type=success`), 1);\n }\n\n /**\n *\n * @param {object} options - Options\n * @param {string} options.message - The message for the notification\n * @param {string} [options.title] - An optional title for the notification\n * @param {number} [options.timeout] - The time in milliseconds to show the notification. Set to 0 to not auto-hide.\n */\n static showSuccess = (options) => {\n options.type = \"success\";\n\n showMessage(options);\n }\n\n /**\n *\n * @param {object} options - Options\n * @param {string} options.message - The message for the notification\n * @param {string} [options.title] - An optional title for the notification\n * @param {number} [options.timeout] - The time in milliseconds to show the notification. Set to 0 to not auto-hide.\n */\n static showError = (options) => {\n options.type = \"error\";\n\n showMessage(options);\n }\n\n /**\n *\n * @param {object} options - Options\n * @param {string} options.message - The message for the notification\n * @param {string} [options.title] - An optional title for the notification\n * @param {number} [options.timeout] - The time in milliseconds to show the notification. Set to 0 to not auto-hide.\n */\n static showWarning = (options) => {\n options.type = \"warning\";\n\n showMessage(options);\n }\n\n /**\n *\n * @param {object} options - Options\n * @param {string} options.message - The message for the notification\n * @param {string} [options.title] - An optional title for the notification\n * @param {number} [options.timeout] - The time in milliseconds to show the notification. Set to 0 to not auto-hide.\n */\n static showInfo = (options) => {\n options.type = \"warning\";\n\n showMessage(options);\n }\n\n static confirm = Swal?.mixin({\n showConfirmButton: true,\n showDenyButton: true,\n reverseButtons: true,\n customClass: {\n actions: \"d-flex justify-content-between w-100\",\n confirmButton: \"px-10 btn btn-primary d-flex align-items-center\",\n denyButton: \"px-10 btn btn-danger d-flex align-items-center\",\n input: ''\n },\n confirmButtonText: ' Yes',\n denyButtonText: ' No',\n });\n\n static alert = Swal.mixin({\n showConfirmButton: true,\n showDenyButton: false,\n reverseButtons: false,\n customClass: {\n actions: \"d-flex justify-content-center w-100\",\n confirmButton: \"px-10 btn btn-light-primary d-flex align-items-center\",\n input: ''\n },\n confirmButtonText: 'OK!'\n });\n\n static setCookie(cookieName, value, minutes) {\n let expires = \"\";\n if (minutes) {\n const date = new Date();\n date.setTime(date.getTime() + (minutes * 60 * 1000));\n expires = \"; expires=\" + date.toUTCString();\n }\n\n document.cookie = cookieName + \"=\" + (value || \"\") + expires + \"; path=/\";\n }\n\n static getCookie(cookieName) {\n let nameEQ = cookieName + \"=\";\n let ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) {\n let value = decodeURIComponent(c.substring(nameEQ.length, c.length));\n return atob(value);\n }\n }\n\n return null;\n }\n\n static parseQuery(queryString) {\n let query = {};\n let pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&');\n for (let i = 0; i < pairs.length; i++) {\n let pair = pairs[i].split('=');\n query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '');\n }\n return query;\n }\n}\n\nlet container;\n\nconst alertTemplate = Handlebars.compile(`\n
\n {{#if title}}\n
{{title}}
\n {{/if}}\n
\n
\n {{message}}\n
\n \n
\n
\n
\n`);\n\nconst ensureContainer = () => {\n if(container)\n return container;\n\n container = document.createElement(\"div\");\n container.id = \"snackbar\";\n\n document.body.appendChild(container);\n\n return container;\n};\n\n/**\n *\n * @param {object} options - Options\n * @param {string} options.message - The message for the notification\n * @param {(\"success\" | \"warning\" | \"error\" | \"info\")} options.type - The type of notification to display. Options are success, warning, error, info.\n * @param {string} [options.title] - An optional title for the notification\n * @param {number} [options.timeout] - The time in milliseconds to show the notification. Set to 0 to not auto-hide.\n */\n\nconst showMessage = (options) => {\n\n const timeout = options.timeout ?? 5000;\n\n const alert = document.createElement(\"div\");\n alert.innerHTML = alertTemplate(options);\n\n ensureContainer().appendChild(alert);\n alert.className = `snack ${options.type} show`;\n\n const closeButton = alert.querySelector(\"a.close\");\n closeButton.addEventListener(\"click\", (e) => {\n e.preventDefault();\n\n hideAlert();\n });\n\n if(timeout > 0) {\n setTimeout(hideAlert, timeout);\n }\n\n function hideAlert() {\n alert.remove();\n }\n};\n\n","import {authApi} from \"./api\";\nimport {FreezeUI} from \"./freeze-ui\";\nimport {Notifications} from \"./notifications\";\n\nexport class Profiles {\n static init() {\n document.querySelectorAll(\"[data-switch-profile]\").forEach((el) => {\n el.addEventListener(\"click\", async (e) => {\n e.preventDefault();\n\n const memberId = el.dataset.memberId;\n const memberName = el.dataset.memberName;\n\n FreezeUI.Freeze();\n\n try {\n await authApi.put('/api/me/switch', {memberId: memberId});\n\n Notifications.setNotificationCookie(`You are now logged in as ${memberName}`);\n\n location.reload();\n } catch (err) {\n console.error(err);\n FreezeUI.UnFreeze();\n Notifications.showError({ message: \"We were unable to switch your profile.\" })\n }\n\n });\n });\n }\n}\n","import {Notifications} from \"./notifications\";\n\nconst SignalR = function () {\n return {\n init: () => {\n if (typeof signalR !== 'undefined') {\n const connection = new signalR.HubConnectionBuilder()\n .withUrl(\"/notifications\")\n .configureLogging(signalR.LogLevel.Warning)\n .build();\n\n connection.on(\"notification\", (message, type) => {\n switch (type) {\n case \"error\":\n Notifications.showError({ message });\n break;\n case \"warning\":\n Notifications.showWarning({ message });\n break;\n default:\n Notifications.showSuccess({ message });\n }\n });\n\n connection.start().then(() => {\n\n }).catch(err => {\n // return console.error(err.toString());\n });\n }\n }\n }\n}();\n\nexport default SignalR;\n","import {debounce} from \"./debounce\";\n\nexport const memberSearchTagify = (selector, enableSmartGroups, options) => {\n\n const input = document.querySelector(selector);\n\n if (!input) {\n console.warn(`A tagify instance cannot be created because the no element with the selector \"${selector}\" could be found.`);\n return;\n }\n\n let whitelist = [];\n if (input.value.length > 0) {\n whitelist = JSON.parse(input.value);\n }\n\n const defaultOptions = {\n tagTextProp: \"text\",\n enforceWhitelist: true,\n whitelist: whitelist,\n skipInvalid: true,\n dropdown: {\n closeOnSelect: true,\n enabled: 1,\n classname: \"users-list\",\n searchKeys: [\"text\"]\n },\n templates: {\n tag: memberTemplate,\n dropdownItem: memberSuggestionTemplate\n }\n };\n\n const tagify = new Tagify(input, {...defaultOptions, ...options});\n\n tagify.on(\"input\", debounce(async (e) => {\n tagify.whitelist = null;\n tagify.loading(true);\n\n const {data} = await axios.get(`/members?term=${e.detail.value}&smartGroups=${enableSmartGroups}`);\n tagify.whitelist = data.results;\n tagify\n .loading(false)\n .dropdown.show(e.detail.value);\n }, 300));\n\n return tagify;\n}\n\nexport const ajaxTagify = (selector, url) => {\n\n const input = document.querySelector(selector);\n\n if(!input){\n console.warn(`A tagify instance cannot be created because the no element with the selector \"${selector}\" could be found.`);\n return;\n }\n\n let whitelist = [];\n if(input.value.length > 0){\n whitelist = JSON.parse(input.value);\n }\n\n const tagify = new Tagify(input, {\n tagTextProp: \"text\",\n whitelist: whitelist,\n enforceWhitelist: true,\n skipInvalid: true,\n dropdown: {\n mapValueTo: \"text\",\n closeOnSelect: true,\n enabled: 1,\n classname: \"tagify-list\",\n searchKeys: [\"text\"]\n },\n });\n\n tagify.on(\"input\", debounce(async (e) => {\n tagify.whitelist = null;\n tagify.loading(true);\n\n const {data} = await axios.get(`${url}&term=${e.detail.value}`);\n tagify.whitelist = data.results;\n tagify\n .loading(false)\n .dropdown.show(e.detail.value);\n }, 300));\n\n return tagify;\n};\n\nexport const whitelistTagify = (selector, options) => {\n const el = document.querySelector(selector);\n if(!el)\n return;\n\n const defaultOptions = {\n whitelist: el.dataset.whitelistItems ? JSON.parse(el.dataset.whitelistItems) : \"\",\n enforceWhitelist: true,\n originalInputValueFormat: valuesArr => valuesArr.map(item => item.value).join(','),\n dropdown: {\n maxItems: 20,\n enabled: 0,\n classname: \"tags-look\",\n closeOnSelect: false\n }\n };\n\n return new Tagify(el, {...defaultOptions, ...options});\n}\n\n//#region Templates\n\nfunction memberTemplate(tagData) {\n return `\n \n \n
\n ${tagData.text}\n
\n
\n `;\n}\n\nfunction memberSuggestionTemplate(tagData) {\n return `\n
\n
\n ${tagData.text}\n
\n
\n `;\n}\n\n//#endregion Templates\n\n","import { authApi } from \"./api\";\nimport { Validation } from \"./validation\";\nimport { Notifications } from \"./notifications\";\nimport {trackException} from \"./errors\";\n\nconst ThemeBuilder = function() {\n let container, saveButton, discardButton, revertButton, primaryColorEl, secondaryColorEl, navigationBgColorEl, headerBgColorEl, pageBgColorEl;\n\n const handleSaveClick = async e => {\n e.preventDefault();\n\n try {\n Validation.disableButton(saveButton);\n\n await authApi.put(\"/api/theme\", {\n primaryColor: primaryColorEl.value,\n secondaryColor: secondaryColorEl.value,\n navigationBgColor: navigationBgColorEl.value,\n headerBgColor: headerBgColorEl.value,\n // pageBgColor: pageBgColorEl.value,\n });\n\n Notifications.setNotificationCookie(\"The theme has been applied and is now active.\");\n location.reload();\n } catch(err){\n trackException(err);\n Validation.enableButton(saveButton);\n Notifications.showError({ message: \"There was a problem saving the theme.\" })\n }\n }\n\n const handleDiscardClick = async e => {\n e.preventDefault();\n\n Notifications.confirm.fire({text: \"Are you sure you want to discard the current changes?\"})\n .then(async (result) => {\n if (result.isConfirmed) {\n try {\n location.reload();\n } catch (err) {\n trackException(err);\n Validation.enableButton(revertButton);\n Notifications.showError({ message: \"There was a problem saving the theme.\" })\n }\n }\n });\n }\n\n const handleRevertClick = async e => {\n e.preventDefault();\n\n Notifications.confirm.fire({text: \"Are you sure you want to revert the theme to the default? The current colours will be reset and cannot be undone.\"})\n .then(async (result) => {\n if (result.isConfirmed) {\n try {\n Validation.disableButton(revertButton);\n\n await authApi.delete(\"/api/theme\");\n\n Notifications.setNotificationCookie(\"The theme has been reset to the default.\");\n location.reload();\n } catch (err) {\n trackException(err);\n Validation.enableButton(revertButton);\n Notifications.showError({ message: \"There was a problem saving the theme.\" })\n }\n }\n });\n }\n\n const primaryColorSelectors = [\"--bs-primary\", \"--bs-primary-rgb\", \"--bs-link-color\", \"--bs-text-primary\", \"--bs-menu-link-color-hover\", \"--bs-menu-link-color-show\", \"--bs-menu-link-color-here\", \"--bs-menu-link-color-active\", \"--bs-link-color-rgb\", \"--bs-component-active-bg\", \"--bs-link-hover-color-rgb\"];\n const secondaryColorSelectors = [\"--bs-secondary\", \"--bs-secondary-rgb\", \"--bs-text-secondary\"];\n const navigationBgColorSelectors = [\"--bs-app-header-base-bg-color\", \"--bs-app-header-sticky-bg-color\"];\n const headerBgColorSelectors = [\"--bs-app-toolbar-bg\"];\n\n\n const handleColorChange = e => {\n\n switch(e.target.id.toLowerCase()) {\n case \"primarycolor\":\n updateColor(primaryColorSelectors, e.target.value);\n break;\n case \"secondarycolor\":\n updateColor(secondaryColorSelectors, e.target.value);\n break;\n case \"navigationbgcolor\":\n updateColor(navigationBgColorSelectors, e.target.value);\n break;\n case \"headerbgcolor\":\n updateColor(headerBgColorSelectors, e.target.value);\n break;\n }\n }\n\n const updateColor = (selectors, color) => {\n selectors.forEach(el => {\n document.documentElement.style.setProperty(el, color);\n });\n }\n\n return {\n init: function () {\n container = document.getElementById(\"theme_builder\");\n if (!container)\n return;\n\n primaryColorEl = container.querySelector(\"#PrimaryColor\");\n secondaryColorEl = container.querySelector(\"#SecondaryColor\");\n navigationBgColorEl = container.querySelector(\"#NavigationBgColor\");\n headerBgColorEl = container.querySelector(\"#HeaderBgColor\");\n pageBgColorEl = container.querySelector(\"#PageBgColor\");\n\n saveButton = container.querySelector(\"#theme_builder_submit\");\n saveButton.addEventListener(\"click\", handleSaveClick);\n\n discardButton = container.querySelector(\"#theme_builder_discard\");\n discardButton.addEventListener(\"click\", handleDiscardClick);\n\n revertButton = container.querySelector(\"#theme_builder_revert\");\n revertButton.addEventListener(\"click\", handleRevertClick);\n\n container.querySelectorAll(\"input[type='color']\").forEach(el => {\n el.addEventListener(\"change\", handleColorChange);\n });\n }\n };\n}();\n\nexport default ThemeBuilder;\n","export const initTooltips = (element) => {\n const tooltipTriggerList = element?.querySelectorAll('[data-bs-toggle=\"tooltip\"]')\n\n if(tooltipTriggerList) {\n return [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl));\n }\n};\n","export class Validation{\n static getDefaultValidator(form) {\n\n return FormValidation.formValidation(form, {\n plugins: {\n trigger: new FormValidation.plugins.Trigger(),\n bootstrap: new FormValidation.plugins.Bootstrap5({\n rowSelector: '.fv-row',\n eleInvalidClass: 'bg-light-danger is-invalid',\n eleValidClass: ''\n }),\n declarative: new FormValidation.plugins.Declarative({html5Input: true})\n }\n });\n }\n\n static disableButton(button) {\n button?.setAttribute(\"disabled\", \"disabled\");\n button?.setAttribute(\"data-kt-indicator\", \"on\");\n }\n\n static enableButton(button) {\n button?.removeAttribute(\"disabled\");\n button?.removeAttribute(\"data-kt-indicator\");\n }\n\n static validateForm(e, validator, submitter) {\n e.preventDefault();\n\n const form = validator.form;\n if (validator) {\n validator.validate().then(status => {\n if (status === 'Valid') {\n Validation.disableButton(submitter || e.submitter);\n form.submit();\n }\n });\n }\n }\n\n static validateFormWithReCaptcha(e, validator, submitter) {\n e.preventDefault();\n\n const form = validator.form;\n if (validator) {\n validator.validate().then(function (status) {\n if (status === 'Valid') {\n\n Validation.disableButton(submitter || e.submitter);\n\n const recaptchaInput = form.querySelector(\"#RecaptchaResponse\");\n const siteKey = recaptchaInput.dataset.siteKey;\n\n grecaptcha.ready(function () {\n const action = recaptchaInput.dataset.action;\n grecaptcha.execute(siteKey, {action: action}).then(function (token) {\n recaptchaInput.value = token;\n\n form.submit();\n });\n });\n }\n });\n }\n }\n\n static showFormError(errorText, errorTitle) {\n const errorContainer = document.querySelector(\"#error-alert\");\n if(!errorContainer)\n return;\n\n errorContainer.style.display = \"flex\";\n errorContainer.querySelector(\".alert-text\").innerHTML = errorText;\n }\n\n static hideFormError() {\n const errorContainer = document.querySelector(\"#error-alert\");\n if (!errorContainer)\n return;\n\n errorContainer.style.display = \"none\";\n }\n}\n","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\n\nvar iterableToArray = require(\"./iterableToArray.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","module.exports = require(\"regenerator-runtime\");\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJTY3JpcHRzL3BhZ2VzL2FwcC5qcyIsIlNjcmlwdHMvc3JjL2FwaS5qcyIsIlNjcmlwdHMvc3JjL2NsaXBib2FyZC5qcyIsIlNjcmlwdHMvc3JjL2NvbW1vbi5qcyIsIlNjcmlwdHMvc3JjL2RlYm91bmNlLmpzIiwiU2NyaXB0cy9zcmMvZW1haWxzLmpzIiwiU2NyaXB0cy9zcmMvZXJyb3JzLmpzIiwiU2NyaXB0cy9zcmMvZnJlZXplLXVpLmpzIiwiU2NyaXB0cy9zcmMvZ3VpZC5qcyIsIlNjcmlwdHMvc3JjL2ltYWdlVXBsb2FkLmpzIiwiU2NyaXB0cy9zcmMvbG9jYWxTdG9yYWdlLmpzIiwiU2NyaXB0cy9zcmMvbWFzay5qcyIsIlNjcmlwdHMvc3JjL21vZGFscy5qcyIsIlNjcmlwdHMvc3JjL25vdGlmaWNhdGlvbnMuanMiLCJTY3JpcHRzL3NyYy9wcm9maWxlcy5qcyIsIlNjcmlwdHMvc3JjL3NpZ25hbHIuanMiLCJTY3JpcHRzL3NyYy90YWdpZnkuanMiLCJTY3JpcHRzL3NyYy90aGVtZWJ1aWxkZXIuanMiLCJTY3JpcHRzL3NyYy90b29sdGlwcy5qcyIsIlNjcmlwdHMvc3JjL3ZhbGlkYXRpb24uanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheUxpa2VUb0FycmF5LmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0LmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvbm9uSXRlcmFibGVTcHJlYWQuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztBQ0FBLElBQUEsWUFBQSxHQUFBLE9BQUE7QUFDQSxJQUFBLGNBQUEsR0FBQSxPQUFBO0FBQ0EsSUFBQSxTQUFBLEdBQUEsT0FBQTtBQUNBLElBQUEsUUFBQSxHQUFBLHNCQUFBLENBQUEsT0FBQTtBQUNBLElBQUEsT0FBQSxHQUFBLHNCQUFBLENBQUEsT0FBQTtBQUNBLElBQUEsYUFBQSxHQUFBLHNCQUFBLENBQUEsT0FBQTtBQUNBLElBQUEsVUFBQSxHQUFBLE9BQUE7QUFDQSxJQUFBLE9BQUEsR0FBQSxzQkFBQSxDQUFBLE9BQUE7QUFDQSxJQUFBLEtBQUEsR0FBQSxPQUFBO0FBQ0EsSUFBQSxTQUFBLEdBQUEsT0FBQTtBQUVBLElBQUksYUFBYSxHQUFHLFlBQVk7RUFFNUIsSUFBTSxjQUFjLEdBQUcsU0FBakIsY0FBYyxDQUFBLEVBQVM7SUFDekIsUUFBUSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsRUFBRSxFQUFJO01BQ3pELElBQUksYUFBYSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUU7UUFDaEMsWUFBWSxFQUFFO1VBQ1YsU0FBUyxFQUFFLEtBQUs7VUFDaEIsTUFBTSxFQUFFO1FBQ1osQ0FBQztRQUNELE9BQU8sRUFBRTtVQUNMLFFBQVEsRUFBRSxVQUFVO1VBQ3BCLFVBQVUsRUFBRTtZQUNSLEtBQUssRUFBRSxLQUFLO1lBQ1osS0FBSyxFQUFFLEtBQUs7WUFDWixPQUFPLEVBQUUsS0FBSztZQUNkLE9BQU8sRUFBRTtVQUNiO1FBQ0o7TUFDSixDQUFDLENBQUM7TUFFRixJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUNwQjtNQUVKLElBQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO01BQ3ZDLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNkLElBQUksRUFBRSxJQUFJO1FBQ1YsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDNUIsU0FBUyxFQUFFO01BQ2YsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0lBRUYsUUFBUSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsRUFBRSxFQUFJO01BQzdELElBQUksYUFBYSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUU7UUFDaEMsWUFBWSxFQUFFO1VBQ1YsU0FBUyxFQUFFLEtBQUs7VUFDaEIsTUFBTSxFQUFFO1FBQ1osQ0FBQztRQUNELE9BQU8sRUFBRTtVQUNMLFFBQVEsRUFBRSxVQUFVO1VBQ3BCLFVBQVUsRUFBRTtZQUNSLEtBQUssRUFBRSxJQUFJO1lBQ1gsS0FBSyxFQUFFLElBQUk7WUFDWCxPQUFPLEVBQUUsSUFBSTtZQUNiLE9BQU8sRUFBRTtVQUNiO1FBQ0o7TUFDSixDQUFDLENBQUM7TUFFRixJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUNwQjtJQUNSLENBQUMsQ0FBQztFQUNOLENBQUM7RUFFRCxJQUFNLGlCQUFpQixHQUFHLFNBQXBCLGlCQUFpQixDQUFBLEVBQVM7SUFDNUIsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsRUFBRSxFQUFJO01BQ3ZELEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQztNQUNuQyxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSw0QkFBNEIsQ0FBQztJQUN4RCxDQUFDLENBQUM7RUFDTixDQUFDO0VBRUQsSUFBTSxRQUFRLEdBQUcsU0FBWCxRQUFRLENBQUEsRUFBUztJQUNuQixJQUFNLEVBQUUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxlQUFlLENBQUM7TUFDckMsZ0JBQWdCLEVBQUUsS0FBSztNQUN2QixZQUFZLEVBQUU7SUFDbEIsQ0FBQyxDQUFDO0lBRUYsSUFBRyxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsRUFDZixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDbEIsQ0FBQztFQUVELElBQU0sZ0JBQWdCLEdBQUcsU0FBbkIsZ0JBQWdCLENBQUEsRUFBUztJQUUzQixRQUFRLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxFQUFFLEVBQUk7TUFDNUQsSUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZO01BQ3hDLElBQUcsQ0FBQyxRQUFRLEVBQ1I7TUFFSixJQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRTtRQUFFLE1BQU0sRUFBRTtNQUFNLENBQUMsQ0FBQztNQUV0RixFQUFFLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFlBQU07UUFDaEMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3ZCLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztFQUNOLENBQUM7RUFFRCxPQUFPO0lBQ0gsSUFBSSxFQUFFLFNBQU4sSUFBSSxDQUFBLEVBQWM7TUFDZCxjQUFjLENBQUMsQ0FBQztNQUNoQixpQkFBaUIsQ0FBQyxDQUFDO01BQ25CLElBQUEsc0JBQVksRUFBQyxRQUFRLENBQUM7TUFDdEIsUUFBUSxDQUFDLENBQUM7TUFDVixnQkFBZ0IsQ0FBQyxDQUFDO01BRWxCLGtCQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDZix3QkFBVyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ2xCLDRCQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDcEIsd0JBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNuQixrQkFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ2Isb0JBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNoQixtQkFBTyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ2Qsa0JBQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNiLFVBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNmO0VBQ0osQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLFlBQU07RUFDaEQsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hCLENBQUMsQ0FBQzs7Ozs7Ozs7O0FDdkhGLElBQUEsYUFBQSxHQUFBLE9BQUE7QUFDQSxJQUFBLE9BQUEsR0FBQSxPQUFBO0FBRU8sSUFBTSxVQUFVLEdBQUEsT0FBQSxDQUFBLFVBQUEsR0FBRyxZQUFZO0FBRS9CLElBQU0sR0FBRyxHQUFBLE9BQUEsQ0FBQSxHQUFBLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztFQUM1QixPQUFPLEVBQUU7SUFDTCwwQkFBMEIsRUFBRSxnQ0FBd0I7SUFDcEQsZUFBZSxFQUFFO0VBQ3JCO0FBQ0osQ0FBQyxDQUFDO0FBRUssSUFBTSxPQUFPLEdBQUEsT0FBQSxDQUFBLE9BQUEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0VBQ2hDLE9BQU8sRUFBRTtJQUNMLDBCQUEwQixFQUFFLGdDQUF3QjtJQUNwRCxlQUFlLEVBQUU7RUFDckI7QUFDSixDQUFDLENBQUM7QUFFRixPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQzVCLFVBQUEsTUFBTSxFQUFJO0VBQ04sSUFBTSxLQUFLLEdBQUcsMEJBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUNyQyxJQUFJLEtBQUssRUFBRTtJQUNQLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLGFBQUEsTUFBQSxDQUFhLEtBQUssQ0FBRTtFQUN2RDtFQUNBLE9BQU8sTUFBTTtBQUNqQixDQUFDLEVBQ0QsVUFBQSxLQUFLLEVBQUk7RUFDTCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUN6QixDQUFDLENBQUM7QUFFTixPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBQyxRQUFRLEVBQUs7RUFDeEMsT0FBTyxRQUFRO0FBQ25CLENBQUMsRUFDRCxVQUFVLEtBQUssRUFBRTtFQUNiLElBQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxNQUFNO0VBQ3BDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRTtJQUUxRCxlQUFlLENBQUMsTUFBTSxHQUFHLElBQUk7SUFDN0IsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLGVBQWUsQ0FBQztNQUFFLFVBQVUsRUFBRTtJQUFxQixDQUFDLENBQUMsRUFBRTtNQUFFLE9BQU8sRUFBRTtRQUFDLGVBQWUsRUFBRTtNQUFVO0lBQUMsQ0FBQyxDQUFDLENBQ2hJLElBQUksQ0FBQyxVQUFBLEdBQUcsRUFBSTtNQUNULElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7UUFDN0MsMEJBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztRQUMvQixlQUFlLENBQUMsT0FBTyxDQUFDLGFBQWEsYUFBQSxNQUFBLENBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUU7UUFFekUsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDO01BQ2pDO0lBQ0osQ0FBQyxDQUFDO0VBQ1Y7RUFDQSxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2hDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUNsRE4sSUFBQSxjQUFBLEdBQUEsT0FBQTtBQUNBLElBQUEsT0FBQSxHQUFBLE9BQUE7QUFBOEQsSUFFakQsU0FBUyxHQUFBLE9BQUEsQ0FBQSxTQUFBO0VBQUEsU0FBQSxVQUFBO0lBQUEsSUFBQSxnQkFBQSxtQkFBQSxTQUFBO0VBQUE7RUFBQSxXQUFBLGFBQUEsYUFBQSxTQUFBO0lBQUEsR0FBQTtJQUFBLEtBQUEsRUFDbEIsU0FBTyxJQUFJLENBQUEsRUFBRztNQUNWLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLE1BQU0sRUFBSTtRQUNqRSxJQUFNLFNBQVMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFFekMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBQSxDQUFDLEVBQUk7VUFDekIsNEJBQWEsQ0FBQyxXQUFXLENBQUM7WUFBRSxPQUFPLEVBQUU7VUFBNkMsQ0FBQyxDQUFDO1FBQ3hGLENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztNQUdGLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPO1FBQUEsSUFBQSxJQUFBLE9BQUEsa0JBQUEsMEJBQUEsWUFBQSxZQUFBLElBQUEsQ0FBRSxTQUFBLFFBQU0sQ0FBQztVQUFBLElBQUEsTUFBQSxFQUFBLEdBQUE7VUFBQSxPQUFBLFlBQUEsWUFBQSxJQUFBLFVBQUEsU0FBQSxRQUFBO1lBQUEsa0JBQUEsUUFBQSxDQUFBLElBQUEsR0FBQSxRQUFBLENBQUEsSUFBQTtjQUFBO2dCQUNoQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7Z0JBQUEsSUFDOUMsTUFBTTtrQkFBQSxRQUFBLENBQUEsSUFBQTtrQkFBQTtnQkFBQTtnQkFBQSxPQUFBLFFBQUEsQ0FBQSxNQUFBO2NBQUE7Z0JBR1gsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUVaLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVE7Z0JBQUEsUUFBQSxDQUFBLElBQUE7Z0JBQUEsT0FFN0IsSUFBQSwyQkFBbUIsb0JBQUEsTUFBQSxDQUFtQixTQUFTLENBQUMsR0FBRyxDQUFDLENBQUUsQ0FBQztjQUFBO2dCQUU3RCxRQUFRLENBQUMsZ0JBQWdCLENBQUMseUJBQXlCLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxNQUFNLEVBQUk7a0JBQ25FLElBQU0sU0FBUyxHQUFHLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQztrQkFFekMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBQSxDQUFDLEVBQUk7b0JBQ3pCLDRCQUFhLENBQUMsV0FBVyxDQUFDO3NCQUFFLE9BQU8sRUFBRTtvQkFBNkMsQ0FBQyxDQUFDO2tCQUN4RixDQUFDLENBQUM7Z0JBQ04sQ0FBQyxDQUFDO2NBQUM7Y0FBQTtnQkFBQSxPQUFBLFFBQUEsQ0FBQSxJQUFBO1lBQUE7VUFBQSxHQUFBLE9BQUE7UUFBQSxDQUNOO1FBQUEsaUJBQUEsRUFBQTtVQUFBLE9BQUEsSUFBQSxDQUFBLEtBQUEsT0FBQSxTQUFBO1FBQUE7TUFBQSxJQUFDO0lBQ047RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2pDRSxJQUFNLHdCQUF3QixHQUFBLE9BQUEsQ0FBQSx3QkFBQSxJQUFBLHFCQUFBLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQywwQ0FBMEMsQ0FBQyxjQUFBLHFCQUFBLHVCQUFsRSxxQkFBQSxDQUFvRSxLQUFLO0FBRTFHLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRTtFQUM3QixPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLENBQUM7QUFDakU7QUFFTyxTQUFTLFdBQVcsQ0FBQyxHQUFHLEVBQUU7RUFDN0IsT0FBTyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FDbkIsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FDbEIsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7QUFDaEM7QUFFTyxTQUFTLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0VBQ3JDLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUU7SUFDbkIsT0FBTyxHQUFHO0VBQ2Q7RUFDQSxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUs7QUFDcEM7QUFFTyxJQUFJLFlBQVksR0FBQSxPQUFBLENBQUEsWUFBQSxHQUFHLFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSTtBQUV0RSxJQUFJLG9CQUFvQixHQUFBLE9BQUEsQ0FBQSxvQkFBQSxnQkFBQSxNQUFBLENBQWdCLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFFO0FBRTFFLElBQU0sYUFBYSxHQUFBLE9BQUEsQ0FBQSxhQUFBLEdBQUcsMkRBQTJEO0FBRWpGLElBQU0sT0FBTyxHQUFBLE9BQUEsQ0FBQSxPQUFBLEdBQUcsU0FBVixPQUFPLENBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUs7RUFDNUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsS0FBSyxhQUFMLEtBQUssY0FBTCxLQUFLLEdBQUksR0FBRyxFQUFFLFFBQVEsQ0FBQztBQUM5QyxDQUFDO0FBRU0sSUFBTSxTQUFTLEdBQUEsT0FBQSxDQUFBLFNBQUEsR0FBRyxTQUFaLFNBQVMsQ0FBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBSztFQUM5QyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxLQUFLLGFBQUwsS0FBSyxjQUFMLEtBQUssR0FBSSxHQUFHLEVBQUUsUUFBUSxDQUFDO0FBQ2hELENBQUM7QUFFTSxJQUFNLElBQUksR0FBQSxPQUFBLENBQUEsSUFBQSxHQUFHLFNBQVAsSUFBSSxDQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUs7RUFDakMsSUFBSSxPQUFPLEVBQUUsS0FBSyxXQUFXLElBQUksRUFBRSxFQUFFO0lBQ2pDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFJLE9BQU8sR0FBRyxPQUFPLEdBQUcsT0FBUTtFQUNwRDtBQUNKLENBQUM7QUFFTSxJQUFNLElBQUksR0FBQSxPQUFBLENBQUEsSUFBQSxHQUFHLFNBQVAsSUFBSSxDQUFJLEVBQUUsRUFBSztFQUN4QixJQUFJLE9BQU8sRUFBRSxLQUFLLFdBQVcsSUFBSSxFQUFFLEVBQUU7SUFDakMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTTtFQUM3QjtBQUNKLENBQUM7QUFFTSxTQUFTLFVBQVUsQ0FBQSxFQUFHO0VBQ3pCLE9BQU8sa0NBQWtDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtJQUNwRSxJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztNQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUk7SUFDckUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztFQUN6QixDQUFDLENBQUM7QUFDTjtBQUVPLFNBQVMsY0FBYyxDQUFBLEVBQUc7RUFBQSxJQUFBLHFCQUFBLEVBQUEsc0JBQUE7RUFDN0IsUUFBQSxxQkFBQSxJQUFBLHNCQUFBLEdBQU8sUUFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFBLHNCQUFBLHVCQUF6QyxzQkFBQSxDQUEyQyxLQUFLLGNBQUEscUJBQUEsY0FBQSxxQkFBQSxHQUFJLE9BQU87QUFDdEU7QUFFTyxTQUFTLGVBQWUsQ0FBQSxFQUFHO0VBQUEsSUFBQSxzQkFBQSxFQUFBLHNCQUFBO0VBQzlCLFFBQUEsc0JBQUEsSUFBQSxzQkFBQSxHQUFPLFFBQVEsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsY0FBQSxzQkFBQSx1QkFBMUMsc0JBQUEsQ0FBNEMsS0FBSyxjQUFBLHNCQUFBLGNBQUEsc0JBQUEsR0FBSSxHQUFHO0FBQ25FO0FBRU8sU0FBUyxpQkFBaUIsQ0FBQSxFQUFHO0VBQ2hDLE9BQVEsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFO0lBQ3hDLEtBQUssRUFBRSxVQUFVO0lBQ2pCLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUMzQixxQkFBcUIsRUFBRSxDQUFDO0lBQ3hCLHFCQUFxQixFQUFFO0VBQzNCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEM7QUFFTyxTQUFTLGNBQWMsQ0FBQyxNQUFNLEVBQUU7RUFDbkMsT0FBTyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRTtJQUMzQyxLQUFLLEVBQUUsVUFBVTtJQUNqQixRQUFRLEVBQUUsZUFBZSxDQUFDO0VBQzlCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDckI7Ozs7Ozs7OztBQzFFTyxJQUFNLFFBQVEsR0FBQSxPQUFBLENBQUEsUUFBQSxHQUFHLFNBQVgsUUFBUSxDQUFhLFFBQVEsRUFBRSxFQUFFLEVBQUU7RUFDNUMsSUFBSSxLQUFLLEdBQUcsQ0FBQztFQUNiLE9BQU8sWUFBWTtJQUNmLElBQUksT0FBTyxHQUFHLElBQUk7TUFBRSxJQUFJLEdBQUcsU0FBUztJQUNwQyxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ25CLEtBQUssR0FBRyxVQUFVLENBQUMsWUFBWTtNQUMzQixRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7SUFDakMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFDZixDQUFDO0FBQ0wsQ0FBQzs7Ozs7Ozs7Ozs7OztBQ1RELElBQUEsY0FBQSxHQUFBLE9BQUE7QUFDQSxJQUFBLElBQUEsR0FBQSxPQUFBO0FBQ0EsSUFBQSxTQUFBLEdBQUEsT0FBQTtBQUNBLElBQUEsT0FBQSxHQUFBLE9BQUE7QUFDQSxJQUFBLE9BQUEsR0FBQSxPQUFBO0FBQ0EsSUFBQSxLQUFBLEdBQUEsT0FBQTtBQUNBLElBQUEsT0FBQSxHQUFBLE9BQUE7QUFFQSxJQUFJLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLEVBQUUsRUFBRSxLQUFLO0FBQ3JELElBQU0sV0FBVyxHQUFBLE9BQUEsQ0FBQSxXQUFBLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkIsSUFBTSxjQUFjLEdBQUEsT0FBQSxDQUFBLGNBQUEsR0FBRyxDQUFDLENBQUMsQ0FBQzs7QUFFMUIsSUFBTSxlQUFlLEdBQUEsT0FBQSxDQUFBLGVBQUEsR0FBRyxDQUFDO0FBRWhDLElBQU0sTUFBTSxHQUFHLFlBQVk7RUFFdkIsT0FBTztJQUNILElBQUk7TUFBQSxJQUFBLEtBQUEsT0FBQSxrQkFBQSwwQkFBQSxZQUFBLFlBQUEsSUFBQSxDQUFFLFNBQUEsU0FBQTtRQUFBLE9BQUEsWUFBQSxZQUFBLElBQUEsVUFBQSxVQUFBLFNBQUE7VUFBQSxrQkFBQSxTQUFBLENBQUEsSUFBQSxHQUFBLFNBQUEsQ0FBQSxJQUFBO1lBQUE7Y0FDRixRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTztnQkFBQSxJQUFBLElBQUEsT0FBQSxrQkFBQSwwQkFBQSxZQUFBLFlBQUEsSUFBQSxDQUFFLFNBQUEsUUFBTSxDQUFDO2tCQUFBLElBQUEsTUFBQSxFQUFBLFFBQUEsRUFBQSxJQUFBO2tCQUFBLE9BQUEsWUFBQSxZQUFBLElBQUEsVUFBQSxTQUFBLFFBQUE7b0JBQUEsa0JBQUEsUUFBQSxDQUFBLElBQUEsR0FBQSxRQUFBLENBQUEsSUFBQTtzQkFBQTt3QkFDaEMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDO3dCQUFBLElBQy9DLE1BQU07MEJBQUEsUUFBQSxDQUFBLElBQUE7MEJBQUE7d0JBQUE7d0JBQUEsT0FBQSxRQUFBLENBQUEsTUFBQTtzQkFBQTt3QkFHWCxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7d0JBQ1osUUFBUSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUTt3QkFDbEMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVTt3QkFBQSxRQUFBLENBQUEsSUFBQTt3QkFBQSxPQUVoQyxZQUFZLENBQUMsQ0FBQzswQkFBQyxLQUFLLEVBQUUsUUFBUTswQkFBRSxJQUFJLEVBQUU7d0JBQUksQ0FBQyxDQUFDLENBQUM7c0JBQUE7c0JBQUE7d0JBQUEsT0FBQSxRQUFBLENBQUEsSUFBQTtvQkFBQTtrQkFBQSxHQUFBLE9BQUE7Z0JBQUEsQ0FDdEQ7Z0JBQUEsaUJBQUEsRUFBQTtrQkFBQSxPQUFBLElBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQTtnQkFBQTtjQUFBLElBQUM7WUFBQztZQUFBO2NBQUEsT0FBQSxTQUFBLENBQUEsSUFBQTtVQUFBO1FBQUEsR0FBQSxRQUFBO01BQUEsQ0FDTjtNQUFBLFNBWkQsSUFBSSxDQUFBO1FBQUEsT0FBQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUE7TUFBQTtNQUFBLE9BQUosSUFBSTtJQUFBO0VBYVIsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUksSUFBTSxZQUFZLEdBQUEsT0FBQSxDQUFBLFlBQUEsR0FBRyxTQUFmLFlBQVksQ0FBSSxRQUFRLEVBQUUsRUFBRSxFQUFLO0VBRTFDLElBQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO0VBRWxELElBQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUM7RUFDN0QsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ25CLElBQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsU0FBUztFQUN4RCxXQUFXLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7RUFFL0MsSUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFO0lBQ3BDLEdBQUcsNkJBQUEsTUFBQSxDQUE2QixFQUFFLENBQUU7SUFDcEMsT0FBTyxFQUFFO01BQ0wsd0JBQXdCLEVBQUUsZ0NBQXdCO01BQ2xELGVBQWUsRUFBRTtJQUNyQixDQUFDO0lBQ0QsZUFBZSxFQUFFLGVBQWU7SUFDaEMsZUFBZSxFQUFFLGVBQWU7SUFDaEMsV0FBVyxFQUFFLFdBQVc7SUFBRTtJQUMxQixRQUFRLEVBQUUsY0FBYztJQUN4QixTQUFTLEVBQUUsSUFBSTtJQUNmLGlCQUFpQixFQUFFLFFBQVEsR0FBRyxrQkFBa0I7SUFDaEQsU0FBUyxFQUFFLGtCQUFrQixDQUFFO0VBQ25DLENBQUMsQ0FBQztFQUVGLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLFVBQVUsSUFBSSxFQUFFO0lBQ3JDLElBQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQztJQUNsRSxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQUEsWUFBWSxFQUFJO01BQ2xDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUU7SUFDbkMsQ0FBQyxDQUFDO0VBQ04sQ0FBQyxDQUFDO0VBRUYsUUFBUSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxVQUFVLFFBQVEsRUFBRTtJQUNuRCxJQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDO0lBQ2hFLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBQSxXQUFXLEVBQUk7TUFDaEMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLEdBQUc7SUFDNUMsQ0FBQyxDQUFDO0VBQ04sQ0FBQyxDQUFDO0VBRUYsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxJQUFJLEVBQUU7SUFDbkM7SUFDQSxJQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDO0lBQ2hFLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBQSxXQUFXLEVBQUk7TUFDaEMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRztJQUNuQyxDQUFDLENBQUM7RUFDTixDQUFDLENBQUM7RUFFRixRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLFFBQVEsRUFBRTtJQUN4QyxJQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDO0lBRS9ELFVBQVUsQ0FBQyxZQUFZO01BQ25CLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBQSxXQUFXLEVBQUk7UUFDaEMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUc7UUFDOUQsV0FBVyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUc7TUFDOUQsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxFQUFFLEdBQUcsQ0FBQztFQUNYLENBQUMsQ0FBQztFQUVGLFFBQVEsQ0FBQyxFQUFFLENBQUMsYUFBYTtJQUFBLElBQUEsS0FBQSxPQUFBLGtCQUFBLDBCQUFBLFlBQUEsWUFBQSxJQUFBLENBQUUsU0FBQSxTQUFNLElBQUk7TUFBQSxPQUFBLFlBQUEsWUFBQSxJQUFBLFVBQUEsVUFBQSxTQUFBO1FBQUEsa0JBQUEsU0FBQSxDQUFBLElBQUEsR0FBQSxTQUFBLENBQUEsSUFBQTtVQUFBO1lBQUEsU0FBQSxDQUFBLElBQUE7WUFBQSxPQUMzQixnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDO1VBQUE7VUFBQTtZQUFBLE9BQUEsU0FBQSxDQUFBLElBQUE7UUFBQTtNQUFBLEdBQUEsUUFBQTtJQUFBLENBQ25DO0lBQUEsaUJBQUEsR0FBQTtNQUFBLE9BQUEsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBO0lBQUE7RUFBQSxJQUFDO0VBRUYsSUFBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtJQUM5QixJQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO0lBRTdELFdBQVcsYUFBWCxXQUFXLGVBQVgsV0FBVyxDQUFFLE9BQU8sQ0FBQyxVQUFBLFVBQVUsRUFBSTtNQUMvQixJQUFNLFFBQVEsR0FBRztRQUNiLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtRQUNyQixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7UUFDckIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxXQUFXO1FBQzVCLFFBQVEsRUFBRTtNQUNkLENBQUM7TUFDRCxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7TUFDN0IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDO01BQ3BDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQztJQUN2QyxDQUFDLENBQUM7RUFDTjtFQUVBLE9BQU8sUUFBUTtBQUNuQixDQUFDO0FBRU0sSUFBTSxZQUFZLEdBQUEsT0FBQSxDQUFBLFlBQUE7RUFBQSxJQUFBLEtBQUEsT0FBQSxrQkFBQSwwQkFBQSxZQUFBLFlBQUEsSUFBQSxDQUFHLFNBQUEsU0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUk7SUFBQSxJQUFBLHFCQUFBO0lBQUEsSUFBQSxhQUFBLEVBQUEsZ0JBQUEsRUFBQSxJQUFBLEVBQUEsU0FBQSxFQUFBLE9BQUEsRUFBQSxZQUFBO0lBQUEsT0FBQSxZQUFBLFlBQUEsSUFBQSxVQUFBLFVBQUEsU0FBQTtNQUFBLGtCQUFBLFNBQUEsQ0FBQSxJQUFBLEdBQUEsU0FBQSxDQUFBLElBQUE7UUFBQTtVQUNoRCxFQUFFLEdBQUcsVUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1VBQ2IsYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUM7VUFBQSxTQUFBLENBQUEsSUFBQTtVQUFBLE9BQzdDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7UUFBQTtVQUFBLGdCQUFBLEdBQUEsU0FBQSxDQUFBLElBQUE7VUFBekMsSUFBSSxHQUFBLGdCQUFBLENBQUosSUFBSTtVQUVMLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUM7VUFDcEUsYUFBYSxDQUFDLE1BQU0sQ0FBQSxLQUFBLENBQXBCLGFBQWEsTUFBQSxtQkFBQSxhQUFXLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFDO1VBQzFDLE9BQU8sR0FBRyxhQUFhLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztVQUNyRCxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztVQUU5QixZQUFZLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7VUFDdkQsU0FBUyxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDO1VBRW5ELFNBQVMsQ0FBQyxLQUFLLEdBQUcsT0FBTyxhQUFQLE9BQU8sY0FBUCxPQUFPLEdBQUksRUFBRTtVQUUvQixVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztVQUM1QixVQUFVLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQztVQUM5QixrQkFBa0IsR0FBRyxZQUFZLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxDQUFDO1VBRTdELGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFVBQUMsQ0FBQyxFQUFLO1lBQ3hFLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUVsQiw0QkFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Y0FBRSxJQUFJLEVBQUU7WUFBMkMsQ0FBQyxDQUFDLENBQzNFLElBQUk7Y0FBQSxJQUFBLEtBQUEsT0FBQSxrQkFBQSwwQkFBQSxZQUFBLFlBQUEsSUFBQSxDQUFDLFNBQUEsU0FBTyxNQUFNO2dCQUFBLE9BQUEsWUFBQSxZQUFBLElBQUEsVUFBQSxVQUFBLFNBQUE7a0JBQUEsa0JBQUEsU0FBQSxDQUFBLElBQUEsR0FBQSxTQUFBLENBQUEsSUFBQTtvQkFBQTtzQkFBQSxLQUNYLE1BQU0sQ0FBQyxXQUFXO3dCQUFBLFNBQUEsQ0FBQSxJQUFBO3dCQUFBO3NCQUFBO3NCQUFBLFNBQUEsQ0FBQSxJQUFBO3NCQUFBLE9BQ1osU0FBUyxDQUFDLElBQUksQ0FBQztvQkFBQTtvQkFBQTtzQkFBQSxPQUFBLFNBQUEsQ0FBQSxJQUFBO2tCQUFBO2dCQUFBLEdBQUEsUUFBQTtjQUFBLENBRTVCO2NBQUEsaUJBQUEsR0FBQTtnQkFBQSxPQUFBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQTtjQUFBO1lBQUEsSUFBQztVQUNWLENBQUMsQ0FBQztVQUVGLENBQUEscUJBQUEsR0FBQSxhQUFhLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLGNBQUEscUJBQUEsZUFBL0MscUJBQUEsQ0FBaUQsZ0JBQWdCLENBQUMsT0FBTztZQUFBLElBQUEsS0FBQSxPQUFBLGtCQUFBLDBCQUFBLFlBQUEsWUFBQSxJQUFBLENBQUUsU0FBQSxTQUFPLENBQUM7Y0FBQSxPQUFBLFlBQUEsWUFBQSxJQUFBLFVBQUEsVUFBQSxTQUFBO2dCQUFBLGtCQUFBLFNBQUEsQ0FBQSxJQUFBLEdBQUEsU0FBQSxDQUFBLElBQUE7a0JBQUE7b0JBQy9FLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFBQyxTQUFBLENBQUEsSUFBQTtvQkFBQSxPQUViLFNBQVMsQ0FBQyxLQUFLLENBQUM7a0JBQUE7a0JBQUE7b0JBQUEsT0FBQSxTQUFBLENBQUEsSUFBQTtnQkFBQTtjQUFBLEdBQUEsUUFBQTtZQUFBLENBQ3pCO1lBQUEsaUJBQUEsR0FBQTtjQUFBLE9BQUEsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBO1lBQUE7VUFBQSxJQUFDO1VBRUYsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1VBRVosT0FBTyxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxVQUFBLENBQUMsRUFBSTtZQUMzQyxhQUFhLENBQUMsU0FBUyxHQUFHLEVBQUU7WUFDNUIsTUFBTSxHQUFHLElBQUk7WUFDYixNQUFNLEdBQUcsSUFBSTtVQUNqQixDQUFDLENBQUM7UUFBQztRQUFBO1VBQUEsT0FBQSxTQUFBLENBQUEsSUFBQTtNQUFBO0lBQUEsR0FBQSxRQUFBO0VBQUEsQ0FDTjtFQUFBLGdCQTNDWSxZQUFZLENBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBO0lBQUEsT0FBQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUE7RUFBQTtBQUFBLEdBMkN4Qjs7QUFFRDtBQUNBLElBQU0sVUFBVSxHQUFHLFNBQWIsVUFBVSxDQUFJLFNBQVMsRUFBRSxRQUFRLEVBQUs7RUFFeEM7RUFDQSxJQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztFQUNqRCxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FDMUIsTUFBTSxDQUFDLFFBQVEsRUFBRTtJQUNWLE9BQU8sRUFBRTtNQUNMLEtBQUssRUFBRSxDQUNILFNBQVMsRUFDVCxHQUFHLEVBQ0gsTUFBTSxFQUNOLFFBQVEsRUFDUixRQUFRLEVBQ1IsU0FBUyxFQUNULFdBQVcsRUFDWCxHQUFHLEVBQ0gsTUFBTSxFQUNOLGNBQWMsRUFDZCxjQUFjLEVBQ2QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixhQUFhO0lBRXJCO0VBQ0osQ0FBQyxDQUFDLENBQ0wsSUFBSSxDQUFDLFVBQUEsQ0FBQyxFQUFJO0lBQ1AsTUFBTSxHQUFHLENBQUM7RUFDZCxDQUFDLENBQUMsU0FDSSxDQUFDLFVBQUEsS0FBSyxFQUFJO0lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7RUFDeEIsQ0FBQyxDQUFDO0FBQ1YsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQSxJQUFNLFVBQVUsR0FBRyxTQUFiLFVBQVUsQ0FBSSxFQUFFLEVBQUUsRUFBRSxFQUFLO0VBRTNCLE1BQU0sR0FBRyxJQUFBLDBCQUFrQixFQUFDLEtBQUssRUFBRSxJQUFJLENBQUM7RUFDeEMsTUFBTSxDQUFDLFNBQVMsR0FBRyxFQUFFO0VBQ3JCLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0FBQ3RCLENBQUM7O0FBRUQ7O0FBRUEsSUFBTSxTQUFTO0VBQUEsSUFBQSxLQUFBLE9BQUEsa0JBQUEsMEJBQUEsWUFBQSxZQUFBLElBQUEsQ0FBRyxTQUFBLFNBQU8sU0FBUztJQUFBLElBQUEsSUFBQSxFQUFBLE9BQUEsRUFBQSxVQUFBLEVBQUEsTUFBQSxFQUFBLGtCQUFBLEVBQUEsSUFBQTtJQUFBLE9BQUEsWUFBQSxZQUFBLElBQUEsVUFBQSxVQUFBLFNBQUE7TUFBQSxrQkFBQSxTQUFBLENBQUEsSUFBQSxHQUFBLFNBQUEsQ0FBQSxJQUFBO1FBQUE7VUFDeEIsSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztVQUN2QixPQUFPLEdBQUcsU0FBUyxDQUFDLEtBQUs7VUFDekIsVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQztZQUFBLE9BQUs7Y0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7Y0FBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQUksQ0FBQztVQUFBLENBQUMsQ0FBQztVQUFBLE1BRXZFLFNBQVMsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUM7WUFBQSxTQUFBLENBQUEsSUFBQTtZQUFBO1VBQUE7VUFDbEMsNEJBQWEsQ0FBQyxXQUFXLENBQUM7WUFBRSxPQUFPLEVBQUU7VUFBeUQsQ0FBQyxDQUFDO1VBQUMsT0FBQSxTQUFBLENBQUEsTUFBQTtRQUFBO1VBQUEsTUFJakcsU0FBUyxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQztZQUFBLFNBQUEsQ0FBQSxJQUFBO1lBQUE7VUFBQTtVQUNoQyw0QkFBYSxDQUFDLFdBQVcsQ0FBQztZQUFFLE9BQU8sRUFBRTtVQUEwQixDQUFDLENBQUM7VUFBQyxPQUFBLFNBQUEsQ0FBQSxNQUFBO1FBQUE7VUFBQSxNQUluRSxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQUEsU0FBQSxDQUFBLElBQUE7WUFBQTtVQUFBO1VBQzVCLDRCQUFhLENBQUMsV0FBVyxDQUFDO1lBQUUsT0FBTyxFQUFFO1VBQStCLENBQUMsQ0FBQztVQUFDLE9BQUEsU0FBQSxDQUFBLE1BQUE7UUFBQTtVQUlyRSxNQUFNLEdBQUc7WUFDWCxFQUFFLEVBQUYsRUFBRTtZQUNGLE9BQU8sRUFBUCxPQUFPO1lBQ1AsSUFBSSxFQUFKLElBQUk7WUFDSixVQUFVLEVBQVYsVUFBVTtZQUNWLE1BQU0sRUFBRSxTQUFTLEdBQUcsUUFBUSxHQUFHO1VBQ25DLENBQUM7VUFFRCxrQkFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQUMsU0FBQSxDQUFBLElBQUE7VUFBQSxTQUFBLENBQUEsSUFBQTtVQUFBLE9BR08sWUFBTyxDQUFDLEdBQUcsZ0JBQUEsTUFBQSxDQUFnQixFQUFFLEdBQUksTUFBTSxDQUFDO1FBQUE7VUFBQSxrQkFBQSxHQUFBLFNBQUEsQ0FBQSxJQUFBO1VBQXRELElBQUksR0FBQSxrQkFBQSxDQUFKLElBQUk7VUFFWCxJQUFHLFNBQVMsRUFBQztZQUNULGtCQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7VUFDdkIsQ0FBQyxNQUFNO1lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLDRCQUFBLE1BQUEsQ0FBNEIsRUFBRSxDQUFFO1VBQ3hEO1VBQ0EsNEJBQWEsQ0FBQyxXQUFXLENBQUM7WUFBRSxPQUFPLEVBQUU7VUFBNEIsQ0FBQyxDQUFDO1VBQ25FLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUFDLFNBQUEsQ0FBQSxJQUFBO1VBQUE7UUFBQTtVQUFBLFNBQUEsQ0FBQSxJQUFBO1VBQUEsU0FBQSxDQUFBLEVBQUEsR0FBQSxTQUFBO1VBR2IsSUFBQSxzQkFBYyxFQUFBLFNBQUEsQ0FBQSxFQUFJLENBQUM7VUFDbkIsNEJBQWEsQ0FBQyxTQUFTLENBQUM7WUFBRSxPQUFPLEVBQUU7VUFBZ0UsQ0FBQyxDQUFDO1FBQUM7VUFBQSxTQUFBLENBQUEsSUFBQTtVQUd0RyxrQkFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1VBQUMsT0FBQSxTQUFBLENBQUEsTUFBQTtRQUFBO1FBQUE7VUFBQSxPQUFBLFNBQUEsQ0FBQSxJQUFBO01BQUE7SUFBQSxHQUFBLFFBQUE7RUFBQSxDQUUzQjtFQUFBLGdCQWhESyxTQUFTLENBQUEsR0FBQTtJQUFBLE9BQUEsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBO0VBQUE7QUFBQSxHQWdEZDtBQUVELElBQU0sZ0JBQWdCO0VBQUEsSUFBQSxLQUFBLE9BQUEsa0JBQUEsMEJBQUEsWUFBQSxZQUFBLElBQUEsQ0FBRyxTQUFBLFNBQU8sRUFBRSxFQUFFLElBQUk7SUFBQSxJQUFBLHFCQUFBLEVBQUEsSUFBQTtJQUFBLE9BQUEsWUFBQSxZQUFBLElBQUEsVUFBQSxVQUFBLFNBQUE7TUFBQSxrQkFBQSxTQUFBLENBQUEsSUFBQSxHQUFBLFNBQUEsQ0FBQSxJQUFBO1FBQUE7VUFBQSxTQUFBLENBQUEsSUFBQTtVQUFBLE9BRWYsWUFBTyxVQUFPLDRCQUFBLE1BQUEsQ0FBNEIsRUFBRSxHQUFJO1lBQ2pFLElBQUksRUFBRTtjQUNGLFFBQVEsRUFBRSxJQUFJLENBQUM7WUFDbkI7VUFDSixDQUFDLENBQUM7UUFBQTtVQUFBLHFCQUFBLEdBQUEsU0FBQSxDQUFBLElBQUE7VUFKSyxJQUFJLEdBQUEscUJBQUEsQ0FBSixJQUFJO1VBTVgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFBQztRQUFBO1VBQUEsT0FBQSxTQUFBLENBQUEsSUFBQTtNQUFBO0lBQUEsR0FBQSxRQUFBO0VBQUEsQ0FDckI7RUFBQSxnQkFUSyxnQkFBZ0IsQ0FBQSxHQUFBLEVBQUEsSUFBQTtJQUFBLE9BQUEsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBO0VBQUE7QUFBQSxHQVNyQjtBQUFBLElBQUEsUUFBQSxHQUFBLE9BQUEsY0FFYyxNQUFNOzs7Ozs7Ozs7QUMxUWQsSUFBTSxjQUFjLEdBQUEsT0FBQSxDQUFBLGNBQUEsR0FBRyxTQUFqQixjQUFjLENBQUksR0FBRyxFQUFLO0VBQ25DLElBQUksT0FBTyxXQUFXLEtBQUssV0FBVyxFQUFFO0lBQ3BDLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO0VBQ25DLENBQUMsTUFBTTtJQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0VBQ3BCO0FBQ0osQ0FBQzs7Ozs7Ozs7Ozs7Ozs7SUNOYSxRQUFRLEdBQUEsT0FBQSxDQUFBLFFBQUEsb0JBQUEsYUFBQSxzQkFBQSxTQUFBO0VBQUEsSUFBQSxnQkFBQSxtQkFBQSxRQUFBO0FBQUE7QUFBQSxTQUFBLEdBQVIsUUFBUTtBQUFBLElBQUEsZ0JBQUEsYUFBUixRQUFRLGNBRUEsS0FBSztBQUFBLElBQUEsZ0JBQUEsYUFGYixRQUFRLFlBSUYsVUFBQyxPQUFPLEVBQUs7RUFFekIsSUFBRyxTQUFBLENBQUssUUFBUSxFQUNaO0VBRUosSUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7RUFDaEQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO0VBRXJDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJO0VBQ3ZFLFVBQVUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksS0FBSSxhQUFhLENBQUM7RUFDcEUsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxRQUFRLENBQUMsRUFBRTtJQUMzQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVO0lBRXRDLFNBQUEsQ0FBSyxRQUFRLEdBQUcsSUFBSTtFQUN4QjtFQUVBLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO0FBQ2xDLENBQUM7QUFBQSxJQUFBLGdCQUFBLGFBckJTLFFBQVEsY0F1QkEsWUFBTTtFQUNwQixJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQztFQUNsRCxJQUFJLE9BQU8sRUFBRTtJQUNULE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQztJQUN0QyxVQUFVLENBQUMsWUFBTTtNQUNiLElBQUksT0FBTyxFQUFFO1FBQUEsSUFBQSxxQkFBQTtRQUNULE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUN6QyxDQUFBLHFCQUFBLEdBQUEsT0FBTyxDQUFDLGFBQWEsY0FBQSxxQkFBQSxlQUFyQixxQkFBQSxDQUF1QixXQUFXLENBQUMsT0FBTyxDQUFDO1FBRTNDLFNBQUEsQ0FBSyxRQUFRLEdBQUcsS0FBSztNQUN6QjtJQUNKLENBQUMsRUFBRSxHQUFHLENBQUM7RUFDWDtBQUNKLENBQUM7Ozs7Ozs7Ozs7OztJQ3BDUSxJQUFJLEdBQUEsT0FBQSxDQUFBLElBQUE7RUFBQSxTQUFBLEtBQUE7SUFBQSxJQUFBLGdCQUFBLG1CQUFBLElBQUE7RUFBQTtFQUFBLFdBQUEsYUFBQSxhQUFBLElBQUE7SUFBQSxHQUFBO0lBQUEsS0FBQSxFQUNiLFNBQU8sT0FBTyxDQUFBLEVBQUc7TUFDYixPQUFPLGtDQUFrQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDcEUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7VUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFJO1FBQ25FLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7TUFDekIsQ0FBQyxDQUFDO0lBQ047RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUNOTCxJQUFBLElBQUEsR0FBQSxPQUFBO0FBQ0EsSUFBQSxjQUFBLEdBQUEsT0FBQTtBQUE4QyxJQUVqQyxXQUFXLEdBQUEsT0FBQSxDQUFBLFdBQUE7RUFFcEIsU0FBQSxZQUFBLEVBQWM7SUFBQSxJQUFBLGdCQUFBLG1CQUFBLFdBQUE7SUFDVixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQztFQUMxQztFQUFDLFdBQUEsYUFBQSxhQUFBLFdBQUE7SUFBQSxHQUFBO0lBQUEsS0FBQSxFQUVELFNBQU8sY0FBYyxDQUFBLEVBQUc7TUFDcEIsSUFBSSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDO01BRXJFLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtRQUNyQixrQkFBa0IsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUNsRCxrQkFBa0IsQ0FBQyxFQUFFLEdBQUcsbUJBQW1CO1FBRTNDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDO01BQ2pEO01BRUEsT0FBTyxrQkFBa0I7SUFDN0I7RUFBQztJQUFBLEdBQUE7SUFBQSxLQUFBLEVBRUQsU0FBTyxJQUFJLENBQUEsRUFBRztNQUFBLElBQUEsS0FBQTtNQUNWLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFDLEVBQUUsRUFBSztRQUM3RSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsUUFBUTtVQUFBLElBQUEsSUFBQSxPQUFBLGtCQUFBLDBCQUFBLFlBQUEsWUFBQSxJQUFBLENBQUUsU0FBQSxTQUFPLENBQUM7WUFBQSxJQUFBLHFCQUFBLEVBQUEscUJBQUEsRUFBQSxxQkFBQTtZQUFBLElBQUEsa0JBQUEsRUFBQSxPQUFBLEVBQUEsU0FBQSxFQUFBLFlBQUEsRUFBQSxjQUFBLEVBQUEsWUFBQSxFQUFBLFVBQUEsRUFBQSxXQUFBLEVBQUEsV0FBQSxFQUFBLFFBQUEsRUFBQSxnQkFBQSxFQUFBLElBQUEsRUFBQSxTQUFBLEVBQUEsT0FBQSxFQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsSUFBQSxFQUFBLElBQUEsRUFBQSxNQUFBO1lBQUEsT0FBQSxZQUFBLFlBQUEsSUFBQSxVQUFBLFVBQUEsU0FBQTtjQUFBLGtCQUFBLFNBQUEsQ0FBQSxJQUFBLEdBQUEsU0FBQSxDQUFBLElBQUE7Z0JBQUE7a0JBQzVCLGtCQUFrQixHQUFHLEtBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztrQkFHMUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRztrQkFDMUIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWTtrQkFDdEMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYztrQkFDMUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWTtrQkFDdEMsVUFBVSxJQUFBLHFCQUFBLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLGNBQUEscUJBQUEsY0FBQSxxQkFBQSxHQUFJLEdBQUc7a0JBQ3pDLFdBQVcsSUFBQSxxQkFBQSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxjQUFBLHFCQUFBLGNBQUEscUJBQUEsR0FBSSxHQUFHO2tCQUMzQyxXQUFXLElBQUEscUJBQUEsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsY0FBQSxxQkFBQSxjQUFBLHFCQUFBLEdBQUksQ0FBQztrQkFDekMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUTtrQkFBQSxTQUFBLENBQUEsSUFBQTtrQkFBQSxPQUVmLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO2dCQUFBO2tCQUFBLGdCQUFBLEdBQUEsU0FBQSxDQUFBLElBQUE7a0JBQXhDLElBQUksR0FBQSxnQkFBQSxDQUFKLElBQUk7a0JBRUwsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQztrQkFDcEUsa0JBQWtCLENBQUMsTUFBTSxDQUFBLEtBQUEsQ0FBekIsa0JBQWtCLE1BQUEsbUJBQUEsYUFBVyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBQztrQkFDL0MsT0FBTyxHQUFHLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7a0JBRXBELEtBQUssR0FBRyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2tCQUUxQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLFVBQUEsQ0FBQyxFQUFJO29CQUMzQyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRTtzQkFDcEQsV0FBVyxFQUFFLFdBQVc7c0JBQ3hCLFFBQVEsRUFBRSxNQUFNO3NCQUNoQixjQUFjLEVBQUUsS0FBSztzQkFDckIsZ0JBQWdCLEVBQUUsS0FBSztzQkFDdkIsaUJBQWlCLEVBQUUsR0FBRztzQkFDdEIsa0JBQWtCLEVBQUUsR0FBRztzQkFDdkIsY0FBYyxFQUFFLENBQUM7c0JBQ2pCLGVBQWUsRUFBRSxHQUFHO3NCQUNwQixZQUFZLEVBQUUsR0FBRztzQkFDakIsUUFBUSxFQUFFO29CQUNkLENBQUMsQ0FBQztvQkFFRixJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDO29CQUN4RCxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDO29CQUN2RCxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFO3NCQUM5QixNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO3dCQUMxQyxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQzt3QkFDL0MsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUM7d0JBQy9DLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUM7d0JBRXZELElBQUksTUFBTTt3QkFDVixJQUFJLE9BQU8sRUFBRTswQkFDVCxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7d0JBQzdDLENBQUMsTUFBTSxJQUFJLE1BQU0sRUFBRTswQkFDZixNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQzt3QkFDcEMsQ0FBQyxNQUFNOzBCQUNILE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDOUI7d0JBRUEsSUFBSSxNQUFNLEtBQUssa0JBQWtCLEVBQUU7MEJBQy9CLElBQU0sTUFBSyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsdUJBQXVCLENBQUM7MEJBQzlELElBQU0sU0FBUyxHQUFHLE1BQUssQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDOzBCQUNwRCxTQUFTLENBQUMsU0FBUyxHQUFHLEVBQUU7MEJBQ3hCLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO3dCQUNqQzt3QkFFQSxJQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQzt3QkFDaEQsSUFBSTswQkFDQSxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO3dCQUN4QyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUU7MEJBQ1IsSUFBSSxDQUFDLE1BQU0sRUFBRTs0QkFDVCxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU07MEJBQ3hCO3dCQUNKO3NCQUNKLENBQUMsQ0FBQztvQkFDTixDQUFDLENBQUM7a0JBQ04sQ0FBQyxDQUFDO2tCQUVGLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUUsVUFBQSxDQUFDLEVBQUk7b0JBQzNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDakIsT0FBTyxHQUFHLElBQUk7b0JBRWQsa0JBQWtCLENBQUMsU0FBUyxHQUFHLEVBQUU7a0JBQ3JDLENBQUMsQ0FBQztrQkFFSSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztrQkFDNUQsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU87b0JBQUEsSUFBQSxLQUFBLE9BQUEsa0JBQUEsMEJBQUEsWUFBQSxZQUFBLElBQUEsQ0FBRSxTQUFBLFNBQU0sQ0FBQztzQkFBQSxJQUFBLE1BQUEsRUFBQSxTQUFBO3NCQUFBLE9BQUEsWUFBQSxZQUFBLElBQUEsVUFBQSxVQUFBLFNBQUE7d0JBQUEsa0JBQUEsU0FBQSxDQUFBLElBQUEsR0FBQSxTQUFBLENBQUEsSUFBQTswQkFBQTs0QkFDeEMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDOzRCQUNsQixVQUFVLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQzs0QkFDbEQsVUFBVSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDOzRCQUcvQyxJQUFJLE9BQU8sRUFBRTs4QkFDTCxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDOzhCQUN0QyxNQUFNLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2dDQUM5QixLQUFLLEVBQUUsVUFBVTtnQ0FDakIsTUFBTSxFQUFFLFdBQVc7Z0NBQ25CLFFBQVEsRUFBRSxTQUFTLENBQUMsWUFBWTtnQ0FDaEMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxhQUFhO2dDQUNsQyxxQkFBcUIsRUFBRTs4QkFDM0IsQ0FBQyxDQUFDOzhCQUVGLFFBQVEsQ0FBQyxnQkFBZ0IsS0FBQSxNQUFBLENBQUssWUFBWSxDQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxFQUFFLEVBQUk7Z0NBQ3hELEVBQUUsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO2dDQUM1QixFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQ0FDMUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUM7OEJBQy9CLENBQUMsQ0FBQzs4QkFFRixNQUFNLENBQUMsTUFBTTtnQ0FBQSxJQUFBLEtBQUEsT0FBQSxrQkFBQSwwQkFBQSxZQUFBLFlBQUEsSUFBQSxDQUFDLFNBQUEsUUFBTSxJQUFJO2tDQUFBLElBQUEsUUFBQSxFQUFBLGVBQUEsRUFBQSxLQUFBO2tDQUFBLE9BQUEsWUFBQSxZQUFBLElBQUEsVUFBQSxTQUFBLFFBQUE7b0NBQUEsa0JBQUEsUUFBQSxDQUFBLElBQUEsR0FBQSxRQUFBLENBQUEsSUFBQTtzQ0FBQTt3Q0FDaEIsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLENBQUM7d0NBQzdCLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO3dDQUFDLFFBQUEsQ0FBQSxJQUFBO3dDQUFBLFFBQUEsQ0FBQSxJQUFBO3dDQUFBLE9BR2xCLFFBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQztzQ0FBQTt3Q0FBQSxlQUFBLEdBQUEsUUFBQSxDQUFBLElBQUE7d0NBQTNDLEtBQUksR0FBQSxlQUFBLENBQUosSUFBSTt3Q0FDWCw0QkFBYSxDQUFDLFdBQVcsQ0FBQzswQ0FBRSxPQUFPLEVBQUU7d0NBQWUsQ0FBQyxDQUFDO3dDQUV0RCxJQUFJLFFBQVEsSUFBSSxLQUFJLENBQUMsR0FBRyxFQUNwQixRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFJLENBQUMsR0FBRzt3Q0FBQyxRQUFBLENBQUEsSUFBQTt3Q0FBQTtzQ0FBQTt3Q0FBQSxRQUFBLENBQUEsSUFBQTt3Q0FBQSxRQUFBLENBQUEsRUFBQSxHQUFBLFFBQUE7d0NBR3ZELDRCQUFhLENBQUMsU0FBUyxDQUFDOzBDQUFFLE9BQU8sRUFBRTt3Q0FBMEMsQ0FBQyxDQUFDO3NDQUFDO3dDQUFBLFFBQUEsQ0FBQSxJQUFBO3dDQUVoRixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7d0NBQUMsT0FBQSxRQUFBLENBQUEsTUFBQTtzQ0FBQTtzQ0FBQTt3Q0FBQSxPQUFBLFFBQUEsQ0FBQSxJQUFBO29DQUFBO2tDQUFBLEdBQUEsT0FBQTtnQ0FBQSxDQUVwQjtnQ0FBQSxpQkFBQSxHQUFBO2tDQUFBLE9BQUEsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBO2dDQUFBOzhCQUFBLElBQUM7NEJBQ047MEJBQUM7MEJBQUE7NEJBQUEsT0FBQSxTQUFBLENBQUEsSUFBQTt3QkFBQTtzQkFBQSxHQUFBLFFBQUE7b0JBQUEsQ0FDSjtvQkFBQSxpQkFBQSxHQUFBO3NCQUFBLE9BQUEsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBO29CQUFBO2tCQUFBLElBQUM7a0JBRUUsSUFBSSxHQUFHLFNBQVAsSUFBSSxDQUFHLEdBQUcsRUFBSTtvQkFDZCxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxFQUFFO29CQUNuQixRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHO29CQUUxQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7a0JBQ2hCLENBQUM7a0JBRUssSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztrQkFDOUIsSUFBRyxJQUFJLEVBQUU7b0JBQ0wsSUFBSSxHQUFHLEVBQUU7c0JBQ0wsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ25DLENBQUMsTUFBTSxJQUFJLFVBQVUsRUFBRTtzQkFDYixNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQztzQkFDL0IsTUFBTSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRTt3QkFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7c0JBQ3ZCLENBQUM7c0JBQ0QsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7b0JBQzlCO2tCQUNKO2dCQUFDO2dCQUFBO2tCQUFBLE9BQUEsU0FBQSxDQUFBLElBQUE7Y0FBQTtZQUFBLEdBQUEsUUFBQTtVQUFBLENBQ0o7VUFBQSxpQkFBQSxFQUFBO1lBQUEsT0FBQSxJQUFBLENBQUEsS0FBQSxPQUFBLFNBQUE7VUFBQTtRQUFBLElBQUM7TUFDTixDQUFDLENBQUM7SUFDTjtFQUFDO0FBQUE7Ozs7Ozs7Ozs7OztBQ3RLTDtBQUFBLElBQ2EsWUFBWSxHQUFBLE9BQUEsQ0FBQSxZQUFBO0VBQUEsU0FBQSxhQUFBO0lBQUEsSUFBQSxnQkFBQSxtQkFBQSxZQUFBO0VBQUE7RUFBQSxXQUFBLGFBQUEsYUFBQSxZQUFBO0lBQUEsR0FBQTtJQUFBLEtBQUEsRUFFckIsU0FBTyxRQUFRLENBQUMsUUFBUSxFQUFFO01BQ3RCLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUM7TUFDcEQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUNyRDtFQUFDO0lBQUEsR0FBQTtJQUFBLEtBQUEsRUFFRCxTQUFPLFFBQVEsQ0FBQSxFQUFHO01BQ2QsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUN4QztFQUFDO0lBQUEsR0FBQTtJQUFBLEtBQUEsRUFFRCxTQUFPLFVBQVUsQ0FBQSxFQUFHO01BQ2hCLFlBQVksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO01BQ2hDLFlBQVksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO0lBQ3pDO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7O0lDZlEsSUFBSSxHQUFBLE9BQUEsQ0FBQSxJQUFBO0VBQUEsU0FBQSxLQUFBO0lBQUEsSUFBQSxnQkFBQSxtQkFBQSxJQUFBO0VBQUE7RUFBQSxXQUFBLGFBQUEsYUFBQSxJQUFBO0lBQUEsR0FBQTtJQUFBLEtBQUEsRUFFYixTQUFPLE1BQU0sQ0FBQyxFQUFFLEVBQUM7TUFDYixJQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUk7TUFFakMsUUFBUSxTQUFTO1FBQ2IsS0FBSyxNQUFNO1VBQ1AsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQ1gsSUFBSSxFQUFFLElBQUk7WUFDVixXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztZQUM1QixTQUFTLEVBQUU7VUFDZixDQUFDLENBQUM7VUFDRjtRQUVKLEtBQUssTUFBTTtVQUNQLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRTtZQUNYLElBQUksRUFBRSxJQUFJO1lBQ1YsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7VUFDMUIsQ0FBQyxDQUFDO1VBQ0Y7UUFDSixLQUFLLFNBQVM7VUFDVixJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUU7WUFDWCxPQUFPLEVBQUUsSUFBSTtZQUNiLDBCQUEwQixFQUFFLE1BQU07WUFDbEMsbUJBQW1CLEVBQUUsQ0FBQztZQUN0QixrQkFBa0IsRUFBRTtVQUN4QixDQUFDLENBQUM7VUFDRjtRQUVKLEtBQUssU0FBUztVQUNWLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRTtZQUNYLE9BQU8sRUFBRSxJQUFJO1lBQ2IsMEJBQTBCLEVBQUU7VUFDaEMsQ0FBQyxDQUFDO1VBQ0Y7UUFFSixLQUFLLFVBQVU7VUFDWCxJQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU87VUFDbEMsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQ1gsSUFBSSxFQUFFLElBQUk7WUFDVixXQUFXLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHO1VBQ2xDLENBQUMsQ0FBQztVQUNGO1FBQ0osS0FBSyxVQUFVO1VBQ1gsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQ1gsT0FBTyxFQUFFLElBQUk7WUFDYiwwQkFBMEIsRUFBRSxNQUFNO1lBQ2xDLG1CQUFtQixFQUFFO1VBQ3pCLENBQUMsQ0FBQztVQUNGO01BQ1I7SUFDSjtFQUFDO0lBQUEsR0FBQTtJQUFBLEtBQUEsRUFDRCxTQUFPLElBQUksQ0FBQSxFQUFHO01BQ1YsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUU7UUFDdkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7TUFDbkIsQ0FBQyxDQUFDO0lBQ047RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7O0FDeERMLElBQUEsU0FBQSxHQUFBLE9BQUE7QUFDQSxJQUFBLE9BQUEsR0FBQSxPQUFBO0FBQ0EsSUFBQSxjQUFBLEdBQUEsT0FBQTtBQUVPLElBQU0sZUFBZSxHQUFBLE9BQUEsQ0FBQSxlQUFBLEdBQUcsU0FBbEIsZUFBZSxDQUFJLElBQUksRUFBSztFQUNyQyxJQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUM7RUFDdkUsa0JBQWtCLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDOztFQUVuQyxJQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUM7RUFDcEUsa0JBQWtCLENBQUMsTUFBTSxDQUFBLEtBQUEsQ0FBekIsa0JBQWtCLE1BQUEsbUJBQUEsYUFBVyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBQztFQUNyRCxJQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO0VBRTFELElBQU0sS0FBSyxHQUFHLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7RUFDMUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBRVosT0FBTyxLQUFLO0FBQ2hCLENBQUM7QUFFTSxJQUFNLG1CQUFtQixHQUFBLE9BQUEsQ0FBQSxtQkFBQTtFQUFBLElBQUEsSUFBQSxPQUFBLGtCQUFBLDBCQUFBLFlBQUEsWUFBQSxJQUFBLENBQUcsU0FBQSxRQUFNLEdBQUc7SUFBQSxJQUFBLGdCQUFBLEVBQUEsSUFBQTtJQUFBLE9BQUEsWUFBQSxZQUFBLElBQUEsVUFBQSxTQUFBLFFBQUE7TUFBQSxrQkFBQSxRQUFBLENBQUEsSUFBQSxHQUFBLFFBQUEsQ0FBQSxJQUFBO1FBQUE7VUFBQSxRQUFBLENBQUEsSUFBQTtVQUdwQyxrQkFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQUMsUUFBQSxDQUFBLElBQUE7VUFBQSxPQUVHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQUE7VUFBQSxnQkFBQSxHQUFBLFFBQUEsQ0FBQSxJQUFBO1VBQTVCLElBQUksR0FBQSxnQkFBQSxDQUFKLElBQUk7VUFBQSxPQUFBLFFBQUEsQ0FBQSxNQUFBLFdBRUosZUFBZSxDQUFDLElBQUksQ0FBQztRQUFBO1VBQUEsUUFBQSxDQUFBLElBQUE7VUFBQSxRQUFBLENBQUEsRUFBQSxHQUFBLFFBQUE7VUFFNUIsSUFBQSxzQkFBYyxFQUFBLFFBQUEsQ0FBQSxFQUFNLENBQUM7VUFDckIsNEJBQWEsQ0FBQyxTQUFTLENBQUM7WUFBRSxPQUFPLEVBQUU7VUFBeUMsQ0FBQyxDQUFDO1FBQUM7VUFBQSxRQUFBLENBQUEsSUFBQTtVQUUvRSxrQkFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1VBQUMsT0FBQSxRQUFBLENBQUEsTUFBQTtRQUFBO1FBQUE7VUFBQSxPQUFBLFFBQUEsQ0FBQSxJQUFBO01BQUE7SUFBQSxHQUFBLE9BQUE7RUFBQSxDQUUzQjtFQUFBLGdCQWRZLG1CQUFtQixDQUFBLEVBQUE7SUFBQSxPQUFBLElBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQTtFQUFBO0FBQUEsR0FjL0I7QUFFRCxJQUFNLE1BQU0sR0FBRyxZQUFZO0VBRXZCLElBQU0sc0JBQXNCO0lBQUEsSUFBQSxLQUFBLE9BQUEsa0JBQUEsMEJBQUEsWUFBQSxZQUFBLElBQUEsQ0FBRyxTQUFBLFNBQU0sRUFBRTtNQUFBLElBQUEsR0FBQTtNQUFBLE9BQUEsWUFBQSxZQUFBLElBQUEsVUFBQSxVQUFBLFNBQUE7UUFBQSxrQkFBQSxTQUFBLENBQUEsSUFBQSxHQUFBLFNBQUEsQ0FBQSxJQUFBO1VBQUE7WUFDN0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJO1lBQUEsU0FBQSxDQUFBLElBQUE7WUFBQSxPQUViLG1CQUFtQixDQUFDLEdBQUcsQ0FBQztVQUFBO1VBQUE7WUFBQSxPQUFBLFNBQUEsQ0FBQSxJQUFBO1FBQUE7TUFBQSxHQUFBLFFBQUE7SUFBQSxDQUNqQztJQUFBLGdCQUpLLHNCQUFzQixDQUFBLEdBQUE7TUFBQSxPQUFBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQTtJQUFBO0VBQUEsR0FJM0I7RUFFRCxPQUFPO0lBQ0g7SUFDQSxJQUFJLEVBQUUsU0FBTixJQUFJLENBQUEsRUFBYztNQUNkLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPO1FBQUEsSUFBQSxLQUFBLE9BQUEsa0JBQUEsMEJBQUEsWUFBQSxZQUFBLElBQUEsQ0FBRSxTQUFBLFNBQU0sQ0FBQztVQUFBLElBQUEsTUFBQTtVQUFBLE9BQUEsWUFBQSxZQUFBLElBQUEsVUFBQSxVQUFBLFNBQUE7WUFBQSxrQkFBQSxTQUFBLENBQUEsSUFBQSxHQUFBLFNBQUEsQ0FBQSxJQUFBO2NBQUE7Z0JBQ2hDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQztnQkFBQSxJQUM5RCxNQUFNO2tCQUFBLFNBQUEsQ0FBQSxJQUFBO2tCQUFBO2dCQUFBO2dCQUFBLE9BQUEsU0FBQSxDQUFBLE1BQUE7Y0FBQTtnQkFHWCxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQUMsU0FBQSxDQUFBLElBQUE7Z0JBQUEsT0FDYixzQkFBc0IsQ0FBQyxNQUFNLENBQUM7Y0FBQTtjQUFBO2dCQUFBLE9BQUEsU0FBQSxDQUFBLElBQUE7WUFBQTtVQUFBLEdBQUEsUUFBQTtRQUFBLENBQ3ZDO1FBQUEsaUJBQUEsR0FBQTtVQUFBLE9BQUEsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBO1FBQUE7TUFBQSxJQUFDO0lBQ047RUFDSixDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFBQyxJQUFBLFFBQUEsR0FBQSxPQUFBLGNBRVcsTUFBTTs7Ozs7Ozs7Ozs7Ozs7SUN6RFAsYUFBYSxHQUFBLE9BQUEsQ0FBQSxhQUFBO0VBQUEsU0FBQSxjQUFBO0lBQUEsSUFBQSxnQkFBQSxtQkFBQSxhQUFBO0VBQUE7RUFBQSxXQUFBLGFBQUEsYUFBQSxhQUFBO0lBQUEsR0FBQTtJQUFBLEtBQUEsRUFLdkIsU0FBTyxJQUFJLENBQUEsRUFBRztNQUNWLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsWUFBWTtRQUV4QyxJQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDO1FBQ3hGLElBQUksa0JBQWtCLEVBQUU7VUFFcEIsSUFBSSxNQUFNLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQztVQUN6RCxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNuQixXQUFXLENBQUM7Y0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQztjQUFFLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTTtZQUFDLENBQUMsQ0FBQztZQUUvRCxhQUFhLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7VUFDekU7UUFDSjtRQUVBLElBQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQztRQUMxRSxJQUFJLFdBQVcsRUFBRTtVQUViLElBQUksT0FBTSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO1VBQ2xELElBQUksT0FBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ25CLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO2NBQUUsS0FBSyxFQUFFLE9BQU0sQ0FBQyxPQUFPLENBQUM7Y0FBRSxJQUFJLEVBQUUsT0FBTSxDQUFDLFNBQVM7WUFBQyxDQUFDLENBQUM7VUFDaEY7VUFDQSxhQUFhLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xFO01BQ0osQ0FBQyxDQUFDO0lBQ047RUFBQztJQUFBLEdBQUE7SUFBQSxLQUFBLEVBRUQsU0FBTyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUU7TUFDaEMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFlBQUEsTUFBQSxDQUFZLEtBQUssa0JBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyRTs7SUFFQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5JO0lBQUEsR0FBQTtJQUFBLEtBQUEsRUE4RUEsU0FBTyxTQUFTLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7TUFDekMsSUFBSSxPQUFPLEdBQUcsRUFBRTtNQUNoQixJQUFJLE9BQU8sRUFBRTtRQUNULElBQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBSSxPQUFPLEdBQUcsRUFBRSxHQUFHLElBQUssQ0FBQztRQUNwRCxPQUFPLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztNQUMvQztNQUVBLFFBQVEsQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEdBQUcsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDLEdBQUcsT0FBTyxHQUFHLFVBQVU7SUFDN0U7RUFBQztJQUFBLEdBQUE7SUFBQSxLQUFBLEVBRUQsU0FBTyxTQUFTLENBQUMsVUFBVSxFQUFFO01BQ3pCLElBQUksTUFBTSxHQUFHLFVBQVUsR0FBRyxHQUFHO01BQzdCLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztNQUNuQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNoQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2IsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUN4RCxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1VBQ3pCLElBQUksS0FBSyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7VUFDcEUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3RCO01BQ0o7TUFFQSxPQUFPLElBQUk7SUFDZjtFQUFDO0lBQUEsR0FBQTtJQUFBLEtBQUEsRUFFRCxTQUFPLFVBQVUsQ0FBQyxXQUFXLEVBQUU7TUFDM0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO01BQ2QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUM7TUFDckYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbkMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDOUIsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztNQUMxRTtNQUNBLE9BQU8sS0FBSztJQUNoQjtFQUFDO0FBQUE7QUFBQSxJQUFBLGdCQUFBLGFBbkpTLGFBQWEsNEJBRVMsZ0JBQWdCO0FBQUEsSUFBQSxnQkFBQSxhQUZ0QyxhQUFhLHFCQUdFLGdCQUFnQjtBQUFBLElBQUEsZ0JBQUEsYUFIL0IsYUFBYSxpQkEwQ0YsVUFBQyxPQUFPLEVBQUs7RUFDOUIsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTO0VBRXhCLFdBQVcsQ0FBQyxPQUFPLENBQUM7QUFDeEIsQ0FBQztBQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkksSUFBQSxnQkFBQSxhQWhEVSxhQUFhLGVBdURKLFVBQUMsT0FBTyxFQUFLO0VBQzVCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTztFQUV0QixXQUFXLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUM7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5JLElBQUEsZ0JBQUEsYUE3RFUsYUFBYSxpQkFvRUYsVUFBQyxPQUFPLEVBQUs7RUFDOUIsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTO0VBRXhCLFdBQVcsQ0FBQyxPQUFPLENBQUM7QUFDeEIsQ0FBQztBQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkksSUFBQSxnQkFBQSxhQTFFVSxhQUFhLGNBaUZMLFVBQUMsT0FBTyxFQUFLO0VBQzNCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsU0FBUztFQUV4QixXQUFXLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUM7QUFBQSxJQUFBLGdCQUFBLGFBckZTLGFBQWEsY0FBQSxLQUFBLEdBdUZOLElBQUksY0FBQSxLQUFBLHVCQUFKLEtBQUEsQ0FBTSxLQUFLLENBQUM7RUFDekIsaUJBQWlCLEVBQUUsSUFBSTtFQUN2QixjQUFjLEVBQUUsSUFBSTtFQUNwQixjQUFjLEVBQUUsSUFBSTtFQUNwQixXQUFXLEVBQUU7SUFDVCxPQUFPLEVBQUUsc0NBQXNDO0lBQy9DLGFBQWEsRUFBRSxpREFBaUQ7SUFDaEUsVUFBVSxFQUFFLGdEQUFnRDtJQUM1RCxLQUFLLEVBQUU7RUFDWCxDQUFDO0VBQ0QsaUJBQWlCLEVBQUUsNkNBQTZDO0VBQ2hFLGNBQWMsRUFBRTtBQUNwQixDQUFDLENBQUM7QUFBQSxJQUFBLGdCQUFBLGFBbkdRLGFBQWEsV0FxR1IsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUN0QixpQkFBaUIsRUFBRSxJQUFJO0VBQ3ZCLGNBQWMsRUFBRSxLQUFLO0VBQ3JCLGNBQWMsRUFBRSxLQUFLO0VBQ3JCLFdBQVcsRUFBRTtJQUNULE9BQU8sRUFBRSxxQ0FBcUM7SUFDOUMsYUFBYSxFQUFFLHVEQUF1RDtJQUN0RSxLQUFLLEVBQUU7RUFDWCxDQUFDO0VBQ0QsaUJBQWlCLEVBQUU7QUFDdkIsQ0FBQyxDQUFDO0FBdUNOLElBQUksU0FBUztBQUViLElBQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxPQUFPLDhlQWF2QyxDQUFDO0FBRUYsSUFBTSxlQUFlLEdBQUcsU0FBbEIsZUFBZSxDQUFBLEVBQVM7RUFDMUIsSUFBRyxTQUFTLEVBQ1IsT0FBTyxTQUFTO0VBRXBCLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztFQUN6QyxTQUFTLENBQUMsRUFBRSxHQUFHLFVBQVU7RUFFekIsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO0VBRXBDLE9BQU8sU0FBUztBQUNwQixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBTSxXQUFXLEdBQUcsU0FBZCxXQUFXLENBQUksT0FBTyxFQUFLO0VBQUEsSUFBQSxnQkFBQTtFQUU3QixJQUFNLE9BQU8sSUFBQSxnQkFBQSxHQUFHLE9BQU8sQ0FBQyxPQUFPLGNBQUEsZ0JBQUEsY0FBQSxnQkFBQSxHQUFJLElBQUk7RUFFdkMsSUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7RUFDM0MsS0FBSyxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDO0VBRXhDLGVBQWUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztFQUNwQyxLQUFLLENBQUMsU0FBUyxZQUFBLE1BQUEsQ0FBWSxPQUFPLENBQUMsSUFBSSxVQUFPO0VBRTlDLElBQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO0VBQ2xELFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsVUFBQyxDQUFDLEVBQUs7SUFDekMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRWxCLFNBQVMsQ0FBQyxDQUFDO0VBQ2YsQ0FBQyxDQUFDO0VBRUYsSUFBRyxPQUFPLEdBQUcsQ0FBQyxFQUFFO0lBQ1osVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUM7RUFDbEM7RUFFQSxTQUFTLFNBQVMsQ0FBQSxFQUFHO0lBQ2pCLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUNsQjtBQUNKLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FDcE5ELElBQUEsSUFBQSxHQUFBLE9BQUE7QUFDQSxJQUFBLFNBQUEsR0FBQSxPQUFBO0FBQ0EsSUFBQSxjQUFBLEdBQUEsT0FBQTtBQUE4QyxJQUVqQyxRQUFRLEdBQUEsT0FBQSxDQUFBLFFBQUE7RUFBQSxTQUFBLFNBQUE7SUFBQSxJQUFBLGdCQUFBLG1CQUFBLFFBQUE7RUFBQTtFQUFBLFdBQUEsYUFBQSxhQUFBLFFBQUE7SUFBQSxHQUFBO0lBQUEsS0FBQSxFQUNqQixTQUFPLElBQUksQ0FBQSxFQUFHO01BQ1YsUUFBUSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUMsRUFBRSxFQUFLO1FBQy9ELEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPO1VBQUEsSUFBQSxJQUFBLE9BQUEsa0JBQUEsMEJBQUEsWUFBQSxZQUFBLElBQUEsQ0FBRSxTQUFBLFFBQU8sQ0FBQztZQUFBLElBQUEsUUFBQSxFQUFBLFVBQUE7WUFBQSxPQUFBLFlBQUEsWUFBQSxJQUFBLFVBQUEsU0FBQSxRQUFBO2NBQUEsa0JBQUEsUUFBQSxDQUFBLElBQUEsR0FBQSxRQUFBLENBQUEsSUFBQTtnQkFBQTtrQkFDakMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2tCQUVaLFFBQVEsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVE7a0JBQzlCLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVU7a0JBRXhDLGtCQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7a0JBQUMsUUFBQSxDQUFBLElBQUE7a0JBQUEsUUFBQSxDQUFBLElBQUE7a0JBQUEsT0FHUixZQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFO29CQUFDLFFBQVEsRUFBRTtrQkFBUSxDQUFDLENBQUM7Z0JBQUE7a0JBRXpELDRCQUFhLENBQUMscUJBQXFCLDZCQUFBLE1BQUEsQ0FBNkIsVUFBVSxDQUFFLENBQUM7a0JBRTdFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztrQkFBQyxRQUFBLENBQUEsSUFBQTtrQkFBQTtnQkFBQTtrQkFBQSxRQUFBLENBQUEsSUFBQTtrQkFBQSxRQUFBLENBQUEsRUFBQSxHQUFBLFFBQUE7a0JBRWxCLE9BQU8sQ0FBQyxLQUFLLENBQUEsUUFBQSxDQUFBLEVBQUksQ0FBQztrQkFDbEIsa0JBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztrQkFDbkIsNEJBQWEsQ0FBQyxTQUFTLENBQUM7b0JBQUUsT0FBTyxFQUFFO2tCQUF5QyxDQUFDLENBQUM7Z0JBQUE7Z0JBQUE7a0JBQUEsT0FBQSxRQUFBLENBQUEsSUFBQTtjQUFBO1lBQUEsR0FBQSxPQUFBO1VBQUEsQ0FHckY7VUFBQSxpQkFBQSxFQUFBO1lBQUEsT0FBQSxJQUFBLENBQUEsS0FBQSxPQUFBLFNBQUE7VUFBQTtRQUFBLElBQUM7TUFDTixDQUFDLENBQUM7SUFDTjtFQUFDO0FBQUE7Ozs7Ozs7OztBQzdCTCxJQUFBLGNBQUEsR0FBQSxPQUFBO0FBRUEsSUFBTSxPQUFPLEdBQUcsWUFBWTtFQUN4QixPQUFPO0lBQ0gsSUFBSSxFQUFFLFNBQU4sSUFBSSxDQUFBLEVBQVE7TUFDUixJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsRUFBRTtRQUNoQyxJQUFNLFVBQVUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQ2hELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUN6QixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUMxQyxLQUFLLENBQUMsQ0FBQztRQUVaLFVBQVUsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLFVBQUMsT0FBTyxFQUFFLElBQUksRUFBSztVQUM3QyxRQUFRLElBQUk7WUFDUixLQUFLLE9BQU87Y0FDUiw0QkFBYSxDQUFDLFNBQVMsQ0FBQztnQkFBRSxPQUFPLEVBQVA7Y0FBUSxDQUFDLENBQUM7Y0FDcEM7WUFDSixLQUFLLFNBQVM7Y0FDViw0QkFBYSxDQUFDLFdBQVcsQ0FBQztnQkFBRSxPQUFPLEVBQVA7Y0FBUSxDQUFDLENBQUM7Y0FDdEM7WUFDSjtjQUNJLDRCQUFhLENBQUMsV0FBVyxDQUFDO2dCQUFFLE9BQU8sRUFBUDtjQUFRLENBQUMsQ0FBQztVQUM5QztRQUNKLENBQUMsQ0FBQztRQUVGLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFNLENBRTlCLENBQUMsQ0FBQyxTQUFNLENBQUMsVUFBQSxHQUFHLEVBQUk7VUFDWjtRQUFBLENBQ0gsQ0FBQztNQUNOO0lBQ0o7RUFDSixDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFBQyxJQUFBLFFBQUEsR0FBQSxPQUFBLGNBRVcsT0FBTzs7Ozs7Ozs7Ozs7OztBQ2xDdEIsSUFBQSxTQUFBLEdBQUEsT0FBQTtBQUFvQyxTQUFBLFFBQUEsTUFBQSxFQUFBLGNBQUEsUUFBQSxJQUFBLEdBQUEsTUFBQSxDQUFBLElBQUEsQ0FBQSxNQUFBLE9BQUEsTUFBQSxDQUFBLHFCQUFBLFFBQUEsT0FBQSxHQUFBLE1BQUEsQ0FBQSxxQkFBQSxDQUFBLE1BQUEsT0FBQSxjQUFBLElBQUEsT0FBQSxHQUFBLE9BQUEsQ0FBQSxNQUFBLFdBQUEsR0FBQSxXQUFBLE1BQUEsQ0FBQSx3QkFBQSxDQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsVUFBQSxRQUFBLElBQUEsQ0FBQSxJQUFBLENBQUEsS0FBQSxDQUFBLElBQUEsRUFBQSxPQUFBLFlBQUEsSUFBQTtBQUFBLFNBQUEsY0FBQSxNQUFBLGFBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxTQUFBLENBQUEsTUFBQSxFQUFBLENBQUEsVUFBQSxNQUFBLEdBQUEsU0FBQSxDQUFBLENBQUEsWUFBQSxTQUFBLENBQUEsQ0FBQSxZQUFBLENBQUEsUUFBQSxPQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsU0FBQSxPQUFBLFdBQUEsR0FBQSxRQUFBLGdCQUFBLGFBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxNQUFBLENBQUEsR0FBQSxtQkFBQSxNQUFBLENBQUEseUJBQUEsSUFBQSxNQUFBLENBQUEsZ0JBQUEsQ0FBQSxNQUFBLEVBQUEsTUFBQSxDQUFBLHlCQUFBLENBQUEsTUFBQSxhQUFBLE9BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxHQUFBLE9BQUEsV0FBQSxHQUFBLElBQUEsTUFBQSxDQUFBLGNBQUEsQ0FBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLE1BQUEsQ0FBQSx3QkFBQSxDQUFBLE1BQUEsRUFBQSxHQUFBLG1CQUFBLE1BQUE7QUFFN0IsSUFBTSxrQkFBa0IsR0FBQSxPQUFBLENBQUEsa0JBQUEsR0FBRyxTQUFyQixrQkFBa0IsQ0FBSSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFLO0VBRXhFLElBQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO0VBRTlDLElBQUksQ0FBQyxLQUFLLEVBQUU7SUFDUixPQUFPLENBQUMsSUFBSSxtRkFBQSxNQUFBLENBQWtGLFFBQVEsdUJBQW1CLENBQUM7SUFDMUg7RUFDSjtFQUVBLElBQUksU0FBUyxHQUFHLEVBQUU7RUFDbEIsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDeEIsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztFQUN2QztFQUVBLElBQU0sY0FBYyxHQUFHO0lBQ25CLFdBQVcsRUFBRSxNQUFNO0lBQ25CLGdCQUFnQixFQUFFLElBQUk7SUFDdEIsU0FBUyxFQUFFLFNBQVM7SUFDcEIsV0FBVyxFQUFFLElBQUk7SUFDakIsUUFBUSxFQUFFO01BQ04sYUFBYSxFQUFFLElBQUk7TUFDbkIsT0FBTyxFQUFFLENBQUM7TUFDVixTQUFTLEVBQUUsWUFBWTtNQUN2QixVQUFVLEVBQUUsQ0FBQyxNQUFNO0lBQ3ZCLENBQUM7SUFDRCxTQUFTLEVBQUU7TUFDUCxHQUFHLEVBQUUsY0FBYztNQUNuQixZQUFZLEVBQUU7SUFDbEI7RUFDSixDQUFDO0VBRUQsSUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFBLGFBQUEsQ0FBQSxhQUFBLEtBQU0sY0FBYyxHQUFLLE9BQU8sQ0FBQyxDQUFDO0VBRWpFLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUEsa0JBQVE7SUFBQSxJQUFBLElBQUEsT0FBQSxrQkFBQSwwQkFBQSxZQUFBLFlBQUEsSUFBQSxDQUFDLFNBQUEsUUFBTyxDQUFDO01BQUEsSUFBQSxnQkFBQSxFQUFBLElBQUE7TUFBQSxPQUFBLFlBQUEsWUFBQSxJQUFBLFVBQUEsU0FBQSxRQUFBO1FBQUEsa0JBQUEsUUFBQSxDQUFBLElBQUEsR0FBQSxRQUFBLENBQUEsSUFBQTtVQUFBO1lBQ2hDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSTtZQUN2QixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUFDLFFBQUEsQ0FBQSxJQUFBO1lBQUEsT0FFQSxLQUFLLENBQUMsR0FBRyxrQkFBQSxNQUFBLENBQWtCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxtQkFBQSxNQUFBLENBQWdCLGlCQUFpQixDQUFFLENBQUM7VUFBQTtZQUFBLGdCQUFBLEdBQUEsUUFBQSxDQUFBLElBQUE7WUFBM0YsSUFBSSxHQUFBLGdCQUFBLENBQUosSUFBSTtZQUNYLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU87WUFDL0IsTUFBTSxDQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FDZCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1VBQUM7VUFBQTtZQUFBLE9BQUEsUUFBQSxDQUFBLElBQUE7UUFBQTtNQUFBLEdBQUEsT0FBQTtJQUFBLENBQ3RDO0lBQUEsaUJBQUEsRUFBQTtNQUFBLE9BQUEsSUFBQSxDQUFBLEtBQUEsT0FBQSxTQUFBO0lBQUE7RUFBQSxLQUFFLEdBQUcsQ0FBQyxDQUFDO0VBRVIsT0FBTyxNQUFNO0FBQ2pCLENBQUM7QUFFTSxJQUFNLFVBQVUsR0FBQSxPQUFBLENBQUEsVUFBQSxHQUFHLFNBQWIsVUFBVSxDQUFJLFFBQVEsRUFBRSxHQUFHLEVBQUs7RUFFekMsSUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7RUFFOUMsSUFBRyxDQUFDLEtBQUssRUFBQztJQUNOLE9BQU8sQ0FBQyxJQUFJLG1GQUFBLE1BQUEsQ0FBa0YsUUFBUSx1QkFBbUIsQ0FBQztJQUMxSDtFQUNKO0VBRUEsSUFBSSxTQUFTLEdBQUcsRUFBRTtFQUNsQixJQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztJQUN0QixTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO0VBQ3ZDO0VBRUEsSUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFO0lBQzdCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxTQUFTO0lBQ3BCLGdCQUFnQixFQUFFLElBQUk7SUFDdEIsV0FBVyxFQUFFLElBQUk7SUFDakIsUUFBUSxFQUFFO01BQ04sVUFBVSxFQUFFLE1BQU07TUFDbEIsYUFBYSxFQUFFLElBQUk7TUFDbkIsT0FBTyxFQUFFLENBQUM7TUFDVixTQUFTLEVBQUUsYUFBYTtNQUN4QixVQUFVLEVBQUUsQ0FBQyxNQUFNO0lBQ3ZCO0VBQ0osQ0FBQyxDQUFDO0VBRUYsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBQSxrQkFBUTtJQUFBLElBQUEsS0FBQSxPQUFBLGtCQUFBLDBCQUFBLFlBQUEsWUFBQSxJQUFBLENBQUMsU0FBQSxTQUFPLENBQUM7TUFBQSxJQUFBLGlCQUFBLEVBQUEsSUFBQTtNQUFBLE9BQUEsWUFBQSxZQUFBLElBQUEsVUFBQSxVQUFBLFNBQUE7UUFBQSxrQkFBQSxTQUFBLENBQUEsSUFBQSxHQUFBLFNBQUEsQ0FBQSxJQUFBO1VBQUE7WUFDaEMsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJO1lBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQUMsU0FBQSxDQUFBLElBQUE7WUFBQSxPQUVBLEtBQUssQ0FBQyxHQUFHLElBQUEsTUFBQSxDQUFJLEdBQUcsWUFBQSxNQUFBLENBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUUsQ0FBQztVQUFBO1lBQUEsaUJBQUEsR0FBQSxTQUFBLENBQUEsSUFBQTtZQUF4RCxJQUFJLEdBQUEsaUJBQUEsQ0FBSixJQUFJO1lBQ1gsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTztZQUMvQixNQUFNLENBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUNkLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7VUFBQztVQUFBO1lBQUEsT0FBQSxTQUFBLENBQUEsSUFBQTtRQUFBO01BQUEsR0FBQSxRQUFBO0lBQUEsQ0FDdEM7SUFBQSxpQkFBQSxHQUFBO01BQUEsT0FBQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUE7SUFBQTtFQUFBLEtBQUUsR0FBRyxDQUFDLENBQUM7RUFFUixPQUFPLE1BQU07QUFDakIsQ0FBQztBQUVNLElBQU0sZUFBZSxHQUFBLE9BQUEsQ0FBQSxlQUFBLEdBQUcsU0FBbEIsZUFBZSxDQUFJLFFBQVEsRUFBRSxPQUFPLEVBQUs7RUFDbEQsSUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7RUFDM0MsSUFBRyxDQUFDLEVBQUUsRUFDRjtFQUVKLElBQU0sY0FBYyxHQUFHO0lBQ25CLFNBQVMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRTtJQUNqRixnQkFBZ0IsRUFBRSxJQUFJO0lBQ3RCLHdCQUF3QixFQUFFLFNBQTFCLHdCQUF3QixDQUFFLFNBQVM7TUFBQSxPQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBQSxJQUFJO1FBQUEsT0FBSSxJQUFJLENBQUMsS0FBSztNQUFBLEVBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQUE7SUFDbEYsUUFBUSxFQUFFO01BQ04sUUFBUSxFQUFFLEVBQUU7TUFDWixPQUFPLEVBQUUsQ0FBQztNQUNWLFNBQVMsRUFBRSxXQUFXO01BQ3RCLGFBQWEsRUFBRTtJQUNuQjtFQUNKLENBQUM7RUFFRCxPQUFPLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBQSxhQUFBLENBQUEsYUFBQSxLQUFNLGNBQWMsR0FBSyxPQUFPLENBQUMsQ0FBQztBQUMxRCxDQUFDOztBQUVEOztBQUVBLFNBQVMsY0FBYyxDQUFDLE9BQU8sRUFBRTtFQUM3QixpQ0FBQSxNQUFBLENBQ2tCLE9BQU8sQ0FBQyxJQUFJLDRFQUFBLE1BQUEsQ0FBcUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxjQUFBLE1BQUEsQ0FBVSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxrTkFBQSxNQUFBLENBR3ZILE9BQU8sQ0FBQyxJQUFJO0FBSTdEO0FBRUEsU0FBUyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUU7RUFDdkMseUJBQUEsTUFBQSxDQUNXLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLG1NQUFBLE1BQUEsQ0FJaEIsT0FBTyxDQUFDLElBQUk7QUFJdEM7O0FBRUE7Ozs7Ozs7Ozs7OztBQ3hJQSxJQUFBLElBQUEsR0FBQSxPQUFBO0FBQ0EsSUFBQSxXQUFBLEdBQUEsT0FBQTtBQUNBLElBQUEsY0FBQSxHQUFBLE9BQUE7QUFDQSxJQUFBLE9BQUEsR0FBQSxPQUFBO0FBRUEsSUFBTSxZQUFZLEdBQUcsWUFBVztFQUM1QixJQUFJLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLGFBQWE7RUFFN0ksSUFBTSxlQUFlO0lBQUEsSUFBQSxJQUFBLE9BQUEsa0JBQUEsMEJBQUEsWUFBQSxZQUFBLElBQUEsQ0FBRyxTQUFBLFFBQU0sQ0FBQztNQUFBLE9BQUEsWUFBQSxZQUFBLElBQUEsVUFBQSxTQUFBLFFBQUE7UUFBQSxrQkFBQSxRQUFBLENBQUEsSUFBQSxHQUFBLFFBQUEsQ0FBQSxJQUFBO1VBQUE7WUFDM0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQUMsUUFBQSxDQUFBLElBQUE7WUFHZixzQkFBVSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7WUFBQyxRQUFBLENBQUEsSUFBQTtZQUFBLE9BRS9CLFlBQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFO2NBQzVCLFlBQVksRUFBRSxjQUFjLENBQUMsS0FBSztjQUNsQyxjQUFjLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztjQUN0QyxpQkFBaUIsRUFBRSxtQkFBbUIsQ0FBQyxLQUFLO2NBQzVDLGFBQWEsRUFBRSxlQUFlLENBQUM7Y0FDL0I7WUFDSixDQUFDLENBQUM7VUFBQTtZQUVGLDRCQUFhLENBQUMscUJBQXFCLENBQUMsK0NBQStDLENBQUM7WUFDcEYsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQUMsUUFBQSxDQUFBLElBQUE7WUFBQTtVQUFBO1lBQUEsUUFBQSxDQUFBLElBQUE7WUFBQSxRQUFBLENBQUEsRUFBQSxHQUFBLFFBQUE7WUFFbEIsSUFBQSxzQkFBYyxFQUFBLFFBQUEsQ0FBQSxFQUFJLENBQUM7WUFDbkIsc0JBQVUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDO1lBQ25DLDRCQUFhLENBQUMsU0FBUyxDQUFDO2NBQUUsT0FBTyxFQUFFO1lBQXdDLENBQUMsQ0FBQztVQUFBO1VBQUE7WUFBQSxPQUFBLFFBQUEsQ0FBQSxJQUFBO1FBQUE7TUFBQSxHQUFBLE9BQUE7SUFBQSxDQUVwRjtJQUFBLGdCQXJCSyxlQUFlLENBQUEsRUFBQTtNQUFBLE9BQUEsSUFBQSxDQUFBLEtBQUEsT0FBQSxTQUFBO0lBQUE7RUFBQSxHQXFCcEI7RUFFRCxJQUFNLGtCQUFrQjtJQUFBLElBQUEsS0FBQSxPQUFBLGtCQUFBLDBCQUFBLFlBQUEsWUFBQSxJQUFBLENBQUcsU0FBQSxTQUFNLENBQUM7TUFBQSxPQUFBLFlBQUEsWUFBQSxJQUFBLFVBQUEsVUFBQSxTQUFBO1FBQUEsa0JBQUEsU0FBQSxDQUFBLElBQUEsR0FBQSxTQUFBLENBQUEsSUFBQTtVQUFBO1lBQzlCLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUVsQiw0QkFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Y0FBQyxJQUFJLEVBQUU7WUFBdUQsQ0FBQyxDQUFDLENBQ3RGLElBQUk7Y0FBQSxJQUFBLEtBQUEsT0FBQSxrQkFBQSwwQkFBQSxZQUFBLFlBQUEsSUFBQSxDQUFDLFNBQUEsU0FBTyxNQUFNO2dCQUFBLE9BQUEsWUFBQSxZQUFBLElBQUEsVUFBQSxVQUFBLFNBQUE7a0JBQUEsa0JBQUEsU0FBQSxDQUFBLElBQUEsR0FBQSxTQUFBLENBQUEsSUFBQTtvQkFBQTtzQkFDZixJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUU7d0JBQ3BCLElBQUk7MEJBQ0EsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUNyQixDQUFDLENBQUMsT0FBTyxHQUFHLEVBQUU7MEJBQ1YsSUFBQSxzQkFBYyxFQUFDLEdBQUcsQ0FBQzswQkFDbkIsc0JBQVUsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDOzBCQUNyQyw0QkFBYSxDQUFDLFNBQVMsQ0FBQzs0QkFBRSxPQUFPLEVBQUU7MEJBQXdDLENBQUMsQ0FBQzt3QkFDakY7c0JBQ0o7b0JBQUM7b0JBQUE7c0JBQUEsT0FBQSxTQUFBLENBQUEsSUFBQTtrQkFBQTtnQkFBQSxHQUFBLFFBQUE7Y0FBQSxDQUNKO2NBQUEsaUJBQUEsR0FBQTtnQkFBQSxPQUFBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQTtjQUFBO1lBQUEsSUFBQztVQUFDO1VBQUE7WUFBQSxPQUFBLFNBQUEsQ0FBQSxJQUFBO1FBQUE7TUFBQSxHQUFBLFFBQUE7SUFBQSxDQUNWO0lBQUEsZ0JBZkssa0JBQWtCLENBQUEsR0FBQTtNQUFBLE9BQUEsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBO0lBQUE7RUFBQSxHQWV2QjtFQUVELElBQU0saUJBQWlCO0lBQUEsSUFBQSxLQUFBLE9BQUEsa0JBQUEsMEJBQUEsWUFBQSxZQUFBLElBQUEsQ0FBRyxTQUFBLFNBQU0sQ0FBQztNQUFBLE9BQUEsWUFBQSxZQUFBLElBQUEsVUFBQSxVQUFBLFNBQUE7UUFBQSxrQkFBQSxTQUFBLENBQUEsSUFBQSxHQUFBLFNBQUEsQ0FBQSxJQUFBO1VBQUE7WUFDN0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRWxCLDRCQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztjQUFDLElBQUksRUFBRTtZQUFtSCxDQUFDLENBQUMsQ0FDbEosSUFBSTtjQUFBLElBQUEsS0FBQSxPQUFBLGtCQUFBLDBCQUFBLFlBQUEsWUFBQSxJQUFBLENBQUMsU0FBQSxTQUFPLE1BQU07Z0JBQUEsT0FBQSxZQUFBLFlBQUEsSUFBQSxVQUFBLFVBQUEsU0FBQTtrQkFBQSxrQkFBQSxTQUFBLENBQUEsSUFBQSxHQUFBLFNBQUEsQ0FBQSxJQUFBO29CQUFBO3NCQUFBLEtBQ1gsTUFBTSxDQUFDLFdBQVc7d0JBQUEsU0FBQSxDQUFBLElBQUE7d0JBQUE7c0JBQUE7c0JBQUEsU0FBQSxDQUFBLElBQUE7c0JBRWQsc0JBQVUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO3NCQUFDLFNBQUEsQ0FBQSxJQUFBO3NCQUFBLE9BRWpDLFlBQU8sVUFBTyxDQUFDLFlBQVksQ0FBQztvQkFBQTtzQkFFbEMsNEJBQWEsQ0FBQyxxQkFBcUIsQ0FBQywwQ0FBMEMsQ0FBQztzQkFDL0UsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3NCQUFDLFNBQUEsQ0FBQSxJQUFBO3NCQUFBO29CQUFBO3NCQUFBLFNBQUEsQ0FBQSxJQUFBO3NCQUFBLFNBQUEsQ0FBQSxFQUFBLEdBQUEsU0FBQTtzQkFFbEIsSUFBQSxzQkFBYyxFQUFBLFNBQUEsQ0FBQSxFQUFJLENBQUM7c0JBQ25CLHNCQUFVLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztzQkFDckMsNEJBQWEsQ0FBQyxTQUFTLENBQUM7d0JBQUUsT0FBTyxFQUFFO3NCQUF3QyxDQUFDLENBQUM7b0JBQUE7b0JBQUE7c0JBQUEsT0FBQSxTQUFBLENBQUEsSUFBQTtrQkFBQTtnQkFBQSxHQUFBLFFBQUE7Y0FBQSxDQUd4RjtjQUFBLGlCQUFBLEdBQUE7Z0JBQUEsT0FBQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUE7Y0FBQTtZQUFBLElBQUM7VUFBQztVQUFBO1lBQUEsT0FBQSxTQUFBLENBQUEsSUFBQTtRQUFBO01BQUEsR0FBQSxRQUFBO0lBQUEsQ0FDVjtJQUFBLGdCQXBCSyxpQkFBaUIsQ0FBQSxHQUFBO01BQUEsT0FBQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUE7SUFBQTtFQUFBLEdBb0J0QjtFQUVELElBQU0scUJBQXFCLEdBQUcsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsNEJBQTRCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsNkJBQTZCLEVBQUUscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLENBQUM7RUFDalQsSUFBTSx1QkFBdUIsR0FBRyxDQUFDLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLHFCQUFxQixDQUFDO0VBQy9GLElBQU0sMEJBQTBCLEdBQUcsQ0FBQywrQkFBK0IsRUFBRSxpQ0FBaUMsQ0FBQztFQUN2RyxJQUFNLHNCQUFzQixHQUFHLENBQUMscUJBQXFCLENBQUM7RUFHdEQsSUFBTSxpQkFBaUIsR0FBRyxTQUFwQixpQkFBaUIsQ0FBRyxDQUFDLEVBQUk7SUFFM0IsUUFBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztNQUM1QixLQUFLLGNBQWM7UUFDZixXQUFXLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDbEQ7TUFDSixLQUFLLGdCQUFnQjtRQUNqQixXQUFXLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDcEQ7TUFDSixLQUFLLG1CQUFtQjtRQUNwQixXQUFXLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDdkQ7TUFDSixLQUFLLGVBQWU7UUFDaEIsV0FBVyxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ25EO0lBQ1I7RUFDSixDQUFDO0VBRUQsSUFBTSxXQUFXLEdBQUcsU0FBZCxXQUFXLENBQUksU0FBUyxFQUFFLEtBQUssRUFBSztJQUN0QyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQUEsRUFBRSxFQUFJO01BQ3BCLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDO0lBQ3pELENBQUMsQ0FBQztFQUNOLENBQUM7RUFFRCxPQUFPO0lBQ0gsSUFBSSxFQUFFLFNBQU4sSUFBSSxDQUFBLEVBQWM7TUFDZCxTQUFTLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUM7TUFDcEQsSUFBSSxDQUFDLFNBQVMsRUFDVjtNQUVKLGNBQWMsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQztNQUN6RCxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDO01BQzdELG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUM7TUFDbkUsZUFBZSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUM7TUFDM0QsYUFBYSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDO01BRXZELFVBQVUsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDO01BQzdELFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDO01BRXJELGFBQWEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDO01BQ2pFLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUM7TUFFM0QsWUFBWSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUM7TUFDL0QsWUFBWSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQztNQUV6RCxTQUFTLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxFQUFFLEVBQUk7UUFDNUQsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQztNQUNwRCxDQUFDLENBQUM7SUFDTjtFQUNKLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUFDLElBQUEsUUFBQSxHQUFBLE9BQUEsY0FFVyxZQUFZOzs7Ozs7Ozs7OztBQ2hJcEIsSUFBTSxZQUFZLEdBQUEsT0FBQSxDQUFBLFlBQUEsR0FBRyxTQUFmLFlBQVksQ0FBSSxPQUFPLEVBQUs7RUFDckMsSUFBTSxrQkFBa0IsR0FBRyxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsZ0JBQWdCLENBQUMsNEJBQTRCLENBQUM7RUFFbEYsSUFBRyxrQkFBa0IsRUFBRTtJQUNuQixPQUFPLElBQUEsbUJBQUEsYUFBSSxrQkFBa0IsRUFBRSxHQUFHLENBQUMsVUFBQSxnQkFBZ0I7TUFBQSxPQUFJLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztJQUFBLEVBQUM7RUFDbkc7QUFDSixDQUFDOzs7Ozs7Ozs7Ozs7SUNOWSxVQUFVLEdBQUEsT0FBQSxDQUFBLFVBQUE7RUFBQSxTQUFBLFdBQUE7SUFBQSxJQUFBLGdCQUFBLG1CQUFBLFVBQUE7RUFBQTtFQUFBLFdBQUEsYUFBQSxhQUFBLFVBQUE7SUFBQSxHQUFBO0lBQUEsS0FBQSxFQUNuQixTQUFPLG1CQUFtQixDQUFDLElBQUksRUFBRTtNQUU3QixPQUFPLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFO1FBQ3ZDLE9BQU8sRUFBRTtVQUNMLE9BQU8sRUFBRSxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7VUFDN0MsU0FBUyxFQUFFLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDN0MsV0FBVyxFQUFFLFNBQVM7WUFDdEIsZUFBZSxFQUFFLDRCQUE0QjtZQUM3QyxhQUFhLEVBQUU7VUFDbkIsQ0FBQyxDQUFDO1VBQ0YsV0FBVyxFQUFFLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFBQyxVQUFVLEVBQUU7VUFBSSxDQUFDO1FBQzFFO01BQ0osQ0FBQyxDQUFDO0lBQ047RUFBQztJQUFBLEdBQUE7SUFBQSxLQUFBLEVBRUQsU0FBTyxhQUFhLENBQUMsTUFBTSxFQUFFO01BQ3pCLE1BQU0sYUFBTixNQUFNLGVBQU4sTUFBTSxDQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDO01BQzVDLE1BQU0sYUFBTixNQUFNLGVBQU4sTUFBTSxDQUFFLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUM7SUFDbkQ7RUFBQztJQUFBLEdBQUE7SUFBQSxLQUFBLEVBRUQsU0FBTyxZQUFZLENBQUMsTUFBTSxFQUFFO01BQ3hCLE1BQU0sYUFBTixNQUFNLGVBQU4sTUFBTSxDQUFFLGVBQWUsQ0FBQyxVQUFVLENBQUM7TUFDbkMsTUFBTSxhQUFOLE1BQU0sZUFBTixNQUFNLENBQUUsZUFBZSxDQUFDLG1CQUFtQixDQUFDO0lBQ2hEO0VBQUM7SUFBQSxHQUFBO0lBQUEsS0FBQSxFQUVELFNBQU8sWUFBWSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO01BQ3pDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztNQUVsQixJQUFNLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSTtNQUMzQixJQUFJLFNBQVMsRUFBRTtRQUNYLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFBLE1BQU0sRUFBSTtVQUNoQyxJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUU7WUFDcEIsVUFBVSxDQUFDLGFBQWEsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7VUFDakI7UUFDSixDQUFDLENBQUM7TUFDTjtJQUNKO0VBQUM7SUFBQSxHQUFBO0lBQUEsS0FBQSxFQUVELFNBQU8seUJBQXlCLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7TUFDdEQsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO01BRWxCLElBQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJO01BQzNCLElBQUksU0FBUyxFQUFFO1FBQ1gsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsTUFBTSxFQUFFO1VBQ3hDLElBQUksTUFBTSxLQUFLLE9BQU8sRUFBRTtZQUVwQixVQUFVLENBQUMsYUFBYSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBRWxELElBQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUM7WUFDL0QsSUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPO1lBRTlDLFVBQVUsQ0FBQyxLQUFLLENBQUMsWUFBWTtjQUN6QixJQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU07Y0FDNUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7Z0JBQUMsTUFBTSxFQUFFO2NBQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxFQUFFO2dCQUNoRSxjQUFjLENBQUMsS0FBSyxHQUFHLEtBQUs7Z0JBRTVCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztjQUNqQixDQUFDLENBQUM7WUFDTixDQUFDLENBQUM7VUFDTjtRQUNKLENBQUMsQ0FBQztNQUNOO0lBQ0o7RUFBQztJQUFBLEdBQUE7SUFBQSxLQUFBLEVBRUQsU0FBTyxhQUFhLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRTtNQUN4QyxJQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQztNQUM3RCxJQUFHLENBQUMsY0FBYyxFQUNkO01BRUosY0FBYyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTTtNQUNyQyxjQUFjLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsR0FBRyxTQUFTO0lBQ3JFO0VBQUM7SUFBQSxHQUFBO0lBQUEsS0FBQSxFQUVELFNBQU8sYUFBYSxDQUFBLEVBQUc7TUFDbkIsSUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUM7TUFDN0QsSUFBSSxDQUFDLGNBQWMsRUFDZjtNQUVKLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU07SUFDekM7RUFBQztBQUFBOzs7QUNqRkw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsImltcG9ydCB7SW1hZ2VVcGxvYWR9IGZyb20gXCIuLi9zcmMvaW1hZ2VVcGxvYWRcIjtcbmltcG9ydCB7Tm90aWZpY2F0aW9uc30gZnJvbSBcIi4uL3NyYy9ub3RpZmljYXRpb25zXCI7XG5pbXBvcnQge1Byb2ZpbGVzfSBmcm9tIFwiLi4vc3JjL3Byb2ZpbGVzXCI7XG5pbXBvcnQgU2lnbmFsUiBmcm9tIFwiLi4vc3JjL3NpZ25hbHJcIjtcbmltcG9ydCBNb2RhbHMgZnJvbSBcIi4uL3NyYy9tb2RhbHNcIjtcbmltcG9ydCBUaGVtZUJ1aWxkZXIgZnJvbSBcIi4uL3NyYy90aGVtZWJ1aWxkZXJcIjtcbmltcG9ydCB7Q2xpcGJvYXJkfSBmcm9tIFwiLi4vc3JjL2NsaXBib2FyZFwiO1xuaW1wb3J0IEVtYWlscyBmcm9tIFwiLi4vc3JjL2VtYWlsc1wiO1xuaW1wb3J0IHtNYXNrfSBmcm9tIFwiLi4vc3JjL21hc2tcIjtcbmltcG9ydCB7aW5pdFRvb2x0aXBzfSBmcm9tIFwiLi4vc3JjL3Rvb2x0aXBzXCI7XG5cbmxldCBDbHViUGFsUGFsQXBwID0gZnVuY3Rpb24gKCkge1xuXG4gICAgY29uc3QgaW5pdEZsYXRQaWNrZXIgPSAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1kYXRlcGlja2VyXVwiKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIG5ldyB0ZW1wdXNEb21pbnVzLlRlbXB1c0RvbWludXMoZWwsIHtcbiAgICAgICAgICAgICAgICBsb2NhbGl6YXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgaG91ckN5Y2xlOiBcImgyM1wiLFxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGQvTU0veXl5eVwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlOiBcImNhbGVuZGFyXCIsXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGVsLnR5cGUgPT09IFwiaGlkZGVuXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IGVsLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgIG5ldyBDbGVhdmUoaW5wdXQsIHtcbiAgICAgICAgICAgICAgICBkYXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRhdGVQYXR0ZXJuOiBbJ2QnLCAnbScsICdZJ10sXG4gICAgICAgICAgICAgICAgZGVsaW1pdGVyOiAnLydcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtZGF0ZXRpbWVwaWNrZXJdXCIpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgbmV3IHRlbXB1c0RvbWludXMuVGVtcHVzRG9taW51cyhlbCwge1xuICAgICAgICAgICAgICAgIGxvY2FsaXphdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBob3VyQ3ljbGU6IFwiaDIzXCIsXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZC9NTS95eXl5IEhIOm1tXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGU6IFwiY2FsZW5kYXJcIixcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2s6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3VyczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoZWwudHlwZSA9PT0gXCJoaWRkZW5cIilcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGluaXRFeHRlcm5hbExpbmtzID0gKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnVzZXItY29udGVudCBhXCIpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKFwidGFyZ2V0XCIsIFwiX2JsYW5rXCIpO1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKFwicmVsXCIsIFwiZXh0ZXJuYWwgbm9mb2xsb3cgbm9vcGVuZXJcIik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGluaXRUb3VyID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZyA9IG5ldyB0b3VyZ3VpZGUuVG91ckd1aWRlQ2xpZW50KHtcbiAgICAgICAgICAgIHNob3dTdGVwUHJvZ3Jlc3M6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd1N0ZXBEb3RzOiBmYWxzZVxuICAgICAgICB9KTtcblxuICAgICAgICBpZih0Zy50b3VyU3RlcHMgPiAwKVxuICAgICAgICAgICAgdGcuc3RhcnQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbml0VG9nZ2xlT3B0aW9uID0gKCkgPT4ge1xuXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS10b2dnbGUtb3B0aW9uXVwiKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdG9yID0gZWwuZGF0YXNldC50b2dnbGVPcHRpb247XG4gICAgICAgICAgICBpZighc2VsZWN0b3IpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCBic0NvbGxhcHNlID0gYm9vdHN0cmFwLkNvbGxhcHNlLmdldE9yQ3JlYXRlSW5zdGFuY2Uoc2VsZWN0b3IsIHsgdG9nZ2xlOiBmYWxzZSB9KTtcblxuICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYnNDb2xsYXBzZS50b2dnbGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBpbml0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpbml0RmxhdFBpY2tlcigpO1xuICAgICAgICAgICAgaW5pdEV4dGVybmFsTGlua3MoKTtcbiAgICAgICAgICAgIGluaXRUb29sdGlwcyhkb2N1bWVudCk7XG4gICAgICAgICAgICBpbml0VG91cigpO1xuICAgICAgICAgICAgaW5pdFRvZ2dsZU9wdGlvbigpO1xuXG4gICAgICAgICAgICBQcm9maWxlcy5pbml0KCk7XG4gICAgICAgICAgICBJbWFnZVVwbG9hZC5pbml0KCk7XG4gICAgICAgICAgICBOb3RpZmljYXRpb25zLmluaXQoKTtcbiAgICAgICAgICAgIFRoZW1lQnVpbGRlci5pbml0KCk7XG4gICAgICAgICAgICBNb2RhbHMuaW5pdCgpO1xuICAgICAgICAgICAgQ2xpcGJvYXJkLmluaXQoKTtcbiAgICAgICAgICAgIFNpZ25hbFIuaW5pdCgpO1xuICAgICAgICAgICAgRW1haWxzLmluaXQoKTtcbiAgICAgICAgICAgIE1hc2suaW5pdCgpO1xuICAgICAgICB9XG4gICAgfVxufSgpO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4ge1xuICAgIENsdWJQYWxQYWxBcHAuaW5pdCgpO1xufSk7XG4iLCJpbXBvcnQge0xvY2FsU3RvcmFnZX0gZnJvbSBcIi4vbG9jYWxTdG9yYWdlXCI7XG5pbXBvcnQge3JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbn0gZnJvbSBcIi4vY29tbW9uXCI7XG5cbmV4cG9ydCBjb25zdCBhcGlWZXJzaW9uID0gXCIyMDIzLTAyLTIxXCI7XG5cbmV4cG9ydCBjb25zdCBhcGkgPSBheGlvcy5jcmVhdGUoe1xuICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJSZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW5cIjogcmVxdWVzdFZlcmlmaWNhdGlvblRva2VuLFxuICAgICAgICBcIngtYXBpLXZlcnNpb25cIjogYXBpVmVyc2lvblxuICAgIH1cbn0pO1xuXG5leHBvcnQgY29uc3QgYXV0aEFwaSA9IGF4aW9zLmNyZWF0ZSh7XG4gICAgaGVhZGVyczoge1xuICAgICAgICBcIlJlcXVlc3RWZXJpZmljYXRpb25Ub2tlblwiOiByZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4sXG4gICAgICAgIFwieC1hcGktdmVyc2lvblwiOiBhcGlWZXJzaW9uXG4gICAgfVxufSk7XG5cbmF1dGhBcGkuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKFxuICAgIGNvbmZpZyA9PiB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gTG9jYWxTdG9yYWdlLmdldFRva2VuKCk7XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgY29uZmlnLmhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHt0b2tlbn1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfSxcbiAgICBlcnJvciA9PiB7XG4gICAgICAgIFByb21pc2UucmVqZWN0KGVycm9yKVxuICAgIH0pO1xuXG5hdXRoQXBpLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH0sXG4gICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUmVxdWVzdCA9IGVycm9yLmNvbmZpZztcbiAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxICYmICFvcmlnaW5hbFJlcXVlc3QuX3JldHJ5KSB7XG5cbiAgICAgICAgICAgIG9yaWdpbmFsUmVxdWVzdC5fcmV0cnkgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGF4aW9zLnBvc3QoJy9hcGkvdG9rZW4nLCBuZXcgVVJMU2VhcmNoUGFyYW1zKHsgZ3JhbnRfdHlwZTogJ2NsaWVudF9jcmVkZW50aWFscycgfSksIHsgaGVhZGVyczoge1wieC1hcGktdmVyc2lvblwiOiBhcGlWZXJzaW9ufX0pXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDIwMCAmJiByZXMuZGF0YS5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIExvY2FsU3RvcmFnZS5zZXRUb2tlbihyZXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFJlcXVlc3QuaGVhZGVycy5BdXRob3JpemF0aW9uID0gYEJlYXJlciAke3Jlcy5kYXRhLmFjY2Vzc190b2tlbn1gO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXhpb3Mob3JpZ2luYWxSZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfSk7XG4iLCJpbXBvcnQge05vdGlmaWNhdGlvbnN9IGZyb20gXCIuL25vdGlmaWNhdGlvbnNcIjtcbmltcG9ydCB7c2V0QWpheE1vZGFsQ29udGVudCwgc2V0TW9kYWxDb250ZW50fSBmcm9tIFwiLi9tb2RhbHNcIjtcblxuZXhwb3J0IGNsYXNzIENsaXBib2FyZHtcbiAgICBzdGF0aWMgaW5pdCgpIHtcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWNsaXBib2FyZC10ZXh0XVwiKS5mb3JFYWNoKHRhcmdldCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjbGlwYm9hcmQgPSBuZXcgQ2xpcGJvYXJkSlModGFyZ2V0KTtcblxuICAgICAgICAgICAgY2xpcGJvYXJkLm9uKCdzdWNjZXNzJywgZSA9PiB7XG4gICAgICAgICAgICAgICAgTm90aWZpY2F0aW9ucy5zaG93U3VjY2Vzcyh7IG1lc3NhZ2U6IFwiVGhlIFVSTCBoYXMgYmVlbiBjb3BpZWQgdG8geW91ciBjbGlwYm9hcmQuXCIgfSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBhc3luYyBlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0LmNsb3Nlc3QoXCJbZGF0YS1jb3B5LWxpbmtdXCIpXG4gICAgICAgICAgICBpZiAoIXRhcmdldClcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgY29uc3QgdXJsID0gdGFyZ2V0LmRhdGFzZXQuY29weUxpbms7XG5cbiAgICAgICAgICAgIGF3YWl0IHNldEFqYXhNb2RhbENvbnRlbnQoYC9jb3B5LWxpbms/dXJsPSR7ZW5jb2RlVVJJKHVybCl9YCk7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1jbGlwYm9hcmQtdGFyZ2V0XVwiKS5mb3JFYWNoKHRhcmdldCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xpcGJvYXJkID0gbmV3IENsaXBib2FyZEpTKHRhcmdldCk7XG5cbiAgICAgICAgICAgICAgICBjbGlwYm9hcmQub24oJ3N1Y2Nlc3MnLCBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9ucy5zaG93U3VjY2Vzcyh7IG1lc3NhZ2U6IFwiVGhlIFVSTCBoYXMgYmVlbiBjb3BpZWQgdG8geW91ciBjbGlwYm9hcmQuXCIgfSlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCJleHBvcnQgY29uc3QgcmVxdWVzdFZlcmlmaWNhdGlvblRva2VuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT1cIl9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuXCJdJyk/LnZhbHVlO1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkQ29tbWFzKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJywnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplVXJsKHVybCkge1xuICAgIHJldHVybiB1cmwudG9Mb3dlckNhc2UoKVxuICAgICAgICAucmVwbGFjZSgvIC9nLCAnLScpXG4gICAgICAgIC5yZXBsYWNlKC9bXlxcdy1dKy9nLCAnJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cnVuY2F0ZVN0cmluZyhzdHIsIG51bSkge1xuICAgIGlmIChzdHIubGVuZ3RoIDw9IG51bSkge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICByZXR1cm4gc3RyLnNsaWNlKDAsIG51bSkgKyAnLi4uJztcbn1cblxuZXhwb3J0IGxldCBwYXRoQW5kUXVlcnkgPSBsb2NhdGlvbi5wYXRobmFtZSArIGxvY2F0aW9uLnNlYXJjaCArIGxvY2F0aW9uLmhhc2g7XG5cbmV4cG9ydCBsZXQgcmV0dXJuVXJsUXVlcnlTdHJpbmcgPSBgcmV0dXJudXJsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhdGhBbmRRdWVyeSl9YDtcblxuZXhwb3J0IGNvbnN0IGFyY2hpdmVkQmFkZ2UgPSBcIjxzcGFuIGNsYXNzPVxcXCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5XFxcIj5BcmNoaXZlZDwvc3Bhbj5cIjtcblxuZXhwb3J0IGNvbnN0IHNsaWRlVXAgPSAoZWwsIHNwZWVkLCBjYWxsYmFjaykgPT4ge1xuICAgIEtUVXRpbC5zbGlkZVVwKGVsLCBzcGVlZCA/PyAyNTAsIGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNsaWRlRG93biA9IChlbCwgc3BlZWQsIGNhbGxiYWNrKSA9PiB7XG4gICAgS1RVdGlsLnNsaWRlRG93bihlbCwgc3BlZWQgPz8gMjUwLCBjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBjb25zdCBzaG93ID0gKGVsLCBkaXNwbGF5KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBlbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZWwpIHtcbiAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IChkaXNwbGF5ID8gZGlzcGxheSA6ICdibG9jaycpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGhpZGUgPSAoZWwpID0+IHtcbiAgICBpZiAodHlwZW9mIGVsICE9PSAndW5kZWZpbmVkJyAmJiBlbCkge1xuICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVVSUQoKSB7XG4gICAgcmV0dXJuICd4eHh4eHh4eHh4eHg0eHh4eXh4eHh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xuICAgICAgICBjb25zdCByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCwgdiA9IGMgPT09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XG4gICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRDdWx0dXJlKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImN1cnJlbnRDdWx0dXJlXCIpPy52YWx1ZSA/PyBcImVuLWdiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdXJyZW50Q3VycmVuY3koKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3VycmVudEN1cnJlbmN5XCIpPy52YWx1ZSA/PyBcIsKjXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW5jeVN5bWJvbCgpIHtcbiAgICByZXR1cm4gKDApLnRvTG9jYWxlU3RyaW5nKGN1cnJlbnRDdWx0dXJlKCksIHtcbiAgICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgICAgIGN1cnJlbmN5OiBjdXJyZW50Q3VycmVuY3koKSxcbiAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwLFxuICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDBcbiAgICB9KS5yZXBsYWNlKC9cXGQvZywgJycpLnRyaW0oKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEN1cnJlbmN5KGFtb3VudCkge1xuICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoY3VycmVudEN1bHR1cmUoKSwge1xuICAgICAgICBzdHlsZTogXCJjdXJyZW5jeVwiLFxuICAgICAgICBjdXJyZW5jeTogY3VycmVudEN1cnJlbmN5KCksXG4gICAgfSkuZm9ybWF0KGFtb3VudCk7XG59XG4iLCJleHBvcnQgY29uc3QgZGVib3VuY2UgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIG1zKSB7XG4gICAgbGV0IHRpbWVyID0gMDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgfSwgbXMgfHwgMCk7XG4gICAgfTtcbn07XG5cbiIsImltcG9ydCB7Tm90aWZpY2F0aW9uc30gZnJvbSBcIi4vbm90aWZpY2F0aW9uc1wiO1xuaW1wb3J0IHthdXRoQXBpLCBhcGlWZXJzaW9ufSBmcm9tIFwiLi9hcGlcIjtcbmltcG9ydCB7RnJlZXplVUl9IGZyb20gXCIuL2ZyZWV6ZS11aVwiO1xuaW1wb3J0IHtyZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW59IGZyb20gXCIuL2NvbW1vblwiO1xuaW1wb3J0IHttZW1iZXJTZWFyY2hUYWdpZnl9IGZyb20gXCIuL3RhZ2lmeVwiO1xuaW1wb3J0IHtHdWlkfSBmcm9tIFwiLi9ndWlkXCI7XG5pbXBvcnQge3RyYWNrRXhjZXB0aW9ufSBmcm9tIFwiLi9lcnJvcnNcIjtcblxubGV0IGVkaXRvciwgc3ViamVjdEVsLCB0YWdpZnksIGF0dGFjaG1lbnREcm9wem9uZSwgaWQsIG1vZGFsO1xuZXhwb3J0IGNvbnN0IG1heEZpbGVTaXplID0gNTsgLy8gTWF4aW11bSBzaXplIGluIE1CXG5leHBvcnQgY29uc3QgbWF4QXR0YWNobWVudHMgPSA1OyAvLyBNYXhpbXVtIG51bWJlciBvZiBhdHRhY2htZW50cyBhbGxvd2VkIHBlciBlbWFpbFxuXG5leHBvcnQgY29uc3QgcGFyYWxsZWxVcGxvYWRzID0gNDtcblxuY29uc3QgRW1haWxzID0gZnVuY3Rpb24gKCkge1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGFzeW5jIGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0LmNsb3Nlc3QoXCJbZGF0YS1zZW5kLWVtYWlsXVwiKVxuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVtYmVySWQgPSB0YXJnZXQuZGF0YXNldC5tZW1iZXJJZDtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGFyZ2V0LmRhdGFzZXQubWVtYmVyTmFtZTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbXBvc2VFbWFpbChbe3ZhbHVlOiBtZW1iZXJJZCwgdGV4dDogbmFtZX1dKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufSgpO1xuXG5leHBvcnQgY29uc3QgaW5pdERyb3B6b25lID0gKHNlbGVjdG9yLCBpZCkgPT4ge1xuXG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICBjb25zdCBwcmV2aWV3Tm9kZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmRyb3B6b25lLWl0ZW1cIik7XG4gICAgcHJldmlld05vZGUuaWQgPSBcIlwiO1xuICAgIGNvbnN0IHByZXZpZXdUZW1wbGF0ZSA9IHByZXZpZXdOb2RlLnBhcmVudE5vZGUuaW5uZXJIVE1MO1xuICAgIHByZXZpZXdOb2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocHJldmlld05vZGUpO1xuXG4gICAgY29uc3QgZHJvcHpvbmUgPSBuZXcgRHJvcHpvbmUoc2VsZWN0b3IsIHtcbiAgICAgICAgdXJsOiBgL2FwaS9lbWFpbHMvYXR0YWNobWVudHMvJHtpZH1gLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBSZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46IHJlcXVlc3RWZXJpZmljYXRpb25Ub2tlbixcbiAgICAgICAgICAgIFwieC1hcGktdmVyc2lvblwiOiBhcGlWZXJzaW9uXG4gICAgICAgIH0sXG4gICAgICAgIHByZXZpZXdUZW1wbGF0ZTogcHJldmlld1RlbXBsYXRlLFxuICAgICAgICBwYXJhbGxlbFVwbG9hZHM6IHBhcmFsbGVsVXBsb2FkcyxcbiAgICAgICAgbWF4RmlsZXNpemU6IG1heEZpbGVTaXplLCAvLyBNYXggZmlsZXNpemUgaW4gTUJcbiAgICAgICAgbWF4RmlsZXM6IG1heEF0dGFjaG1lbnRzLFxuICAgICAgICBhdXRvUXVldWU6IHRydWUsXG4gICAgICAgIHByZXZpZXdzQ29udGFpbmVyOiBzZWxlY3RvciArIFwiIC5kcm9wem9uZS1pdGVtc1wiLFxuICAgICAgICBjbGlja2FibGU6IFwiLmRyb3B6b25lLXNlbGVjdFwiLCAvLyBEZWZpbmUgdGhlIGVsZW1lbnQgdGhhdCBzaG91bGQgYmUgdXNlZCBhcyBjbGljayB0cmlnZ2VyIHRvIHNlbGVjdCBmaWxlcy5cbiAgICB9KTtcblxuICAgIGRyb3B6b25lLm9uKFwiYWRkZWRmaWxlXCIsIGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgIGNvbnN0IGRyb3B6b25lSXRlbXMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmRyb3B6b25lLWl0ZW0nKTtcbiAgICAgICAgZHJvcHpvbmVJdGVtcy5mb3JFYWNoKGRyb3B6b25lSXRlbSA9PiB7XG4gICAgICAgICAgICBkcm9wem9uZUl0ZW0uc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRyb3B6b25lLm9uKFwidG90YWx1cGxvYWRwcm9ncmVzc1wiLCBmdW5jdGlvbiAocHJvZ3Jlc3MpIHtcbiAgICAgICAgY29uc3QgcHJvZ3Jlc3NCYXJzID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5wcm9ncmVzcy1iYXInKTtcbiAgICAgICAgcHJvZ3Jlc3NCYXJzLmZvckVhY2gocHJvZ3Jlc3NCYXIgPT4ge1xuICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuc3R5bGUud2lkdGggPSBwcm9ncmVzcyArIFwiJVwiO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRyb3B6b25lLm9uKFwic2VuZGluZ1wiLCBmdW5jdGlvbiAoZmlsZSkge1xuICAgICAgICAvLyBTaG93IHRoZSB0b3RhbCBwcm9ncmVzcyBiYXIgd2hlbiB1cGxvYWQgc3RhcnRzXG4gICAgICAgIGNvbnN0IHByb2dyZXNzQmFycyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcucHJvZ3Jlc3MtYmFyJyk7XG4gICAgICAgIHByb2dyZXNzQmFycy5mb3JFYWNoKHByb2dyZXNzQmFyID0+IHtcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0eWxlLm9wYWNpdHkgPSBcIjFcIjtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkcm9wem9uZS5vbihcImNvbXBsZXRlXCIsIGZ1bmN0aW9uIChwcm9ncmVzcykge1xuICAgICAgICBjb25zdCBwcm9ncmVzc0JhcnMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmR6LWNvbXBsZXRlJyk7XG5cbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBwcm9ncmVzc0JhcnMuZm9yRWFjaChwcm9ncmVzc0JhciA9PiB7XG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3NCYXIucXVlcnlTZWxlY3RvcignLnByb2dyZXNzLWJhcicpLnN0eWxlLm9wYWNpdHkgPSBcIjBcIjtcbiAgICAgICAgICAgICAgICBwcm9ncmVzc0Jhci5xdWVyeVNlbGVjdG9yKCcucHJvZ3Jlc3MnKS5zdHlsZS5vcGFjaXR5ID0gXCIwXCI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgMzAwKTtcbiAgICB9KTtcblxuICAgIGRyb3B6b25lLm9uKFwicmVtb3ZlZGZpbGVcIiwgYXN5bmMgZmlsZSA9PiB7XG4gICAgICAgIGF3YWl0IHJlbW92ZUF0dGFjaG1lbnQoaWQsIGZpbGUpO1xuICAgIH0pO1xuXG4gICAgaWYoY29udGFpbmVyLmRhdGFzZXQuYXR0YWNobWVudHMpIHtcbiAgICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBKU09OLnBhcnNlKGNvbnRhaW5lci5kYXRhc2V0LmF0dGFjaG1lbnRzKTtcblxuICAgICAgICBhdHRhY2htZW50cz8uZm9yRWFjaChhdHRhY2htZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vY2tGaWxlID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGF0dGFjaG1lbnQubmFtZSxcbiAgICAgICAgICAgICAgICBzaXplOiBhdHRhY2htZW50LnNpemUsXG4gICAgICAgICAgICAgICAgdHlwZTogYXR0YWNobWVudC5jb250ZW50VHlwZSxcbiAgICAgICAgICAgICAgICBhY2NlcHRlZDogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGRyb3B6b25lLmZpbGVzLnB1c2gobW9ja0ZpbGUpO1xuICAgICAgICAgICAgZHJvcHpvbmUuZW1pdChcImFkZGVkZmlsZVwiLCBtb2NrRmlsZSk7XG4gICAgICAgICAgICBkcm9wem9uZS5lbWl0KFwiY29tcGxldGVcIiwgbW9ja0ZpbGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZHJvcHpvbmU7XG59XG5cbmV4cG9ydCBjb25zdCBjb21wb3NlRW1haWwgPSBhc3luYyAodG8sIHN1YmplY3QsIGJvZHkpID0+IHtcbiAgICBpZCA9IEd1aWQubmV3R3VpZCgpO1xuICAgIGNvbnN0IHBsYWNlaG9sZGVyRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI21vZGFsLXBsYWNlaG9sZGVyXCIpO1xuICAgIGNvbnN0IHtkYXRhfSA9IGF3YWl0IGF4aW9zLmdldChcIi9jb21wb3NlLWVtYWlsXCIpO1xuXG4gICAgY29uc3QgbW9kYWxIdG1sID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhkYXRhLCAndGV4dC9odG1sJyk7XG4gICAgcGxhY2Vob2xkZXJFbC5hcHBlbmQoLi4ubW9kYWxIdG1sLmJvZHkuY2hpbGRyZW4pO1xuICAgIGNvbnN0IG1vZGFsRWwgPSBwbGFjZWhvbGRlckVsLnF1ZXJ5U2VsZWN0b3IoXCIubW9kYWxcIik7XG4gICAgbW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKG1vZGFsRWwpO1xuXG4gICAgY29uc3QgcmVjaXBpZW50c0VsID0gcGxhY2Vob2xkZXJFbC5xdWVyeVNlbGVjdG9yKFwiI1RvXCIpO1xuICAgIHN1YmplY3RFbCA9IHBsYWNlaG9sZGVyRWwucXVlcnlTZWxlY3RvcihcIiNTdWJqZWN0XCIpO1xuXG4gICAgc3ViamVjdEVsLnZhbHVlID0gc3ViamVjdCA/PyBcIlwiO1xuXG4gICAgaW5pdFRhZ2lmeShyZWNpcGllbnRzRWwsIHRvKTtcbiAgICBpbml0RWRpdG9yKG1vZGFsRWwsIFwiI2VkaXRvclwiKVxuICAgIGF0dGFjaG1lbnREcm9wem9uZSA9IGluaXREcm9wem9uZShcIiNhdHRhY2htZW50X2Ryb3B6b25lXCIsIGlkKTtcblxuICAgIHBsYWNlaG9sZGVyRWwucXVlcnlTZWxlY3RvcihcIiNzZW5kLWVtYWlsXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgTm90aWZpY2F0aW9ucy5jb25maXJtLmZpcmUoeyB0ZXh0OiBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBzZW5kIHRoZSBlbWFpbD9cIiB9KVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNDb25maXJtZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2F2ZUVtYWlsKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcGxhY2Vob2xkZXJFbC5xdWVyeVNlbGVjdG9yKFwiI2FkdmFuY2VkX2VkaXRvclwiKT8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGFzeW5jIChlKSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBhd2FpdCBzYXZlRW1haWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgbW9kYWwuc2hvdygpO1xuXG4gICAgbW9kYWxFbC5hZGRFdmVudExpc3RlbmVyKCdoaWRlLmJzLm1vZGFsJywgZSA9PiB7XG4gICAgICAgIHBsYWNlaG9sZGVyRWwuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgdGFnaWZ5ID0gbnVsbDtcbiAgICAgICAgZWRpdG9yID0gbnVsbDtcbiAgICB9KTtcbn1cblxuLy8jcmVnaW9uIEVkaXRvclxuY29uc3QgaW5pdEVkaXRvciA9IChjb250YWluZXIsIHNlbGVjdG9yKSA9PiB7XG5cbiAgICAvLyBJbml0IGVkaXRvclxuICAgIGNvbnN0IGVkaXRvckVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcilcbiAgICBlZGl0b3IgPSBDS0VkaXRvci5DbGFzc2ljRWRpdG9yXG4gICAgICAgIC5jcmVhdGUoZWRpdG9yRWwsIHtcbiAgICAgICAgICAgICAgICB0b29sYmFyOiB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAnaGVhZGluZycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnfCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnYm9sZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaXRhbGljJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdpbmRlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ291dGRlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2FsaWdubWVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnfCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnbGluaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnYnVsbGV0ZWRMaXN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdudW1iZXJlZExpc3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2Jsb2NrUXVvdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2hvcml6b250YWxMaW5lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdpbnNlcnRUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAudGhlbihlID0+IHtcbiAgICAgICAgICAgIGVkaXRvciA9IGU7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgfSk7XG59O1xuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIFRhZ2lmeVxuXG5jb25zdCBpbml0VGFnaWZ5ID0gKGVsLCB0bykgPT4ge1xuXG4gICAgdGFnaWZ5ID0gbWVtYmVyU2VhcmNoVGFnaWZ5KFwiI1RvXCIsIHRydWUpO1xuICAgIHRhZ2lmeS53aGl0ZWxpc3QgPSB0bztcbiAgICB0YWdpZnkuYWRkVGFncyh0byk7XG59O1xuXG4vLyNlbmRyZWdpb25cblxuY29uc3Qgc2F2ZUVtYWlsID0gYXN5bmMgKHNlbmRFbWFpbCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBlZGl0b3IuZ2V0RGF0YSgpO1xuICAgIGNvbnN0IHN1YmplY3QgPSBzdWJqZWN0RWwudmFsdWU7XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHRhZ2lmeS52YWx1ZS5tYXAoeCA9PiAoe3ZhbHVlOiB4LnZhbHVlLCB0ZXh0OiB4LnRleHR9KSk7XG5cbiAgICBpZihzZW5kRW1haWwgJiYgcmVjaXBpZW50cy5sZW5ndGggPD0gMCl7XG4gICAgICAgIE5vdGlmaWNhdGlvbnMuc2hvd1dhcm5pbmcoeyBtZXNzYWdlOiBcIlBsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIHBhcnRpY2lwYW50IGJlZm9yZSBzZW5kaW5nLlwiIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNlbmRFbWFpbCAmJiBzdWJqZWN0Lmxlbmd0aCA8PSAwKSB7XG4gICAgICAgIE5vdGlmaWNhdGlvbnMuc2hvd1dhcm5pbmcoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHN1YmplY3QuXCIgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZihzZW5kRW1haWwgJiYgYm9keS5sZW5ndGggPD0gMSl7XG4gICAgICAgIE5vdGlmaWNhdGlvbnMuc2hvd1dhcm5pbmcoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIG1lc3NhZ2UgYm9keS5cIiB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlcyA9IHtcbiAgICAgICAgaWQsXG4gICAgICAgIHN1YmplY3QsXG4gICAgICAgIGJvZHksXG4gICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgIHN0YXR1czogc2VuZEVtYWlsID8gXCJRdWV1ZWRcIiA6IFwiRHJhZnRcIlxuICAgIH07XG5cbiAgICBGcmVlemVVSS5GcmVlemUoKTtcblxuICAgIHRyeXtcbiAgICAgICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgYXV0aEFwaS5wdXQoYC9hcGkvZW1haWxzLyR7aWR9YCwgdmFsdWVzKTtcblxuICAgICAgICBpZihzZW5kRW1haWwpe1xuICAgICAgICAgICAgRnJlZXplVUkuVW5GcmVlemUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYC9hZG1pbi9lbWFpbHMvY29tcG9zZS8ke2lkfWA7XG4gICAgICAgIH1cbiAgICAgICAgTm90aWZpY2F0aW9ucy5zaG93U3VjY2Vzcyh7IG1lc3NhZ2U6IFwiWW91ciBlbWFpbCBoYXMgYmVlbiBzZW50LlwiIH0pO1xuICAgICAgICBtb2RhbC5oaWRlKCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgdHJhY2tFeGNlcHRpb24oZXJyKTtcbiAgICAgICAgTm90aWZpY2F0aW9ucy5zaG93RXJyb3IoeyBtZXNzYWdlOiBcIlRoZXJlIHdhcyBhIHByb2JsZW0gc2F2aW5nIHRoZSBlbWFpbC4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci5cIiB9KTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIEZyZWV6ZVVJLlVuRnJlZXplKCk7XG4gICAgfVxufVxuXG5jb25zdCByZW1vdmVBdHRhY2htZW50ID0gYXN5bmMgKGlkLCBmaWxlKSA9PiB7XG5cbiAgICBjb25zdCB7ZGF0YX0gPSBhd2FpdCBhdXRoQXBpLmRlbGV0ZShgL2FwaS9lbWFpbHMvYXR0YWNobWVudHMvJHtpZH1gLCB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWVcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coZGF0YSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVtYWlscztcbiIsImV4cG9ydCBjb25zdCB0cmFja0V4Y2VwdGlvbiA9IChlcnIpID0+IHtcbiAgICBpZiAodHlwZW9mIGFwcEluc2lnaHRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBhcHBJbnNpZ2h0cy50cmFja0V4Y2VwdGlvbihlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgfVxufVxuIiwi77u/ZXhwb3J0IGNsYXNzIEZyZWV6ZVVJIHtcblxuICAgIHN0YXRpYyBpc0Zyb3plbiA9IGZhbHNlO1xuXG4gICAgc3RhdGljIEZyZWV6ZSA9IChvcHRpb25zKSA9PiB7XG5cbiAgICAgICAgaWYodGhpcy5pc0Zyb3plbilcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBmcmVlemVIdG1sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGZyZWV6ZUh0bWwuY2xhc3NMaXN0LmFkZCgnZnJlZXplLXVpJyk7XG5cbiAgICAgICAgbGV0IHBhcmVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iob3B0aW9ucz8uc2VsZWN0b3IpIHx8IGRvY3VtZW50LmJvZHk7XG4gICAgICAgIGZyZWV6ZUh0bWwuc2V0QXR0cmlidXRlKCdkYXRhLXRleHQnLCBvcHRpb25zPy50ZXh0IHx8ICdQbGVhc2Ugd2FpdCcpO1xuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvcHRpb25zPy5zZWxlY3RvcikpIHtcbiAgICAgICAgICAgIGZyZWV6ZUh0bWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXG4gICAgICAgICAgICB0aGlzLmlzRnJvemVuID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChmcmVlemVIdG1sKTtcbiAgICB9O1xuXG4gICAgc3RhdGljIFVuRnJlZXplID0gKCkgPT4ge1xuICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5mcmVlemUtdWknKTtcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaXMtdW5mcmVlemluZycpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpcy11bmZyZWV6aW5nJyk7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucGFyZW50RWxlbWVudD8ucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Zyb3plbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDI1MCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwiZXhwb3J0IGNsYXNzIEd1aWQge1xuICAgIHN0YXRpYyBuZXdHdWlkKCkge1xuICAgICAgICByZXR1cm4gJ3h4eHh4eHh4eHh4eDR4eHh5eHh4eHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgICBsZXQgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xuICAgICAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCJpbXBvcnQge2FwaX0gZnJvbSBcIi4vYXBpXCI7XG5pbXBvcnQge05vdGlmaWNhdGlvbnN9IGZyb20gXCIuL25vdGlmaWNhdGlvbnNcIjtcblxuZXhwb3J0IGNsYXNzIEltYWdlVXBsb2FkIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmV2ZW50ID0gbmV3IEV2ZW50KCdtb2RhbC5sb2FkZWQnKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UGxhY2Vob2xkZXIoKSB7XG4gICAgICAgIGxldCBwbGFjZWhvbGRlckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI21vZGFsLXBsYWNlaG9sZGVyXCIpO1xuXG4gICAgICAgIGlmICghcGxhY2Vob2xkZXJFbGVtZW50KSB7XG4gICAgICAgICAgICBwbGFjZWhvbGRlckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyRWxlbWVudC5pZCA9IFwibW9kYWwtcGxhY2Vob2xkZXJcIjtcblxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwbGFjZWhvbGRlckVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyRWxlbWVudDtcbiAgICB9XG5cbiAgICBzdGF0aWMgaW5pdCgpIHtcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcImlucHV0W2RhdGEtdG9nZ2xlPVxcXCJ1cGxvYWQtaW1hZ2VcXFwiXVwiKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBhc3luYyAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyRWxlbWVudCA9IHRoaXMuZ2V0UGxhY2Vob2xkZXIoKTtcbiAgICAgICAgICAgICAgICBsZXQgY3JvcHBlcjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHVwbG9hZFVybCA9IGVsLmRhdGFzZXQudXJsO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VUaXRsZSA9IGVsLmRhdGFzZXQubWVzc2FnZVRpdGxlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NNZXNzYWdlID0gZWwuZGF0YXNldC5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aWV3Q2xhc3MgPSBlbC5kYXRhc2V0LnByZXZpZXdDbGFzcztcbiAgICAgICAgICAgICAgICBjb25zdCBpbWFnZVdpZHRoID0gZWwuZGF0YXNldC5pbWFnZVdpZHRoID8/IDQwMDtcbiAgICAgICAgICAgICAgICBjb25zdCBpbWFnZUhlaWdodCA9IGVsLmRhdGFzZXQuaW1hZ2VIZWlnaHQgPz8gNDAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gZWwuZGF0YXNldC5hc3BlY3RSYXRpbyA/PyAxO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVybElucHV0ID0gZWwuZGF0YXNldC51cmxJbnB1dDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHtkYXRhfSA9IGF3YWl0IGF4aW9zLmdldChcIi91cGxvYWRpbWFnZS9cIik7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtb2RhbEh0bWwgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGRhdGEsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlckVsZW1lbnQuYXBwZW5kKC4uLm1vZGFsSHRtbC5ib2R5LmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RhbEVsID0gcGxhY2Vob2xkZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIubW9kYWxcIik7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwobW9kYWxFbCk7XG5cbiAgICAgICAgICAgICAgICBtb2RhbEVsLmFkZEV2ZW50TGlzdGVuZXIoJ3Nob3cuYnMubW9kYWwnLCBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY3JvcHBlciA9IG5ldyBDcm9wcGVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZScpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3BlY3RSYXRpbzogYXNwZWN0UmF0aW8sXG4gICAgICAgICAgICAgICAgICAgICAgICBkcmFnTW9kZTogJ21vdmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JvcEJveE1vdmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JvcEJveFJlc2l6YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5Db250YWluZXJXaWR0aDogMzAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluQ29udGFpbmVySGVpZ2h0OiAzMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5DYW52YXNXaWR0aDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbkNyb3BCb3hXaWR0aDogMjUwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0Nyb3BBcmVhOiAwLjksXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZTogMCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGJ1dHRvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3JvcHBlci1idXR0b25zJyk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtZXRob2RzID0gYnV0dG9ucy5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tZXRob2RdJyk7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbiAoYnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtZXRob2QgPSBidXR0b24uZ2V0QXR0cmlidXRlKCdkYXRhLW1ldGhvZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvcHRpb24gPSBidXR0b24uZ2V0QXR0cmlidXRlKCdkYXRhLW9wdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvcHRpb24yID0gYnV0dG9uLmdldEF0dHJpYnV0ZSgnZGF0YS1zZWNvbmQtb3B0aW9uJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNyb3BwZXJbbWV0aG9kXShvcHRpb24sIG9wdGlvbjIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNyb3BwZXJbbWV0aG9kXShvcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNyb3BwZXJbbWV0aG9kXSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2QgPT09ICdnZXRDcm9wcGVkQ2FudmFzJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnZXRDcm9wcGVkQ2FudmFzTW9kYWwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kYWxCb2R5ID0gbW9kYWwucXVlcnlTZWxlY3RvcignLm1vZGFsLWJvZHknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxCb2R5LmlubmVySFRNTCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbEJvZHkuYXBwZW5kQ2hpbGQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwdXREYXRhJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBKU09OLnN0cmluZ2lmeShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgbW9kYWxFbC5hZGRFdmVudExpc3RlbmVyKCdoaWRlLmJzLm1vZGFsJywgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNyb3BwZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICBjcm9wcGVyID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlckVsZW1lbnQuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNyb3BCdXR0b24gPSBwbGFjZWhvbGRlckVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNjcm9wXCIpO1xuICAgICAgICAgICAgICAgIGNyb3BCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGFzeW5jIGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNyb3BCdXR0b24uc2V0QXR0cmlidXRlKFwiZGF0YS1rdC1pbmRpY2F0b3JcIiwgXCJvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgY3JvcEJ1dHRvbi5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCBcImRpc2FibGVkXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYW52YXM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjcm9wcGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW1hZ2VEYXRhID0gY3JvcHBlci5nZXRJbWFnZURhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcyA9IGNyb3BwZXIuZ2V0Q3JvcHBlZENhbnZhcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGltYWdlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBpbWFnZUhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogaW1hZ2VEYXRhLm5hdHVyYWxXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IGltYWdlRGF0YS5uYXR1cmFsSGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlU21vb3RoaW5nUXVhbGl0eTogJ2hpZ2gnXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7cHJldmlld0NsYXNzfWApLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShcInNyY3NldFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgY2FudmFzLnRvRGF0YVVSTCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMudG9CbG9iKGFzeW5jIGJsb2IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgndXBsb2FkJywgYmxvYiwgZmlsZS5uYW1lKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtkYXRhfSA9IGF3YWl0IGFwaS5wb3N0KHVwbG9hZFVybCwgZm9ybURhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb25zLnNob3dTdWNjZXNzKHsgbWVzc2FnZTogc3VjY2Vzc01lc3NhZ2UgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybElucHV0ICYmIGRhdGEudXJsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodXJsSW5wdXQpLnZhbHVlID0gZGF0YS51cmw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9ucy5zaG93RXJyb3IoeyBtZXNzYWdlOiBcIlRoZXJlIHdhcyBhbiBlcnJvciB1cGxvYWRpbmcgdGhlIGltYWdlLlwiIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgbGV0IGRvbmUgPSB1cmwgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2UnKS5zcmMgPSB1cmw7XG5cbiAgICAgICAgICAgICAgICAgICAgbW9kYWwuc2hvdygpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gZS50YXJnZXQuZmlsZXNbMF07XG4gICAgICAgICAgICAgICAgaWYoZmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoVVJMKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEZpbGVSZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKHJlYWRlci5yZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxufVxuIiwiLy8gTG9jYWxTdG9yYWdlU2VydmljZS5qc1xuZXhwb3J0IGNsYXNzIExvY2FsU3RvcmFnZSB7XG5cbiAgICBzdGF0aWMgc2V0VG9rZW4odG9rZW5PYmopIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJ0b2tlblwiLCB0b2tlbk9iai5hY2Nlc3NfdG9rZW4pO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImV4cGlyZXNcIiwgdG9rZW5PYmouZXhwaXJlcyk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFRva2VuKCkge1xuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ0b2tlblwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY2xlYXJUb2tlbigpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJ0b2tlblwiKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJleHBpcmF0aW9uXCIpO1xuICAgIH1cbn1cbiIsImV4cG9ydCBjbGFzcyBNYXNrIHtcblxuICAgIHN0YXRpYyBpbml0RWwoZWwpe1xuICAgICAgICBjb25zdCBpbnB1dFR5cGUgPSBlbC5kYXRhc2V0Lm1hc2s7XG5cbiAgICAgICAgc3dpdGNoIChpbnB1dFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICAgICAgICAgICAgbmV3IENsZWF2ZShlbCwge1xuICAgICAgICAgICAgICAgICAgICBkYXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBkYXRlUGF0dGVybjogWydkJywgJ20nLCAnWSddLFxuICAgICAgICAgICAgICAgICAgICBkZWxpbWl0ZXI6ICcvJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFwidGltZVwiOlxuICAgICAgICAgICAgICAgIG5ldyBDbGVhdmUoZWwsIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdGltZVBhdHRlcm46IFsnaCcsICdtJ11cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJpbnRlZ2VyXCI6XG4gICAgICAgICAgICAgICAgbmV3IENsZWF2ZShlbCwge1xuICAgICAgICAgICAgICAgICAgICBudW1lcmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBudW1lcmFsVGhvdXNhbmRzR3JvdXBTdHlsZTogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgICAgIG51bWVyYWxEZWNpbWFsU2NhbGU6IDAsXG4gICAgICAgICAgICAgICAgICAgIG51bWVyYWxEZWNpbWFsTWFyazogXCJcIlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFwiZGVjaW1hbFwiOlxuICAgICAgICAgICAgICAgIG5ldyBDbGVhdmUoZWwsIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtZXJhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbnVtZXJhbFRob3VzYW5kc0dyb3VwU3R5bGU6IFwibm9uZVwiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSBlbC5kYXRhc2V0LnBhdHRlcm47XG4gICAgICAgICAgICAgICAgbmV3IENsZWF2ZShlbCwge1xuICAgICAgICAgICAgICAgICAgICB0aW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0aW1lUGF0dGVybjogcGF0dGVybi5zcGxpdChcIixcIilcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJjdXJyZW5jeVwiOlxuICAgICAgICAgICAgICAgIG5ldyBDbGVhdmUoZWwsIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtZXJhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbnVtZXJhbFRob3VzYW5kc0dyb3VwU3R5bGU6IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgICAgICBudW1lcmFsUG9zaXRpdmVPbmx5OiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGluaXQoKSB7XG4gICAgICAgIEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbWFza10nKSkuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgIE1hc2suaW5pdEVsKGVsKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtGcmVlemVVSX0gZnJvbSBcIi4vZnJlZXplLXVpXCI7XG5pbXBvcnQge3RyYWNrRXhjZXB0aW9ufSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7Tm90aWZpY2F0aW9uc30gZnJvbSBcIi4vbm90aWZpY2F0aW9uc1wiO1xuXG5leHBvcnQgY29uc3Qgc2V0TW9kYWxDb250ZW50ID0gKGh0bWwpID0+IHtcbiAgICBjb25zdCBwbGFjZWhvbGRlckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI21vZGFsLXBsYWNlaG9sZGVyXCIpO1xuICAgIHBsYWNlaG9sZGVyRWxlbWVudC5pbm5lckhUTUwgPSBcIlwiOyAvLyBDbGVhciBqdXN0IGluIGNhc2UgaXQgaGFzIGFuIG9sZCBtb2RhbCBpbiBpdFxuXG4gICAgY29uc3QgbW9kYWxIdG1sID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhodG1sLCAndGV4dC9odG1sJyk7XG4gICAgcGxhY2Vob2xkZXJFbGVtZW50LmFwcGVuZCguLi5tb2RhbEh0bWwuYm9keS5jaGlsZHJlbik7XG4gICAgY29uc3QgbW9kYWxFbCA9IHBsYWNlaG9sZGVyRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLm1vZGFsXCIpO1xuXG4gICAgY29uc3QgbW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKG1vZGFsRWwpO1xuICAgIG1vZGFsLnNob3coKTtcblxuICAgIHJldHVybiBtb2RhbDtcbn1cblxuZXhwb3J0IGNvbnN0IHNldEFqYXhNb2RhbENvbnRlbnQgPSBhc3luYyB1cmwgPT4ge1xuXG4gICAgdHJ5IHtcbiAgICAgICAgRnJlZXplVUkuRnJlZXplKCk7XG5cbiAgICAgICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgYXhpb3MuZ2V0KHVybCk7XG5cbiAgICAgICAgcmV0dXJuIHNldE1vZGFsQ29udGVudChkYXRhKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0cmFja0V4Y2VwdGlvbihlcnJvcik7XG4gICAgICAgIE5vdGlmaWNhdGlvbnMuc2hvd0Vycm9yKHsgbWVzc2FnZTogXCJUaGVyZSB3YXMgYSBwcm9ibGVtIG9wZW5pbmcgdGhlIG1vZGFsLlwiIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIEZyZWV6ZVVJLlVuRnJlZXplKCk7XG4gICAgfVxufVxuXG5jb25zdCBNb2RhbHMgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICBjb25zdCBoYW5kbGVNb2RhbExhdW5jaENsaWNrID0gYXN5bmMgZWwgPT57XG4gICAgICAgIGNvbnN0IHVybCA9IGVsLmhyZWY7XG5cbiAgICAgICAgYXdhaXQgc2V0QWpheE1vZGFsQ29udGVudCh1cmwpO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAvLyBQdWJsaWMgZnVuY3Rpb25zXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBhc3luYyBlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldC5jbG9zZXN0KFwiYVtkYXRhLWJzLXRvZ2dsZT1cXFwiYWpheC1tb2RhbFxcXCJdXCIpXG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVNb2RhbExhdW5jaENsaWNrKHRhcmdldCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn0oKTtcblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxzO1xuIiwi77u/ZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbnMge1xuXG4gICAgc3RhdGljIG5vdGlmaWNhdGlvbkNvb2tpZU5hbWUgPSBcIi5jbHVicGFsLnRvYXN0XCI7XG4gICAgc3RhdGljIGFsZXJ0Q29va2llTmFtZSA9IFwiLmNsdWJwYWwuYWxlcnRcIjtcblxuICAgIHN0YXRpYyBpbml0KCkge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uQ29va2llID0gTm90aWZpY2F0aW9ucy5nZXRDb29raWUoTm90aWZpY2F0aW9ucy5ub3RpZmljYXRpb25Db29raWVOYW1lKTtcbiAgICAgICAgICAgIGlmIChub3RpZmljYXRpb25Db29raWUpIHtcblxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZXMgPSBOb3RpZmljYXRpb25zLnBhcnNlUXVlcnkobm90aWZpY2F0aW9uQ29va2llKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWVzW1wibWVzc2FnZVwiXSkge1xuICAgICAgICAgICAgICAgICAgICBzaG93TWVzc2FnZSh7bWVzc2FnZTogdmFsdWVzW1wibWVzc2FnZVwiXSwgdHlwZTogdmFsdWVzW1widHlwZVwiXX0pO1xuXG4gICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbnMuc2V0Q29va2llKE5vdGlmaWNhdGlvbnMubm90aWZpY2F0aW9uQ29va2llTmFtZSwgXCJcIiwgLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYWxlcnRDb29raWUgPSBOb3RpZmljYXRpb25zLmdldENvb2tpZShOb3RpZmljYXRpb25zLmFsZXJ0Q29va2llTmFtZSk7XG4gICAgICAgICAgICBpZiAoYWxlcnRDb29raWUpIHtcblxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZXMgPSBOb3RpZmljYXRpb25zLnBhcnNlUXVlcnkoYWxlcnRDb29raWUpO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZXNbXCJtZXNzYWdlXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbnMuYWxlcnQuZmlyZSh7IHRpdGxlOiB2YWx1ZXNbXCJ0aXRsZVwiXSwgaHRtbDogdmFsdWVzW1wibWVzc2FnZVwiXX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBOb3RpZmljYXRpb25zLnNldENvb2tpZShOb3RpZmljYXRpb25zLmFsZXJ0Q29va2llTmFtZSwgXCJcIiwgLTEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2V0Tm90aWZpY2F0aW9uQ29va2llKHRpdGxlKSB7XG4gICAgICAgIE5vdGlmaWNhdGlvbnMuc2V0Q29va2llKGJ0b2EoYG1lc3NhZ2U9JHt0aXRsZX0mdHlwZT1zdWNjZXNzYCksIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubWVzc2FnZSAtIFRoZSBtZXNzYWdlIGZvciB0aGUgbm90aWZpY2F0aW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnRpdGxlXSAtIEFuIG9wdGlvbmFsIHRpdGxlIGZvciB0aGUgbm90aWZpY2F0aW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnRpbWVvdXRdIC0gVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHNob3cgdGhlIG5vdGlmaWNhdGlvbi4gU2V0IHRvIDAgdG8gbm90IGF1dG8taGlkZS5cbiAgICAgKi9cbiAgICBzdGF0aWMgc2hvd1N1Y2Nlc3MgPSAob3B0aW9ucykgPT4ge1xuICAgICAgICBvcHRpb25zLnR5cGUgPSBcInN1Y2Nlc3NcIjtcblxuICAgICAgICBzaG93TWVzc2FnZShvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gT3B0aW9uc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm1lc3NhZ2UgLSBUaGUgbWVzc2FnZSBmb3IgdGhlIG5vdGlmaWNhdGlvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy50aXRsZV0gLSBBbiBvcHRpb25hbCB0aXRsZSBmb3IgdGhlIG5vdGlmaWNhdGlvblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50aW1lb3V0XSAtIFRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byBzaG93IHRoZSBub3RpZmljYXRpb24uIFNldCB0byAwIHRvIG5vdCBhdXRvLWhpZGUuXG4gICAgICovXG4gICAgc3RhdGljIHNob3dFcnJvciA9IChvcHRpb25zKSA9PiB7XG4gICAgICAgIG9wdGlvbnMudHlwZSA9IFwiZXJyb3JcIjtcblxuICAgICAgICBzaG93TWVzc2FnZShvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gT3B0aW9uc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm1lc3NhZ2UgLSBUaGUgbWVzc2FnZSBmb3IgdGhlIG5vdGlmaWNhdGlvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy50aXRsZV0gLSBBbiBvcHRpb25hbCB0aXRsZSBmb3IgdGhlIG5vdGlmaWNhdGlvblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50aW1lb3V0XSAtIFRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byBzaG93IHRoZSBub3RpZmljYXRpb24uIFNldCB0byAwIHRvIG5vdCBhdXRvLWhpZGUuXG4gICAgICovXG4gICAgc3RhdGljIHNob3dXYXJuaW5nID0gKG9wdGlvbnMpID0+IHtcbiAgICAgICAgb3B0aW9ucy50eXBlID0gXCJ3YXJuaW5nXCI7XG5cbiAgICAgICAgc2hvd01lc3NhZ2Uob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5tZXNzYWdlIC0gVGhlIG1lc3NhZ2UgZm9yIHRoZSBub3RpZmljYXRpb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudGl0bGVdIC0gQW4gb3B0aW9uYWwgdGl0bGUgZm9yIHRoZSBub3RpZmljYXRpb25cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMudGltZW91dF0gLSBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gc2hvdyB0aGUgbm90aWZpY2F0aW9uLiBTZXQgdG8gMCB0byBub3QgYXV0by1oaWRlLlxuICAgICAqL1xuICAgIHN0YXRpYyBzaG93SW5mbyA9IChvcHRpb25zKSA9PiB7XG4gICAgICAgIG9wdGlvbnMudHlwZSA9IFwid2FybmluZ1wiO1xuXG4gICAgICAgIHNob3dNZXNzYWdlKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBjb25maXJtID0gU3dhbD8ubWl4aW4oe1xuICAgICAgICBzaG93Q29uZmlybUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgc2hvd0RlbnlCdXR0b246IHRydWUsXG4gICAgICAgIHJldmVyc2VCdXR0b25zOiB0cnVlLFxuICAgICAgICBjdXN0b21DbGFzczoge1xuICAgICAgICAgICAgYWN0aW9uczogXCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gdy0xMDBcIixcbiAgICAgICAgICAgIGNvbmZpcm1CdXR0b246IFwicHgtMTAgYnRuIGJ0bi1wcmltYXJ5IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIixcbiAgICAgICAgICAgIGRlbnlCdXR0b246IFwicHgtMTAgYnRuIGJ0bi1kYW5nZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiLFxuICAgICAgICAgICAgaW5wdXQ6ICcnXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAnPGkgY2xhc3M9XCJiaSBiaS1jaGVjay1jaXJjbGUgZnMtM1wiPjwvaT4gWWVzJyxcbiAgICAgICAgZGVueUJ1dHRvblRleHQ6ICc8aSBjbGFzcz1cImJpIGJpLXgtY2lyY2xlIGZzLTNcIj48L2k+IE5vJyxcbiAgICB9KTtcblxuICAgIHN0YXRpYyBhbGVydCA9IFN3YWwubWl4aW4oe1xuICAgICAgICBzaG93Q29uZmlybUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgc2hvd0RlbnlCdXR0b246IGZhbHNlLFxuICAgICAgICByZXZlcnNlQnV0dG9uczogZmFsc2UsXG4gICAgICAgIGN1c3RvbUNsYXNzOiB7XG4gICAgICAgICAgICBhY3Rpb25zOiBcImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHctMTAwXCIsXG4gICAgICAgICAgICBjb25maXJtQnV0dG9uOiBcInB4LTEwIGJ0biBidG4tbGlnaHQtcHJpbWFyeSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIsXG4gICAgICAgICAgICBpbnB1dDogJydcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdPSyEnXG4gICAgfSk7XG5cbiAgICBzdGF0aWMgc2V0Q29va2llKGNvb2tpZU5hbWUsIHZhbHVlLCBtaW51dGVzKSB7XG4gICAgICAgIGxldCBleHBpcmVzID0gXCJcIjtcbiAgICAgICAgaWYgKG1pbnV0ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgKG1pbnV0ZXMgKiA2MCAqIDEwMDApKTtcbiAgICAgICAgICAgIGV4cGlyZXMgPSBcIjsgZXhwaXJlcz1cIiArIGRhdGUudG9VVENTdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZU5hbWUgKyBcIj1cIiArICh2YWx1ZSB8fCBcIlwiKSArIGV4cGlyZXMgKyBcIjsgcGF0aD0vXCI7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldENvb2tpZShjb29raWVOYW1lKSB7XG4gICAgICAgIGxldCBuYW1lRVEgPSBjb29raWVOYW1lICsgXCI9XCI7XG4gICAgICAgIGxldCBjYSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgYyA9IGNhW2ldO1xuICAgICAgICAgICAgd2hpbGUgKGMuY2hhckF0KDApID09PSAnICcpIGMgPSBjLnN1YnN0cmluZygxLCBjLmxlbmd0aCk7XG4gICAgICAgICAgICBpZiAoYy5pbmRleE9mKG5hbWVFUSkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQoYy5zdWJzdHJpbmcobmFtZUVRLmxlbmd0aCwgYy5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXRvYih2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2VRdWVyeShxdWVyeVN0cmluZykge1xuICAgICAgICBsZXQgcXVlcnkgPSB7fTtcbiAgICAgICAgbGV0IHBhaXJzID0gKHF1ZXJ5U3RyaW5nWzBdID09PSAnPycgPyBxdWVyeVN0cmluZy5zdWJzdHIoMSkgOiBxdWVyeVN0cmluZykuc3BsaXQoJyYnKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWlycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHBhaXIgPSBwYWlyc1tpXS5zcGxpdCgnPScpO1xuICAgICAgICAgICAgcXVlcnlbZGVjb2RlVVJJQ29tcG9uZW50KHBhaXJbMF0pXSA9IGRlY29kZVVSSUNvbXBvbmVudChwYWlyWzFdIHx8ICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcnk7XG4gICAgfVxufVxuXG5sZXQgY29udGFpbmVyO1xuXG5jb25zdCBhbGVydFRlbXBsYXRlID0gSGFuZGxlYmFycy5jb21waWxlKGBcbiAgICA8ZGl2PlxuICAgICAgICB7eyNpZiB0aXRsZX19XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmcy01IGZ3LWJvbGQgbWItMlwiPnt7dGl0bGV9fTwvZGl2PlxuICAgICAgICB7ey9pZn19XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGZzLTZcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxuICAgICAgICAgICAgICAgIHt7bWVzc2FnZX19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwiY2xvc2VcIiBocmVmPVwiI1wiPjxpIGNsYXNzPVwiYmkteCBmcy0yeCB0ZXh0LWdyYXktNTAwXCI+PC9pPjwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXItY29udGFpbmVyXCI+PGRpdiBjbGFzcz1cInRpbWVyLXByb2dyZXNzLWJhciB3LTUwXCI8L2Rpdj5cbiAgICA8L2Rpdj5cbmApO1xuXG5jb25zdCBlbnN1cmVDb250YWluZXIgPSAoKSA9PiB7XG4gICAgaWYoY29udGFpbmVyKVxuICAgICAgICByZXR1cm4gY29udGFpbmVyO1xuXG4gICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBjb250YWluZXIuaWQgPSBcInNuYWNrYmFyXCI7XG5cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG5cbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5tZXNzYWdlIC0gVGhlIG1lc3NhZ2UgZm9yIHRoZSBub3RpZmljYXRpb25cbiAqIEBwYXJhbSB7KFwic3VjY2Vzc1wiIHwgXCJ3YXJuaW5nXCIgfCBcImVycm9yXCIgfCBcImluZm9cIil9IG9wdGlvbnMudHlwZSAtIFRoZSB0eXBlIG9mIG5vdGlmaWNhdGlvbiB0byBkaXNwbGF5LiBPcHRpb25zIGFyZSBzdWNjZXNzLCB3YXJuaW5nLCBlcnJvciwgaW5mby5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy50aXRsZV0gLSBBbiBvcHRpb25hbCB0aXRsZSBmb3IgdGhlIG5vdGlmaWNhdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnRpbWVvdXRdIC0gVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHNob3cgdGhlIG5vdGlmaWNhdGlvbi4gU2V0IHRvIDAgdG8gbm90IGF1dG8taGlkZS5cbiAqL1xuXG5jb25zdCBzaG93TWVzc2FnZSA9IChvcHRpb25zKSA9PiB7XG5cbiAgICBjb25zdCB0aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ID8/IDUwMDA7XG5cbiAgICBjb25zdCBhbGVydCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgYWxlcnQuaW5uZXJIVE1MID0gYWxlcnRUZW1wbGF0ZShvcHRpb25zKTtcblxuICAgIGVuc3VyZUNvbnRhaW5lcigpLmFwcGVuZENoaWxkKGFsZXJ0KTtcbiAgICBhbGVydC5jbGFzc05hbWUgPSBgc25hY2sgJHtvcHRpb25zLnR5cGV9IHNob3dgO1xuXG4gICAgY29uc3QgY2xvc2VCdXR0b24gPSBhbGVydC5xdWVyeVNlbGVjdG9yKFwiYS5jbG9zZVwiKTtcbiAgICBjbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGhpZGVBbGVydCgpO1xuICAgIH0pO1xuXG4gICAgaWYodGltZW91dCA+IDApIHtcbiAgICAgICAgc2V0VGltZW91dChoaWRlQWxlcnQsIHRpbWVvdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhpZGVBbGVydCgpIHtcbiAgICAgICAgYWxlcnQucmVtb3ZlKCk7XG4gICAgfVxufTtcblxuIiwiaW1wb3J0IHthdXRoQXBpfSBmcm9tIFwiLi9hcGlcIjtcbmltcG9ydCB7RnJlZXplVUl9IGZyb20gXCIuL2ZyZWV6ZS11aVwiO1xuaW1wb3J0IHtOb3RpZmljYXRpb25zfSBmcm9tIFwiLi9ub3RpZmljYXRpb25zXCI7XG5cbmV4cG9ydCBjbGFzcyBQcm9maWxlcyB7XG4gICAgc3RhdGljIGluaXQoKSB7XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1zd2l0Y2gtcHJvZmlsZV1cIikuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBhc3luYyAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG1lbWJlcklkID0gZWwuZGF0YXNldC5tZW1iZXJJZDtcbiAgICAgICAgICAgICAgICBjb25zdCBtZW1iZXJOYW1lID0gZWwuZGF0YXNldC5tZW1iZXJOYW1lO1xuXG4gICAgICAgICAgICAgICAgRnJlZXplVUkuRnJlZXplKCk7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhdXRoQXBpLnB1dCgnL2FwaS9tZS9zd2l0Y2gnLCB7bWVtYmVySWQ6IG1lbWJlcklkfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9ucy5zZXROb3RpZmljYXRpb25Db29raWUoYFlvdSBhcmUgbm93IGxvZ2dlZCBpbiBhcyAke21lbWJlck5hbWV9YCk7XG5cbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgRnJlZXplVUkuVW5GcmVlemUoKTtcbiAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9ucy5zaG93RXJyb3IoeyBtZXNzYWdlOiBcIldlIHdlcmUgdW5hYmxlIHRvIHN3aXRjaCB5b3VyIHByb2ZpbGUuXCIgfSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCJpbXBvcnQge05vdGlmaWNhdGlvbnN9IGZyb20gXCIuL25vdGlmaWNhdGlvbnNcIjtcblxuY29uc3QgU2lnbmFsUiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpbml0OiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNpZ25hbFIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IG5ldyBzaWduYWxSLkh1YkNvbm5lY3Rpb25CdWlsZGVyKClcbiAgICAgICAgICAgICAgICAgICAgLndpdGhVcmwoXCIvbm90aWZpY2F0aW9uc1wiKVxuICAgICAgICAgICAgICAgICAgICAuY29uZmlndXJlTG9nZ2luZyhzaWduYWxSLkxvZ0xldmVsLldhcm5pbmcpXG4gICAgICAgICAgICAgICAgICAgIC5idWlsZCgpO1xuXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5vbihcIm5vdGlmaWNhdGlvblwiLCAobWVzc2FnZSwgdHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlcnJvclwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbnMuc2hvd0Vycm9yKHsgbWVzc2FnZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ3YXJuaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9ucy5zaG93V2FybmluZyh7IG1lc3NhZ2UgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbnMuc2hvd1N1Y2Nlc3MoeyBtZXNzYWdlIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnN0YXJ0KCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gY29uc29sZS5lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KCk7XG5cbmV4cG9ydCBkZWZhdWx0IFNpZ25hbFI7XG4iLCJpbXBvcnQge2RlYm91bmNlfSBmcm9tIFwiLi9kZWJvdW5jZVwiO1xuXG5leHBvcnQgY29uc3QgbWVtYmVyU2VhcmNoVGFnaWZ5ID0gKHNlbGVjdG9yLCBlbmFibGVTbWFydEdyb3Vwcywgb3B0aW9ucykgPT4ge1xuXG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcblxuICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBBIHRhZ2lmeSBpbnN0YW5jZSBjYW5ub3QgYmUgY3JlYXRlZCBiZWNhdXNlIHRoZSBubyBlbGVtZW50IHdpdGggdGhlIHNlbGVjdG9yIFwiJHtzZWxlY3Rvcn1cIiBjb3VsZCBiZSBmb3VuZC5gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCB3aGl0ZWxpc3QgPSBbXTtcbiAgICBpZiAoaW5wdXQudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICB3aGl0ZWxpc3QgPSBKU09OLnBhcnNlKGlucHV0LnZhbHVlKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgICAgdGFnVGV4dFByb3A6IFwidGV4dFwiLFxuICAgICAgICBlbmZvcmNlV2hpdGVsaXN0OiB0cnVlLFxuICAgICAgICB3aGl0ZWxpc3Q6IHdoaXRlbGlzdCxcbiAgICAgICAgc2tpcEludmFsaWQ6IHRydWUsXG4gICAgICAgIGRyb3Bkb3duOiB7XG4gICAgICAgICAgICBjbG9zZU9uU2VsZWN0OiB0cnVlLFxuICAgICAgICAgICAgZW5hYmxlZDogMSxcbiAgICAgICAgICAgIGNsYXNzbmFtZTogXCJ1c2Vycy1saXN0XCIsXG4gICAgICAgICAgICBzZWFyY2hLZXlzOiBbXCJ0ZXh0XCJdXG4gICAgICAgIH0sXG4gICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgdGFnOiBtZW1iZXJUZW1wbGF0ZSxcbiAgICAgICAgICAgIGRyb3Bkb3duSXRlbTogbWVtYmVyU3VnZ2VzdGlvblRlbXBsYXRlXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdGFnaWZ5ID0gbmV3IFRhZ2lmeShpbnB1dCwgey4uLmRlZmF1bHRPcHRpb25zLCAuLi5vcHRpb25zfSk7XG5cbiAgICB0YWdpZnkub24oXCJpbnB1dFwiLCBkZWJvdW5jZShhc3luYyAoZSkgPT4ge1xuICAgICAgICB0YWdpZnkud2hpdGVsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFnaWZ5LmxvYWRpbmcodHJ1ZSk7XG5cbiAgICAgICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgYXhpb3MuZ2V0KGAvbWVtYmVycz90ZXJtPSR7ZS5kZXRhaWwudmFsdWV9JnNtYXJ0R3JvdXBzPSR7ZW5hYmxlU21hcnRHcm91cHN9YCk7XG4gICAgICAgIHRhZ2lmeS53aGl0ZWxpc3QgPSBkYXRhLnJlc3VsdHM7XG4gICAgICAgIHRhZ2lmeVxuICAgICAgICAgICAgLmxvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgICAuZHJvcGRvd24uc2hvdyhlLmRldGFpbC52YWx1ZSk7XG4gICAgfSwgMzAwKSk7XG5cbiAgICByZXR1cm4gdGFnaWZ5O1xufVxuXG5leHBvcnQgY29uc3QgYWpheFRhZ2lmeSA9IChzZWxlY3RvciwgdXJsKSA9PiB7XG5cbiAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuXG4gICAgaWYoIWlucHV0KXtcbiAgICAgICAgY29uc29sZS53YXJuKGBBIHRhZ2lmeSBpbnN0YW5jZSBjYW5ub3QgYmUgY3JlYXRlZCBiZWNhdXNlIHRoZSBubyBlbGVtZW50IHdpdGggdGhlIHNlbGVjdG9yIFwiJHtzZWxlY3Rvcn1cIiBjb3VsZCBiZSBmb3VuZC5gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCB3aGl0ZWxpc3QgPSBbXTtcbiAgICBpZihpbnB1dC52YWx1ZS5sZW5ndGggPiAwKXtcbiAgICAgICAgd2hpdGVsaXN0ID0gSlNPTi5wYXJzZShpbnB1dC52YWx1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGFnaWZ5ID0gbmV3IFRhZ2lmeShpbnB1dCwge1xuICAgICAgICB0YWdUZXh0UHJvcDogXCJ0ZXh0XCIsXG4gICAgICAgIHdoaXRlbGlzdDogd2hpdGVsaXN0LFxuICAgICAgICBlbmZvcmNlV2hpdGVsaXN0OiB0cnVlLFxuICAgICAgICBza2lwSW52YWxpZDogdHJ1ZSxcbiAgICAgICAgZHJvcGRvd246IHtcbiAgICAgICAgICAgIG1hcFZhbHVlVG86IFwidGV4dFwiLFxuICAgICAgICAgICAgY2xvc2VPblNlbGVjdDogdHJ1ZSxcbiAgICAgICAgICAgIGVuYWJsZWQ6IDEsXG4gICAgICAgICAgICBjbGFzc25hbWU6IFwidGFnaWZ5LWxpc3RcIixcbiAgICAgICAgICAgIHNlYXJjaEtleXM6IFtcInRleHRcIl1cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRhZ2lmeS5vbihcImlucHV0XCIsIGRlYm91bmNlKGFzeW5jIChlKSA9PiB7XG4gICAgICAgIHRhZ2lmeS53aGl0ZWxpc3QgPSBudWxsO1xuICAgICAgICB0YWdpZnkubG9hZGluZyh0cnVlKTtcblxuICAgICAgICBjb25zdCB7ZGF0YX0gPSBhd2FpdCBheGlvcy5nZXQoYCR7dXJsfSZ0ZXJtPSR7ZS5kZXRhaWwudmFsdWV9YCk7XG4gICAgICAgIHRhZ2lmeS53aGl0ZWxpc3QgPSBkYXRhLnJlc3VsdHM7XG4gICAgICAgIHRhZ2lmeVxuICAgICAgICAgICAgLmxvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgICAuZHJvcGRvd24uc2hvdyhlLmRldGFpbC52YWx1ZSk7XG4gICAgfSwgMzAwKSk7XG5cbiAgICByZXR1cm4gdGFnaWZ5O1xufTtcblxuZXhwb3J0IGNvbnN0IHdoaXRlbGlzdFRhZ2lmeSA9IChzZWxlY3Rvciwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgaWYoIWVsKVxuICAgICAgICByZXR1cm47XG5cbiAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgICAgd2hpdGVsaXN0OiBlbC5kYXRhc2V0LndoaXRlbGlzdEl0ZW1zID8gSlNPTi5wYXJzZShlbC5kYXRhc2V0LndoaXRlbGlzdEl0ZW1zKSA6IFwiXCIsXG4gICAgICAgIGVuZm9yY2VXaGl0ZWxpc3Q6IHRydWUsXG4gICAgICAgIG9yaWdpbmFsSW5wdXRWYWx1ZUZvcm1hdDogdmFsdWVzQXJyID0+IHZhbHVlc0Fyci5tYXAoaXRlbSA9PiBpdGVtLnZhbHVlKS5qb2luKCcsJyksXG4gICAgICAgIGRyb3Bkb3duOiB7XG4gICAgICAgICAgICBtYXhJdGVtczogMjAsXG4gICAgICAgICAgICBlbmFibGVkOiAwLFxuICAgICAgICAgICAgY2xhc3NuYW1lOiBcInRhZ3MtbG9va1wiLFxuICAgICAgICAgICAgY2xvc2VPblNlbGVjdDogZmFsc2VcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFRhZ2lmeShlbCwgey4uLmRlZmF1bHRPcHRpb25zLCAuLi5vcHRpb25zfSk7XG59XG5cbi8vI3JlZ2lvbiBUZW1wbGF0ZXNcblxuZnVuY3Rpb24gbWVtYmVyVGVtcGxhdGUodGFnRGF0YSkge1xuICAgIHJldHVybiBgXG4gICAgICAgIDx0YWcgdGl0bGU9XCIke3RhZ0RhdGEudGV4dH1cIiBjb250ZW50ZWRpdGFibGU9J2ZhbHNlJyBzcGVsbGNoZWNrPSdmYWxzZScgdGFiSW5kZXg9XCItMVwiIGNsYXNzPVwiJHt0aGlzLnNldHRpbmdzLmNsYXNzTmFtZXMudGFnfSBweS0zXCIgJHt0aGlzLmdldEF0dHJpYnV0ZXModGFnRGF0YSl9PlxuICAgICAgICAgICAgPHggdGl0bGU9JycgY2xhc3M9J3RhZ2lmeV9fdGFnX19yZW1vdmVCdG4nIHJvbGU9J2J1dHRvbicgYXJpYS1sYWJlbD0ncmVtb3ZlIHRhZyc+PC94PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ndGFnaWZ5X190YWctdGV4dCc+JHt0YWdEYXRhLnRleHR9PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGFnPlxuICAgIGA7XG59XG5cbmZ1bmN0aW9uIG1lbWJlclN1Z2dlc3Rpb25UZW1wbGF0ZSh0YWdEYXRhKSB7XG4gICAgcmV0dXJuIGBcbiAgICAgICAgPGRpdiAke3RoaXMuZ2V0QXR0cmlidXRlcyh0YWdEYXRhKX0gY2xhc3M9J3RhZ2lmeV9fZHJvcGRvd25fX2l0ZW0gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlcidcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICByb2xlPVwib3B0aW9uXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz4ke3RhZ0RhdGEudGV4dH08L3N0cm9uZz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG4vLyNlbmRyZWdpb24gVGVtcGxhdGVzXG5cbiIsImltcG9ydCB7IGF1dGhBcGkgfSBmcm9tIFwiLi9hcGlcIjtcbmltcG9ydCB7IFZhbGlkYXRpb24gfSBmcm9tIFwiLi92YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25zIH0gZnJvbSBcIi4vbm90aWZpY2F0aW9uc1wiO1xuaW1wb3J0IHt0cmFja0V4Y2VwdGlvbn0gZnJvbSBcIi4vZXJyb3JzXCI7XG5cbmNvbnN0IFRoZW1lQnVpbGRlciA9IGZ1bmN0aW9uKCkge1xuICAgIGxldCBjb250YWluZXIsIHNhdmVCdXR0b24sIGRpc2NhcmRCdXR0b24sIHJldmVydEJ1dHRvbiwgcHJpbWFyeUNvbG9yRWwsIHNlY29uZGFyeUNvbG9yRWwsIG5hdmlnYXRpb25CZ0NvbG9yRWwsIGhlYWRlckJnQ29sb3JFbCwgcGFnZUJnQ29sb3JFbDtcblxuICAgIGNvbnN0IGhhbmRsZVNhdmVDbGljayA9IGFzeW5jIGUgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIFZhbGlkYXRpb24uZGlzYWJsZUJ1dHRvbihzYXZlQnV0dG9uKTtcblxuICAgICAgICAgICAgYXdhaXQgYXV0aEFwaS5wdXQoXCIvYXBpL3RoZW1lXCIsIHtcbiAgICAgICAgICAgICAgICBwcmltYXJ5Q29sb3I6IHByaW1hcnlDb2xvckVsLnZhbHVlLFxuICAgICAgICAgICAgICAgIHNlY29uZGFyeUNvbG9yOiBzZWNvbmRhcnlDb2xvckVsLnZhbHVlLFxuICAgICAgICAgICAgICAgIG5hdmlnYXRpb25CZ0NvbG9yOiBuYXZpZ2F0aW9uQmdDb2xvckVsLnZhbHVlLFxuICAgICAgICAgICAgICAgIGhlYWRlckJnQ29sb3I6IGhlYWRlckJnQ29sb3JFbC52YWx1ZSxcbiAgICAgICAgICAgICAgICAvLyBwYWdlQmdDb2xvcjogcGFnZUJnQ29sb3JFbC52YWx1ZSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBOb3RpZmljYXRpb25zLnNldE5vdGlmaWNhdGlvbkNvb2tpZShcIlRoZSB0aGVtZSBoYXMgYmVlbiBhcHBsaWVkIGFuZCBpcyBub3cgYWN0aXZlLlwiKTtcbiAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICB9IGNhdGNoKGVycil7XG4gICAgICAgICAgICB0cmFja0V4Y2VwdGlvbihlcnIpO1xuICAgICAgICAgICAgVmFsaWRhdGlvbi5lbmFibGVCdXR0b24oc2F2ZUJ1dHRvbik7XG4gICAgICAgICAgICBOb3RpZmljYXRpb25zLnNob3dFcnJvcih7IG1lc3NhZ2U6IFwiVGhlcmUgd2FzIGEgcHJvYmxlbSBzYXZpbmcgdGhlIHRoZW1lLlwiIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVEaXNjYXJkQ2xpY2sgPSBhc3luYyBlID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIE5vdGlmaWNhdGlvbnMuY29uZmlybS5maXJlKHt0ZXh0OiBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNjYXJkIHRoZSBjdXJyZW50IGNoYW5nZXM/XCJ9KVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNDb25maXJtZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrRXhjZXB0aW9uKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uLmVuYWJsZUJ1dHRvbihyZXZlcnRCdXR0b24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9ucy5zaG93RXJyb3IoeyBtZXNzYWdlOiBcIlRoZXJlIHdhcyBhIHByb2JsZW0gc2F2aW5nIHRoZSB0aGVtZS5cIiB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlUmV2ZXJ0Q2xpY2sgPSBhc3luYyBlID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIE5vdGlmaWNhdGlvbnMuY29uZmlybS5maXJlKHt0ZXh0OiBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXZlcnQgdGhlIHRoZW1lIHRvIHRoZSBkZWZhdWx0PyBUaGUgY3VycmVudCBjb2xvdXJzIHdpbGwgYmUgcmVzZXQgYW5kIGNhbm5vdCBiZSB1bmRvbmUuXCJ9KVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNDb25maXJtZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb24uZGlzYWJsZUJ1dHRvbihyZXZlcnRCdXR0b24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBhdXRoQXBpLmRlbGV0ZShcIi9hcGkvdGhlbWVcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbnMuc2V0Tm90aWZpY2F0aW9uQ29va2llKFwiVGhlIHRoZW1lIGhhcyBiZWVuIHJlc2V0IHRvIHRoZSBkZWZhdWx0LlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrRXhjZXB0aW9uKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uLmVuYWJsZUJ1dHRvbihyZXZlcnRCdXR0b24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9ucy5zaG93RXJyb3IoeyBtZXNzYWdlOiBcIlRoZXJlIHdhcyBhIHByb2JsZW0gc2F2aW5nIHRoZSB0aGVtZS5cIiB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJpbWFyeUNvbG9yU2VsZWN0b3JzID0gW1wiLS1icy1wcmltYXJ5XCIsIFwiLS1icy1wcmltYXJ5LXJnYlwiLCBcIi0tYnMtbGluay1jb2xvclwiLCBcIi0tYnMtdGV4dC1wcmltYXJ5XCIsIFwiLS1icy1tZW51LWxpbmstY29sb3ItaG92ZXJcIiwgXCItLWJzLW1lbnUtbGluay1jb2xvci1zaG93XCIsIFwiLS1icy1tZW51LWxpbmstY29sb3ItaGVyZVwiLCBcIi0tYnMtbWVudS1saW5rLWNvbG9yLWFjdGl2ZVwiLCBcIi0tYnMtbGluay1jb2xvci1yZ2JcIiwgXCItLWJzLWNvbXBvbmVudC1hY3RpdmUtYmdcIiwgXCItLWJzLWxpbmstaG92ZXItY29sb3ItcmdiXCJdO1xuICAgIGNvbnN0IHNlY29uZGFyeUNvbG9yU2VsZWN0b3JzID0gW1wiLS1icy1zZWNvbmRhcnlcIiwgXCItLWJzLXNlY29uZGFyeS1yZ2JcIiwgXCItLWJzLXRleHQtc2Vjb25kYXJ5XCJdO1xuICAgIGNvbnN0IG5hdmlnYXRpb25CZ0NvbG9yU2VsZWN0b3JzID0gW1wiLS1icy1hcHAtaGVhZGVyLWJhc2UtYmctY29sb3JcIiwgXCItLWJzLWFwcC1oZWFkZXItc3RpY2t5LWJnLWNvbG9yXCJdO1xuICAgIGNvbnN0IGhlYWRlckJnQ29sb3JTZWxlY3RvcnMgPSBbXCItLWJzLWFwcC10b29sYmFyLWJnXCJdO1xuXG5cbiAgICBjb25zdCBoYW5kbGVDb2xvckNoYW5nZSA9IGUgPT4ge1xuXG4gICAgICAgIHN3aXRjaChlLnRhcmdldC5pZC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwicHJpbWFyeWNvbG9yXCI6XG4gICAgICAgICAgICAgICAgdXBkYXRlQ29sb3IocHJpbWFyeUNvbG9yU2VsZWN0b3JzLCBlLnRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwic2Vjb25kYXJ5Y29sb3JcIjpcbiAgICAgICAgICAgICAgICB1cGRhdGVDb2xvcihzZWNvbmRhcnlDb2xvclNlbGVjdG9ycywgZS50YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm5hdmlnYXRpb25iZ2NvbG9yXCI6XG4gICAgICAgICAgICAgICAgdXBkYXRlQ29sb3IobmF2aWdhdGlvbkJnQ29sb3JTZWxlY3RvcnMsIGUudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJoZWFkZXJiZ2NvbG9yXCI6XG4gICAgICAgICAgICAgICAgdXBkYXRlQ29sb3IoaGVhZGVyQmdDb2xvclNlbGVjdG9ycywgZS50YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlQ29sb3IgPSAoc2VsZWN0b3JzLCBjb2xvcikgPT4ge1xuICAgICAgICBzZWxlY3RvcnMuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoZWwsIGNvbG9yKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW5pdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0aGVtZV9idWlsZGVyXCIpO1xuICAgICAgICAgICAgaWYgKCFjb250YWluZXIpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBwcmltYXJ5Q29sb3JFbCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiI1ByaW1hcnlDb2xvclwiKTtcbiAgICAgICAgICAgIHNlY29uZGFyeUNvbG9yRWwgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcihcIiNTZWNvbmRhcnlDb2xvclwiKTtcbiAgICAgICAgICAgIG5hdmlnYXRpb25CZ0NvbG9yRWwgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcihcIiNOYXZpZ2F0aW9uQmdDb2xvclwiKTtcbiAgICAgICAgICAgIGhlYWRlckJnQ29sb3JFbCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiI0hlYWRlckJnQ29sb3JcIik7XG4gICAgICAgICAgICBwYWdlQmdDb2xvckVsID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIjUGFnZUJnQ29sb3JcIik7XG5cbiAgICAgICAgICAgIHNhdmVCdXR0b24gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcihcIiN0aGVtZV9idWlsZGVyX3N1Ym1pdFwiKTtcbiAgICAgICAgICAgIHNhdmVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZVNhdmVDbGljayk7XG5cbiAgICAgICAgICAgIGRpc2NhcmRCdXR0b24gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcihcIiN0aGVtZV9idWlsZGVyX2Rpc2NhcmRcIik7XG4gICAgICAgICAgICBkaXNjYXJkQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVEaXNjYXJkQ2xpY2spO1xuXG4gICAgICAgICAgICByZXZlcnRCdXR0b24gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcihcIiN0aGVtZV9idWlsZGVyX3JldmVydFwiKTtcbiAgICAgICAgICAgIHJldmVydEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlUmV2ZXJ0Q2xpY2spO1xuXG4gICAgICAgICAgICBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcImlucHV0W3R5cGU9J2NvbG9yJ11cIikuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBoYW5kbGVDb2xvckNoYW5nZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59KCk7XG5cbmV4cG9ydCBkZWZhdWx0IFRoZW1lQnVpbGRlcjtcbiIsImV4cG9ydCBjb25zdCBpbml0VG9vbHRpcHMgPSAoZWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHRvb2x0aXBUcmlnZ2VyTGlzdCA9IGVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIl0nKVxuXG4gICAgaWYodG9vbHRpcFRyaWdnZXJMaXN0KSB7XG4gICAgICAgIHJldHVybiBbLi4udG9vbHRpcFRyaWdnZXJMaXN0XS5tYXAodG9vbHRpcFRyaWdnZXJFbCA9PiBuZXcgYm9vdHN0cmFwLlRvb2x0aXAodG9vbHRpcFRyaWdnZXJFbCkpO1xuICAgIH1cbn07XG4iLCJleHBvcnQgY2xhc3MgVmFsaWRhdGlvbntcbiAgICBzdGF0aWMgZ2V0RGVmYXVsdFZhbGlkYXRvcihmb3JtKSB7XG5cbiAgICAgICAgcmV0dXJuIEZvcm1WYWxpZGF0aW9uLmZvcm1WYWxpZGF0aW9uKGZvcm0sIHtcbiAgICAgICAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyOiBuZXcgRm9ybVZhbGlkYXRpb24ucGx1Z2lucy5UcmlnZ2VyKCksXG4gICAgICAgICAgICAgICAgYm9vdHN0cmFwOiBuZXcgRm9ybVZhbGlkYXRpb24ucGx1Z2lucy5Cb290c3RyYXA1KHtcbiAgICAgICAgICAgICAgICAgICAgcm93U2VsZWN0b3I6ICcuZnYtcm93JyxcbiAgICAgICAgICAgICAgICAgICAgZWxlSW52YWxpZENsYXNzOiAnYmctbGlnaHQtZGFuZ2VyIGlzLWludmFsaWQnLFxuICAgICAgICAgICAgICAgICAgICBlbGVWYWxpZENsYXNzOiAnJ1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGRlY2xhcmF0aXZlOiBuZXcgRm9ybVZhbGlkYXRpb24ucGx1Z2lucy5EZWNsYXJhdGl2ZSh7aHRtbDVJbnB1dDogdHJ1ZX0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBkaXNhYmxlQnV0dG9uKGJ1dHRvbikge1xuICAgICAgICBidXR0b24/LnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIFwiZGlzYWJsZWRcIik7XG4gICAgICAgIGJ1dHRvbj8uc2V0QXR0cmlidXRlKFwiZGF0YS1rdC1pbmRpY2F0b3JcIiwgXCJvblwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZW5hYmxlQnV0dG9uKGJ1dHRvbikge1xuICAgICAgICBidXR0b24/LnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpO1xuICAgICAgICBidXR0b24/LnJlbW92ZUF0dHJpYnV0ZShcImRhdGEta3QtaW5kaWNhdG9yXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyB2YWxpZGF0ZUZvcm0oZSwgdmFsaWRhdG9yLCBzdWJtaXR0ZXIpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGNvbnN0IGZvcm0gPSB2YWxpZGF0b3IuZm9ybTtcbiAgICAgICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgICAgICAgdmFsaWRhdG9yLnZhbGlkYXRlKCkudGhlbihzdGF0dXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdWYWxpZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbi5kaXNhYmxlQnV0dG9uKHN1Ym1pdHRlciB8fCBlLnN1Ym1pdHRlcik7XG4gICAgICAgICAgICAgICAgICAgIGZvcm0uc3VibWl0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgdmFsaWRhdGVGb3JtV2l0aFJlQ2FwdGNoYShlLCB2YWxpZGF0b3IsIHN1Ym1pdHRlcikge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgZm9ybSA9IHZhbGlkYXRvci5mb3JtO1xuICAgICAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICAgICAgICB2YWxpZGF0b3IudmFsaWRhdGUoKS50aGVuKGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnVmFsaWQnKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbi5kaXNhYmxlQnV0dG9uKHN1Ym1pdHRlciB8fCBlLnN1Ym1pdHRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjYXB0Y2hhSW5wdXQgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoXCIjUmVjYXB0Y2hhUmVzcG9uc2VcIik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpdGVLZXkgPSByZWNhcHRjaGFJbnB1dC5kYXRhc2V0LnNpdGVLZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgZ3JlY2FwdGNoYS5yZWFkeShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb24gPSByZWNhcHRjaGFJbnB1dC5kYXRhc2V0LmFjdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyZWNhcHRjaGEuZXhlY3V0ZShzaXRlS2V5LCB7YWN0aW9uOiBhY3Rpb259KS50aGVuKGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2FwdGNoYUlucHV0LnZhbHVlID0gdG9rZW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLnN1Ym1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHNob3dGb3JtRXJyb3IoZXJyb3JUZXh0LCBlcnJvclRpdGxlKSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNlcnJvci1hbGVydFwiKTtcbiAgICAgICAgaWYoIWVycm9yQ29udGFpbmVyKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGVycm9yQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcImZsZXhcIjtcbiAgICAgICAgZXJyb3JDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5hbGVydC10ZXh0XCIpLmlubmVySFRNTCA9IGVycm9yVGV4dDtcbiAgICB9XG5cbiAgICBzdGF0aWMgaGlkZUZvcm1FcnJvcigpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2Vycm9yLWFsZXJ0XCIpO1xuICAgICAgICBpZiAoIWVycm9yQ29udGFpbmVyKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGVycm9yQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICB9XG59XG4iLCJmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIyW2ldID0gYXJyW2ldO1xuICB9XG5cbiAgcmV0dXJuIGFycjI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5TGlrZVRvQXJyYXk7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCIpO1xuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aG91dEhvbGVzO1xubW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcblxuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBfdGhyb3coZXJyKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpO1xuICAgICAgfVxuXG4gICAgICBfbmV4dCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yO1xubW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrO1xubW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3M7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyIsImZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgXCJkZWZhdWx0XCI6IG9ialxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQ7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXk7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVTcHJlYWQ7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIik7XG5cbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIik7XG5cbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCIpO1xuXG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiKTtcblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3RvQ29uc3VtYWJsZUFycmF5O1xubW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyIsInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiKTtcblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXk7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVnZW5lcmF0b3ItcnVudGltZVwiKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxudmFyIHJ1bnRpbWUgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICBmdW5jdGlvbiBkZWZpbmUob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gb2JqW2tleV07XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBJRSA4IGhhcyBhIGJyb2tlbiBPYmplY3QuZGVmaW5lUHJvcGVydHkgdGhhdCBvbmx5IHdvcmtzIG9uIERPTSBvYmplY3RzLlxuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRlZmluZSA9IGZ1bmN0aW9uKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIG9ialtrZXldID0gdmFsdWU7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIGV4cG9ydHMud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIGRlZmluZShJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG5cbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICB2YXIgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIGlmIChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJlxuICAgICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmXG4gICAgICBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgLy8gVGhpcyBlbnZpcm9ubWVudCBoYXMgYSBuYXRpdmUgJUl0ZXJhdG9yUHJvdG90eXBlJTsgdXNlIGl0IGluc3RlYWRcbiAgICAvLyBvZiB0aGUgcG9seWZpbGwuXG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9XG4gICAgR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgZGVmaW5lKEdwLCBcImNvbnN0cnVjdG9yXCIsIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgZGVmaW5lKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIEdlbmVyYXRvckZ1bmN0aW9uKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkZWZpbmUoXG4gICAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsXG4gICAgdG9TdHJpbmdUYWdTeW1ib2wsXG4gICAgXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICk7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgZGVmaW5lKHByb3RvdHlwZSwgbWV0aG9kLCBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gY3RvclxuICAgICAgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuICAgICAgICAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG4gICAgICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cbiAgICAgICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICAgICA6IGZhbHNlO1xuICB9O1xuXG4gIGV4cG9ydHMubWFyayA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICAgICAgZGVmaW5lKGdlbkZ1biwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIik7XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIGV4cG9ydHMuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvciwgUHJvbWlzZUltcGwpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZUltcGwucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgICAgLy8gSWYgYSByZWplY3RlZCBQcm9taXNlIHdhcyB5aWVsZGVkLCB0aHJvdyB0aGUgcmVqZWN0aW9uIGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gc28gaXQgY2FuIGJlIGhhbmRsZWQgdGhlcmUuXG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUltcGwoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBkZWZpbmUoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUsIGFzeW5jSXRlcmF0b3JTeW1ib2wsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG4gIGV4cG9ydHMuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIGV4cG9ydHMuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCwgUHJvbWlzZUltcGwpIHtcbiAgICBpZiAoUHJvbWlzZUltcGwgPT09IHZvaWQgMCkgUHJvbWlzZUltcGwgPSBQcm9taXNlO1xuXG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpLFxuICAgICAgUHJvbWlzZUltcGxcbiAgICApO1xuXG4gICAgcmV0dXJuIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIC8vIE5vdGU6IFtcInJldHVyblwiXSBtdXN0IGJlIHVzZWQgZm9yIEVTMyBwYXJzaW5nIGNvbXBhdGliaWxpdHkuXG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIC8vIElmIG1heWJlSW52b2tlRGVsZWdhdGUoY29udGV4dCkgY2hhbmdlZCBjb250ZXh0Lm1ldGhvZCBmcm9tXG4gICAgICAgICAgICAvLyBcInJldHVyblwiIHRvIFwidGhyb3dcIiwgbGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy5cbiAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuXG4gICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cbiAgICBpZiAoISBpbmZvKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAvLyBBc3NpZ24gdGhlIHJlc3VsdCBvZiB0aGUgZmluaXNoZWQgZGVsZWdhdGUgdG8gdGhlIHRlbXBvcmFyeVxuICAgICAgLy8gdmFyaWFibGUgc3BlY2lmaWVkIGJ5IGRlbGVnYXRlLnJlc3VsdE5hbWUgKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXG4gICAgICAvLyBSZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXG4gICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmUteWllbGQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZGVsZWdhdGUgbWV0aG9kLlxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgLy8gVGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLCBzbyBmb3JnZXQgaXQgYW5kIGNvbnRpbnVlIHdpdGhcbiAgICAvLyB0aGUgb3V0ZXIgZ2VuZXJhdG9yLlxuICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIGRlZmluZShHcCwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yXCIpO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgZGVmaW5lKEdwLCBpdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuXG4gIGRlZmluZShHcCwgXCJ0b1N0cmluZ1wiLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBleHBvcnRzLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlXG4gIC8vIG9yIG5vdCwgcmV0dXJuIHRoZSBydW50aW1lIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBkZWNsYXJlIHRoZSB2YXJpYWJsZVxuICAvLyByZWdlbmVyYXRvclJ1bnRpbWUgaW4gdGhlIG91dGVyIHNjb3BlLCB3aGljaCBhbGxvd3MgdGhpcyBtb2R1bGUgdG8gYmVcbiAgLy8gaW5qZWN0ZWQgZWFzaWx5IGJ5IGBiaW4vcmVnZW5lcmF0b3IgLS1pbmNsdWRlLXJ1bnRpbWUgc2NyaXB0LmpzYC5cbiAgcmV0dXJuIGV4cG9ydHM7XG5cbn0oXG4gIC8vIElmIHRoaXMgc2NyaXB0IGlzIGV4ZWN1dGluZyBhcyBhIENvbW1vbkpTIG1vZHVsZSwgdXNlIG1vZHVsZS5leHBvcnRzXG4gIC8vIGFzIHRoZSByZWdlbmVyYXRvclJ1bnRpbWUgbmFtZXNwYWNlLiBPdGhlcndpc2UgY3JlYXRlIGEgbmV3IGVtcHR5XG4gIC8vIG9iamVjdC4gRWl0aGVyIHdheSwgdGhlIHJlc3VsdGluZyBvYmplY3Qgd2lsbCBiZSB1c2VkIHRvIGluaXRpYWxpemVcbiAgLy8gdGhlIHJlZ2VuZXJhdG9yUnVudGltZSB2YXJpYWJsZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS5cbiAgdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiA/IG1vZHVsZS5leHBvcnRzIDoge31cbikpO1xuXG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgLy8gVGhpcyBtb2R1bGUgc2hvdWxkIG5vdCBiZSBydW5uaW5nIGluIHN0cmljdCBtb2RlLCBzbyB0aGUgYWJvdmVcbiAgLy8gYXNzaWdubWVudCBzaG91bGQgYWx3YXlzIHdvcmsgdW5sZXNzIHNvbWV0aGluZyBpcyBtaXNjb25maWd1cmVkLiBKdXN0XG4gIC8vIGluIGNhc2UgcnVudGltZS5qcyBhY2NpZGVudGFsbHkgcnVucyBpbiBzdHJpY3QgbW9kZSwgaW4gbW9kZXJuIGVuZ2luZXNcbiAgLy8gd2UgY2FuIGV4cGxpY2l0bHkgYWNjZXNzIGdsb2JhbFRoaXMuIEluIG9sZGVyIGVuZ2luZXMgd2UgY2FuIGVzY2FwZVxuICAvLyBzdHJpY3QgbW9kZSB1c2luZyBhIGdsb2JhbCBGdW5jdGlvbiBjYWxsLiBUaGlzIGNvdWxkIGNvbmNlaXZhYmx5IGZhaWxcbiAgLy8gaWYgYSBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBmb3JiaWRzIHVzaW5nIEZ1bmN0aW9uLCBidXQgaW4gdGhhdCBjYXNlXG4gIC8vIHRoZSBwcm9wZXIgc29sdXRpb24gaXMgdG8gZml4IHRoZSBhY2NpZGVudGFsIHN0cmljdCBtb2RlIHByb2JsZW0uIElmXG4gIC8vIHlvdSd2ZSBtaXNjb25maWd1cmVkIHlvdXIgYnVuZGxlciB0byBmb3JjZSBzdHJpY3QgbW9kZSBhbmQgYXBwbGllZCBhXG4gIC8vIENTUCB0byBmb3JiaWQgRnVuY3Rpb24sIGFuZCB5b3UncmUgbm90IHdpbGxpbmcgdG8gZml4IGVpdGhlciBvZiB0aG9zZVxuICAvLyBwcm9ibGVtcywgcGxlYXNlIGRldGFpbCB5b3VyIHVuaXF1ZSBwcmVkaWNhbWVudCBpbiBhIEdpdEh1YiBpc3N1ZS5cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZ2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xuICB9IGVsc2Uge1xuICAgIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG4gIH1cbn1cbiJdfQ=="}