{"version":3,"file":"app.js","sources":["functions/data-box.js","functions/nav.js","functions/login.js","constants/constants.js","functions/tabs.js","functions/search.js","functions/truncate.js","functions/share.js","functions/checkLanguage.js","functions/validation.js","functions/vCard.js","functions/cookies.js","functions/dateSelect.js","helpers/components-loader.js","app.js"],"sourcesContent":["export const dataBox = {\r\n setHeightOfBox: function (boxes) {\r\n Array.prototype.forEach.call(boxes, box => box.style.height = null);\r\n\r\n if (window.innerWidth < 768) {\r\n return;\r\n }\r\n\r\n let heightsArr = [];\r\n Array.prototype.forEach.call(boxes, box => heightsArr.push(box.offsetHeight));\r\n\r\n const max = heightsArr.reduce((prev, curr) => prev > curr ? prev : curr);\r\n Array.prototype.forEach.call(boxes, box => box.style.height = `${max}px`);\r\n },\r\n changeHeightOfBoxes: function () {\r\n const args = arguments.length;\r\n for (let i = 0; i < args; i++) {\r\n if (arguments[i].length) {\r\n window.addEventListener('resize', () => this.setHeightOfBox(arguments[i]));\r\n this.setHeightOfBox(arguments[i]);\r\n }\r\n }\r\n }\r\n};\r\n","export let mobileMenu = {\r\n header: document.querySelector('body'),\r\n btn: document.querySelector('#menuToggler'),\r\n init: function() {\r\n this.onResize();\r\n this.changePosition();\r\n this.closeByBg();\r\n\r\n if (!this.btn) return;\r\n\r\n this.btn.addEventListener('click', () => {\r\n const isMenuShown = document.querySelector('.is-menu-shown');\r\n if (isMenuShown) {\r\n this.hide();\r\n return;\r\n }\r\n this.show();\r\n });\r\n },\r\n show: function () {\r\n this.header.classList.add('is-menu-shown');\r\n },\r\n hide: function () {\r\n this.header.classList.remove('is-menu-shown');\r\n },\r\n changePosition: function () {\r\n window.addEventListener('scroll', () => {\r\n const scrollY = window.scrollY;\r\n if (scrollY > 5) {\r\n this.header.classList.add('is-scrolled');\r\n this.btn.style.top = `-${scrollY}px`;\r\n return;\r\n }\r\n this.btn.style.top = '5px';\r\n this.header.classList.remove('is-scrolled');\r\n });\r\n },\r\n onResize: function () {\r\n window.addEventListener('resize', () => {\r\n if (window.innerWidth > 1200) {\r\n this.header.classList.remove('is-menu-shown');\r\n }\r\n });\r\n },\r\n closeByBg: function () {\r\n this.header.addEventListener('click', (e) => {\r\n if (e.target.classList.contains('is-menu-shown')) {\r\n this.hide();\r\n }\r\n })\r\n }\r\n};\r\n","export function toggleLoginPassword () {\r\n const link = document.querySelector('.login__link--forget');\r\n const client = document.querySelector('.login__link--new-client');\r\n const box = document.querySelector('.login__password');\r\n const boxClient = document.querySelector('.login__new-client');\r\n\r\n link.addEventListener('click', () => {\r\n box.classList.add('is-visible');\r\n\r\n if (boxClient.classList.contains('is-visible')){\r\n box.classList.add('is-visible');\r\n boxClient.classList.remove('is-visible');\r\n return;\r\n }\r\n });\r\n\r\n client.addEventListener('click', () => {\r\n\r\n boxClient.classList.add('is-visible');\r\n\r\n if (box.classList.contains('is-visible')){\r\n boxClient.classList.add('is-visible');\r\n box.classList.remove('is-visible');\r\n return;\r\n }\r\n });\r\n\r\n};\r\n","export const PROVINCES_URL = '/data/countries.json';\r\nexport const VALIDATION_MSG = '/data/validationMsg.json';\r\nexport const COOKIES_MSG = '/data/cookies.json';\r\n\r\nexport const GLOBAL_KEYS = {\r\n reCaptcha: '6LdkdEEUAAAAALHez3Gp3W_msNTznXxfqudwroEI'\r\n};\r\n","export const tabs = {\r\n tabs: null,\r\n currentIndex: 0,\r\n tabsAmount: 0,\r\n firstTab: null,\r\n leftArrow: null,\r\n rightArrow: null,\r\n init: function (wrapClass = 'tabs', arrows = true, callback) {\r\n this.tabs = document.querySelectorAll(`.${wrapClass} .tab`);\r\n this.tabsAmount = this.tabs.length;\r\n this.firstTab = this.setFirstTab(wrapClass);\r\n if (arrows) {\r\n this.setArrows(wrapClass);\r\n this.setIndex(wrapClass);\r\n this.toggleArrows();\r\n }\r\n\r\n Array.prototype.forEach.call(this.tabs, tab => {\r\n tab.addEventListener('click', () => this.onClick(tab, wrapClass, arrows, callback))\r\n });\r\n\r\n if (arrows) this.activateTabsArrows(wrapClass);\r\n\r\n if (callback) callback();\r\n },\r\n setFirstTab: function (wrapClass) {\r\n return document.querySelector(`.${wrapClass} .tab`);\r\n },\r\n setArrows: function (wrapClass) {\r\n this.leftArrow = document.querySelector(`.${wrapClass} .tabs__arrow--left`);\r\n this.rightArrow = document.querySelector(`.${wrapClass} .tabs__arrow--right`);\r\n },\r\n onClick: function (tab, wrapClass, arrows, callback) {\r\n const tabFor = tab.dataset.tabFor;\r\n const tabContent = this.findProperTabContent(tabFor);\r\n\r\n const tabs = document.querySelectorAll(`.${wrapClass} .tabs__cnt-single`);\r\n this.hideAllTabsContent(tabs);\r\n this.deactivateTabs();\r\n tab.classList.add('is-active');\r\n tabContent.classList.add('is-active');\r\n\r\n if (arrows) {\r\n this.setIndex(wrapClass);\r\n this.toggleArrows();\r\n }\r\n\r\n if (callback) {\r\n callback();\r\n }\r\n },\r\n findProperTabContent: function (attr) {\r\n return document.querySelector(`[data-tab=\"${attr}\"]`)\r\n },\r\n hideAllTabsContent: function (tabs) {\r\n Array.prototype.forEach.call(tabs, tab => tab.classList.remove('is-active'))\r\n },\r\n deactivateTabs: function () {\r\n Array.prototype.forEach.call(this.tabs, tab => tab.classList.remove('is-active'));\r\n },\r\n activateTabsArrows: function (wrapClass) {\r\n const arrows = document.querySelectorAll(`.${wrapClass} .tabs__arrow`);\r\n\r\n Array.prototype.forEach.call(arrows, arrow => this.onClickTabArrow(arrow))\r\n },\r\n onClickTabArrow: function (arrow) {\r\n arrow.addEventListener('click', () => this.moveTabs(arrow));\r\n },\r\n updateCurrentIndex: function (arrow) {\r\n const dir = arrow.dataset.dir;\r\n\r\n if (dir === 'left') {\r\n this.currentIndex--;\r\n }\r\n\r\n if (dir === 'right') {\r\n this.currentIndex++;\r\n }\r\n },\r\n moveTabs: function (arrow) {\r\n this.updateCurrentIndex(arrow);\r\n this.changeTabsPosition();\r\n this.toggleArrows();\r\n },\r\n changeTabsPosition: function () {\r\n this.firstTab.style.marginLeft = `-${this.currentIndex * 100}%`;\r\n },\r\n setIndex: function (wrapClass) {\r\n const activeTab = document.querySelector(`.${wrapClass} .tab.is-active`);\r\n this.currentIndex = [].indexOf.call(this.tabs, activeTab);\r\n\r\n this.changeTabsPosition();\r\n },\r\n toggleArrows: function () {\r\n if (this.currentIndex < this.tabsAmount - 1) {\r\n this.leftArrow.classList.remove('is-hidden');\r\n this.rightArrow.classList.remove('is-hidden');\r\n }\r\n\r\n if (this.currentIndex === this.tabsAmount - 1) {\r\n this.rightArrow.classList.add('is-hidden');\r\n this.leftArrow.classList.remove('is-hidden');\r\n }\r\n\r\n if (this.currentIndex === 0) {\r\n this.leftArrow.classList.add('is-hidden');\r\n this.rightArrow.classList.remove('is-hidden');\r\n }\r\n }\r\n};\r\n","import {PROVINCES_URL} from \"../constants/constants\";\r\nimport {tabs} from \"./tabs\";\r\n\r\nexport const search = {\r\n provinces: null,\r\n build: function () {\r\n this.getProvinces();\r\n this.setSelectedCountries();\r\n this.initDefaultProvinces();\r\n this.setSelectedProvinces();\r\n tabs.init('search-tabs');\r\n },\r\n getProvinces: function () {\r\n const request = new XMLHttpRequest();\r\n request.open('GET', PROVINCES_URL, false);\r\n request.send(null);\r\n if (request.status === 200) {\r\n this.provinces = JSON.parse(request.response);\r\n this.prepareCountrySelectors();\r\n }\r\n },\r\n initDefaultProvinces: function () {\r\n const activeTab = document.querySelector('.tabs__cnt-single.is-active');\r\n const element = activeTab.querySelector('.change-country');\r\n if (!element) return;\r\n const form = this.findClosestElementByClass(element, 'form');\r\n const provincesSelector = form.querySelector('.provinces');\r\n const selectedCountry = sessionStorage.getItem(`country-selected-${activeTab.dataset.tab}`) || element.value;\r\n\r\n for (let i = 0; i < element.options.length; i++) {\r\n if (element.options[i].value === selectedCountry) {\r\n element.options[i].selected = true;\r\n }\r\n }\r\n\r\n if (selectedCountry === 'pl' || selectedCountry === 'de') {\r\n this.removePrevOptions(provincesSelector);\r\n this.addNewOptions(selectedCountry, provincesSelector);\r\n }\r\n },\r\n prepareCountrySelectors: function () {\r\n const countrySelect = document.querySelectorAll('.change-country');\r\n Array.prototype.forEach.call(countrySelect, selector => {\r\n selector.addEventListener('change', () => this.onChangeCountry(selector))\r\n });\r\n const provincesSelect = document.querySelectorAll('.provinces');\r\n Array.prototype.forEach.call(provincesSelect, selector => {\r\n selector.addEventListener('change', () => this.onChangeProvince(selector))\r\n })\r\n },\r\n onChangeCountry: function (element) {\r\n const form = this.findClosestElementByClass(element, 'form');\r\n const provincesSelector = form.querySelector('.provinces');\r\n const selectedCountry = element.value;\r\n\r\n this.storeSelectedCountry(form, selectedCountry);\r\n\r\n provincesSelector.disabled = false;\r\n\r\n this.removePrevOptions(provincesSelector);\r\n this.addNewOptions(selectedCountry, provincesSelector);\r\n\r\n this.setSelectedProvinces();\r\n },\r\n onChangeProvince: function (element) {\r\n const form = this.findClosestElementByClass(element, 'form');\r\n const selected = element.value;\r\n this.storeSelectedProvice(form, selected);\r\n },\r\n findClosestElementByClass: function (el, cls) {\r\n while ((el = el.parentElement) && !el.classList.contains(cls)) ;\r\n return el;\r\n },\r\n addNewOptions: function (country, selector) {\r\n this.provinces[country].provinces.forEach(\r\n province => {\r\n const option = document.createElement('option');\r\n option.innerText = province;\r\n option.setAttribute('value', province);\r\n selector.appendChild(option);\r\n });\r\n },\r\n removePrevOptions: function (selector) {\r\n const currentOptions = selector.querySelectorAll('option');\r\n\r\n if (currentOptions.length > 1) {\r\n Array.prototype.forEach.call(currentOptions, (item, i) => {\r\n if (i > 0) {\r\n selector.removeChild(item);\r\n }\r\n })\r\n }\r\n },\r\n storeSelectedCountry: function (form, selected) {\r\n const currentTab = this.findClosestElementByClass(form, 'tabs__cnt-single').dataset.tab;\r\n sessionStorage.setItem(`country-selected-${currentTab}`, selected);\r\n },\r\n setSelectedCountries: function () {\r\n const selects = document.querySelectorAll('.change-country');\r\n Array.prototype.forEach.call(selects, select => {\r\n const dataTab = this.findClosestElementByClass(select, 'tabs__cnt-single');\r\n const form = this.findClosestElementByClass(select, 'form');\r\n const provincesSelector = form.querySelector('.provinces');\r\n\r\n const selectedCountry = sessionStorage.getItem(`country-selected-${dataTab.dataset.tab}`);\r\n if (selectedCountry) {\r\n select.value = selectedCountry;\r\n provincesSelector.disabled = false;\r\n this.addNewOptions(select.value, provincesSelector);\r\n }\r\n });\r\n },\r\n storeSelectedProvice: function (form, selected) {\r\n const currentTab = this.findClosestElementByClass(form, 'tabs__cnt-single').dataset.tab;\r\n const country = sessionStorage.getItem(`country-selected-${currentTab}`);\r\n sessionStorage.setItem(`${country}-province-selected-${currentTab}`, selected);\r\n },\r\n setSelectedProvinces: function () {\r\n const selects = document.querySelectorAll('.provinces');\r\n Array.prototype.forEach.call(selects, select => {\r\n const dataTab = this.findClosestElementByClass(select, 'tabs__cnt-single');\r\n const country = sessionStorage.getItem(`country-selected-${dataTab.dataset.tab}`);\r\n if (!country) {\r\n return;\r\n }\r\n const selectedProvince = sessionStorage.getItem(`${country}-province-selected-${dataTab.dataset.tab}`);\r\n if (selectedProvince) {\r\n select.value = selectedProvince;\r\n }\r\n });\r\n }\r\n};\r\n","export function truncateText(el, chars) {\r\n const text = el.innerText;\r\n\r\n if (text.length > chars) {\r\n el.innerText = text.substr(0, chars) + '...';\r\n }\r\n}\r\n","export const share = {\r\n btns: document.querySelectorAll('.share__item a'),\r\n params: {\r\n height: 436,\r\n width: 626\r\n },\r\n url: window.location.href,\r\n init: function () {\r\n Array.prototype.forEach.call(this.btns, btn => {\r\n btn.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n const type = btn.dataset.type;\r\n const url = btn.getAttribute('href');\r\n\r\n if (url !== '#') {\r\n this.url = url;\r\n }\r\n\r\n this.share(type);\r\n });\r\n })\r\n },\r\n share: function (type) {\r\n switch (type) {\r\n case 'facebook':\r\n this.shareOnFacebook();\r\n break;\r\n case 'twitter':\r\n this.shareOnTwitter();\r\n break;\r\n case 'linkedin':\r\n this.shareOnLinkedIn();\r\n break;\r\n case 'xing':\r\n this.shareOnXing();\r\n break;\r\n default:\r\n throw new Error('You haven\\'t defined type of share url.');\r\n break;\r\n }\r\n },\r\n shareOnFacebook: function () {\r\n window.open(\r\n `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(this.url)}`,\r\n 'facebook-share-dialog',\r\n `width=${this.params.width}, height=${this.params.height}`\r\n );\r\n },\r\n shareOnTwitter: function () {\r\n window.open(\r\n `https://twitter.com/home?status=${this.url}`,\r\n 'twitter-share-dialog',\r\n `width=${this.params.width}, height=${this.params.height}`\r\n )\r\n },\r\n shareOnLinkedIn: function () {\r\n const title = document.querySelector('.headline__page').innerText || document.title;\r\n window.open(\r\n `https://www.linkedin.com/shareArticle?mini=true&url=${this.url}&title=${title}&summary=&source=`,\r\n 'linkedin-share-dialog',\r\n `width=${this.params.width}, height=${this.params.height}`\r\n )\r\n },\r\n shareOnXing: function () {\r\n window.open(\r\n `https://www.xing.com/spi/shares/new?url=${this.url}`,\r\n 'xing-share-dialog',\r\n `width=${this.params.width}, height=${this.params.height}`\r\n )\r\n }\r\n};\r\n","export const lang = {\r\n lang: null,\r\n checkLanguage: function () {\r\n this.lang = document.querySelector('html').getAttribute('lang');\r\n if (this.lang !== 'pl' && this.lang !== 'de') {\r\n this.lang = navigator.language.slice(0, 2);\r\n }\r\n }\r\n};\r\n","import {VALIDATION_MSG, GLOBAL_KEYS} from \"../constants/constants\";\r\nimport {lang} from \"./checkLanguage\";\r\n\r\nexport const validation = {\r\n rules: {\r\n email: function (value) {\r\n const re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return re.test(value)\r\n },\r\n required: function (value, chars = 1) {\r\n return value.length >= chars;\r\n },\r\n number: function (value) {\r\n const re = /^[0-9]|([0-9]+?(\\.)?([0-9]*))/;\r\n return re.test(value);\r\n },\r\n password: function (value) {\r\n const re = /(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,}/i;\r\n return re.test(value);\r\n },\r\n repeatPassword: function (value) {\r\n const passField = document.querySelector('[type=\"password\"]');\r\n return passField.value === value;\r\n }\r\n },\r\n reCaptcha: false,\r\n reCaptchaResponse: null,\r\n validateForm: function (form) {\r\n const fields = this.findFields(form);\r\n const btn = form.querySelector('button[type=\"submit\"]');\r\n\r\n this.reCaptcha = form.dataset.recaptcha;\r\n\r\n if (this.reCaptcha) {\r\n this.prepareReCaptcha(form, btn);\r\n }\r\n\r\n Array.prototype.forEach.call(fields, field => {\r\n this.addRulesToField(field);\r\n this.validateField(field);\r\n field.addEventListener('change', () => this.validateField(field))\r\n });\r\n btn.addEventListener('click', (e) => {\r\n Array.prototype.forEach.call(form.querySelectorAll('.error'), er => er.remove());\r\n const result = this.checkRules(fields);\r\n if (this.reCaptcha && !this.reCaptchaResponse) {\r\n this.toggleReCaptchaValidationMsg();\r\n e.preventDefault();\r\n }\r\n if (result.indexOf(false) !== -1) {\r\n e.preventDefault();\r\n }\r\n });\r\n },\r\n addRulesToField: function (field) {\r\n const rules = field.dataset.rules.replace(' ', '').split(',');\r\n field.rules = {};\r\n field.validated = false;\r\n rules.forEach(rule => {\r\n field.rules[rule] = false;\r\n });\r\n },\r\n findFields: function (form) {\r\n return form.querySelectorAll('[data-rules]');\r\n },\r\n checkRules: function (fields) {\r\n let formValidationResults = [];\r\n Array.prototype.forEach.call(fields, field => {\r\n let validationResults = [];\r\n\r\n for (let rule in field.rules) {\r\n validationResults.push(field.rules[rule]);\r\n }\r\n\r\n if (validationResults.indexOf(false) === -1) {\r\n field.validated = true;\r\n } else {\r\n field.validated = false;\r\n }\r\n\r\n if (!field.validated) {\r\n this.toggleValidationMsg(field);\r\n } else {\r\n field.classList.remove('is-not-validated');\r\n }\r\n formValidationResults.push(field.validated);\r\n });\r\n\r\n return formValidationResults;\r\n },\r\n validateField: function (field) {\r\n for (let rule in field.rules) {\r\n field.rules[rule] = this.rules[rule](field.value);\r\n }\r\n },\r\n toggleValidationMsg: function (field) {\r\n for (let rule in field.rules) {\r\n field.classList.add('is-not-validated');\r\n this.prepareValidationMsg(\r\n field,\r\n validationMsg.msg[validationMsg.lang]\r\n ? validationMsg.msg[validationMsg.lang][rule]\r\n : validationMsg.msg[validationMsg.lang.lang][rule]\r\n );\r\n }\r\n },\r\n prepareValidationMsg: function (field, msg) {\r\n const errorBox = document.createElement('p');\r\n errorBox.innerText = msg;\r\n errorBox.classList.add('error', 'validation__error');\r\n this.insertAfter(errorBox, field);\r\n },\r\n toggleReCaptchaValidationMsg: function () {\r\n const reBox = document.getElementById('captcha_container');\r\n\r\n this.prepareValidationMsg(\r\n reBox,\r\n validationMsg.msg[validationMsg.lang]\r\n ? validationMsg.msg[validationMsg.lang].reCaptcha\r\n : validationMsg.msg[validationMsg.lang.lang].reCaptcha\r\n );\r\n },\r\n insertAfter: function (newNode, referenceNode) {\r\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\r\n },\r\n prepareReCaptcha: function (form, afterElement) {\r\n const reCaptchaBox = document.createElement('div');\r\n reCaptchaBox.setAttribute('id', 'captcha_container');\r\n reCaptchaBox.classList.add('form__recaptcha');\r\n form.insertBefore(reCaptchaBox, afterElement);\r\n setTimeout(() => this.loadCaptcha(this.checkReCaptcha, this), 1000);\r\n },\r\n loadCaptcha: function (callback, context) {\r\n grecaptcha.render('captcha_container', {\r\n 'sitekey': GLOBAL_KEYS.reCaptcha,\r\n 'callback': function (response) {\r\n callback(response, context);\r\n }\r\n });\r\n },\r\n checkReCaptcha: function (response, context) {\r\n context.reCaptchaResponse = response;\r\n }\r\n};\r\n\r\nexport const validationMsg = {\r\n msg: null,\r\n lang: lang.lang || lang,\r\n getValidationMsg: function () {\r\n const request = new XMLHttpRequest();\r\n request.open('GET', VALIDATION_MSG, false);\r\n request.send(null);\r\n if (request.status === 200) {\r\n this.msg = JSON.parse(request.response);\r\n }\r\n }\r\n};\r\n","export const vcard = {\r\n begin: 'BEGIN:VCARD\\r\\nVERSION:3.0\\r\\nCLASS:PUBLIC\\r\\n',\r\n end: 'END:VCARD\\r\\n',\r\n fileData: '',\r\n collectedData: {\r\n },\r\n gatherData: function () {\r\n const datas = document.querySelectorAll('[data-vcard]');\r\n\r\n Array.prototype.forEach.call(datas, data => {\r\n this.collectedData[data.dataset.vcard] = data.innerText;\r\n });\r\n },\r\n prepareData: function () {\r\n let i = 0;\r\n for (let key in this.collectedData) {\r\n const upperKey = key.toUpperCase();\r\n const subUpperKey = upperKey.substr(0, 3);\r\n\r\n switch (subUpperKey) {\r\n case ('FN'):\r\n this.fileData += `FN:${this.collectedData['fn']}\\r\\n`;\r\n break;\r\n case ('N'):\r\n this.fileData += `N:${this.collectedData['n']};;;;\\r\\n`;\r\n this.fileData += `ORG:${this.collectedData['n']};;;;\\r\\n`;\r\n break;\r\n case ('ADR') :\r\n !i ? this.fileData += `ADR;TYPE=WORK:;;${this.collectedData['adr-street']};${this.collectedData['adr-city']};${this.collectedData['adr-postal']};${this.collectedData['adr-country']}\\r\\n` : false;\r\n i++;\r\n break;\r\n case ('EMAIL'):\r\n this.fileData += `EMAIL;TYPE=WORK:${this.collectedData['email']}\\r\\n`;\r\n break;\r\n case ('TEL'):\r\n this.fileData += `TEL;type=WORK:${this.collectedData['tel']}\\r\\n`;\r\n break;\r\n case ('FAX'):\r\n this.fileData += `TEL;type=FAX:${this.collectedData['fax']}\\r\\n`;\r\n break;\r\n }\r\n }\r\n return this.begin + this.fileData + this.end;\r\n },\r\n buildVCard: function () {\r\n this.gatherData();\r\n return new Blob([this.prepareData()], {\r\n type: 'text/vcard;charset=utf-8'\r\n });\r\n },\r\n init: function () {\r\n const downloadBtn = document.querySelector('.card__btn');\r\n\r\n downloadBtn.addEventListener('click', () => {\r\n setTimeout(()=> {\r\n saveAs(\r\n this.buildVCard(),\r\n `${this.createFileName()}.vcf`,\r\n true\r\n )}, 0);\r\n });\r\n },\r\n createFileName: function () {\r\n let name = this.collectedData.n.replace(/ /g, '-');\r\n name = name.replace(/\\./g, '');\r\n return name;\r\n }\r\n};\r\n","import {COOKIES_MSG} from \"../constants/constants\";\r\nimport {lang} from \"./checkLanguage\";\r\n\r\nexport const cookies = {\r\n cookieData: null,\r\n lang: lang.lang || lang,\r\n box: null,\r\n createPolicyApprovedCookie: function () {\r\n const expDate = new Date(new Date().setFullYear(new Date().getFullYear() + 1));\r\n document.cookie = `acceptCookiePolicy=accepted; expires=${expDate}`;\r\n document.querySelector('body').removeChild(this.box);\r\n },\r\n isPolicyApproved: function () {\r\n const isApproved = this.getCookie('acceptCookiePolicy');\r\n if (!isApproved) {\r\n this.getCookiesData();\r\n this.showCookiesBox();\r\n }\r\n },\r\n getCookie: function (name) {\r\n const cookieMatch = document.cookie.match(new RegExp(name + '=([^;]+)'));\r\n\r\n if (cookieMatch) return cookieMatch[1];\r\n },\r\n getCookiesData: function () {\r\n const request = new XMLHttpRequest();\r\n request.open('GET', COOKIES_MSG, false);\r\n request.send(null);\r\n if (request.status === 200) {\r\n this.cookieData = JSON.parse(request.response);\r\n }\r\n },\r\n showCookiesBox: function () {\r\n const box = document.createElement('div');\r\n box.classList.add('cookies');\r\n\r\n const ins = document.createElement('div');\r\n ins.classList.add('cookies__ins');\r\n ins.innerHTML = this.cookieData[this.lang] ? this.cookieData[this.lang].text : this.cookieData[this.lang.lang].text;\r\n\r\n box.appendChild(ins);\r\n\r\n const btn = document.createElement('button');\r\n btn.classList.add('btn', 'btn--cookies');\r\n btn.innerText = this.cookieData[this.lang] ? this.cookieData[this.lang].btnText : this.cookieData[this.lang.lang].btnText;\r\n\r\n ins.appendChild(btn);\r\n\r\n this.box = box;\r\n document.querySelector('body').appendChild(box);\r\n\r\n btn.addEventListener('click', () => this.createPolicyApprovedCookie());\r\n }\r\n};\r\n","import {lang} from \"./checkLanguage\";\r\n\r\nexport const dateSelect = {\r\n months: {\r\n pl: {\r\n first: 'Wybierz:',\r\n months: ['Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień']\r\n },\r\n de: {\r\n first: 'Wählen:',\r\n months: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']\r\n }\r\n },\r\n init: function (select, months = 12) {\r\n const initialValue = this.getInitialValue(select);\r\n\r\n let year = this.getCurrentDate().getFullYear();\r\n let month = this.getCurrentDate().getMonth();\r\n\r\n this.prepareOption(this.months[lang.lang].first, '0', select);\r\n for (let i = 0; i < months; i++) {\r\n const data = `${this.getYear(year)}-${this.getTwoDigitsMonth(month)}`;\r\n const text = this.prepareText(month, year);\r\n this.prepareOption(text, data, select);\r\n if (month === 11) {\r\n month = 0;\r\n year++;\r\n } else {\r\n month++;\r\n }\r\n }\r\n\r\n for (let i = 0; i < select.options.length; i++) {\r\n if (select.options[i].value === initialValue) {\r\n select.options[i].selected = true;\r\n }\r\n }\r\n\r\n this.setInitialValue(select);\r\n },\r\n getCurrentDate: function () {\r\n return new Date();\r\n },\r\n getYear: function (date) {\r\n return date.toString();\r\n },\r\n getTwoDigitsMonth: function (date) {\r\n const month = (date + 1).toString();\r\n return month.length === 1 ? 0 + month : month;\r\n },\r\n prepareOption: function (text, value, select) {\r\n const option = document.createElement('option');\r\n option.setAttribute('value', value);\r\n option.innerText = text;\r\n select.appendChild(option);\r\n },\r\n prepareText: function (month, year) {\r\n const monthName = this.getNameOfMonth(month);\r\n\r\n return `${monthName} ${year}`\r\n },\r\n getNameOfMonth: function (month) {\r\n return this.months[lang.lang].months[month]\r\n },\r\n setInitialValue: function (select) {\r\n select.addEventListener('change', () => {\r\n sessionStorage.setItem(select.getAttribute('id'), select.value);\r\n })\r\n },\r\n getInitialValue: function (select) {\r\n return sessionStorage.getItem(select.getAttribute('id'));\r\n }\r\n};\r\n","import {dataBox} from \"../functions/data-box\";\r\nimport {mobileMenu} from \"../functions/nav\";\r\nimport {toggleLoginPassword} from \"../functions/login\";\r\nimport {search} from \"../functions/search\";\r\nimport {truncateText} from \"../functions/truncate\";\r\nimport {share} from \"../functions/share\";\r\nimport {validation, validationMsg} from \"../functions/validation\";\r\nimport {vcard} from \"../functions/vCard\";\r\nimport {cookies} from \"../functions/cookies\";\r\nimport {lang} from \"../functions/checkLanguage\";\r\nimport {tabs} from \"../functions/tabs\";\r\nimport {dateSelect} from \"../functions/dateSelect\";\r\n\r\nexport function ComponentsLoader(page) {\r\n this.page = page;\r\n this.checkInitializedPage();\r\n}\r\n\r\nComponentsLoader.prototype = {\r\n checkInitializedPage: function () {\r\n this.enableDefaultComponents();\r\n switch (this.page) {\r\n case 'pol':\r\n this.enablepolyfilesComponents();\r\n break;\r\n case 'home':\r\n this.enableHomeComponents();\r\n break;\r\n case 'offers':\r\n this.enableOffersComponents();\r\n break;\r\n case 'login-page':\r\n this.enableLoginComponents();\r\n break;\r\n case 'comp-profil':\r\n this.enableCompanyProfilComponents();\r\n break;\r\n case 'comp-list':\r\n this.enableCompanyListComponents();\r\n break;\r\n case 'offer':\r\n this.enableOfferComponents();\r\n break;\r\n case 'note-page':\r\n this.enableNotePageComponents();\r\n break;\r\n case 'note-list':\r\n this.enableNoteListComponents();\r\n break;\r\n case 'events-list':\r\n this.enableEventsListComponents();\r\n break;\r\n case 'event':\r\n this.enableEventPageComponents();\r\n break;\r\n case 'report-list':\r\n this.enableReportListComponents();\r\n break;\r\n case 'report-page':\r\n this.enableReportPageComponents();\r\n break;\r\n case 'certificate':\r\n //generate.pdf();\r\n break;\r\n default:\r\n console.info('only default components')\r\n }\r\n },\r\n enableDefaultComponents: function () {\r\n lang.checkLanguage();\r\n mobileMenu.init();\r\n cookies.isPolicyApproved();\r\n\r\n const forms = document.querySelectorAll('form.validate');\r\n\r\n if (forms.length) {\r\n validationMsg.getValidationMsg();\r\n Array.prototype.forEach.call(forms, form => validation.validateForm(form));\r\n }\r\n },\r\n enableHomeComponents: function () {\r\n search.build();\r\n\r\n const eventsTxt = document.querySelectorAll('.event__txt');\r\n if (eventsTxt.length) {\r\n Array.prototype.forEach.call(eventsTxt, el => truncateText(el, 200));\r\n }\r\n\r\n const notesTxt = document.querySelectorAll('.article-box__txt p');\r\n if (notesTxt.length) {\r\n Array.prototype.forEach.call(notesTxt, el => truncateText(el, 200));\r\n }\r\n\r\n const eventBoxes = document.querySelectorAll('.event');\r\n const hrBoxes = document.querySelectorAll('.hr-box');\r\n const offerBoxes = document.querySelectorAll('.offer-box');\r\n\r\n dataBox.changeHeightOfBoxes(eventBoxes, hrBoxes, offerBoxes);\r\n },\r\n enableCompanyProfilComponents: function () {\r\n share.init();\r\n vcard.init();\r\n },\r\n enableOfferComponents: function () {\r\n share.init();\r\n },\r\n enableLoginComponents: function () {\r\n toggleLoginPassword();\r\n },\r\n enableOffersComponents: function () {\r\n search.build();\r\n },\r\n enableCompanyListComponents: function () {\r\n search.build();\r\n },\r\n enableNotePageComponents: function () {\r\n share.init();\r\n const eventBoxes = document.querySelectorAll('.event');\r\n if (eventBoxes.length) {\r\n window.addEventListener('resize', () => dataBox.setHeightOfBox(eventBoxes));\r\n dataBox.setHeightOfBox(eventBoxes);\r\n }\r\n },\r\n enableNoteListComponents: function () {\r\n search.build();\r\n const eventBoxes = document.querySelectorAll('.event');\r\n if (eventBoxes.length) {\r\n window.addEventListener('resize', () => dataBox.setHeightOfBox(eventBoxes));\r\n dataBox.setHeightOfBox(eventBoxes);\r\n }\r\n },\r\n enableEventPageComponents: function () {\r\n share.init();\r\n const eventTxt = document.querySelectorAll('.event__txt');\r\n if (eventTxt.length) {\r\n Array.prototype.forEach.call(eventTxt, el => truncateText(el, 200));\r\n }\r\n\r\n const eventBoxes = document.querySelectorAll('.event');\r\n if (eventBoxes.length) {\r\n window.addEventListener('resize', () => dataBox.setHeightOfBox(eventBoxes));\r\n dataBox.setHeightOfBox(eventBoxes);\r\n }\r\n },\r\n enableEventsListComponents: function () {\r\n const eventsTabs = Object.create(tabs);\r\n\r\n const companiesEventBoxes = document.querySelectorAll('[data-tab=\"companies-events\"] .event');\r\n const ahkEventBoxes = document.querySelectorAll('[data-tab=\"ahk-events\"] .event');\r\n\r\n eventsTabs.init(\r\n 'events-tabs',\r\n true,\r\n () => dataBox.changeHeightOfBoxes(companiesEventBoxes, ahkEventBoxes)\r\n );\r\n\r\n search.build();\r\n\r\n const eventTxt = document.querySelectorAll('.event__txt');\r\n if (eventTxt.length) {\r\n Array.prototype.forEach.call(eventTxt, el => truncateText(el, 200));\r\n }\r\n\r\n dataBox.changeHeightOfBoxes(companiesEventBoxes, ahkEventBoxes);\r\n\r\n const ahkSelect = document.querySelector('#ahk-events-date');\r\n const companiesSelect = document.querySelector('#companies-events-date');\r\n\r\n dateSelect.init(ahkSelect);\r\n dateSelect.init(companiesSelect);\r\n\r\n document.querySelector('[data-tab=\"ahk-events\"]').classList.remove('is-active');\r\n },\r\n enableReportListComponents: function () {\r\n search.build();\r\n },\r\n enableReportPageComponents: function () {\r\n share.init();\r\n },\r\n enablepolyfilesComponents: function () {\r\n polyfiles();\r\n }\r\n};\r\n","//import \"babel-polyfill\";\r\nimport {ComponentsLoader} from './helpers/components-loader';\r\n\r\nfunction App() {\r\n const page = document.querySelector('main').getAttribute('data-page');\r\n new ComponentsLoader(page);\r\n}\r\n\r\nnew App();\r\n"],"names":["dataBox","boxes","prototype","forEach","call","box","style","height","window","innerWidth","heightsArr","push","offsetHeight","max","reduce","prev","curr","args","arguments","length","i","addEventListener","setHeightOfBox","mobileMenu","document","querySelector","onResize","changePosition","closeByBg","btn","isMenuShown","hide","show","header","classList","add","remove","scrollY","top","e","target","contains","toggleLoginPassword","link","client","boxClient","PROVINCES_URL","VALIDATION_MSG","COOKIES_MSG","GLOBAL_KEYS","tabs","wrapClass","arrows","callback","querySelectorAll","tabsAmount","firstTab","setFirstTab","setArrows","setIndex","toggleArrows","tab","onClick","activateTabsArrows","leftArrow","rightArrow","tabFor","dataset","tabContent","findProperTabContent","hideAllTabsContent","deactivateTabs","attr","arrow","onClickTabArrow","moveTabs","dir","currentIndex","updateCurrentIndex","changeTabsPosition","marginLeft","activeTab","indexOf","search","getProvinces","setSelectedCountries","initDefaultProvinces","setSelectedProvinces","init","request","XMLHttpRequest","open","send","status","provinces","JSON","parse","response","prepareCountrySelectors","element","form","findClosestElementByClass","provincesSelector","selectedCountry","sessionStorage","getItem","value","options","selected","removePrevOptions","addNewOptions","countrySelect","selector","onChangeCountry","provincesSelect","onChangeProvince","storeSelectedCountry","disabled","storeSelectedProvice","el","cls","parentElement","country","province","option","createElement","innerText","setAttribute","appendChild","currentOptions","item","removeChild","currentTab","setItem","selects","select","dataTab","selectedProvince","truncateText","chars","text","substr","share","location","href","btns","preventDefault","type","url","getAttribute","shareOnFacebook","shareOnTwitter","shareOnLinkedIn","shareOnXing","Error","encodeURIComponent","params","width","title","lang","navigator","language","slice","validation","re","test","passField","fields","findFields","reCaptcha","recaptcha","prepareReCaptcha","field","addRulesToField","validateField","er","result","checkRules","reCaptchaResponse","toggleReCaptchaValidationMsg","rules","replace","split","validated","rule","formValidationResults","validationResults","toggleValidationMsg","prepareValidationMsg","validationMsg","msg","errorBox","insertAfter","reBox","getElementById","newNode","referenceNode","parentNode","insertBefore","nextSibling","afterElement","reCaptchaBox","loadCaptcha","checkReCaptcha","context","render","vcard","datas","data","collectedData","key","upperKey","toUpperCase","subUpperKey","fileData","begin","end","gatherData","Blob","prepareData","downloadBtn","buildVCard","createFileName","name","n","cookies","expDate","Date","setFullYear","getFullYear","cookie","isApproved","getCookie","getCookiesData","showCookiesBox","cookieMatch","match","RegExp","cookieData","ins","innerHTML","btnText","createPolicyApprovedCookie","dateSelect","months","initialValue","getInitialValue","year","getCurrentDate","month","getMonth","prepareOption","first","getYear","getTwoDigitsMonth","prepareText","setInitialValue","date","toString","monthName","getNameOfMonth","ComponentsLoader","page","checkInitializedPage","enableDefaultComponents","enablepolyfilesComponents","enableHomeComponents","enableOffersComponents","enableLoginComponents","enableCompanyProfilComponents","enableCompanyListComponents","enableOfferComponents","enableNotePageComponents","enableNoteListComponents","enableEventsListComponents","enableEventPageComponents","enableReportListComponents","enableReportPageComponents","info","checkLanguage","isPolicyApproved","forms","getValidationMsg","validateForm","build","eventsTxt","notesTxt","eventBoxes","hrBoxes","offerBoxes","changeHeightOfBoxes","eventTxt","eventsTabs","Object","create","companiesEventBoxes","ahkEventBoxes","ahkSelect","companiesSelect","App"],"mappings":"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","preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjpudWxsLCJzb3VyY2VzIjpbIkM6L1Byb2plY3RzL21hcmt0cGxhdHotaHRtbC9zcmMvYXNzZXRzL2pzL2Z1bmN0aW9ucy9kYXRhLWJveC5qcyIsIkM6L1Byb2plY3RzL21hcmt0cGxhdHotaHRtbC9zcmMvYXNzZXRzL2pzL2Z1bmN0aW9ucy9uYXYuanMiLCJDOi9Qcm9qZWN0cy9tYXJrdHBsYXR6LWh0bWwvc3JjL2Fzc2V0cy9qcy9mdW5jdGlvbnMvbG9naW4uanMiLCJDOi9Qcm9qZWN0cy9tYXJrdHBsYXR6LWh0bWwvc3JjL2Fzc2V0cy9qcy9jb25zdGFudHMvY29uc3RhbnRzLmpzIiwiQzovUHJvamVjdHMvbWFya3RwbGF0ei1odG1sL3NyYy9hc3NldHMvanMvZnVuY3Rpb25zL3RhYnMuanMiLCJDOi9Qcm9qZWN0cy9tYXJrdHBsYXR6LWh0bWwvc3JjL2Fzc2V0cy9qcy9mdW5jdGlvbnMvc2VhcmNoLmpzIiwiQzovUHJvamVjdHMvbWFya3RwbGF0ei1odG1sL3NyYy9hc3NldHMvanMvZnVuY3Rpb25zL3RydW5jYXRlLmpzIiwiQzovUHJvamVjdHMvbWFya3RwbGF0ei1odG1sL3NyYy9hc3NldHMvanMvZnVuY3Rpb25zL3NoYXJlLmpzIiwiQzovUHJvamVjdHMvbWFya3RwbGF0ei1odG1sL3NyYy9hc3NldHMvanMvZnVuY3Rpb25zL2NoZWNrTGFuZ3VhZ2UuanMiLCJDOi9Qcm9qZWN0cy9tYXJrdHBsYXR6LWh0bWwvc3JjL2Fzc2V0cy9qcy9mdW5jdGlvbnMvdmFsaWRhdGlvbi5qcyIsIkM6L1Byb2plY3RzL21hcmt0cGxhdHotaHRtbC9zcmMvYXNzZXRzL2pzL2Z1bmN0aW9ucy92Q2FyZC5qcyIsIkM6L1Byb2plY3RzL21hcmt0cGxhdHotaHRtbC9zcmMvYXNzZXRzL2pzL2Z1bmN0aW9ucy9jb29raWVzLmpzIiwiQzovUHJvamVjdHMvbWFya3RwbGF0ei1odG1sL3NyYy9hc3NldHMvanMvZnVuY3Rpb25zL2RhdGVTZWxlY3QuanMiLCJDOi9Qcm9qZWN0cy9tYXJrdHBsYXR6LWh0bWwvc3JjL2Fzc2V0cy9qcy9oZWxwZXJzL2NvbXBvbmVudHMtbG9hZGVyLmpzIiwiQzovUHJvamVjdHMvbWFya3RwbGF0ei1odG1sL3NyYy9hc3NldHMvanMvYXBwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBkYXRhQm94ID0ge1xyXG4gICAgc2V0SGVpZ2h0T2ZCb3g6IGZ1bmN0aW9uIChib3hlcykge1xyXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoYm94ZXMsIGJveCA9PiBib3guc3R5bGUuaGVpZ2h0ID0gbnVsbCk7XHJcblxyXG4gICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDc2OCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVpZ2h0c0FyciA9IFtdO1xyXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoYm94ZXMsIGJveCA9PiBoZWlnaHRzQXJyLnB1c2goYm94Lm9mZnNldEhlaWdodCkpO1xyXG5cclxuICAgICAgICBjb25zdCBtYXggPSBoZWlnaHRzQXJyLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiA+IGN1cnIgPyBwcmV2IDogY3Vycik7XHJcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChib3hlcywgYm94ID0+IGJveC5zdHlsZS5oZWlnaHQgPSBgJHttYXh9cHhgKTtcclxuICAgIH0sXHJcbiAgICBjaGFuZ2VIZWlnaHRPZkJveGVzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLnNldEhlaWdodE9mQm94KGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRIZWlnaHRPZkJveChhcmd1bWVudHNbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG4iLCJleHBvcnQgbGV0IG1vYmlsZU1lbnUgPSB7XHJcbiAgICBoZWFkZXI6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKSxcclxuICAgIGJ0bjogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI21lbnVUb2dnbGVyJyksXHJcbiAgICBpbml0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICB0aGlzLm9uUmVzaXplKCk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VQb3NpdGlvbigpO1xyXG4gICAgICAgIHRoaXMuY2xvc2VCeUJnKCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5idG4pIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5idG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzTWVudVNob3duID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmlzLW1lbnUtc2hvd24nKTtcclxuICAgICAgICAgICAgaWYgKGlzTWVudVNob3duKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNob3coKTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICBzaG93OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5oZWFkZXIuY2xhc3NMaXN0LmFkZCgnaXMtbWVudS1zaG93bicpO1xyXG4gICAgfSxcclxuICAgIGhpZGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmhlYWRlci5jbGFzc0xpc3QucmVtb3ZlKCdpcy1tZW51LXNob3duJyk7XHJcbiAgICB9LFxyXG4gICAgY2hhbmdlUG9zaXRpb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxZID0gd2luZG93LnNjcm9sbFk7XHJcbiAgICAgICAgICAgIGlmIChzY3JvbGxZID4gNSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXIuY2xhc3NMaXN0LmFkZCgnaXMtc2Nyb2xsZWQnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnRuLnN0eWxlLnRvcCA9IGAtJHtzY3JvbGxZfXB4YDtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmJ0bi5zdHlsZS50b3AgPSAnNXB4JztcclxuICAgICAgICAgICAgdGhpcy5oZWFkZXIuY2xhc3NMaXN0LnJlbW92ZSgnaXMtc2Nyb2xsZWQnKTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICBvblJlc2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IDEyMDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLW1lbnUtc2hvd24nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIGNsb3NlQnlCZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuaGVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnaXMtbWVudS1zaG93bicpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbn07XHJcbiIsImV4cG9ydCBmdW5jdGlvbiB0b2dnbGVMb2dpblBhc3N3b3JkICgpIHtcclxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubG9naW5fX2xpbmstLWZvcmdldCcpO1xyXG4gICAgY29uc3QgY2xpZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxvZ2luX19saW5rLS1uZXctY2xpZW50Jyk7XHJcbiAgICBjb25zdCBib3ggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubG9naW5fX3Bhc3N3b3JkJyk7XHJcbiAgICBjb25zdCBib3hDbGllbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubG9naW5fX25ldy1jbGllbnQnKTtcclxuXHJcbiAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIGJveC5jbGFzc0xpc3QuYWRkKCdpcy12aXNpYmxlJyk7XHJcblxyXG4gICAgICAgIGlmIChib3hDbGllbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdpcy12aXNpYmxlJykpe1xyXG4gICAgICAgICAgICBib3guY2xhc3NMaXN0LmFkZCgnaXMtdmlzaWJsZScpO1xyXG4gICAgICAgICAgICBib3hDbGllbnQuY2xhc3NMaXN0LnJlbW92ZSgnaXMtdmlzaWJsZScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY2xpZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG5cclxuICAgICAgICBib3hDbGllbnQuY2xhc3NMaXN0LmFkZCgnaXMtdmlzaWJsZScpO1xyXG5cclxuICAgICAgICBpZiAoYm94LmNsYXNzTGlzdC5jb250YWlucygnaXMtdmlzaWJsZScpKXtcclxuICAgICAgICAgICAgYm94Q2xpZW50LmNsYXNzTGlzdC5hZGQoJ2lzLXZpc2libGUnKTtcclxuICAgICAgICAgICAgYm94LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXZpc2libGUnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxufTtcclxuIiwiZXhwb3J0IGNvbnN0IFBST1ZJTkNFU19VUkwgPSAnL2RhdGEvY291bnRyaWVzLmpzb24nO1xyXG5leHBvcnQgY29uc3QgVkFMSURBVElPTl9NU0cgPSAnL2RhdGEvdmFsaWRhdGlvbk1zZy5qc29uJztcclxuZXhwb3J0IGNvbnN0IENPT0tJRVNfTVNHID0gJy9kYXRhL2Nvb2tpZXMuanNvbic7XHJcblxyXG5leHBvcnQgY29uc3QgR0xPQkFMX0tFWVMgPSB7XHJcbiAgICByZUNhcHRjaGE6ICc2TGRrZEVFVUFBQUFBTEhlejNHcDNXX21zTlR6blh4ZnF1ZHdyb0VJJ1xyXG59O1xyXG4iLCJleHBvcnQgY29uc3QgdGFicyA9IHtcclxuICAgIHRhYnM6IG51bGwsXHJcbiAgICBjdXJyZW50SW5kZXg6IDAsXHJcbiAgICB0YWJzQW1vdW50OiAwLFxyXG4gICAgZmlyc3RUYWI6IG51bGwsXHJcbiAgICBsZWZ0QXJyb3c6IG51bGwsXHJcbiAgICByaWdodEFycm93OiBudWxsLFxyXG4gICAgaW5pdDogZnVuY3Rpb24gKHdyYXBDbGFzcyA9ICd0YWJzJywgYXJyb3dzID0gdHJ1ZSwgY2FsbGJhY2spIHtcclxuICAgICAgICB0aGlzLnRhYnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHt3cmFwQ2xhc3N9IC50YWJgKTtcclxuICAgICAgICB0aGlzLnRhYnNBbW91bnQgPSB0aGlzLnRhYnMubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuZmlyc3RUYWIgPSB0aGlzLnNldEZpcnN0VGFiKHdyYXBDbGFzcyk7XHJcbiAgICAgICAgaWYgKGFycm93cykge1xyXG4gICAgICAgICAgICB0aGlzLnNldEFycm93cyh3cmFwQ2xhc3MpO1xyXG4gICAgICAgICAgICB0aGlzLnNldEluZGV4KHdyYXBDbGFzcyk7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlQXJyb3dzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHRoaXMudGFicywgdGFiID0+IHtcclxuICAgICAgICAgICAgdGFiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy5vbkNsaWNrKHRhYiwgd3JhcENsYXNzLCBhcnJvd3MsIGNhbGxiYWNrKSlcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGFycm93cykgdGhpcy5hY3RpdmF0ZVRhYnNBcnJvd3Mod3JhcENsYXNzKTtcclxuXHJcbiAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjaygpO1xyXG4gICAgfSxcclxuICAgIHNldEZpcnN0VGFiOiBmdW5jdGlvbiAod3JhcENsYXNzKSB7XHJcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke3dyYXBDbGFzc30gLnRhYmApO1xyXG4gICAgfSxcclxuICAgIHNldEFycm93czogZnVuY3Rpb24gKHdyYXBDbGFzcykge1xyXG4gICAgICAgIHRoaXMubGVmdEFycm93ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7d3JhcENsYXNzfSAudGFic19fYXJyb3ctLWxlZnRgKTtcclxuICAgICAgICB0aGlzLnJpZ2h0QXJyb3cgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHt3cmFwQ2xhc3N9IC50YWJzX19hcnJvdy0tcmlnaHRgKTtcclxuICAgIH0sXHJcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiAodGFiLCB3cmFwQ2xhc3MsIGFycm93cywgY2FsbGJhY2spIHtcclxuICAgICAgICBjb25zdCB0YWJGb3IgPSB0YWIuZGF0YXNldC50YWJGb3I7XHJcbiAgICAgICAgY29uc3QgdGFiQ29udGVudCA9IHRoaXMuZmluZFByb3BlclRhYkNvbnRlbnQodGFiRm9yKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGFicyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke3dyYXBDbGFzc30gLnRhYnNfX2NudC1zaW5nbGVgKTtcclxuICAgICAgICB0aGlzLmhpZGVBbGxUYWJzQ29udGVudCh0YWJzKTtcclxuICAgICAgICB0aGlzLmRlYWN0aXZhdGVUYWJzKCk7XHJcbiAgICAgICAgdGFiLmNsYXNzTGlzdC5hZGQoJ2lzLWFjdGl2ZScpO1xyXG4gICAgICAgIHRhYkNvbnRlbnQuY2xhc3NMaXN0LmFkZCgnaXMtYWN0aXZlJyk7XHJcblxyXG4gICAgICAgIGlmIChhcnJvd3MpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbmRleCh3cmFwQ2xhc3MpO1xyXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUFycm93cygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGZpbmRQcm9wZXJUYWJDb250ZW50OiBmdW5jdGlvbiAoYXR0cikge1xyXG4gICAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS10YWI9XCIke2F0dHJ9XCJdYClcclxuICAgIH0sXHJcbiAgICBoaWRlQWxsVGFic0NvbnRlbnQ6IGZ1bmN0aW9uICh0YWJzKSB7XHJcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh0YWJzLCB0YWIgPT4gdGFiLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFjdGl2ZScpKVxyXG4gICAgfSxcclxuICAgIGRlYWN0aXZhdGVUYWJzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh0aGlzLnRhYnMsIHRhYiA9PiB0YWIuY2xhc3NMaXN0LnJlbW92ZSgnaXMtYWN0aXZlJykpO1xyXG4gICAgfSxcclxuICAgIGFjdGl2YXRlVGFic0Fycm93czogZnVuY3Rpb24gKHdyYXBDbGFzcykge1xyXG4gICAgICAgIGNvbnN0IGFycm93cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke3dyYXBDbGFzc30gLnRhYnNfX2Fycm93YCk7XHJcblxyXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoYXJyb3dzLCBhcnJvdyA9PiB0aGlzLm9uQ2xpY2tUYWJBcnJvdyhhcnJvdykpXHJcbiAgICB9LFxyXG4gICAgb25DbGlja1RhYkFycm93OiBmdW5jdGlvbiAoYXJyb3cpIHtcclxuICAgICAgICBhcnJvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHRoaXMubW92ZVRhYnMoYXJyb3cpKTtcclxuICAgIH0sXHJcbiAgICB1cGRhdGVDdXJyZW50SW5kZXg6IGZ1bmN0aW9uIChhcnJvdykge1xyXG4gICAgICAgIGNvbnN0IGRpciA9IGFycm93LmRhdGFzZXQuZGlyO1xyXG5cclxuICAgICAgICBpZiAoZGlyID09PSAnbGVmdCcpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXgtLTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkaXIgPT09ICdyaWdodCcpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXgrKztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgbW92ZVRhYnM6IGZ1bmN0aW9uIChhcnJvdykge1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ3VycmVudEluZGV4KGFycm93KTtcclxuICAgICAgICB0aGlzLmNoYW5nZVRhYnNQb3NpdGlvbigpO1xyXG4gICAgICAgIHRoaXMudG9nZ2xlQXJyb3dzKCk7XHJcbiAgICB9LFxyXG4gICAgY2hhbmdlVGFic1Bvc2l0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5maXJzdFRhYi5zdHlsZS5tYXJnaW5MZWZ0ID0gYC0ke3RoaXMuY3VycmVudEluZGV4ICogMTAwfSVgO1xyXG4gICAgfSxcclxuICAgIHNldEluZGV4OiBmdW5jdGlvbiAod3JhcENsYXNzKSB7XHJcbiAgICAgICAgY29uc3QgYWN0aXZlVGFiID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7d3JhcENsYXNzfSAudGFiLmlzLWFjdGl2ZWApO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gW10uaW5kZXhPZi5jYWxsKHRoaXMudGFicywgYWN0aXZlVGFiKTtcclxuXHJcbiAgICAgICAgdGhpcy5jaGFuZ2VUYWJzUG9zaXRpb24oKTtcclxuICAgIH0sXHJcbiAgICB0b2dnbGVBcnJvd3M6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPCB0aGlzLnRhYnNBbW91bnQgLSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVmdEFycm93LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWhpZGRlbicpO1xyXG4gICAgICAgICAgICB0aGlzLnJpZ2h0QXJyb3cuY2xhc3NMaXN0LnJlbW92ZSgnaXMtaGlkZGVuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPT09IHRoaXMudGFic0Ftb3VudCAtIDEpIHtcclxuICAgICAgICAgICAgdGhpcy5yaWdodEFycm93LmNsYXNzTGlzdC5hZGQoJ2lzLWhpZGRlbicpO1xyXG4gICAgICAgICAgICB0aGlzLmxlZnRBcnJvdy5jbGFzc0xpc3QucmVtb3ZlKCdpcy1oaWRkZW4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmxlZnRBcnJvdy5jbGFzc0xpc3QuYWRkKCdpcy1oaWRkZW4nKTtcclxuICAgICAgICAgICAgdGhpcy5yaWdodEFycm93LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWhpZGRlbicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtQUk9WSU5DRVNfVVJMfSBmcm9tIFwiLi4vY29uc3RhbnRzL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQge3RhYnN9IGZyb20gXCIuL3RhYnNcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBzZWFyY2ggPSB7XHJcbiAgICBwcm92aW5jZXM6IG51bGwsXHJcbiAgICBidWlsZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuZ2V0UHJvdmluY2VzKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZENvdW50cmllcygpO1xyXG4gICAgICAgIHRoaXMuaW5pdERlZmF1bHRQcm92aW5jZXMoKTtcclxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkUHJvdmluY2VzKCk7XHJcbiAgICAgICAgdGFicy5pbml0KCdzZWFyY2gtdGFicycpO1xyXG4gICAgfSxcclxuICAgIGdldFByb3ZpbmNlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICByZXF1ZXN0Lm9wZW4oJ0dFVCcsIFBST1ZJTkNFU19VUkwsIGZhbHNlKTtcclxuICAgICAgICByZXF1ZXN0LnNlbmQobnVsbCk7XHJcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5wcm92aW5jZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QucmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVDb3VudHJ5U2VsZWN0b3JzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGluaXREZWZhdWx0UHJvdmluY2VzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgYWN0aXZlVGFiID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRhYnNfX2NudC1zaW5nbGUuaXMtYWN0aXZlJyk7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGFjdGl2ZVRhYi5xdWVyeVNlbGVjdG9yKCcuY2hhbmdlLWNvdW50cnknKTtcclxuICAgICAgICBpZiAoIWVsZW1lbnQpIHJldHVybjtcclxuICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5maW5kQ2xvc2VzdEVsZW1lbnRCeUNsYXNzKGVsZW1lbnQsICdmb3JtJyk7XHJcbiAgICAgICAgY29uc3QgcHJvdmluY2VzU2VsZWN0b3IgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJy5wcm92aW5jZXMnKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZENvdW50cnkgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGBjb3VudHJ5LXNlbGVjdGVkLSR7YWN0aXZlVGFiLmRhdGFzZXQudGFifWApIHx8IGVsZW1lbnQudmFsdWU7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5vcHRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm9wdGlvbnNbaV0udmFsdWUgPT09IHNlbGVjdGVkQ291bnRyeSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5vcHRpb25zW2ldLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlbGVjdGVkQ291bnRyeSA9PT0gJ3BsJyB8fCBzZWxlY3RlZENvdW50cnkgPT09ICdkZScpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVQcmV2T3B0aW9ucyhwcm92aW5jZXNTZWxlY3Rvcik7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkTmV3T3B0aW9ucyhzZWxlY3RlZENvdW50cnksIHByb3ZpbmNlc1NlbGVjdG9yKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgcHJlcGFyZUNvdW50cnlTZWxlY3RvcnM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBjb3VudHJ5U2VsZWN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmNoYW5nZS1jb3VudHJ5Jyk7XHJcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChjb3VudHJ5U2VsZWN0LCBzZWxlY3RvciA9PiB7XHJcbiAgICAgICAgICAgIHNlbGVjdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHRoaXMub25DaGFuZ2VDb3VudHJ5KHNlbGVjdG9yKSlcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBwcm92aW5jZXNTZWxlY3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucHJvdmluY2VzJyk7XHJcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChwcm92aW5jZXNTZWxlY3QsIHNlbGVjdG9yID0+IHtcclxuICAgICAgICAgICAgc2VsZWN0b3IuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4gdGhpcy5vbkNoYW5nZVByb3ZpbmNlKHNlbGVjdG9yKSlcclxuICAgICAgICB9KVxyXG4gICAgfSxcclxuICAgIG9uQ2hhbmdlQ291bnRyeTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5maW5kQ2xvc2VzdEVsZW1lbnRCeUNsYXNzKGVsZW1lbnQsICdmb3JtJyk7XHJcbiAgICAgICAgY29uc3QgcHJvdmluY2VzU2VsZWN0b3IgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJy5wcm92aW5jZXMnKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZENvdW50cnkgPSBlbGVtZW50LnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnN0b3JlU2VsZWN0ZWRDb3VudHJ5KGZvcm0sIHNlbGVjdGVkQ291bnRyeSk7XHJcblxyXG4gICAgICAgIHByb3ZpbmNlc1NlbGVjdG9yLmRpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucmVtb3ZlUHJldk9wdGlvbnMocHJvdmluY2VzU2VsZWN0b3IpO1xyXG4gICAgICAgIHRoaXMuYWRkTmV3T3B0aW9ucyhzZWxlY3RlZENvdW50cnksIHByb3ZpbmNlc1NlbGVjdG9yKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFByb3ZpbmNlcygpO1xyXG4gICAgfSxcclxuICAgIG9uQ2hhbmdlUHJvdmluY2U6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZmluZENsb3Nlc3RFbGVtZW50QnlDbGFzcyhlbGVtZW50LCAnZm9ybScpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gZWxlbWVudC52YWx1ZTtcclxuICAgICAgICB0aGlzLnN0b3JlU2VsZWN0ZWRQcm92aWNlKGZvcm0sIHNlbGVjdGVkKTtcclxuICAgIH0sXHJcbiAgICBmaW5kQ2xvc2VzdEVsZW1lbnRCeUNsYXNzOiBmdW5jdGlvbiAoZWwsIGNscykge1xyXG4gICAgICAgIHdoaWxlICgoZWwgPSBlbC5wYXJlbnRFbGVtZW50KSAmJiAhZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNscykpIDtcclxuICAgICAgICByZXR1cm4gZWw7XHJcbiAgICB9LFxyXG4gICAgYWRkTmV3T3B0aW9uczogZnVuY3Rpb24gKGNvdW50cnksIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy5wcm92aW5jZXNbY291bnRyeV0ucHJvdmluY2VzLmZvckVhY2goXHJcbiAgICAgICAgICAgIHByb3ZpbmNlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IHByb3ZpbmNlO1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBwcm92aW5jZSk7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rvci5hcHBlbmRDaGlsZChvcHRpb24pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICByZW1vdmVQcmV2T3B0aW9uczogZnVuY3Rpb24gKHNlbGVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudE9wdGlvbnMgPSBzZWxlY3Rvci5xdWVyeVNlbGVjdG9yQWxsKCdvcHRpb24nKTtcclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnRPcHRpb25zLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChjdXJyZW50T3B0aW9ucywgKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLnJlbW92ZUNoaWxkKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBzdG9yZVNlbGVjdGVkQ291bnRyeTogZnVuY3Rpb24gKGZvcm0sIHNlbGVjdGVkKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFRhYiA9IHRoaXMuZmluZENsb3Nlc3RFbGVtZW50QnlDbGFzcyhmb3JtLCAndGFic19fY250LXNpbmdsZScpLmRhdGFzZXQudGFiO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYGNvdW50cnktc2VsZWN0ZWQtJHtjdXJyZW50VGFifWAsIHNlbGVjdGVkKTtcclxuICAgIH0sXHJcbiAgICBzZXRTZWxlY3RlZENvdW50cmllczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY2hhbmdlLWNvdW50cnknKTtcclxuICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNlbGVjdHMsIHNlbGVjdCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFUYWIgPSB0aGlzLmZpbmRDbG9zZXN0RWxlbWVudEJ5Q2xhc3Moc2VsZWN0LCAndGFic19fY250LXNpbmdsZScpO1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5maW5kQ2xvc2VzdEVsZW1lbnRCeUNsYXNzKHNlbGVjdCwgJ2Zvcm0nKTtcclxuICAgICAgICAgICAgY29uc3QgcHJvdmluY2VzU2VsZWN0b3IgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJy5wcm92aW5jZXMnKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ291bnRyeSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oYGNvdW50cnktc2VsZWN0ZWQtJHtkYXRhVGFiLmRhdGFzZXQudGFifWApO1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRDb3VudHJ5KSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3QudmFsdWUgPSBzZWxlY3RlZENvdW50cnk7XHJcbiAgICAgICAgICAgICAgICBwcm92aW5jZXNTZWxlY3Rvci5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGROZXdPcHRpb25zKHNlbGVjdC52YWx1ZSwgcHJvdmluY2VzU2VsZWN0b3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgc3RvcmVTZWxlY3RlZFByb3ZpY2U6IGZ1bmN0aW9uIChmb3JtLCBzZWxlY3RlZCkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRUYWIgPSB0aGlzLmZpbmRDbG9zZXN0RWxlbWVudEJ5Q2xhc3MoZm9ybSwgJ3RhYnNfX2NudC1zaW5nbGUnKS5kYXRhc2V0LnRhYjtcclxuICAgICAgICBjb25zdCBjb3VudHJ5ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShgY291bnRyeS1zZWxlY3RlZC0ke2N1cnJlbnRUYWJ9YCk7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShgJHtjb3VudHJ5fS1wcm92aW5jZS1zZWxlY3RlZC0ke2N1cnJlbnRUYWJ9YCwgc2VsZWN0ZWQpO1xyXG4gICAgfSxcclxuICAgIHNldFNlbGVjdGVkUHJvdmluY2VzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wcm92aW5jZXMnKTtcclxuICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNlbGVjdHMsIHNlbGVjdCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFUYWIgPSB0aGlzLmZpbmRDbG9zZXN0RWxlbWVudEJ5Q2xhc3Moc2VsZWN0LCAndGFic19fY250LXNpbmdsZScpO1xyXG4gICAgICAgICAgICBjb25zdCBjb3VudHJ5ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShgY291bnRyeS1zZWxlY3RlZC0ke2RhdGFUYWIuZGF0YXNldC50YWJ9YCk7XHJcbiAgICAgICAgICAgIGlmICghY291bnRyeSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUHJvdmluY2UgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGAke2NvdW50cnl9LXByb3ZpbmNlLXNlbGVjdGVkLSR7ZGF0YVRhYi5kYXRhc2V0LnRhYn1gKTtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkUHJvdmluY2UpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdC52YWx1ZSA9IHNlbGVjdGVkUHJvdmluY2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTtcclxuIiwiZXhwb3J0IGZ1bmN0aW9uIHRydW5jYXRlVGV4dChlbCwgY2hhcnMpIHtcclxuICAgIGNvbnN0IHRleHQgPSBlbC5pbm5lclRleHQ7XHJcblxyXG4gICAgaWYgKHRleHQubGVuZ3RoID4gY2hhcnMpIHtcclxuICAgICAgICBlbC5pbm5lclRleHQgPSB0ZXh0LnN1YnN0cigwLCBjaGFycykgKyAnLi4uJztcclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgY29uc3Qgc2hhcmUgPSB7XHJcbiAgICBidG5zOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2hhcmVfX2l0ZW0gYScpLFxyXG4gICAgcGFyYW1zOiB7XHJcbiAgICAgICAgaGVpZ2h0OiA0MzYsXHJcbiAgICAgICAgd2lkdGg6IDYyNlxyXG4gICAgfSxcclxuICAgIHVybDogd2luZG93LmxvY2F0aW9uLmhyZWYsXHJcbiAgICBpbml0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh0aGlzLmJ0bnMsIGJ0biA9PiB7XHJcbiAgICAgICAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gYnRuLmRhdGFzZXQudHlwZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IGJ0bi5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodXJsICE9PSAnIycpIHtcclxuICAgICAgICAgICAgICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhcmUodHlwZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgc2hhcmU6IGZ1bmN0aW9uICh0eXBlKSB7XHJcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ZhY2Vib29rJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVPbkZhY2Vib29rKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndHdpdHRlcic6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXJlT25Ud2l0dGVyKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlua2VkaW4nOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFyZU9uTGlua2VkSW4oKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd4aW5nJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVPblhpbmcoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgaGF2ZW5cXCd0IGRlZmluZWQgdHlwZSBvZiBzaGFyZSB1cmwuJyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgc2hhcmVPbkZhY2Vib29rOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgd2luZG93Lm9wZW4oXHJcbiAgICAgICAgICAgIGBodHRwczovL3d3dy5mYWNlYm9vay5jb20vc2hhcmVyL3NoYXJlci5waHA/dT0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLnVybCl9YCxcclxuICAgICAgICAgICAgJ2ZhY2Vib29rLXNoYXJlLWRpYWxvZycsXHJcbiAgICAgICAgICAgIGB3aWR0aD0ke3RoaXMucGFyYW1zLndpZHRofSwgaGVpZ2h0PSR7dGhpcy5wYXJhbXMuaGVpZ2h0fWBcclxuICAgICAgICApO1xyXG4gICAgfSxcclxuICAgIHNoYXJlT25Ud2l0dGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgd2luZG93Lm9wZW4oXHJcbiAgICAgICAgICAgIGBodHRwczovL3R3aXR0ZXIuY29tL2hvbWU/c3RhdHVzPSR7dGhpcy51cmx9YCxcclxuICAgICAgICAgICAgJ3R3aXR0ZXItc2hhcmUtZGlhbG9nJyxcclxuICAgICAgICAgICAgYHdpZHRoPSR7dGhpcy5wYXJhbXMud2lkdGh9LCBoZWlnaHQ9JHt0aGlzLnBhcmFtcy5oZWlnaHR9YFxyXG4gICAgICAgIClcclxuICAgIH0sXHJcbiAgICBzaGFyZU9uTGlua2VkSW46IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5oZWFkbGluZV9fcGFnZScpLmlubmVyVGV4dCB8fCBkb2N1bWVudC50aXRsZTtcclxuICAgICAgICB3aW5kb3cub3BlbihcclxuICAgICAgICAgICAgYGh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9zaGFyZUFydGljbGU/bWluaT10cnVlJnVybD0ke3RoaXMudXJsfSZ0aXRsZT0ke3RpdGxlfSZzdW1tYXJ5PSZzb3VyY2U9YCxcclxuICAgICAgICAgICAgJ2xpbmtlZGluLXNoYXJlLWRpYWxvZycsXHJcbiAgICAgICAgICAgIGB3aWR0aD0ke3RoaXMucGFyYW1zLndpZHRofSwgaGVpZ2h0PSR7dGhpcy5wYXJhbXMuaGVpZ2h0fWBcclxuICAgICAgICApXHJcbiAgICB9LFxyXG4gICAgc2hhcmVPblhpbmc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB3aW5kb3cub3BlbihcclxuICAgICAgICAgICAgYGh0dHBzOi8vd3d3LnhpbmcuY29tL3NwaS9zaGFyZXMvbmV3P3VybD0ke3RoaXMudXJsfWAsXHJcbiAgICAgICAgICAgICd4aW5nLXNoYXJlLWRpYWxvZycsXHJcbiAgICAgICAgICAgIGB3aWR0aD0ke3RoaXMucGFyYW1zLndpZHRofSwgaGVpZ2h0PSR7dGhpcy5wYXJhbXMuaGVpZ2h0fWBcclxuICAgICAgICApXHJcbiAgICB9XHJcbn07XHJcbiIsImV4cG9ydCBjb25zdCBsYW5nID0ge1xyXG4gICAgbGFuZzogbnVsbCxcclxuICAgIGNoZWNrTGFuZ3VhZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmxhbmcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJykuZ2V0QXR0cmlidXRlKCdsYW5nJyk7XHJcbiAgICAgICAgaWYgKHRoaXMubGFuZyAhPT0gJ3BsJyAmJiB0aGlzLmxhbmcgIT09ICdkZScpIHtcclxuICAgICAgICAgICAgdGhpcy5sYW5nID0gbmF2aWdhdG9yLmxhbmd1YWdlLnNsaWNlKDAsIDIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtWQUxJREFUSU9OX01TRywgR0xPQkFMX0tFWVN9IGZyb20gXCIuLi9jb25zdGFudHMvY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7bGFuZ30gZnJvbSBcIi4vY2hlY2tMYW5ndWFnZVwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IHZhbGlkYXRpb24gPSB7XHJcbiAgICBydWxlczoge1xyXG4gICAgICAgIGVtYWlsOiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgY29uc3QgcmUgPSAvXigoW148PigpXFxbXFxdXFxcXC4sOzpcXHNAXCJdKyhcXC5bXjw+KClcXFtcXF1cXFxcLiw7Olxcc0BcIl0rKSopfChcIi4rXCIpKUAoKFxcW1swLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXF0pfCgoW2EtekEtWlxcLTAtOV0rXFwuKStbYS16QS1aXXsyLH0pKSQvO1xyXG4gICAgICAgICAgICByZXR1cm4gcmUudGVzdCh2YWx1ZSlcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlcXVpcmVkOiBmdW5jdGlvbiAodmFsdWUsIGNoYXJzID0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUubGVuZ3RoID49IGNoYXJzO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbnVtYmVyOiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgY29uc3QgcmUgPSAvXlswLTldfChbMC05XSs/KFxcLik/KFswLTldKikpLztcclxuICAgICAgICAgICAgcmV0dXJuIHJlLnRlc3QodmFsdWUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFzc3dvcmQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCByZSA9IC8oPz0uKlxcZCkoPz0uKlthLXpdKSg/PS4qW0EtWl0pW2EtekEtWjAtOV17OCx9L2k7XHJcbiAgICAgICAgICAgIHJldHVybiByZS50ZXN0KHZhbHVlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlcGVhdFBhc3N3b3JkOiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFzc0ZpZWxkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3R5cGU9XCJwYXNzd29yZFwiXScpO1xyXG4gICAgICAgICAgICByZXR1cm4gcGFzc0ZpZWxkLnZhbHVlID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgcmVDYXB0Y2hhOiBmYWxzZSxcclxuICAgIHJlQ2FwdGNoYVJlc3BvbnNlOiBudWxsLFxyXG4gICAgdmFsaWRhdGVGb3JtOiBmdW5jdGlvbiAoZm9ybSkge1xyXG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZmluZEZpZWxkcyhmb3JtKTtcclxuICAgICAgICBjb25zdCBidG4gPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvblt0eXBlPVwic3VibWl0XCJdJyk7XHJcblxyXG4gICAgICAgIHRoaXMucmVDYXB0Y2hhID0gZm9ybS5kYXRhc2V0LnJlY2FwdGNoYTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVDYXB0Y2hhKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZVJlQ2FwdGNoYShmb3JtLCBidG4pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChmaWVsZHMsIGZpZWxkID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hZGRSdWxlc1RvRmllbGQoZmllbGQpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlRmllbGQoZmllbGQpO1xyXG4gICAgICAgICAgICBmaWVsZC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB0aGlzLnZhbGlkYXRlRmllbGQoZmllbGQpKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZm9ybS5xdWVyeVNlbGVjdG9yQWxsKCcuZXJyb3InKSwgZXIgPT4gZXIucmVtb3ZlKCkpO1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNoZWNrUnVsZXMoZmllbGRzKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVDYXB0Y2hhICYmICF0aGlzLnJlQ2FwdGNoYVJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVJlQ2FwdGNoYVZhbGlkYXRpb25Nc2coKTtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVzdWx0LmluZGV4T2YoZmFsc2UpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgYWRkUnVsZXNUb0ZpZWxkOiBmdW5jdGlvbiAoZmllbGQpIHtcclxuICAgICAgICBjb25zdCBydWxlcyA9IGZpZWxkLmRhdGFzZXQucnVsZXMucmVwbGFjZSgnICcsICcnKS5zcGxpdCgnLCcpO1xyXG4gICAgICAgIGZpZWxkLnJ1bGVzID0ge307XHJcbiAgICAgICAgZmllbGQudmFsaWRhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgcnVsZXMuZm9yRWFjaChydWxlID0+IHtcclxuICAgICAgICAgICAgZmllbGQucnVsZXNbcnVsZV0gPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICBmaW5kRmllbGRzOiBmdW5jdGlvbiAoZm9ybSkge1xyXG4gICAgICAgIHJldHVybiBmb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXJ1bGVzXScpO1xyXG4gICAgfSxcclxuICAgIGNoZWNrUnVsZXM6IGZ1bmN0aW9uIChmaWVsZHMpIHtcclxuICAgICAgICBsZXQgZm9ybVZhbGlkYXRpb25SZXN1bHRzID0gW107XHJcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChmaWVsZHMsIGZpZWxkID0+IHtcclxuICAgICAgICAgICAgbGV0IHZhbGlkYXRpb25SZXN1bHRzID0gW107XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBydWxlIGluIGZpZWxkLnJ1bGVzKSB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0aW9uUmVzdWx0cy5wdXNoKGZpZWxkLnJ1bGVzW3J1bGVdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHRzLmluZGV4T2YoZmFsc2UpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgZmllbGQudmFsaWRhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZpZWxkLnZhbGlkYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWZpZWxkLnZhbGlkYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVWYWxpZGF0aW9uTXNnKGZpZWxkKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZpZWxkLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLW5vdC12YWxpZGF0ZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3JtVmFsaWRhdGlvblJlc3VsdHMucHVzaChmaWVsZC52YWxpZGF0ZWQpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gZm9ybVZhbGlkYXRpb25SZXN1bHRzO1xyXG4gICAgfSxcclxuICAgIHZhbGlkYXRlRmllbGQ6IGZ1bmN0aW9uIChmaWVsZCkge1xyXG4gICAgICAgIGZvciAobGV0IHJ1bGUgaW4gZmllbGQucnVsZXMpIHtcclxuICAgICAgICAgICAgZmllbGQucnVsZXNbcnVsZV0gPSB0aGlzLnJ1bGVzW3J1bGVdKGZpZWxkLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgdG9nZ2xlVmFsaWRhdGlvbk1zZzogZnVuY3Rpb24gKGZpZWxkKSB7XHJcbiAgICAgICAgZm9yIChsZXQgcnVsZSBpbiBmaWVsZC5ydWxlcykge1xyXG4gICAgICAgICAgICBmaWVsZC5jbGFzc0xpc3QuYWRkKCdpcy1ub3QtdmFsaWRhdGVkJyk7XHJcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZVZhbGlkYXRpb25Nc2coXHJcbiAgICAgICAgICAgICAgICBmaWVsZCxcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRpb25Nc2cubXNnW3ZhbGlkYXRpb25Nc2cubGFuZ11cclxuICAgICAgICAgICAgICAgICAgICA/IHZhbGlkYXRpb25Nc2cubXNnW3ZhbGlkYXRpb25Nc2cubGFuZ11bcnVsZV1cclxuICAgICAgICAgICAgICAgICAgICA6IHZhbGlkYXRpb25Nc2cubXNnW3ZhbGlkYXRpb25Nc2cubGFuZy5sYW5nXVtydWxlXVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBwcmVwYXJlVmFsaWRhdGlvbk1zZzogZnVuY3Rpb24gKGZpZWxkLCBtc2cpIHtcclxuICAgICAgICBjb25zdCBlcnJvckJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcclxuICAgICAgICBlcnJvckJveC5pbm5lclRleHQgPSBtc2c7XHJcbiAgICAgICAgZXJyb3JCb3guY2xhc3NMaXN0LmFkZCgnZXJyb3InLCAndmFsaWRhdGlvbl9fZXJyb3InKTtcclxuICAgICAgICB0aGlzLmluc2VydEFmdGVyKGVycm9yQm94LCBmaWVsZCk7XHJcbiAgICB9LFxyXG4gICAgdG9nZ2xlUmVDYXB0Y2hhVmFsaWRhdGlvbk1zZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IHJlQm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhcHRjaGFfY29udGFpbmVyJyk7XHJcblxyXG4gICAgICAgIHRoaXMucHJlcGFyZVZhbGlkYXRpb25Nc2coXHJcbiAgICAgICAgICAgIHJlQm94LFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uTXNnLm1zZ1t2YWxpZGF0aW9uTXNnLmxhbmddXHJcbiAgICAgICAgICAgICAgICA/IHZhbGlkYXRpb25Nc2cubXNnW3ZhbGlkYXRpb25Nc2cubGFuZ10ucmVDYXB0Y2hhXHJcbiAgICAgICAgICAgICAgICA6IHZhbGlkYXRpb25Nc2cubXNnW3ZhbGlkYXRpb25Nc2cubGFuZy5sYW5nXS5yZUNhcHRjaGFcclxuICAgICAgICApO1xyXG4gICAgfSxcclxuICAgIGluc2VydEFmdGVyOiBmdW5jdGlvbiAobmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSkge1xyXG4gICAgICAgIHJlZmVyZW5jZU5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgcmVmZXJlbmNlTm9kZS5uZXh0U2libGluZyk7XHJcbiAgICB9LFxyXG4gICAgcHJlcGFyZVJlQ2FwdGNoYTogZnVuY3Rpb24gKGZvcm0sIGFmdGVyRWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IHJlQ2FwdGNoYUJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHJlQ2FwdGNoYUJveC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ2NhcHRjaGFfY29udGFpbmVyJyk7XHJcbiAgICAgICAgcmVDYXB0Y2hhQm94LmNsYXNzTGlzdC5hZGQoJ2Zvcm1fX3JlY2FwdGNoYScpO1xyXG4gICAgICAgIGZvcm0uaW5zZXJ0QmVmb3JlKHJlQ2FwdGNoYUJveCwgYWZ0ZXJFbGVtZW50KTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubG9hZENhcHRjaGEodGhpcy5jaGVja1JlQ2FwdGNoYSwgdGhpcyksIDEwMDApO1xyXG4gICAgfSxcclxuICAgIGxvYWRDYXB0Y2hhOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNvbnRleHQpIHtcclxuICAgICAgICBncmVjYXB0Y2hhLnJlbmRlcignY2FwdGNoYV9jb250YWluZXInLCB7XHJcbiAgICAgICAgICAgICdzaXRla2V5JzogR0xPQkFMX0tFWVMucmVDYXB0Y2hhLFxyXG4gICAgICAgICAgICAnY2FsbGJhY2snOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3BvbnNlLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIGNoZWNrUmVDYXB0Y2hhOiBmdW5jdGlvbiAocmVzcG9uc2UsIGNvbnRleHQpIHtcclxuICAgICAgICBjb250ZXh0LnJlQ2FwdGNoYVJlc3BvbnNlID0gcmVzcG9uc2U7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgdmFsaWRhdGlvbk1zZyA9IHtcclxuICAgIG1zZzogbnVsbCxcclxuICAgIGxhbmc6IGxhbmcubGFuZyB8fCBsYW5nLFxyXG4gICAgZ2V0VmFsaWRhdGlvbk1zZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICByZXF1ZXN0Lm9wZW4oJ0dFVCcsIFZBTElEQVRJT05fTVNHLCBmYWxzZSk7XHJcbiAgICAgICAgcmVxdWVzdC5zZW5kKG51bGwpO1xyXG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubXNnID0gSlNPTi5wYXJzZShyZXF1ZXN0LnJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbiIsImV4cG9ydCBjb25zdCB2Y2FyZCA9IHtcclxuICAgIGJlZ2luOiAnQkVHSU46VkNBUkRcXHJcXG5WRVJTSU9OOjMuMFxcclxcbkNMQVNTOlBVQkxJQ1xcclxcbicsXHJcbiAgICBlbmQ6ICdFTkQ6VkNBUkRcXHJcXG4nLFxyXG4gICAgZmlsZURhdGE6ICcnLFxyXG4gICAgY29sbGVjdGVkRGF0YToge1xyXG4gICAgfSxcclxuICAgIGdhdGhlckRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBkYXRhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXZjYXJkXScpO1xyXG5cclxuICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGRhdGFzLCBkYXRhID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb2xsZWN0ZWREYXRhW2RhdGEuZGF0YXNldC52Y2FyZF0gPSBkYXRhLmlubmVyVGV4dDtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICBwcmVwYXJlRGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxldCBpID0gMDtcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5jb2xsZWN0ZWREYXRhKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVwcGVyS2V5ID0ga2V5LnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1YlVwcGVyS2V5ID0gdXBwZXJLZXkuc3Vic3RyKDAsIDMpO1xyXG5cclxuICAgICAgICAgICAgc3dpdGNoIChzdWJVcHBlcktleSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAoJ0ZOJyk6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlRGF0YSArPSBgRk46JHt0aGlzLmNvbGxlY3RlZERhdGFbJ2ZuJ119XFxyXFxuYDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgKCdOJyk6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlRGF0YSArPSBgTjoke3RoaXMuY29sbGVjdGVkRGF0YVsnbiddfTs7OztcXHJcXG5gO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZURhdGEgKz0gYE9SRzoke3RoaXMuY29sbGVjdGVkRGF0YVsnbiddfTs7OztcXHJcXG5gO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAoJ0FEUicpIDpcclxuICAgICAgICAgICAgICAgICAgICAhaSA/IHRoaXMuZmlsZURhdGEgKz0gYEFEUjtUWVBFPVdPUks6Ozske3RoaXMuY29sbGVjdGVkRGF0YVsnYWRyLXN0cmVldCddfTske3RoaXMuY29sbGVjdGVkRGF0YVsnYWRyLWNpdHknXX07JHt0aGlzLmNvbGxlY3RlZERhdGFbJ2Fkci1wb3N0YWwnXX07JHt0aGlzLmNvbGxlY3RlZERhdGFbJ2Fkci1jb3VudHJ5J119XFxyXFxuYCA6IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgKCdFTUFJTCcpOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZURhdGEgKz0gYEVNQUlMO1RZUEU9V09SSzoke3RoaXMuY29sbGVjdGVkRGF0YVsnZW1haWwnXX1cXHJcXG5gO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAoJ1RFTCcpOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZURhdGEgKz0gYFRFTDt0eXBlPVdPUks6JHt0aGlzLmNvbGxlY3RlZERhdGFbJ3RlbCddfVxcclxcbmA7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICgnRkFYJyk6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlRGF0YSArPSBgVEVMO3R5cGU9RkFYOiR7dGhpcy5jb2xsZWN0ZWREYXRhWydmYXgnXX1cXHJcXG5gO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmJlZ2luICsgdGhpcy5maWxlRGF0YSArIHRoaXMuZW5kO1xyXG4gICAgfSxcclxuICAgIGJ1aWxkVkNhcmQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmdhdGhlckRhdGEoKTtcclxuICAgICAgICByZXR1cm4gbmV3IEJsb2IoW3RoaXMucHJlcGFyZURhdGEoKV0sIHtcclxuICAgICAgICAgICAgdHlwZTogJ3RleHQvdmNhcmQ7Y2hhcnNldD11dGYtOCdcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICBpbml0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgZG93bmxvYWRCdG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2FyZF9fYnRuJyk7XHJcblxyXG4gICAgICAgIGRvd25sb2FkQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT4ge1xyXG4gICAgICAgICAgICAgICAgc2F2ZUFzKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRWQ2FyZCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY3JlYXRlRmlsZU5hbWUoKX0udmNmYCxcclxuICAgICAgICAgICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgICAgICAgICApfSwgMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgY3JlYXRlRmlsZU5hbWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMuY29sbGVjdGVkRGF0YS5uLnJlcGxhY2UoLyAvZywgJy0nKTtcclxuICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC9cXC4vZywgJycpO1xyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgfVxyXG59O1xyXG4iLCJpbXBvcnQge0NPT0tJRVNfTVNHfSBmcm9tIFwiLi4vY29uc3RhbnRzL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQge2xhbmd9ICBmcm9tIFwiLi9jaGVja0xhbmd1YWdlXCI7XHJcblxyXG5leHBvcnQgY29uc3QgY29va2llcyA9IHtcclxuICAgIGNvb2tpZURhdGE6IG51bGwsXHJcbiAgICBsYW5nOiBsYW5nLmxhbmcgfHwgbGFuZyxcclxuICAgIGJveDogbnVsbCxcclxuICAgIGNyZWF0ZVBvbGljeUFwcHJvdmVkQ29va2llOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgZXhwRGF0ZSA9IG5ldyBEYXRlKG5ldyBEYXRlKCkuc2V0RnVsbFllYXIobmV3IERhdGUoKS5nZXRGdWxsWWVhcigpICsgMSkpO1xyXG4gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGBhY2NlcHRDb29raWVQb2xpY3k9YWNjZXB0ZWQ7IGV4cGlyZXM9JHtleHBEYXRlfWA7XHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpLnJlbW92ZUNoaWxkKHRoaXMuYm94KTtcclxuICAgIH0sXHJcbiAgICBpc1BvbGljeUFwcHJvdmVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgaXNBcHByb3ZlZCA9IHRoaXMuZ2V0Q29va2llKCdhY2NlcHRDb29raWVQb2xpY3knKTtcclxuICAgICAgICBpZiAoIWlzQXBwcm92ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb29raWVzRGF0YSgpO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDb29raWVzQm94KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGdldENvb2tpZTogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICBjb25zdCBjb29raWVNYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKG5hbWUgKyAnPShbXjtdKyknKSk7XHJcblxyXG4gICAgICAgIGlmIChjb29raWVNYXRjaCkgcmV0dXJuIGNvb2tpZU1hdGNoWzFdO1xyXG4gICAgfSxcclxuICAgIGdldENvb2tpZXNEYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHJlcXVlc3Qub3BlbignR0VUJywgQ09PS0lFU19NU0csIGZhbHNlKTtcclxuICAgICAgICByZXF1ZXN0LnNlbmQobnVsbCk7XHJcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5jb29raWVEYXRhID0gSlNPTi5wYXJzZShyZXF1ZXN0LnJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgc2hvd0Nvb2tpZXNCb3g6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBib3guY2xhc3NMaXN0LmFkZCgnY29va2llcycpO1xyXG5cclxuICAgICAgICBjb25zdCBpbnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBpbnMuY2xhc3NMaXN0LmFkZCgnY29va2llc19faW5zJyk7XHJcbiAgICAgICAgaW5zLmlubmVySFRNTCA9IHRoaXMuY29va2llRGF0YVt0aGlzLmxhbmddID8gdGhpcy5jb29raWVEYXRhW3RoaXMubGFuZ10udGV4dCA6IHRoaXMuY29va2llRGF0YVt0aGlzLmxhbmcubGFuZ10udGV4dDtcclxuXHJcbiAgICAgICAgYm94LmFwcGVuZENoaWxkKGlucyk7XHJcblxyXG4gICAgICAgIGNvbnN0IGJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xyXG4gICAgICAgIGJ0bi5jbGFzc0xpc3QuYWRkKCdidG4nLCAnYnRuLS1jb29raWVzJyk7XHJcbiAgICAgICAgYnRuLmlubmVyVGV4dCA9IHRoaXMuY29va2llRGF0YVt0aGlzLmxhbmddID8gdGhpcy5jb29raWVEYXRhW3RoaXMubGFuZ10uYnRuVGV4dCA6IHRoaXMuY29va2llRGF0YVt0aGlzLmxhbmcubGFuZ10uYnRuVGV4dDtcclxuXHJcbiAgICAgICAgaW5zLmFwcGVuZENoaWxkKGJ0bik7XHJcblxyXG4gICAgICAgIHRoaXMuYm94ID0gYm94O1xyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKS5hcHBlbmRDaGlsZChib3gpO1xyXG5cclxuICAgICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlzLmNyZWF0ZVBvbGljeUFwcHJvdmVkQ29va2llKCkpO1xyXG4gICAgfVxyXG59O1xyXG4iLCJpbXBvcnQge2xhbmd9IGZyb20gXCIuL2NoZWNrTGFuZ3VhZ2VcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBkYXRlU2VsZWN0ID0ge1xyXG4gICAgbW9udGhzOiB7XHJcbiAgICAgICAgcGw6IHtcclxuICAgICAgICAgICAgZmlyc3Q6ICdXeWJpZXJ6OicsXHJcbiAgICAgICAgICAgIG1vbnRoczogWydTdHljemXFhCcsICdMdXR5JywgJ01hcnplYycsICdLd2llY2llxYQnLCAnTWFqJywgJ0N6ZXJ3aWVjJywgJ0xpcGllYycsICdTaWVycGllxYQnLCAnV3J6ZXNpZcWEJywgJ1Bhxbpkemllcm5paycsICdMaXN0b3BhZCcsICdHcnVkemllxYQnXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGU6IHtcclxuICAgICAgICAgICAgZmlyc3Q6ICdXw6RobGVuOicsXHJcbiAgICAgICAgICAgIG1vbnRoczogWydKYW51YXInLCAnRmVicnVhcicsICdNw6RyeicsICdBcHJpbCcsICdNYWknLCAnSnVuaScsICdKdWxpJywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2t0b2JlcicsICdOb3ZlbWJlcicsICdEZXplbWJlciddXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGluaXQ6IGZ1bmN0aW9uIChzZWxlY3QsIG1vbnRocyA9IDEyKSB7XHJcbiAgICAgICAgY29uc3QgaW5pdGlhbFZhbHVlID0gdGhpcy5nZXRJbml0aWFsVmFsdWUoc2VsZWN0KTtcclxuXHJcbiAgICAgICAgbGV0IHllYXIgPSB0aGlzLmdldEN1cnJlbnREYXRlKCkuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICBsZXQgbW9udGggPSB0aGlzLmdldEN1cnJlbnREYXRlKCkuZ2V0TW9udGgoKTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVwYXJlT3B0aW9uKHRoaXMubW9udGhzW2xhbmcubGFuZ10uZmlyc3QsICcwJywgc2VsZWN0KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vbnRoczsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBgJHt0aGlzLmdldFllYXIoeWVhcil9LSR7dGhpcy5nZXRUd29EaWdpdHNNb250aChtb250aCl9YDtcclxuICAgICAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMucHJlcGFyZVRleHQobW9udGgsIHllYXIpO1xyXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVPcHRpb24odGV4dCwgZGF0YSwgc2VsZWN0KTtcclxuICAgICAgICAgICAgaWYgKG1vbnRoID09PSAxMSkge1xyXG4gICAgICAgICAgICAgICAgbW9udGggPSAwO1xyXG4gICAgICAgICAgICAgICAgeWVhcisrO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbW9udGgrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3Qub3B0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0Lm9wdGlvbnNbaV0udmFsdWUgPT09IGluaXRpYWxWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0Lm9wdGlvbnNbaV0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldEluaXRpYWxWYWx1ZShzZWxlY3QpO1xyXG4gICAgfSxcclxuICAgIGdldEN1cnJlbnREYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCk7XHJcbiAgICB9LFxyXG4gICAgZ2V0WWVhcjogZnVuY3Rpb24gKGRhdGUpIHtcclxuICAgICAgICByZXR1cm4gZGF0ZS50b1N0cmluZygpO1xyXG4gICAgfSxcclxuICAgIGdldFR3b0RpZ2l0c01vbnRoOiBmdW5jdGlvbiAoZGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IG1vbnRoID0gKGRhdGUgKyAxKS50b1N0cmluZygpO1xyXG4gICAgICAgIHJldHVybiBtb250aC5sZW5ndGggPT09IDEgPyAwICsgbW9udGggOiBtb250aDtcclxuICAgIH0sXHJcbiAgICBwcmVwYXJlT3B0aW9uOiBmdW5jdGlvbiAodGV4dCwgdmFsdWUsIHNlbGVjdCkge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xyXG4gICAgICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgdmFsdWUpO1xyXG4gICAgICAgIG9wdGlvbi5pbm5lclRleHQgPSB0ZXh0O1xyXG4gICAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pO1xyXG4gICAgfSxcclxuICAgIHByZXBhcmVUZXh0OiBmdW5jdGlvbiAobW9udGgsIHllYXIpIHtcclxuICAgICAgICBjb25zdCBtb250aE5hbWUgPSB0aGlzLmdldE5hbWVPZk1vbnRoKG1vbnRoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGAke21vbnRoTmFtZX0gJHt5ZWFyfWBcclxuICAgIH0sXHJcbiAgICBnZXROYW1lT2ZNb250aDogZnVuY3Rpb24gKG1vbnRoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGhzW2xhbmcubGFuZ10ubW9udGhzW21vbnRoXVxyXG4gICAgfSxcclxuICAgIHNldEluaXRpYWxWYWx1ZTogZnVuY3Rpb24gKHNlbGVjdCkge1xyXG4gICAgICAgIHNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oc2VsZWN0LmdldEF0dHJpYnV0ZSgnaWQnKSwgc2VsZWN0LnZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgfSxcclxuICAgIGdldEluaXRpYWxWYWx1ZTogZnVuY3Rpb24gKHNlbGVjdCkge1xyXG4gICAgICAgIHJldHVybiBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHNlbGVjdC5nZXRBdHRyaWJ1dGUoJ2lkJykpO1xyXG4gICAgfVxyXG59O1xyXG4iLCJpbXBvcnQge2RhdGFCb3h9IGZyb20gXCIuLi9mdW5jdGlvbnMvZGF0YS1ib3hcIjtcclxuaW1wb3J0IHttb2JpbGVNZW51fSBmcm9tIFwiLi4vZnVuY3Rpb25zL25hdlwiO1xyXG5pbXBvcnQge3RvZ2dsZUxvZ2luUGFzc3dvcmR9IGZyb20gXCIuLi9mdW5jdGlvbnMvbG9naW5cIjtcclxuaW1wb3J0IHtzZWFyY2h9IGZyb20gXCIuLi9mdW5jdGlvbnMvc2VhcmNoXCI7XHJcbmltcG9ydCB7dHJ1bmNhdGVUZXh0fSBmcm9tIFwiLi4vZnVuY3Rpb25zL3RydW5jYXRlXCI7XHJcbmltcG9ydCB7c2hhcmV9IGZyb20gXCIuLi9mdW5jdGlvbnMvc2hhcmVcIjtcclxuaW1wb3J0IHt2YWxpZGF0aW9uLCB2YWxpZGF0aW9uTXNnfSBmcm9tIFwiLi4vZnVuY3Rpb25zL3ZhbGlkYXRpb25cIjtcclxuaW1wb3J0IHt2Y2FyZH0gZnJvbSBcIi4uL2Z1bmN0aW9ucy92Q2FyZFwiO1xyXG5pbXBvcnQge2Nvb2tpZXN9IGZyb20gXCIuLi9mdW5jdGlvbnMvY29va2llc1wiO1xyXG5pbXBvcnQge2xhbmd9IGZyb20gXCIuLi9mdW5jdGlvbnMvY2hlY2tMYW5ndWFnZVwiO1xyXG5pbXBvcnQge3RhYnN9IGZyb20gXCIuLi9mdW5jdGlvbnMvdGFic1wiO1xyXG5pbXBvcnQge2RhdGVTZWxlY3R9IGZyb20gXCIuLi9mdW5jdGlvbnMvZGF0ZVNlbGVjdFwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIENvbXBvbmVudHNMb2FkZXIocGFnZSkge1xyXG4gICAgdGhpcy5wYWdlID0gcGFnZTtcclxuICAgIHRoaXMuY2hlY2tJbml0aWFsaXplZFBhZ2UoKTtcclxufVxyXG5cclxuQ29tcG9uZW50c0xvYWRlci5wcm90b3R5cGUgPSB7XHJcbiAgICBjaGVja0luaXRpYWxpemVkUGFnZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuZW5hYmxlRGVmYXVsdENvbXBvbmVudHMoKTtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMucGFnZSkge1xyXG4gICAgICAgICAgICBjYXNlICdwb2wnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVwb2x5ZmlsZXNDb21wb25lbnRzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaG9tZSc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZUhvbWVDb21wb25lbnRzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnb2ZmZXJzJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlT2ZmZXJzQ29tcG9uZW50cygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ2luLXBhZ2UnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVMb2dpbkNvbXBvbmVudHMoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb21wLXByb2ZpbCc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZUNvbXBhbnlQcm9maWxDb21wb25lbnRzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29tcC1saXN0JzpcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlQ29tcGFueUxpc3RDb21wb25lbnRzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnb2ZmZXInOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVPZmZlckNvbXBvbmVudHMoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdub3RlLXBhZ2UnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVOb3RlUGFnZUNvbXBvbmVudHMoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdub3RlLWxpc3QnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVOb3RlTGlzdENvbXBvbmVudHMoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdldmVudHMtbGlzdCc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZUV2ZW50c0xpc3RDb21wb25lbnRzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZXZlbnQnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVFdmVudFBhZ2VDb21wb25lbnRzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncmVwb3J0LWxpc3QnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVSZXBvcnRMaXN0Q29tcG9uZW50cygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlcG9ydC1wYWdlJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlUmVwb3J0UGFnZUNvbXBvbmVudHMoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjZXJ0aWZpY2F0ZSc6XHJcbiAgICAgICAgICAgICAgICAvL2dlbmVyYXRlLnBkZigpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oJ29ubHkgZGVmYXVsdCBjb21wb25lbnRzJylcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZW5hYmxlRGVmYXVsdENvbXBvbmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBsYW5nLmNoZWNrTGFuZ3VhZ2UoKTtcclxuICAgICAgICBtb2JpbGVNZW51LmluaXQoKTtcclxuICAgICAgICBjb29raWVzLmlzUG9saWN5QXBwcm92ZWQoKTtcclxuXHJcbiAgICAgICAgY29uc3QgZm9ybXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdmb3JtLnZhbGlkYXRlJyk7XHJcblxyXG4gICAgICAgIGlmIChmb3Jtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbk1zZy5nZXRWYWxpZGF0aW9uTXNnKCk7XHJcbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZm9ybXMsIGZvcm0gPT4gdmFsaWRhdGlvbi52YWxpZGF0ZUZvcm0oZm9ybSkpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBlbmFibGVIb21lQ29tcG9uZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHNlYXJjaC5idWlsZCgpO1xyXG5cclxuICAgICAgICBjb25zdCBldmVudHNUeHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZXZlbnRfX3R4dCcpO1xyXG4gICAgICAgIGlmIChldmVudHNUeHQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZXZlbnRzVHh0LCBlbCA9PiB0cnVuY2F0ZVRleHQoZWwsIDIwMCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgbm90ZXNUeHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXJ0aWNsZS1ib3hfX3R4dCBwJyk7XHJcbiAgICAgICAgaWYgKG5vdGVzVHh0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKG5vdGVzVHh0LCBlbCA9PiB0cnVuY2F0ZVRleHQoZWwsIDIwMCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZXZlbnRCb3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5ldmVudCcpO1xyXG4gICAgICAgIGNvbnN0IGhyQm94ZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaHItYm94Jyk7XHJcbiAgICAgICAgY29uc3Qgb2ZmZXJCb3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5vZmZlci1ib3gnKTtcclxuXHJcbiAgICAgICAgZGF0YUJveC5jaGFuZ2VIZWlnaHRPZkJveGVzKGV2ZW50Qm94ZXMsIGhyQm94ZXMsIG9mZmVyQm94ZXMpO1xyXG4gICAgfSxcclxuICAgIGVuYWJsZUNvbXBhbnlQcm9maWxDb21wb25lbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgc2hhcmUuaW5pdCgpO1xyXG4gICAgICAgIHZjYXJkLmluaXQoKTtcclxuICAgIH0sXHJcbiAgICBlbmFibGVPZmZlckNvbXBvbmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBzaGFyZS5pbml0KCk7XHJcbiAgICB9LFxyXG4gICAgZW5hYmxlTG9naW5Db21wb25lbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdG9nZ2xlTG9naW5QYXNzd29yZCgpO1xyXG4gICAgfSxcclxuICAgIGVuYWJsZU9mZmVyc0NvbXBvbmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBzZWFyY2guYnVpbGQoKTtcclxuICAgIH0sXHJcbiAgICBlbmFibGVDb21wYW55TGlzdENvbXBvbmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBzZWFyY2guYnVpbGQoKTtcclxuICAgIH0sXHJcbiAgICBlbmFibGVOb3RlUGFnZUNvbXBvbmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBzaGFyZS5pbml0KCk7XHJcbiAgICAgICAgY29uc3QgZXZlbnRCb3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5ldmVudCcpO1xyXG4gICAgICAgIGlmIChldmVudEJveGVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4gZGF0YUJveC5zZXRIZWlnaHRPZkJveChldmVudEJveGVzKSk7XHJcbiAgICAgICAgICAgIGRhdGFCb3guc2V0SGVpZ2h0T2ZCb3goZXZlbnRCb3hlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGVuYWJsZU5vdGVMaXN0Q29tcG9uZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHNlYXJjaC5idWlsZCgpO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50Qm94ZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZXZlbnQnKTtcclxuICAgICAgICBpZiAoZXZlbnRCb3hlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IGRhdGFCb3guc2V0SGVpZ2h0T2ZCb3goZXZlbnRCb3hlcykpO1xyXG4gICAgICAgICAgICBkYXRhQm94LnNldEhlaWdodE9mQm94KGV2ZW50Qm94ZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBlbmFibGVFdmVudFBhZ2VDb21wb25lbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgc2hhcmUuaW5pdCgpO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50VHh0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmV2ZW50X190eHQnKTtcclxuICAgICAgICBpZiAoZXZlbnRUeHQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZXZlbnRUeHQsIGVsID0+IHRydW5jYXRlVGV4dChlbCwgMjAwKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBldmVudEJveGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmV2ZW50Jyk7XHJcbiAgICAgICAgaWYgKGV2ZW50Qm94ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiBkYXRhQm94LnNldEhlaWdodE9mQm94KGV2ZW50Qm94ZXMpKTtcclxuICAgICAgICAgICAgZGF0YUJveC5zZXRIZWlnaHRPZkJveChldmVudEJveGVzKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZW5hYmxlRXZlbnRzTGlzdENvbXBvbmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBldmVudHNUYWJzID0gT2JqZWN0LmNyZWF0ZSh0YWJzKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29tcGFuaWVzRXZlbnRCb3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXRhYj1cImNvbXBhbmllcy1ldmVudHNcIl0gLmV2ZW50Jyk7XHJcbiAgICAgICAgY29uc3QgYWhrRXZlbnRCb3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXRhYj1cImFoay1ldmVudHNcIl0gLmV2ZW50Jyk7XHJcblxyXG4gICAgICAgIGV2ZW50c1RhYnMuaW5pdChcclxuICAgICAgICAgICAgJ2V2ZW50cy10YWJzJyxcclxuICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgICAgKCkgPT4gZGF0YUJveC5jaGFuZ2VIZWlnaHRPZkJveGVzKGNvbXBhbmllc0V2ZW50Qm94ZXMsIGFoa0V2ZW50Qm94ZXMpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgc2VhcmNoLmJ1aWxkKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGV2ZW50VHh0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmV2ZW50X190eHQnKTtcclxuICAgICAgICBpZiAoZXZlbnRUeHQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZXZlbnRUeHQsIGVsID0+IHRydW5jYXRlVGV4dChlbCwgMjAwKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkYXRhQm94LmNoYW5nZUhlaWdodE9mQm94ZXMoY29tcGFuaWVzRXZlbnRCb3hlcywgYWhrRXZlbnRCb3hlcyk7XHJcblxyXG4gICAgICAgIGNvbnN0IGFoa1NlbGVjdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNhaGstZXZlbnRzLWRhdGUnKTtcclxuICAgICAgICBjb25zdCBjb21wYW5pZXNTZWxlY3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjY29tcGFuaWVzLWV2ZW50cy1kYXRlJyk7XHJcblxyXG4gICAgICAgIGRhdGVTZWxlY3QuaW5pdChhaGtTZWxlY3QpO1xyXG4gICAgICAgIGRhdGVTZWxlY3QuaW5pdChjb21wYW5pZXNTZWxlY3QpO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS10YWI9XCJhaGstZXZlbnRzXCJdJykuY2xhc3NMaXN0LnJlbW92ZSgnaXMtYWN0aXZlJyk7XHJcbiAgICB9LFxyXG4gICAgZW5hYmxlUmVwb3J0TGlzdENvbXBvbmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBzZWFyY2guYnVpbGQoKTtcclxuICAgIH0sXHJcbiAgICBlbmFibGVSZXBvcnRQYWdlQ29tcG9uZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHNoYXJlLmluaXQoKTtcclxuICAgIH0sXHJcbiAgICBlbmFibGVwb2x5ZmlsZXNDb21wb25lbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcG9seWZpbGVzKCk7XHJcbiAgICB9XHJcbn07XHJcbiIsIi8vaW1wb3J0IFwiYmFiZWwtcG9seWZpbGxcIjtcclxuaW1wb3J0IHtDb21wb25lbnRzTG9hZGVyfSBmcm9tICcuL2hlbHBlcnMvY29tcG9uZW50cy1sb2FkZXInO1xyXG5cclxuZnVuY3Rpb24gQXBwKCkge1xyXG4gICAgY29uc3QgcGFnZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21haW4nKS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGFnZScpO1xyXG4gICAgbmV3IENvbXBvbmVudHNMb2FkZXIocGFnZSk7XHJcbn1cclxuXHJcbm5ldyBBcHAoKTtcclxuIl0sIm5hbWVzIjpbImRhdGFCb3giLCJib3hlcyIsInByb3RvdHlwZSIsImZvckVhY2giLCJjYWxsIiwiYm94Iiwic3R5bGUiLCJoZWlnaHQiLCJ3aW5kb3ciLCJpbm5lcldpZHRoIiwiaGVpZ2h0c0FyciIsInB1c2giLCJvZmZzZXRIZWlnaHQiLCJtYXgiLCJyZWR1Y2UiLCJwcmV2IiwiY3VyciIsImFyZ3MiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJpIiwiYWRkRXZlbnRMaXN0ZW5lciIsInNldEhlaWdodE9mQm94IiwibW9iaWxlTWVudSIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsIm9uUmVzaXplIiwiY2hhbmdlUG9zaXRpb24iLCJjbG9zZUJ5QmciLCJidG4iLCJpc01lbnVTaG93biIsImhpZGUiLCJzaG93IiwiaGVhZGVyIiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlIiwic2Nyb2xsWSIsInRvcCIsImUiLCJ0YXJnZXQiLCJjb250YWlucyIsInRvZ2dsZUxvZ2luUGFzc3dvcmQiLCJsaW5rIiwiY2xpZW50IiwiYm94Q2xpZW50IiwiUFJPVklOQ0VTX1VSTCIsIlZBTElEQVRJT05fTVNHIiwiQ09PS0lFU19NU0ciLCJHTE9CQUxfS0VZUyIsInRhYnMiLCJ3cmFwQ2xhc3MiLCJhcnJvd3MiLCJjYWxsYmFjayIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJ0YWJzQW1vdW50IiwiZmlyc3RUYWIiLCJzZXRGaXJzdFRhYiIsInNldEFycm93cyIsInNldEluZGV4IiwidG9nZ2xlQXJyb3dzIiwidGFiIiwib25DbGljayIsImFjdGl2YXRlVGFic0Fycm93cyIsImxlZnRBcnJvdyIsInJpZ2h0QXJyb3ciLCJ0YWJGb3IiLCJkYXRhc2V0IiwidGFiQ29udGVudCIsImZpbmRQcm9wZXJUYWJDb250ZW50IiwiaGlkZUFsbFRhYnNDb250ZW50IiwiZGVhY3RpdmF0ZVRhYnMiLCJhdHRyIiwiYXJyb3ciLCJvbkNsaWNrVGFiQXJyb3ciLCJtb3ZlVGFicyIsImRpciIsImN1cnJlbnRJbmRleCIsInVwZGF0ZUN1cnJlbnRJbmRleCIsImNoYW5nZVRhYnNQb3NpdGlvbiIsIm1hcmdpbkxlZnQiLCJhY3RpdmVUYWIiLCJpbmRleE9mIiwic2VhcmNoIiwiZ2V0UHJvdmluY2VzIiwic2V0U2VsZWN0ZWRDb3VudHJpZXMiLCJpbml0RGVmYXVsdFByb3ZpbmNlcyIsInNldFNlbGVjdGVkUHJvdmluY2VzIiwiaW5pdCIsInJlcXVlc3QiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJzZW5kIiwic3RhdHVzIiwicHJvdmluY2VzIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2UiLCJwcmVwYXJlQ291bnRyeVNlbGVjdG9ycyIsImVsZW1lbnQiLCJmb3JtIiwiZmluZENsb3Nlc3RFbGVtZW50QnlDbGFzcyIsInByb3ZpbmNlc1NlbGVjdG9yIiwic2VsZWN0ZWRDb3VudHJ5Iiwic2Vzc2lvblN0b3JhZ2UiLCJnZXRJdGVtIiwidmFsdWUiLCJvcHRpb25zIiwic2VsZWN0ZWQiLCJyZW1vdmVQcmV2T3B0aW9ucyIsImFkZE5ld09wdGlvbnMiLCJjb3VudHJ5U2VsZWN0Iiwic2VsZWN0b3IiLCJvbkNoYW5nZUNvdW50cnkiLCJwcm92aW5jZXNTZWxlY3QiLCJvbkNoYW5nZVByb3ZpbmNlIiwic3RvcmVTZWxlY3RlZENvdW50cnkiLCJkaXNhYmxlZCIsInN0b3JlU2VsZWN0ZWRQcm92aWNlIiwiZWwiLCJjbHMiLCJwYXJlbnRFbGVtZW50IiwiY291bnRyeSIsInByb3ZpbmNlIiwib3B0aW9uIiwiY3JlYXRlRWxlbWVudCIsImlubmVyVGV4dCIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiY3VycmVudE9wdGlvbnMiLCJpdGVtIiwicmVtb3ZlQ2hpbGQiLCJjdXJyZW50VGFiIiwic2V0SXRlbSIsInNlbGVjdHMiLCJzZWxlY3QiLCJkYXRhVGFiIiwic2VsZWN0ZWRQcm92aW5jZSIsInRydW5jYXRlVGV4dCIsImNoYXJzIiwidGV4dCIsInN1YnN0ciIsInNoYXJlIiwibG9jYXRpb24iLCJocmVmIiwiYnRucyIsInByZXZlbnREZWZhdWx0IiwidHlwZSIsInVybCIsImdldEF0dHJpYnV0ZSIsInNoYXJlT25GYWNlYm9vayIsInNoYXJlT25Ud2l0dGVyIiwic2hhcmVPbkxpbmtlZEluIiwic2hhcmVPblhpbmciLCJFcnJvciIsImVuY29kZVVSSUNvbXBvbmVudCIsInBhcmFtcyIsIndpZHRoIiwidGl0bGUiLCJsYW5nIiwibmF2aWdhdG9yIiwibGFuZ3VhZ2UiLCJzbGljZSIsInZhbGlkYXRpb24iLCJyZSIsInRlc3QiLCJwYXNzRmllbGQiLCJmaWVsZHMiLCJmaW5kRmllbGRzIiwicmVDYXB0Y2hhIiwicmVjYXB0Y2hhIiwicHJlcGFyZVJlQ2FwdGNoYSIsImZpZWxkIiwiYWRkUnVsZXNUb0ZpZWxkIiwidmFsaWRhdGVGaWVsZCIsImVyIiwicmVzdWx0IiwiY2hlY2tSdWxlcyIsInJlQ2FwdGNoYVJlc3BvbnNlIiwidG9nZ2xlUmVDYXB0Y2hhVmFsaWRhdGlvbk1zZyIsInJ1bGVzIiwicmVwbGFjZSIsInNwbGl0IiwidmFsaWRhdGVkIiwicnVsZSIsImZvcm1WYWxpZGF0aW9uUmVzdWx0cyIsInZhbGlkYXRpb25SZXN1bHRzIiwidG9nZ2xlVmFsaWRhdGlvbk1zZyIsInByZXBhcmVWYWxpZGF0aW9uTXNnIiwidmFsaWRhdGlvbk1zZyIsIm1zZyIsImVycm9yQm94IiwiaW5zZXJ0QWZ0ZXIiLCJyZUJveCIsImdldEVsZW1lbnRCeUlkIiwibmV3Tm9kZSIsInJlZmVyZW5jZU5vZGUiLCJwYXJlbnROb2RlIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJhZnRlckVsZW1lbnQiLCJyZUNhcHRjaGFCb3giLCJsb2FkQ2FwdGNoYSIsImNoZWNrUmVDYXB0Y2hhIiwiY29udGV4dCIsInJlbmRlciIsInZjYXJkIiwiZGF0YXMiLCJkYXRhIiwiY29sbGVjdGVkRGF0YSIsImtleSIsInVwcGVyS2V5IiwidG9VcHBlckNhc2UiLCJzdWJVcHBlcktleSIsImZpbGVEYXRhIiwiYmVnaW4iLCJlbmQiLCJnYXRoZXJEYXRhIiwiQmxvYiIsInByZXBhcmVEYXRhIiwiZG93bmxvYWRCdG4iLCJidWlsZFZDYXJkIiwiY3JlYXRlRmlsZU5hbWUiLCJuYW1lIiwibiIsImNvb2tpZXMiLCJleHBEYXRlIiwiRGF0ZSIsInNldEZ1bGxZZWFyIiwiZ2V0RnVsbFllYXIiLCJjb29raWUiLCJpc0FwcHJvdmVkIiwiZ2V0Q29va2llIiwiZ2V0Q29va2llc0RhdGEiLCJzaG93Q29va2llc0JveCIsImNvb2tpZU1hdGNoIiwibWF0Y2giLCJSZWdFeHAiLCJjb29raWVEYXRhIiwiaW5zIiwiaW5uZXJIVE1MIiwiYnRuVGV4dCIsImNyZWF0ZVBvbGljeUFwcHJvdmVkQ29va2llIiwiZGF0ZVNlbGVjdCIsIm1vbnRocyIsImluaXRpYWxWYWx1ZSIsImdldEluaXRpYWxWYWx1ZSIsInllYXIiLCJnZXRDdXJyZW50RGF0ZSIsIm1vbnRoIiwiZ2V0TW9udGgiLCJwcmVwYXJlT3B0aW9uIiwiZmlyc3QiLCJnZXRZZWFyIiwiZ2V0VHdvRGlnaXRzTW9udGgiLCJwcmVwYXJlVGV4dCIsInNldEluaXRpYWxWYWx1ZSIsImRhdGUiLCJ0b1N0cmluZyIsIm1vbnRoTmFtZSIsImdldE5hbWVPZk1vbnRoIiwiQ29tcG9uZW50c0xvYWRlciIsInBhZ2UiLCJjaGVja0luaXRpYWxpemVkUGFnZSIsImVuYWJsZURlZmF1bHRDb21wb25lbnRzIiwiZW5hYmxlcG9seWZpbGVzQ29tcG9uZW50cyIsImVuYWJsZUhvbWVDb21wb25lbnRzIiwiZW5hYmxlT2ZmZXJzQ29tcG9uZW50cyIsImVuYWJsZUxvZ2luQ29tcG9uZW50cyIsImVuYWJsZUNvbXBhbnlQcm9maWxDb21wb25lbnRzIiwiZW5hYmxlQ29tcGFueUxpc3RDb21wb25lbnRzIiwiZW5hYmxlT2ZmZXJDb21wb25lbnRzIiwiZW5hYmxlTm90ZVBhZ2VDb21wb25lbnRzIiwiZW5hYmxlTm90ZUxpc3RDb21wb25lbnRzIiwiZW5hYmxlRXZlbnRzTGlzdENvbXBvbmVudHMiLCJlbmFibGVFdmVudFBhZ2VDb21wb25lbnRzIiwiZW5hYmxlUmVwb3J0TGlzdENvbXBvbmVudHMiLCJlbmFibGVSZXBvcnRQYWdlQ29tcG9uZW50cyIsImluZm8iLCJjaGVja0xhbmd1YWdlIiwiaXNQb2xpY3lBcHByb3ZlZCIsImZvcm1zIiwiZ2V0VmFsaWRhdGlvbk1zZyIsInZhbGlkYXRlRm9ybSIsImJ1aWxkIiwiZXZlbnRzVHh0Iiwibm90ZXNUeHQiLCJldmVudEJveGVzIiwiaHJCb3hlcyIsIm9mZmVyQm94ZXMiLCJjaGFuZ2VIZWlnaHRPZkJveGVzIiwiZXZlbnRUeHQiLCJldmVudHNUYWJzIiwiT2JqZWN0IiwiY3JlYXRlIiwiY29tcGFuaWVzRXZlbnRCb3hlcyIsImFoa0V2ZW50Qm94ZXMiLCJhaGtTZWxlY3QiLCJjb21wYW5pZXNTZWxlY3QiLCJBcHAiXSwibWFwcGluZ3MiOiI7OztBQUFPLE1BQU1BLFVBQVU7b0JBQ0gsVUFBVUMsS0FBVixFQUFpQjtjQUN2QkMsU0FBTixDQUFnQkMsT0FBaEIsQ0FBd0JDLElBQXhCLENBQTZCSCxLQUE3QixFQUFvQ0ksT0FBT0EsSUFBSUMsS0FBSixDQUFVQyxNQUFWLEdBQW1CLElBQTlEOztZQUVJQyxPQUFPQyxVQUFQLEdBQW9CLEdBQXhCLEVBQTZCOzs7O1lBSXpCQyxhQUFhLEVBQWpCO2NBQ01SLFNBQU4sQ0FBZ0JDLE9BQWhCLENBQXdCQyxJQUF4QixDQUE2QkgsS0FBN0IsRUFBb0NJLE9BQU9LLFdBQVdDLElBQVgsQ0FBZ0JOLElBQUlPLFlBQXBCLENBQTNDOztjQUVNQyxNQUFNSCxXQUFXSSxNQUFYLENBQWtCLENBQUNDLElBQUQsRUFBT0MsSUFBUCxLQUFnQkQsT0FBT0MsSUFBUCxHQUFjRCxJQUFkLEdBQXFCQyxJQUF2RCxDQUFaO2NBQ01kLFNBQU4sQ0FBZ0JDLE9BQWhCLENBQXdCQyxJQUF4QixDQUE2QkgsS0FBN0IsRUFBb0NJLE9BQU9BLElBQUlDLEtBQUosQ0FBVUMsTUFBVixHQUFvQixHQUFFTSxHQUFJLElBQXJFO0tBWmU7eUJBY0UsWUFBWTtjQUN2QkksT0FBT0MsVUFBVUMsTUFBdkI7YUFDSyxJQUFJQyxJQUFJLENBQWIsRUFBZ0JBLElBQUlILElBQXBCLEVBQTBCRyxHQUExQixFQUErQjtnQkFDdkJGLFVBQVVFLENBQVYsRUFBYUQsTUFBakIsRUFBeUI7dUJBQ2RFLGdCQUFQ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"}