{"version":3,"file":"widget.js","sources":["../utils/utils.js","../utils/ajax.js","../../config.js","../utils/local-data.js","../utils/client-id.js","widget.js"],"sourcesContent":["const Utils = {\n isTouch: !!(('ontouchstart' in window) || (window.DocumentTouch && document instanceof window.DocumentTouch)),\n isIOS() {\n const ua = window.navigator.userAgent;\n const ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n return ipad || iphone || ipod;\n },\n isIphone() {\n const ua = window.navigator.userAgent;\n const ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n return iphone;\n },\n guid() {\n /* eslint no-bitwise: [\"error\", { \"allow\": [\"~\", \">>\", \"&\", \"^\", \"|\"] }] */\n /* eslint no-mixed-operators: [\"allow\"] */\n if (window.crypto && window.Uint8Array) {\n return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>\n (c ^ window.crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)\n );\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = Math.random() * 16 | 0;\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n },\n nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n },\n nextFrame(callback) {\n if (window.requestAnimationFrame) return window.requestAnimationFrame(callback);\n else if (window.webkitRequestAnimationFrame) return window.webkitRequestAnimationFrame(callback);\n return window.setTimeout(callback, 1000 / 60);\n },\n now() {\n return Date.now();\n },\n extend(...args) {\n const to = Object(args[0]);\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null) {\n const keysArray = Object.keys(Object(nextSource));\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (typeof to[nextKey] === 'object' && typeof nextSource[nextKey] === 'object') {\n Utils.extend(to[nextKey], nextSource[nextKey]);\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n },\n each(obj, callback) {\n // Check it's iterable\n // TODO: Should probably raise a value error here\n if (typeof obj !== 'object') return;\n // Don't bother continuing without a callback\n if (!callback) return;\n if (Array.isArray(obj)) {\n // Array\n for (let i = 0; i < obj.length; i += 1) {\n // If callback returns false\n if (callback(i, obj[i]) === false) {\n // Break out of the loop\n return;\n }\n }\n } else {\n // Object\n for (let prop in obj) {\n // Check the propertie belongs to the object\n // not it's prototype\n if (obj.hasOwnProperty(prop)) {\n // If the callback returns false\n if (callback(prop, obj[prop]) === false) {\n // Break out of the loop;\n return;\n }\n }\n }\n }\n },\n serializeObject(obj, parents = []) {\n if (typeof obj === 'string') return obj;\n const resultArray = [];\n const separator = '&';\n let newParents;\n function varName(name) {\n if (parents.length > 0) {\n let parentParts = '';\n for (let j = 0; j < parents.length; j += 1) {\n if (j === 0) parentParts += parents[j];\n else parentParts += `[${encodeURIComponent(parents[j])}]`;\n }\n return `${parentParts}[${encodeURIComponent(name)}]`;\n }\n return encodeURIComponent(name);\n }\n function varValue(value) {\n return encodeURIComponent(value);\n }\n for (let prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n let toPush;\n if (Array.isArray(obj[prop])) {\n toPush = [];\n for (let i = 0; i < obj[prop].length; i += 1) {\n if (!Array.isArray(obj[prop][i]) && typeof obj[prop][i] === 'object') {\n newParents = parents.slice();\n newParents.push(prop);\n newParents.push(String(i));\n toPush.push(Utils.serializeObject(obj[prop][i], newParents));\n } else {\n toPush.push(`${varName(prop)}[]=${varValue(obj[prop][i])}`);\n }\n }\n if (toPush.length > 0) resultArray.push(toPush.join(separator));\n } else if (obj[prop] === null || obj[prop] === '') {\n resultArray.push(`${varName(prop)}=`);\n } else if (typeof obj[prop] === 'object') {\n // Object, convert to named array\n newParents = parents.slice();\n newParents.push(prop);\n toPush = Utils.serializeObject(obj[prop], newParents);\n if (toPush !== '') resultArray.push(toPush);\n } else if (typeof obj[prop] !== 'undefined' && obj[prop] !== '') {\n // Should be string or plain value\n resultArray.push(`${varName(prop)}=${varValue(obj[prop])}`);\n } else if (obj[prop] === '') resultArray.push(varName(prop));\n }\n }\n return resultArray.join(separator);\n },\n\n};\n\nexport default Utils;\n","import Utils from './utils';\n\n// JSONP Requests\nlet jsonpRequests = 0;\n\n// Ajax\nfunction request(userOptions) {\n const defaults = {\n method: 'GET',\n data: false,\n async: true,\n cache: true,\n user: '',\n password: '',\n headers: {},\n xhrFields: {},\n statusCode: {},\n processData: true,\n dataType: 'text',\n contentType: 'application/x-www-form-urlencoded',\n timeout: 0,\n };\n const options = Utils.extend({}, defaults, userOptions);\n\n // For jQuery guys\n if (options.type) options.method = options.type;\n\n // Function to run XHR callbacks and events\n function fireAjaxCallback(callbackName, ...args) {\n // if (eventName) $(document).trigger(eventName, eventData);\n if (callbackName) {\n // Options callback\n if (options[callbackName]) options[callbackName](...args);\n }\n }\n\n // Default URL\n if (!options.url) {\n options.url = window.location.toString();\n }\n // Parameters Prefix\n let paramsPrefix = options.url.indexOf('?') >= 0 ? '&' : '?';\n\n // UC method\n const method = options.method.toUpperCase();\n\n // Data to modify GET URL\n if ((method === 'GET' || method === 'HEAD' || method === 'OPTIONS' || method === 'DELETE') && options.data) {\n let stringData;\n if (typeof options.data === 'string') {\n // Should be key=value string\n if (options.data.indexOf('?') >= 0) stringData = options.data.split('?')[1];\n else stringData = options.data;\n } else {\n // Should be key=value object\n stringData = Utils.serializeObject(options.data);\n }\n if (stringData.length) {\n options.url += paramsPrefix + stringData;\n if (paramsPrefix === '?') paramsPrefix = '&';\n }\n }\n // JSONP\n if (options.dataType === 'json' && options.url.indexOf('callback=') >= 0) {\n const callbackName = `f7jsonp_${Date.now() + ((jsonpRequests += 1))}`;\n let abortTimeout;\n const callbackSplit = options.url.split('callback=');\n let requestUrl = `${callbackSplit[0]}callback=${callbackName}`;\n if (callbackSplit[1].indexOf('&') >= 0) {\n const addVars = callbackSplit[1].split('&').filter(el => el.indexOf('=') > 0).join('&');\n if (addVars.length > 0) requestUrl += `&${addVars}`;\n }\n\n // Create script\n let script = document.createElement('script');\n script.type = 'text/javascript';\n script.onerror = function onerror() {\n clearTimeout(abortTimeout);\n fireAjaxCallback('error', null, 'scripterror');\n fireAjaxCallback('complete', null, 'scripterror');\n };\n script.src = requestUrl;\n\n // Handler\n window[callbackName] = function jsonpCallback(data) {\n clearTimeout(abortTimeout);\n fireAjaxCallback('success', data);\n script.parentNode.removeChild(script);\n script = null;\n delete window[callbackName];\n };\n document.querySelector('head').appendChild(script);\n\n if (options.timeout > 0) {\n abortTimeout = setTimeout(() => {\n script.parentNode.removeChild(script);\n script = null;\n fireAjaxCallback('error', null, 'timeout');\n }, options.timeout);\n }\n\n return undefined;\n }\n\n // Cache for GET/HEAD requests\n if (method === 'GET' || method === 'HEAD' || method === 'OPTIONS' || method === 'DELETE') {\n if (options.cache === false) {\n options.url += `${paramsPrefix}_nocache${Date.now()}`;\n }\n }\n\n // Create XHR\n const xhr = new window.XMLHttpRequest();\n\n // Save Request URL\n xhr.requestUrl = options.url;\n xhr.requestParameters = options;\n\n // Open XHR\n xhr.open(method, options.url, options.async, options.user, options.password);\n\n // Create POST Data\n let postData = null;\n\n if ((method === 'POST' || method === 'PUT' || method === 'PATCH') && options.data) {\n if (options.processData) {\n const postDataInstances = [ArrayBuffer, Blob, Document, FormData];\n // Post Data\n if (postDataInstances.indexOf(options.data.constructor) >= 0) {\n postData = options.data;\n } else {\n // POST Headers\n let boundary = `---------------------------${Date.now().toString(16)}`;\n\n if (options.contentType === 'multipart\\/form-data') {\n xhr.setRequestHeader('Content-Type', `multipart\\/form-data; boundary=${boundary}`);\n } else {\n xhr.setRequestHeader('Content-Type', options.contentType);\n }\n postData = '';\n let data = Utils.serializeObject(options.data);\n if (options.contentType === 'multipart\\/form-data') {\n boundary = `---------------------------${Date.now().toString(16)}`;\n data = data.split('&');\n const newData = [];\n for (let i = 0; i < data.length; i += 1) {\n newData.push('Content-Disposition: form-data; name=\"' + data[i].split('=')[0] + '\"\\r\\n\\r\\n' + data[i].split('=')[1] + '\\r\\n');\n }\n postData = `--${boundary}\\r\\n${newData.join(`--${boundary}\\r\\n`)}--${boundary}--\\r\\n`;\n } else {\n postData = data;\n }\n }\n } else {\n postData = options.data;\n }\n }\n\n // Additional headers\n if (options.headers) {\n Utils.each(options.headers, (headerName, headerCallback) => {\n xhr.setRequestHeader(headerName, headerCallback);\n });\n }\n\n // Check for crossDomain\n if (typeof options.crossDomain === 'undefined') {\n options.crossDomain = /^([\\w-]+:)?\\/\\/([^\\/]+)/.test(options.url) && RegExp.$2 !== window.location.host;\n }\n\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n if (options.xhrFields) {\n Utils.each(options.xhrFields, (fieldName, fieldValue) => {\n xhr[fieldName] = fieldValue;\n });\n }\n\n let xhrTimeout;\n // Handle XHR\n xhr.onload = function onload(e) {\n if (xhrTimeout) clearTimeout(xhrTimeout);\n if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 0) {\n let responseData;\n if (options.dataType === 'json') {\n try {\n responseData = JSON.parse(xhr.responseText);\n fireAjaxCallback('success', responseData, xhr.status, xhr);\n } catch (err) {\n fireAjaxCallback('error', xhr, 'parseerror');\n }\n } else {\n responseData = xhr.responseType === 'text' || xhr.responseType === '' ? xhr.responseText : xhr.response;\n fireAjaxCallback('success', responseData, xhr.status, xhr);\n }\n } else {\n fireAjaxCallback('error', xhr, xhr.status);\n }\n if (options.statusCode) {\n if (options.statusCode[xhr.status]) options.statusCode[xhr.status](xhr);\n }\n fireAjaxCallback('complete', xhr, xhr.status);\n };\n\n xhr.onerror = function onerror() {\n if (xhrTimeout) clearTimeout(xhrTimeout);\n fireAjaxCallback('error', xhr, xhr.status);\n fireAjaxCallback('complete', xhr, 'error');\n };\n\n // Ajax start callback\n fireAjaxCallback('start', xhr);\n fireAjaxCallback('beforeSend', xhr);\n\n // Timeout\n if (options.timeout > 0) {\n xhr.onabort = function onabort() {\n if (xhrTimeout) clearTimeout(xhrTimeout);\n };\n xhrTimeout = setTimeout(() => {\n xhr.abort();\n fireAjaxCallback('error', xhr, 'timeout');\n fireAjaxCallback('complete', xhr, 'timeout');\n }, options.timeout);\n }\n\n // Send XHR\n xhr.send(postData);\n\n // Return XHR object\n return xhr;\n}\n\nfunction ajaxShortcut(method, ...args) {\n let url;\n let data;\n let success;\n let error;\n let dataType;\n if (typeof args[1] === 'function') {\n [url, success, error, dataType] = args;\n } else {\n [url, data, success, error, dataType] = args;\n }\n [success, error].forEach((callback) => {\n if (typeof callback === 'string') {\n dataType = callback;\n if (callback === success) success = undefined;\n else error = undefined;\n }\n });\n dataType = dataType || (method === 'getJSON' ? 'json' : undefined);\n return request({\n url,\n method: method === 'post' ? 'POST' : 'GET',\n data,\n success,\n error,\n dataType,\n });\n}\n\nfunction get(...args) {\n args.unshift('get');\n return ajaxShortcut.apply(this, args);\n}\nfunction post(...args) {\n args.unshift('post');\n return ajaxShortcut.apply(this, args);\n}\nfunction getJSON(...args) {\n args.unshift('getJSON');\n return ajaxShortcut.apply(this, args);\n}\n\nexport default { request, get, post, getJSON };\n","const config = {\n};\n\nlet extendConfig = {};\nif (process.env.NODE_ENV === 'production') {\n /* ================================\n PRODUCTION\n ================================ */\n extendConfig = {\n api: 'https://app.letsbrief.com/api',\n socket: 'https://app.letsbrief.com',\n appHost: 'https://widget.letsbrief.com',\n appScript: 'https://widget.letsbrief.com/app/app.min.js',\n fontsPath: 'https://widget.letsbrief.com/fonts',\n filesPath: 'https://brief.imgix.net',\n };\n} else {\n /* ================================\n DEVELOPMENT\n ================================ */\n extendConfig = {\n api: 'http://localhost:7000/api',\n socket: 'http://localhost:7000',\n appHost: 'http://localhost:3000/',\n appScript: 'http://localhost:3000/app/app.js',\n fontsPath: 'http://localhost:3000/fonts',\n filesPath: 'https://brief.imgix.net',\n };\n}\nObject.keys(extendConfig).forEach((key) => {\n config[key] = extendConfig[key];\n});\n\nexport default config;\n","export default {\n set(key, value) {\n let data;\n try {\n data = JSON.parse(window.localStorage.briefWidget || '{}');\n } catch (e) {\n // No ls support or no data stored\n }\n if (data) {\n data[key] = value;\n window.localStorage.briefWidget = JSON.stringify(data);\n }\n return data || {};\n },\n get(key) {\n let data;\n try {\n data = JSON.parse(window.localStorage.briefWidget || '{}');\n } catch (e) {\n // No ls support or no data stored\n }\n if (!data) return undefined;\n return data[key];\n },\n remove(key) {\n let data;\n try {\n data = JSON.parse(window.localStorage.briefWidget || '{}');\n } catch (e) {\n // No ls support or no data stored\n }\n if (data) {\n if (data[key]) {\n data[key] = undefined;\n delete data[key];\n }\n window.localStorage.briefWidget = JSON.stringify(data);\n }\n },\n clear() {\n try {\n window.localStorage.removeItem('briefWidget');\n } catch (e) {\n // No ls support or no data stored\n }\n },\n};\n","import Utils from '../utils/utils';\nimport LocalData from '../utils/local-data';\n\n// User ID\nlet clientId = LocalData.get('clientId');\n\nif (!clientId) {\n clientId = Utils.guid();\n LocalData.set('clientId', clientId);\n}\n\nconst cid = clientId;\n\nexport default cid;\n","import Utils from '../utils/utils';\nimport ajax from '../utils/ajax';\nimport WidgetStyles from './widget.css';\nimport AppStyles from './app.css';\nimport AppContent from './app-content.html';\nimport config from '../../config';\nimport clientId from '../utils/client-id';\nimport LocalData from '../utils/local-data';\n\nlet cid = clientId;\n\nconst eventListeners = {};\n \nconst Widget = {\n emit(...args) {\n const events = args[0].split(' ');\n const data = args.slice(1, args.length);\n events.forEach((eventName) => {\n if (!eventListeners[eventName]) return;\n eventListeners[eventName].forEach((eventCallback) => {\n eventCallback(...data);\n });\n });\n },\n on(events, handler) {\n if (typeof handler !== 'function') return;\n events.split(' ').forEach((event) => {\n if (!eventListeners[event]) eventListeners[event] = [];\n eventListeners[event].push(handler);\n });\n },\n themeColor: '#825ae3',\n fixViewport() {\n let viewport = document.querySelector('meta[name=\"viewport\"]');\n if (!viewport) {\n viewport = document.createElement('meta');\n viewport.setAttribute('name', 'viewport');\n viewport.setAttribute('content', 'initial-scale=1');\n document.querySelector('head').appendChild(viewport);\n return;\n }\n },\n addStyles() {\n const styleEl = document.createElement('style');\n styleEl.innerHTML = WidgetStyles.replace(/\\$themeColor/g, Widget.themeColor).replace(/\\$fontsPath/g, config.fontsPath);\n document.head.appendChild(styleEl);\n },\n addLayout() {\n // iFrame\n Widget.iframe = document.createElement('iframe');\n Widget.iframe.scrolling = 'no';\n Widget.iframe.allowfullscreen = true;\n\n // iFrame Wrap\n Widget.frame = document.createElement('div');\n Widget.frame.id = 'brief-widget-frame';\n Widget.frame.appendChild(Widget.iframe);\n\n // Container\n Widget.container = document.createElement('div');\n Widget.container.id = 'brief-widget-container';\n Widget.container.appendChild(Widget.frame);\n Widget.container.className += `brief-widget-container-${Widget.settings.position}`;\n\n // Notifications\n Widget.notificationsIframe = document.createElement('iframe');\n Widget.notificationsIframe.scrolling = 'no';\n\n Widget.notificationsFrame = document.createElement('div');\n Widget.notificationsFrame.id = 'brief-widget-notifications';\n Widget.notificationsFrame.appendChild(Widget.notificationsIframe);\n Widget.notificationsFrame.className += `brief-widget-notifications-${Widget.settings.position}`;\n\n // Opener\n if (window.BriefElementId) {\n Widget.launcher = document.getElementById(window.BriefElementId || 'brief-chat-button');\n const unreadElement = document.getElementById(window.window.BriefUnreadId || 'brief-unread-count');\n if (unreadElement) {\n if (Widget.settings.unread > 0) {\n unreadElement.innerHTML = Widget.settings.unread;\n unreadElement.style.visibility = 'visible';\n } else {\n unreadElement.style.visibility = 'hidden';\n }\n }\n Widget.frame.className += 'no-button';\n } else {\n Widget.launcher = document.createElement('div');\n Widget.launcher.id = 'brief-widget-launcher';\n Widget.launcher.className += `brief-widget-launcher-${Widget.settings.position}`;\n if (Widget.settings.unread > 0) {\n Widget.launcher.innerHTML = `
${Widget.settings.unread}
`;\n }\n }\n\n document.body.appendChild(Widget.notificationsFrame);\n document.body.appendChild(Widget.container);\n if (!window.BriefElementId) {\n document.body.appendChild(Widget.launcher);\n }\n },\n constructAppIframe() {\n const w = Widget.iframe.contentWindow;\n const d = Widget.iframe.contentWindow.document;\n d.open('text/html', 'replace');\n d.write(AppContent);\n d.close();\n\n const styles = d.createElement('style');\n styles.innerHTML = AppStyles.replace(/\\$themeColor/g, Widget.themeColor).replace(/\\$fontsPath/g, config.fontsPath);\n\n d.head.appendChild(styles);\n\n // Settings script\n w.settings = Widget.settings;\n w.widgetId = Widget.id;\n w.widget = Widget;\n w.briefUser = Widget.user;\n\n const script = d.createElement('script');\n script.onload = () => {\n Widget.app = Widget.iframe.contentWindow.BriefChatApp;\n Widget.onload();\n Widget.emit('appLoaded');\n };\n script.src = config.appScript;\n d.head.appendChild(script);\n },\n constructNotificationsIframe() {\n const d = Widget.notificationsIframe.contentWindow.document;\n d.body.className += 'notifications-body';\n d.body.innerHTML = `\n
\n
close
\n
\n
\n \n
send
\n
\n
\n `;\n Widget.notificationsContainer = d.body.querySelector('.notifications');\n Widget.notificationsItems = d.body.querySelector('.notifications-items');\n Widget.notificationsCloseButton = d.body.querySelector('.notifications-close');\n if (Utils.isTouch) d.body.className += ' touch';\n Widget.notificationsInput = d.body.querySelector('.notifications-input input');\n\n Widget.notificationsInput.addEventListener(Utils.isTouch ? 'touchstart' : 'focus', () => {\n Widget.open(Widget.notificationConversationId, true);\n }, false);\n\n Widget.notificationsCloseButton.addEventListener('click', Widget.notificationsClose, false);\n d.body.addEventListener('mouseenter', () => {\n Widget.notificationsCloseButton.className += ' notifications-close-visible';\n }, false);\n d.body.addEventListener('mouseleave', () => {\n const newClassName = Widget.notificationsCloseButton.className.replace(' notifications-close-visible', '');\n Widget.notificationsCloseButton.className = newClassName;\n }, false);\n\n const styles = d.createElement('style');\n styles.innerHTML = AppStyles.replace(/\\$themeColor/g, Widget.themeColor).replace(/\\$fontsPath/g, config.fontsPath);\n d.head.appendChild(styles);\n },\n isFullScreen() {\n return window.innerWidth <= 450 || window.innerHeight <= 420;\n },\n checkFullScreen() {\n const html = Widget.iframe.contentWindow.document.querySelector('html');\n if (Widget.isFullScreen()) {\n if (html.className.indexOf('fullscreen') < 0) {\n html.className += ' fullscreen';\n }\n } else {\n html.className = html.className.replace(' fullscreen', '');\n }\n },\n attachEvents() {\n window.addEventListener('resize', Widget.checkFullScreen, false);\n Widget.launcher.addEventListener('click', Widget.toggle, false);\n },\n getLanguage() {\n const language = navigator.language;\n if (!language) {\n return '';\n }\n if (language.indexOf('-') < 0) {\n return language.toLowerCase();\n }\n return language.split('-')[0];\n },\n requestSettings(callback) {\n ajax.request({\n url: `${config.api}/widget/settings`,\n method: 'POST',\n type: 'POST',\n data: {\n widgetId: Widget.id,\n clientId: cid,\n lang: this.getLanguage(),\n },\n dataType: 'json',\n success(resp) {\n if (process.env.NODE_ENV === 'production') {\n if (resp && !resp.success) return;\n }\n Widget.settings = resp.data;\n if (Widget.settings.themeColor) {\n Widget.themeColor = Widget.settings.themeColor;\n }\n if(Widget.settings.invalidClientId)\n {\n LocalData.remove('clientId');\n }\n if (callback) callback(resp);\n },\n });\n },\n id: window.BriefWidgetId,\n widgetId: window.BriefWidgetId,\n user: window.BriefUser,\n opened: false,\n open(conversationId, focus) {\n clearTimeout(Widget.welcomeMessageTimeout);\n Widget.needsWelcomeMessage(false);\n if (Widget.opened) return;\n Widget.container.style.display = 'block';\n Widget.clientLeft = Widget.container.clientLeft;\n Widget.container.className += ' brief-widget-container-opened';\n Widget.launcher.className += ' brief-widget-launcher-opened';\n if (Utils.isTouch && Utils.isIOS && Widget.isFullScreen()) {\n document.body.className += ' brief-widget-active';\n }\n\n Widget.opened = true;\n if (Widget.app) {\n Widget.app.opened = true;\n Widget.app.$emit('open', conversationId, focus);\n } else {\n Widget.on('appLoaded', () => {\n Widget.app.opened = true;\n Widget.app.$emit('open', conversationId, focus);\n });\n }\n if (!window.BriefElementId) {\n Widget.launcher.innerHTML = '';\n } else {\n const widgetFrame = document.getElementById('brief-widget-frame');\n if (widgetFrame) {\n //widgetFrame.style.bottom = '15px';\n }\n }\n Widget.notificationConversationId = undefined;\n Widget.notificationsClose();\n },\n close() {\n if (!Widget.opened) return;\n if (Utils.isTouch && Utils.isIOS && Widget.isFullScreen()) {\n if (Widget.container.className.indexOf('brief-widget-container-opened') < 0) return;\n }\n document.body.className = document.body.className.replace(' brief-widget-active', '');\n Widget.container.className = Widget.container.className.replace(' brief-widget-container-opened', '');\n Widget.launcher.className = Widget.launcher.className.replace(' brief-widget-launcher-opened', '');\n Widget.opened = false;\n if (Widget.app) {\n Widget.app.opened = false;\n Widget.app.$emit('close');\n }\n setTimeout(() => {\n if (Widget.container.className.indexOf('brief-widget-container-opened') >= 0) return;\n Widget.container.style.display = 'none';\n }, 200);\n },\n toggle() {\n if (Widget.opened) Widget.close();\n else Widget.open();\n },\n notify(message = {}) {\n clearTimeout(Widget.welcomeMessageTimeout);\n Widget.notificationConversationId = message.conversationId;\n Widget.needsWelcomeMessage(false);\n let messageName = message.name ? message.name.split(' ')[0] : message.firstName;\n if (message.isTeamName) {\n messageName = message.name;\n }\n const file = message.files && message.files.length > 0 ? message.files[0] : null;\n Widget.notificationsItems.innerHTML = `\n
\n ${message.photo ? `
` : ''}\n ${messageName ? `
${messageName}
` : ''}\n
${message.text.replace(/\\n/g, '
')}
\n ${file ? `` : ''}\n
\n `;\n //Widget.notificationsItems.querySelector('.notification').addEventListener('click', () => {\n //Widget.notificationsClose();\n //Widget.open(Widget.notificationConversationId);\n //}, false);\n setTimeout(() => {\n if (Widget.notificationsContainer.offsetHeight) {\n Widget.notificationsFrame.style.height = `${Widget.notificationsContainer.offsetHeight}px`;\n if (file) {\n Widget.notificationsFrame.style.height = `${Widget.notificationsContainer.offsetHeight + 200}px`;\n }\n }\n }, 500);\n Widget.notificationsOpen();\n },\n notificationsOpen() {\n Widget.clientLeft = Widget.notificationsFrame.clientLeft;\n //Widget.notificationsFrame.style.display = 'block';\n Widget.notificationsFrame.className += ' brief-widget-notifications-opened';\n },\n notificationsClose() {\n if (Widget.notificationsFrame.className.indexOf('brief-widget-notifications-opened') < 0) return;\n Widget.notificationsFrame.className = Widget.notificationsFrame.className.replace(' brief-widget-notifications-opened', '');\n //setTimeout(() => {\n //if (Widget.notificationsFrame.className.indexOf('brief-widget-notifications-opened') >= 0) return;\n //Widget.notificationsFrame.style.display = 'none';\n //}, 200);\n },\n welcomeMessageTimeout: null,\n welcomeMessageShown: false,\n needsWelcomeMessage(set) {\n if (typeof set === 'undefined') {\n // Get informartion\n let needs = true;\n try {\n if (LocalData.get('welcomeMessageShown') || Widget.welcomeMessageShown || LocalData.get('widgetUsed')) needs = false;\n } catch (e) {\n // No LS Support\n }\n return needs;\n }\n // Set shown flag\n if (set === false) {\n Widget.welcomeMessageShown = true;\n LocalData.set('welcomeMessageShown', true);\n } else {\n Widget.welcomeMessageShown = false;\n LocalData.remove('welcomeMessageShown');\n }\n return true;\n },\n showWelcomeMessage() {\n if (!Widget.settings || !Widget.settings.welcomeMessage) return;\n if (!Widget.needsWelcomeMessage()) return;\n let name;\n let photo;\n let isTeamName;\n if (Widget.settings.onlineUsers.length) {\n name = Widget.settings.onlineUsers[0].firstName;\n photo = Widget.settings.onlineUsers[0].photo;\n } else if (Widget.settings.teamName) {\n name = Widget.settings.teamName;\n isTeamName = true;\n }\n Widget.notify({\n text: Widget.settings.welcomeMessage,\n name,\n photo,\n isTeamName,\n });\n },\n onload() {\n const timeoutSettings = Widget.settings ? Widget.settings.welcomeMessageTimeoutSeconds || 1 : 1;\n Widget.welcomeMessageTimeout = setTimeout(() => {\n if (!window.BriefElementId) {\n Widget.showWelcomeMessage();\n }\n }, timeoutSettings * 1000);\n const queryData = Widget.queryData;\n if (\n queryData.briefwidgetid === Widget.id &&\n queryData.briefclientid === cid &&\n queryData.briefconversationid &&\n !Widget.opened\n ) {\n Widget.open(queryData.briefconversationid);\n }\n else {\n const tempConversationId = LocalData.get('tempConversationId');\n if(tempConversationId){\n Widget.open(tempConversationId);\n LocalData.remove('tempConversationId');\n }\n }\n },\n // eslint-disable-next-line\n getQueryData() {\n const query = document.location.search;\n const queryData = {};\n Widget.queryData = queryData;\n if (!query || query.length === 0) return;\n query.split('?')[1].split('&').forEach((part) => {\n const parts = part.split('=');\n queryData[parts[0]] = parts[1];\n });\n if (queryData.briefwidgetid && queryData.briefclientid && queryData.briefconversationid) {\n cid = queryData.briefclientid;\n LocalData.set('clientId', queryData.briefclientid);\n LocalData.set('tempConversationId', queryData.briefconversationid);\n }\n },\n init() {\n Widget.getQueryData();\n Widget.requestSettings(() => {\n Widget.fixViewport();\n Widget.addStyles();\n Widget.addLayout();\n Widget.constructAppIframe();\n Widget.constructNotificationsIframe();\n Widget.attachEvents();\n Widget.checkFullScreen();\n });\n },\n};\n\nconst BriefWidget = {\n open: Widget.open,\n close: Widget.close,\n};\n\nWidget.init();\n\nexport default BriefWidget;\n"],"names":["const","let","cid","clientId"],"mappings":"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","preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjpudWxsLCJzb3VyY2VzIjpbIi9ob21lL2FkYXNndXB0YS9Eb2NzL1BlcnNvbmFsL0JyaWVmL2NoYXQtd2lkZ2V0L3NyYy91dGlscy91dGlscy5qcyIsIi9ob21lL2FkYXNndXB0YS9Eb2NzL1BlcnNvbmFsL0JyaWVmL2NoYXQtd2lkZ2V0L3NyYy91dGlscy9hamF4LmpzIiwiL2hvbWUvYWRhc2d1cHRhL0RvY3MvUGVyc29uYWwvQnJpZWYvY2hhdC13aWRnZXQvY29uZmlnLmpzIiwiL2hvbWUvYWRhc2d1cHRhL0RvY3MvUGVyc29uYWwvQnJpZWYvY2hhdC13aWRnZXQvc3JjL3V0aWxzL2xvY2FsLWRhdGEuanMiLCIvaG9tZS9hZGFzZ3VwdGEvRG9jcy9QZXJzb25hbC9CcmllZi9jaGF0LXdpZGdldC9zcmMvdXRpbHMvY2xpZW50LWlkLmpzIiwiL2hvbWUvYWRhc2d1cHRhL0RvY3MvUGVyc29uYWwvQnJpZWYvY2hhdC13aWRnZXQvc3JjL3dpZGdldC93aWRnZXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgVXRpbHMgPSB7XG4gIGlzVG91Y2g6ICEhKCgnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cpIHx8ICh3aW5kb3cuRG9jdW1lbnRUb3VjaCAmJiBkb2N1bWVudCBpbnN0YW5jZW9mIHdpbmRvdy5Eb2N1bWVudFRvdWNoKSksXG4gIGlzSU9TKCkge1xuICAgIGNvbnN0IHVhID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgY29uc3QgaXBhZCA9IHVhLm1hdGNoKC8oaVBhZCkuKk9TXFxzKFtcXGRfXSspLyk7XG4gICAgY29uc3QgaXBvZCA9IHVhLm1hdGNoKC8oaVBvZCkoLipPU1xccyhbXFxkX10rKSk/Lyk7XG4gICAgY29uc3QgaXBob25lID0gIWlwYWQgJiYgdWEubWF0Y2goLyhpUGhvbmVcXHNPU3xpT1MpXFxzKFtcXGRfXSspLyk7XG4gICAgcmV0dXJuIGlwYWQgfHwgaXBob25lIHx8IGlwb2Q7XG4gIH0sXG4gIGlzSXBob25lKCkge1xuICAgIGNvbnN0IHVhID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgY29uc3QgaXBhZCA9IHVhLm1hdGNoKC8oaVBhZCkuKk9TXFxzKFtcXGRfXSspLyk7XG4gICAgY29uc3QgaXBob25lID0gIWlwYWQgJiYgdWEubWF0Y2goLyhpUGhvbmVcXHNPU3xpT1MpXFxzKFtcXGRfXSspLyk7XG4gICAgcmV0dXJuIGlwaG9uZTtcbiAgfSxcbiAgZ3VpZCgpIHtcbiAgICAvKiBlc2xpbnQgbm8tYml0d2lzZTogW1wiZXJyb3JcIiwgeyBcImFsbG93XCI6IFtcIn5cIiwgXCI+PlwiLCBcIiZcIiwgXCJeXCIsIFwifFwiXSB9XSAqL1xuICAgIC8qIGVzbGludCBuby1taXhlZC1vcGVyYXRvcnM6IFtcImFsbG93XCJdICovXG4gICAgaWYgKHdpbmRvdy5jcnlwdG8gJiYgd2luZG93LlVpbnQ4QXJyYXkpIHtcbiAgICAgIHJldHVybiAoWzFlN10gKyAtMWUzICsgLTRlMyArIC04ZTMgKyAtMWUxMSkucmVwbGFjZSgvWzAxOF0vZywgYyA9PlxuICAgICAgICAoYyBeIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEpKVswXSAmIDE1ID4+IGMgLyA0KS50b1N0cmluZygxNilcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIChjKSA9PiB7XG4gICAgICBjb25zdCByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMDtcbiAgICAgIGNvbnN0IHYgPSBjID09PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xuICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xuICAgIH0pO1xuICB9LFxuICBuZXh0VGljayhjYWxsYmFjaywgZGVsYXkgPSAwKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5KTtcbiAgfSxcbiAgbmV4dEZyYW1lKGNhbGxiYWNrKSB7XG4gICAgaWYgKHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHJldHVybiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKTtcbiAgICBlbHNlIGlmICh3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKSByZXR1cm4gd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7XG4gICAgcmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGNhbGxiYWNrLCAxMDAwIC8gNjApO1xuICB9LFxuICBub3coKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGV4dGVuZCguLi5hcmdzKSB7XG4gICAgY29uc3QgdG8gPSBPYmplY3QoYXJnc1swXSk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjb25zdCBuZXh0U291cmNlID0gYXJnc1tpXTtcbiAgICAgIGlmIChuZXh0U291cmNlICE9PSB1bmRlZmluZWQgJiYgbmV4dFNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBrZXlzQXJyYXkgPSBPYmplY3Qua2V5cyhPYmplY3QobmV4dFNvdXJjZSkpO1xuICAgICAgICBmb3IgKGxldCBuZXh0SW5kZXggPSAwLCBsZW4gPSBrZXlzQXJyYXkubGVuZ3RoOyBuZXh0SW5kZXggPCBsZW47IG5leHRJbmRleCArPSAxKSB7XG4gICAgICAgICAgY29uc3QgbmV4dEtleSA9IGtleXNBcnJheVtuZXh0SW5kZXhdO1xuICAgICAgICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5leHRTb3VyY2UsIG5leHRLZXkpO1xuICAgICAgICAgIGlmIChkZXNjICE9PSB1bmRlZmluZWQgJiYgZGVzYy5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRvW25leHRLZXldID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbmV4dFNvdXJjZVtuZXh0S2V5XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgVXRpbHMuZXh0ZW5kKHRvW25leHRLZXldLCBuZXh0U291cmNlW25leHRLZXldKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRvW25leHRLZXldID0gbmV4dFNvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvO1xuICB9LFxuICBlYWNoKG9iaiwgY2FsbGJhY2spIHtcbiAgICAgIC8vIENoZWNrIGl0J3MgaXRlcmFibGVcbiAgICAgIC8vIFRPRE86IFNob3VsZCBwcm9iYWJseSByYWlzZSBhIHZhbHVlIGVycm9yIGhlcmVcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHJldHVybjtcbiAgICAvLyBEb24ndCBib3RoZXIgY29udGludWluZyB3aXRob3V0IGEgY2FsbGJhY2tcbiAgICBpZiAoIWNhbGxiYWNrKSByZXR1cm47XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgLy8gQXJyYXlcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIC8vIElmIGNhbGxiYWNrIHJldHVybnMgZmFsc2VcbiAgICAgICAgaWYgKGNhbGxiYWNrKGksIG9ialtpXSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgLy8gQnJlYWsgb3V0IG9mIHRoZSBsb29wXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE9iamVjdFxuICAgICAgZm9yIChsZXQgcHJvcCBpbiBvYmopIHtcbiAgICAgICAgLy8gQ2hlY2sgdGhlIHByb3BlcnRpZSBiZWxvbmdzIHRvIHRoZSBvYmplY3RcbiAgICAgICAgLy8gbm90IGl0J3MgcHJvdG90eXBlXG4gICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICAgICAgICAgIGlmIChjYWxsYmFjayhwcm9wLCBvYmpbcHJvcF0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgLy8gQnJlYWsgb3V0IG9mIHRoZSBsb29wO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgc2VyaWFsaXplT2JqZWN0KG9iaiwgcGFyZW50cyA9IFtdKSB7XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSByZXR1cm4gb2JqO1xuICAgIGNvbnN0IHJlc3VsdEFycmF5ID0gW107XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gJyYnO1xuICAgIGxldCBuZXdQYXJlbnRzO1xuICAgIGZ1bmN0aW9uIHZhck5hbWUobmFtZSkge1xuICAgICAgaWYgKHBhcmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgcGFyZW50UGFydHMgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwYXJlbnRzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgICAgaWYgKGogPT09IDApIHBhcmVudFBhcnRzICs9IHBhcmVudHNbal07XG4gICAgICAgICAgZWxzZSBwYXJlbnRQYXJ0cyArPSBgWyR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmVudHNbal0pfV1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtwYXJlbnRQYXJ0c31bJHtlbmNvZGVVUklDb21wb25lbnQobmFtZSl9XWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YXJWYWx1ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gICAgfVxuICAgIGZvciAobGV0IHByb3AgaW4gb2JqKSB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgIGxldCB0b1B1c2g7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9ialtwcm9wXSkpIHtcbiAgICAgICAgICB0b1B1c2ggPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9ialtwcm9wXS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9ialtwcm9wXVtpXSkgJiYgdHlwZW9mIG9ialtwcm9wXVtpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgbmV3UGFyZW50cyA9IHBhcmVudHMuc2xpY2UoKTtcbiAgICAgICAgICAgICAgbmV3UGFyZW50cy5wdXNoKHByb3ApO1xuICAgICAgICAgICAgICBuZXdQYXJlbnRzLnB1c2goU3RyaW5nKGkpKTtcbiAgICAgICAgICAgICAgdG9QdXNoLnB1c2goVXRpbHMuc2VyaWFsaXplT2JqZWN0KG9ialtwcm9wXVtpXSwgbmV3UGFyZW50cykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdG9QdXNoLnB1c2goYCR7dmFyTmFtZShwcm9wKX1bXT0ke3ZhclZhbHVlKG9ialtwcm9wXVtpXSl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0b1B1c2gubGVuZ3RoID4gMCkgcmVzdWx0QXJyYXkucHVzaCh0b1B1c2guam9pbihzZXBhcmF0b3IpKTtcbiAgICAgICAgfSBlbHNlIGlmIChvYmpbcHJvcF0gPT09IG51bGwgfHwgb2JqW3Byb3BdID09PSAnJykge1xuICAgICAgICAgIHJlc3VsdEFycmF5LnB1c2goYCR7dmFyTmFtZShwcm9wKX09YCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9ialtwcm9wXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAvLyBPYmplY3QsIGNvbnZlcnQgdG8gbmFtZWQgYXJyYXlcbiAgICAgICAgICBuZXdQYXJlbnRzID0gcGFyZW50cy5zbGljZSgpO1xuICAgICAgICAgIG5ld1BhcmVudHMucHVzaChwcm9wKTtcbiAgICAgICAgICB0b1B1c2ggPSBVdGlscy5zZXJpYWxpemVPYmplY3Qob2JqW3Byb3BdLCBuZXdQYXJlbnRzKTtcbiAgICAgICAgICBpZiAodG9QdXNoICE9PSAnJykgcmVzdWx0QXJyYXkucHVzaCh0b1B1c2gpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmpbcHJvcF0gIT09ICd1bmRlZmluZWQnICYmIG9ialtwcm9wXSAhPT0gJycpIHtcbiAgICAgICAgICAvLyBTaG91bGQgYmUgc3RyaW5nIG9yIHBsYWluIHZhbHVlXG4gICAgICAgICAgcmVzdWx0QXJyYXkucHVzaChgJHt2YXJOYW1lKHByb3ApfT0ke3ZhclZhbHVlKG9ialtwcm9wXSl9YCk7XG4gICAgICAgIH0gZWxzZSBpZiAob2JqW3Byb3BdID09PSAnJykgcmVzdWx0QXJyYXkucHVzaCh2YXJOYW1lKHByb3ApKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdEFycmF5LmpvaW4oc2VwYXJhdG9yKTtcbiAgfSxcblxufTtcblxuZXhwb3J0IGRlZmF1bHQgVXRpbHM7XG4iLCJpbXBvcnQgVXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbi8vIEpTT05QIFJlcXVlc3RzXG5sZXQganNvbnBSZXF1ZXN0cyA9IDA7XG5cbi8vIEFqYXhcbmZ1bmN0aW9uIHJlcXVlc3QodXNlck9wdGlvbnMpIHtcbiAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICBkYXRhOiBmYWxzZSxcbiAgICBhc3luYzogdHJ1ZSxcbiAgICBjYWNoZTogdHJ1ZSxcbiAgICB1c2VyOiAnJyxcbiAgICBwYXNzd29yZDogJycsXG4gICAgaGVhZGVyczoge30sXG4gICAgeGhyRmllbGRzOiB7fSxcbiAgICBzdGF0dXNDb2RlOiB7fSxcbiAgICBwcm9jZXNzRGF0YTogdHJ1ZSxcbiAgICBkYXRhVHlwZTogJ3RleHQnLFxuICAgIGNvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICB0aW1lb3V0OiAwLFxuICB9O1xuICBjb25zdCBvcHRpb25zID0gVXRpbHMuZXh0ZW5kKHt9LCBkZWZhdWx0cywgdXNlck9wdGlvbnMpO1xuXG4gIC8vIEZvciBqUXVlcnkgZ3V5c1xuICBpZiAob3B0aW9ucy50eXBlKSBvcHRpb25zLm1ldGhvZCA9IG9wdGlvbnMudHlwZTtcblxuICAvLyBGdW5jdGlvbiB0byBydW4gWEhSIGNhbGxiYWNrcyBhbmQgZXZlbnRzXG4gIGZ1bmN0aW9uIGZpcmVBamF4Q2FsbGJhY2soY2FsbGJhY2tOYW1lLCAuLi5hcmdzKSB7XG4gICAgLy8gaWYgKGV2ZW50TmFtZSkgJChkb2N1bWVudCkudHJpZ2dlcihldmVudE5hbWUsIGV2ZW50RGF0YSk7XG4gICAgaWYgKGNhbGxiYWNrTmFtZSkge1xuICAgICAgLy8gT3B0aW9ucyBjYWxsYmFja1xuICAgICAgaWYgKG9wdGlvbnNbY2FsbGJhY2tOYW1lXSkgb3B0aW9uc1tjYWxsYmFja05hbWVdKC4uLmFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERlZmF1bHQgVVJMXG4gIGlmICghb3B0aW9ucy51cmwpIHtcbiAgICBvcHRpb25zLnVybCA9IHdpbmRvdy5sb2NhdGlvbi50b1N0cmluZygpO1xuICB9XG4gIC8vIFBhcmFtZXRlcnMgUHJlZml4XG4gIGxldCBwYXJhbXNQcmVmaXggPSBvcHRpb25zLnVybC5pbmRleE9mKCc/JykgPj0gMCA/ICcmJyA6ICc/JztcblxuICAvLyBVQyBtZXRob2RcbiAgY29uc3QgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2UoKTtcblxuICAvLyBEYXRhIHRvIG1vZGlmeSBHRVQgVVJMXG4gIGlmICgobWV0aG9kID09PSAnR0VUJyB8fCBtZXRob2QgPT09ICdIRUFEJyB8fCBtZXRob2QgPT09ICdPUFRJT05TJyB8fCBtZXRob2QgPT09ICdERUxFVEUnKSAmJiBvcHRpb25zLmRhdGEpIHtcbiAgICBsZXQgc3RyaW5nRGF0YTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFNob3VsZCBiZSBrZXk9dmFsdWUgc3RyaW5nXG4gICAgICBpZiAob3B0aW9ucy5kYXRhLmluZGV4T2YoJz8nKSA+PSAwKSBzdHJpbmdEYXRhID0gb3B0aW9ucy5kYXRhLnNwbGl0KCc/JylbMV07XG4gICAgICBlbHNlIHN0cmluZ0RhdGEgPSBvcHRpb25zLmRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNob3VsZCBiZSBrZXk9dmFsdWUgb2JqZWN0XG4gICAgICBzdHJpbmdEYXRhID0gVXRpbHMuc2VyaWFsaXplT2JqZWN0KG9wdGlvbnMuZGF0YSk7XG4gICAgfVxuICAgIGlmIChzdHJpbmdEYXRhLmxlbmd0aCkge1xuICAgICAgb3B0aW9ucy51cmwgKz0gcGFyYW1zUHJlZml4ICsgc3RyaW5nRGF0YTtcbiAgICAgIGlmIChwYXJhbXNQcmVmaXggPT09ICc/JykgcGFyYW1zUHJlZml4ID0gJyYnO1xuICAgIH1cbiAgfVxuICAvLyBKU09OUFxuICBpZiAob3B0aW9ucy5kYXRhVHlwZSA9PT0gJ2pzb24nICYmIG9wdGlvbnMudXJsLmluZGV4T2YoJ2NhbGxiYWNrPScpID49IDApIHtcbiAgICBjb25zdCBjYWxsYmFja05hbWUgPSBgZjdqc29ucF8ke0RhdGUubm93KCkgKyAoKGpzb25wUmVxdWVzdHMgKz0gMSkpfWA7XG4gICAgbGV0IGFib3J0VGltZW91dDtcbiAgICBjb25zdCBjYWxsYmFja1NwbGl0ID0gb3B0aW9ucy51cmwuc3BsaXQoJ2NhbGxiYWNrPScpO1xuICAgIGxldCByZXF1ZXN0VXJsID0gYCR7Y2FsbGJhY2tTcGxpdFswXX1jYWxsYmFjaz0ke2NhbGxiYWNrTmFtZX1gO1xuICAgIGlmIChjYWxsYmFja1NwbGl0WzFdLmluZGV4T2YoJyYnKSA+PSAwKSB7XG4gICAgICBjb25zdCBhZGRWYXJzID0gY2FsbGJhY2tTcGxpdFsxXS5zcGxpdCgnJicpLmZpbHRlcihlbCA9PiBlbC5pbmRleE9mKCc9JykgPiAwKS5qb2luKCcmJyk7XG4gICAgICBpZiAoYWRkVmFycy5sZW5ndGggPiAwKSByZXF1ZXN0VXJsICs9IGAmJHthZGRWYXJzfWA7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHNjcmlwdFxuICAgIGxldCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgIHNjcmlwdC5vbmVycm9yID0gZnVuY3Rpb24gb25lcnJvcigpIHtcbiAgICAgIGNsZWFyVGltZW91dChhYm9ydFRpbWVvdXQpO1xuICAgICAgZmlyZUFqYXhDYWxsYmFjaygnZXJyb3InLCBudWxsLCAnc2NyaXB0ZXJyb3InKTtcbiAgICAgIGZpcmVBamF4Q2FsbGJhY2soJ2NvbXBsZXRlJywgbnVsbCwgJ3NjcmlwdGVycm9yJyk7XG4gICAgfTtcbiAgICBzY3JpcHQuc3JjID0gcmVxdWVzdFVybDtcblxuICAgIC8vIEhhbmRsZXJcbiAgICB3aW5kb3dbY2FsbGJhY2tOYW1lXSA9IGZ1bmN0aW9uIGpzb25wQ2FsbGJhY2soZGF0YSkge1xuICAgICAgY2xlYXJUaW1lb3V0KGFib3J0VGltZW91dCk7XG4gICAgICBmaXJlQWpheENhbGxiYWNrKCdzdWNjZXNzJywgZGF0YSk7XG4gICAgICBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgc2NyaXB0ID0gbnVsbDtcbiAgICAgIGRlbGV0ZSB3aW5kb3dbY2FsbGJhY2tOYW1lXTtcbiAgICB9O1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuXG4gICAgaWYgKG9wdGlvbnMudGltZW91dCA+IDApIHtcbiAgICAgIGFib3J0VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICBzY3JpcHQgPSBudWxsO1xuICAgICAgICBmaXJlQWpheENhbGxiYWNrKCdlcnJvcicsIG51bGwsICd0aW1lb3V0Jyk7XG4gICAgICB9LCBvcHRpb25zLnRpbWVvdXQpO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBDYWNoZSBmb3IgR0VUL0hFQUQgcmVxdWVzdHNcbiAgaWYgKG1ldGhvZCA9PT0gJ0dFVCcgfHwgbWV0aG9kID09PSAnSEVBRCcgfHwgbWV0aG9kID09PSAnT1BUSU9OUycgfHwgbWV0aG9kID09PSAnREVMRVRFJykge1xuICAgIGlmIChvcHRpb25zLmNhY2hlID09PSBmYWxzZSkge1xuICAgICAgb3B0aW9ucy51cmwgKz0gYCR7cGFyYW1zUHJlZml4fV9ub2NhY2hlJHtEYXRlLm5vdygpfWA7XG4gICAgfVxuICB9XG5cbiAgLy8gQ3JlYXRlIFhIUlxuICBjb25zdCB4aHIgPSBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgLy8gU2F2ZSBSZXF1ZXN0IFVSTFxuICB4aHIucmVxdWVzdFVybCA9IG9wdGlvbnMudXJsO1xuICB4aHIucmVxdWVzdFBhcmFtZXRlcnMgPSBvcHRpb25zO1xuXG4gIC8vIE9wZW4gWEhSXG4gIHhoci5vcGVuKG1ldGhvZCwgb3B0aW9ucy51cmwsIG9wdGlvbnMuYXN5bmMsIG9wdGlvbnMudXNlciwgb3B0aW9ucy5wYXNzd29yZCk7XG5cbiAgLy8gQ3JlYXRlIFBPU1QgRGF0YVxuICBsZXQgcG9zdERhdGEgPSBudWxsO1xuXG4gIGlmICgobWV0aG9kID09PSAnUE9TVCcgfHwgbWV0aG9kID09PSAnUFVUJyB8fCBtZXRob2QgPT09ICdQQVRDSCcpICYmIG9wdGlvbnMuZGF0YSkge1xuICAgIGlmIChvcHRpb25zLnByb2Nlc3NEYXRhKSB7XG4gICAgICBjb25zdCBwb3N0RGF0YUluc3RhbmNlcyA9IFtBcnJheUJ1ZmZlciwgQmxvYiwgRG9jdW1lbnQsIEZvcm1EYXRhXTtcbiAgICAgIC8vIFBvc3QgRGF0YVxuICAgICAgaWYgKHBvc3REYXRhSW5zdGFuY2VzLmluZGV4T2Yob3B0aW9ucy5kYXRhLmNvbnN0cnVjdG9yKSA+PSAwKSB7XG4gICAgICAgIHBvc3REYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUE9TVCBIZWFkZXJzXG4gICAgICAgIGxldCBib3VuZGFyeSA9IGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0ke0RhdGUubm93KCkudG9TdHJpbmcoMTYpfWA7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY29udGVudFR5cGUgPT09ICdtdWx0aXBhcnRcXC9mb3JtLWRhdGEnKSB7XG4gICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsIGBtdWx0aXBhcnRcXC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSR7Ym91bmRhcnl9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsIG9wdGlvbnMuY29udGVudFR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHBvc3REYXRhID0gJyc7XG4gICAgICAgIGxldCBkYXRhID0gVXRpbHMuc2VyaWFsaXplT2JqZWN0KG9wdGlvbnMuZGF0YSk7XG4gICAgICAgIGlmIChvcHRpb25zLmNvbnRlbnRUeXBlID09PSAnbXVsdGlwYXJ0XFwvZm9ybS1kYXRhJykge1xuICAgICAgICAgIGJvdW5kYXJ5ID0gYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSR7RGF0ZS5ub3coKS50b1N0cmluZygxNil9YDtcbiAgICAgICAgICBkYXRhID0gZGF0YS5zcGxpdCgnJicpO1xuICAgICAgICAgIGNvbnN0IG5ld0RhdGEgPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIG5ld0RhdGEucHVzaCgnQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwiJyArIGRhdGFbaV0uc3BsaXQoJz0nKVswXSArICdcIlxcclxcblxcclxcbicgKyBkYXRhW2ldLnNwbGl0KCc9JylbMV0gKyAnXFxyXFxuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBvc3REYXRhID0gYC0tJHtib3VuZGFyeX1cXHJcXG4ke25ld0RhdGEuam9pbihgLS0ke2JvdW5kYXJ5fVxcclxcbmApfS0tJHtib3VuZGFyeX0tLVxcclxcbmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcG9zdERhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvc3REYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZGl0aW9uYWwgaGVhZGVyc1xuICBpZiAob3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgVXRpbHMuZWFjaChvcHRpb25zLmhlYWRlcnMsIChoZWFkZXJOYW1lLCBoZWFkZXJDYWxsYmFjaykgPT4ge1xuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoaGVhZGVyTmFtZSwgaGVhZGVyQ2FsbGJhY2spO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIGNyb3NzRG9tYWluXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5jcm9zc0RvbWFpbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvcHRpb25zLmNyb3NzRG9tYWluID0gL14oW1xcdy1dKzopP1xcL1xcLyhbXlxcL10rKS8udGVzdChvcHRpb25zLnVybCkgJiYgUmVnRXhwLiQyICE9PSB3aW5kb3cubG9jYXRpb24uaG9zdDtcbiAgfVxuXG4gIGlmICghb3B0aW9ucy5jcm9zc0RvbWFpbikge1xuICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdYLVJlcXVlc3RlZC1XaXRoJywgJ1hNTEh0dHBSZXF1ZXN0Jyk7XG4gIH1cblxuICBpZiAob3B0aW9ucy54aHJGaWVsZHMpIHtcbiAgICBVdGlscy5lYWNoKG9wdGlvbnMueGhyRmllbGRzLCAoZmllbGROYW1lLCBmaWVsZFZhbHVlKSA9PiB7XG4gICAgICB4aHJbZmllbGROYW1lXSA9IGZpZWxkVmFsdWU7XG4gICAgfSk7XG4gIH1cblxuICBsZXQgeGhyVGltZW91dDtcbiAgLy8gSGFuZGxlIFhIUlxuICB4aHIub25sb2FkID0gZnVuY3Rpb24gb25sb2FkKGUpIHtcbiAgICBpZiAoeGhyVGltZW91dCkgY2xlYXJUaW1lb3V0KHhoclRpbWVvdXQpO1xuICAgIGlmICgoeGhyLnN0YXR1cyA+PSAyMDAgJiYgeGhyLnN0YXR1cyA8IDMwMCkgfHwgeGhyLnN0YXR1cyA9PT0gMCkge1xuICAgICAgbGV0IHJlc3BvbnNlRGF0YTtcbiAgICAgIGlmIChvcHRpb25zLmRhdGFUeXBlID09PSAnanNvbicpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXNwb25zZURhdGEgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgIGZpcmVBamF4Q2FsbGJhY2soJ3N1Y2Nlc3MnLCByZXNwb25zZURhdGEsIHhoci5zdGF0dXMsIHhocik7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGZpcmVBamF4Q2FsbGJhY2soJ2Vycm9yJywgeGhyLCAncGFyc2VlcnJvcicpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZURhdGEgPSB4aHIucmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgeGhyLnJlc3BvbnNlVHlwZSA9PT0gJycgPyB4aHIucmVzcG9uc2VUZXh0IDogeGhyLnJlc3BvbnNlO1xuICAgICAgICBmaXJlQWpheENhbGxiYWNrKCdzdWNjZXNzJywgcmVzcG9uc2VEYXRhLCB4aHIuc3RhdHVzLCB4aHIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmaXJlQWpheENhbGxiYWNrKCdlcnJvcicsIHhociwgeGhyLnN0YXR1cyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnN0YXR1c0NvZGUpIHtcbiAgICAgIGlmIChvcHRpb25zLnN0YXR1c0NvZGVbeGhyLnN0YXR1c10pIG9wdGlvbnMuc3RhdHVzQ29kZVt4aHIuc3RhdHVzXSh4aHIpO1xuICAgIH1cbiAgICBmaXJlQWpheENhbGxiYWNrKCdjb21wbGV0ZScsIHhociwgeGhyLnN0YXR1cyk7XG4gIH07XG5cbiAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbiBvbmVycm9yKCkge1xuICAgIGlmICh4aHJUaW1lb3V0KSBjbGVhclRpbWVvdXQoeGhyVGltZW91dCk7XG4gICAgZmlyZUFqYXhDYWxsYmFjaygnZXJyb3InLCB4aHIsIHhoci5zdGF0dXMpO1xuICAgIGZpcmVBamF4Q2FsbGJhY2soJ2NvbXBsZXRlJywgeGhyLCAnZXJyb3InKTtcbiAgfTtcblxuICAvLyBBamF4IHN0YXJ0IGNhbGxiYWNrXG4gIGZpcmVBamF4Q2FsbGJhY2soJ3N0YXJ0JywgeGhyKTtcbiAgZmlyZUFqYXhDYWxsYmFjaygnYmVmb3JlU2VuZCcsIHhocik7XG5cbiAgLy8gVGltZW91dFxuICBpZiAob3B0aW9ucy50aW1lb3V0ID4gMCkge1xuICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24gb25hYm9ydCgpIHtcbiAgICAgIGlmICh4aHJUaW1lb3V0KSBjbGVhclRpbWVvdXQoeGhyVGltZW91dCk7XG4gICAgfTtcbiAgICB4aHJUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB4aHIuYWJvcnQoKTtcbiAgICAgIGZpcmVBamF4Q2FsbGJhY2soJ2Vycm9yJywgeGhyLCAndGltZW91dCcpO1xuICAgICAgZmlyZUFqYXhDYWxsYmFjaygnY29tcGxldGUnLCB4aHIsICd0aW1lb3V0Jyk7XG4gICAgfSwgb3B0aW9ucy50aW1lb3V0KTtcbiAgfVxuXG4gIC8vIFNlbmQgWEhSXG4gIHhoci5zZW5kKHBvc3REYXRhKTtcblxuICAvLyBSZXR1cm4gWEhSIG9iamVjdFxuICByZXR1cm4geGhyO1xufVxuXG5mdW5jdGlvbiBhamF4U2hvcnRjdXQobWV0aG9kLCAuLi5hcmdzKSB7XG4gIGxldCB1cmw7XG4gIGxldCBkYXRhO1xuICBsZXQgc3VjY2VzcztcbiAgbGV0IGVycm9yO1xuICBsZXQgZGF0YVR5cGU7XG4gIGlmICh0eXBlb2YgYXJnc1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFt1cmwsIHN1Y2Nlc3MsIGVycm9yLCBkYXRhVHlwZV0gPSBhcmdzO1xuICB9IGVsc2Uge1xuICAgIFt1cmwsIGRhdGEsIHN1Y2Nlc3MsIGVycm9yLCBkYXRhVHlwZV0gPSBhcmdzO1xuICB9XG4gIFtzdWNjZXNzLCBlcnJvcl0uZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YVR5cGUgPSBjYWxsYmFjaztcbiAgICAgIGlmIChjYWxsYmFjayA9PT0gc3VjY2Vzcykgc3VjY2VzcyA9IHVuZGVmaW5lZDtcbiAgICAgIGVsc2UgZXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9KTtcbiAgZGF0YVR5cGUgPSBkYXRhVHlwZSB8fCAobWV0aG9kID09PSAnZ2V0SlNPTicgPyAnanNvbicgOiB1bmRlZmluZWQpO1xuICByZXR1cm4gcmVxdWVzdCh7XG4gICAgdXJsLFxuICAgIG1ldGhvZDogbWV0aG9kID09PSAncG9zdCcgPyAnUE9TVCcgOiAnR0VUJyxcbiAgICBkYXRhLFxuICAgIHN1Y2Nlc3MsXG4gICAgZXJyb3IsXG4gICAgZGF0YVR5cGUsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXQoLi4uYXJncykge1xuICBhcmdzLnVuc2hpZnQoJ2dldCcpO1xuICByZXR1cm4gYWpheFNob3J0Y3V0LmFwcGx5KHRoaXMsIGFyZ3MpO1xufVxuZnVuY3Rpb24gcG9zdCguLi5hcmdzKSB7XG4gIGFyZ3MudW5zaGlmdCgncG9zdCcpO1xuICByZXR1cm4gYWpheFNob3J0Y3V0LmFwcGx5KHRoaXMsIGFyZ3MpO1xufVxuZnVuY3Rpb24gZ2V0SlNPTiguLi5hcmdzKSB7XG4gIGFyZ3MudW5zaGlmdCgnZ2V0SlNPTicpO1xuICByZXR1cm4gYWpheFNob3J0Y3V0LmFwcGx5KHRoaXMsIGFyZ3MpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7IHJlcXVlc3QsIGdldCwgcG9zdCwgZ2V0SlNPTiB9O1xuIiwiY29uc3QgY29uZmlnID0ge1xufTtcblxubGV0IGV4dGVuZENvbmZpZyA9IHt9O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFBST0RVQ1RJT05cbiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbiAgZXh0ZW5kQ29uZmlnID0ge1xuICAgIGFwaTogJ2h0dHBzOi8vYXBwLmxldHNicmllZi5jb20vYXBpJyxcbiAgICBzb2NrZXQ6ICdodHRwczovL2FwcC5sZXRzYnJpZWYuY29tJyxcbiAgICBhcHBIb3N0OiAnaHR0cHM6Ly93aWRnZXQubGV0c2JyaWVmLmNvbScsXG4gICAgYXBwU2NyaXB0OiAnaHR0cHM6Ly93aWRnZXQubGV0c2JyaWVmLmNvbS9hcHAvYXBwLm1pbi5qcycsXG4gICAgZm9udHNQYXRoOiAnaHR0cHM6Ly93aWRnZXQubGV0c2JyaWVmLmNvbS9mb250cycsXG4gICAgZmlsZXNQYXRoOiAnaHR0cHM6Ly9icmllZi5pbWdpeC5uZXQnLFxuICB9O1xufSBlbHNlIHtcbiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIERFVkVMT1BNRU5UXG4gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4gIGV4dGVuZENvbmZpZyA9IHtcbiAgICBhcGk6ICdodHRwOi8vbG9jYWxob3N0OjcwMDAvYXBpJyxcbiAgICBzb2NrZXQ6ICdodHRwOi8vbG9jYWxob3N0OjcwMDAnLFxuICAgIGFwcEhvc3Q6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvJyxcbiAgICBhcHBTY3JpcHQ6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBwL2FwcC5qcycsXG4gICAgZm9udHNQYXRoOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL2ZvbnRzJyxcbiAgICBmaWxlc1BhdGg6ICdodHRwczovL2JyaWVmLmltZ2l4Lm5ldCcsXG4gIH07XG59XG5PYmplY3Qua2V5cyhleHRlbmRDb25maWcpLmZvckVhY2goKGtleSkgPT4ge1xuICBjb25maWdba2V5XSA9IGV4dGVuZENvbmZpZ1trZXldO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbmZpZztcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICBsZXQgZGF0YTtcbiAgICB0cnkge1xuICAgICAgZGF0YSA9IEpTT04ucGFyc2Uod2luZG93LmxvY2FsU3RvcmFnZS5icmllZldpZGdldCB8fCAne30nKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBObyBscyBzdXBwb3J0IG9yIG5vIGRhdGEgc3RvcmVkXG4gICAgfVxuICAgIGlmIChkYXRhKSB7XG4gICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UuYnJpZWZXaWRnZXQgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEgfHwge307XG4gIH0sXG4gIGdldChrZXkpIHtcbiAgICBsZXQgZGF0YTtcbiAgICB0cnkge1xuICAgICAgZGF0YSA9IEpTT04ucGFyc2Uod2luZG93LmxvY2FsU3RvcmFnZS5icmllZldpZGdldCB8fCAne30nKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBObyBscyBzdXBwb3J0IG9yIG5vIGRhdGEgc3RvcmVkXG4gICAgfVxuICAgIGlmICghZGF0YSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZGF0YVtrZXldO1xuICB9LFxuICByZW1vdmUoa2V5KSB7XG4gICAgbGV0IGRhdGE7XG4gICAgdHJ5IHtcbiAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHdpbmRvdy5sb2NhbFN0b3JhZ2UuYnJpZWZXaWRnZXQgfHwgJ3t9Jyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gTm8gbHMgc3VwcG9ydCBvciBubyBkYXRhIHN0b3JlZFxuICAgIH1cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGFba2V5XSkge1xuICAgICAgICBkYXRhW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIGRlbGV0ZSBkYXRhW2tleV07XG4gICAgICB9XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLmJyaWVmV2lkZ2V0ID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgfVxuICB9LFxuICBjbGVhcigpIHtcbiAgICB0cnkge1xuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdicmllZldpZGdldCcpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIE5vIGxzIHN1cHBvcnQgb3Igbm8gZGF0YSBzdG9yZWRcbiAgICB9XG4gIH0sXG59O1xuIiwiaW1wb3J0IFV0aWxzIGZyb20gJy4uL3V0aWxzL3V0aWxzJztcbmltcG9ydCBMb2NhbERhdGEgZnJvbSAnLi4vdXRpbHMvbG9jYWwtZGF0YSc7XG5cbi8vIFVzZXIgSURcbmxldCBjbGllbnRJZCA9IExvY2FsRGF0YS5nZXQoJ2NsaWVudElkJyk7XG5cbmlmICghY2xpZW50SWQpIHtcbiAgY2xpZW50SWQgPSBVdGlscy5ndWlkKCk7XG4gIExvY2FsRGF0YS5zZXQoJ2NsaWVudElkJywgY2xpZW50SWQpO1xufVxuXG5jb25zdCBjaWQgPSBjbGllbnRJZDtcblxuZXhwb3J0IGRlZmF1bHQgY2lkO1xuIiwiaW1wb3J0IFV0aWxzIGZyb20gJy4uL3V0aWxzL3V0aWxzJztcbmltcG9ydCBhamF4IGZyb20gJy4uL3V0aWxzL2FqYXgnO1xuaW1wb3J0IFdpZGdldFN0eWxlcyBmcm9tICcuL3dpZGdldC5jc3MnO1xuaW1wb3J0IEFwcFN0eWxlcyBmcm9tICcuL2FwcC5jc3MnO1xuaW1wb3J0IEFwcENvbnRlbnQgZnJvbSAnLi9hcHAtY29udGVudC5odG1sJztcbmltcG9ydCBjb25maWcgZnJvbSAnLi4vLi4vY29uZmlnJztcbmltcG9ydCBjbGllbnRJZCBmcm9tICcuLi91dGlscy9jbGllbnQtaWQnO1xuaW1wb3J0IExvY2FsRGF0YSBmcm9tICcuLi91dGlscy9sb2NhbC1kYXRhJztcblxubGV0IGNpZCA9IGNsaWVudElkO1xuXG5jb25zdCBldmVudExpc3RlbmVycyA9IHt9O1xuIFxuY29uc3QgV2lkZ2V0ID0ge1xuICBlbWl0KC4uLmFyZ3MpIHtcbiAgICBjb25zdCBldmVudHMgPSBhcmdzWzBdLnNwbGl0KCcgJyk7XG4gICAgY29uc3QgZGF0YSA9IGFyZ3Muc2xpY2UoMSwgYXJncy5sZW5ndGgpO1xuICAgIGV2ZW50cy5mb3JFYWNoKChldmVudE5hbWUpID0+IHtcbiAgICAgIGlmICghZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSkgcmV0dXJuO1xuICAgICAgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXS5mb3JFYWNoKChldmVudENhbGxiYWNrKSA9PiB7XG4gICAgICAgIGV2ZW50Q2FsbGJhY2soLi4uZGF0YSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSxcbiAgb24oZXZlbnRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSByZXR1cm47XG4gICAgZXZlbnRzLnNwbGl0KCcgJykuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIGlmICghZXZlbnRMaXN0ZW5lcnNbZXZlbnRdKSBldmVudExpc3RlbmVyc1tldmVudF0gPSBbXTtcbiAgICAgIGV2ZW50TGlzdGVuZXJzW2V2ZW50XS5wdXNoKGhhbmRsZXIpO1xuICAgIH0pO1xuICB9LFxuICB0aGVtZUNvbG9yOiAnIzgyNWFlMycsXG4gIGZpeFZpZXdwb3J0KCkge1xuICAgIGxldCB2aWV3cG9ydCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT1cInZpZXdwb3J0XCJdJyk7XG4gICAgaWYgKCF2aWV3cG9ydCkge1xuICAgICAgdmlld3BvcnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtZXRhJyk7XG4gICAgICB2aWV3cG9ydC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAndmlld3BvcnQnKTtcbiAgICAgIHZpZXdwb3J0LnNldEF0dHJpYnV0ZSgnY29udGVudCcsICdpbml0aWFsLXNjYWxlPTEnKTtcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKS5hcHBlbmRDaGlsZCh2aWV3cG9ydCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9LFxuICBhZGRTdHlsZXMoKSB7XG4gICAgY29uc3Qgc3R5bGVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgc3R5bGVFbC5pbm5lckhUTUwgPSBXaWRnZXRTdHlsZXMucmVwbGFjZSgvXFwkdGhlbWVDb2xvci9nLCBXaWRnZXQudGhlbWVDb2xvcikucmVwbGFjZSgvXFwkZm9udHNQYXRoL2csIGNvbmZpZy5mb250c1BhdGgpO1xuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVFbCk7XG4gIH0sXG4gIGFkZExheW91dCgpIHtcbiAgICAvLyBpRnJhbWVcbiAgICBXaWRnZXQuaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gICAgV2lkZ2V0LmlmcmFtZS5zY3JvbGxpbmcgPSAnbm8nO1xuICAgIFdpZGdldC5pZnJhbWUuYWxsb3dmdWxsc2NyZWVuID0gdHJ1ZTtcblxuICAgIC8vIGlGcmFtZSBXcmFwXG4gICAgV2lkZ2V0LmZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgV2lkZ2V0LmZyYW1lLmlkID0gJ2JyaWVmLXdpZGdldC1mcmFtZSc7XG4gICAgV2lkZ2V0LmZyYW1lLmFwcGVuZENoaWxkKFdpZGdldC5pZnJhbWUpO1xuXG4gICAgLy8gQ29udGFpbmVyXG4gICAgV2lkZ2V0LmNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFdpZGdldC5jb250YWluZXIuaWQgPSAnYnJpZWYtd2lkZ2V0LWNvbnRhaW5lcic7XG4gICAgV2lkZ2V0LmNvbnRhaW5lci5hcHBlbmRDaGlsZChXaWRnZXQuZnJhbWUpO1xuICAgIFdpZGdldC5jb250YWluZXIuY2xhc3NOYW1lICs9IGBicmllZi13aWRnZXQtY29udGFpbmVyLSR7V2lkZ2V0LnNldHRpbmdzLnBvc2l0aW9ufWA7XG5cbiAgICAvLyBOb3RpZmljYXRpb25zXG4gICAgV2lkZ2V0Lm5vdGlmaWNhdGlvbnNJZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICBXaWRnZXQubm90aWZpY2F0aW9uc0lmcmFtZS5zY3JvbGxpbmcgPSAnbm8nO1xuXG4gICAgV2lkZ2V0Lm5vdGlmaWNhdGlvbnNGcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFdpZGdldC5ub3RpZmljYXRpb25zRnJhbWUuaWQgPSAnYnJpZWYtd2lkZ2V0LW5vdGlmaWNhdGlvbnMnO1xuICAgIFdpZGdldC5ub3RpZmljYXRpb25zRnJhbWUuYXBwZW5kQ2hpbGQoV2lkZ2V0Lm5vdGlmaWNhdGlvbnNJZnJhbWUpO1xuICAgIFdpZGdldC5ub3RpZmljYXRpb25zRnJhbWUuY2xhc3NOYW1lICs9IGBicmllZi13aWRnZXQtbm90aWZpY2F0aW9ucy0ke1dpZGdldC5zZXR0aW5ncy5wb3NpdGlvbn1gO1xuXG4gICAgLy8gT3BlbmVyXG4gICAgaWYgKHdpbmRvdy5CcmllZkVsZW1lbnRJZCkge1xuICAgICAgV2lkZ2V0LmxhdW5jaGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQod2luZG93LkJyaWVmRWxlbWVudElkIHx8ICdicmllZi1jaGF0LWJ1dHRvbicpO1xuICAgICAgY29uc3QgdW5yZWFkRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHdpbmRvdy53aW5kb3cuQnJpZWZVbnJlYWRJZCB8fCAnYnJpZWYtdW5yZWFkLWNvdW50Jyk7XG4gICAgICBpZiAodW5yZWFkRWxlbWVudCkge1xuICAgICAgICBpZiAoV2lkZ2V0LnNldHRpbmdzLnVucmVhZCA+IDApIHtcbiAgICAgICAgICB1bnJlYWRFbGVtZW50LmlubmVySFRNTCA9IFdpZGdldC5zZXR0aW5ncy51bnJlYWQ7XG4gICAgICAgICAgdW5yZWFkRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVucmVhZEVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBXaWRnZXQuZnJhbWUuY2xhc3NOYW1lICs9ICduby1idXR0b24nO1xuICAgIH0gZWxzZSB7XG4gICAgICBXaWRnZXQubGF1bmNoZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIFdpZGdldC5sYXVuY2hlci5pZCA9ICdicmllZi13aWRnZXQtbGF1bmNoZXInO1xuICAgICAgV2lkZ2V0LmxhdW5jaGVyLmNsYXNzTmFtZSArPSBgYnJpZWYtd2lkZ2V0LWxhdW5jaGVyLSR7V2lkZ2V0LnNldHRpbmdzLnBvc2l0aW9ufWA7XG4gICAgICBpZiAoV2lkZ2V0LnNldHRpbmdzLnVucmVhZCA+IDApIHtcbiAgICAgICAgV2lkZ2V0LmxhdW5jaGVyLmlubmVySFRNTCA9IGA8ZGl2IGlkPVwiYnJpZWYtd2lkZ2V0LWxhdW5jaGVyLXVucmVhZFwiPiR7V2lkZ2V0LnNldHRpbmdzLnVucmVhZH08L2Rpdj5gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoV2lkZ2V0Lm5vdGlmaWNhdGlvbnNGcmFtZSk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChXaWRnZXQuY29udGFpbmVyKTtcbiAgICBpZiAoIXdpbmRvdy5CcmllZkVsZW1lbnRJZCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChXaWRnZXQubGF1bmNoZXIpO1xuICAgIH1cbiAgfSxcbiAgY29uc3RydWN0QXBwSWZyYW1lKCkge1xuICAgIGNvbnN0IHcgPSBXaWRnZXQuaWZyYW1lLmNvbnRlbnRXaW5kb3c7XG4gICAgY29uc3QgZCA9IFdpZGdldC5pZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgICBkLm9wZW4oJ3RleHQvaHRtbCcsICdyZXBsYWNlJyk7XG4gICAgZC53cml0ZShBcHBDb250ZW50KTtcbiAgICBkLmNsb3NlKCk7XG5cbiAgICBjb25zdCBzdHlsZXMgPSBkLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgc3R5bGVzLmlubmVySFRNTCA9IEFwcFN0eWxlcy5yZXBsYWNlKC9cXCR0aGVtZUNvbG9yL2csIFdpZGdldC50aGVtZUNvbG9yKS5yZXBsYWNlKC9cXCRmb250c1BhdGgvZywgY29uZmlnLmZvbnRzUGF0aCk7XG5cbiAgICBkLmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVzKTtcblxuICAgIC8vIFNldHRpbmdzIHNjcmlwdFxuICAgIHcuc2V0dGluZ3MgPSBXaWRnZXQuc2V0dGluZ3M7XG4gICAgdy53aWRnZXRJZCA9IFdpZGdldC5pZDtcbiAgICB3LndpZGdldCA9IFdpZGdldDtcbiAgICB3LmJyaWVmVXNlciA9IFdpZGdldC51c2VyO1xuXG4gICAgY29uc3Qgc2NyaXB0ID0gZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBzY3JpcHQub25sb2FkID0gKCkgPT4ge1xuICAgICAgV2lkZ2V0LmFwcCA9IFdpZGdldC5pZnJhbWUuY29udGVudFdpbmRvdy5CcmllZkNoYXRBcHA7XG4gICAgICBXaWRnZXQub25sb2FkKCk7XG4gICAgICBXaWRnZXQuZW1pdCgnYXBwTG9hZGVkJyk7XG4gICAgfTtcbiAgICBzY3JpcHQuc3JjID0gY29uZmlnLmFwcFNjcmlwdDtcbiAgICBkLmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgfSxcbiAgY29uc3RydWN0Tm90aWZpY2F0aW9uc0lmcmFtZSgpIHtcbiAgICBjb25zdCBkID0gV2lkZ2V0Lm5vdGlmaWNhdGlvbnNJZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgICBkLmJvZHkuY2xhc3NOYW1lICs9ICdub3RpZmljYXRpb25zLWJvZHknO1xuICAgIGQuYm9keS5pbm5lckhUTUwgPSBgXG4gICAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9ucy1jbG9zZVwiPjxpIGNsYXNzPVwiaWNvbiBicmllZi1pY29uc1wiPmNsb3NlPC9pPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9ucy1pdGVtc1wiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9ucy1pbnB1dFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiTWVzc2FnZVwiICR7VXRpbHMuaXNUb3VjaCA/ICdyZWFkb25seScgOiAnJ30vPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb25zLWlucHV0LWJ1dHRvblwiPjxpIGNsYXNzPVwiaWNvbiBicmllZi1pY29uc1wiPnNlbmQ8L2k+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICBgO1xuICAgIFdpZGdldC5ub3RpZmljYXRpb25zQ29udGFpbmVyID0gZC5ib2R5LnF1ZXJ5U2VsZWN0b3IoJy5ub3RpZmljYXRpb25zJyk7XG4gICAgV2lkZ2V0Lm5vdGlmaWNhdGlvbnNJdGVtcyA9IGQuYm9keS5xdWVyeVNlbGVjdG9yKCcubm90aWZpY2F0aW9ucy1pdGVtcycpO1xuICAgIFdpZGdldC5ub3RpZmljYXRpb25zQ2xvc2VCdXR0b24gPSBkLmJvZHkucXVlcnlTZWxlY3RvcignLm5vdGlmaWNhdGlvbnMtY2xvc2UnKTtcbiAgICBpZiAoVXRpbHMuaXNUb3VjaCkgZC5ib2R5LmNsYXNzTmFtZSArPSAnIHRvdWNoJztcbiAgICBXaWRnZXQubm90aWZpY2F0aW9uc0lucHV0ID0gZC5ib2R5LnF1ZXJ5U2VsZWN0b3IoJy5ub3RpZmljYXRpb25zLWlucHV0IGlucHV0Jyk7XG5cbiAgICBXaWRnZXQubm90aWZpY2F0aW9uc0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoVXRpbHMuaXNUb3VjaCA/ICd0b3VjaHN0YXJ0JyA6ICdmb2N1cycsICgpID0+IHtcbiAgICAgIFdpZGdldC5vcGVuKFdpZGdldC5ub3RpZmljYXRpb25Db252ZXJzYXRpb25JZCwgdHJ1ZSk7XG4gICAgfSwgZmFsc2UpO1xuXG4gICAgV2lkZ2V0Lm5vdGlmaWNhdGlvbnNDbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIFdpZGdldC5ub3RpZmljYXRpb25zQ2xvc2UsIGZhbHNlKTtcbiAgICBkLmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHtcbiAgICAgIFdpZGdldC5ub3RpZmljYXRpb25zQ2xvc2VCdXR0b24uY2xhc3NOYW1lICs9ICcgbm90aWZpY2F0aW9ucy1jbG9zZS12aXNpYmxlJztcbiAgICB9LCBmYWxzZSk7XG4gICAgZC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBuZXdDbGFzc05hbWUgPSBXaWRnZXQubm90aWZpY2F0aW9uc0Nsb3NlQnV0dG9uLmNsYXNzTmFtZS5yZXBsYWNlKCcgbm90aWZpY2F0aW9ucy1jbG9zZS12aXNpYmxlJywgJycpO1xuICAgICAgV2lkZ2V0Lm5vdGlmaWNhdGlvbnNDbG9zZUJ1dHRvbi5jbGFzc05hbWUgPSBuZXdDbGFzc05hbWU7XG4gICAgfSwgZmFsc2UpO1xuXG4gICAgY29uc3Qgc3R5bGVzID0gZC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlcy5pbm5lckhUTUwgPSBBcHBTdHlsZXMucmVwbGFjZSgvXFwkdGhlbWVDb2xvci9nLCBXaWRnZXQudGhlbWVDb2xvcikucmVwbGFjZSgvXFwkZm9udHNQYXRoL2csIGNvbmZpZy5mb250c1BhdGgpO1xuICAgIGQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZXMpO1xuICB9LFxuICBpc0Z1bGxTY3JlZW4oKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ1MCB8fCB3aW5kb3cuaW5uZXJIZWlnaHQgPD0gNDIwO1xuICB9LFxuICBjaGVja0Z1bGxTY3JlZW4oKSB7XG4gICAgY29uc3QgaHRtbCA9IFdpZGdldC5pZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJyk7XG4gICAgaWYgKFdpZGdldC5pc0Z1bGxTY3JlZW4oKSkge1xuICAgICAgaWYgKGh0bWwuY2xhc3NOYW1lLmluZGV4T2YoJ2Z1bGxzY3JlZW4nKSA8IDApIHtcbiAgICAgICAgaHRtbC5jbGFzc05hbWUgKz0gJyBmdWxsc2NyZWVuJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaHRtbC5jbGFzc05hbWUgPSBodG1sLmNsYXNzTmFtZS5yZXBsYWNlKCcgZnVsbHNjcmVlbicsICcnKTtcbiAgICB9XG4gIH0sXG4gIGF0dGFjaEV2ZW50cygpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgV2lkZ2V0LmNoZWNrRnVsbFNjcmVlbiwgZmFsc2UpO1xuICAgIFdpZGdldC5sYXVuY2hlci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIFdpZGdldC50b2dnbGUsIGZhbHNlKTtcbiAgfSxcbiAgZ2V0TGFuZ3VhZ2UoKSB7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBuYXZpZ2F0b3IubGFuZ3VhZ2U7XG4gICAgaWYgKCFsYW5ndWFnZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAobGFuZ3VhZ2UuaW5kZXhPZignLScpIDwgMCkge1xuICAgICAgcmV0dXJuIGxhbmd1YWdlLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIHJldHVybiBsYW5ndWFnZS5zcGxpdCgnLScpWzBdO1xuICB9LFxuICByZXF1ZXN0U2V0dGluZ3MoY2FsbGJhY2spIHtcbiAgICBhamF4LnJlcXVlc3Qoe1xuICAgICAgdXJsOiBgJHtjb25maWcuYXBpfS93aWRnZXQvc2V0dGluZ3NgLFxuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB0eXBlOiAnUE9TVCcsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHdpZGdldElkOiBXaWRnZXQuaWQsXG4gICAgICAgIGNsaWVudElkOiBjaWQsXG4gICAgICAgIGxhbmc6IHRoaXMuZ2V0TGFuZ3VhZ2UoKSxcbiAgICAgIH0sXG4gICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgICAgc3VjY2VzcyhyZXNwKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgaWYgKHJlc3AgJiYgIXJlc3Auc3VjY2VzcykgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFdpZGdldC5zZXR0aW5ncyA9IHJlc3AuZGF0YTtcbiAgICAgICAgaWYgKFdpZGdldC5zZXR0aW5ncy50aGVtZUNvbG9yKSB7XG4gICAgICAgICAgV2lkZ2V0LnRoZW1lQ29sb3IgPSBXaWRnZXQuc2V0dGluZ3MudGhlbWVDb2xvcjtcbiAgICAgICAgfVxuICAgICAgICBpZihXaWRnZXQuc2V0dGluZ3MuaW52YWxpZENsaWVudElkKVxuICAgICAgICB7XG4gICAgICAgICAgICBMb2NhbERhdGEucmVtb3ZlKCdjbGllbnRJZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2socmVzcCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9LFxuICBpZDogd2luZG93LkJyaWVmV2lkZ2V0SWQsXG4gIHdpZGdldElkOiB3aW5kb3cuQnJpZWZXaWRnZXRJZCxcbiAgdXNlcjogd2luZG93LkJyaWVmVXNlcixcbiAgb3BlbmVkOiBmYWxzZSxcbiAgb3Blbihjb252ZXJzYXRpb25JZCwgZm9jdXMpIHtcbiAgICBjbGVhclRpbWVvdXQoV2lkZ2V0LndlbGNvbWVNZXNzYWdlVGltZW91dCk7XG4gICAgV2lkZ2V0Lm5lZWRzV2VsY29tZU1lc3NhZ2UoZmFsc2UpO1xuICAgIGlmIChXaWRnZXQub3BlbmVkKSByZXR1cm47XG4gICAgV2lkZ2V0LmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICBXaWRnZXQuY2xpZW50TGVmdCA9IFdpZGdldC5jb250YWluZXIuY2xpZW50TGVmdDtcbiAgICBXaWRnZXQuY29udGFpbmVyLmNsYXNzTmFtZSArPSAnIGJyaWVmLXdpZGdldC1jb250YWluZXItb3BlbmVkJztcbiAgICBXaWRnZXQubGF1bmNoZXIuY2xhc3NOYW1lICs9ICcgYnJpZWYtd2lkZ2V0LWxhdW5jaGVyLW9wZW5lZCc7XG4gICAgaWYgKFV0aWxzLmlzVG91Y2ggJiYgVXRpbHMuaXNJT1MgJiYgV2lkZ2V0LmlzRnVsbFNjcmVlbigpKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSArPSAnIGJyaWVmLXdpZGdldC1hY3RpdmUnO1xuICAgIH1cblxuICAgIFdpZGdldC5vcGVuZWQgPSB0cnVlO1xuICAgIGlmIChXaWRnZXQuYXBwKSB7XG4gICAgICBXaWRnZXQuYXBwLm9wZW5lZCA9IHRydWU7XG4gICAgICBXaWRnZXQuYXBwLiRlbWl0KCdvcGVuJywgY29udmVyc2F0aW9uSWQsIGZvY3VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgV2lkZ2V0Lm9uKCdhcHBMb2FkZWQnLCAoKSA9PiB7XG4gICAgICAgIFdpZGdldC5hcHAub3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgV2lkZ2V0LmFwcC4kZW1pdCgnb3BlbicsIGNvbnZlcnNhdGlvbklkLCBmb2N1cyk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCF3aW5kb3cuQnJpZWZFbGVtZW50SWQpIHtcbiAgICAgIFdpZGdldC5sYXVuY2hlci5pbm5lckhUTUwgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgd2lkZ2V0RnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnJpZWYtd2lkZ2V0LWZyYW1lJyk7XG4gICAgICBpZiAod2lkZ2V0RnJhbWUpIHtcbiAgICAgICAgLy93aWRnZXRGcmFtZS5zdHlsZS5ib3R0b20gPSAnMTVweCc7XG4gICAgICB9XG4gICAgfVxuICAgIFdpZGdldC5ub3RpZmljYXRpb25Db252ZXJzYXRpb25JZCA9IHVuZGVmaW5lZDtcbiAgICBXaWRnZXQubm90aWZpY2F0aW9uc0Nsb3NlKCk7XG4gIH0sXG4gIGNsb3NlKCkge1xuICAgIGlmICghV2lkZ2V0Lm9wZW5lZCkgcmV0dXJuO1xuICAgIGlmIChVdGlscy5pc1RvdWNoICYmIFV0aWxzLmlzSU9TICYmIFdpZGdldC5pc0Z1bGxTY3JlZW4oKSkge1xuICAgICAgaWYgKFdpZGdldC5jb250YWluZXIuY2xhc3NOYW1lLmluZGV4T2YoJ2JyaWVmLXdpZGdldC1jb250YWluZXItb3BlbmVkJykgPCAwKSByZXR1cm47XG4gICAgfVxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NOYW1lID0gZG9jdW1lbnQuYm9keS5jbGFzc05hbWUucmVwbGFjZSgnIGJyaWVmLXdpZGdldC1hY3RpdmUnLCAnJyk7XG4gICAgV2lkZ2V0LmNvbnRhaW5lci5jbGFzc05hbWUgPSBXaWRnZXQuY29udGFpbmVyLmNsYXNzTmFtZS5yZXBsYWNlKCcgYnJpZWYtd2lkZ2V0LWNvbnRhaW5lci1vcGVuZWQnLCAnJyk7XG4gICAgV2lkZ2V0LmxhdW5jaGVyLmNsYXNzTmFtZSA9IFdpZGdldC5sYXVuY2hlci5jbGFzc05hbWUucmVwbGFjZSgnIGJyaWVmLXdpZGdldC1sYXVuY2hlci1vcGVuZWQnLCAnJyk7XG4gICAgV2lkZ2V0Lm9wZW5lZCA9IGZhbHNlO1xuICAgIGlmIChXaWRnZXQuYXBwKSB7XG4gICAgICBXaWRnZXQuYXBwLm9wZW5lZCA9IGZhbHNlO1xuICAgICAgV2lkZ2V0LmFwcC4kZW1pdCgnY2xvc2UnKTtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoV2lkZ2V0LmNvbnRhaW5lci5jbGFzc05hbWUuaW5kZXhPZignYnJpZWYtd2lkZ2V0LWNvbnRhaW5lci1vcGVuZWQnKSA+PSAwKSByZXR1cm47XG4gICAgICBXaWRnZXQuY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfSwgMjAwKTtcbiAgfSxcbiAgdG9nZ2xlKCkge1xuICAgIGlmIChXaWRnZXQub3BlbmVkKSBXaWRnZXQuY2xvc2UoKTtcbiAgICBlbHNlIFdpZGdldC5vcGVuKCk7XG4gIH0sXG4gIG5vdGlmeShtZXNzYWdlID0ge30pIHtcbiAgICBjbGVhclRpbWVvdXQoV2lkZ2V0LndlbGNvbWVNZXNzYWdlVGltZW91dCk7XG4gICAgV2lkZ2V0Lm5vdGlmaWNhdGlvbkNvbnZlcnNhdGlvbklkID0gbWVzc2FnZS5jb252ZXJzYXRpb25JZDtcbiAgICBXaWRnZXQubmVlZHNXZWxjb21lTWVzc2FnZShmYWxzZSk7XG4gICAgbGV0IG1lc3NhZ2VOYW1lID0gbWVzc2FnZS5uYW1lID8gbWVzc2FnZS5uYW1lLnNwbGl0KCcgJylbMF0gOiBtZXNzYWdlLmZpcnN0TmFtZTtcbiAgICBpZiAobWVzc2FnZS5pc1RlYW1OYW1lKSB7XG4gICAgICBtZXNzYWdlTmFtZSA9IG1lc3NhZ2UubmFtZTtcbiAgICB9XG4gICAgY29uc3QgZmlsZSA9IG1lc3NhZ2UuZmlsZXMgJiYgbWVzc2FnZS5maWxlcy5sZW5ndGggPiAwID8gbWVzc2FnZS5maWxlc1swXSA6IG51bGw7XG4gICAgV2lkZ2V0Lm5vdGlmaWNhdGlvbnNJdGVtcy5pbm5lckhUTUwgPSBgXG4gICAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uXCI+XG4gICAgICAgICR7bWVzc2FnZS5waG90byA/IGA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uLWF2YXRhclwiIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTp1cmwoJHtXaWRnZXQuc2V0dGluZ3MucGhvdG9QYXRofSR7bWVzc2FnZS5waG90b30/aD02OCY0MDQ9YXZhdGFyJmF1dG9yb3RhdGU9dHJ1ZSlcIj48L2Rpdj48ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uLWF2YXRhci1zaGFkb3dcIj48L2Rpdj5gIDogJyd9XG4gICAgICAgICR7bWVzc2FnZU5hbWUgPyBgPGRpdiBjbGFzcz1cIm5vdGlmaWNhdGlvbi1uYW1lXCI+JHttZXNzYWdlTmFtZX08L2Rpdj5gIDogJyd9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24tdGV4dFwiPiR7bWVzc2FnZS50ZXh0LnJlcGxhY2UoL1xcbi9nLCAnPGJyPicpfTwvZGl2PlxuICAgICAgICAke2ZpbGUgPyBgPGltZyBzcmM9XCIke1dpZGdldC5zZXR0aW5ncy5waG90b1BhdGh9JHtmaWxlLmZpbGVuYW1lfVwiIGhlaWdodD1cIjIwMHB4XCIgLz5gIDogJyd9XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICAgIC8vV2lkZ2V0Lm5vdGlmaWNhdGlvbnNJdGVtcy5xdWVyeVNlbGVjdG9yKCcubm90aWZpY2F0aW9uJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAvL1dpZGdldC5ub3RpZmljYXRpb25zQ2xvc2UoKTtcbiAgICAgIC8vV2lkZ2V0Lm9wZW4oV2lkZ2V0Lm5vdGlmaWNhdGlvbkNvbnZlcnNhdGlvbklkKTtcbiAgICAvL30sIGZhbHNlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChXaWRnZXQubm90aWZpY2F0aW9uc0NvbnRhaW5lci5vZmZzZXRIZWlnaHQpIHtcbiAgICAgICAgV2lkZ2V0Lm5vdGlmaWNhdGlvbnNGcmFtZS5zdHlsZS5oZWlnaHQgPSBgJHtXaWRnZXQubm90aWZpY2F0aW9uc0NvbnRhaW5lci5vZmZzZXRIZWlnaHR9cHhgO1xuICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgIFdpZGdldC5ub3RpZmljYXRpb25zRnJhbWUuc3R5bGUuaGVpZ2h0ID0gYCR7V2lkZ2V0Lm5vdGlmaWNhdGlvbnNDb250YWluZXIub2Zmc2V0SGVpZ2h0ICsgMjAwfXB4YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDUwMCk7XG4gICAgV2lkZ2V0Lm5vdGlmaWNhdGlvbnNPcGVuKCk7XG4gIH0sXG4gIG5vdGlmaWNhdGlvbnNPcGVuKCkge1xuICAgIFdpZGdldC5jbGllbnRMZWZ0ID0gV2lkZ2V0Lm5vdGlmaWNhdGlvbnNGcmFtZS5jbGllbnRMZWZ0O1xuICAgIC8vV2lkZ2V0Lm5vdGlmaWNhdGlvbnNGcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICBXaWRnZXQubm90aWZpY2F0aW9uc0ZyYW1lLmNsYXNzTmFtZSArPSAnIGJyaWVmLXdpZGdldC1ub3RpZmljYXRpb25zLW9wZW5lZCc7XG4gIH0sXG4gIG5vdGlmaWNhdGlvbnNDbG9zZSgpIHtcbiAgICBpZiAoV2lkZ2V0Lm5vdGlmaWNhdGlvbnNGcmFtZS5jbGFzc05hbWUuaW5kZXhPZignYnJpZWYtd2lkZ2V0LW5vdGlmaWNhdGlvbnMtb3BlbmVkJykgPCAwKSByZXR1cm47XG4gICAgV2lkZ2V0Lm5vdGlmaWNhdGlvbnNGcmFtZS5jbGFzc05hbWUgPSBXaWRnZXQubm90aWZpY2F0aW9uc0ZyYW1lLmNsYXNzTmFtZS5yZXBsYWNlKCcgYnJpZWYtd2lkZ2V0LW5vdGlmaWNhdGlvbnMtb3BlbmVkJywgJycpO1xuICAgIC8vc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvL2lmIChXaWRnZXQubm90aWZpY2F0aW9uc0ZyYW1lLmNsYXNzTmFtZS5pbmRleE9mKCdicmllZi13aWRnZXQtbm90aWZpY2F0aW9ucy1vcGVuZWQnKSA+PSAwKSByZXR1cm47XG4gICAgICAvL1dpZGdldC5ub3RpZmljYXRpb25zRnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAvL30sIDIwMCk7XG4gIH0sXG4gIHdlbGNvbWVNZXNzYWdlVGltZW91dDogbnVsbCxcbiAgd2VsY29tZU1lc3NhZ2VTaG93bjogZmFsc2UsXG4gIG5lZWRzV2VsY29tZU1lc3NhZ2Uoc2V0KSB7XG4gICAgaWYgKHR5cGVvZiBzZXQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBHZXQgaW5mb3JtYXJ0aW9uXG4gICAgICBsZXQgbmVlZHMgPSB0cnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKExvY2FsRGF0YS5nZXQoJ3dlbGNvbWVNZXNzYWdlU2hvd24nKSB8fCBXaWRnZXQud2VsY29tZU1lc3NhZ2VTaG93biB8fCBMb2NhbERhdGEuZ2V0KCd3aWRnZXRVc2VkJykpIG5lZWRzID0gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIE5vIExTIFN1cHBvcnRcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZWVkcztcbiAgICB9XG4gICAgLy8gU2V0IHNob3duIGZsYWdcbiAgICBpZiAoc2V0ID09PSBmYWxzZSkge1xuICAgICAgV2lkZ2V0LndlbGNvbWVNZXNzYWdlU2hvd24gPSB0cnVlO1xuICAgICAgTG9jYWxEYXRhLnNldCgnd2VsY29tZU1lc3NhZ2VTaG93bicsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBXaWRnZXQud2VsY29tZU1lc3NhZ2VTaG93biA9IGZhbHNlO1xuICAgICAgTG9jYWxEYXRhLnJlbW92ZSgnd2VsY29tZU1lc3NhZ2VTaG93bicpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgc2hvd1dlbGNvbWVNZXNzYWdlKCkge1xuICAgIGlmICghV2lkZ2V0LnNldHRpbmdzIHx8ICFXaWRnZXQuc2V0dGluZ3Mud2VsY29tZU1lc3NhZ2UpIHJldHVybjtcbiAgICBpZiAoIVdpZGdldC5uZWVkc1dlbGNvbWVNZXNzYWdlKCkpIHJldHVybjtcbiAgICBsZXQgbmFtZTtcbiAgICBsZXQgcGhvdG87XG4gICAgbGV0IGlzVGVhbU5hbWU7XG4gICAgaWYgKFdpZGdldC5zZXR0aW5ncy5vbmxpbmVVc2Vycy5sZW5ndGgpIHtcbiAgICAgIG5hbWUgPSBXaWRnZXQuc2V0dGluZ3Mub25saW5lVXNlcnNbMF0uZmlyc3ROYW1lO1xuICAgICAgcGhvdG8gPSBXaWRnZXQuc2V0dGluZ3Mub25saW5lVXNlcnNbMF0ucGhvdG87XG4gICAgfSBlbHNlIGlmIChXaWRnZXQuc2V0dGluZ3MudGVhbU5hbWUpIHtcbiAgICAgIG5hbWUgPSBXaWRnZXQuc2V0dGluZ3MudGVhbU5hbWU7XG4gICAgICBpc1RlYW1OYW1lID0gdHJ1ZTtcbiAgICB9XG4gICAgV2lkZ2V0Lm5vdGlmeSh7XG4gICAgICB0ZXh0OiBXaWRnZXQuc2V0dGluZ3Mud2VsY29tZU1lc3NhZ2UsXG4gICAgICBuYW1lLFxuICAgICAgcGhvdG8sXG4gICAgICBpc1RlYW1OYW1lLFxuICAgIH0pO1xuICB9LFxuICBvbmxvYWQoKSB7XG4gICAgY29uc3QgdGltZW91dFNldHRpbmdzID0gV2lkZ2V0LnNldHRpbmdzID8gV2lkZ2V0LnNldHRpbmdzLndlbGNvbWVNZXNzYWdlVGltZW91dFNlY29uZHMgfHwgMSA6IDE7XG4gICAgV2lkZ2V0LndlbGNvbWVNZXNzYWdlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF3aW5kb3cuQnJpZWZFbGVtZW50SWQpIHtcbiAgICAgICAgV2lkZ2V0LnNob3dXZWxjb21lTWVzc2FnZSgpO1xuICAgICAgfVxuICAgIH0sIHRpbWVvdXRTZXR0aW5ncyAqIDEwMDApO1xuICAgIGNvbnN0IHF1ZXJ5RGF0YSA9IFdpZGdldC5xdWVyeURhdGE7XG4gICAgaWYgKFxuICAgICAgcXVlcnlEYXRhLmJyaWVmd2lkZ2V0aWQgPT09IFdpZGdldC5pZCAmJlxuICAgICAgcXVlcnlEYXRhLmJyaWVmY2xpZW50aWQgPT09IGNpZCAmJlxuICAgICAgcXVlcnlEYXRhLmJyaWVmY29udmVyc2F0aW9uaWQgJiZcbiAgICAgICFXaWRnZXQub3BlbmVkXG4gICAgKSB7XG4gICAgICBXaWRnZXQub3BlbihxdWVyeURhdGEuYnJpZWZjb252ZXJzYXRpb25pZCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCB0ZW1wQ29udmVyc2F0aW9uSWQgPSBMb2NhbERhdGEuZ2V0KCd0ZW1wQ29udmVyc2F0aW9uSWQnKTtcbiAgICAgICAgaWYodGVtcENvbnZlcnNhdGlvbklkKXtcbiAgICAgICAgICAgIFdpZGdldC5vcGVuKHRlbXBDb252ZXJzYXRpb25JZCk7XG4gICAgICAgICAgICBMb2NhbERhdGEucmVtb3ZlKCd0ZW1wQ29udmVyc2F0aW9uSWQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgfSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgZ2V0UXVlcnlEYXRhKCkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGRvY3VtZW50LmxvY2F0aW9uLnNlYXJjaDtcbiAgICAgICAgY29uc3QgcXVlcnlEYXRhID0ge307XG4gICAgICAgIFdpZGdldC5xdWVyeURhdGEgPSBxdWVyeURhdGE7XG4gICAgICAgIGlmICghcXVlcnkgfHwgcXVlcnkubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgIHF1ZXJ5LnNwbGl0KCc/JylbMV0uc3BsaXQoJyYnKS5mb3JFYWNoKChwYXJ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHBhcnQuc3BsaXQoJz0nKTtcbiAgICAgICAgICAgIHF1ZXJ5RGF0YVtwYXJ0c1swXV0gPSBwYXJ0c1sxXTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChxdWVyeURhdGEuYnJpZWZ3aWRnZXRpZCAmJiBxdWVyeURhdGEuYnJpZWZjbGllbnRpZCAmJiBxdWVyeURhdGEuYnJpZWZjb252ZXJzYXRpb25pZCkge1xuICAgICAgICAgICAgY2lkID0gcXVlcnlEYXRhLmJyaWVmY2xpZW50aWQ7XG4gICAgICAgICAgICBMb2NhbERhdGEuc2V0KCdjbGllbnRJZCcsIHF1ZXJ5RGF0YS5icmllZmNsaWVudGlkKTtcbiAgICAgICAgICAgIExvY2FsRGF0YS5zZXQoJ3RlbXBDb252ZXJzYXRpb25JZCcsIHF1ZXJ5RGF0YS5icmllZmNvbnZlcnNhdGlvbmlkKTtcbiAgICAgICAgfVxuICAgIH0sXG4gIGluaXQoKSB7XG4gICAgV2lkZ2V0LmdldFF1ZXJ5RGF0YSgpO1xuICAgIFdpZGdldC5yZXF1ZXN0U2V0dGluZ3MoKCkgPT4ge1xuICAgICAgV2lkZ2V0LmZpeFZpZXdwb3J0KCk7XG4gICAgICBXaWRnZXQuYWRkU3R5bGVzKCk7XG4gICAgICBXaWRnZXQuYWRkTGF5b3V0KCk7XG4gICAgICBXaWRnZXQuY29uc3RydWN0QXBwSWZyYW1lKCk7XG4gICAgICBXaWRnZXQuY29uc3RydWN0Tm90aWZpY2F0aW9uc0lmcmFtZSgpO1xuICAgICAgV2lkZ2V0LmF0dGFjaEV2ZW50cygpO1xuICAgICAgV2lkZ2V0LmNoZWNrRnVsbFNjcmVlbigpO1xuICAgIH0pO1xuICB9LFxufTtcblxuY29uc3QgQnJpZWZXaWRnZXQgPSB7XG4gIG9wZW46IFdpZGdldC5vcGVuLFxuICBjbG9zZTogV2lkZ2V0LmNsb3NlLFxufTtcblxuV2lkZ2V0LmluaXQoKTtcblxuZXhwb3J0IGRlZmF1bHQgQnJpZWZXaWRnZXQ7XG4iXSwibmFtZXMiOlsiY29uc3QiLCJsZXQiLCJjaWQiLCJjbGllbnRJZCJdLCJtYXBwaW5ncyI6Ijs7O0FBQUFBLElBQU0sS0FBSyxHQUFHO0VBQ1osT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLGNBQWMsSUFBSSxNQUFNLE1BQU0sTUFBTSxDQUFDLGFBQWEsSUFBSSxRQUFRLFlBQVksTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0VBQzdHLEtBQUssZ0JBQUEsR0FBRztJQUNOQSxJQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztJQUN0Q0EsSUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzlDQSxJQUFNLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDakRBLElBQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUMvRCxPQUFPLElBQUksSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDO0dBQy9CO0VBQ0QsUUFBUSxtQkFBQSxHQUFHO0lBQ1RBLElBQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO0lBQ3RDQSxJQUFNLElBQUksR0FBRyxFQUFFLENB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"}